diff --git a/dist/mailjet.node.js b/dist/mailjet.node.js new file mode 100644 index 0000000..2f5b537 --- /dev/null +++ b/dist/mailjet.node.js @@ -0,0 +1,3 @@ +/*! For license information please see mailjet.node.js.LICENSE.txt */ +!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):"object"==typeof exports?exports.mailjet=a():e.mailjet=a()}(this,(()=>{return e={9118:(e,a,i)=>{e.exports={parallel:i(9162),serial:i(1357),serialOrdered:i(9087)}},7651:e=>{function a(e){"function"==typeof this.jobs[e]&&this.jobs[e]()}e.exports=function(e){Object.keys(e.jobs).forEach(a.bind(e)),e.jobs={}}},5912:(e,a,i)=>{var n=i(9265);e.exports=function(e){var a=!1;return n((function(){a=!0})),function(i,o){a?e(i,o):n((function(){e(i,o)}))}}},9265:e=>{e.exports=function(e){var a="function"==typeof setImmediate?setImmediate:"object"==typeof process&&"function"==typeof process.nextTick?process.nextTick:null;a?a(e):setTimeout(e,0)}},7594:(e,a,i)=>{var n=i(5912),o=i(7651);e.exports=function(e,a,i,s){var t=i.keyedList?i.keyedList[i.index]:i.index;i.jobs[t]=function(e,a,i,o){return 2==e.length?e(i,n(o)):e(i,a,n(o))}(a,t,e[t],(function(e,a){t in i.jobs&&(delete i.jobs[t],e?o(i):i.results[t]=a,s(e,i.results))}))}},4528:e=>{e.exports=function(e,a){var i=!Array.isArray(e),n={index:0,keyedList:i||a?Object.keys(e):null,jobs:{},results:i?{}:[],size:i?Object.keys(e).length:e.length};return a&&n.keyedList.sort(i?a:function(i,n){return a(e[i],e[n])}),n}},5353:(e,a,i)=>{var n=i(7651),o=i(5912);e.exports=function(e){Object.keys(this.jobs).length&&(this.index=this.size,n(this),o(e)(null,this.results))}},9162:(e,a,i)=>{var n=i(7594),o=i(4528),s=i(5353);e.exports=function(e,a,i){for(var t=o(e);t.index<(t.keyedList||e).length;)n(e,a,t,(function(e,a){e?i(e,a):0!==Object.keys(t.jobs).length||i(null,t.results)})),t.index++;return s.bind(t,i)}},1357:(e,a,i)=>{var n=i(9087);e.exports=function(e,a,i){return n(e,a,null,i)}},9087:(e,a,i)=>{var n=i(7594),o=i(4528),s=i(5353);function t(e,a){return ea?1:0}e.exports=function(e,a,i,t){var r=o(e,i);return n(e,a,r,(function i(o,s){o?t(o,s):(r.index++,r.index<(r.keyedList||e).length?n(e,a,r,i):t(null,r.results))})),s.bind(r,t)},e.exports.ascending=t,e.exports.descending=function(e,a){return-1*t(e,a)}},9669:(e,a,i)=>{e.exports=i(1609)},7970:(e,a,i)=>{"use strict";var n=i(4867),o=i(6026),s=i(4097),t=i(5327),r=i(3685),c=i(5687),p=i(938).http,l=i(938).https,u=i(7310),d=i(9796),m=i(7288).version,f=i(7874),x=i(2648),v=i(644),h=/https:?/,b=["http:","https:","file:"];function g(e,a,i){if(e.hostname=a.host,e.host=a.host,e.port=a.port,e.path=i,a.auth){var n=Buffer.from(a.auth.username+":"+a.auth.password,"utf8").toString("base64");e.headers["Proxy-Authorization"]="Basic "+n}e.beforeRedirect=function(e){e.headers.host=e.host,g(e,a,e.href)}}e.exports=function(e){return new Promise((function(a,i){var y;function w(){e.cancelToken&&e.cancelToken.unsubscribe(y),e.signal&&e.signal.removeEventListener("abort",y)}var k=function(e){w(),a(e)},j=!1,_=function(e){w(),j=!0,i(e)},C=e.data,E=e.headers,S={};if(Object.keys(E).forEach((function(e){S[e.toLowerCase()]=e})),"user-agent"in S?E[S["user-agent"]]||delete E[S["user-agent"]]:E["User-Agent"]="axios/"+m,n.isFormData(C)&&n.isFunction(C.getHeaders))Object.assign(E,C.getHeaders());else if(C&&!n.isStream(C)){if(Buffer.isBuffer(C));else if(n.isArrayBuffer(C))C=Buffer.from(new Uint8Array(C));else{if(!n.isString(C))return _(new x("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",x.ERR_BAD_REQUEST,e));C=Buffer.from(C,"utf-8")}if(e.maxBodyLength>-1&&C.length>e.maxBodyLength)return _(new x("Request body larger than maxBodyLength limit",x.ERR_BAD_REQUEST,e));S["content-length"]||(E["Content-Length"]=C.length)}var O=void 0;e.auth&&(O=(e.auth.username||"")+":"+(e.auth.password||""));var A=s(e.baseURL,e.url),T=u.parse(A),R=T.protocol||b[0];if(-1===b.indexOf(R))return _(new x("Unsupported protocol "+R,x.ERR_BAD_REQUEST,e));if(!O&&T.auth){var P=T.auth.split(":");O=(P[0]||"")+":"+(P[1]||"")}O&&S.authorization&&delete E[S.authorization];var B=h.test(R),N=B?e.httpsAgent:e.httpAgent;try{t(T.path,e.params,e.paramsSerializer).replace(/^\?/,"")}catch(a){var z=new Error(a.message);z.config=e,z.url=e.url,z.exists=!0,_(z)}var L={path:t(T.path,e.params,e.paramsSerializer).replace(/^\?/,""),method:e.method.toUpperCase(),headers:E,agent:N,agents:{http:e.httpAgent,https:e.httpsAgent},auth:O};e.socketPath?L.socketPath=e.socketPath:(L.hostname=T.hostname,L.port=T.port);var D,F=e.proxy;if(!F&&!1!==F){var q=R.slice(0,-1)+"_proxy",M=process.env[q]||process.env[q.toUpperCase()];if(M){var U=u.parse(M),I=process.env.no_proxy||process.env.NO_PROXY,H=!0;if(I&&(H=!I.split(",").map((function(e){return e.trim()})).some((function(e){return!!e&&("*"===e||"."===e[0]&&T.hostname.substr(T.hostname.length-e.length)===e||T.hostname===e)}))),H&&(F={host:U.hostname,port:U.port,protocol:U.protocol},U.auth)){var V=U.auth.split(":");F.auth={username:V[0],password:V[1]}}}}F&&(L.headers.host=T.hostname+(T.port?":"+T.port:""),g(L,F,R+"//"+T.hostname+(T.port?":"+T.port:"")+L.path));var K=B&&(!F||h.test(F.protocol));e.transport?D=e.transport:0===e.maxRedirects?D=K?c:r:(e.maxRedirects&&(L.maxRedirects=e.maxRedirects),e.beforeRedirect&&(L.beforeRedirect=e.beforeRedirect),D=K?l:p),e.maxBodyLength>-1&&(L.maxBodyLength=e.maxBodyLength),e.insecureHTTPParser&&(L.insecureHTTPParser=e.insecureHTTPParser);var G=D.request(L,(function(a){if(!G.aborted){var i=a,s=a.req||G;if(204!==a.statusCode&&"HEAD"!==s.method&&!1!==e.decompress)switch(a.headers["content-encoding"]){case"gzip":case"compress":case"deflate":i=i.pipe(d.createUnzip()),delete a.headers["content-encoding"]}var t={status:a.statusCode,statusText:a.statusMessage,headers:a.headers,config:e,request:s};if("stream"===e.responseType)t.data=i,o(k,_,t);else{var r=[],c=0;i.on("data",(function(a){r.push(a),c+=a.length,e.maxContentLength>-1&&c>e.maxContentLength&&(j=!0,i.destroy(),_(new x("maxContentLength size of "+e.maxContentLength+" exceeded",x.ERR_BAD_RESPONSE,e,s)))})),i.on("aborted",(function(){j||(i.destroy(),_(new x("maxContentLength size of "+e.maxContentLength+" exceeded",x.ERR_BAD_RESPONSE,e,s)))})),i.on("error",(function(a){G.aborted||_(x.from(a,null,e,s))})),i.on("end",(function(){try{var a=1===r.length?r[0]:Buffer.concat(r);"arraybuffer"!==e.responseType&&(a=a.toString(e.responseEncoding),e.responseEncoding&&"utf8"!==e.responseEncoding||(a=n.stripBOM(a))),t.data=a}catch(a){_(x.from(a,null,e,t.request,t))}o(k,_,t)}))}}}));if(G.on("error",(function(a){_(x.from(a,null,e,G))})),G.on("socket",(function(e){e.setKeepAlive(!0,6e4)})),e.timeout){var $=parseInt(e.timeout,10);if(isNaN($))return void _(new x("error trying to parse `config.timeout` to int",x.ERR_BAD_OPTION_VALUE,e,G));G.setTimeout($,(function(){G.abort();var a=e.transitional||f;_(new x("timeout of "+$+"ms exceeded",a.clarifyTimeoutError?x.ETIMEDOUT:x.ECONNABORTED,e,G))}))}(e.cancelToken||e.signal)&&(y=function(e){G.aborted||(G.abort(),_(!e||e&&e.type?new v:e))},e.cancelToken&&e.cancelToken.subscribe(y),e.signal&&(e.signal.aborted?y():e.signal.addEventListener("abort",y))),n.isStream(C)?C.on("error",(function(a){_(x.from(a,e,null,G))})).pipe(G):G.end(C)}))}},5448:(e,a,i)=>{"use strict";var n=i(4867),o=i(6026),s=i(4372),t=i(5327),r=i(4097),c=i(4109),p=i(7985),l=i(7874),u=i(2648),d=i(644),m=i(205);e.exports=function(e){return new Promise((function(a,i){var f,x=e.data,v=e.headers,h=e.responseType;function b(){e.cancelToken&&e.cancelToken.unsubscribe(f),e.signal&&e.signal.removeEventListener("abort",f)}n.isFormData(x)&&n.isStandardBrowserEnv()&&delete v["Content-Type"];var g=new XMLHttpRequest;if(e.auth){var y=e.auth.username||"",w=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";v.Authorization="Basic "+btoa(y+":"+w)}var k=r(e.baseURL,e.url);function j(){if(g){var n="getAllResponseHeaders"in g?c(g.getAllResponseHeaders()):null,s={data:h&&"text"!==h&&"json"!==h?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:n,config:e,request:g};o((function(e){a(e),b()}),(function(e){i(e),b()}),s),g=null}}if(g.open(e.method.toUpperCase(),t(k,e.params,e.paramsSerializer),!0),g.timeout=e.timeout,"onloadend"in g?g.onloadend=j:g.onreadystatechange=function(){g&&4===g.readyState&&(0!==g.status||g.responseURL&&0===g.responseURL.indexOf("file:"))&&setTimeout(j)},g.onabort=function(){g&&(i(new u("Request aborted",u.ECONNABORTED,e,g)),g=null)},g.onerror=function(){i(new u("Network Error",u.ERR_NETWORK,e,g,g)),g=null},g.ontimeout=function(){var a=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||l;e.timeoutErrorMessage&&(a=e.timeoutErrorMessage),i(new u(a,n.clarifyTimeoutError?u.ETIMEDOUT:u.ECONNABORTED,e,g)),g=null},n.isStandardBrowserEnv()){var _=(e.withCredentials||p(k))&&e.xsrfCookieName?s.read(e.xsrfCookieName):void 0;_&&(v[e.xsrfHeaderName]=_)}"setRequestHeader"in g&&n.forEach(v,(function(e,a){void 0===x&&"content-type"===a.toLowerCase()?delete v[a]:g.setRequestHeader(a,e)})),n.isUndefined(e.withCredentials)||(g.withCredentials=!!e.withCredentials),h&&"json"!==h&&(g.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&g.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&g.upload&&g.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(f=function(e){g&&(i(!e||e&&e.type?new d:e),g.abort(),g=null)},e.cancelToken&&e.cancelToken.subscribe(f),e.signal&&(e.signal.aborted?f():e.signal.addEventListener("abort",f))),x||(x=null);var C=m(k);C&&-1===["http","https","file"].indexOf(C)?i(new u("Unsupported protocol "+C+":",u.ERR_BAD_REQUEST,e)):g.send(x)}))}},1609:(e,a,i)=>{"use strict";var n=i(4867),o=i(1849),s=i(321),t=i(7185),r=function e(a){var i=new s(a),r=o(s.prototype.request,i);return n.extend(r,s.prototype,i),n.extend(r,i),r.create=function(i){return e(t(a,i))},r}(i(5546));r.Axios=s,r.CanceledError=i(644),r.CancelToken=i(4972),r.isCancel=i(6502),r.VERSION=i(7288).version,r.toFormData=i(7675),r.AxiosError=i(2648),r.Cancel=r.CanceledError,r.all=function(e){return Promise.all(e)},r.spread=i(8713),r.isAxiosError=i(6268),e.exports=r,e.exports.default=r},4972:(e,a,i)=>{"use strict";var n=i(644);function o(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var a;this.promise=new Promise((function(e){a=e}));var i=this;this.promise.then((function(e){if(i._listeners){var a,n=i._listeners.length;for(a=0;a{"use strict";var n=i(2648);function o(e){n.call(this,null==e?"canceled":e,n.ERR_CANCELED),this.name="CanceledError"}i(4867).inherits(o,n,{__CANCEL__:!0}),e.exports=o},6502:e=>{"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},321:(e,a,i)=>{"use strict";var n=i(4867),o=i(5327),s=i(782),t=i(3572),r=i(7185),c=i(4097),p=i(4875),l=p.validators;function u(e){this.defaults=e,this.interceptors={request:new s,response:new s}}u.prototype.request=function(e,a){"string"==typeof e?(a=a||{}).url=e:a=e||{},(a=r(this.defaults,a)).method?a.method=a.method.toLowerCase():this.defaults.method?a.method=this.defaults.method.toLowerCase():a.method="get";var i=a.transitional;void 0!==i&&p.assertOptions(i,{silentJSONParsing:l.transitional(l.boolean),forcedJSONParsing:l.transitional(l.boolean),clarifyTimeoutError:l.transitional(l.boolean)},!1);var n=[],o=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(a)||(o=o&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var s,c=[];if(this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)})),!o){var u=[t,void 0];for(Array.prototype.unshift.apply(u,n),u=u.concat(c),s=Promise.resolve(a);u.length;)s=s.then(u.shift(),u.shift());return s}for(var d=a;n.length;){var m=n.shift(),f=n.shift();try{d=m(d)}catch(e){f(e);break}}try{s=t(d)}catch(e){return Promise.reject(e)}for(;c.length;)s=s.then(c.shift(),c.shift());return s},u.prototype.getUri=function(e){e=r(this.defaults,e);var a=c(e.baseURL,e.url);return o(a,e.params,e.paramsSerializer)},n.forEach(["delete","get","head","options"],(function(e){u.prototype[e]=function(a,i){return this.request(r(i||{},{method:e,url:a,data:(i||{}).data}))}})),n.forEach(["post","put","patch"],(function(e){function a(a){return function(i,n,o){return this.request(r(o||{},{method:e,headers:a?{"Content-Type":"multipart/form-data"}:{},url:i,data:n}))}}u.prototype[e]=a(),u.prototype[e+"Form"]=a(!0)})),e.exports=u},2648:(e,a,i)=>{"use strict";var n=i(4867);function o(e,a,i,n,o){Error.call(this),this.message=e,this.name="AxiosError",a&&(this.code=a),i&&(this.config=i),n&&(this.request=n),o&&(this.response=o)}n.inherits(o,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var s=o.prototype,t={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED"].forEach((function(e){t[e]={value:e}})),Object.defineProperties(o,t),Object.defineProperty(s,"isAxiosError",{value:!0}),o.from=function(e,a,i,t,r,c){var p=Object.create(s);return n.toFlatObject(e,p,(function(e){return e!==Error.prototype})),o.call(p,e.message,a,i,t,r),p.name=e.name,c&&Object.assign(p,c),p},e.exports=o},782:(e,a,i)=>{"use strict";var n=i(4867);function o(){this.handlers=[]}o.prototype.use=function(e,a,i){return this.handlers.push({fulfilled:e,rejected:a,synchronous:!!i&&i.synchronous,runWhen:i?i.runWhen:null}),this.handlers.length-1},o.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},o.prototype.forEach=function(e){n.forEach(this.handlers,(function(a){null!==a&&e(a)}))},e.exports=o},4097:(e,a,i)=>{"use strict";var n=i(1793),o=i(7303);e.exports=function(e,a){return e&&!n(a)?o(e,a):a}},3572:(e,a,i)=>{"use strict";var n=i(4867),o=i(8527),s=i(6502),t=i(5546),r=i(644);function c(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new r}e.exports=function(e){return c(e),e.headers=e.headers||{},e.data=o.call(e,e.data,e.headers,e.transformRequest),e.headers=n.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),n.forEach(["delete","get","head","post","put","patch","common"],(function(a){delete e.headers[a]})),(e.adapter||t.adapter)(e).then((function(a){return c(e),a.data=o.call(e,a.data,a.headers,e.transformResponse),a}),(function(a){return s(a)||(c(e),a&&a.response&&(a.response.data=o.call(e,a.response.data,a.response.headers,e.transformResponse))),Promise.reject(a)}))}},7185:(e,a,i)=>{"use strict";var n=i(4867);e.exports=function(e,a){a=a||{};var i={};function o(e,a){return n.isPlainObject(e)&&n.isPlainObject(a)?n.merge(e,a):n.isPlainObject(a)?n.merge({},a):n.isArray(a)?a.slice():a}function s(i){return n.isUndefined(a[i])?n.isUndefined(e[i])?void 0:o(void 0,e[i]):o(e[i],a[i])}function t(e){if(!n.isUndefined(a[e]))return o(void 0,a[e])}function r(i){return n.isUndefined(a[i])?n.isUndefined(e[i])?void 0:o(void 0,e[i]):o(void 0,a[i])}function c(i){return i in a?o(e[i],a[i]):i in e?o(void 0,e[i]):void 0}var p={url:t,method:t,data:t,baseURL:r,transformRequest:r,transformResponse:r,paramsSerializer:r,timeout:r,timeoutMessage:r,withCredentials:r,adapter:r,responseType:r,xsrfCookieName:r,xsrfHeaderName:r,onUploadProgress:r,onDownloadProgress:r,decompress:r,maxContentLength:r,maxBodyLength:r,beforeRedirect:r,transport:r,httpAgent:r,httpsAgent:r,cancelToken:r,socketPath:r,responseEncoding:r,validateStatus:c};return n.forEach(Object.keys(e).concat(Object.keys(a)),(function(e){var a=p[e]||s,o=a(e);n.isUndefined(o)&&a!==c||(i[e]=o)})),i}},6026:(e,a,i)=>{"use strict";var n=i(2648);e.exports=function(e,a,i){var o=i.config.validateStatus;i.status&&o&&!o(i.status)?a(new n("Request failed with status code "+i.status,[n.ERR_BAD_REQUEST,n.ERR_BAD_RESPONSE][Math.floor(i.status/100)-4],i.config,i.request,i)):e(i)}},8527:(e,a,i)=>{"use strict";var n=i(4867),o=i(5546);e.exports=function(e,a,i){var s=this||o;return n.forEach(i,(function(i){e=i.call(s,e,a)})),e}},3784:(e,a,i)=>{e.exports=i(6882)},5546:(e,a,i)=>{"use strict";var n=i(4867),o=i(6016),s=i(2648),t=i(7874),r=i(7675),c={"Content-Type":"application/x-www-form-urlencoded"};function p(e,a){!n.isUndefined(e)&&n.isUndefined(e["Content-Type"])&&(e["Content-Type"]=a)}var l,u={transitional:t,adapter:("undefined"!=typeof XMLHttpRequest?l=i(5448):"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process)&&(l=i(7970)),l),transformRequest:[function(e,a){if(o(a,"Accept"),o(a,"Content-Type"),n.isFormData(e)||n.isArrayBuffer(e)||n.isBuffer(e)||n.isStream(e)||n.isFile(e)||n.isBlob(e))return e;if(n.isArrayBufferView(e))return e.buffer;if(n.isURLSearchParams(e))return p(a,"application/x-www-form-urlencoded;charset=utf-8"),e.toString();var i,s=n.isObject(e),t=a&&a["Content-Type"];if((i=n.isFileList(e))||s&&"multipart/form-data"===t){var c=this.env&&this.env.FormData;return r(i?{"files[]":e}:e,c&&new c)}return s||"application/json"===t?(p(a,"application/json"),function(e,a,i){if(n.isString(e))try{return(a||JSON.parse)(e),n.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(i||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var a=this.transitional||u.transitional,i=a&&a.silentJSONParsing,o=a&&a.forcedJSONParsing,t=!i&&"json"===this.responseType;if(t||o&&n.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(t){if("SyntaxError"===e.name)throw s.from(e,s.ERR_BAD_RESPONSE,this,null,this.response);throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:i(3784)},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};n.forEach(["delete","get","head"],(function(e){u.headers[e]={}})),n.forEach(["post","put","patch"],(function(e){u.headers[e]=n.merge(c)})),e.exports=u},7874:e=>{"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},7288:e=>{e.exports={version:"0.27.2"}},1849:e=>{"use strict";e.exports=function(e,a){return function(){for(var i=new Array(arguments.length),n=0;n{"use strict";var n=i(4867);function o(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,a,i){if(!a)return e;var s;if(i)s=i(a);else if(n.isURLSearchParams(a))s=a.toString();else{var t=[];n.forEach(a,(function(e,a){null!=e&&(n.isArray(e)?a+="[]":e=[e],n.forEach(e,(function(e){n.isDate(e)?e=e.toISOString():n.isObject(e)&&(e=JSON.stringify(e)),t.push(o(a)+"="+o(e))})))})),s=t.join("&")}if(s){var r=e.indexOf("#");-1!==r&&(e=e.slice(0,r)),e+=(-1===e.indexOf("?")?"?":"&")+s}return e}},7303:e=>{"use strict";e.exports=function(e,a){return a?e.replace(/\/+$/,"")+"/"+a.replace(/^\/+/,""):e}},4372:(e,a,i)=>{"use strict";var n=i(4867);e.exports=n.isStandardBrowserEnv()?{write:function(e,a,i,o,s,t){var r=[];r.push(e+"="+encodeURIComponent(a)),n.isNumber(i)&&r.push("expires="+new Date(i).toGMTString()),n.isString(o)&&r.push("path="+o),n.isString(s)&&r.push("domain="+s),!0===t&&r.push("secure"),document.cookie=r.join("; ")},read:function(e){var a=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return a?decodeURIComponent(a[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},1793:e=>{"use strict";e.exports=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}},6268:(e,a,i)=>{"use strict";var n=i(4867);e.exports=function(e){return n.isObject(e)&&!0===e.isAxiosError}},7985:(e,a,i)=>{"use strict";var n=i(4867);e.exports=n.isStandardBrowserEnv()?function(){var e,a=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");function o(e){var n=e;return a&&(i.setAttribute("href",n),n=i.href),i.setAttribute("href",n),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}return e=o(window.location.href),function(a){var i=n.isString(a)?o(a):a;return i.protocol===e.protocol&&i.host===e.host}}():function(){return!0}},6016:(e,a,i)=>{"use strict";var n=i(4867);e.exports=function(e,a){n.forEach(e,(function(i,n){n!==a&&n.toUpperCase()===a.toUpperCase()&&(e[a]=i,delete e[n])}))}},4109:(e,a,i)=>{"use strict";var n=i(4867),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var a,i,s,t={};return e?(n.forEach(e.split("\n"),(function(e){if(s=e.indexOf(":"),a=n.trim(e.substr(0,s)).toLowerCase(),i=n.trim(e.substr(s+1)),a){if(t[a]&&o.indexOf(a)>=0)return;t[a]="set-cookie"===a?(t[a]?t[a]:[]).concat([i]):t[a]?t[a]+", "+i:i}})),t):t}},205:e=>{"use strict";e.exports=function(e){var a=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return a&&a[1]||""}},8713:e=>{"use strict";e.exports=function(e){return function(a){return e.apply(null,a)}}},7675:(e,a,i)=>{"use strict";var n=i(4867);e.exports=function(e,a){a=a||new FormData;var i=[];function o(e){return null===e?"":n.isDate(e)?e.toISOString():n.isArrayBuffer(e)||n.isTypedArray(e)?"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}return function e(s,t){if(n.isPlainObject(s)||n.isArray(s)){if(-1!==i.indexOf(s))throw Error("Circular reference detected in "+t);i.push(s),n.forEach(s,(function(i,s){if(!n.isUndefined(i)){var r,c=t?t+"."+s:s;if(i&&!t&&"object"==typeof i)if(n.endsWith(s,"{}"))i=JSON.stringify(i);else if(n.endsWith(s,"[]")&&(r=n.toArray(i)))return void r.forEach((function(e){!n.isUndefined(e)&&a.append(c,o(e))}));e(i,c)}})),i.pop()}else a.append(t,o(s))}(e),a}},4875:(e,a,i)=>{"use strict";var n=i(7288).version,o=i(2648),s={};["object","boolean","number","function","string","symbol"].forEach((function(e,a){s[e]=function(i){return typeof i===e||"a"+(a<1?"n ":" ")+e}}));var t={};s.transitional=function(e,a,i){function s(e,a){return"[Axios v"+n+"] Transitional option '"+e+"'"+a+(i?". "+i:"")}return function(i,n,r){if(!1===e)throw new o(s(n," has been removed"+(a?" in "+a:"")),o.ERR_DEPRECATED);return a&&!t[n]&&(t[n]=!0,console.warn(s(n," has been deprecated since v"+a+" and will be removed in the near future"))),!e||e(i,n,r)}},e.exports={assertOptions:function(e,a,i){if("object"!=typeof e)throw new o("options must be an object",o.ERR_BAD_OPTION_VALUE);for(var n=Object.keys(e),s=n.length;s-- >0;){var t=n[s],r=a[t];if(r){var c=e[t],p=void 0===c||r(c,t,e);if(!0!==p)throw new o("option "+t+" must be "+p,o.ERR_BAD_OPTION_VALUE)}else if(!0!==i)throw new o("Unknown option "+t,o.ERR_BAD_OPTION)}},validators:s}},4867:(e,a,i)=>{"use strict";var n,o=i(1849),s=Object.prototype.toString,t=(n=Object.create(null),function(e){var a=s.call(e);return n[a]||(n[a]=a.slice(8,-1).toLowerCase())});function r(e){return e=e.toLowerCase(),function(a){return t(a)===e}}function c(e){return Array.isArray(e)}function p(e){return void 0===e}var l=r("ArrayBuffer");function u(e){return null!==e&&"object"==typeof e}function d(e){if("object"!==t(e))return!1;var a=Object.getPrototypeOf(e);return null===a||a===Object.prototype}var m=r("Date"),f=r("File"),x=r("Blob"),v=r("FileList");function h(e){return"[object Function]"===s.call(e)}var b=r("URLSearchParams");function g(e,a){if(null!=e)if("object"!=typeof e&&(e=[e]),c(e))for(var i=0,n=e.length;i0;)t[s=n[o]]||(a[s]=e[s],t[s]=!0);e=Object.getPrototypeOf(e)}while(e&&(!i||i(e,a))&&e!==Object.prototype);return a},kindOf:t,kindOfTest:r,endsWith:function(e,a,i){e=String(e),(void 0===i||i>e.length)&&(i=e.length),i-=a.length;var n=e.indexOf(a,i);return-1!==n&&n===i},toArray:function(e){if(!e)return null;var a=e.length;if(p(a))return null;for(var i=new Array(a);a-- >0;)i[a]=e[a];return i},isTypedArray:w,isFileList:v}},1076:function(e,a,i){"use strict";function n(e){return n="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},n(e)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var a,i=1,n=arguments.length;i{"use strict";var i;Object.defineProperty(a,"__esModule",{value:!0}),function(e){e.Get="get",e.Post="post",e.Put="put",e.Delete="delete"}(i||(i={})),a.default=i},4771:function(e,a,i){"use strict";function n(e){return n="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},n(e)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var a,i=1,n=arguments.length;i0&&o[o.length-1])||6!==s[0]&&2!==s[0])){t=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]-1?"text/plain":"application/json"},e.prototype.getRequestBody=function(e){return[x.default.Put,x.default.Post,x.default.Delete].includes(this.method)?e:{}},e.prototype.buildFullUrl=function(){var a,i,n=this.client.getConfig(),o=null!==(a=this.config.host)&&void 0!==a?a:n.host,s=null!==(i=this.config.version)&&void 0!==i?i:n.version;return(0,u.default)(e.protocol,o,s,this.subPath,this.url)},e.prototype.buildSubPath=function(){if(this.actionPath){var e="contactslist"===this.resource&&"csvdata/text:plain"===this.actionPath,a="batchjob"===this.resource&&"csverror/text:csv"===this.actionPath;return e||a?"DATA":this.subPath}var i="send"===this.resource,n=this.resource.indexOf("sms")>-1;return i||n?"":"REST"},e.prototype.makeRequest=function(a,i,n){var s,t={url:a,params:n,data:this.getRequestBody(i),method:this.method,responseType:"json",headers:{"User-Agent":this.getUserAgent(),"Content-Type":this.getContentType(a)},transformResponse:function(a){var i="string"==typeof a,n="json"===this.responseType;return a&&i&&n?e.parseToJSONb(a):a}};e.isBrowser()&&(t.headers["X-User-Agent"]=t.headers["User-Agent"]);var r=this.getCredentials();r.apiToken?t.headers.Authorization="Bearer ".concat(r.apiToken):t.auth={username:r.apiKey,password:r.apiSecret};var c=this.client.getConfig(),p=this.client.getOptions();p.timeout&&(t.timeout=p.timeout),p.proxy&&(t.proxy=p.proxy),p.headers&&Object.keys(p.headers).length>0&&(t.headers=o(o({},t.headers),p.headers));var l=null!==(s=this.config.output)&&void 0!==s?s:c.output;return l&&(t.responseType=l),p.maxBodyLength&&(t.maxBodyLength=p.maxBodyLength),p.maxContentLength&&(t.maxContentLength=p.maxContentLength),(0,m.default)(t)},e.prototype.setBaseURL=function(e){return this.url=e.toLowerCase(),this},e.prototype.id=function(e){if(!["string","number"].includes(n(e)))throw new Error('Argument "value" must be string or number');return this.url=(0,u.default)(this.url,e.toString()),this},e.prototype.action=function(e){if("string"!=typeof e)throw new Error('Argument "name" must be string');switch(this.actionPath=e.toLowerCase(),this.actionPath){case"csvdata":this.actionPath="csvdata/text:plain";break;case"csverror":this.actionPath="csverror/text:csv"}return this.url=(0,u.default)(this.url,this.actionPath),this.subPath=this.buildSubPath(),this},e.prototype.request=function(e,a,i){var n,o,s,t,r;return void 0===e&&(e={}),void 0===a&&(a={}),void 0===i&&(i=!0),c(this,void 0,void 0,(function(){var c,l,u,d,x,v,h,b,g,y;return p(this,(function(p){switch(p.label){case 0:if(c=this.buildFullUrl(),this.setBaseURL(this.resource),!i)return[2,{body:b=this.getRequestBody(e),params:a,url:c}];p.label=1;case 1:return p.trys.push([1,3,,4]),[4,this.makeRequest(c,e,a)];case 2:return[2,{response:l=p.sent(),body:l.data}];case 3:if((u=p.sent())instanceof m.AxiosError)throw(d=new Error).code=u.code,d.config=u.config,u.response?(x=u.response,v=x.status,h=x.statusText,b=x.data,d.response=u.response,d.statusCode=v,d.statusText=h,g=null!==(n=null==b?void 0:b.ErrorMessage)&&void 0!==n?n:u.message,d.originalMessage=g,d.message='Unsuccessful: Status Code: "'.concat(d.statusCode,'" Message: "').concat(g,'"'),b&&("string"==typeof(y=null===(r=null===(t=null===(s=null===(o=b.Messages)||void 0===o?void 0:o[0])||void 0===s?void 0:s.Errors)||void 0===t?void 0:t[0])||void 0===r?void 0:r.ErrorMessage)&&(d.message+=";\n".concat(y)),(0,f.setValueIfNotNil)(d,"ErrorMessage",b.ErrorMessage),(0,f.setValueIfNotNil)(d,"ErrorCode",b.ErrorCode),(0,f.setValueIfNotNil)(d,"ErrorIdentifier",b.ErrorIdentifier),(0,f.setValueIfNotNil)(d,"ErrorRelatedTo",b.ErrorRelatedTo))):(d.response=null,d.statusCode=null,d.statusText=null,d.originalMessage=u.message,d.message='Unsuccessful: Error Code: "'.concat(d.code,'" Message: "').concat(u.message,'"')),d;throw u;case 4:return[2]}}))}))},e.parseToJSONb=function(e){if("string"!=typeof e)throw new Error('Argument "text" must be string');var a;try{a=h.parse(e)}catch(e){a={}}return a},e.isBrowser=function(){return"object"===("undefined"==typeof window?"undefined":n(window))},e.protocol="https://",e}();a.default=b},5917:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.SentCampaign=a.DraftCampaign=void 0,function(e){!function(e){e.Tool2="tool2",e.HTML2="html2",e.MJML="mjml"}(e.EditMode||(e.EditMode={})),function(e){e[e.AXCanceled=-3]="AXCanceled",e[e.Deleted=-2]="Deleted",e[e.Archived=-1]="Archived",e[e.Draft=0]="Draft",e[e.Programmed=1]="Programmed",e[e.Sent=2]="Sent",e[e.AXTested=3]="AXTested",e[e.AXSelected=4]="AXSelected"}(e.CampaignDraftStatus||(e.CampaignDraftStatus={})),function(e){e.AXCancelled="AXCancelled",e.Deleted="Deleted",e.Archived="Archived",e.Draft="Draft",e.Programmed="Programmed",e.Sent="Sent",e.AXTested="AXTested",e.AXSelected="AXSelected"}(e.CampaignDraftSendingStatus||(e.CampaignDraftSendingStatus={}))}(a.DraftCampaign||(a.DraftCampaign={})),function(e){!function(e){e[e.Transactional=1]="Transactional",e[e.Marketing=2]="Marketing",e[e.Unknown=3]="Unknown"}(e.CampaignType||(e.CampaignType={}))}(a.SentCampaign||(a.SentCampaign={}))},7566:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Common=void 0,function(e){!function(e){e.Day="Day",e.Week="Week",e.Month="Month",e.Year="Year"}(e.Period||(e.Period={}))}(a.Common||(a.Common={}))},235:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.ContactProperties=a.BulkContactManagement=void 0,function(e){!function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.Remove="remove",e.UnSub="unsub"}(e.ManageContactsAction||(e.ManageContactsAction={})),function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.UnSub="unsub",e.DuplicateOverride="duplicate-override",e.DuplicateNoOverride="duplicate-no-override"}(e.ImportListAction||(e.ImportListAction={})),function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.Remove="remove",e.UnSub="unsub",e.ExcludeMarketing="excludemarketing",e.IncludeMarketing="includemarketing"}(e.ImportCSVMethod||(e.ImportCSVMethod={})),function(e){e.Upload="Upload",e.Completed="Completed",e.Abort="Abort"}(e.CSVImportStatus||(e.CSVImportStatus={})),function(e){e.Completed="Completed",e.InProgress="In Progress",e.Error="Error"}(e.JobStatus||(e.JobStatus={}))}(a.BulkContactManagement||(a.BulkContactManagement={})),function(e){!function(e){e.Str="str",e.Int="int",e.Float="float",e.Bool="bool",e.DateTime="datetime"}(e.DataType||(e.DataType={})),function(e){e.Static="static",e.Historic="historic"}(e.NameSpace||(e.NameSpace={}))}(a.ContactProperties||(a.ContactProperties={}))},8354:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Message=void 0,function(e){!function(e){e[e.UserUnknown=1]="UserUnknown",e[e.MailboxInactive=2]="MailboxInactive",e[e.QuotaExceeded=3]="QuotaExceeded",e[e.InvalidDomain=4]="InvalidDomain",e[e.NoMailHost=5]="NoMailHost",e[e.RelayOrAccessDenied=6]="RelayOrAccessDenied",e[e.SenderBlocked=7]="SenderBlocked",e[e.ContentBlocked=8]="ContentBlocked",e[e.PolicyIssue=9]="PolicyIssue",e[e.SystemIssue=10]="SystemIssue",e[e.ProtocolIssue=11]="ProtocolIssue",e[e.ConnectionIssue=12]="ConnectionIssue",e[e.GreyListed=13]="GreyListed",e[e.PreBlocked=14]="PreBlocked",e[e.DuplicateInCampaign=15]="DuplicateInCampaign",e[e.SpamPreBlocked=16]="SpamPreBlocked",e[e.BadOrEmptyTemplate=17]="BadOrEmptyTemplate",e[e.ErrorInTemplateLanguage=18]="ErrorInTemplateLanguage",e[e.TypoFix=19]="TypoFix",e[e.BlackListed=20]="BlackListed",e[e.SpamReporter=21]="SpamReporter"}(e.MessageState||(e.MessageState={})),function(e){e[e.Transactional=1]="Transactional",e[e.Marketing=2]="Marketing",e[e.Unknown=3]="Unknown"}(e.FromType||(e.FromType={})),function(e){e[e.Processed=0]="Processed",e[e.Queued=1]="Queued",e[e.Sent=2]="Sent",e[e.Opened=3]="Opened",e[e.Clicked=4]="Clicked",e[e.Bounce=5]="Bounce",e[e.Spam=6]="Spam",e[e.Unsub=7]="Unsub",e[e.Blocked=8]="Blocked",e[e.SoftBounce=9]="SoftBounce",e[e.HardBounce=10]="HardBounce",e[e.Deferred=11]="Deferred"}(e.MessageStatus||(e.MessageStatus={})),function(e){e.Unknown="unknown",e.Queued="queued",e.Sent="sent",e.Opened="opened",e.Clicked="clicked",e.Bounce="bounce",e.Spam="spam",e.Unsub="unsub",e.Blocked="blocked",e.HardBounced="hardbounced",e.SoftBounced="softbounced",e.Deferred="deferred"}(e.CurrentMessageStatus||(e.CurrentMessageStatus={})),function(e){e.Sent="sent",e.Opened="opened",e.Clicked="clicked",e.Bounced="bounced",e.Blocked="blocked",e.Unsub="unsub",e.Spam="spam"}(e.EventType||(e.EventType={}))}(a.Message||(a.Message={}))},3635:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Segmentation=void 0,function(e){!function(e){e.Used="used",e.UnUsed="unused",e.Deleted="deleted"}(e.SegmentStatus||(e.SegmentStatus={}))}(a.Segmentation||(a.Segmentation={}))},7410:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.SendEmailV3_1=void 0,function(e){!function(e){e.AccountDefault="account_default",e.Disabled="disabled",e.Enabled="enabled"}(e.TrackOpens||(e.TrackOpens={})),function(e){e.AccountDefault="account_default",e.Disabled="disabled",e.Enabled="enabled"}(e.TrackClicks||(e.TrackClicks={})),function(e){e.Success="success",e.Error="error"}(e.ResponseStatus||(e.ResponseStatus={}))}(a.SendEmailV3_1||(a.SendEmailV3_1={}))},2256:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.DNS=a.Sender=void 0,function(e){!function(e){e.Transactional="transactional",e.Bulk="bulk",e.Unknown="unknown"}(e.EmailType||(e.EmailType={})),function(e){e.Inactive="Inactive",e.Active="Active",e.Deleted="Deleted"}(e.SenderStatus||(e.SenderStatus={}))}(a.Sender||(a.Sender={})),function(e){!function(e){e.OK="OK",e.Error="Error",e.NotChecked="Not checked"}(e.DKIMConfigurationCheckStatus||(e.DKIMConfigurationCheckStatus={})),function(e){e.OK="OK",e.Error="Error"}(e.DKIMConfigurationStatus||(e.DKIMConfigurationStatus={})),function(e){e.OK="OK",e.Error="Error",e.NotChecked="Not checked",e.NotFound="Not found"}(e.SPFConfigurationCheckStatus||(e.SPFConfigurationCheckStatus={})),function(e){e.OK="OK",e.Error="Error"}(e.SPFConfigurationStatus||(e.SPFConfigurationStatus={}))}(a.DNS||(a.DNS={}))},5295:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.APIKeyConfiguration=void 0,function(e){!function(e){e.Normal="Normal",e.SoftLock="Softlock",e.HardLock="Hardlock"}(e.RunLevel||(e.RunLevel={}))}(a.APIKeyConfiguration||(a.APIKeyConfiguration={}))},6083:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Statistic=void 0,function(e){!function(e){e.SentCampaign="Campaign",e.ABTesting="AX",e.Draft="NL"}(e.CampaignOverviewIDType||(e.CampaignOverviewIDType={})),function(e){e.Tool="tool",e.HTML="html",e.Tool2="tool2",e.HTML2="html2",e.MJML="mjml"}(e.CampaignOverviewEditMode||(e.CampaignOverviewEditMode={})),function(e){e.Full="full",e.Unknown="unknown"}(e.CampaignOverviewEditType||(e.CampaignOverviewEditType={})),function(e){e.Campaign="Campaign",e.APIKey="APIKey",e.List="List",e.Sender="Sender"}(e.CounterSource||(e.CounterSource={})),function(e){e.Highest="Highest",e.Hour="Hour",e.Day="Day",e.Lifetime="Lifetime"}(e.CounterResolution||(e.CounterResolution={})),function(e){e.Message="Message",e.Event="Event"}(e.CounterTiming||(e.CounterTiming={})),function(e){e.Open="open",e.Click="click"}(e.EmailEvent||(e.EmailEvent={}))}(a.Statistic||(a.Statistic={}))},4098:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Template=void 0,function(e){!function(e){e.Full="full",e.Basic="basic",e.NewsLetter="newsletter",e.ECommerce="e-commerce",e.Events="events",e.Travel="travel",e.Sports="sports",e.Welcome="welcome",e.ContactPropertyUpdate="contact-property-update",e.Support="support",e.Invoice="invoice",e.Anniversary="anniversary",e.Account="account",e.Activation="activation"}(e.Categories||(e.Categories={})),function(e){e.ContainsAny="containsany",e.ContainsAll="containsall",e.IsSubSet="issubset"}(e.CategoriesSelectionMethod||(e.CategoriesSelectionMethod={})),function(e){e[e.DragAndDropBuilder=1]="DragAndDropBuilder",e[e.HTMLBuilder=2]="HTMLBuilder",e[e.SavedSectionBuilder=3]="SavedSectionBuilder",e[e.MJMLBuilder=4]="MJMLBuilder"}(e.EditMode||(e.EditMode={})),function(e){e.ApiKey="apikey",e.User="user",e.Global="global"}(e.OwnerType||(e.OwnerType={})),function(e){e.Marketing="marketing",e.Transactional="transactional",e.Automation="automation"}(e.Purposes||(e.Purposes={})),function(e){e.ContainsAny="containsany",e.ContainsAll="containsall",e.IsSubSet="issubset"}(e.PurposesSelectionMethod||(e.PurposesSelectionMethod={}))}(a.Template||(a.Template={}))},1174:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.Webhook=void 0,function(e){!function(e){e.Open="open",e.Click="click",e.Bounce="bounce",e.Spam="spam",e.Blocked="blocked",e.UnSub="unsub",e.Sent="sent"}(e.EventType||(e.EventType={})),function(e){e[e.Click=1]="Click",e[e.Bounce=2]="Bounce",e[e.Spam=3]="Spam",e[e.Blocked=4]="Blocked",e[e.Unsubscribe=5]="Unsubscribe",e[e.Open=6]="Open",e[e.Sent=7]="Sent"}(e.EventTypeValue||(e.EventTypeValue={})),function(e){e.Dead="dead",e.Alive="alive"}(e.Status||(e.Status={}))}(a.Webhook||(a.Webhook={}))},4310:(e,a,i)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.APIKeyConfiguration=a.DNS=a.Sender=a.Webhook=a.Statistic=a.Template=a.Segmentation=a.SentCampaign=a.DraftCampaign=a.ContactProperties=a.BulkContactManagement=a.Message=a.SendEmailV3_1=a.Common=void 0;var n=i(7566);Object.defineProperty(a,"Common",{enumerable:!0,get:function(){return n.Common}});var o=i(7410);Object.defineProperty(a,"SendEmailV3_1",{enumerable:!0,get:function(){return o.SendEmailV3_1}});var s=i(8354);Object.defineProperty(a,"Message",{enumerable:!0,get:function(){return s.Message}});var t=i(235);Object.defineProperty(a,"BulkContactManagement",{enumerable:!0,get:function(){return t.BulkContactManagement}}),Object.defineProperty(a,"ContactProperties",{enumerable:!0,get:function(){return t.ContactProperties}});var r=i(5917);Object.defineProperty(a,"DraftCampaign",{enumerable:!0,get:function(){return r.DraftCampaign}}),Object.defineProperty(a,"SentCampaign",{enumerable:!0,get:function(){return r.SentCampaign}});var c=i(3635);Object.defineProperty(a,"Segmentation",{enumerable:!0,get:function(){return c.Segmentation}});var p=i(4098);Object.defineProperty(a,"Template",{enumerable:!0,get:function(){return p.Template}});var l=i(6083);Object.defineProperty(a,"Statistic",{enumerable:!0,get:function(){return l.Statistic}});var u=i(1174);Object.defineProperty(a,"Webhook",{enumerable:!0,get:function(){return u.Webhook}});var d=i(2256);Object.defineProperty(a,"Sender",{enumerable:!0,get:function(){return d.Sender}}),Object.defineProperty(a,"DNS",{enumerable:!0,get:function(){return d.DNS}});var m=i(5295);Object.defineProperty(a,"APIKeyConfiguration",{enumerable:!0,get:function(){return m.APIKeyConfiguration}})},9006:function(e,a,i){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0}),a.setValueIfNotNil=a.isPureObject=a.isUndefined=a.isNull=a.isNil=void 0;var o=n(i(1808));a.isNil=o.default;var s=n(i(7376));a.isNull=s.default;var t=n(i(5034));a.isUndefined=t.default;var r=n(i(1818));a.isPureObject=r.default;var c=n(i(1190));a.setValueIfNotNil=c.default},1808:function(e,a,i){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});var o=n(i(7376)),s=n(i(5034));a.default=function(e){return(0,s.default)(e)||(0,o.default)(e)}},7376:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return null===e}},1818:(e,a)=>{"use strict";function i(e){return i="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},i(e)}Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return"object"===i(e)&&null!==e&&(Object.getPrototypeOf(e)===Object.prototype||null===Object.getPrototypeOf(e))}},5034:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.default=function(e){return void 0===e}},1190:function(e,a,i){"use strict";function n(e){return n="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},n(e)}var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});var s=o(i(1808)),t=o(i(7376));a.default=function(e,a,i){if("object"!==n(e)||(0,t.default)(e))throw Error('Argument "targetObject" is not object');if(!a)throw Error('Argument "path" is required');(0,s.default)(i)||(e[a]=i)}},4431:function(e,a,i){var n;!function(o){"use strict";var s,t=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,r=Math.ceil,c=Math.floor,p="[BigNumber Error] ",l=p+"Number primitive has more than 15 significant digits: ",u=1e14,d=14,m=9007199254740991,f=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],x=1e7,v=1e9;function h(e){var a=0|e;return e>0||e===a?a:a-1}function b(e){for(var a,i,n=1,o=e.length,s=e[0]+"";np^i?1:-1;for(r=(c=o.length)<(p=s.length)?c:p,t=0;ts[t]^i?1:-1;return c==p?0:c>p^i?1:-1}function y(e,a,i,n){if(ei||e!==c(e))throw Error(p+(n||"Argument")+("number"==typeof e?ei?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function w(e){var a=e.c.length-1;return h(e.e/d)==a&&e.c[a]%2!=0}function k(e,a){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(a<0?"e":"e+")+a}function j(e,a,i){var n,o;if(a<0){for(o=i+".";++a;o+=i);e=o+e}else if(++a>(n=e.length)){for(o=i,a-=n;--a;o+=i);e+=o}else aD?h.c=h.e=null:e.e=10;u/=10,p++);return void(p>D?h.c=h.e=null:(h.e=p,h.c=[e]))}v=String(e)}else{if(!t.test(v=String(e)))return o(h,v,f);h.s=45==v.charCodeAt(0)?(v=v.slice(1),-1):1}(p=v.indexOf("."))>-1&&(v=v.replace(".","")),(u=v.search(/e/i))>0?(p<0&&(p=u),p+=+v.slice(u+1),v=v.substring(0,u)):p<0&&(p=v.length)}else{if(y(a,2,I.length,"Base"),10==a)return $(h=new H(e),P+h.e+1,B);if(v=String(e),f="number"==typeof e){if(0*e!=0)return o(h,v,f,a);if(h.s=1/e<0?(v=v.slice(1),-1):1,H.DEBUG&&v.replace(/^0\.0*|\./,"").length>15)throw Error(l+e)}else h.s=45===v.charCodeAt(0)?(v=v.slice(1),-1):1;for(i=I.slice(0,a),p=u=0,x=v.length;up){p=x;continue}}else if(!r&&(v==v.toUpperCase()&&(v=v.toLowerCase())||v==v.toLowerCase()&&(v=v.toUpperCase()))){r=!0,u=-1,p=0;continue}return o(h,String(e),f,a)}f=!1,(p=(v=n(v,a,10,h.s)).indexOf("."))>-1?v=v.replace(".",""):p=v.length}for(u=0;48===v.charCodeAt(u);u++);for(x=v.length;48===v.charCodeAt(--x););if(v=v.slice(u,++x)){if(x-=u,f&&H.DEBUG&&x>15&&(e>m||e!==c(e)))throw Error(l+h.s*e);if((p=p-u-1)>D)h.c=h.e=null;else if(p=z)?k(c,t):j(c,t,"0");else if(s=(e=$(new H(e),a,i)).e,r=(c=b(e.c)).length,1==n||2==n&&(a<=s||s<=N)){for(;rr){if(--a>0)for(c+=".";a--;c+="0");}else if((a+=s-r)>0)for(s+1==r&&(c+=".");a--;c+="0");return e.s<0&&o?"-"+c:c}function K(e,a){for(var i,n=1,o=new H(e[0]);n=10;o/=10,n++);return(i=n+i*d-1)>D?e.c=e.e=null:i=10;p/=10,o++);if((s=a-o)<0)s+=d,t=a,x=(l=v[m=0])/h[o-t-1]%10|0;else if((m=r((s+1)/d))>=v.length){if(!n)break e;for(;v.length<=m;v.push(0));l=x=0,o=1,t=(s%=d)-d+1}else{for(l=p=v[m],o=1;p>=10;p/=10,o++);x=(t=(s%=d)-d+o)<0?0:l/h[o-t-1]%10|0}if(n=n||a<0||null!=v[m+1]||(t<0?l:l%h[o-t-1]),n=i<4?(x||n)&&(0==i||i==(e.s<0?3:2)):x>5||5==x&&(4==i||n||6==i&&(s>0?t>0?l/h[o-t]:0:v[m-1])%10&1||i==(e.s<0?8:7)),a<1||!v[0])return v.length=0,n?(a-=e.e+1,v[0]=h[(d-a%d)%d],e.e=-a||0):v[0]=e.e=0,e;if(0==s?(v.length=m,p=1,m--):(v.length=m+1,p=h[d-s],v[m]=t>0?c(l/h[o-t]%h[t])*p:0),n)for(;;){if(0==m){for(s=1,t=v[0];t>=10;t/=10,s++);for(t=v[0]+=p,p=1;t>=10;t/=10,p++);s!=p&&(e.e++,v[0]==u&&(v[0]=1));break}if(v[m]+=p,v[m]!=u)break;v[m--]=0,p=1}for(s=v.length;0===v[--s];v.pop());}e.e>D?e.c=e.e=null:e.e=z?k(a,i):j(a,i,"0"),e.s<0?"-"+a:a)}return H.clone=e,H.ROUND_UP=0,H.ROUND_DOWN=1,H.ROUND_CEIL=2,H.ROUND_FLOOR=3,H.ROUND_HALF_UP=4,H.ROUND_HALF_DOWN=5,H.ROUND_HALF_EVEN=6,H.ROUND_HALF_CEIL=7,H.ROUND_HALF_FLOOR=8,H.EUCLID=9,H.config=H.set=function(e){var a,i;if(null!=e){if("object"!=typeof e)throw Error(p+"Object expected: "+e);if(e.hasOwnProperty(a="DECIMAL_PLACES")&&(y(i=e[a],0,v,a),P=i),e.hasOwnProperty(a="ROUNDING_MODE")&&(y(i=e[a],0,8,a),B=i),e.hasOwnProperty(a="EXPONENTIAL_AT")&&((i=e[a])&&i.pop?(y(i[0],-v,0,a),y(i[1],0,v,a),N=i[0],z=i[1]):(y(i,-v,v,a),N=-(z=i<0?-i:i))),e.hasOwnProperty(a="RANGE"))if((i=e[a])&&i.pop)y(i[0],-v,-1,a),y(i[1],1,v,a),L=i[0],D=i[1];else{if(y(i,-v,v,a),!i)throw Error(p+a+" cannot be zero: "+i);L=-(D=i<0?-i:i)}if(e.hasOwnProperty(a="CRYPTO")){if((i=e[a])!==!!i)throw Error(p+a+" not true or false: "+i);if(i){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw F=!i,Error(p+"crypto unavailable");F=i}else F=i}if(e.hasOwnProperty(a="MODULO_MODE")&&(y(i=e[a],0,9,a),q=i),e.hasOwnProperty(a="POW_PRECISION")&&(y(i=e[a],0,v,a),M=i),e.hasOwnProperty(a="FORMAT")){if("object"!=typeof(i=e[a]))throw Error(p+a+" not an object: "+i);U=i}if(e.hasOwnProperty(a="ALPHABET")){if("string"!=typeof(i=e[a])||/^.?$|[+\-.\s]|(.).*\1/.test(i))throw Error(p+a+" invalid: "+i);I=i}}return{DECIMAL_PLACES:P,ROUNDING_MODE:B,EXPONENTIAL_AT:[N,z],RANGE:[L,D],CRYPTO:F,MODULO_MODE:q,POW_PRECISION:M,FORMAT:U,ALPHABET:I}},H.isBigNumber=function(e){if(!e||!0!==e._isBigNumber)return!1;if(!H.DEBUG)return!0;var a,i,n=e.c,o=e.e,s=e.s;e:if("[object Array]"=={}.toString.call(n)){if((1===s||-1===s)&&o>=-v&&o<=v&&o===c(o)){if(0===n[0]){if(0===o&&1===n.length)return!0;break e}if((a=(o+1)%d)<1&&(a+=d),String(n[0]).length==a){for(a=0;a=u||i!==c(i))break e;if(0!==i)return!0}}}else if(null===n&&null===o&&(null===s||1===s||-1===s))return!0;throw Error(p+"Invalid BigNumber: "+e)},H.maximum=H.max=function(){return K(arguments,T.lt)},H.minimum=H.min=function(){return K(arguments,T.gt)},H.random=(s=9007199254740992,_=Math.random()*s&2097151?function(){return c(Math.random()*s)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(e){var a,i,n,o,s,t=0,l=[],u=new H(R);if(null==e?e=P:y(e,0,v),o=r(e/d),F)if(crypto.getRandomValues){for(a=crypto.getRandomValues(new Uint32Array(o*=2));t>>11))>=9e15?(i=crypto.getRandomValues(new Uint32Array(2)),a[t]=i[0],a[t+1]=i[1]):(l.push(s%1e14),t+=2);t=o/2}else{if(!crypto.randomBytes)throw F=!1,Error(p+"crypto unavailable");for(a=crypto.randomBytes(o*=7);t=9e15?crypto.randomBytes(7).copy(a,t):(l.push(s%1e14),t+=7);t=o/7}if(!F)for(;t=10;s/=10,t++);ti-1&&(null==t[o+1]&&(t[o+1]=0),t[o+1]+=t[o]/i|0,t[o]%=i)}return t.reverse()}return function(n,o,s,t,r){var c,p,l,u,d,m,f,x,v=n.indexOf("."),h=P,g=B;for(v>=0&&(u=M,M=0,n=n.replace(".",""),m=(x=new H(o)).pow(n.length-v),M=u,x.c=a(j(b(m.c),m.e,"0"),10,s,e),x.e=x.c.length),l=u=(f=a(n,o,s,r?(c=I,e):(c=e,I))).length;0==f[--u];f.pop());if(!f[0])return c.charAt(0);if(v<0?--l:(m.c=f,m.e=l,m.s=t,f=(m=i(m,x,h,g,s)).c,d=m.r,l=m.e),v=f[p=l+h+1],u=s/2,d=d||p<0||null!=f[p+1],d=g<4?(null!=v||d)&&(0==g||g==(m.s<0?3:2)):v>u||v==u&&(4==g||d||6==g&&1&f[p-1]||g==(m.s<0?8:7)),p<1||!f[0])n=d?j(c.charAt(1),-h,c.charAt(0)):c.charAt(0);else{if(f.length=p,d)for(--s;++f[--p]>s;)f[p]=0,p||(++l,f=[1].concat(f));for(u=f.length;!f[--u];);for(v=0,n="";v<=u;n+=c.charAt(f[v++]));n=j(n,l,c.charAt(0))}return n}}(),i=function(){function e(e,a,i){var n,o,s,t,r=0,c=e.length,p=a%x,l=a/x|0;for(e=e.slice();c--;)r=((o=p*(s=e[c]%x)+(n=l*s+(t=e[c]/x|0)*p)%x*x+r)/i|0)+(n/x|0)+l*t,e[c]=o%i;return r&&(e=[r].concat(e)),e}function a(e,a,i,n){var o,s;if(i!=n)s=i>n?1:-1;else for(o=s=0;oa[o]?1:-1;break}return s}function i(e,a,i,n){for(var o=0;i--;)e[i]-=o,o=e[i]1;e.splice(0,1));}return function(n,o,s,t,r){var p,l,m,f,x,v,b,g,y,w,k,j,_,C,E,S,O,A=n.s==o.s?1:-1,T=n.c,R=o.c;if(!(T&&T[0]&&R&&R[0]))return new H(n.s&&o.s&&(T?!R||T[0]!=R[0]:R)?T&&0==T[0]||!R?0*A:A/0:NaN);for(y=(g=new H(A)).c=[],A=s+(l=n.e-o.e)+1,r||(r=u,l=h(n.e/d)-h(o.e/d),A=A/d|0),m=0;R[m]==(T[m]||0);m++);if(R[m]>(T[m]||0)&&l--,A<0)y.push(1),f=!0;else{for(C=T.length,S=R.length,m=0,A+=2,(x=c(r/(R[0]+1)))>1&&(R=e(R,x,r),T=e(T,x,r),S=R.length,C=T.length),_=S,k=(w=T.slice(0,S)).length;k=r/2&&E++;do{if(x=0,(p=a(R,w,S,k))<0){if(j=w[0],S!=k&&(j=j*r+(w[1]||0)),(x=c(j/E))>1)for(x>=r&&(x=r-1),b=(v=e(R,x,r)).length,k=w.length;1==a(v,w,b,k);)x--,i(v,S=10;A/=10,m++);$(g,s+(g.e=m+l*d-1)+1,t,f)}else g.e=l,g.r=+f;return g}}(),C=/^(-?)0([xbo])(?=\w[\w.]*$)/i,E=/^([^.]+)\.$/,S=/^\.([^.]+)$/,O=/^-?(Infinity|NaN)$/,A=/^\s*\+(?=[\w.])|^\s+|\s+$/g,o=function(e,a,i,n){var o,s=i?a:a.replace(A,"");if(O.test(s))e.s=isNaN(s)?null:s<0?-1:1;else{if(!i&&(s=s.replace(C,(function(e,a,i){return o="x"==(i=i.toLowerCase())?16:"b"==i?2:8,n&&n!=o?e:a})),n&&(o=n,s=s.replace(E,"$1").replace(S,"0.$1")),a!=s))return new H(s,o);if(H.DEBUG)throw Error(p+"Not a"+(n?" base "+n:"")+" number: "+a);e.s=null}e.c=e.e=null},T.absoluteValue=T.abs=function(){var e=new H(this);return e.s<0&&(e.s=1),e},T.comparedTo=function(e,a){return g(this,new H(e,a))},T.decimalPlaces=T.dp=function(e,a){var i,n,o,s=this;if(null!=e)return y(e,0,v),null==a?a=B:y(a,0,8),$(new H(s),e+s.e+1,a);if(!(i=s.c))return null;if(n=((o=i.length-1)-h(this.e/d))*d,o=i[o])for(;o%10==0;o/=10,n--);return n<0&&(n=0),n},T.dividedBy=T.div=function(e,a){return i(this,new H(e,a),P,B)},T.dividedToIntegerBy=T.idiv=function(e,a){return i(this,new H(e,a),0,1)},T.exponentiatedBy=T.pow=function(e,a){var i,n,o,s,t,l,u,m,f=this;if((e=new H(e)).c&&!e.isInteger())throw Error(p+"Exponent not an integer: "+J(e));if(null!=a&&(a=new H(a)),t=e.e>14,!f.c||!f.c[0]||1==f.c[0]&&!f.e&&1==f.c.length||!e.c||!e.c[0])return m=new H(Math.pow(+J(f),t?2-w(e):+J(e))),a?m.mod(a):m;if(l=e.s<0,a){if(a.c?!a.c[0]:!a.s)return new H(NaN);(n=!l&&f.isInteger()&&a.isInteger())&&(f=f.mod(a))}else{if(e.e>9&&(f.e>0||f.e<-1||(0==f.e?f.c[0]>1||t&&f.c[1]>=24e7:f.c[0]<8e13||t&&f.c[0]<=9999975e7)))return s=f.s<0&&w(e)?-0:0,f.e>-1&&(s=1/s),new H(l?1/s:s);M&&(s=r(M/d+2))}for(t?(i=new H(.5),l&&(e.s=1),u=w(e)):u=(o=Math.abs(+J(e)))%2,m=new H(R);;){if(u){if(!(m=m.times(f)).c)break;s?m.c.length>s&&(m.c.length=s):n&&(m=m.mod(a))}if(o){if(0===(o=c(o/2)))break;u=o%2}else if($(e=e.times(i),e.e+1,1),e.e>14)u=w(e);else{if(0==(o=+J(e)))break;u=o%2}f=f.times(f),s?f.c&&f.c.length>s&&(f.c.length=s):n&&(f=f.mod(a))}return n?m:(l&&(m=R.div(m)),a?m.mod(a):s?$(m,M,B,void 0):m)},T.integerValue=function(e){var a=new H(this);return null==e?e=B:y(e,0,8),$(a,a.e+1,e)},T.isEqualTo=T.eq=function(e,a){return 0===g(this,new H(e,a))},T.isFinite=function(){return!!this.c},T.isGreaterThan=T.gt=function(e,a){return g(this,new H(e,a))>0},T.isGreaterThanOrEqualTo=T.gte=function(e,a){return 1===(a=g(this,new H(e,a)))||0===a},T.isInteger=function(){return!!this.c&&h(this.e/d)>this.c.length-2},T.isLessThan=T.lt=function(e,a){return g(this,new H(e,a))<0},T.isLessThanOrEqualTo=T.lte=function(e,a){return-1===(a=g(this,new H(e,a)))||0===a},T.isNaN=function(){return!this.s},T.isNegative=function(){return this.s<0},T.isPositive=function(){return this.s>0},T.isZero=function(){return!!this.c&&0==this.c[0]},T.minus=function(e,a){var i,n,o,s,t=this,r=t.s;if(a=(e=new H(e,a)).s,!r||!a)return new H(NaN);if(r!=a)return e.s=-a,t.plus(e);var c=t.e/d,p=e.e/d,l=t.c,m=e.c;if(!c||!p){if(!l||!m)return l?(e.s=-a,e):new H(m?t:NaN);if(!l[0]||!m[0])return m[0]?(e.s=-a,e):new H(l[0]?t:3==B?-0:0)}if(c=h(c),p=h(p),l=l.slice(),r=c-p){for((s=r<0)?(r=-r,o=l):(p=c,o=m),o.reverse(),a=r;a--;o.push(0));o.reverse()}else for(n=(s=(r=l.length)<(a=m.length))?r:a,r=a=0;a0)for(;a--;l[i++]=0);for(a=u-1;n>r;){if(l[--n]=0;){for(i=0,f=j[o]%y,v=j[o]/y|0,s=o+(t=c);s>o;)i=((p=f*(p=k[--t]%y)+(r=v*p+(l=k[t]/y|0)*f)%y*y+b[s]+i)/g|0)+(r/y|0)+v*l,b[s--]=p%g;b[s]=i}return i?++n:b.splice(0,1),G(e,b,n)},T.negated=function(){var e=new H(this);return e.s=-e.s||null,e},T.plus=function(e,a){var i,n=this,o=n.s;if(a=(e=new H(e,a)).s,!o||!a)return new H(NaN);if(o!=a)return e.s=-a,n.minus(e);var s=n.e/d,t=e.e/d,r=n.c,c=e.c;if(!s||!t){if(!r||!c)return new H(o/0);if(!r[0]||!c[0])return c[0]?e:new H(r[0]?n:0*o)}if(s=h(s),t=h(t),r=r.slice(),o=s-t){for(o>0?(t=s,i=c):(o=-o,i=r),i.reverse();o--;i.push(0));i.reverse()}for((o=r.length)-(a=c.length)<0&&(i=c,c=r,r=i,a=o),o=0;a;)o=(r[--a]=r[a]+c[a]+o)/u|0,r[a]=u===r[a]?0:r[a]%u;return o&&(r=[o].concat(r),++t),G(e,r,t)},T.precision=T.sd=function(e,a){var i,n,o,s=this;if(null!=e&&e!==!!e)return y(e,1,v),null==a?a=B:y(a,0,8),$(new H(s),e,a);if(!(i=s.c))return null;if(n=(o=i.length-1)*d+1,o=i[o]){for(;o%10==0;o/=10,n--);for(o=i[0];o>=10;o/=10,n++);}return e&&s.e+1>n&&(n=s.e+1),n},T.shiftedBy=function(e){return y(e,-9007199254740991,m),this.times("1e"+e)},T.squareRoot=T.sqrt=function(){var e,a,n,o,s,t=this,r=t.c,c=t.s,p=t.e,l=P+4,u=new H("0.5");if(1!==c||!r||!r[0])return new H(!c||c<0&&(!r||r[0])?NaN:r?t:1/0);if(0==(c=Math.sqrt(+J(t)))||c==1/0?(((a=b(r)).length+p)%2==0&&(a+="0"),c=Math.sqrt(+a),p=h((p+1)/2)-(p<0||p%2),n=new H(a=c==1/0?"5e"+p:(a=c.toExponential()).slice(0,a.indexOf("e")+1)+p)):n=new H(c+""),n.c[0])for((c=(p=n.e)+l)<3&&(c=0);;)if(s=n,n=u.times(s.plus(i(t,s,l,1))),b(s.c).slice(0,c)===(a=b(n.c)).slice(0,c)){if(n.e0&&x>0){for(s=x%r||r,u=f.substr(0,s);s0&&(u+=l+f.slice(s)),m&&(u="-"+u)}n=d?u+(i.decimalSeparator||"")+((c=+i.fractionGroupSize)?d.replace(new RegExp("\\d{"+c+"}\\B","g"),"$&"+(i.fractionGroupSeparator||"")):d):u}return(i.prefix||"")+n+(i.suffix||"")},T.toFraction=function(e){var a,n,o,s,t,r,c,l,u,m,x,v,h=this,g=h.c;if(null!=e&&(!(c=new H(e)).isInteger()&&(c.c||1!==c.s)||c.lt(R)))throw Error(p+"Argument "+(c.isInteger()?"out of range: ":"not an integer: ")+J(c));if(!g)return new H(h);for(a=new H(R),u=n=new H(R),o=l=new H(R),v=b(g),t=a.e=v.length-h.e-1,a.c[0]=f[(r=t%d)<0?d+r:r],e=!e||c.comparedTo(a)>0?t>0?a:u:c,r=D,D=1/0,c=new H(v),l.c[0]=0;m=i(c,a,0,1),1!=(s=n.plus(m.times(o))).comparedTo(e);)n=o,o=s,u=l.plus(m.times(s=u)),l=s,a=c.minus(m.times(s=a)),c=s;return s=i(e.minus(n),o,0,1),l=l.plus(s.times(u)),n=n.plus(s.times(o)),l.s=u.s=h.s,x=i(u,o,t*=2,B).minus(h).abs().comparedTo(i(l,n,t,B).minus(h).abs())<1?[u,o]:[l,n],D=r,x},T.toNumber=function(){return+J(this)},T.toPrecision=function(e,a){return null!=e&&y(e,1,v),V(this,e,a,2)},T.toString=function(e){var a,i=this,o=i.s,s=i.e;return null===s?o?(a="Infinity",o<0&&(a="-"+a)):a="NaN":(null==e?a=s<=N||s>=z?k(b(i.c),s):j(b(i.c),s,"0"):10===e?a=j(b((i=$(new H(i),P+s+1,B)).c),i.e,"0"):(y(e,2,I.length,"Base"),a=n(j(b(i.c),s,"0"),10,e,o,!0)),o<0&&i.c[0]&&(a="-"+a)),a},T.valueOf=T.toJSON=function(){return J(this)},T._isBigNumber=!0,null!=a&&H.set(a),H}(),s.default=s.BigNumber=s,void 0===(n=function(){return s}.call(a,i,a,e))||(e.exports=n)}()},9779:(e,a,i)=>{var n=i(3837),o=i(2781).Stream,s=i(3463);function t(){this.writable=!1,this.readable=!0,this.dataSize=0,this.maxDataSize=2097152,this.pauseStreams=!0,this._released=!1,this._streams=[],this._currentStream=null,this._insideLoop=!1,this._pendingNext=!1}e.exports=t,n.inherits(t,o),t.create=function(e){var a=new this;for(var i in e=e||{})a[i]=e[i];return a},t.isStreamLike=function(e){return"function"!=typeof e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Buffer.isBuffer(e)},t.prototype.append=function(e){if(t.isStreamLike(e)){if(!(e instanceof s)){var a=s.create(e,{maxDataSize:1/0,pauseStream:this.pauseStreams});e.on("data",this._checkDataSize.bind(this)),e=a}this._handleErrors(e),this.pauseStreams&&e.pause()}return this._streams.push(e),this},t.prototype.pipe=function(e,a){return o.prototype.pipe.call(this,e,a),this.resume(),e},t.prototype._getNext=function(){if(this._currentStream=null,this._insideLoop)this._pendingNext=!0;else{this._insideLoop=!0;try{do{this._pendingNext=!1,this._realGetNext()}while(this._pendingNext)}finally{this._insideLoop=!1}}},t.prototype._realGetNext=function(){var e=this._streams.shift();void 0!==e?"function"==typeof e?e(function(e){t.isStreamLike(e)&&(e.on("data",this._checkDataSize.bind(this)),this._handleErrors(e)),this._pipeNext(e)}.bind(this)):this._pipeNext(e):this.end()},t.prototype._pipeNext=function(e){if(this._currentStream=e,t.isStreamLike(e))return e.on("end",this._getNext.bind(this)),void e.pipe(this,{end:!1});var a=e;this.write(a),this._getNext()},t.prototype._handleErrors=function(e){var a=this;e.on("error",(function(e){a._emitError(e)}))},t.prototype.write=function(e){this.emit("data",e)},t.prototype.pause=function(){this.pauseStreams&&(this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.pause&&this._currentStream.pause(),this.emit("pause"))},t.prototype.resume=function(){this._released||(this._released=!0,this.writable=!0,this._getNext()),this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.resume&&this._currentStream.resume(),this.emit("resume")},t.prototype.end=function(){this._reset(),this.emit("end")},t.prototype.destroy=function(){this._reset(),this.emit("close")},t.prototype._reset=function(){this.writable=!1,this._streams=[],this._currentStream=null},t.prototype._checkDataSize=function(){if(this._updateDataSize(),!(this.dataSize<=this.maxDataSize)){var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this._emitError(new Error(e))}},t.prototype._updateDataSize=function(){this.dataSize=0;var e=this;this._streams.forEach((function(a){a.dataSize&&(e.dataSize+=a.dataSize)})),this._currentStream&&this._currentStream.dataSize&&(this.dataSize+=this._currentStream.dataSize)},t.prototype._emitError=function(e){this._reset(),this.emit("error",e)}},9435:e=>{var a=1e3,i=60*a,n=60*i,o=24*n,s=7*o,t=365.25*o;function r(e,a,i,n){var o=a>=1.5*i;return Math.round(e/i)+" "+n+(o?"s":"")}e.exports=function(e,c){c=c||{};var p,l,u=typeof e;if("string"===u&&e.length>0)return function(e){if(!((e=String(e)).length>100)){var r=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(r){var c=parseFloat(r[1]);switch((r[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return c*t;case"weeks":case"week":case"w":return c*s;case"days":case"day":case"d":return c*o;case"hours":case"hour":case"hrs":case"hr":case"h":return c*n;case"minutes":case"minute":case"mins":case"min":case"m":return c*i;case"seconds":case"second":case"secs":case"sec":case"s":return c*a;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}}}(e);if("number"===u&&isFinite(e))return c.long?(p=e,(l=Math.abs(p))>=o?r(p,l,o,"day"):l>=n?r(p,l,n,"hour"):l>=i?r(p,l,i,"minute"):l>=a?r(p,l,a,"second"):p+" ms"):function(e){var s=Math.abs(e);return s>=o?Math.round(e/o)+"d":s>=n?Math.round(e/n)+"h":s>=i?Math.round(e/i)+"m":s>=a?Math.round(e/a)+"s":e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},1227:(e,a,i)=>{a.formatArgs=function(a){if(a[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+a[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const i="color: "+this.color;a.splice(1,0,i,"color: inherit");let n=0,o=0;a[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(n++,"%c"===e&&(o=n))})),a.splice(o,0,i)},a.save=function(e){try{e?a.storage.setItem("debug",e):a.storage.removeItem("debug")}catch(e){}},a.load=function(){let e;try{e=a.storage.getItem("debug")}catch(e){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e},a.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type&&!window.process.__nwjs)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},a.storage=function(){try{return localStorage}catch(e){}}(),a.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),a.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],a.log=console.debug||console.log||(()=>{}),e.exports=i(2447)(a);const{formatters:n}=e.exports;n.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},2447:(e,a,i)=>{e.exports=function(e){function a(e){let i,o,s,t=null;function r(...e){if(!r.enabled)return;const n=r,o=Number(new Date),s=o-(i||o);n.diff=s,n.prev=i,n.curr=o,i=o,e[0]=a.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let t=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((i,o)=>{if("%%"===i)return"%";t++;const s=a.formatters[o];if("function"==typeof s){const a=e[t];i=s.call(n,a),e.splice(t,1),t--}return i})),a.formatArgs.call(n,e),(n.log||a.log).apply(n,e)}return r.namespace=e,r.useColors=a.useColors(),r.color=a.selectColor(e),r.extend=n,r.destroy=a.destroy,Object.defineProperty(r,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==t?t:(o!==a.namespaces&&(o=a.namespaces,s=a.enabled(e)),s),set:e=>{t=e}}),"function"==typeof a.init&&a.init(r),r}function n(e,i){const n=a(this.namespace+(void 0===i?":":i)+e);return n.log=this.log,n}function o(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return a.debug=a,a.default=a,a.coerce=function(e){return e instanceof Error?e.stack||e.message:e},a.disable=function(){const e=[...a.names.map(o),...a.skips.map(o).map((e=>"-"+e))].join(",");return a.enable(""),e},a.enable=function(e){let i;a.save(e),a.namespaces=e,a.names=[],a.skips=[];const n=("string"==typeof e?e:"").split(/[\s,]+/),o=n.length;for(i=0;i{a[i]=e[i]})),a.names=[],a.skips=[],a.formatters={},a.selectColor=function(e){let i=0;for(let a=0;a{"undefined"==typeof process||"renderer"===process.type||!0===process.browser||process.__nwjs?e.exports=i(1227):e.exports=i(39)},39:(e,a,i)=>{const n=i(6224),o=i(3837);a.init=function(e){e.inspectOpts={};const i=Object.keys(a.inspectOpts);for(let n=0;n{}),"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),a.colors=[6,2,3,4,5,1];try{const e=i(2130);e&&(e.stderr||e).level>=2&&(a.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch(e){}a.inspectOpts=Object.keys(process.env).filter((e=>/^debug_/i.test(e))).reduce(((e,a)=>{const i=a.substring(6).toLowerCase().replace(/_([a-z])/g,((e,a)=>a.toUpperCase()));let n=process.env[a];return n=!!/^(yes|on|true|enabled)$/i.test(n)||!/^(no|off|false|disabled)$/i.test(n)&&("null"===n?null:Number(n)),e[i]=n,e}),{}),e.exports=i(2447)(a);const{formatters:s}=e.exports;s.o=function(e){return this.inspectOpts.colors=this.useColors,o.inspect(e,this.inspectOpts).split("\n").map((e=>e.trim())).join(" ")},s.O=function(e){return this.inspectOpts.colors=this.useColors,o.inspect(e,this.inspectOpts)}},3463:(e,a,i)=>{var n=i(2781).Stream,o=i(3837);function s(){this.source=null,this.dataSize=0,this.maxDataSize=1048576,this.pauseStream=!0,this._maxDataSizeExceeded=!1,this._released=!1,this._bufferedEvents=[]}e.exports=s,o.inherits(s,n),s.create=function(e,a){var i=new this;for(var n in a=a||{})i[n]=a[n];i.source=e;var o=e.emit;return e.emit=function(){return i._handleEmit(arguments),o.apply(e,arguments)},e.on("error",(function(){})),i.pauseStream&&e.pause(),i},Object.defineProperty(s.prototype,"readable",{configurable:!0,enumerable:!0,get:function(){return this.source.readable}}),s.prototype.setEncoding=function(){return this.source.setEncoding.apply(this.source,arguments)},s.prototype.resume=function(){this._released||this.release(),this.source.resume()},s.prototype.pause=function(){this.source.pause()},s.prototype.release=function(){this._released=!0,this._bufferedEvents.forEach(function(e){this.emit.apply(this,e)}.bind(this)),this._bufferedEvents=[]},s.prototype.pipe=function(){var e=n.prototype.pipe.apply(this,arguments);return this.resume(),e},s.prototype._handleEmit=function(e){this._released?this.emit.apply(this,e):("data"===e[0]&&(this.dataSize+=e[1].length,this._checkIfMaxDataSizeExceeded()),this._bufferedEvents.push(e))},s.prototype._checkIfMaxDataSizeExceeded=function(){if(!(this._maxDataSizeExceeded||this.dataSize<=this.maxDataSize)){this._maxDataSizeExceeded=!0;var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this.emit("error",new Error(e))}}},2261:(e,a,i)=>{var n;e.exports=function(){if(!n){try{n=i(5158)("follow-redirects")}catch(e){}"function"!=typeof n&&(n=function(){})}n.apply(null,arguments)}},938:(e,a,i)=>{var n=i(7310),o=n.URL,s=i(3685),t=i(5687),r=i(2781).Writable,c=i(9491),p=i(2261),l=["abort","aborted","connect","error","socket","timeout"],u=Object.create(null);l.forEach((function(e){u[e]=function(a,i,n){this._redirectable.emit(e,a,i,n)}}));var d=w("ERR_FR_REDIRECTION_FAILURE","Redirected request failed"),m=w("ERR_FR_TOO_MANY_REDIRECTS","Maximum number of redirects exceeded"),f=w("ERR_FR_MAX_BODY_LENGTH_EXCEEDED","Request body larger than maxBodyLength limit"),x=w("ERR_STREAM_WRITE_AFTER_END","write after end");function v(e,a){r.call(this),this._sanitizeOptions(e),this._options=e,this._ended=!1,this._ending=!1,this._redirectCount=0,this._redirects=[],this._requestBodyLength=0,this._requestBodyBuffers=[],a&&this.on("response",a);var i=this;this._onNativeResponse=function(e){i._processResponse(e)},this._performRequest()}function h(e){var a={maxRedirects:21,maxBodyLength:10485760},i={};return Object.keys(e).forEach((function(s){var t=s+":",r=i[t]=e[s],l=a[s]=Object.create(r);Object.defineProperties(l,{request:{value:function(e,s,r){if("string"==typeof e){var l=e;try{e=g(new o(l))}catch(a){e=n.parse(l)}}else o&&e instanceof o?e=g(e):(r=s,s=e,e={protocol:t});return"function"==typeof s&&(r=s,s=null),(s=Object.assign({maxRedirects:a.maxRedirects,maxBodyLength:a.maxBodyLength},e,s)).nativeProtocols=i,c.equal(s.protocol,t,"protocol mismatch"),p("options",s),new v(s,r)},configurable:!0,enumerable:!0,writable:!0},get:{value:function(e,a,i){var n=l.request(e,a,i);return n.end(),n},configurable:!0,enumerable:!0,writable:!0}})})),a}function b(){}function g(e){var a={protocol:e.protocol,hostname:e.hostname.startsWith("[")?e.hostname.slice(1,-1):e.hostname,hash:e.hash,search:e.search,pathname:e.pathname,path:e.pathname+e.search,href:e.href};return""!==e.port&&(a.port=Number(e.port)),a}function y(e,a){var i;for(var n in a)e.test(n)&&(i=a[n],delete a[n]);return null==i?void 0:String(i).trim()}function w(e,a){function i(e){Error.captureStackTrace(this,this.constructor),e?(this.message=a+": "+e.message,this.cause=e):this.message=a}return i.prototype=new Error,i.prototype.constructor=i,i.prototype.name="Error ["+e+"]",i.prototype.code=e,i}function k(e){for(var a of l)e.removeListener(a,u[a]);e.on("error",b),e.abort()}v.prototype=Object.create(r.prototype),v.prototype.abort=function(){k(this._currentRequest),this.emit("abort")},v.prototype.write=function(e,a,i){if(this._ending)throw new x;if(!("string"==typeof e||"object"==typeof e&&"length"in e))throw new TypeError("data should be a string, Buffer or Uint8Array");"function"==typeof a&&(i=a,a=null),0!==e.length?this._requestBodyLength+e.length<=this._options.maxBodyLength?(this._requestBodyLength+=e.length,this._requestBodyBuffers.push({data:e,encoding:a}),this._currentRequest.write(e,a,i)):(this.emit("error",new f),this.abort()):i&&i()},v.prototype.end=function(e,a,i){if("function"==typeof e?(i=e,e=a=null):"function"==typeof a&&(i=a,a=null),e){var n=this,o=this._currentRequest;this.write(e,a,(function(){n._ended=!0,o.end(null,null,i)})),this._ending=!0}else this._ended=this._ending=!0,this._currentRequest.end(null,null,i)},v.prototype.setHeader=function(e,a){this._options.headers[e]=a,this._currentRequest.setHeader(e,a)},v.prototype.removeHeader=function(e){delete this._options.headers[e],this._currentRequest.removeHeader(e)},v.prototype.setTimeout=function(e,a){var i=this;function n(a){a.setTimeout(e),a.removeListener("timeout",a.destroy),a.addListener("timeout",a.destroy)}function o(a){i._timeout&&clearTimeout(i._timeout),i._timeout=setTimeout((function(){i.emit("timeout"),s()}),e),n(a)}function s(){i._timeout&&(clearTimeout(i._timeout),i._timeout=null),i.removeListener("abort",s),i.removeListener("error",s),i.removeListener("response",s),a&&i.removeListener("timeout",a),i.socket||i._currentRequest.removeListener("socket",o)}return a&&this.on("timeout",a),this.socket?o(this.socket):this._currentRequest.once("socket",o),this.on("socket",n),this.on("abort",s),this.on("error",s),this.on("response",s),this},["flushHeaders","getHeader","setNoDelay","setSocketKeepAlive"].forEach((function(e){v.prototype[e]=function(a,i){return this._currentRequest[e](a,i)}})),["aborted","connection","socket"].forEach((function(e){Object.defineProperty(v.prototype,e,{get:function(){return this._currentRequest[e]}})})),v.prototype._sanitizeOptions=function(e){if(e.headers||(e.headers={}),e.host&&(e.hostname||(e.hostname=e.host),delete e.host),!e.pathname&&e.path){var a=e.path.indexOf("?");a<0?e.pathname=e.path:(e.pathname=e.path.substring(0,a),e.search=e.path.substring(a))}},v.prototype._performRequest=function(){var e=this._options.protocol,a=this._options.nativeProtocols[e];if(a){if(this._options.agents){var i=e.slice(0,-1);this._options.agent=this._options.agents[i]}var o=this._currentRequest=a.request(this._options,this._onNativeResponse);for(var s of(o._redirectable=this,l))o.on(s,u[s]);if(this._currentUrl=/^\//.test(this._options.path)?n.format(this._options):this._currentUrl=this._options.path,this._isRedirect){var t=0,r=this,c=this._requestBodyBuffers;!function e(a){if(o===r._currentRequest)if(a)r.emit("error",a);else if(t=400)return e.responseUrl=this._currentUrl,e.redirects=this._redirects,this.emit("response",e),void(this._requestBodyBuffers=[]);if(k(this._currentRequest),e.destroy(),++this._redirectCount>this._options.maxRedirects)this.emit("error",new m);else{var o,s=this._options.beforeRedirect;s&&(o=Object.assign({Host:e.req.getHeader("host")},this._options.headers));var t=this._options.method;((301===a||302===a)&&"POST"===this._options.method||303===a&&!/^(?:GET|HEAD)$/.test(this._options.method))&&(this._options.method="GET",this._requestBodyBuffers=[],y(/^content-/i,this._options.headers));var r,c=y(/^host$/i,this._options.headers),l=n.parse(this._currentUrl),u=c||l.host,f=/^\w+:/.test(i)?this._currentUrl:n.format(Object.assign(l,{host:u}));try{r=n.resolve(f,i)}catch(e){return void this.emit("error",new d(e))}p("redirecting to",r),this._isRedirect=!0;var x=n.parse(r);if(Object.assign(this._options,x),(x.protocol!==l.protocol&&"https:"!==x.protocol||x.host!==u&&!function(e,a){const i=e.length-a.length-1;return i>0&&"."===e[i]&&e.endsWith(a)}(x.host,u))&&y(/^(?:authorization|cookie)$/i,this._options.headers),"function"==typeof s){var v={headers:e.headers,statusCode:a},h={url:f,method:t,headers:o};try{s(this._options,v,h)}catch(e){return void this.emit("error",e)}this._sanitizeOptions(this._options)}try{this._performRequest()}catch(e){this.emit("error",new d(e))}}},e.exports=h({http:s,https:t}),e.exports.wrap=h},6882:(e,a,i)=>{var n=i(9779),o=i(3837),s=i(1017),t=i(3685),r=i(5687),c=i(7310).parse,p=i(7147),l=i(2781).Stream,u=i(983),d=i(9118),m=i(2275);function f(e){if(!(this instanceof f))return new f(e);for(var a in this._overheadLength=0,this._valueLength=0,this._valuesToMeasure=[],n.call(this),e=e||{})this[a]=e[a]}e.exports=f,o.inherits(f,n),f.LINE_BREAK="\r\n",f.DEFAULT_CONTENT_TYPE="application/octet-stream",f.prototype.append=function(e,a,i){"string"==typeof(i=i||{})&&(i={filename:i});var s=n.prototype.append.bind(this);if("number"==typeof a&&(a=""+a),o.isArray(a))this._error(new Error("Arrays are not supported."));else{var t=this._multiPartHeader(e,a,i),r=this._multiPartFooter();s(t),s(a),s(r),this._trackLength(t,a,i)}},f.prototype._trackLength=function(e,a,i){var n=0;null!=i.knownLength?n+=+i.knownLength:Buffer.isBuffer(a)?n=a.length:"string"==typeof a&&(n=Buffer.byteLength(a)),this._valueLength+=n,this._overheadLength+=Buffer.byteLength(e)+f.LINE_BREAK.length,a&&(a.path||a.readable&&a.hasOwnProperty("httpVersion")||a instanceof l)&&(i.knownLength||this._valuesToMeasure.push(a))},f.prototype._lengthRetriever=function(e,a){e.hasOwnProperty("fd")?null!=e.end&&e.end!=1/0&&null!=e.start?a(null,e.end+1-(e.start?e.start:0)):p.stat(e.path,(function(i,n){var o;i?a(i):(o=n.size-(e.start?e.start:0),a(null,o))})):e.hasOwnProperty("httpVersion")?a(null,+e.headers["content-length"]):e.hasOwnProperty("httpModule")?(e.on("response",(function(i){e.pause(),a(null,+i.headers["content-length"])})),e.resume()):a("Unknown stream")},f.prototype._multiPartHeader=function(e,a,i){if("string"==typeof i.header)return i.header;var n,o=this._getContentDisposition(a,i),s=this._getContentType(a,i),t="",r={"Content-Disposition":["form-data",'name="'+e+'"'].concat(o||[]),"Content-Type":[].concat(s||[])};for(var c in"object"==typeof i.header&&m(r,i.header),r)r.hasOwnProperty(c)&&null!=(n=r[c])&&(Array.isArray(n)||(n=[n]),n.length&&(t+=c+": "+n.join("; ")+f.LINE_BREAK));return"--"+this.getBoundary()+f.LINE_BREAK+t+f.LINE_BREAK},f.prototype._getContentDisposition=function(e,a){var i,n;return"string"==typeof a.filepath?i=s.normalize(a.filepath).replace(/\\/g,"/"):a.filename||e.name||e.path?i=s.basename(a.filename||e.name||e.path):e.readable&&e.hasOwnProperty("httpVersion")&&(i=s.basename(e.client._httpMessage.path||"")),i&&(n='filename="'+i+'"'),n},f.prototype._getContentType=function(e,a){var i=a.contentType;return!i&&e.name&&(i=u.lookup(e.name)),!i&&e.path&&(i=u.lookup(e.path)),!i&&e.readable&&e.hasOwnProperty("httpVersion")&&(i=e.headers["content-type"]),i||!a.filepath&&!a.filename||(i=u.lookup(a.filepath||a.filename)),i||"object"!=typeof e||(i=f.DEFAULT_CONTENT_TYPE),i},f.prototype._multiPartFooter=function(){return function(e){var a=f.LINE_BREAK;0===this._streams.length&&(a+=this._lastBoundary()),e(a)}.bind(this)},f.prototype._lastBoundary=function(){return"--"+this.getBoundary()+"--"+f.LINE_BREAK},f.prototype.getHeaders=function(e){var a,i={"content-type":"multipart/form-data; boundary="+this.getBoundary()};for(a in e)e.hasOwnProperty(a)&&(i[a.toLowerCase()]=e[a]);return i},f.prototype.setBoundary=function(e){this._boundary=e},f.prototype.getBoundary=function(){return this._boundary||this._generateBoundary(),this._boundary},f.prototype.getBuffer=function(){for(var e=new Buffer.alloc(0),a=this.getBoundary(),i=0,n=this._streams.length;i{e.exports=function(e,a){return Object.keys(a).forEach((function(i){e[i]=e[i]||a[i]})),e}},6560:e=>{"use strict";e.exports=(e,a)=>{a=a||process.argv;const i=e.startsWith("-")?"":1===e.length?"-":"--",n=a.indexOf(i+e),o=a.indexOf("--");return-1!==n&&(-1===o||n{var n=i(4123).stringify,o=i(6813);e.exports=function(e){return{parse:o(e),stringify:n}},e.exports.parse=o(),e.exports.stringify=n},6813:(e,a,i)=>{var n=null;const o=/(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])/,s=/(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)/;e.exports=function(e){"use strict";var a={strict:!1,storeAsString:!1,alwaysParseAsBig:!1,useNativeBigInt:!1,protoAction:"error",constructorAction:"error"};if(null!=e){if(!0===e.strict&&(a.strict=!0),!0===e.storeAsString&&(a.storeAsString=!0),a.alwaysParseAsBig=!0===e.alwaysParseAsBig&&e.alwaysParseAsBig,a.useNativeBigInt=!0===e.useNativeBigInt&&e.useNativeBigInt,void 0!==e.constructorAction){if("error"!==e.constructorAction&&"ignore"!==e.constructorAction&&"preserve"!==e.constructorAction)throw new Error(`Incorrect value for constructorAction option, must be "error", "ignore" or undefined but passed ${e.constructorAction}`);a.constructorAction=e.constructorAction}if(void 0!==e.protoAction){if("error"!==e.protoAction&&"ignore"!==e.protoAction&&"preserve"!==e.protoAction)throw new Error(`Incorrect value for protoAction option, must be "error", "ignore" or undefined but passed ${e.protoAction}`);a.protoAction=e.protoAction}}var t,r,c,p,l={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"},u=function(e){throw{name:"SyntaxError",message:e,at:t,text:c}},d=function(e){return e&&e!==r&&u("Expected '"+e+"' instead of '"+r+"'"),r=c.charAt(t),t+=1,r},m=function(){var e,o="";for("-"===r&&(o="-",d("-"));r>="0"&&r<="9";)o+=r,d();if("."===r)for(o+=".";d()&&r>="0"&&r<="9";)o+=r;if("e"===r||"E"===r)for(o+=r,d(),"-"!==r&&"+"!==r||(o+=r,d());r>="0"&&r<="9";)o+=r,d();if(e=+o,isFinite(e))return null==n&&(n=i(4431)),o.length>15?a.storeAsString?o:a.useNativeBigInt?BigInt(o):new n(o):a.alwaysParseAsBig?a.useNativeBigInt?BigInt(e):new n(e):e;u("Bad number")},f=function(){var e,a,i,n="";if('"'===r)for(var o=t;d();){if('"'===r)return t-1>o&&(n+=c.substring(o,t-1)),d(),n;if("\\"===r){if(t-1>o&&(n+=c.substring(o,t-1)),d(),"u"===r){for(i=0,a=0;a<4&&(e=parseInt(d(),16),isFinite(e));a+=1)i=16*i+e;n+=String.fromCharCode(i)}else{if("string"!=typeof l[r])break;n+=l[r]}o=t}}u("Bad string")},x=function(){for(;r&&r<=" ";)d()};return p=function(){switch(x(),r){case"{":return function(){var e,i=Object.create(null);if("{"===r){if(d("{"),x(),"}"===r)return d("}"),i;for(;r;){if(e=f(),x(),d(":"),!0===a.strict&&Object.hasOwnProperty.call(i,e)&&u('Duplicate key "'+e+'"'),!0===o.test(e)?"error"===a.protoAction?u("Object contains forbidden prototype property"):"ignore"===a.protoAction?p():i[e]=p():!0===s.test(e)?"error"===a.constructorAction?u("Object contains forbidden constructor property"):"ignore"===a.constructorAction?p():i[e]=p():i[e]=p(),x(),"}"===r)return d("}"),i;d(","),x()}}u("Bad object")}();case"[":return function(){var e=[];if("["===r){if(d("["),x(),"]"===r)return d("]"),e;for(;r;){if(e.push(p()),x(),"]"===r)return d("]"),e;d(","),x()}}u("Bad array")}();case'"':return f();case"-":return m();default:return r>="0"&&r<="9"?m():function(){switch(r){case"t":return d("t"),d("r"),d("u"),d("e"),!0;case"f":return d("f"),d("a"),d("l"),d("s"),d("e"),!1;case"n":return d("n"),d("u"),d("l"),d("l"),null}u("Unexpected '"+r+"'")}()}},function(e,a){var i;return c=e+"",t=0,r=" ",i=p(),x(),r&&u("Syntax error"),"function"==typeof a?function e(i,n){var o,s=i[n];return s&&"object"==typeof s&&Object.keys(s).forEach((function(a){void 0!==(o=e(s,a))?s[a]=o:delete s[a]})),a.call(i,n,s)}({"":i},""):i}}},4123:(e,a,i)=>{var n=i(4431),o=e.exports;!function(){"use strict";var e,a,i,s=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,t={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function r(e){return s.lastIndex=0,s.test(e)?'"'+e.replace(s,(function(e){var a=t[e];return"string"==typeof a?a:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)}))+'"':'"'+e+'"'}function c(o,s){var t,p,l,u,d,m=e,f=s[o],x=null!=f&&(f instanceof n||n.isBigNumber(f));switch(f&&"object"==typeof f&&"function"==typeof f.toJSON&&(f=f.toJSON(o)),"function"==typeof i&&(f=i.call(s,o,f)),typeof f){case"string":return x?f:r(f);case"number":return isFinite(f)?String(f):"null";case"boolean":case"null":case"bigint":return String(f);case"object":if(!f)return"null";if(e+=a,d=[],"[object Array]"===Object.prototype.toString.apply(f)){for(u=f.length,t=0;t{e.exports=i(3765)},983:(e,a,i)=>{"use strict";var n,o,s,t=i(5234),r=i(1017).extname,c=/^\s*([^;\s]*)(?:;|\s|$)/,p=/^text\//i;function l(e){if(!e||"string"!=typeof e)return!1;var a=c.exec(e),i=a&&t[a[1].toLowerCase()];return i&&i.charset?i.charset:!(!a||!p.test(a[1]))&&"UTF-8"}a.charset=l,a.charsets={lookup:l},a.contentType=function(e){if(!e||"string"!=typeof e)return!1;var i=-1===e.indexOf("/")?a.lookup(e):e;if(!i)return!1;if(-1===i.indexOf("charset")){var n=a.charset(i);n&&(i+="; charset="+n.toLowerCase())}return i},a.extension=function(e){if(!e||"string"!=typeof e)return!1;var i=c.exec(e),n=i&&a.extensions[i[1].toLowerCase()];return!(!n||!n.length)&&n[0]},a.extensions=Object.create(null),a.lookup=function(e){if(!e||"string"!=typeof e)return!1;var i=r("x."+e).toLowerCase().substr(1);return i&&a.types[i]||!1},a.types=Object.create(null),n=a.extensions,o=a.types,s=["nginx","apache",void 0,"iana"],Object.keys(t).forEach((function(e){var a=t[e],i=a.extensions;if(i&&i.length){n[e]=i;for(var r=0;rl||p===l&&"application/"===o[c].substr(0,12)))continue}o[c]=e}}}))},2130:(e,a,i)=>{"use strict";const n=i(2037),o=i(6560),s=process.env;let t;function r(e){const a=function(e){if(!1===t)return 0;if(o("color=16m")||o("color=full")||o("color=truecolor"))return 3;if(o("color=256"))return 2;if(e&&!e.isTTY&&!0!==t)return 0;const a=t?1:0;if("win32"===process.platform){const e=n.release().split(".");return Number(process.versions.node.split(".")[0])>=8&&Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if("CI"in s)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some((e=>e in s))||"codeship"===s.CI_NAME?1:a;if("TEAMCITY_VERSION"in s)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(s.TEAMCITY_VERSION)?1:0;if("truecolor"===s.COLORTERM)return 3;if("TERM_PROGRAM"in s){const e=parseInt((s.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(s.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(s.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(s.TERM)||"COLORTERM"in s?1:(s.TERM,a)}(e);return function(e){return 0!==e&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}(a)}o("no-color")||o("no-colors")||o("color=false")?t=!1:(o("color")||o("colors")||o("color=true")||o("color=always"))&&(t=!0),"FORCE_COLOR"in s&&(t=0===s.FORCE_COLOR.length||0!==parseInt(s.FORCE_COLOR,10)),e.exports={supportsColor:r,stdout:r(process.stdout),stderr:r(process.stderr)}},4078:function(e,a,i){var n,o,s;s=function(){function e(e){var a=[];if(0===e.length)return"";if("string"!=typeof e[0])throw new TypeError("Url must be a string. Received "+e[0]);if(e[0].match(/^[^/:]+:\/*$/)&&e.length>1){var i=e.shift();e[0]=i+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var n=0;n0&&(o=o.replace(/^[\/]+/,"")),o=n0?"?":"")+t.join("&")}return function(){return e("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},e.exports?e.exports=s():void 0===(o="function"==typeof(n=s)?n.call(a,i,a,e):n)||(e.exports=o)},9491:e=>{"use strict";e.exports=require("assert")},7147:e=>{"use strict";e.exports=require("fs")},3685:e=>{"use strict";e.exports=require("http")},5687:e=>{"use strict";e.exports=require("https")},2037:e=>{"use strict";e.exports=require("os")},1017:e=>{"use strict";e.exports=require("path")},2781:e=>{"use strict";e.exports=require("stream")},6224:e=>{"use strict";e.exports=require("tty")},7310:e=>{"use strict";e.exports=require("url")},3837:e=>{"use strict";e.exports=require("util")},9796:e=>{"use strict";e.exports=require("zlib")},3765:e=>{"use strict";e.exports=JSON.parse('{"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/3gpp-ims+xml":{"source":"iana","compressible":true},"application/3gpphal+json":{"source":"iana","compressible":true},"application/3gpphalforms+json":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/ace+cbor":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/alto-updatestreamcontrol+json":{"source":"iana","compressible":true},"application/alto-updatestreamparams+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/at+jwt":{"source":"iana"},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-dynamic-event-message":{"source":"iana"},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/captive+json":{"source":"iana","compressible":true},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/city+json":{"source":"iana","compressible":true},"application/clr":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true,"extensions":["cpl"]},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dash-patch+xml":{"source":"iana","compressible":true,"extensions":["mpp"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dots+cbor":{"source":"iana"},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["es","ecma"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/elm+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/elm+xml":{"source":"iana","compressible":true},"application/emergencycalldata.cap+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/express":{"source":"iana","extensions":["exp"]},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/fhir+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/jscalendar+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana","compressible":true},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lpf+zip":{"source":"iana","compressible":false},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true,"extensions":["mpf"]},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/missing-blocks+cbor-seq":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true},"application/mrb-publish+xml":{"source":"iana","compressible":true},"application/msc-ivr+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msc-mixer+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana","charset":"US-ASCII"},"application/news-groupinfo":{"source":"iana","charset":"US-ASCII"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana","extensions":["cjs"]},"application/nss":{"source":"iana"},"application/oauth-authz-req+jwt":{"source":"iana"},"application/oblivious-dns-message":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{"source":"iana","compressible":true},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p21":{"source":"iana"},"application/p21+zip":{"source":"iana","compressible":false},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana","extensions":["asc"]},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pidf-diff+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.cyn":{"source":"iana","charset":"7-BIT"},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/pvd+json":{"source":"iana","compressible":true},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sarif+json":{"source":"iana","compressible":true},"application/sarif-external-properties+json":{"source":"iana","compressible":true},"application/sbe":{"source":"iana"},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-etch+cbor":{"source":"iana"},"application/senml-etch+json":{"source":"iana","compressible":true},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spdx+json":{"source":"iana","compressible":true},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/stix+json":{"source":"iana","compressible":true},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/td+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/token-introspection+jwt":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana","extensions":["trig"]},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ubjson":{"compressible":false,"extensions":["ubj"]},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true,"extensions":["td"]},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.5gnas":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gtpc":{"source":"iana"},"application/vnd.3gpp.interworking-data":{"source":"iana"},"application/vnd.3gpp.lpp":{"source":"iana"},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ngap":{"source":"iana"},"application/vnd.3gpp.pfcp":{"source":"iana"},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.s1ap":{"source":"iana"},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.cmoca-cmresource":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-cmtable":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.age":{"source":"iana","extensions":["age"]},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.arrow.file":{"source":"iana"},"application/vnd.apache.arrow.stream":{"source":"iana"},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["key"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.cryptomator.encrypted":{"source":"iana"},"application/vnd.cryptomator.vault":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.cyclonedx+json":{"source":"iana","compressible":true},"application/vnd.cyclonedx+xml":{"source":"iana","compressible":true},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.d3m-dataset":{"source":"iana"},"application/vnd.d3m-problem":{"source":"iana"},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.dbf":{"source":"iana","extensions":["dbf"]},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbisl+xml":{"source":"iana","compressible":true},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.eclipse.ditto+json":{"source":"iana","compressible":true},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eu.kasparian.car+json":{"source":"iana","compressible":true},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.familysearch.gedcom+zip":{"source":"iana","compressible":false},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujifilm.fb.docuworks":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.container":{"source":"iana"},"application/vnd.fujifilm.fb.jfi+xml":{"source":"iana","compressible":true},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.slides":{"source":"iana"},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hl7cda+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hl7v2+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana","extensions":["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxar.archive.3tz+zip":{"source":"iana","compressible":false},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.nacamar.ybrid+json":{"source":"iana","compressible":true},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nebumind.line":{"source":"iana"},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oci.image.manifest.v1+json":{"source":"iana","compressible":true},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+cbor":{"source":"iana"},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.opentimestamps.ots":{"source":"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana","extensions":["rar"]},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.resilient.logic":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sar":{"source":"iana"},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.seis+json":{"source":"iana","compressible":true},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.shp":{"source":"iana"},"application/vnd.shx":{"source":"iana"},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.snesdev-page-table":{"source":"iana"},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.sycle+xml":{"source":"iana","compressible":true},"application/vnd.syft+json":{"source":"iana","compressible":true},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","charset":"UTF-8","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veritone.aion+json":{"source":"iana","compressible":true},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","charset":"UTF-8","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.dpp":{"source":"iana"},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"source":"iana","compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true,"extensions":["wif"]},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-iwork-keynote-sffkey":{"extensions":["key"]},"application/x-iwork-numbers-sffnumbers":{"extensions":["numbers"]},"application/x-iwork-pages-sffpages":{"extensions":["pages"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-pki-message":{"source":"iana"},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"iana","extensions":["der","crt","pem"]},"application/x-x509-ca-ra-cert":{"source":"iana"},"application/x-x509-next-ca-cert":{"source":"iana"},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xsl","xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana","extensions":["amr"]},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/mhas":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx","opus"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/scip":{"source":"iana"},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sofa":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tetra_acelp_bb":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/tsvcis":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana","extensions":["avci"]},"image/avcs":{"source":"iana","extensions":["avcs"]},"image/avif":{"source":"iana","compressible":false,"extensions":["avif"]},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/hsj2":{"source":"iana","extensions":["hsj2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/ktx2":{"source":"iana","extensions":["ktx2"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","compressible":true,"extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"compressible":true,"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.pco.b16":{"source":"iana","extensions":["b16"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/e57":{"source":"iana"},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/mtl":{"source":"iana","extensions":["mtl"]},"model/obj":{"source":"iana","extensions":["obj"]},"model/step":{"source":"iana"},"model/step+xml":{"source":"iana","compressible":true,"extensions":["stpx"]},"model/step+zip":{"source":"iana","compressible":false,"extensions":["stpz"]},"model/step-xml+zip":{"source":"iana","compressible":false,"extensions":["stpxz"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.pytha.pyox":{"source":"iana"},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.sap.vds":{"source":"iana","extensions":["vds"]},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/cql":{"source":"iana"},"text/cql-expression":{"source":"iana"},"text/cql-identifier":{"source":"iana"},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/fhirpath":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/gff3":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana","charset":"UTF-8"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana","charset":"UTF-8"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shaclc":{"source":"iana"},"text/shex":{"source":"iana","extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/spdx":{"source":"iana","extensions":["spdx"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana","charset":"UTF-8"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana","charset":"UTF-8"},"text/vnd.familysearch.gedcom":{"source":"iana","extensions":["ged"]},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hans":{"source":"iana"},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","charset":"UTF-8","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana","charset":"UTF-8"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"compressible":true,"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/av1":{"source":"iana"},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/ffv1":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana","extensions":["m4s"]},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/jxsv":{"source":"iana"},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/scip":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/vp9":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}')},4147:e=>{"use strict";e.exports=JSON.parse('{"name":"node-mailjet","version":"6.0.1","main":"./dist/mailjet.node.js","browser":"./dist/mailjet.web.js","types":"./dist/declarations/index.d.ts","description":"Mailjet API client","author":"Mailjet","license":"MIT","private":true,"keywords":["email","sms","node","mail","mailjet"],"engines":{"node":">= 12.0.0","npm":">= 6.9.0"},"files":["lib/**","dist/**"],"directories":{"lib":"./lib","docs":"./docs"},"typescript":{"definition":"./dist/declarations/index.d.ts"},"scripts":{"test":"npm run ts:mocha test/","test:int":"npm run ts:mocha test/integration/","test:unit":"npm run ts:mocha test/unit/","test:watch":"mocha --extension ts -r tsconfig-paths/register -r ts-node/register --watch","cover":"npm run cover:expandable npm run test","cover:int":"npm run cover:expandable npm run test:int","cover:unit":"npm run cover:expandable npm run test:unit","cover:expandable":"nyc --reporter=text-summary --reporter=lcov --report-dir=.coverage --temp-dir=./.coverage/.nyc_output","build":"npm run build:release && npm run build:prepublish","build:dev":"webpack --config ./webpack/webpack.dev.config.js --progress --color","build:release":"webpack --config ./webpack/webpack.release.config.js --progress --color","build:prepublish":"node ./scripts/PreparePackage.js","build:watch":"webpack --watch --config ./webpack/webpack.dev.config.js --progress --color","lint":"eslint .","lint:fix":"eslint --fix .","lint:errors":"eslint --quiet .","ts:run":"ts-node --transpileOnly --project ./tsconfig.json -r tsconfig-paths/register","ts:watch":"ts-node-dev --respawn --transpile-only --project ./tsconfig.json -r tsconfig-paths/register","ts:mocha":"mocha --extension ts --recursive -r tsconfig-paths/register -r ts-node/register","ts:patch":"ts-patch install -s","init":"npm install && npm run ts:patch && npm run pkg:prepare","pkg:link":"cd ./dist && npm link && echo \'\\n=== link name: node-mailjet ===\'","pkg:prepare":"husky install","pkg:precommit":"npm audit && npm run lint:errors && npm run test","release":"standard-version -a","release:dry":"standard-version --dry-run","release:quiet":"standard-version --no-verify -a","release:minor":"standard-version -a --release-as minor","release:patch":"standard-version -a --release-as patch","release:major":"standard-version -a --release-as major","docs":"typedoc --tsconfig ./tsconfig.json"},"dependencies":{"axios":"^0.27.2","url-join":"^4.0.0","json-bigint":"^1.0.0"},"devDependencies":{"qs":"^6.5.0","@babel/core":"^7.18.0","@babel/preset-env":"^7.18.0","@commitlint/cli":"^17.0.2","@commitlint/config-conventional":"^17.0.2","@types/chai":"^4.3.1","@types/json-bigint":"^1.0.1","@types/mocha":"^9.1.1","@types/node":"^17.0.34","@types/qs":"^6.9.7","@types/superagent":"^4.1.15","@types/url-join":"^4.0.1","@typescript-eslint/eslint-plugin":"^5.24.0","@typescript-eslint/parser":"^5.24.0","babel-loader":"^8.2.5","chai":"^4.1.0","eslint":"^8.15.0","eslint-config-airbnb-base":"^15.0.0","eslint-import-resolver-typescript":"^2.7.1","eslint-plugin-import":"^2.26.0","eslint-plugin-tsdoc":"^0.2.16","husky":"^8.0.1","mocha":"^9.0.0","nock":"^13.2.4","nyc":"^15.1.0","standard-version":"^9.5.0","terser-webpack-plugin":"^5.3.1","ts-loader":"^9.3.0","ts-node":"^10.7.0","ts-node-dev":"^1.1.8","ts-patch":"^2.0.1","tsconfig-paths":"^4.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","typedoc":"^0.22.15","typescript":"^4.6.4","typescript-transform-paths":"^3.3.1","webpack":"^5.72.1","webpack-cli":"^4.9.2","webpack-merge":"^5.8.0"},"homepage":"https://github.com/mailjet/mailjet-apiv3-nodejs#readme","repository":{"type":"git","url":"git+https://github.com/mailjet/mailjet-apiv3-nodejs.git"},"bugs":{"url":"https://github.com/mailjet/mailjet-apiv3-nodejs/issues"},"contributors":["Arnaud Breton (https://github.com/arnaudbreton)","Nicholas Smith (https://github.com/safani)","Jérémie Parker (https://github.com/p-j)"]}')}},a={},i=function i(n){var o=a[n];if(void 0!==o)return o.exports;var s=a[n]={exports:{}};return e[n].call(s.exports,s,s.exports,i),s.exports}(8321),i=i.default;var e,a,i})); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFBLGNBQUFBLEdBQUFBLGdCQUNBQSxFQUFBQSxFQUFBQSxXQUFBQSxHQUFBQSxhQUNBQSxFQUFBQSxFQUFBQSxvQkFBQUEsR0FBQUEsc0JBQ0FBLEVBQUFBLEVBQUFBLGNBQUFBLEdBQUFBLGdCQUNBQSxFQUFBQSxFQUFBQSxlQUFBQSxHQUFBQSxpQkFDQUEsRUFBQUEsRUFBQUEsWUFBQUEsR0FBQUEsY0FDQUEsRUFBQUEsRUFBQUEsWUFBQUEsSUFBQUEsY0FDQUEsRUFBQUEsRUFBQUEsY0FBQUEsSUFBQUEsZ0JBQ0FBLEVBQUFBLEVBQUFBLGdCQUFBQSxJQUFBQSxrQkFDQUEsRUFBQUEsRUFBQUEsV0FBQUEsSUFBQUEsYUFDQUEsRUFBQUEsRUFBQUEsV0FBQUEsSUFBQUEsYUFDQUEsRUFBQUEsRUFBQUEsb0JBQUFBLElBQUFBLHNCQUNBQSxFQUFBQSxFQUFBQSxlQUFBQSxJQUFBQSxpQkFDQUEsRUFBQUEsRUFBQUEsbUJBQUFBLElBQUFBLHFCQUNBQSxFQUFBQSxFQUFBQSx3QkFBQUEsSUFBQUEsMEJBQ0FBLEVBQUFBLEVBQUFBLFFBQUFBLElBQUFBLFVBQ0FBLEVBQUFBLEVBQUFBLFlBQUFBLElBQUFBLGNBQ0FBLEVBQUFBLEVBQUFBLGFBQUFBLElBQUFBLGNBckJGLEVBQVlELEVBQUFBLGVBQUFBLEVBQUFBLGFBQVksS0F3QnhCLFNBQVlFLEdBQ1ZBLEVBQUFBLEVBQUFBLGNBQUFBLEdBQUFBLGdCQUNBQSxFQUFBQSxFQUFBQSxVQUFBQSxHQUFBQSxZQUNBQSxFQUFBQSxFQUFBQSxRQUFBQSxHQUFBQSxTQUhGLEVBQVlGLEVBQUFBLFdBQUFBLEVBQUFBLFNBQVEsS0FNcEIsU0FBWUcsR0FDVkEsRUFBQUEsRUFBQUEsVUFBQUEsR0FBQUEsWUFDQUEsRUFBQUEsRUFBQUEsT0FBQUEsR0FBQUEsU0FDQUEsRUFBQUEsRUFBQUEsS0FBQUEsR0FBQUEsT0FDQUEsRUFBQUEsRUFBQUEsT0FBQUEsR0FBQUEsU0FDQUEsRUFBQUEsRUFBQUEsUUFBQUEsR0FBQUEsVUFDQUEsRUFBQUEsRUFBQUEsT0FBQUEs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QU5xQixpQkFBakIvckIsVUFBVSxHQUNYQSxVQUFVLEdBRVYsR0FBRzFPLE1BQU1vSSxLQUFLc0csV0FJMUIsQ0FFRixFQTVFdUN6WCxFQUFPRCxRQUFTQyxFQUFPRCxRQUFVNnBDLFNBQ0EsMEJBQWpCLEtBQWlCLHlEQ0Z4RTVwQyxFQUFPRCxRQUFVOHBDLFFBQVEsaUNDQXpCN3BDLEVBQU9ELFFBQVU4cEMsUUFBUSw2QkNBekI3cEMsRUFBT0QsUUFBVThwQyxRQUFRLCtCQ0F6QjdwQyxFQUFPRCxRQUFVOHBDLFFBQVEsZ0NDQXpCN3BDLEVBQU9ELFFBQVU4cEMsUUFBUSw2QkNBekI3cEMsRUFBT0QsUUFBVThwQyxRQUFRLCtCQ0F6QjdwQyxFQUFPRCxRQUFVOHBDLFFBQVEsaUNDQXpCN3BDLEVBQU9ELFFBQVU4cEMsUUFBUSw4QkNBekI3cEMsRUFBT0QsUUFBVThwQyxRQUFRLDhCQ0F6QjdwQyxFQUFPRCxRQUFVOHBDLFFBQVEsK0JDQXpCN3BDLEVBQU9ELFFBQVU4cEMsUUFBUSw4cmxKQ0NyQkMsRUFBMkIsQ0FBQyxFQ0U1QkMsRURDSixTQUFTQyxFQUFvQkMsR0FFNUIsSUFBSUMsRUFBZUosRUFBeUJHLEdBQzVDLFFBQXFCOWlDLElBQWpCK2lDLEVBQ0gsT0FBT0EsRUFBYW5xQyxRQUdyQixJQUFJQyxFQUFTOHBDLEVBQXlCRyxHQUFZLENBR2pEbHFDLFFBQVMsQ0FBQyxHQU9YLE9BSEFvcUMsRUFBb0JGLEdBQVU5NEIsS0FBS25SLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNpcUMsR0FHcEVocUMsRUFBT0QsT0FDZixDQ25CMEJpcUMsQ0FBb0Isa0JsR085QyxNaUdUSUYsRUNFQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9tYWlsamV0L3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2Fib3J0LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2FzeW5jLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2RlZmVyLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2l0ZXJhdGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvc3RhdGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvdGVybWluYXRvci5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L3BhcmFsbGVsLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvc2VyaWFsLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvc2VyaWFsT3JkZXJlZC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2h0dHAuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvbWVyZ2VDb25maWcuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2Vudi9Gb3JtRGF0YS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZW52L2RhdGEuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvY2xpZW50L2luZGV4LnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi9yZXF1ZXN0L0h0dHBNZXRob2RzLnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvcmVxdWVzdC9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9DYW1wYWlnbi50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9Db21tb24udHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvQ29udGFjdC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9NZXNzYWdlLnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvdHlwZXMvYXBpL1NlZ21lbnRhdGlvbi50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9TZW5kRW1haWwudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvU2VuZGVyQWRkcmVzc0FuZERvbWFpbi50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9TZXR0aW5nLnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvdHlwZXMvYXBpL1N0YXRpc3RpYy50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9UZW1wbGF0ZS50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9XZWJob29rLnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvdHlwZXMvYXBpL2luZGV4LnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvdXRpbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL2xpYi91dGlscy9pc05pbC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3V0aWxzL2lzTnVsbC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3V0aWxzL2lzUHVyZU9iamVjdC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbGliL3V0aWxzL2lzVW5kZWZpbmVkLnRzIiwid2VicGFjazovL21haWxqZXQvLi9saWIvdXRpbHMvc2V0VmFsdWVJZk5vdE5pbC50cyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2JpZ251bWJlci5qcy9iaWdudW1iZXIuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9jb21iaW5lZC1zdHJlYW0vbGliL2NvbWJpbmVkX3N0cmVhbS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2RlYnVnL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9icm93c2VyLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2NvbW1vbi5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9ub2RlLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvZGVsYXllZC1zdHJlYW0vbGliL2RlbGF5ZWRfc3RyZWFtLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvZm9sbG93LXJlZGlyZWN0cy9kZWJ1Zy5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2ZvbGxvdy1yZWRpcmVjdHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9mb3JtLWRhdGEvbGliL2Zvcm1fZGF0YS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvcG9wdWxhdGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2pzb24tYmlnaW50L2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvanNvbi1iaWdpbnQvbGliL3BhcnNlLmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvanNvbi1iaWdpbnQvbGliL3N0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly9tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL21pbWUtZGIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy9taW1lLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovL21haWxqZXQvLi9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC8uL25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiYXNzZXJ0XCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiZnNcIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJodHRwXCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiaHR0cHNcIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJvc1wiIiwid2VicGFjazovL21haWxqZXQvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcInBhdGhcIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJzdHJlYW1cIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJ0dHlcIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJ1cmxcIiIsIndlYnBhY2s6Ly9tYWlsamV0L2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJ1dGlsXCIiLCJ3ZWJwYWNrOi8vbWFpbGpldC9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiemxpYlwiIiwid2VicGFjazovL21haWxqZXQvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vbWFpbGpldC93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wibWFpbGpldFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJtYWlsamV0XCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgKCkgPT4ge1xucmV0dXJuICIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgcGFyYWxsZWwgICAgICA6IHJlcXVpcmUoJy4vcGFyYWxsZWwuanMnKSxcbiAgc2VyaWFsICAgICAgICA6IHJlcXVpcmUoJy4vc2VyaWFsLmpzJyksXG4gIHNlcmlhbE9yZGVyZWQgOiByZXF1aXJlKCcuL3NlcmlhbE9yZGVyZWQuanMnKVxufTtcbiIsIi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBhYm9ydDtcblxuLyoqXG4gKiBBYm9ydHMgbGVmdG92ZXIgYWN0aXZlIGpvYnNcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgLSBjdXJyZW50IHN0YXRlIG9iamVjdFxuICovXG5mdW5jdGlvbiBhYm9ydChzdGF0ZSlcbntcbiAgT2JqZWN0LmtleXMoc3RhdGUuam9icykuZm9yRWFjaChjbGVhbi5iaW5kKHN0YXRlKSk7XG5cbiAgLy8gcmVzZXQgbGVmdG92ZXIgam9ic1xuICBzdGF0ZS5qb2JzID0ge307XG59XG5cbi8qKlxuICogQ2xlYW5zIHVwIGxlZnRvdmVyIGpvYiBieSBpbnZva2luZyBhYm9ydCBmdW5jdGlvbiBmb3IgdGhlIHByb3ZpZGVkIGpvYiBpZFxuICpcbiAqIEB0aGlzICBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBrZXkgLSBqb2IgaWQgdG8gYWJvcnRcbiAqL1xuZnVuY3Rpb24gY2xlYW4oa2V5KVxue1xuICBpZiAodHlwZW9mIHRoaXMuam9ic1trZXldID09ICdmdW5jdGlvbicpXG4gIHtcbiAgICB0aGlzLmpvYnNba2V5XSgpO1xuICB9XG59XG4iLCJ2YXIgZGVmZXIgPSByZXF1aXJlKCcuL2RlZmVyLmpzJyk7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBhc3luYztcblxuLyoqXG4gKiBSdW5zIHByb3ZpZGVkIGNhbGxiYWNrIGFzeW5jaHJvbm91c2x5XG4gKiBldmVuIGlmIGNhbGxiYWNrIGl0c2VsZiBpcyBub3RcbiAqXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gY2FsbGJhY2sgdG8gaW52b2tlXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gYXVnbWVudGVkIGNhbGxiYWNrXG4gKi9cbmZ1bmN0aW9uIGFzeW5jKGNhbGxiYWNrKVxue1xuICB2YXIgaXNBc3luYyA9IGZhbHNlO1xuXG4gIC8vIGNoZWNrIGlmIGFzeW5jIGhhcHBlbmVkXG4gIGRlZmVyKGZ1bmN0aW9uKCkgeyBpc0FzeW5jID0gdHJ1ZTsgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGFzeW5jX2NhbGxiYWNrKGVyciwgcmVzdWx0KVxuICB7XG4gICAgaWYgKGlzQXN5bmMpXG4gICAge1xuICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgZGVmZXIoZnVuY3Rpb24gbmV4dFRpY2tfY2FsbGJhY2soKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGRlZmVyO1xuXG4vKipcbiAqIFJ1bnMgcHJvdmlkZWQgZnVuY3Rpb24gb24gbmV4dCBpdGVyYXRpb24gb2YgdGhlIGV2ZW50IGxvb3BcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiAtIGZ1bmN0aW9uIHRvIHJ1blxuICovXG5mdW5jdGlvbiBkZWZlcihmbilcbntcbiAgdmFyIG5leHRUaWNrID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PSAnZnVuY3Rpb24nXG4gICAgPyBzZXRJbW1lZGlhdGVcbiAgICA6IChcbiAgICAgIHR5cGVvZiBwcm9jZXNzID09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09ICdmdW5jdGlvbidcbiAgICAgID8gcHJvY2Vzcy5uZXh0VGlja1xuICAgICAgOiBudWxsXG4gICAgKTtcblxuICBpZiAobmV4dFRpY2spXG4gIHtcbiAgICBuZXh0VGljayhmbik7XG4gIH1cbiAgZWxzZVxuICB7XG4gICAgc2V0VGltZW91dChmbiwgMCk7XG4gIH1cbn1cbiIsInZhciBhc3luYyA9IHJlcXVpcmUoJy4vYXN5bmMuanMnKVxuICAsIGFib3J0ID0gcmVxdWlyZSgnLi9hYm9ydC5qcycpXG4gIDtcblxuLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IGl0ZXJhdGU7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlYWNoIGpvYiBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBqb2Igc3RhdHVzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBjYWxsYmFjaylcbntcbiAgLy8gc3RvcmUgY3VycmVudCBpbmRleFxuICB2YXIga2V5ID0gc3RhdGVbJ2tleWVkTGlzdCddID8gc3RhdGVbJ2tleWVkTGlzdCddW3N0YXRlLmluZGV4XSA6IHN0YXRlLmluZGV4O1xuXG4gIHN0YXRlLmpvYnNba2V5XSA9IHJ1bkpvYihpdGVyYXRvciwga2V5LCBsaXN0W2tleV0sIGZ1bmN0aW9uKGVycm9yLCBvdXRwdXQpXG4gIHtcbiAgICAvLyBkb24ndCByZXBlYXQgeW91cnNlbGZcbiAgICAvLyBza2lwIHNlY29uZGFyeSBjYWxsYmFja3NcbiAgICBpZiAoIShrZXkgaW4gc3RhdGUuam9icykpXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIGpvYnNcbiAgICBkZWxldGUgc3RhdGUuam9ic1trZXldO1xuXG4gICAgaWYgKGVycm9yKVxuICAgIHtcbiAgICAgIC8vIGRvbid0IHByb2Nlc3MgcmVzdCBvZiB0aGUgcmVzdWx0c1xuICAgICAgLy8gc3RvcCBzdGlsbCBhY3RpdmUgam9ic1xuICAgICAgLy8gYW5kIHJlc2V0IHRoZSBsaXN0XG4gICAgICBhYm9ydChzdGF0ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBzdGF0ZS5yZXN1bHRzW2tleV0gPSBvdXRwdXQ7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIHNhbHZhZ2VkIHJlc3VsdHNcbiAgICBjYWxsYmFjayhlcnJvciwgc3RhdGUucmVzdWx0cyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBqb2IgZWxlbWVudFxuICpcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBpbnZva2VcbiAqIEBwYXJhbSAgIHtzdHJpbmd8bnVtYmVyfSBrZXkgLSBrZXkvaW5kZXggb2YgdGhlIGVsZW1lbnQgaW4gdGhlIGxpc3Qgb2Ygam9ic1xuICogQHBhcmFtICAge21peGVkfSBpdGVtIC0gam9iIGRlc2NyaXB0aW9uXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCBhZnRlciBpdGVyYXRvciBpcyBkb25lIHdpdGggdGhlIGpvYlxuICogQHJldHVybnMge2Z1bmN0aW9ufG1peGVkfSAtIGpvYiBhYm9ydCBmdW5jdGlvbiBvciBzb21ldGhpbmcgZWxzZVxuICovXG5mdW5jdGlvbiBydW5Kb2IoaXRlcmF0b3IsIGtleSwgaXRlbSwgY2FsbGJhY2spXG57XG4gIHZhciBhYm9ydGVyO1xuXG4gIC8vIGFsbG93IHNob3J0Y3V0IGlmIGl0ZXJhdG9yIGV4cGVjdHMgb25seSB0d28gYXJndW1lbnRzXG4gIGlmIChpdGVyYXRvci5sZW5ndGggPT0gMilcbiAge1xuICAgIGFib3J0ZXIgPSBpdGVyYXRvcihpdGVtLCBhc3luYyhjYWxsYmFjaykpO1xuICB9XG4gIC8vIG90aGVyd2lzZSBnbyB3aXRoIGZ1bGwgdGhyZWUgYXJndW1lbnRzXG4gIGVsc2VcbiAge1xuICAgIGFib3J0ZXIgPSBpdGVyYXRvcihpdGVtLCBrZXksIGFzeW5jKGNhbGxiYWNrKSk7XG4gIH1cblxuICByZXR1cm4gYWJvcnRlcjtcbn1cbiIsIi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBzdGF0ZTtcblxuLyoqXG4gKiBDcmVhdGVzIGluaXRpYWwgc3RhdGUgb2JqZWN0XG4gKiBmb3IgaXRlcmF0aW9uIG92ZXIgbGlzdFxuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBsaXN0IHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufG51bGx9IHNvcnRNZXRob2QgLSBmdW5jdGlvbiB0byB1c2UgZm9yIGtleXMgc29ydCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGBudWxsYCB0byBrZWVwIHRoZW0gYXMgaXNcbiAqIEByZXR1cm5zIHtvYmplY3R9IC0gaW5pdGlhbCBzdGF0ZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gc3RhdGUobGlzdCwgc29ydE1ldGhvZClcbntcbiAgdmFyIGlzTmFtZWRMaXN0ID0gIUFycmF5LmlzQXJyYXkobGlzdClcbiAgICAsIGluaXRTdGF0ZSA9XG4gICAge1xuICAgICAgaW5kZXggICAgOiAwLFxuICAgICAga2V5ZWRMaXN0OiBpc05hbWVkTGlzdCB8fCBzb3J0TWV0aG9kID8gT2JqZWN0LmtleXMobGlzdCkgOiBudWxsLFxuICAgICAgam9icyAgICAgOiB7fSxcbiAgICAgIHJlc3VsdHMgIDogaXNOYW1lZExpc3QgPyB7fSA6IFtdLFxuICAgICAgc2l6ZSAgICAgOiBpc05hbWVkTGlzdCA/IE9iamVjdC5rZXlzKGxpc3QpLmxlbmd0aCA6IGxpc3QubGVuZ3RoXG4gICAgfVxuICAgIDtcblxuICBpZiAoc29ydE1ldGhvZClcbiAge1xuICAgIC8vIHNvcnQgYXJyYXkga2V5cyBiYXNlZCBvbiBpdCdzIHZhbHVlc1xuICAgIC8vIHNvcnQgb2JqZWN0J3Mga2V5cyBqdXN0IG9uIG93biBtZXJpdFxuICAgIGluaXRTdGF0ZS5rZXllZExpc3Quc29ydChpc05hbWVkTGlzdCA/IHNvcnRNZXRob2QgOiBmdW5jdGlvbihhLCBiKVxuICAgIHtcbiAgICAgIHJldHVybiBzb3J0TWV0aG9kKGxpc3RbYV0sIGxpc3RbYl0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGluaXRTdGF0ZTtcbn1cbiIsInZhciBhYm9ydCA9IHJlcXVpcmUoJy4vYWJvcnQuanMnKVxuICAsIGFzeW5jID0gcmVxdWlyZSgnLi9hc3luYy5qcycpXG4gIDtcblxuLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHRlcm1pbmF0b3I7XG5cbi8qKlxuICogVGVybWluYXRlcyBqb2JzIGluIHRoZSBhdHRhY2hlZCBzdGF0ZSBjb250ZXh0XG4gKlxuICogQHRoaXMgIEFzeW5jS2l0U3RhdGUjXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGZpbmFsIGNhbGxiYWNrIHRvIGludm9rZSBhZnRlciB0ZXJtaW5hdGlvblxuICovXG5mdW5jdGlvbiB0ZXJtaW5hdG9yKGNhbGxiYWNrKVxue1xuICBpZiAoIU9iamVjdC5rZXlzKHRoaXMuam9icykubGVuZ3RoKVxuICB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZmFzdCBmb3J3YXJkIGl0ZXJhdGlvbiBpbmRleFxuICB0aGlzLmluZGV4ID0gdGhpcy5zaXplO1xuXG4gIC8vIGFib3J0IGpvYnNcbiAgYWJvcnQodGhpcyk7XG5cbiAgLy8gc2VuZCBiYWNrIHJlc3VsdHMgd2UgaGF2ZSBzbyBmYXJcbiAgYXN5bmMoY2FsbGJhY2spKG51bGwsIHRoaXMucmVzdWx0cyk7XG59XG4iLCJ2YXIgaXRlcmF0ZSAgICA9IHJlcXVpcmUoJy4vbGliL2l0ZXJhdGUuanMnKVxuICAsIGluaXRTdGF0ZSAgPSByZXF1aXJlKCcuL2xpYi9zdGF0ZS5qcycpXG4gICwgdGVybWluYXRvciA9IHJlcXVpcmUoJy4vbGliL3Rlcm1pbmF0b3IuanMnKVxuICA7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gcGFyYWxsZWw7XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIGFycmF5IGVsZW1lbnRzIGluIHBhcmFsbGVsXG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCB3aGVuIGFsbCBlbGVtZW50cyBwcm9jZXNzZWRcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBqb2JzIHRlcm1pbmF0b3JcbiAqL1xuZnVuY3Rpb24gcGFyYWxsZWwobGlzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKVxue1xuICB2YXIgc3RhdGUgPSBpbml0U3RhdGUobGlzdCk7XG5cbiAgd2hpbGUgKHN0YXRlLmluZGV4IDwgKHN0YXRlWydrZXllZExpc3QnXSB8fCBsaXN0KS5sZW5ndGgpXG4gIHtcbiAgICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgZnVuY3Rpb24oZXJyb3IsIHJlc3VsdClcbiAgICB7XG4gICAgICBpZiAoZXJyb3IpXG4gICAgICB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yLCByZXN1bHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGxvb2tzIGxpa2UgaXQncyB0aGUgbGFzdCBvbmVcbiAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0ZS5qb2JzKS5sZW5ndGggPT09IDApXG4gICAgICB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHN0YXRlLnJlc3VsdHMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGF0ZS5pbmRleCsrO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1pbmF0b3IuYmluZChzdGF0ZSwgY2FsbGJhY2spO1xufVxuIiwidmFyIHNlcmlhbE9yZGVyZWQgPSByZXF1aXJlKCcuL3NlcmlhbE9yZGVyZWQuanMnKTtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBzZXJpYWw7XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIGFycmF5IGVsZW1lbnRzIGluIHNlcmllc1xuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbChsaXN0LCBpdGVyYXRvciwgY2FsbGJhY2spXG57XG4gIHJldHVybiBzZXJpYWxPcmRlcmVkKGxpc3QsIGl0ZXJhdG9yLCBudWxsLCBjYWxsYmFjayk7XG59XG4iLCJ2YXIgaXRlcmF0ZSAgICA9IHJlcXVpcmUoJy4vbGliL2l0ZXJhdGUuanMnKVxuICAsIGluaXRTdGF0ZSAgPSByZXF1aXJlKCcuL2xpYi9zdGF0ZS5qcycpXG4gICwgdGVybWluYXRvciA9IHJlcXVpcmUoJy4vbGliL3Rlcm1pbmF0b3IuanMnKVxuICA7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gc2VyaWFsT3JkZXJlZDtcbi8vIHNvcnRpbmcgaGVscGVyc1xubW9kdWxlLmV4cG9ydHMuYXNjZW5kaW5nICA9IGFzY2VuZGluZztcbm1vZHVsZS5leHBvcnRzLmRlc2NlbmRpbmcgPSBkZXNjZW5kaW5nO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBzb3J0ZWQgYXJyYXkgZWxlbWVudHMgaW4gc2VyaWVzXG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IHNvcnRNZXRob2QgLSBjdXN0b20gc29ydCBmdW5jdGlvblxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbE9yZGVyZWQobGlzdCwgaXRlcmF0b3IsIHNvcnRNZXRob2QsIGNhbGxiYWNrKVxue1xuICB2YXIgc3RhdGUgPSBpbml0U3RhdGUobGlzdCwgc29ydE1ldGhvZCk7XG5cbiAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGZ1bmN0aW9uIGl0ZXJhdG9ySGFuZGxlcihlcnJvciwgcmVzdWx0KVxuICB7XG4gICAgaWYgKGVycm9yKVxuICAgIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yLCByZXN1bHQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN0YXRlLmluZGV4Kys7XG5cbiAgICAvLyBhcmUgd2UgdGhlcmUgeWV0P1xuICAgIGlmIChzdGF0ZS5pbmRleCA8IChzdGF0ZVsna2V5ZWRMaXN0J10gfHwgbGlzdCkubGVuZ3RoKVxuICAgIHtcbiAgICAgIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBpdGVyYXRvckhhbmRsZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGRvbmUgaGVyZVxuICAgIGNhbGxiYWNrKG51bGwsIHN0YXRlLnJlc3VsdHMpO1xuICB9KTtcblxuICByZXR1cm4gdGVybWluYXRvci5iaW5kKHN0YXRlLCBjYWxsYmFjayk7XG59XG5cbi8qXG4gKiAtLSBTb3J0IG1ldGhvZHNcbiAqL1xuXG4vKipcbiAqIHNvcnQgaGVscGVyIHRvIHNvcnQgYXJyYXkgZWxlbWVudHMgaW4gYXNjZW5kaW5nIG9yZGVyXG4gKlxuICogQHBhcmFtICAge21peGVkfSBhIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGIgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gY29tcGFyaXNvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYXNjZW5kaW5nKGEsIGIpXG57XG4gIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbn1cblxuLyoqXG4gKiBzb3J0IGhlbHBlciB0byBzb3J0IGFycmF5IGVsZW1lbnRzIGluIGRlc2NlbmRpbmcgb3JkZXJcbiAqXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGEgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSAgIHttaXhlZH0gYiAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHJldHVybnMge251bWJlcn0gLSBjb21wYXJpc29uIHJlc3VsdFxuICovXG5mdW5jdGlvbiBkZXNjZW5kaW5nKGEsIGIpXG57XG4gIHJldHVybiAtMSAqIGFzY2VuZGluZyhhLCBiKTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXhpb3MnKTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4uL2NvcmUvYnVpbGRGdWxsUGF0aCcpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbnZhciBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG52YXIgaHR0cEZvbGxvdyA9IHJlcXVpcmUoJ2ZvbGxvdy1yZWRpcmVjdHMnKS5odHRwO1xudmFyIGh0dHBzRm9sbG93ID0gcmVxdWlyZSgnZm9sbG93LXJlZGlyZWN0cycpLmh0dHBzO1xudmFyIHVybCA9IHJlcXVpcmUoJ3VybCcpO1xudmFyIHpsaWIgPSByZXF1aXJlKCd6bGliJyk7XG52YXIgVkVSU0lPTiA9IHJlcXVpcmUoJy4vLi4vZW52L2RhdGEnKS52ZXJzaW9uO1xudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMvdHJhbnNpdGlvbmFsJyk7XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xuXG52YXIgaXNIdHRwcyA9IC9odHRwczo/LztcblxudmFyIHN1cHBvcnRlZFByb3RvY29scyA9IFsgJ2h0dHA6JywgJ2h0dHBzOicsICdmaWxlOicgXTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHtodHRwLkNsaWVudFJlcXVlc3RBcmdzfSBvcHRpb25zXG4gKiBAcGFyYW0ge0F4aW9zUHJveHlDb25maWd9IHByb3h5XG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb25cbiAqL1xuZnVuY3Rpb24gc2V0UHJveHkob3B0aW9ucywgcHJveHksIGxvY2F0aW9uKSB7XG4gIG9wdGlvbnMuaG9zdG5hbWUgPSBwcm94eS5ob3N0O1xuICBvcHRpb25zLmhvc3QgPSBwcm94eS5ob3N0O1xuICBvcHRpb25zLnBvcnQgPSBwcm94eS5wb3J0O1xuICBvcHRpb25zLnBhdGggPSBsb2NhdGlvbjtcblxuICAvLyBCYXNpYyBwcm94eSBhdXRob3JpemF0aW9uXG4gIGlmIChwcm94eS5hdXRoKSB7XG4gICAgdmFyIGJhc2U2NCA9IEJ1ZmZlci5mcm9tKHByb3h5LmF1dGgudXNlcm5hbWUgKyAnOicgKyBwcm94eS5hdXRoLnBhc3N3b3JkLCAndXRmOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBvcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICsgYmFzZTY0O1xuICB9XG5cbiAgLy8gSWYgYSBwcm94eSBpcyB1c2VkLCBhbnkgcmVkaXJlY3RzIG11c3QgYWxzbyBwYXNzIHRocm91Z2ggdGhlIHByb3h5XG4gIG9wdGlvbnMuYmVmb3JlUmVkaXJlY3QgPSBmdW5jdGlvbiBiZWZvcmVSZWRpcmVjdChyZWRpcmVjdGlvbikge1xuICAgIHJlZGlyZWN0aW9uLmhlYWRlcnMuaG9zdCA9IHJlZGlyZWN0aW9uLmhvc3Q7XG4gICAgc2V0UHJveHkocmVkaXJlY3Rpb24sIHByb3h5LCByZWRpcmVjdGlvbi5ocmVmKTtcbiAgfTtcbn1cblxuLyplc2xpbnQgY29uc2lzdGVudC1yZXR1cm46MCovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGh0dHBBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hIdHRwUmVxdWVzdChyZXNvbHZlUHJvbWlzZSwgcmVqZWN0UHJvbWlzZSkge1xuICAgIHZhciBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgcmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUodmFsdWUpIHtcbiAgICAgIGRvbmUoKTtcbiAgICAgIHJlc29sdmVQcm9taXNlKHZhbHVlKTtcbiAgICB9O1xuICAgIHZhciByZWplY3RlZCA9IGZhbHNlO1xuICAgIHZhciByZWplY3QgPSBmdW5jdGlvbiByZWplY3QodmFsdWUpIHtcbiAgICAgIGRvbmUoKTtcbiAgICAgIHJlamVjdGVkID0gdHJ1ZTtcbiAgICAgIHJlamVjdFByb21pc2UodmFsdWUpO1xuICAgIH07XG4gICAgdmFyIGRhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuICAgIHZhciBoZWFkZXJOYW1lcyA9IHt9O1xuXG4gICAgT2JqZWN0LmtleXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbiBzdG9yZUxvd2VyTmFtZShuYW1lKSB7XG4gICAgICBoZWFkZXJOYW1lc1tuYW1lLnRvTG93ZXJDYXNlKCldID0gbmFtZTtcbiAgICB9KTtcblxuICAgIC8vIFNldCBVc2VyLUFnZW50IChyZXF1aXJlZCBieSBzb21lIHNlcnZlcnMpXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcy9pc3N1ZXMvNjlcbiAgICBpZiAoJ3VzZXItYWdlbnQnIGluIGhlYWRlck5hbWVzKSB7XG4gICAgICAvLyBVc2VyLUFnZW50IGlzIHNwZWNpZmllZDsgaGFuZGxlIGNhc2Ugd2hlcmUgbm8gVUEgaGVhZGVyIGlzIGRlc2lyZWRcbiAgICAgIGlmICghaGVhZGVyc1toZWFkZXJOYW1lc1sndXNlci1hZ2VudCddXSkge1xuICAgICAgICBkZWxldGUgaGVhZGVyc1toZWFkZXJOYW1lc1sndXNlci1hZ2VudCddXTtcbiAgICAgIH1cbiAgICAgIC8vIE90aGVyd2lzZSwgdXNlIHNwZWNpZmllZCB2YWx1ZVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPbmx5IHNldCBoZWFkZXIgaWYgaXQgaGFzbid0IGJlZW4gc2V0IGluIGNvbmZpZ1xuICAgICAgaGVhZGVyc1snVXNlci1BZ2VudCddID0gJ2F4aW9zLycgKyBWRVJTSU9OO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnQgZm9yIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2Zvcm0tZGF0YSBhcGlcbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSAmJiB1dGlscy5pc0Z1bmN0aW9uKGRhdGEuZ2V0SGVhZGVycykpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oaGVhZGVycywgZGF0YS5nZXRIZWFkZXJzKCkpO1xuICAgIH0gZWxzZSBpZiAoZGF0YSAmJiAhdXRpbHMuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkby4uLlxuICAgICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCAndXRmLTgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgJ0RhdGEgYWZ0ZXIgdHJhbnNmb3JtYXRpb24gbXVzdCBiZSBhIHN0cmluZywgYW4gQXJyYXlCdWZmZXIsIGEgQnVmZmVyLCBvciBhIFN0cmVhbScsXG4gICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgICkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLm1heEJvZHlMZW5ndGggPiAtMSAmJiBkYXRhLmxlbmd0aCA+IGNvbmZpZy5tYXhCb2R5TGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgJ1JlcXVlc3QgYm9keSBsYXJnZXIgdGhhbiBtYXhCb2R5TGVuZ3RoIGxpbWl0JyxcbiAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgICBjb25maWdcbiAgICAgICAgKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBDb250ZW50LUxlbmd0aCBoZWFkZXIgaWYgZGF0YSBleGlzdHNcbiAgICAgIGlmICghaGVhZGVyTmFtZXNbJ2NvbnRlbnQtbGVuZ3RoJ10pIHtcbiAgICAgICAgaGVhZGVyc1snQ29udGVudC1MZW5ndGgnXSA9IGRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICB2YXIgYXV0aCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgfHwgJyc7XG4gICAgICBhdXRoID0gdXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZDtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSB1cmxcbiAgICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICB2YXIgcGFyc2VkID0gdXJsLnBhcnNlKGZ1bGxQYXRoKTtcbiAgICB2YXIgcHJvdG9jb2wgPSBwYXJzZWQucHJvdG9jb2wgfHwgc3VwcG9ydGVkUHJvdG9jb2xzWzBdO1xuXG4gICAgaWYgKHN1cHBvcnRlZFByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wsXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULFxuICAgICAgICBjb25maWdcbiAgICAgICkpO1xuICAgIH1cblxuICAgIGlmICghYXV0aCAmJiBwYXJzZWQuYXV0aCkge1xuICAgICAgdmFyIHVybEF1dGggPSBwYXJzZWQuYXV0aC5zcGxpdCgnOicpO1xuICAgICAgdmFyIHVybFVzZXJuYW1lID0gdXJsQXV0aFswXSB8fCAnJztcbiAgICAgIHZhciB1cmxQYXNzd29yZCA9IHVybEF1dGhbMV0gfHwgJyc7XG4gICAgICBhdXRoID0gdXJsVXNlcm5hbWUgKyAnOicgKyB1cmxQYXNzd29yZDtcbiAgICB9XG5cbiAgICBpZiAoYXV0aCAmJiBoZWFkZXJOYW1lcy5hdXRob3JpemF0aW9uKSB7XG4gICAgICBkZWxldGUgaGVhZGVyc1toZWFkZXJOYW1lcy5hdXRob3JpemF0aW9uXTtcbiAgICB9XG5cbiAgICB2YXIgaXNIdHRwc1JlcXVlc3QgPSBpc0h0dHBzLnRlc3QocHJvdG9jb2wpO1xuICAgIHZhciBhZ2VudCA9IGlzSHR0cHNSZXF1ZXN0ID8gY29uZmlnLmh0dHBzQWdlbnQgOiBjb25maWcuaHR0cEFnZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIGJ1aWxkVVJMKHBhcnNlZC5wYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlxcPy8sICcnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHZhciBjdXN0b21FcnIgPSBuZXcgRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgY3VzdG9tRXJyLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgIGN1c3RvbUVyci51cmwgPSBjb25maWcudXJsO1xuICAgICAgY3VzdG9tRXJyLmV4aXN0cyA9IHRydWU7XG4gICAgICByZWplY3QoY3VzdG9tRXJyKTtcbiAgICB9XG5cbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHBhdGg6IGJ1aWxkVVJMKHBhcnNlZC5wYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlxcPy8sICcnKSxcbiAgICAgIG1ldGhvZDogY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIGFnZW50OiBhZ2VudCxcbiAgICAgIGFnZW50czogeyBodHRwOiBjb25maWcuaHR0cEFnZW50LCBodHRwczogY29uZmlnLmh0dHBzQWdlbnQgfSxcbiAgICAgIGF1dGg6IGF1dGhcbiAgICB9O1xuXG4gICAgaWYgKGNvbmZpZy5zb2NrZXRQYXRoKSB7XG4gICAgICBvcHRpb25zLnNvY2tldFBhdGggPSBjb25maWcuc29ja2V0UGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5ob3N0bmFtZSA9IHBhcnNlZC5ob3N0bmFtZTtcbiAgICAgIG9wdGlvbnMucG9ydCA9IHBhcnNlZC5wb3J0O1xuICAgIH1cblxuICAgIHZhciBwcm94eSA9IGNvbmZpZy5wcm94eTtcbiAgICBpZiAoIXByb3h5ICYmIHByb3h5ICE9PSBmYWxzZSkge1xuICAgICAgdmFyIHByb3h5RW52ID0gcHJvdG9jb2wuc2xpY2UoMCwgLTEpICsgJ19wcm94eSc7XG4gICAgICB2YXIgcHJveHlVcmwgPSBwcm9jZXNzLmVudltwcm94eUVudl0gfHwgcHJvY2Vzcy5lbnZbcHJveHlFbnYudG9VcHBlckNhc2UoKV07XG4gICAgICBpZiAocHJveHlVcmwpIHtcbiAgICAgICAgdmFyIHBhcnNlZFByb3h5VXJsID0gdXJsLnBhcnNlKHByb3h5VXJsKTtcbiAgICAgICAgdmFyIG5vUHJveHlFbnYgPSBwcm9jZXNzLmVudi5ub19wcm94eSB8fCBwcm9jZXNzLmVudi5OT19QUk9YWTtcbiAgICAgICAgdmFyIHNob3VsZFByb3h5ID0gdHJ1ZTtcblxuICAgICAgICBpZiAobm9Qcm94eUVudikge1xuICAgICAgICAgIHZhciBub1Byb3h5ID0gbm9Qcm94eUVudi5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiB0cmltKHMpIHtcbiAgICAgICAgICAgIHJldHVybiBzLnRyaW0oKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHNob3VsZFByb3h5ID0gIW5vUHJveHkuc29tZShmdW5jdGlvbiBwcm94eU1hdGNoKHByb3h5RWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKCFwcm94eUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3h5RWxlbWVudCA9PT0gJyonKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3h5RWxlbWVudFswXSA9PT0gJy4nICYmXG4gICAgICAgICAgICAgICAgcGFyc2VkLmhvc3RuYW1lLnN1YnN0cihwYXJzZWQuaG9zdG5hbWUubGVuZ3RoIC0gcHJveHlFbGVtZW50Lmxlbmd0aCkgPT09IHByb3h5RWxlbWVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlZC5ob3N0bmFtZSA9PT0gcHJveHlFbGVtZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZFByb3h5KSB7XG4gICAgICAgICAgcHJveHkgPSB7XG4gICAgICAgICAgICBob3N0OiBwYXJzZWRQcm94eVVybC5ob3N0bmFtZSxcbiAgICAgICAgICAgIHBvcnQ6IHBhcnNlZFByb3h5VXJsLnBvcnQsXG4gICAgICAgICAgICBwcm90b2NvbDogcGFyc2VkUHJveHlVcmwucHJvdG9jb2xcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHBhcnNlZFByb3h5VXJsLmF1dGgpIHtcbiAgICAgICAgICAgIHZhciBwcm94eVVybEF1dGggPSBwYXJzZWRQcm94eVVybC5hdXRoLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBwcm94eS5hdXRoID0ge1xuICAgICAgICAgICAgICB1c2VybmFtZTogcHJveHlVcmxBdXRoWzBdLFxuICAgICAgICAgICAgICBwYXNzd29yZDogcHJveHlVcmxBdXRoWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm94eSkge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzLmhvc3QgPSBwYXJzZWQuaG9zdG5hbWUgKyAocGFyc2VkLnBvcnQgPyAnOicgKyBwYXJzZWQucG9ydCA6ICcnKTtcbiAgICAgIHNldFByb3h5KG9wdGlvbnMsIHByb3h5LCBwcm90b2NvbCArICcvLycgKyBwYXJzZWQuaG9zdG5hbWUgKyAocGFyc2VkLnBvcnQgPyAnOicgKyBwYXJzZWQucG9ydCA6ICcnKSArIG9wdGlvbnMucGF0aCk7XG4gICAgfVxuXG4gICAgdmFyIHRyYW5zcG9ydDtcbiAgICB2YXIgaXNIdHRwc1Byb3h5ID0gaXNIdHRwc1JlcXVlc3QgJiYgKHByb3h5ID8gaXNIdHRwcy50ZXN0KHByb3h5LnByb3RvY29sKSA6IHRydWUpO1xuICAgIGlmIChjb25maWcudHJhbnNwb3J0KSB7XG4gICAgICB0cmFuc3BvcnQgPSBjb25maWcudHJhbnNwb3J0O1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLm1heFJlZGlyZWN0cyA9PT0gMCkge1xuICAgICAgdHJhbnNwb3J0ID0gaXNIdHRwc1Byb3h5ID8gaHR0cHMgOiBodHRwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29uZmlnLm1heFJlZGlyZWN0cykge1xuICAgICAgICBvcHRpb25zLm1heFJlZGlyZWN0cyA9IGNvbmZpZy5tYXhSZWRpcmVjdHM7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLmJlZm9yZVJlZGlyZWN0KSB7XG4gICAgICAgIG9wdGlvbnMuYmVmb3JlUmVkaXJlY3QgPSBjb25maWcuYmVmb3JlUmVkaXJlY3Q7XG4gICAgICB9XG4gICAgICB0cmFuc3BvcnQgPSBpc0h0dHBzUHJveHkgPyBodHRwc0ZvbGxvdyA6IGh0dHBGb2xsb3c7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5tYXhCb2R5TGVuZ3RoID4gLTEpIHtcbiAgICAgIG9wdGlvbnMubWF4Qm9keUxlbmd0aCA9IGNvbmZpZy5tYXhCb2R5TGVuZ3RoO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuaW5zZWN1cmVIVFRQUGFyc2VyKSB7XG4gICAgICBvcHRpb25zLmluc2VjdXJlSFRUUFBhcnNlciA9IGNvbmZpZy5pbnNlY3VyZUhUVFBQYXJzZXI7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSByZXF1ZXN0XG4gICAgdmFyIHJlcSA9IHRyYW5zcG9ydC5yZXF1ZXN0KG9wdGlvbnMsIGZ1bmN0aW9uIGhhbmRsZVJlc3BvbnNlKHJlcykge1xuICAgICAgaWYgKHJlcS5hYm9ydGVkKSByZXR1cm47XG5cbiAgICAgIC8vIHVuY29tcHJlc3MgdGhlIHJlc3BvbnNlIGJvZHkgdHJhbnNwYXJlbnRseSBpZiByZXF1aXJlZFxuICAgICAgdmFyIHN0cmVhbSA9IHJlcztcblxuICAgICAgLy8gcmV0dXJuIHRoZSBsYXN0IHJlcXVlc3QgaW4gY2FzZSBvZiByZWRpcmVjdHNcbiAgICAgIHZhciBsYXN0UmVxdWVzdCA9IHJlcy5yZXEgfHwgcmVxO1xuXG5cbiAgICAgIC8vIGlmIG5vIGNvbnRlbnQsIGlzIEhFQUQgcmVxdWVzdCBvciBkZWNvbXByZXNzIGRpc2FibGVkIHdlIHNob3VsZCBub3QgZGVjb21wcmVzc1xuICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlICE9PSAyMDQgJiYgbGFzdFJlcXVlc3QubWV0aG9kICE9PSAnSEVBRCcgJiYgY29uZmlnLmRlY29tcHJlc3MgIT09IGZhbHNlKSB7XG4gICAgICAgIHN3aXRjaCAocmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXSkge1xuICAgICAgICAvKmVzbGludCBkZWZhdWx0LWNhc2U6MCovXG4gICAgICAgIGNhc2UgJ2d6aXAnOlxuICAgICAgICBjYXNlICdjb21wcmVzcyc6XG4gICAgICAgIGNhc2UgJ2RlZmxhdGUnOlxuICAgICAgICAvLyBhZGQgdGhlIHVuemlwcGVyIHRvIHRoZSBib2R5IHN0cmVhbSBwcm9jZXNzaW5nIHBpcGVsaW5lXG4gICAgICAgICAgc3RyZWFtID0gc3RyZWFtLnBpcGUoemxpYi5jcmVhdGVVbnppcCgpKTtcblxuICAgICAgICAgIC8vIHJlbW92ZSB0aGUgY29udGVudC1lbmNvZGluZyBpbiBvcmRlciB0byBub3QgY29uZnVzZSBkb3duc3RyZWFtIG9wZXJhdGlvbnNcbiAgICAgICAgICBkZWxldGUgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgICAgIHN0YXR1czogcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNNZXNzYWdlLFxuICAgICAgICBoZWFkZXJzOiByZXMuaGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IGxhc3RSZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgICAgcmVzcG9uc2UuZGF0YSA9IHN0cmVhbTtcbiAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3BvbnNlQnVmZmVyID0gW107XG4gICAgICAgIHZhciB0b3RhbFJlc3BvbnNlQnl0ZXMgPSAwO1xuICAgICAgICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1EYXRhKGNodW5rKSB7XG4gICAgICAgICAgcmVzcG9uc2VCdWZmZXIucHVzaChjaHVuayk7XG4gICAgICAgICAgdG90YWxSZXNwb25zZUJ5dGVzICs9IGNodW5rLmxlbmd0aDtcblxuICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgY29udGVudCBsZW5ndGggaXMgbm90IG92ZXIgdGhlIG1heENvbnRlbnRMZW5ndGggaWYgc3BlY2lmaWVkXG4gICAgICAgICAgaWYgKGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoID4gLTEgJiYgdG90YWxSZXNwb25zZUJ5dGVzID4gY29uZmlnLm1heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIHN0cmVhbS5kZXN0b3koKSBlbWl0IGFib3J0ZWQgZXZlbnQgYmVmb3JlIGNhbGxpbmcgcmVqZWN0KCkgb24gTm9kZS5qcyB2MTZcbiAgICAgICAgICAgIHJlamVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ21heENvbnRlbnRMZW5ndGggc2l6ZSBvZiAnICsgY29uZmlnLm1heENvbnRlbnRMZW5ndGggKyAnIGV4Y2VlZGVkJyxcbiAgICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCBjb25maWcsIGxhc3RSZXF1ZXN0KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzdHJlYW0ub24oJ2Fib3J0ZWQnLCBmdW5jdGlvbiBoYW5kbGVyU3RyZWFtQWJvcnRlZCgpIHtcbiAgICAgICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgICAnbWF4Q29udGVudExlbmd0aCBzaXplIG9mICcgKyBjb25maWcubWF4Q29udGVudExlbmd0aCArICcgZXhjZWVkZWQnLFxuICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgbGFzdFJlcXVlc3RcbiAgICAgICAgICApKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbUVycm9yKGVycikge1xuICAgICAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuICAgICAgICAgIHJlamVjdChBeGlvc0Vycm9yLmZyb20oZXJyLCBudWxsLCBjb25maWcsIGxhc3RSZXF1ZXN0KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gaGFuZGxlU3RyZWFtRW5kKCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2VCdWZmZXIubGVuZ3RoID09PSAxID8gcmVzcG9uc2VCdWZmZXJbMF0gOiBCdWZmZXIuY29uY2F0KHJlc3BvbnNlQnVmZmVyKTtcbiAgICAgICAgICAgIGlmIChjb25maWcucmVzcG9uc2VUeXBlICE9PSAnYXJyYXlidWZmZXInKSB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlRGF0YS50b1N0cmluZyhjb25maWcucmVzcG9uc2VFbmNvZGluZyk7XG4gICAgICAgICAgICAgIGlmICghY29uZmlnLnJlc3BvbnNlRW5jb2RpbmcgfHwgY29uZmlnLnJlc3BvbnNlRW5jb2RpbmcgPT09ICd1dGY4Jykge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlRGF0YSA9IHV0aWxzLnN0cmlwQk9NKHJlc3BvbnNlRGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEgPSByZXNwb25zZURhdGE7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZWplY3QoQXhpb3NFcnJvci5mcm9tKGVyciwgbnVsbCwgY29uZmlnLCByZXNwb25zZS5yZXF1ZXN0LCByZXNwb25zZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIGVycm9yc1xuICAgIHJlcS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0RXJyb3IoZXJyKSB7XG4gICAgICAvLyBAdG9kbyByZW1vdmVcbiAgICAgIC8vIGlmIChyZXEuYWJvcnRlZCAmJiBlcnIuY29kZSAhPT0gQXhpb3NFcnJvci5FUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTKSByZXR1cm47XG4gICAgICByZWplY3QoQXhpb3NFcnJvci5mcm9tKGVyciwgbnVsbCwgY29uZmlnLCByZXEpKTtcbiAgICB9KTtcblxuICAgIC8vIHNldCB0Y3Aga2VlcCBhbGl2ZSB0byBwcmV2ZW50IGRyb3AgY29ubmVjdGlvbiBieSBwZWVyXG4gICAgcmVxLm9uKCdzb2NrZXQnLCBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0U29ja2V0KHNvY2tldCkge1xuICAgICAgLy8gZGVmYXVsdCBpbnRlcnZhbCBvZiBzZW5kaW5nIGFjayBwYWNrZXQgaXMgMSBtaW51dGVcbiAgICAgIHNvY2tldC5zZXRLZWVwQWxpdmUodHJ1ZSwgMTAwMCAqIDYwKTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSByZXF1ZXN0IHRpbWVvdXRcbiAgICBpZiAoY29uZmlnLnRpbWVvdXQpIHtcbiAgICAgIC8vIFRoaXMgaXMgZm9yY2luZyBhIGludCB0aW1lb3V0IHRvIGF2b2lkIHByb2JsZW1zIGlmIHRoZSBgcmVxYCBpbnRlcmZhY2UgZG9lc24ndCBoYW5kbGUgb3RoZXIgdHlwZXMuXG4gICAgICB2YXIgdGltZW91dCA9IHBhcnNlSW50KGNvbmZpZy50aW1lb3V0LCAxMCk7XG5cbiAgICAgIGlmIChpc05hTih0aW1lb3V0KSkge1xuICAgICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgJ2Vycm9yIHRyeWluZyB0byBwYXJzZSBgY29uZmlnLnRpbWVvdXRgIHRvIGludCcsXG4gICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVxXG4gICAgICAgICkpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU29tZXRpbWUsIHRoZSByZXNwb25zZSB3aWxsIGJlIHZlcnkgc2xvdywgYW5kIGRvZXMgbm90IHJlc3BvbmQsIHRoZSBjb25uZWN0IGV2ZW50IHdpbGwgYmUgYmxvY2sgYnkgZXZlbnQgbG9vcCBzeXN0ZW0uXG4gICAgICAvLyBBbmQgdGltZXIgY2FsbGJhY2sgd2lsbCBiZSBmaXJlZCwgYW5kIGFib3J0KCkgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBjb25uZWN0aW9uLCB0aGVuIGdldCBcInNvY2tldCBoYW5nIHVwXCIgYW5kIGNvZGUgRUNPTk5SRVNFVC5cbiAgICAgIC8vIEF0IHRoaXMgdGltZSwgaWYgd2UgaGF2ZSBhIGxhcmdlIG51bWJlciBvZiByZXF1ZXN0LCBub2RlanMgd2lsbCBoYW5nIHVwIHNvbWUgc29ja2V0IG9uIGJhY2tncm91bmQuIGFuZCB0aGUgbnVtYmVyIHdpbGwgdXAgYW5kIHVwLlxuICAgICAgLy8gQW5kIHRoZW4gdGhlc2Ugc29ja2V0IHdoaWNoIGJlIGhhbmcgdXAgd2lsbCBkZXZvcmluZyBDUFUgbGl0dGxlIGJ5IGxpdHRsZS5cbiAgICAgIC8vIENsaWVudFJlcXVlc3Quc2V0VGltZW91dCB3aWxsIGJlIGZpcmVkIG9uIHRoZSBzcGVjaWZ5IG1pbGxpc2Vjb25kcywgYW5kIGNhbiBtYWtlIHN1cmUgdGhhdCBhYm9ydCgpIHdpbGwgYmUgZmlyZWQgYWZ0ZXIgY29ubmVjdC5cbiAgICAgIHJlcS5zZXRUaW1lb3V0KHRpbWVvdXQsIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3RUaW1lb3V0KCkge1xuICAgICAgICByZXEuYWJvcnQoKTtcbiAgICAgICAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAndGltZW91dCBvZiAnICsgdGltZW91dCArICdtcyBleGNlZWRlZCcsXG4gICAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICByZXFcbiAgICAgICAgKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuIHx8IGNvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuXG4gICAgICAgIHJlcS5hYm9ydCgpO1xuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCAoY2FuY2VsICYmIGNhbmNlbC50eXBlKSA/IG5ldyBDYW5jZWxlZEVycm9yKCkgOiBjYW5jZWwpO1xuICAgICAgfTtcblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBjb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgaWYgKHV0aWxzLmlzU3RyZWFtKGRhdGEpKSB7XG4gICAgICBkYXRhLm9uKCdlcnJvcicsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbUVycm9yKGVycikge1xuICAgICAgICByZWplY3QoQXhpb3NFcnJvci5mcm9tKGVyciwgY29uZmlnLCBudWxsLCByZXEpKTtcbiAgICAgIH0pLnBpcGUocmVxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxLmVuZChkYXRhKTtcbiAgICB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuLi9jb3JlL2J1aWxkRnVsbFBhdGgnKTtcbnZhciBwYXJzZUhlYWRlcnMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzJyk7XG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbicpO1xudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMvdHJhbnNpdGlvbmFsJyk7XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xudmFyIHBhcnNlUHJvdG9jb2wgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuICAgIHZhciByZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIHZhciBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSAmJiB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcblxuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgIHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0LCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIHZhciB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuIHx8IGNvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCAoY2FuY2VsICYmIGNhbmNlbC50eXBlKSA/IG5ldyBDYW5jZWxlZEVycm9yKCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBjb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0RGF0YSkge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woZnVsbFBhdGgpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIFsgJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScgXS5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vY29yZS9tZXJnZUNvbmZpZycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICB2YXIgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgdmFyIGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQpO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbnZhciBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxlZEVycm9yJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5heGlvcy5WRVJTSU9OID0gcmVxdWlyZSgnLi9lbnYvZGF0YScpLnZlcnNpb247XG5heGlvcy50b0Zvcm1EYXRhID0gcmVxdWlyZSgnLi9oZWxwZXJzL3RvRm9ybURhdGEnKTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9saWIvY29yZS9BeGlvc0Vycm9yJyk7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuYXhpb3Muc3ByZWFkID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NwcmVhZCcpO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG5cbi8vIEFsbG93IHVzZSBvZiBkZWZhdWx0IGltcG9ydCBzeW50YXggaW4gVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FuY2VsZWRFcnJvciA9IHJlcXVpcmUoJy4vQ2FuY2VsZWRFcnJvcicpO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIENhbmNlbFRva2VuKGV4ZWN1dG9yKSB7XG4gIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZVByb21pc2U7XG5cbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICB2YXIgaTtcbiAgICB2YXIgbCA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgIH1cbiAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4gPSBmdW5jdGlvbihvbmZ1bGZpbGxlZCkge1xuICAgIHZhciBfcmVzb2x2ZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSk7XG4gICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbkNhbmNlbFRva2VuLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkID0gZnVuY3Rpb24gdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgdGhyb3cgdGhpcy5yZWFzb247XG4gIH1cbn07XG5cbi8qKlxuICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICB9XG59O1xuXG4vKipcbiAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAqL1xuXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICovXG5DYW5jZWxUb2tlbi5zb3VyY2UgPSBmdW5jdGlvbiBzb3VyY2UoKSB7XG4gIHZhciBjYW5jZWw7XG4gIHZhciB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgY2FuY2VsID0gYztcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW46IHRva2VuLFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwge1xuICBfX0NBTkNFTF9fOiB0cnVlXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxlZEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBJbnRlcmNlcHRvck1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyY2VwdG9yTWFuYWdlcicpO1xudmFyIGRpc3BhdGNoUmVxdWVzdCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hSZXF1ZXN0Jyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL21lcmdlQ29uZmlnJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4vYnVpbGRGdWxsUGF0aCcpO1xudmFyIHZhbGlkYXRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvdmFsaWRhdG9yJyk7XG5cbnZhciB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBeGlvcyhpbnN0YW5jZUNvbmZpZykge1xuICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gKi9cbkF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgfVxuXG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgaWYgKGNvbmZpZy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gY29uZmlnLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdHMubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IHRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnLm1ldGhvZCA9ICdnZXQnO1xuICB9XG5cbiAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWw7XG5cbiAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgdmFyIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHZhciBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdmFyIHByb21pc2U7XG5cbiAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuXG4gICAgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICBjaGFpbiA9IGNoYWluLmNvbmNhdChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGgpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuXG4gIHZhciBuZXdDb25maWcgPSBjb25maWc7XG4gIHdoaWxlIChyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICB2YXIgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpO1xuICAgIHZhciBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB0cnkge1xuICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25SZWplY3RlZChlcnJvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QobmV3Q29uZmlnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICB9XG5cbiAgd2hpbGUgKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbkF4aW9zLnByb3RvdHlwZS5nZXRVcmkgPSBmdW5jdGlvbiBnZXRVcmkoY29uZmlnKSB7XG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIHZhciBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnJlc3BvbnNlICYmIHRoaXMucmVzcG9uc2Uuc3RhdHVzID8gdGhpcy5yZXNwb25zZS5zdGF0dXMgOiBudWxsXG4gICAgfTtcbiAgfVxufSk7XG5cbnZhciBwcm90b3R5cGUgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbnZhciBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChmdW5jdGlvbihjb2RlKSB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSBmdW5jdGlvbihlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpIHtcbiAgdmFyIGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG5cbiAgdXRpbHMudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3NFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWQsXG4gICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc0Fic29sdXRlVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMJyk7XG52YXIgY29tYmluZVVSTHMgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1xuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgcmVzcG9uc2UuZGF0YSxcbiAgICAgIHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIHZhciBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UodGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcyW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMocHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG1lcmdlTWFwID0ge1xuICAgICd1cmwnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdtZXRob2QnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdkYXRhJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnYmFzZVVSTCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RyYW5zZm9ybVJlcXVlc3QnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc2Zvcm1SZXNwb25zZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3BhcmFtc1NlcmlhbGl6ZXInOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0aW1lb3V0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndGltZW91dE1lc3NhZ2UnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd3aXRoQ3JlZGVudGlhbHMnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdhZGFwdGVyJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncmVzcG9uc2VUeXBlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAneHNyZkNvb2tpZU5hbWUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd4c3JmSGVhZGVyTmFtZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ29uVXBsb2FkUHJvZ3Jlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdvbkRvd25sb2FkUHJvZ3Jlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdkZWNvbXByZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnbWF4Q29udGVudExlbmd0aCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ21heEJvZHlMZW5ndGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdiZWZvcmVSZWRpcmVjdCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RyYW5zcG9ydCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2h0dHBBZ2VudCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2h0dHBzQWdlbnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdjYW5jZWxUb2tlbic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3NvY2tldFBhdGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdyZXNwb25zZUVuY29kaW5nJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndmFsaWRhdGVTdGF0dXMnOiBtZXJnZURpcmVjdEtleXNcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKE9iamVjdC5rZXlzKGNvbmZpZzEpLmNvbmNhdChPYmplY3Qua2V5cyhjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgdmFyIG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICB2YXIgY29uZmlnVmFsdWUgPSBtZXJnZShwcm9wKTtcbiAgICAodXRpbHMuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vQXhpb3NFcnJvcicpO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIHZhciB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBiZSB0cmFuc2Zvcm1lZFxuICogQHBhcmFtIHtBcnJheX0gaGVhZGVycyBUaGUgaGVhZGVycyBmb3IgdGhlIHJlcXVlc3Qgb3IgcmVzcG9uc2VcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGRhdGEsIGhlYWRlcnMsIGZucykge1xuICB2YXIgY29udGV4dCA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29udGV4dCwgZGF0YSwgaGVhZGVycyk7XG4gIH0pO1xuXG4gIHJldHVybiBkYXRhO1xufTtcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3Rcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnZm9ybS1kYXRhJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgbm9ybWFsaXplSGVhZGVyTmFtZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHJlcXVpcmUoJy4vdHJhbnNpdGlvbmFsJyk7XG52YXIgdG9Gb3JtRGF0YSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvdG9Gb3JtRGF0YScpO1xuXG52YXIgREVGQVVMVF9DT05URU5UX1RZUEUgPSB7XG4gICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xufTtcblxuZnVuY3Rpb24gc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsIHZhbHVlKSB7XG4gIGlmICghdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVycykgJiYgdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVyc1snQ29udGVudC1UeXBlJ10pKSB7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QWRhcHRlcigpIHtcbiAgdmFyIGFkYXB0ZXI7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gRm9yIGJyb3dzZXJzIHVzZSBYSFIgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuLi9hZGFwdGVycy94aHInKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4uL2FkYXB0ZXJzL2h0dHAnKTtcbiAgfVxuICByZXR1cm4gYWRhcHRlcjtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscy50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IGdldERlZmF1bHRBZGFwdGVyKCksXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0FjY2VwdCcpO1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0NvbnRlbnQtVHlwZScpO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHZhciBpc09iamVjdFBheWxvYWQgPSB1dGlscy5pc09iamVjdChkYXRhKTtcbiAgICB2YXIgY29udGVudFR5cGUgPSBoZWFkZXJzICYmIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuXG4gICAgdmFyIGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fCAoaXNPYmplY3RQYXlsb2FkICYmIGNvbnRlbnRUeXBlID09PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpKSB7XG4gICAgICB2YXIgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG4gICAgICByZXR1cm4gdG9Gb3JtRGF0YShpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLCBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpKTtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBjb250ZW50VHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIHZhciB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgdmFyIHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICB2YXIgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIHZhciBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKHN0cmljdEpTT05QYXJzaW5nIHx8IChmb3JjZWRKU09OUGFyc2luZyAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiBkYXRhLmxlbmd0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHJlcXVpcmUoJy4vZW52L0Zvcm1EYXRhJylcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xuICAgIH1cbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB1dGlscy5tZXJnZShERUZBVUxUX0NPTlRFTlRfVFlQRSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4yNy4yXCJcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBwYXJhbXNTZXJpYWxpemVyKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZFBhcmFtcztcbiAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zU2VyaWFsaXplcihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcnRzID0gW107XG5cbiAgICB1dGlscy5mb3JFYWNoKHBhcmFtcywgZnVuY3Rpb24gc2VyaWFsaXplKHZhbCwga2V5KSB7XG4gICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0aWxzLmlzQXJyYXkodmFsKSkge1xuICAgICAgICBrZXkgPSBrZXkgKyAnW10nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gW3ZhbF07XG4gICAgICB9XG5cbiAgICAgIHV0aWxzLmZvckVhY2godmFsLCBmdW5jdGlvbiBwYXJzZVZhbHVlKHYpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzRGF0ZSh2KSkge1xuICAgICAgICAgIHYgPSB2LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QodikpIHtcbiAgICAgICAgICB2ID0gSlNPTi5zdHJpbmdpZnkodik7XG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaChlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJ0cy5qb2luKCcmJyk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIHZhciBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG5cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgICAgICB2YXIgY29va2llID0gW107XG4gICAgICAgICAgY29va2llLnB1c2gobmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKGRvbWFpbikpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQobmFtZSkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShuYW1lKSB7XG4gICAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKCkgeyByZXR1cm4gbnVsbDsgfSxcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHZhciBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXQncyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgdmFyIG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyBGb3JtRGF0YSgpO1xuXG4gIHZhciBzdGFjayA9IFtdO1xuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscy5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZChkYXRhLCBwYXJlbnRLZXkpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChkYXRhKSB8fCB1dGlscy5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihkYXRhKSAhPT0gLTEpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAnICsgcGFyZW50S2V5KTtcbiAgICAgIH1cblxuICAgICAgc3RhY2sucHVzaChkYXRhKTtcblxuICAgICAgdXRpbHMuZm9yRWFjaChkYXRhLCBmdW5jdGlvbiBlYWNoKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuICAgICAgICB2YXIgZnVsbEtleSA9IHBhcmVudEtleSA/IHBhcmVudEtleSArICcuJyArIGtleSA6IGtleTtcbiAgICAgICAgdmFyIGFycjtcblxuICAgICAgICBpZiAodmFsdWUgJiYgIXBhcmVudEtleSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh1dGlscy5lbmRzV2l0aChrZXksICdbXScpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgICAhdXRpbHMuaXNVbmRlZmluZWQoZWwpICYmIGZvcm1EYXRhLmFwcGVuZChmdWxsS2V5LCBjb252ZXJ0VmFsdWUoZWwpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJ1aWxkKHZhbHVlLCBmdWxsS2V5KTtcbiAgICAgIH0pO1xuXG4gICAgICBzdGFjay5wb3AoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKHBhcmVudEtleSwgY29udmVydFZhbHVlKGRhdGEpKTtcbiAgICB9XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0Zvcm1EYXRhO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2Vudi9kYXRhJykudmVyc2lvbjtcbnZhciBBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vY29yZS9BeGlvc0Vycm9yJyk7XG5cbnZhciB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaChmdW5jdGlvbih0eXBlLCBpKSB7XG4gIHZhbGlkYXRvcnNbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG52YXIgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvcHQsIG9wdHMpIHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIHZhciBvcHQgPSBrZXlzW2ldO1xuICAgIHZhciB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICB2YXIgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhc3NlcnRPcHRpb25zOiBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG52YXIga2luZE9mID0gKGZ1bmN0aW9uKGNhY2hlKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih0aGluZykge1xuICAgIHZhciBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG4gIH07XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuZnVuY3Rpb24ga2luZE9mVGVzdCh0eXBlKSB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBmdW5jdGlvbiBpc0tpbmRPZih0aGluZykge1xuICAgIHJldHVybiBraW5kT2YodGhpbmcpID09PSB0eXBlO1xuICB9O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsKSB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkge1xuICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodGhpbmcpIHtcbiAgdmFyIHBhdHRlcm4gPSAnW29iamVjdCBGb3JtRGF0YV0nO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHxcbiAgICB0b1N0cmluZy5jYWxsKHRoaW5nKSA9PT0gcGF0dGVybiB8fFxuICAgIChpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSBwYXR0ZXJuKVxuICApO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnRyaW0gPyBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKi9cbmZ1bmN0aW9uIGlzU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgKG5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOYXRpdmVTY3JpcHQnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOUycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG4gICk7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuKSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKGEsIGIsIHRoaXNBcmcpIHtcbiAgZm9yRWFjaChiLCBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0aGlzQXJnICYmIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuZnVuY3Rpb24gc3RyaXBCT00oY29udGVudCkge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqL1xuXG5mdW5jdGlvbiBpbmhlcml0cyhjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtmaWx0ZXJdXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIHRvRmxhdE9iamVjdChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlcikge1xuICB2YXIgcHJvcHM7XG4gIHZhciBpO1xuICB2YXIgcHJvcDtcbiAgdmFyIG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn1cblxuLypcbiAqIGRldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGVuZHNXaXRoKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIHZhciBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3RcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiB0b0FycmF5KHRoaW5nKSB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICB2YXIgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKGlzVW5kZWZpbmVkKGkpKSByZXR1cm4gbnVsbDtcbiAgdmFyIGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xudmFyIGlzVHlwZWRBcnJheSA9IChmdW5jdGlvbihUeXBlZEFycmF5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih0aGluZykge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBcnJheTogaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhOiBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldzogaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nOiBpc1N0cmluZyxcbiAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICBpc09iamVjdDogaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3Q6IGlzUGxhaW5PYmplY3QsXG4gIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlOiBpc0RhdGUsXG4gIGlzRmlsZTogaXNGaWxlLFxuICBpc0Jsb2I6IGlzQmxvYixcbiAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbixcbiAgaXNTdHJlYW06IGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtczogaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzU3RhbmRhcmRCcm93c2VyRW52OiBpc1N0YW5kYXJkQnJvd3NlckVudixcbiAgZm9yRWFjaDogZm9yRWFjaCxcbiAgbWVyZ2U6IG1lcmdlLFxuICBleHRlbmQ6IGV4dGVuZCxcbiAgdHJpbTogdHJpbSxcbiAgc3RyaXBCT006IHN0cmlwQk9NLFxuICBpbmhlcml0czogaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdDogdG9GbGF0T2JqZWN0LFxuICBraW5kT2Y6IGtpbmRPZixcbiAga2luZE9mVGVzdDoga2luZE9mVGVzdCxcbiAgZW5kc1dpdGg6IGVuZHNXaXRoLFxuICB0b0FycmF5OiB0b0FycmF5LFxuICBpc1R5cGVkQXJyYXk6IGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdDogaXNGaWxlTGlzdFxufTtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnV0aWxzKi9cbmltcG9ydCB7XG4gIGlzUHVyZU9iamVjdCxcbiAgc2V0VmFsdWVJZk5vdE5pbCxcbn0gZnJvbSAnLi4vdXRpbHMnO1xuLyp0eXBlcyovXG5pbXBvcnQgSHR0cE1ldGhvZHMgZnJvbSAnLi4vcmVxdWVzdC9IdHRwTWV0aG9kcyc7XG5pbXBvcnQgeyBDbGllbnRQYXJhbXMgfSBmcm9tICcuL0NsaWVudCc7XG5pbXBvcnQgeyBSZXF1ZXN0Q29uZmlnLCBSZXF1ZXN0T3B0aW9ucywgUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnIH0gZnJvbSAnLi4vcmVxdWVzdC9SZXF1ZXN0Jztcbi8qbGliKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuaW1wb3J0IHBhY2thZ2VKU09OIGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbic7XG4vKm90aGVyKi9cblxuZXhwb3J0IHR5cGUgQ2xpZW50Q29ubmVjdFBhcmFtcyA9IFBpY2s8Q2xpZW50UGFyYW1zLCAnY29uZmlnJyB8ICdvcHRpb25zJz47XG5cbmNsYXNzIENsaWVudCB7XG4gIHByaXZhdGUgdmVyc2lvbiE6IHN0cmluZztcblxuICBwcml2YXRlIGNvbmZpZyE6IFJlcXVlc3RDb25maWc7XG4gIHByaXZhdGUgb3B0aW9ucyE6IFJlcXVlc3RPcHRpb25zO1xuXG4gIHByaXZhdGUgYXBpS2V5Pzogc3RyaW5nO1xuICBwcml2YXRlIGFwaVNlY3JldD86IHN0cmluZztcbiAgcHJpdmF0ZSBhcGlUb2tlbj86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwYXJhbXM6IENsaWVudFBhcmFtcykge1xuICAgIGlmICghaXNQdXJlT2JqZWN0KHBhcmFtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJwYXJhbXNcIiBtdXN0IGJlIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdCh0aGlzLmNsb25lUGFyYW1zKHBhcmFtcykpO1xuICB9XG5cbiAgcHVibGljIGdldFBhY2thZ2VWZXJzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0QVBJS2V5KCkge1xuICAgIHJldHVybiB0aGlzLmFwaUtleTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBUElTZWNyZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VjcmV0O1xuICB9XG5cbiAgcHVibGljIGdldEFQSVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmFwaVRva2VuO1xuICB9XG5cbiAgcHVibGljIGdldENvbmZpZygpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLmNvbmZpZyB9O1xuICB9XG5cbiAgcHVibGljIGdldE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5vcHRpb25zIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0KHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCBIdHRwTWV0aG9kcy5HZXQsIHJlc291cmNlLCBjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHBvc3QocmVzb3VyY2U6IHN0cmluZywgY29uZmlnPzogUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLlBvc3QsIHJlc291cmNlLCBjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHB1dChyZXNvdXJjZTogc3RyaW5nLCBjb25maWc/OiBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuUHV0LCByZXNvdXJjZSwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGUocmVzb3VyY2U6IHN0cmluZywgY29uZmlnPzogUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLkRlbGV0ZSwgcmVzb3VyY2UsIGNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIGluaXQocGFyYW1zOiBDbGllbnRQYXJhbXMpIHtcbiAgICBpZiAoIWlzUHVyZU9iamVjdChwYXJhbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicGFyYW1zXCIgbXVzdCBiZSBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBhcGlUb2tlbixcbiAgICAgIGFwaUtleSxcbiAgICAgIGFwaVNlY3JldCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjb25maWcsXG4gICAgfSA9IHBhcmFtcztcblxuICAgIHRoaXMudmVyc2lvbiA9IENsaWVudC5wYWNrYWdlSlNPTi52ZXJzaW9uO1xuXG4gICAgdGhpcy5zZXRDb25maWcoY29uZmlnID8/IG51bGwpO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zID8/IG51bGwpO1xuXG4gICAgcmV0dXJuICdhcGlUb2tlbicgaW4gcGFyYW1zXG4gICAgICA/IHRoaXMudG9rZW5Db25uZWN0U3RyYXRlZ3koYXBpVG9rZW4pXG4gICAgICA6IHRoaXMuYmFzaWNDb25uZWN0U3RyYXRlZ3koYXBpS2V5LCBhcGlTZWNyZXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9uZVBhcmFtcyhwYXJhbXM6IENsaWVudFBhcmFtcykge1xuICAgIGlmICghaXNQdXJlT2JqZWN0KHBhcmFtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJwYXJhbXNcIiBtdXN0IGJlIG9iamVjdCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsb25lZFBhcmFtcyA9IHsgLi4ucGFyYW1zIH07XG5cbiAgICBpZiAocGFyYW1zLmNvbmZpZykge1xuICAgICAgY2xvbmVkUGFyYW1zLmNvbmZpZyA9IHtcbiAgICAgICAgLi4ucGFyYW1zLmNvbmZpZyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5vcHRpb25zKSB7XG4gICAgICBjbG9uZWRQYXJhbXMub3B0aW9ucyA9IHtcbiAgICAgICAgLi4ucGFyYW1zLm9wdGlvbnMsXG4gICAgICB9O1xuXG4gICAgICBpZiAoY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHkpIHtcbiAgICAgICAgY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHkgPSB7XG4gICAgICAgICAgLi4uY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHksXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChjbG9uZWRQYXJhbXMub3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgIGNsb25lZFBhcmFtcy5vcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgLi4uY2xvbmVkUGFyYW1zLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmVkUGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb25maWcoY3VzdG9tQ29uZmlnOiBQYXJ0aWFsPFJlcXVlc3RDb25maWc+IHwgbnVsbCkge1xuICAgIGlmICh0eXBlb2YgY3VzdG9tQ29uZmlnICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcImN1c3RvbUNvbmZpZ1wiIG11c3QgYmUgb2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSB7IC4uLkNsaWVudC5jb25maWcgfTtcblxuICAgIGlmIChjdXN0b21Db25maWcgIT09IG51bGwpIHtcbiAgICAgIHNldFZhbHVlSWZOb3ROaWwoY29uZmlnLCAnaG9zdCcsIGN1c3RvbUNvbmZpZy5ob3N0KTtcbiAgICAgIHNldFZhbHVlSWZOb3ROaWwoY29uZmlnLCAnb3V0cHV0JywgY3VzdG9tQ29uZmlnLm91dHB1dCk7XG4gICAgICBzZXRWYWx1ZUlmTm90TmlsKGNvbmZpZywgJ3ZlcnNpb24nLCBjdXN0b21Db25maWcudmVyc2lvbik7XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgc2V0T3B0aW9ucyhvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyB8IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwib3B0aW9uc1wiIG11c3QgYmUgb2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID8/IHt9O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIHRva2VuQ29ubmVjdFN0cmF0ZWd5KGFwaVRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWFwaVRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01haWxqZXQgQVBJX1RPS0VOIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5hcGlUb2tlbiA9IGFwaVRva2VuO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIGJhc2ljQ29ubmVjdFN0cmF0ZWd5KGFwaUtleTogc3RyaW5nIHwgdW5kZWZpbmVkLCBhcGlTZWNyZXQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghYXBpS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01haWxqZXQgQVBJX0tFWSBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIWFwaVNlY3JldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYWlsamV0IEFQSV9TRUNSRVQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFwaUtleSA9IGFwaUtleTtcbiAgICB0aGlzLmFwaVNlY3JldCA9IGFwaVNlY3JldDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhcGlDb25uZWN0KGFwaUtleTogc3RyaW5nLCBhcGlTZWNyZXQ6IHN0cmluZywgcGFyYW1zPzogQ2xpZW50Q29ubmVjdFBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xpZW50KHsgYXBpS2V5LCBhcGlTZWNyZXQsIC4uLnBhcmFtcyB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc21zQ29ubmVjdChhcGlUb2tlbjogc3RyaW5nLCBwYXJhbXM/OiBDbGllbnRDb25uZWN0UGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGllbnQoeyBhcGlUb2tlbiwgLi4ucGFyYW1zIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjb25maWc6IFJlYWRvbmx5PFJlcXVlc3RDb25maWc+ID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgaG9zdDogJ2FwaS5tYWlsamV0LmNvbScsXG4gICAgdmVyc2lvbjogJ3YzJyxcbiAgICBvdXRwdXQ6ICdqc29uJyxcbiAgfSBhcyBjb25zdCk7XG5cbiAgcHVibGljIHN0YXRpYyBwYWNrYWdlSlNPTiA9IE9iamVjdC5mcmVlemUoe1xuICAgIC4uLnBhY2thZ2VKU09OLFxuICB9IGFzIGNvbnN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2xpZW50O1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdXRpbHMqL1xuLyp0eXBlcyovXG5pbXBvcnQgSHR0cE1ldGhvZHMgZnJvbSAnLi9yZXF1ZXN0L0h0dHBNZXRob2RzJztcbi8qbGliKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdC9pbmRleCc7XG5pbXBvcnQgQ2xpZW50IGZyb20gJy4vY2xpZW50L2luZGV4Jztcbi8qb3RoZXIqL1xuXG5jbGFzcyBNYWlsamV0IGV4dGVuZHMgQ2xpZW50IHtcbiAgc3RhdGljIFJlcXVlc3QgPSBSZXF1ZXN0O1xuICBzdGF0aWMgSHR0cE1ldGhvZHMgPSBIdHRwTWV0aG9kcztcbiAgc3RhdGljIENsaWVudCA9IENsaWVudDtcbn1cblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcy9hcGknO1xuZXhwb3J0IHsgQ2xpZW50LCBSZXF1ZXN0LCBIdHRwTWV0aG9kcyB9O1xuZXhwb3J0IGRlZmF1bHQgTWFpbGpldDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmVudW0gSHR0cE1ldGhvZHMge1xuICBHZXQgPSAnZ2V0JyxcbiAgUG9zdCA9ICdwb3N0JyxcbiAgUHV0ID0gJ3B1dCcsXG4gIERlbGV0ZSA9ICdkZWxldGUnXG59XG5cbmV4cG9ydCBkZWZhdWx0IEh0dHBNZXRob2RzO1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbmltcG9ydCB1cmxKb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBKU09OQmlnSW50IGZyb20gJ2pzb24tYmlnaW50JztcbmltcG9ydCBheGlvcywgeyBBeGlvc0Vycm9yIH0gZnJvbSAnYXhpb3MnO1xuLyp1dGlscyovXG5pbXBvcnQgeyBzZXRWYWx1ZUlmTm90TmlsIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXgnO1xuLyp0eXBlcyovXG5pbXBvcnQgeyBUT2JqZWN0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgTGlicmFyeVJlc3BvbnNlLCBMaWJyYXJ5TG9jYWxSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzL2FwaSc7XG5pbXBvcnQgSHR0cE1ldGhvZHMgZnJvbSAnLi9IdHRwTWV0aG9kcyc7XG5pbXBvcnQge1xuICBSZXF1ZXN0Q29uZmlnLFxuICBSZXF1ZXN0RGF0YSxcbiAgUmVxdWVzdFBhcmFtcyxcbiAgUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnLFxuICBSZXF1ZXN0QXhpb3NDb25maWcsXG4gIFN1YlBhdGgsXG59IGZyb20gJy4vUmVxdWVzdCc7XG4vKmxpYiovXG5pbXBvcnQgQ2xpZW50IGZyb20gJy4uL2NsaWVudCc7XG4vKm90aGVyKi9cblxudHlwZSBVbmtub3duUmVjID0gVE9iamVjdC5Vbmtub3duUmVjXG5cbmNvbnN0IEpTT05iID0gSlNPTkJpZ0ludCh7IHN0b3JlQXNTdHJpbmc6IHRydWUgfSk7XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogQ2xpZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldGhvZDogSHR0cE1ldGhvZHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBQYXJ0aWFsPFJlcXVlc3RDb25maWc+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSBzdWJQYXRoOiBTdWJQYXRoO1xuICBwcml2YXRlIGFjdGlvblBhdGg6IHN0cmluZyB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2xpZW50OiBDbGllbnQsXG4gICAgbWV0aG9kOiBIdHRwTWV0aG9kcyxcbiAgICByZXNvdXJjZTogc3RyaW5nLFxuICAgIGNvbmZpZz86IFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZyxcbiAgKSB7XG4gICAgaWYgKCEoY2xpZW50IGluc3RhbmNlb2YgQ2xpZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcImNsaWVudFwiIG11c3QgYmUgaW5zdGFuY2Ugb2YgQ2xpZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFPYmplY3QudmFsdWVzKEh0dHBNZXRob2RzKS5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwibWV0aG9kXCIgbXVzdCBiZSBvbmUgb2Ygc3VwcG9ydGVkIG1ldGhvZHM6IGdldCwgcG9zdCwgcHV0LCBkZWxldGUnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlc291cmNlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInJlc291cmNlXCIgbXVzdCBiZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcblxuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgIHRoaXMudXJsID0gcmVzb3VyY2UudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnJlc291cmNlID0gcmVzb3VyY2UudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnN1YlBhdGggPSB0aGlzLmJ1aWxkU3ViUGF0aCgpO1xuICAgIHRoaXMuYWN0aW9uUGF0aCA9IG51bGw7XG5cbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4uY29uZmlnIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0VXNlckFnZW50KCkge1xuICAgIHJldHVybiBgbWFpbGpldC1hcGktdjMtbm9kZWpzLyR7dGhpcy5jbGllbnQuZ2V0UGFja2FnZVZlcnNpb24oKX1gO1xuICB9XG5cbiAgcHVibGljIGdldENyZWRlbnRpYWxzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcGlUb2tlbjogdGhpcy5jbGllbnQuZ2V0QVBJVG9rZW4oKSxcbiAgICAgIGFwaUtleTogdGhpcy5jbGllbnQuZ2V0QVBJS2V5KCksXG4gICAgICBhcGlTZWNyZXQ6IHRoaXMuY2xpZW50LmdldEFQSVNlY3JldCgpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRlbnRUeXBlKHVybDogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwidXJsXCIgbXVzdCBiZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLmluZGV4T2YoJ3RleHQ6cGxhaW4nKSA+IC0xXG4gICAgICA/ICd0ZXh0L3BsYWluJ1xuICAgICAgOiAnYXBwbGljYXRpb24vanNvbic7XG4gIH1cblxuICBwcml2YXRlIGdldFJlcXVlc3RCb2R5KGRhdGE6IFJlcXVlc3REYXRhKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEh0dHBNZXRob2RzLlB1dCxcbiAgICAgIEh0dHBNZXRob2RzLlBvc3QsXG4gICAgICBIdHRwTWV0aG9kcy5EZWxldGUsXG4gICAgXS5pbmNsdWRlcyh0aGlzLm1ldGhvZCkgPyBkYXRhIDoge307XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRnVsbFVybCgpIHtcbiAgICBjb25zdCBjbGllbnRDb25maWcgPSB0aGlzLmNsaWVudC5nZXRDb25maWcoKTtcblxuICAgIGNvbnN0IGhvc3QgPSB0aGlzLmNvbmZpZy5ob3N0ID8/IGNsaWVudENvbmZpZy5ob3N0O1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmNvbmZpZy52ZXJzaW9uID8/IGNsaWVudENvbmZpZy52ZXJzaW9uO1xuXG4gICAgcmV0dXJuIHVybEpvaW4oUmVxdWVzdC5wcm90b2NvbCwgaG9zdCwgdmVyc2lvbiwgdGhpcy5zdWJQYXRoLCB0aGlzLnVybCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3ViUGF0aCgpIHtcbiAgICBpZiAodGhpcy5hY3Rpb25QYXRoKSB7XG4gICAgICBjb25zdCBpc0NvbnRhY3RMaXN0V2l0aENTViA9IHRoaXMucmVzb3VyY2UgPT09ICdjb250YWN0c2xpc3QnICYmIHRoaXMuYWN0aW9uUGF0aCA9PT0gJ2NzdmRhdGEvdGV4dDpwbGFpbic7XG4gICAgICBjb25zdCBpc0JhdGNoSm9iV2l0aENTViA9IHRoaXMucmVzb3VyY2UgPT09ICdiYXRjaGpvYicgJiYgdGhpcy5hY3Rpb25QYXRoID09PSAnY3N2ZXJyb3IvdGV4dDpjc3YnO1xuXG4gICAgICByZXR1cm4gKGlzQ29udGFjdExpc3RXaXRoQ1NWIHx8IGlzQmF0Y2hKb2JXaXRoQ1NWKSA/ICdEQVRBJyA6IHRoaXMuc3ViUGF0aDtcbiAgICB9XG4gICAgY29uc3QgaXNTZW5kUmVzb3VyY2UgPSB0aGlzLnJlc291cmNlID09PSAnc2VuZCc7XG4gICAgY29uc3QgcmVzb3VyY2VDb250YWluU01TID0gdGhpcy5yZXNvdXJjZS5pbmRleE9mKCdzbXMnKSA+IC0xO1xuXG4gICAgcmV0dXJuICghaXNTZW5kUmVzb3VyY2UgJiYgIXJlc291cmNlQ29udGFpblNNUykgPyAnUkVTVCcgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgbWFrZVJlcXVlc3QodXJsOiBzdHJpbmcsIGRhdGE6IFJlcXVlc3REYXRhLCBwYXJhbXM6IFJlcXVlc3RQYXJhbXMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MjcmVxdWVzdC1jb25maWdcbiAgICBjb25zdCByZXF1ZXN0Q29uZmlnOiBSZXF1ZXN0QXhpb3NDb25maWcgPSB7XG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICBkYXRhOiB0aGlzLmdldFJlcXVlc3RCb2R5KGRhdGEpLFxuICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnVXNlci1BZ2VudCc6IHRoaXMuZ2V0VXNlckFnZW50KCksXG4gICAgICAgICdDb250ZW50LVR5cGUnOiB0aGlzLmdldENvbnRlbnRUeXBlKHVybCksXG4gICAgICB9LFxuICAgICAgdHJhbnNmb3JtUmVzcG9uc2UocmVzcG9uc2VEYXRhOiB1bmtub3duKSB7XG4gICAgICAgIGNvbnN0IGRhdGFJc1N0cmluZyA9IHR5cGVvZiByZXNwb25zZURhdGEgPT09ICdzdHJpbmcnO1xuICAgICAgICBjb25zdCBpc0pTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgICAgIGlmIChyZXNwb25zZURhdGEgJiYgZGF0YUlzU3RyaW5nICYmIGlzSlNPTlJlcXVlc3RlZCkge1xuICAgICAgICAgIHJldHVybiBSZXF1ZXN0LnBhcnNlVG9KU09OYihyZXNwb25zZURhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0YTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIEJST1dTRVIgU0lERVxuICAgIGlmIChSZXF1ZXN0LmlzQnJvd3NlcigpKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnNbJ1gtVXNlci1BZ2VudCddID0gcmVxdWVzdENvbmZpZy5oZWFkZXJzWydVc2VyLUFnZW50J107XG4gICAgfVxuXG4gICAgLy8gQVVUSFxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdGhpcy5nZXRDcmVkZW50aWFscygpO1xuXG4gICAgaWYgKGNyZWRlbnRpYWxzLmFwaVRva2VuKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHtjcmVkZW50aWFscy5hcGlUb2tlbn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmF1dGggPSB7XG4gICAgICAgIHVzZXJuYW1lOiBjcmVkZW50aWFscy5hcGlLZXkgYXMgc3RyaW5nLFxuICAgICAgICBwYXNzd29yZDogY3JlZGVudGlhbHMuYXBpU2VjcmV0IGFzIHN0cmluZyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gT1BUSU9OU1xuICAgIGNvbnN0IGNsaWVudENvbmZpZyA9IHRoaXMuY2xpZW50LmdldENvbmZpZygpO1xuICAgIGNvbnN0IGNsaWVudE9wdGlvbnMgPSB0aGlzLmNsaWVudC5nZXRPcHRpb25zKCk7XG5cbiAgICAvLyAxLiBUaW1lb3V0XG4gICAgaWYgKGNsaWVudE9wdGlvbnMudGltZW91dCkge1xuICAgICAgcmVxdWVzdENvbmZpZy50aW1lb3V0ID0gY2xpZW50T3B0aW9ucy50aW1lb3V0O1xuICAgIH1cblxuICAgIC8vIDIuIFByb3h5XG4gICAgaWYgKGNsaWVudE9wdGlvbnMucHJveHkpIHtcbiAgICAgIHJlcXVlc3RDb25maWcucHJveHkgPSBjbGllbnRPcHRpb25zLnByb3h5O1xuICAgIH1cblxuICAgIC8vIDMuIEhlYWRlcnNcbiAgICBpZiAoY2xpZW50T3B0aW9ucy5oZWFkZXJzICYmIE9iamVjdC5rZXlzKGNsaWVudE9wdGlvbnMuaGVhZGVycykubGVuZ3RoID4gMCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5oZWFkZXJzID0ge1xuICAgICAgICAuLi5yZXF1ZXN0Q29uZmlnLmhlYWRlcnMsXG4gICAgICAgIC4uLmNsaWVudE9wdGlvbnMuaGVhZGVycyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gNC4gT3V0cHV0XG4gICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5jb25maWcub3V0cHV0ID8/IGNsaWVudENvbmZpZy5vdXRwdXQ7XG4gICAgaWYgKG91dHB1dCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5yZXNwb25zZVR5cGUgPSBvdXRwdXQ7XG4gICAgfVxuXG4gICAgLy8gTk9ERSBTSURFXG4gICAgLy8gNS4gTWF4IHJlcXVlc3QgY29udGVudCBzaXplXG4gICAgaWYgKGNsaWVudE9wdGlvbnMubWF4Qm9keUxlbmd0aCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5tYXhCb2R5TGVuZ3RoID0gY2xpZW50T3B0aW9ucy5tYXhCb2R5TGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIE5PREUgU0lERVxuICAgIC8vIDYuIE1heCByZXNwb25zZSBjb250ZW50IHNpemVcbiAgICBpZiAoY2xpZW50T3B0aW9ucy5tYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLm1heENvbnRlbnRMZW5ndGggPSBjbGllbnRPcHRpb25zLm1heENvbnRlbnRMZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF4aW9zKHJlcXVlc3RDb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRCYXNlVVJMKGJhc2VVcmw6IHN0cmluZykge1xuICAgIHRoaXMudXJsID0gYmFzZVVybC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGlkKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICBpZiAoIVsnc3RyaW5nJywgJ251bWJlciddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJ2YWx1ZVwiIG11c3QgYmUgc3RyaW5nIG9yIG51bWJlcicpO1xuICAgIH1cblxuICAgIHRoaXMudXJsID0gdXJsSm9pbih0aGlzLnVybCwgdmFsdWUudG9TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcIm5hbWVcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9uUGF0aCA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIHN3aXRjaCAodGhpcy5hY3Rpb25QYXRoKSB7XG4gICAgICBjYXNlICdjc3ZkYXRhJzoge1xuICAgICAgICB0aGlzLmFjdGlvblBhdGggPSAnY3N2ZGF0YS90ZXh0OnBsYWluJztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdjc3ZlcnJvcic6IHtcbiAgICAgICAgdGhpcy5hY3Rpb25QYXRoID0gJ2NzdmVycm9yL3RleHQ6Y3N2JztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXJsID0gdXJsSm9pbih0aGlzLnVybCwgdGhpcy5hY3Rpb25QYXRoKTtcbiAgICB0aGlzLnN1YlBhdGggPSB0aGlzLmJ1aWxkU3ViUGF0aCgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxCb2R5IGV4dGVuZHMgUmVxdWVzdERhdGE+KFxuICAgIGRhdGE/OiBSZXF1ZXN0RGF0YSxcbiAgICBwYXJhbXM/OiBSZXF1ZXN0UGFyYW1zLFxuICAgIHBlcmZvcm1BUElDYWxsPzogdHJ1ZSxcbiAgKTogUHJvbWlzZTxMaWJyYXJ5UmVzcG9uc2U8Qm9keT4+XG5cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8Qm9keSBleHRlbmRzIFJlcXVlc3REYXRhLCBQYXJhbXMgZXh0ZW5kcyBVbmtub3duUmVjPihcbiAgICBkYXRhPzogQm9keSxcbiAgICBwYXJhbXM/OiBQYXJhbXMsXG4gICAgcGVyZm9ybUFQSUNhbGw/OiBmYWxzZSxcbiAgKTogUHJvbWlzZTxMaWJyYXJ5TG9jYWxSZXNwb25zZTxCb2R5LCBQYXJhbXM+PlxuXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0PEJvZHkgZXh0ZW5kcyBSZXF1ZXN0RGF0YSwgUGFyYW1zIGV4dGVuZHMgVW5rbm93blJlYz4oXG4gICAgZGF0YTogUmVxdWVzdERhdGEgfCBCb2R5ID0ge30sXG4gICAgcGFyYW1zOiBSZXF1ZXN0UGFyYW1zIHwgUGFyYW1zID0ge30sXG4gICAgcGVyZm9ybUFQSUNhbGwgPSB0cnVlLFxuICApOiBQcm9taXNlPExpYnJhcnlSZXNwb25zZTxCb2R5PiB8IExpYnJhcnlMb2NhbFJlc3BvbnNlPEJvZHksIFBhcmFtcz4+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkRnVsbFVybCgpO1xuICAgIHRoaXMuc2V0QmFzZVVSTCh0aGlzLnJlc291cmNlKTtcblxuICAgIGlmICghcGVyZm9ybUFQSUNhbGwpIHtcbiAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmdldFJlcXVlc3RCb2R5KGRhdGEpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBib2R5LFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIHVybCxcbiAgICAgIH0gYXMgTGlicmFyeUxvY2FsUmVzcG9uc2U8Qm9keSwgUGFyYW1zPjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm1ha2VSZXF1ZXN0KHVybCwgZGF0YSwgcGFyYW1zKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3BvbnNlLFxuICAgICAgICBib2R5OiByZXNwb25zZS5kYXRhLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBeGlvc0Vycm9yKSB7XG4gICAgICAgIGNvbnN0IGVycm9yOiBhbnkgPSBuZXcgRXJyb3IoKTtcblxuICAgICAgICBlcnJvci5jb2RlID0gZXJyLmNvZGU7XG4gICAgICAgIGVycm9yLmNvbmZpZyA9IGVyci5jb25maWc7XG5cbiAgICAgICAgaWYgKGVyci5yZXNwb25zZSkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQsXG4gICAgICAgICAgICBkYXRhOiBib2R5LFxuICAgICAgICAgIH0gPSBlcnIucmVzcG9uc2U7XG5cbiAgICAgICAgICBlcnJvci5yZXNwb25zZSA9IGVyci5yZXNwb25zZTtcblxuICAgICAgICAgIGVycm9yLnN0YXR1c0NvZGUgPSBzdGF0dXM7XG4gICAgICAgICAgZXJyb3Iuc3RhdHVzVGV4dCA9IHN0YXR1c1RleHQ7XG5cbiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBib2R5Py5FcnJvck1lc3NhZ2UgPz8gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgZXJyb3Iub3JpZ2luYWxNZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgVW5zdWNjZXNzZnVsOiBTdGF0dXMgQ29kZTogXCIke2Vycm9yLnN0YXR1c0NvZGV9XCIgTWVzc2FnZTogXCIke2Vycm9yTWVzc2FnZX1cImA7XG5cbiAgICAgICAgICBpZiAoYm9keSkge1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXYubWFpbGpldC5jb20vZW1haWwvZ3VpZGVzL3NlbmQtYXBpLXYzMS8jc2VuZC1pbi1idWxrXG4gICAgICAgICAgICBjb25zdCBmdWxsTWVzc2FnZSA9IGJvZHkuTWVzc2FnZXM/LlswXT8uRXJyb3JzPy5bMF0/LkVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVsbE1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgKz0gYDtcXG4ke2Z1bGxNZXNzYWdlfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHYzLjEgY2FzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXYubWFpbGpldC5jb20vZW1haWwvZ3VpZGVzL3NlbmQtYXBpLXYzMS8jc2FuZGJveC1tb2RlXG4gICAgICAgICAgICBzZXRWYWx1ZUlmTm90TmlsKGVycm9yLCAnRXJyb3JNZXNzYWdlJywgYm9keS5FcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgc2V0VmFsdWVJZk5vdE5pbChlcnJvciwgJ0Vycm9yQ29kZScsIGJvZHkuRXJyb3JDb2RlKTtcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvcklkZW50aWZpZXInLCBib2R5LkVycm9ySWRlbnRpZmllcik7XG4gICAgICAgICAgICBzZXRWYWx1ZUlmTm90TmlsKGVycm9yLCAnRXJyb3JSZWxhdGVkVG8nLCBib2R5LkVycm9yUmVsYXRlZFRvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3IucmVzcG9uc2UgPSBudWxsO1xuXG4gICAgICAgICAgZXJyb3Iuc3RhdHVzQ29kZSA9IG51bGw7XG4gICAgICAgICAgZXJyb3Iuc3RhdHVzVGV4dCA9IG51bGw7XG5cbiAgICAgICAgICBlcnJvci5vcmlnaW5hbE1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBlcnJvci5tZXNzYWdlID0gYFVuc3VjY2Vzc2Z1bDogRXJyb3IgQ29kZTogXCIke2Vycm9yLmNvZGV9XCIgTWVzc2FnZTogXCIke2Vyci5tZXNzYWdlfVwiYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBwcm90b2NvbCA9ICdodHRwczovLycgYXMgY29uc3Q7XG5cbiAgcHVibGljIHN0YXRpYyBwYXJzZVRvSlNPTmIodGV4dDogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB0ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInRleHRcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIGxldCBib2R5O1xuICAgIHRyeSB7XG4gICAgICBib2R5ID0gSlNPTmIucGFyc2UodGV4dCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYm9keSA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0Jyb3dzZXIoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3Q7XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgRHJhZnRDYW1wYWlnbiB7XG4gIGV4cG9ydCBlbnVtIEVkaXRNb2RlIHtcbiAgICBUb29sMiA9ICd0b29sMicsXG4gICAgSFRNTDIgPSAnaHRtbDInLFxuICAgIE1KTUwgPSAnbWptbCdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENhbXBhaWduRHJhZnRTdGF0dXMge1xuICAgIEFYQ2FuY2VsZWQgPSAtMyxcbiAgICBEZWxldGVkID0gLTIsXG4gICAgQXJjaGl2ZWQgPSAtMSxcbiAgICBEcmFmdCA9IDAsXG4gICAgUHJvZ3JhbW1lZCA9IDEsXG4gICAgU2VudCA9IDIsXG4gICAgQVhUZXN0ZWQgPSAzLFxuICAgIEFYU2VsZWN0ZWQgPSA0XG4gIH1cblxuICBleHBvcnQgZW51bSBDYW1wYWlnbkRyYWZ0U2VuZGluZ1N0YXR1cyB7XG4gICAgQVhDYW5jZWxsZWQgPSAnQVhDYW5jZWxsZWQnLFxuICAgIERlbGV0ZWQgPSAnRGVsZXRlZCcsXG4gICAgQXJjaGl2ZWQgPSAnQXJjaGl2ZWQnLFxuICAgIERyYWZ0ID0gJ0RyYWZ0JyxcbiAgICBQcm9ncmFtbWVkID0gJ1Byb2dyYW1tZWQnLFxuICAgIFNlbnQgPSAnU2VudCcsXG4gICAgQVhUZXN0ZWQgPSAnQVhUZXN0ZWQnLFxuICAgIEFYU2VsZWN0ZWQgPSAnQVhTZWxlY3RlZCdcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVjaXBpZW50IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE5hbWU/OiBzdHJpbmdcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ2FtcGFpZ25EcmFmdDxBWFRlc3RpbmcgPSBDb21tb24uVW5rbm93blJlYz4ge1xuICAgIElEOiBudW1iZXI7XG4gICAgQVhGcmFjdGlvbjogbnVtYmVyO1xuICAgIEFYRnJhY3Rpb25OYW1lOiBzdHJpbmc7XG4gICAgQVhUZXN0aW5nOiBBWFRlc3Rpbmc7XG4gICAgQ3VycmVudDogbnVtYmVyO1xuICAgIEVkaXRNb2RlOiBFZGl0TW9kZTtcbiAgICBJc1N0YXJyZWQ6IGJvb2xlYW47XG4gICAgSXNUZXh0UGFydEluY2x1ZGVkOiBib29sZWFuO1xuICAgIFJlcGx5RW1haWw6IHN0cmluZztcbiAgICBTZW5kZXJOYW1lOiBzdHJpbmc7XG4gICAgVGVtcGxhdGVJRDogbnVtYmVyO1xuICAgIFRpdGxlOiBzdHJpbmc7XG4gICAgQ2FtcGFpZ25JRDogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdElEOiBudW1iZXI7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgRGVsaXZlcmVkQXQ6IHN0cmluZztcbiAgICBMb2NhbGU6IHN0cmluZztcbiAgICBNb2RpZmllZEF0OiBzdHJpbmc7XG4gICAgUHJlc2V0OiBzdHJpbmc7XG4gICAgU2VnbWVudGF0aW9uSUQ6IG51bWJlcjtcbiAgICBTZW5kZXI6IHN0cmluZztcbiAgICBTZW5kZXJFbWFpbDogc3RyaW5nO1xuICAgIFN0YXR1czogQ2FtcGFpZ25EcmFmdFN0YXR1cztcbiAgICBTdWJqZWN0OiBzdHJpbmc7XG4gICAgVXJsOiBzdHJpbmc7XG4gICAgVXNlZDogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnQ8SGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgSGVhZGVyczogSGVhZGVycztcbiAgICAnSHRtbC1wYXJ0Jzogc3RyaW5nO1xuICAgICdUZXh0LXBhcnQnOiBzdHJpbmc7XG4gICAgTUpNTENvbnRlbnQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ2FtcGFpZ25EcmFmdFNjaGVkdWxlIHtcbiAgICBEYXRlOiBzdHJpbmc7XG4gICAgU3RhdHVzOiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRCb2R5PEFYVGVzdGluZyA9IENvbW1vbi5Vbmtub3duUmVjPiA9IHtcbiAgICBMb2NhbGU6IHN0cmluZztcbiAgICBTdWJqZWN0OiBzdHJpbmc7XG5cbiAgICBBWEZyYWN0aW9uPzogbnVtYmVyO1xuICAgIEFYRnJhY3Rpb25OYW1lPzogc3RyaW5nO1xuICAgIEFYVGVzdGluZz86IEFYVGVzdGluZztcbiAgICBDdXJyZW50PzogbnVtYmVyO1xuICAgIEVkaXRNb2RlPzogRWRpdE1vZGU7XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgICBJc1RleHRQYXJ0SW5jbHVkZWQ/OiBib29sZWFuO1xuICAgIFJlcGx5RW1haWw/OiBzdHJpbmc7XG4gICAgU2VuZGVyTmFtZT86IHN0cmluZztcbiAgICBUZW1wbGF0ZUlEPzogbnVtYmVyO1xuICAgIFRpdGxlPzogc3RyaW5nO1xuICAgIENvbnRhY3RzTGlzdElEPzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdEFsdD86IHN0cmluZztcbiAgICBTZWdtZW50YXRpb25JRD86IG51bWJlcjtcbiAgICBTZWdtZW50YXRpb25BbHQ/OiBzdHJpbmc7XG4gICAgU2VuZGVyPzogc3RyaW5nO1xuICAgIFNlbmRlckVtYWlsPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q2FtcGFpZ25EcmFmdEJvZHk8QVhUZXN0aW5nID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICBPbWl0PFBhcnRpYWw8UG9zdENhbXBhaWduRHJhZnRCb2R5PEFYVGVzdGluZz4+LCAnQ29udGFjdHNMaXN0QWx0Jz4gJlxuICB7XG4gICAgU3RhdHVzPzogQ2FtcGFpZ25EcmFmdFN0YXR1c1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25EcmFmdFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQVhUZXN0aW5nPzogbnVtYmVyO1xuICAgIENhbXBhaWduPzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBEZWxpdmVyZWRBdD86IHN0cmluZztcbiAgICBFZGl0TW9kZT86IEVkaXRNb2RlO1xuICAgIElzQXJjaGl2ZWQ/OiBib29sZWFuO1xuICAgIElzQ2FtcGFpZ24/OiBib29sZWFuO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNIYW5kbGVkPzogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICAgIE1vZGlmaWVkPzogYm9vbGVhbjtcbiAgICBOZXdzTGV0dGVyVGVtcGxhdGU/OiBudW1iZXI7XG4gICAgU3RhdHVzPzogQ2FtcGFpZ25EcmFmdFN0YXR1cztcbiAgICBTdWJqZWN0Pzogc3RyaW5nO1xuICAgIFRlbXBsYXRlPzogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50Qm9keTxIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICBQYXJ0aWFsPENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50PEhlYWRlcnM+PlxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0U2NoZWR1bGVCb2R5ID0ge1xuICAgIERhdGU6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENhbXBhaWduRHJhZnRTY2hlZHVsZUJvZHkgPSBQYXJ0aWFsPFBvc3RDYW1wYWlnbkRyYWZ0U2NoZWR1bGVCb2R5PlxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0VGVzdEJvZHkgPSB7XG4gICAgUmVjaXBpZW50czogUmVjaXBpZW50W11cbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBDYW1wYWlnbkRyYWZ0UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q2FtcGFpZ25EcmFmdFtdPjtcbiAgdHlwZSBDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDYW1wYWlnbkRyYWZ0U2NoZWR1bGVbXT47XG4gIHR5cGUgQ2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnRSZXNwb25zZTxIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICBDb21tb24uUmVzcG9uc2U8QXJyYXk8Q2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnQ8SGVhZGVycz4+PjtcbiAgdHlwZSBDYW1wYWlnbkRyYWZ0U3RhdHVzUmVzcG9uc2UgPVxuICAgIENvbW1vbi5SZXNwb25zZTxBcnJheTx7IFN0YXR1czogQ2FtcGFpZ25EcmFmdFNlbmRpbmdTdGF0dXMgfT4+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0UmVzcG9uc2UgPSBDYW1wYWlnbkRyYWZ0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0Q2FtcGFpZ25EcmFmdFJlc3BvbnNlID0gQ2FtcGFpZ25EcmFmdFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduRHJhZnRSZXNwb25zZSA9IENhbXBhaWduRHJhZnRSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZSA9IENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlID0gQ2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2UgPSBDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudFJlc3BvbnNlPEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgIENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50UmVzcG9uc2U8SGVhZGVycz5cbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnRSZXNwb25zZTxIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICBDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudFJlc3BvbnNlPEhlYWRlcnM+XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRTZW5kID0gQ2FtcGFpZ25EcmFmdFN0YXR1c1Jlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0VGVzdCA9IENhbXBhaWduRHJhZnRTdGF0dXNSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbkRyYWZ0U3RhdHVzID0gQ2FtcGFpZ25EcmFmdFN0YXR1c1Jlc3BvbnNlXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2VudENhbXBhaWduIHtcbiAgZXhwb3J0IGVudW0gQ2FtcGFpZ25UeXBlIHtcbiAgICBUcmFuc2FjdGlvbmFsID0gMSxcbiAgICBNYXJrZXRpbmcgPSAyLFxuICAgIFVua25vd24gPSAzLFxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDYW1wYWlnbiB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBJc0RlbGV0ZWQ6IGJvb2xlYW47XG4gICAgSXNTdGFycmVkOiBib29sZWFuO1xuICAgIENhbXBhaWduVHlwZTogQ2FtcGFpZ25UeXBlO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIEN1c3RvbVZhbHVlOiBzdHJpbmc7XG4gICAgRmlyc3RNZXNzYWdlSUQ6IG51bWJlcjtcbiAgICBGcm9tRW1haWw6IHN0cmluZztcbiAgICBGcm9tSUQ6IG51bWJlcjtcbiAgICBGcm9tTmFtZTogc3RyaW5nO1xuICAgIEhhc0h0bWxDb3VudDogbnVtYmVyO1xuICAgIEhhc1R4dENvdW50OiBudW1iZXI7XG4gICAgTGlzdElEOiBudW1iZXI7XG4gICAgTmV3c0xldHRlcklEOiBudW1iZXI7XG4gICAgU2VnbWVudGF0aW9uSUQ6IG51bWJlcjtcbiAgICBTZW5kRW5kQXQ6IHN0cmluZztcbiAgICBTZW5kU3RhcnRBdDogc3RyaW5nO1xuICAgIFNwYW1hc3NTY29yZTogbnVtYmVyO1xuICAgIFN1YmplY3Q6IHN0cmluZztcbiAgICBXb3JrZmxvd0lEOiBudW1iZXI7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUHV0Q2FtcGFpZ25Cb2R5ID0ge1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5UaW1lc3RhbXBQZXJpb2Q+ICZcbiAgICBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmXG4gIHtcbiAgICBDYW1wYWlnbklEPzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdElEPzogbnVtYmVyO1xuICAgIEN1c3RvbUNhbXBhaWduPzogc3RyaW5nO1xuICAgIEZyb20/OiBzdHJpbmc7XG4gICAgRnJvbURvbWFpbj86IHN0cmluZztcbiAgICBGcm9tSUQ/OiBudW1iZXI7XG4gICAgRnJvbVR5cGU/OiBDYW1wYWlnblR5cGU7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc05ld3NsZXR0ZXJUb29sPzogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICAgIFBlcmlvZD86IENvbW1vbi5QZXJpb2Q7XG4gICAgV29ya2Zsb3dJRD86IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBDYW1wYWlnblJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENhbXBhaWduW10+O1xuXG4gIGV4cG9ydCB0eXBlIFB1dENhbXBhaWduUmVzcG9uc2UgPSBDYW1wYWlnblJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduUmVzcG9uc2UgPSBDYW1wYWlnblJlc3BvbnNlXG59XG4iLCJleHBvcnQgbmFtZXNwYWNlIENvbW1vbiB7XG4gIGV4cG9ydCB0eXBlIFVua25vd25SZWMgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbiB7XG4gICAgY291bnRPbmx5OiBib29sZWFuO1xuXG4gICAgTGltaXQ6IG51bWJlcjtcbiAgICBPZmZzZXQ6IG51bWJlcjtcbiAgICBTb3J0OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFRpbWVzdGFtcFBlcmlvZCB7XG4gICAgRnJvbVRTOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgVG9UUzogc3RyaW5nIHwgbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUmVzcG9uc2U8RW50aXR5PiA9IHtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIFRvdGFsOiBudW1iZXI7XG4gICAgRGF0YTogRW50aXR5O1xuICB9XG5cbiAgZXhwb3J0IGVudW0gUGVyaW9kIHtcbiAgICBEYXkgPSAnRGF5JyxcbiAgICBXZWVrID0gJ1dlZWsnLFxuICAgIE1vbnRoID0gJ01vbnRoJyxcbiAgICBZZWFyID0gJ1llYXInLFxuICB9XG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29udGFjdCB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBJc0V4Y2x1ZGVkRnJvbUNhbXBhaWduczogYm9vbGVhbjtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgRGVsaXZlcmVkQ291bnQ6IG51bWJlcjtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIEV4Y2x1c2lvbkZyb21DYW1wYWlnbnNVcGRhdGVkQXQ6IHN0cmluZztcbiAgICBJc09wdEluUGVuZGluZzogYm9vbGVhbjtcbiAgICBJc1NwYW1Db21wbGFpbmluZzogYm9vbGVhbjtcbiAgICBMYXN0QWN0aXZpdHlBdDogc3RyaW5nO1xuICAgIExhc3RVcGRhdGVBdDogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0Qm9keSA9IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIElzRXhjbHVkZWRGcm9tQ2FtcGFpZ25zPzogYm9vbGVhbjtcbiAgICBOYW1lPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdEJvZHkgPSBPbWl0PFBvc3RDb250YWN0Qm9keSwgJ0VtYWlsJz5cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBDYW1wYWlnbj86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgSXNFeGNsdWRlZEZyb21DYW1wYWlnbnM/OiBib29sZWFuO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIENvbnRhY3RSZXNwb25zZSA9IHtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIFRvdGFsOiBudW1iZXI7XG4gICAgRGF0YTogQ29udGFjdFtdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0UmVzcG9uc2UgPSBDb250YWN0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdFJlc3BvbnNlID0gQ29udGFjdFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RSZXNwb25zZSA9IENvbnRhY3RSZXNwb25zZVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIENvbnRhY3RMaXN0IHtcbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0TGlzdCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBJc0RlbGV0ZWQ6IGJvb2xlYW47XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIEFkZHJlc3M6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBTdWJzY3JpYmVyQ291bnQ6IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdExpc3RCb2R5ID0ge1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdExpc3RCb2R5ID0gUGFydGlhbDxQb3N0Q29udGFjdExpc3RCb2R5PlxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RMaXN0UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBBZGRyZXNzPzogc3RyaW5nO1xuICAgIEV4Y2x1ZGVJRD86IG51bWJlcjtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ29udGFjdExpc3RSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0TGlzdFtdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdExpc3RSZXNwb25zZSA9IENvbnRhY3RMaXN0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdExpc3RSZXNwb25zZSA9IENvbnRhY3RMaXN0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdExpc3RSZXNwb25zZSA9IENvbnRhY3RMaXN0UmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBCdWxrQ29udGFjdE1hbmFnZW1lbnQge1xuICBleHBvcnQgZW51bSBNYW5hZ2VDb250YWN0c0FjdGlvbiB7XG4gICAgQWRkRm9yY2UgPSAnYWRkZm9yY2UnLFxuICAgIEFkZE5vRm9yY2UgPSAnYWRkbm9mb3JjZScsXG4gICAgUmVtb3ZlID0gJ3JlbW92ZScsXG4gICAgVW5TdWIgPSAndW5zdWInXG4gIH1cblxuICBleHBvcnQgZW51bSBJbXBvcnRMaXN0QWN0aW9uIHtcbiAgICBBZGRGb3JjZSA9ICdhZGRmb3JjZScsXG4gICAgQWRkTm9Gb3JjZSA9ICdhZGRub2ZvcmNlJyxcbiAgICBVblN1YiA9ICd1bnN1YicsXG4gICAgRHVwbGljYXRlT3ZlcnJpZGUgPSAnZHVwbGljYXRlLW92ZXJyaWRlJyxcbiAgICBEdXBsaWNhdGVOb092ZXJyaWRlID0gJ2R1cGxpY2F0ZS1uby1vdmVycmlkZSdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEltcG9ydENTVk1ldGhvZCB7XG4gICAgQWRkRm9yY2UgPSAnYWRkZm9yY2UnLFxuICAgIEFkZE5vRm9yY2UgPSAnYWRkbm9mb3JjZScsXG4gICAgUmVtb3ZlID0gJ3JlbW92ZScsXG4gICAgVW5TdWIgPSAndW5zdWInLFxuICAgIEV4Y2x1ZGVNYXJrZXRpbmcgPSAnZXhjbHVkZW1hcmtldGluZycsXG4gICAgSW5jbHVkZU1hcmtldGluZyA9ICdpbmNsdWRlbWFya2V0aW5nJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ1NWSW1wb3J0U3RhdHVzIHtcbiAgICBVcGxvYWQgPSAnVXBsb2FkJyxcbiAgICBDb21wbGV0ZWQgPSAnQ29tcGxldGVkJyxcbiAgICBBYm9ydCA9ICdBYm9ydCcsXG4gIH1cblxuICBleHBvcnQgZW51bSBKb2JTdGF0dXMge1xuICAgIENvbXBsZXRlZCA9ICdDb21wbGV0ZWQnLFxuICAgIEluUHJvZ3Jlc3MgPSAnSW4gUHJvZ3Jlc3MnLFxuICAgIEVycm9yID0gJ0Vycm9yJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBKb2Ige1xuICAgIEpvYklEOiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENTVkltcG9ydCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBFcnJUcmVzaG9sZDogbnVtYmVyO1xuICAgIEltcG9ydE9wdGlvbnM6IHN0cmluZztcbiAgICBNZXRob2Q6IEltcG9ydENTVk1ldGhvZDtcbiAgICBBbGl2ZUF0OiBzdHJpbmc7XG4gICAgQ29udGFjdHNMaXN0SUQ6IG51bWJlcjtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIEN1cnJlbnQ6IG51bWJlcjtcbiAgICBEYXRhSUQ6IG51bWJlcjtcbiAgICBFcnJjb3VudDogbnVtYmVyO1xuICAgIEpvYkVuZDogc3RyaW5nO1xuICAgIEpvYlN0YXJ0OiBzdHJpbmc7XG4gICAgUmVxdWVzdEF0OiBzdHJpbmc7XG4gICAgU3RhdHVzOiBDU1ZJbXBvcnRTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RMaXN0IHtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBBY3Rpb246IE1hbmFnZUNvbnRhY3RzQWN0aW9uO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzIHtcbiAgICBDb250YWN0c0xpc3RzOiBDb250YWN0TGlzdFtdO1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgRXJyb3I6IHN0cmluZztcbiAgICBFcnJvckZpbGU6IHN0cmluZztcbiAgICBKb2JFbmQ6IHN0cmluZztcbiAgICBKb2JTdGFydDogc3RyaW5nO1xuICAgIFN0YXR1czogSm9iU3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0c0xpc3RJbXBvcnRMaXN0IHtcbiAgICBKb2JJRDogbnVtYmVyO1xuICAgIEFjdGlvbjogSW1wb3J0TGlzdEFjdGlvbjtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBDb250YWN0Qm9keTxQcm9wZXJ0aWVzID0gQ29tbW9uLlVua25vd25SZWM+ID0ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTmFtZT86IHN0cmluZztcbiAgICBJc0V4Y2x1ZGVkRnJvbUNhbXBhaWducz86IGJvb2xlYW47XG4gICAgUHJvcGVydGllcz86IFByb3BlcnRpZXM7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1hbmFnZU1hbnlDb250YWN0c0JvZHk8UHJvcGVydGllcyA9IENvbW1vbi5Vbmtub3duUmVjPiA9IHtcbiAgICBDb250YWN0czogQXJyYXk8Q29udGFjdEJvZHk8UHJvcGVydGllcz4+O1xuICAgIENvbnRhY3RzTGlzdHM/OiBDb250YWN0TGlzdFtdO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RzTGlzdEltcG9ydExpc3RCb2R5ID0ge1xuICAgIEFjdGlvbjogSW1wb3J0TGlzdEFjdGlvbjtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0c0xpc3RNYW5hZ2VNYW55Q29udGFjdHNCb2R5PFByb3BlcnRpZXMgPSBDb21tb24uVW5rbm93blJlYz4gPSB7XG4gICAgQWN0aW9uOiBNYW5hZ2VDb250YWN0c0FjdGlvbjtcbiAgICBDb250YWN0czogQXJyYXk8Q29udGFjdEJvZHk8UHJvcGVydGllcz4+O1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENTVkltcG9ydEJvZHkgPSB7XG4gICAgQ29udGFjdHNMaXN0SUQ6IG51bWJlcjtcbiAgICBEYXRhSUQ6IG51bWJlcjtcbiAgICBFcnJUcmVzaG9sZD86IG51bWJlcjtcbiAgICBJbXBvcnRPcHRpb25zPzogc3RyaW5nO1xuICAgIE1ldGhvZD86IEltcG9ydENTVk1ldGhvZDtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENTVkltcG9ydEJvZHkgPSBQYXJ0aWFsPFBvc3RDU1ZJbXBvcnRCb2R5PiAmIHtcbiAgICBTdGF0dXM/OiBDU1ZJbXBvcnRTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDU1ZJbXBvcnRRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIEpvYlJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPEpvYltdPjtcbiAgdHlwZSBDU1ZJbXBvcnRSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDU1ZJbXBvcnRbXT47XG4gIHR5cGUgQ29udGFjdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZSA9IEpvYlJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZSA9IENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0c0xpc3RJbXBvcnRMaXN0UmVzcG9uc2UgPSBKb2JSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0c0xpc3RJbXBvcnRMaXN0UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdHNMaXN0SW1wb3J0TGlzdFtdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdHNMaXN0TWFuYWdlTWFueUNvbnRhY3RzUmVzcG9uc2UgPSBKb2JSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0c0xpc3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZSA9IENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZTtcblxuICBleHBvcnQgdHlwZSBQb3N0Q1NWSW1wb3J0UmVzcG9uc2UgPSBDU1ZJbXBvcnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRDU1ZJbXBvcnRSZXNwb25zZSA9IENTVkltcG9ydFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENTVkltcG9ydFJlc3BvbnNlID0gQ1NWSW1wb3J0UmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDb250YWN0UHJvcGVydGllcyB7XG4gIGV4cG9ydCBlbnVtIERhdGFUeXBlIHtcbiAgICBTdHIgPSAnc3RyJyxcbiAgICBJbnQgPSAnaW50JyxcbiAgICBGbG9hdCA9ICdmbG9hdCcsXG4gICAgQm9vbCA9ICdib29sJyxcbiAgICBEYXRlVGltZSA9ICdkYXRldGltZSdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIE5hbWVTcGFjZSB7XG4gICAgU3RhdGljID0gJ3N0YXRpYycsXG4gICAgSGlzdG9yaWMgPSAnaGlzdG9yaWMnXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RQcm9wZXJ0eSB7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIFZhbHVlOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3REYXRhIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIERhdGE6IENvbnRhY3RQcm9wZXJ0eVtdO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0TWV0YURhdGEge1xuICAgIElEOiBudW1iZXI7XG4gICAgRGF0YXR5cGU6IERhdGFUeXBlO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBOYW1lU3BhY2U6IE5hbWVTcGFjZTtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1ldGFEYXRhQm9keSA9IHtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgRGF0YXR5cGU/OiBEYXRhVHlwZTtcbiAgICBOYW1lU3BhY2U/OiBOYW1lU3BhY2U7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0TWV0YURhdGFCb2R5ID0ge1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gICAgRGF0YXR5cGU/OiBEYXRhVHlwZTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RNZXRhRGF0YVF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgRGF0YVR5cGU/OiBEYXRhVHlwZVxuICAgIE5hbWVzcGFjZT86IE5hbWVTcGFjZTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3REYXRhQm9keSA9IHtcbiAgICBEYXRhOiBDb250YWN0UHJvcGVydHlbXTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3REYXRhUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBDYW1wYWlnbj86IG51bWJlcjtcbiAgICBDb250YWN0RW1haWw/OiBzdHJpbmc7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIEZpZWxkcz86IHN0cmluZztcbiAgICBMYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBDb250YWN0RGF0YVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3REYXRhW10+O1xuICB0eXBlIENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RNZXRhRGF0YVtdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1ldGFEYXRhUmVzcG9uc2UgPSBDb250YWN0TWV0YURhdGFSZXNwb25zZTtcbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdE1ldGFEYXRhUmVzcG9uc2UgPSBDb250YWN0TWV0YURhdGFSZXNwb25zZTtcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdE1ldGFEYXRhUmVzcG9uc2UgPSBDb250YWN0TWV0YURhdGFSZXNwb25zZTtcblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0RGF0YVJlc3BvbnNlID0gQ29udGFjdERhdGFSZXNwb25zZTtcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdERhdGFSZXNwb25zZSA9IENvbnRhY3REYXRhUmVzcG9uc2U7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29udGFjdFN1YnNjcmlwdGlvbiB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgTWFuYWdlQ29udGFjdHM8UHJvcGVydGllcyA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBBY3Rpb246IEJ1bGtDb250YWN0TWFuYWdlbWVudC5NYW5hZ2VDb250YWN0c0FjdGlvbjtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgUHJvcGVydGllczogUHJvcGVydGllcztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTGlzdFJlY2lwaWVudCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBJc1Vuc3Vic2NyaWJlZDogYm9vbGVhbjtcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBMaXN0TmFtZTogc3RyaW5nO1xuICAgIFN1YnNjcmliZWRBdDogc3RyaW5nO1xuICAgIFVuc3Vic2NyaWJlZEF0OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RzTGlzdCB7XG4gICAgTGlzdElEOiBudW1iZXI7XG4gICAgSXNVbnN1YjogYm9vbGVhbjtcbiAgICBTdWJzY3JpYmVkQXQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdHNMaXN0U2lnbnVwIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIENvbmZpcm1BdDogbnVtYmVyO1xuICAgIENvbmZpcm1JcDogc3RyaW5nO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTGlzdElEOiBudW1iZXI7XG4gICAgU2lnbnVwQXQ6IG51bWJlcjtcbiAgICBTaWdudXBJcDogc3RyaW5nO1xuICAgIFNpZ251cEtleTogc3RyaW5nO1xuICAgIFNvdXJjZUlkOiBudW1iZXI7XG4gICAgU291cmNlOiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RNYW5hZ2VDb250YWN0c0xpc3RzQm9keSA9IHtcbiAgICBDb250YWN0c0xpc3RzOiBCdWxrQ29udGFjdE1hbmFnZW1lbnQuQ29udGFjdExpc3RbXTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0c0xpc3RNYW5hZ2VDb250YWN0Qm9keTxQcm9wZXJ0aWVzID0gQ29tbW9uLlVua25vd25SZWM+ID0ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgQWN0aW9uOiBCdWxrQ29udGFjdE1hbmFnZW1lbnQuTWFuYWdlQ29udGFjdHNBY3Rpb247XG4gICAgTmFtZT86IHN0cmluZztcbiAgICBQcm9wZXJ0aWVzPzogUHJvcGVydGllcztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RMaXN0UmVjaXBpZW50Qm9keSA9IHtcbiAgICBJc1Vuc3Vic2NyaWJlZD86IGJvb2xlYW47XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgQ29udGFjdEFsdD86IHN0cmluZztcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBMaXN0QWx0Pzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0TGlzdFJlY2lwaWVudEJvZHkgPSB7XG4gICAgSXNVbnN1YnNjcmliZWQ/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0TGlzdFJlY2lwaWVudFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQmxvY2tlZD86IGJvb2xlYW47XG4gICAgQ29udGFjdD86IG51bWJlcjtcbiAgICBDb250YWN0RW1haWw/OiBzdHJpbmc7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIElnbm9yZURlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzRXhjbHVkZWRGcm9tQ2FtcGFpZ25zPzogYm9vbGVhbjtcbiAgICBMYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgICBMaXN0TmFtZT86IHN0cmluZztcbiAgICBPcGVuZWQ/OiBib29sZWFuO1xuICAgIFVuc3ViPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RzTGlzdFNpZ251cFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQ29udGFjdD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgRG9tYWluPzogc3RyaW5nO1xuICAgIEVtYWlsPzogc3RyaW5nO1xuICAgIExvY2FsUGFydD86IHN0cmluZztcbiAgICBNYXhDb25maXJtQXQ/OiBudW1iZXI7XG4gICAgTWluQ29uZmlybUF0PzogbnVtYmVyO1xuICAgIE1heFNpZ251cEF0PzogbnVtYmVyO1xuICAgIE1pblNpZ251cEF0PzogbnVtYmVyO1xuICAgIFNpZ251cElwPzogc3RyaW5nO1xuICAgIFNvdXJjZT86IHN0cmluZztcbiAgICBTb3VyY2VJRD86IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBMaXN0UmVjaXBpZW50UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TGlzdFJlY2lwaWVudFtdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1hbmFnZUNvbnRhY3RzTGlzdHNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxcbiAgICBBcnJheTx7IENvbnRhY3RzTGlzdHM6IEJ1bGtDb250YWN0TWFuYWdlbWVudC5Db250YWN0TGlzdFtdIH0+XG4gICAgPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdHNMaXN0TWFuYWdlQ29udGFjdFJlc3BvbnNlPFByb3BlcnRpZXMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PE1hbmFnZUNvbnRhY3RzPFByb3BlcnRpZXM+Pj47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdExpc3RSZWNpcGllbnRSZXNwb25zZSA9IExpc3RSZWNpcGllbnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRMaXN0UmVjaXBpZW50UmVzcG9uc2UgPSBMaXN0UmVjaXBpZW50UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0TGlzdFJlY2lwaWVudFJlc3BvbnNlID0gTGlzdFJlY2lwaWVudFJlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdEdldENvbnRhY3RzTGlzdHNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0c0xpc3RbXT5cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0c0xpc3RTaWdudXBSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0c0xpc3RTaWdudXBbXT5cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDb250YWN0VmVyaWZpY2F0aW9uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBWZXJpZmljYXRpb25TdW1tYXJ5PFJlc3VsdCA9IENvbW1vbi5Vbmtub3duUmVjLCBSaXNrID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICByZXN1bHQ6IFJlc3VsdDtcbiAgICByaXNrOiBSaXNrO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0c0xpc3RWZXJpZmljYXRpb248UmVzdWx0ID0gQ29tbW9uLlVua25vd25SZWMsIFJpc2sgPSBDb21tb24uVW5rbm93blJlYz4ge1xuICAgIEFraWQ6IG51bWJlcjtcbiAgICBDb250YWN0TGlzdElEOiBudW1iZXI7XG4gICAgQ291bnQ6IG51bWJlcjtcbiAgICBFcnJvcjogc3RyaW5nO1xuICAgIElEOiBudW1iZXI7XG4gICAgSm9iRW5kOiBzdHJpbmc7XG4gICAgSm9iU3RhcnQ6IHN0cmluZztcbiAgICBNZXRob2Q6IHN0cmluZztcbiAgICBSZXNwb25zZVVSTDogc3RyaW5nO1xuICAgIFN0YXR1czogc3RyaW5nO1xuICAgIFN1bW1hcnk6IFZlcmlmaWNhdGlvblN1bW1hcnk8UmVzdWx0LCBSaXNrPlxuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0c0xpc3RWZXJpZnlSZXNwb25zZTxSZXN1bHQgPSBDb21tb24uVW5rbm93blJlYywgUmlzayA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PENvbnRhY3RzTGlzdFZlcmlmaWNhdGlvbjxSZXN1bHQsIFJpc2s+Pj47XG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgTWVzc2FnZSB7XG4gIGV4cG9ydCBlbnVtIE1lc3NhZ2VTdGF0ZSB7XG4gICAgVXNlclVua25vd24gPSAxLFxuICAgIE1haWxib3hJbmFjdGl2ZSA9IDIsXG4gICAgUXVvdGFFeGNlZWRlZCA9IDMsXG4gICAgSW52YWxpZERvbWFpbiA9IDQsXG4gICAgTm9NYWlsSG9zdCA9IDUsXG4gICAgUmVsYXlPckFjY2Vzc0RlbmllZCA9IDYsXG4gICAgU2VuZGVyQmxvY2tlZCA9IDcsXG4gICAgQ29udGVudEJsb2NrZWQgPSA4LFxuICAgIFBvbGljeUlzc3VlID0gOSxcbiAgICBTeXN0ZW1Jc3N1ZSA9IDEwLFxuICAgIFByb3RvY29sSXNzdWUgPSAxMSxcbiAgICBDb25uZWN0aW9uSXNzdWUgPSAxMixcbiAgICBHcmV5TGlzdGVkID0gMTMsXG4gICAgUHJlQmxvY2tlZCA9IDE0LFxuICAgIER1cGxpY2F0ZUluQ2FtcGFpZ24gPSAxNSxcbiAgICBTcGFtUHJlQmxvY2tlZCA9IDE2LFxuICAgIEJhZE9yRW1wdHlUZW1wbGF0ZSA9IDE3LFxuICAgIEVycm9ySW5UZW1wbGF0ZUxhbmd1YWdlID0gMTgsXG4gICAgVHlwb0ZpeCA9IDE5LFxuICAgIEJsYWNrTGlzdGVkID0gMjAsXG4gICAgU3BhbVJlcG9ydGVyID0gMjFcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEZyb21UeXBlIHtcbiAgICBUcmFuc2FjdGlvbmFsID0gMSxcbiAgICBNYXJrZXRpbmcgPSAyLFxuICAgIFVua25vd24gPSAzLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gTWVzc2FnZVN0YXR1cyB7XG4gICAgUHJvY2Vzc2VkID0gMCxcbiAgICBRdWV1ZWQgPSAxLFxuICAgIFNlbnQgPSAyLFxuICAgIE9wZW5lZCA9IDMsXG4gICAgQ2xpY2tlZCA9IDQsXG4gICAgQm91bmNlID0gNSxcbiAgICBTcGFtID0gNixcbiAgICBVbnN1YiA9IDcsXG4gICAgQmxvY2tlZCA9IDgsXG4gICAgU29mdEJvdW5jZSA9IDksXG4gICAgSGFyZEJvdW5jZSA9IDEwLFxuICAgIERlZmVycmVkID0gMTEsXG4gIH1cblxuICBleHBvcnQgZW51bSBDdXJyZW50TWVzc2FnZVN0YXR1cyB7XG4gICAgVW5rbm93biA9ICd1bmtub3duJyxcbiAgICBRdWV1ZWQgPSAncXVldWVkJyxcbiAgICBTZW50ID0gJ3NlbnQnLFxuICAgIE9wZW5lZCA9ICdvcGVuZWQnLFxuICAgIENsaWNrZWQgPSAnY2xpY2tlZCcsXG4gICAgQm91bmNlID0gJ2JvdW5jZScsXG4gICAgU3BhbSA9ICdzcGFtJyxcbiAgICBVbnN1YiA9ICd1bnN1YicsXG4gICAgQmxvY2tlZCA9ICdibG9ja2VkJyxcbiAgICBIYXJkQm91bmNlZCA9ICdoYXJkYm91bmNlZCcsXG4gICAgU29mdEJvdW5jZWQgPSAnc29mdGJvdW5jZWQnLFxuICAgIERlZmVycmVkID0gJ2RlZmVycmVkJyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEV2ZW50VHlwZSB7XG4gICAgU2VudCA9ICdzZW50JyxcbiAgICBPcGVuZWQgPSAnb3BlbmVkJyxcbiAgICBDbGlja2VkID0gJ2NsaWNrZWQnLFxuICAgIEJvdW5jZWQgPSAnYm91bmNlZCcsXG4gICAgQmxvY2tlZCA9ICdibG9ja2VkJyxcbiAgICBVbnN1YiA9ICd1bnN1YicsXG4gICAgU3BhbSA9ICdzcGFtJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlVHJhY2tlZCB7XG4gICAgSXNDbGlja1RyYWNrZWQ6IGJvb2xlYW47XG4gICAgSXNIVE1MUGFydEluY2x1ZGVkOiBib29sZWFuO1xuICAgIElzT3BlblRyYWNrZWQ6IGJvb2xlYW47XG4gICAgSXNUZXh0UGFydEluY2x1ZGVkOiBib29sZWFuO1xuICAgIElzVW5zdWJUcmFja2VkOiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlIGV4dGVuZHMgTWVzc2FnZVRyYWNrZWQge1xuICAgIElEOiBudW1iZXI7XG4gICAgQXJyaXZlZEF0OiBzdHJpbmc7XG4gICAgQXR0YWNobWVudENvdW50OiBudW1iZXI7XG4gICAgQXR0ZW1wdENvdW50OiBudW1iZXI7XG4gICAgQ2FtcGFpZ25JRDogbnVtYmVyO1xuICAgIENvbnRhY3RBbHQ6IHN0cmluZztcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBEZWxheTogbnVtYmVyO1xuICAgIERlc3RpbmF0aW9uSUQ6IG51bWJlcjtcbiAgICBGaWx0ZXJUaW1lOiBudW1iZXI7XG4gICAgTWVzc2FnZVNpemU6IG51bWJlcjtcbiAgICBTZW5kZXJJRDogbnVtYmVyO1xuICAgIFNwYW1hc3Nhc3NpblNjb3JlOiBudW1iZXI7XG4gICAgU3BhbWFzc1J1bGVzOiBzdHJpbmc7XG4gICAgU3RhdGVJRDogTWVzc2FnZVN0YXRlO1xuICAgIFN0YXRlUGVybWFuZW50OiBib29sZWFuO1xuICAgIFN0YXR1czogQ3VycmVudE1lc3NhZ2VTdGF0dXM7XG4gICAgU3ViamVjdDogc3RyaW5nO1xuICAgIFVVSUQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUhpc3Rvcnkge1xuICAgIENvbW1lbnQ6IHN0cmluZztcbiAgICBFdmVudEF0OiBudW1iZXI7XG4gICAgRXZlbnRUeXBlOiBFdmVudFR5cGU7XG4gICAgU3RhdGU6IHN0cmluZztcbiAgICBVc2VyYWdlbnQ6IHN0cmluZztcbiAgICBVc2VyYWdlbnRJRDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlSW5mb3JtYXRpb248UnVsZXMgPSBDb21tb24uVW5rbm93blJlYz4ge1xuICAgIElEOiBudW1iZXI7XG4gICAgQ2FtcGFpZ25JRDogbnVtYmVyO1xuICAgIENsaWNrVHJhY2tlZENvdW50OiBudW1iZXI7XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgTWVzc2FnZVNpemU6IG51bWJlcjtcbiAgICBPcGVuVHJhY2tlZENvdW50OiBudW1iZXI7XG4gICAgUXVldWVkQ291bnQ6IG51bWJlcjtcbiAgICBTZW5kRW5kQXQ6IHN0cmluZztcbiAgICBTZW50Q291bnQ6IG51bWJlcjtcbiAgICBTcGFtQXNzYXNzaW5SdWxlczogUnVsZXM7XG4gICAgU3BhbUFzc2Fzc2luU2NvcmU6IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBHZXRNZXNzYWdlUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5UaW1lc3RhbXBQZXJpb2Q+ICZcbiAgICBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmXG4gIHtcbiAgICBDYW1wYWlnbj86IG51bWJlcjtcbiAgICBDb250YWN0PzogbnVtYmVyO1xuICAgIEN1c3RvbUlEPzogc3RyaW5nO1xuICAgIERlc3RpbmF0aW9uPzogbnVtYmVyO1xuICAgIEZyb21UeXBlPzogRnJvbVR5cGU7XG4gICAgTWVzc2FnZVN0YXRlPzogTWVzc2FnZVN0YXRlO1xuICAgIE1lc3NhZ2VTdGF0dXM/OiBNZXNzYWdlU3RhdHVzO1xuICAgIFBsYW5TdWJzY3JpcHRpb24/OiBudW1iZXI7XG4gICAgU2VuZGVySUQ/OiBudW1iZXI7XG4gICAgU2hvd0NvbnRhY3RBbHQ/OiBib29sZWFuO1xuICAgIFNob3dDdXN0b21JRD86IGJvb2xlYW47XG4gICAgU2hvd1N1YmplY3Q/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0TWVzc2FnZUluZm9ybWF0aW9uUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5UaW1lc3RhbXBQZXJpb2Q+ICZcbiAgICBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmXG4gIHtcbiAgICBDYW1wYWlnbklEPzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBDdXN0b21DYW1wYWlnbj86IHN0cmluZztcbiAgICBGcm9tPzogc3RyaW5nO1xuICAgIEZyb21Eb21haW4/OiBzdHJpbmc7XG4gICAgRnJvbUlEPzogbnVtYmVyO1xuICAgIEZyb21UeXBlPzogRnJvbVR5cGU7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc05ld3NsZXR0ZXJUb29sPzogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICAgIE1lc3NhZ2VTdGF0dXM/OiBNZXNzYWdlU3RhdHVzO1xuICAgIFBlcmlvZD86IENvbW1vbi5QZXJpb2Q7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldE1lc3NhZ2VzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TWVzc2FnZVtdPlxuICBleHBvcnQgdHlwZSBHZXRNZXNzYWdlSGlzdG9yeVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPE1lc3NhZ2VIaXN0b3J5W10+XG4gIGV4cG9ydCB0eXBlIEdldE1lc3NhZ2VJbmZvcm1hdGlvblJlc3BvbnNlPFJ1bGVzID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICAgIENvbW1vbi5SZXNwb25zZTxBcnJheTxNZXNzYWdlSW5mb3JtYXRpb248UnVsZXM+Pj5cbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBTZWdtZW50YXRpb24ge1xuICBleHBvcnQgZW51bSBTZWdtZW50U3RhdHVzIHtcbiAgICBVc2VkID0gJ3VzZWQnLFxuICAgIFVuVXNlZCA9ICd1bnVzZWQnLFxuICAgIERlbGV0ZWQgPSAnZGVsZXRlZCdcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdEZpbHRlciB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBEZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIEV4cHJlc3Npb246IHN0cmluZztcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgU3RhdHVzOiBTZWdtZW50U3RhdHVzO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0RmlsdGVyQm9keSA9IHtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgRXhwcmVzc2lvbjogc3RyaW5nO1xuICAgIERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdEZpbHRlckJvZHkgPSBQYXJ0aWFsPFBvc3RDb250YWN0RmlsdGVyQm9keT4gJiB7XG4gICAgU3RhdHVzPzogU2VnbWVudFN0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RGaWx0ZXJRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIFNob3dEZWxldGVkPzogYm9vbGVhbjtcbiAgICBTdGF0dXM/OiBTZWdtZW50U3RhdHVzO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIENvbnRhY3RGaWx0ZXJSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0RmlsdGVyW10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0RmlsdGVyUmVzcG9uc2UgPSBDb250YWN0RmlsdGVyUmVzcG9uc2U7XG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3RGaWx0ZXJSZXNwb25zZSA9IENvbnRhY3RGaWx0ZXJSZXNwb25zZTtcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdEZpbHRlclJlc3BvbnNlID0gQ29udGFjdEZpbHRlclJlc3BvbnNlO1xufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIFNlbmRFbWFpbFYzIHtcbiAgZXhwb3J0IHR5cGUgTWpUZW1wbGF0ZUVycm9yRGVsaXZlciA9ICcwJyB8ICdkZWxpdmVyJ1xuICBleHBvcnQgdHlwZSBNakRlZHVwbGljYXRlQ2FtcGFpZ24gPSAwIHwgMTtcbiAgZXhwb3J0IHR5cGUgTWpUcmFja09wZW4gPSAwIHwgMSB8IDI7XG5cbiAgZXhwb3J0IGludGVyZmFjZSBSZWNpcGllbnQge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTmFtZT86IHN0cmluZ1xuICAgIFZhcnM/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnQge1xuICAgIEZpbGVuYW1lOiBzdHJpbmc7XG4gICAgQ29udGVudDogc3RyaW5nO1xuICAgICdDb250ZW50LXR5cGUnOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBCb2R5TWogPSB7XG4gICAgJ01qLVRlbXBsYXRlSUQnPzogbnVtYmVyO1xuICAgICdNai1UZW1wbGF0ZUxhbmd1YWdlJz86IGJvb2xlYW47XG4gICAgJ01qLVRlbXBsYXRlRXJyb3JSZXBvcnRpbmcnPzogc3RyaW5nO1xuICAgICdNai1UZW1wbGF0ZUVycm9yRGVsaXZlcic/OiBNalRlbXBsYXRlRXJyb3JEZWxpdmVyO1xuICAgICdNai1wcmlvJz86IG51bWJlcjtcbiAgICAnTWotY2FtcGFpZ24nPzogc3RyaW5nO1xuICAgICdNai1kZWR1cGxpY2F0ZWNhbXBhaWduJz86IE1qRGVkdXBsaWNhdGVDYW1wYWlnbjtcbiAgICAnTWotdHJhY2tvcGVuJz86IE1qVHJhY2tPcGVuO1xuICAgICdNai1DdXN0b21JRCc/OiBzdHJpbmc7XG4gICAgJ01qLUV2ZW50UGF5bG9hZCc/OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgQm9keTxcbiAgICBIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWMsXG4gICAgVmFycyA9IENvbW1vbi5Vbmtub3duUmVjXG4gICAgPiA9IEJvZHlNaiAmIHtcbiAgICBGcm9tRW1haWw/OiBzdHJpbmc7XG4gICAgRnJvbU5hbWU/OiBzdHJpbmc7XG4gICAgUmVjaXBpZW50cz86IFJlY2lwaWVudFtdO1xuICAgIFNlbmRlcj86IGJvb2xlYW47XG4gICAgU3ViamVjdD86IHN0cmluZztcbiAgICAnVGV4dC1wYXJ0Jz86IHN0cmluZztcbiAgICAnSHRtbC1wYXJ0Jz86IHN0cmluZztcbiAgICBUbz86IHN0cmluZztcbiAgICBDYz86IHN0cmluZztcbiAgICBCY2M/OiBzdHJpbmc7XG4gICAgQXR0YWNobWVudHM/OiBBdHRhY2htZW50W107XG4gICAgSW5saW5lX2F0dGFjaG1lbnRzPzogQXR0YWNobWVudFtdO1xuICAgIEhlYWRlcnM/OiBIZWFkZXJzO1xuICAgIFZhcnM/OiBWYXJzO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICBleHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlU2VudCB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBNZXNzYWdlSUQ6IG51bWJlcjtcbiAgICBNZXNzYWdlVVVJRDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUmVzcG9uc2UgPSB7XG4gICAgU2VudDogUmVzcG9uc2VTZW50W107XG4gIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBTZW5kRW1haWxWM18xIHtcbiAgZXhwb3J0IGVudW0gVHJhY2tPcGVucyB7XG4gICAgQWNjb3VudERlZmF1bHQgPSAnYWNjb3VudF9kZWZhdWx0JyxcbiAgICBEaXNhYmxlZCA9ICdkaXNhYmxlZCcsXG4gICAgRW5hYmxlZCA9ICdlbmFibGVkJyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFRyYWNrQ2xpY2tzIHtcbiAgICBBY2NvdW50RGVmYXVsdCA9ICdhY2NvdW50X2RlZmF1bHQnLFxuICAgIERpc2FibGVkID0gJ2Rpc2FibGVkJyxcbiAgICBFbmFibGVkID0gJ2VuYWJsZWQnLFxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBFbWFpbEFkZHJlc3NUbyB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBOYW1lPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50IHtcbiAgICBGaWxlbmFtZTogc3RyaW5nO1xuICAgIENvbnRlbnRUeXBlOiBzdHJpbmc7XG4gICAgQmFzZTY0Q29udGVudDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBJbmxpbmVkQXR0YWNobWVudCBleHRlbmRzIEF0dGFjaG1lbnQge1xuICAgIENvbnRlbnRJRD86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZTxIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWMsIFZhcmlhYmxlcyA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgRnJvbTogRW1haWxBZGRyZXNzVG87XG4gICAgU2VuZGVyPzogRW1haWxBZGRyZXNzVG87XG4gICAgVG86IEVtYWlsQWRkcmVzc1RvW107XG4gICAgQ2M/OiBFbWFpbEFkZHJlc3NUb1tdO1xuICAgIEJjYz86IEVtYWlsQWRkcmVzc1RvW107XG4gICAgUmVwbHlUbz86IEVtYWlsQWRkcmVzc1RvO1xuICAgIFN1YmplY3Q/OiBzdHJpbmc7XG4gICAgVGV4dFBhcnQ/OiBzdHJpbmc7XG4gICAgSFRNTFBhcnQ/OiBzdHJpbmc7XG4gICAgVGVtcGxhdGVJRD86IG51bWJlcjtcbiAgICBUZW1wbGF0ZUxhbmd1YWdlPzogYm9vbGVhbjtcbiAgICBUZW1wbGF0ZUVycm9yUmVwb3J0aW5nPzogRW1haWxBZGRyZXNzVG87XG4gICAgVGVtcGxhdGVFcnJvckRlbGl2ZXI/OiBib29sZWFuO1xuICAgIEF0dGFjaG1lbnRzPzogQXR0YWNobWVudFtdO1xuICAgIElubGluZWRBdHRhY2htZW50cz86IElubGluZWRBdHRhY2htZW50W107XG4gICAgUHJpb3JpdHk/OiBudW1iZXI7XG4gICAgQ3VzdG9tQ2FtcGFpZ24/OiBzdHJpbmc7XG4gICAgRGVkdXBsaWNhdGVDYW1wYWlnbj86IGJvb2xlYW47XG4gICAgVHJhY2tPcGVucz86IFRyYWNrT3BlbnM7XG4gICAgVHJhY2tDbGlja3M/OiBUcmFja0NsaWNrcztcbiAgICBDdXN0b21JRD86IHN0cmluZztcbiAgICBFdmVudFBheWxvYWQ/OiBzdHJpbmc7XG4gICAgVVJMVGFncz86IHN0cmluZztcbiAgICBIZWFkZXJzPzogSGVhZGVycztcbiAgICBWYXJpYWJsZXM/OiBWYXJpYWJsZXM7XG4gIH1cblxuICBleHBvcnQgZW51bSBSZXNwb25zZVN0YXR1cyB7XG4gICAgU3VjY2VzcyA9ICdzdWNjZXNzJyxcbiAgICBFcnJvciA9ICdlcnJvcicsXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlRXJyb3Ige1xuICAgIEVycm9ySWRlbnRpZmllcjogc3RyaW5nO1xuICAgIEVycm9yQ29kZTogc3RyaW5nO1xuICAgIFN0YXR1c0NvZGU6IG51bWJlcjtcbiAgICBFcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgICBFcnJvclJlbGF0ZWRUbzogQXJyYXk8c3RyaW5nPjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VFbWFpbEFkZHJlc3NUbyB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBNZXNzYWdlVVVJRDogc3RyaW5nO1xuICAgIE1lc3NhZ2VJRDogbnVtYmVyO1xuICAgIE1lc3NhZ2VIcmVmOiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgQm9keTxcbiAgICBIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWMsXG4gICAgVmFyaWFibGVzID0gQ29tbW9uLlVua25vd25SZWMsXG4gICAgR2xvYmFscyA9IENvbW1vbi5Vbmtub3duUmVjLFxuICAgID4gPSB7XG4gICAgTWVzc2FnZXM6IEFycmF5PE1lc3NhZ2U8SGVhZGVycywgVmFyaWFibGVzPj47XG4gICAgU2FuZGJveE1vZGU/OiBib29sZWFuO1xuICAgIEFkdmFuY2VFcnJvckhhbmRsaW5nPzogYm9vbGVhbjtcbiAgICBHbG9iYWxzPzogR2xvYmFscztcbiAgfSB8IHtcbiAgICBNZXNzYWdlczogQXJyYXk8T21pdDxNZXNzYWdlPEhlYWRlcnMsIFZhcmlhYmxlcz4sICdGcm9tJz4gJiB7IEZyb20/OiBzdHJpbmcgfT47XG4gICAgU2FuZGJveE1vZGU/OiBib29sZWFuO1xuICAgIEFkdmFuY2VFcnJvckhhbmRsaW5nPzogYm9vbGVhbjtcbiAgICBHbG9iYWxzOiB7XG4gICAgICBGcm9tOiBFbWFpbEFkZHJlc3NUbztcbiAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZU1lc3NhZ2Uge1xuICAgIFN0YXR1czogUmVzcG9uc2VTdGF0dXM7XG4gICAgRXJyb3JzOiBSZXNwb25zZUVycm9yW107XG4gICAgQ3VzdG9tSUQ6IHN0cmluZztcbiAgICBUbzogUmVzcG9uc2VFbWFpbEFkZHJlc3NUb1tdO1xuICAgIENjOiBSZXNwb25zZUVtYWlsQWRkcmVzc1RvW107XG4gICAgQmNjOiBSZXNwb25zZUVtYWlsQWRkcmVzc1RvW107XG4gIH1cblxuICBleHBvcnQgdHlwZSBSZXNwb25zZSA9IHtcbiAgICBNZXNzYWdlczogUmVzcG9uc2VNZXNzYWdlW107XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBTZW5kZXIge1xuICBleHBvcnQgZW51bSBFbWFpbFR5cGUge1xuICAgIFRyYW5zYWN0aW9uYWwgPSAndHJhbnNhY3Rpb25hbCcsXG4gICAgQnVsayA9ICdidWxrJyxcbiAgICBVbmtub3duID0gJ3Vua25vd24nXG4gIH1cblxuICBleHBvcnQgZW51bSBTZW5kZXJTdGF0dXMge1xuICAgIEluYWN0aXZlID0gJ0luYWN0aXZlJyxcbiAgICBBY3RpdmUgPSAnQWN0aXZlJyxcbiAgICBEZWxldGVkID0gJ0RlbGV0ZWQnLFxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBTZW5kZXIge1xuICAgIElEOiBudW1iZXI7XG4gICAgRW1haWxUeXBlOiBFbWFpbFR5cGU7XG4gICAgSXNEZWZhdWx0U2VuZGVyOiBib29sZWFuO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBETlNJRDogbnVtYmVyO1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgRmlsZW5hbWU6IHN0cmluZztcbiAgICBTdGF0dXM6IFNlbmRlclN0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgU2VuZGVyVmFsaWRhdGUge1xuICAgIFZhbGlkYXRpb25NZXRob2Q6IHN0cmluZztcbiAgICBFcnJvcnM6IHN0cmluZztcbiAgICBHbG9iYWxFcnJvcjogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RTZW5kZXJCb2R5ID0ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgRW1haWxUeXBlPzogRW1haWxUeXBlO1xuICAgIElzRGVmYXVsdFNlbmRlcj86IGJvb2xlYW47XG4gICAgTmFtZT86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dFNlbmRlckJvZHkgPSBPbWl0PFBvc3RTZW5kZXJCb2R5LCAnRW1haWwnPlxuXG4gIGV4cG9ydCB0eXBlIEdldFNlbmRlclF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgRG5zSUQ/OiBudW1iZXI7XG4gICAgRG9tYWluPzogc3RyaW5nO1xuICAgIEVtYWlsPzogc3RyaW5nO1xuICAgIElzRG9tYWluU2VuZGVyPzogYm9vbGVhbjtcbiAgICBMb2NhbFBhcnQ/OiBzdHJpbmc7XG4gICAgU2hvd0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIFN0YXR1cz86IFNlbmRlclN0YXR1cztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBTZW5kZXJSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxTZW5kZXJbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdFNlbmRlclJlc3BvbnNlID0gU2VuZGVyUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0U2VuZGVyUmVzcG9uc2UgPSBTZW5kZXJSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRTZW5kZXJSZXNwb25zZSA9IFNlbmRlclJlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgUG9zdFNlbmRlclZhbGlkYXRlUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8U2VuZGVyVmFsaWRhdGVbXT47XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgTWV0YXNlbmRlciB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgTWV0YVNlbmRlciB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBEZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgRmlsZW5hbWU6IHN0cmluZztcbiAgICBJc0VuYWJsZWQ6IGJvb2xlYW47XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdE1ldGFTZW5kZXJCb2R5ID0ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRNZXRhU2VuZGVyQm9keSA9IE9taXQ8UG9zdE1ldGFTZW5kZXJCb2R5LCAnRW1haWwnPlxuXG4gIGV4cG9ydCB0eXBlIEdldE1ldGFTZW5kZXJRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEROUz86IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBNZXRhU2VuZGVyUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TWV0YVNlbmRlcltdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0TWV0YVNlbmRlclJlc3BvbnNlID0gTWV0YVNlbmRlclJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dE1ldGFTZW5kZXJSZXNwb25zZSA9IE1ldGFTZW5kZXJSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRNZXRhU2VuZGVyUmVzcG9uc2UgPSBNZXRhU2VuZGVyUmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBETlMge1xuICBleHBvcnQgZW51bSBES0lNQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzIHtcbiAgICBPSyA9ICdPSycsXG4gICAgRXJyb3IgPSAnRXJyb3InLFxuICAgIE5vdENoZWNrZWQgPSAnTm90IGNoZWNrZWQnXG4gIH1cblxuICBleHBvcnQgZW51bSBES0lNQ29uZmlndXJhdGlvblN0YXR1cyB7XG4gICAgT0sgPSAnT0snLFxuICAgIEVycm9yID0gJ0Vycm9yJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gU1BGQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzIHtcbiAgICBPSyA9ICdPSycsXG4gICAgRXJyb3IgPSAnRXJyb3InLFxuICAgIE5vdENoZWNrZWQgPSAnTm90IGNoZWNrZWQnLFxuICAgIE5vdEZvdW5kID0gJ05vdCBmb3VuZCcsXG4gIH1cblxuICBleHBvcnQgZW51bSBTUEZDb25maWd1cmF0aW9uU3RhdHVzIHtcbiAgICBPSyA9ICdPSycsXG4gICAgRXJyb3IgPSAnRXJyb3InXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEROUyB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBES0lNUmVjb3JkTmFtZTogc3RyaW5nO1xuICAgIERLSU1SZWNvcmRWYWx1ZTogc3RyaW5nO1xuICAgIERLSU1TdGF0dXM6IERLSU1Db25maWd1cmF0aW9uQ2hlY2tTdGF0dXM7XG4gICAgRG9tYWluOiBzdHJpbmc7XG4gICAgSXNDaGVja0luUHJvZ3Jlc3M6IGJvb2xlYW47XG4gICAgTGFzdENoZWNrQXQ6IHN0cmluZztcbiAgICBPd25lclNoaXBUb2tlbjogc3RyaW5nO1xuICAgIE93bmVyU2hpcFRva2VuUmVjb3JkTmFtZTogc3RyaW5nO1xuICAgIFNQRlJlY29yZFZhbHVlOiBzdHJpbmc7XG4gICAgU1BGU3RhdHVzOiBTUEZDb25maWd1cmF0aW9uQ2hlY2tTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEROU0NoZWNrIHtcbiAgICBES0lNRXJyb3JzOiBzdHJpbmc7XG4gICAgREtJTVJlY29yZEN1cnJlbnRWYWx1ZTogc3RyaW5nO1xuICAgIERLSU1TdGF0dXM6IERLSU1Db25maWd1cmF0aW9uU3RhdHVzO1xuICAgIFNQRkVycm9yczogc3RyaW5nO1xuICAgIFNQRlJlY29yZEN1cnJlbnRWYWx1ZTogc3RyaW5nO1xuICAgIFNQRlN0YXR1czogU1BGQ29uZmlndXJhdGlvblN0YXR1cztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBHZXRETlNRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIElzQ2hlY2tJblByb2dyZXNzPzogYm9vbGVhbjtcbiAgICBJc1NlbmRlcklkZW50aWZpZWQ/OiBib29sZWFuO1xuICAgIElzWWFob29GQkw/OiBib29sZWFuO1xuICAgIE1heExhc3RDaGVja0F0Pzogc3RyaW5nO1xuICAgIE1pbkxhc3RDaGVja0F0Pzogc3RyaW5nO1xuICAgIFNQRlN0YXR1cz86IFNQRkNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0RE5TUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8RE5TW10+O1xuICBleHBvcnQgdHlwZSBQb3N0RE5TQ2hlY2tSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxETlNDaGVja1tdPjtcbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBBUElLZXlDb25maWd1cmF0aW9uIHtcbiAgZXhwb3J0IGVudW0gUnVuTGV2ZWwge1xuICAgIE5vcm1hbCA9ICdOb3JtYWwnLFxuICAgIFNvZnRMb2NrID0gJ1NvZnRsb2NrJyxcbiAgICBIYXJkTG9jayA9ICdIYXJkbG9jaydcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXBpS2V5IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEFDTDogc3RyaW5nO1xuICAgIElzQWN0aXZlOiBib29sZWFuO1xuICAgIEFQSUtleTogc3RyaW5nO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIElzTWFzdGVyOiBib29sZWFuO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBRdWFyYW50aW5lVmFsdWU6IG51bWJlcjtcbiAgICBSdW5sZXZlbDogUnVuTGV2ZWw7XG4gICAgU2VjcmV0S2V5OiBzdHJpbmc7XG4gICAgVHJhY2tIb3N0OiBzdHJpbmc7XG4gICAgVXNlcklEOiBudW1iZXI7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdEFwaUtleUJvZHkgPSB7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIEFDTD86IHN0cmluZztcbiAgICBJc0FjdGl2ZT86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRBcGlLZXlCb2R5ID0gUGFydGlhbDxQb3N0QXBpS2V5Qm9keT5cblxuICBleHBvcnQgdHlwZSBHZXRBcGlLZXlRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEFQSUtleT86IHN0cmluZztcbiAgICBJc0FjdGl2ZT86IGJvb2xlYW47XG4gICAgSXNNYXN0ZXI/OiBib29sZWFuO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQXBpS2V5UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8QXBpS2V5W10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RBcGlLZXlSZXNwb25zZSA9IEFwaUtleVJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dEFwaUtleVJlc3BvbnNlID0gQXBpS2V5UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0QXBpS2V5UmVzcG9uc2UgPUFwaUtleVJlc3BvbnNlXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQWNjb3VudFNldHRpbmcge1xuICBleHBvcnQgaW50ZXJmYWNlIE15UHJvZmlsZSB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBBZGRyZXNzQ2l0eTogc3RyaW5nO1xuICAgIEFkZHJlc3NDb3VudHJ5OiBzdHJpbmc7XG4gICAgQWRkcmVzc1Bvc3RhbENvZGU6IHN0cmluZztcbiAgICBBZGRyZXNzU3RhdGU6IHN0cmluZztcbiAgICBBZGRyZXNzU3RyZWV0OiBzdHJpbmc7XG4gICAgQmlsbGluZ0VtYWlsOiBzdHJpbmc7XG4gICAgQmlydGhkYXlBdDogc3RyaW5nO1xuICAgIENvbXBhbnlOYW1lOiBzdHJpbmc7XG4gICAgQ29tcGFueU51bU9mRW1wbG95ZWVzOiBzdHJpbmc7XG4gICAgQ29udGFjdFBob25lOiBzdHJpbmc7XG4gICAgRXN0aW1hdGVkVm9sdW1lOiBudW1iZXI7XG4gICAgRmVhdHVyZXM6IHN0cmluZztcbiAgICBGaXJzdG5hbWU6IHN0cmluZztcbiAgICBJbmR1c3RyeTogbnVtYmVyO1xuICAgIEpvYlRpdGxlOiBzdHJpbmc7XG4gICAgTGFzdG5hbWU6IHN0cmluZztcbiAgICBWQVROdW1iZXI6IHN0cmluZztcbiAgICBXZWJzaXRlOiBzdHJpbmc7XG4gICAgVkFUOiBudW1iZXI7XG4gICAgVXNlcklEOiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFVzZXIge1xuICAgIElEOiBudW1iZXI7XG4gICAgQUNMOiBzdHJpbmc7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBMYXN0TG9naW5BdDogc3RyaW5nO1xuICAgIExvY2FsZTogc3RyaW5nO1xuICAgIFRpbWV6b25lOiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgRmlyc3RJcDogc3RyaW5nO1xuICAgIExhc3RJcDogc3RyaW5nO1xuICAgIE1heEFsbG93ZWRBUElLZXlzOiBudW1iZXI7XG4gICAgVXNlcm5hbWU6IHN0cmluZztcbiAgICBXYXJuZWRSYXRlbGltaXRBdDogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFB1dE15UHJvZmlsZUJvZHkgPSBQYXJ0aWFsPE9taXQ8TXlQcm9maWxlLCAnSUQnIHwgJ1ZBVCcgfCAnVXNlcklEJz4+XG5cbiAgZXhwb3J0IHR5cGUgUHV0VXNlckJvZHkgPVxuICAgIFBhcnRpYWw8T21pdDxVc2VyLCAnSUQnIHwgJ0NyZWF0ZWRBdCcgfCAnRmlyc3RJcCcgfCAnTWF4QWxsb3dlZEFQSUtleXMnIHwgJ1dhcm5lZFJhdGVsaW1pdEF0Jz4+XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIE15UHJvZmlsZVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPE15UHJvZmlsZVtdPjtcbiAgdHlwZSBVc2VyUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8VXNlcltdPjtcblxuICBleHBvcnQgdHlwZSBQdXRNeVByb2ZpbGVSZXNwb25zZSA9IE15UHJvZmlsZVJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldE15UHJvZmlsZVJlc3BvbnNlID0gTXlQcm9maWxlUmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBQdXRVc2VyUmVzcG9uc2UgPSBVc2VyUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0VXNlclJlc3BvbnNlID0gVXNlclJlc3BvbnNlXG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnLi9NZXNzYWdlJztcblxuZXhwb3J0IG5hbWVzcGFjZSBTdGF0aXN0aWMge1xuICBleHBvcnQgZW51bSBDYW1wYWlnbk92ZXJ2aWV3SURUeXBlIHtcbiAgICBTZW50Q2FtcGFpZ24gPSAnQ2FtcGFpZ24nLFxuICAgIEFCVGVzdGluZyA9ICdBWCcsXG4gICAgRHJhZnQgPSAnTkwnXG4gIH1cblxuICBleHBvcnQgZW51bSBDYW1wYWlnbk92ZXJ2aWV3RWRpdE1vZGUge1xuICAgIFRvb2wgPSAndG9vbCcsXG4gICAgSFRNTCA9ICdodG1sJyxcbiAgICBUb29sMiA9ICd0b29sMicsXG4gICAgSFRNTDIgPSAnaHRtbDInLFxuICAgIE1KTUwgPSAnbWptbCcsXG4gIH1cblxuICBleHBvcnQgZW51bSBDYW1wYWlnbk92ZXJ2aWV3RWRpdFR5cGUge1xuICAgIEZ1bGwgPSAnZnVsbCcsXG4gICAgVW5rbm93biA9ICd1bmtub3duJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ291bnRlclNvdXJjZSB7XG4gICAgQ2FtcGFpZ24gPSAnQ2FtcGFpZ24nLFxuICAgIEFQSUtleSA9ICdBUElLZXknLFxuICAgIExpc3QgPSAnTGlzdCcsXG4gICAgU2VuZGVyID0gJ1NlbmRlcidcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENvdW50ZXJSZXNvbHV0aW9uIHtcbiAgICBIaWdoZXN0ID0gJ0hpZ2hlc3QnLFxuICAgIEhvdXIgPSAnSG91cicsXG4gICAgRGF5ID0gJ0RheScsXG4gICAgTGlmZXRpbWUgPSAnTGlmZXRpbWUnXG4gIH1cblxuICBleHBvcnQgZW51bSBDb3VudGVyVGltaW5nIHtcbiAgICBNZXNzYWdlID0gJ01lc3NhZ2UnLFxuICAgIEV2ZW50ID0gJ0V2ZW50J1xuICB9XG5cbiAgZXhwb3J0IGVudW0gRW1haWxFdmVudCB7XG4gICAgT3BlbiA9ICdvcGVuJyxcbiAgICBDbGljayA9ICdjbGljaydcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ2FtcGFpZ25PdmVydmlldyB7XG4gICAgQ2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgRGVsaXZlcmVkQ291bnQ6IG51bWJlcjtcbiAgICBFZGl0TW9kZTogQ2FtcGFpZ25PdmVydmlld0VkaXRNb2RlO1xuICAgIEVkaXRUeXBlOiBDYW1wYWlnbk92ZXJ2aWV3RWRpdFR5cGU7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBJRFR5cGU6IENhbXBhaWduT3ZlcnZpZXdJRFR5cGU7XG4gICAgT3BlbmVkQ291bnQ6IG51bWJlcjtcbiAgICBQcm9jZXNzZWRDb3VudDogbnVtYmVyO1xuICAgIFNlbmRUaW1lU3RhcnQ6IG51bWJlcjtcbiAgICBTdGFycmVkOiBib29sZWFuO1xuICAgIFN1YmplY3Q6IHN0cmluZztcbiAgICBUaXRsZTogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0U3RhdGlzdGljIHtcbiAgICBCbG9ja2VkQ291bnQ6IG51bWJlcjtcbiAgICBCb3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBEZWZlcnJlZENvdW50OiBudW1iZXI7XG4gICAgRGVsaXZlcmVkQ291bnQ6IG51bWJlcjtcbiAgICBIYXJkYm91bmNlZENvdW50OiBudW1iZXI7XG4gICAgTGFzdEFjdGl2aXR5QXQ6IHN0cmluZztcbiAgICBNYXJrZXRpbmdDb250YWN0czogbnVtYmVyO1xuICAgIE9wZW5lZENvdW50OiBudW1iZXI7XG4gICAgUHJvY2Vzc2VkQ291bnQ6IG51bWJlcjtcbiAgICBRdWV1ZWRDb3VudDogbnVtYmVyO1xuICAgIFNvZnRib3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBTcGFtQ29tcGxhaW50Q291bnQ6IG51bWJlcjtcbiAgICBVbnN1YnNjcmliZWRDb3VudDogbnVtYmVyO1xuICAgIFVzZXJNYXJrZXRpbmdDb250YWN0czogbnVtYmVyO1xuICAgIFdvcmtGbG93RXhpdGVkQ291bnQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgR0VPU3RhdGlzdGljIHtcbiAgICBDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBPcGVuZWRDb3VudDogbnVtYmVyO1xuICAgIENvdW50cnk6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTGlzdFJlY2lwaWVudFN0YXRpc3RpYzxEYXRhID0gQXJyYXk8dW5rbm93bj4+IHtcbiAgICBCbG9ja2VkQ291bnQ6IG51bWJlcjtcbiAgICBCb3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBEYXRhOiBEYXRhO1xuICAgIERlZmVycmVkQ291bnQ6IG51bWJlcjtcbiAgICBEZWxpdmVyZWRDb3VudDogbnVtYmVyO1xuICAgIEhhcmRib3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBMYXN0QWN0aXZpdHlBdDogc3RyaW5nO1xuICAgIExpc3RSZWNpcGllbnRJRDogbnVtYmVyO1xuICAgIE9wZW5lZENvdW50OiBudW1iZXI7XG4gICAgUHJlUXVldWVkQ291bnQ6IG51bWJlcjtcbiAgICBQcm9jZXNzZWRDb3VudDogbnVtYmVyO1xuICAgIFF1ZXVlZENvdW50OiBudW1iZXI7XG4gICAgU29mdGJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIFNwYW1Db21wbGFpbnRDb3VudDogbnVtYmVyO1xuICAgIFVuc3Vic2NyaWJlZENvdW50OiBudW1iZXI7XG4gICAgV29ya0Zsb3dFeGl0ZWRDb3VudDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBTdGF0Q291bnRlciB7XG4gICAgQVBJS2V5SUQ6IG51bWJlcjtcbiAgICBFdmVudENsaWNrRGVsYXk6IG51bWJlcjtcbiAgICBFdmVudENsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIEV2ZW50T3BlbkRlbGF5OiBudW1iZXI7XG4gICAgRXZlbnRPcGVuZWRDb3VudDogbnVtYmVyO1xuICAgIEV2ZW50U3BhbUNvdW50OiBudW1iZXI7XG4gICAgRXZlbnRVbnN1YnNjcmliZWRDb3VudDogbnVtYmVyO1xuICAgIEV2ZW50V29ya2Zsb3dFeGl0ZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VCbG9ja2VkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlQ2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZURlZmVycmVkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlSGFyZEJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VPcGVuZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VRdWV1ZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VTZW50Q291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlU29mdEJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VTcGFtQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlVW5zdWJzY3JpYmVkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlV29ya0Zsb3dFeGl0ZWRDb3VudDogbnVtYmVyO1xuICAgIFNvdXJjZUlEOiBudW1iZXI7XG4gICAgVGltZXNsaWNlOiBzdHJpbmc7XG4gICAgVG90YWw6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTGlua0NsaWNrU3RhdGlzdGljIHtcbiAgICBDbGlja2VkRXZlbnRzQ291bnQ6IG51bWJlcjtcbiAgICBDbGlja2VkTWVzc2FnZXNDb3VudDogbnVtYmVyO1xuICAgIFBvc2l0aW9uSW5kZXg6IG51bWJlcjtcbiAgICBVUkw6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVjaXBpZW50RVNQU3RhdGlzdGljIHtcbiAgICBBdHRlbXB0ZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIENsaWNrZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIERlZmVycmVkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBEZWxpdmVyZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIEhhcmRCb3VuY2VkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBFU1BOYW1lPzogc3RyaW5nO1xuICAgIE9wZW5lZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgU29mdEJvdW5jZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIFNwYW1SZXBvcnRzQ291bnQ/OiBudW1iZXI7XG4gICAgVW5zdWJzY3JpYmVkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBPcGVuUmF0ZT86IG51bWJlcjtcbiAgICBDbGlja1Rocm91Z2hSYXRlPzogbnVtYmVyO1xuICAgIFNvZnRCb3VuY2VkUmF0ZT86IG51bWJlcjtcbiAgICBIYXJkQm91bmNlZFJhdGU/OiBudW1iZXI7XG4gICAgVW5zdWJzY3JpYmVkUmF0ZT86IG51bWJlcjtcbiAgICBTcGFtUmVwb3J0c1JhdGU/OiBudW1iZXI7XG4gICAgRGVmZXJyZWRSYXRlPzogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBUb3BMaW5rQ2xpY2tlZCB7XG4gICAgQ2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgTGlua0lkOiBudW1iZXI7XG4gICAgVXJsOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFVzZXJBZ2VudFN0YXRpc3RpYyB7XG4gICAgQ291bnQ6IG51bWJlcjtcbiAgICBEaXN0aW5jdENvdW50OiBudW1iZXI7XG4gICAgUGxhdGZvcm06IHN0cmluZztcbiAgICBVc2VyQWdlbnQ6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbk92ZXJ2aWV3UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBBbGw/OiBib29sZWFuO1xuICAgIEFyY2hpdmVkPzogYm9vbGVhbjtcbiAgICBEcmFmdHM/OiBib29sZWFuO1xuICAgIElEPzogbnVtYmVyO1xuICAgIElEVHlwZT86IENhbXBhaWduT3ZlcnZpZXdJRFR5cGU7XG4gICAgUHJvZ3JhbW1lZD86IGJvb2xlYW47XG4gICAgU2VudD86IGJvb2xlYW47XG4gICAgU3RhcnJlZD86IGJvb2xlYW47XG4gICAgU3ViamVjdD86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RTdGF0aXN0aWNzUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBCbG9ja2VkPzogYm9vbGVhbjtcbiAgICBCb3VuY2VkPzogYm9vbGVhbjtcbiAgICBDbGljaz86IGJvb2xlYW47XG4gICAgRGVmZXJyZWQ/OiBib29sZWFuO1xuICAgIEhhcmRib3VuY2VkPzogYm9vbGVhbjtcbiAgICBMYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgICBNYXhMYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgICBNaW5MYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgICBPcGVuPzogYm9vbGVhbjtcbiAgICBRdWV1ZWQ/OiBib29sZWFuO1xuICAgIFNlbnQ/OiBib29sZWFuO1xuICAgIFNwYW0/OiBib29sZWFuO1xuICAgIFNvZnRib3VuY2VkPzogYm9vbGVhbjtcbiAgICBVbnN1YnNjcmliZWQ/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0R0VPU3RhdGlzdGljc1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uVGltZXN0YW1wUGVyaW9kPiAmXG4gICAgUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJlxuICB7XG4gICAgQ2FtcGFpZ25JRD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgQ3VzdG9tQ2FtcGFpZ24/OiBzdHJpbmc7XG4gICAgRnJvbT86IHN0cmluZztcbiAgICBGcm9tRG9tYWluPzogc3RyaW5nO1xuICAgIEZyb21JRD86IG51bWJlcjtcbiAgICBGcm9tVHlwZT86IE1lc3NhZ2UuRnJvbVR5cGU7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc05ld3NsZXR0ZXJUb29sPzogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICAgIE1lc3NhZ2VTdGF0dXM/OiBNZXNzYWdlLk1lc3NhZ2VTdGF0dXM7XG4gICAgUGVyaW9kPzogQ29tbW9uLlBlcmlvZDtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldExpc3RSZWNpcGllbnRTdGF0aXN0aWNzUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBCbG9ja2VkPzogYm9vbGVhbjtcbiAgICBCb3VuY2VkPzogYm9vbGVhbjtcbiAgICBDbGljaz86IGJvb2xlYW47XG4gICAgQ29udGFjdD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgSXNFeGNsdWRlZEZyb21DYW1wYWlnbnM/OiBib29sZWFuO1xuICAgIElzVW5zdWJzY3JpYmVkPzogYm9vbGVhbjtcbiAgICBMYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgICBNYXhMYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgICBNaW5MYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgICBNYXhVbnN1YnNjcmliZWRBdD86IHN0cmluZztcbiAgICBNaW5VbnN1YnNjcmliZWRBdD86IHN0cmluZztcbiAgICBPcGVuPzogYm9vbGVhbjtcbiAgICBRdWV1ZWQ/OiBib29sZWFuO1xuICAgIFNlbnQ/OiBib29sZWFuO1xuICAgIFNob3dFeHRyYURhdGE/OiBib29sZWFuO1xuICAgIFNwYW0/OiBib29sZWFuO1xuICAgIFRpbWVab25lPzogc3RyaW5nO1xuICAgIFVuc3Vic2NyaWJlZD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRTdGF0Q291bnRlcnNRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENvdW50ZXJTb3VyY2U6IENvdW50ZXJTb3VyY2U7XG4gICAgQ291bnRlclJlc29sdXRpb246IENvdW50ZXJSZXNvbHV0aW9uO1xuICAgIENvdW50ZXJUaW1pbmc6IENvdW50ZXJUaW1pbmc7XG4gICAgU291cmNlSUQ/OiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRMaW5rQ2xpY2tTdGF0aXN0aWNzUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBDYW1wYWlnbklEOiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRSZWNpcGllbnRFU1BTdGF0aXN0aWNzUXVlcnlQYXJhbXMgPSBHZXRMaW5rQ2xpY2tTdGF0aXN0aWNzUXVlcnlQYXJhbXMgJlxuICB7XG4gICAgRVNQX05hbWU/OiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRUb3BMaW5rQ2xpY2tlZFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uVGltZXN0YW1wUGVyaW9kPiAmXG4gICAgUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJlxuICB7XG4gICAgQWN0dWFsQ2xpY2tzPzogYm9vbGVhbjtcbiAgICBDYW1wYWlnbklEPzogbnVtYmVyO1xuICAgIENvbnRhY3Q/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIEN1c3RvbUNhbXBhaWduPzogc3RyaW5nO1xuICAgIEZyb20/OiBzdHJpbmc7XG4gICAgRnJvbURvbWFpbj86IHN0cmluZztcbiAgICBGcm9tSUQ/OiBudW1iZXI7XG4gICAgRnJvbVR5cGU/OiBNZXNzYWdlLkZyb21UeXBlO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNOZXdzbGV0dGVyVG9vbD86IGJvb2xlYW47XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgICBNZXNzYWdlPzogbnVtYmVyO1xuICAgIFBlcmlvZD86IENvbW1vbi5QZXJpb2Q7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRVc2VyQWdlbnRTdGF0aXN0aWNzUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5UaW1lc3RhbXBQZXJpb2Q+ICZcbiAgICBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmXG4gIHtcbiAgICBDYW1wYWlnbklEPzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBDdXN0b21DYW1wYWlnbj86IHN0cmluZztcbiAgICBFdmVudD86IEVtYWlsRXZlbnQ7XG4gICAgRXhjbHVkZVBsYXRmb3JtPzogc3RyaW5nO1xuICAgIEZyb20/OiBzdHJpbmc7XG4gICAgRnJvbURvbWFpbj86IHN0cmluZztcbiAgICBGcm9tSUQ/OiBudW1iZXI7XG4gICAgRnJvbVR5cGU/OiBNZXNzYWdlLkZyb21UeXBlO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNOZXdzbGV0dGVyVG9vbD86IGJvb2xlYW47XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgICBQZXJpb2Q/OiBDb21tb24uUGVyaW9kO1xuICAgIFBsYXRmb3JtPzogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbk92ZXJ2aWV3UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q2FtcGFpZ25PdmVydmlld1tdPjtcblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0U3RhdGlzdGljc1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RTdGF0aXN0aWNbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0R0VPU3RhdGlzdGljc1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPEdFT1N0YXRpc3RpY1tdPjtcblxuICBleHBvcnQgdHlwZSBHZXRMaXN0UmVjaXBpZW50U3RhdGlzdGljc1Jlc3BvbnNlPERhdGEgPSBBcnJheTx1bmtub3duPj4gPVxuICAgIENvbW1vbi5SZXNwb25zZTxBcnJheTxMaXN0UmVjaXBpZW50U3RhdGlzdGljPERhdGE+Pj47XG5cbiAgZXhwb3J0IHR5cGUgR2V0U3RhdENvdW50ZXJzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8U3RhdENvdW50ZXJbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0TGlua0NsaWNrU3RhdGlzdGljc1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPExpbmtDbGlja1N0YXRpc3RpY1tdPjtcblxuICBleHBvcnQgdHlwZSBHZXRSZWNpcGllbnRFU1BTdGF0aXN0aWNzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8UmVjaXBpZW50RVNQU3RhdGlzdGljW10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldFRvcExpbmtDbGlja2VkUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8VG9wTGlua0NsaWNrZWRbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0VXNlckFnZW50U3RhdGlzdGljc1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFVzZXJBZ2VudFN0YXRpc3RpY1tdPjtcbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBUZW1wbGF0ZSB7XG4gIGV4cG9ydCBlbnVtIENhdGVnb3JpZXMge1xuICAgIEZ1bGwgPSAnZnVsbCcsXG4gICAgQmFzaWMgPSAnYmFzaWMnLFxuICAgIE5ld3NMZXR0ZXIgPSAnbmV3c2xldHRlcicsXG4gICAgRUNvbW1lcmNlID0gJ2UtY29tbWVyY2UnLFxuICAgIEV2ZW50cyA9ICdldmVudHMnLFxuICAgIFRyYXZlbCA9ICd0cmF2ZWwnLFxuICAgIFNwb3J0cyA9ICdzcG9ydHMnLFxuICAgIFdlbGNvbWUgPSAnd2VsY29tZScsXG4gICAgQ29udGFjdFByb3BlcnR5VXBkYXRlID0gJ2NvbnRhY3QtcHJvcGVydHktdXBkYXRlJyxcbiAgICBTdXBwb3J0ID0gJ3N1cHBvcnQnLFxuICAgIEludm9pY2UgPSAnaW52b2ljZScsXG4gICAgQW5uaXZlcnNhcnkgPSAnYW5uaXZlcnNhcnknLFxuICAgIEFjY291bnQgPSAnYWNjb3VudCcsXG4gICAgQWN0aXZhdGlvbiA9ICdhY3RpdmF0aW9uJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ2F0ZWdvcmllc1NlbGVjdGlvbk1ldGhvZCB7XG4gICAgQ29udGFpbnNBbnkgPSAnY29udGFpbnNhbnknLFxuICAgIENvbnRhaW5zQWxsID0gJ2NvbnRhaW5zYWxsJyxcbiAgICBJc1N1YlNldCA9ICdpc3N1YnNldCdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEVkaXRNb2RlIHtcbiAgICBEcmFnQW5kRHJvcEJ1aWxkZXIgPSAxLFxuICAgIEhUTUxCdWlsZGVyID0gMixcbiAgICBTYXZlZFNlY3Rpb25CdWlsZGVyID0gMyxcbiAgICBNSk1MQnVpbGRlciA9IDRcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIE93bmVyVHlwZSB7XG4gICAgQXBpS2V5ID0gJ2FwaWtleScsXG4gICAgVXNlciA9ICd1c2VyJyxcbiAgICBHbG9iYWwgPSAnZ2xvYmFsJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gUHVycG9zZXMge1xuICAgIE1hcmtldGluZyA9ICdtYXJrZXRpbmcnLFxuICAgIFRyYW5zYWN0aW9uYWwgPSAndHJhbnNhY3Rpb25hbCcsXG4gICAgQXV0b21hdGlvbiA9ICdhdXRvbWF0aW9uJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gUHVycG9zZXNTZWxlY3Rpb25NZXRob2Qge1xuICAgIENvbnRhaW5zQW55ID0gJ2NvbnRhaW5zYW55JyxcbiAgICBDb250YWluc0FsbCA9ICdjb250YWluc2FsbCcsXG4gICAgSXNTdWJTZXQgPSAnaXNzdWJzZXQnXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEhlYWRlcnMge1xuICAgIEZyb206IHN0cmluZztcbiAgICBTdWJqZWN0OiBzdHJpbmc7XG4gICAgJ1JlcGx5LXRvJzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZSB7XG4gICAgQXV0aG9yOiBzdHJpbmc7XG4gICAgQ2F0ZWdvcmllczogQ2F0ZWdvcmllcztcbiAgICBDb3B5cmlnaHQ6IHN0cmluZztcbiAgICBEZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIEVkaXRNb2RlOiBFZGl0TW9kZTtcbiAgICBJc1N0YXJyZWQ6IGJvb2xlYW47XG4gICAgSXNUZXh0UGFydEdlbmVyYXRpb25FbmFibGVkOiBib29sZWFuO1xuICAgIExvY2FsZTogc3RyaW5nO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBPd25lclR5cGU6IE93bmVyVHlwZTtcbiAgICBQcmVzZXRzOiBzdHJpbmc7XG4gICAgUHVycG9zZXM6IFB1cnBvc2VzO1xuICAgIElEOiBudW1iZXI7XG4gICAgT3duZXJJZDogbnVtYmVyO1xuICAgIFByZXZpZXdzOiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgTGFzdFVwZGF0ZWRBdDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgVGVtcGxhdGVEZXRhaWxDb250ZW50ID0ge1xuICAgIEhlYWRlcnM6IEhlYWRlcnM7XG4gICAgJ0h0bWwtcGFydCc6IHN0cmluZztcbiAgICAnVGV4dC1wYXJ0Jzogc3RyaW5nO1xuICAgIE1KTUxDb250ZW50OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdFRlbXBsYXRlQm9keSA9XG4gICAgUGFydGlhbDxPbWl0PFRlbXBsYXRlLCAnTmFtZScgfCAnSUQnIHwgJ093bmVySWQnIHwgJ1ByZXZpZXdzJyB8ICdDcmVhdGVkQXQnIHwgJ0xhc3RVcGRhdGVkQXQnPj4gJlxuICB7XG4gICAgTmFtZTogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0VGVtcGxhdGVCb2R5ID0gUGFydGlhbDxQb3N0VGVtcGxhdGVCb2R5PlxuXG4gIGV4cG9ydCB0eXBlIEdldFRlbXBsYXRlUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBDYXRlZ29yaWVzPzogc3RyaW5nO1xuICAgIENhdGVnb3JpZXNTZWxlY3Rpb25NZXRob2Q/OiBDYXRlZ29yaWVzU2VsZWN0aW9uTWV0aG9kO1xuICAgIEVkaXRNb2RlPzogRWRpdE1vZGU7XG4gICAgTmFtZT86IHN0cmluZztcbiAgICBPd25lclR5cGU/OiBPd25lclR5cGU7XG4gICAgUHVycG9zZXM/OiBQdXJwb3NlcztcbiAgICBQdXJwb3Nlc1NlbGVjdGlvbk1ldGhvZD86IFB1cnBvc2VzU2VsZWN0aW9uTWV0aG9kO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdFRlbXBsYXRlRGV0YWlsQ29udGVudEJvZHkgPVxuICAgIFBhcnRpYWw8T21pdDxUZW1wbGF0ZURldGFpbENvbnRlbnQsICdIZWFkZXJzJz4+ICZcbiAge1xuICAgIEhlYWRlcnM/OiBQYXJ0aWFsPEhlYWRlcnM+O1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0VGVtcGxhdGVEZXRhaWxDb250ZW50Qm9keSA9IFBvc3RUZW1wbGF0ZURldGFpbENvbnRlbnRCb2R5XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIFRlbXBsYXRlUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8VGVtcGxhdGVbXT47XG4gIHR5cGUgVGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8VGVtcGxhdGVEZXRhaWxDb250ZW50W10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RUZW1wbGF0ZVJlc3BvbnNlID0gVGVtcGxhdGVSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRUZW1wbGF0ZVJlc3BvbnNlID0gVGVtcGxhdGVSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRUZW1wbGF0ZVJlc3BvbnNlID0gVGVtcGxhdGVSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZSA9IFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlID0gVGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0VGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2UgPSBUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZVxufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIFdlYmhvb2sge1xuICBleHBvcnQgZW51bSBFdmVudFR5cGUge1xuICAgIE9wZW4gPSAnb3BlbicsXG4gICAgQ2xpY2sgPSAnY2xpY2snLFxuICAgIEJvdW5jZSA9ICdib3VuY2UnLFxuICAgIFNwYW0gPSAnc3BhbScsXG4gICAgQmxvY2tlZCA9ICdibG9ja2VkJyxcbiAgICBVblN1YiA9ICd1bnN1YicsXG4gICAgU2VudCA9ICdzZW50JyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEV2ZW50VHlwZVZhbHVlIHtcbiAgICBDbGljayA9IDEsXG4gICAgQm91bmNlID0gMixcbiAgICBTcGFtID0gMyxcbiAgICBCbG9ja2VkID0gNCxcbiAgICBVbnN1YnNjcmliZSA9IDUsXG4gICAgT3BlbiA9IDYsXG4gICAgU2VudCA9IDcsXG4gIH1cblxuICBleHBvcnQgZW51bSBTdGF0dXMge1xuICAgIERlYWQgPSAnZGVhZCcsXG4gICAgQWxpdmUgPSAnYWxpdmUnXG4gIH1cblxuICBleHBvcnQgdHlwZSBWZXJzaW9uID0gMSB8IDI7XG5cbiAgZXhwb3J0IGludGVyZmFjZSBFdmVudENhbGxiYWNrVXJsIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEV2ZW50VHlwZTogRXZlbnRUeXBlO1xuICAgIElzQmFja3VwOiBib29sZWFuO1xuICAgIFN0YXR1czogU3RhdHVzO1xuICAgIEFQSUtleUlEOiBudW1iZXI7XG4gICAgVmVyc2lvbjogVmVyc2lvbjtcbiAgICBVcmw6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0RXZlbnRDYWxsYmFja1VybEJvZHkgPSB7XG4gICAgVXJsOiBzdHJpbmc7XG4gICAgRXZlbnRUeXBlPzogRXZlbnRUeXBlO1xuICAgIElzQmFja3VwPzogYm9vbGVhbjtcbiAgICBTdGF0dXM/OiBTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRFdmVudENhbGxiYWNrVXJsQm9keSA9IFBhcnRpYWw8UG9zdEV2ZW50Q2FsbGJhY2tVcmxCb2R5PlxuXG4gIGV4cG9ydCB0eXBlIEdldEV2ZW50Q2FsbGJhY2tVcmxRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEJhY2t1cD86IGJvb2xlYW47XG4gICAgRXZlbnRUeXBlPzogRXZlbnRUeXBlVmFsdWU7XG4gICAgU3RhdHVzPzogc3RyaW5nO1xuICAgIFZlcnNpb24/OiBWZXJzaW9uO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZSA9IHtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIFRvdGFsOiBudW1iZXI7XG4gICAgRGF0YTogRXZlbnRDYWxsYmFja1VybFtdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RFdmVudENhbGxiYWNrVXJsUmVzcG9uc2UgPSBFdmVudENhbGxiYWNrVXJsUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0RXZlbnRDYWxsYmFja1VybFJlc3BvbnNlID0gRXZlbnRDYWxsYmFja1VybFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZSA9IEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZVxufVxuIiwiLy8gQ09NTU9OXG5leHBvcnQgeyBMaWJyYXJ5UmVzcG9uc2UsIExpYnJhcnlMb2NhbFJlc3BvbnNlIH0gZnJvbSAnLi9MaWJyYXJ5UmVzcG9uc2UnO1xuZXhwb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG4vLyBTRU5EXG5leHBvcnQge1xuICBTZW5kRW1haWxWMyxcbiAgU2VuZEVtYWlsVjNfMSxcbn0gZnJvbSAnLi9TZW5kRW1haWwnO1xuXG4vLyBBUElcbmV4cG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuL01lc3NhZ2UnO1xuZXhwb3J0IHtcbiAgQ29udGFjdCxcbiAgQ29udGFjdExpc3QsXG4gIEJ1bGtDb250YWN0TWFuYWdlbWVudCxcbiAgQ29udGFjdFByb3BlcnRpZXMsXG4gIENvbnRhY3RTdWJzY3JpcHRpb24sXG4gIENvbnRhY3RWZXJpZmljYXRpb24sXG59IGZyb20gJy4vQ29udGFjdCc7XG5leHBvcnQge1xuICBEcmFmdENhbXBhaWduLFxuICBTZW50Q2FtcGFpZ24sXG59IGZyb20gJy4vQ2FtcGFpZ24nO1xuZXhwb3J0IHsgU2VnbWVudGF0aW9uIH0gZnJvbSAnLi9TZWdtZW50YXRpb24nO1xuZXhwb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuL1RlbXBsYXRlJztcbmV4cG9ydCB7IFN0YXRpc3RpYyB9IGZyb20gJy4vU3RhdGlzdGljJztcbmV4cG9ydCB7IE1lc3NhZ2VFdmVudCB9IGZyb20gJy4vTWVzc2FnZUV2ZW50JztcbmV4cG9ydCB7IFdlYmhvb2sgfSBmcm9tICcuL1dlYmhvb2snO1xuZXhwb3J0IHsgUGFyc2UgfSBmcm9tICcuL1BhcnNlJztcbmV4cG9ydCB7XG4gIFNlbmRlcixcbiAgTWV0YXNlbmRlcixcbiAgRE5TLFxufSBmcm9tICcuL1NlbmRlckFkZHJlc3NBbmREb21haW4nO1xuZXhwb3J0IHtcbiAgQVBJS2V5Q29uZmlndXJhdGlvbixcbiAgQWNjb3VudFNldHRpbmcsXG59IGZyb20gJy4vU2V0dGluZyc7XG5cbi8vIFNNU1xuZXhwb3J0IHsgU2VuZE1lc3NhZ2UgfSBmcm9tICcuL1NlbmRNZXNzYWdlJztcbmV4cG9ydCB7IFNNU01lc3NhZ2UgfSBmcm9tICcuL1NNU01lc3NhZ2UnO1xuIiwiaW1wb3J0IGlzTmlsIGZyb20gJy4vaXNOaWwnO1xuaW1wb3J0IGlzTnVsbCBmcm9tICcuL2lzTnVsbCc7XG5pbXBvcnQgaXNVbmRlZmluZWQgZnJvbSAnLi9pc1VuZGVmaW5lZCc7XG5pbXBvcnQgaXNQdXJlT2JqZWN0IGZyb20gJy4vaXNQdXJlT2JqZWN0JztcbmltcG9ydCBzZXRWYWx1ZUlmTm90TmlsIGZyb20gJy4vc2V0VmFsdWVJZk5vdE5pbCc7XG5cbmV4cG9ydCB7XG4gIGlzTmlsLFxuICBpc051bGwsXG4gIGlzVW5kZWZpbmVkLFxuICBpc1B1cmVPYmplY3QsXG4gIHNldFZhbHVlSWZOb3ROaWwsXG59O1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuLyp1dGlscyovXG5pbXBvcnQgaXNOdWxsIGZyb20gJy4vaXNOdWxsJztcbmltcG9ydCBpc1VuZGVmaW5lZCBmcm9tICcuL2lzVW5kZWZpbmVkJztcbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc05pbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNVbmRlZmluZWQodmFsdWUpIHx8IGlzTnVsbCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTmlsO1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuLyp1dGlscyovXG4vKmxpYiovXG4vKm90aGVyKi9cblxuZnVuY3Rpb24gaXNOdWxsKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgbnVsbCB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNOdWxsO1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuLyp1dGlscyovXG4vKmxpYiovXG4vKm90aGVyKi9cblxuZnVuY3Rpb24gaXNQdXJlT2JqZWN0KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG4gICAgJiYgdmFsdWUgIT09IG51bGxcbiAgICAmJiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBudWxsKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQdXJlT2JqZWN0O1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuLyp1dGlscyovXG4vKmxpYiovXG4vKm90aGVyKi9cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB1bmRlZmluZWQge1xuICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNVbmRlZmluZWQ7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG5pbXBvcnQgeyBUT2JqZWN0IH0gZnJvbSAnLi4vdHlwZXMnO1xuLyp1dGlscyovXG5pbXBvcnQgaXNOaWwgZnJvbSAnLi9pc05pbCc7XG5pbXBvcnQgaXNOdWxsIGZyb20gJy4vaXNOdWxsJztcbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBzZXRWYWx1ZUlmTm90TmlsKFxuICB0YXJnZXRPYmplY3Q6IFRPYmplY3QuVW5rbm93blJlYyxcbiAgcGF0aDogc3RyaW5nLFxuICB2YWx1ZTogdW5rbm93bixcbik6IHZvaWQge1xuICBpZiAodHlwZW9mIHRhcmdldE9iamVjdCAhPT0gJ29iamVjdCcgfHwgaXNOdWxsKHRhcmdldE9iamVjdCkpIHtcbiAgICB0aHJvdyBFcnJvcignQXJndW1lbnQgXCJ0YXJnZXRPYmplY3RcIiBpcyBub3Qgb2JqZWN0Jyk7XG4gIH1cblxuICBpZiAoIXBhdGgpIHtcbiAgICB0aHJvdyBFcnJvcignQXJndW1lbnQgXCJwYXRoXCIgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGlmICghaXNOaWwodmFsdWUpKSB7XG4gICAgdGFyZ2V0T2JqZWN0W3BhdGhdID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc2V0VmFsdWVJZk5vdE5pbDtcbiIsIjsoZnVuY3Rpb24gKGdsb2JhbE9iamVjdCkge1xyXG4gICd1c2Ugc3RyaWN0JztcclxuXHJcbi8qXHJcbiAqICAgICAgYmlnbnVtYmVyLmpzIHY5LjAuMVxyXG4gKiAgICAgIEEgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBhcmJpdHJhcnktcHJlY2lzaW9uIGFyaXRobWV0aWMuXHJcbiAqICAgICAgaHR0cHM6Ly9naXRodWIuY29tL01pa2VNY2wvYmlnbnVtYmVyLmpzXHJcbiAqICAgICAgQ29weXJpZ2h0IChjKSAyMDIwIE1pY2hhZWwgTWNsYXVnaGxpbiA8TThjaDg4bEBnbWFpbC5jb20+XHJcbiAqICAgICAgTUlUIExpY2Vuc2VkLlxyXG4gKlxyXG4gKiAgICAgIEJpZ051bWJlci5wcm90b3R5cGUgbWV0aG9kcyAgICAgfCAgQmlnTnVtYmVyIG1ldGhvZHNcclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBhYnNvbHV0ZVZhbHVlICAgICAgICAgICAgYWJzICAgIHwgIGNsb25lXHJcbiAqICAgICAgY29tcGFyZWRUbyAgICAgICAgICAgICAgICAgICAgICB8ICBjb25maWcgICAgICAgICAgICAgICBzZXRcclxuICogICAgICBkZWNpbWFsUGxhY2VzICAgICAgICAgICAgZHAgICAgIHwgICAgICBERUNJTUFMX1BMQUNFU1xyXG4gKiAgICAgIGRpdmlkZWRCeSAgICAgICAgICAgICAgICBkaXYgICAgfCAgICAgIFJPVU5ESU5HX01PREVcclxuICogICAgICBkaXZpZGVkVG9JbnRlZ2VyQnkgICAgICAgaWRpdiAgIHwgICAgICBFWFBPTkVOVElBTF9BVFxyXG4gKiAgICAgIGV4cG9uZW50aWF0ZWRCeSAgICAgICAgICBwb3cgICAgfCAgICAgIFJBTkdFXHJcbiAqICAgICAgaW50ZWdlclZhbHVlICAgICAgICAgICAgICAgICAgICB8ICAgICAgQ1JZUFRPXHJcbiAqICAgICAgaXNFcXVhbFRvICAgICAgICAgICAgICAgIGVxICAgICB8ICAgICAgTU9EVUxPX01PREVcclxuICogICAgICBpc0Zpbml0ZSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBQT1dfUFJFQ0lTSU9OXHJcbiAqICAgICAgaXNHcmVhdGVyVGhhbiAgICAgICAgICAgIGd0ICAgICB8ICAgICAgRk9STUFUXHJcbiAqICAgICAgaXNHcmVhdGVyVGhhbk9yRXF1YWxUbyAgIGd0ZSAgICB8ICAgICAgQUxQSEFCRVRcclxuICogICAgICBpc0ludGVnZXIgICAgICAgICAgICAgICAgICAgICAgIHwgIGlzQmlnTnVtYmVyXHJcbiAqICAgICAgaXNMZXNzVGhhbiAgICAgICAgICAgICAgIGx0ICAgICB8ICBtYXhpbXVtICAgICAgICAgICAgICBtYXhcclxuICogICAgICBpc0xlc3NUaGFuT3JFcXVhbFRvICAgICAgbHRlICAgIHwgIG1pbmltdW0gICAgICAgICAgICAgIG1pblxyXG4gKiAgICAgIGlzTmFOICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgcmFuZG9tXHJcbiAqICAgICAgaXNOZWdhdGl2ZSAgICAgICAgICAgICAgICAgICAgICB8ICBzdW1cclxuICogICAgICBpc1Bvc2l0aXZlICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBpc1plcm8gICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBtaW51cyAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBtb2R1bG8gICAgICAgICAgICAgICAgICAgbW9kICAgIHxcclxuICogICAgICBtdWx0aXBsaWVkQnkgICAgICAgICAgICAgdGltZXMgIHxcclxuICogICAgICBuZWdhdGVkICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBwbHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBwcmVjaXNpb24gICAgICAgICAgICAgICAgc2QgICAgIHxcclxuICogICAgICBzaGlmdGVkQnkgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBzcXVhcmVSb290ICAgICAgICAgICAgICAgc3FydCAgIHxcclxuICogICAgICB0b0V4cG9uZW50aWFsICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b0ZpeGVkICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b0Zvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b0ZyYWN0aW9uICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b0pTT04gICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b051bWJlciAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b1ByZWNpc2lvbiAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b1N0cmluZyAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB2YWx1ZU9mICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICpcclxuICovXHJcblxyXG5cclxuICB2YXIgQmlnTnVtYmVyLFxyXG4gICAgaXNOdW1lcmljID0gL14tPyg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzplWystXT9cXGQrKT8kL2ksXHJcbiAgICBtYXRoY2VpbCA9IE1hdGguY2VpbCxcclxuICAgIG1hdGhmbG9vciA9IE1hdGguZmxvb3IsXHJcblxyXG4gICAgYmlnbnVtYmVyRXJyb3IgPSAnW0JpZ051bWJlciBFcnJvcl0gJyxcclxuICAgIHRvb01hbnlEaWdpdHMgPSBiaWdudW1iZXJFcnJvciArICdOdW1iZXIgcHJpbWl0aXZlIGhhcyBtb3JlIHRoYW4gMTUgc2lnbmlmaWNhbnQgZGlnaXRzOiAnLFxyXG5cclxuICAgIEJBU0UgPSAxZTE0LFxyXG4gICAgTE9HX0JBU0UgPSAxNCxcclxuICAgIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFmZmZmZmZmZmZmZmZmLCAgICAgICAgIC8vIDJeNTMgLSAxXHJcbiAgICAvLyBNQVhfSU5UMzIgPSAweDdmZmZmZmZmLCAgICAgICAgICAgICAgICAgICAvLyAyXjMxIC0gMVxyXG4gICAgUE9XU19URU4gPSBbMSwgMTAsIDEwMCwgMWUzLCAxZTQsIDFlNSwgMWU2LCAxZTcsIDFlOCwgMWU5LCAxZTEwLCAxZTExLCAxZTEyLCAxZTEzXSxcclxuICAgIFNRUlRfQkFTRSA9IDFlNyxcclxuXHJcbiAgICAvLyBFRElUQUJMRVxyXG4gICAgLy8gVGhlIGxpbWl0IG9uIHRoZSB2YWx1ZSBvZiBERUNJTUFMX1BMQUNFUywgVE9fRVhQX05FRywgVE9fRVhQX1BPUywgTUlOX0VYUCwgTUFYX0VYUCwgYW5kXHJcbiAgICAvLyB0aGUgYXJndW1lbnRzIHRvIHRvRXhwb25lbnRpYWwsIHRvRml4ZWQsIHRvRm9ybWF0LCBhbmQgdG9QcmVjaXNpb24uXHJcbiAgICBNQVggPSAxRTk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWF9JTlQzMlxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGUgYW5kIHJldHVybiBhIEJpZ051bWJlciBjb25zdHJ1Y3Rvci5cclxuICAgKi9cclxuICBmdW5jdGlvbiBjbG9uZShjb25maWdPYmplY3QpIHtcclxuICAgIHZhciBkaXYsIGNvbnZlcnRCYXNlLCBwYXJzZU51bWVyaWMsXHJcbiAgICAgIFAgPSBCaWdOdW1iZXIucHJvdG90eXBlID0geyBjb25zdHJ1Y3RvcjogQmlnTnVtYmVyLCB0b1N0cmluZzogbnVsbCwgdmFsdWVPZjogbnVsbCB9LFxyXG4gICAgICBPTkUgPSBuZXcgQmlnTnVtYmVyKDEpLFxyXG5cclxuXHJcbiAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRURJVEFCTEUgQ09ORklHIERFRkFVTFRTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZXMgYmVsb3cgbXVzdCBiZSBpbnRlZ2VycyB3aXRoaW4gdGhlIGluY2x1c2l2ZSByYW5nZXMgc3RhdGVkLlxyXG4gICAgICAvLyBUaGUgdmFsdWVzIGNhbiBhbHNvIGJlIGNoYW5nZWQgYXQgcnVuLXRpbWUgdXNpbmcgQmlnTnVtYmVyLnNldC5cclxuXHJcbiAgICAgIC8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBmb3Igb3BlcmF0aW9ucyBpbnZvbHZpbmcgZGl2aXNpb24uXHJcbiAgICAgIERFQ0lNQUxfUExBQ0VTID0gMjAsICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhcclxuXHJcbiAgICAgIC8vIFRoZSByb3VuZGluZyBtb2RlIHVzZWQgd2hlbiByb3VuZGluZyB0byB0aGUgYWJvdmUgZGVjaW1hbCBwbGFjZXMsIGFuZCB3aGVuIHVzaW5nXHJcbiAgICAgIC8vIHRvRXhwb25lbnRpYWwsIHRvRml4ZWQsIHRvRm9ybWF0IGFuZCB0b1ByZWNpc2lvbiwgYW5kIHJvdW5kIChkZWZhdWx0IHZhbHVlKS5cclxuICAgICAgLy8gVVAgICAgICAgICAwIEF3YXkgZnJvbSB6ZXJvLlxyXG4gICAgICAvLyBET1dOICAgICAgIDEgVG93YXJkcyB6ZXJvLlxyXG4gICAgICAvLyBDRUlMICAgICAgIDIgVG93YXJkcyArSW5maW5pdHkuXHJcbiAgICAgIC8vIEZMT09SICAgICAgMyBUb3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgLy8gSEFMRl9VUCAgICA0IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB1cC5cclxuICAgICAgLy8gSEFMRl9ET1dOICA1IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCBkb3duLlxyXG4gICAgICAvLyBIQUxGX0VWRU4gIDYgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHRvd2FyZHMgZXZlbiBuZWlnaGJvdXIuXHJcbiAgICAgIC8vIEhBTEZfQ0VJTCAgNyBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyArSW5maW5pdHkuXHJcbiAgICAgIC8vIEhBTEZfRkxPT1IgOCBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyAtSW5maW5pdHkuXHJcbiAgICAgIFJPVU5ESU5HX01PREUgPSA0LCAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byA4XHJcblxyXG4gICAgICAvLyBFWFBPTkVOVElBTF9BVCA6IFtUT19FWFBfTkVHICwgVE9fRVhQX1BPU11cclxuXHJcbiAgICAgIC8vIFRoZSBleHBvbmVudCB2YWx1ZSBhdCBhbmQgYmVuZWF0aCB3aGljaCB0b1N0cmluZyByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogLTdcclxuICAgICAgVE9fRVhQX05FRyA9IC03LCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIC1NQVhcclxuXHJcbiAgICAgIC8vIFRoZSBleHBvbmVudCB2YWx1ZSBhdCBhbmQgYWJvdmUgd2hpY2ggdG9TdHJpbmcgcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6IDIxXHJcbiAgICAgIFRPX0VYUF9QT1MgPSAyMSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhcclxuXHJcbiAgICAgIC8vIFJBTkdFIDogW01JTl9FWFAsIE1BWF9FWFBdXHJcblxyXG4gICAgICAvLyBUaGUgbWluaW11bSBleHBvbmVudCB2YWx1ZSwgYmVuZWF0aCB3aGljaCB1bmRlcmZsb3cgdG8gemVybyBvY2N1cnMuXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAtMzI0ICAoNWUtMzI0KVxyXG4gICAgICBNSU5fRVhQID0gLTFlNywgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0xIHRvIC1NQVhcclxuXHJcbiAgICAgIC8vIFRoZSBtYXhpbXVtIGV4cG9uZW50IHZhbHVlLCBhYm92ZSB3aGljaCBvdmVyZmxvdyB0byBJbmZpbml0eSBvY2N1cnMuXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAgMzA4ICAoMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpXHJcbiAgICAgIC8vIEZvciBNQVhfRVhQID4gMWU3LCBlLmcuIG5ldyBCaWdOdW1iZXIoJzFlMTAwMDAwMDAwJykucGx1cygxKSBtYXkgYmUgc2xvdy5cclxuICAgICAgTUFYX0VYUCA9IDFlNywgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxIHRvIE1BWFxyXG5cclxuICAgICAgLy8gV2hldGhlciB0byB1c2UgY3J5cHRvZ3JhcGhpY2FsbHktc2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiwgaWYgYXZhaWxhYmxlLlxyXG4gICAgICBDUllQVE8gPSBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRydWUgb3IgZmFsc2VcclxuXHJcbiAgICAgIC8vIFRoZSBtb2R1bG8gbW9kZSB1c2VkIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG1vZHVsdXM6IGEgbW9kIG4uXHJcbiAgICAgIC8vIFRoZSBxdW90aWVudCAocSA9IGEgLyBuKSBpcyBjYWxjdWxhdGVkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyByb3VuZGluZyBtb2RlLlxyXG4gICAgICAvLyBUaGUgcmVtYWluZGVyIChyKSBpcyBjYWxjdWxhdGVkIGFzOiByID0gYSAtIG4gKiBxLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBVUCAgICAgICAgMCBUaGUgcmVtYWluZGVyIGlzIHBvc2l0aXZlIGlmIHRoZSBkaXZpZGVuZCBpcyBuZWdhdGl2ZSwgZWxzZSBpcyBuZWdhdGl2ZS5cclxuICAgICAgLy8gRE9XTiAgICAgIDEgVGhlIHJlbWFpbmRlciBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGl2aWRlbmQuXHJcbiAgICAgIC8vICAgICAgICAgICAgIFRoaXMgbW9kdWxvIG1vZGUgaXMgY29tbW9ubHkga25vd24gYXMgJ3RydW5jYXRlZCBkaXZpc2lvbicgYW5kIGlzXHJcbiAgICAgIC8vICAgICAgICAgICAgIGVxdWl2YWxlbnQgdG8gKGEgJSBuKSBpbiBKYXZhU2NyaXB0LlxyXG4gICAgICAvLyBGTE9PUiAgICAgMyBUaGUgcmVtYWluZGVyIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpc29yIChQeXRob24gJSkuXHJcbiAgICAgIC8vIEhBTEZfRVZFTiA2IFRoaXMgbW9kdWxvIG1vZGUgaW1wbGVtZW50cyB0aGUgSUVFRSA3NTQgcmVtYWluZGVyIGZ1bmN0aW9uLlxyXG4gICAgICAvLyBFVUNMSUQgICAgOSBFdWNsaWRpYW4gZGl2aXNpb24uIHEgPSBzaWduKG4pICogZmxvb3IoYSAvIGFicyhuKSkuXHJcbiAgICAgIC8vICAgICAgICAgICAgIFRoZSByZW1haW5kZXIgaXMgYWx3YXlzIHBvc2l0aXZlLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBUaGUgdHJ1bmNhdGVkIGRpdmlzaW9uLCBmbG9vcmVkIGRpdmlzaW9uLCBFdWNsaWRpYW4gZGl2aXNpb24gYW5kIElFRUUgNzU0IHJlbWFpbmRlclxyXG4gICAgICAvLyBtb2RlcyBhcmUgY29tbW9ubHkgdXNlZCBmb3IgdGhlIG1vZHVsdXMgb3BlcmF0aW9uLlxyXG4gICAgICAvLyBBbHRob3VnaCB0aGUgb3RoZXIgcm91bmRpbmcgbW9kZXMgY2FuIGFsc28gYmUgdXNlZCwgdGhleSBtYXkgbm90IGdpdmUgdXNlZnVsIHJlc3VsdHMuXHJcbiAgICAgIE1PRFVMT19NT0RFID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byA5XHJcblxyXG4gICAgICAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSByZXN1bHQgb2YgdGhlIGV4cG9uZW50aWF0ZWRCeSBvcGVyYXRpb24uXHJcbiAgICAgIC8vIElmIFBPV19QUkVDSVNJT04gaXMgMCwgdGhlcmUgd2lsbCBiZSB1bmxpbWl0ZWQgc2lnbmlmaWNhbnQgZGlnaXRzLlxyXG4gICAgICBQT1dfUFJFQ0lTSU9OID0gMCwgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYXHJcblxyXG4gICAgICAvLyBUaGUgZm9ybWF0IHNwZWNpZmljYXRpb24gdXNlZCBieSB0aGUgQmlnTnVtYmVyLnByb3RvdHlwZS50b0Zvcm1hdCBtZXRob2QuXHJcbiAgICAgIEZPUk1BVCA9IHtcclxuICAgICAgICBwcmVmaXg6ICcnLFxyXG4gICAgICAgIGdyb3VwU2l6ZTogMyxcclxuICAgICAgICBzZWNvbmRhcnlHcm91cFNpemU6IDAsXHJcbiAgICAgICAgZ3JvdXBTZXBhcmF0b3I6ICcsJyxcclxuICAgICAgICBkZWNpbWFsU2VwYXJhdG9yOiAnLicsXHJcbiAgICAgICAgZnJhY3Rpb25Hcm91cFNpemU6IDAsXHJcbiAgICAgICAgZnJhY3Rpb25Hcm91cFNlcGFyYXRvcjogJ1xceEEwJywgICAgICAvLyBub24tYnJlYWtpbmcgc3BhY2VcclxuICAgICAgICBzdWZmaXg6ICcnXHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAvLyBUaGUgYWxwaGFiZXQgdXNlZCBmb3IgYmFzZSBjb252ZXJzaW9uLiBJdCBtdXN0IGJlIGF0IGxlYXN0IDIgY2hhcmFjdGVycyBsb25nLCB3aXRoIG5vICcrJyxcclxuICAgICAgLy8gJy0nLCAnLicsIHdoaXRlc3BhY2UsIG9yIHJlcGVhdGVkIGNoYXJhY3Rlci5cclxuICAgICAgLy8gJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJF8nXHJcbiAgICAgIEFMUEhBQkVUID0gJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuICAgIC8vIENPTlNUUlVDVE9SXHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBUaGUgQmlnTnVtYmVyIGNvbnN0cnVjdG9yIGFuZCBleHBvcnRlZCBmdW5jdGlvbi5cclxuICAgICAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgQmlnTnVtYmVyIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiB2IHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn0gQSBudW1lcmljIHZhbHVlLlxyXG4gICAgICogW2JdIHtudW1iZXJ9IFRoZSBiYXNlIG9mIHYuIEludGVnZXIsIDIgdG8gQUxQSEFCRVQubGVuZ3RoIGluY2x1c2l2ZS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gQmlnTnVtYmVyKHYsIGIpIHtcclxuICAgICAgdmFyIGFscGhhYmV0LCBjLCBjYXNlQ2hhbmdlZCwgZSwgaSwgaXNOdW0sIGxlbiwgc3RyLFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgLy8gRW5hYmxlIGNvbnN0cnVjdG9yIGNhbGwgd2l0aG91dCBgbmV3YC5cclxuICAgICAgaWYgKCEoeCBpbnN0YW5jZW9mIEJpZ051bWJlcikpIHJldHVybiBuZXcgQmlnTnVtYmVyKHYsIGIpO1xyXG5cclxuICAgICAgaWYgKGIgPT0gbnVsbCkge1xyXG5cclxuICAgICAgICBpZiAodiAmJiB2Ll9pc0JpZ051bWJlciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgeC5zID0gdi5zO1xyXG5cclxuICAgICAgICAgIGlmICghdi5jIHx8IHYuZSA+IE1BWF9FWFApIHtcclxuICAgICAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodi5lIDwgTUlOX0VYUCkge1xyXG4gICAgICAgICAgICB4LmMgPSBbeC5lID0gMF07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB4LmUgPSB2LmU7XHJcbiAgICAgICAgICAgIHguYyA9IHYuYy5zbGljZSgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgoaXNOdW0gPSB0eXBlb2YgdiA9PSAnbnVtYmVyJykgJiYgdiAqIDAgPT0gMCkge1xyXG5cclxuICAgICAgICAgIC8vIFVzZSBgMSAvIG5gIHRvIGhhbmRsZSBtaW51cyB6ZXJvIGFsc28uXHJcbiAgICAgICAgICB4LnMgPSAxIC8gdiA8IDAgPyAodiA9IC12LCAtMSkgOiAxO1xyXG5cclxuICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgaW50ZWdlcnMsIHdoZXJlIG4gPCAyMTQ3NDgzNjQ4ICgyKiozMSkuXHJcbiAgICAgICAgICBpZiAodiA9PT0gfn52KSB7XHJcbiAgICAgICAgICAgIGZvciAoZSA9IDAsIGkgPSB2OyBpID49IDEwOyBpIC89IDEwLCBlKyspO1xyXG5cclxuICAgICAgICAgICAgaWYgKGUgPiBNQVhfRVhQKSB7XHJcbiAgICAgICAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB4LmUgPSBlO1xyXG4gICAgICAgICAgICAgIHguYyA9IFt2XTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHN0ciA9IFN0cmluZyh2KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIGlmICghaXNOdW1lcmljLnRlc3Qoc3RyID0gU3RyaW5nKHYpKSkgcmV0dXJuIHBhcnNlTnVtZXJpYyh4LCBzdHIsIGlzTnVtKTtcclxuXHJcbiAgICAgICAgICB4LnMgPSBzdHIuY2hhckNvZGVBdCgwKSA9PSA0NSA/IChzdHIgPSBzdHIuc2xpY2UoMSksIC0xKSA6IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEZWNpbWFsIHBvaW50P1xyXG4gICAgICAgIGlmICgoZSA9IHN0ci5pbmRleE9mKCcuJykpID4gLTEpIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG5cclxuICAgICAgICAvLyBFeHBvbmVudGlhbCBmb3JtP1xyXG4gICAgICAgIGlmICgoaSA9IHN0ci5zZWFyY2goL2UvaSkpID4gMCkge1xyXG5cclxuICAgICAgICAgIC8vIERldGVybWluZSBleHBvbmVudC5cclxuICAgICAgICAgIGlmIChlIDwgMCkgZSA9IGk7XHJcbiAgICAgICAgICBlICs9ICtzdHIuc2xpY2UoaSArIDEpO1xyXG4gICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGUgPCAwKSB7XHJcblxyXG4gICAgICAgICAgLy8gSW50ZWdlci5cclxuICAgICAgICAgIGUgPSBzdHIubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBCYXNlIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtifSdcclxuICAgICAgICBpbnRDaGVjayhiLCAyLCBBTFBIQUJFVC5sZW5ndGgsICdCYXNlJyk7XHJcblxyXG4gICAgICAgIC8vIEFsbG93IGV4cG9uZW50aWFsIG5vdGF0aW9uIHRvIGJlIHVzZWQgd2l0aCBiYXNlIDEwIGFyZ3VtZW50LCB3aGlsZVxyXG4gICAgICAgIC8vIGFsc28gcm91bmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYXMgd2l0aCBvdGhlciBiYXNlcy5cclxuICAgICAgICBpZiAoYiA9PSAxMCkge1xyXG4gICAgICAgICAgeCA9IG5ldyBCaWdOdW1iZXIodik7XHJcbiAgICAgICAgICByZXR1cm4gcm91bmQoeCwgREVDSU1BTF9QTEFDRVMgKyB4LmUgKyAxLCBST1VORElOR19NT0RFKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0ciA9IFN0cmluZyh2KTtcclxuXHJcbiAgICAgICAgaWYgKGlzTnVtID0gdHlwZW9mIHYgPT0gJ251bWJlcicpIHtcclxuXHJcbiAgICAgICAgICAvLyBBdm9pZCBwb3RlbnRpYWwgaW50ZXJwcmV0YXRpb24gb2YgSW5maW5pdHkgYW5kIE5hTiBhcyBiYXNlIDQ0KyB2YWx1ZXMuXHJcbiAgICAgICAgICBpZiAodiAqIDAgIT0gMCkgcmV0dXJuIHBhcnNlTnVtZXJpYyh4LCBzdHIsIGlzTnVtLCBiKTtcclxuXHJcbiAgICAgICAgICB4LnMgPSAxIC8gdiA8IDAgPyAoc3RyID0gc3RyLnNsaWNlKDEpLCAtMSkgOiAxO1xyXG5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBOdW1iZXIgcHJpbWl0aXZlIGhhcyBtb3JlIHRoYW4gMTUgc2lnbmlmaWNhbnQgZGlnaXRzOiB7bn0nXHJcbiAgICAgICAgICBpZiAoQmlnTnVtYmVyLkRFQlVHICYmIHN0ci5yZXBsYWNlKC9eMFxcLjAqfFxcLi8sICcnKS5sZW5ndGggPiAxNSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgKHRvb01hbnlEaWdpdHMgKyB2KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeC5zID0gc3RyLmNoYXJDb2RlQXQoMCkgPT09IDQ1ID8gKHN0ciA9IHN0ci5zbGljZSgxKSwgLTEpIDogMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFscGhhYmV0ID0gQUxQSEFCRVQuc2xpY2UoMCwgYik7XHJcbiAgICAgICAgZSA9IGkgPSAwO1xyXG5cclxuICAgICAgICAvLyBDaGVjayB0aGF0IHN0ciBpcyBhIHZhbGlkIGJhc2UgYiBudW1iZXIuXHJcbiAgICAgICAgLy8gRG9uJ3QgdXNlIFJlZ0V4cCwgc28gYWxwaGFiZXQgY2FuIGNvbnRhaW4gc3BlY2lhbCBjaGFyYWN0ZXJzLlxyXG4gICAgICAgIGZvciAobGVuID0gc3RyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoYWxwaGFiZXQuaW5kZXhPZihjID0gc3RyLmNoYXJBdChpKSkgPCAwKSB7XHJcbiAgICAgICAgICAgIGlmIChjID09ICcuJykge1xyXG5cclxuICAgICAgICAgICAgICAvLyBJZiAnLicgaXMgbm90IHRoZSBmaXJzdCBjaGFyYWN0ZXIgYW5kIGl0IGhhcyBub3QgYmUgZm91bmQgYmVmb3JlLlxyXG4gICAgICAgICAgICAgIGlmIChpID4gZSkge1xyXG4gICAgICAgICAgICAgICAgZSA9IGxlbjtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICghY2FzZUNoYW5nZWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQWxsb3cgZS5nLiBoZXhhZGVjaW1hbCAnRkYnIGFzIHdlbGwgYXMgJ2ZmJy5cclxuICAgICAgICAgICAgICBpZiAoc3RyID09IHN0ci50b1VwcGVyQ2FzZSgpICYmIChzdHIgPSBzdHIudG9Mb3dlckNhc2UoKSkgfHxcclxuICAgICAgICAgICAgICAgICAgc3RyID09IHN0ci50b0xvd2VyQ2FzZSgpICYmIChzdHIgPSBzdHIudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2VDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGkgPSAtMTtcclxuICAgICAgICAgICAgICAgIGUgPSAwO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljKHgsIFN0cmluZyh2KSwgaXNOdW0sIGIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUHJldmVudCBsYXRlciBjaGVjayBmb3IgbGVuZ3RoIG9uIGNvbnZlcnRlZCBudW1iZXIuXHJcbiAgICAgICAgaXNOdW0gPSBmYWxzZTtcclxuICAgICAgICBzdHIgPSBjb252ZXJ0QmFzZShzdHIsIGIsIDEwLCB4LnMpO1xyXG5cclxuICAgICAgICAvLyBEZWNpbWFsIHBvaW50P1xyXG4gICAgICAgIGlmICgoZSA9IHN0ci5pbmRleE9mKCcuJykpID4gLTEpIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICAgIGVsc2UgZSA9IHN0ci5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIERldGVybWluZSBsZWFkaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKGkgPSAwOyBzdHIuY2hhckNvZGVBdChpKSA9PT0gNDg7IGkrKyk7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgIGZvciAobGVuID0gc3RyLmxlbmd0aDsgc3RyLmNoYXJDb2RlQXQoLS1sZW4pID09PSA0ODspO1xyXG5cclxuICAgICAgaWYgKHN0ciA9IHN0ci5zbGljZShpLCArK2xlbikpIHtcclxuICAgICAgICBsZW4gLT0gaTtcclxuXHJcbiAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE51bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6IHtufSdcclxuICAgICAgICBpZiAoaXNOdW0gJiYgQmlnTnVtYmVyLkRFQlVHICYmXHJcbiAgICAgICAgICBsZW4gPiAxNSAmJiAodiA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgdiAhPT0gbWF0aGZsb29yKHYpKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgKHRvb01hbnlEaWdpdHMgKyAoeC5zICogdikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgIC8vIE92ZXJmbG93P1xyXG4gICAgICAgIGlmICgoZSA9IGUgLSBpIC0gMSkgPiBNQVhfRVhQKSB7XHJcblxyXG4gICAgICAgICAgLy8gSW5maW5pdHkuXHJcbiAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBVbmRlcmZsb3c/XHJcbiAgICAgICAgfSBlbHNlIGlmIChlIDwgTUlOX0VYUCkge1xyXG5cclxuICAgICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgICB4LmMgPSBbeC5lID0gMF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICB4LmMgPSBbXTtcclxuXHJcbiAgICAgICAgICAvLyBUcmFuc2Zvcm0gYmFzZVxyXG5cclxuICAgICAgICAgIC8vIGUgaXMgdGhlIGJhc2UgMTAgZXhwb25lbnQuXHJcbiAgICAgICAgICAvLyBpIGlzIHdoZXJlIHRvIHNsaWNlIHN0ciB0byBnZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGNvZWZmaWNpZW50IGFycmF5LlxyXG4gICAgICAgICAgaSA9IChlICsgMSkgJSBMT0dfQkFTRTtcclxuICAgICAgICAgIGlmIChlIDwgMCkgaSArPSBMT0dfQkFTRTsgIC8vIGkgPCAxXHJcblxyXG4gICAgICAgICAgaWYgKGkgPCBsZW4pIHtcclxuICAgICAgICAgICAgaWYgKGkpIHguYy5wdXNoKCtzdHIuc2xpY2UoMCwgaSkpO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZW4gLT0gTE9HX0JBU0U7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICAgICAgeC5jLnB1c2goK3N0ci5zbGljZShpLCBpICs9IExPR19CQVNFKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGkgPSBMT0dfQkFTRSAtIChzdHIgPSBzdHIuc2xpY2UoaSkpLmxlbmd0aDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGkgLT0gbGVuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGZvciAoOyBpLS07IHN0ciArPSAnMCcpO1xyXG4gICAgICAgICAgeC5jLnB1c2goK3N0cik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBDT05TVFJVQ1RPUiBQUk9QRVJUSUVTXHJcblxyXG5cclxuICAgIEJpZ051bWJlci5jbG9uZSA9IGNsb25lO1xyXG5cclxuICAgIEJpZ051bWJlci5ST1VORF9VUCA9IDA7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfRE9XTiA9IDE7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfQ0VJTCA9IDI7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfRkxPT1IgPSAzO1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfVVAgPSA0O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfRE9XTiA9IDU7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9FVkVOID0gNjtcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0NFSUwgPSA3O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfRkxPT1IgPSA4O1xyXG4gICAgQmlnTnVtYmVyLkVVQ0xJRCA9IDk7XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBDb25maWd1cmUgaW5mcmVxdWVudGx5LWNoYW5naW5nIGxpYnJhcnktd2lkZSBzZXR0aW5ncy5cclxuICAgICAqXHJcbiAgICAgKiBBY2NlcHQgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25hbCBwcm9wZXJ0aWVzIChpZiB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBpc1xyXG4gICAgICogYSBudW1iZXIsIGl0IG11c3QgYmUgYW4gaW50ZWdlciB3aXRoaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBzdGF0ZWQpOlxyXG4gICAgICpcclxuICAgICAqICAgREVDSU1BTF9QTEFDRVMgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byBNQVhcclxuICAgICAqICAgUk9VTkRJTkdfTU9ERSAgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byA4XHJcbiAgICAgKiAgIEVYUE9ORU5USUFMX0FUICAge251bWJlcnxudW1iZXJbXX0gIC1NQVggdG8gTUFYICBvciAgWy1NQVggdG8gMCwgMCB0byBNQVhdXHJcbiAgICAgKiAgIFJBTkdFICAgICAgICAgICAge251bWJlcnxudW1iZXJbXX0gIC1NQVggdG8gTUFYIChub3QgemVybykgIG9yICBbLU1BWCB0byAtMSwgMSB0byBNQVhdXHJcbiAgICAgKiAgIENSWVBUTyAgICAgICAgICAge2Jvb2xlYW59ICAgICAgICAgIHRydWUgb3IgZmFsc2VcclxuICAgICAqICAgTU9EVUxPX01PREUgICAgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byA5XHJcbiAgICAgKiAgIFBPV19QUkVDSVNJT04gICAgICAge251bWJlcn0gICAgICAgICAgIDAgdG8gTUFYXHJcbiAgICAgKiAgIEFMUEhBQkVUICAgICAgICAge3N0cmluZ30gICAgICAgICAgIEEgc3RyaW5nIG9mIHR3byBvciBtb3JlIHVuaXF1ZSBjaGFyYWN0ZXJzIHdoaWNoIGRvZXNcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGNvbnRhaW4gJy4nLlxyXG4gICAgICogICBGT1JNQVQgICAgICAgICAgIHtvYmplY3R9ICAgICAgICAgICBBbiBvYmplY3Qgd2l0aCBzb21lIG9mIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcclxuICAgICAqICAgICBwcmVmaXggICAgICAgICAgICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgZ3JvdXBTaXplICAgICAgICAgICAgICB7bnVtYmVyfVxyXG4gICAgICogICAgIHNlY29uZGFyeUdyb3VwU2l6ZSAgICAge251bWJlcn1cclxuICAgICAqICAgICBncm91cFNlcGFyYXRvciAgICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgZGVjaW1hbFNlcGFyYXRvciAgICAgICB7c3RyaW5nfVxyXG4gICAgICogICAgIGZyYWN0aW9uR3JvdXBTaXplICAgICAge251bWJlcn1cclxuICAgICAqICAgICBmcmFjdGlvbkdyb3VwU2VwYXJhdG9yIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgc3VmZml4ICAgICAgICAgICAgICAgICB7c3RyaW5nfVxyXG4gICAgICpcclxuICAgICAqIChUaGUgdmFsdWVzIGFzc2lnbmVkIHRvIHRoZSBhYm92ZSBGT1JNQVQgb2JqZWN0IHByb3BlcnRpZXMgYXJlIG5vdCBjaGVja2VkIGZvciB2YWxpZGl0eS4pXHJcbiAgICAgKlxyXG4gICAgICogRS5nLlxyXG4gICAgICogQmlnTnVtYmVyLmNvbmZpZyh7IERFQ0lNQUxfUExBQ0VTIDogMjAsIFJPVU5ESU5HX01PREUgOiA0IH0pXHJcbiAgICAgKlxyXG4gICAgICogSWdub3JlIHByb3BlcnRpZXMvcGFyYW1ldGVycyBzZXQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGV4Y2VwdCBmb3IgQUxQSEFCRVQuXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGFuIG9iamVjdCB3aXRoIHRoZSBwcm9wZXJ0aWVzIGN1cnJlbnQgdmFsdWVzLlxyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIuY29uZmlnID0gQmlnTnVtYmVyLnNldCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgdmFyIHAsIHY7XHJcblxyXG4gICAgICBpZiAob2JqICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvYmogPT0gJ29iamVjdCcpIHtcclxuXHJcbiAgICAgICAgICAvLyBERUNJTUFMX1BMQUNFUyB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gREVDSU1BTF9QTEFDRVMge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0RFQ0lNQUxfUExBQ0VTJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgREVDSU1BTF9QTEFDRVMgPSB2O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJPVU5ESU5HX01PREUge251bWJlcn0gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBST1VORElOR19NT0RFIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdST1VORElOR19NT0RFJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgOCwgcCk7XHJcbiAgICAgICAgICAgIFJPVU5ESU5HX01PREUgPSB2O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEVYUE9ORU5USUFMX0FUIHtudW1iZXJ8bnVtYmVyW119XHJcbiAgICAgICAgICAvLyBJbnRlZ2VyLCAtTUFYIHRvIE1BWCBpbmNsdXNpdmUgb3JcclxuICAgICAgICAgIC8vIFtpbnRlZ2VyIC1NQVggdG8gMCBpbmNsdXNpdmUsIDAgdG8gTUFYIGluY2x1c2l2ZV0uXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gRVhQT05FTlRJQUxfQVQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0VYUE9ORU5USUFMX0FUJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHYgJiYgdi5wb3ApIHtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2WzBdLCAtTUFYLCAwLCBwKTtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2WzFdLCAwLCBNQVgsIHApO1xyXG4gICAgICAgICAgICAgIFRPX0VYUF9ORUcgPSB2WzBdO1xyXG4gICAgICAgICAgICAgIFRPX0VYUF9QT1MgPSB2WzFdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHYsIC1NQVgsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgVE9fRVhQX05FRyA9IC0oVE9fRVhQX1BPUyA9IHYgPCAwID8gLXYgOiB2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJBTkdFIHtudW1iZXJ8bnVtYmVyW119IE5vbi16ZXJvIGludGVnZXIsIC1NQVggdG8gTUFYIGluY2x1c2l2ZSBvclxyXG4gICAgICAgICAgLy8gW2ludGVnZXIgLU1BWCB0byAtMSBpbmNsdXNpdmUsIGludGVnZXIgMSB0byBNQVggaW5jbHVzaXZlXS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBSQU5HRSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V8Y2Fubm90IGJlIHplcm99OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnUkFOR0UnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodiAmJiB2LnBvcCkge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMF0sIC1NQVgsIC0xLCBwKTtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2WzFdLCAxLCBNQVgsIHApO1xyXG4gICAgICAgICAgICAgIE1JTl9FWFAgPSB2WzBdO1xyXG4gICAgICAgICAgICAgIE1BWF9FWFAgPSB2WzFdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHYsIC1NQVgsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgICAgIE1JTl9FWFAgPSAtKE1BWF9FWFAgPSB2IDwgMCA/IC12IDogdik7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgY2Fubm90IGJlIHplcm86ICcgKyB2KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBDUllQVE8ge2Jvb2xlYW59IHRydWUgb3IgZmFsc2UuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gQ1JZUFRPIG5vdCB0cnVlIG9yIGZhbHNlOiB7dn0nXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gY3J5cHRvIHVuYXZhaWxhYmxlJ1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0NSWVBUTycpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh2ID09PSAhIXYpIHtcclxuICAgICAgICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8gIT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvICYmXHJcbiAgICAgICAgICAgICAgICAgKGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgfHwgY3J5cHRvLnJhbmRvbUJ5dGVzKSkge1xyXG4gICAgICAgICAgICAgICAgICBDUllQVE8gPSB2O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgQ1JZUFRPID0gIXY7XHJcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnY3J5cHRvIHVuYXZhaWxhYmxlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIENSWVBUTyA9IHY7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIG5vdCB0cnVlIG9yIGZhbHNlOiAnICsgdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBNT0RVTE9fTU9ERSB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIDkgaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE1PRFVMT19NT0RFIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdNT0RVTE9fTU9ERScpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGludENoZWNrKHYsIDAsIDksIHApO1xyXG4gICAgICAgICAgICBNT0RVTE9fTU9ERSA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUE9XX1BSRUNJU0lPTiB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gUE9XX1BSRUNJU0lPTiB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnUE9XX1BSRUNJU0lPTicpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGludENoZWNrKHYsIDAsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgIFBPV19QUkVDSVNJT04gPSB2O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEZPUk1BVCB7b2JqZWN0fVxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEZPUk1BVCBub3QgYW4gb2JqZWN0OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnRk9STUFUJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09ICdvYmplY3QnKSBGT1JNQVQgPSB2O1xyXG4gICAgICAgICAgICBlbHNlIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBub3QgYW4gb2JqZWN0OiAnICsgdik7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQUxQSEFCRVQge3N0cmluZ31cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBBTFBIQUJFVCBpbnZhbGlkOiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnQUxQSEFCRVQnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG5cclxuICAgICAgICAgICAgLy8gRGlzYWxsb3cgaWYgbGVzcyB0aGFuIHR3byBjaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICAvLyBvciBpZiBpdCBjb250YWlucyAnKycsICctJywgJy4nLCB3aGl0ZXNwYWNlLCBvciBhIHJlcGVhdGVkIGNoYXJhY3Rlci5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09ICdzdHJpbmcnICYmICEvXi4/JHxbK1xcLS5cXHNdfCguKS4qXFwxLy50ZXN0KHYpKSB7XHJcbiAgICAgICAgICAgICAgQUxQSEFCRVQgPSB2O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIGludmFsaWQ6ICcgKyB2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBPYmplY3QgZXhwZWN0ZWQ6IHt2fSdcclxuICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ09iamVjdCBleHBlY3RlZDogJyArIG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIERFQ0lNQUxfUExBQ0VTOiBERUNJTUFMX1BMQUNFUyxcclxuICAgICAgICBST1VORElOR19NT0RFOiBST1VORElOR19NT0RFLFxyXG4gICAgICAgIEVYUE9ORU5USUFMX0FUOiBbVE9fRVhQX05FRywgVE9fRVhQX1BPU10sXHJcbiAgICAgICAgUkFOR0U6IFtNSU5fRVhQLCBNQVhfRVhQXSxcclxuICAgICAgICBDUllQVE86IENSWVBUTyxcclxuICAgICAgICBNT0RVTE9fTU9ERTogTU9EVUxPX01PREUsXHJcbiAgICAgICAgUE9XX1BSRUNJU0lPTjogUE9XX1BSRUNJU0lPTixcclxuICAgICAgICBGT1JNQVQ6IEZPUk1BVCxcclxuICAgICAgICBBTFBIQUJFVDogQUxQSEFCRVRcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB2IGlzIGEgQmlnTnVtYmVyIGluc3RhbmNlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICpcclxuICAgICAqIElmIEJpZ051bWJlci5ERUJVRyBpcyB0cnVlLCB0aHJvdyBpZiBhIEJpZ051bWJlciBpbnN0YW5jZSBpcyBub3Qgd2VsbC1mb3JtZWQuXHJcbiAgICAgKlxyXG4gICAgICogdiB7YW55fVxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBJbnZhbGlkIEJpZ051bWJlcjoge3Z9J1xyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIuaXNCaWdOdW1iZXIgPSBmdW5jdGlvbiAodikge1xyXG4gICAgICBpZiAoIXYgfHwgdi5faXNCaWdOdW1iZXIgIT09IHRydWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgaWYgKCFCaWdOdW1iZXIuREVCVUcpIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgdmFyIGksIG4sXHJcbiAgICAgICAgYyA9IHYuYyxcclxuICAgICAgICBlID0gdi5lLFxyXG4gICAgICAgIHMgPSB2LnM7XHJcblxyXG4gICAgICBvdXQ6IGlmICh7fS50b1N0cmluZy5jYWxsKGMpID09ICdbb2JqZWN0IEFycmF5XScpIHtcclxuXHJcbiAgICAgICAgaWYgKChzID09PSAxIHx8IHMgPT09IC0xKSAmJiBlID49IC1NQVggJiYgZSA8PSBNQVggJiYgZSA9PT0gbWF0aGZsb29yKGUpKSB7XHJcblxyXG4gICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGVsZW1lbnQgaXMgemVybywgdGhlIEJpZ051bWJlciB2YWx1ZSBtdXN0IGJlIHplcm8uXHJcbiAgICAgICAgICBpZiAoY1swXSA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoZSA9PT0gMCAmJiBjLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrIG91dDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBDYWxjdWxhdGUgbnVtYmVyIG9mIGRpZ2l0cyB0aGF0IGNbMF0gc2hvdWxkIGhhdmUsIGJhc2VkIG9uIHRoZSBleHBvbmVudC5cclxuICAgICAgICAgIGkgPSAoZSArIDEpICUgTE9HX0JBU0U7XHJcbiAgICAgICAgICBpZiAoaSA8IDEpIGkgKz0gTE9HX0JBU0U7XHJcblxyXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIG51bWJlciBvZiBkaWdpdHMgb2YgY1swXS5cclxuICAgICAgICAgIC8vaWYgKE1hdGguY2VpbChNYXRoLmxvZyhjWzBdICsgMSkgLyBNYXRoLkxOMTApID09IGkpIHtcclxuICAgICAgICAgIGlmIChTdHJpbmcoY1swXSkubGVuZ3RoID09IGkpIHtcclxuXHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgbiA9IGNbaV07XHJcbiAgICAgICAgICAgICAgaWYgKG4gPCAwIHx8IG4gPj0gQkFTRSB8fCBuICE9PSBtYXRoZmxvb3IobikpIGJyZWFrIG91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gTGFzdCBlbGVtZW50IGNhbm5vdCBiZSB6ZXJvLCB1bmxlc3MgaXQgaXMgdGhlIG9ubHkgZWxlbWVudC5cclxuICAgICAgICAgICAgaWYgKG4gIT09IDApIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIC8vIEluZmluaXR5L05hTlxyXG4gICAgICB9IGVsc2UgaWYgKGMgPT09IG51bGwgJiYgZSA9PT0gbnVsbCAmJiAocyA9PT0gbnVsbCB8fCBzID09PSAxIHx8IHMgPT09IC0xKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgIChiaWdudW1iZXJFcnJvciArICdJbnZhbGlkIEJpZ051bWJlcjogJyArIHYpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIG1heGltdW0gb2YgdGhlIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIubWF4aW11bSA9IEJpZ051bWJlci5tYXggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBtYXhPck1pbihhcmd1bWVudHMsIFAubHQpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIG1pbmltdW0gb2YgdGhlIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIubWluaW11bSA9IEJpZ051bWJlci5taW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBtYXhPck1pbihhcmd1bWVudHMsIFAuZ3QpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2l0aCBhIHJhbmRvbSB2YWx1ZSBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gMCBhbmQgbGVzcyB0aGFuIDEsXHJcbiAgICAgKiBhbmQgd2l0aCBkcCwgb3IgREVDSU1BTF9QTEFDRVMgaWYgZHAgaXMgb21pdHRlZCwgZGVjaW1hbCBwbGFjZXMgKG9yIGxlc3MgaWYgdHJhaWxpbmdcclxuICAgICAqIHplcm9zIGFyZSBwcm9kdWNlZCkuXHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB9J1xyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIGNyeXB0byB1bmF2YWlsYWJsZSdcclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLnJhbmRvbSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBwb3cyXzUzID0gMHgyMDAwMDAwMDAwMDAwMDtcclxuXHJcbiAgICAgIC8vIFJldHVybiBhIDUzIGJpdCBpbnRlZ2VyIG4sIHdoZXJlIDAgPD0gbiA8IDkwMDcxOTkyNTQ3NDA5OTIuXHJcbiAgICAgIC8vIENoZWNrIGlmIE1hdGgucmFuZG9tKCkgcHJvZHVjZXMgbW9yZSB0aGFuIDMyIGJpdHMgb2YgcmFuZG9tbmVzcy5cclxuICAgICAgLy8gSWYgaXQgZG9lcywgYXNzdW1lIGF0IGxlYXN0IDUzIGJpdHMgYXJlIHByb2R1Y2VkLCBvdGhlcndpc2UgYXNzdW1lIGF0IGxlYXN0IDMwIGJpdHMuXHJcbiAgICAgIC8vIDB4NDAwMDAwMDAgaXMgMl4zMCwgMHg4MDAwMDAgaXMgMl4yMywgMHgxZmZmZmYgaXMgMl4yMSAtIDEuXHJcbiAgICAgIHZhciByYW5kb201M2JpdEludCA9IChNYXRoLnJhbmRvbSgpICogcG93Ml81MykgJiAweDFmZmZmZlxyXG4gICAgICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXRoZmxvb3IoTWF0aC5yYW5kb20oKSAqIHBvdzJfNTMpOyB9XHJcbiAgICAgICA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICgoTWF0aC5yYW5kb20oKSAqIDB4NDAwMDAwMDAgfCAwKSAqIDB4ODAwMDAwKSArXHJcbiAgICAgICAgIChNYXRoLnJhbmRvbSgpICogMHg4MDAwMDAgfCAwKTsgfTtcclxuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZHApIHtcclxuICAgICAgICB2YXIgYSwgYiwgZSwgaywgdixcclxuICAgICAgICAgIGkgPSAwLFxyXG4gICAgICAgICAgYyA9IFtdLFxyXG4gICAgICAgICAgcmFuZCA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuXHJcbiAgICAgICAgaWYgKGRwID09IG51bGwpIGRwID0gREVDSU1BTF9QTEFDRVM7XHJcbiAgICAgICAgZWxzZSBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuXHJcbiAgICAgICAgayA9IG1hdGhjZWlsKGRwIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgICAgICBpZiAoQ1JZUFRPKSB7XHJcblxyXG4gICAgICAgICAgLy8gQnJvd3NlcnMgc3VwcG9ydGluZyBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLlxyXG4gICAgICAgICAgaWYgKGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcclxuXHJcbiAgICAgICAgICAgIGEgPSBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheShrICo9IDIpKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoOyBpIDwgazspIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gNTMgYml0czpcclxuICAgICAgICAgICAgICAvLyAoKE1hdGgucG93KDIsIDMyKSAtIDEpICogTWF0aC5wb3coMiwgMjEpKS50b1N0cmluZygyKVxyXG4gICAgICAgICAgICAgIC8vIDExMTExIDExMTExMTExIDExMTExMTExIDExMTExMTExIDExMTAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwXHJcbiAgICAgICAgICAgICAgLy8gKChNYXRoLnBvdygyLCAzMikgLSAxKSA+Pj4gMTEpLnRvU3RyaW5nKDIpXHJcbiAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTExMTEgMTExMTExMTEgMTExMTExMTFcclxuICAgICAgICAgICAgICAvLyAweDIwMDAwIGlzIDJeMjEuXHJcbiAgICAgICAgICAgICAgdiA9IGFbaV0gKiAweDIwMDAwICsgKGFbaSArIDFdID4+PiAxMSk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFJlamVjdGlvbiBzYW1wbGluZzpcclxuICAgICAgICAgICAgICAvLyAwIDw9IHYgPCA5MDA3MTk5MjU0NzQwOTkyXHJcbiAgICAgICAgICAgICAgLy8gUHJvYmFiaWxpdHkgdGhhdCB2ID49IDllMTUsIGlzXHJcbiAgICAgICAgICAgICAgLy8gNzE5OTI1NDc0MDk5MiAvIDkwMDcxOTkyNTQ3NDA5OTIgfj0gMC4wMDA4LCBpLmUuIDEgaW4gMTI1MVxyXG4gICAgICAgICAgICAgIGlmICh2ID49IDllMTUpIHtcclxuICAgICAgICAgICAgICAgIGIgPSBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgyKSk7XHJcbiAgICAgICAgICAgICAgICBhW2ldID0gYlswXTtcclxuICAgICAgICAgICAgICAgIGFbaSArIDFdID0gYlsxXTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIDAgPD0gdiA8PSA4OTk5OTk5OTk5OTk5OTk5XHJcbiAgICAgICAgICAgICAgICAvLyAwIDw9ICh2ICUgMWUxNCkgPD0gOTk5OTk5OTk5OTk5OTlcclxuICAgICAgICAgICAgICAgIGMucHVzaCh2ICUgMWUxNCk7XHJcbiAgICAgICAgICAgICAgICBpICs9IDI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBrIC8gMjtcclxuXHJcbiAgICAgICAgICAvLyBOb2RlLmpzIHN1cHBvcnRpbmcgY3J5cHRvLnJhbmRvbUJ5dGVzLlxyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcnlwdG8ucmFuZG9tQnl0ZXMpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGJ1ZmZlclxyXG4gICAgICAgICAgICBhID0gY3J5cHRvLnJhbmRvbUJ5dGVzKGsgKj0gNyk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIDB4MTAwMDAwMDAwMDAwMCBpcyAyXjQ4LCAweDEwMDAwMDAwMDAwIGlzIDJeNDBcclxuICAgICAgICAgICAgICAvLyAweDEwMDAwMDAwMCBpcyAyXjMyLCAweDEwMDAwMDAgaXMgMl4yNFxyXG4gICAgICAgICAgICAgIC8vIDExMTExIDExMTExMTExIDExMTExMTExIDExMTExMTExIDExMTExMTExIDExMTExMTExIDExMTExMTExXHJcbiAgICAgICAgICAgICAgLy8gMCA8PSB2IDwgOTAwNzE5OTI1NDc0MDk5MlxyXG4gICAgICAgICAgICAgIHYgPSAoKGFbaV0gJiAzMSkgKiAweDEwMDAwMDAwMDAwMDApICsgKGFbaSArIDFdICogMHgxMDAwMDAwMDAwMCkgK1xyXG4gICAgICAgICAgICAgICAgIChhW2kgKyAyXSAqIDB4MTAwMDAwMDAwKSArIChhW2kgKyAzXSAqIDB4MTAwMDAwMCkgK1xyXG4gICAgICAgICAgICAgICAgIChhW2kgKyA0XSA8PCAxNikgKyAoYVtpICsgNV0gPDwgOCkgKyBhW2kgKyA2XTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHYgPj0gOWUxNSkge1xyXG4gICAgICAgICAgICAgICAgY3J5cHRvLnJhbmRvbUJ5dGVzKDcpLmNvcHkoYSwgaSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyAwIDw9ICh2ICUgMWUxNCkgPD0gOTk5OTk5OTk5OTk5OTlcclxuICAgICAgICAgICAgICAgIGMucHVzaCh2ICUgMWUxNCk7XHJcbiAgICAgICAgICAgICAgICBpICs9IDc7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBrIC8gNztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIENSWVBUTyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ2NyeXB0byB1bmF2YWlsYWJsZScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVXNlIE1hdGgucmFuZG9tLlxyXG4gICAgICAgIGlmICghQ1JZUFRPKSB7XHJcblxyXG4gICAgICAgICAgZm9yICg7IGkgPCBrOykge1xyXG4gICAgICAgICAgICB2ID0gcmFuZG9tNTNiaXRJbnQoKTtcclxuICAgICAgICAgICAgaWYgKHYgPCA5ZTE1KSBjW2krK10gPSB2ICUgMWUxNDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGsgPSBjWy0taV07XHJcbiAgICAgICAgZHAgJT0gTE9HX0JBU0U7XHJcblxyXG4gICAgICAgIC8vIENvbnZlcnQgdHJhaWxpbmcgZGlnaXRzIHRvIHplcm9zIGFjY29yZGluZyB0byBkcC5cclxuICAgICAgICBpZiAoayAmJiBkcCkge1xyXG4gICAgICAgICAgdiA9IFBPV1NfVEVOW0xPR19CQVNFIC0gZHBdO1xyXG4gICAgICAgICAgY1tpXSA9IG1hdGhmbG9vcihrIC8gdikgKiB2O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIGVsZW1lbnRzIHdoaWNoIGFyZSB6ZXJvLlxyXG4gICAgICAgIGZvciAoOyBjW2ldID09PSAwOyBjLnBvcCgpLCBpLS0pO1xyXG5cclxuICAgICAgICAvLyBaZXJvP1xyXG4gICAgICAgIGlmIChpIDwgMCkge1xyXG4gICAgICAgICAgYyA9IFtlID0gMF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAvLyBSZW1vdmUgbGVhZGluZyBlbGVtZW50cyB3aGljaCBhcmUgemVybyBhbmQgYWRqdXN0IGV4cG9uZW50IGFjY29yZGluZ2x5LlxyXG4gICAgICAgICAgZm9yIChlID0gLTEgOyBjWzBdID09PSAwOyBjLnNwbGljZSgwLCAxKSwgZSAtPSBMT0dfQkFTRSk7XHJcblxyXG4gICAgICAgICAgLy8gQ291bnQgdGhlIGRpZ2l0cyBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiBjIHRvIGRldGVybWluZSBsZWFkaW5nIHplcm9zLCBhbmQuLi5cclxuICAgICAgICAgIGZvciAoaSA9IDEsIHYgPSBjWzBdOyB2ID49IDEwOyB2IC89IDEwLCBpKyspO1xyXG5cclxuICAgICAgICAgIC8vIGFkanVzdCB0aGUgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgICAgICBpZiAoaSA8IExPR19CQVNFKSBlIC09IExPR19CQVNFIC0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJhbmQuZSA9IGU7XHJcbiAgICAgICAgcmFuZC5jID0gYztcclxuICAgICAgICByZXR1cm4gcmFuZDtcclxuICAgICAgfTtcclxuICAgIH0pKCk7XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHN1bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5zdW0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBpID0gMSxcclxuICAgICAgICBhcmdzID0gYXJndW1lbnRzLFxyXG4gICAgICAgIHN1bSA9IG5ldyBCaWdOdW1iZXIoYXJnc1swXSk7XHJcbiAgICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7KSBzdW0gPSBzdW0ucGx1cyhhcmdzW2krK10pO1xyXG4gICAgICByZXR1cm4gc3VtO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLy8gUFJJVkFURSBGVU5DVElPTlNcclxuXHJcblxyXG4gICAgLy8gQ2FsbGVkIGJ5IEJpZ051bWJlciBhbmQgQmlnTnVtYmVyLnByb3RvdHlwZS50b1N0cmluZy5cclxuICAgIGNvbnZlcnRCYXNlID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIGRlY2ltYWwgPSAnMDEyMzQ1Njc4OSc7XHJcblxyXG4gICAgICAvKlxyXG4gICAgICAgKiBDb252ZXJ0IHN0cmluZyBvZiBiYXNlSW4gdG8gYW4gYXJyYXkgb2YgbnVtYmVycyBvZiBiYXNlT3V0LlxyXG4gICAgICAgKiBFZy4gdG9CYXNlT3V0KCcyNTUnLCAxMCwgMTYpIHJldHVybnMgWzE1LCAxNV0uXHJcbiAgICAgICAqIEVnLiB0b0Jhc2VPdXQoJ2ZmJywgMTYsIDEwKSByZXR1cm5zIFsyLCA1LCA1XS5cclxuICAgICAgICovXHJcbiAgICAgIGZ1bmN0aW9uIHRvQmFzZU91dChzdHIsIGJhc2VJbiwgYmFzZU91dCwgYWxwaGFiZXQpIHtcclxuICAgICAgICB2YXIgaixcclxuICAgICAgICAgIGFyciA9IFswXSxcclxuICAgICAgICAgIGFyckwsXHJcbiAgICAgICAgICBpID0gMCxcclxuICAgICAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAoOyBpIDwgbGVuOykge1xyXG4gICAgICAgICAgZm9yIChhcnJMID0gYXJyLmxlbmd0aDsgYXJyTC0tOyBhcnJbYXJyTF0gKj0gYmFzZUluKTtcclxuXHJcbiAgICAgICAgICBhcnJbMF0gKz0gYWxwaGFiZXQuaW5kZXhPZihzdHIuY2hhckF0KGkrKykpO1xyXG5cclxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBhcnIubGVuZ3RoOyBqKyspIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChhcnJbal0gPiBiYXNlT3V0IC0gMSkge1xyXG4gICAgICAgICAgICAgIGlmIChhcnJbaiArIDFdID09IG51bGwpIGFycltqICsgMV0gPSAwO1xyXG4gICAgICAgICAgICAgIGFycltqICsgMV0gKz0gYXJyW2pdIC8gYmFzZU91dCB8IDA7XHJcbiAgICAgICAgICAgICAgYXJyW2pdICU9IGJhc2VPdXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhcnIucmV2ZXJzZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDb252ZXJ0IGEgbnVtZXJpYyBzdHJpbmcgb2YgYmFzZUluIHRvIGEgbnVtZXJpYyBzdHJpbmcgb2YgYmFzZU91dC5cclxuICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyB0b1N0cmluZywgd2UgYXJlIGNvbnZlcnRpbmcgZnJvbSBiYXNlIDEwIHRvIGJhc2VPdXQuXHJcbiAgICAgIC8vIElmIHRoZSBjYWxsZXIgaXMgQmlnTnVtYmVyLCB3ZSBhcmUgY29udmVydGluZyBmcm9tIGJhc2VJbiB0byBiYXNlIDEwLlxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHN0ciwgYmFzZUluLCBiYXNlT3V0LCBzaWduLCBjYWxsZXJJc1RvU3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIGFscGhhYmV0LCBkLCBlLCBrLCByLCB4LCB4YywgeSxcclxuICAgICAgICAgIGkgPSBzdHIuaW5kZXhPZignLicpLFxyXG4gICAgICAgICAgZHAgPSBERUNJTUFMX1BMQUNFUyxcclxuICAgICAgICAgIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuXHJcbiAgICAgICAgLy8gTm9uLWludGVnZXIuXHJcbiAgICAgICAgaWYgKGkgPj0gMCkge1xyXG4gICAgICAgICAgayA9IFBPV19QUkVDSVNJT047XHJcblxyXG4gICAgICAgICAgLy8gVW5saW1pdGVkIHByZWNpc2lvbi5cclxuICAgICAgICAgIFBPV19QUkVDSVNJT04gPSAwO1xyXG4gICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoJy4nLCAnJyk7XHJcbiAgICAgICAgICB5ID0gbmV3IEJpZ051bWJlcihiYXNlSW4pO1xyXG4gICAgICAgICAgeCA9IHkucG93KHN0ci5sZW5ndGggLSBpKTtcclxuICAgICAgICAgIFBPV19QUkVDSVNJT04gPSBrO1xyXG5cclxuICAgICAgICAgIC8vIENvbnZlcnQgc3RyIGFzIGlmIGFuIGludGVnZXIsIHRoZW4gcmVzdG9yZSB0aGUgZnJhY3Rpb24gcGFydCBieSBkaXZpZGluZyB0aGVcclxuICAgICAgICAgIC8vIHJlc3VsdCBieSBpdHMgYmFzZSByYWlzZWQgdG8gYSBwb3dlci5cclxuXHJcbiAgICAgICAgICB5LmMgPSB0b0Jhc2VPdXQodG9GaXhlZFBvaW50KGNvZWZmVG9TdHJpbmcoeC5jKSwgeC5lLCAnMCcpLFxyXG4gICAgICAgICAgIDEwLCBiYXNlT3V0LCBkZWNpbWFsKTtcclxuICAgICAgICAgIHkuZSA9IHkuYy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHRoZSBudW1iZXIgYXMgaW50ZWdlci5cclxuXHJcbiAgICAgICAgeGMgPSB0b0Jhc2VPdXQoc3RyLCBiYXNlSW4sIGJhc2VPdXQsIGNhbGxlcklzVG9TdHJpbmdcclxuICAgICAgICAgPyAoYWxwaGFiZXQgPSBBTFBIQUJFVCwgZGVjaW1hbClcclxuICAgICAgICAgOiAoYWxwaGFiZXQgPSBkZWNpbWFsLCBBTFBIQUJFVCkpO1xyXG5cclxuICAgICAgICAvLyB4YyBub3cgcmVwcmVzZW50cyBzdHIgYXMgYW4gaW50ZWdlciBhbmQgY29udmVydGVkIHRvIGJhc2VPdXQuIGUgaXMgdGhlIGV4cG9uZW50LlxyXG4gICAgICAgIGUgPSBrID0geGMubGVuZ3RoO1xyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgZm9yICg7IHhjWy0ta10gPT0gMDsgeGMucG9wKCkpO1xyXG5cclxuICAgICAgICAvLyBaZXJvP1xyXG4gICAgICAgIGlmICgheGNbMF0pIHJldHVybiBhbHBoYWJldC5jaGFyQXQoMCk7XHJcblxyXG4gICAgICAgIC8vIERvZXMgc3RyIHJlcHJlc2VudCBhbiBpbnRlZ2VyPyBJZiBzbywgbm8gbmVlZCBmb3IgdGhlIGRpdmlzaW9uLlxyXG4gICAgICAgIGlmIChpIDwgMCkge1xyXG4gICAgICAgICAgLS1lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4LmMgPSB4YztcclxuICAgICAgICAgIHguZSA9IGU7XHJcblxyXG4gICAgICAgICAgLy8gVGhlIHNpZ24gaXMgbmVlZGVkIGZvciBjb3JyZWN0IHJvdW5kaW5nLlxyXG4gICAgICAgICAgeC5zID0gc2lnbjtcclxuICAgICAgICAgIHggPSBkaXYoeCwgeSwgZHAsIHJtLCBiYXNlT3V0KTtcclxuICAgICAgICAgIHhjID0geC5jO1xyXG4gICAgICAgICAgciA9IHgucjtcclxuICAgICAgICAgIGUgPSB4LmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB4YyBub3cgcmVwcmVzZW50cyBzdHIgY29udmVydGVkIHRvIGJhc2VPdXQuXHJcblxyXG4gICAgICAgIC8vIFRIZSBpbmRleCBvZiB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgZCA9IGUgKyBkcCArIDE7XHJcblxyXG4gICAgICAgIC8vIFRoZSByb3VuZGluZyBkaWdpdDogdGhlIGRpZ2l0IHRvIHRoZSByaWdodCBvZiB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cC5cclxuICAgICAgICBpID0geGNbZF07XHJcblxyXG4gICAgICAgIC8vIExvb2sgYXQgdGhlIHJvdW5kaW5nIGRpZ2l0cyBhbmQgbW9kZSB0byBkZXRlcm1pbmUgd2hldGhlciB0byByb3VuZCB1cC5cclxuXHJcbiAgICAgICAgayA9IGJhc2VPdXQgLyAyO1xyXG4gICAgICAgIHIgPSByIHx8IGQgPCAwIHx8IHhjW2QgKyAxXSAhPSBudWxsO1xyXG5cclxuICAgICAgICByID0gcm0gPCA0ID8gKGkgIT0gbnVsbCB8fCByKSAmJiAocm0gPT0gMCB8fCBybSA9PSAoeC5zIDwgMCA/IDMgOiAyKSlcclxuICAgICAgICAgICAgICA6IGkgPiBrIHx8IGkgPT0gayAmJihybSA9PSA0IHx8IHIgfHwgcm0gPT0gNiAmJiB4Y1tkIC0gMV0gJiAxIHx8XHJcbiAgICAgICAgICAgICAgIHJtID09ICh4LnMgPCAwID8gOCA6IDcpKTtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGluZGV4IG9mIHRoZSByb3VuZGluZyBkaWdpdCBpcyBub3QgZ3JlYXRlciB0aGFuIHplcm8sIG9yIHhjIHJlcHJlc2VudHNcclxuICAgICAgICAvLyB6ZXJvLCB0aGVuIHRoZSByZXN1bHQgb2YgdGhlIGJhc2UgY29udmVyc2lvbiBpcyB6ZXJvIG9yLCBpZiByb3VuZGluZyB1cCwgYSB2YWx1ZVxyXG4gICAgICAgIC8vIHN1Y2ggYXMgMC4wMDAwMS5cclxuICAgICAgICBpZiAoZCA8IDEgfHwgIXhjWzBdKSB7XHJcblxyXG4gICAgICAgICAgLy8gMV4tZHAgb3IgMFxyXG4gICAgICAgICAgc3RyID0gciA/IHRvRml4ZWRQb2ludChhbHBoYWJldC5jaGFyQXQoMSksIC1kcCwgYWxwaGFiZXQuY2hhckF0KDApKSA6IGFscGhhYmV0LmNoYXJBdCgwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIFRydW5jYXRlIHhjIHRvIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMuXHJcbiAgICAgICAgICB4Yy5sZW5ndGggPSBkO1xyXG5cclxuICAgICAgICAgIC8vIFJvdW5kIHVwP1xyXG4gICAgICAgICAgaWYgKHIpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIFJvdW5kaW5nIHVwIG1heSBtZWFuIHRoZSBwcmV2aW91cyBkaWdpdCBoYXMgdG8gYmUgcm91bmRlZCB1cCBhbmQgc28gb24uXHJcbiAgICAgICAgICAgIGZvciAoLS1iYXNlT3V0OyArK3hjWy0tZF0gPiBiYXNlT3V0Oykge1xyXG4gICAgICAgICAgICAgIHhjW2RdID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKCFkKSB7XHJcbiAgICAgICAgICAgICAgICArK2U7XHJcbiAgICAgICAgICAgICAgICB4YyA9IFsxXS5jb25jYXQoeGMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIERldGVybWluZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICAgIGZvciAoayA9IHhjLmxlbmd0aDsgIXhjWy0ta107KTtcclxuXHJcbiAgICAgICAgICAvLyBFLmcuIFs0LCAxMSwgMTVdIGJlY29tZXMgNGJmLlxyXG4gICAgICAgICAgZm9yIChpID0gMCwgc3RyID0gJyc7IGkgPD0gazsgc3RyICs9IGFscGhhYmV0LmNoYXJBdCh4Y1tpKytdKSk7XHJcblxyXG4gICAgICAgICAgLy8gQWRkIGxlYWRpbmcgemVyb3MsIGRlY2ltYWwgcG9pbnQgYW5kIHRyYWlsaW5nIHplcm9zIGFzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgc3RyID0gdG9GaXhlZFBvaW50KHN0ciwgZSwgYWxwaGFiZXQuY2hhckF0KDApKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRoZSBjYWxsZXIgd2lsbCBhZGQgdGhlIHNpZ24uXHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgICAgfTtcclxuICAgIH0pKCk7XHJcblxyXG5cclxuICAgIC8vIFBlcmZvcm0gZGl2aXNpb24gaW4gdGhlIHNwZWNpZmllZCBiYXNlLiBDYWxsZWQgYnkgZGl2IGFuZCBjb252ZXJ0QmFzZS5cclxuICAgIGRpdiA9IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAvLyBBc3N1bWUgbm9uLXplcm8geCBhbmQgay5cclxuICAgICAgZnVuY3Rpb24gbXVsdGlwbHkoeCwgaywgYmFzZSkge1xyXG4gICAgICAgIHZhciBtLCB0ZW1wLCB4bG8sIHhoaSxcclxuICAgICAgICAgIGNhcnJ5ID0gMCxcclxuICAgICAgICAgIGkgPSB4Lmxlbmd0aCxcclxuICAgICAgICAgIGtsbyA9IGsgJSBTUVJUX0JBU0UsXHJcbiAgICAgICAgICBraGkgPSBrIC8gU1FSVF9CQVNFIHwgMDtcclxuXHJcbiAgICAgICAgZm9yICh4ID0geC5zbGljZSgpOyBpLS07KSB7XHJcbiAgICAgICAgICB4bG8gPSB4W2ldICUgU1FSVF9CQVNFO1xyXG4gICAgICAgICAgeGhpID0geFtpXSAvIFNRUlRfQkFTRSB8IDA7XHJcbiAgICAgICAgICBtID0ga2hpICogeGxvICsgeGhpICoga2xvO1xyXG4gICAgICAgICAgdGVtcCA9IGtsbyAqIHhsbyArICgobSAlIFNRUlRfQkFTRSkgKiBTUVJUX0JBU0UpICsgY2Fycnk7XHJcbiAgICAgICAgICBjYXJyeSA9ICh0ZW1wIC8gYmFzZSB8IDApICsgKG0gLyBTUVJUX0JBU0UgfCAwKSArIGtoaSAqIHhoaTtcclxuICAgICAgICAgIHhbaV0gPSB0ZW1wICUgYmFzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjYXJyeSkgeCA9IFtjYXJyeV0uY29uY2F0KHgpO1xyXG5cclxuICAgICAgICByZXR1cm4geDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gY29tcGFyZShhLCBiLCBhTCwgYkwpIHtcclxuICAgICAgICB2YXIgaSwgY21wO1xyXG5cclxuICAgICAgICBpZiAoYUwgIT0gYkwpIHtcclxuICAgICAgICAgIGNtcCA9IGFMID4gYkwgPyAxIDogLTE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICBmb3IgKGkgPSBjbXAgPSAwOyBpIDwgYUw7IGkrKykge1xyXG5cclxuICAgICAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkge1xyXG4gICAgICAgICAgICAgIGNtcCA9IGFbaV0gPiBiW2ldID8gMSA6IC0xO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY21wO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBzdWJ0cmFjdChhLCBiLCBhTCwgYmFzZSkge1xyXG4gICAgICAgIHZhciBpID0gMDtcclxuXHJcbiAgICAgICAgLy8gU3VidHJhY3QgYiBmcm9tIGEuXHJcbiAgICAgICAgZm9yICg7IGFMLS07KSB7XHJcbiAgICAgICAgICBhW2FMXSAtPSBpO1xyXG4gICAgICAgICAgaSA9IGFbYUxdIDwgYlthTF0gPyAxIDogMDtcclxuICAgICAgICAgIGFbYUxdID0gaSAqIGJhc2UgKyBhW2FMXSAtIGJbYUxdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgICAgZm9yICg7ICFhWzBdICYmIGEubGVuZ3RoID4gMTsgYS5zcGxpY2UoMCwgMSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB4OiBkaXZpZGVuZCwgeTogZGl2aXNvci5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5LCBkcCwgcm0sIGJhc2UpIHtcclxuICAgICAgICB2YXIgY21wLCBlLCBpLCBtb3JlLCBuLCBwcm9kLCBwcm9kTCwgcSwgcWMsIHJlbSwgcmVtTCwgcmVtMCwgeGksIHhMLCB5YzAsXHJcbiAgICAgICAgICB5TCwgeXosXHJcbiAgICAgICAgICBzID0geC5zID09IHkucyA/IDEgOiAtMSxcclxuICAgICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgICAgeWMgPSB5LmM7XHJcblxyXG4gICAgICAgIC8vIEVpdGhlciBOYU4sIEluZmluaXR5IG9yIDA/XHJcbiAgICAgICAgaWYgKCF4YyB8fCAheGNbMF0gfHwgIXljIHx8ICF5Y1swXSkge1xyXG5cclxuICAgICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKFxyXG5cclxuICAgICAgICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBOYU4sIG9yIGJvdGggSW5maW5pdHkgb3IgMC5cclxuICAgICAgICAgICAheC5zIHx8ICF5LnMgfHwgKHhjID8geWMgJiYgeGNbMF0gPT0geWNbMF0gOiAheWMpID8gTmFOIDpcclxuXHJcbiAgICAgICAgICAgIC8vIFJldHVybiDCsTAgaWYgeCBpcyDCsTAgb3IgeSBpcyDCsUluZmluaXR5LCBvciByZXR1cm4gwrFJbmZpbml0eSBhcyB5IGlzIMKxMC5cclxuICAgICAgICAgICAgeGMgJiYgeGNbMF0gPT0gMCB8fCAheWMgPyBzICogMCA6IHMgLyAwXHJcbiAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBxID0gbmV3IEJpZ051bWJlcihzKTtcclxuICAgICAgICBxYyA9IHEuYyA9IFtdO1xyXG4gICAgICAgIGUgPSB4LmUgLSB5LmU7XHJcbiAgICAgICAgcyA9IGRwICsgZSArIDE7XHJcblxyXG4gICAgICAgIGlmICghYmFzZSkge1xyXG4gICAgICAgICAgYmFzZSA9IEJBU0U7XHJcbiAgICAgICAgICBlID0gYml0Rmxvb3IoeC5lIC8gTE9HX0JBU0UpIC0gYml0Rmxvb3IoeS5lIC8gTE9HX0JBU0UpO1xyXG4gICAgICAgICAgcyA9IHMgLyBMT0dfQkFTRSB8IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZXN1bHQgZXhwb25lbnQgbWF5IGJlIG9uZSBsZXNzIHRoZW4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgZS5cclxuICAgICAgICAvLyBUaGUgY29lZmZpY2llbnRzIG9mIHRoZSBCaWdOdW1iZXJzIGZyb20gY29udmVydEJhc2UgbWF5IGhhdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgZm9yIChpID0gMDsgeWNbaV0gPT0gKHhjW2ldIHx8IDApOyBpKyspO1xyXG5cclxuICAgICAgICBpZiAoeWNbaV0gPiAoeGNbaV0gfHwgMCkpIGUtLTtcclxuXHJcbiAgICAgICAgaWYgKHMgPCAwKSB7XHJcbiAgICAgICAgICBxYy5wdXNoKDEpO1xyXG4gICAgICAgICAgbW9yZSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHhMID0geGMubGVuZ3RoO1xyXG4gICAgICAgICAgeUwgPSB5Yy5sZW5ndGg7XHJcbiAgICAgICAgICBpID0gMDtcclxuICAgICAgICAgIHMgKz0gMjtcclxuXHJcbiAgICAgICAgICAvLyBOb3JtYWxpc2UgeGMgYW5kIHljIHNvIGhpZ2hlc3Qgb3JkZXIgZGlnaXQgb2YgeWMgaXMgPj0gYmFzZSAvIDIuXHJcblxyXG4gICAgICAgICAgbiA9IG1hdGhmbG9vcihiYXNlIC8gKHljWzBdICsgMSkpO1xyXG5cclxuICAgICAgICAgIC8vIE5vdCBuZWNlc3NhcnksIGJ1dCB0byBoYW5kbGUgb2RkIGJhc2VzIHdoZXJlIHljWzBdID09IChiYXNlIC8gMikgLSAxLlxyXG4gICAgICAgICAgLy8gaWYgKG4gPiAxIHx8IG4rKyA9PSAxICYmIHljWzBdIDwgYmFzZSAvIDIpIHtcclxuICAgICAgICAgIGlmIChuID4gMSkge1xyXG4gICAgICAgICAgICB5YyA9IG11bHRpcGx5KHljLCBuLCBiYXNlKTtcclxuICAgICAgICAgICAgeGMgPSBtdWx0aXBseSh4YywgbiwgYmFzZSk7XHJcbiAgICAgICAgICAgIHlMID0geWMubGVuZ3RoO1xyXG4gICAgICAgICAgICB4TCA9IHhjLmxlbmd0aDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB4aSA9IHlMO1xyXG4gICAgICAgICAgcmVtID0geGMuc2xpY2UoMCwgeUwpO1xyXG4gICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgLy8gQWRkIHplcm9zIHRvIG1ha2UgcmVtYWluZGVyIGFzIGxvbmcgYXMgZGl2aXNvci5cclxuICAgICAgICAgIGZvciAoOyByZW1MIDwgeUw7IHJlbVtyZW1MKytdID0gMCk7XHJcbiAgICAgICAgICB5eiA9IHljLnNsaWNlKCk7XHJcbiAgICAgICAgICB5eiA9IFswXS5jb25jYXQoeXopO1xyXG4gICAgICAgICAgeWMwID0geWNbMF07XHJcbiAgICAgICAgICBpZiAoeWNbMV0gPj0gYmFzZSAvIDIpIHljMCsrO1xyXG4gICAgICAgICAgLy8gTm90IG5lY2Vzc2FyeSwgYnV0IHRvIHByZXZlbnQgdHJpYWwgZGlnaXQgbiA+IGJhc2UsIHdoZW4gdXNpbmcgYmFzZSAzLlxyXG4gICAgICAgICAgLy8gZWxzZSBpZiAoYmFzZSA9PSAzICYmIHljMCA9PSAxKSB5YzAgPSAxICsgMWUtMTU7XHJcblxyXG4gICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBuID0gMDtcclxuXHJcbiAgICAgICAgICAgIC8vIENvbXBhcmUgZGl2aXNvciBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBjbXAgPSBjb21wYXJlKHljLCByZW0sIHlMLCByZW1MKTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIGRpdmlzb3IgPCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGlmIChjbXAgPCAwKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0cmlhbCBkaWdpdCwgbi5cclxuXHJcbiAgICAgICAgICAgICAgcmVtMCA9IHJlbVswXTtcclxuICAgICAgICAgICAgICBpZiAoeUwgIT0gcmVtTCkgcmVtMCA9IHJlbTAgKiBiYXNlICsgKHJlbVsxXSB8fCAwKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gbiBpcyBob3cgbWFueSB0aW1lcyB0aGUgZGl2aXNvciBnb2VzIGludG8gdGhlIGN1cnJlbnQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIG4gPSBtYXRoZmxvb3IocmVtMCAvIHljMCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vICBBbGdvcml0aG06XHJcbiAgICAgICAgICAgICAgLy8gIHByb2R1Y3QgPSBkaXZpc29yIG11bHRpcGxpZWQgYnkgdHJpYWwgZGlnaXQgKG4pLlxyXG4gICAgICAgICAgICAgIC8vICBDb21wYXJlIHByb2R1Y3QgYW5kIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAvLyAgSWYgcHJvZHVjdCBpcyBncmVhdGVyIHRoYW4gcmVtYWluZGVyOlxyXG4gICAgICAgICAgICAgIC8vICAgIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSBwcm9kdWN0LCBkZWNyZW1lbnQgdHJpYWwgZGlnaXQuXHJcbiAgICAgICAgICAgICAgLy8gIFN1YnRyYWN0IHByb2R1Y3QgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgLy8gIElmIHByb2R1Y3Qgd2FzIGxlc3MgdGhhbiByZW1haW5kZXIgYXQgdGhlIGxhc3QgY29tcGFyZTpcclxuICAgICAgICAgICAgICAvLyAgICBDb21wYXJlIG5ldyByZW1haW5kZXIgYW5kIGRpdmlzb3IuXHJcbiAgICAgICAgICAgICAgLy8gICAgSWYgcmVtYWluZGVyIGlzIGdyZWF0ZXIgdGhhbiBkaXZpc29yOlxyXG4gICAgICAgICAgICAgIC8vICAgICAgU3VidHJhY3QgZGl2aXNvciBmcm9tIHJlbWFpbmRlciwgaW5jcmVtZW50IHRyaWFsIGRpZ2l0LlxyXG5cclxuICAgICAgICAgICAgICBpZiAobiA+IDEpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBuIG1heSBiZSA+IGJhc2Ugb25seSB3aGVuIGJhc2UgaXMgMy5cclxuICAgICAgICAgICAgICAgIGlmIChuID49IGJhc2UpIG4gPSBiYXNlIC0gMTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID0gZGl2aXNvciAqIHRyaWFsIGRpZ2l0LlxyXG4gICAgICAgICAgICAgICAgcHJvZCA9IG11bHRpcGx5KHljLCBuLCBiYXNlKTtcclxuICAgICAgICAgICAgICAgIHByb2RMID0gcHJvZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDb21wYXJlIHByb2R1Y3QgYW5kIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgIC8vIElmIHByb2R1Y3QgPiByZW1haW5kZXIgdGhlbiB0cmlhbCBkaWdpdCBuIHRvbyBoaWdoLlxyXG4gICAgICAgICAgICAgICAgLy8gbiBpcyAxIHRvbyBoaWdoIGFib3V0IDUlIG9mIHRoZSB0aW1lLCBhbmQgaXMgbm90IGtub3duIHRvIGhhdmVcclxuICAgICAgICAgICAgICAgIC8vIGV2ZXIgYmVlbiBtb3JlIHRoYW4gMSB0b28gaGlnaC5cclxuICAgICAgICAgICAgICAgIHdoaWxlIChjb21wYXJlKHByb2QsIHJlbSwgcHJvZEwsIHJlbUwpID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgbi0tO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gU3VidHJhY3QgZGl2aXNvciBmcm9tIHByb2R1Y3QuXHJcbiAgICAgICAgICAgICAgICAgIHN1YnRyYWN0KHByb2QsIHlMIDwgcHJvZEwgPyB5eiA6IHljLCBwcm9kTCwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHByb2RMID0gcHJvZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIGNtcCA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBuIGlzIDAgb3IgMSwgY21wIGlzIC0xLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgbiBpcyAwLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbXBhcmUgeWMgYW5kIHJlbSBhZ2FpbiBiZWxvdyxcclxuICAgICAgICAgICAgICAgIC8vIHNvIGNoYW5nZSBjbXAgdG8gMSB0byBhdm9pZCBpdC5cclxuICAgICAgICAgICAgICAgIC8vIElmIG4gaXMgMSwgbGVhdmUgY21wIGFzIC0xLCBzbyB5YyBhbmQgcmVtIGFyZSBjb21wYXJlZCBhZ2Fpbi5cclxuICAgICAgICAgICAgICAgIGlmIChuID09IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIGRpdmlzb3IgPCByZW1haW5kZXIsIHNvIG4gbXVzdCBiZSBhdCBsZWFzdCAxLlxyXG4gICAgICAgICAgICAgICAgICBjbXAgPSBuID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID0gZGl2aXNvclxyXG4gICAgICAgICAgICAgICAgcHJvZCA9IHljLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICBwcm9kTCA9IHByb2QubGVuZ3RoO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKHByb2RMIDwgcmVtTCkgcHJvZCA9IFswXS5jb25jYXQocHJvZCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFN1YnRyYWN0IHByb2R1Y3QgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgc3VidHJhY3QocmVtLCBwcm9kLCByZW1MLCBiYXNlKTtcclxuICAgICAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgIC8vIElmIHByb2R1Y3Qgd2FzIDwgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDb21wYXJlIGRpdmlzb3IgYW5kIG5ldyByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBkaXZpc29yIDwgbmV3IHJlbWFpbmRlciwgc3VidHJhY3QgZGl2aXNvciBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgIC8vIFRyaWFsIGRpZ2l0IG4gdG9vIGxvdy5cclxuICAgICAgICAgICAgICAgIC8vIG4gaXMgMSB0b28gbG93IGFib3V0IDUlIG9mIHRoZSB0aW1lLCBhbmQgdmVyeSByYXJlbHkgMiB0b28gbG93LlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvbXBhcmUoeWMsIHJlbSwgeUwsIHJlbUwpIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICBuKys7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChyZW0sIHlMIDwgcmVtTCA/IHl6IDogeWMsIHJlbUwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgbisrO1xyXG4gICAgICAgICAgICAgIHJlbSA9IFswXTtcclxuICAgICAgICAgICAgfSAvLyBlbHNlIGNtcCA9PT0gMSBhbmQgbiB3aWxsIGJlIDBcclxuXHJcbiAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV4dCBkaWdpdCwgbiwgdG8gdGhlIHJlc3VsdCBhcnJheS5cclxuICAgICAgICAgICAgcWNbaSsrXSA9IG47XHJcblxyXG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgaWYgKHJlbVswXSkge1xyXG4gICAgICAgICAgICAgIHJlbVtyZW1MKytdID0geGNbeGldIHx8IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmVtID0gW3hjW3hpXV07XHJcbiAgICAgICAgICAgICAgcmVtTCA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gd2hpbGUgKCh4aSsrIDwgeEwgfHwgcmVtWzBdICE9IG51bGwpICYmIHMtLSk7XHJcblxyXG4gICAgICAgICAgbW9yZSA9IHJlbVswXSAhPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8vIExlYWRpbmcgemVybz9cclxuICAgICAgICAgIGlmICghcWNbMF0pIHFjLnNwbGljZSgwLCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiYXNlID09IEJBU0UpIHtcclxuXHJcbiAgICAgICAgICAvLyBUbyBjYWxjdWxhdGUgcS5lLCBmaXJzdCBnZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgcWNbMF0uXHJcbiAgICAgICAgICBmb3IgKGkgPSAxLCBzID0gcWNbMF07IHMgPj0gMTA7IHMgLz0gMTAsIGkrKyk7XHJcblxyXG4gICAgICAgICAgcm91bmQocSwgZHAgKyAocS5lID0gaSArIGUgKiBMT0dfQkFTRSAtIDEpICsgMSwgcm0sIG1vcmUpO1xyXG5cclxuICAgICAgICAvLyBDYWxsZXIgaXMgY29udmVydEJhc2UuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHEuZSA9IGU7XHJcbiAgICAgICAgICBxLnIgPSArbW9yZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBxO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIEJpZ051bWJlciBuIGluIGZpeGVkLXBvaW50IG9yIGV4cG9uZW50aWFsXHJcbiAgICAgKiBub3RhdGlvbiByb3VuZGVkIHRvIHRoZSBzcGVjaWZpZWQgZGVjaW1hbCBwbGFjZXMgb3Igc2lnbmlmaWNhbnQgZGlnaXRzLlxyXG4gICAgICpcclxuICAgICAqIG46IGEgQmlnTnVtYmVyLlxyXG4gICAgICogaTogdGhlIGluZGV4IG9mIHRoZSBsYXN0IGRpZ2l0IHJlcXVpcmVkIChpLmUuIHRoZSBkaWdpdCB0aGF0IG1heSBiZSByb3VuZGVkIHVwKS5cclxuICAgICAqIHJtOiB0aGUgcm91bmRpbmcgbW9kZS5cclxuICAgICAqIGlkOiAxICh0b0V4cG9uZW50aWFsKSBvciAyICh0b1ByZWNpc2lvbikuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGZvcm1hdChuLCBpLCBybSwgaWQpIHtcclxuICAgICAgdmFyIGMwLCBlLCBuZSwgbGVuLCBzdHI7XHJcblxyXG4gICAgICBpZiAocm0gPT0gbnVsbCkgcm0gPSBST1VORElOR19NT0RFO1xyXG4gICAgICBlbHNlIGludENoZWNrKHJtLCAwLCA4KTtcclxuXHJcbiAgICAgIGlmICghbi5jKSByZXR1cm4gbi50b1N0cmluZygpO1xyXG5cclxuICAgICAgYzAgPSBuLmNbMF07XHJcbiAgICAgIG5lID0gbi5lO1xyXG5cclxuICAgICAgaWYgKGkgPT0gbnVsbCkge1xyXG4gICAgICAgIHN0ciA9IGNvZWZmVG9TdHJpbmcobi5jKTtcclxuICAgICAgICBzdHIgPSBpZCA9PSAxIHx8IGlkID09IDIgJiYgKG5lIDw9IFRPX0VYUF9ORUcgfHwgbmUgPj0gVE9fRVhQX1BPUylcclxuICAgICAgICAgPyB0b0V4cG9uZW50aWFsKHN0ciwgbmUpXHJcbiAgICAgICAgIDogdG9GaXhlZFBvaW50KHN0ciwgbmUsICcwJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbiA9IHJvdW5kKG5ldyBCaWdOdW1iZXIobiksIGksIHJtKTtcclxuXHJcbiAgICAgICAgLy8gbi5lIG1heSBoYXZlIGNoYW5nZWQgaWYgdGhlIHZhbHVlIHdhcyByb3VuZGVkIHVwLlxyXG4gICAgICAgIGUgPSBuLmU7XHJcblxyXG4gICAgICAgIHN0ciA9IGNvZWZmVG9TdHJpbmcobi5jKTtcclxuICAgICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG5cclxuICAgICAgICAvLyB0b1ByZWNpc2lvbiByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uIGlmIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzXHJcbiAgICAgICAgLy8gc3BlY2lmaWVkIGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBpbnRlZ2VyXHJcbiAgICAgICAgLy8gcGFydCBvZiB0aGUgdmFsdWUgaW4gZml4ZWQtcG9pbnQgbm90YXRpb24uXHJcblxyXG4gICAgICAgIC8vIEV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAgIGlmIChpZCA9PSAxIHx8IGlkID09IDIgJiYgKGkgPD0gZSB8fCBlIDw9IFRPX0VYUF9ORUcpKSB7XHJcblxyXG4gICAgICAgICAgLy8gQXBwZW5kIHplcm9zP1xyXG4gICAgICAgICAgZm9yICg7IGxlbiA8IGk7IHN0ciArPSAnMCcsIGxlbisrKTtcclxuICAgICAgICAgIHN0ciA9IHRvRXhwb25lbnRpYWwoc3RyLCBlKTtcclxuXHJcbiAgICAgICAgLy8gRml4ZWQtcG9pbnQgbm90YXRpb24uXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGkgLT0gbmU7XHJcbiAgICAgICAgICBzdHIgPSB0b0ZpeGVkUG9pbnQoc3RyLCBlLCAnMCcpO1xyXG5cclxuICAgICAgICAgIC8vIEFwcGVuZCB6ZXJvcz9cclxuICAgICAgICAgIGlmIChlICsgMSA+IGxlbikge1xyXG4gICAgICAgICAgICBpZiAoLS1pID4gMCkgZm9yIChzdHIgKz0gJy4nOyBpLS07IHN0ciArPSAnMCcpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaSArPSBlIC0gbGVuO1xyXG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICAgICAgICBpZiAoZSArIDEgPT0gbGVuKSBzdHIgKz0gJy4nO1xyXG4gICAgICAgICAgICAgIGZvciAoOyBpLS07IHN0ciArPSAnMCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbi5zIDwgMCAmJiBjMCA/ICctJyArIHN0ciA6IHN0cjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gSGFuZGxlIEJpZ051bWJlci5tYXggYW5kIEJpZ051bWJlci5taW4uXHJcbiAgICBmdW5jdGlvbiBtYXhPck1pbihhcmdzLCBtZXRob2QpIHtcclxuICAgICAgdmFyIG4sXHJcbiAgICAgICAgaSA9IDEsXHJcbiAgICAgICAgbSA9IG5ldyBCaWdOdW1iZXIoYXJnc1swXSk7XHJcblxyXG4gICAgICBmb3IgKDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBuID0gbmV3IEJpZ051bWJlcihhcmdzW2ldKTtcclxuXHJcbiAgICAgICAgLy8gSWYgYW55IG51bWJlciBpcyBOYU4sIHJldHVybiBOYU4uXHJcbiAgICAgICAgaWYgKCFuLnMpIHtcclxuICAgICAgICAgIG0gPSBuO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtZXRob2QuY2FsbChtLCBuKSkge1xyXG4gICAgICAgICAgbSA9IG47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFN0cmlwIHRyYWlsaW5nIHplcm9zLCBjYWxjdWxhdGUgYmFzZSAxMCBleHBvbmVudCBhbmQgY2hlY2sgYWdhaW5zdCBNSU5fRVhQIGFuZCBNQVhfRVhQLlxyXG4gICAgICogQ2FsbGVkIGJ5IG1pbnVzLCBwbHVzIGFuZCB0aW1lcy5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gbm9ybWFsaXNlKG4sIGMsIGUpIHtcclxuICAgICAgdmFyIGkgPSAxLFxyXG4gICAgICAgIGogPSBjLmxlbmd0aDtcclxuXHJcbiAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoOyAhY1stLWpdOyBjLnBvcCgpKTtcclxuXHJcbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgYmFzZSAxMCBleHBvbmVudC4gRmlyc3QgZ2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIGNbMF0uXHJcbiAgICAgIGZvciAoaiA9IGNbMF07IGogPj0gMTA7IGogLz0gMTAsIGkrKyk7XHJcblxyXG4gICAgICAvLyBPdmVyZmxvdz9cclxuICAgICAgaWYgKChlID0gaSArIGUgKiBMT0dfQkFTRSAtIDEpID4gTUFYX0VYUCkge1xyXG5cclxuICAgICAgICAvLyBJbmZpbml0eS5cclxuICAgICAgICBuLmMgPSBuLmUgPSBudWxsO1xyXG5cclxuICAgICAgLy8gVW5kZXJmbG93P1xyXG4gICAgICB9IGVsc2UgaWYgKGUgPCBNSU5fRVhQKSB7XHJcblxyXG4gICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgbi5jID0gW24uZSA9IDBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG4uZSA9IGU7XHJcbiAgICAgICAgbi5jID0gYztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEhhbmRsZSB2YWx1ZXMgdGhhdCBmYWlsIHRoZSB2YWxpZGl0eSB0ZXN0IGluIEJpZ051bWJlci5cclxuICAgIHBhcnNlTnVtZXJpYyA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBiYXNlUHJlZml4ID0gL14oLT8pMChbeGJvXSkoPz1cXHdbXFx3Ll0qJCkvaSxcclxuICAgICAgICBkb3RBZnRlciA9IC9eKFteLl0rKVxcLiQvLFxyXG4gICAgICAgIGRvdEJlZm9yZSA9IC9eXFwuKFteLl0rKSQvLFxyXG4gICAgICAgIGlzSW5maW5pdHlPck5hTiA9IC9eLT8oSW5maW5pdHl8TmFOKSQvLFxyXG4gICAgICAgIHdoaXRlc3BhY2VPclBsdXMgPSAvXlxccypcXCsoPz1bXFx3Ll0pfF5cXHMrfFxccyskL2c7XHJcblxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHgsIHN0ciwgaXNOdW0sIGIpIHtcclxuICAgICAgICB2YXIgYmFzZSxcclxuICAgICAgICAgIHMgPSBpc051bSA/IHN0ciA6IHN0ci5yZXBsYWNlKHdoaXRlc3BhY2VPclBsdXMsICcnKTtcclxuXHJcbiAgICAgICAgLy8gTm8gZXhjZXB0aW9uIG9uIMKxSW5maW5pdHkgb3IgTmFOLlxyXG4gICAgICAgIGlmIChpc0luZmluaXR5T3JOYU4udGVzdChzKSkge1xyXG4gICAgICAgICAgeC5zID0gaXNOYU4ocykgPyBudWxsIDogcyA8IDAgPyAtMSA6IDE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICghaXNOdW0pIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGJhc2VQcmVmaXggPSAvXigtPykwKFt4Ym9dKSg/PVxcd1tcXHcuXSokKS9pXHJcbiAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoYmFzZVByZWZpeCwgZnVuY3Rpb24gKG0sIHAxLCBwMikge1xyXG4gICAgICAgICAgICAgIGJhc2UgPSAocDIgPSBwMi50b0xvd2VyQ2FzZSgpKSA9PSAneCcgPyAxNiA6IHAyID09ICdiJyA/IDIgOiA4O1xyXG4gICAgICAgICAgICAgIHJldHVybiAhYiB8fCBiID09IGJhc2UgPyBwMSA6IG07XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGIpIHtcclxuICAgICAgICAgICAgICBiYXNlID0gYjtcclxuXHJcbiAgICAgICAgICAgICAgLy8gRS5nLiAnMS4nIHRvICcxJywgJy4xJyB0byAnMC4xJ1xyXG4gICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoZG90QWZ0ZXIsICckMScpLnJlcGxhY2UoZG90QmVmb3JlLCAnMC4kMScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RyICE9IHMpIHJldHVybiBuZXcgQmlnTnVtYmVyKHMsIGJhc2UpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBOb3QgYSBudW1iZXI6IHtufSdcclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBOb3QgYSBiYXNlIHtifSBudW1iZXI6IHtufSdcclxuICAgICAgICAgIGlmIChCaWdOdW1iZXIuREVCVUcpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnTm90IGEnICsgKGIgPyAnIGJhc2UgJyArIGIgOiAnJykgKyAnIG51bWJlcjogJyArIHN0cik7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gTmFOXHJcbiAgICAgICAgICB4LnMgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJvdW5kIHggdG8gc2Qgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0uIENoZWNrIGZvciBvdmVyL3VuZGVyLWZsb3cuXHJcbiAgICAgKiBJZiByIGlzIHRydXRoeSwgaXQgaXMga25vd24gdGhhdCB0aGVyZSBhcmUgbW9yZSBkaWdpdHMgYWZ0ZXIgdGhlIHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiByb3VuZCh4LCBzZCwgcm0sIHIpIHtcclxuICAgICAgdmFyIGQsIGksIGosIGssIG4sIG5pLCByZCxcclxuICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICBwb3dzMTAgPSBQT1dTX1RFTjtcclxuXHJcbiAgICAgIC8vIGlmIHggaXMgbm90IEluZmluaXR5IG9yIE5hTi4uLlxyXG4gICAgICBpZiAoeGMpIHtcclxuXHJcbiAgICAgICAgLy8gcmQgaXMgdGhlIHJvdW5kaW5nIGRpZ2l0LCBpLmUuIHRoZSBkaWdpdCBhZnRlciB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cC5cclxuICAgICAgICAvLyBuIGlzIGEgYmFzZSAxZTE0IG51bWJlciwgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IG9mIGFycmF5IHguYyBjb250YWluaW5nIHJkLlxyXG4gICAgICAgIC8vIG5pIGlzIHRoZSBpbmRleCBvZiBuIHdpdGhpbiB4LmMuXHJcbiAgICAgICAgLy8gZCBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBuLlxyXG4gICAgICAgIC8vIGkgaXMgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiBuIGluY2x1ZGluZyBsZWFkaW5nIHplcm9zLlxyXG4gICAgICAgIC8vIGogaXMgdGhlIGFjdHVhbCBpbmRleCBvZiByZCB3aXRoaW4gbiAoaWYgPCAwLCByZCBpcyBhIGxlYWRpbmcgemVybykuXHJcbiAgICAgICAgb3V0OiB7XHJcblxyXG4gICAgICAgICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHRoZSBmaXJzdCBlbGVtZW50IG9mIHhjLlxyXG4gICAgICAgICAgZm9yIChkID0gMSwgayA9IHhjWzBdOyBrID49IDEwOyBrIC89IDEwLCBkKyspO1xyXG4gICAgICAgICAgaSA9IHNkIC0gZDtcclxuXHJcbiAgICAgICAgICAvLyBJZiB0aGUgcm91bmRpbmcgZGlnaXQgaXMgaW4gdGhlIGZpcnN0IGVsZW1lbnQgb2YgeGMuLi5cclxuICAgICAgICAgIGlmIChpIDwgMCkge1xyXG4gICAgICAgICAgICBpICs9IExPR19CQVNFO1xyXG4gICAgICAgICAgICBqID0gc2Q7XHJcbiAgICAgICAgICAgIG4gPSB4Y1tuaSA9IDBdO1xyXG5cclxuICAgICAgICAgICAgLy8gR2V0IHRoZSByb3VuZGluZyBkaWdpdCBhdCBpbmRleCBqIG9mIG4uXHJcbiAgICAgICAgICAgIHJkID0gbiAvIHBvd3MxMFtkIC0gaiAtIDFdICUgMTAgfCAwO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbmkgPSBtYXRoY2VpbCgoaSArIDEpIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG5pID49IHhjLmxlbmd0aCkge1xyXG5cclxuICAgICAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIE5lZWRlZCBieSBzcXJ0LlxyXG4gICAgICAgICAgICAgICAgZm9yICg7IHhjLmxlbmd0aCA8PSBuaTsgeGMucHVzaCgwKSk7XHJcbiAgICAgICAgICAgICAgICBuID0gcmQgPSAwO1xyXG4gICAgICAgICAgICAgICAgZCA9IDE7XHJcbiAgICAgICAgICAgICAgICBpICU9IExPR19CQVNFO1xyXG4gICAgICAgICAgICAgICAgaiA9IGkgLSBMT0dfQkFTRSArIDE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrIG91dDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbiA9IGsgPSB4Y1tuaV07XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBuLlxyXG4gICAgICAgICAgICAgIGZvciAoZCA9IDE7IGsgPj0gMTA7IGsgLz0gMTAsIGQrKyk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIG4uXHJcbiAgICAgICAgICAgICAgaSAlPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiByZCB3aXRoaW4gbiwgYWRqdXN0ZWQgZm9yIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgICAgICAgICAgLy8gVGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIG4gaXMgZ2l2ZW4gYnkgTE9HX0JBU0UgLSBkLlxyXG4gICAgICAgICAgICAgIGogPSBpIC0gTE9HX0JBU0UgKyBkO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIHJvdW5kaW5nIGRpZ2l0IGF0IGluZGV4IGogb2Ygbi5cclxuICAgICAgICAgICAgICByZCA9IGogPCAwID8gMCA6IG4gLyBwb3dzMTBbZCAtIGogLSAxXSAlIDEwIHwgMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHIgPSByIHx8IHNkIDwgMCB8fFxyXG5cclxuICAgICAgICAgIC8vIEFyZSB0aGVyZSBhbnkgbm9uLXplcm8gZGlnaXRzIGFmdGVyIHRoZSByb3VuZGluZyBkaWdpdD9cclxuICAgICAgICAgIC8vIFRoZSBleHByZXNzaW9uICBuICUgcG93czEwW2QgLSBqIC0gMV0gIHJldHVybnMgYWxsIGRpZ2l0cyBvZiBuIHRvIHRoZSByaWdodFxyXG4gICAgICAgICAgLy8gb2YgdGhlIGRpZ2l0IGF0IGosIGUuZy4gaWYgbiBpcyA5MDg3MTQgYW5kIGogaXMgMiwgdGhlIGV4cHJlc3Npb24gZ2l2ZXMgNzE0LlxyXG4gICAgICAgICAgIHhjW25pICsgMV0gIT0gbnVsbCB8fCAoaiA8IDAgPyBuIDogbiAlIHBvd3MxMFtkIC0gaiAtIDFdKTtcclxuXHJcbiAgICAgICAgICByID0gcm0gPCA0XHJcbiAgICAgICAgICAgPyAocmQgfHwgcikgJiYgKHJtID09IDAgfHwgcm0gPT0gKHgucyA8IDAgPyAzIDogMikpXHJcbiAgICAgICAgICAgOiByZCA+IDUgfHwgcmQgPT0gNSAmJiAocm0gPT0gNCB8fCByIHx8IHJtID09IDYgJiZcclxuXHJcbiAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGRpZ2l0IHRvIHRoZSBsZWZ0IG9mIHRoZSByb3VuZGluZyBkaWdpdCBpcyBvZGQuXHJcbiAgICAgICAgICAgICgoaSA+IDAgPyBqID4gMCA/IG4gLyBwb3dzMTBbZCAtIGpdIDogMCA6IHhjW25pIC0gMV0pICUgMTApICYgMSB8fFxyXG4gICAgICAgICAgICAgcm0gPT0gKHgucyA8IDAgPyA4IDogNykpO1xyXG5cclxuICAgICAgICAgIGlmIChzZCA8IDEgfHwgIXhjWzBdKSB7XHJcbiAgICAgICAgICAgIHhjLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgICAvLyBDb252ZXJ0IHNkIHRvIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICAgICAgICAgIHNkIC09IHguZSArIDE7XHJcblxyXG4gICAgICAgICAgICAgIC8vIDEsIDAuMSwgMC4wMSwgMC4wMDEsIDAuMDAwMSBldGMuXHJcbiAgICAgICAgICAgICAgeGNbMF0gPSBwb3dzMTBbKExPR19CQVNFIC0gc2QgJSBMT0dfQkFTRSkgJSBMT0dfQkFTRV07XHJcbiAgICAgICAgICAgICAgeC5lID0gLXNkIHx8IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgICAgICAgeGNbMF0gPSB4LmUgPSAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4geDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBSZW1vdmUgZXhjZXNzIGRpZ2l0cy5cclxuICAgICAgICAgIGlmIChpID09IDApIHtcclxuICAgICAgICAgICAgeGMubGVuZ3RoID0gbmk7XHJcbiAgICAgICAgICAgIGsgPSAxO1xyXG4gICAgICAgICAgICBuaS0tO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgeGMubGVuZ3RoID0gbmkgKyAxO1xyXG4gICAgICAgICAgICBrID0gcG93czEwW0xPR19CQVNFIC0gaV07XHJcblxyXG4gICAgICAgICAgICAvLyBFLmcuIDU2NzAwIGJlY29tZXMgNTYwMDAgaWYgNyBpcyB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgICAgIC8vIGogPiAwIG1lYW5zIGkgPiBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBvZiBuLlxyXG4gICAgICAgICAgICB4Y1tuaV0gPSBqID4gMCA/IG1hdGhmbG9vcihuIC8gcG93czEwW2QgLSBqXSAlIHBvd3MxMFtqXSkgKiBrIDogMDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBSb3VuZCB1cD9cclxuICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICBmb3IgKDsgOykge1xyXG5cclxuICAgICAgICAgICAgICAvLyBJZiB0aGUgZGlnaXQgdG8gYmUgcm91bmRlZCB1cCBpcyBpbiB0aGUgZmlyc3QgZWxlbWVudCBvZiB4Yy4uLlxyXG4gICAgICAgICAgICAgIGlmIChuaSA9PSAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaSB3aWxsIGJlIHRoZSBsZW5ndGggb2YgeGNbMF0gYmVmb3JlIGsgaXMgYWRkZWQuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAxLCBqID0geGNbMF07IGogPj0gMTA7IGogLz0gMTAsIGkrKyk7XHJcbiAgICAgICAgICAgICAgICBqID0geGNbMF0gKz0gaztcclxuICAgICAgICAgICAgICAgIGZvciAoayA9IDE7IGogPj0gMTA7IGogLz0gMTAsIGsrKyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaWYgaSAhPSBrIHRoZSBsZW5ndGggaGFzIGluY3JlYXNlZC5cclxuICAgICAgICAgICAgICAgIGlmIChpICE9IGspIHtcclxuICAgICAgICAgICAgICAgICAgeC5lKys7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh4Y1swXSA9PSBCQVNFKSB4Y1swXSA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHhjW25pXSArPSBrO1xyXG4gICAgICAgICAgICAgICAgaWYgKHhjW25pXSAhPSBCQVNFKSBicmVhaztcclxuICAgICAgICAgICAgICAgIHhjW25pLS1dID0gMDtcclxuICAgICAgICAgICAgICAgIGsgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICAgIGZvciAoaSA9IHhjLmxlbmd0aDsgeGNbLS1pXSA9PT0gMDsgeGMucG9wKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gT3ZlcmZsb3c/IEluZmluaXR5LlxyXG4gICAgICAgIGlmICh4LmUgPiBNQVhfRVhQKSB7XHJcbiAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBVbmRlcmZsb3c/IFplcm8uXHJcbiAgICAgICAgfSBlbHNlIGlmICh4LmUgPCBNSU5fRVhQKSB7XHJcbiAgICAgICAgICB4LmMgPSBbeC5lID0gMF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4geDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gdmFsdWVPZihuKSB7XHJcbiAgICAgIHZhciBzdHIsXHJcbiAgICAgICAgZSA9IG4uZTtcclxuXHJcbiAgICAgIGlmIChlID09PSBudWxsKSByZXR1cm4gbi50b1N0cmluZygpO1xyXG5cclxuICAgICAgc3RyID0gY29lZmZUb1N0cmluZyhuLmMpO1xyXG5cclxuICAgICAgc3RyID0gZSA8PSBUT19FWFBfTkVHIHx8IGUgPj0gVE9fRVhQX1BPU1xyXG4gICAgICAgID8gdG9FeHBvbmVudGlhbChzdHIsIGUpXHJcbiAgICAgICAgOiB0b0ZpeGVkUG9pbnQoc3RyLCBlLCAnMCcpO1xyXG5cclxuICAgICAgcmV0dXJuIG4ucyA8IDAgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIFBST1RPVFlQRS9JTlNUQU5DRSBNRVRIT0RTXHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlci5cclxuICAgICAqL1xyXG4gICAgUC5hYnNvbHV0ZVZhbHVlID0gUC5hYnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciB4ID0gbmV3IEJpZ051bWJlcih0aGlzKTtcclxuICAgICAgaWYgKHgucyA8IDApIHgucyA9IDE7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVyblxyXG4gICAgICogICAxIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqICAgLTEgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogICAwIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZSxcclxuICAgICAqICAgb3IgbnVsbCBpZiB0aGUgdmFsdWUgb2YgZWl0aGVyIGlzIE5hTi5cclxuICAgICAqL1xyXG4gICAgUC5jb21wYXJlZFRvID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogSWYgZHAgaXMgdW5kZWZpbmVkIG9yIG51bGwgb3IgdHJ1ZSBvciBmYWxzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgb2YgdGhlXHJcbiAgICAgKiB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciwgb3IgbnVsbCBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgwrFJbmZpbml0eSBvciBOYU4uXHJcbiAgICAgKlxyXG4gICAgICogT3RoZXJ3aXNlLCBpZiBkcCBpcyBhIG51bWJlciwgcmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpc1xyXG4gICAgICogQmlnTnVtYmVyIHJvdW5kZWQgdG8gYSBtYXhpbXVtIG9mIGRwIGRlY2ltYWwgcGxhY2VzIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0sIG9yXHJcbiAgICAgKiBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlczogaW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICovXHJcbiAgICBQLmRlY2ltYWxQbGFjZXMgPSBQLmRwID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgICB2YXIgYywgbiwgdixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChkcCAhPSBudWxsKSB7XHJcbiAgICAgICAgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcbiAgICAgICAgaWYgKHJtID09IG51bGwpIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuICAgICAgICBlbHNlIGludENoZWNrKHJtLCAwLCA4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJvdW5kKG5ldyBCaWdOdW1iZXIoeCksIGRwICsgeC5lICsgMSwgcm0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIShjID0geC5jKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgIG4gPSAoKHYgPSBjLmxlbmd0aCAtIDEpIC0gYml0Rmxvb3IodGhpcy5lIC8gTE9HX0JBU0UpKSAqIExPR19CQVNFO1xyXG5cclxuICAgICAgLy8gU3VidHJhY3QgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBvZiB0aGUgbGFzdCBudW1iZXIuXHJcbiAgICAgIGlmICh2ID0gY1t2XSkgZm9yICg7IHYgJSAxMCA9PSAwOyB2IC89IDEwLCBuLS0pO1xyXG4gICAgICBpZiAobiA8IDApIG4gPSAwO1xyXG5cclxuICAgICAgcmV0dXJuIG47XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIG4gLyAwID0gSVxyXG4gICAgICogIG4gLyBOID0gTlxyXG4gICAgICogIG4gLyBJID0gMFxyXG4gICAgICogIDAgLyBuID0gMFxyXG4gICAgICogIDAgLyAwID0gTlxyXG4gICAgICogIDAgLyBOID0gTlxyXG4gICAgICogIDAgLyBJID0gMFxyXG4gICAgICogIE4gLyBuID0gTlxyXG4gICAgICogIE4gLyAwID0gTlxyXG4gICAgICogIE4gLyBOID0gTlxyXG4gICAgICogIE4gLyBJID0gTlxyXG4gICAgICogIEkgLyBuID0gSVxyXG4gICAgICogIEkgLyAwID0gSVxyXG4gICAgICogIEkgLyBOID0gTlxyXG4gICAgICogIEkgLyBJID0gTlxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGRpdmlkZWQgYnkgdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYiksIHJvdW5kZWQgYWNjb3JkaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFuZCBST1VORElOR19NT0RFLlxyXG4gICAgICovXHJcbiAgICBQLmRpdmlkZWRCeSA9IFAuZGl2ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGRpdih0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpLCBERUNJTUFMX1BMQUNFUywgUk9VTkRJTkdfTU9ERSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgaW50ZWdlciBwYXJ0IG9mIGRpdmlkaW5nIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICAgKiBCaWdOdW1iZXIgYnkgdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKS5cclxuICAgICAqL1xyXG4gICAgUC5kaXZpZGVkVG9JbnRlZ2VyQnkgPSBQLmlkaXYgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gZGl2KHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYiksIDAsIDEpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgZXhwb25lbnRpYXRlZCBieSBuLlxyXG4gICAgICpcclxuICAgICAqIElmIG0gaXMgcHJlc2VudCwgcmV0dXJuIHRoZSByZXN1bHQgbW9kdWxvIG0uXHJcbiAgICAgKiBJZiBuIGlzIG5lZ2F0aXZlIHJvdW5kIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmQgUk9VTkRJTkdfTU9ERS5cclxuICAgICAqIElmIFBPV19QUkVDSVNJT04gaXMgbm9uLXplcm8gYW5kIG0gaXMgbm90IHByZXNlbnQsIHJvdW5kIHRvIFBPV19QUkVDSVNJT04gdXNpbmcgUk9VTkRJTkdfTU9ERS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgbW9kdWxhciBwb3dlciBvcGVyYXRpb24gd29ya3MgZWZmaWNpZW50bHkgd2hlbiB4LCBuLCBhbmQgbSBhcmUgaW50ZWdlcnMsIG90aGVyd2lzZSBpdFxyXG4gICAgICogaXMgZXF1aXZhbGVudCB0byBjYWxjdWxhdGluZyB4LmV4cG9uZW50aWF0ZWRCeShuKS5tb2R1bG8obSkgd2l0aCBhIFBPV19QUkVDSVNJT04gb2YgMC5cclxuICAgICAqXHJcbiAgICAgKiBuIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn0gVGhlIGV4cG9uZW50LiBBbiBpbnRlZ2VyLlxyXG4gICAgICogW21dIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn0gVGhlIG1vZHVsdXMuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEV4cG9uZW50IG5vdCBhbiBpbnRlZ2VyOiB7bn0nXHJcbiAgICAgKi9cclxuICAgIFAuZXhwb25lbnRpYXRlZEJ5ID0gUC5wb3cgPSBmdW5jdGlvbiAobiwgbSkge1xyXG4gICAgICB2YXIgaGFsZiwgaXNNb2RFeHAsIGksIGssIG1vcmUsIG5Jc0JpZywgbklzTmVnLCBuSXNPZGQsIHksXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBuID0gbmV3IEJpZ051bWJlcihuKTtcclxuXHJcbiAgICAgIC8vIEFsbG93IE5hTiBhbmQgwrFJbmZpbml0eSwgYnV0IG5vdCBvdGhlciBub24taW50ZWdlcnMuXHJcbiAgICAgIGlmIChuLmMgJiYgIW4uaXNJbnRlZ2VyKCkpIHtcclxuICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ0V4cG9uZW50IG5vdCBhbiBpbnRlZ2VyOiAnICsgdmFsdWVPZihuKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChtICE9IG51bGwpIG0gPSBuZXcgQmlnTnVtYmVyKG0pO1xyXG5cclxuICAgICAgLy8gRXhwb25lbnQgb2YgTUFYX1NBRkVfSU5URUdFUiBpcyAxNS5cclxuICAgICAgbklzQmlnID0gbi5lID4gMTQ7XHJcblxyXG4gICAgICAvLyBJZiB4IGlzIE5hTiwgwrFJbmZpbml0eSwgwrEwIG9yIMKxMSwgb3IgbiBpcyDCsUluZmluaXR5LCBOYU4gb3IgwrEwLlxyXG4gICAgICBpZiAoIXguYyB8fCAheC5jWzBdIHx8IHguY1swXSA9PSAxICYmICF4LmUgJiYgeC5jLmxlbmd0aCA9PSAxIHx8ICFuLmMgfHwgIW4uY1swXSkge1xyXG5cclxuICAgICAgICAvLyBUaGUgc2lnbiBvZiB0aGUgcmVzdWx0IG9mIHBvdyB3aGVuIHggaXMgbmVnYXRpdmUgZGVwZW5kcyBvbiB0aGUgZXZlbm5lc3Mgb2Ygbi5cclxuICAgICAgICAvLyBJZiArbiBvdmVyZmxvd3MgdG8gwrFJbmZpbml0eSwgdGhlIGV2ZW5uZXNzIG9mIG4gd291bGQgYmUgbm90IGJlIGtub3duLlxyXG4gICAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKE1hdGgucG93KCt2YWx1ZU9mKHgpLCBuSXNCaWcgPyAyIC0gaXNPZGQobikgOiArdmFsdWVPZihuKSkpO1xyXG4gICAgICAgIHJldHVybiBtID8geS5tb2QobSkgOiB5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuSXNOZWcgPSBuLnMgPCAwO1xyXG5cclxuICAgICAgaWYgKG0pIHtcclxuXHJcbiAgICAgICAgLy8geCAlIG0gcmV0dXJucyBOYU4gaWYgYWJzKG0pIGlzIHplcm8sIG9yIG0gaXMgTmFOLlxyXG4gICAgICAgIGlmIChtLmMgPyAhbS5jWzBdIDogIW0ucykgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcclxuXHJcbiAgICAgICAgaXNNb2RFeHAgPSAhbklzTmVnICYmIHguaXNJbnRlZ2VyKCkgJiYgbS5pc0ludGVnZXIoKTtcclxuXHJcbiAgICAgICAgaWYgKGlzTW9kRXhwKSB4ID0geC5tb2QobSk7XHJcblxyXG4gICAgICAvLyBPdmVyZmxvdyB0byDCsUluZmluaXR5OiA+PTIqKjFlMTAgb3IgPj0xLjAwMDAwMjQqKjFlMTUuXHJcbiAgICAgIC8vIFVuZGVyZmxvdyB0byDCsTA6IDw9MC43OSoqMWUxMCBvciA8PTAuOTk5OTk3NSoqMWUxNS5cclxuICAgICAgfSBlbHNlIGlmIChuLmUgPiA5ICYmICh4LmUgPiAwIHx8IHguZSA8IC0xIHx8ICh4LmUgPT0gMFxyXG4gICAgICAgIC8vIFsxLCAyNDAwMDAwMDBdXHJcbiAgICAgICAgPyB4LmNbMF0gPiAxIHx8IG5Jc0JpZyAmJiB4LmNbMV0gPj0gMjRlN1xyXG4gICAgICAgIC8vIFs4MDAwMDAwMDAwMDAwMF0gIFs5OTk5OTc1MDAwMDAwMF1cclxuICAgICAgICA6IHguY1swXSA8IDhlMTMgfHwgbklzQmlnICYmIHguY1swXSA8PSA5OTk5OTc1ZTcpKSkge1xyXG5cclxuICAgICAgICAvLyBJZiB4IGlzIG5lZ2F0aXZlIGFuZCBuIGlzIG9kZCwgayA9IC0wLCBlbHNlIGsgPSAwLlxyXG4gICAgICAgIGsgPSB4LnMgPCAwICYmIGlzT2RkKG4pID8gLTAgOiAwO1xyXG5cclxuICAgICAgICAvLyBJZiB4ID49IDEsIGsgPSDCsUluZmluaXR5LlxyXG4gICAgICAgIGlmICh4LmUgPiAtMSkgayA9IDEgLyBrO1xyXG5cclxuICAgICAgICAvLyBJZiBuIGlzIG5lZ2F0aXZlIHJldHVybiDCsTAsIGVsc2UgcmV0dXJuIMKxSW5maW5pdHkuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIobklzTmVnID8gMSAvIGsgOiBrKTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAoUE9XX1BSRUNJU0lPTikge1xyXG5cclxuICAgICAgICAvLyBUcnVuY2F0aW5nIGVhY2ggY29lZmZpY2llbnQgYXJyYXkgdG8gYSBsZW5ndGggb2YgayBhZnRlciBlYWNoIG11bHRpcGxpY2F0aW9uXHJcbiAgICAgICAgLy8gZXF1YXRlcyB0byB0cnVuY2F0aW5nIHNpZ25pZmljYW50IGRpZ2l0cyB0byBQT1dfUFJFQ0lTSU9OICsgWzI4LCA0MV0sXHJcbiAgICAgICAgLy8gaS5lLiB0aGVyZSB3aWxsIGJlIGEgbWluaW11bSBvZiAyOCBndWFyZCBkaWdpdHMgcmV0YWluZWQuXHJcbiAgICAgICAgayA9IG1hdGhjZWlsKFBPV19QUkVDSVNJT04gLyBMT0dfQkFTRSArIDIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobklzQmlnKSB7XHJcbiAgICAgICAgaGFsZiA9IG5ldyBCaWdOdW1iZXIoMC41KTtcclxuICAgICAgICBpZiAobklzTmVnKSBuLnMgPSAxO1xyXG4gICAgICAgIG5Jc09kZCA9IGlzT2RkKG4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGkgPSBNYXRoLmFicygrdmFsdWVPZihuKSk7XHJcbiAgICAgICAgbklzT2RkID0gaSAlIDI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcblxyXG4gICAgICAvLyBQZXJmb3JtcyA1NCBsb29wIGl0ZXJhdGlvbnMgZm9yIG4gb2YgOTAwNzE5OTI1NDc0MDk5MS5cclxuICAgICAgZm9yICg7IDspIHtcclxuXHJcbiAgICAgICAgaWYgKG5Jc09kZCkge1xyXG4gICAgICAgICAgeSA9IHkudGltZXMoeCk7XHJcbiAgICAgICAgICBpZiAoIXkuYykgYnJlYWs7XHJcblxyXG4gICAgICAgICAgaWYgKGspIHtcclxuICAgICAgICAgICAgaWYgKHkuYy5sZW5ndGggPiBrKSB5LmMubGVuZ3RoID0gaztcclxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb2RFeHApIHtcclxuICAgICAgICAgICAgeSA9IHkubW9kKG0pOyAgICAvL3kgPSB5Lm1pbnVzKGRpdih5LCBtLCAwLCBNT0RVTE9fTU9ERSkudGltZXMobSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGkpIHtcclxuICAgICAgICAgIGkgPSBtYXRoZmxvb3IoaSAvIDIpO1xyXG4gICAgICAgICAgaWYgKGkgPT09IDApIGJyZWFrO1xyXG4gICAgICAgICAgbklzT2RkID0gaSAlIDI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG4gPSBuLnRpbWVzKGhhbGYpO1xyXG4gICAgICAgICAgcm91bmQobiwgbi5lICsgMSwgMSk7XHJcblxyXG4gICAgICAgICAgaWYgKG4uZSA+IDE0KSB7XHJcbiAgICAgICAgICAgIG5Jc09kZCA9IGlzT2RkKG4pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaSA9ICt2YWx1ZU9mKG4pO1xyXG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkgYnJlYWs7XHJcbiAgICAgICAgICAgIG5Jc09kZCA9IGkgJSAyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgeCA9IHgudGltZXMoeCk7XHJcblxyXG4gICAgICAgIGlmIChrKSB7XHJcbiAgICAgICAgICBpZiAoeC5jICYmIHguYy5sZW5ndGggPiBrKSB4LmMubGVuZ3RoID0gaztcclxuICAgICAgICB9IGVsc2UgaWYgKGlzTW9kRXhwKSB7XHJcbiAgICAgICAgICB4ID0geC5tb2QobSk7ICAgIC8veCA9IHgubWludXMoZGl2KHgsIG0sIDAsIE1PRFVMT19NT0RFKS50aW1lcyhtKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNNb2RFeHApIHJldHVybiB5O1xyXG4gICAgICBpZiAobklzTmVnKSB5ID0gT05FLmRpdih5KTtcclxuXHJcbiAgICAgIHJldHVybiBtID8geS5tb2QobSkgOiBrID8gcm91bmQoeSwgUE9XX1BSRUNJU0lPTiwgUk9VTkRJTkdfTU9ERSwgbW9yZSkgOiB5O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIHJvdW5kZWQgdG8gYW4gaW50ZWdlclxyXG4gICAgICogdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3IgUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3JtfSdcclxuICAgICAqL1xyXG4gICAgUC5pbnRlZ2VyVmFsdWUgPSBmdW5jdGlvbiAocm0pIHtcclxuICAgICAgdmFyIG4gPSBuZXcgQmlnTnVtYmVyKHRoaXMpO1xyXG4gICAgICBpZiAocm0gPT0gbnVsbCkgcm0gPSBST1VORElOR19NT0RFO1xyXG4gICAgICBlbHNlIGludENoZWNrKHJtLCAwLCA4KTtcclxuICAgICAgcmV0dXJuIHJvdW5kKG4sIG4uZSArIDEsIHJtKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNFcXVhbFRvID0gUC5lcSA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpID09PSAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBhIGZpbml0ZSBudW1iZXIsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNGaW5pdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuYztcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzR3JlYXRlclRoYW4gPSBQLmd0ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkgPiAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYiksIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNHcmVhdGVyVGhhbk9yRXF1YWxUbyA9IFAuZ3RlID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIChiID0gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSkgPT09IDEgfHwgYiA9PT0gMDtcclxuXHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGFuIGludGVnZXIsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNJbnRlZ2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gISF0aGlzLmMgJiYgYml0Rmxvb3IodGhpcy5lIC8gTE9HX0JBU0UpID4gdGhpcy5jLmxlbmd0aCAtIDI7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0xlc3NUaGFuID0gUC5sdCA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpIDwgMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTGVzc1RoYW5PckVxdWFsVG8gPSBQLmx0ZSA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiAoYiA9IGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkpID09PSAtMSB8fCBiID09PSAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBOYU4sIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNOYU4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5zO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBuZWdhdGl2ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc05lZ2F0aXZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zIDwgMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgcG9zaXRpdmUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNQb3NpdGl2ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucyA+IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIDAgb3IgLTAsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNaZXJvID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gISF0aGlzLmMgJiYgdGhpcy5jWzBdID09IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIG4gLSAwID0gblxyXG4gICAgICogIG4gLSBOID0gTlxyXG4gICAgICogIG4gLSBJID0gLUlcclxuICAgICAqICAwIC0gbiA9IC1uXHJcbiAgICAgKiAgMCAtIDAgPSAwXHJcbiAgICAgKiAgMCAtIE4gPSBOXHJcbiAgICAgKiAgMCAtIEkgPSAtSVxyXG4gICAgICogIE4gLSBuID0gTlxyXG4gICAgICogIE4gLSAwID0gTlxyXG4gICAgICogIE4gLSBOID0gTlxyXG4gICAgICogIE4gLSBJID0gTlxyXG4gICAgICogIEkgLSBuID0gSVxyXG4gICAgICogIEkgLSAwID0gSVxyXG4gICAgICogIEkgLSBOID0gTlxyXG4gICAgICogIEkgLSBJID0gTlxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIG1pbnVzIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLm1pbnVzID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgdmFyIGksIGosIHQsIHhMVHksXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgYSA9IHgucztcclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpO1xyXG4gICAgICBiID0geS5zO1xyXG5cclxuICAgICAgLy8gRWl0aGVyIE5hTj9cclxuICAgICAgaWYgKCFhIHx8ICFiKSByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgLy8gU2lnbnMgZGlmZmVyP1xyXG4gICAgICBpZiAoYSAhPSBiKSB7XHJcbiAgICAgICAgeS5zID0gLWI7XHJcbiAgICAgICAgcmV0dXJuIHgucGx1cyh5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHhlID0geC5lIC8gTE9HX0JBU0UsXHJcbiAgICAgICAgeWUgPSB5LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICB5YyA9IHkuYztcclxuXHJcbiAgICAgIGlmICgheGUgfHwgIXllKSB7XHJcblxyXG4gICAgICAgIC8vIEVpdGhlciBJbmZpbml0eT9cclxuICAgICAgICBpZiAoIXhjIHx8ICF5YykgcmV0dXJuIHhjID8gKHkucyA9IC1iLCB5KSA6IG5ldyBCaWdOdW1iZXIoeWMgPyB4IDogTmFOKTtcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIHplcm8/XHJcbiAgICAgICAgaWYgKCF4Y1swXSB8fCAheWNbMF0pIHtcclxuXHJcbiAgICAgICAgICAvLyBSZXR1cm4geSBpZiB5IGlzIG5vbi16ZXJvLCB4IGlmIHggaXMgbm9uLXplcm8sIG9yIHplcm8gaWYgYm90aCBhcmUgemVyby5cclxuICAgICAgICAgIHJldHVybiB5Y1swXSA/ICh5LnMgPSAtYiwgeSkgOiBuZXcgQmlnTnVtYmVyKHhjWzBdID8geCA6XHJcblxyXG4gICAgICAgICAgIC8vIElFRUUgNzU0ICgyMDA4KSA2LjM6IG4gLSBuID0gLTAgd2hlbiByb3VuZGluZyB0byAtSW5maW5pdHlcclxuICAgICAgICAgICBST1VORElOR19NT0RFID09IDMgPyAtMCA6IDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgeGUgPSBiaXRGbG9vcih4ZSk7XHJcbiAgICAgIHllID0gYml0Rmxvb3IoeWUpO1xyXG4gICAgICB4YyA9IHhjLnNsaWNlKCk7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggaXMgdGhlIGJpZ2dlciBudW1iZXIuXHJcbiAgICAgIGlmIChhID0geGUgLSB5ZSkge1xyXG5cclxuICAgICAgICBpZiAoeExUeSA9IGEgPCAwKSB7XHJcbiAgICAgICAgICBhID0gLWE7XHJcbiAgICAgICAgICB0ID0geGM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHllID0geGU7XHJcbiAgICAgICAgICB0ID0geWM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuXHJcbiAgICAgICAgLy8gUHJlcGVuZCB6ZXJvcyB0byBlcXVhbGlzZSBleHBvbmVudHMuXHJcbiAgICAgICAgZm9yIChiID0gYTsgYi0tOyB0LnB1c2goMCkpO1xyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyBFeHBvbmVudHMgZXF1YWwuIENoZWNrIGRpZ2l0IGJ5IGRpZ2l0LlxyXG4gICAgICAgIGogPSAoeExUeSA9IChhID0geGMubGVuZ3RoKSA8IChiID0geWMubGVuZ3RoKSkgPyBhIDogYjtcclxuXHJcbiAgICAgICAgZm9yIChhID0gYiA9IDA7IGIgPCBqOyBiKyspIHtcclxuXHJcbiAgICAgICAgICBpZiAoeGNbYl0gIT0geWNbYl0pIHtcclxuICAgICAgICAgICAgeExUeSA9IHhjW2JdIDwgeWNbYl07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8geCA8IHk/IFBvaW50IHhjIHRvIHRoZSBhcnJheSBvZiB0aGUgYmlnZ2VyIG51bWJlci5cclxuICAgICAgaWYgKHhMVHkpIHQgPSB4YywgeGMgPSB5YywgeWMgPSB0LCB5LnMgPSAteS5zO1xyXG5cclxuICAgICAgYiA9IChqID0geWMubGVuZ3RoKSAtIChpID0geGMubGVuZ3RoKTtcclxuXHJcbiAgICAgIC8vIEFwcGVuZCB6ZXJvcyB0byB4YyBpZiBzaG9ydGVyLlxyXG4gICAgICAvLyBObyBuZWVkIHRvIGFkZCB6ZXJvcyB0byB5YyBpZiBzaG9ydGVyIGFzIHN1YnRyYWN0IG9ubHkgbmVlZHMgdG8gc3RhcnQgYXQgeWMubGVuZ3RoLlxyXG4gICAgICBpZiAoYiA+IDApIGZvciAoOyBiLS07IHhjW2krK10gPSAwKTtcclxuICAgICAgYiA9IEJBU0UgLSAxO1xyXG5cclxuICAgICAgLy8gU3VidHJhY3QgeWMgZnJvbSB4Yy5cclxuICAgICAgZm9yICg7IGogPiBhOykge1xyXG5cclxuICAgICAgICBpZiAoeGNbLS1qXSA8IHljW2pdKSB7XHJcbiAgICAgICAgICBmb3IgKGkgPSBqOyBpICYmICF4Y1stLWldOyB4Y1tpXSA9IGIpO1xyXG4gICAgICAgICAgLS14Y1tpXTtcclxuICAgICAgICAgIHhjW2pdICs9IEJBU0U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4Y1tqXSAtPSB5Y1tqXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgemVyb3MgYW5kIGFkanVzdCBleHBvbmVudCBhY2NvcmRpbmdseS5cclxuICAgICAgZm9yICg7IHhjWzBdID09IDA7IHhjLnNwbGljZSgwLCAxKSwgLS15ZSk7XHJcblxyXG4gICAgICAvLyBaZXJvP1xyXG4gICAgICBpZiAoIXhjWzBdKSB7XHJcblxyXG4gICAgICAgIC8vIEZvbGxvd2luZyBJRUVFIDc1NCAoMjAwOCkgNi4zLFxyXG4gICAgICAgIC8vIG4gLSBuID0gKzAgIGJ1dCAgbiAtIG4gPSAtMCAgd2hlbiByb3VuZGluZyB0b3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgICB5LnMgPSBST1VORElOR19NT0RFID09IDMgPyAtMSA6IDE7XHJcbiAgICAgICAgeS5jID0gW3kuZSA9IDBdO1xyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGZvciBJbmZpbml0eSBhcyAreCAtICt5ICE9IEluZmluaXR5ICYmIC14IC0gLXkgIT0gSW5maW5pdHlcclxuICAgICAgLy8gZm9yIGZpbml0ZSB4IGFuZCB5LlxyXG4gICAgICByZXR1cm4gbm9ybWFsaXNlKHksIHhjLCB5ZSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogICBuICUgMCA9ICBOXHJcbiAgICAgKiAgIG4gJSBOID0gIE5cclxuICAgICAqICAgbiAlIEkgPSAgblxyXG4gICAgICogICAwICUgbiA9ICAwXHJcbiAgICAgKiAgLTAgJSBuID0gLTBcclxuICAgICAqICAgMCAlIDAgPSAgTlxyXG4gICAgICogICAwICUgTiA9ICBOXHJcbiAgICAgKiAgIDAgJSBJID0gIDBcclxuICAgICAqICAgTiAlIG4gPSAgTlxyXG4gICAgICogICBOICUgMCA9ICBOXHJcbiAgICAgKiAgIE4gJSBOID0gIE5cclxuICAgICAqICAgTiAlIEkgPSAgTlxyXG4gICAgICogICBJICUgbiA9ICBOXHJcbiAgICAgKiAgIEkgJSAwID0gIE5cclxuICAgICAqICAgSSAlIE4gPSAgTlxyXG4gICAgICogICBJICUgSSA9ICBOXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbW9kdWxvIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLiBUaGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIE1PRFVMT19NT0RFLlxyXG4gICAgICovXHJcbiAgICBQLm1vZHVsbyA9IFAubW9kID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgdmFyIHEsIHMsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICB5ID0gbmV3IEJpZ051bWJlcih5LCBiKTtcclxuXHJcbiAgICAgIC8vIFJldHVybiBOYU4gaWYgeCBpcyBJbmZpbml0eSBvciBOYU4sIG9yIHkgaXMgTmFOIG9yIHplcm8uXHJcbiAgICAgIGlmICgheC5jIHx8ICF5LnMgfHwgeS5jICYmICF5LmNbMF0pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgeSBpcyBJbmZpbml0eSBvciB4IGlzIHplcm8uXHJcbiAgICAgIH0gZWxzZSBpZiAoIXkuYyB8fCB4LmMgJiYgIXguY1swXSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoTU9EVUxPX01PREUgPT0gOSkge1xyXG5cclxuICAgICAgICAvLyBFdWNsaWRpYW4gZGl2aXNpb246IHEgPSBzaWduKHkpICogZmxvb3IoeCAvIGFicyh5KSlcclxuICAgICAgICAvLyByID0geCAtIHF5ICAgIHdoZXJlICAwIDw9IHIgPCBhYnMoeSlcclxuICAgICAgICBzID0geS5zO1xyXG4gICAgICAgIHkucyA9IDE7XHJcbiAgICAgICAgcSA9IGRpdih4LCB5LCAwLCAzKTtcclxuICAgICAgICB5LnMgPSBzO1xyXG4gICAgICAgIHEucyAqPSBzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHEgPSBkaXYoeCwgeSwgMCwgTU9EVUxPX01PREUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB5ID0geC5taW51cyhxLnRpbWVzKHkpKTtcclxuXHJcbiAgICAgIC8vIFRvIG1hdGNoIEphdmFTY3JpcHQgJSwgZW5zdXJlIHNpZ24gb2YgemVybyBpcyBzaWduIG9mIGRpdmlkZW5kLlxyXG4gICAgICBpZiAoIXkuY1swXSAmJiBNT0RVTE9fTU9ERSA9PSAxKSB5LnMgPSB4LnM7XHJcblxyXG4gICAgICByZXR1cm4geTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiAqIDAgPSAwXHJcbiAgICAgKiAgbiAqIE4gPSBOXHJcbiAgICAgKiAgbiAqIEkgPSBJXHJcbiAgICAgKiAgMCAqIG4gPSAwXHJcbiAgICAgKiAgMCAqIDAgPSAwXHJcbiAgICAgKiAgMCAqIE4gPSBOXHJcbiAgICAgKiAgMCAqIEkgPSBOXHJcbiAgICAgKiAgTiAqIG4gPSBOXHJcbiAgICAgKiAgTiAqIDAgPSBOXHJcbiAgICAgKiAgTiAqIE4gPSBOXHJcbiAgICAgKiAgTiAqIEkgPSBOXHJcbiAgICAgKiAgSSAqIG4gPSBJXHJcbiAgICAgKiAgSSAqIDAgPSBOXHJcbiAgICAgKiAgSSAqIE4gPSBOXHJcbiAgICAgKiAgSSAqIEkgPSBJXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbXVsdGlwbGllZCBieSB0aGUgdmFsdWVcclxuICAgICAqIG9mIEJpZ051bWJlcih5LCBiKS5cclxuICAgICAqL1xyXG4gICAgUC5tdWx0aXBsaWVkQnkgPSBQLnRpbWVzID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgdmFyIGMsIGUsIGksIGosIGssIG0sIHhjTCwgeGxvLCB4aGksIHljTCwgeWxvLCB5aGksIHpjLFxyXG4gICAgICAgIGJhc2UsIHNxcnRCYXNlLFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHljID0gKHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpKS5jO1xyXG5cclxuICAgICAgLy8gRWl0aGVyIE5hTiwgwrFJbmZpbml0eSBvciDCsTA/XHJcbiAgICAgIGlmICgheGMgfHwgIXljIHx8ICF4Y1swXSB8fCAheWNbMF0pIHtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIE5hTiBpZiBlaXRoZXIgaXMgTmFOLCBvciBvbmUgaXMgMCBhbmQgdGhlIG90aGVyIGlzIEluZmluaXR5LlxyXG4gICAgICAgIGlmICgheC5zIHx8ICF5LnMgfHwgeGMgJiYgIXhjWzBdICYmICF5YyB8fCB5YyAmJiAheWNbMF0gJiYgIXhjKSB7XHJcbiAgICAgICAgICB5LmMgPSB5LmUgPSB5LnMgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB5LnMgKj0geC5zO1xyXG5cclxuICAgICAgICAgIC8vIFJldHVybiDCsUluZmluaXR5IGlmIGVpdGhlciBpcyDCsUluZmluaXR5LlxyXG4gICAgICAgICAgaWYgKCF4YyB8fCAheWMpIHtcclxuICAgICAgICAgICAgeS5jID0geS5lID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAvLyBSZXR1cm4gwrEwIGlmIGVpdGhlciBpcyDCsTAuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB5LmMgPSBbMF07XHJcbiAgICAgICAgICAgIHkuZSA9IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZSA9IGJpdEZsb29yKHguZSAvIExPR19CQVNFKSArIGJpdEZsb29yKHkuZSAvIExPR19CQVNFKTtcclxuICAgICAgeS5zICo9IHgucztcclxuICAgICAgeGNMID0geGMubGVuZ3RoO1xyXG4gICAgICB5Y0wgPSB5Yy5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBFbnN1cmUgeGMgcG9pbnRzIHRvIGxvbmdlciBhcnJheSBhbmQgeGNMIHRvIGl0cyBsZW5ndGguXHJcbiAgICAgIGlmICh4Y0wgPCB5Y0wpIHpjID0geGMsIHhjID0geWMsIHljID0gemMsIGkgPSB4Y0wsIHhjTCA9IHljTCwgeWNMID0gaTtcclxuXHJcbiAgICAgIC8vIEluaXRpYWxpc2UgdGhlIHJlc3VsdCBhcnJheSB3aXRoIHplcm9zLlxyXG4gICAgICBmb3IgKGkgPSB4Y0wgKyB5Y0wsIHpjID0gW107IGktLTsgemMucHVzaCgwKSk7XHJcblxyXG4gICAgICBiYXNlID0gQkFTRTtcclxuICAgICAgc3FydEJhc2UgPSBTUVJUX0JBU0U7XHJcblxyXG4gICAgICBmb3IgKGkgPSB5Y0w7IC0taSA+PSAwOykge1xyXG4gICAgICAgIGMgPSAwO1xyXG4gICAgICAgIHlsbyA9IHljW2ldICUgc3FydEJhc2U7XHJcbiAgICAgICAgeWhpID0geWNbaV0gLyBzcXJ0QmFzZSB8IDA7XHJcblxyXG4gICAgICAgIGZvciAoayA9IHhjTCwgaiA9IGkgKyBrOyBqID4gaTspIHtcclxuICAgICAgICAgIHhsbyA9IHhjWy0ta10gJSBzcXJ0QmFzZTtcclxuICAgICAgICAgIHhoaSA9IHhjW2tdIC8gc3FydEJhc2UgfCAwO1xyXG4gICAgICAgICAgbSA9IHloaSAqIHhsbyArIHhoaSAqIHlsbztcclxuICAgICAgICAgIHhsbyA9IHlsbyAqIHhsbyArICgobSAlIHNxcnRCYXNlKSAqIHNxcnRCYXNlKSArIHpjW2pdICsgYztcclxuICAgICAgICAgIGMgPSAoeGxvIC8gYmFzZSB8IDApICsgKG0gLyBzcXJ0QmFzZSB8IDApICsgeWhpICogeGhpO1xyXG4gICAgICAgICAgemNbai0tXSA9IHhsbyAlIGJhc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB6Y1tqXSA9IGM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjKSB7XHJcbiAgICAgICAgKytlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHpjLnNwbGljZSgwLCAxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG5vcm1hbGlzZSh5LCB6YywgZSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbmVnYXRlZCxcclxuICAgICAqIGkuZS4gbXVsdGlwbGllZCBieSAtMS5cclxuICAgICAqL1xyXG4gICAgUC5uZWdhdGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgeCA9IG5ldyBCaWdOdW1iZXIodGhpcyk7XHJcbiAgICAgIHgucyA9IC14LnMgfHwgbnVsbDtcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIG4gKyAwID0gblxyXG4gICAgICogIG4gKyBOID0gTlxyXG4gICAgICogIG4gKyBJID0gSVxyXG4gICAgICogIDAgKyBuID0gblxyXG4gICAgICogIDAgKyAwID0gMFxyXG4gICAgICogIDAgKyBOID0gTlxyXG4gICAgICogIDAgKyBJID0gSVxyXG4gICAgICogIE4gKyBuID0gTlxyXG4gICAgICogIE4gKyAwID0gTlxyXG4gICAgICogIE4gKyBOID0gTlxyXG4gICAgICogIE4gKyBJID0gTlxyXG4gICAgICogIEkgKyBuID0gSVxyXG4gICAgICogIEkgKyAwID0gSVxyXG4gICAgICogIEkgKyBOID0gTlxyXG4gICAgICogIEkgKyBJID0gSVxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIHBsdXMgdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAucGx1cyA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHZhciB0LFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIGEgPSB4LnM7XHJcblxyXG4gICAgICB5ID0gbmV3IEJpZ051bWJlcih5LCBiKTtcclxuICAgICAgYiA9IHkucztcclxuXHJcbiAgICAgIC8vIEVpdGhlciBOYU4/XHJcbiAgICAgIGlmICghYSB8fCAhYikgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcclxuXHJcbiAgICAgIC8vIFNpZ25zIGRpZmZlcj9cclxuICAgICAgIGlmIChhICE9IGIpIHtcclxuICAgICAgICB5LnMgPSAtYjtcclxuICAgICAgICByZXR1cm4geC5taW51cyh5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHhlID0geC5lIC8gTE9HX0JBU0UsXHJcbiAgICAgICAgeWUgPSB5LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICB5YyA9IHkuYztcclxuXHJcbiAgICAgIGlmICgheGUgfHwgIXllKSB7XHJcblxyXG4gICAgICAgIC8vIFJldHVybiDCsUluZmluaXR5IGlmIGVpdGhlciDCsUluZmluaXR5LlxyXG4gICAgICAgIGlmICgheGMgfHwgIXljKSByZXR1cm4gbmV3IEJpZ051bWJlcihhIC8gMCk7XHJcblxyXG4gICAgICAgIC8vIEVpdGhlciB6ZXJvP1xyXG4gICAgICAgIC8vIFJldHVybiB5IGlmIHkgaXMgbm9uLXplcm8sIHggaWYgeCBpcyBub24temVybywgb3IgemVybyBpZiBib3RoIGFyZSB6ZXJvLlxyXG4gICAgICAgIGlmICgheGNbMF0gfHwgIXljWzBdKSByZXR1cm4geWNbMF0gPyB5IDogbmV3IEJpZ051bWJlcih4Y1swXSA/IHggOiBhICogMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHhlID0gYml0Rmxvb3IoeGUpO1xyXG4gICAgICB5ZSA9IGJpdEZsb29yKHllKTtcclxuICAgICAgeGMgPSB4Yy5zbGljZSgpO1xyXG5cclxuICAgICAgLy8gUHJlcGVuZCB6ZXJvcyB0byBlcXVhbGlzZSBleHBvbmVudHMuIEZhc3RlciB0byB1c2UgcmV2ZXJzZSB0aGVuIGRvIHVuc2hpZnRzLlxyXG4gICAgICBpZiAoYSA9IHhlIC0geWUpIHtcclxuICAgICAgICBpZiAoYSA+IDApIHtcclxuICAgICAgICAgIHllID0geGU7XHJcbiAgICAgICAgICB0ID0geWM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGEgPSAtYTtcclxuICAgICAgICAgIHQgPSB4YztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG4gICAgICAgIGZvciAoOyBhLS07IHQucHVzaCgwKSk7XHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGEgPSB4Yy5sZW5ndGg7XHJcbiAgICAgIGIgPSB5Yy5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBQb2ludCB4YyB0byB0aGUgbG9uZ2VyIGFycmF5LCBhbmQgYiB0byB0aGUgc2hvcnRlciBsZW5ndGguXHJcbiAgICAgIGlmIChhIC0gYiA8IDApIHQgPSB5YywgeWMgPSB4YywgeGMgPSB0LCBiID0gYTtcclxuXHJcbiAgICAgIC8vIE9ubHkgc3RhcnQgYWRkaW5nIGF0IHljLmxlbmd0aCAtIDEgYXMgdGhlIGZ1cnRoZXIgZGlnaXRzIG9mIHhjIGNhbiBiZSBpZ25vcmVkLlxyXG4gICAgICBmb3IgKGEgPSAwOyBiOykge1xyXG4gICAgICAgIGEgPSAoeGNbLS1iXSA9IHhjW2JdICsgeWNbYl0gKyBhKSAvIEJBU0UgfCAwO1xyXG4gICAgICAgIHhjW2JdID0gQkFTRSA9PT0geGNbYl0gPyAwIDogeGNbYl0gJSBCQVNFO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYSkge1xyXG4gICAgICAgIHhjID0gW2FdLmNvbmNhdCh4Yyk7XHJcbiAgICAgICAgKyt5ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBmb3IgemVybywgYXMgK3ggKyAreSAhPSAwICYmIC14ICsgLXkgIT0gMFxyXG4gICAgICAvLyB5ZSA9IE1BWF9FWFAgKyAxIHBvc3NpYmxlXHJcbiAgICAgIHJldHVybiBub3JtYWxpc2UoeSwgeGMsIHllKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBJZiBzZCBpcyB1bmRlZmluZWQgb3IgbnVsbCBvciB0cnVlIG9yIGZhbHNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgb2ZcclxuICAgICAqIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciwgb3IgbnVsbCBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgwrFJbmZpbml0eSBvciBOYU4uXHJcbiAgICAgKiBJZiBzZCBpcyB0cnVlIGluY2x1ZGUgaW50ZWdlci1wYXJ0IHRyYWlsaW5nIHplcm9zIGluIHRoZSBjb3VudC5cclxuICAgICAqXHJcbiAgICAgKiBPdGhlcndpc2UsIGlmIHNkIGlzIGEgbnVtYmVyLCByZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICAgKiBCaWdOdW1iZXIgcm91bmRlZCB0byBhIG1heGltdW0gb2Ygc2Qgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0sIG9yXHJcbiAgICAgKiBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogc2Qge251bWJlcnxib29sZWFufSBudW1iZXI6IHNpZ25pZmljYW50IGRpZ2l0czogaW50ZWdlciwgMSB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICBib29sZWFuOiB3aGV0aGVyIHRvIGNvdW50IGludGVnZXItcGFydCB0cmFpbGluZyB6ZXJvczogdHJ1ZSBvciBmYWxzZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3NkfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC5wcmVjaXNpb24gPSBQLnNkID0gZnVuY3Rpb24gKHNkLCBybSkge1xyXG4gICAgICB2YXIgYywgbiwgdixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChzZCAhPSBudWxsICYmIHNkICE9PSAhIXNkKSB7XHJcbiAgICAgICAgaW50Q2hlY2soc2QsIDEsIE1BWCk7XHJcbiAgICAgICAgaWYgKHJtID09IG51bGwpIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuICAgICAgICBlbHNlIGludENoZWNrKHJtLCAwLCA4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJvdW5kKG5ldyBCaWdOdW1iZXIoeCksIHNkLCBybSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghKGMgPSB4LmMpKSByZXR1cm4gbnVsbDtcclxuICAgICAgdiA9IGMubGVuZ3RoIC0gMTtcclxuICAgICAgbiA9IHYgKiBMT0dfQkFTRSArIDE7XHJcblxyXG4gICAgICBpZiAodiA9IGNbdl0pIHtcclxuXHJcbiAgICAgICAgLy8gU3VidHJhY3QgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBvZiB0aGUgbGFzdCBlbGVtZW50LlxyXG4gICAgICAgIGZvciAoOyB2ICUgMTAgPT0gMDsgdiAvPSAxMCwgbi0tKTtcclxuXHJcbiAgICAgICAgLy8gQWRkIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHRoZSBmaXJzdCBlbGVtZW50LlxyXG4gICAgICAgIGZvciAodiA9IGNbMF07IHYgPj0gMTA7IHYgLz0gMTAsIG4rKyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzZCAmJiB4LmUgKyAxID4gbikgbiA9IHguZSArIDE7XHJcblxyXG4gICAgICByZXR1cm4gbjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBzaGlmdGVkIGJ5IGsgcGxhY2VzXHJcbiAgICAgKiAocG93ZXJzIG9mIDEwKS4gU2hpZnQgdG8gdGhlIHJpZ2h0IGlmIG4gPiAwLCBhbmQgdG8gdGhlIGxlZnQgaWYgbiA8IDAuXHJcbiAgICAgKlxyXG4gICAgICogayB7bnVtYmVyfSBJbnRlZ2VyLCAtTUFYX1NBRkVfSU5URUdFUiB0byBNQVhfU0FGRV9JTlRFR0VSIGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2t9J1xyXG4gICAgICovXHJcbiAgICBQLnNoaWZ0ZWRCeSA9IGZ1bmN0aW9uIChrKSB7XHJcbiAgICAgIGludENoZWNrKGssIC1NQVhfU0FGRV9JTlRFR0VSLCBNQVhfU0FGRV9JTlRFR0VSKTtcclxuICAgICAgcmV0dXJuIHRoaXMudGltZXMoJzFlJyArIGspO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBzcXJ0KC1uKSA9ICBOXHJcbiAgICAgKiAgc3FydChOKSA9ICBOXHJcbiAgICAgKiAgc3FydCgtSSkgPSAgTlxyXG4gICAgICogIHNxcnQoSSkgPSAgSVxyXG4gICAgICogIHNxcnQoMCkgPSAgMFxyXG4gICAgICogIHNxcnQoLTApID0gLTBcclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIsXHJcbiAgICAgKiByb3VuZGVkIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmQgUk9VTkRJTkdfTU9ERS5cclxuICAgICAqL1xyXG4gICAgUC5zcXVhcmVSb290ID0gUC5zcXJ0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgbSwgbiwgciwgcmVwLCB0LFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIGMgPSB4LmMsXHJcbiAgICAgICAgcyA9IHgucyxcclxuICAgICAgICBlID0geC5lLFxyXG4gICAgICAgIGRwID0gREVDSU1BTF9QTEFDRVMgKyA0LFxyXG4gICAgICAgIGhhbGYgPSBuZXcgQmlnTnVtYmVyKCcwLjUnKTtcclxuXHJcbiAgICAgIC8vIE5lZ2F0aXZlL05hTi9JbmZpbml0eS96ZXJvP1xyXG4gICAgICBpZiAocyAhPT0gMSB8fCAhYyB8fCAhY1swXSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKCFzIHx8IHMgPCAwICYmICghYyB8fCBjWzBdKSA/IE5hTiA6IGMgPyB4IDogMSAvIDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJbml0aWFsIGVzdGltYXRlLlxyXG4gICAgICBzID0gTWF0aC5zcXJ0KCt2YWx1ZU9mKHgpKTtcclxuXHJcbiAgICAgIC8vIE1hdGguc3FydCB1bmRlcmZsb3cvb3ZlcmZsb3c/XHJcbiAgICAgIC8vIFBhc3MgeCB0byBNYXRoLnNxcnQgYXMgaW50ZWdlciwgdGhlbiBhZGp1c3QgdGhlIGV4cG9uZW50IG9mIHRoZSByZXN1bHQuXHJcbiAgICAgIGlmIChzID09IDAgfHwgcyA9PSAxIC8gMCkge1xyXG4gICAgICAgIG4gPSBjb2VmZlRvU3RyaW5nKGMpO1xyXG4gICAgICAgIGlmICgobi5sZW5ndGggKyBlKSAlIDIgPT0gMCkgbiArPSAnMCc7XHJcbiAgICAgICAgcyA9IE1hdGguc3FydCgrbik7XHJcbiAgICAgICAgZSA9IGJpdEZsb29yKChlICsgMSkgLyAyKSAtIChlIDwgMCB8fCBlICUgMik7XHJcblxyXG4gICAgICAgIGlmIChzID09IDEgLyAwKSB7XHJcbiAgICAgICAgICBuID0gJzVlJyArIGU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG4gPSBzLnRvRXhwb25lbnRpYWwoKTtcclxuICAgICAgICAgIG4gPSBuLnNsaWNlKDAsIG4uaW5kZXhPZignZScpICsgMSkgKyBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgciA9IG5ldyBCaWdOdW1iZXIobik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgciA9IG5ldyBCaWdOdW1iZXIocyArICcnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ2hlY2sgZm9yIHplcm8uXHJcbiAgICAgIC8vIHIgY291bGQgYmUgemVybyBpZiBNSU5fRVhQIGlzIGNoYW5nZWQgYWZ0ZXIgdGhlIHRoaXMgdmFsdWUgd2FzIGNyZWF0ZWQuXHJcbiAgICAgIC8vIFRoaXMgd291bGQgY2F1c2UgYSBkaXZpc2lvbiBieSB6ZXJvICh4L3QpIGFuZCBoZW5jZSBJbmZpbml0eSBiZWxvdywgd2hpY2ggd291bGQgY2F1c2VcclxuICAgICAgLy8gY29lZmZUb1N0cmluZyB0byB0aHJvdy5cclxuICAgICAgaWYgKHIuY1swXSkge1xyXG4gICAgICAgIGUgPSByLmU7XHJcbiAgICAgICAgcyA9IGUgKyBkcDtcclxuICAgICAgICBpZiAocyA8IDMpIHMgPSAwO1xyXG5cclxuICAgICAgICAvLyBOZXd0b24tUmFwaHNvbiBpdGVyYXRpb24uXHJcbiAgICAgICAgZm9yICg7IDspIHtcclxuICAgICAgICAgIHQgPSByO1xyXG4gICAgICAgICAgciA9IGhhbGYudGltZXModC5wbHVzKGRpdih4LCB0LCBkcCwgMSkpKTtcclxuXHJcbiAgICAgICAgICBpZiAoY29lZmZUb1N0cmluZyh0LmMpLnNsaWNlKDAsIHMpID09PSAobiA9IGNvZWZmVG9TdHJpbmcoci5jKSkuc2xpY2UoMCwgcykpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIFRoZSBleHBvbmVudCBvZiByIG1heSBoZXJlIGJlIG9uZSBsZXNzIHRoYW4gdGhlIGZpbmFsIHJlc3VsdCBleHBvbmVudCxcclxuICAgICAgICAgICAgLy8gZS5nIDAuMDAwOTk5OSAoZS00KSAtLT4gMC4wMDEgKGUtMyksIHNvIGFkanVzdCBzIHNvIHRoZSByb3VuZGluZyBkaWdpdHNcclxuICAgICAgICAgICAgLy8gYXJlIGluZGV4ZWQgY29ycmVjdGx5LlxyXG4gICAgICAgICAgICBpZiAoci5lIDwgZSkgLS1zO1xyXG4gICAgICAgICAgICBuID0gbi5zbGljZShzIC0gMywgcyArIDEpO1xyXG5cclxuICAgICAgICAgICAgLy8gVGhlIDR0aCByb3VuZGluZyBkaWdpdCBtYXkgYmUgaW4gZXJyb3IgYnkgLTEgc28gaWYgdGhlIDQgcm91bmRpbmcgZGlnaXRzXHJcbiAgICAgICAgICAgIC8vIGFyZSA5OTk5IG9yIDQ5OTkgKGkuZS4gYXBwcm9hY2hpbmcgYSByb3VuZGluZyBib3VuZGFyeSkgY29udGludWUgdGhlXHJcbiAgICAgICAgICAgIC8vIGl0ZXJhdGlvbi5cclxuICAgICAgICAgICAgaWYgKG4gPT0gJzk5OTknIHx8ICFyZXAgJiYgbiA9PSAnNDk5OScpIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gT24gdGhlIGZpcnN0IGl0ZXJhdGlvbiBvbmx5LCBjaGVjayB0byBzZWUgaWYgcm91bmRpbmcgdXAgZ2l2ZXMgdGhlXHJcbiAgICAgICAgICAgICAgLy8gZXhhY3QgcmVzdWx0IGFzIHRoZSBuaW5lcyBtYXkgaW5maW5pdGVseSByZXBlYXQuXHJcbiAgICAgICAgICAgICAgaWYgKCFyZXApIHtcclxuICAgICAgICAgICAgICAgIHJvdW5kKHQsIHQuZSArIERFQ0lNQUxfUExBQ0VTICsgMiwgMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHQudGltZXModCkuZXEoeCkpIHtcclxuICAgICAgICAgICAgICAgICAgciA9IHQ7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgZHAgKz0gNDtcclxuICAgICAgICAgICAgICBzICs9IDQ7XHJcbiAgICAgICAgICAgICAgcmVwID0gMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgcm91bmRpbmcgZGlnaXRzIGFyZSBudWxsLCAwezAsNH0gb3IgNTB7MCwzfSwgY2hlY2sgZm9yIGV4YWN0XHJcbiAgICAgICAgICAgICAgLy8gcmVzdWx0LiBJZiBub3QsIHRoZW4gdGhlcmUgYXJlIGZ1cnRoZXIgZGlnaXRzIGFuZCBtIHdpbGwgYmUgdHJ1dGh5LlxyXG4gICAgICAgICAgICAgIGlmICghK24gfHwgIStuLnNsaWNlKDEpICYmIG4uY2hhckF0KDApID09ICc1Jykge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFRydW5jYXRlIHRvIHRoZSBmaXJzdCByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICAgICAgICAgIHJvdW5kKHIsIHIuZSArIERFQ0lNQUxfUExBQ0VTICsgMiwgMSk7XHJcbiAgICAgICAgICAgICAgICBtID0gIXIudGltZXMocikuZXEoeCk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHJvdW5kKHIsIHIuZSArIERFQ0lNQUxfUExBQ0VTICsgMSwgUk9VTkRJTkdfTU9ERSwgbSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gZXhwb25lbnRpYWwgbm90YXRpb24gYW5kXHJcbiAgICAgKiByb3VuZGVkIHVzaW5nIFJPVU5ESU5HX01PREUgdG8gZHAgZml4ZWQgZGVjaW1hbCBwbGFjZXMuXHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnRvRXhwb25lbnRpYWwgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICAgIGlmIChkcCAhPSBudWxsKSB7XHJcbiAgICAgICAgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcbiAgICAgICAgZHArKztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMsIGRwLCBybSwgMSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gZml4ZWQtcG9pbnQgbm90YXRpb24gcm91bmRpbmdcclxuICAgICAqIHRvIGRwIGZpeGVkIGRlY2ltYWwgcGxhY2VzIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0sIG9yIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBOb3RlOiBhcyB3aXRoIEphdmFTY3JpcHQncyBudW1iZXIgdHlwZSwgKC0wKS50b0ZpeGVkKDApIGlzICcwJyxcclxuICAgICAqIGJ1dCBlLmcuICgtMC4wMDAwMSkudG9GaXhlZCgwKSBpcyAnLTAnLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC50b0ZpeGVkID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgICBpZiAoZHAgIT0gbnVsbCkge1xyXG4gICAgICAgIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG4gICAgICAgIGRwID0gZHAgKyB0aGlzLmUgKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcywgZHAsIHJtKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBmaXhlZC1wb2ludCBub3RhdGlvbiByb3VuZGVkXHJcbiAgICAgKiB1c2luZyBybSBvciBST1VORElOR19NT0RFIHRvIGRwIGRlY2ltYWwgcGxhY2VzLCBhbmQgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgcHJvcGVydGllc1xyXG4gICAgICogb2YgdGhlIGZvcm1hdCBvciBGT1JNQVQgb2JqZWN0IChzZWUgQmlnTnVtYmVyLnNldCkuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGZvcm1hdHRpbmcgb2JqZWN0IG1heSBjb250YWluIHNvbWUgb3IgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHNob3duIGJlbG93LlxyXG4gICAgICpcclxuICAgICAqIEZPUk1BVCA9IHtcclxuICAgICAqICAgcHJlZml4OiAnJyxcclxuICAgICAqICAgZ3JvdXBTaXplOiAzLFxyXG4gICAgICogICBzZWNvbmRhcnlHcm91cFNpemU6IDAsXHJcbiAgICAgKiAgIGdyb3VwU2VwYXJhdG9yOiAnLCcsXHJcbiAgICAgKiAgIGRlY2ltYWxTZXBhcmF0b3I6ICcuJyxcclxuICAgICAqICAgZnJhY3Rpb25Hcm91cFNpemU6IDAsXHJcbiAgICAgKiAgIGZyYWN0aW9uR3JvdXBTZXBhcmF0b3I6ICdcXHhBMCcsICAgICAgLy8gbm9uLWJyZWFraW5nIHNwYWNlXHJcbiAgICAgKiAgIHN1ZmZpeDogJydcclxuICAgICAqIH07XHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICogW2Zvcm1hdF0ge29iamVjdH0gRm9ybWF0dGluZyBvcHRpb25zLiBTZWUgRk9STUFUIHBiamVjdCBhYm92ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCBub3QgYW4gb2JqZWN0OiB7Zm9ybWF0fSdcclxuICAgICAqL1xyXG4gICAgUC50b0Zvcm1hdCA9IGZ1bmN0aW9uIChkcCwgcm0sIGZvcm1hdCkge1xyXG4gICAgICB2YXIgc3RyLFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgaWYgKGZvcm1hdCA9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGRwICE9IG51bGwgJiYgcm0gJiYgdHlwZW9mIHJtID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBybTtcclxuICAgICAgICAgIHJtID0gbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKGRwICYmIHR5cGVvZiBkcCA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgZm9ybWF0ID0gZHA7XHJcbiAgICAgICAgICBkcCA9IHJtID0gbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRk9STUFUO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZm9ybWF0ICE9ICdvYmplY3QnKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdBcmd1bWVudCBub3QgYW4gb2JqZWN0OiAnICsgZm9ybWF0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3RyID0geC50b0ZpeGVkKGRwLCBybSk7XHJcblxyXG4gICAgICBpZiAoeC5jKSB7XHJcbiAgICAgICAgdmFyIGksXHJcbiAgICAgICAgICBhcnIgPSBzdHIuc3BsaXQoJy4nKSxcclxuICAgICAgICAgIGcxID0gK2Zvcm1hdC5ncm91cFNpemUsXHJcbiAgICAgICAgICBnMiA9ICtmb3JtYXQuc2Vjb25kYXJ5R3JvdXBTaXplLFxyXG4gICAgICAgICAgZ3JvdXBTZXBhcmF0b3IgPSBmb3JtYXQuZ3JvdXBTZXBhcmF0b3IgfHwgJycsXHJcbiAgICAgICAgICBpbnRQYXJ0ID0gYXJyWzBdLFxyXG4gICAgICAgICAgZnJhY3Rpb25QYXJ0ID0gYXJyWzFdLFxyXG4gICAgICAgICAgaXNOZWcgPSB4LnMgPCAwLFxyXG4gICAgICAgICAgaW50RGlnaXRzID0gaXNOZWcgPyBpbnRQYXJ0LnNsaWNlKDEpIDogaW50UGFydCxcclxuICAgICAgICAgIGxlbiA9IGludERpZ2l0cy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmIChnMikgaSA9IGcxLCBnMSA9IGcyLCBnMiA9IGksIGxlbiAtPSBpO1xyXG5cclxuICAgICAgICBpZiAoZzEgPiAwICYmIGxlbiA+IDApIHtcclxuICAgICAgICAgIGkgPSBsZW4gJSBnMSB8fCBnMTtcclxuICAgICAgICAgIGludFBhcnQgPSBpbnREaWdpdHMuc3Vic3RyKDAsIGkpO1xyXG4gICAgICAgICAgZm9yICg7IGkgPCBsZW47IGkgKz0gZzEpIGludFBhcnQgKz0gZ3JvdXBTZXBhcmF0b3IgKyBpbnREaWdpdHMuc3Vic3RyKGksIGcxKTtcclxuICAgICAgICAgIGlmIChnMiA+IDApIGludFBhcnQgKz0gZ3JvdXBTZXBhcmF0b3IgKyBpbnREaWdpdHMuc2xpY2UoaSk7XHJcbiAgICAgICAgICBpZiAoaXNOZWcpIGludFBhcnQgPSAnLScgKyBpbnRQYXJ0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RyID0gZnJhY3Rpb25QYXJ0XHJcbiAgICAgICAgID8gaW50UGFydCArIChmb3JtYXQuZGVjaW1hbFNlcGFyYXRvciB8fCAnJykgKyAoKGcyID0gK2Zvcm1hdC5mcmFjdGlvbkdyb3VwU2l6ZSlcclxuICAgICAgICAgID8gZnJhY3Rpb25QYXJ0LnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXGR7JyArIGcyICsgJ31cXFxcQicsICdnJyksXHJcbiAgICAgICAgICAgJyQmJyArIChmb3JtYXQuZnJhY3Rpb25Hcm91cFNlcGFyYXRvciB8fCAnJykpXHJcbiAgICAgICAgICA6IGZyYWN0aW9uUGFydClcclxuICAgICAgICAgOiBpbnRQYXJ0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gKGZvcm1hdC5wcmVmaXggfHwgJycpICsgc3RyICsgKGZvcm1hdC5zdWZmaXggfHwgJycpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhbiBhcnJheSBvZiB0d28gQmlnTnVtYmVycyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGFzIGEgc2ltcGxlXHJcbiAgICAgKiBmcmFjdGlvbiB3aXRoIGFuIGludGVnZXIgbnVtZXJhdG9yIGFuZCBhbiBpbnRlZ2VyIGRlbm9taW5hdG9yLlxyXG4gICAgICogVGhlIGRlbm9taW5hdG9yIHdpbGwgYmUgYSBwb3NpdGl2ZSBub24temVybyB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNwZWNpZmllZFxyXG4gICAgICogbWF4aW11bSBkZW5vbWluYXRvci4gSWYgYSBtYXhpbXVtIGRlbm9taW5hdG9yIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZW5vbWluYXRvciB3aWxsIGJlXHJcbiAgICAgKiB0aGUgbG93ZXN0IHZhbHVlIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIG51bWJlciBleGFjdGx5LlxyXG4gICAgICpcclxuICAgICAqIFttZF0ge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBJbnRlZ2VyID49IDEsIG9yIEluZmluaXR5LiBUaGUgbWF4aW11bSBkZW5vbWluYXRvci5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX0gOiB7bWR9J1xyXG4gICAgICovXHJcbiAgICBQLnRvRnJhY3Rpb24gPSBmdW5jdGlvbiAobWQpIHtcclxuICAgICAgdmFyIGQsIGQwLCBkMSwgZDIsIGUsIGV4cCwgbiwgbjAsIG4xLCBxLCByLCBzLFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIHhjID0geC5jO1xyXG5cclxuICAgICAgaWYgKG1kICE9IG51bGwpIHtcclxuICAgICAgICBuID0gbmV3IEJpZ051bWJlcihtZCk7XHJcblxyXG4gICAgICAgIC8vIFRocm93IGlmIG1kIGlzIGxlc3MgdGhhbiBvbmUgb3IgaXMgbm90IGFuIGludGVnZXIsIHVubGVzcyBpdCBpcyBJbmZpbml0eS5cclxuICAgICAgICBpZiAoIW4uaXNJbnRlZ2VyKCkgJiYgKG4uYyB8fCBuLnMgIT09IDEpIHx8IG4ubHQoT05FKSkge1xyXG4gICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ0FyZ3VtZW50ICcgK1xyXG4gICAgICAgICAgICAgIChuLmlzSW50ZWdlcigpID8gJ291dCBvZiByYW5nZTogJyA6ICdub3QgYW4gaW50ZWdlcjogJykgKyB2YWx1ZU9mKG4pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICgheGMpIHJldHVybiBuZXcgQmlnTnVtYmVyKHgpO1xyXG5cclxuICAgICAgZCA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuICAgICAgbjEgPSBkMCA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuICAgICAgZDEgPSBuMCA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuICAgICAgcyA9IGNvZWZmVG9TdHJpbmcoeGMpO1xyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIGluaXRpYWwgZGVub21pbmF0b3IuXHJcbiAgICAgIC8vIGQgaXMgYSBwb3dlciBvZiAxMCBhbmQgdGhlIG1pbmltdW0gbWF4IGRlbm9taW5hdG9yIHRoYXQgc3BlY2lmaWVzIHRoZSB2YWx1ZSBleGFjdGx5LlxyXG4gICAgICBlID0gZC5lID0gcy5sZW5ndGggLSB4LmUgLSAxO1xyXG4gICAgICBkLmNbMF0gPSBQT1dTX1RFTlsoZXhwID0gZSAlIExPR19CQVNFKSA8IDAgPyBMT0dfQkFTRSArIGV4cCA6IGV4cF07XHJcbiAgICAgIG1kID0gIW1kIHx8IG4uY29tcGFyZWRUbyhkKSA+IDAgPyAoZSA+IDAgPyBkIDogbjEpIDogbjtcclxuXHJcbiAgICAgIGV4cCA9IE1BWF9FWFA7XHJcbiAgICAgIE1BWF9FWFAgPSAxIC8gMDtcclxuICAgICAgbiA9IG5ldyBCaWdOdW1iZXIocyk7XHJcblxyXG4gICAgICAvLyBuMCA9IGQxID0gMFxyXG4gICAgICBuMC5jWzBdID0gMDtcclxuXHJcbiAgICAgIGZvciAoOyA7KSAge1xyXG4gICAgICAgIHEgPSBkaXYobiwgZCwgMCwgMSk7XHJcbiAgICAgICAgZDIgPSBkMC5wbHVzKHEudGltZXMoZDEpKTtcclxuICAgICAgICBpZiAoZDIuY29tcGFyZWRUbyhtZCkgPT0gMSkgYnJlYWs7XHJcbiAgICAgICAgZDAgPSBkMTtcclxuICAgICAgICBkMSA9IGQyO1xyXG4gICAgICAgIG4xID0gbjAucGx1cyhxLnRpbWVzKGQyID0gbjEpKTtcclxuICAgICAgICBuMCA9IGQyO1xyXG4gICAgICAgIGQgPSBuLm1pbnVzKHEudGltZXMoZDIgPSBkKSk7XHJcbiAgICAgICAgbiA9IGQyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkMiA9IGRpdihtZC5taW51cyhkMCksIGQxLCAwLCAxKTtcclxuICAgICAgbjAgPSBuMC5wbHVzKGQyLnRpbWVzKG4xKSk7XHJcbiAgICAgIGQwID0gZDAucGx1cyhkMi50aW1lcyhkMSkpO1xyXG4gICAgICBuMC5zID0gbjEucyA9IHgucztcclxuICAgICAgZSA9IGUgKiAyO1xyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGZyYWN0aW9uIGlzIGNsb3NlciB0byB4LCBuMC9kMCBvciBuMS9kMVxyXG4gICAgICByID0gZGl2KG4xLCBkMSwgZSwgUk9VTkRJTkdfTU9ERSkubWludXMoeCkuYWJzKCkuY29tcGFyZWRUbyhcclxuICAgICAgICAgIGRpdihuMCwgZDAsIGUsIFJPVU5ESU5HX01PREUpLm1pbnVzKHgpLmFicygpKSA8IDEgPyBbbjEsIGQxXSA6IFtuMCwgZDBdO1xyXG5cclxuICAgICAgTUFYX0VYUCA9IGV4cDtcclxuXHJcbiAgICAgIHJldHVybiByO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgY29udmVydGVkIHRvIGEgbnVtYmVyIHByaW1pdGl2ZS5cclxuICAgICAqL1xyXG4gICAgUC50b051bWJlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICt2YWx1ZU9mKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIHJvdW5kZWQgdG8gc2Qgc2lnbmlmaWNhbnQgZGlnaXRzXHJcbiAgICAgKiB1c2luZyByb3VuZGluZyBtb2RlIHJtIG9yIFJPVU5ESU5HX01PREUuIElmIHNkIGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGRpZ2l0c1xyXG4gICAgICogbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgaW50ZWdlciBwYXJ0IG9mIHRoZSB2YWx1ZSBpbiBmaXhlZC1wb2ludCBub3RhdGlvbiwgdGhlbiB1c2VcclxuICAgICAqIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtzZHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAudG9QcmVjaXNpb24gPSBmdW5jdGlvbiAoc2QsIHJtKSB7XHJcbiAgICAgIGlmIChzZCAhPSBudWxsKSBpbnRDaGVjayhzZCwgMSwgTUFYKTtcclxuICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLCBzZCwgcm0sIDIpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGJhc2UgYiwgb3IgYmFzZSAxMCBpZiBiIGlzXHJcbiAgICAgKiBvbWl0dGVkLiBJZiBhIGJhc2UgaXMgc3BlY2lmaWVkLCBpbmNsdWRpbmcgYmFzZSAxMCwgcm91bmQgYWNjb3JkaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFuZFxyXG4gICAgICogUk9VTkRJTkdfTU9ERS4gSWYgYSBiYXNlIGlzIG5vdCBzcGVjaWZpZWQsIGFuZCB0aGlzIEJpZ051bWJlciBoYXMgYSBwb3NpdGl2ZSBleHBvbmVudFxyXG4gICAgICogdGhhdCBpcyBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gVE9fRVhQX1BPUywgb3IgYSBuZWdhdGl2ZSBleHBvbmVudCBlcXVhbCB0byBvciBsZXNzIHRoYW5cclxuICAgICAqIFRPX0VYUF9ORUcsIHJldHVybiBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBbYl0ge251bWJlcn0gSW50ZWdlciwgMiB0byBBTFBIQUJFVC5sZW5ndGggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBCYXNlIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtifSdcclxuICAgICAqL1xyXG4gICAgUC50b1N0cmluZyA9IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgIHZhciBzdHIsXHJcbiAgICAgICAgbiA9IHRoaXMsXHJcbiAgICAgICAgcyA9IG4ucyxcclxuICAgICAgICBlID0gbi5lO1xyXG5cclxuICAgICAgLy8gSW5maW5pdHkgb3IgTmFOP1xyXG4gICAgICBpZiAoZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChzKSB7XHJcbiAgICAgICAgICBzdHIgPSAnSW5maW5pdHknO1xyXG4gICAgICAgICAgaWYgKHMgPCAwKSBzdHIgPSAnLScgKyBzdHI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHN0ciA9ICdOYU4nO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoYiA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdHIgPSBlIDw9IFRPX0VYUF9ORUcgfHwgZSA+PSBUT19FWFBfUE9TXHJcbiAgICAgICAgICAgPyB0b0V4cG9uZW50aWFsKGNvZWZmVG9TdHJpbmcobi5jKSwgZSlcclxuICAgICAgICAgICA6IHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKG4uYyksIGUsICcwJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChiID09PSAxMCkge1xyXG4gICAgICAgICAgbiA9IHJvdW5kKG5ldyBCaWdOdW1iZXIobiksIERFQ0lNQUxfUExBQ0VTICsgZSArIDEsIFJPVU5ESU5HX01PREUpO1xyXG4gICAgICAgICAgc3RyID0gdG9GaXhlZFBvaW50KGNvZWZmVG9TdHJpbmcobi5jKSwgbi5lLCAnMCcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpbnRDaGVjayhiLCAyLCBBTFBIQUJFVC5sZW5ndGgsICdCYXNlJyk7XHJcbiAgICAgICAgICBzdHIgPSBjb252ZXJ0QmFzZSh0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyhuLmMpLCBlLCAnMCcpLCAxMCwgYiwgcywgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocyA8IDAgJiYgbi5jWzBdKSBzdHIgPSAnLScgKyBzdHI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGFzIHRvU3RyaW5nLCBidXQgZG8gbm90IGFjY2VwdCBhIGJhc2UgYXJndW1lbnQsIGFuZCBpbmNsdWRlIHRoZSBtaW51cyBzaWduIGZvclxyXG4gICAgICogbmVnYXRpdmUgemVyby5cclxuICAgICAqL1xyXG4gICAgUC52YWx1ZU9mID0gUC50b0pTT04gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU9mKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgUC5faXNCaWdOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIGlmIChjb25maWdPYmplY3QgIT0gbnVsbCkgQmlnTnVtYmVyLnNldChjb25maWdPYmplY3QpO1xyXG5cclxuICAgIHJldHVybiBCaWdOdW1iZXI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gUFJJVkFURSBIRUxQRVIgRlVOQ1RJT05TXHJcblxyXG4gIC8vIFRoZXNlIGZ1bmN0aW9ucyBkb24ndCBuZWVkIGFjY2VzcyB0byB2YXJpYWJsZXMsXHJcbiAgLy8gZS5nLiBERUNJTUFMX1BMQUNFUywgaW4gdGhlIHNjb3BlIG9mIHRoZSBgY2xvbmVgIGZ1bmN0aW9uIGFib3ZlLlxyXG5cclxuXHJcbiAgZnVuY3Rpb24gYml0Rmxvb3Iobikge1xyXG4gICAgdmFyIGkgPSBuIHwgMDtcclxuICAgIHJldHVybiBuID4gMCB8fCBuID09PSBpID8gaSA6IGkgLSAxO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIFJldHVybiBhIGNvZWZmaWNpZW50IGFycmF5IGFzIGEgc3RyaW5nIG9mIGJhc2UgMTAgZGlnaXRzLlxyXG4gIGZ1bmN0aW9uIGNvZWZmVG9TdHJpbmcoYSkge1xyXG4gICAgdmFyIHMsIHosXHJcbiAgICAgIGkgPSAxLFxyXG4gICAgICBqID0gYS5sZW5ndGgsXHJcbiAgICAgIHIgPSBhWzBdICsgJyc7XHJcblxyXG4gICAgZm9yICg7IGkgPCBqOykge1xyXG4gICAgICBzID0gYVtpKytdICsgJyc7XHJcbiAgICAgIHogPSBMT0dfQkFTRSAtIHMubGVuZ3RoO1xyXG4gICAgICBmb3IgKDsgei0tOyBzID0gJzAnICsgcyk7XHJcbiAgICAgIHIgKz0gcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICBmb3IgKGogPSByLmxlbmd0aDsgci5jaGFyQ29kZUF0KC0taikgPT09IDQ4Oyk7XHJcblxyXG4gICAgcmV0dXJuIHIuc2xpY2UoMCwgaiArIDEgfHwgMSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQ29tcGFyZSB0aGUgdmFsdWUgb2YgQmlnTnVtYmVycyB4IGFuZCB5LlxyXG4gIGZ1bmN0aW9uIGNvbXBhcmUoeCwgeSkge1xyXG4gICAgdmFyIGEsIGIsXHJcbiAgICAgIHhjID0geC5jLFxyXG4gICAgICB5YyA9IHkuYyxcclxuICAgICAgaSA9IHgucyxcclxuICAgICAgaiA9IHkucyxcclxuICAgICAgayA9IHguZSxcclxuICAgICAgbCA9IHkuZTtcclxuXHJcbiAgICAvLyBFaXRoZXIgTmFOP1xyXG4gICAgaWYgKCFpIHx8ICFqKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBhID0geGMgJiYgIXhjWzBdO1xyXG4gICAgYiA9IHljICYmICF5Y1swXTtcclxuXHJcbiAgICAvLyBFaXRoZXIgemVybz9cclxuICAgIGlmIChhIHx8IGIpIHJldHVybiBhID8gYiA/IDAgOiAtaiA6IGk7XHJcblxyXG4gICAgLy8gU2lnbnMgZGlmZmVyP1xyXG4gICAgaWYgKGkgIT0gaikgcmV0dXJuIGk7XHJcblxyXG4gICAgYSA9IGkgPCAwO1xyXG4gICAgYiA9IGsgPT0gbDtcclxuXHJcbiAgICAvLyBFaXRoZXIgSW5maW5pdHk/XHJcbiAgICBpZiAoIXhjIHx8ICF5YykgcmV0dXJuIGIgPyAwIDogIXhjIF4gYSA/IDEgOiAtMTtcclxuXHJcbiAgICAvLyBDb21wYXJlIGV4cG9uZW50cy5cclxuICAgIGlmICghYikgcmV0dXJuIGsgPiBsIF4gYSA/IDEgOiAtMTtcclxuXHJcbiAgICBqID0gKGsgPSB4Yy5sZW5ndGgpIDwgKGwgPSB5Yy5sZW5ndGgpID8gayA6IGw7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBkaWdpdCBieSBkaWdpdC5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBqOyBpKyspIGlmICh4Y1tpXSAhPSB5Y1tpXSkgcmV0dXJuIHhjW2ldID4geWNbaV0gXiBhID8gMSA6IC0xO1xyXG5cclxuICAgIC8vIENvbXBhcmUgbGVuZ3Rocy5cclxuICAgIHJldHVybiBrID09IGwgPyAwIDogayA+IGwgXiBhID8gMSA6IC0xO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogQ2hlY2sgdGhhdCBuIGlzIGEgcHJpbWl0aXZlIG51bWJlciwgYW4gaW50ZWdlciwgYW5kIGluIHJhbmdlLCBvdGhlcndpc2UgdGhyb3cuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaW50Q2hlY2sobiwgbWluLCBtYXgsIG5hbWUpIHtcclxuICAgIGlmIChuIDwgbWluIHx8IG4gPiBtYXggfHwgbiAhPT0gbWF0aGZsb29yKG4pKSB7XHJcbiAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAobmFtZSB8fCAnQXJndW1lbnQnKSArICh0eXBlb2YgbiA9PSAnbnVtYmVyJ1xyXG4gICAgICAgICA/IG4gPCBtaW4gfHwgbiA+IG1heCA/ICcgb3V0IG9mIHJhbmdlOiAnIDogJyBub3QgYW4gaW50ZWdlcjogJ1xyXG4gICAgICAgICA6ICcgbm90IGEgcHJpbWl0aXZlIG51bWJlcjogJykgKyBTdHJpbmcobikpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIEFzc3VtZXMgZmluaXRlIG4uXHJcbiAgZnVuY3Rpb24gaXNPZGQobikge1xyXG4gICAgdmFyIGsgPSBuLmMubGVuZ3RoIC0gMTtcclxuICAgIHJldHVybiBiaXRGbG9vcihuLmUgLyBMT0dfQkFTRSkgPT0gayAmJiBuLmNba10gJSAyICE9IDA7XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gdG9FeHBvbmVudGlhbChzdHIsIGUpIHtcclxuICAgIHJldHVybiAoc3RyLmxlbmd0aCA+IDEgPyBzdHIuY2hhckF0KDApICsgJy4nICsgc3RyLnNsaWNlKDEpIDogc3RyKSArXHJcbiAgICAgKGUgPCAwID8gJ2UnIDogJ2UrJykgKyBlO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIHRvRml4ZWRQb2ludChzdHIsIGUsIHopIHtcclxuICAgIHZhciBsZW4sIHpzO1xyXG5cclxuICAgIC8vIE5lZ2F0aXZlIGV4cG9uZW50P1xyXG4gICAgaWYgKGUgPCAwKSB7XHJcblxyXG4gICAgICAvLyBQcmVwZW5kIHplcm9zLlxyXG4gICAgICBmb3IgKHpzID0geiArICcuJzsgKytlOyB6cyArPSB6KTtcclxuICAgICAgc3RyID0genMgKyBzdHI7XHJcblxyXG4gICAgLy8gUG9zaXRpdmUgZXhwb25lbnRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBBcHBlbmQgemVyb3MuXHJcbiAgICAgIGlmICgrK2UgPiBsZW4pIHtcclxuICAgICAgICBmb3IgKHpzID0geiwgZSAtPSBsZW47IC0tZTsgenMgKz0geik7XHJcbiAgICAgICAgc3RyICs9IHpzO1xyXG4gICAgICB9IGVsc2UgaWYgKGUgPCBsZW4pIHtcclxuICAgICAgICBzdHIgPSBzdHIuc2xpY2UoMCwgZSkgKyAnLicgKyBzdHIuc2xpY2UoZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RyO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEVYUE9SVFxyXG5cclxuXHJcbiAgQmlnTnVtYmVyID0gY2xvbmUoKTtcclxuICBCaWdOdW1iZXJbJ2RlZmF1bHQnXSA9IEJpZ051bWJlci5CaWdOdW1iZXIgPSBCaWdOdW1iZXI7XHJcblxyXG4gIC8vIEFNRC5cclxuICBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcclxuICAgIGRlZmluZShmdW5jdGlvbiAoKSB7IHJldHVybiBCaWdOdW1iZXI7IH0pO1xyXG5cclxuICAvLyBOb2RlLmpzIGFuZCBvdGhlciBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IG1vZHVsZS5leHBvcnRzLlxyXG4gIH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBCaWdOdW1iZXI7XHJcblxyXG4gIC8vIEJyb3dzZXIuXHJcbiAgfSBlbHNlIHtcclxuICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7XHJcbiAgICAgIGdsb2JhbE9iamVjdCA9IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYgPyBzZWxmIDogd2luZG93O1xyXG4gICAgfVxyXG5cclxuICAgIGdsb2JhbE9iamVjdC5CaWdOdW1iZXIgPSBCaWdOdW1iZXI7XHJcbiAgfVxyXG59KSh0aGlzKTtcclxuIiwidmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIERlbGF5ZWRTdHJlYW0gPSByZXF1aXJlKCdkZWxheWVkLXN0cmVhbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbWJpbmVkU3RyZWFtO1xuZnVuY3Rpb24gQ29tYmluZWRTdHJlYW0oKSB7XG4gIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuICB0aGlzLm1heERhdGFTaXplID0gMiAqIDEwMjQgKiAxMDI0O1xuICB0aGlzLnBhdXNlU3RyZWFtcyA9IHRydWU7XG5cbiAgdGhpcy5fcmVsZWFzZWQgPSBmYWxzZTtcbiAgdGhpcy5fc3RyZWFtcyA9IFtdO1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcbiAgdGhpcy5faW5zaWRlTG9vcCA9IGZhbHNlO1xuICB0aGlzLl9wZW5kaW5nTmV4dCA9IGZhbHNlO1xufVxudXRpbC5pbmhlcml0cyhDb21iaW5lZFN0cmVhbSwgU3RyZWFtKTtcblxuQ29tYmluZWRTdHJlYW0uY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICB2YXIgY29tYmluZWRTdHJlYW0gPSBuZXcgdGhpcygpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGNvbWJpbmVkU3RyZWFtW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRTdHJlYW07XG59O1xuXG5Db21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2UgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgcmV0dXJuICh0eXBlb2Ygc3RyZWFtICE9PSAnZnVuY3Rpb24nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnc3RyaW5nJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Jvb2xlYW4nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnbnVtYmVyJylcbiAgICAmJiAoIUJ1ZmZlci5pc0J1ZmZlcihzdHJlYW0pKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuXG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBpZiAoIShzdHJlYW0gaW5zdGFuY2VvZiBEZWxheWVkU3RyZWFtKSkge1xuICAgICAgdmFyIG5ld1N0cmVhbSA9IERlbGF5ZWRTdHJlYW0uY3JlYXRlKHN0cmVhbSwge1xuICAgICAgICBtYXhEYXRhU2l6ZTogSW5maW5pdHksXG4gICAgICAgIHBhdXNlU3RyZWFtOiB0aGlzLnBhdXNlU3RyZWFtcyxcbiAgICAgIH0pO1xuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgdGhpcy5fY2hlY2tEYXRhU2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgIHN0cmVhbSA9IG5ld1N0cmVhbTtcbiAgICB9XG5cbiAgICB0aGlzLl9oYW5kbGVFcnJvcnMoc3RyZWFtKTtcblxuICAgIGlmICh0aGlzLnBhdXNlU3RyZWFtcykge1xuICAgICAgc3RyZWFtLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5fc3RyZWFtcy5wdXNoKHN0cmVhbSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBvcHRpb25zKSB7XG4gIFN0cmVhbS5wcm90b3R5cGUucGlwZS5jYWxsKHRoaXMsIGRlc3QsIG9wdGlvbnMpO1xuICB0aGlzLnJlc3VtZSgpO1xuICByZXR1cm4gZGVzdDtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fZ2V0TmV4dCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcblxuICBpZiAodGhpcy5faW5zaWRlTG9vcCkge1xuICAgIHRoaXMuX3BlbmRpbmdOZXh0ID0gdHJ1ZTtcbiAgICByZXR1cm47IC8vIGRlZmVyIGNhbGxcbiAgfVxuXG4gIHRoaXMuX2luc2lkZUxvb3AgPSB0cnVlO1xuICB0cnkge1xuICAgIGRvIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdOZXh0ID0gZmFsc2U7XG4gICAgICB0aGlzLl9yZWFsR2V0TmV4dCgpO1xuICAgIH0gd2hpbGUgKHRoaXMuX3BlbmRpbmdOZXh0KTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLl9pbnNpZGVMb29wID0gZmFsc2U7XG4gIH1cbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcmVhbEdldE5leHQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHN0cmVhbSA9IHRoaXMuX3N0cmVhbXMuc2hpZnQoKTtcblxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtID09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhpcy5lbmQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX3BpcGVOZXh0KHN0cmVhbSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGdldFN0cmVhbSA9IHN0cmVhbTtcbiAgZ2V0U3RyZWFtKGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcbiAgICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCB0aGlzLl9jaGVja0RhdGFTaXplLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5faGFuZGxlRXJyb3JzKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGlwZU5leHQoc3RyZWFtKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcGlwZU5leHQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IHN0cmVhbTtcblxuICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBzdHJlYW0ub24oJ2VuZCcsIHRoaXMuX2dldE5leHQuYmluZCh0aGlzKSk7XG4gICAgc3RyZWFtLnBpcGUodGhpcywge2VuZDogZmFsc2V9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmFsdWUgPSBzdHJlYW07XG4gIHRoaXMud3JpdGUodmFsdWUpO1xuICB0aGlzLl9nZXROZXh0KCk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVycm9ycyA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICBzZWxmLl9lbWl0RXJyb3IoZXJyKTtcbiAgfSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHRoaXMuZW1pdCgnZGF0YScsIGRhdGEpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5wYXVzZVN0cmVhbXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKSA9PSAnZnVuY3Rpb24nKSB0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKCk7XG4gIHRoaXMuZW1pdCgncGF1c2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcbiAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLl9nZXROZXh0KCk7XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnJlc3VtZSkgPT0gJ2Z1bmN0aW9uJykgdGhpcy5fY3VycmVudFN0cmVhbS5yZXN1bWUoKTtcbiAgdGhpcy5lbWl0KCdyZXN1bWUnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdlbmQnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnY2xvc2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICB0aGlzLl9zdHJlYW1zID0gW107XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0RhdGFTaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3VwZGF0ZURhdGFTaXplKCk7XG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbWVzc2FnZSA9XG4gICAgJ0RlbGF5ZWRTdHJlYW0jbWF4RGF0YVNpemUgb2YgJyArIHRoaXMubWF4RGF0YVNpemUgKyAnIGJ5dGVzIGV4Y2VlZGVkLic7XG4gIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl91cGRhdGVEYXRhU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmRhdGFTaXplID0gMDtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX3N0cmVhbXMuZm9yRWFjaChmdW5jdGlvbihzdHJlYW0pIHtcbiAgICBpZiAoIXN0cmVhbS5kYXRhU2l6ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuZGF0YVNpemUgKz0gc3RyZWFtLmRhdGFTaXplO1xuICB9KTtcblxuICBpZiAodGhpcy5fY3VycmVudFN0cmVhbSAmJiB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplO1xuICB9XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2VtaXRFcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn07XG4iLCIvKipcbiAqIEhlbHBlcnMuXG4gKi9cblxudmFyIHMgPSAxMDAwO1xudmFyIG0gPSBzICogNjA7XG52YXIgaCA9IG0gKiA2MDtcbnZhciBkID0gaCAqIDI0O1xudmFyIHcgPSBkICogNztcbnZhciB5ID0gZCAqIDM2NS4yNTtcblxuLyoqXG4gKiBQYXJzZSBvciBmb3JtYXQgdGhlIGdpdmVuIGB2YWxgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGxvbmdgIHZlcmJvc2UgZm9ybWF0dGluZyBbZmFsc2VdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aHJvdyBhbiBlcnJvciBpZiB2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIG51bWJlclxuICogQHJldHVybiB7U3RyaW5nfE51bWJlcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih2YWwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHBhcnNlKHZhbCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsKSkge1xuICAgIHJldHVybiBvcHRpb25zLmxvbmcgPyBmbXRMb25nKHZhbCkgOiBmbXRTaG9ydCh2YWwpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAndmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0nICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG1hdGNoID0gL14oLT8oPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKFxuICAgIHN0clxuICApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3llYXJzJzpcbiAgICBjYXNlICd5ZWFyJzpcbiAgICBjYXNlICd5cnMnOlxuICAgIGNhc2UgJ3lyJzpcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBuICogeTtcbiAgICBjYXNlICd3ZWVrcyc6XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgY2FzZSAndyc6XG4gICAgICByZXR1cm4gbiAqIHc7XG4gICAgY2FzZSAnZGF5cyc6XG4gICAgY2FzZSAnZGF5JzpcbiAgICBjYXNlICdkJzpcbiAgICAgIHJldHVybiBuICogZDtcbiAgICBjYXNlICdob3Vycyc6XG4gICAgY2FzZSAnaG91cic6XG4gICAgY2FzZSAnaHJzJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAnaCc6XG4gICAgICByZXR1cm4gbiAqIGg7XG4gICAgY2FzZSAnbWludXRlcyc6XG4gICAgY2FzZSAnbWludXRlJzpcbiAgICBjYXNlICdtaW5zJzpcbiAgICBjYXNlICdtaW4nOlxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIG4gKiBtO1xuICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgY2FzZSAnc2Vjcyc6XG4gICAgY2FzZSAnc2VjJzpcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBuICogcztcbiAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICBjYXNlICdtc2Vjcyc6XG4gICAgY2FzZSAnbXNlYyc6XG4gICAgY2FzZSAnbXMnOlxuICAgICAgcmV0dXJuIG47XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG9ydCBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRTaG9ydChtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBkKSArICdkJztcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG0pICsgJ20nO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBzKSArICdzJztcbiAgfVxuICByZXR1cm4gbXMgKyAnbXMnO1xufVxuXG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGQsICdkYXknKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBoLCAnaG91cicpO1xuICB9XG4gIGlmIChtc0FicyA+PSBtKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIG0sICdtaW51dGUnKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gcykge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBzLCAnc2Vjb25kJyk7XG4gIH1cbiAgcmV0dXJuIG1zICsgJyBtcyc7XG59XG5cbi8qKlxuICogUGx1cmFsaXphdGlvbiBoZWxwZXIuXG4gKi9cblxuZnVuY3Rpb24gcGx1cmFsKG1zLCBtc0FicywgbiwgbmFtZSkge1xuICB2YXIgaXNQbHVyYWwgPSBtc0FicyA+PSBuICogMS41O1xuICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG4pICsgJyAnICsgbmFtZSArIChpc1BsdXJhbCA/ICdzJyA6ICcnKTtcbn1cbiIsIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9IGxvY2Fsc3RvcmFnZSgpO1xuZXhwb3J0cy5kZXN0cm95ID0gKCgpID0+IHtcblx0bGV0IHdhcm5lZCA9IGZhbHNlO1xuXG5cdHJldHVybiAoKSA9PiB7XG5cdFx0aWYgKCF3YXJuZWQpIHtcblx0XHRcdHdhcm5lZCA9IHRydWU7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0XHR9XG5cdH07XG59KSgpO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFtcblx0JyMwMDAwQ0MnLFxuXHQnIzAwMDBGRicsXG5cdCcjMDAzM0NDJyxcblx0JyMwMDMzRkYnLFxuXHQnIzAwNjZDQycsXG5cdCcjMDA2NkZGJyxcblx0JyMwMDk5Q0MnLFxuXHQnIzAwOTlGRicsXG5cdCcjMDBDQzAwJyxcblx0JyMwMENDMzMnLFxuXHQnIzAwQ0M2NicsXG5cdCcjMDBDQzk5Jyxcblx0JyMwMENDQ0MnLFxuXHQnIzAwQ0NGRicsXG5cdCcjMzMwMENDJyxcblx0JyMzMzAwRkYnLFxuXHQnIzMzMzNDQycsXG5cdCcjMzMzM0ZGJyxcblx0JyMzMzY2Q0MnLFxuXHQnIzMzNjZGRicsXG5cdCcjMzM5OUNDJyxcblx0JyMzMzk5RkYnLFxuXHQnIzMzQ0MwMCcsXG5cdCcjMzNDQzMzJyxcblx0JyMzM0NDNjYnLFxuXHQnIzMzQ0M5OScsXG5cdCcjMzNDQ0NDJyxcblx0JyMzM0NDRkYnLFxuXHQnIzY2MDBDQycsXG5cdCcjNjYwMEZGJyxcblx0JyM2NjMzQ0MnLFxuXHQnIzY2MzNGRicsXG5cdCcjNjZDQzAwJyxcblx0JyM2NkNDMzMnLFxuXHQnIzk5MDBDQycsXG5cdCcjOTkwMEZGJyxcblx0JyM5OTMzQ0MnLFxuXHQnIzk5MzNGRicsXG5cdCcjOTlDQzAwJyxcblx0JyM5OUNDMzMnLFxuXHQnI0NDMDAwMCcsXG5cdCcjQ0MwMDMzJyxcblx0JyNDQzAwNjYnLFxuXHQnI0NDMDA5OScsXG5cdCcjQ0MwMENDJyxcblx0JyNDQzAwRkYnLFxuXHQnI0NDMzMwMCcsXG5cdCcjQ0MzMzMzJyxcblx0JyNDQzMzNjYnLFxuXHQnI0NDMzM5OScsXG5cdCcjQ0MzM0NDJyxcblx0JyNDQzMzRkYnLFxuXHQnI0NDNjYwMCcsXG5cdCcjQ0M2NjMzJyxcblx0JyNDQzk5MDAnLFxuXHQnI0NDOTkzMycsXG5cdCcjQ0NDQzAwJyxcblx0JyNDQ0NDMzMnLFxuXHQnI0ZGMDAwMCcsXG5cdCcjRkYwMDMzJyxcblx0JyNGRjAwNjYnLFxuXHQnI0ZGMDA5OScsXG5cdCcjRkYwMENDJyxcblx0JyNGRjAwRkYnLFxuXHQnI0ZGMzMwMCcsXG5cdCcjRkYzMzMzJyxcblx0JyNGRjMzNjYnLFxuXHQnI0ZGMzM5OScsXG5cdCcjRkYzM0NDJyxcblx0JyNGRjMzRkYnLFxuXHQnI0ZGNjYwMCcsXG5cdCcjRkY2NjMzJyxcblx0JyNGRjk5MDAnLFxuXHQnI0ZGOTkzMycsXG5cdCcjRkZDQzAwJyxcblx0JyNGRkNDMzMnXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKiBUT0RPOiBhZGQgYSBgbG9jYWxTdG9yYWdlYCB2YXJpYWJsZSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIGNvbG9yc1xuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG5cdC8vIE5COiBJbiBhbiBFbGVjdHJvbiBwcmVsb2FkIHNjcmlwdCwgZG9jdW1lbnQgd2lsbCBiZSBkZWZpbmVkIGJ1dCBub3QgZnVsbHlcblx0Ly8gaW5pdGlhbGl6ZWQuIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gQ2hyb21lLCB3ZSdsbCBqdXN0IGRldGVjdCB0aGlzIGNhc2Vcblx0Ly8gZXhwbGljaXRseVxuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnByb2Nlc3MgJiYgKHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgd2luZG93LnByb2Nlc3MuX19ud2pzKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8gSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEVkZ2UgZG8gbm90IHN1cHBvcnQgY29sb3JzLlxuXHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXFwvKFxcZCspLykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBJcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuXHQvLyBkb2N1bWVudCBpcyB1bmRlZmluZWQgaW4gcmVhY3QtbmF0aXZlOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL3B1bGwvMTYzMlxuXHRyZXR1cm4gKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuV2Via2l0QXBwZWFyYW5jZSkgfHxcblx0XHQvLyBJcyBmaXJlYnVnPyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTgxMjAvMzc2NzczXG5cdFx0KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS5maXJlYnVnIHx8ICh3aW5kb3cuY29uc29sZS5leGNlcHRpb24gJiYgd2luZG93LmNvbnNvbGUudGFibGUpKSkgfHxcblx0XHQvLyBJcyBmaXJlZm94ID49IHYzMT9cblx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1Rvb2xzL1dlYl9Db25zb2xlI1N0eWxpbmdfbWVzc2FnZXNcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSAmJiBwYXJzZUludChSZWdFeHAuJDEsIDEwKSA+PSAzMSkgfHxcblx0XHQvLyBEb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pKTtcbn1cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0YXJnc1swXSA9ICh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgK1xuXHRcdHRoaXMubmFtZXNwYWNlICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnICVjJyA6ICcgJykgK1xuXHRcdGFyZ3NbMF0gK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICclYyAnIDogJyAnKSArXG5cdFx0JysnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuXHRpZiAoIXRoaXMudXNlQ29sb3JzKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG5cdGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpO1xuXG5cdC8vIFRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG5cdC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cblx0Ly8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG5cdGxldCBpbmRleCA9IDA7XG5cdGxldCBsYXN0QyA9IDA7XG5cdGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBtYXRjaCA9PiB7XG5cdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGluZGV4Kys7XG5cdFx0aWYgKG1hdGNoID09PSAnJWMnKSB7XG5cdFx0XHQvLyBXZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcblx0XHRcdC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG5cdFx0XHRsYXN0QyA9IGluZGV4O1xuXHRcdH1cblx0fSk7XG5cblx0YXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUuZGVidWcoKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKiBJZiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGF2YWlsYWJsZSwgZmFsbHMgYmFja1xuICogdG8gYGNvbnNvbGUubG9nYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzLmxvZyA9IGNvbnNvbGUuZGVidWcgfHwgY29uc29sZS5sb2cgfHwgKCgpID0+IHt9KTtcblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHR0cnkge1xuXHRcdGlmIChuYW1lc3BhY2VzKSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCBuYW1lc3BhY2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRsZXQgcjtcblx0dHJ5IHtcblx0XHRyID0gZXhwb3J0cy5zdG9yYWdlLmdldEl0ZW0oJ2RlYnVnJyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG5cblx0Ly8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuXHRpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcblx0XHRyID0gcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG5cdHRyeSB7XG5cdFx0Ly8gVFZNTEtpdCAoQXBwbGUgVFYgSlMgUnVudGltZSkgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdyBvYmplY3QsIGp1c3QgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dFxuXHRcdC8vIFRoZSBCcm93c2VyIGFsc28gaGFzIGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuXG5cdFx0cmV0dXJuIGxvY2FsU3RvcmFnZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24gKHYpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVycm9yLm1lc3NhZ2U7XG5cdH1cbn07XG4iLCJcbi8qKlxuICogVGhpcyBpcyB0aGUgY29tbW9uIGxvZ2ljIGZvciBib3RoIHRoZSBOb2RlLmpzIGFuZCB3ZWIgYnJvd3NlclxuICogaW1wbGVtZW50YXRpb25zIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5mdW5jdGlvbiBzZXR1cChlbnYpIHtcblx0Y3JlYXRlRGVidWcuZGVidWcgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuZGVmYXVsdCA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5jb2VyY2UgPSBjb2VyY2U7XG5cdGNyZWF0ZURlYnVnLmRpc2FibGUgPSBkaXNhYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGUgPSBlbmFibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZWQgPSBlbmFibGVkO1xuXHRjcmVhdGVEZWJ1Zy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cdGNyZWF0ZURlYnVnLmRlc3Ryb3kgPSBkZXN0cm95O1xuXG5cdE9iamVjdC5rZXlzKGVudikuZm9yRWFjaChrZXkgPT4ge1xuXHRcdGNyZWF0ZURlYnVnW2tleV0gPSBlbnZba2V5XTtcblx0fSk7XG5cblx0LyoqXG5cdCogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGVidWcgbW9kZSBuYW1lcywgYW5kIG5hbWVzIHRvIHNraXAuXG5cdCovXG5cblx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHQvKipcblx0KiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG5cdCpcblx0KiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlciBvciB1cHBlci1jYXNlIGxldHRlciwgaS5lLiBcIm5cIiBhbmQgXCJOXCIuXG5cdCovXG5cdGNyZWF0ZURlYnVnLmZvcm1hdHRlcnMgPSB7fTtcblxuXHQvKipcblx0KiBTZWxlY3RzIGEgY29sb3IgZm9yIGEgZGVidWcgbmFtZXNwYWNlXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHN0cmluZyBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcblx0KiBAcmV0dXJuIHtOdW1iZXJ8U3RyaW5nfSBBbiBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG5cdFx0bGV0IGhhc2ggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc3BhY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0aGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlRGVidWcuY29sb3JzW01hdGguYWJzKGhhc2gpICUgY3JlYXRlRGVidWcuY29sb3JzLmxlbmd0aF07XG5cdH1cblx0Y3JlYXRlRGVidWcuc2VsZWN0Q29sb3IgPSBzZWxlY3RDb2xvcjtcblxuXHQvKipcblx0KiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAcmV0dXJuIHtGdW5jdGlvbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblx0XHRsZXQgcHJldlRpbWU7XG5cdFx0bGV0IGVuYWJsZU92ZXJyaWRlID0gbnVsbDtcblx0XHRsZXQgbmFtZXNwYWNlc0NhY2hlO1xuXHRcdGxldCBlbmFibGVkQ2FjaGU7XG5cblx0XHRmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7XG5cdFx0XHQvLyBEaXNhYmxlZD9cblx0XHRcdGlmICghZGVidWcuZW5hYmxlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNlbGYgPSBkZWJ1ZztcblxuXHRcdFx0Ly8gU2V0IGBkaWZmYCB0aW1lc3RhbXBcblx0XHRcdGNvbnN0IGN1cnIgPSBOdW1iZXIobmV3IERhdGUoKSk7XG5cdFx0XHRjb25zdCBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG5cdFx0XHRzZWxmLmRpZmYgPSBtcztcblx0XHRcdHNlbGYucHJldiA9IHByZXZUaW1lO1xuXHRcdFx0c2VsZi5jdXJyID0gY3Vycjtcblx0XHRcdHByZXZUaW1lID0gY3VycjtcblxuXHRcdFx0YXJnc1swXSA9IGNyZWF0ZURlYnVnLmNvZXJjZShhcmdzWzBdKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhcmdzWzBdICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHQvLyBBbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuXHRcdFx0XHRhcmdzLnVuc2hpZnQoJyVPJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0YXJnc1swXSA9IGFyZ3NbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csIChtYXRjaCwgZm9ybWF0KSA9PiB7XG5cdFx0XHRcdC8vIElmIHdlIGVuY291bnRlciBhbiBlc2NhcGVkICUgdGhlbiBkb24ndCBpbmNyZWFzZSB0aGUgYXJyYXkgaW5kZXhcblx0XHRcdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuICclJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZXIgPSBjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG5cdFx0XHRcdGlmICh0eXBlb2YgZm9ybWF0dGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gYXJnc1tpbmRleF07XG5cdFx0XHRcdFx0bWF0Y2ggPSBmb3JtYXR0ZXIuY2FsbChzZWxmLCB2YWwpO1xuXG5cdFx0XHRcdFx0Ly8gTm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuXHRcdFx0XHRcdGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0XHRpbmRleC0tO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtYXRjaDtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBBcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuXHRcdFx0Y3JlYXRlRGVidWcuZm9ybWF0QXJncy5jYWxsKHNlbGYsIGFyZ3MpO1xuXG5cdFx0XHRjb25zdCBsb2dGbiA9IHNlbGYubG9nIHx8IGNyZWF0ZURlYnVnLmxvZztcblx0XHRcdGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXHRcdH1cblxuXHRcdGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblx0XHRkZWJ1Zy51c2VDb2xvcnMgPSBjcmVhdGVEZWJ1Zy51c2VDb2xvcnMoKTtcblx0XHRkZWJ1Zy5jb2xvciA9IGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yKG5hbWVzcGFjZSk7XG5cdFx0ZGVidWcuZXh0ZW5kID0gZXh0ZW5kO1xuXHRcdGRlYnVnLmRlc3Ryb3kgPSBjcmVhdGVEZWJ1Zy5kZXN0cm95OyAvLyBYWFggVGVtcG9yYXJ5LiBXaWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWJ1ZywgJ2VuYWJsZWQnLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoZW5hYmxlT3ZlcnJpZGUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gZW5hYmxlT3ZlcnJpZGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG5hbWVzcGFjZXNDYWNoZSAhPT0gY3JlYXRlRGVidWcubmFtZXNwYWNlcykge1xuXHRcdFx0XHRcdG5hbWVzcGFjZXNDYWNoZSA9IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXM7XG5cdFx0XHRcdFx0ZW5hYmxlZENhY2hlID0gY3JlYXRlRGVidWcuZW5hYmxlZChuYW1lc3BhY2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVuYWJsZWRDYWNoZTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6IHYgPT4ge1xuXHRcdFx0XHRlbmFibGVPdmVycmlkZSA9IHY7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBFbnYtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbG9naWMgZm9yIGRlYnVnIGluc3RhbmNlc1xuXHRcdGlmICh0eXBlb2YgY3JlYXRlRGVidWcuaW5pdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y3JlYXRlRGVidWcuaW5pdChkZWJ1Zyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlYnVnO1xuXHR9XG5cblx0ZnVuY3Rpb24gZXh0ZW5kKG5hbWVzcGFjZSwgZGVsaW1pdGVyKSB7XG5cdFx0Y29uc3QgbmV3RGVidWcgPSBjcmVhdGVEZWJ1Zyh0aGlzLm5hbWVzcGFjZSArICh0eXBlb2YgZGVsaW1pdGVyID09PSAndW5kZWZpbmVkJyA/ICc6JyA6IGRlbGltaXRlcikgKyBuYW1lc3BhY2UpO1xuXHRcdG5ld0RlYnVnLmxvZyA9IHRoaXMubG9nO1xuXHRcdHJldHVybiBuZXdEZWJ1Zztcblx0fVxuXG5cdC8qKlxuXHQqIEVuYWJsZXMgYSBkZWJ1ZyBtb2RlIGJ5IG5hbWVzcGFjZXMuIFRoaXMgY2FuIGluY2x1ZGUgbW9kZXNcblx0KiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuXHRcdGNyZWF0ZURlYnVnLnNhdmUobmFtZXNwYWNlcyk7XG5cdFx0Y3JlYXRlRGVidWcubmFtZXNwYWNlcyA9IG5hbWVzcGFjZXM7XG5cblx0XHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRcdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0XHRsZXQgaTtcblx0XHRjb25zdCBzcGxpdCA9ICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzIDogJycpLnNwbGl0KC9bXFxzLF0rLyk7XG5cdFx0Y29uc3QgbGVuID0gc3BsaXQubGVuZ3RoO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoIXNwbGl0W2ldKSB7XG5cdFx0XHRcdC8vIGlnbm9yZSBlbXB0eSBzdHJpbmdzXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRuYW1lc3BhY2VzID0gc3BsaXRbaV0ucmVwbGFjZSgvXFwqL2csICcuKj8nKTtcblxuXHRcdFx0aWYgKG5hbWVzcGFjZXNbMF0gPT09ICctJykge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5za2lwcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcy5zbGljZSgxKSArICckJykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcubmFtZXMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMgKyAnJCcpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0KiBEaXNhYmxlIGRlYnVnIG91dHB1dC5cblx0KlxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGRpc2FibGUoKSB7XG5cdFx0Y29uc3QgbmFtZXNwYWNlcyA9IFtcblx0XHRcdC4uLmNyZWF0ZURlYnVnLm5hbWVzLm1hcCh0b05hbWVzcGFjZSksXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5za2lwcy5tYXAodG9OYW1lc3BhY2UpLm1hcChuYW1lc3BhY2UgPT4gJy0nICsgbmFtZXNwYWNlKVxuXHRcdF0uam9pbignLCcpO1xuXHRcdGNyZWF0ZURlYnVnLmVuYWJsZSgnJyk7XG5cdFx0cmV0dXJuIG5hbWVzcGFjZXM7XG5cdH1cblxuXHQvKipcblx0KiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuXHQqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG5cdFx0aWYgKG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJyonKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgaTtcblx0XHRsZXQgbGVuO1xuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5za2lwc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5uYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLm5hbWVzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCogQ29udmVydCByZWdleHAgdG8gbmFtZXNwYWNlXG5cdCpcblx0KiBAcGFyYW0ge1JlZ0V4cH0gcmVneGVwXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gdG9OYW1lc3BhY2UocmVnZXhwKSB7XG5cdFx0cmV0dXJuIHJlZ2V4cC50b1N0cmluZygpXG5cdFx0XHQuc3Vic3RyaW5nKDIsIHJlZ2V4cC50b1N0cmluZygpLmxlbmd0aCAtIDIpXG5cdFx0XHQucmVwbGFjZSgvXFwuXFwqXFw/JC8sICcqJyk7XG5cdH1cblxuXHQvKipcblx0KiBDb2VyY2UgYHZhbGAuXG5cdCpcblx0KiBAcGFyYW0ge01peGVkfSB2YWxcblx0KiBAcmV0dXJuIHtNaXhlZH1cblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuXHRcdGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0cmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxuXG5cdC8qKlxuXHQqIFhYWCBETyBOT1QgVVNFLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHN0dWIgZnVuY3Rpb24uXG5cdCogWFhYIEl0IFdJTEwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXHQqL1xuXHRmdW5jdGlvbiBkZXN0cm95KCkge1xuXHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHR9XG5cblx0Y3JlYXRlRGVidWcuZW5hYmxlKGNyZWF0ZURlYnVnLmxvYWQoKSk7XG5cblx0cmV0dXJuIGNyZWF0ZURlYnVnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldHVwO1xuIiwiLyoqXG4gKiBEZXRlY3QgRWxlY3Ryb24gcmVuZGVyZXIgLyBud2pzIHByb2Nlc3MsIHdoaWNoIGlzIG5vZGUsIGJ1dCB3ZSBzaG91bGRcbiAqIHRyZWF0IGFzIGEgYnJvd3Nlci5cbiAqL1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8IHByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCBwcm9jZXNzLmJyb3dzZXIgPT09IHRydWUgfHwgcHJvY2Vzcy5fX253anMpIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Jyb3dzZXIuanMnKTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9ub2RlLmpzJyk7XG59XG4iLCIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxuY29uc3QgdHR5ID0gcmVxdWlyZSgndHR5Jyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIE5vZGUuanMgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5cbmV4cG9ydHMuaW5pdCA9IGluaXQ7XG5leHBvcnRzLmxvZyA9IGxvZztcbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5kZXN0cm95ID0gdXRpbC5kZXByZWNhdGUoXG5cdCgpID0+IHt9LFxuXHQnSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLidcbik7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gWzYsIDIsIDMsIDQsIDUsIDFdO1xuXG50cnkge1xuXHQvLyBPcHRpb25hbCBkZXBlbmRlbmN5IChhcyBpbiwgZG9lc24ndCBuZWVkIHRvIGJlIGluc3RhbGxlZCwgTk9UIGxpa2Ugb3B0aW9uYWxEZXBlbmRlbmNpZXMgaW4gcGFja2FnZS5qc29uKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG5cdGNvbnN0IHN1cHBvcnRzQ29sb3IgPSByZXF1aXJlKCdzdXBwb3J0cy1jb2xvcicpO1xuXG5cdGlmIChzdXBwb3J0c0NvbG9yICYmIChzdXBwb3J0c0NvbG9yLnN0ZGVyciB8fCBzdXBwb3J0c0NvbG9yKS5sZXZlbCA+PSAyKSB7XG5cdFx0ZXhwb3J0cy5jb2xvcnMgPSBbXG5cdFx0XHQyMCxcblx0XHRcdDIxLFxuXHRcdFx0MjYsXG5cdFx0XHQyNyxcblx0XHRcdDMyLFxuXHRcdFx0MzMsXG5cdFx0XHQzOCxcblx0XHRcdDM5LFxuXHRcdFx0NDAsXG5cdFx0XHQ0MSxcblx0XHRcdDQyLFxuXHRcdFx0NDMsXG5cdFx0XHQ0NCxcblx0XHRcdDQ1LFxuXHRcdFx0NTYsXG5cdFx0XHQ1Nyxcblx0XHRcdDYyLFxuXHRcdFx0NjMsXG5cdFx0XHQ2OCxcblx0XHRcdDY5LFxuXHRcdFx0NzQsXG5cdFx0XHQ3NSxcblx0XHRcdDc2LFxuXHRcdFx0NzcsXG5cdFx0XHQ3OCxcblx0XHRcdDc5LFxuXHRcdFx0ODAsXG5cdFx0XHQ4MSxcblx0XHRcdDkyLFxuXHRcdFx0OTMsXG5cdFx0XHQ5OCxcblx0XHRcdDk5LFxuXHRcdFx0MTEyLFxuXHRcdFx0MTEzLFxuXHRcdFx0MTI4LFxuXHRcdFx0MTI5LFxuXHRcdFx0MTM0LFxuXHRcdFx0MTM1LFxuXHRcdFx0MTQ4LFxuXHRcdFx0MTQ5LFxuXHRcdFx0MTYwLFxuXHRcdFx0MTYxLFxuXHRcdFx0MTYyLFxuXHRcdFx0MTYzLFxuXHRcdFx0MTY0LFxuXHRcdFx0MTY1LFxuXHRcdFx0MTY2LFxuXHRcdFx0MTY3LFxuXHRcdFx0MTY4LFxuXHRcdFx0MTY5LFxuXHRcdFx0MTcwLFxuXHRcdFx0MTcxLFxuXHRcdFx0MTcyLFxuXHRcdFx0MTczLFxuXHRcdFx0MTc4LFxuXHRcdFx0MTc5LFxuXHRcdFx0MTg0LFxuXHRcdFx0MTg1LFxuXHRcdFx0MTk2LFxuXHRcdFx0MTk3LFxuXHRcdFx0MTk4LFxuXHRcdFx0MTk5LFxuXHRcdFx0MjAwLFxuXHRcdFx0MjAxLFxuXHRcdFx0MjAyLFxuXHRcdFx0MjAzLFxuXHRcdFx0MjA0LFxuXHRcdFx0MjA1LFxuXHRcdFx0MjA2LFxuXHRcdFx0MjA3LFxuXHRcdFx0MjA4LFxuXHRcdFx0MjA5LFxuXHRcdFx0MjE0LFxuXHRcdFx0MjE1LFxuXHRcdFx0MjIwLFxuXHRcdFx0MjIxXG5cdFx0XTtcblx0fVxufSBjYXRjaCAoZXJyb3IpIHtcblx0Ly8gU3dhbGxvdyAtIHdlIG9ubHkgY2FyZSBpZiBgc3VwcG9ydHMtY29sb3JgIGlzIGF2YWlsYWJsZTsgaXQgZG9lc24ndCBoYXZlIHRvIGJlLlxufVxuXG4vKipcbiAqIEJ1aWxkIHVwIHRoZSBkZWZhdWx0IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqXG4gKiAgICQgREVCVUdfQ09MT1JTPW5vIERFQlVHX0RFUFRIPTEwIERFQlVHX1NIT1dfSElEREVOPWVuYWJsZWQgbm9kZSBzY3JpcHQuanNcbiAqL1xuXG5leHBvcnRzLmluc3BlY3RPcHRzID0gT2JqZWN0LmtleXMocHJvY2Vzcy5lbnYpLmZpbHRlcihrZXkgPT4ge1xuXHRyZXR1cm4gL15kZWJ1Z18vaS50ZXN0KGtleSk7XG59KS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG5cdC8vIENhbWVsLWNhc2Vcblx0Y29uc3QgcHJvcCA9IGtleVxuXHRcdC5zdWJzdHJpbmcoNilcblx0XHQudG9Mb3dlckNhc2UoKVxuXHRcdC5yZXBsYWNlKC9fKFthLXpdKS9nLCAoXywgaykgPT4ge1xuXHRcdFx0cmV0dXJuIGsudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblxuXHQvLyBDb2VyY2Ugc3RyaW5nIHZhbHVlIGludG8gSlMgdmFsdWVcblx0bGV0IHZhbCA9IHByb2Nlc3MuZW52W2tleV07XG5cdGlmICgvXih5ZXN8b258dHJ1ZXxlbmFibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKC9eKG5vfG9mZnxmYWxzZXxkaXNhYmxlZCkkL2kudGVzdCh2YWwpKSB7XG5cdFx0dmFsID0gZmFsc2U7XG5cdH0gZWxzZSBpZiAodmFsID09PSAnbnVsbCcpIHtcblx0XHR2YWwgPSBudWxsO1xuXHR9IGVsc2Uge1xuXHRcdHZhbCA9IE51bWJlcih2YWwpO1xuXHR9XG5cblx0b2JqW3Byb3BdID0gdmFsO1xuXHRyZXR1cm4gb2JqO1xufSwge30pO1xuXG4vKipcbiAqIElzIHN0ZG91dCBhIFRUWT8gQ29sb3JlZCBvdXRwdXQgaXMgZW5hYmxlZCB3aGVuIGB0cnVlYC5cbiAqL1xuXG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG5cdHJldHVybiAnY29sb3JzJyBpbiBleHBvcnRzLmluc3BlY3RPcHRzID9cblx0XHRCb29sZWFuKGV4cG9ydHMuaW5zcGVjdE9wdHMuY29sb3JzKSA6XG5cdFx0dHR5LmlzYXR0eShwcm9jZXNzLnN0ZGVyci5mZCk7XG59XG5cbi8qKlxuICogQWRkcyBBTlNJIGNvbG9yIGVzY2FwZSBjb2RlcyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG5cdGNvbnN0IHtuYW1lc3BhY2U6IG5hbWUsIHVzZUNvbG9yc30gPSB0aGlzO1xuXG5cdGlmICh1c2VDb2xvcnMpIHtcblx0XHRjb25zdCBjID0gdGhpcy5jb2xvcjtcblx0XHRjb25zdCBjb2xvckNvZGUgPSAnXFx1MDAxQlszJyArIChjIDwgOCA/IGMgOiAnODs1OycgKyBjKTtcblx0XHRjb25zdCBwcmVmaXggPSBgICAke2NvbG9yQ29kZX07MW0ke25hbWV9IFxcdTAwMUJbMG1gO1xuXG5cdFx0YXJnc1swXSA9IHByZWZpeCArIGFyZ3NbMF0uc3BsaXQoJ1xcbicpLmpvaW4oJ1xcbicgKyBwcmVmaXgpO1xuXHRcdGFyZ3MucHVzaChjb2xvckNvZGUgKyAnbSsnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKSArICdcXHUwMDFCWzBtJyk7XG5cdH0gZWxzZSB7XG5cdFx0YXJnc1swXSA9IGdldERhdGUoKSArIG5hbWUgKyAnICcgKyBhcmdzWzBdO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldERhdGUoKSB7XG5cdGlmIChleHBvcnRzLmluc3BlY3RPcHRzLmhpZGVEYXRlKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cdHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgKyAnICc7XG59XG5cbi8qKlxuICogSW52b2tlcyBgdXRpbC5mb3JtYXQoKWAgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cyBhbmQgd3JpdGVzIHRvIHN0ZGVyci5cbiAqL1xuXG5mdW5jdGlvbiBsb2coLi4uYXJncykge1xuXHRyZXR1cm4gcHJvY2Vzcy5zdGRlcnIud3JpdGUodXRpbC5mb3JtYXQoLi4uYXJncykgKyAnXFxuJyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRwcm9jZXNzLmVudi5ERUJVRyA9IG5hbWVzcGFjZXM7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgeW91IHNldCBhIHByb2Nlc3MuZW52IGZpZWxkIHRvIG51bGwgb3IgdW5kZWZpbmVkLCBpdCBnZXRzIGNhc3QgdG8gdGhlXG5cdFx0Ly8gc3RyaW5nICdudWxsJyBvciAndW5kZWZpbmVkJy4gSnVzdCBkZWxldGUgaW5zdGVhZC5cblx0XHRkZWxldGUgcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRyZXR1cm4gcHJvY2Vzcy5lbnYuREVCVUc7XG59XG5cbi8qKlxuICogSW5pdCBsb2dpYyBmb3IgYGRlYnVnYCBpbnN0YW5jZXMuXG4gKlxuICogQ3JlYXRlIGEgbmV3IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGluIGNhc2UgYHVzZUNvbG9yc2AgaXMgc2V0XG4gKiBkaWZmZXJlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGBkZWJ1Z2AgaW5zdGFuY2UuXG4gKi9cblxuZnVuY3Rpb24gaW5pdChkZWJ1Zykge1xuXHRkZWJ1Zy5pbnNwZWN0T3B0cyA9IHt9O1xuXG5cdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhleHBvcnRzLmluc3BlY3RPcHRzKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZGVidWcuaW5zcGVjdE9wdHNba2V5c1tpXV0gPSBleHBvcnRzLmluc3BlY3RPcHRzW2tleXNbaV1dO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVvIHRvIGB1dGlsLmluc3BlY3QoKWAsIGFsbCBvbiBhIHNpbmdsZSBsaW5lLlxuICovXG5cbmZvcm1hdHRlcnMubyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChzdHIgPT4gc3RyLnRyaW0oKSlcblx0XHQuam9pbignICcpO1xufTtcblxuLyoqXG4gKiBNYXAgJU8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsb3dpbmcgbXVsdGlwbGUgbGluZXMgaWYgbmVlZGVkLlxuICovXG5cbmZvcm1hdHRlcnMuTyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cyk7XG59O1xuIiwidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERlbGF5ZWRTdHJlYW07XG5mdW5jdGlvbiBEZWxheWVkU3RyZWFtKCkge1xuICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuICB0aGlzLm1heERhdGFTaXplID0gMTAyNCAqIDEwMjQ7XG4gIHRoaXMucGF1c2VTdHJlYW0gPSB0cnVlO1xuXG4gIHRoaXMuX21heERhdGFTaXplRXhjZWVkZWQgPSBmYWxzZTtcbiAgdGhpcy5fcmVsZWFzZWQgPSBmYWxzZTtcbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMgPSBbXTtcbn1cbnV0aWwuaW5oZXJpdHMoRGVsYXllZFN0cmVhbSwgU3RyZWFtKTtcblxuRGVsYXllZFN0cmVhbS5jcmVhdGUgPSBmdW5jdGlvbihzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGRlbGF5ZWRTdHJlYW0gPSBuZXcgdGhpcygpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGRlbGF5ZWRTdHJlYW1bb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxuXG4gIGRlbGF5ZWRTdHJlYW0uc291cmNlID0gc291cmNlO1xuXG4gIHZhciByZWFsRW1pdCA9IHNvdXJjZS5lbWl0O1xuICBzb3VyY2UuZW1pdCA9IGZ1bmN0aW9uKCkge1xuICAgIGRlbGF5ZWRTdHJlYW0uX2hhbmRsZUVtaXQoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gcmVhbEVtaXQuYXBwbHkoc291cmNlLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHNvdXJjZS5vbignZXJyb3InLCBmdW5jdGlvbigpIHt9KTtcbiAgaWYgKGRlbGF5ZWRTdHJlYW0ucGF1c2VTdHJlYW0pIHtcbiAgICBzb3VyY2UucGF1c2UoKTtcbiAgfVxuXG4gIHJldHVybiBkZWxheWVkU3RyZWFtO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLCAncmVhZGFibGUnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2UucmVhZGFibGU7XG4gIH1cbn0pO1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zb3VyY2Uuc2V0RW5jb2RpbmcuYXBwbHkodGhpcy5zb3VyY2UsIGFyZ3VtZW50cyk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMucmVsZWFzZSgpO1xuICB9XG5cbiAgdGhpcy5zb3VyY2UucmVzdW1lKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnNvdXJjZS5wYXVzZSgpO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZWxlYXNlZCA9IHRydWU7XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihhcmdzKSB7XG4gICAgdGhpcy5lbWl0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9LmJpbmQodGhpcykpO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgciA9IFN0cmVhbS5wcm90b3R5cGUucGlwZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB0aGlzLnJlc3VtZSgpO1xuICByZXR1cm4gcjtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9oYW5kbGVFbWl0ID0gZnVuY3Rpb24oYXJncykge1xuICBpZiAodGhpcy5fcmVsZWFzZWQpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFyZ3NbMF0gPT09ICdkYXRhJykge1xuICAgIHRoaXMuZGF0YVNpemUgKz0gYXJnc1sxXS5sZW5ndGg7XG4gICAgdGhpcy5fY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQoKTtcbiAgfVxuXG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzLnB1c2goYXJncyk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5fY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX21heERhdGFTaXplRXhjZWVkZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodGhpcy5kYXRhU2l6ZSA8PSB0aGlzLm1heERhdGFTaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IHRydWU7XG4gIHZhciBtZXNzYWdlID1cbiAgICAnRGVsYXllZFN0cmVhbSNtYXhEYXRhU2l6ZSBvZiAnICsgdGhpcy5tYXhEYXRhU2l6ZSArICcgYnl0ZXMgZXhjZWVkZWQuJ1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKG1lc3NhZ2UpKTtcbn07XG4iLCJ2YXIgZGVidWc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIWRlYnVnKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8qIGVzbGludCBnbG9iYWwtcmVxdWlyZTogb2ZmICovXG4gICAgICBkZWJ1ZyA9IHJlcXVpcmUoXCJkZWJ1Z1wiKShcImZvbGxvdy1yZWRpcmVjdHNcIik7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyAvKiAqLyB9XG4gICAgaWYgKHR5cGVvZiBkZWJ1ZyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBkZWJ1ZyA9IGZ1bmN0aW9uICgpIHsgLyogKi8gfTtcbiAgICB9XG4gIH1cbiAgZGVidWcuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn07XG4iLCJ2YXIgdXJsID0gcmVxdWlyZShcInVybFwiKTtcbnZhciBVUkwgPSB1cmwuVVJMO1xudmFyIGh0dHAgPSByZXF1aXJlKFwiaHR0cFwiKTtcbnZhciBodHRwcyA9IHJlcXVpcmUoXCJodHRwc1wiKTtcbnZhciBXcml0YWJsZSA9IHJlcXVpcmUoXCJzdHJlYW1cIikuV3JpdGFibGU7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZShcImFzc2VydFwiKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoXCIuL2RlYnVnXCIpO1xuXG4vLyBDcmVhdGUgaGFuZGxlcnMgdGhhdCBwYXNzIGV2ZW50cyBmcm9tIG5hdGl2ZSByZXF1ZXN0c1xudmFyIGV2ZW50cyA9IFtcImFib3J0XCIsIFwiYWJvcnRlZFwiLCBcImNvbm5lY3RcIiwgXCJlcnJvclwiLCBcInNvY2tldFwiLCBcInRpbWVvdXRcIl07XG52YXIgZXZlbnRIYW5kbGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5ldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnRIYW5kbGVyc1tldmVudF0gPSBmdW5jdGlvbiAoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHRoaXMuX3JlZGlyZWN0YWJsZS5lbWl0KGV2ZW50LCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgfTtcbn0pO1xuXG4vLyBFcnJvciB0eXBlcyB3aXRoIGNvZGVzXG52YXIgUmVkaXJlY3Rpb25FcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfRlJfUkVESVJFQ1RJT05fRkFJTFVSRVwiLFxuICBcIlJlZGlyZWN0ZWQgcmVxdWVzdCBmYWlsZWRcIlxuKTtcbnZhciBUb29NYW55UmVkaXJlY3RzRXJyb3IgPSBjcmVhdGVFcnJvclR5cGUoXG4gIFwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUU1wiLFxuICBcIk1heGltdW0gbnVtYmVyIG9mIHJlZGlyZWN0cyBleGNlZWRlZFwiXG4pO1xudmFyIE1heEJvZHlMZW5ndGhFeGNlZWRlZEVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9GUl9NQVhfQk9EWV9MRU5HVEhfRVhDRUVERURcIixcbiAgXCJSZXF1ZXN0IGJvZHkgbGFyZ2VyIHRoYW4gbWF4Qm9keUxlbmd0aCBsaW1pdFwiXG4pO1xudmFyIFdyaXRlQWZ0ZXJFbmRFcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORFwiLFxuICBcIndyaXRlIGFmdGVyIGVuZFwiXG4pO1xuXG4vLyBBbiBIVFRQKFMpIHJlcXVlc3QgdGhhdCBjYW4gYmUgcmVkaXJlY3RlZFxuZnVuY3Rpb24gUmVkaXJlY3RhYmxlUmVxdWVzdChvcHRpb25zLCByZXNwb25zZUNhbGxiYWNrKSB7XG4gIC8vIEluaXRpYWxpemUgdGhlIHJlcXVlc3RcbiAgV3JpdGFibGUuY2FsbCh0aGlzKTtcbiAgdGhpcy5fc2FuaXRpemVPcHRpb25zKG9wdGlvbnMpO1xuICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgdGhpcy5fZW5kZWQgPSBmYWxzZTtcbiAgdGhpcy5fZW5kaW5nID0gZmFsc2U7XG4gIHRoaXMuX3JlZGlyZWN0Q291bnQgPSAwO1xuICB0aGlzLl9yZWRpcmVjdHMgPSBbXTtcbiAgdGhpcy5fcmVxdWVzdEJvZHlMZW5ndGggPSAwO1xuICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcblxuICAvLyBBdHRhY2ggYSBjYWxsYmFjayBpZiBwYXNzZWRcbiAgaWYgKHJlc3BvbnNlQ2FsbGJhY2spIHtcbiAgICB0aGlzLm9uKFwicmVzcG9uc2VcIiwgcmVzcG9uc2VDYWxsYmFjayk7XG4gIH1cblxuICAvLyBSZWFjdCB0byByZXNwb25zZXMgb2YgbmF0aXZlIHJlcXVlc3RzXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5fb25OYXRpdmVSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgIHNlbGYuX3Byb2Nlc3NSZXNwb25zZShyZXNwb25zZSk7XG4gIH07XG5cbiAgLy8gUGVyZm9ybSB0aGUgZmlyc3QgcmVxdWVzdFxuICB0aGlzLl9wZXJmb3JtUmVxdWVzdCgpO1xufVxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdyaXRhYmxlLnByb3RvdHlwZSk7XG5cblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICBhYm9ydFJlcXVlc3QodGhpcy5fY3VycmVudFJlcXVlc3QpO1xuICB0aGlzLmVtaXQoXCJhYm9ydFwiKTtcbn07XG5cbi8vIFdyaXRlcyBidWZmZXJlZCBkYXRhIHRvIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgLy8gV3JpdGluZyBpcyBub3QgYWxsb3dlZCBpZiBlbmQgaGFzIGJlZW4gY2FsbGVkXG4gIGlmICh0aGlzLl9lbmRpbmcpIHtcbiAgICB0aHJvdyBuZXcgV3JpdGVBZnRlckVuZEVycm9yKCk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBpbnB1dCBhbmQgc2hpZnQgcGFyYW1ldGVycyBpZiBuZWNlc3NhcnlcbiAgaWYgKCEodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgKFwibGVuZ3RoXCIgaW4gZGF0YSkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImRhdGEgc2hvdWxkIGJlIGEgc3RyaW5nLCBCdWZmZXIgb3IgVWludDhBcnJheVwiKTtcbiAgfVxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjYWxsYmFjayA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIC8vIElnbm9yZSBlbXB0eSBidWZmZXJzLCBzaW5jZSB3cml0aW5nIHRoZW0gZG9lc24ndCBpbnZva2UgdGhlIGNhbGxiYWNrXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvMjIwNjZcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgLy8gT25seSB3cml0ZSB3aGVuIHdlIGRvbid0IGV4Y2VlZCB0aGUgbWF4aW11bSBib2R5IGxlbmd0aFxuICBpZiAodGhpcy5fcmVxdWVzdEJvZHlMZW5ndGggKyBkYXRhLmxlbmd0aCA8PSB0aGlzLl9vcHRpb25zLm1heEJvZHlMZW5ndGgpIHtcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMucHVzaCh7IGRhdGE6IGRhdGEsIGVuY29kaW5nOiBlbmNvZGluZyB9KTtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC53cml0ZShkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spO1xuICB9XG4gIC8vIEVycm9yIHdoZW4gd2UgZXhjZWVkIHRoZSBtYXhpbXVtIGJvZHkgbGVuZ3RoXG4gIGVsc2Uge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBNYXhCb2R5TGVuZ3RoRXhjZWVkZWRFcnJvcigpKTtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cbn07XG5cbi8vIEVuZHMgdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgLy8gU2hpZnQgcGFyYW1ldGVycyBpZiBuZWNlc3NhcnlcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjYWxsYmFjayA9IGRhdGE7XG4gICAgZGF0YSA9IGVuY29kaW5nID0gbnVsbDtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgLy8gV3JpdGUgZGF0YSBpZiBuZWVkZWQgYW5kIGVuZFxuICBpZiAoIWRhdGEpIHtcbiAgICB0aGlzLl9lbmRlZCA9IHRoaXMuX2VuZGluZyA9IHRydWU7XG4gICAgdGhpcy5fY3VycmVudFJlcXVlc3QuZW5kKG51bGwsIG51bGwsIGNhbGxiYWNrKTtcbiAgfVxuICBlbHNlIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGN1cnJlbnRSZXF1ZXN0ID0gdGhpcy5fY3VycmVudFJlcXVlc3Q7XG4gICAgdGhpcy53cml0ZShkYXRhLCBlbmNvZGluZywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5fZW5kZWQgPSB0cnVlO1xuICAgICAgY3VycmVudFJlcXVlc3QuZW5kKG51bGwsIG51bGwsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgICB0aGlzLl9lbmRpbmcgPSB0cnVlO1xuICB9XG59O1xuXG4vLyBTZXRzIGEgaGVhZGVyIHZhbHVlIG9uIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5zZXRIZWFkZXIgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fb3B0aW9ucy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG4gIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LnNldEhlYWRlcihuYW1lLCB2YWx1ZSk7XG59O1xuXG4vLyBDbGVhcnMgYSBoZWFkZXIgdmFsdWUgb24gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLnJlbW92ZUhlYWRlciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLl9vcHRpb25zLmhlYWRlcnNbbmFtZV07XG4gIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LnJlbW92ZUhlYWRlcihuYW1lKTtcbn07XG5cbi8vIEdsb2JhbCB0aW1lb3V0IGZvciBhbGwgdW5kZXJseWluZyByZXF1ZXN0c1xuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuc2V0VGltZW91dCA9IGZ1bmN0aW9uIChtc2VjcywgY2FsbGJhY2spIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIERlc3Ryb3lzIHRoZSBzb2NrZXQgb24gdGltZW91dFxuICBmdW5jdGlvbiBkZXN0cm95T25UaW1lb3V0KHNvY2tldCkge1xuICAgIHNvY2tldC5zZXRUaW1lb3V0KG1zZWNzKTtcbiAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoXCJ0aW1lb3V0XCIsIHNvY2tldC5kZXN0cm95KTtcbiAgICBzb2NrZXQuYWRkTGlzdGVuZXIoXCJ0aW1lb3V0XCIsIHNvY2tldC5kZXN0cm95KTtcbiAgfVxuXG4gIC8vIFNldHMgdXAgYSB0aW1lciB0byB0cmlnZ2VyIGEgdGltZW91dCBldmVudFxuICBmdW5jdGlvbiBzdGFydFRpbWVyKHNvY2tldCkge1xuICAgIGlmIChzZWxmLl90aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5fdGltZW91dCk7XG4gICAgfVxuICAgIHNlbGYuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuZW1pdChcInRpbWVvdXRcIik7XG4gICAgICBjbGVhclRpbWVyKCk7XG4gICAgfSwgbXNlY3MpO1xuICAgIGRlc3Ryb3lPblRpbWVvdXQoc29ja2V0KTtcbiAgfVxuXG4gIC8vIFN0b3BzIGEgdGltZW91dCBmcm9tIHRyaWdnZXJpbmdcbiAgZnVuY3Rpb24gY2xlYXJUaW1lcigpIHtcbiAgICAvLyBDbGVhciB0aGUgdGltZW91dFxuICAgIGlmIChzZWxmLl90aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5fdGltZW91dCk7XG4gICAgICBzZWxmLl90aW1lb3V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDbGVhbiB1cCBhbGwgYXR0YWNoZWQgbGlzdGVuZXJzXG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcImFib3J0XCIsIGNsZWFyVGltZXIpO1xuICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLCBjbGVhclRpbWVyKTtcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKFwicmVzcG9uc2VcIiwgY2xlYXJUaW1lcik7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKFwidGltZW91dFwiLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIGlmICghc2VsZi5zb2NrZXQpIHtcbiAgICAgIHNlbGYuX2N1cnJlbnRSZXF1ZXN0LnJlbW92ZUxpc3RlbmVyKFwic29ja2V0XCIsIHN0YXJ0VGltZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEF0dGFjaCBjYWxsYmFjayBpZiBwYXNzZWRcbiAgaWYgKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5vbihcInRpbWVvdXRcIiwgY2FsbGJhY2spO1xuICB9XG5cbiAgLy8gU3RhcnQgdGhlIHRpbWVyIGlmIG9yIHdoZW4gdGhlIHNvY2tldCBpcyBvcGVuZWRcbiAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgc3RhcnRUaW1lcih0aGlzLnNvY2tldCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhpcy5fY3VycmVudFJlcXVlc3Qub25jZShcInNvY2tldFwiLCBzdGFydFRpbWVyKTtcbiAgfVxuXG4gIC8vIENsZWFuIHVwIG9uIGV2ZW50c1xuICB0aGlzLm9uKFwic29ja2V0XCIsIGRlc3Ryb3lPblRpbWVvdXQpO1xuICB0aGlzLm9uKFwiYWJvcnRcIiwgY2xlYXJUaW1lcik7XG4gIHRoaXMub24oXCJlcnJvclwiLCBjbGVhclRpbWVyKTtcbiAgdGhpcy5vbihcInJlc3BvbnNlXCIsIGNsZWFyVGltZXIpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gUHJveHkgYWxsIG90aGVyIHB1YmxpYyBDbGllbnRSZXF1ZXN0IG1ldGhvZHNcbltcbiAgXCJmbHVzaEhlYWRlcnNcIiwgXCJnZXRIZWFkZXJcIixcbiAgXCJzZXROb0RlbGF5XCIsIFwic2V0U29ja2V0S2VlcEFsaXZlXCIsXG5dLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICBSZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlcXVlc3RbbWV0aG9kXShhLCBiKTtcbiAgfTtcbn0pO1xuXG4vLyBQcm94eSBhbGwgcHVibGljIENsaWVudFJlcXVlc3QgcHJvcGVydGllc1xuW1wiYWJvcnRlZFwiLCBcImNvbm5lY3Rpb25cIiwgXCJzb2NrZXRcIl0uZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLCBwcm9wZXJ0eSwge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fY3VycmVudFJlcXVlc3RbcHJvcGVydHldOyB9LFxuICB9KTtcbn0pO1xuXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fc2FuaXRpemVPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgLy8gRW5zdXJlIGhlYWRlcnMgYXJlIGFsd2F5cyBwcmVzZW50XG4gIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgb3B0aW9ucy5oZWFkZXJzID0ge307XG4gIH1cblxuICAvLyBTaW5jZSBodHRwLnJlcXVlc3QgdHJlYXRzIGhvc3QgYXMgYW4gYWxpYXMgb2YgaG9zdG5hbWUsXG4gIC8vIGJ1dCB0aGUgdXJsIG1vZHVsZSBpbnRlcnByZXRzIGhvc3QgYXMgaG9zdG5hbWUgcGx1cyBwb3J0LFxuICAvLyBlbGltaW5hdGUgdGhlIGhvc3QgcHJvcGVydHkgdG8gYXZvaWQgY29uZnVzaW9uLlxuICBpZiAob3B0aW9ucy5ob3N0KSB7XG4gICAgLy8gVXNlIGhvc3RuYW1lIGlmIHNldCwgYmVjYXVzZSBpdCBoYXMgcHJlY2VkZW5jZVxuICAgIGlmICghb3B0aW9ucy5ob3N0bmFtZSkge1xuICAgICAgb3B0aW9ucy5ob3N0bmFtZSA9IG9wdGlvbnMuaG9zdDtcbiAgICB9XG4gICAgZGVsZXRlIG9wdGlvbnMuaG9zdDtcbiAgfVxuXG4gIC8vIENvbXBsZXRlIHRoZSBVUkwgb2JqZWN0IHdoZW4gbmVjZXNzYXJ5XG4gIGlmICghb3B0aW9ucy5wYXRobmFtZSAmJiBvcHRpb25zLnBhdGgpIHtcbiAgICB2YXIgc2VhcmNoUG9zID0gb3B0aW9ucy5wYXRoLmluZGV4T2YoXCI/XCIpO1xuICAgIGlmIChzZWFyY2hQb3MgPCAwKSB7XG4gICAgICBvcHRpb25zLnBhdGhuYW1lID0gb3B0aW9ucy5wYXRoO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG9wdGlvbnMucGF0aG5hbWUgPSBvcHRpb25zLnBhdGguc3Vic3RyaW5nKDAsIHNlYXJjaFBvcyk7XG4gICAgICBvcHRpb25zLnNlYXJjaCA9IG9wdGlvbnMucGF0aC5zdWJzdHJpbmcoc2VhcmNoUG9zKTtcbiAgICB9XG4gIH1cbn07XG5cblxuLy8gRXhlY3V0ZXMgdGhlIG5leHQgbmF0aXZlIHJlcXVlc3QgKGluaXRpYWwgb3IgcmVkaXJlY3QpXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fcGVyZm9ybVJlcXVlc3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIExvYWQgdGhlIG5hdGl2ZSBwcm90b2NvbFxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLl9vcHRpb25zLnByb3RvY29sO1xuICB2YXIgbmF0aXZlUHJvdG9jb2wgPSB0aGlzLl9vcHRpb25zLm5hdGl2ZVByb3RvY29sc1twcm90b2NvbF07XG4gIGlmICghbmF0aXZlUHJvdG9jb2wpIHtcbiAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgXCIgKyBwcm90b2NvbCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHNwZWNpZmllZCwgdXNlIHRoZSBhZ2VudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm90b2NvbFxuICAvLyAoSFRUUCBhbmQgSFRUUFMgdXNlIGRpZmZlcmVudCB0eXBlcyBvZiBhZ2VudHMpXG4gIGlmICh0aGlzLl9vcHRpb25zLmFnZW50cykge1xuICAgIHZhciBzY2hlbWUgPSBwcm90b2NvbC5zbGljZSgwLCAtMSk7XG4gICAgdGhpcy5fb3B0aW9ucy5hZ2VudCA9IHRoaXMuX29wdGlvbnMuYWdlbnRzW3NjaGVtZV07XG4gIH1cblxuICAvLyBDcmVhdGUgdGhlIG5hdGl2ZSByZXF1ZXN0IGFuZCBzZXQgdXAgaXRzIGV2ZW50IGhhbmRsZXJzXG4gIHZhciByZXF1ZXN0ID0gdGhpcy5fY3VycmVudFJlcXVlc3QgPVxuICAgICAgICBuYXRpdmVQcm90b2NvbC5yZXF1ZXN0KHRoaXMuX29wdGlvbnMsIHRoaXMuX29uTmF0aXZlUmVzcG9uc2UpO1xuICByZXF1ZXN0Ll9yZWRpcmVjdGFibGUgPSB0aGlzO1xuICBmb3IgKHZhciBldmVudCBvZiBldmVudHMpIHtcbiAgICByZXF1ZXN0Lm9uKGV2ZW50LCBldmVudEhhbmRsZXJzW2V2ZW50XSk7XG4gIH1cblxuICAvLyBSRkM3MjMwwqc1LjMuMTogV2hlbiBtYWtpbmcgYSByZXF1ZXN0IGRpcmVjdGx5IHRvIGFuIG9yaWdpbiBzZXJ2ZXIsIFvigKZdXG4gIC8vIGEgY2xpZW50IE1VU1Qgc2VuZCBvbmx5IHRoZSBhYnNvbHV0ZSBwYXRoIFvigKZdIGFzIHRoZSByZXF1ZXN0LXRhcmdldC5cbiAgdGhpcy5fY3VycmVudFVybCA9IC9eXFwvLy50ZXN0KHRoaXMuX29wdGlvbnMucGF0aCkgP1xuICAgIHVybC5mb3JtYXQodGhpcy5fb3B0aW9ucykgOlxuICAgIC8vIFdoZW4gbWFraW5nIGEgcmVxdWVzdCB0byBhIHByb3h5LCBb4oCmXVxuICAgIC8vIGEgY2xpZW50IE1VU1Qgc2VuZCB0aGUgdGFyZ2V0IFVSSSBpbiBhYnNvbHV0ZS1mb3JtIFvigKZdLlxuICAgIHRoaXMuX2N1cnJlbnRVcmwgPSB0aGlzLl9vcHRpb25zLnBhdGg7XG5cbiAgLy8gRW5kIGEgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIC8vIChUaGUgZmlyc3QgcmVxdWVzdCBtdXN0IGJlIGVuZGVkIGV4cGxpY2l0bHkgd2l0aCBSZWRpcmVjdGFibGVSZXF1ZXN0I2VuZClcbiAgaWYgKHRoaXMuX2lzUmVkaXJlY3QpIHtcbiAgICAvLyBXcml0ZSB0aGUgcmVxdWVzdCBlbnRpdHkgYW5kIGVuZFxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGJ1ZmZlcnMgPSB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnM7XG4gICAgKGZ1bmN0aW9uIHdyaXRlTmV4dChlcnJvcikge1xuICAgICAgLy8gT25seSB3cml0ZSBpZiB0aGlzIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHJlZGlyZWN0ZWQgeWV0XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHJlcXVlc3QgPT09IHNlbGYuX2N1cnJlbnRSZXF1ZXN0KSB7XG4gICAgICAgIC8vIFJlcG9ydCBhbnkgd3JpdGUgZXJyb3JzXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBzZWxmLmVtaXQoXCJlcnJvclwiLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV3JpdGUgdGhlIG5leHQgYnVmZmVyIGlmIHRoZXJlIGFyZSBzdGlsbCBsZWZ0XG4gICAgICAgIGVsc2UgaWYgKGkgPCBidWZmZXJzLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBidWZmZXIgPSBidWZmZXJzW2krK107XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAoIXJlcXVlc3QuZmluaXNoZWQpIHtcbiAgICAgICAgICAgIHJlcXVlc3Qud3JpdGUoYnVmZmVyLmRhdGEsIGJ1ZmZlci5lbmNvZGluZywgd3JpdGVOZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5kIHRoZSByZXF1ZXN0IGlmIGBlbmRgIGhhcyBiZWVuIGNhbGxlZCBvbiB1c1xuICAgICAgICBlbHNlIGlmIChzZWxmLl9lbmRlZCkge1xuICAgICAgICAgIHJlcXVlc3QuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KCkpO1xuICB9XG59O1xuXG4vLyBQcm9jZXNzZXMgYSByZXNwb25zZSBmcm9tIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fcHJvY2Vzc1Jlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gIC8vIFN0b3JlIHRoZSByZWRpcmVjdGVkIHJlc3BvbnNlXG4gIHZhciBzdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzQ29kZTtcbiAgaWYgKHRoaXMuX29wdGlvbnMudHJhY2tSZWRpcmVjdHMpIHtcbiAgICB0aGlzLl9yZWRpcmVjdHMucHVzaCh7XG4gICAgICB1cmw6IHRoaXMuX2N1cnJlbnRVcmwsXG4gICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgc3RhdHVzQ29kZTogc3RhdHVzQ29kZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJGQzcyMzHCpzYuNDogVGhlIDN4eCAoUmVkaXJlY3Rpb24pIGNsYXNzIG9mIHN0YXR1cyBjb2RlIGluZGljYXRlc1xuICAvLyB0aGF0IGZ1cnRoZXIgYWN0aW9uIG5lZWRzIHRvIGJlIHRha2VuIGJ5IHRoZSB1c2VyIGFnZW50IGluIG9yZGVyIHRvXG4gIC8vIGZ1bGZpbGwgdGhlIHJlcXVlc3QuIElmIGEgTG9jYXRpb24gaGVhZGVyIGZpZWxkIGlzIHByb3ZpZGVkLFxuICAvLyB0aGUgdXNlciBhZ2VudCBNQVkgYXV0b21hdGljYWxseSByZWRpcmVjdCBpdHMgcmVxdWVzdCB0byB0aGUgVVJJXG4gIC8vIHJlZmVyZW5jZWQgYnkgdGhlIExvY2F0aW9uIGZpZWxkIHZhbHVlLFxuICAvLyBldmVuIGlmIHRoZSBzcGVjaWZpYyBzdGF0dXMgY29kZSBpcyBub3QgdW5kZXJzdG9vZC5cblxuICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgbm90IGEgcmVkaXJlY3Q7IHJldHVybiBpdCBhcy1pc1xuICB2YXIgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzLmxvY2F0aW9uO1xuICBpZiAoIWxvY2F0aW9uIHx8IHRoaXMuX29wdGlvbnMuZm9sbG93UmVkaXJlY3RzID09PSBmYWxzZSB8fFxuICAgICAgc3RhdHVzQ29kZSA8IDMwMCB8fCBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgIHJlc3BvbnNlLnJlc3BvbnNlVXJsID0gdGhpcy5fY3VycmVudFVybDtcbiAgICByZXNwb25zZS5yZWRpcmVjdHMgPSB0aGlzLl9yZWRpcmVjdHM7XG4gICAgdGhpcy5lbWl0KFwicmVzcG9uc2VcIiwgcmVzcG9uc2UpO1xuXG4gICAgLy8gQ2xlYW4gdXBcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGUgcmVzcG9uc2UgaXMgYSByZWRpcmVjdCwgc28gYWJvcnQgdGhlIGN1cnJlbnQgcmVxdWVzdFxuICBhYm9ydFJlcXVlc3QodGhpcy5fY3VycmVudFJlcXVlc3QpO1xuICAvLyBEaXNjYXJkIHRoZSByZW1haW5kZXIgb2YgdGhlIHJlc3BvbnNlIHRvIGF2b2lkIHdhaXRpbmcgZm9yIGRhdGFcbiAgcmVzcG9uc2UuZGVzdHJveSgpO1xuXG4gIC8vIFJGQzcyMzHCpzYuNDogQSBjbGllbnQgU0hPVUxEIGRldGVjdCBhbmQgaW50ZXJ2ZW5lXG4gIC8vIGluIGN5Y2xpY2FsIHJlZGlyZWN0aW9ucyAoaS5lLiwgXCJpbmZpbml0ZVwiIHJlZGlyZWN0aW9uIGxvb3BzKS5cbiAgaWYgKCsrdGhpcy5fcmVkaXJlY3RDb3VudCA+IHRoaXMuX29wdGlvbnMubWF4UmVkaXJlY3RzKSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IFRvb01hbnlSZWRpcmVjdHNFcnJvcigpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTdG9yZSB0aGUgcmVxdWVzdCBoZWFkZXJzIGlmIGFwcGxpY2FibGVcbiAgdmFyIHJlcXVlc3RIZWFkZXJzO1xuICB2YXIgYmVmb3JlUmVkaXJlY3QgPSB0aGlzLl9vcHRpb25zLmJlZm9yZVJlZGlyZWN0O1xuICBpZiAoYmVmb3JlUmVkaXJlY3QpIHtcbiAgICByZXF1ZXN0SGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgLy8gVGhlIEhvc3QgaGVhZGVyIHdhcyBzZXQgYnkgbmF0aXZlUHJvdG9jb2wucmVxdWVzdFxuICAgICAgSG9zdDogcmVzcG9uc2UucmVxLmdldEhlYWRlcihcImhvc3RcIiksXG4gICAgfSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcbiAgfVxuXG4gIC8vIFJGQzcyMzHCpzYuNDogQXV0b21hdGljIHJlZGlyZWN0aW9uIG5lZWRzIHRvIGRvbmUgd2l0aFxuICAvLyBjYXJlIGZvciBtZXRob2RzIG5vdCBrbm93biB0byBiZSBzYWZlLCBb4oCmXVxuICAvLyBSRkM3MjMxwqc2LjQuMuKAkzM6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGEgdXNlciBhZ2VudCBNQVkgY2hhbmdlXG4gIC8vIHRoZSByZXF1ZXN0IG1ldGhvZCBmcm9tIFBPU1QgdG8gR0VUIGZvciB0aGUgc3Vic2VxdWVudCByZXF1ZXN0LlxuICB2YXIgbWV0aG9kID0gdGhpcy5fb3B0aW9ucy5tZXRob2Q7XG4gIGlmICgoc3RhdHVzQ29kZSA9PT0gMzAxIHx8IHN0YXR1c0NvZGUgPT09IDMwMikgJiYgdGhpcy5fb3B0aW9ucy5tZXRob2QgPT09IFwiUE9TVFwiIHx8XG4gICAgICAvLyBSRkM3MjMxwqc2LjQuNDogVGhlIDMwMyAoU2VlIE90aGVyKSBzdGF0dXMgY29kZSBpbmRpY2F0ZXMgdGhhdFxuICAgICAgLy8gdGhlIHNlcnZlciBpcyByZWRpcmVjdGluZyB0aGUgdXNlciBhZ2VudCB0byBhIGRpZmZlcmVudCByZXNvdXJjZSBb4oCmXVxuICAgICAgLy8gQSB1c2VyIGFnZW50IGNhbiBwZXJmb3JtIGEgcmV0cmlldmFsIHJlcXVlc3QgdGFyZ2V0aW5nIHRoYXQgVVJJXG4gICAgICAvLyAoYSBHRVQgb3IgSEVBRCByZXF1ZXN0IGlmIHVzaW5nIEhUVFApIFvigKZdXG4gICAgICAoc3RhdHVzQ29kZSA9PT0gMzAzKSAmJiAhL14oPzpHRVR8SEVBRCkkLy50ZXN0KHRoaXMuX29wdGlvbnMubWV0aG9kKSkge1xuICAgIHRoaXMuX29wdGlvbnMubWV0aG9kID0gXCJHRVRcIjtcbiAgICAvLyBEcm9wIGEgcG9zc2libGUgZW50aXR5IGFuZCBoZWFkZXJzIHJlbGF0ZWQgdG8gaXRcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgICByZW1vdmVNYXRjaGluZ0hlYWRlcnMoL15jb250ZW50LS9pLCB0aGlzLl9vcHRpb25zLmhlYWRlcnMpO1xuICB9XG5cbiAgLy8gRHJvcCB0aGUgSG9zdCBoZWFkZXIsIGFzIHRoZSByZWRpcmVjdCBtaWdodCBsZWFkIHRvIGEgZGlmZmVyZW50IGhvc3RcbiAgdmFyIGN1cnJlbnRIb3N0SGVhZGVyID0gcmVtb3ZlTWF0Y2hpbmdIZWFkZXJzKC9eaG9zdCQvaSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcblxuICAvLyBJZiB0aGUgcmVkaXJlY3QgaXMgcmVsYXRpdmUsIGNhcnJ5IG92ZXIgdGhlIGhvc3Qgb2YgdGhlIGxhc3QgcmVxdWVzdFxuICB2YXIgY3VycmVudFVybFBhcnRzID0gdXJsLnBhcnNlKHRoaXMuX2N1cnJlbnRVcmwpO1xuICB2YXIgY3VycmVudEhvc3QgPSBjdXJyZW50SG9zdEhlYWRlciB8fCBjdXJyZW50VXJsUGFydHMuaG9zdDtcbiAgdmFyIGN1cnJlbnRVcmwgPSAvXlxcdys6Ly50ZXN0KGxvY2F0aW9uKSA/IHRoaXMuX2N1cnJlbnRVcmwgOlxuICAgIHVybC5mb3JtYXQoT2JqZWN0LmFzc2lnbihjdXJyZW50VXJsUGFydHMsIHsgaG9zdDogY3VycmVudEhvc3QgfSkpO1xuXG4gIC8vIERldGVybWluZSB0aGUgVVJMIG9mIHRoZSByZWRpcmVjdGlvblxuICB2YXIgcmVkaXJlY3RVcmw7XG4gIHRyeSB7XG4gICAgcmVkaXJlY3RVcmwgPSB1cmwucmVzb2x2ZShjdXJyZW50VXJsLCBsb2NhdGlvbik7XG4gIH1cbiAgY2F0Y2ggKGNhdXNlKSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IFJlZGlyZWN0aW9uRXJyb3IoY2F1c2UpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBDcmVhdGUgdGhlIHJlZGlyZWN0ZWQgcmVxdWVzdFxuICBkZWJ1ZyhcInJlZGlyZWN0aW5nIHRvXCIsIHJlZGlyZWN0VXJsKTtcbiAgdGhpcy5faXNSZWRpcmVjdCA9IHRydWU7XG4gIHZhciByZWRpcmVjdFVybFBhcnRzID0gdXJsLnBhcnNlKHJlZGlyZWN0VXJsKTtcbiAgT2JqZWN0LmFzc2lnbih0aGlzLl9vcHRpb25zLCByZWRpcmVjdFVybFBhcnRzKTtcblxuICAvLyBEcm9wIGNvbmZpZGVudGlhbCBoZWFkZXJzIHdoZW4gcmVkaXJlY3RpbmcgdG8gYSBsZXNzIHNlY3VyZSBwcm90b2NvbFxuICAvLyBvciB0byBhIGRpZmZlcmVudCBkb21haW4gdGhhdCBpcyBub3QgYSBzdXBlcmRvbWFpblxuICBpZiAocmVkaXJlY3RVcmxQYXJ0cy5wcm90b2NvbCAhPT0gY3VycmVudFVybFBhcnRzLnByb3RvY29sICYmXG4gICAgIHJlZGlyZWN0VXJsUGFydHMucHJvdG9jb2wgIT09IFwiaHR0cHM6XCIgfHxcbiAgICAgcmVkaXJlY3RVcmxQYXJ0cy5ob3N0ICE9PSBjdXJyZW50SG9zdCAmJlxuICAgICAhaXNTdWJkb21haW4ocmVkaXJlY3RVcmxQYXJ0cy5ob3N0LCBjdXJyZW50SG9zdCkpIHtcbiAgICByZW1vdmVNYXRjaGluZ0hlYWRlcnMoL14oPzphdXRob3JpemF0aW9ufGNvb2tpZSkkL2ksIHRoaXMuX29wdGlvbnMuaGVhZGVycyk7XG4gIH1cblxuICAvLyBFdmFsdWF0ZSB0aGUgYmVmb3JlUmVkaXJlY3QgY2FsbGJhY2tcbiAgaWYgKHR5cGVvZiBiZWZvcmVSZWRpcmVjdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIHJlc3BvbnNlRGV0YWlscyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBzdGF0dXNDb2RlOiBzdGF0dXNDb2RlLFxuICAgIH07XG4gICAgdmFyIHJlcXVlc3REZXRhaWxzID0ge1xuICAgICAgdXJsOiBjdXJyZW50VXJsLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBiZWZvcmVSZWRpcmVjdCh0aGlzLl9vcHRpb25zLCByZXNwb25zZURldGFpbHMsIHJlcXVlc3REZXRhaWxzKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fc2FuaXRpemVPcHRpb25zKHRoaXMuX29wdGlvbnMpO1xuICB9XG5cbiAgLy8gUGVyZm9ybSB0aGUgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIHRyeSB7XG4gICAgdGhpcy5fcGVyZm9ybVJlcXVlc3QoKTtcbiAgfVxuICBjYXRjaCAoY2F1c2UpIHtcbiAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgUmVkaXJlY3Rpb25FcnJvcihjYXVzZSkpO1xuICB9XG59O1xuXG4vLyBXcmFwcyB0aGUga2V5L3ZhbHVlIG9iamVjdCBvZiBwcm90b2NvbHMgd2l0aCByZWRpcmVjdCBmdW5jdGlvbmFsaXR5XG5mdW5jdGlvbiB3cmFwKHByb3RvY29scykge1xuICAvLyBEZWZhdWx0IHNldHRpbmdzXG4gIHZhciBleHBvcnRzID0ge1xuICAgIG1heFJlZGlyZWN0czogMjEsXG4gICAgbWF4Qm9keUxlbmd0aDogMTAgKiAxMDI0ICogMTAyNCxcbiAgfTtcblxuICAvLyBXcmFwIGVhY2ggcHJvdG9jb2xcbiAgdmFyIG5hdGl2ZVByb3RvY29scyA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm90b2NvbHMpLmZvckVhY2goZnVuY3Rpb24gKHNjaGVtZSkge1xuICAgIHZhciBwcm90b2NvbCA9IHNjaGVtZSArIFwiOlwiO1xuICAgIHZhciBuYXRpdmVQcm90b2NvbCA9IG5hdGl2ZVByb3RvY29sc1twcm90b2NvbF0gPSBwcm90b2NvbHNbc2NoZW1lXTtcbiAgICB2YXIgd3JhcHBlZFByb3RvY29sID0gZXhwb3J0c1tzY2hlbWVdID0gT2JqZWN0LmNyZWF0ZShuYXRpdmVQcm90b2NvbCk7XG5cbiAgICAvLyBFeGVjdXRlcyBhIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICBmdW5jdGlvbiByZXF1ZXN0KGlucHV0LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgLy8gUGFyc2UgcGFyYW1ldGVyc1xuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB2YXIgdXJsU3RyID0gaW5wdXQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaW5wdXQgPSB1cmxUb09wdGlvbnMobmV3IFVSTCh1cmxTdHIpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICBpbnB1dCA9IHVybC5wYXJzZSh1cmxTdHIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChVUkwgJiYgKGlucHV0IGluc3RhbmNlb2YgVVJMKSkge1xuICAgICAgICBpbnB1dCA9IHVybFRvT3B0aW9ucyhpbnB1dCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gaW5wdXQ7XG4gICAgICAgIGlucHV0ID0geyBwcm90b2NvbDogcHJvdG9jb2wgfTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBkZWZhdWx0c1xuICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBtYXhSZWRpcmVjdHM6IGV4cG9ydHMubWF4UmVkaXJlY3RzLFxuICAgICAgICBtYXhCb2R5TGVuZ3RoOiBleHBvcnRzLm1heEJvZHlMZW5ndGgsXG4gICAgICB9LCBpbnB1dCwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLm5hdGl2ZVByb3RvY29scyA9IG5hdGl2ZVByb3RvY29scztcblxuICAgICAgYXNzZXJ0LmVxdWFsKG9wdGlvbnMucHJvdG9jb2wsIHByb3RvY29sLCBcInByb3RvY29sIG1pc21hdGNoXCIpO1xuICAgICAgZGVidWcoXCJvcHRpb25zXCIsIG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIG5ldyBSZWRpcmVjdGFibGVSZXF1ZXN0KG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvLyBFeGVjdXRlcyBhIEdFVCByZXF1ZXN0LCBmb2xsb3dpbmcgcmVkaXJlY3RzXG4gICAgZnVuY3Rpb24gZ2V0KGlucHV0LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIHdyYXBwZWRSZXF1ZXN0ID0gd3JhcHBlZFByb3RvY29sLnJlcXVlc3QoaW5wdXQsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgIHdyYXBwZWRSZXF1ZXN0LmVuZCgpO1xuICAgICAgcmV0dXJuIHdyYXBwZWRSZXF1ZXN0O1xuICAgIH1cblxuICAgIC8vIEV4cG9zZSB0aGUgcHJvcGVydGllcyBvbiB0aGUgd3JhcHBlZCBwcm90b2NvbFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdyYXBwZWRQcm90b2NvbCwge1xuICAgICAgcmVxdWVzdDogeyB2YWx1ZTogcmVxdWVzdCwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9LFxuICAgICAgZ2V0OiB7IHZhbHVlOiBnZXQsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSxcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBleHBvcnRzO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gbm9vcCgpIHsgLyogZW1wdHkgKi8gfVxuXG4vLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9saWIvaW50ZXJuYWwvdXJsLmpzXG5mdW5jdGlvbiB1cmxUb09wdGlvbnModXJsT2JqZWN0KSB7XG4gIHZhciBvcHRpb25zID0ge1xuICAgIHByb3RvY29sOiB1cmxPYmplY3QucHJvdG9jb2wsXG4gICAgaG9zdG5hbWU6IHVybE9iamVjdC5ob3N0bmFtZS5zdGFydHNXaXRoKFwiW1wiKSA/XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgdXJsT2JqZWN0Lmhvc3RuYW1lLnNsaWNlKDEsIC0xKSA6XG4gICAgICB1cmxPYmplY3QuaG9zdG5hbWUsXG4gICAgaGFzaDogdXJsT2JqZWN0Lmhhc2gsXG4gICAgc2VhcmNoOiB1cmxPYmplY3Quc2VhcmNoLFxuICAgIHBhdGhuYW1lOiB1cmxPYmplY3QucGF0aG5hbWUsXG4gICAgcGF0aDogdXJsT2JqZWN0LnBhdGhuYW1lICsgdXJsT2JqZWN0LnNlYXJjaCxcbiAgICBocmVmOiB1cmxPYmplY3QuaHJlZixcbiAgfTtcbiAgaWYgKHVybE9iamVjdC5wb3J0ICE9PSBcIlwiKSB7XG4gICAgb3B0aW9ucy5wb3J0ID0gTnVtYmVyKHVybE9iamVjdC5wb3J0KTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTWF0Y2hpbmdIZWFkZXJzKHJlZ2V4LCBoZWFkZXJzKSB7XG4gIHZhciBsYXN0VmFsdWU7XG4gIGZvciAodmFyIGhlYWRlciBpbiBoZWFkZXJzKSB7XG4gICAgaWYgKHJlZ2V4LnRlc3QoaGVhZGVyKSkge1xuICAgICAgbGFzdFZhbHVlID0gaGVhZGVyc1toZWFkZXJdO1xuICAgICAgZGVsZXRlIGhlYWRlcnNbaGVhZGVyXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChsYXN0VmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIGxhc3RWYWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikgP1xuICAgIHVuZGVmaW5lZCA6IFN0cmluZyhsYXN0VmFsdWUpLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JUeXBlKGNvZGUsIGRlZmF1bHRNZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKGNhdXNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgaWYgKCFjYXVzZSkge1xuICAgICAgdGhpcy5tZXNzYWdlID0gZGVmYXVsdE1lc3NhZ2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5tZXNzYWdlID0gZGVmYXVsdE1lc3NhZ2UgKyBcIjogXCIgKyBjYXVzZS5tZXNzYWdlO1xuICAgICAgdGhpcy5jYXVzZSA9IGNhdXNlO1xuICAgIH1cbiAgfVxuICBDdXN0b21FcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgQ3VzdG9tRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3VzdG9tRXJyb3I7XG4gIEN1c3RvbUVycm9yLnByb3RvdHlwZS5uYW1lID0gXCJFcnJvciBbXCIgKyBjb2RlICsgXCJdXCI7XG4gIEN1c3RvbUVycm9yLnByb3RvdHlwZS5jb2RlID0gY29kZTtcbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufVxuXG5mdW5jdGlvbiBhYm9ydFJlcXVlc3QocmVxdWVzdCkge1xuICBmb3IgKHZhciBldmVudCBvZiBldmVudHMpIHtcbiAgICByZXF1ZXN0LnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBldmVudEhhbmRsZXJzW2V2ZW50XSk7XG4gIH1cbiAgcmVxdWVzdC5vbihcImVycm9yXCIsIG5vb3ApO1xuICByZXF1ZXN0LmFib3J0KCk7XG59XG5cbmZ1bmN0aW9uIGlzU3ViZG9tYWluKHN1YmRvbWFpbiwgZG9tYWluKSB7XG4gIGNvbnN0IGRvdCA9IHN1YmRvbWFpbi5sZW5ndGggLSBkb21haW4ubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGRvdCA+IDAgJiYgc3ViZG9tYWluW2RvdF0gPT09IFwiLlwiICYmIHN1YmRvbWFpbi5lbmRzV2l0aChkb21haW4pO1xufVxuXG4vLyBFeHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXAoeyBodHRwOiBodHRwLCBodHRwczogaHR0cHMgfSk7XG5tb2R1bGUuZXhwb3J0cy53cmFwID0gd3JhcDtcbiIsInZhciBDb21iaW5lZFN0cmVhbSA9IHJlcXVpcmUoJ2NvbWJpbmVkLXN0cmVhbScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBwYXJzZVVybCA9IHJlcXVpcmUoJ3VybCcpLnBhcnNlO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW07XG52YXIgbWltZSA9IHJlcXVpcmUoJ21pbWUtdHlwZXMnKTtcbnZhciBhc3luY2tpdCA9IHJlcXVpcmUoJ2FzeW5ja2l0Jyk7XG52YXIgcG9wdWxhdGUgPSByZXF1aXJlKCcuL3BvcHVsYXRlLmpzJyk7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gRm9ybURhdGE7XG5cbi8vIG1ha2UgaXQgYSBTdHJlYW1cbnV0aWwuaW5oZXJpdHMoRm9ybURhdGEsIENvbWJpbmVkU3RyZWFtKTtcblxuLyoqXG4gKiBDcmVhdGUgcmVhZGFibGUgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgc3RyZWFtcy5cbiAqIENhbiBiZSB1c2VkIHRvIHN1Ym1pdCBmb3Jtc1xuICogYW5kIGZpbGUgdXBsb2FkcyB0byBvdGhlciB3ZWIgYXBwbGljYXRpb25zLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBQcm9wZXJ0aWVzIHRvIGJlIGFkZGVkL292ZXJyaWRlbiBmb3IgRm9ybURhdGEgYW5kIENvbWJpbmVkU3RyZWFtXG4gKi9cbmZ1bmN0aW9uIEZvcm1EYXRhKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZvcm1EYXRhKSkge1xuICAgIHJldHVybiBuZXcgRm9ybURhdGEob3B0aW9ucyk7XG4gIH1cblxuICB0aGlzLl9vdmVyaGVhZExlbmd0aCA9IDA7XG4gIHRoaXMuX3ZhbHVlTGVuZ3RoID0gMDtcbiAgdGhpcy5fdmFsdWVzVG9NZWFzdXJlID0gW107XG5cbiAgQ29tYmluZWRTdHJlYW0uY2FsbCh0aGlzKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICB0aGlzW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gIH1cbn1cblxuRm9ybURhdGEuTElORV9CUkVBSyA9ICdcXHJcXG4nO1xuRm9ybURhdGEuREVGQVVMVF9DT05URU5UX1RZUEUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcblxuRm9ybURhdGEucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSwgb3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIGFsbG93IGZpbGVuYW1lIGFzIHNpbmdsZSBvcHRpb25cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHtmaWxlbmFtZTogb3B0aW9uc307XG4gIH1cblxuICB2YXIgYXBwZW5kID0gQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmFwcGVuZC5iaW5kKHRoaXMpO1xuXG4gIC8vIGFsbCB0aGF0IHN0cmVhbXkgYnVzaW5lc3MgY2FuJ3QgaGFuZGxlIG51bWJlcnNcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHZhbHVlID0gJycgKyB2YWx1ZTtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZWxpeGdlL25vZGUtZm9ybS1kYXRhL2lzc3Vlcy8zOFxuICBpZiAodXRpbC5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFBsZWFzZSBjb252ZXJ0IHlvdXIgYXJyYXkgaW50byBzdHJpbmdcbiAgICAvLyB0aGUgd2F5IHdlYiBzZXJ2ZXIgZXhwZWN0cyBpdFxuICAgIHRoaXMuX2Vycm9yKG5ldyBFcnJvcignQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkLicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaGVhZGVyID0gdGhpcy5fbXVsdGlQYXJ0SGVhZGVyKGZpZWxkLCB2YWx1ZSwgb3B0aW9ucyk7XG4gIHZhciBmb290ZXIgPSB0aGlzLl9tdWx0aVBhcnRGb290ZXIoKTtcblxuICBhcHBlbmQoaGVhZGVyKTtcbiAgYXBwZW5kKHZhbHVlKTtcbiAgYXBwZW5kKGZvb3Rlcik7XG5cbiAgLy8gcGFzcyBhbG9uZyBvcHRpb25zLmtub3duTGVuZ3RoXG4gIHRoaXMuX3RyYWNrTGVuZ3RoKGhlYWRlciwgdmFsdWUsIG9wdGlvbnMpO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl90cmFja0xlbmd0aCA9IGZ1bmN0aW9uKGhlYWRlciwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHZhbHVlTGVuZ3RoID0gMDtcblxuICAvLyB1c2VkIHcvIGdldExlbmd0aFN5bmMoKSwgd2hlbiBsZW5ndGggaXMga25vd24uXG4gIC8vIGUuZy4gZm9yIHN0cmVhbWluZyBkaXJlY3RseSBmcm9tIGEgcmVtb3RlIHNlcnZlcixcbiAgLy8gdy8gYSBrbm93biBmaWxlIGEgc2l6ZSwgYW5kIG5vdCB3YW50aW5nIHRvIHdhaXQgZm9yXG4gIC8vIGluY29taW5nIGZpbGUgdG8gZmluaXNoIHRvIGdldCBpdHMgc2l6ZS5cbiAgaWYgKG9wdGlvbnMua25vd25MZW5ndGggIT0gbnVsbCkge1xuICAgIHZhbHVlTGVuZ3RoICs9ICtvcHRpb25zLmtub3duTGVuZ3RoO1xuICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICB2YWx1ZUxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWVMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSk7XG4gIH1cblxuICB0aGlzLl92YWx1ZUxlbmd0aCArPSB2YWx1ZUxlbmd0aDtcblxuICAvLyBAY2hlY2sgd2h5IGFkZCBDUkxGPyBkb2VzIHRoaXMgYWNjb3VudCBmb3IgY3VzdG9tL211bHRpcGxlIENSTEZzP1xuICB0aGlzLl9vdmVyaGVhZExlbmd0aCArPVxuICAgIEJ1ZmZlci5ieXRlTGVuZ3RoKGhlYWRlcikgK1xuICAgIEZvcm1EYXRhLkxJTkVfQlJFQUsubGVuZ3RoO1xuXG4gIC8vIGVtcHR5IG9yIGVpdGhlciBkb2Vzbid0IGhhdmUgcGF0aCBvciBub3QgYW4gaHR0cCByZXNwb25zZSBvciBub3QgYSBzdHJlYW1cbiAgaWYgKCF2YWx1ZSB8fCAoICF2YWx1ZS5wYXRoICYmICEodmFsdWUucmVhZGFibGUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpICYmICEodmFsdWUgaW5zdGFuY2VvZiBTdHJlYW0pKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIG5vIG5lZWQgdG8gYm90aGVyIHdpdGggdGhlIGxlbmd0aFxuICBpZiAoIW9wdGlvbnMua25vd25MZW5ndGgpIHtcbiAgICB0aGlzLl92YWx1ZXNUb01lYXN1cmUucHVzaCh2YWx1ZSk7XG4gIH1cbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbGVuZ3RoUmV0cmlldmVyID0gZnVuY3Rpb24odmFsdWUsIGNhbGxiYWNrKSB7XG5cbiAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdmZCcpKSB7XG5cbiAgICAvLyB0YWtlIHJlYWQgcmFuZ2UgaW50byBhIGFjY291bnRcbiAgICAvLyBgZW5kYCA9IEluZmluaXR5IOKAkz4gcmVhZCBmaWxlIHRpbGwgdGhlIGVuZFxuICAgIC8vXG4gICAgLy8gVE9ETzogTG9va3MgbGlrZSB0aGVyZSBpcyBidWcgaW4gTm9kZSBmcy5jcmVhdGVSZWFkU3RyZWFtXG4gICAgLy8gaXQgZG9lc24ndCByZXNwZWN0IGBlbmRgIG9wdGlvbnMgd2l0aG91dCBgc3RhcnRgIG9wdGlvbnNcbiAgICAvLyBGaXggaXQgd2hlbiBub2RlIGZpeGVzIGl0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvNzgxOVxuICAgIGlmICh2YWx1ZS5lbmQgIT0gdW5kZWZpbmVkICYmIHZhbHVlLmVuZCAhPSBJbmZpbml0eSAmJiB2YWx1ZS5zdGFydCAhPSB1bmRlZmluZWQpIHtcblxuICAgICAgLy8gd2hlbiBlbmQgc3BlY2lmaWVkXG4gICAgICAvLyBubyBuZWVkIHRvIGNhbGN1bGF0ZSByYW5nZVxuICAgICAgLy8gaW5jbHVzaXZlLCBzdGFydHMgd2l0aCAwXG4gICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZS5lbmQgKyAxIC0gKHZhbHVlLnN0YXJ0ID8gdmFsdWUuc3RhcnQgOiAwKSk7XG5cbiAgICAvLyBub3QgdGhhdCBmYXN0IHNub29weVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzdGlsbCBuZWVkIHRvIGZldGNoIGZpbGUgc2l6ZSBmcm9tIGZzXG4gICAgICBmcy5zdGF0KHZhbHVlLnBhdGgsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuXG4gICAgICAgIHZhciBmaWxlU2l6ZTtcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgZmluYWwgc2l6ZSBiYXNlZCBvbiB0aGUgcmFuZ2Ugb3B0aW9uc1xuICAgICAgICBmaWxlU2l6ZSA9IHN0YXQuc2l6ZSAtICh2YWx1ZS5zdGFydCA/IHZhbHVlLnN0YXJ0IDogMCk7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGZpbGVTaXplKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAvLyBvciBodHRwIHJlc3BvbnNlXG4gIH0gZWxzZSBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICBjYWxsYmFjayhudWxsLCArdmFsdWUuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG5cbiAgLy8gb3IgcmVxdWVzdCBzdHJlYW0gaHR0cDovL2dpdGh1Yi5jb20vbWlrZWFsL3JlcXVlc3RcbiAgfSBlbHNlIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cE1vZHVsZScpKSB7XG4gICAgLy8gd2FpdCB0aWxsIHJlc3BvbnNlIGNvbWUgYmFja1xuICAgIHZhbHVlLm9uKCdyZXNwb25zZScsIGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICB2YWx1ZS5wYXVzZSgpO1xuICAgICAgY2FsbGJhY2sobnVsbCwgK3Jlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pO1xuICAgIH0pO1xuICAgIHZhbHVlLnJlc3VtZSgpO1xuXG4gIC8vIHNvbWV0aGluZyBlbHNlXG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soJ1Vua25vd24gc3RyZWFtJyk7XG4gIH1cbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbXVsdGlQYXJ0SGVhZGVyID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlLCBvcHRpb25zKSB7XG4gIC8vIGN1c3RvbSBoZWFkZXIgc3BlY2lmaWVkIChhcyBzdHJpbmcpP1xuICAvLyBpdCBiZWNvbWVzIHJlc3BvbnNpYmxlIGZvciBib3VuZGFyeVxuICAvLyAoZS5nLiB0byBoYW5kbGUgZXh0cmEgQ1JMRnMgb24gLk5FVCBzZXJ2ZXJzKVxuICBpZiAodHlwZW9mIG9wdGlvbnMuaGVhZGVyID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuaGVhZGVyO1xuICB9XG5cbiAgdmFyIGNvbnRlbnREaXNwb3NpdGlvbiA9IHRoaXMuX2dldENvbnRlbnREaXNwb3NpdGlvbih2YWx1ZSwgb3B0aW9ucyk7XG4gIHZhciBjb250ZW50VHlwZSA9IHRoaXMuX2dldENvbnRlbnRUeXBlKHZhbHVlLCBvcHRpb25zKTtcblxuICB2YXIgY29udGVudHMgPSAnJztcbiAgdmFyIGhlYWRlcnMgID0ge1xuICAgIC8vIGFkZCBjdXN0b20gZGlzcG9zaXRpb24gYXMgdGhpcmQgZWxlbWVudCBvciBrZWVwIGl0IHR3byBlbGVtZW50cyBpZiBub3RcbiAgICAnQ29udGVudC1EaXNwb3NpdGlvbic6IFsnZm9ybS1kYXRhJywgJ25hbWU9XCInICsgZmllbGQgKyAnXCInXS5jb25jYXQoY29udGVudERpc3Bvc2l0aW9uIHx8IFtdKSxcbiAgICAvLyBpZiBubyBjb250ZW50IHR5cGUuIGFsbG93IGl0IHRvIGJlIGVtcHR5IGFycmF5XG4gICAgJ0NvbnRlbnQtVHlwZSc6IFtdLmNvbmNhdChjb250ZW50VHlwZSB8fCBbXSlcbiAgfTtcblxuICAvLyBhbGxvdyBjdXN0b20gaGVhZGVycy5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmhlYWRlciA9PSAnb2JqZWN0Jykge1xuICAgIHBvcHVsYXRlKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVyKTtcbiAgfVxuXG4gIHZhciBoZWFkZXI7XG4gIGZvciAodmFyIHByb3AgaW4gaGVhZGVycykge1xuICAgIGlmICghaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgaGVhZGVyID0gaGVhZGVyc1twcm9wXTtcblxuICAgIC8vIHNraXAgbnVsbGlzaCBoZWFkZXJzLlxuICAgIGlmIChoZWFkZXIgPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbGwgaGVhZGVycyB0byBhcnJheXMuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlciA9IFtoZWFkZXJdO1xuICAgIH1cblxuICAgIC8vIGFkZCBub24tZW1wdHkgaGVhZGVycy5cbiAgICBpZiAoaGVhZGVyLmxlbmd0aCkge1xuICAgICAgY29udGVudHMgKz0gcHJvcCArICc6ICcgKyBoZWFkZXIuam9pbignOyAnKSArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICctLScgKyB0aGlzLmdldEJvdW5kYXJ5KCkgKyBGb3JtRGF0YS5MSU5FX0JSRUFLICsgY29udGVudHMgKyBGb3JtRGF0YS5MSU5FX0JSRUFLO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9nZXRDb250ZW50RGlzcG9zaXRpb24gPSBmdW5jdGlvbih2YWx1ZSwgb3B0aW9ucykge1xuXG4gIHZhciBmaWxlbmFtZVxuICAgICwgY29udGVudERpc3Bvc2l0aW9uXG4gICAgO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5maWxlcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBjdXN0b20gZmlsZXBhdGggZm9yIHJlbGF0aXZlIHBhdGhzXG4gICAgZmlsZW5hbWUgPSBwYXRoLm5vcm1hbGl6ZShvcHRpb25zLmZpbGVwYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5maWxlbmFtZSB8fCB2YWx1ZS5uYW1lIHx8IHZhbHVlLnBhdGgpIHtcbiAgICAvLyBjdXN0b20gZmlsZW5hbWUgdGFrZSBwcmVjZWRlbmNlXG4gICAgLy8gZm9ybWlkYWJsZSBhbmQgdGhlIGJyb3dzZXIgYWRkIGEgbmFtZSBwcm9wZXJ0eVxuICAgIC8vIGZzLSBhbmQgcmVxdWVzdC0gc3RyZWFtcyBoYXZlIHBhdGggcHJvcGVydHlcbiAgICBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUob3B0aW9ucy5maWxlbmFtZSB8fCB2YWx1ZS5uYW1lIHx8IHZhbHVlLnBhdGgpO1xuICB9IGVsc2UgaWYgKHZhbHVlLnJlYWRhYmxlICYmIHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwVmVyc2lvbicpKSB7XG4gICAgLy8gb3IgdHJ5IGh0dHAgcmVzcG9uc2VcbiAgICBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUodmFsdWUuY2xpZW50Ll9odHRwTWVzc2FnZS5wYXRoIHx8ICcnKTtcbiAgfVxuXG4gIGlmIChmaWxlbmFtZSkge1xuICAgIGNvbnRlbnREaXNwb3NpdGlvbiA9ICdmaWxlbmFtZT1cIicgKyBmaWxlbmFtZSArICdcIic7XG4gIH1cblxuICByZXR1cm4gY29udGVudERpc3Bvc2l0aW9uO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9nZXRDb250ZW50VHlwZSA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgLy8gdXNlIGN1c3RvbSBjb250ZW50LXR5cGUgYWJvdmUgYWxsXG4gIHZhciBjb250ZW50VHlwZSA9IG9wdGlvbnMuY29udGVudFR5cGU7XG5cbiAgLy8gb3IgdHJ5IGBuYW1lYCBmcm9tIGZvcm1pZGFibGUsIGJyb3dzZXJcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5uYW1lKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cCh2YWx1ZS5uYW1lKTtcbiAgfVxuXG4gIC8vIG9yIHRyeSBgcGF0aGAgZnJvbSBmcy0sIHJlcXVlc3QtIHN0cmVhbXNcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5wYXRoKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cCh2YWx1ZS5wYXRoKTtcbiAgfVxuXG4gIC8vIG9yIGlmIGl0J3MgaHR0cC1yZXBvbnNlXG4gIGlmICghY29udGVudFR5cGUgJiYgdmFsdWUucmVhZGFibGUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICBjb250ZW50VHlwZSA9IHZhbHVlLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddO1xuICB9XG5cbiAgLy8gb3IgZ3Vlc3MgaXQgZnJvbSB0aGUgZmlsZXBhdGggb3IgZmlsZW5hbWVcbiAgaWYgKCFjb250ZW50VHlwZSAmJiAob3B0aW9ucy5maWxlcGF0aCB8fCBvcHRpb25zLmZpbGVuYW1lKSkge1xuICAgIGNvbnRlbnRUeXBlID0gbWltZS5sb29rdXAob3B0aW9ucy5maWxlcGF0aCB8fCBvcHRpb25zLmZpbGVuYW1lKTtcbiAgfVxuXG4gIC8vIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBpZiBgdmFsdWVgIGlzIG5vdCBzaW1wbGUgdmFsdWVcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcpIHtcbiAgICBjb250ZW50VHlwZSA9IEZvcm1EYXRhLkRFRkFVTFRfQ09OVEVOVF9UWVBFO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnRUeXBlO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9tdWx0aVBhcnRGb290ZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5leHQpIHtcbiAgICB2YXIgZm9vdGVyID0gRm9ybURhdGEuTElORV9CUkVBSztcblxuICAgIHZhciBsYXN0UGFydCA9ICh0aGlzLl9zdHJlYW1zLmxlbmd0aCA9PT0gMCk7XG4gICAgaWYgKGxhc3RQYXJ0KSB7XG4gICAgICBmb290ZXIgKz0gdGhpcy5fbGFzdEJvdW5kYXJ5KCk7XG4gICAgfVxuXG4gICAgbmV4dChmb290ZXIpO1xuICB9LmJpbmQodGhpcyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2xhc3RCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gJy0tJyArIHRoaXMuZ2V0Qm91bmRhcnkoKSArICctLScgKyBGb3JtRGF0YS5MSU5FX0JSRUFLO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldEhlYWRlcnMgPSBmdW5jdGlvbih1c2VySGVhZGVycykge1xuICB2YXIgaGVhZGVyO1xuICB2YXIgZm9ybUhlYWRlcnMgPSB7XG4gICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0nICsgdGhpcy5nZXRCb3VuZGFyeSgpXG4gIH07XG5cbiAgZm9yIChoZWFkZXIgaW4gdXNlckhlYWRlcnMpIHtcbiAgICBpZiAodXNlckhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgZm9ybUhlYWRlcnNbaGVhZGVyLnRvTG93ZXJDYXNlKCldID0gdXNlckhlYWRlcnNbaGVhZGVyXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZm9ybUhlYWRlcnM7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuc2V0Qm91bmRhcnkgPSBmdW5jdGlvbihib3VuZGFyeSkge1xuICB0aGlzLl9ib3VuZGFyeSA9IGJvdW5kYXJ5O1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldEJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5fYm91bmRhcnkpIHtcbiAgICB0aGlzLl9nZW5lcmF0ZUJvdW5kYXJ5KCk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fYm91bmRhcnk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBkYXRhQnVmZmVyID0gbmV3IEJ1ZmZlci5hbGxvYyggMCApO1xuICB2YXIgYm91bmRhcnkgPSB0aGlzLmdldEJvdW5kYXJ5KCk7XG5cbiAgLy8gQ3JlYXRlIHRoZSBmb3JtIGNvbnRlbnQuIEFkZCBMaW5lIGJyZWFrcyB0byB0aGUgZW5kIG9mIGRhdGEuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLl9zdHJlYW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9zdHJlYW1zW2ldICE9PSAnZnVuY3Rpb24nKSB7XG5cbiAgICAgIC8vIEFkZCBjb250ZW50IHRvIHRoZSBidWZmZXIuXG4gICAgICBpZihCdWZmZXIuaXNCdWZmZXIodGhpcy5fc3RyZWFtc1tpXSkpIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCB0aGlzLl9zdHJlYW1zW2ldXSk7XG4gICAgICB9ZWxzZSB7XG4gICAgICAgIGRhdGFCdWZmZXIgPSBCdWZmZXIuY29uY2F0KCBbZGF0YUJ1ZmZlciwgQnVmZmVyLmZyb20odGhpcy5fc3RyZWFtc1tpXSldKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGJyZWFrIGFmdGVyIGNvbnRlbnQuXG4gICAgICBpZiAodHlwZW9mIHRoaXMuX3N0cmVhbXNbaV0gIT09ICdzdHJpbmcnIHx8IHRoaXMuX3N0cmVhbXNbaV0uc3Vic3RyaW5nKCAyLCBib3VuZGFyeS5sZW5ndGggKyAyICkgIT09IGJvdW5kYXJ5KSB7XG4gICAgICAgIGRhdGFCdWZmZXIgPSBCdWZmZXIuY29uY2F0KCBbZGF0YUJ1ZmZlciwgQnVmZmVyLmZyb20oRm9ybURhdGEuTElORV9CUkVBSyldICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHRoZSBmb290ZXIgYW5kIHJldHVybiB0aGUgQnVmZmVyIG9iamVjdC5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbSh0aGlzLl9sYXN0Qm91bmRhcnkoKSldICk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dlbmVyYXRlQm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgLy8gVGhpcyBnZW5lcmF0ZXMgYSA1MCBjaGFyYWN0ZXIgYm91bmRhcnkgc2ltaWxhciB0byB0aG9zZSB1c2VkIGJ5IEZpcmVmb3guXG4gIC8vIFRoZXkgYXJlIG9wdGltaXplZCBmb3IgYm95ZXItbW9vcmUgcGFyc2luZy5cbiAgdmFyIGJvdW5kYXJ5ID0gJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG4gICAgYm91bmRhcnkgKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApLnRvU3RyaW5nKDE2KTtcbiAgfVxuXG4gIHRoaXMuX2JvdW5kYXJ5ID0gYm91bmRhcnk7XG59O1xuXG4vLyBOb3RlOiBnZXRMZW5ndGhTeW5jIERPRVNOJ1QgY2FsY3VsYXRlIHN0cmVhbXMgbGVuZ3RoXG4vLyBBcyB3b3JrYXJvdW5kIG9uZSBjYW4gY2FsY3VsYXRlIGZpbGUgc2l6ZSBtYW51YWxseVxuLy8gYW5kIGFkZCBpdCBhcyBrbm93bkxlbmd0aCBvcHRpb25cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRMZW5ndGhTeW5jID0gZnVuY3Rpb24oKSB7XG4gIHZhciBrbm93bkxlbmd0aCA9IHRoaXMuX292ZXJoZWFkTGVuZ3RoICsgdGhpcy5fdmFsdWVMZW5ndGg7XG5cbiAgLy8gRG9uJ3QgZ2V0IGNvbmZ1c2VkLCB0aGVyZSBhcmUgMyBcImludGVybmFsXCIgc3RyZWFtcyBmb3IgZWFjaCBrZXl2YWwgcGFpclxuICAvLyBzbyBpdCBiYXNpY2FsbHkgY2hlY2tzIGlmIHRoZXJlIGlzIGFueSB2YWx1ZSBhZGRlZCB0byB0aGUgZm9ybVxuICBpZiAodGhpcy5fc3RyZWFtcy5sZW5ndGgpIHtcbiAgICBrbm93bkxlbmd0aCArPSB0aGlzLl9sYXN0Qm91bmRhcnkoKS5sZW5ndGg7XG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZm9ybS1kYXRhL2Zvcm0tZGF0YS9pc3N1ZXMvNDBcbiAgaWYgKCF0aGlzLmhhc0tub3duTGVuZ3RoKCkpIHtcbiAgICAvLyBTb21lIGFzeW5jIGxlbmd0aCByZXRyaWV2ZXJzIGFyZSBwcmVzZW50XG4gICAgLy8gdGhlcmVmb3JlIHN5bmNocm9ub3VzIGxlbmd0aCBjYWxjdWxhdGlvbiBpcyBmYWxzZS5cbiAgICAvLyBQbGVhc2UgdXNlIGdldExlbmd0aChjYWxsYmFjaykgdG8gZ2V0IHByb3BlciBsZW5ndGhcbiAgICB0aGlzLl9lcnJvcihuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgcHJvcGVyIGxlbmd0aCBpbiBzeW5jaHJvbm91cyB3YXkuJykpO1xuICB9XG5cbiAgcmV0dXJuIGtub3duTGVuZ3RoO1xufTtcblxuLy8gUHVibGljIEFQSSB0byBjaGVjayBpZiBsZW5ndGggb2YgYWRkZWQgdmFsdWVzIGlzIGtub3duXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZm9ybS1kYXRhL2Zvcm0tZGF0YS9pc3N1ZXMvMTk2XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZm9ybS1kYXRhL2Zvcm0tZGF0YS9pc3N1ZXMvMjYyXG5Gb3JtRGF0YS5wcm90b3R5cGUuaGFzS25vd25MZW5ndGggPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhhc0tub3duTGVuZ3RoID0gdHJ1ZTtcblxuICBpZiAodGhpcy5fdmFsdWVzVG9NZWFzdXJlLmxlbmd0aCkge1xuICAgIGhhc0tub3duTGVuZ3RoID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaGFzS25vd25MZW5ndGg7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oY2IpIHtcbiAgdmFyIGtub3duTGVuZ3RoID0gdGhpcy5fb3ZlcmhlYWRMZW5ndGggKyB0aGlzLl92YWx1ZUxlbmd0aDtcblxuICBpZiAodGhpcy5fc3RyZWFtcy5sZW5ndGgpIHtcbiAgICBrbm93bkxlbmd0aCArPSB0aGlzLl9sYXN0Qm91bmRhcnkoKS5sZW5ndGg7XG4gIH1cblxuICBpZiAoIXRoaXMuX3ZhbHVlc1RvTWVhc3VyZS5sZW5ndGgpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNiLmJpbmQodGhpcywgbnVsbCwga25vd25MZW5ndGgpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhc3luY2tpdC5wYXJhbGxlbCh0aGlzLl92YWx1ZXNUb01lYXN1cmUsIHRoaXMuX2xlbmd0aFJldHJpZXZlciwgZnVuY3Rpb24oZXJyLCB2YWx1ZXMpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjYihlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGxlbmd0aCkge1xuICAgICAga25vd25MZW5ndGggKz0gbGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgY2IobnVsbCwga25vd25MZW5ndGgpO1xuICB9KTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5zdWJtaXQgPSBmdW5jdGlvbihwYXJhbXMsIGNiKSB7XG4gIHZhciByZXF1ZXN0XG4gICAgLCBvcHRpb25zXG4gICAgLCBkZWZhdWx0cyA9IHttZXRob2Q6ICdwb3N0J31cbiAgICA7XG5cbiAgLy8gcGFyc2UgcHJvdmlkZWQgdXJsIGlmIGl0J3Mgc3RyaW5nXG4gIC8vIG9yIHRyZWF0IGl0IGFzIG9wdGlvbnMgb2JqZWN0XG4gIGlmICh0eXBlb2YgcGFyYW1zID09ICdzdHJpbmcnKSB7XG5cbiAgICBwYXJhbXMgPSBwYXJzZVVybChwYXJhbXMpO1xuICAgIG9wdGlvbnMgPSBwb3B1bGF0ZSh7XG4gICAgICBwb3J0OiBwYXJhbXMucG9ydCxcbiAgICAgIHBhdGg6IHBhcmFtcy5wYXRobmFtZSxcbiAgICAgIGhvc3Q6IHBhcmFtcy5ob3N0bmFtZSxcbiAgICAgIHByb3RvY29sOiBwYXJhbXMucHJvdG9jb2xcbiAgICB9LCBkZWZhdWx0cyk7XG5cbiAgLy8gdXNlIGN1c3RvbSBwYXJhbXNcbiAgfSBlbHNlIHtcblxuICAgIG9wdGlvbnMgPSBwb3B1bGF0ZShwYXJhbXMsIGRlZmF1bHRzKTtcbiAgICAvLyBpZiBubyBwb3J0IHByb3ZpZGVkIHVzZSBkZWZhdWx0IG9uZVxuICAgIGlmICghb3B0aW9ucy5wb3J0KSB7XG4gICAgICBvcHRpb25zLnBvcnQgPSBvcHRpb25zLnByb3RvY29sID09ICdodHRwczonID8gNDQzIDogODA7XG4gICAgfVxuICB9XG5cbiAgLy8gcHV0IHRoYXQgZ29vZCBjb2RlIGluIGdldEhlYWRlcnMgdG8gc29tZSB1c2VcbiAgb3B0aW9ucy5oZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKHBhcmFtcy5oZWFkZXJzKTtcblxuICAvLyBodHRwcyBpZiBzcGVjaWZpZWQsIGZhbGxiYWNrIHRvIGh0dHAgaW4gYW55IG90aGVyIGNhc2VcbiAgaWYgKG9wdGlvbnMucHJvdG9jb2wgPT0gJ2h0dHBzOicpIHtcbiAgICByZXF1ZXN0ID0gaHR0cHMucmVxdWVzdChvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICByZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0KG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gZ2V0IGNvbnRlbnQgbGVuZ3RoIGFuZCBmaXJlIGF3YXlcbiAgdGhpcy5nZXRMZW5ndGgoZnVuY3Rpb24oZXJyLCBsZW5ndGgpIHtcbiAgICBpZiAoZXJyICYmIGVyciAhPT0gJ1Vua25vd24gc3RyZWFtJykge1xuICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhZGQgY29udGVudCBsZW5ndGhcbiAgICBpZiAobGVuZ3RoKSB7XG4gICAgICByZXF1ZXN0LnNldEhlYWRlcignQ29udGVudC1MZW5ndGgnLCBsZW5ndGgpO1xuICAgIH1cblxuICAgIHRoaXMucGlwZShyZXF1ZXN0KTtcbiAgICBpZiAoY2IpIHtcbiAgICAgIHZhciBvblJlc3BvbnNlO1xuXG4gICAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbiAoZXJyb3IsIHJlc3BvbmNlKSB7XG4gICAgICAgIHJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgY2FsbGJhY2spO1xuICAgICAgICByZXF1ZXN0LnJlbW92ZUxpc3RlbmVyKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpO1xuXG4gICAgICAgIHJldHVybiBjYi5jYWxsKHRoaXMsIGVycm9yLCByZXNwb25jZSk7XG4gICAgICB9O1xuXG4gICAgICBvblJlc3BvbnNlID0gY2FsbGJhY2suYmluZCh0aGlzLCBudWxsKTtcblxuICAgICAgcmVxdWVzdC5vbignZXJyb3InLCBjYWxsYmFjayk7XG4gICAgICByZXF1ZXN0Lm9uKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpO1xuICAgIH1cbiAgfS5iaW5kKHRoaXMpKTtcblxuICByZXR1cm4gcmVxdWVzdDtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgaWYgKCF0aGlzLmVycm9yKSB7XG4gICAgdGhpcy5lcnJvciA9IGVycjtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gIH1cbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdbb2JqZWN0IEZvcm1EYXRhXSc7XG59O1xuIiwiLy8gcG9wdWxhdGVzIG1pc3NpbmcgdmFsdWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGRzdCwgc3JjKSB7XG5cbiAgT2JqZWN0LmtleXMoc3JjKS5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApXG4gIHtcbiAgICBkc3RbcHJvcF0gPSBkc3RbcHJvcF0gfHwgc3JjW3Byb3BdO1xuICB9KTtcblxuICByZXR1cm4gZHN0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gKGZsYWcsIGFyZ3YpID0+IHtcblx0YXJndiA9IGFyZ3YgfHwgcHJvY2Vzcy5hcmd2O1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvcyA9IGFyZ3YuaW5kZXhPZihwcmVmaXggKyBmbGFnKTtcblx0Y29uc3QgdGVybWluYXRvclBvcyA9IGFyZ3YuaW5kZXhPZignLS0nKTtcblx0cmV0dXJuIHBvcyAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3MgPT09IC0xID8gdHJ1ZSA6IHBvcyA8IHRlcm1pbmF0b3JQb3MpO1xufTtcbiIsInZhciBqc29uX3N0cmluZ2lmeSA9IHJlcXVpcmUoJy4vbGliL3N0cmluZ2lmeS5qcycpLnN0cmluZ2lmeTtcbnZhciBqc29uX3BhcnNlICAgICA9IHJlcXVpcmUoJy4vbGliL3BhcnNlLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiAge1xuICAgICAgICBwYXJzZToganNvbl9wYXJzZShvcHRpb25zKSxcbiAgICAgICAgc3RyaW5naWZ5OiBqc29uX3N0cmluZ2lmeVxuICAgIH1cbn07XG4vL2NyZWF0ZSB0aGUgZGVmYXVsdCBtZXRob2QgbWVtYmVycyB3aXRoIG5vIG9wdGlvbnMgYXBwbGllZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbm1vZHVsZS5leHBvcnRzLnBhcnNlID0ganNvbl9wYXJzZSgpO1xubW9kdWxlLmV4cG9ydHMuc3RyaW5naWZ5ID0ganNvbl9zdHJpbmdpZnk7XG4iLCJ2YXIgQmlnTnVtYmVyID0gbnVsbDtcblxuLy8gcmVnZXhweHMgZXh0cmFjdGVkIGZyb21cbi8vIChjKSBCU0QtMy1DbGF1c2Vcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYXN0aWZ5L3NlY3VyZS1qc29uLXBhcnNlL2dyYXBocy9jb250cmlidXRvcnMgYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXBpanMvYm91cm5lL2dyYXBocy9jb250cmlidXRvcnNcblxuY29uc3Qgc3VzcGVjdFByb3RvUnggPSAvKD86X3xcXFxcdTAwNVtGZl0pKD86X3xcXFxcdTAwNVtGZl0pKD86cHxcXFxcdTAwNzApKD86cnxcXFxcdTAwNzIpKD86b3xcXFxcdTAwNltGZl0pKD86dHxcXFxcdTAwNzQpKD86b3xcXFxcdTAwNltGZl0pKD86X3xcXFxcdTAwNVtGZl0pKD86X3xcXFxcdTAwNVtGZl0pLztcbmNvbnN0IHN1c3BlY3RDb25zdHJ1Y3RvclJ4ID0gLyg/OmN8XFxcXHUwMDYzKSg/Om98XFxcXHUwMDZbRmZdKSg/Om58XFxcXHUwMDZbRWVdKSg/OnN8XFxcXHUwMDczKSg/OnR8XFxcXHUwMDc0KSg/OnJ8XFxcXHUwMDcyKSg/OnV8XFxcXHUwMDc1KSg/OmN8XFxcXHUwMDYzKSg/OnR8XFxcXHUwMDc0KSg/Om98XFxcXHUwMDZbRmZdKSg/OnJ8XFxcXHUwMDcyKS87XG5cbi8qXG4gICAganNvbl9wYXJzZS5qc1xuICAgIDIwMTItMDYtMjBcblxuICAgIFB1YmxpYyBEb21haW4uXG5cbiAgICBOTyBXQVJSQU5UWSBFWFBSRVNTRUQgT1IgSU1QTElFRC4gVVNFIEFUIFlPVVIgT1dOIFJJU0suXG5cbiAgICBUaGlzIGZpbGUgY3JlYXRlcyBhIGpzb25fcGFyc2UgZnVuY3Rpb24uXG4gICAgRHVyaW5nIGNyZWF0ZSB5b3UgY2FuIChvcHRpb25hbGx5KSBzcGVjaWZ5IHNvbWUgYmVoYXZpb3VyYWwgc3dpdGNoZXNcblxuICAgICAgICByZXF1aXJlKCdqc29uLWJpZ2ludCcpKG9wdGlvbnMpXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCBvcHRpb25zIHBhcmFtZXRlciBob2xkcyBzd2l0Y2hlcyB0aGF0IGRyaXZlIGNlcnRhaW5cbiAgICAgICAgICAgIGFzcGVjdHMgb2YgdGhlIHBhcnNpbmcgcHJvY2VzczpcbiAgICAgICAgICAgICogb3B0aW9ucy5zdHJpY3QgPSB0cnVlIHdpbGwgd2FybiBhYm91dCBkdXBsaWNhdGUta2V5IHVzYWdlIGluIHRoZSBqc29uLlxuICAgICAgICAgICAgICBUaGUgZGVmYXVsdCAoc3RyaWN0ID0gZmFsc2UpIHdpbGwgc2lsZW50bHkgaWdub3JlIHRob3NlIGFuZCBvdmVyd3JpdGVcbiAgICAgICAgICAgICAgdmFsdWVzIGZvciBrZXlzIHRoYXQgYXJlIGluIGR1cGxpY2F0ZSB1c2UuXG5cbiAgICBUaGUgcmVzdWx0aW5nIGZ1bmN0aW9uIGZvbGxvd3MgdGhpcyBzaWduYXR1cmU6XG4gICAgICAgIGpzb25fcGFyc2UodGV4dCwgcmV2aXZlcilcbiAgICAgICAgICAgIFRoaXMgbWV0aG9kIHBhcnNlcyBhIEpTT04gdGV4dCB0byBwcm9kdWNlIGFuIG9iamVjdCBvciBhcnJheS5cbiAgICAgICAgICAgIEl0IGNhbiB0aHJvdyBhIFN5bnRheEVycm9yIGV4Y2VwdGlvbi5cblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHJldml2ZXIgcGFyYW1ldGVyIGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gZmlsdGVyIGFuZFxuICAgICAgICAgICAgdHJhbnNmb3JtIHRoZSByZXN1bHRzLiBJdCByZWNlaXZlcyBlYWNoIG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMsXG4gICAgICAgICAgICBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHZhbHVlLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB3aGF0IGl0IHJlY2VpdmVkLCB0aGVuIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IG1vZGlmaWVkLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB1bmRlZmluZWQgdGhlbiB0aGUgbWVtYmVyIGlzIGRlbGV0ZWQuXG5cbiAgICAgICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIHRoZSB0ZXh0LiBWYWx1ZXMgdGhhdCBsb29rIGxpa2UgSVNPIGRhdGUgc3RyaW5ncyB3aWxsXG4gICAgICAgICAgICAvLyBiZSBjb252ZXJ0ZWQgdG8gRGF0ZSBvYmplY3RzLlxuXG4gICAgICAgICAgICBteURhdGEgPSBqc29uX3BhcnNlKHRleHQsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGE7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgYSA9XG4vXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0oPzpcXC5cXGQqKT8pWiQvLmV4ZWModmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKCthWzFdLCArYVsyXSAtIDEsICthWzNdLCArYVs0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArYVs1XSwgK2FbNl0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgIFRoaXMgaXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIFlvdSBhcmUgZnJlZSB0byBjb3B5LCBtb2RpZnksIG9yXG4gICAgcmVkaXN0cmlidXRlLlxuXG4gICAgVGhpcyBjb2RlIHNob3VsZCBiZSBtaW5pZmllZCBiZWZvcmUgZGVwbG95bWVudC5cbiAgICBTZWUgaHR0cDovL2phdmFzY3JpcHQuY3JvY2tmb3JkLmNvbS9qc21pbi5odG1sXG5cbiAgICBVU0UgWU9VUiBPV04gQ09QWS4gSVQgSVMgRVhUUkVNRUxZIFVOV0lTRSBUTyBMT0FEIENPREUgRlJPTSBTRVJWRVJTIFlPVSBET1xuICAgIE5PVCBDT05UUk9MLlxuKi9cblxuLyptZW1iZXJzIFwiXCIsIFwiXFxcIlwiLCBcIlxcL1wiLCBcIlxcXFxcIiwgYXQsIGIsIGNhbGwsIGNoYXJBdCwgZiwgZnJvbUNoYXJDb2RlLFxuICAgIGhhc093blByb3BlcnR5LCBtZXNzYWdlLCBuLCBuYW1lLCBwcm90b3R5cGUsIHB1c2gsIHIsIHQsIHRleHRcbiovXG5cbnZhciBqc29uX3BhcnNlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIFRoaXMgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBwYXJzZSBhIEpTT04gdGV4dCwgcHJvZHVjaW5nIGEgSmF2YVNjcmlwdFxuICAvLyBkYXRhIHN0cnVjdHVyZS4gSXQgaXMgYSBzaW1wbGUsIHJlY3Vyc2l2ZSBkZXNjZW50IHBhcnNlci4gSXQgZG9lcyBub3QgdXNlXG4gIC8vIGV2YWwgb3IgcmVndWxhciBleHByZXNzaW9ucywgc28gaXQgY2FuIGJlIHVzZWQgYXMgYSBtb2RlbCBmb3IgaW1wbGVtZW50aW5nXG4gIC8vIGEgSlNPTiBwYXJzZXIgaW4gb3RoZXIgbGFuZ3VhZ2VzLlxuXG4gIC8vIFdlIGFyZSBkZWZpbmluZyB0aGUgZnVuY3Rpb24gaW5zaWRlIG9mIGFub3RoZXIgZnVuY3Rpb24gdG8gYXZvaWQgY3JlYXRpbmdcbiAgLy8gZ2xvYmFsIHZhcmlhYmxlcy5cblxuICAvLyBEZWZhdWx0IG9wdGlvbnMgb25lIGNhbiBvdmVycmlkZSBieSBwYXNzaW5nIG9wdGlvbnMgdG8gdGhlIHBhcnNlKClcbiAgdmFyIF9vcHRpb25zID0ge1xuICAgIHN0cmljdDogZmFsc2UsIC8vIG5vdCBiZWluZyBzdHJpY3QgbWVhbnMgZG8gbm90IGdlbmVyYXRlIHN5bnRheCBlcnJvcnMgZm9yIFwiZHVwbGljYXRlIGtleVwiXG4gICAgc3RvcmVBc1N0cmluZzogZmFsc2UsIC8vIHRvZ2dsZXMgd2hldGhlciB0aGUgdmFsdWVzIHNob3VsZCBiZSBzdG9yZWQgYXMgQmlnTnVtYmVyIChkZWZhdWx0KSBvciBhIHN0cmluZ1xuICAgIGFsd2F5c1BhcnNlQXNCaWc6IGZhbHNlLCAvLyB0b2dnbGVzIHdoZXRoZXIgYWxsIG51bWJlcnMgc2hvdWxkIGJlIEJpZ1xuICAgIHVzZU5hdGl2ZUJpZ0ludDogZmFsc2UsIC8vIHRvZ2dsZXMgd2hldGhlciB0byB1c2UgbmF0aXZlIEJpZ0ludCBpbnN0ZWFkIG9mIGJpZ251bWJlci5qc1xuICAgIHByb3RvQWN0aW9uOiAnZXJyb3InLFxuICAgIGNvbnN0cnVjdG9yQWN0aW9uOiAnZXJyb3InLFxuICB9O1xuXG4gIC8vIElmIHRoZXJlIGFyZSBvcHRpb25zLCB0aGVuIHVzZSB0aGVtIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IF9vcHRpb25zXG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucyAhPT0gbnVsbCkge1xuICAgIGlmIChvcHRpb25zLnN0cmljdCA9PT0gdHJ1ZSkge1xuICAgICAgX29wdGlvbnMuc3RyaWN0ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc3RvcmVBc1N0cmluZyA9PT0gdHJ1ZSkge1xuICAgICAgX29wdGlvbnMuc3RvcmVBc1N0cmluZyA9IHRydWU7XG4gICAgfVxuICAgIF9vcHRpb25zLmFsd2F5c1BhcnNlQXNCaWcgPVxuICAgICAgb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnID09PSB0cnVlID8gb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnIDogZmFsc2U7XG4gICAgX29wdGlvbnMudXNlTmF0aXZlQmlnSW50ID1cbiAgICAgIG9wdGlvbnMudXNlTmF0aXZlQmlnSW50ID09PSB0cnVlID8gb3B0aW9ucy51c2VOYXRpdmVCaWdJbnQgOiBmYWxzZTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2Vycm9yJyB8fFxuICAgICAgICBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnaWdub3JlJyB8fFxuICAgICAgICBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAncHJlc2VydmUnXG4gICAgICApIHtcbiAgICAgICAgX29wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPSBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbmNvcnJlY3QgdmFsdWUgZm9yIGNvbnN0cnVjdG9yQWN0aW9uIG9wdGlvbiwgbXVzdCBiZSBcImVycm9yXCIsIFwiaWdub3JlXCIgb3IgdW5kZWZpbmVkIGJ1dCBwYXNzZWQgJHtvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9ufWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucHJvdG9BY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdlcnJvcicgfHxcbiAgICAgICAgb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2lnbm9yZScgfHxcbiAgICAgICAgb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ3ByZXNlcnZlJ1xuICAgICAgKSB7XG4gICAgICAgIF9vcHRpb25zLnByb3RvQWN0aW9uID0gb3B0aW9ucy5wcm90b0FjdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW5jb3JyZWN0IHZhbHVlIGZvciBwcm90b0FjdGlvbiBvcHRpb24sIG11c3QgYmUgXCJlcnJvclwiLCBcImlnbm9yZVwiIG9yIHVuZGVmaW5lZCBidXQgcGFzc2VkICR7b3B0aW9ucy5wcm90b0FjdGlvbn1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGF0LCAvLyBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgY2gsIC8vIFRoZSBjdXJyZW50IGNoYXJhY3RlclxuICAgIGVzY2FwZWUgPSB7XG4gICAgICAnXCInOiAnXCInLFxuICAgICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgICAnLyc6ICcvJyxcbiAgICAgIGI6ICdcXGInLFxuICAgICAgZjogJ1xcZicsXG4gICAgICBuOiAnXFxuJyxcbiAgICAgIHI6ICdcXHInLFxuICAgICAgdDogJ1xcdCcsXG4gICAgfSxcbiAgICB0ZXh0LFxuICAgIGVycm9yID0gZnVuY3Rpb24gKG0pIHtcbiAgICAgIC8vIENhbGwgZXJyb3Igd2hlbiBzb21ldGhpbmcgaXMgd3JvbmcuXG5cbiAgICAgIHRocm93IHtcbiAgICAgICAgbmFtZTogJ1N5bnRheEVycm9yJyxcbiAgICAgICAgbWVzc2FnZTogbSxcbiAgICAgICAgYXQ6IGF0LFxuICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgfTtcbiAgICB9LFxuICAgIG5leHQgPSBmdW5jdGlvbiAoYykge1xuICAgICAgLy8gSWYgYSBjIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgdmVyaWZ5IHRoYXQgaXQgbWF0Y2hlcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuXG5cbiAgICAgIGlmIChjICYmIGMgIT09IGNoKSB7XG4gICAgICAgIGVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgYyArIFwiJyBpbnN0ZWFkIG9mICdcIiArIGNoICsgXCInXCIpO1xuICAgICAgfVxuXG4gICAgICAvLyBHZXQgdGhlIG5leHQgY2hhcmFjdGVyLiBXaGVuIHRoZXJlIGFyZSBubyBtb3JlIGNoYXJhY3RlcnMsXG4gICAgICAvLyByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgICAgY2ggPSB0ZXh0LmNoYXJBdChhdCk7XG4gICAgICBhdCArPSAxO1xuICAgICAgcmV0dXJuIGNoO1xuICAgIH0sXG4gICAgbnVtYmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYSBudW1iZXIgdmFsdWUuXG5cbiAgICAgIHZhciBudW1iZXIsXG4gICAgICAgIHN0cmluZyA9ICcnO1xuXG4gICAgICBpZiAoY2ggPT09ICctJykge1xuICAgICAgICBzdHJpbmcgPSAnLSc7XG4gICAgICAgIG5leHQoJy0nKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgICAgaWYgKGNoID09PSAnLicpIHtcbiAgICAgICAgc3RyaW5nICs9ICcuJztcbiAgICAgICAgd2hpbGUgKG5leHQoKSAmJiBjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7XG4gICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG51bWJlciA9ICtzdHJpbmc7XG4gICAgICBpZiAoIWlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgICAgZXJyb3IoJ0JhZCBudW1iZXInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChCaWdOdW1iZXIgPT0gbnVsbCkgQmlnTnVtYmVyID0gcmVxdWlyZSgnYmlnbnVtYmVyLmpzJyk7XG4gICAgICAgIC8vaWYgKG51bWJlciA+IDkwMDcxOTkyNTQ3NDA5OTIgfHwgbnVtYmVyIDwgLTkwMDcxOTkyNTQ3NDA5OTIpXG4gICAgICAgIC8vIEJpZ251bWJlciBoYXMgc3RyaWN0ZXIgY2hlY2s6IGV2ZXJ5dGhpbmcgd2l0aCBsZW5ndGggPiAxNSBkaWdpdHMgZGlzYWxsb3dlZFxuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDE1KVxuICAgICAgICAgIHJldHVybiBfb3B0aW9ucy5zdG9yZUFzU3RyaW5nXG4gICAgICAgICAgICA/IHN0cmluZ1xuICAgICAgICAgICAgOiBfb3B0aW9ucy51c2VOYXRpdmVCaWdJbnRcbiAgICAgICAgICAgID8gQmlnSW50KHN0cmluZylcbiAgICAgICAgICAgIDogbmV3IEJpZ051bWJlcihzdHJpbmcpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuICFfb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnXG4gICAgICAgICAgICA/IG51bWJlclxuICAgICAgICAgICAgOiBfb3B0aW9ucy51c2VOYXRpdmVCaWdJbnRcbiAgICAgICAgICAgID8gQmlnSW50KG51bWJlcilcbiAgICAgICAgICAgIDogbmV3IEJpZ051bWJlcihudW1iZXIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYSBzdHJpbmcgdmFsdWUuXG5cbiAgICAgIHZhciBoZXgsXG4gICAgICAgIGksXG4gICAgICAgIHN0cmluZyA9ICcnLFxuICAgICAgICB1ZmZmZjtcblxuICAgICAgLy8gV2hlbiBwYXJzaW5nIGZvciBzdHJpbmcgdmFsdWVzLCB3ZSBtdXN0IGxvb2sgZm9yIFwiIGFuZCBcXCBjaGFyYWN0ZXJzLlxuXG4gICAgICBpZiAoY2ggPT09ICdcIicpIHtcbiAgICAgICAgdmFyIHN0YXJ0QXQgPSBhdDtcbiAgICAgICAgd2hpbGUgKG5leHQoKSkge1xuICAgICAgICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgICAgICAgaWYgKGF0IC0gMSA+IHN0YXJ0QXQpIHN0cmluZyArPSB0ZXh0LnN1YnN0cmluZyhzdGFydEF0LCBhdCAtIDEpO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIGlmIChhdCAtIDEgPiBzdGFydEF0KSBzdHJpbmcgKz0gdGV4dC5zdWJzdHJpbmcoc3RhcnRBdCwgYXQgLSAxKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJ3UnKSB7XG4gICAgICAgICAgICAgIHVmZmZmID0gMDtcbiAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGhleCA9IHBhcnNlSW50KG5leHQoKSwgMTYpO1xuICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoaGV4KSkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVmZmZmID0gdWZmZmYgKiAxNiArIGhleDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1ZmZmZik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlc2NhcGVlW2NoXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgc3RyaW5nICs9IGVzY2FwZWVbY2hdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFydEF0ID0gYXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIHN0cmluZycpO1xuICAgIH0sXG4gICAgd2hpdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTa2lwIHdoaXRlc3BhY2UuXG5cbiAgICAgIHdoaWxlIChjaCAmJiBjaCA8PSAnICcpIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgd29yZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHRydWUsIGZhbHNlLCBvciBudWxsLlxuXG4gICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgIG5leHQoJ3QnKTtcbiAgICAgICAgICBuZXh0KCdyJyk7XG4gICAgICAgICAgbmV4dCgndScpO1xuICAgICAgICAgIG5leHQoJ2UnKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgbmV4dCgnZicpO1xuICAgICAgICAgIG5leHQoJ2EnKTtcbiAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgbmV4dCgncycpO1xuICAgICAgICAgIG5leHQoJ2UnKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNhc2UgJ24nOlxuICAgICAgICAgIG5leHQoJ24nKTtcbiAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGVycm9yKFwiVW5leHBlY3RlZCAnXCIgKyBjaCArIFwiJ1wiKTtcbiAgICB9LFxuICAgIHZhbHVlLCAvLyBQbGFjZSBob2xkZXIgZm9yIHRoZSB2YWx1ZSBmdW5jdGlvbi5cbiAgICBhcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFBhcnNlIGFuIGFycmF5IHZhbHVlLlxuXG4gICAgICB2YXIgYXJyYXkgPSBbXTtcblxuICAgICAgaWYgKGNoID09PSAnWycpIHtcbiAgICAgICAgbmV4dCgnWycpO1xuICAgICAgICB3aGl0ZSgpO1xuICAgICAgICBpZiAoY2ggPT09ICddJykge1xuICAgICAgICAgIG5leHQoJ10nKTtcbiAgICAgICAgICByZXR1cm4gYXJyYXk7IC8vIGVtcHR5IGFycmF5XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAgYXJyYXkucHVzaCh2YWx1ZSgpKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgICAgICBuZXh0KCddJyk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIGFycmF5Jyk7XG4gICAgfSxcbiAgICBvYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhbiBvYmplY3QgdmFsdWUuXG5cbiAgICAgIHZhciBrZXksXG4gICAgICAgIG9iamVjdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIGlmIChjaCA9PT0gJ3snKSB7XG4gICAgICAgIG5leHQoJ3snKTtcbiAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICBuZXh0KCd9Jyk7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdDsgLy8gZW1wdHkgb2JqZWN0XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAga2V5ID0gc3RyaW5nKCk7XG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICBuZXh0KCc6Jyk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgX29wdGlvbnMuc3RyaWN0ID09PSB0cnVlICYmXG4gICAgICAgICAgICBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGVycm9yKCdEdXBsaWNhdGUga2V5IFwiJyArIGtleSArICdcIicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdXNwZWN0UHJvdG9SeC50ZXN0KGtleSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICBlcnJvcignT2JqZWN0IGNvbnRhaW5zIGZvcmJpZGRlbiBwcm90b3R5cGUgcHJvcGVydHknKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX29wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdpZ25vcmUnKSB7XG4gICAgICAgICAgICAgIHZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChzdXNwZWN0Q29uc3RydWN0b3JSeC50ZXN0KGtleSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICBlcnJvcignT2JqZWN0IGNvbnRhaW5zIGZvcmJpZGRlbiBjb25zdHJ1Y3RvciBwcm9wZXJ0eScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2lnbm9yZScpIHtcbiAgICAgICAgICAgICAgdmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIG9iamVjdCcpO1xuICAgIH07XG5cbiAgdmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gUGFyc2UgYSBKU09OIHZhbHVlLiBJdCBjb3VsZCBiZSBhbiBvYmplY3QsIGFuIGFycmF5LCBhIHN0cmluZywgYSBudW1iZXIsXG4gICAgLy8gb3IgYSB3b3JkLlxuXG4gICAgd2hpdGUoKTtcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICBjYXNlICd7JzpcbiAgICAgICAgcmV0dXJuIG9iamVjdCgpO1xuICAgICAgY2FzZSAnWyc6XG4gICAgICAgIHJldHVybiBhcnJheSgpO1xuICAgICAgY2FzZSAnXCInOlxuICAgICAgICByZXR1cm4gc3RyaW5nKCk7XG4gICAgICBjYXNlICctJzpcbiAgICAgICAgcmV0dXJuIG51bWJlcigpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGNoID49ICcwJyAmJiBjaCA8PSAnOScgPyBudW1iZXIoKSA6IHdvcmQoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBqc29uX3BhcnNlIGZ1bmN0aW9uLiBJdCB3aWxsIGhhdmUgYWNjZXNzIHRvIGFsbCBvZiB0aGUgYWJvdmVcbiAgLy8gZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMuXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UsIHJldml2ZXIpIHtcbiAgICB2YXIgcmVzdWx0O1xuXG4gICAgdGV4dCA9IHNvdXJjZSArICcnO1xuICAgIGF0ID0gMDtcbiAgICBjaCA9ICcgJztcbiAgICByZXN1bHQgPSB2YWx1ZSgpO1xuICAgIHdoaXRlKCk7XG4gICAgaWYgKGNoKSB7XG4gICAgICBlcnJvcignU3ludGF4IGVycm9yJyk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSByZXZpdmVyIGZ1bmN0aW9uLCB3ZSByZWN1cnNpdmVseSB3YWxrIHRoZSBuZXcgc3RydWN0dXJlLFxuICAgIC8vIHBhc3NpbmcgZWFjaCBuYW1lL3ZhbHVlIHBhaXIgdG8gdGhlIHJldml2ZXIgZnVuY3Rpb24gZm9yIHBvc3NpYmxlXG4gICAgLy8gdHJhbnNmb3JtYXRpb24sIHN0YXJ0aW5nIHdpdGggYSB0ZW1wb3Jhcnkgcm9vdCBvYmplY3QgdGhhdCBob2xkcyB0aGUgcmVzdWx0XG4gICAgLy8gaW4gYW4gZW1wdHkga2V5LiBJZiB0aGVyZSBpcyBub3QgYSByZXZpdmVyIGZ1bmN0aW9uLCB3ZSBzaW1wbHkgcmV0dXJuIHRoZVxuICAgIC8vIHJlc3VsdC5cblxuICAgIHJldHVybiB0eXBlb2YgcmV2aXZlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyAoZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkge1xuICAgICAgICAgIHZhciBrLFxuICAgICAgICAgICAgdixcbiAgICAgICAgICAgIHZhbHVlID0gaG9sZGVyW2tleV07XG4gICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTtcbiAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhbHVlW2tdID0gdjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVba107XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmV2aXZlci5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pKHsgJyc6IHJlc3VsdCB9LCAnJylcbiAgICAgIDogcmVzdWx0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBqc29uX3BhcnNlO1xuIiwidmFyIEJpZ051bWJlciA9IHJlcXVpcmUoJ2JpZ251bWJlci5qcycpO1xuXG4vKlxuICAgIGpzb24yLmpzXG4gICAgMjAxMy0wNS0yNlxuXG4gICAgUHVibGljIERvbWFpbi5cblxuICAgIE5PIFdBUlJBTlRZIEVYUFJFU1NFRCBPUiBJTVBMSUVELiBVU0UgQVQgWU9VUiBPV04gUklTSy5cblxuICAgIFNlZSBodHRwOi8vd3d3LkpTT04ub3JnL2pzLmh0bWxcblxuXG4gICAgVGhpcyBjb2RlIHNob3VsZCBiZSBtaW5pZmllZCBiZWZvcmUgZGVwbG95bWVudC5cbiAgICBTZWUgaHR0cDovL2phdmFzY3JpcHQuY3JvY2tmb3JkLmNvbS9qc21pbi5odG1sXG5cbiAgICBVU0UgWU9VUiBPV04gQ09QWS4gSVQgSVMgRVhUUkVNRUxZIFVOV0lTRSBUTyBMT0FEIENPREUgRlJPTSBTRVJWRVJTIFlPVSBET1xuICAgIE5PVCBDT05UUk9MLlxuXG5cbiAgICBUaGlzIGZpbGUgY3JlYXRlcyBhIGdsb2JhbCBKU09OIG9iamVjdCBjb250YWluaW5nIHR3byBtZXRob2RzOiBzdHJpbmdpZnlcbiAgICBhbmQgcGFyc2UuXG5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSlcbiAgICAgICAgICAgIHZhbHVlICAgICAgIGFueSBKYXZhU2NyaXB0IHZhbHVlLCB1c3VhbGx5IGFuIG9iamVjdCBvciBhcnJheS5cblxuICAgICAgICAgICAgcmVwbGFjZXIgICAgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZGV0ZXJtaW5lcyBob3cgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgYXJlIHN0cmluZ2lmaWVkIGZvciBvYmplY3RzLiBJdCBjYW4gYmUgYVxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cblxuICAgICAgICAgICAgc3BhY2UgICAgICAgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgc3BlY2lmaWVzIHRoZSBpbmRlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgb2YgbmVzdGVkIHN0cnVjdHVyZXMuIElmIGl0IGlzIG9taXR0ZWQsIHRoZSB0ZXh0IHdpbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlIHBhY2tlZCB3aXRob3V0IGV4dHJhIHdoaXRlc3BhY2UuIElmIGl0IGlzIGEgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXQgd2lsbCBzcGVjaWZ5IHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRvIGluZGVudCBhdCBlYWNoXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC4gSWYgaXQgaXMgYSBzdHJpbmcgKHN1Y2ggYXMgJ1xcdCcgb3IgJyZuYnNwOycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXQgY29udGFpbnMgdGhlIGNoYXJhY3RlcnMgdXNlZCB0byBpbmRlbnQgYXQgZWFjaCBsZXZlbC5cblxuICAgICAgICAgICAgVGhpcyBtZXRob2QgcHJvZHVjZXMgYSBKU09OIHRleHQgZnJvbSBhIEphdmFTY3JpcHQgdmFsdWUuXG5cbiAgICAgICAgICAgIFdoZW4gYW4gb2JqZWN0IHZhbHVlIGlzIGZvdW5kLCBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zIGEgdG9KU09OXG4gICAgICAgICAgICBtZXRob2QsIGl0cyB0b0pTT04gbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGFuZCB0aGUgcmVzdWx0IHdpbGwgYmVcbiAgICAgICAgICAgIHN0cmluZ2lmaWVkLiBBIHRvSlNPTiBtZXRob2QgZG9lcyBub3Qgc2VyaWFsaXplOiBpdCByZXR1cm5zIHRoZVxuICAgICAgICAgICAgdmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhlIG5hbWUvdmFsdWUgcGFpciB0aGF0IHNob3VsZCBiZSBzZXJpYWxpemVkLFxuICAgICAgICAgICAgb3IgdW5kZWZpbmVkIGlmIG5vdGhpbmcgc2hvdWxkIGJlIHNlcmlhbGl6ZWQuIFRoZSB0b0pTT04gbWV0aG9kXG4gICAgICAgICAgICB3aWxsIGJlIHBhc3NlZCB0aGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUsIGFuZCB0aGlzIHdpbGwgYmVcbiAgICAgICAgICAgIGJvdW5kIHRvIHRoZSB2YWx1ZVxuXG4gICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyB3b3VsZCBzZXJpYWxpemUgRGF0ZXMgYXMgSVNPIHN0cmluZ3MuXG5cbiAgICAgICAgICAgICAgICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGYobikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IGludGVnZXJzIHRvIGhhdmUgYXQgbGVhc3QgdHdvIGRpZ2l0cy5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuIDogbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFVUQ0Z1bGxZZWFyKCkgICArICctJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0RhdGUoKSkgICAgICArICdUJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0hvdXJzKCkpICAgICArICc6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01pbnV0ZXMoKSkgICArICc6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ1NlY29uZHMoKSkgICArICdaJztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWwgcmVwbGFjZXIgbWV0aG9kLiBJdCB3aWxsIGJlIHBhc3NlZCB0aGVcbiAgICAgICAgICAgIGtleSBhbmQgdmFsdWUgb2YgZWFjaCBtZW1iZXIsIHdpdGggdGhpcyBib3VuZCB0byB0aGUgY29udGFpbmluZ1xuICAgICAgICAgICAgb2JqZWN0LiBUaGUgdmFsdWUgdGhhdCBpcyByZXR1cm5lZCBmcm9tIHlvdXIgbWV0aG9kIHdpbGwgYmVcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQuIElmIHlvdXIgbWV0aG9kIHJldHVybnMgdW5kZWZpbmVkLCB0aGVuIHRoZSBtZW1iZXIgd2lsbFxuICAgICAgICAgICAgYmUgZXhjbHVkZWQgZnJvbSB0aGUgc2VyaWFsaXphdGlvbi5cblxuICAgICAgICAgICAgSWYgdGhlIHJlcGxhY2VyIHBhcmFtZXRlciBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLCB0aGVuIGl0IHdpbGwgYmVcbiAgICAgICAgICAgIHVzZWQgdG8gc2VsZWN0IHRoZSBtZW1iZXJzIHRvIGJlIHNlcmlhbGl6ZWQuIEl0IGZpbHRlcnMgdGhlIHJlc3VsdHNcbiAgICAgICAgICAgIHN1Y2ggdGhhdCBvbmx5IG1lbWJlcnMgd2l0aCBrZXlzIGxpc3RlZCBpbiB0aGUgcmVwbGFjZXIgYXJyYXkgYXJlXG4gICAgICAgICAgICBzdHJpbmdpZmllZC5cblxuICAgICAgICAgICAgVmFsdWVzIHRoYXQgZG8gbm90IGhhdmUgSlNPTiByZXByZXNlbnRhdGlvbnMsIHN1Y2ggYXMgdW5kZWZpbmVkIG9yXG4gICAgICAgICAgICBmdW5jdGlvbnMsIHdpbGwgbm90IGJlIHNlcmlhbGl6ZWQuIFN1Y2ggdmFsdWVzIGluIG9iamVjdHMgd2lsbCBiZVxuICAgICAgICAgICAgZHJvcHBlZDsgaW4gYXJyYXlzIHRoZXkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIG51bGwuIFlvdSBjYW4gdXNlXG4gICAgICAgICAgICBhIHJlcGxhY2VyIGZ1bmN0aW9uIHRvIHJlcGxhY2UgdGhvc2Ugd2l0aCBKU09OIHZhbHVlcy5cbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHVuZGVmaW5lZCkgcmV0dXJucyB1bmRlZmluZWQuXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCBzcGFjZSBwYXJhbWV0ZXIgcHJvZHVjZXMgYSBzdHJpbmdpZmljYXRpb24gb2YgdGhlXG4gICAgICAgICAgICB2YWx1ZSB0aGF0IGlzIGZpbGxlZCB3aXRoIGxpbmUgYnJlYWtzIGFuZCBpbmRlbnRhdGlvbiB0byBtYWtlIGl0XG4gICAgICAgICAgICBlYXNpZXIgdG8gcmVhZC5cblxuICAgICAgICAgICAgSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG5vbi1lbXB0eSBzdHJpbmcsIHRoZW4gdGhhdCBzdHJpbmcgd2lsbFxuICAgICAgICAgICAgYmUgdXNlZCBmb3IgaW5kZW50YXRpb24uIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIHRoZW5cbiAgICAgICAgICAgIHRoZSBpbmRlbnRhdGlvbiB3aWxsIGJlIHRoYXQgbWFueSBzcGFjZXMuXG5cbiAgICAgICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShbJ2UnLCB7cGx1cmlidXM6ICd1bnVtJ31dKTtcbiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcImVcIix7XCJwbHVyaWJ1c1wiOlwidW51bVwifV0nXG5cblxuICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFsnZScsIHtwbHVyaWJ1czogJ3VudW0nfV0sIG51bGwsICdcXHQnKTtcbiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcXG5cXHRcImVcIixcXG5cXHR7XFxuXFx0XFx0XCJwbHVyaWJ1c1wiOiBcInVudW1cIlxcblxcdH1cXG5dJ1xuXG4gICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoW25ldyBEYXRlKCldLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2tleV0gaW5zdGFuY2VvZiBEYXRlID9cbiAgICAgICAgICAgICAgICAgICAgJ0RhdGUoJyArIHRoaXNba2V5XSArICcpJyA6IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyB0ZXh0IGlzICdbXCJEYXRlKC0tLWN1cnJlbnQgdGltZS0tLSlcIl0nXG5cblxuICAgICAgICBKU09OLnBhcnNlKHRleHQsIHJldml2ZXIpXG4gICAgICAgICAgICBUaGlzIG1ldGhvZCBwYXJzZXMgYSBKU09OIHRleHQgdG8gcHJvZHVjZSBhbiBvYmplY3Qgb3IgYXJyYXkuXG4gICAgICAgICAgICBJdCBjYW4gdGhyb3cgYSBTeW50YXhFcnJvciBleGNlcHRpb24uXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCByZXZpdmVyIHBhcmFtZXRlciBpcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIGZpbHRlciBhbmRcbiAgICAgICAgICAgIHRyYW5zZm9ybSB0aGUgcmVzdWx0cy4gSXQgcmVjZWl2ZXMgZWFjaCBvZiB0aGUga2V5cyBhbmQgdmFsdWVzLFxuICAgICAgICAgICAgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgd2hhdCBpdCByZWNlaXZlZCwgdGhlbiB0aGUgc3RydWN0dXJlIGlzIG5vdCBtb2RpZmllZC5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgdW5kZWZpbmVkIHRoZW4gdGhlIG1lbWJlciBpcyBkZWxldGVkLlxuXG4gICAgICAgICAgICBFeGFtcGxlOlxuXG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgdGV4dC4gVmFsdWVzIHRoYXQgbG9vayBsaWtlIElTTyBkYXRlIHN0cmluZ3Mgd2lsbFxuICAgICAgICAgICAgLy8gYmUgY29udmVydGVkIHRvIERhdGUgb2JqZWN0cy5cblxuICAgICAgICAgICAgbXlEYXRhID0gSlNPTi5wYXJzZSh0ZXh0LCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBhO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGEgPVxuL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KD86XFwuXFxkKik/KVokLy5leGVjKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQygrYVsxXSwgK2FbMl0gLSAxLCArYVszXSwgK2FbNF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgK2FbNV0sICthWzZdKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG15RGF0YSA9IEpTT04ucGFyc2UoJ1tcIkRhdGUoMDkvMDkvMjAwMSlcIl0nLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBkO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCA1KSA9PT0gJ0RhdGUoJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoLTEpID09PSAnKScpIHtcbiAgICAgICAgICAgICAgICAgICAgZCA9IG5ldyBEYXRlKHZhbHVlLnNsaWNlKDUsIC0xKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuXG4gICAgVGhpcyBpcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4gWW91IGFyZSBmcmVlIHRvIGNvcHksIG1vZGlmeSwgb3JcbiAgICByZWRpc3RyaWJ1dGUuXG4qL1xuXG4vKmpzbGludCBldmlsOiB0cnVlLCByZWdleHA6IHRydWUgKi9cblxuLyptZW1iZXJzIFwiXCIsIFwiXFxiXCIsIFwiXFx0XCIsIFwiXFxuXCIsIFwiXFxmXCIsIFwiXFxyXCIsIFwiXFxcIlwiLCBKU09OLCBcIlxcXFxcIiwgYXBwbHksXG4gICAgY2FsbCwgY2hhckNvZGVBdCwgZ2V0VVRDRGF0ZSwgZ2V0VVRDRnVsbFllYXIsIGdldFVUQ0hvdXJzLFxuICAgIGdldFVUQ01pbnV0ZXMsIGdldFVUQ01vbnRoLCBnZXRVVENTZWNvbmRzLCBoYXNPd25Qcm9wZXJ0eSwgam9pbixcbiAgICBsYXN0SW5kZXgsIGxlbmd0aCwgcGFyc2UsIHByb3RvdHlwZSwgcHVzaCwgcmVwbGFjZSwgc2xpY2UsIHN0cmluZ2lmeSxcbiAgICB0ZXN0LCB0b0pTT04sIHRvU3RyaW5nLCB2YWx1ZU9mXG4qL1xuXG5cbi8vIENyZWF0ZSBhIEpTT04gb2JqZWN0IG9ubHkgaWYgb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuIFdlIGNyZWF0ZSB0aGVcbi8vIG1ldGhvZHMgaW4gYSBjbG9zdXJlIHRvIGF2b2lkIGNyZWF0aW5nIGdsb2JhbCB2YXJpYWJsZXMuXG5cbnZhciBKU09OID0gbW9kdWxlLmV4cG9ydHM7XG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgZnVuY3Rpb24gZihuKSB7XG4gICAgICAgIC8vIEZvcm1hdCBpbnRlZ2VycyB0byBoYXZlIGF0IGxlYXN0IHR3byBkaWdpdHMuXG4gICAgICAgIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuIDogbjtcbiAgICB9XG5cbiAgICB2YXIgY3ggPSAvW1xcdTAwMDBcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxcbiAgICAgICAgZXNjYXBhYmxlID0gL1tcXFxcXFxcIlxceDAwLVxceDFmXFx4N2YtXFx4OWZcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxcbiAgICAgICAgZ2FwLFxuICAgICAgICBpbmRlbnQsXG4gICAgICAgIG1ldGEgPSB7ICAgIC8vIHRhYmxlIG9mIGNoYXJhY3RlciBzdWJzdGl0dXRpb25zXG4gICAgICAgICAgICAnXFxiJzogJ1xcXFxiJyxcbiAgICAgICAgICAgICdcXHQnOiAnXFxcXHQnLFxuICAgICAgICAgICAgJ1xcbic6ICdcXFxcbicsXG4gICAgICAgICAgICAnXFxmJzogJ1xcXFxmJyxcbiAgICAgICAgICAgICdcXHInOiAnXFxcXHInLFxuICAgICAgICAgICAgJ1wiJyA6ICdcXFxcXCInLFxuICAgICAgICAgICAgJ1xcXFwnOiAnXFxcXFxcXFwnXG4gICAgICAgIH0sXG4gICAgICAgIHJlcDtcblxuXG4gICAgZnVuY3Rpb24gcXVvdGUoc3RyaW5nKSB7XG5cbi8vIElmIHRoZSBzdHJpbmcgY29udGFpbnMgbm8gY29udHJvbCBjaGFyYWN0ZXJzLCBubyBxdW90ZSBjaGFyYWN0ZXJzLCBhbmQgbm9cbi8vIGJhY2tzbGFzaCBjaGFyYWN0ZXJzLCB0aGVuIHdlIGNhbiBzYWZlbHkgc2xhcCBzb21lIHF1b3RlcyBhcm91bmQgaXQuXG4vLyBPdGhlcndpc2Ugd2UgbXVzdCBhbHNvIHJlcGxhY2UgdGhlIG9mZmVuZGluZyBjaGFyYWN0ZXJzIHdpdGggc2FmZSBlc2NhcGVcbi8vIHNlcXVlbmNlcy5cblxuICAgICAgICBlc2NhcGFibGUubGFzdEluZGV4ID0gMDtcbiAgICAgICAgcmV0dXJuIGVzY2FwYWJsZS50ZXN0KHN0cmluZykgPyAnXCInICsgc3RyaW5nLnJlcGxhY2UoZXNjYXBhYmxlLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgdmFyIGMgPSBtZXRhW2FdO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gY1xuICAgICAgICAgICAgICAgIDogJ1xcXFx1JyArICgnMDAwMCcgKyBhLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG4gICAgICAgIH0pICsgJ1wiJyA6ICdcIicgKyBzdHJpbmcgKyAnXCInO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gc3RyKGtleSwgaG9sZGVyKSB7XG5cbi8vIFByb2R1Y2UgYSBzdHJpbmcgZnJvbSBob2xkZXJba2V5XS5cblxuICAgICAgICB2YXIgaSwgICAgICAgICAgLy8gVGhlIGxvb3AgY291bnRlci5cbiAgICAgICAgICAgIGssICAgICAgICAgIC8vIFRoZSBtZW1iZXIga2V5LlxuICAgICAgICAgICAgdiwgICAgICAgICAgLy8gVGhlIG1lbWJlciB2YWx1ZS5cbiAgICAgICAgICAgIGxlbmd0aCxcbiAgICAgICAgICAgIG1pbmQgPSBnYXAsXG4gICAgICAgICAgICBwYXJ0aWFsLFxuICAgICAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XSxcbiAgICAgICAgICAgIGlzQmlnTnVtYmVyID0gdmFsdWUgIT0gbnVsbCAmJiAodmFsdWUgaW5zdGFuY2VvZiBCaWdOdW1iZXIgfHwgQmlnTnVtYmVyLmlzQmlnTnVtYmVyKHZhbHVlKSk7XG5cbi8vIElmIHRoZSB2YWx1ZSBoYXMgYSB0b0pTT04gbWV0aG9kLCBjYWxsIGl0IHRvIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuXG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0pTT04oa2V5KTtcbiAgICAgICAgfVxuXG4vLyBJZiB3ZSB3ZXJlIGNhbGxlZCB3aXRoIGEgcmVwbGFjZXIgZnVuY3Rpb24sIHRoZW4gY2FsbCB0aGUgcmVwbGFjZXIgdG9cbi8vIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuXG4gICAgICAgIGlmICh0eXBlb2YgcmVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHJlcC5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cblxuLy8gV2hhdCBoYXBwZW5zIG5leHQgZGVwZW5kcyBvbiB0aGUgdmFsdWUncyB0eXBlLlxuXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBpZiAoaXNCaWdOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBxdW90ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcblxuLy8gSlNPTiBudW1iZXJzIG11c3QgYmUgZmluaXRlLiBFbmNvZGUgbm9uLWZpbml0ZSBudW1iZXJzIGFzIG51bGwuXG5cbiAgICAgICAgICAgIHJldHVybiBpc0Zpbml0ZSh2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogJ251bGwnO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBjYXNlICdudWxsJzpcbiAgICAgICAgY2FzZSAnYmlnaW50JzpcblxuLy8gSWYgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbiBvciBudWxsLCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nLiBOb3RlOlxuLy8gdHlwZW9mIG51bGwgZG9lcyBub3QgcHJvZHVjZSAnbnVsbCcuIFRoZSBjYXNlIGlzIGluY2x1ZGVkIGhlcmUgaW5cbi8vIHRoZSByZW1vdGUgY2hhbmNlIHRoYXQgdGhpcyBnZXRzIGZpeGVkIHNvbWVkYXkuXG5cbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuXG4vLyBJZiB0aGUgdHlwZSBpcyAnb2JqZWN0Jywgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGFuIG9iamVjdCBvciBhbiBhcnJheSBvclxuLy8gbnVsbC5cblxuICAgICAgICBjYXNlICdvYmplY3QnOlxuXG4vLyBEdWUgdG8gYSBzcGVjaWZpY2F0aW9uIGJsdW5kZXIgaW4gRUNNQVNjcmlwdCwgdHlwZW9mIG51bGwgaXMgJ29iamVjdCcsXG4vLyBzbyB3YXRjaCBvdXQgZm9yIHRoYXQgY2FzZS5cblxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICAgICAgICB9XG5cbi8vIE1ha2UgYW4gYXJyYXkgdG8gaG9sZCB0aGUgcGFydGlhbCByZXN1bHRzIG9mIHN0cmluZ2lmeWluZyB0aGlzIG9iamVjdCB2YWx1ZS5cblxuICAgICAgICAgICAgZ2FwICs9IGluZGVudDtcbiAgICAgICAgICAgIHBhcnRpYWwgPSBbXTtcblxuLy8gSXMgdGhlIHZhbHVlIGFuIGFycmF5P1xuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseSh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcblxuLy8gVGhlIHZhbHVlIGlzIGFuIGFycmF5LiBTdHJpbmdpZnkgZXZlcnkgZWxlbWVudC4gVXNlIG51bGwgYXMgYSBwbGFjZWhvbGRlclxuLy8gZm9yIG5vbi1KU09OIHZhbHVlcy5cblxuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGlhbFtpXSA9IHN0cihpLCB2YWx1ZSkgfHwgJ251bGwnO1xuICAgICAgICAgICAgICAgIH1cblxuLy8gSm9pbiBhbGwgb2YgdGhlIGVsZW1lbnRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsIGFuZCB3cmFwIHRoZW0gaW5cbi8vIGJyYWNrZXRzLlxuXG4gICAgICAgICAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gJ1tdJ1xuICAgICAgICAgICAgICAgICAgICA6IGdhcFxuICAgICAgICAgICAgICAgICAgICA/ICdbXFxuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxcbicgKyBnYXApICsgJ1xcbicgKyBtaW5kICsgJ10nXG4gICAgICAgICAgICAgICAgICAgIDogJ1snICsgcGFydGlhbC5qb2luKCcsJykgKyAnXSc7XG4gICAgICAgICAgICAgICAgZ2FwID0gbWluZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlIHJlcGxhY2VyIGlzIGFuIGFycmF5LCB1c2UgaXQgdG8gc2VsZWN0IHRoZSBtZW1iZXJzIHRvIGJlIHN0cmluZ2lmaWVkLlxuXG4gICAgICAgICAgICBpZiAocmVwICYmIHR5cGVvZiByZXAgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gcmVwLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBbaV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrID0gcmVwW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHN0cihrLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcblxuLy8gT3RoZXJ3aXNlLCBpdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBrZXlzIGluIHRoZSBvYmplY3QuXG5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2ID0gc3RyKGssIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbi8vIEpvaW4gYWxsIG9mIHRoZSBtZW1iZXIgdGV4dHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcyxcbi8vIGFuZCB3cmFwIHRoZW0gaW4gYnJhY2VzLlxuXG4gICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICA/ICd7fSdcbiAgICAgICAgICAgICAgICA6IGdhcFxuICAgICAgICAgICAgICAgID8gJ3tcXG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXFxuJyArIGdhcCkgKyAnXFxuJyArIG1pbmQgKyAnfSdcbiAgICAgICAgICAgICAgICA6ICd7JyArIHBhcnRpYWwuam9pbignLCcpICsgJ30nO1xuICAgICAgICAgICAgZ2FwID0gbWluZDtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9XG4gICAgfVxuXG4vLyBJZiB0aGUgSlNPTiBvYmplY3QgZG9lcyBub3QgeWV0IGhhdmUgYSBzdHJpbmdpZnkgbWV0aG9kLCBnaXZlIGl0IG9uZS5cblxuICAgIGlmICh0eXBlb2YgSlNPTi5zdHJpbmdpZnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkgPSBmdW5jdGlvbiAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkge1xuXG4vLyBUaGUgc3RyaW5naWZ5IG1ldGhvZCB0YWtlcyBhIHZhbHVlIGFuZCBhbiBvcHRpb25hbCByZXBsYWNlciwgYW5kIGFuIG9wdGlvbmFsXG4vLyBzcGFjZSBwYXJhbWV0ZXIsIGFuZCByZXR1cm5zIGEgSlNPTiB0ZXh0LiBUaGUgcmVwbGFjZXIgY2FuIGJlIGEgZnVuY3Rpb25cbi8vIHRoYXQgY2FuIHJlcGxhY2UgdmFsdWVzLCBvciBhbiBhcnJheSBvZiBzdHJpbmdzIHRoYXQgd2lsbCBzZWxlY3QgdGhlIGtleXMuXG4vLyBBIGRlZmF1bHQgcmVwbGFjZXIgbWV0aG9kIGNhbiBiZSBwcm92aWRlZC4gVXNlIG9mIHRoZSBzcGFjZSBwYXJhbWV0ZXIgY2FuXG4vLyBwcm9kdWNlIHRleHQgdGhhdCBpcyBtb3JlIGVhc2lseSByZWFkYWJsZS5cblxuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBnYXAgPSAnJztcbiAgICAgICAgICAgIGluZGVudCA9ICcnO1xuXG4vLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbnVtYmVyLCBtYWtlIGFuIGluZGVudCBzdHJpbmcgY29udGFpbmluZyB0aGF0XG4vLyBtYW55IHNwYWNlcy5cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3BhY2U7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gJyAnO1xuICAgICAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIHN0cmluZywgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbmRlbnQgc3RyaW5nLlxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbmRlbnQgPSBzcGFjZTtcbiAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlcmUgaXMgYSByZXBsYWNlciwgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIGFycmF5LlxuLy8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvci5cblxuICAgICAgICAgICAgcmVwID0gcmVwbGFjZXI7XG4gICAgICAgICAgICBpZiAocmVwbGFjZXIgJiYgdHlwZW9mIHJlcGxhY2VyICE9PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2YgcmVwbGFjZXIgIT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXBsYWNlci5sZW5ndGggIT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSlNPTi5zdHJpbmdpZnknKTtcbiAgICAgICAgICAgIH1cblxuLy8gTWFrZSBhIGZha2Ugcm9vdCBvYmplY3QgY29udGFpbmluZyBvdXIgdmFsdWUgdW5kZXIgdGhlIGtleSBvZiAnJy5cbi8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHN0cmluZ2lmeWluZyB0aGUgdmFsdWUuXG5cbiAgICAgICAgICAgIHJldHVybiBzdHIoJycsIHsnJzogdmFsdWV9KTtcbiAgICAgICAgfTtcbiAgICB9XG59KCkpO1xuIiwiLyohXG4gKiBtaW1lLWRiXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIENvcHlyaWdodChjKSAyMDE1LTIwMjIgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2RiLmpzb24nKVxuIiwiLyohXG4gKiBtaW1lLXR5cGVzXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIENvcHlyaWdodChjKSAyMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgZGIgPSByZXF1aXJlKCdtaW1lLWRiJylcbnZhciBleHRuYW1lID0gcmVxdWlyZSgncGF0aCcpLmV4dG5hbWVcblxuLyoqXG4gKiBNb2R1bGUgdmFyaWFibGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgRVhUUkFDVF9UWVBFX1JFR0VYUCA9IC9eXFxzKihbXjtcXHNdKikoPzo7fFxcc3wkKS9cbnZhciBURVhUX1RZUEVfUkVHRVhQID0gL150ZXh0XFwvL2lcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmNoYXJzZXQgPSBjaGFyc2V0XG5leHBvcnRzLmNoYXJzZXRzID0geyBsb29rdXA6IGNoYXJzZXQgfVxuZXhwb3J0cy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlXG5leHBvcnRzLmV4dGVuc2lvbiA9IGV4dGVuc2lvblxuZXhwb3J0cy5leHRlbnNpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuZXhwb3J0cy5sb29rdXAgPSBsb29rdXBcbmV4cG9ydHMudHlwZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbi8vIFBvcHVsYXRlIHRoZSBleHRlbnNpb25zL3R5cGVzIG1hcHNcbnBvcHVsYXRlTWFwcyhleHBvcnRzLmV4dGVuc2lvbnMsIGV4cG9ydHMudHlwZXMpXG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGNoYXJzZXQgZm9yIGEgTUlNRSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjaGFyc2V0ICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBFWFRSQUNUX1RZUEVfUkVHRVhQLmV4ZWModHlwZSlcbiAgdmFyIG1pbWUgPSBtYXRjaCAmJiBkYlttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmIChtaW1lICYmIG1pbWUuY2hhcnNldCkge1xuICAgIHJldHVybiBtaW1lLmNoYXJzZXRcbiAgfVxuXG4gIC8vIGRlZmF1bHQgdGV4dC8qIHRvIHV0Zi04XG4gIGlmIChtYXRjaCAmJiBURVhUX1RZUEVfUkVHRVhQLnRlc3QobWF0Y2hbMV0pKSB7XG4gICAgcmV0dXJuICdVVEYtOCdcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGZ1bGwgQ29udGVudC1UeXBlIGhlYWRlciBnaXZlbiBhIE1JTUUgdHlwZSBvciBleHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gY29udGVudFR5cGUgKHN0cikge1xuICAvLyBUT0RPOiBzaG91bGQgdGhpcyBldmVuIGJlIGluIHRoaXMgbW9kdWxlP1xuICBpZiAoIXN0ciB8fCB0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdmFyIG1pbWUgPSBzdHIuaW5kZXhPZignLycpID09PSAtMVxuICAgID8gZXhwb3J0cy5sb29rdXAoc3RyKVxuICAgIDogc3RyXG5cbiAgaWYgKCFtaW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgY29udGVudC10eXBlIG9yIG90aGVyIG1vZHVsZVxuICBpZiAobWltZS5pbmRleE9mKCdjaGFyc2V0JykgPT09IC0xKSB7XG4gICAgdmFyIGNoYXJzZXQgPSBleHBvcnRzLmNoYXJzZXQobWltZSlcbiAgICBpZiAoY2hhcnNldCkgbWltZSArPSAnOyBjaGFyc2V0PScgKyBjaGFyc2V0LnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIHJldHVybiBtaW1lXG59XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGV4dGVuc2lvbiBmb3IgYSBNSU1FIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGV4dGVuc2lvbiAodHlwZSkge1xuICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgbWVkaWEtdHlwZXJcbiAgdmFyIG1hdGNoID0gRVhUUkFDVF9UWVBFX1JFR0VYUC5leGVjKHR5cGUpXG5cbiAgLy8gZ2V0IGV4dGVuc2lvbnNcbiAgdmFyIGV4dHMgPSBtYXRjaCAmJiBleHBvcnRzLmV4dGVuc2lvbnNbbWF0Y2hbMV0udG9Mb3dlckNhc2UoKV1cblxuICBpZiAoIWV4dHMgfHwgIWV4dHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXh0c1swXVxufVxuXG4vKipcbiAqIExvb2t1cCB0aGUgTUlNRSB0eXBlIGZvciBhIGZpbGUgcGF0aC9leHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGxvb2t1cCAocGF0aCkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBnZXQgdGhlIGV4dGVuc2lvbiAoXCJleHRcIiBvciBcIi5leHRcIiBvciBmdWxsIHBhdGgpXG4gIHZhciBleHRlbnNpb24gPSBleHRuYW1lKCd4LicgKyBwYXRoKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnN1YnN0cigxKVxuXG4gIGlmICghZXh0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXhwb3J0cy50eXBlc1tleHRlbnNpb25dIHx8IGZhbHNlXG59XG5cbi8qKlxuICogUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMgYW5kIHR5cGVzIG1hcHMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBvcHVsYXRlTWFwcyAoZXh0ZW5zaW9ucywgdHlwZXMpIHtcbiAgLy8gc291cmNlIHByZWZlcmVuY2UgKGxlYXN0IC0+IG1vc3QpXG4gIHZhciBwcmVmZXJlbmNlID0gWyduZ2lueCcsICdhcGFjaGUnLCB1bmRlZmluZWQsICdpYW5hJ11cblxuICBPYmplY3Qua2V5cyhkYikuZm9yRWFjaChmdW5jdGlvbiBmb3JFYWNoTWltZVR5cGUgKHR5cGUpIHtcbiAgICB2YXIgbWltZSA9IGRiW3R5cGVdXG4gICAgdmFyIGV4dHMgPSBtaW1lLmV4dGVuc2lvbnNcblxuICAgIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIG1pbWUgLT4gZXh0ZW5zaW9uc1xuICAgIGV4dGVuc2lvbnNbdHlwZV0gPSBleHRzXG5cbiAgICAvLyBleHRlbnNpb24gLT4gbWltZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGV4dGVuc2lvbiA9IGV4dHNbaV1cblxuICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0pIHtcbiAgICAgICAgdmFyIGZyb20gPSBwcmVmZXJlbmNlLmluZGV4T2YoZGJbdHlwZXNbZXh0ZW5zaW9uXV0uc291cmNlKVxuICAgICAgICB2YXIgdG8gPSBwcmVmZXJlbmNlLmluZGV4T2YobWltZS5zb3VyY2UpXG5cbiAgICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0gIT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nICYmXG4gICAgICAgICAgKGZyb20gPiB0byB8fCAoZnJvbSA9PT0gdG8gJiYgdHlwZXNbZXh0ZW5zaW9uXS5zdWJzdHIoMCwgMTIpID09PSAnYXBwbGljYXRpb24vJykpKSB7XG4gICAgICAgICAgLy8gc2tpcCB0aGUgcmVtYXBwaW5nXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBzZXQgdGhlIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgICB0eXBlc1tleHRlbnNpb25dID0gdHlwZVxuICAgIH1cbiAgfSlcbn1cbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IGhhc0ZsYWcgPSByZXF1aXJlKCdoYXMtZmxhZycpO1xuXG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcblxubGV0IGZvcmNlQ29sb3I7XG5pZiAoaGFzRmxhZygnbm8tY29sb3InKSB8fFxuXHRoYXNGbGFnKCduby1jb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1mYWxzZScpKSB7XG5cdGZvcmNlQ29sb3IgPSBmYWxzZTtcbn0gZWxzZSBpZiAoaGFzRmxhZygnY29sb3InKSB8fFxuXHRoYXNGbGFnKCdjb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj10cnVlJykgfHxcblx0aGFzRmxhZygnY29sb3I9YWx3YXlzJykpIHtcblx0Zm9yY2VDb2xvciA9IHRydWU7XG59XG5pZiAoJ0ZPUkNFX0NPTE9SJyBpbiBlbnYpIHtcblx0Zm9yY2VDb2xvciA9IGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDAgfHwgcGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCkgIT09IDA7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG5cdGlmIChsZXZlbCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bGV2ZWwsXG5cdFx0aGFzQmFzaWM6IHRydWUsXG5cdFx0aGFzMjU2OiBsZXZlbCA+PSAyLFxuXHRcdGhhczE2bTogbGV2ZWwgPj0gM1xuXHR9O1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0NvbG9yKHN0cmVhbSkge1xuXHRpZiAoZm9yY2VDb2xvciA9PT0gZmFsc2UpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0xNm0nKSB8fFxuXHRcdGhhc0ZsYWcoJ2NvbG9yPWZ1bGwnKSB8fFxuXHRcdGhhc0ZsYWcoJ2NvbG9yPXRydWVjb2xvcicpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MjU2JykpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmIChzdHJlYW0gJiYgIXN0cmVhbS5pc1RUWSAmJiBmb3JjZUNvbG9yICE9PSB0cnVlKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCBtaW4gPSBmb3JjZUNvbG9yID8gMSA6IDA7XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHQvLyBOb2RlLmpzIDcuNS4wIGlzIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIE5vZGUuanMgdG8gaW5jbHVkZSBhIHBhdGNoIHRvXG5cdFx0Ly8gbGlidXYgdGhhdCBlbmFibGVzIDI1NiBjb2xvciBvdXRwdXQgb24gV2luZG93cy4gQW55dGhpbmcgZWFybGllciBhbmQgaXRcblx0XHQvLyB3b24ndCB3b3JrLiBIb3dldmVyLCBoZXJlIHdlIHRhcmdldCBOb2RlLmpzIDggYXQgbWluaW11bSBhcyBpdCBpcyBhbiBMVFNcblx0XHQvLyByZWxlYXNlLCBhbmQgTm9kZS5qcyA3IGlzIG5vdC4gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3QgV2luZG93c1xuXHRcdC8vIHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAyNTYgY29sb3JzLiBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZSBmaXJzdCByZWxlYXNlXG5cdFx0Ly8gdGhhdCBzdXBwb3J0cyAxNm0vVHJ1ZUNvbG9yLlxuXHRcdGNvbnN0IG9zUmVsZWFzZSA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpO1xuXHRcdGlmIChcblx0XHRcdE51bWJlcihwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKVswXSkgPj0gOCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVswXSkgPj0gMTAgJiZcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMl0pID49IDEwNTg2XG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gTnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTQ5MzEgPyAzIDogMjtcblx0XHR9XG5cblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmICgnQ0knIGluIGVudikge1xuXHRcdGlmIChbJ1RSQVZJUycsICdDSVJDTEVDSScsICdBUFBWRVlPUicsICdHSVRMQUJfQ0knXS5zb21lKHNpZ24gPT4gc2lnbiBpbiBlbnYpIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gL14oOVxcLigwKlsxLTldXFxkKilcXC58XFxkezIsfVxcLikvLnRlc3QoZW52LlRFQU1DSVRZX1ZFUlNJT04pID8gMSA6IDA7XG5cdH1cblxuXHRpZiAoZW52LkNPTE9SVEVSTSA9PT0gJ3RydWVjb2xvcicpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmICgnVEVSTV9QUk9HUkFNJyBpbiBlbnYpIHtcblx0XHRjb25zdCB2ZXJzaW9uID0gcGFyc2VJbnQoKGVudi5URVJNX1BST0dSQU1fVkVSU0lPTiB8fCAnJykuc3BsaXQoJy4nKVswXSwgMTApO1xuXG5cdFx0c3dpdGNoIChlbnYuVEVSTV9QUk9HUkFNKSB7XG5cdFx0XHRjYXNlICdpVGVybS5hcHAnOlxuXHRcdFx0XHRyZXR1cm4gdmVyc2lvbiA+PSAzID8gMyA6IDI7XG5cdFx0XHRjYXNlICdBcHBsZV9UZXJtaW5hbCc6XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxednQyMjB8XnJ4dnR8Y29sb3J8YW5zaXxjeWd3aW58bGludXgvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDT0xPUlRFUk0nIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKGVudi5URVJNID09PSAnZHVtYicpIHtcblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0cmV0dXJuIG1pbjtcbn1cblxuZnVuY3Rpb24gZ2V0U3VwcG9ydExldmVsKHN0cmVhbSkge1xuXHRjb25zdCBsZXZlbCA9IHN1cHBvcnRzQ29sb3Ioc3RyZWFtKTtcblx0cmV0dXJuIHRyYW5zbGF0ZUxldmVsKGxldmVsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN1cHBvcnRzQ29sb3I6IGdldFN1cHBvcnRMZXZlbCxcblx0c3Rkb3V0OiBnZXRTdXBwb3J0TGV2ZWwocHJvY2Vzcy5zdGRvdXQpLFxuXHRzdGRlcnI6IGdldFN1cHBvcnRMZXZlbChwcm9jZXNzLnN0ZGVycilcbn07XG4iLCIoZnVuY3Rpb24gKG5hbWUsIGNvbnRleHQsIGRlZmluaXRpb24pIHtcbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSBtb2R1bGUuZXhwb3J0cyA9IGRlZmluaXRpb24oKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSBkZWZpbmUoZGVmaW5pdGlvbik7XG4gIGVsc2UgY29udGV4dFtuYW1lXSA9IGRlZmluaXRpb24oKTtcbn0pKCd1cmxqb2luJywgdGhpcywgZnVuY3Rpb24gKCkge1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZSAoc3RyQXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0QXJyYXkgPSBbXTtcbiAgICBpZiAoc3RyQXJyYXkubGVuZ3RoID09PSAwKSB7IHJldHVybiAnJzsgfVxuXG4gICAgaWYgKHR5cGVvZiBzdHJBcnJheVswXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgc3RyQXJyYXlbMF0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBmaXJzdCBwYXJ0IGlzIGEgcGxhaW4gcHJvdG9jb2wsIHdlIGNvbWJpbmUgaXQgd2l0aCB0aGUgbmV4dCBwYXJ0LlxuICAgIGlmIChzdHJBcnJheVswXS5tYXRjaCgvXlteLzpdKzpcXC8qJC8pICYmIHN0ckFycmF5Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHZhciBmaXJzdCA9IHN0ckFycmF5LnNoaWZ0KCk7XG4gICAgICBzdHJBcnJheVswXSA9IGZpcnN0ICsgc3RyQXJyYXlbMF07XG4gICAgfVxuXG4gICAgLy8gVGhlcmUgbXVzdCBiZSB0d28gb3IgdGhyZWUgc2xhc2hlcyBpbiB0aGUgZmlsZSBwcm90b2NvbCwgdHdvIHNsYXNoZXMgaW4gYW55dGhpbmcgZWxzZS5cbiAgICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15maWxlOlxcL1xcL1xcLy8pKSB7XG4gICAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNvbXBvbmVudCA9IHN0ckFycmF5W2ldO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBjb21wb25lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG9uZW50ID09PSAnJykgeyBjb250aW51ZTsgfVxuXG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIHN0YXJ0aW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgZmlyc3QuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9eW1xcL10rLywgJycpO1xuICAgICAgfVxuICAgICAgaWYgKGkgPCBzdHJBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgIC8vIFJlbW92aW5nIHRoZSBlbmRpbmcgc2xhc2hlcyBmb3IgZWFjaCBjb21wb25lbnQgYnV0IHRoZSBsYXN0LlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvW1xcL10rJC8sICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciB0aGUgbGFzdCBjb21wb25lbnQgd2Ugd2lsbCBjb21iaW5lIG11bHRpcGxlIHNsYXNoZXMgdG8gYSBzaW5nbGUgb25lLlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvW1xcL10rJC8sICcvJyk7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdEFycmF5LnB1c2goY29tcG9uZW50KTtcblxuICAgIH1cblxuICAgIHZhciBzdHIgPSByZXN1bHRBcnJheS5qb2luKCcvJyk7XG4gICAgLy8gRWFjaCBpbnB1dCBjb21wb25lbnQgaXMgbm93IHNlcGFyYXRlZCBieSBhIHNpbmdsZSBzbGFzaCBleGNlcHQgdGhlIHBvc3NpYmxlIGZpcnN0IHBsYWluIHByb3RvY29sIHBhcnQuXG5cbiAgICAvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2ggYmVmb3JlIHBhcmFtZXRlcnMgb3IgaGFzaFxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXC8oXFw/fCZ8I1teIV0pL2csICckMScpO1xuXG4gICAgLy8gcmVwbGFjZSA/IGluIHBhcmFtZXRlcnMgd2l0aCAmXG4gICAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KCc/Jyk7XG4gICAgc3RyID0gcGFydHMuc2hpZnQoKSArIChwYXJ0cy5sZW5ndGggPiAwID8gJz8nOiAnJykgKyBwYXJ0cy5qb2luKCcmJyk7XG5cbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW5wdXQ7XG5cbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlucHV0ID0gYXJndW1lbnRzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dCA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplKGlucHV0KTtcbiAgfTtcblxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJhc3NlcnRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaHR0cFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJodHRwc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJvc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwYXRoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN0cmVhbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ0dHlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXJsXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInV0aWxcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiemxpYlwiKTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgzMjEpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsInRoaXMiLCJwYXJhbGxlbCIsInNlcmlhbCIsInNlcmlhbE9yZGVyZWQiLCJjbGVhbiIsImtleSIsImpvYnMiLCJzdGF0ZSIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiYmluZCIsImRlZmVyIiwiY2FsbGJhY2siLCJpc0FzeW5jIiwiZXJyIiwicmVzdWx0IiwiZm4iLCJuZXh0VGljayIsInNldEltbWVkaWF0ZSIsInByb2Nlc3MiLCJzZXRUaW1lb3V0IiwiYXN5bmMiLCJhYm9ydCIsImxpc3QiLCJpdGVyYXRvciIsImluZGV4IiwiaXRlbSIsImxlbmd0aCIsInJ1bkpvYiIsImVycm9yIiwib3V0cHV0IiwicmVzdWx0cyIsInNvcnRNZXRob2QiLCJpc05hbWVkTGlzdCIsIkFycmF5IiwiaXNBcnJheSIsImluaXRTdGF0ZSIsImtleWVkTGlzdCIsInNpemUiLCJzb3J0IiwiYSIsImIiLCJpdGVyYXRlIiwidGVybWluYXRvciIsImFzY2VuZGluZyIsIml0ZXJhdG9ySGFuZGxlciIsImRlc2NlbmRpbmciLCJ1dGlscyIsInNldHRsZSIsImJ1aWxkRnVsbFBhdGgiLCJidWlsZFVSTCIsImh0dHAiLCJodHRwcyIsImh0dHBGb2xsb3ciLCJodHRwc0ZvbGxvdyIsInVybCIsInpsaWIiLCJWRVJTSU9OIiwidHJhbnNpdGlvbmFsRGVmYXVsdHMiLCJBeGlvc0Vycm9yIiwiQ2FuY2VsZWRFcnJvciIsImlzSHR0cHMiLCJzdXBwb3J0ZWRQcm90b2NvbHMiLCJzZXRQcm94eSIsIm9wdGlvbnMiLCJwcm94eSIsImxvY2F0aW9uIiwiaG9zdG5hbWUiLCJob3N0IiwicG9ydCIsInBhdGgiLCJhdXRoIiwiYmFzZTY0IiwiQnVmZmVyIiwiZnJvbSIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJ0b1N0cmluZyIsImhlYWRlcnMiLCJiZWZvcmVSZWRpcmVjdCIsInJlZGlyZWN0aW9uIiwiaHJlZiIsImNvbmZpZyIsIlByb21pc2UiLCJyZXNvbHZlUHJvbWlzZSIsInJlamVjdFByb21pc2UiLCJvbkNhbmNlbGVkIiwiZG9uZSIsImNhbmNlbFRva2VuIiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVzb2x2ZSIsInZhbHVlIiwicmVqZWN0ZWQiLCJyZWplY3QiLCJkYXRhIiwiaGVhZGVyTmFtZXMiLCJuYW1lIiwidG9Mb3dlckNhc2UiLCJpc0Zvcm1EYXRhIiwiaXNGdW5jdGlvbiIsImdldEhlYWRlcnMiLCJhc3NpZ24iLCJpc1N0cmVhbSIsImlzQnVmZmVyIiwiaXNBcnJheUJ1ZmZlciIsIlVpbnQ4QXJyYXkiLCJpc1N0cmluZyIsIkVSUl9CQURfUkVRVUVTVCIsIm1heEJvZHlMZW5ndGgiLCJ1bmRlZmluZWQiLCJmdWxsUGF0aCIsImJhc2VVUkwiLCJwYXJzZWQiLCJwYXJzZSIsInByb3RvY29sIiwiaW5kZXhPZiIsInVybEF1dGgiLCJzcGxpdCIsImF1dGhvcml6YXRpb24iLCJpc0h0dHBzUmVxdWVzdCIsInRlc3QiLCJhZ2VudCIsImh0dHBzQWdlbnQiLCJodHRwQWdlbnQiLCJwYXJhbXMiLCJwYXJhbXNTZXJpYWxpemVyIiwicmVwbGFjZSIsImN1c3RvbUVyciIsIkVycm9yIiwibWVzc2FnZSIsImV4aXN0cyIsIm1ldGhvZCIsInRvVXBwZXJDYXNlIiwiYWdlbnRzIiwic29ja2V0UGF0aCIsInRyYW5zcG9ydCIsInByb3h5RW52Iiwic2xpY2UiLCJwcm94eVVybCIsImVudiIsInBhcnNlZFByb3h5VXJsIiwibm9Qcm94eUVudiIsIm5vX3Byb3h5IiwiTk9fUFJPWFkiLCJzaG91bGRQcm94eSIsIm1hcCIsInMiLCJ0cmltIiwic29tZSIsInByb3h5RWxlbWVudCIsInN1YnN0ciIsInByb3h5VXJsQXV0aCIsImlzSHR0cHNQcm94eSIsIm1heFJlZGlyZWN0cyIsImluc2VjdXJlSFRUUFBhcnNlciIsInJlcSIsInJlcXVlc3QiLCJyZXMiLCJhYm9ydGVkIiwic3RyZWFtIiwibGFzdFJlcXVlc3QiLCJzdGF0dXNDb2RlIiwiZGVjb21wcmVzcyIsInBpcGUiLCJjcmVhdGVVbnppcCIsInJlc3BvbnNlIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInN0YXR1c01lc3NhZ2UiLCJyZXNwb25zZVR5cGUiLCJyZXNwb25zZUJ1ZmZlciIsInRvdGFsUmVzcG9uc2VCeXRlcyIsIm9uIiwiY2h1bmsiLCJwdXNoIiwibWF4Q29udGVudExlbmd0aCIsImRlc3Ryb3kiLCJFUlJfQkFEX1JFU1BPTlNFIiwicmVzcG9uc2VEYXRhIiwiY29uY2F0IiwicmVzcG9uc2VFbmNvZGluZyIsInN0cmlwQk9NIiwic29ja2V0Iiwic2V0S2VlcEFsaXZlIiwidGltZW91dCIsInBhcnNlSW50IiwiaXNOYU4iLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsInRyYW5zaXRpb25hbCIsImNsYXJpZnlUaW1lb3V0RXJyb3IiLCJFVElNRURPVVQiLCJFQ09OTkFCT1JURUQiLCJjYW5jZWwiLCJ0eXBlIiwic3Vic2NyaWJlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImVuZCIsImNvb2tpZXMiLCJwYXJzZUhlYWRlcnMiLCJpc1VSTFNhbWVPcmlnaW4iLCJwYXJzZVByb3RvY29sIiwicmVxdWVzdERhdGEiLCJyZXF1ZXN0SGVhZGVycyIsImlzU3RhbmRhcmRCcm93c2VyRW52IiwiWE1MSHR0cFJlcXVlc3QiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkF1dGhvcml6YXRpb24iLCJidG9hIiwib25sb2FkZW5kIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VUZXh0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsIm9uYWJvcnQiLCJvbmVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwieHNyZlZhbHVlIiwid2l0aENyZWRlbnRpYWxzIiwieHNyZkNvb2tpZU5hbWUiLCJyZWFkIiwieHNyZkhlYWRlck5hbWUiLCJ2YWwiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiaXNVbmRlZmluZWQiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJvblVwbG9hZFByb2dyZXNzIiwidXBsb2FkIiwic2VuZCIsIkF4aW9zIiwibWVyZ2VDb25maWciLCJheGlvcyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImNvbnRleHQiLCJpbnN0YW5jZSIsInByb3RvdHlwZSIsImV4dGVuZCIsImNyZWF0ZSIsImluc3RhbmNlQ29uZmlnIiwiQ2FuY2VsVG9rZW4iLCJpc0NhbmNlbCIsInRvRm9ybURhdGEiLCJDYW5jZWwiLCJhbGwiLCJwcm9taXNlcyIsInNwcmVhZCIsImlzQXhpb3NFcnJvciIsImV4ZWN1dG9yIiwiVHlwZUVycm9yIiwicHJvbWlzZSIsInRva2VuIiwidGhlbiIsIl9saXN0ZW5lcnMiLCJpIiwibCIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJyZWFzb24iLCJ0aHJvd0lmUmVxdWVzdGVkIiwibGlzdGVuZXIiLCJzcGxpY2UiLCJzb3VyY2UiLCJjIiwiY2FsbCIsIkVSUl9DQU5DRUxFRCIsImluaGVyaXRzIiwiX19DQU5DRUxfXyIsIkludGVyY2VwdG9yTWFuYWdlciIsImRpc3BhdGNoUmVxdWVzdCIsInZhbGlkYXRvciIsInZhbGlkYXRvcnMiLCJkZWZhdWx0cyIsImludGVyY2VwdG9ycyIsImNvbmZpZ09yVXJsIiwiYXNzZXJ0T3B0aW9ucyIsInNpbGVudEpTT05QYXJzaW5nIiwiYm9vbGVhbiIsImZvcmNlZEpTT05QYXJzaW5nIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInJ1bldoZW4iLCJzeW5jaHJvbm91cyIsInVuc2hpZnQiLCJmdWxmaWxsZWQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJjaGFpbiIsImFwcGx5Iiwic2hpZnQiLCJuZXdDb25maWciLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJnZXRVcmkiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJjb2RlIiwidG9KU09OIiwiZGVzY3JpcHRpb24iLCJudW1iZXIiLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJzdGFjayIsImRlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwidG9GbGF0T2JqZWN0Iiwib2JqIiwiaGFuZGxlcnMiLCJ1c2UiLCJlamVjdCIsImlkIiwiaCIsImlzQWJzb2x1dGVVUkwiLCJjb21iaW5lVVJMcyIsInJlcXVlc3RlZFVSTCIsInRyYW5zZm9ybURhdGEiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwidHJhbnNmb3JtUmVxdWVzdCIsIm1lcmdlIiwiY29tbW9uIiwiYWRhcHRlciIsInRyYW5zZm9ybVJlc3BvbnNlIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsInRhcmdldCIsImlzUGxhaW5PYmplY3QiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwicHJvcCIsInZhbHVlRnJvbUNvbmZpZzIiLCJkZWZhdWx0VG9Db25maWcyIiwibWVyZ2VEaXJlY3RLZXlzIiwibWVyZ2VNYXAiLCJjb25maWdWYWx1ZSIsInZhbGlkYXRlU3RhdHVzIiwiTWF0aCIsImZsb29yIiwiZm5zIiwibm9ybWFsaXplSGVhZGVyTmFtZSIsIkRFRkFVTFRfQ09OVEVOVF9UWVBFIiwic2V0Q29udGVudFR5cGVJZlVuc2V0IiwiaXNGaWxlIiwiaXNCbG9iIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJidWZmZXIiLCJpc1VSTFNlYXJjaFBhcmFtcyIsImlzRmlsZUxpc3QiLCJpc09iamVjdFBheWxvYWQiLCJpc09iamVjdCIsImNvbnRlbnRUeXBlIiwiX0Zvcm1EYXRhIiwiRm9ybURhdGEiLCJyYXdWYWx1ZSIsInBhcnNlciIsImVuY29kZXIiLCJKU09OIiwiZSIsInN0cmluZ2lmeSIsInN0cmluZ2lmeVNhZmVseSIsInN0cmljdEpTT05QYXJzaW5nIiwidGhpc0FyZyIsImFyZ3MiLCJhcmd1bWVudHMiLCJlbmNvZGUiLCJzZXJpYWxpemVkUGFyYW1zIiwicGFydHMiLCJ2IiwiaXNEYXRlIiwidG9JU09TdHJpbmciLCJqb2luIiwiaGFzaG1hcmtJbmRleCIsInJlbGF0aXZlVVJMIiwid3JpdGUiLCJleHBpcmVzIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwiaXNOdW1iZXIiLCJEYXRlIiwidG9HTVRTdHJpbmciLCJkb2N1bWVudCIsIm1hdGNoIiwiUmVnRXhwIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVtb3ZlIiwibm93IiwicGF5bG9hZCIsIm9yaWdpblVSTCIsIm1zaWUiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJ1cmxQYXJzaW5nTm9kZSIsImNyZWF0ZUVsZW1lbnQiLCJyZXNvbHZlVVJMIiwic2V0QXR0cmlidXRlIiwic2VhcmNoIiwiaGFzaCIsInBhdGhuYW1lIiwiY2hhckF0Iiwid2luZG93IiwicmVxdWVzdFVSTCIsIm5vcm1hbGl6ZWROYW1lIiwiaWdub3JlRHVwbGljYXRlT2YiLCJsaW5lIiwiZXhlYyIsImFyciIsImZvcm1EYXRhIiwiY29udmVydFZhbHVlIiwiaXNUeXBlZEFycmF5IiwiQmxvYiIsImJ1aWxkIiwicGFyZW50S2V5IiwiZnVsbEtleSIsImVuZHNXaXRoIiwidG9BcnJheSIsImVsIiwiYXBwZW5kIiwicG9wIiwidGhpbmciLCJkZXByZWNhdGVkV2FybmluZ3MiLCJ2ZXJzaW9uIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiRVJSX0RFUFJFQ0FURUQiLCJjb25zb2xlIiwid2FybiIsInNjaGVtYSIsImFsbG93VW5rbm93biIsIkVSUl9CQURfT1BUSU9OIiwiY2FjaGUiLCJraW5kT2YiLCJzdHIiLCJraW5kT2ZUZXN0IiwiZ2V0UHJvdG90eXBlT2YiLCJoYXNPd25Qcm9wZXJ0eSIsIlR5cGVkQXJyYXkiLCJjb25zdHJ1Y3RvciIsInBhdHRlcm4iLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsInByb2R1Y3QiLCJhc3NpZ25WYWx1ZSIsImNvbnRlbnQiLCJjaGFyQ29kZUF0Iiwic3VwZXJDb25zdHJ1Y3RvciIsInByb3BzIiwic291cmNlT2JqIiwiZGVzdE9iaiIsImZpbHRlciIsIm1lcmdlZCIsImdldE93blByb3BlcnR5TmFtZXMiLCJzZWFyY2hTdHJpbmciLCJwb3NpdGlvbiIsIlN0cmluZyIsImxhc3RJbmRleCIsImlzUHVyZU9iamVjdCIsImluaXQiLCJjbG9uZVBhcmFtcyIsIkNsaWVudCIsImFwaUtleSIsImFwaVNlY3JldCIsImFwaVRva2VuIiwicmVzb3VyY2UiLCJyZXF1ZXN0XzEiLCJIdHRwTWV0aG9kc18xIiwiR2V0IiwiUG9zdCIsIlB1dCIsIkRlbGV0ZSIsInBhY2thZ2VKU09OIiwic2V0Q29uZmlnIiwic2V0T3B0aW9ucyIsInRva2VuQ29ubmVjdFN0cmF0ZWd5IiwiYmFzaWNDb25uZWN0U3RyYXRlZ3kiLCJjbG9uZWRQYXJhbXMiLCJfX2Fzc2lnbiIsImN1c3RvbUNvbmZpZyIsInNldFZhbHVlSWZOb3ROaWwiLCJmcmVlemUiLCJwYWNrYWdlX2pzb25fMSIsImluZGV4XzEiLCJpbmRleF8yIiwiX19leHRlbmRzIiwiTWFpbGpldCIsIl9fZXhwb3J0U3RhciIsIkh0dHBNZXRob2RzIiwiSlNPTmIiLCJzdG9yZUFzU3RyaW5nIiwiY2xpZW50IiwiY2xpZW50XzEiLCJ2YWx1ZXMiLCJpbmNsdWRlcyIsInN1YlBhdGgiLCJidWlsZFN1YlBhdGgiLCJhY3Rpb25QYXRoIiwiUmVxdWVzdCIsImdldFBhY2thZ2VWZXJzaW9uIiwiZ2V0QVBJVG9rZW4iLCJnZXRBUElLZXkiLCJnZXRBUElTZWNyZXQiLCJjbGllbnRDb25maWciLCJnZXRDb25maWciLCJfYSIsIl9iIiwiaXNDb250YWN0TGlzdFdpdGhDU1YiLCJpc0JhdGNoSm9iV2l0aENTViIsImlzU2VuZFJlc291cmNlIiwicmVzb3VyY2VDb250YWluU01TIiwicmVxdWVzdENvbmZpZyIsImdldFJlcXVlc3RCb2R5IiwiZ2V0VXNlckFnZW50IiwiZ2V0Q29udGVudFR5cGUiLCJkYXRhSXNTdHJpbmciLCJpc0pTT05SZXF1ZXN0ZWQiLCJwYXJzZVRvSlNPTmIiLCJpc0Jyb3dzZXIiLCJjcmVkZW50aWFscyIsImdldENyZWRlbnRpYWxzIiwiY2xpZW50T3B0aW9ucyIsImdldE9wdGlvbnMiLCJiYXNlVXJsIiwicGVyZm9ybUFQSUNhbGwiLCJidWlsZEZ1bGxVcmwiLCJzZXRCYXNlVVJMIiwiYm9keSIsIm1ha2VSZXF1ZXN0IiwiX2ciLCJheGlvc18xIiwiZXJyXzEiLCJfZiIsInN0YXR1c18xIiwiZXJyb3JNZXNzYWdlIiwiRXJyb3JNZXNzYWdlIiwib3JpZ2luYWxNZXNzYWdlIiwiZnVsbE1lc3NhZ2UiLCJNZXNzYWdlcyIsIl9jIiwiRXJyb3JzIiwiX2QiLCJfZSIsIkVycm9yQ29kZSIsIkVycm9ySWRlbnRpZmllciIsIkVycm9yUmVsYXRlZFRvIiwidGV4dCIsIkRyYWZ0Q2FtcGFpZ24iLCJFZGl0TW9kZSIsIkNhbXBhaWduRHJhZnRTdGF0dXMiLCJDYW1wYWlnbkRyYWZ0U2VuZGluZ1N0YXR1cyIsIlNlbnRDYW1wYWlnbiIsIkNhbXBhaWduVHlwZSIsIkNvbW1vbiIsIlBlcmlvZCIsIkJ1bGtDb250YWN0TWFuYWdlbWVudCIsIk1hbmFnZUNvbnRhY3RzQWN0aW9uIiwiSW1wb3J0TGlzdEFjdGlvbiIsIkltcG9ydENTVk1ldGhvZCIsIkNTVkltcG9ydFN0YXR1cyIsIkpvYlN0YXR1cyIsIkNvbnRhY3RQcm9wZXJ0aWVzIiwiRGF0YVR5cGUiLCJOYW1lU3BhY2UiLCJNZXNzYWdlIiwiTWVzc2FnZVN0YXRlIiwiRnJvbVR5cGUiLCJNZXNzYWdlU3RhdHVzIiwiQ3VycmVudE1lc3NhZ2VTdGF0dXMiLCJFdmVudFR5cGUiLCJTZWdtZW50YXRpb24iLCJTZWdtZW50U3RhdHVzIiwiU2VuZEVtYWlsVjNfMSIsIlRyYWNrT3BlbnMiLCJUcmFja0NsaWNrcyIsIlJlc3BvbnNlU3RhdHVzIiwiU2VuZGVyIiwiRW1haWxUeXBlIiwiU2VuZGVyU3RhdHVzIiwiRE5TIiwiREtJTUNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cyIsIkRLSU1Db25maWd1cmF0aW9uU3RhdHVzIiwiU1BGQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzIiwiU1BGQ29uZmlndXJhdGlvblN0YXR1cyIsIkFQSUtleUNvbmZpZ3VyYXRpb24iLCJSdW5MZXZlbCIsIlN0YXRpc3RpYyIsIkNhbXBhaWduT3ZlcnZpZXdJRFR5cGUiLCJDYW1wYWlnbk92ZXJ2aWV3RWRpdE1vZGUiLCJDYW1wYWlnbk92ZXJ2aWV3RWRpdFR5cGUiLCJDb3VudGVyU291cmNlIiwiQ291bnRlclJlc29sdXRpb24iLCJDb3VudGVyVGltaW5nIiwiRW1haWxFdmVudCIsIlRlbXBsYXRlIiwiQ2F0ZWdvcmllcyIsIkNhdGVnb3JpZXNTZWxlY3Rpb25NZXRob2QiLCJPd25lclR5cGUiLCJQdXJwb3NlcyIsIlB1cnBvc2VzU2VsZWN0aW9uTWV0aG9kIiwiV2ViaG9vayIsIkV2ZW50VHlwZVZhbHVlIiwiU3RhdHVzIiwiZW51bWVyYWJsZSIsImdldCIsImlzTmlsXzEiLCJpc051bGxfMSIsImlzVW5kZWZpbmVkXzEiLCJpc1B1cmVPYmplY3RfMSIsInNldFZhbHVlSWZOb3ROaWxfMSIsInRhcmdldE9iamVjdCIsImdsb2JhbE9iamVjdCIsIkJpZ051bWJlciIsImlzTnVtZXJpYyIsIm1hdGhjZWlsIiwiY2VpbCIsIm1hdGhmbG9vciIsImJpZ251bWJlckVycm9yIiwidG9vTWFueURpZ2l0cyIsIkJBU0UiLCJMT0dfQkFTRSIsIk1BWF9TQUZFX0lOVEVHRVIiLCJQT1dTX1RFTiIsIlNRUlRfQkFTRSIsIk1BWCIsImJpdEZsb29yIiwibiIsImNvZWZmVG9TdHJpbmciLCJ6IiwiaiIsInIiLCJjb21wYXJlIiwieCIsInkiLCJ4YyIsInljIiwiayIsImludENoZWNrIiwibWluIiwibWF4IiwiaXNPZGQiLCJ0b0V4cG9uZW50aWFsIiwidG9GaXhlZFBvaW50IiwibGVuIiwienMiLCJjbG9uZSIsImNvbmZpZ09iamVjdCIsImRpdiIsImNvbnZlcnRCYXNlIiwicGFyc2VOdW1lcmljIiwicG93Ml81MyIsInJhbmRvbTUzYml0SW50IiwiYmFzZVByZWZpeCIsImRvdEFmdGVyIiwiZG90QmVmb3JlIiwiaXNJbmZpbml0eU9yTmFOIiwid2hpdGVzcGFjZU9yUGx1cyIsIlAiLCJ2YWx1ZU9mIiwiT05FIiwiREVDSU1BTF9QTEFDRVMiLCJST1VORElOR19NT0RFIiwiVE9fRVhQX05FRyIsIlRPX0VYUF9QT1MiLCJNSU5fRVhQIiwiTUFYX0VYUCIsIkNSWVBUTyIsIk1PRFVMT19NT0RFIiwiUE9XX1BSRUNJU0lPTiIsIkZPUk1BVCIsInByZWZpeCIsImdyb3VwU2l6ZSIsInNlY29uZGFyeUdyb3VwU2l6ZSIsImdyb3VwU2VwYXJhdG9yIiwiZGVjaW1hbFNlcGFyYXRvciIsImZyYWN0aW9uR3JvdXBTaXplIiwiZnJhY3Rpb25Hcm91cFNlcGFyYXRvciIsInN1ZmZpeCIsIkFMUEhBQkVUIiwiYWxwaGFiZXQiLCJjYXNlQ2hhbmdlZCIsImlzTnVtIiwiX2lzQmlnTnVtYmVyIiwic3Vic3RyaW5nIiwicm91bmQiLCJERUJVRyIsImZvcm1hdCIsInJtIiwiYzAiLCJuZSIsIm1heE9yTWluIiwibSIsIm5vcm1hbGlzZSIsInNkIiwiZCIsIm5pIiwicmQiLCJwb3dzMTAiLCJvdXQiLCJST1VORF9VUCIsIlJPVU5EX0RPV04iLCJST1VORF9DRUlMIiwiUk9VTkRfRkxPT1IiLCJST1VORF9IQUxGX1VQIiwiUk9VTkRfSEFMRl9ET1dOIiwiUk9VTkRfSEFMRl9FVkVOIiwiUk9VTkRfSEFMRl9DRUlMIiwiUk9VTkRfSEFMRl9GTE9PUiIsIkVVQ0xJRCIsInNldCIsInAiLCJjcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJyYW5kb21CeXRlcyIsIkVYUE9ORU5USUFMX0FUIiwiUkFOR0UiLCJpc0JpZ051bWJlciIsIm1heGltdW0iLCJsdCIsIm1pbmltdW0iLCJndCIsInJhbmRvbSIsImRwIiwicmFuZCIsIlVpbnQzMkFycmF5IiwiY29weSIsInN1bSIsInBsdXMiLCJkZWNpbWFsIiwidG9CYXNlT3V0IiwiYmFzZUluIiwiYmFzZU91dCIsImFyckwiLCJyZXZlcnNlIiwic2lnbiIsImNhbGxlcklzVG9TdHJpbmciLCJwb3ciLCJtdWx0aXBseSIsImJhc2UiLCJ0ZW1wIiwieGxvIiwieGhpIiwiY2FycnkiLCJrbG8iLCJraGkiLCJhTCIsImJMIiwiY21wIiwic3VidHJhY3QiLCJtb3JlIiwicHJvZCIsInByb2RMIiwicSIsInFjIiwicmVtIiwicmVtTCIsInJlbTAiLCJ4aSIsInhMIiwieWMwIiwieUwiLCJ5eiIsIk5hTiIsInAxIiwicDIiLCJhYnNvbHV0ZVZhbHVlIiwiYWJzIiwiY29tcGFyZWRUbyIsImRlY2ltYWxQbGFjZXMiLCJkaXZpZGVkQnkiLCJkaXZpZGVkVG9JbnRlZ2VyQnkiLCJpZGl2IiwiZXhwb25lbnRpYXRlZEJ5IiwiaGFsZiIsImlzTW9kRXhwIiwibklzQmlnIiwibklzTmVnIiwibklzT2RkIiwiaXNJbnRlZ2VyIiwibW9kIiwidGltZXMiLCJpbnRlZ2VyVmFsdWUiLCJpc0VxdWFsVG8iLCJlcSIsImlzRmluaXRlIiwiaXNHcmVhdGVyVGhhbiIsImlzR3JlYXRlclRoYW5PckVxdWFsVG8iLCJndGUiLCJpc0xlc3NUaGFuIiwiaXNMZXNzVGhhbk9yRXF1YWxUbyIsImx0ZSIsImlzTmVnYXRpdmUiLCJpc1Bvc2l0aXZlIiwiaXNaZXJvIiwibWludXMiLCJ0IiwieExUeSIsInhlIiwieWUiLCJtb2R1bG8iLCJtdWx0aXBsaWVkQnkiLCJ4Y0wiLCJ5Y0wiLCJ5bG8iLCJ5aGkiLCJ6YyIsInNxcnRCYXNlIiwibmVnYXRlZCIsInByZWNpc2lvbiIsInNoaWZ0ZWRCeSIsInNxdWFyZVJvb3QiLCJzcXJ0IiwicmVwIiwidG9GaXhlZCIsInRvRm9ybWF0IiwiZzEiLCJnMiIsImludFBhcnQiLCJmcmFjdGlvblBhcnQiLCJpc05lZyIsImludERpZ2l0cyIsInRvRnJhY3Rpb24iLCJtZCIsImQwIiwiZDEiLCJkMiIsImV4cCIsIm4wIiwibjEiLCJ0b051bWJlciIsInRvUHJlY2lzaW9uIiwidXRpbCIsIlN0cmVhbSIsIkRlbGF5ZWRTdHJlYW0iLCJDb21iaW5lZFN0cmVhbSIsIndyaXRhYmxlIiwicmVhZGFibGUiLCJkYXRhU2l6ZSIsIm1heERhdGFTaXplIiwicGF1c2VTdHJlYW1zIiwiX3JlbGVhc2VkIiwiX3N0cmVhbXMiLCJfY3VycmVudFN0cmVhbSIsIl9pbnNpZGVMb29wIiwiX3BlbmRpbmdOZXh0IiwiY29tYmluZWRTdHJlYW0iLCJvcHRpb24iLCJpc1N0cmVhbUxpa2UiLCJuZXdTdHJlYW0iLCJJbmZpbml0eSIsInBhdXNlU3RyZWFtIiwiX2NoZWNrRGF0YVNpemUiLCJfaGFuZGxlRXJyb3JzIiwicGF1c2UiLCJkZXN0IiwicmVzdW1lIiwiX2dldE5leHQiLCJfcmVhbEdldE5leHQiLCJfcGlwZU5leHQiLCJzZWxmIiwiX2VtaXRFcnJvciIsImVtaXQiLCJfcmVzZXQiLCJfdXBkYXRlRGF0YVNpemUiLCJ3IiwicGx1cmFsIiwibXMiLCJtc0FicyIsImlzUGx1cmFsIiwicGFyc2VGbG9hdCIsImxvbmciLCJmbXRTaG9ydCIsImZvcm1hdEFyZ3MiLCJ1c2VDb2xvcnMiLCJuYW1lc3BhY2UiLCJodW1hbml6ZSIsImRpZmYiLCJjb2xvciIsImxhc3RDIiwic2F2ZSIsIm5hbWVzcGFjZXMiLCJzdG9yYWdlIiwic2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJsb2FkIiwiZ2V0SXRlbSIsIl9fbndqcyIsImRvY3VtZW50RWxlbWVudCIsInN0eWxlIiwiV2Via2l0QXBwZWFyYW5jZSIsImZpcmVidWciLCJleGNlcHRpb24iLCJ0YWJsZSIsIiQxIiwibG9jYWxTdG9yYWdlIiwibG9jYWxzdG9yYWdlIiwid2FybmVkIiwiY29sb3JzIiwibG9nIiwiZGVidWciLCJmb3JtYXR0ZXJzIiwiY3JlYXRlRGVidWciLCJwcmV2VGltZSIsIm5hbWVzcGFjZXNDYWNoZSIsImVuYWJsZWRDYWNoZSIsImVuYWJsZU92ZXJyaWRlIiwiZW5hYmxlZCIsImN1cnIiLCJOdW1iZXIiLCJwcmV2IiwiY29lcmNlIiwiZm9ybWF0dGVyIiwic2VsZWN0Q29sb3IiLCJjb25maWd1cmFibGUiLCJkZWxpbWl0ZXIiLCJuZXdEZWJ1ZyIsInRvTmFtZXNwYWNlIiwicmVnZXhwIiwiZGVmYXVsdCIsImRpc2FibGUiLCJuYW1lcyIsInNraXBzIiwiZW5hYmxlIiwiYnJvd3NlciIsInR0eSIsImluc3BlY3RPcHRzIiwic3RkZXJyIiwiY29sb3JDb2RlIiwiaGlkZURhdGUiLCJCb29sZWFuIiwiaXNhdHR5IiwiZmQiLCJkZXByZWNhdGUiLCJzdXBwb3J0c0NvbG9yIiwibGV2ZWwiLCJyZWR1Y2UiLCJfIiwibyIsImluc3BlY3QiLCJPIiwiX21heERhdGFTaXplRXhjZWVkZWQiLCJfYnVmZmVyZWRFdmVudHMiLCJkZWxheWVkU3RyZWFtIiwicmVhbEVtaXQiLCJfaGFuZGxlRW1pdCIsInNldEVuY29kaW5nIiwicmVsZWFzZSIsIl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCIsIlVSTCIsIldyaXRhYmxlIiwiYXNzZXJ0IiwiZXZlbnRzIiwiZXZlbnRIYW5kbGVycyIsImV2ZW50IiwiYXJnMSIsImFyZzIiLCJhcmczIiwiX3JlZGlyZWN0YWJsZSIsIlJlZGlyZWN0aW9uRXJyb3IiLCJjcmVhdGVFcnJvclR5cGUiLCJUb29NYW55UmVkaXJlY3RzRXJyb3IiLCJNYXhCb2R5TGVuZ3RoRXhjZWVkZWRFcnJvciIsIldyaXRlQWZ0ZXJFbmRFcnJvciIsIlJlZGlyZWN0YWJsZVJlcXVlc3QiLCJyZXNwb25zZUNhbGxiYWNrIiwiX3Nhbml0aXplT3B0aW9ucyIsIl9vcHRpb25zIiwiX2VuZGVkIiwiX2VuZGluZyIsIl9yZWRpcmVjdENvdW50IiwiX3JlZGlyZWN0cyIsIl9yZXF1ZXN0Qm9keUxlbmd0aCIsIl9yZXF1ZXN0Qm9keUJ1ZmZlcnMiLCJfb25OYXRpdmVSZXNwb25zZSIsIl9wcm9jZXNzUmVzcG9uc2UiLCJfcGVyZm9ybVJlcXVlc3QiLCJ3cmFwIiwicHJvdG9jb2xzIiwibmF0aXZlUHJvdG9jb2xzIiwic2NoZW1lIiwibmF0aXZlUHJvdG9jb2wiLCJ3cmFwcGVkUHJvdG9jb2wiLCJpbnB1dCIsInVybFN0ciIsInVybFRvT3B0aW9ucyIsImVxdWFsIiwid3JhcHBlZFJlcXVlc3QiLCJub29wIiwidXJsT2JqZWN0Iiwic3RhcnRzV2l0aCIsInJlbW92ZU1hdGNoaW5nSGVhZGVycyIsInJlZ2V4IiwibGFzdFZhbHVlIiwiaGVhZGVyIiwiZGVmYXVsdE1lc3NhZ2UiLCJDdXN0b21FcnJvciIsImNhdXNlIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJhYm9ydFJlcXVlc3QiLCJyZW1vdmVMaXN0ZW5lciIsIl9jdXJyZW50UmVxdWVzdCIsImVuY29kaW5nIiwiY3VycmVudFJlcXVlc3QiLCJzZXRIZWFkZXIiLCJyZW1vdmVIZWFkZXIiLCJtc2VjcyIsImRlc3Ryb3lPblRpbWVvdXQiLCJhZGRMaXN0ZW5lciIsInN0YXJ0VGltZXIiLCJfdGltZW91dCIsImNsZWFyVGltZW91dCIsImNsZWFyVGltZXIiLCJvbmNlIiwicHJvcGVydHkiLCJzZWFyY2hQb3MiLCJfY3VycmVudFVybCIsIl9pc1JlZGlyZWN0IiwiYnVmZmVycyIsIndyaXRlTmV4dCIsImZpbmlzaGVkIiwidHJhY2tSZWRpcmVjdHMiLCJmb2xsb3dSZWRpcmVjdHMiLCJyZXNwb25zZVVybCIsInJlZGlyZWN0cyIsIkhvc3QiLCJnZXRIZWFkZXIiLCJyZWRpcmVjdFVybCIsImN1cnJlbnRIb3N0SGVhZGVyIiwiY3VycmVudFVybFBhcnRzIiwiY3VycmVudEhvc3QiLCJjdXJyZW50VXJsIiwicmVkaXJlY3RVcmxQYXJ0cyIsInN1YmRvbWFpbiIsImRvdCIsImlzU3ViZG9tYWluIiwicmVzcG9uc2VEZXRhaWxzIiwicmVxdWVzdERldGFpbHMiLCJwYXJzZVVybCIsImZzIiwibWltZSIsImFzeW5ja2l0IiwicG9wdWxhdGUiLCJfb3ZlcmhlYWRMZW5ndGgiLCJfdmFsdWVMZW5ndGgiLCJfdmFsdWVzVG9NZWFzdXJlIiwiTElORV9CUkVBSyIsImZpZWxkIiwiZmlsZW5hbWUiLCJfZXJyb3IiLCJfbXVsdGlQYXJ0SGVhZGVyIiwiZm9vdGVyIiwiX211bHRpUGFydEZvb3RlciIsIl90cmFja0xlbmd0aCIsInZhbHVlTGVuZ3RoIiwia25vd25MZW5ndGgiLCJieXRlTGVuZ3RoIiwiX2xlbmd0aFJldHJpZXZlciIsInN0YXJ0Iiwic3RhdCIsImZpbGVTaXplIiwiY29udGVudERpc3Bvc2l0aW9uIiwiX2dldENvbnRlbnREaXNwb3NpdGlvbiIsIl9nZXRDb250ZW50VHlwZSIsImNvbnRlbnRzIiwiZ2V0Qm91bmRhcnkiLCJmaWxlcGF0aCIsIm5vcm1hbGl6ZSIsImJhc2VuYW1lIiwiX2h0dHBNZXNzYWdlIiwibG9va3VwIiwibmV4dCIsIl9sYXN0Qm91bmRhcnkiLCJ1c2VySGVhZGVycyIsImZvcm1IZWFkZXJzIiwic2V0Qm91bmRhcnkiLCJib3VuZGFyeSIsIl9ib3VuZGFyeSIsIl9nZW5lcmF0ZUJvdW5kYXJ5IiwiZ2V0QnVmZmVyIiwiZGF0YUJ1ZmZlciIsImFsbG9jIiwiZ2V0TGVuZ3RoU3luYyIsImhhc0tub3duTGVuZ3RoIiwiZ2V0TGVuZ3RoIiwiY2IiLCJzdWJtaXQiLCJvblJlc3BvbnNlIiwicmVzcG9uY2UiLCJkc3QiLCJzcmMiLCJmbGFnIiwiYXJndiIsInBvcyIsInRlcm1pbmF0b3JQb3MiLCJqc29uX3N0cmluZ2lmeSIsImpzb25fcGFyc2UiLCJzdXNwZWN0UHJvdG9SeCIsInN1c3BlY3RDb25zdHJ1Y3RvclJ4Iiwic3RyaWN0IiwiYWx3YXlzUGFyc2VBc0JpZyIsInVzZU5hdGl2ZUJpZ0ludCIsInByb3RvQWN0aW9uIiwiY29uc3RydWN0b3JBY3Rpb24iLCJhdCIsImNoIiwiZXNjYXBlZSIsImYiLCJzdHJpbmciLCJCaWdJbnQiLCJoZXgiLCJ1ZmZmZiIsInN0YXJ0QXQiLCJmcm9tQ2hhckNvZGUiLCJ3aGl0ZSIsIm9iamVjdCIsImFycmF5Iiwid29yZCIsInJldml2ZXIiLCJ3YWxrIiwiaG9sZGVyIiwiZ2FwIiwiaW5kZW50IiwiZXNjYXBhYmxlIiwibWV0YSIsInF1b3RlIiwicGFydGlhbCIsIm1pbmQiLCJyZXBsYWNlciIsInNwYWNlIiwiZXh0ZW5zaW9ucyIsInR5cGVzIiwicHJlZmVyZW5jZSIsImRiIiwiZXh0bmFtZSIsIkVYVFJBQ1RfVFlQRV9SRUdFWFAiLCJURVhUX1RZUEVfUkVHRVhQIiwiY2hhcnNldCIsImNoYXJzZXRzIiwiZXh0ZW5zaW9uIiwiZXh0cyIsInRvIiwib3MiLCJoYXNGbGFnIiwiZm9yY2VDb2xvciIsImdldFN1cHBvcnRMZXZlbCIsImlzVFRZIiwicGxhdGZvcm0iLCJvc1JlbGVhc2UiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJDSV9OQU1FIiwiVEVBTUNJVFlfVkVSU0lPTiIsIkNPTE9SVEVSTSIsIlRFUk1fUFJPR1JBTV9WRVJTSU9OIiwiVEVSTV9QUk9HUkFNIiwiVEVSTSIsImhhc0Jhc2ljIiwiaGFzMjU2IiwiaGFzMTZtIiwidHJhbnNsYXRlTGV2ZWwiLCJGT1JDRV9DT0xPUiIsInN0ZG91dCIsInN0ckFycmF5IiwicmVzdWx0QXJyYXkiLCJmaXJzdCIsImNvbXBvbmVudCIsImRlZmluaXRpb24iLCJyZXF1aXJlIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/dist/mailjet.web.js b/dist/mailjet.web.js new file mode 100644 index 0000000..40e3a57 --- /dev/null +++ b/dist/mailjet.web.js @@ -0,0 +1,3 @@ +/*! For license information please see mailjet.web.js.LICENSE.txt */ +define((function(){return e={9669:function(e,t,n){e.exports=n(1609)},5448:function(e,t,n){"use strict";var r=n(4867),o=n(6026),i=n(4372),s=n(5327),a=n(4097),u=n(4109),c=n(7985),f=n(7874),l=n(2648),p=n(644),d=n(205);e.exports=function(e){return new Promise((function(t,n){var h,g=e.data,m=e.headers,y=e.responseType;function v(){e.cancelToken&&e.cancelToken.unsubscribe(h),e.signal&&e.signal.removeEventListener("abort",h)}r.isFormData(g)&&r.isStandardBrowserEnv()&&delete m["Content-Type"];var b=new XMLHttpRequest;if(e.auth){var w=e.auth.username||"",S=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";m.Authorization="Basic "+btoa(w+":"+S)}var O=a(e.baseURL,e.url);function E(){if(b){var r="getAllResponseHeaders"in b?u(b.getAllResponseHeaders()):null,i={data:y&&"text"!==y&&"json"!==y?b.response:b.responseText,status:b.status,statusText:b.statusText,headers:r,config:e,request:b};o((function(e){t(e),v()}),(function(e){n(e),v()}),i),b=null}}if(b.open(e.method.toUpperCase(),s(O,e.params,e.paramsSerializer),!0),b.timeout=e.timeout,"onloadend"in b?b.onloadend=E:b.onreadystatechange=function(){b&&4===b.readyState&&(0!==b.status||b.responseURL&&0===b.responseURL.indexOf("file:"))&&setTimeout(E)},b.onabort=function(){b&&(n(new l("Request aborted",l.ECONNABORTED,e,b)),b=null)},b.onerror=function(){n(new l("Network Error",l.ERR_NETWORK,e,b,b)),b=null},b.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",r=e.transitional||f;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new l(t,r.clarifyTimeoutError?l.ETIMEDOUT:l.ECONNABORTED,e,b)),b=null},r.isStandardBrowserEnv()){var A=(e.withCredentials||c(O))&&e.xsrfCookieName?i.read(e.xsrfCookieName):void 0;A&&(m[e.xsrfHeaderName]=A)}"setRequestHeader"in b&&r.forEach(m,(function(e,t){void 0===g&&"content-type"===t.toLowerCase()?delete m[t]:b.setRequestHeader(t,e)})),r.isUndefined(e.withCredentials)||(b.withCredentials=!!e.withCredentials),y&&"json"!==y&&(b.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&b.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&b.upload&&b.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(h=function(e){b&&(n(!e||e&&e.type?new p:e),b.abort(),b=null)},e.cancelToken&&e.cancelToken.subscribe(h),e.signal&&(e.signal.aborted?h():e.signal.addEventListener("abort",h))),g||(g=null);var C=d(O);C&&-1===["http","https","file"].indexOf(C)?n(new l("Unsupported protocol "+C+":",l.ERR_BAD_REQUEST,e)):b.send(g)}))}},1609:function(e,t,n){"use strict";var r=n(4867),o=n(1849),i=n(321),s=n(7185),a=function e(t){var n=new i(t),a=o(i.prototype.request,n);return r.extend(a,i.prototype,n),r.extend(a,n),a.create=function(n){return e(s(t,n))},a}(n(5546));a.Axios=i,a.CanceledError=n(644),a.CancelToken=n(4972),a.isCancel=n(6502),a.VERSION=n(7288).version,a.toFormData=n(7675),a.AxiosError=n(2648),a.Cancel=a.CanceledError,a.all=function(e){return Promise.all(e)},a.spread=n(8713),a.isAxiosError=n(6268),e.exports=a,e.exports.default=a},4972:function(e,t,n){"use strict";var r=n(644);function o(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;this.promise.then((function(e){if(n._listeners){var t,r=n._listeners.length;for(t=0;t=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(e){l.headers[e]={}})),r.forEach(["post","put","patch"],(function(e){l.headers[e]=r.merge(u)})),e.exports=l},7874:function(e){"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},7288:function(e){e.exports={version:"0.27.2"}},1849:function(e){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r=0)return;s[t]="set-cookie"===t?(s[t]?s[t]:[]).concat([n]):s[t]?s[t]+", "+n:n}})),s):s}},205:function(e){"use strict";e.exports=function(e){var t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}},8713:function(e){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},7675:function(e,t,n){"use strict";var r=n(4867);e.exports=function(e,t){t=t||new FormData;var n=[];function o(e){return null===e?"":r.isDate(e)?e.toISOString():r.isArrayBuffer(e)||r.isTypedArray(e)?"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}return function e(i,s){if(r.isPlainObject(i)||r.isArray(i)){if(-1!==n.indexOf(i))throw Error("Circular reference detected in "+s);n.push(i),r.forEach(i,(function(n,i){if(!r.isUndefined(n)){var a,u=s?s+"."+i:i;if(n&&!s&&"object"==typeof n)if(r.endsWith(i,"{}"))n=JSON.stringify(n);else if(r.endsWith(i,"[]")&&(a=r.toArray(n)))return void a.forEach((function(e){!r.isUndefined(e)&&t.append(u,o(e))}));e(n,u)}})),n.pop()}else t.append(s,o(i))}(e),t}},4875:function(e,t,n){"use strict";var r=n(7288).version,o=n(2648),i={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){i[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));var s={};i.transitional=function(e,t,n){function i(e,t){return"[Axios v"+r+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return function(n,r,a){if(!1===e)throw new o(i(r," has been removed"+(t?" in "+t:"")),o.ERR_DEPRECATED);return t&&!s[r]&&(s[r]=!0,console.warn(i(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,a)}},e.exports={assertOptions:function(e,t,n){if("object"!=typeof e)throw new o("options must be an object",o.ERR_BAD_OPTION_VALUE);for(var r=Object.keys(e),i=r.length;i-- >0;){var s=r[i],a=t[s];if(a){var u=e[s],c=void 0===u||a(u,s,e);if(!0!==c)throw new o("option "+s+" must be "+c,o.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new o("Unknown option "+s,o.ERR_BAD_OPTION)}},validators:i}},4867:function(e,t,n){"use strict";var r,o=n(1849),i=Object.prototype.toString,s=(r=Object.create(null),function(e){var t=i.call(e);return r[t]||(r[t]=t.slice(8,-1).toLowerCase())});function a(e){return e=e.toLowerCase(),function(t){return s(t)===e}}function u(e){return Array.isArray(e)}function c(e){return void 0===e}var f=a("ArrayBuffer");function l(e){return null!==e&&"object"==typeof e}function p(e){if("object"!==s(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var d=a("Date"),h=a("File"),g=a("Blob"),m=a("FileList");function y(e){return"[object Function]"===i.call(e)}var v=a("URLSearchParams");function b(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),u(e))for(var n=0,r=e.length;n0;)s[i=r[o]]||(t[i]=e[i],s[i]=!0);e=Object.getPrototypeOf(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:s,kindOfTest:a,endsWith:function(e,t,n){e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;var r=e.indexOf(t,n);return-1!==r&&r===n},toArray:function(e){if(!e)return null;var t=e.length;if(c(t))return null;for(var n=new Array(t);t-- >0;)n[t]=e[t];return n},isTypedArray:S,isFileList:m}},1076:function(e,t,n){"use strict";function r(e){return r="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},r(e)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]-1?"text/plain":"application/json"},e.prototype.getRequestBody=function(e){return[g.default.Put,g.default.Post,g.default.Delete].includes(this.method)?e:{}},e.prototype.buildFullUrl=function(){var t,n,r=this.client.getConfig(),o=null!==(t=this.config.host)&&void 0!==t?t:r.host,i=null!==(n=this.config.version)&&void 0!==n?n:r.version;return(0,l.default)(e.protocol,o,i,this.subPath,this.url)},e.prototype.buildSubPath=function(){if(this.actionPath){var e="contactslist"===this.resource&&"csvdata/text:plain"===this.actionPath,t="batchjob"===this.resource&&"csverror/text:csv"===this.actionPath;return e||t?"DATA":this.subPath}var n="send"===this.resource,r=this.resource.indexOf("sms")>-1;return n||r?"":"REST"},e.prototype.makeRequest=function(t,n,r){var i,s={url:t,params:r,data:this.getRequestBody(n),method:this.method,responseType:"json",headers:{"User-Agent":this.getUserAgent(),"Content-Type":this.getContentType(t)},transformResponse:function(t){var n="string"==typeof t,r="json"===this.responseType;return t&&n&&r?e.parseToJSONb(t):t}};e.isBrowser()&&(s.headers["X-User-Agent"]=s.headers["User-Agent"]);var a=this.getCredentials();a.apiToken?s.headers.Authorization="Bearer ".concat(a.apiToken):s.auth={username:a.apiKey,password:a.apiSecret};var u=this.client.getConfig(),c=this.client.getOptions();c.timeout&&(s.timeout=c.timeout),c.proxy&&(s.proxy=c.proxy),c.headers&&Object.keys(c.headers).length>0&&(s.headers=o(o({},s.headers),c.headers));var f=null!==(i=this.config.output)&&void 0!==i?i:u.output;return f&&(s.responseType=f),c.maxBodyLength&&(s.maxBodyLength=c.maxBodyLength),c.maxContentLength&&(s.maxContentLength=c.maxContentLength),(0,d.default)(s)},e.prototype.setBaseURL=function(e){return this.url=e.toLowerCase(),this},e.prototype.id=function(e){if(!["string","number"].includes(r(e)))throw new Error('Argument "value" must be string or number');return this.url=(0,l.default)(this.url,e.toString()),this},e.prototype.action=function(e){if("string"!=typeof e)throw new Error('Argument "name" must be string');switch(this.actionPath=e.toLowerCase(),this.actionPath){case"csvdata":this.actionPath="csvdata/text:plain";break;case"csverror":this.actionPath="csverror/text:csv"}return this.url=(0,l.default)(this.url,this.actionPath),this.subPath=this.buildSubPath(),this},e.prototype.request=function(e,t,n){var r,o,i,s,a;return void 0===e&&(e={}),void 0===t&&(t={}),void 0===n&&(n=!0),u(this,void 0,void 0,(function(){var u,f,l,p,g,m,y,v,b,w;return c(this,(function(c){switch(c.label){case 0:if(u=this.buildFullUrl(),this.setBaseURL(this.resource),!n)return[2,{body:v=this.getRequestBody(e),params:t,url:u}];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,this.makeRequest(u,e,t)];case 2:return[2,{response:f=c.sent(),body:f.data}];case 3:if((l=c.sent())instanceof d.AxiosError)throw(p=new Error).code=l.code,p.config=l.config,l.response?(g=l.response,m=g.status,y=g.statusText,v=g.data,p.response=l.response,p.statusCode=m,p.statusText=y,b=null!==(r=null==v?void 0:v.ErrorMessage)&&void 0!==r?r:l.message,p.originalMessage=b,p.message='Unsuccessful: Status Code: "'.concat(p.statusCode,'" Message: "').concat(b,'"'),v&&("string"==typeof(w=null===(a=null===(s=null===(i=null===(o=v.Messages)||void 0===o?void 0:o[0])||void 0===i?void 0:i.Errors)||void 0===s?void 0:s[0])||void 0===a?void 0:a.ErrorMessage)&&(p.message+=";\n".concat(w)),(0,h.setValueIfNotNil)(p,"ErrorMessage",v.ErrorMessage),(0,h.setValueIfNotNil)(p,"ErrorCode",v.ErrorCode),(0,h.setValueIfNotNil)(p,"ErrorIdentifier",v.ErrorIdentifier),(0,h.setValueIfNotNil)(p,"ErrorRelatedTo",v.ErrorRelatedTo))):(p.response=null,p.statusCode=null,p.statusText=null,p.originalMessage=l.message,p.message='Unsuccessful: Error Code: "'.concat(p.code,'" Message: "').concat(l.message,'"')),p;throw l;case 4:return[2]}}))}))},e.parseToJSONb=function(e){if("string"!=typeof e)throw new Error('Argument "text" must be string');var t;try{t=y.parse(e)}catch(e){t={}}return t},e.isBrowser=function(){return"object"===("undefined"==typeof window?"undefined":r(window))},e.protocol="https://",e}();t.default=v},5917:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SentCampaign=t.DraftCampaign=void 0,function(e){!function(e){e.Tool2="tool2",e.HTML2="html2",e.MJML="mjml"}(e.EditMode||(e.EditMode={})),function(e){e[e.AXCanceled=-3]="AXCanceled",e[e.Deleted=-2]="Deleted",e[e.Archived=-1]="Archived",e[e.Draft=0]="Draft",e[e.Programmed=1]="Programmed",e[e.Sent=2]="Sent",e[e.AXTested=3]="AXTested",e[e.AXSelected=4]="AXSelected"}(e.CampaignDraftStatus||(e.CampaignDraftStatus={})),function(e){e.AXCancelled="AXCancelled",e.Deleted="Deleted",e.Archived="Archived",e.Draft="Draft",e.Programmed="Programmed",e.Sent="Sent",e.AXTested="AXTested",e.AXSelected="AXSelected"}(e.CampaignDraftSendingStatus||(e.CampaignDraftSendingStatus={}))}(t.DraftCampaign||(t.DraftCampaign={})),function(e){!function(e){e[e.Transactional=1]="Transactional",e[e.Marketing=2]="Marketing",e[e.Unknown=3]="Unknown"}(e.CampaignType||(e.CampaignType={}))}(t.SentCampaign||(t.SentCampaign={}))},7566:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Common=void 0,function(e){!function(e){e.Day="Day",e.Week="Week",e.Month="Month",e.Year="Year"}(e.Period||(e.Period={}))}(t.Common||(t.Common={}))},235:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ContactProperties=t.BulkContactManagement=void 0,function(e){!function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.Remove="remove",e.UnSub="unsub"}(e.ManageContactsAction||(e.ManageContactsAction={})),function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.UnSub="unsub",e.DuplicateOverride="duplicate-override",e.DuplicateNoOverride="duplicate-no-override"}(e.ImportListAction||(e.ImportListAction={})),function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.Remove="remove",e.UnSub="unsub",e.ExcludeMarketing="excludemarketing",e.IncludeMarketing="includemarketing"}(e.ImportCSVMethod||(e.ImportCSVMethod={})),function(e){e.Upload="Upload",e.Completed="Completed",e.Abort="Abort"}(e.CSVImportStatus||(e.CSVImportStatus={})),function(e){e.Completed="Completed",e.InProgress="In Progress",e.Error="Error"}(e.JobStatus||(e.JobStatus={}))}(t.BulkContactManagement||(t.BulkContactManagement={})),function(e){!function(e){e.Str="str",e.Int="int",e.Float="float",e.Bool="bool",e.DateTime="datetime"}(e.DataType||(e.DataType={})),function(e){e.Static="static",e.Historic="historic"}(e.NameSpace||(e.NameSpace={}))}(t.ContactProperties||(t.ContactProperties={}))},8354:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Message=void 0,function(e){!function(e){e[e.UserUnknown=1]="UserUnknown",e[e.MailboxInactive=2]="MailboxInactive",e[e.QuotaExceeded=3]="QuotaExceeded",e[e.InvalidDomain=4]="InvalidDomain",e[e.NoMailHost=5]="NoMailHost",e[e.RelayOrAccessDenied=6]="RelayOrAccessDenied",e[e.SenderBlocked=7]="SenderBlocked",e[e.ContentBlocked=8]="ContentBlocked",e[e.PolicyIssue=9]="PolicyIssue",e[e.SystemIssue=10]="SystemIssue",e[e.ProtocolIssue=11]="ProtocolIssue",e[e.ConnectionIssue=12]="ConnectionIssue",e[e.GreyListed=13]="GreyListed",e[e.PreBlocked=14]="PreBlocked",e[e.DuplicateInCampaign=15]="DuplicateInCampaign",e[e.SpamPreBlocked=16]="SpamPreBlocked",e[e.BadOrEmptyTemplate=17]="BadOrEmptyTemplate",e[e.ErrorInTemplateLanguage=18]="ErrorInTemplateLanguage",e[e.TypoFix=19]="TypoFix",e[e.BlackListed=20]="BlackListed",e[e.SpamReporter=21]="SpamReporter"}(e.MessageState||(e.MessageState={})),function(e){e[e.Transactional=1]="Transactional",e[e.Marketing=2]="Marketing",e[e.Unknown=3]="Unknown"}(e.FromType||(e.FromType={})),function(e){e[e.Processed=0]="Processed",e[e.Queued=1]="Queued",e[e.Sent=2]="Sent",e[e.Opened=3]="Opened",e[e.Clicked=4]="Clicked",e[e.Bounce=5]="Bounce",e[e.Spam=6]="Spam",e[e.Unsub=7]="Unsub",e[e.Blocked=8]="Blocked",e[e.SoftBounce=9]="SoftBounce",e[e.HardBounce=10]="HardBounce",e[e.Deferred=11]="Deferred"}(e.MessageStatus||(e.MessageStatus={})),function(e){e.Unknown="unknown",e.Queued="queued",e.Sent="sent",e.Opened="opened",e.Clicked="clicked",e.Bounce="bounce",e.Spam="spam",e.Unsub="unsub",e.Blocked="blocked",e.HardBounced="hardbounced",e.SoftBounced="softbounced",e.Deferred="deferred"}(e.CurrentMessageStatus||(e.CurrentMessageStatus={})),function(e){e.Sent="sent",e.Opened="opened",e.Clicked="clicked",e.Bounced="bounced",e.Blocked="blocked",e.Unsub="unsub",e.Spam="spam"}(e.EventType||(e.EventType={}))}(t.Message||(t.Message={}))},3635:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Segmentation=void 0,function(e){!function(e){e.Used="used",e.UnUsed="unused",e.Deleted="deleted"}(e.SegmentStatus||(e.SegmentStatus={}))}(t.Segmentation||(t.Segmentation={}))},7410:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SendEmailV3_1=void 0,function(e){!function(e){e.AccountDefault="account_default",e.Disabled="disabled",e.Enabled="enabled"}(e.TrackOpens||(e.TrackOpens={})),function(e){e.AccountDefault="account_default",e.Disabled="disabled",e.Enabled="enabled"}(e.TrackClicks||(e.TrackClicks={})),function(e){e.Success="success",e.Error="error"}(e.ResponseStatus||(e.ResponseStatus={}))}(t.SendEmailV3_1||(t.SendEmailV3_1={}))},2256:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DNS=t.Sender=void 0,function(e){!function(e){e.Transactional="transactional",e.Bulk="bulk",e.Unknown="unknown"}(e.EmailType||(e.EmailType={})),function(e){e.Inactive="Inactive",e.Active="Active",e.Deleted="Deleted"}(e.SenderStatus||(e.SenderStatus={}))}(t.Sender||(t.Sender={})),function(e){!function(e){e.OK="OK",e.Error="Error",e.NotChecked="Not checked"}(e.DKIMConfigurationCheckStatus||(e.DKIMConfigurationCheckStatus={})),function(e){e.OK="OK",e.Error="Error"}(e.DKIMConfigurationStatus||(e.DKIMConfigurationStatus={})),function(e){e.OK="OK",e.Error="Error",e.NotChecked="Not checked",e.NotFound="Not found"}(e.SPFConfigurationCheckStatus||(e.SPFConfigurationCheckStatus={})),function(e){e.OK="OK",e.Error="Error"}(e.SPFConfigurationStatus||(e.SPFConfigurationStatus={}))}(t.DNS||(t.DNS={}))},5295:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.APIKeyConfiguration=void 0,function(e){!function(e){e.Normal="Normal",e.SoftLock="Softlock",e.HardLock="Hardlock"}(e.RunLevel||(e.RunLevel={}))}(t.APIKeyConfiguration||(t.APIKeyConfiguration={}))},6083:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Statistic=void 0,function(e){!function(e){e.SentCampaign="Campaign",e.ABTesting="AX",e.Draft="NL"}(e.CampaignOverviewIDType||(e.CampaignOverviewIDType={})),function(e){e.Tool="tool",e.HTML="html",e.Tool2="tool2",e.HTML2="html2",e.MJML="mjml"}(e.CampaignOverviewEditMode||(e.CampaignOverviewEditMode={})),function(e){e.Full="full",e.Unknown="unknown"}(e.CampaignOverviewEditType||(e.CampaignOverviewEditType={})),function(e){e.Campaign="Campaign",e.APIKey="APIKey",e.List="List",e.Sender="Sender"}(e.CounterSource||(e.CounterSource={})),function(e){e.Highest="Highest",e.Hour="Hour",e.Day="Day",e.Lifetime="Lifetime"}(e.CounterResolution||(e.CounterResolution={})),function(e){e.Message="Message",e.Event="Event"}(e.CounterTiming||(e.CounterTiming={})),function(e){e.Open="open",e.Click="click"}(e.EmailEvent||(e.EmailEvent={}))}(t.Statistic||(t.Statistic={}))},4098:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Template=void 0,function(e){!function(e){e.Full="full",e.Basic="basic",e.NewsLetter="newsletter",e.ECommerce="e-commerce",e.Events="events",e.Travel="travel",e.Sports="sports",e.Welcome="welcome",e.ContactPropertyUpdate="contact-property-update",e.Support="support",e.Invoice="invoice",e.Anniversary="anniversary",e.Account="account",e.Activation="activation"}(e.Categories||(e.Categories={})),function(e){e.ContainsAny="containsany",e.ContainsAll="containsall",e.IsSubSet="issubset"}(e.CategoriesSelectionMethod||(e.CategoriesSelectionMethod={})),function(e){e[e.DragAndDropBuilder=1]="DragAndDropBuilder",e[e.HTMLBuilder=2]="HTMLBuilder",e[e.SavedSectionBuilder=3]="SavedSectionBuilder",e[e.MJMLBuilder=4]="MJMLBuilder"}(e.EditMode||(e.EditMode={})),function(e){e.ApiKey="apikey",e.User="user",e.Global="global"}(e.OwnerType||(e.OwnerType={})),function(e){e.Marketing="marketing",e.Transactional="transactional",e.Automation="automation"}(e.Purposes||(e.Purposes={})),function(e){e.ContainsAny="containsany",e.ContainsAll="containsall",e.IsSubSet="issubset"}(e.PurposesSelectionMethod||(e.PurposesSelectionMethod={}))}(t.Template||(t.Template={}))},1174:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Webhook=void 0,function(e){!function(e){e.Open="open",e.Click="click",e.Bounce="bounce",e.Spam="spam",e.Blocked="blocked",e.UnSub="unsub",e.Sent="sent"}(e.EventType||(e.EventType={})),function(e){e[e.Click=1]="Click",e[e.Bounce=2]="Bounce",e[e.Spam=3]="Spam",e[e.Blocked=4]="Blocked",e[e.Unsubscribe=5]="Unsubscribe",e[e.Open=6]="Open",e[e.Sent=7]="Sent"}(e.EventTypeValue||(e.EventTypeValue={})),function(e){e.Dead="dead",e.Alive="alive"}(e.Status||(e.Status={}))}(t.Webhook||(t.Webhook={}))},4310:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.APIKeyConfiguration=t.DNS=t.Sender=t.Webhook=t.Statistic=t.Template=t.Segmentation=t.SentCampaign=t.DraftCampaign=t.ContactProperties=t.BulkContactManagement=t.Message=t.SendEmailV3_1=t.Common=void 0;var r=n(7566);Object.defineProperty(t,"Common",{enumerable:!0,get:function(){return r.Common}});var o=n(7410);Object.defineProperty(t,"SendEmailV3_1",{enumerable:!0,get:function(){return o.SendEmailV3_1}});var i=n(8354);Object.defineProperty(t,"Message",{enumerable:!0,get:function(){return i.Message}});var s=n(235);Object.defineProperty(t,"BulkContactManagement",{enumerable:!0,get:function(){return s.BulkContactManagement}}),Object.defineProperty(t,"ContactProperties",{enumerable:!0,get:function(){return s.ContactProperties}});var a=n(5917);Object.defineProperty(t,"DraftCampaign",{enumerable:!0,get:function(){return a.DraftCampaign}}),Object.defineProperty(t,"SentCampaign",{enumerable:!0,get:function(){return a.SentCampaign}});var u=n(3635);Object.defineProperty(t,"Segmentation",{enumerable:!0,get:function(){return u.Segmentation}});var c=n(4098);Object.defineProperty(t,"Template",{enumerable:!0,get:function(){return c.Template}});var f=n(6083);Object.defineProperty(t,"Statistic",{enumerable:!0,get:function(){return f.Statistic}});var l=n(1174);Object.defineProperty(t,"Webhook",{enumerable:!0,get:function(){return l.Webhook}});var p=n(2256);Object.defineProperty(t,"Sender",{enumerable:!0,get:function(){return p.Sender}}),Object.defineProperty(t,"DNS",{enumerable:!0,get:function(){return p.DNS}});var d=n(5295);Object.defineProperty(t,"APIKeyConfiguration",{enumerable:!0,get:function(){return d.APIKeyConfiguration}})},9006:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.setValueIfNotNil=t.isPureObject=t.isUndefined=t.isNull=t.isNil=void 0;var o=r(n(1808));t.isNil=o.default;var i=r(n(7376));t.isNull=i.default;var s=r(n(5034));t.isUndefined=s.default;var a=r(n(1818));t.isPureObject=a.default;var u=r(n(1190));t.setValueIfNotNil=u.default},1808:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(7376)),i=r(n(5034));t.default=function(e){return(0,i.default)(e)||(0,o.default)(e)}},7376:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return null===e}},1818:function(e,t){"use strict";function n(e){return n="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},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return"object"===n(e)&&null!==e&&(Object.getPrototypeOf(e)===Object.prototype||null===Object.getPrototypeOf(e))}},5034:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return void 0===e}},1190:function(e,t,n){"use strict";function r(e){return r="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},r(e)}var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(1808)),s=o(n(7376));t.default=function(e,t,n){if("object"!==r(e)||(0,s.default)(e))throw Error('Argument "targetObject" is not object');if(!t)throw Error('Argument "path" is required');(0,i.default)(n)||(e[t]=n)}},4431:function(e,t,n){var r;!function(o){"use strict";var i,s=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,a=Math.ceil,u=Math.floor,c="[BigNumber Error] ",f=c+"Number primitive has more than 15 significant digits: ",l=1e14,p=14,d=9007199254740991,h=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],g=1e7,m=1e9;function y(e){var t=0|e;return e>0||e===t?t:t-1}function v(e){for(var t,n,r=1,o=e.length,i=e[0]+"";rc^n?1:-1;for(a=(u=o.length)<(c=i.length)?u:c,s=0;si[s]^n?1:-1;return u==c?0:u>c^n?1:-1}function w(e,t,n,r){if(en||e!==u(e))throw Error(c+(r||"Argument")+("number"==typeof e?en?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function S(e){var t=e.c.length-1;return y(e.e/p)==t&&e.c[t]%2!=0}function O(e,t){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(t<0?"e":"e+")+t}function E(e,t,n){var r,o;if(t<0){for(o=n+".";++t;o+=n);e=o+e}else if(++t>(r=e.length)){for(o=n,t-=r;--t;o+=n);e+=o}else tI?y.c=y.e=null:e.e=10;l/=10,c++);return void(c>I?y.c=y.e=null:(y.e=c,y.c=[e]))}m=String(e)}else{if(!s.test(m=String(e)))return o(y,m,h);y.s=45==m.charCodeAt(0)?(m=m.slice(1),-1):1}(c=m.indexOf("."))>-1&&(m=m.replace(".","")),(l=m.search(/e/i))>0?(c<0&&(c=l),c+=+m.slice(l+1),m=m.substring(0,l)):c<0&&(c=m.length)}else{if(w(t,2,V.length,"Base"),10==t)return W(y=new H(e),T+y.e+1,B);if(m=String(e),h="number"==typeof e){if(0*e!=0)return o(y,m,h,t);if(y.s=1/e<0?(m=m.slice(1),-1):1,H.DEBUG&&m.replace(/^0\.0*|\./,"").length>15)throw Error(f+e)}else y.s=45===m.charCodeAt(0)?(m=m.slice(1),-1):1;for(n=V.slice(0,t),c=l=0,g=m.length;lc){c=g;continue}}else if(!a&&(m==m.toUpperCase()&&(m=m.toLowerCase())||m==m.toLowerCase()&&(m=m.toUpperCase()))){a=!0,l=-1,c=0;continue}return o(y,String(e),h,t)}h=!1,(c=(m=r(m,t,10,y.s)).indexOf("."))>-1?m=m.replace(".",""):c=m.length}for(l=0;48===m.charCodeAt(l);l++);for(g=m.length;48===m.charCodeAt(--g););if(m=m.slice(l,++g)){if(g-=l,h&&H.DEBUG&&g>15&&(e>d||e!==u(e)))throw Error(f+y.s*e);if((c=c-l-1)>I)y.c=y.e=null;else if(c=M)?O(u,s):E(u,s,"0");else if(i=(e=W(new H(e),t,n)).e,a=(u=v(e.c)).length,1==r||2==r&&(t<=i||i<=D)){for(;aa){if(--t>0)for(u+=".";t--;u+="0");}else if((t+=i-a)>0)for(i+1==a&&(u+=".");t--;u+="0");return e.s<0&&o?"-"+u:u}function J(e,t){for(var n,r=1,o=new H(e[0]);r=10;o/=10,r++);return(n=r+n*p-1)>I?e.c=e.e=null:n=10;c/=10,o++);if((i=t-o)<0)i+=p,s=t,g=(f=m[d=0])/y[o-s-1]%10|0;else if((d=a((i+1)/p))>=m.length){if(!r)break e;for(;m.length<=d;m.push(0));f=g=0,o=1,s=(i%=p)-p+1}else{for(f=c=m[d],o=1;c>=10;c/=10,o++);g=(s=(i%=p)-p+o)<0?0:f/y[o-s-1]%10|0}if(r=r||t<0||null!=m[d+1]||(s<0?f:f%y[o-s-1]),r=n<4?(g||r)&&(0==n||n==(e.s<0?3:2)):g>5||5==g&&(4==n||r||6==n&&(i>0?s>0?f/y[o-s]:0:m[d-1])%10&1||n==(e.s<0?8:7)),t<1||!m[0])return m.length=0,r?(t-=e.e+1,m[0]=y[(p-t%p)%p],e.e=-t||0):m[0]=e.e=0,e;if(0==i?(m.length=d,c=1,d--):(m.length=d+1,c=y[p-i],m[d]=s>0?u(f/y[o-s]%y[s])*c:0),r)for(;;){if(0==d){for(i=1,s=m[0];s>=10;s/=10,i++);for(s=m[0]+=c,c=1;s>=10;s/=10,c++);i!=c&&(e.e++,m[0]==l&&(m[0]=1));break}if(m[d]+=c,m[d]!=l)break;m[d--]=0,c=1}for(i=m.length;0===m[--i];m.pop());}e.e>I?e.c=e.e=null:e.e=M?O(t,n):E(t,n,"0"),e.s<0?"-"+t:t)}return H.clone=e,H.ROUND_UP=0,H.ROUND_DOWN=1,H.ROUND_CEIL=2,H.ROUND_FLOOR=3,H.ROUND_HALF_UP=4,H.ROUND_HALF_DOWN=5,H.ROUND_HALF_EVEN=6,H.ROUND_HALF_CEIL=7,H.ROUND_HALF_FLOOR=8,H.EUCLID=9,H.config=H.set=function(e){var t,n;if(null!=e){if("object"!=typeof e)throw Error(c+"Object expected: "+e);if(e.hasOwnProperty(t="DECIMAL_PLACES")&&(w(n=e[t],0,m,t),T=n),e.hasOwnProperty(t="ROUNDING_MODE")&&(w(n=e[t],0,8,t),B=n),e.hasOwnProperty(t="EXPONENTIAL_AT")&&((n=e[t])&&n.pop?(w(n[0],-m,0,t),w(n[1],0,m,t),D=n[0],M=n[1]):(w(n,-m,m,t),D=-(M=n<0?-n:n))),e.hasOwnProperty(t="RANGE"))if((n=e[t])&&n.pop)w(n[0],-m,-1,t),w(n[1],1,m,t),R=n[0],I=n[1];else{if(w(n,-m,m,t),!n)throw Error(c+t+" cannot be zero: "+n);R=-(I=n<0?-n:n)}if(e.hasOwnProperty(t="CRYPTO")){if((n=e[t])!==!!n)throw Error(c+t+" not true or false: "+n);if(n){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw U=!n,Error(c+"crypto unavailable");U=n}else U=n}if(e.hasOwnProperty(t="MODULO_MODE")&&(w(n=e[t],0,9,t),L=n),e.hasOwnProperty(t="POW_PRECISION")&&(w(n=e[t],0,m,t),F=n),e.hasOwnProperty(t="FORMAT")){if("object"!=typeof(n=e[t]))throw Error(c+t+" not an object: "+n);q=n}if(e.hasOwnProperty(t="ALPHABET")){if("string"!=typeof(n=e[t])||/^.?$|[+\-.\s]|(.).*\1/.test(n))throw Error(c+t+" invalid: "+n);V=n}}return{DECIMAL_PLACES:T,ROUNDING_MODE:B,EXPONENTIAL_AT:[D,M],RANGE:[R,I],CRYPTO:U,MODULO_MODE:L,POW_PRECISION:F,FORMAT:q,ALPHABET:V}},H.isBigNumber=function(e){if(!e||!0!==e._isBigNumber)return!1;if(!H.DEBUG)return!0;var t,n,r=e.c,o=e.e,i=e.s;e:if("[object Array]"=={}.toString.call(r)){if((1===i||-1===i)&&o>=-m&&o<=m&&o===u(o)){if(0===r[0]){if(0===o&&1===r.length)return!0;break e}if((t=(o+1)%p)<1&&(t+=p),String(r[0]).length==t){for(t=0;t=l||n!==u(n))break e;if(0!==n)return!0}}}else if(null===r&&null===o&&(null===i||1===i||-1===i))return!0;throw Error(c+"Invalid BigNumber: "+e)},H.maximum=H.max=function(){return J(arguments,x.lt)},H.minimum=H.min=function(){return J(arguments,x.gt)},H.random=(i=9007199254740992,A=Math.random()*i&2097151?function(){return u(Math.random()*i)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(e){var t,n,r,o,i,s=0,f=[],l=new H(N);if(null==e?e=T:w(e,0,m),o=a(e/p),U)if(crypto.getRandomValues){for(t=crypto.getRandomValues(new Uint32Array(o*=2));s>>11))>=9e15?(n=crypto.getRandomValues(new Uint32Array(2)),t[s]=n[0],t[s+1]=n[1]):(f.push(i%1e14),s+=2);s=o/2}else{if(!crypto.randomBytes)throw U=!1,Error(c+"crypto unavailable");for(t=crypto.randomBytes(o*=7);s=9e15?crypto.randomBytes(7).copy(t,s):(f.push(i%1e14),s+=7);s=o/7}if(!U)for(;s=10;i/=10,s++);sn-1&&(null==s[o+1]&&(s[o+1]=0),s[o+1]+=s[o]/n|0,s[o]%=n)}return s.reverse()}return function(r,o,i,s,a){var u,c,f,l,p,d,h,g,m=r.indexOf("."),y=T,b=B;for(m>=0&&(l=F,F=0,r=r.replace(".",""),d=(g=new H(o)).pow(r.length-m),F=l,g.c=t(E(v(d.c),d.e,"0"),10,i,e),g.e=g.c.length),f=l=(h=t(r,o,i,a?(u=V,e):(u=e,V))).length;0==h[--l];h.pop());if(!h[0])return u.charAt(0);if(m<0?--f:(d.c=h,d.e=f,d.s=s,h=(d=n(d,g,y,b,i)).c,p=d.r,f=d.e),m=h[c=f+y+1],l=i/2,p=p||c<0||null!=h[c+1],p=b<4?(null!=m||p)&&(0==b||b==(d.s<0?3:2)):m>l||m==l&&(4==b||p||6==b&&1&h[c-1]||b==(d.s<0?8:7)),c<1||!h[0])r=p?E(u.charAt(1),-y,u.charAt(0)):u.charAt(0);else{if(h.length=c,p)for(--i;++h[--c]>i;)h[c]=0,c||(++f,h=[1].concat(h));for(l=h.length;!h[--l];);for(m=0,r="";m<=l;r+=u.charAt(h[m++]));r=E(r,f,u.charAt(0))}return r}}(),n=function(){function e(e,t,n){var r,o,i,s,a=0,u=e.length,c=t%g,f=t/g|0;for(e=e.slice();u--;)a=((o=c*(i=e[u]%g)+(r=f*i+(s=e[u]/g|0)*c)%g*g+a)/n|0)+(r/g|0)+f*s,e[u]=o%n;return a&&(e=[a].concat(e)),e}function t(e,t,n,r){var o,i;if(n!=r)i=n>r?1:-1;else for(o=i=0;ot[o]?1:-1;break}return i}function n(e,t,n,r){for(var o=0;n--;)e[n]-=o,o=e[n]1;e.splice(0,1));}return function(r,o,i,s,a){var c,f,d,h,g,m,v,b,w,S,O,E,A,C,P,j,_,k=r.s==o.s?1:-1,x=r.c,N=o.c;if(!(x&&x[0]&&N&&N[0]))return new H(r.s&&o.s&&(x?!N||x[0]!=N[0]:N)?x&&0==x[0]||!N?0*k:k/0:NaN);for(w=(b=new H(k)).c=[],k=i+(f=r.e-o.e)+1,a||(a=l,f=y(r.e/p)-y(o.e/p),k=k/p|0),d=0;N[d]==(x[d]||0);d++);if(N[d]>(x[d]||0)&&f--,k<0)w.push(1),h=!0;else{for(C=x.length,j=N.length,d=0,k+=2,(g=u(a/(N[0]+1)))>1&&(N=e(N,g,a),x=e(x,g,a),j=N.length,C=x.length),A=j,O=(S=x.slice(0,j)).length;O=a/2&&P++;do{if(g=0,(c=t(N,S,j,O))<0){if(E=S[0],j!=O&&(E=E*a+(S[1]||0)),(g=u(E/P))>1)for(g>=a&&(g=a-1),v=(m=e(N,g,a)).length,O=S.length;1==t(m,S,v,O);)g--,n(m,j=10;k/=10,d++);W(b,i+(b.e=d+f*p-1)+1,s,h)}else b.e=f,b.r=+h;return b}}(),C=/^(-?)0([xbo])(?=\w[\w.]*$)/i,P=/^([^.]+)\.$/,j=/^\.([^.]+)$/,_=/^-?(Infinity|NaN)$/,k=/^\s*\+(?=[\w.])|^\s+|\s+$/g,o=function(e,t,n,r){var o,i=n?t:t.replace(k,"");if(_.test(i))e.s=isNaN(i)?null:i<0?-1:1;else{if(!n&&(i=i.replace(C,(function(e,t,n){return o="x"==(n=n.toLowerCase())?16:"b"==n?2:8,r&&r!=o?e:t})),r&&(o=r,i=i.replace(P,"$1").replace(j,"0.$1")),t!=i))return new H(i,o);if(H.DEBUG)throw Error(c+"Not a"+(r?" base "+r:"")+" number: "+t);e.s=null}e.c=e.e=null},x.absoluteValue=x.abs=function(){var e=new H(this);return e.s<0&&(e.s=1),e},x.comparedTo=function(e,t){return b(this,new H(e,t))},x.decimalPlaces=x.dp=function(e,t){var n,r,o,i=this;if(null!=e)return w(e,0,m),null==t?t=B:w(t,0,8),W(new H(i),e+i.e+1,t);if(!(n=i.c))return null;if(r=((o=n.length-1)-y(this.e/p))*p,o=n[o])for(;o%10==0;o/=10,r--);return r<0&&(r=0),r},x.dividedBy=x.div=function(e,t){return n(this,new H(e,t),T,B)},x.dividedToIntegerBy=x.idiv=function(e,t){return n(this,new H(e,t),0,1)},x.exponentiatedBy=x.pow=function(e,t){var n,r,o,i,s,f,l,d,h=this;if((e=new H(e)).c&&!e.isInteger())throw Error(c+"Exponent not an integer: "+$(e));if(null!=t&&(t=new H(t)),s=e.e>14,!h.c||!h.c[0]||1==h.c[0]&&!h.e&&1==h.c.length||!e.c||!e.c[0])return d=new H(Math.pow(+$(h),s?2-S(e):+$(e))),t?d.mod(t):d;if(f=e.s<0,t){if(t.c?!t.c[0]:!t.s)return new H(NaN);(r=!f&&h.isInteger()&&t.isInteger())&&(h=h.mod(t))}else{if(e.e>9&&(h.e>0||h.e<-1||(0==h.e?h.c[0]>1||s&&h.c[1]>=24e7:h.c[0]<8e13||s&&h.c[0]<=9999975e7)))return i=h.s<0&&S(e)?-0:0,h.e>-1&&(i=1/i),new H(f?1/i:i);F&&(i=a(F/p+2))}for(s?(n=new H(.5),f&&(e.s=1),l=S(e)):l=(o=Math.abs(+$(e)))%2,d=new H(N);;){if(l){if(!(d=d.times(h)).c)break;i?d.c.length>i&&(d.c.length=i):r&&(d=d.mod(t))}if(o){if(0===(o=u(o/2)))break;l=o%2}else if(W(e=e.times(n),e.e+1,1),e.e>14)l=S(e);else{if(0==(o=+$(e)))break;l=o%2}h=h.times(h),i?h.c&&h.c.length>i&&(h.c.length=i):r&&(h=h.mod(t))}return r?d:(f&&(d=N.div(d)),t?d.mod(t):i?W(d,F,B,void 0):d)},x.integerValue=function(e){var t=new H(this);return null==e?e=B:w(e,0,8),W(t,t.e+1,e)},x.isEqualTo=x.eq=function(e,t){return 0===b(this,new H(e,t))},x.isFinite=function(){return!!this.c},x.isGreaterThan=x.gt=function(e,t){return b(this,new H(e,t))>0},x.isGreaterThanOrEqualTo=x.gte=function(e,t){return 1===(t=b(this,new H(e,t)))||0===t},x.isInteger=function(){return!!this.c&&y(this.e/p)>this.c.length-2},x.isLessThan=x.lt=function(e,t){return b(this,new H(e,t))<0},x.isLessThanOrEqualTo=x.lte=function(e,t){return-1===(t=b(this,new H(e,t)))||0===t},x.isNaN=function(){return!this.s},x.isNegative=function(){return this.s<0},x.isPositive=function(){return this.s>0},x.isZero=function(){return!!this.c&&0==this.c[0]},x.minus=function(e,t){var n,r,o,i,s=this,a=s.s;if(t=(e=new H(e,t)).s,!a||!t)return new H(NaN);if(a!=t)return e.s=-t,s.plus(e);var u=s.e/p,c=e.e/p,f=s.c,d=e.c;if(!u||!c){if(!f||!d)return f?(e.s=-t,e):new H(d?s:NaN);if(!f[0]||!d[0])return d[0]?(e.s=-t,e):new H(f[0]?s:3==B?-0:0)}if(u=y(u),c=y(c),f=f.slice(),a=u-c){for((i=a<0)?(a=-a,o=f):(c=u,o=d),o.reverse(),t=a;t--;o.push(0));o.reverse()}else for(r=(i=(a=f.length)<(t=d.length))?a:t,a=t=0;t0)for(;t--;f[n++]=0);for(t=l-1;r>a;){if(f[--r]=0;){for(n=0,h=E[o]%w,m=E[o]/w|0,i=o+(s=u);i>o;)n=((c=h*(c=O[--s]%w)+(a=m*c+(f=O[s]/w|0)*h)%w*w+v[i]+n)/b|0)+(a/w|0)+m*f,v[i--]=c%b;v[i]=n}return n?++r:v.splice(0,1),G(e,v,r)},x.negated=function(){var e=new H(this);return e.s=-e.s||null,e},x.plus=function(e,t){var n,r=this,o=r.s;if(t=(e=new H(e,t)).s,!o||!t)return new H(NaN);if(o!=t)return e.s=-t,r.minus(e);var i=r.e/p,s=e.e/p,a=r.c,u=e.c;if(!i||!s){if(!a||!u)return new H(o/0);if(!a[0]||!u[0])return u[0]?e:new H(a[0]?r:0*o)}if(i=y(i),s=y(s),a=a.slice(),o=i-s){for(o>0?(s=i,n=u):(o=-o,n=a),n.reverse();o--;n.push(0));n.reverse()}for((o=a.length)-(t=u.length)<0&&(n=u,u=a,a=n,t=o),o=0;t;)o=(a[--t]=a[t]+u[t]+o)/l|0,a[t]=l===a[t]?0:a[t]%l;return o&&(a=[o].concat(a),++s),G(e,a,s)},x.precision=x.sd=function(e,t){var n,r,o,i=this;if(null!=e&&e!==!!e)return w(e,1,m),null==t?t=B:w(t,0,8),W(new H(i),e,t);if(!(n=i.c))return null;if(r=(o=n.length-1)*p+1,o=n[o]){for(;o%10==0;o/=10,r--);for(o=n[0];o>=10;o/=10,r++);}return e&&i.e+1>r&&(r=i.e+1),r},x.shiftedBy=function(e){return w(e,-9007199254740991,d),this.times("1e"+e)},x.squareRoot=x.sqrt=function(){var e,t,r,o,i,s=this,a=s.c,u=s.s,c=s.e,f=T+4,l=new H("0.5");if(1!==u||!a||!a[0])return new H(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);if(0==(u=Math.sqrt(+$(s)))||u==1/0?(((t=v(a)).length+c)%2==0&&(t+="0"),u=Math.sqrt(+t),c=y((c+1)/2)-(c<0||c%2),r=new H(t=u==1/0?"5e"+c:(t=u.toExponential()).slice(0,t.indexOf("e")+1)+c)):r=new H(u+""),r.c[0])for((u=(c=r.e)+f)<3&&(u=0);;)if(i=r,r=l.times(i.plus(n(s,i,f,1))),v(i.c).slice(0,u)===(t=v(r.c)).slice(0,u)){if(r.e0&&g>0){for(i=g%a||a,l=h.substr(0,i);i0&&(l+=f+h.slice(i)),d&&(l="-"+l)}r=p?l+(n.decimalSeparator||"")+((u=+n.fractionGroupSize)?p.replace(new RegExp("\\d{"+u+"}\\B","g"),"$&"+(n.fractionGroupSeparator||"")):p):l}return(n.prefix||"")+r+(n.suffix||"")},x.toFraction=function(e){var t,r,o,i,s,a,u,f,l,d,g,m,y=this,b=y.c;if(null!=e&&(!(u=new H(e)).isInteger()&&(u.c||1!==u.s)||u.lt(N)))throw Error(c+"Argument "+(u.isInteger()?"out of range: ":"not an integer: ")+$(u));if(!b)return new H(y);for(t=new H(N),l=r=new H(N),o=f=new H(N),m=v(b),s=t.e=m.length-y.e-1,t.c[0]=h[(a=s%p)<0?p+a:a],e=!e||u.comparedTo(t)>0?s>0?t:l:u,a=I,I=1/0,u=new H(m),f.c[0]=0;d=n(u,t,0,1),1!=(i=r.plus(d.times(o))).comparedTo(e);)r=o,o=i,l=f.plus(d.times(i=l)),f=i,t=u.minus(d.times(i=t)),u=i;return i=n(e.minus(r),o,0,1),f=f.plus(i.times(l)),r=r.plus(i.times(o)),f.s=l.s=y.s,g=n(l,o,s*=2,B).minus(y).abs().comparedTo(n(f,r,s,B).minus(y).abs())<1?[l,o]:[f,r],I=a,g},x.toNumber=function(){return+$(this)},x.toPrecision=function(e,t){return null!=e&&w(e,1,m),K(this,e,t,2)},x.toString=function(e){var t,n=this,o=n.s,i=n.e;return null===i?o?(t="Infinity",o<0&&(t="-"+t)):t="NaN":(null==e?t=i<=D||i>=M?O(v(n.c),i):E(v(n.c),i,"0"):10===e?t=E(v((n=W(new H(n),T+i+1,B)).c),n.e,"0"):(w(e,2,V.length,"Base"),t=r(E(v(n.c),i,"0"),10,e,o,!0)),o<0&&n.c[0]&&(t="-"+t)),t},x.valueOf=x.toJSON=function(){return $(this)},x._isBigNumber=!0,null!=t&&H.set(t),H}(),i.default=i.BigNumber=i,void 0===(r=function(){return i}.call(t,n,t,e))||(e.exports=r)}()},4400:function(e,t,n){var r=n(4123).stringify,o=n(6813);e.exports=function(e){return{parse:o(e),stringify:r}},e.exports.parse=o(),e.exports.stringify=r},6813:function(e,t,n){var r=null;const o=/(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])/,i=/(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)/;e.exports=function(e){"use strict";var t={strict:!1,storeAsString:!1,alwaysParseAsBig:!1,useNativeBigInt:!1,protoAction:"error",constructorAction:"error"};if(null!=e){if(!0===e.strict&&(t.strict=!0),!0===e.storeAsString&&(t.storeAsString=!0),t.alwaysParseAsBig=!0===e.alwaysParseAsBig&&e.alwaysParseAsBig,t.useNativeBigInt=!0===e.useNativeBigInt&&e.useNativeBigInt,void 0!==e.constructorAction){if("error"!==e.constructorAction&&"ignore"!==e.constructorAction&&"preserve"!==e.constructorAction)throw new Error(`Incorrect value for constructorAction option, must be "error", "ignore" or undefined but passed ${e.constructorAction}`);t.constructorAction=e.constructorAction}if(void 0!==e.protoAction){if("error"!==e.protoAction&&"ignore"!==e.protoAction&&"preserve"!==e.protoAction)throw new Error(`Incorrect value for protoAction option, must be "error", "ignore" or undefined but passed ${e.protoAction}`);t.protoAction=e.protoAction}}var s,a,u,c,f={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"},l=function(e){throw{name:"SyntaxError",message:e,at:s,text:u}},p=function(e){return e&&e!==a&&l("Expected '"+e+"' instead of '"+a+"'"),a=u.charAt(s),s+=1,a},d=function(){var e,o="";for("-"===a&&(o="-",p("-"));a>="0"&&a<="9";)o+=a,p();if("."===a)for(o+=".";p()&&a>="0"&&a<="9";)o+=a;if("e"===a||"E"===a)for(o+=a,p(),"-"!==a&&"+"!==a||(o+=a,p());a>="0"&&a<="9";)o+=a,p();if(e=+o,isFinite(e))return null==r&&(r=n(4431)),o.length>15?t.storeAsString?o:t.useNativeBigInt?BigInt(o):new r(o):t.alwaysParseAsBig?t.useNativeBigInt?BigInt(e):new r(e):e;l("Bad number")},h=function(){var e,t,n,r="";if('"'===a)for(var o=s;p();){if('"'===a)return s-1>o&&(r+=u.substring(o,s-1)),p(),r;if("\\"===a){if(s-1>o&&(r+=u.substring(o,s-1)),p(),"u"===a){for(n=0,t=0;t<4&&(e=parseInt(p(),16),isFinite(e));t+=1)n=16*n+e;r+=String.fromCharCode(n)}else{if("string"!=typeof f[a])break;r+=f[a]}o=s}}l("Bad string")},g=function(){for(;a&&a<=" ";)p()};return c=function(){switch(g(),a){case"{":return function(){var e,n=Object.create(null);if("{"===a){if(p("{"),g(),"}"===a)return p("}"),n;for(;a;){if(e=h(),g(),p(":"),!0===t.strict&&Object.hasOwnProperty.call(n,e)&&l('Duplicate key "'+e+'"'),!0===o.test(e)?"error"===t.protoAction?l("Object contains forbidden prototype property"):"ignore"===t.protoAction?c():n[e]=c():!0===i.test(e)?"error"===t.constructorAction?l("Object contains forbidden constructor property"):"ignore"===t.constructorAction?c():n[e]=c():n[e]=c(),g(),"}"===a)return p("}"),n;p(","),g()}}l("Bad object")}();case"[":return function(){var e=[];if("["===a){if(p("["),g(),"]"===a)return p("]"),e;for(;a;){if(e.push(c()),g(),"]"===a)return p("]"),e;p(","),g()}}l("Bad array")}();case'"':return h();case"-":return d();default:return a>="0"&&a<="9"?d():function(){switch(a){case"t":return p("t"),p("r"),p("u"),p("e"),!0;case"f":return p("f"),p("a"),p("l"),p("s"),p("e"),!1;case"n":return p("n"),p("u"),p("l"),p("l"),null}l("Unexpected '"+a+"'")}()}},function(e,t){var n;return u=e+"",s=0,a=" ",n=c(),g(),a&&l("Syntax error"),"function"==typeof t?function e(n,r){var o,i=n[r];return i&&"object"==typeof i&&Object.keys(i).forEach((function(t){void 0!==(o=e(i,t))?i[t]=o:delete i[t]})),t.call(n,r,i)}({"":n},""):n}}},4123:function(e,t,n){var r=n(4431),o=e.exports;!function(){"use strict";var e,t,n,i=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,s={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function a(e){return i.lastIndex=0,i.test(e)?'"'+e.replace(i,(function(e){var t=s[e];return"string"==typeof t?t:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)}))+'"':'"'+e+'"'}function u(o,i){var s,c,f,l,p,d=e,h=i[o],g=null!=h&&(h instanceof r||r.isBigNumber(h));switch(h&&"object"==typeof h&&"function"==typeof h.toJSON&&(h=h.toJSON(o)),"function"==typeof n&&(h=n.call(i,o,h)),typeof h){case"string":return g?h:a(h);case"number":return isFinite(h)?String(h):"null";case"boolean":case"null":case"bigint":return String(h);case"object":if(!h)return"null";if(e+=t,p=[],"[object Array]"===Object.prototype.toString.apply(h)){for(l=h.length,s=0;s1){var n=e.shift();e[0]=n+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var r=0;r0&&(o=o.replace(/^[\/]+/,"")),o=r0?"?":"")+s.join("&")}return function(){return e("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},e.exports?e.exports=i():void 0===(o="function"==typeof(r=i)?r.call(t,n,t,e):r)||(e.exports=o)},4147:function(e){"use strict";e.exports=JSON.parse('{"name":"node-mailjet","version":"6.0.1","main":"./dist/mailjet.node.js","browser":"./dist/mailjet.web.js","types":"./dist/declarations/index.d.ts","description":"Mailjet API client","author":"Mailjet","license":"MIT","private":true,"keywords":["email","sms","node","mail","mailjet"],"engines":{"node":">= 12.0.0","npm":">= 6.9.0"},"files":["lib/**","dist/**"],"directories":{"lib":"./lib","docs":"./docs"},"typescript":{"definition":"./dist/declarations/index.d.ts"},"scripts":{"test":"npm run ts:mocha test/","test:int":"npm run ts:mocha test/integration/","test:unit":"npm run ts:mocha test/unit/","test:watch":"mocha --extension ts -r tsconfig-paths/register -r ts-node/register --watch","cover":"npm run cover:expandable npm run test","cover:int":"npm run cover:expandable npm run test:int","cover:unit":"npm run cover:expandable npm run test:unit","cover:expandable":"nyc --reporter=text-summary --reporter=lcov --report-dir=.coverage --temp-dir=./.coverage/.nyc_output","build":"npm run build:release && npm run build:prepublish","build:dev":"webpack --config ./webpack/webpack.dev.config.js --progress --color","build:release":"webpack --config ./webpack/webpack.release.config.js --progress --color","build:prepublish":"node ./scripts/PreparePackage.js","build:watch":"webpack --watch --config ./webpack/webpack.dev.config.js --progress --color","lint":"eslint .","lint:fix":"eslint --fix .","lint:errors":"eslint --quiet .","ts:run":"ts-node --transpileOnly --project ./tsconfig.json -r tsconfig-paths/register","ts:watch":"ts-node-dev --respawn --transpile-only --project ./tsconfig.json -r tsconfig-paths/register","ts:mocha":"mocha --extension ts --recursive -r tsconfig-paths/register -r ts-node/register","ts:patch":"ts-patch install -s","init":"npm install && npm run ts:patch && npm run pkg:prepare","pkg:link":"cd ./dist && npm link && echo \'\\n=== link name: node-mailjet ===\'","pkg:prepare":"husky install","pkg:precommit":"npm audit && npm run lint:errors && npm run test","release":"standard-version -a","release:dry":"standard-version --dry-run","release:quiet":"standard-version --no-verify -a","release:minor":"standard-version -a --release-as minor","release:patch":"standard-version -a --release-as patch","release:major":"standard-version -a --release-as major","docs":"typedoc --tsconfig ./tsconfig.json"},"dependencies":{"axios":"^0.27.2","url-join":"^4.0.0","json-bigint":"^1.0.0"},"devDependencies":{"qs":"^6.5.0","@babel/core":"^7.18.0","@babel/preset-env":"^7.18.0","@commitlint/cli":"^17.0.2","@commitlint/config-conventional":"^17.0.2","@types/chai":"^4.3.1","@types/json-bigint":"^1.0.1","@types/mocha":"^9.1.1","@types/node":"^17.0.34","@types/qs":"^6.9.7","@types/superagent":"^4.1.15","@types/url-join":"^4.0.1","@typescript-eslint/eslint-plugin":"^5.24.0","@typescript-eslint/parser":"^5.24.0","babel-loader":"^8.2.5","chai":"^4.1.0","eslint":"^8.15.0","eslint-config-airbnb-base":"^15.0.0","eslint-import-resolver-typescript":"^2.7.1","eslint-plugin-import":"^2.26.0","eslint-plugin-tsdoc":"^0.2.16","husky":"^8.0.1","mocha":"^9.0.0","nock":"^13.2.4","nyc":"^15.1.0","standard-version":"^9.5.0","terser-webpack-plugin":"^5.3.1","ts-loader":"^9.3.0","ts-node":"^10.7.0","ts-node-dev":"^1.1.8","ts-patch":"^2.0.1","tsconfig-paths":"^4.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","typedoc":"^0.22.15","typescript":"^4.6.4","typescript-transform-paths":"^3.3.1","webpack":"^5.72.1","webpack-cli":"^4.9.2","webpack-merge":"^5.8.0"},"homepage":"https://github.com/mailjet/mailjet-apiv3-nodejs#readme","repository":{"type":"git","url":"git+https://github.com/mailjet/mailjet-apiv3-nodejs.git"},"bugs":{"url":"https://github.com/mailjet/mailjet-apiv3-nodejs/issues"},"contributors":["Arnaud Breton (https://github.com/arnaudbreton)","Nicholas Smith (https://github.com/safani)","Jérémie Parker (https://github.com/p-j)"]}')}},t={},n=function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}(8321),n;var e,t,n})); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFBQSxFQUFBQSxvQkFBQUEsR0FBQUEsc0JBQ0FBLEVBQUFBLEVBQUFBLGNBQUFBLEdBQUFBLGdCQUNBQSxFQUFBQSxFQUFBQSxlQUFBQSxHQUFBQSxpQkFDQUEsRUFBQUEsRUFBQUEsWUFBQUEsR0FBQUEsY0FDQUEsRUFBQUEsRUFBQUEsWUFBQUEsSUFBQUEsY0FDQUEsRUFBQUEsRUFBQUEsY0FBQUEsSUFBQUEsZ0JBQ0FBLEVBQUFBLEVBQUFBLGdCQUFBQSxJQUFBQSxrQkFDQUEsRUFBQUEsRUFBQUEsV0FBQUEsSUFBQUEsYUFDQUEsRUFBQUEsRUFBQUEsV0FBQUEsSUFBQUEsYUFDQUEsRUFBQUEsRUFBQUEsb0JBQUFBLElBQUFBLHNCQUNBQSxFQUFBQSxFQUFBQSxlQUFBQSxJQUFBQSxpQkFDQUEsRUFBQUEsRUFBQUEsbUJBQUFBLElBQUFBLHFCQUNBQSxFQUFBQSxFQUFBQSx3QkFBQUEsSUFBQUEsMEJBQ0FBLEVBQUFBLEVBQUFBLFFBQUFBLElBQUFBLFVBQ0FBLEVBQUFBLEVBQUFBLFlBQUFBLElBQUFBLGNBQ0FBLEVBQUFBLEVBQUFBLGFBQUFBLElBQUFBLGNBckJGLEVBQVlELEVBQUFBLGVBQUFBLEVBQUFBLGFBQVksS0F3QnhCLFNBQVlFLEdBQ1ZBLEVBQUFBLEVBQUFBLGNBQUFBLEdBQUFBLGdCQUNBQSxFQUFBQSxFQUFBQSxVQUFBQSxHQUFBQSxZQUNBQSxFQUFBQSxFQUFBQSxRQUFBQSxHQUFBQSxTQUhGLEVBQVlGLEVBQUFBLFdBQUFBLEVBQUFBLFNBQVEsS0FNcEIsU0FBWUcsR0FDVkEsRUFBQUEsRUFBQUEsVUFBQUEsR0FBQUEsWUFDQUEsRUFBQUEsRUFBQUEsT0FBQUEsR0FBQUEsU0FDQUEsRUFBQUEsRUFBQUEsS0FBQUEsR0FBQUEsT0FDQUEsRUFBQUEsRUFBQUEsT0FBQUEsR0FBQUEsU0FDQUEsRUFBQUEsRUFBQUEsUUFBQUEsR0FBQUEsVUFDQUEsRUFBQUEsRUFBQUEsT0FBQUEsR0FBQUEsU0FDQUEsRUFBQUEsRUFBQUEsS0FBQUEsR0FBQUEsT0FDQUEsRUFBQUEsRUFBQUEs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RUFBeUJHLEdBQzVDLFFBQXFCN3RCLElBQWpCOHRCLEVBQ0gsT0FBT0EsRUFBYXh5QixRQUdyQixJQUFJRCxFQUFTcXlCLEVBQXlCRyxHQUFZLENBR2pEdnlCLFFBQVMsQ0FBQyxHQU9YLE9BSEF5eUIsRUFBb0JGLEdBQVU5cEIsS0FBSzFJLEVBQU9DLFFBQVNELEVBQVFBLEVBQU9DLFFBQVNzeUIsR0FHcEV2eUIsRUFBT0MsT0FDZixDQ25CMEJzeUIsQ0FBb0IsY0RGMUNGLEVDRUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvRm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9jbGllbnQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL2luZGV4LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9yZXF1ZXN0L0h0dHBNZXRob2RzLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9yZXF1ZXN0L2luZGV4LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvQ2FtcGFpZ24udHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9Db21tb24udHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9Db250YWN0LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvTWVzc2FnZS50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL1NlZ21lbnRhdGlvbi50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL1NlbmRFbWFpbC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL1NlbmRlckFkZHJlc3NBbmREb21haW4udHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9TZXR0aW5nLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvU3RhdGlzdGljLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvVGVtcGxhdGUudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9XZWJob29rLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3V0aWxzL2luZGV4LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9pc05pbC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdXRpbHMvaXNOdWxsLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9pc1B1cmVPYmplY3QudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3V0aWxzL2lzVW5kZWZpbmVkLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9zZXRWYWx1ZUlmTm90TmlsLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9iaWdudW1iZXIuanMvYmlnbnVtYmVyLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9qc29uLWJpZ2ludC9pbmRleC5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvanNvbi1iaWdpbnQvbGliL3BhcnNlLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9qc29uLWJpZ2ludC9saWIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL25vZGUtbWFpbGpldC93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9heGlvcycpOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuLi9jb3JlL2J1aWxkRnVsbFBhdGgnKTtcbnZhciBwYXJzZUhlYWRlcnMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzJyk7XG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbicpO1xudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMvdHJhbnNpdGlvbmFsJyk7XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xudmFyIHBhcnNlUHJvdG9jb2wgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuICAgIHZhciByZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIHZhciBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSAmJiB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcblxuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgIHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0LCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIHZhciB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuIHx8IGNvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCAoY2FuY2VsICYmIGNhbmNlbC50eXBlKSA/IG5ldyBDYW5jZWxlZEVycm9yKCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBjb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0RGF0YSkge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woZnVsbFBhdGgpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIFsgJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScgXS5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vY29yZS9tZXJnZUNvbmZpZycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICB2YXIgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgdmFyIGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQpO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbnZhciBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxlZEVycm9yJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5heGlvcy5WRVJTSU9OID0gcmVxdWlyZSgnLi9lbnYvZGF0YScpLnZlcnNpb247XG5heGlvcy50b0Zvcm1EYXRhID0gcmVxdWlyZSgnLi9oZWxwZXJzL3RvRm9ybURhdGEnKTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9saWIvY29yZS9BeGlvc0Vycm9yJyk7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuYXhpb3Muc3ByZWFkID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NwcmVhZCcpO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG5cbi8vIEFsbG93IHVzZSBvZiBkZWZhdWx0IGltcG9ydCBzeW50YXggaW4gVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FuY2VsZWRFcnJvciA9IHJlcXVpcmUoJy4vQ2FuY2VsZWRFcnJvcicpO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIENhbmNlbFRva2VuKGV4ZWN1dG9yKSB7XG4gIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZVByb21pc2U7XG5cbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICB2YXIgaTtcbiAgICB2YXIgbCA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgIH1cbiAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4gPSBmdW5jdGlvbihvbmZ1bGZpbGxlZCkge1xuICAgIHZhciBfcmVzb2x2ZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSk7XG4gICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbkNhbmNlbFRva2VuLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkID0gZnVuY3Rpb24gdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgdGhyb3cgdGhpcy5yZWFzb247XG4gIH1cbn07XG5cbi8qKlxuICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICB9XG59O1xuXG4vKipcbiAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAqL1xuXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICovXG5DYW5jZWxUb2tlbi5zb3VyY2UgPSBmdW5jdGlvbiBzb3VyY2UoKSB7XG4gIHZhciBjYW5jZWw7XG4gIHZhciB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgY2FuY2VsID0gYztcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW46IHRva2VuLFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwge1xuICBfX0NBTkNFTF9fOiB0cnVlXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxlZEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBJbnRlcmNlcHRvck1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyY2VwdG9yTWFuYWdlcicpO1xudmFyIGRpc3BhdGNoUmVxdWVzdCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hSZXF1ZXN0Jyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL21lcmdlQ29uZmlnJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4vYnVpbGRGdWxsUGF0aCcpO1xudmFyIHZhbGlkYXRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvdmFsaWRhdG9yJyk7XG5cbnZhciB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBeGlvcyhpbnN0YW5jZUNvbmZpZykge1xuICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gKi9cbkF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgfVxuXG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgaWYgKGNvbmZpZy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gY29uZmlnLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdHMubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IHRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnLm1ldGhvZCA9ICdnZXQnO1xuICB9XG5cbiAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWw7XG5cbiAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgdmFyIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHZhciBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdmFyIHByb21pc2U7XG5cbiAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuXG4gICAgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICBjaGFpbiA9IGNoYWluLmNvbmNhdChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGgpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuXG4gIHZhciBuZXdDb25maWcgPSBjb25maWc7XG4gIHdoaWxlIChyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICB2YXIgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpO1xuICAgIHZhciBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB0cnkge1xuICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25SZWplY3RlZChlcnJvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QobmV3Q29uZmlnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICB9XG5cbiAgd2hpbGUgKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbkF4aW9zLnByb3RvdHlwZS5nZXRVcmkgPSBmdW5jdGlvbiBnZXRVcmkoY29uZmlnKSB7XG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIHZhciBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnJlc3BvbnNlICYmIHRoaXMucmVzcG9uc2Uuc3RhdHVzID8gdGhpcy5yZXNwb25zZS5zdGF0dXMgOiBudWxsXG4gICAgfTtcbiAgfVxufSk7XG5cbnZhciBwcm90b3R5cGUgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbnZhciBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChmdW5jdGlvbihjb2RlKSB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSBmdW5jdGlvbihlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpIHtcbiAgdmFyIGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG5cbiAgdXRpbHMudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3NFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWQsXG4gICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc0Fic29sdXRlVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMJyk7XG52YXIgY29tYmluZVVSTHMgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xudmFyIENhbmNlbGVkRXJyb3IgPSByZXF1aXJlKCcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1xuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgcmVzcG9uc2UuZGF0YSxcbiAgICAgIHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIHZhciBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UodGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcyW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMocHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG1lcmdlTWFwID0ge1xuICAgICd1cmwnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdtZXRob2QnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdkYXRhJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnYmFzZVVSTCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RyYW5zZm9ybVJlcXVlc3QnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc2Zvcm1SZXNwb25zZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3BhcmFtc1NlcmlhbGl6ZXInOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0aW1lb3V0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndGltZW91dE1lc3NhZ2UnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd3aXRoQ3JlZGVudGlhbHMnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdhZGFwdGVyJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncmVzcG9uc2VUeXBlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAneHNyZkNvb2tpZU5hbWUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd4c3JmSGVhZGVyTmFtZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ29uVXBsb2FkUHJvZ3Jlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdvbkRvd25sb2FkUHJvZ3Jlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdkZWNvbXByZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnbWF4Q29udGVudExlbmd0aCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ21heEJvZHlMZW5ndGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdiZWZvcmVSZWRpcmVjdCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RyYW5zcG9ydCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2h0dHBBZ2VudCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2h0dHBzQWdlbnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdjYW5jZWxUb2tlbic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3NvY2tldFBhdGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdyZXNwb25zZUVuY29kaW5nJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndmFsaWRhdGVTdGF0dXMnOiBtZXJnZURpcmVjdEtleXNcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKE9iamVjdC5rZXlzKGNvbmZpZzEpLmNvbmNhdChPYmplY3Qua2V5cyhjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgdmFyIG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICB2YXIgY29uZmlnVmFsdWUgPSBtZXJnZShwcm9wKTtcbiAgICAodXRpbHMuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vQXhpb3NFcnJvcicpO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIHZhciB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBiZSB0cmFuc2Zvcm1lZFxuICogQHBhcmFtIHtBcnJheX0gaGVhZGVycyBUaGUgaGVhZGVycyBmb3IgdGhlIHJlcXVlc3Qgb3IgcmVzcG9uc2VcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGRhdGEsIGhlYWRlcnMsIGZucykge1xuICB2YXIgY29udGV4dCA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29udGV4dCwgZGF0YSwgaGVhZGVycyk7XG4gIH0pO1xuXG4gIHJldHVybiBkYXRhO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi4vaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lJyk7XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0gcmVxdWlyZSgnLi90cmFuc2l0aW9uYWwnKTtcbnZhciB0b0Zvcm1EYXRhID0gcmVxdWlyZSgnLi4vaGVscGVycy90b0Zvcm1EYXRhJyk7XG5cbnZhciBERUZBVUxUX0NPTlRFTlRfVFlQRSA9IHtcbiAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG59O1xuXG5mdW5jdGlvbiBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgdmFsdWUpIHtcbiAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzKSAmJiB1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzWydDb250ZW50LVR5cGUnXSkpIHtcbiAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRBZGFwdGVyKCkge1xuICB2YXIgYWRhcHRlcjtcbiAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdXNlIFhIUiBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4uL2FkYXB0ZXJzL3hocicpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJykge1xuICAgIC8vIEZvciBub2RlIHVzZSBIVFRQIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxudmFyIGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgdmFyIGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzLmlzT2JqZWN0KGRhdGEpO1xuICAgIHZhciBjb250ZW50VHlwZSA9IGhlYWRlcnMgJiYgaGVhZGVyc1snQ29udGVudC1UeXBlJ107XG5cbiAgICB2YXIgaXNGaWxlTGlzdDtcblxuICAgIGlmICgoaXNGaWxlTGlzdCA9IHV0aWxzLmlzRmlsZUxpc3QoZGF0YSkpIHx8IChpc09iamVjdFBheWxvYWQgJiYgY29udGVudFR5cGUgPT09ICdtdWx0aXBhcnQvZm9ybS1kYXRhJykpIHtcbiAgICAgIHZhciBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcbiAgICAgIHJldHVybiB0b0Zvcm1EYXRhKGlzRmlsZUxpc3QgPyB7J2ZpbGVzW10nOiBkYXRhfSA6IGRhdGEsIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCkpO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vanNvbicpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgdmFyIHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICB2YXIgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgIHZhciBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgdmFyIHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcgfHwgKGZvcmNlZEpTT05QYXJzaW5nICYmIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmIGRhdGEubGVuZ3RoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcmVxdWlyZSgnLi9lbnYvRm9ybURhdGEnKVxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBcInZlcnNpb25cIjogXCIwLjI3LjJcIlxufTsiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkUGFyYW1zO1xuICBpZiAocGFyYW1zU2VyaWFsaXplcikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXNTZXJpYWxpemVyKHBhcmFtcyk7XG4gIH0gZWxzZSBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSkge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgcGFydHMgPSBbXTtcblxuICAgIHV0aWxzLmZvckVhY2gocGFyYW1zLCBmdW5jdGlvbiBzZXJpYWxpemUodmFsLCBrZXkpIHtcbiAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodXRpbHMuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGtleSA9IGtleSArICdbXSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBbdmFsXTtcbiAgICAgIH1cblxuICAgICAgdXRpbHMuZm9yRWFjaCh2YWwsIGZ1bmN0aW9uIHBhcnNlVmFsdWUodikge1xuICAgICAgICBpZiAodXRpbHMuaXNEYXRlKHYpKSB7XG4gICAgICAgICAgdiA9IHYudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmICh1dGlscy5pc09iamVjdCh2KSkge1xuICAgICAgICAgIHYgPSBKU09OLnN0cmluZ2lmeSh2KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJ0cy5wdXNoKGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHYpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcnRzLmpvaW4oJyYnKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgdmFyIGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZignIycpO1xuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cblxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICAgIHZhciBjb29raWUgPSBbXTtcbiAgICAgICAgICBjb29raWUucHVzaChuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnc2VjdXJlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChuYW1lKSB7XG4gICAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKCkge30sXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQoKSB7IHJldHVybiBudWxsOyB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMuaXNPYmplY3QocGF5bG9hZCkgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgdmFyIG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgdmFyIG9yaWdpblVSTDtcblxuICAgICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdCdzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgICB2YXIgaHJlZiA9IHVybDtcblxuICAgICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICAgIHZhciBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgbm9ybWFsaXplZE5hbWUpIHtcbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiBwcm9jZXNzSGVhZGVyKHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKG5hbWUgIT09IG5vcm1hbGl6ZWROYW1lICYmIG5hbWUudG9VcHBlckNhc2UoKSA9PT0gbm9ybWFsaXplZE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxubW9kdWxlLmV4cG9ydHMgPSBudWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8vIEhlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG52YXIgaWdub3JlRHVwbGljYXRlT2YgPSBbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGhlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZUhlYWRlcnMoaGVhZGVycykge1xuICB2YXIgcGFyc2VkID0ge307XG4gIHZhciBrZXk7XG4gIHZhciB2YWw7XG4gIHZhciBpO1xuXG4gIGlmICghaGVhZGVycykgeyByZXR1cm4gcGFyc2VkOyB9XG5cbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLnNwbGl0KCdcXG4nKSwgZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cigwLCBpKSkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKGkgKyAxKSk7XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2YuaW5kZXhPZihrZXkpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gKHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gOiBbXSkuY29uY2F0KFt2YWxdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICB2YXIgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IEZvcm1EYXRhKCk7XG5cbiAgdmFyIHN0YWNrID0gW107XG5cbiAgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG5cbiAgICBpZiAodXRpbHMuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkKGRhdGEsIHBhcmVudEtleSkge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KGRhdGEpIHx8IHV0aWxzLmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGlmIChzdGFjay5pbmRleE9mKGRhdGEpICE9PSAtMSkge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXJlbnRLZXkpO1xuICAgICAgfVxuXG4gICAgICBzdGFjay5wdXNoKGRhdGEpO1xuXG4gICAgICB1dGlscy5mb3JFYWNoKGRhdGEsIGZ1bmN0aW9uIGVhY2godmFsdWUsIGtleSkge1xuICAgICAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG4gICAgICAgIHZhciBmdWxsS2V5ID0gcGFyZW50S2V5ID8gcGFyZW50S2V5ICsgJy4nICsga2V5IDoga2V5O1xuICAgICAgICB2YXIgYXJyO1xuXG4gICAgICAgIGlmICh2YWx1ZSAmJiAhcGFyZW50S2V5ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpZiAodXRpbHMuZW5kc1dpdGgoa2V5LCAne30nKSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykgJiYgKGFyciA9IHV0aWxzLnRvQXJyYXkodmFsdWUpKSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uKGVsKSB7XG4gICAgICAgICAgICAgICF1dGlscy5pc1VuZGVmaW5lZChlbCkgJiYgZm9ybURhdGEuYXBwZW5kKGZ1bGxLZXksIGNvbnZlcnRWYWx1ZShlbCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnVpbGQodmFsdWUsIGZ1bGxLZXkpO1xuICAgICAgfSk7XG5cbiAgICAgIHN0YWNrLnBvcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQocGFyZW50S2V5LCBjb252ZXJ0VmFsdWUoZGF0YSkpO1xuICAgIH1cbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvRm9ybURhdGE7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBWRVJTSU9OID0gcmVxdWlyZSgnLi4vZW52L2RhdGEnKS52ZXJzaW9uO1xudmFyIEF4aW9zRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL0F4aW9zRXJyb3InKTtcblxudmFyIHZhbGlkYXRvcnMgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKGZ1bmN0aW9uKHR5cGUsIGkpIHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbnZhciBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG9wdCwgb3B0cykge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCcgKyAodmVyc2lvbiA/ICcgaW4gJyArIHZlcnNpb24gOiAnJykpLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9ERVBSRUNBVEVEXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICB9XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgdmFyIG9wdCA9IGtleXNbaV07XG4gICAgdmFyIHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIHZhciByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFzc2VydE9wdGlvbnM6IGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnM6IHZhbGlkYXRvcnNcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbnZhciBraW5kT2YgPSAoZnVuY3Rpb24oY2FjaGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHRoaW5nKSB7XG4gICAgdmFyIHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbiAgfTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5mdW5jdGlvbiBraW5kT2ZUZXN0KHR5cGUpIHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzS2luZE9mKHRoaW5nKSB7XG4gICAgcmV0dXJuIGtpbmRPZih0aGluZykgPT09IHR5cGU7XG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWwpIHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGU7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGb3JtRGF0YSh0aGluZykge1xuICB2YXIgcGF0dGVybiA9ICdbb2JqZWN0IEZvcm1EYXRhXSc7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fFxuICAgIHRvU3RyaW5nLmNhbGwodGhpbmcpID09PSBwYXR0ZXJuIHx8XG4gICAgKGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09IHBhdHRlcm4pXG4gICk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAobmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05TJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRba2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5mdW5jdGlvbiBleHRlbmQoYSwgYiwgdGhpc0FyZykge1xuICBmb3JFYWNoKGIsIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHRoaXNBcmcgJiYgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqIEByZXR1cm4ge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5mdW5jdGlvbiBzdHJpcEJPTShjb250ZW50KSB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICovXG5cbmZ1bmN0aW9uIGluaGVyaXRzKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpIHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZpbHRlcl1cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gdG9GbGF0T2JqZWN0KHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyKSB7XG4gIHZhciBwcm9wcztcbiAgdmFyIGk7XG4gIHZhciBwcm9wO1xuICB2YXIgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufVxuXG4vKlxuICogZGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgdmFyIGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdFxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkodGhpbmcpIHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIHZhciBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoaXNVbmRlZmluZWQoaSkpIHJldHVybiBudWxsO1xuICB2YXIgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG52YXIgaXNUeXBlZEFycmF5ID0gKGZ1bmN0aW9uKFR5cGVkQXJyYXkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHRoaW5nKSB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FycmF5OiBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gIGlzRm9ybURhdGE6IGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3OiBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICBpc051bWJlcjogaXNOdW1iZXIsXG4gIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdDogaXNQbGFpbk9iamVjdCxcbiAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLFxuICBpc0RhdGU6IGlzRGF0ZSxcbiAgaXNGaWxlOiBpc0ZpbGUsXG4gIGlzQmxvYjogaXNCbG9iLFxuICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbTogaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zOiBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNTdGFuZGFyZEJyb3dzZXJFbnY6IGlzU3RhbmRhcmRCcm93c2VyRW52LFxuICBmb3JFYWNoOiBmb3JFYWNoLFxuICBtZXJnZTogbWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltLFxuICBzdHJpcEJPTTogc3RyaXBCT00sXG4gIGluaGVyaXRzOiBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0OiB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZjoga2luZE9mLFxuICBraW5kT2ZUZXN0OiBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aDogZW5kc1dpdGgsXG4gIHRvQXJyYXk6IHRvQXJyYXksXG4gIGlzVHlwZWRBcnJheTogaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0OiBpc0ZpbGVMaXN0XG59O1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdXRpbHMqL1xuaW1wb3J0IHtcbiAgaXNQdXJlT2JqZWN0LFxuICBzZXRWYWx1ZUlmTm90TmlsLFxufSBmcm9tICcuLi91dGlscyc7XG4vKnR5cGVzKi9cbmltcG9ydCBIdHRwTWV0aG9kcyBmcm9tICcuLi9yZXF1ZXN0L0h0dHBNZXRob2RzJztcbmltcG9ydCB7IENsaWVudFBhcmFtcyB9IGZyb20gJy4vQ2xpZW50JztcbmltcG9ydCB7IFJlcXVlc3RDb25maWcsIFJlcXVlc3RPcHRpb25zLCBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcgfSBmcm9tICcuLi9yZXF1ZXN0L1JlcXVlc3QnO1xuLypsaWIqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQgcGFja2FnZUpTT04gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbi8qb3RoZXIqL1xuXG5leHBvcnQgdHlwZSBDbGllbnRDb25uZWN0UGFyYW1zID0gUGljazxDbGllbnRQYXJhbXMsICdjb25maWcnIHwgJ29wdGlvbnMnPjtcblxuY2xhc3MgQ2xpZW50IHtcbiAgcHJpdmF0ZSB2ZXJzaW9uITogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uZmlnITogUmVxdWVzdENvbmZpZztcbiAgcHJpdmF0ZSBvcHRpb25zITogUmVxdWVzdE9wdGlvbnM7XG5cbiAgcHJpdmF0ZSBhcGlLZXk/OiBzdHJpbmc7XG4gIHByaXZhdGUgYXBpU2VjcmV0Pzogc3RyaW5nO1xuICBwcml2YXRlIGFwaVRva2VuPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmFtczogQ2xpZW50UGFyYW1zKSB7XG4gICAgaWYgKCFpc1B1cmVPYmplY3QocGFyYW1zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInBhcmFtc1wiIG11c3QgYmUgb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0KHRoaXMuY2xvbmVQYXJhbXMocGFyYW1zKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UGFja2FnZVZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVyc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBUElLZXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpS2V5O1xuICB9XG5cbiAgcHVibGljIGdldEFQSVNlY3JldCgpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZWNyZXQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0QVBJVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpVG9rZW47XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29uZmlnKCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuY29uZmlnIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0T3B0aW9ucygpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLm9wdGlvbnMgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQocmVzb3VyY2U6IHN0cmluZywgY29uZmlnPzogUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLkdldCwgcmVzb3VyY2UsIGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgcG9zdChyZXNvdXJjZTogc3RyaW5nLCBjb25maWc/OiBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuUG9zdCwgcmVzb3VyY2UsIGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgcHV0KHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCBIdHRwTWV0aG9kcy5QdXQsIHJlc291cmNlLCBjb25maWcpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZShyZXNvdXJjZTogc3RyaW5nLCBjb25maWc/OiBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuRGVsZXRlLCByZXNvdXJjZSwgY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdChwYXJhbXM6IENsaWVudFBhcmFtcykge1xuICAgIGlmICghaXNQdXJlT2JqZWN0KHBhcmFtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJwYXJhbXNcIiBtdXN0IGJlIG9iamVjdCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIGFwaVRva2VuLFxuICAgICAgYXBpS2V5LFxuICAgICAgYXBpU2VjcmV0LFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGNvbmZpZyxcbiAgICB9ID0gcGFyYW1zO1xuXG4gICAgdGhpcy52ZXJzaW9uID0gQ2xpZW50LnBhY2thZ2VKU09OLnZlcnNpb247XG5cbiAgICB0aGlzLnNldENvbmZpZyhjb25maWcgPz8gbnVsbCk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMgPz8gbnVsbCk7XG5cbiAgICByZXR1cm4gJ2FwaVRva2VuJyBpbiBwYXJhbXNcbiAgICAgID8gdGhpcy50b2tlbkNvbm5lY3RTdHJhdGVneShhcGlUb2tlbilcbiAgICAgIDogdGhpcy5iYXNpY0Nvbm5lY3RTdHJhdGVneShhcGlLZXksIGFwaVNlY3JldCk7XG4gIH1cblxuICBwcml2YXRlIGNsb25lUGFyYW1zKHBhcmFtczogQ2xpZW50UGFyYW1zKSB7XG4gICAgaWYgKCFpc1B1cmVPYmplY3QocGFyYW1zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInBhcmFtc1wiIG11c3QgYmUgb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xvbmVkUGFyYW1zID0geyAuLi5wYXJhbXMgfTtcblxuICAgIGlmIChwYXJhbXMuY29uZmlnKSB7XG4gICAgICBjbG9uZWRQYXJhbXMuY29uZmlnID0ge1xuICAgICAgICAuLi5wYXJhbXMuY29uZmlnLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLm9wdGlvbnMpIHtcbiAgICAgIGNsb25lZFBhcmFtcy5vcHRpb25zID0ge1xuICAgICAgICAuLi5wYXJhbXMub3B0aW9ucyxcbiAgICAgIH07XG5cbiAgICAgIGlmIChjbG9uZWRQYXJhbXMub3B0aW9ucy5wcm94eSkge1xuICAgICAgICBjbG9uZWRQYXJhbXMub3B0aW9ucy5wcm94eSA9IHtcbiAgICAgICAgICAuLi5jbG9uZWRQYXJhbXMub3B0aW9ucy5wcm94eSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNsb25lZFBhcmFtcy5vcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgY2xvbmVkUGFyYW1zLm9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICAuLi5jbG9uZWRQYXJhbXMub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbG9uZWRQYXJhbXM7XG4gIH1cblxuICBwcml2YXRlIHNldENvbmZpZyhjdXN0b21Db25maWc6IFBhcnRpYWw8UmVxdWVzdENvbmZpZz4gfCBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBjdXN0b21Db25maWcgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwiY3VzdG9tQ29uZmlnXCIgbXVzdCBiZSBvYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZyA9IHsgLi4uQ2xpZW50LmNvbmZpZyB9O1xuXG4gICAgaWYgKGN1c3RvbUNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgc2V0VmFsdWVJZk5vdE5pbChjb25maWcsICdob3N0JywgY3VzdG9tQ29uZmlnLmhvc3QpO1xuICAgICAgc2V0VmFsdWVJZk5vdE5pbChjb25maWcsICdvdXRwdXQnLCBjdXN0b21Db25maWcub3V0cHV0KTtcbiAgICAgIHNldFZhbHVlSWZOb3ROaWwoY29uZmlnLCAndmVyc2lvbicsIGN1c3RvbUNvbmZpZy52ZXJzaW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRPcHRpb25zKG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zIHwgbnVsbCkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJvcHRpb25zXCIgbXVzdCBiZSBvYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgPz8ge307XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgdG9rZW5Db25uZWN0U3RyYXRlZ3koYXBpVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghYXBpVG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWFpbGpldCBBUElfVE9LRU4gaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFwaVRva2VuID0gYXBpVG9rZW47XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgYmFzaWNDb25uZWN0U3RyYXRlZ3koYXBpS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsIGFwaVNlY3JldDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFhcGlLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWFpbGpldCBBUElfS0VZIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghYXBpU2VjcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01haWxqZXQgQVBJX1NFQ1JFVCBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIHRoaXMuYXBpS2V5ID0gYXBpS2V5O1xuICAgIHRoaXMuYXBpU2VjcmV0ID0gYXBpU2VjcmV0O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFwaUNvbm5lY3QoYXBpS2V5OiBzdHJpbmcsIGFwaVNlY3JldDogc3RyaW5nLCBwYXJhbXM/OiBDbGllbnRDb25uZWN0UGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGllbnQoeyBhcGlLZXksIGFwaVNlY3JldCwgLi4ucGFyYW1zIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBzbXNDb25uZWN0KGFwaVRva2VuOiBzdHJpbmcsIHBhcmFtcz86IENsaWVudENvbm5lY3RQYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsaWVudCh7IGFwaVRva2VuLCAuLi5wYXJhbXMgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNvbmZpZzogUmVhZG9ubHk8UmVxdWVzdENvbmZpZz4gPSBPYmplY3QuZnJlZXplKHtcbiAgICBob3N0OiAnYXBpLm1haWxqZXQuY29tJyxcbiAgICB2ZXJzaW9uOiAndjMnLFxuICAgIG91dHB1dDogJ2pzb24nLFxuICB9IGFzIGNvbnN0KTtcblxuICBwdWJsaWMgc3RhdGljIHBhY2thZ2VKU09OID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgLi4ucGFja2FnZUpTT04sXG4gIH0gYXMgY29uc3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDbGllbnQ7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp1dGlscyovXG4vKnR5cGVzKi9cbmltcG9ydCBIdHRwTWV0aG9kcyBmcm9tICcuL3JlcXVlc3QvSHR0cE1ldGhvZHMnO1xuLypsaWIqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0L2luZGV4JztcbmltcG9ydCBDbGllbnQgZnJvbSAnLi9jbGllbnQvaW5kZXgnO1xuLypvdGhlciovXG5cbmNsYXNzIE1haWxqZXQgZXh0ZW5kcyBDbGllbnQge1xuICBzdGF0aWMgUmVxdWVzdCA9IFJlcXVlc3Q7XG4gIHN0YXRpYyBIdHRwTWV0aG9kcyA9IEh0dHBNZXRob2RzO1xuICBzdGF0aWMgQ2xpZW50ID0gQ2xpZW50O1xufVxuXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzL2FwaSc7XG5leHBvcnQgeyBDbGllbnQsIFJlcXVlc3QsIEh0dHBNZXRob2RzIH07XG5leHBvcnQgZGVmYXVsdCBNYWlsamV0O1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuLyp1dGlscyovXG4vKmxpYiovXG4vKm90aGVyKi9cblxuZW51bSBIdHRwTWV0aG9kcyB7XG4gIEdldCA9ICdnZXQnLFxuICBQb3N0ID0gJ3Bvc3QnLFxuICBQdXQgPSAncHV0JyxcbiAgRGVsZXRlID0gJ2RlbGV0ZSdcbn1cblxuZXhwb3J0IGRlZmF1bHQgSHR0cE1ldGhvZHM7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuaW1wb3J0IHVybEpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IEpTT05CaWdJbnQgZnJvbSAnanNvbi1iaWdpbnQnO1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zRXJyb3IgfSBmcm9tICdheGlvcyc7XG4vKnV0aWxzKi9cbmltcG9ydCB7IHNldFZhbHVlSWZOb3ROaWwgfSBmcm9tICcuLi91dGlscy9pbmRleCc7XG4vKnR5cGVzKi9cbmltcG9ydCB7IFRPYmplY3QgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBMaWJyYXJ5UmVzcG9uc2UsIExpYnJhcnlMb2NhbFJlc3BvbnNlIH0gZnJvbSAnLi4vdHlwZXMvYXBpJztcbmltcG9ydCBIdHRwTWV0aG9kcyBmcm9tICcuL0h0dHBNZXRob2RzJztcbmltcG9ydCB7XG4gIFJlcXVlc3RDb25maWcsXG4gIFJlcXVlc3REYXRhLFxuICBSZXF1ZXN0UGFyYW1zLFxuICBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcsXG4gIFJlcXVlc3RBeGlvc0NvbmZpZyxcbiAgU3ViUGF0aCxcbn0gZnJvbSAnLi9SZXF1ZXN0Jztcbi8qbGliKi9cbmltcG9ydCBDbGllbnQgZnJvbSAnLi4vY2xpZW50Jztcbi8qb3RoZXIqL1xuXG50eXBlIFVua25vd25SZWMgPSBUT2JqZWN0LlVua25vd25SZWNcblxuY29uc3QgSlNPTmIgPSBKU09OQmlnSW50KHsgc3RvcmVBc1N0cmluZzogdHJ1ZSB9KTtcblxuY2xhc3MgUmVxdWVzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50OiBDbGllbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0aG9kOiBIdHRwTWV0aG9kcztcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFBhcnRpYWw8UmVxdWVzdENvbmZpZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2U6IHN0cmluZztcblxuICBwcml2YXRlIHVybDogc3RyaW5nO1xuICBwcml2YXRlIHN1YlBhdGg6IFN1YlBhdGg7XG4gIHByaXZhdGUgYWN0aW9uUGF0aDogc3RyaW5nIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjbGllbnQ6IENsaWVudCxcbiAgICBtZXRob2Q6IEh0dHBNZXRob2RzLFxuICAgIHJlc291cmNlOiBzdHJpbmcsXG4gICAgY29uZmlnPzogUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnLFxuICApIHtcbiAgICBpZiAoIShjbGllbnQgaW5zdGFuY2VvZiBDbGllbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwiY2xpZW50XCIgbXVzdCBiZSBpbnN0YW5jZSBvZiBDbGllbnQnKTtcbiAgICB9XG5cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoSHR0cE1ldGhvZHMpLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJtZXRob2RcIiBtdXN0IGJlIG9uZSBvZiBzdXBwb3J0ZWQgbWV0aG9kczogZ2V0LCBwb3N0LCBwdXQsIGRlbGV0ZScpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVzb3VyY2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicmVzb3VyY2VcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgdGhpcy51cmwgPSByZXNvdXJjZS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMucmVzb3VyY2UgPSByZXNvdXJjZS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuc3ViUGF0aCA9IHRoaXMuYnVpbGRTdWJQYXRoKCk7XG4gICAgdGhpcy5hY3Rpb25QYXRoID0gbnVsbDtcblxuICAgIHRoaXMuY29uZmlnID0geyAuLi5jb25maWcgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVc2VyQWdlbnQoKSB7XG4gICAgcmV0dXJuIGBtYWlsamV0LWFwaS12My1ub2RlanMvJHt0aGlzLmNsaWVudC5nZXRQYWNrYWdlVmVyc2lvbigpfWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3JlZGVudGlhbHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwaVRva2VuOiB0aGlzLmNsaWVudC5nZXRBUElUb2tlbigpLFxuICAgICAgYXBpS2V5OiB0aGlzLmNsaWVudC5nZXRBUElLZXkoKSxcbiAgICAgIGFwaVNlY3JldDogdGhpcy5jbGllbnQuZ2V0QVBJU2VjcmV0KCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udGVudFR5cGUodXJsOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJ1cmxcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIHJldHVybiB1cmwuaW5kZXhPZigndGV4dDpwbGFpbicpID4gLTFcbiAgICAgID8gJ3RleHQvcGxhaW4nXG4gICAgICA6ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVxdWVzdEJvZHkoZGF0YTogUmVxdWVzdERhdGEpIHtcbiAgICByZXR1cm4gW1xuICAgICAgSHR0cE1ldGhvZHMuUHV0LFxuICAgICAgSHR0cE1ldGhvZHMuUG9zdCxcbiAgICAgIEh0dHBNZXRob2RzLkRlbGV0ZSxcbiAgICBdLmluY2x1ZGVzKHRoaXMubWV0aG9kKSA/IGRhdGEgOiB7fTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGdWxsVXJsKCkge1xuICAgIGNvbnN0IGNsaWVudENvbmZpZyA9IHRoaXMuY2xpZW50LmdldENvbmZpZygpO1xuXG4gICAgY29uc3QgaG9zdCA9IHRoaXMuY29uZmlnLmhvc3QgPz8gY2xpZW50Q29uZmlnLmhvc3Q7XG4gICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuY29uZmlnLnZlcnNpb24gPz8gY2xpZW50Q29uZmlnLnZlcnNpb247XG5cbiAgICByZXR1cm4gdXJsSm9pbihSZXF1ZXN0LnByb3RvY29sLCBob3N0LCB2ZXJzaW9uLCB0aGlzLnN1YlBhdGgsIHRoaXMudXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTdWJQYXRoKCkge1xuICAgIGlmICh0aGlzLmFjdGlvblBhdGgpIHtcbiAgICAgIGNvbnN0IGlzQ29udGFjdExpc3RXaXRoQ1NWID0gdGhpcy5yZXNvdXJjZSA9PT0gJ2NvbnRhY3RzbGlzdCcgJiYgdGhpcy5hY3Rpb25QYXRoID09PSAnY3N2ZGF0YS90ZXh0OnBsYWluJztcbiAgICAgIGNvbnN0IGlzQmF0Y2hKb2JXaXRoQ1NWID0gdGhpcy5yZXNvdXJjZSA9PT0gJ2JhdGNoam9iJyAmJiB0aGlzLmFjdGlvblBhdGggPT09ICdjc3ZlcnJvci90ZXh0OmNzdic7XG5cbiAgICAgIHJldHVybiAoaXNDb250YWN0TGlzdFdpdGhDU1YgfHwgaXNCYXRjaEpvYldpdGhDU1YpID8gJ0RBVEEnIDogdGhpcy5zdWJQYXRoO1xuICAgIH1cbiAgICBjb25zdCBpc1NlbmRSZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UgPT09ICdzZW5kJztcbiAgICBjb25zdCByZXNvdXJjZUNvbnRhaW5TTVMgPSB0aGlzLnJlc291cmNlLmluZGV4T2YoJ3NtcycpID4gLTE7XG5cbiAgICByZXR1cm4gKCFpc1NlbmRSZXNvdXJjZSAmJiAhcmVzb3VyY2VDb250YWluU01TKSA/ICdSRVNUJyA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlUmVxdWVzdCh1cmw6IHN0cmluZywgZGF0YTogUmVxdWVzdERhdGEsIHBhcmFtczogUmVxdWVzdFBhcmFtcykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcyNyZXF1ZXN0LWNvbmZpZ1xuICAgIGNvbnN0IHJlcXVlc3RDb25maWc6IFJlcXVlc3RBeGlvc0NvbmZpZyA9IHtcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIGRhdGE6IHRoaXMuZ2V0UmVxdWVzdEJvZHkoZGF0YSksXG4gICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdVc2VyLUFnZW50JzogdGhpcy5nZXRVc2VyQWdlbnQoKSxcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IHRoaXMuZ2V0Q29udGVudFR5cGUodXJsKSxcbiAgICAgIH0sXG4gICAgICB0cmFuc2Zvcm1SZXNwb25zZShyZXNwb25zZURhdGE6IHVua25vd24pIHtcbiAgICAgICAgY29uc3QgZGF0YUlzU3RyaW5nID0gdHlwZW9mIHJlc3BvbnNlRGF0YSA9PT0gJ3N0cmluZyc7XG4gICAgICAgIGNvbnN0IGlzSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlRGF0YSAmJiBkYXRhSXNTdHJpbmcgJiYgaXNKU09OUmVxdWVzdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIFJlcXVlc3QucGFyc2VUb0pTT05iKHJlc3BvbnNlRGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRhO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gQlJPV1NFUiBTSURFXG4gICAgaWYgKFJlcXVlc3QuaXNCcm93c2VyKCkpIHtcbiAgICAgIHJlcXVlc3RDb25maWcuaGVhZGVyc1snWC1Vc2VyLUFnZW50J10gPSByZXF1ZXN0Q29uZmlnLmhlYWRlcnNbJ1VzZXItQWdlbnQnXTtcbiAgICB9XG5cbiAgICAvLyBBVVRIXG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB0aGlzLmdldENyZWRlbnRpYWxzKCk7XG5cbiAgICBpZiAoY3JlZGVudGlhbHMuYXBpVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RDb25maWcuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke2NyZWRlbnRpYWxzLmFwaVRva2VufWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RDb25maWcuYXV0aCA9IHtcbiAgICAgICAgdXNlcm5hbWU6IGNyZWRlbnRpYWxzLmFwaUtleSBhcyBzdHJpbmcsXG4gICAgICAgIHBhc3N3b3JkOiBjcmVkZW50aWFscy5hcGlTZWNyZXQgYXMgc3RyaW5nLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBPUFRJT05TXG4gICAgY29uc3QgY2xpZW50Q29uZmlnID0gdGhpcy5jbGllbnQuZ2V0Q29uZmlnKCk7XG4gICAgY29uc3QgY2xpZW50T3B0aW9ucyA9IHRoaXMuY2xpZW50LmdldE9wdGlvbnMoKTtcblxuICAgIC8vIDEuIFRpbWVvdXRcbiAgICBpZiAoY2xpZW50T3B0aW9ucy50aW1lb3V0KSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLnRpbWVvdXQgPSBjbGllbnRPcHRpb25zLnRpbWVvdXQ7XG4gICAgfVxuXG4gICAgLy8gMi4gUHJveHlcbiAgICBpZiAoY2xpZW50T3B0aW9ucy5wcm94eSkge1xuICAgICAgcmVxdWVzdENvbmZpZy5wcm94eSA9IGNsaWVudE9wdGlvbnMucHJveHk7XG4gICAgfVxuXG4gICAgLy8gMy4gSGVhZGVyc1xuICAgIGlmIChjbGllbnRPcHRpb25zLmhlYWRlcnMgJiYgT2JqZWN0LmtleXMoY2xpZW50T3B0aW9ucy5oZWFkZXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnMgPSB7XG4gICAgICAgIC4uLnJlcXVlc3RDb25maWcuaGVhZGVycyxcbiAgICAgICAgLi4uY2xpZW50T3B0aW9ucy5oZWFkZXJzLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyA0LiBPdXRwdXRcbiAgICBjb25zdCBvdXRwdXQgPSB0aGlzLmNvbmZpZy5vdXRwdXQgPz8gY2xpZW50Q29uZmlnLm91dHB1dDtcbiAgICBpZiAob3V0cHV0KSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLnJlc3BvbnNlVHlwZSA9IG91dHB1dDtcbiAgICB9XG5cbiAgICAvLyBOT0RFIFNJREVcbiAgICAvLyA1LiBNYXggcmVxdWVzdCBjb250ZW50IHNpemVcbiAgICBpZiAoY2xpZW50T3B0aW9ucy5tYXhCb2R5TGVuZ3RoKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLm1heEJvZHlMZW5ndGggPSBjbGllbnRPcHRpb25zLm1heEJvZHlMZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gTk9ERSBTSURFXG4gICAgLy8gNi4gTWF4IHJlc3BvbnNlIGNvbnRlbnQgc2l6ZVxuICAgIGlmIChjbGllbnRPcHRpb25zLm1heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgIHJlcXVlc3RDb25maWcubWF4Q29udGVudExlbmd0aCA9IGNsaWVudE9wdGlvbnMubWF4Q29udGVudExlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXhpb3MocmVxdWVzdENvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIHNldEJhc2VVUkwoYmFzZVVybDogc3RyaW5nKSB7XG4gICAgdGhpcy51cmwgPSBiYXNlVXJsLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgaWQodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGlmICghWydzdHJpbmcnLCAnbnVtYmVyJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInZhbHVlXCIgbXVzdCBiZSBzdHJpbmcgb3IgbnVtYmVyJyk7XG4gICAgfVxuXG4gICAgdGhpcy51cmwgPSB1cmxKb2luKHRoaXMudXJsLCB2YWx1ZS50b1N0cmluZygpKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFjdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwibmFtZVwiIG11c3QgYmUgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgdGhpcy5hY3Rpb25QYXRoID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgc3dpdGNoICh0aGlzLmFjdGlvblBhdGgpIHtcbiAgICAgIGNhc2UgJ2NzdmRhdGEnOiB7XG4gICAgICAgIHRoaXMuYWN0aW9uUGF0aCA9ICdjc3ZkYXRhL3RleHQ6cGxhaW4nO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NzdmVycm9yJzoge1xuICAgICAgICB0aGlzLmFjdGlvblBhdGggPSAnY3N2ZXJyb3IvdGV4dDpjc3YnO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cmwgPSB1cmxKb2luKHRoaXMudXJsLCB0aGlzLmFjdGlvblBhdGgpO1xuICAgIHRoaXMuc3ViUGF0aCA9IHRoaXMuYnVpbGRTdWJQYXRoKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0PEJvZHkgZXh0ZW5kcyBSZXF1ZXN0RGF0YT4oXG4gICAgZGF0YT86IFJlcXVlc3REYXRhLFxuICAgIHBhcmFtcz86IFJlcXVlc3RQYXJhbXMsXG4gICAgcGVyZm9ybUFQSUNhbGw/OiB0cnVlLFxuICApOiBQcm9taXNlPExpYnJhcnlSZXNwb25zZTxCb2R5Pj5cblxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxCb2R5IGV4dGVuZHMgUmVxdWVzdERhdGEsIFBhcmFtcyBleHRlbmRzIFVua25vd25SZWM+KFxuICAgIGRhdGE/OiBCb2R5LFxuICAgIHBhcmFtcz86IFBhcmFtcyxcbiAgICBwZXJmb3JtQVBJQ2FsbD86IGZhbHNlLFxuICApOiBQcm9taXNlPExpYnJhcnlMb2NhbFJlc3BvbnNlPEJvZHksIFBhcmFtcz4+XG5cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8Qm9keSBleHRlbmRzIFJlcXVlc3REYXRhLCBQYXJhbXMgZXh0ZW5kcyBVbmtub3duUmVjPihcbiAgICBkYXRhOiBSZXF1ZXN0RGF0YSB8IEJvZHkgPSB7fSxcbiAgICBwYXJhbXM6IFJlcXVlc3RQYXJhbXMgfCBQYXJhbXMgPSB7fSxcbiAgICBwZXJmb3JtQVBJQ2FsbCA9IHRydWUsXG4gICk6IFByb21pc2U8TGlicmFyeVJlc3BvbnNlPEJvZHk+IHwgTGlicmFyeUxvY2FsUmVzcG9uc2U8Qm9keSwgUGFyYW1zPj4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRGdWxsVXJsKCk7XG4gICAgdGhpcy5zZXRCYXNlVVJMKHRoaXMucmVzb3VyY2UpO1xuXG4gICAgaWYgKCFwZXJmb3JtQVBJQ2FsbCkge1xuICAgICAgY29uc3QgYm9keSA9IHRoaXMuZ2V0UmVxdWVzdEJvZHkoZGF0YSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgdXJsLFxuICAgICAgfSBhcyBMaWJyYXJ5TG9jYWxSZXNwb25zZTxCb2R5LCBQYXJhbXM+O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMubWFrZVJlcXVlc3QodXJsLCBkYXRhLCBwYXJhbXMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgIGJvZHk6IHJlc3BvbnNlLmRhdGEsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IpIHtcbiAgICAgICAgY29uc3QgZXJyb3I6IGFueSA9IG5ldyBFcnJvcigpO1xuXG4gICAgICAgIGVycm9yLmNvZGUgPSBlcnIuY29kZTtcbiAgICAgICAgZXJyb3IuY29uZmlnID0gZXJyLmNvbmZpZztcblxuICAgICAgICBpZiAoZXJyLnJlc3BvbnNlKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGRhdGE6IGJvZHksXG4gICAgICAgICAgfSA9IGVyci5yZXNwb25zZTtcblxuICAgICAgICAgIGVycm9yLnJlc3BvbnNlID0gZXJyLnJlc3BvbnNlO1xuXG4gICAgICAgICAgZXJyb3Iuc3RhdHVzQ29kZSA9IHN0YXR1cztcbiAgICAgICAgICBlcnJvci5zdGF0dXNUZXh0ID0gc3RhdHVzVGV4dDtcblxuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGJvZHk/LkVycm9yTWVzc2FnZSA/PyBlcnIubWVzc2FnZTtcbiAgICAgICAgICBlcnJvci5vcmlnaW5hbE1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgZXJyb3IubWVzc2FnZSA9IGBVbnN1Y2Nlc3NmdWw6IFN0YXR1cyBDb2RlOiBcIiR7ZXJyb3Iuc3RhdHVzQ29kZX1cIiBNZXNzYWdlOiBcIiR7ZXJyb3JNZXNzYWdlfVwiYDtcblxuICAgICAgICAgIGlmIChib2R5KSB7XG4gICAgICAgICAgICAvLyBodHRwczovL2Rldi5tYWlsamV0LmNvbS9lbWFpbC9ndWlkZXMvc2VuZC1hcGktdjMxLyNzZW5kLWluLWJ1bGtcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gYm9keS5NZXNzYWdlcz8uWzBdPy5FcnJvcnM/LlswXT8uRXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdWxsTWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSArPSBgO1xcbiR7ZnVsbE1lc3NhZ2V9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdjMuMSBjYXNlXG4gICAgICAgICAgICAvLyBodHRwczovL2Rldi5tYWlsamV0LmNvbS9lbWFpbC9ndWlkZXMvc2VuZC1hcGktdjMxLyNzYW5kYm94LW1vZGVcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvck1lc3NhZ2UnLCBib2R5LkVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICBzZXRWYWx1ZUlmTm90TmlsKGVycm9yLCAnRXJyb3JDb2RlJywgYm9keS5FcnJvckNvZGUpO1xuICAgICAgICAgICAgc2V0VmFsdWVJZk5vdE5pbChlcnJvciwgJ0Vycm9ySWRlbnRpZmllcicsIGJvZHkuRXJyb3JJZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvclJlbGF0ZWRUbycsIGJvZHkuRXJyb3JSZWxhdGVkVG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlcnJvci5yZXNwb25zZSA9IG51bGw7XG5cbiAgICAgICAgICBlcnJvci5zdGF0dXNDb2RlID0gbnVsbDtcbiAgICAgICAgICBlcnJvci5zdGF0dXNUZXh0ID0gbnVsbDtcblxuICAgICAgICAgIGVycm9yLm9yaWdpbmFsTWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgVW5zdWNjZXNzZnVsOiBFcnJvciBDb2RlOiBcIiR7ZXJyb3IuY29kZX1cIiBNZXNzYWdlOiBcIiR7ZXJyLm1lc3NhZ2V9XCJgO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHByb3RvY29sID0gJ2h0dHBzOi8vJyBhcyBjb25zdDtcblxuICBwdWJsaWMgc3RhdGljIHBhcnNlVG9KU09OYih0ZXh0OiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwidGV4dFwiIG11c3QgYmUgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgbGV0IGJvZHk7XG4gICAgdHJ5IHtcbiAgICAgIGJvZHkgPSBKU09OYi5wYXJzZSh0ZXh0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBib2R5ID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzQnJvd3NlcigpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCc7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVxdWVzdDtcbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBEcmFmdENhbXBhaWduIHtcbiAgZXhwb3J0IGVudW0gRWRpdE1vZGUge1xuICAgIFRvb2wyID0gJ3Rvb2wyJyxcbiAgICBIVE1MMiA9ICdodG1sMicsXG4gICAgTUpNTCA9ICdtam1sJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ2FtcGFpZ25EcmFmdFN0YXR1cyB7XG4gICAgQVhDYW5jZWxlZCA9IC0zLFxuICAgIERlbGV0ZWQgPSAtMixcbiAgICBBcmNoaXZlZCA9IC0xLFxuICAgIERyYWZ0ID0gMCxcbiAgICBQcm9ncmFtbWVkID0gMSxcbiAgICBTZW50ID0gMixcbiAgICBBWFRlc3RlZCA9IDMsXG4gICAgQVhTZWxlY3RlZCA9IDRcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENhbXBhaWduRHJhZnRTZW5kaW5nU3RhdHVzIHtcbiAgICBBWENhbmNlbGxlZCA9ICdBWENhbmNlbGxlZCcsXG4gICAgRGVsZXRlZCA9ICdEZWxldGVkJyxcbiAgICBBcmNoaXZlZCA9ICdBcmNoaXZlZCcsXG4gICAgRHJhZnQgPSAnRHJhZnQnLFxuICAgIFByb2dyYW1tZWQgPSAnUHJvZ3JhbW1lZCcsXG4gICAgU2VudCA9ICdTZW50JyxcbiAgICBBWFRlc3RlZCA9ICdBWFRlc3RlZCcsXG4gICAgQVhTZWxlY3RlZCA9ICdBWFNlbGVjdGVkJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBSZWNpcGllbnQge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTmFtZT86IHN0cmluZ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDYW1wYWlnbkRyYWZ0PEFYVGVzdGluZyA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBBWEZyYWN0aW9uOiBudW1iZXI7XG4gICAgQVhGcmFjdGlvbk5hbWU6IHN0cmluZztcbiAgICBBWFRlc3Rpbmc6IEFYVGVzdGluZztcbiAgICBDdXJyZW50OiBudW1iZXI7XG4gICAgRWRpdE1vZGU6IEVkaXRNb2RlO1xuICAgIElzU3RhcnJlZDogYm9vbGVhbjtcbiAgICBJc1RleHRQYXJ0SW5jbHVkZWQ6IGJvb2xlYW47XG4gICAgUmVwbHlFbWFpbDogc3RyaW5nO1xuICAgIFNlbmRlck5hbWU6IHN0cmluZztcbiAgICBUZW1wbGF0ZUlEOiBudW1iZXI7XG4gICAgVGl0bGU6IHN0cmluZztcbiAgICBDYW1wYWlnbklEOiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0SUQ6IG51bWJlcjtcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBEZWxpdmVyZWRBdDogc3RyaW5nO1xuICAgIExvY2FsZTogc3RyaW5nO1xuICAgIE1vZGlmaWVkQXQ6IHN0cmluZztcbiAgICBQcmVzZXQ6IHN0cmluZztcbiAgICBTZWdtZW50YXRpb25JRDogbnVtYmVyO1xuICAgIFNlbmRlcjogc3RyaW5nO1xuICAgIFNlbmRlckVtYWlsOiBzdHJpbmc7XG4gICAgU3RhdHVzOiBDYW1wYWlnbkRyYWZ0U3RhdHVzO1xuICAgIFN1YmplY3Q6IHN0cmluZztcbiAgICBVcmw6IHN0cmluZztcbiAgICBVc2VkOiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudDxIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICBIZWFkZXJzOiBIZWFkZXJzO1xuICAgICdIdG1sLXBhcnQnOiBzdHJpbmc7XG4gICAgJ1RleHQtcGFydCc6IHN0cmluZztcbiAgICBNSk1MQ29udGVudDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDYW1wYWlnbkRyYWZ0U2NoZWR1bGUge1xuICAgIERhdGU6IHN0cmluZztcbiAgICBTdGF0dXM6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdEJvZHk8QVhUZXN0aW5nID0gQ29tbW9uLlVua25vd25SZWM+ID0ge1xuICAgIExvY2FsZTogc3RyaW5nO1xuICAgIFN1YmplY3Q6IHN0cmluZztcblxuICAgIEFYRnJhY3Rpb24/OiBudW1iZXI7XG4gICAgQVhGcmFjdGlvbk5hbWU/OiBzdHJpbmc7XG4gICAgQVhUZXN0aW5nPzogQVhUZXN0aW5nO1xuICAgIEN1cnJlbnQ/OiBudW1iZXI7XG4gICAgRWRpdE1vZGU/OiBFZGl0TW9kZTtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICAgIElzVGV4dFBhcnRJbmNsdWRlZD86IGJvb2xlYW47XG4gICAgUmVwbHlFbWFpbD86IHN0cmluZztcbiAgICBTZW5kZXJOYW1lPzogc3RyaW5nO1xuICAgIFRlbXBsYXRlSUQ/OiBudW1iZXI7XG4gICAgVGl0bGU/OiBzdHJpbmc7XG4gICAgQ29udGFjdHNMaXN0SUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0QWx0Pzogc3RyaW5nO1xuICAgIFNlZ21lbnRhdGlvbklEPzogbnVtYmVyO1xuICAgIFNlZ21lbnRhdGlvbkFsdD86IHN0cmluZztcbiAgICBTZW5kZXI/OiBzdHJpbmc7XG4gICAgU2VuZGVyRW1haWw/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnbkRyYWZ0Qm9keTxBWFRlc3RpbmcgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgIE9taXQ8UGFydGlhbDxQb3N0Q2FtcGFpZ25EcmFmdEJvZHk8QVhUZXN0aW5nPj4sICdDb250YWN0c0xpc3RBbHQnPiAmXG4gIHtcbiAgICBTdGF0dXM/OiBDYW1wYWlnbkRyYWZ0U3RhdHVzXG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbkRyYWZ0UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBBWFRlc3Rpbmc/OiBudW1iZXI7XG4gICAgQ2FtcGFpZ24/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIERlbGl2ZXJlZEF0Pzogc3RyaW5nO1xuICAgIEVkaXRNb2RlPzogRWRpdE1vZGU7XG4gICAgSXNBcmNoaXZlZD86IGJvb2xlYW47XG4gICAgSXNDYW1wYWlnbj86IGJvb2xlYW47XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc0hhbmRsZWQ/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgTW9kaWZpZWQ/OiBib29sZWFuO1xuICAgIE5ld3NMZXR0ZXJUZW1wbGF0ZT86IG51bWJlcjtcbiAgICBTdGF0dXM/OiBDYW1wYWlnbkRyYWZ0U3RhdHVzO1xuICAgIFN1YmplY3Q/OiBzdHJpbmc7XG4gICAgVGVtcGxhdGU/OiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnRCb2R5PEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgIFBhcnRpYWw8Q2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnQ8SGVhZGVycz4+XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRTY2hlZHVsZUJvZHkgPSB7XG4gICAgRGF0ZTogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q2FtcGFpZ25EcmFmdFNjaGVkdWxlQm9keSA9IFBhcnRpYWw8UG9zdENhbXBhaWduRHJhZnRTY2hlZHVsZUJvZHk+XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRUZXN0Qm9keSA9IHtcbiAgICBSZWNpcGllbnRzOiBSZWNpcGllbnRbXVxuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIENhbXBhaWduRHJhZnRSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDYW1wYWlnbkRyYWZ0W10+O1xuICB0eXBlIENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENhbXBhaWduRHJhZnRTY2hlZHVsZVtdPjtcbiAgdHlwZSBDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudFJlc3BvbnNlPEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgIENvbW1vbi5SZXNwb25zZTxBcnJheTxDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudDxIZWFkZXJzPj4+O1xuICB0eXBlIENhbXBhaWduRHJhZnRTdGF0dXNSZXNwb25zZSA9XG4gICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PHsgU3RhdHVzOiBDYW1wYWlnbkRyYWZ0U2VuZGluZ1N0YXR1cyB9Pj47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRSZXNwb25zZSA9IENhbXBhaWduRHJhZnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnbkRyYWZ0UmVzcG9uc2UgPSBDYW1wYWlnbkRyYWZ0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25EcmFmdFJlc3BvbnNlID0gQ2FtcGFpZ25EcmFmdFJlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlID0gQ2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0Q2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2UgPSBDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZSA9IENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50UmVzcG9uc2U8SGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgQ2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnRSZXNwb25zZTxIZWFkZXJzPlxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudFJlc3BvbnNlPEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgIENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50UmVzcG9uc2U8SGVhZGVycz5cblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFNlbmQgPSBDYW1wYWlnbkRyYWZ0U3RhdHVzUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUG9zdENhbXBhaWduRHJhZnRUZXN0ID0gQ2FtcGFpZ25EcmFmdFN0YXR1c1Jlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduRHJhZnRTdGF0dXMgPSBDYW1wYWlnbkRyYWZ0U3RhdHVzUmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBTZW50Q2FtcGFpZ24ge1xuICBleHBvcnQgZW51bSBDYW1wYWlnblR5cGUge1xuICAgIFRyYW5zYWN0aW9uYWwgPSAxLFxuICAgIE1hcmtldGluZyA9IDIsXG4gICAgVW5rbm93biA9IDMsXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENhbXBhaWduIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIElzRGVsZXRlZDogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ6IGJvb2xlYW47XG4gICAgQ2FtcGFpZ25UeXBlOiBDYW1wYWlnblR5cGU7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgQ3VzdG9tVmFsdWU6IHN0cmluZztcbiAgICBGaXJzdE1lc3NhZ2VJRDogbnVtYmVyO1xuICAgIEZyb21FbWFpbDogc3RyaW5nO1xuICAgIEZyb21JRDogbnVtYmVyO1xuICAgIEZyb21OYW1lOiBzdHJpbmc7XG4gICAgSGFzSHRtbENvdW50OiBudW1iZXI7XG4gICAgSGFzVHh0Q291bnQ6IG51bWJlcjtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBOZXdzTGV0dGVySUQ6IG51bWJlcjtcbiAgICBTZWdtZW50YXRpb25JRDogbnVtYmVyO1xuICAgIFNlbmRFbmRBdDogc3RyaW5nO1xuICAgIFNlbmRTdGFydEF0OiBzdHJpbmc7XG4gICAgU3BhbWFzc1Njb3JlOiBudW1iZXI7XG4gICAgU3ViamVjdDogc3RyaW5nO1xuICAgIFdvcmtmbG93SUQ6IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnbkJvZHkgPSB7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25RdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENhbXBhaWduSUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0SUQ/OiBudW1iZXI7XG4gICAgQ3VzdG9tQ2FtcGFpZ24/OiBzdHJpbmc7XG4gICAgRnJvbT86IHN0cmluZztcbiAgICBGcm9tRG9tYWluPzogc3RyaW5nO1xuICAgIEZyb21JRD86IG51bWJlcjtcbiAgICBGcm9tVHlwZT86IENhbXBhaWduVHlwZTtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzTmV3c2xldHRlclRvb2w/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgUGVyaW9kPzogQ29tbW9uLlBlcmlvZDtcbiAgICBXb3JrZmxvd0lEPzogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIENhbXBhaWduUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q2FtcGFpZ25bXT47XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q2FtcGFpZ25SZXNwb25zZSA9IENhbXBhaWduUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25SZXNwb25zZSA9IENhbXBhaWduUmVzcG9uc2Vcbn1cbiIsImV4cG9ydCBuYW1lc3BhY2UgQ29tbW9uIHtcbiAgZXhwb3J0IHR5cGUgVW5rbm93blJlYyA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uIHtcbiAgICBjb3VudE9ubHk6IGJvb2xlYW47XG5cbiAgICBMaW1pdDogbnVtYmVyO1xuICAgIE9mZnNldDogbnVtYmVyO1xuICAgIFNvcnQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGltZXN0YW1wUGVyaW9kIHtcbiAgICBGcm9tVFM6IHN0cmluZyB8IG51bWJlcjtcbiAgICBUb1RTOiBzdHJpbmcgfCBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgdHlwZSBSZXNwb25zZTxFbnRpdHk+ID0ge1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgVG90YWw6IG51bWJlcjtcbiAgICBEYXRhOiBFbnRpdHk7XG4gIH1cblxuICBleHBvcnQgZW51bSBQZXJpb2Qge1xuICAgIERheSA9ICdEYXknLFxuICAgIFdlZWsgPSAnV2VlaycsXG4gICAgTW9udGggPSAnTW9udGgnLFxuICAgIFllYXIgPSAnWWVhcicsXG4gIH1cbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBDb250YWN0IHtcbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIElzRXhjbHVkZWRGcm9tQ2FtcGFpZ25zOiBib29sZWFuO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBEZWxpdmVyZWRDb3VudDogbnVtYmVyO1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgRXhjbHVzaW9uRnJvbUNhbXBhaWduc1VwZGF0ZWRBdDogc3RyaW5nO1xuICAgIElzT3B0SW5QZW5kaW5nOiBib29sZWFuO1xuICAgIElzU3BhbUNvbXBsYWluaW5nOiBib29sZWFuO1xuICAgIExhc3RBY3Rpdml0eUF0OiBzdHJpbmc7XG4gICAgTGFzdFVwZGF0ZUF0OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RCb2R5ID0ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgSXNFeGNsdWRlZEZyb21DYW1wYWlnbnM/OiBib29sZWFuO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0Qm9keSA9IE9taXQ8UG9zdENvbnRhY3RCb2R5LCAnRW1haWwnPlxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIENhbXBhaWduPzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBJc0V4Y2x1ZGVkRnJvbUNhbXBhaWducz86IGJvb2xlYW47XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ29udGFjdFJlc3BvbnNlID0ge1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgVG90YWw6IG51bWJlcjtcbiAgICBEYXRhOiBDb250YWN0W107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RSZXNwb25zZSA9IENvbnRhY3RSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0UmVzcG9uc2UgPSBDb250YWN0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdFJlc3BvbnNlID0gQ29udGFjdFJlc3BvbnNlXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29udGFjdExpc3Qge1xuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RMaXN0IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIElzRGVsZXRlZDogYm9vbGVhbjtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgQWRkcmVzczogc3RyaW5nO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIFN1YnNjcmliZXJDb3VudDogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TGlzdEJvZHkgPSB7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0TGlzdEJvZHkgPSBQYXJ0aWFsPFBvc3RDb250YWN0TGlzdEJvZHk+XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdExpc3RRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEFkZHJlc3M/OiBzdHJpbmc7XG4gICAgRXhjbHVkZUlEPzogbnVtYmVyO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgTmFtZT86IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBDb250YWN0TGlzdFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RMaXN0W10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TGlzdFJlc3BvbnNlID0gQ29udGFjdExpc3RSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0TGlzdFJlc3BvbnNlID0gQ29udGFjdExpc3RSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0TGlzdFJlc3BvbnNlID0gQ29udGFjdExpc3RSZXNwb25zZVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEJ1bGtDb250YWN0TWFuYWdlbWVudCB7XG4gIGV4cG9ydCBlbnVtIE1hbmFnZUNvbnRhY3RzQWN0aW9uIHtcbiAgICBBZGRGb3JjZSA9ICdhZGRmb3JjZScsXG4gICAgQWRkTm9Gb3JjZSA9ICdhZGRub2ZvcmNlJyxcbiAgICBSZW1vdmUgPSAncmVtb3ZlJyxcbiAgICBVblN1YiA9ICd1bnN1YidcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEltcG9ydExpc3RBY3Rpb24ge1xuICAgIEFkZEZvcmNlID0gJ2FkZGZvcmNlJyxcbiAgICBBZGROb0ZvcmNlID0gJ2FkZG5vZm9yY2UnLFxuICAgIFVuU3ViID0gJ3Vuc3ViJyxcbiAgICBEdXBsaWNhdGVPdmVycmlkZSA9ICdkdXBsaWNhdGUtb3ZlcnJpZGUnLFxuICAgIER1cGxpY2F0ZU5vT3ZlcnJpZGUgPSAnZHVwbGljYXRlLW5vLW92ZXJyaWRlJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gSW1wb3J0Q1NWTWV0aG9kIHtcbiAgICBBZGRGb3JjZSA9ICdhZGRmb3JjZScsXG4gICAgQWRkTm9Gb3JjZSA9ICdhZGRub2ZvcmNlJyxcbiAgICBSZW1vdmUgPSAncmVtb3ZlJyxcbiAgICBVblN1YiA9ICd1bnN1YicsXG4gICAgRXhjbHVkZU1hcmtldGluZyA9ICdleGNsdWRlbWFya2V0aW5nJyxcbiAgICBJbmNsdWRlTWFya2V0aW5nID0gJ2luY2x1ZGVtYXJrZXRpbmcnXG4gIH1cblxuICBleHBvcnQgZW51bSBDU1ZJbXBvcnRTdGF0dXMge1xuICAgIFVwbG9hZCA9ICdVcGxvYWQnLFxuICAgIENvbXBsZXRlZCA9ICdDb21wbGV0ZWQnLFxuICAgIEFib3J0ID0gJ0Fib3J0JyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEpvYlN0YXR1cyB7XG4gICAgQ29tcGxldGVkID0gJ0NvbXBsZXRlZCcsXG4gICAgSW5Qcm9ncmVzcyA9ICdJbiBQcm9ncmVzcycsXG4gICAgRXJyb3IgPSAnRXJyb3InXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEpvYiB7XG4gICAgSm9iSUQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ1NWSW1wb3J0IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEVyclRyZXNob2xkOiBudW1iZXI7XG4gICAgSW1wb3J0T3B0aW9uczogc3RyaW5nO1xuICAgIE1ldGhvZDogSW1wb3J0Q1NWTWV0aG9kO1xuICAgIEFsaXZlQXQ6IHN0cmluZztcbiAgICBDb250YWN0c0xpc3RJRDogbnVtYmVyO1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgQ3VycmVudDogbnVtYmVyO1xuICAgIERhdGFJRDogbnVtYmVyO1xuICAgIEVycmNvdW50OiBudW1iZXI7XG4gICAgSm9iRW5kOiBzdHJpbmc7XG4gICAgSm9iU3RhcnQ6IHN0cmluZztcbiAgICBSZXF1ZXN0QXQ6IHN0cmluZztcbiAgICBTdGF0dXM6IENTVkltcG9ydFN0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdExpc3Qge1xuICAgIExpc3RJRDogbnVtYmVyO1xuICAgIEFjdGlvbjogTWFuYWdlQ29udGFjdHNBY3Rpb247XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHMge1xuICAgIENvbnRhY3RzTGlzdHM6IENvbnRhY3RMaXN0W107XG4gICAgQ291bnQ6IG51bWJlcjtcbiAgICBFcnJvcjogc3RyaW5nO1xuICAgIEVycm9yRmlsZTogc3RyaW5nO1xuICAgIEpvYkVuZDogc3RyaW5nO1xuICAgIEpvYlN0YXJ0OiBzdHJpbmc7XG4gICAgU3RhdHVzOiBKb2JTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RzTGlzdEltcG9ydExpc3Qge1xuICAgIEpvYklEOiBudW1iZXI7XG4gICAgQWN0aW9uOiBJbXBvcnRMaXN0QWN0aW9uO1xuICAgIExpc3RJRDogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIENvbnRhY3RCb2R5PFByb3BlcnRpZXMgPSBDb21tb24uVW5rbm93blJlYz4gPSB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBOYW1lPzogc3RyaW5nO1xuICAgIElzRXhjbHVkZWRGcm9tQ2FtcGFpZ25zPzogYm9vbGVhbjtcbiAgICBQcm9wZXJ0aWVzPzogUHJvcGVydGllcztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzQm9keTxQcm9wZXJ0aWVzID0gQ29tbW9uLlVua25vd25SZWM+ID0ge1xuICAgIENvbnRhY3RzOiBBcnJheTxDb250YWN0Qm9keTxQcm9wZXJ0aWVzPj47XG4gICAgQ29udGFjdHNMaXN0cz86IENvbnRhY3RMaXN0W107XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdHNMaXN0SW1wb3J0TGlzdEJvZHkgPSB7XG4gICAgQWN0aW9uOiBJbXBvcnRMaXN0QWN0aW9uO1xuICAgIExpc3RJRDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RzTGlzdE1hbmFnZU1hbnlDb250YWN0c0JvZHk8UHJvcGVydGllcyA9IENvbW1vbi5Vbmtub3duUmVjPiA9IHtcbiAgICBBY3Rpb246IE1hbmFnZUNvbnRhY3RzQWN0aW9uO1xuICAgIENvbnRhY3RzOiBBcnJheTxDb250YWN0Qm9keTxQcm9wZXJ0aWVzPj47XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0Q1NWSW1wb3J0Qm9keSA9IHtcbiAgICBDb250YWN0c0xpc3RJRDogbnVtYmVyO1xuICAgIERhdGFJRDogbnVtYmVyO1xuICAgIEVyclRyZXNob2xkPzogbnVtYmVyO1xuICAgIEltcG9ydE9wdGlvbnM/OiBzdHJpbmc7XG4gICAgTWV0aG9kPzogSW1wb3J0Q1NWTWV0aG9kO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q1NWSW1wb3J0Qm9keSA9IFBhcnRpYWw8UG9zdENTVkltcG9ydEJvZHk+ICYge1xuICAgIFN0YXR1cz86IENTVkltcG9ydFN0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENTVkltcG9ydFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj5cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgSm9iUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Sm9iW10+O1xuICB0eXBlIENTVkltcG9ydFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENTVkltcG9ydFtdPjtcbiAgdHlwZSBDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdE1hbmFnZU1hbnlDb250YWN0c1tdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlID0gSm9iUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlID0gQ29udGFjdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RzTGlzdEltcG9ydExpc3RSZXNwb25zZSA9IEpvYlJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RzTGlzdEltcG9ydExpc3RSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0c0xpc3RJbXBvcnRMaXN0W10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0c0xpc3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZSA9IEpvYlJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RzTGlzdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlID0gQ29udGFjdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlO1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDU1ZJbXBvcnRSZXNwb25zZSA9IENTVkltcG9ydFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dENTVkltcG9ydFJlc3BvbnNlID0gQ1NWSW1wb3J0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q1NWSW1wb3J0UmVzcG9uc2UgPSBDU1ZJbXBvcnRSZXNwb25zZVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIENvbnRhY3RQcm9wZXJ0aWVzIHtcbiAgZXhwb3J0IGVudW0gRGF0YVR5cGUge1xuICAgIFN0ciA9ICdzdHInLFxuICAgIEludCA9ICdpbnQnLFxuICAgIEZsb2F0ID0gJ2Zsb2F0JyxcbiAgICBCb29sID0gJ2Jvb2wnLFxuICAgIERhdGVUaW1lID0gJ2RhdGV0aW1lJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gTmFtZVNwYWNlIHtcbiAgICBTdGF0aWMgPSAnc3RhdGljJyxcbiAgICBIaXN0b3JpYyA9ICdoaXN0b3JpYydcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdFByb3BlcnR5IHtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgVmFsdWU6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdERhdGEge1xuICAgIElEOiBudW1iZXI7XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgRGF0YTogQ29udGFjdFByb3BlcnR5W107XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RNZXRhRGF0YSB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBEYXRhdHlwZTogRGF0YVR5cGU7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIE5hbWVTcGFjZTogTmFtZVNwYWNlO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TWV0YURhdGFCb2R5ID0ge1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBEYXRhdHlwZT86IERhdGFUeXBlO1xuICAgIE5hbWVTcGFjZT86IE5hbWVTcGFjZTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3RNZXRhRGF0YUJvZHkgPSB7XG4gICAgTmFtZT86IHN0cmluZztcbiAgICBEYXRhdHlwZT86IERhdGFUeXBlO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdE1ldGFEYXRhUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBEYXRhVHlwZT86IERhdGFUeXBlXG4gICAgTmFtZXNwYWNlPzogTmFtZVNwYWNlO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdERhdGFCb2R5ID0ge1xuICAgIERhdGE6IENvbnRhY3RQcm9wZXJ0eVtdO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdERhdGFRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIENhbXBhaWduPzogbnVtYmVyO1xuICAgIENvbnRhY3RFbWFpbD86IHN0cmluZztcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgRmllbGRzPzogc3RyaW5nO1xuICAgIExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIENvbnRhY3REYXRhUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdERhdGFbXT47XG4gIHR5cGUgQ29udGFjdE1ldGFEYXRhUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdE1ldGFEYXRhW10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TWV0YURhdGFSZXNwb25zZSA9IENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlO1xuICBleHBvcnQgdHlwZSBQdXRDb250YWN0TWV0YURhdGFSZXNwb25zZSA9IENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlO1xuICBleHBvcnQgdHlwZSBHZXRDb250YWN0TWV0YURhdGFSZXNwb25zZSA9IENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlO1xuXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3REYXRhUmVzcG9uc2UgPSBDb250YWN0RGF0YVJlc3BvbnNlO1xuICBleHBvcnQgdHlwZSBHZXRDb250YWN0RGF0YVJlc3BvbnNlID0gQ29udGFjdERhdGFSZXNwb25zZTtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDb250YWN0U3Vic2NyaXB0aW9uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBNYW5hZ2VDb250YWN0czxQcm9wZXJ0aWVzID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIEFjdGlvbjogQnVsa0NvbnRhY3RNYW5hZ2VtZW50Lk1hbmFnZUNvbnRhY3RzQWN0aW9uO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBQcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBMaXN0UmVjaXBpZW50IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIElzVW5zdWJzY3JpYmVkOiBib29sZWFuO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIExpc3RJRDogbnVtYmVyO1xuICAgIExpc3ROYW1lOiBzdHJpbmc7XG4gICAgU3Vic2NyaWJlZEF0OiBzdHJpbmc7XG4gICAgVW5zdWJzY3JpYmVkQXQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdHNMaXN0IHtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBJc1Vuc3ViOiBib29sZWFuO1xuICAgIFN1YnNjcmliZWRBdDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0c0xpc3RTaWdudXAge1xuICAgIElEOiBudW1iZXI7XG4gICAgQ29uZmlybUF0OiBudW1iZXI7XG4gICAgQ29uZmlybUlwOiBzdHJpbmc7XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBTaWdudXBBdDogbnVtYmVyO1xuICAgIFNpZ251cElwOiBzdHJpbmc7XG4gICAgU2lnbnVwS2V5OiBzdHJpbmc7XG4gICAgU291cmNlSWQ6IG51bWJlcjtcbiAgICBTb3VyY2U6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1hbmFnZUNvbnRhY3RzTGlzdHNCb2R5ID0ge1xuICAgIENvbnRhY3RzTGlzdHM6IEJ1bGtDb250YWN0TWFuYWdlbWVudC5Db250YWN0TGlzdFtdO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RzTGlzdE1hbmFnZUNvbnRhY3RCb2R5PFByb3BlcnRpZXMgPSBDb21tb24uVW5rbm93blJlYz4gPSB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBBY3Rpb246IEJ1bGtDb250YWN0TWFuYWdlbWVudC5NYW5hZ2VDb250YWN0c0FjdGlvbjtcbiAgICBOYW1lPzogc3RyaW5nO1xuICAgIFByb3BlcnRpZXM/OiBQcm9wZXJ0aWVzO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdExpc3RSZWNpcGllbnRCb2R5ID0ge1xuICAgIElzVW5zdWJzY3JpYmVkPzogYm9vbGVhbjtcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBDb250YWN0QWx0Pzogc3RyaW5nO1xuICAgIExpc3RJRDogbnVtYmVyO1xuICAgIExpc3RBbHQ/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRMaXN0UmVjaXBpZW50Qm9keSA9IHtcbiAgICBJc1Vuc3Vic2NyaWJlZD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRMaXN0UmVjaXBpZW50UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBCbG9ja2VkPzogYm9vbGVhbjtcbiAgICBDb250YWN0PzogbnVtYmVyO1xuICAgIENvbnRhY3RFbWFpbD86IHN0cmluZztcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgSWdub3JlRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNFeGNsdWRlZEZyb21DYW1wYWlnbnM/OiBib29sZWFuO1xuICAgIExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIExpc3ROYW1lPzogc3RyaW5nO1xuICAgIE9wZW5lZD86IGJvb2xlYW47XG4gICAgVW5zdWI/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdHNMaXN0U2lnbnVwUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBDb250YWN0PzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBEb21haW4/OiBzdHJpbmc7XG4gICAgRW1haWw/OiBzdHJpbmc7XG4gICAgTG9jYWxQYXJ0Pzogc3RyaW5nO1xuICAgIE1heENvbmZpcm1BdD86IG51bWJlcjtcbiAgICBNaW5Db25maXJtQXQ/OiBudW1iZXI7XG4gICAgTWF4U2lnbnVwQXQ/OiBudW1iZXI7XG4gICAgTWluU2lnbnVwQXQ/OiBudW1iZXI7XG4gICAgU2lnbnVwSXA/OiBzdHJpbmc7XG4gICAgU291cmNlPzogc3RyaW5nO1xuICAgIFNvdXJjZUlEPzogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIExpc3RSZWNpcGllbnRSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxMaXN0UmVjaXBpZW50W10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TWFuYWdlQ29udGFjdHNMaXN0c1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFxuICAgIEFycmF5PHsgQ29udGFjdHNMaXN0czogQnVsa0NvbnRhY3RNYW5hZ2VtZW50LkNvbnRhY3RMaXN0W10gfT5cbiAgICA+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0c0xpc3RNYW5hZ2VDb250YWN0UmVzcG9uc2U8UHJvcGVydGllcyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgICBDb21tb24uUmVzcG9uc2U8QXJyYXk8TWFuYWdlQ29udGFjdHM8UHJvcGVydGllcz4+PjtcblxuICBleHBvcnQgdHlwZSBQb3N0TGlzdFJlY2lwaWVudFJlc3BvbnNlID0gTGlzdFJlY2lwaWVudFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dExpc3RSZWNpcGllbnRSZXNwb25zZSA9IExpc3RSZWNpcGllbnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRMaXN0UmVjaXBpZW50UmVzcG9uc2UgPSBMaXN0UmVjaXBpZW50UmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0R2V0Q29udGFjdHNMaXN0c1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RzTGlzdFtdPlxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RzTGlzdFNpZ251cFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RzTGlzdFNpZ251cFtdPlxufVxuXG5leHBvcnQgbmFtZXNwYWNlIENvbnRhY3RWZXJpZmljYXRpb24ge1xuICBleHBvcnQgaW50ZXJmYWNlIFZlcmlmaWNhdGlvblN1bW1hcnk8UmVzdWx0ID0gQ29tbW9uLlVua25vd25SZWMsIFJpc2sgPSBDb21tb24uVW5rbm93blJlYz4ge1xuICAgIHJlc3VsdDogUmVzdWx0O1xuICAgIHJpc2s6IFJpc2s7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RzTGlzdFZlcmlmaWNhdGlvbjxSZXN1bHQgPSBDb21tb24uVW5rbm93blJlYywgUmlzayA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgQWtpZDogbnVtYmVyO1xuICAgIENvbnRhY3RMaXN0SUQ6IG51bWJlcjtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIEVycm9yOiBzdHJpbmc7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBKb2JFbmQ6IHN0cmluZztcbiAgICBKb2JTdGFydDogc3RyaW5nO1xuICAgIE1ldGhvZDogc3RyaW5nO1xuICAgIFJlc3BvbnNlVVJMOiBzdHJpbmc7XG4gICAgU3RhdHVzOiBzdHJpbmc7XG4gICAgU3VtbWFyeTogVmVyaWZpY2F0aW9uU3VtbWFyeTxSZXN1bHQsIFJpc2s+XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RzTGlzdFZlcmlmeVJlc3BvbnNlPFJlc3VsdCA9IENvbW1vbi5Vbmtub3duUmVjLCBSaXNrID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICBDb21tb24uUmVzcG9uc2U8QXJyYXk8Q29udGFjdHNMaXN0VmVyaWZpY2F0aW9uPFJlc3VsdCwgUmlzaz4+Pjtcbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBNZXNzYWdlIHtcbiAgZXhwb3J0IGVudW0gTWVzc2FnZVN0YXRlIHtcbiAgICBVc2VyVW5rbm93biA9IDEsXG4gICAgTWFpbGJveEluYWN0aXZlID0gMixcbiAgICBRdW90YUV4Y2VlZGVkID0gMyxcbiAgICBJbnZhbGlkRG9tYWluID0gNCxcbiAgICBOb01haWxIb3N0ID0gNSxcbiAgICBSZWxheU9yQWNjZXNzRGVuaWVkID0gNixcbiAgICBTZW5kZXJCbG9ja2VkID0gNyxcbiAgICBDb250ZW50QmxvY2tlZCA9IDgsXG4gICAgUG9saWN5SXNzdWUgPSA5LFxuICAgIFN5c3RlbUlzc3VlID0gMTAsXG4gICAgUHJvdG9jb2xJc3N1ZSA9IDExLFxuICAgIENvbm5lY3Rpb25Jc3N1ZSA9IDEyLFxuICAgIEdyZXlMaXN0ZWQgPSAxMyxcbiAgICBQcmVCbG9ja2VkID0gMTQsXG4gICAgRHVwbGljYXRlSW5DYW1wYWlnbiA9IDE1LFxuICAgIFNwYW1QcmVCbG9ja2VkID0gMTYsXG4gICAgQmFkT3JFbXB0eVRlbXBsYXRlID0gMTcsXG4gICAgRXJyb3JJblRlbXBsYXRlTGFuZ3VhZ2UgPSAxOCxcbiAgICBUeXBvRml4ID0gMTksXG4gICAgQmxhY2tMaXN0ZWQgPSAyMCxcbiAgICBTcGFtUmVwb3J0ZXIgPSAyMVxuICB9XG5cbiAgZXhwb3J0IGVudW0gRnJvbVR5cGUge1xuICAgIFRyYW5zYWN0aW9uYWwgPSAxLFxuICAgIE1hcmtldGluZyA9IDIsXG4gICAgVW5rbm93biA9IDMsXG4gIH1cblxuICBleHBvcnQgZW51bSBNZXNzYWdlU3RhdHVzIHtcbiAgICBQcm9jZXNzZWQgPSAwLFxuICAgIFF1ZXVlZCA9IDEsXG4gICAgU2VudCA9IDIsXG4gICAgT3BlbmVkID0gMyxcbiAgICBDbGlja2VkID0gNCxcbiAgICBCb3VuY2UgPSA1LFxuICAgIFNwYW0gPSA2LFxuICAgIFVuc3ViID0gNyxcbiAgICBCbG9ja2VkID0gOCxcbiAgICBTb2Z0Qm91bmNlID0gOSxcbiAgICBIYXJkQm91bmNlID0gMTAsXG4gICAgRGVmZXJyZWQgPSAxMSxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEN1cnJlbnRNZXNzYWdlU3RhdHVzIHtcbiAgICBVbmtub3duID0gJ3Vua25vd24nLFxuICAgIFF1ZXVlZCA9ICdxdWV1ZWQnLFxuICAgIFNlbnQgPSAnc2VudCcsXG4gICAgT3BlbmVkID0gJ29wZW5lZCcsXG4gICAgQ2xpY2tlZCA9ICdjbGlja2VkJyxcbiAgICBCb3VuY2UgPSAnYm91bmNlJyxcbiAgICBTcGFtID0gJ3NwYW0nLFxuICAgIFVuc3ViID0gJ3Vuc3ViJyxcbiAgICBCbG9ja2VkID0gJ2Jsb2NrZWQnLFxuICAgIEhhcmRCb3VuY2VkID0gJ2hhcmRib3VuY2VkJyxcbiAgICBTb2Z0Qm91bmNlZCA9ICdzb2Z0Ym91bmNlZCcsXG4gICAgRGVmZXJyZWQgPSAnZGVmZXJyZWQnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gRXZlbnRUeXBlIHtcbiAgICBTZW50ID0gJ3NlbnQnLFxuICAgIE9wZW5lZCA9ICdvcGVuZWQnLFxuICAgIENsaWNrZWQgPSAnY2xpY2tlZCcsXG4gICAgQm91bmNlZCA9ICdib3VuY2VkJyxcbiAgICBCbG9ja2VkID0gJ2Jsb2NrZWQnLFxuICAgIFVuc3ViID0gJ3Vuc3ViJyxcbiAgICBTcGFtID0gJ3NwYW0nXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VUcmFja2VkIHtcbiAgICBJc0NsaWNrVHJhY2tlZDogYm9vbGVhbjtcbiAgICBJc0hUTUxQYXJ0SW5jbHVkZWQ6IGJvb2xlYW47XG4gICAgSXNPcGVuVHJhY2tlZDogYm9vbGVhbjtcbiAgICBJc1RleHRQYXJ0SW5jbHVkZWQ6IGJvb2xlYW47XG4gICAgSXNVbnN1YlRyYWNrZWQ6IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlVHJhY2tlZCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBBcnJpdmVkQXQ6IHN0cmluZztcbiAgICBBdHRhY2htZW50Q291bnQ6IG51bWJlcjtcbiAgICBBdHRlbXB0Q291bnQ6IG51bWJlcjtcbiAgICBDYW1wYWlnbklEOiBudW1iZXI7XG4gICAgQ29udGFjdEFsdDogc3RyaW5nO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIERlbGF5OiBudW1iZXI7XG4gICAgRGVzdGluYXRpb25JRDogbnVtYmVyO1xuICAgIEZpbHRlclRpbWU6IG51bWJlcjtcbiAgICBNZXNzYWdlU2l6ZTogbnVtYmVyO1xuICAgIFNlbmRlcklEOiBudW1iZXI7XG4gICAgU3BhbWFzc2Fzc2luU2NvcmU6IG51bWJlcjtcbiAgICBTcGFtYXNzUnVsZXM6IHN0cmluZztcbiAgICBTdGF0ZUlEOiBNZXNzYWdlU3RhdGU7XG4gICAgU3RhdGVQZXJtYW5lbnQ6IGJvb2xlYW47XG4gICAgU3RhdHVzOiBDdXJyZW50TWVzc2FnZVN0YXR1cztcbiAgICBTdWJqZWN0OiBzdHJpbmc7XG4gICAgVVVJRDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlSGlzdG9yeSB7XG4gICAgQ29tbWVudDogc3RyaW5nO1xuICAgIEV2ZW50QXQ6IG51bWJlcjtcbiAgICBFdmVudFR5cGU6IEV2ZW50VHlwZTtcbiAgICBTdGF0ZTogc3RyaW5nO1xuICAgIFVzZXJhZ2VudDogc3RyaW5nO1xuICAgIFVzZXJhZ2VudElEOiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VJbmZvcm1hdGlvbjxSdWxlcyA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBDYW1wYWlnbklEOiBudW1iZXI7XG4gICAgQ2xpY2tUcmFja2VkQ291bnQ6IG51bWJlcjtcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBNZXNzYWdlU2l6ZTogbnVtYmVyO1xuICAgIE9wZW5UcmFja2VkQ291bnQ6IG51bWJlcjtcbiAgICBRdWV1ZWRDb3VudDogbnVtYmVyO1xuICAgIFNlbmRFbmRBdDogc3RyaW5nO1xuICAgIFNlbnRDb3VudDogbnVtYmVyO1xuICAgIFNwYW1Bc3Nhc3NpblJ1bGVzOiBSdWxlcztcbiAgICBTcGFtQXNzYXNzaW5TY29yZTogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldE1lc3NhZ2VRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENhbXBhaWduPzogbnVtYmVyO1xuICAgIENvbnRhY3Q/OiBudW1iZXI7XG4gICAgQ3VzdG9tSUQ/OiBzdHJpbmc7XG4gICAgRGVzdGluYXRpb24/OiBudW1iZXI7XG4gICAgRnJvbVR5cGU/OiBGcm9tVHlwZTtcbiAgICBNZXNzYWdlU3RhdGU/OiBNZXNzYWdlU3RhdGU7XG4gICAgTWVzc2FnZVN0YXR1cz86IE1lc3NhZ2VTdGF0dXM7XG4gICAgUGxhblN1YnNjcmlwdGlvbj86IG51bWJlcjtcbiAgICBTZW5kZXJJRD86IG51bWJlcjtcbiAgICBTaG93Q29udGFjdEFsdD86IGJvb2xlYW47XG4gICAgU2hvd0N1c3RvbUlEPzogYm9vbGVhbjtcbiAgICBTaG93U3ViamVjdD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRNZXNzYWdlSW5mb3JtYXRpb25RdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENhbXBhaWduSUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIEN1c3RvbUNhbXBhaWduPzogc3RyaW5nO1xuICAgIEZyb20/OiBzdHJpbmc7XG4gICAgRnJvbURvbWFpbj86IHN0cmluZztcbiAgICBGcm9tSUQ/OiBudW1iZXI7XG4gICAgRnJvbVR5cGU/OiBGcm9tVHlwZTtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzTmV3c2xldHRlclRvb2w/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgTWVzc2FnZVN0YXR1cz86IE1lc3NhZ2VTdGF0dXM7XG4gICAgUGVyaW9kPzogQ29tbW9uLlBlcmlvZDtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0TWVzc2FnZXNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxNZXNzYWdlW10+XG4gIGV4cG9ydCB0eXBlIEdldE1lc3NhZ2VIaXN0b3J5UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TWVzc2FnZUhpc3RvcnlbXT5cbiAgZXhwb3J0IHR5cGUgR2V0TWVzc2FnZUluZm9ybWF0aW9uUmVzcG9uc2U8UnVsZXMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PE1lc3NhZ2VJbmZvcm1hdGlvbjxSdWxlcz4+PlxufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIFNlZ21lbnRhdGlvbiB7XG4gIGV4cG9ydCBlbnVtIFNlZ21lbnRTdGF0dXMge1xuICAgIFVzZWQgPSAndXNlZCcsXG4gICAgVW5Vc2VkID0gJ3VudXNlZCcsXG4gICAgRGVsZXRlZCA9ICdkZWxldGVkJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0RmlsdGVyIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgRXhwcmVzc2lvbjogc3RyaW5nO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBTdGF0dXM6IFNlZ21lbnRTdGF0dXM7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RGaWx0ZXJCb2R5ID0ge1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBFeHByZXNzaW9uOiBzdHJpbmc7XG4gICAgRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0RmlsdGVyQm9keSA9IFBhcnRpYWw8UG9zdENvbnRhY3RGaWx0ZXJCb2R5PiAmIHtcbiAgICBTdGF0dXM/OiBTZWdtZW50U3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdEZpbHRlclF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgU2hvd0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIFN0YXR1cz86IFNlZ21lbnRTdGF0dXM7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ29udGFjdEZpbHRlclJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RGaWx0ZXJbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RGaWx0ZXJSZXNwb25zZSA9IENvbnRhY3RGaWx0ZXJSZXNwb25zZTtcbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdEZpbHRlclJlc3BvbnNlID0gQ29udGFjdEZpbHRlclJlc3BvbnNlO1xuICBleHBvcnQgdHlwZSBHZXRDb250YWN0RmlsdGVyUmVzcG9uc2UgPSBDb250YWN0RmlsdGVyUmVzcG9uc2U7XG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2VuZEVtYWlsVjMge1xuICBleHBvcnQgdHlwZSBNalRlbXBsYXRlRXJyb3JEZWxpdmVyID0gJzAnIHwgJ2RlbGl2ZXInXG4gIGV4cG9ydCB0eXBlIE1qRGVkdXBsaWNhdGVDYW1wYWlnbiA9IDAgfCAxO1xuICBleHBvcnQgdHlwZSBNalRyYWNrT3BlbiA9IDAgfCAxIHwgMjtcblxuICBleHBvcnQgaW50ZXJmYWNlIFJlY2lwaWVudCB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBOYW1lPzogc3RyaW5nXG4gICAgVmFycz86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudCB7XG4gICAgRmlsZW5hbWU6IHN0cmluZztcbiAgICBDb250ZW50OiBzdHJpbmc7XG4gICAgJ0NvbnRlbnQtdHlwZSc6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEJvZHlNaiA9IHtcbiAgICAnTWotVGVtcGxhdGVJRCc/OiBudW1iZXI7XG4gICAgJ01qLVRlbXBsYXRlTGFuZ3VhZ2UnPzogYm9vbGVhbjtcbiAgICAnTWotVGVtcGxhdGVFcnJvclJlcG9ydGluZyc/OiBzdHJpbmc7XG4gICAgJ01qLVRlbXBsYXRlRXJyb3JEZWxpdmVyJz86IE1qVGVtcGxhdGVFcnJvckRlbGl2ZXI7XG4gICAgJ01qLXByaW8nPzogbnVtYmVyO1xuICAgICdNai1jYW1wYWlnbic/OiBzdHJpbmc7XG4gICAgJ01qLWRlZHVwbGljYXRlY2FtcGFpZ24nPzogTWpEZWR1cGxpY2F0ZUNhbXBhaWduO1xuICAgICdNai10cmFja29wZW4nPzogTWpUcmFja09wZW47XG4gICAgJ01qLUN1c3RvbUlEJz86IHN0cmluZztcbiAgICAnTWotRXZlbnRQYXlsb2FkJz86IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBCb2R5PFxuICAgIEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYyxcbiAgICBWYXJzID0gQ29tbW9uLlVua25vd25SZWNcbiAgICA+ID0gQm9keU1qICYge1xuICAgIEZyb21FbWFpbD86IHN0cmluZztcbiAgICBGcm9tTmFtZT86IHN0cmluZztcbiAgICBSZWNpcGllbnRzPzogUmVjaXBpZW50W107XG4gICAgU2VuZGVyPzogYm9vbGVhbjtcbiAgICBTdWJqZWN0Pzogc3RyaW5nO1xuICAgICdUZXh0LXBhcnQnPzogc3RyaW5nO1xuICAgICdIdG1sLXBhcnQnPzogc3RyaW5nO1xuICAgIFRvPzogc3RyaW5nO1xuICAgIENjPzogc3RyaW5nO1xuICAgIEJjYz86IHN0cmluZztcbiAgICBBdHRhY2htZW50cz86IEF0dGFjaG1lbnRbXTtcbiAgICBJbmxpbmVfYXR0YWNobWVudHM/OiBBdHRhY2htZW50W107XG4gICAgSGVhZGVycz86IEhlYWRlcnM7XG4gICAgVmFycz86IFZhcnM7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VTZW50IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE1lc3NhZ2VJRDogbnVtYmVyO1xuICAgIE1lc3NhZ2VVVUlEOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBSZXNwb25zZSA9IHtcbiAgICBTZW50OiBSZXNwb25zZVNlbnRbXTtcbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFNlbmRFbWFpbFYzXzEge1xuICBleHBvcnQgZW51bSBUcmFja09wZW5zIHtcbiAgICBBY2NvdW50RGVmYXVsdCA9ICdhY2NvdW50X2RlZmF1bHQnLFxuICAgIERpc2FibGVkID0gJ2Rpc2FibGVkJyxcbiAgICBFbmFibGVkID0gJ2VuYWJsZWQnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gVHJhY2tDbGlja3Mge1xuICAgIEFjY291bnREZWZhdWx0ID0gJ2FjY291bnRfZGVmYXVsdCcsXG4gICAgRGlzYWJsZWQgPSAnZGlzYWJsZWQnLFxuICAgIEVuYWJsZWQgPSAnZW5hYmxlZCcsXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEVtYWlsQWRkcmVzc1RvIHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnQge1xuICAgIEZpbGVuYW1lOiBzdHJpbmc7XG4gICAgQ29udGVudFR5cGU6IHN0cmluZztcbiAgICBCYXNlNjRDb250ZW50OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIElubGluZWRBdHRhY2htZW50IGV4dGVuZHMgQXR0YWNobWVudCB7XG4gICAgQ29udGVudElEPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlPEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYywgVmFyaWFibGVzID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICBGcm9tOiBFbWFpbEFkZHJlc3NUbztcbiAgICBTZW5kZXI/OiBFbWFpbEFkZHJlc3NUbztcbiAgICBUbzogRW1haWxBZGRyZXNzVG9bXTtcbiAgICBDYz86IEVtYWlsQWRkcmVzc1RvW107XG4gICAgQmNjPzogRW1haWxBZGRyZXNzVG9bXTtcbiAgICBSZXBseVRvPzogRW1haWxBZGRyZXNzVG87XG4gICAgU3ViamVjdD86IHN0cmluZztcbiAgICBUZXh0UGFydD86IHN0cmluZztcbiAgICBIVE1MUGFydD86IHN0cmluZztcbiAgICBUZW1wbGF0ZUlEPzogbnVtYmVyO1xuICAgIFRlbXBsYXRlTGFuZ3VhZ2U/OiBib29sZWFuO1xuICAgIFRlbXBsYXRlRXJyb3JSZXBvcnRpbmc/OiBFbWFpbEFkZHJlc3NUbztcbiAgICBUZW1wbGF0ZUVycm9yRGVsaXZlcj86IGJvb2xlYW47XG4gICAgQXR0YWNobWVudHM/OiBBdHRhY2htZW50W107XG4gICAgSW5saW5lZEF0dGFjaG1lbnRzPzogSW5saW5lZEF0dGFjaG1lbnRbXTtcbiAgICBQcmlvcml0eT86IG51bWJlcjtcbiAgICBDdXN0b21DYW1wYWlnbj86IHN0cmluZztcbiAgICBEZWR1cGxpY2F0ZUNhbXBhaWduPzogYm9vbGVhbjtcbiAgICBUcmFja09wZW5zPzogVHJhY2tPcGVucztcbiAgICBUcmFja0NsaWNrcz86IFRyYWNrQ2xpY2tzO1xuICAgIEN1c3RvbUlEPzogc3RyaW5nO1xuICAgIEV2ZW50UGF5bG9hZD86IHN0cmluZztcbiAgICBVUkxUYWdzPzogc3RyaW5nO1xuICAgIEhlYWRlcnM/OiBIZWFkZXJzO1xuICAgIFZhcmlhYmxlcz86IFZhcmlhYmxlcztcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFJlc3BvbnNlU3RhdHVzIHtcbiAgICBTdWNjZXNzID0gJ3N1Y2Nlc3MnLFxuICAgIEVycm9yID0gJ2Vycm9yJyxcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VFcnJvciB7XG4gICAgRXJyb3JJZGVudGlmaWVyOiBzdHJpbmc7XG4gICAgRXJyb3JDb2RlOiBzdHJpbmc7XG4gICAgU3RhdHVzQ29kZTogbnVtYmVyO1xuICAgIEVycm9yTWVzc2FnZTogc3RyaW5nO1xuICAgIEVycm9yUmVsYXRlZFRvOiBBcnJheTxzdHJpbmc+O1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUVtYWlsQWRkcmVzc1RvIHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE1lc3NhZ2VVVUlEOiBzdHJpbmc7XG4gICAgTWVzc2FnZUlEOiBudW1iZXI7XG4gICAgTWVzc2FnZUhyZWY6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBCb2R5PFxuICAgIEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYyxcbiAgICBWYXJpYWJsZXMgPSBDb21tb24uVW5rbm93blJlYyxcbiAgICBHbG9iYWxzID0gQ29tbW9uLlVua25vd25SZWMsXG4gICAgPiA9IHtcbiAgICBNZXNzYWdlczogQXJyYXk8TWVzc2FnZTxIZWFkZXJzLCBWYXJpYWJsZXM+PjtcbiAgICBTYW5kYm94TW9kZT86IGJvb2xlYW47XG4gICAgQWR2YW5jZUVycm9ySGFuZGxpbmc/OiBib29sZWFuO1xuICAgIEdsb2JhbHM/OiBHbG9iYWxzO1xuICB9IHwge1xuICAgIE1lc3NhZ2VzOiBBcnJheTxPbWl0PE1lc3NhZ2U8SGVhZGVycywgVmFyaWFibGVzPiwgJ0Zyb20nPiAmIHsgRnJvbT86IHN0cmluZyB9PjtcbiAgICBTYW5kYm94TW9kZT86IGJvb2xlYW47XG4gICAgQWR2YW5jZUVycm9ySGFuZGxpbmc/OiBib29sZWFuO1xuICAgIEdsb2JhbHM6IHtcbiAgICAgIEZyb206IEVtYWlsQWRkcmVzc1RvO1xuICAgICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICB9O1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICBleHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlTWVzc2FnZSB7XG4gICAgU3RhdHVzOiBSZXNwb25zZVN0YXR1cztcbiAgICBFcnJvcnM6IFJlc3BvbnNlRXJyb3JbXTtcbiAgICBDdXN0b21JRDogc3RyaW5nO1xuICAgIFRvOiBSZXNwb25zZUVtYWlsQWRkcmVzc1RvW107XG4gICAgQ2M6IFJlc3BvbnNlRW1haWxBZGRyZXNzVG9bXTtcbiAgICBCY2M6IFJlc3BvbnNlRW1haWxBZGRyZXNzVG9bXTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFJlc3BvbnNlID0ge1xuICAgIE1lc3NhZ2VzOiBSZXNwb25zZU1lc3NhZ2VbXTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIFNlbmRlciB7XG4gIGV4cG9ydCBlbnVtIEVtYWlsVHlwZSB7XG4gICAgVHJhbnNhY3Rpb25hbCA9ICd0cmFuc2FjdGlvbmFsJyxcbiAgICBCdWxrID0gJ2J1bGsnLFxuICAgIFVua25vd24gPSAndW5rbm93bidcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFNlbmRlclN0YXR1cyB7XG4gICAgSW5hY3RpdmUgPSAnSW5hY3RpdmUnLFxuICAgIEFjdGl2ZSA9ICdBY3RpdmUnLFxuICAgIERlbGV0ZWQgPSAnRGVsZXRlZCcsXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFNlbmRlciB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBFbWFpbFR5cGU6IEVtYWlsVHlwZTtcbiAgICBJc0RlZmF1bHRTZW5kZXI6IGJvb2xlYW47XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIEROU0lEOiBudW1iZXI7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBGaWxlbmFtZTogc3RyaW5nO1xuICAgIFN0YXR1czogU2VuZGVyU3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBTZW5kZXJWYWxpZGF0ZSB7XG4gICAgVmFsaWRhdGlvbk1ldGhvZDogc3RyaW5nO1xuICAgIEVycm9yczogc3RyaW5nO1xuICAgIEdsb2JhbEVycm9yOiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdFNlbmRlckJvZHkgPSB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBFbWFpbFR5cGU/OiBFbWFpbFR5cGU7XG4gICAgSXNEZWZhdWx0U2VuZGVyPzogYm9vbGVhbjtcbiAgICBOYW1lPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0U2VuZGVyQm9keSA9IE9taXQ8UG9zdFNlbmRlckJvZHksICdFbWFpbCc+XG5cbiAgZXhwb3J0IHR5cGUgR2V0U2VuZGVyUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBEbnNJRD86IG51bWJlcjtcbiAgICBEb21haW4/OiBzdHJpbmc7XG4gICAgRW1haWw/OiBzdHJpbmc7XG4gICAgSXNEb21haW5TZW5kZXI/OiBib29sZWFuO1xuICAgIExvY2FsUGFydD86IHN0cmluZztcbiAgICBTaG93RGVsZXRlZD86IGJvb2xlYW47XG4gICAgU3RhdHVzPzogU2VuZGVyU3RhdHVzO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIFNlbmRlclJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFNlbmRlcltdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0U2VuZGVyUmVzcG9uc2UgPSBTZW5kZXJSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRTZW5kZXJSZXNwb25zZSA9IFNlbmRlclJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldFNlbmRlclJlc3BvbnNlID0gU2VuZGVyUmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBQb3N0U2VuZGVyVmFsaWRhdGVSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxTZW5kZXJWYWxpZGF0ZVtdPjtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBNZXRhc2VuZGVyIHtcbiAgZXhwb3J0IGludGVyZmFjZSBNZXRhU2VuZGVyIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBGaWxlbmFtZTogc3RyaW5nO1xuICAgIElzRW5hYmxlZDogYm9vbGVhbjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0TWV0YVNlbmRlckJvZHkgPSB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dE1ldGFTZW5kZXJCb2R5ID0gT21pdDxQb3N0TWV0YVNlbmRlckJvZHksICdFbWFpbCc+XG5cbiAgZXhwb3J0IHR5cGUgR2V0TWV0YVNlbmRlclF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgRE5TPzogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIE1ldGFTZW5kZXJSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxNZXRhU2VuZGVyW10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RNZXRhU2VuZGVyUmVzcG9uc2UgPSBNZXRhU2VuZGVyUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0TWV0YVNlbmRlclJlc3BvbnNlID0gTWV0YVNlbmRlclJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldE1ldGFTZW5kZXJSZXNwb25zZSA9IE1ldGFTZW5kZXJSZXNwb25zZVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEROUyB7XG4gIGV4cG9ydCBlbnVtIERLSU1Db25maWd1cmF0aW9uQ2hlY2tTdGF0dXMge1xuICAgIE9LID0gJ09LJyxcbiAgICBFcnJvciA9ICdFcnJvcicsXG4gICAgTm90Q2hlY2tlZCA9ICdOb3QgY2hlY2tlZCdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIERLSU1Db25maWd1cmF0aW9uU3RhdHVzIHtcbiAgICBPSyA9ICdPSycsXG4gICAgRXJyb3IgPSAnRXJyb3InXG4gIH1cblxuICBleHBvcnQgZW51bSBTUEZDb25maWd1cmF0aW9uQ2hlY2tTdGF0dXMge1xuICAgIE9LID0gJ09LJyxcbiAgICBFcnJvciA9ICdFcnJvcicsXG4gICAgTm90Q2hlY2tlZCA9ICdOb3QgY2hlY2tlZCcsXG4gICAgTm90Rm91bmQgPSAnTm90IGZvdW5kJyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFNQRkNvbmZpZ3VyYXRpb25TdGF0dXMge1xuICAgIE9LID0gJ09LJyxcbiAgICBFcnJvciA9ICdFcnJvcidcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgRE5TIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIERLSU1SZWNvcmROYW1lOiBzdHJpbmc7XG4gICAgREtJTVJlY29yZFZhbHVlOiBzdHJpbmc7XG4gICAgREtJTVN0YXR1czogREtJTUNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cztcbiAgICBEb21haW46IHN0cmluZztcbiAgICBJc0NoZWNrSW5Qcm9ncmVzczogYm9vbGVhbjtcbiAgICBMYXN0Q2hlY2tBdDogc3RyaW5nO1xuICAgIE93bmVyU2hpcFRva2VuOiBzdHJpbmc7XG4gICAgT3duZXJTaGlwVG9rZW5SZWNvcmROYW1lOiBzdHJpbmc7XG4gICAgU1BGUmVjb3JkVmFsdWU6IHN0cmluZztcbiAgICBTUEZTdGF0dXM6IFNQRkNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgRE5TQ2hlY2sge1xuICAgIERLSU1FcnJvcnM6IHN0cmluZztcbiAgICBES0lNUmVjb3JkQ3VycmVudFZhbHVlOiBzdHJpbmc7XG4gICAgREtJTVN0YXR1czogREtJTUNvbmZpZ3VyYXRpb25TdGF0dXM7XG4gICAgU1BGRXJyb3JzOiBzdHJpbmc7XG4gICAgU1BGUmVjb3JkQ3VycmVudFZhbHVlOiBzdHJpbmc7XG4gICAgU1BGU3RhdHVzOiBTUEZDb25maWd1cmF0aW9uU3RhdHVzO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldEROU1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgSXNDaGVja0luUHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgIElzU2VuZGVySWRlbnRpZmllZD86IGJvb2xlYW47XG4gICAgSXNZYWhvb0ZCTD86IGJvb2xlYW47XG4gICAgTWF4TGFzdENoZWNrQXQ/OiBzdHJpbmc7XG4gICAgTWluTGFzdENoZWNrQXQ/OiBzdHJpbmc7XG4gICAgU1BGU3RhdHVzPzogU1BGQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICBleHBvcnQgdHlwZSBHZXRETlNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxETlNbXT47XG4gIGV4cG9ydCB0eXBlIFBvc3RETlNDaGVja1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPEROU0NoZWNrW10+O1xufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIEFQSUtleUNvbmZpZ3VyYXRpb24ge1xuICBleHBvcnQgZW51bSBSdW5MZXZlbCB7XG4gICAgTm9ybWFsID0gJ05vcm1hbCcsXG4gICAgU29mdExvY2sgPSAnU29mdGxvY2snLFxuICAgIEhhcmRMb2NrID0gJ0hhcmRsb2NrJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBBcGlLZXkge1xuICAgIElEOiBudW1iZXI7XG4gICAgQUNMOiBzdHJpbmc7XG4gICAgSXNBY3RpdmU6IGJvb2xlYW47XG4gICAgQVBJS2V5OiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgSXNNYXN0ZXI6IGJvb2xlYW47XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIFF1YXJhbnRpbmVWYWx1ZTogbnVtYmVyO1xuICAgIFJ1bmxldmVsOiBSdW5MZXZlbDtcbiAgICBTZWNyZXRLZXk6IHN0cmluZztcbiAgICBUcmFja0hvc3Q6IHN0cmluZztcbiAgICBVc2VySUQ6IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0QXBpS2V5Qm9keSA9IHtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgQUNMPzogc3RyaW5nO1xuICAgIElzQWN0aXZlPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dEFwaUtleUJvZHkgPSBQYXJ0aWFsPFBvc3RBcGlLZXlCb2R5PlxuXG4gIGV4cG9ydCB0eXBlIEdldEFwaUtleVF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQVBJS2V5Pzogc3RyaW5nO1xuICAgIElzQWN0aXZlPzogYm9vbGVhbjtcbiAgICBJc01hc3Rlcj86IGJvb2xlYW47XG4gICAgTmFtZT86IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBBcGlLZXlSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxBcGlLZXlbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdEFwaUtleVJlc3BvbnNlID0gQXBpS2V5UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0QXBpS2V5UmVzcG9uc2UgPSBBcGlLZXlSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRBcGlLZXlSZXNwb25zZSA9QXBpS2V5UmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBY2NvdW50U2V0dGluZyB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgTXlQcm9maWxlIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEFkZHJlc3NDaXR5OiBzdHJpbmc7XG4gICAgQWRkcmVzc0NvdW50cnk6IHN0cmluZztcbiAgICBBZGRyZXNzUG9zdGFsQ29kZTogc3RyaW5nO1xuICAgIEFkZHJlc3NTdGF0ZTogc3RyaW5nO1xuICAgIEFkZHJlc3NTdHJlZXQ6IHN0cmluZztcbiAgICBCaWxsaW5nRW1haWw6IHN0cmluZztcbiAgICBCaXJ0aGRheUF0OiBzdHJpbmc7XG4gICAgQ29tcGFueU5hbWU6IHN0cmluZztcbiAgICBDb21wYW55TnVtT2ZFbXBsb3llZXM6IHN0cmluZztcbiAgICBDb250YWN0UGhvbmU6IHN0cmluZztcbiAgICBFc3RpbWF0ZWRWb2x1bWU6IG51bWJlcjtcbiAgICBGZWF0dXJlczogc3RyaW5nO1xuICAgIEZpcnN0bmFtZTogc3RyaW5nO1xuICAgIEluZHVzdHJ5OiBudW1iZXI7XG4gICAgSm9iVGl0bGU6IHN0cmluZztcbiAgICBMYXN0bmFtZTogc3RyaW5nO1xuICAgIFZBVE51bWJlcjogc3RyaW5nO1xuICAgIFdlYnNpdGU6IHN0cmluZztcbiAgICBWQVQ6IG51bWJlcjtcbiAgICBVc2VySUQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVXNlciB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBBQ0w6IHN0cmluZztcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIExhc3RMb2dpbkF0OiBzdHJpbmc7XG4gICAgTG9jYWxlOiBzdHJpbmc7XG4gICAgVGltZXpvbmU6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBGaXJzdElwOiBzdHJpbmc7XG4gICAgTGFzdElwOiBzdHJpbmc7XG4gICAgTWF4QWxsb3dlZEFQSUtleXM6IG51bWJlcjtcbiAgICBVc2VybmFtZTogc3RyaW5nO1xuICAgIFdhcm5lZFJhdGVsaW1pdEF0OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUHV0TXlQcm9maWxlQm9keSA9IFBhcnRpYWw8T21pdDxNeVByb2ZpbGUsICdJRCcgfCAnVkFUJyB8ICdVc2VySUQnPj5cblxuICBleHBvcnQgdHlwZSBQdXRVc2VyQm9keSA9XG4gICAgUGFydGlhbDxPbWl0PFVzZXIsICdJRCcgfCAnQ3JlYXRlZEF0JyB8ICdGaXJzdElwJyB8ICdNYXhBbGxvd2VkQVBJS2V5cycgfCAnV2FybmVkUmF0ZWxpbWl0QXQnPj5cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgTXlQcm9maWxlUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TXlQcm9maWxlW10+O1xuICB0eXBlIFVzZXJSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxVc2VyW10+O1xuXG4gIGV4cG9ydCB0eXBlIFB1dE15UHJvZmlsZVJlc3BvbnNlID0gTXlQcm9maWxlUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0TXlQcm9maWxlUmVzcG9uc2UgPSBNeVByb2ZpbGVSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIFB1dFVzZXJSZXNwb25zZSA9IFVzZXJSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRVc2VyUmVzcG9uc2UgPSBVc2VyUmVzcG9uc2Vcbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuL01lc3NhZ2UnO1xuXG5leHBvcnQgbmFtZXNwYWNlIFN0YXRpc3RpYyB7XG4gIGV4cG9ydCBlbnVtIENhbXBhaWduT3ZlcnZpZXdJRFR5cGUge1xuICAgIFNlbnRDYW1wYWlnbiA9ICdDYW1wYWlnbicsXG4gICAgQUJUZXN0aW5nID0gJ0FYJyxcbiAgICBEcmFmdCA9ICdOTCdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENhbXBhaWduT3ZlcnZpZXdFZGl0TW9kZSB7XG4gICAgVG9vbCA9ICd0b29sJyxcbiAgICBIVE1MID0gJ2h0bWwnLFxuICAgIFRvb2wyID0gJ3Rvb2wyJyxcbiAgICBIVE1MMiA9ICdodG1sMicsXG4gICAgTUpNTCA9ICdtam1sJyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENhbXBhaWduT3ZlcnZpZXdFZGl0VHlwZSB7XG4gICAgRnVsbCA9ICdmdWxsJyxcbiAgICBVbmtub3duID0gJ3Vua25vd24nXG4gIH1cblxuICBleHBvcnQgZW51bSBDb3VudGVyU291cmNlIHtcbiAgICBDYW1wYWlnbiA9ICdDYW1wYWlnbicsXG4gICAgQVBJS2V5ID0gJ0FQSUtleScsXG4gICAgTGlzdCA9ICdMaXN0JyxcbiAgICBTZW5kZXIgPSAnU2VuZGVyJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ291bnRlclJlc29sdXRpb24ge1xuICAgIEhpZ2hlc3QgPSAnSGlnaGVzdCcsXG4gICAgSG91ciA9ICdIb3VyJyxcbiAgICBEYXkgPSAnRGF5JyxcbiAgICBMaWZldGltZSA9ICdMaWZldGltZSdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENvdW50ZXJUaW1pbmcge1xuICAgIE1lc3NhZ2UgPSAnTWVzc2FnZScsXG4gICAgRXZlbnQgPSAnRXZlbnQnXG4gIH1cblxuICBleHBvcnQgZW51bSBFbWFpbEV2ZW50IHtcbiAgICBPcGVuID0gJ29wZW4nLFxuICAgIENsaWNrID0gJ2NsaWNrJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDYW1wYWlnbk92ZXJ2aWV3IHtcbiAgICBDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBEZWxpdmVyZWRDb3VudDogbnVtYmVyO1xuICAgIEVkaXRNb2RlOiBDYW1wYWlnbk92ZXJ2aWV3RWRpdE1vZGU7XG4gICAgRWRpdFR5cGU6IENhbXBhaWduT3ZlcnZpZXdFZGl0VHlwZTtcbiAgICBJRDogbnVtYmVyO1xuICAgIElEVHlwZTogQ2FtcGFpZ25PdmVydmlld0lEVHlwZTtcbiAgICBPcGVuZWRDb3VudDogbnVtYmVyO1xuICAgIFByb2Nlc3NlZENvdW50OiBudW1iZXI7XG4gICAgU2VuZFRpbWVTdGFydDogbnVtYmVyO1xuICAgIFN0YXJyZWQ6IGJvb2xlYW47XG4gICAgU3ViamVjdDogc3RyaW5nO1xuICAgIFRpdGxlOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RTdGF0aXN0aWMge1xuICAgIEJsb2NrZWRDb3VudDogbnVtYmVyO1xuICAgIEJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIENsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIERlZmVycmVkQ291bnQ6IG51bWJlcjtcbiAgICBEZWxpdmVyZWRDb3VudDogbnVtYmVyO1xuICAgIEhhcmRib3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBMYXN0QWN0aXZpdHlBdDogc3RyaW5nO1xuICAgIE1hcmtldGluZ0NvbnRhY3RzOiBudW1iZXI7XG4gICAgT3BlbmVkQ291bnQ6IG51bWJlcjtcbiAgICBQcm9jZXNzZWRDb3VudDogbnVtYmVyO1xuICAgIFF1ZXVlZENvdW50OiBudW1iZXI7XG4gICAgU29mdGJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIFNwYW1Db21wbGFpbnRDb3VudDogbnVtYmVyO1xuICAgIFVuc3Vic2NyaWJlZENvdW50OiBudW1iZXI7XG4gICAgVXNlck1hcmtldGluZ0NvbnRhY3RzOiBudW1iZXI7XG4gICAgV29ya0Zsb3dFeGl0ZWRDb3VudDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBHRU9TdGF0aXN0aWMge1xuICAgIENsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIE9wZW5lZENvdW50OiBudW1iZXI7XG4gICAgQ291bnRyeTogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBMaXN0UmVjaXBpZW50U3RhdGlzdGljPERhdGEgPSBBcnJheTx1bmtub3duPj4ge1xuICAgIEJsb2NrZWRDb3VudDogbnVtYmVyO1xuICAgIEJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIENsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIERhdGE6IERhdGE7XG4gICAgRGVmZXJyZWRDb3VudDogbnVtYmVyO1xuICAgIERlbGl2ZXJlZENvdW50OiBudW1iZXI7XG4gICAgSGFyZGJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIExhc3RBY3Rpdml0eUF0OiBzdHJpbmc7XG4gICAgTGlzdFJlY2lwaWVudElEOiBudW1iZXI7XG4gICAgT3BlbmVkQ291bnQ6IG51bWJlcjtcbiAgICBQcmVRdWV1ZWRDb3VudDogbnVtYmVyO1xuICAgIFByb2Nlc3NlZENvdW50OiBudW1iZXI7XG4gICAgUXVldWVkQ291bnQ6IG51bWJlcjtcbiAgICBTb2Z0Ym91bmNlZENvdW50OiBudW1iZXI7XG4gICAgU3BhbUNvbXBsYWludENvdW50OiBudW1iZXI7XG4gICAgVW5zdWJzY3JpYmVkQ291bnQ6IG51bWJlcjtcbiAgICBXb3JrRmxvd0V4aXRlZENvdW50OiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFN0YXRDb3VudGVyIHtcbiAgICBBUElLZXlJRDogbnVtYmVyO1xuICAgIEV2ZW50Q2xpY2tEZWxheTogbnVtYmVyO1xuICAgIEV2ZW50Q2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgRXZlbnRPcGVuRGVsYXk6IG51bWJlcjtcbiAgICBFdmVudE9wZW5lZENvdW50OiBudW1iZXI7XG4gICAgRXZlbnRTcGFtQ291bnQ6IG51bWJlcjtcbiAgICBFdmVudFVuc3Vic2NyaWJlZENvdW50OiBudW1iZXI7XG4gICAgRXZlbnRXb3JrZmxvd0V4aXRlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZUJsb2NrZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlRGVmZXJyZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VIYXJkQm91bmNlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZU9wZW5lZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVF1ZXVlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVNlbnRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VTb2Z0Qm91bmNlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVNwYW1Db3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VVbnN1YnNjcmliZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VXb3JrRmxvd0V4aXRlZENvdW50OiBudW1iZXI7XG4gICAgU291cmNlSUQ6IG51bWJlcjtcbiAgICBUaW1lc2xpY2U6IHN0cmluZztcbiAgICBUb3RhbDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBMaW5rQ2xpY2tTdGF0aXN0aWMge1xuICAgIENsaWNrZWRFdmVudHNDb3VudDogbnVtYmVyO1xuICAgIENsaWNrZWRNZXNzYWdlc0NvdW50OiBudW1iZXI7XG4gICAgUG9zaXRpb25JbmRleDogbnVtYmVyO1xuICAgIFVSTDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBSZWNpcGllbnRFU1BTdGF0aXN0aWMge1xuICAgIEF0dGVtcHRlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgQ2xpY2tlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgRGVmZXJyZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIERlbGl2ZXJlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgSGFyZEJvdW5jZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIEVTUE5hbWU/OiBzdHJpbmc7XG4gICAgT3BlbmVkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBTb2Z0Qm91bmNlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgU3BhbVJlcG9ydHNDb3VudD86IG51bWJlcjtcbiAgICBVbnN1YnNjcmliZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIE9wZW5SYXRlPzogbnVtYmVyO1xuICAgIENsaWNrVGhyb3VnaFJhdGU/OiBudW1iZXI7XG4gICAgU29mdEJvdW5jZWRSYXRlPzogbnVtYmVyO1xuICAgIEhhcmRCb3VuY2VkUmF0ZT86IG51bWJlcjtcbiAgICBVbnN1YnNjcmliZWRSYXRlPzogbnVtYmVyO1xuICAgIFNwYW1SZXBvcnRzUmF0ZT86IG51bWJlcjtcbiAgICBEZWZlcnJlZFJhdGU/OiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFRvcExpbmtDbGlja2VkIHtcbiAgICBDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBMaW5rSWQ6IG51bWJlcjtcbiAgICBVcmw6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVXNlckFnZW50U3RhdGlzdGljIHtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIERpc3RpbmN0Q291bnQ6IG51bWJlcjtcbiAgICBQbGF0Zm9ybTogc3RyaW5nO1xuICAgIFVzZXJBZ2VudDogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduT3ZlcnZpZXdRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEFsbD86IGJvb2xlYW47XG4gICAgQXJjaGl2ZWQ/OiBib29sZWFuO1xuICAgIERyYWZ0cz86IGJvb2xlYW47XG4gICAgSUQ/OiBudW1iZXI7XG4gICAgSURUeXBlPzogQ2FtcGFpZ25PdmVydmlld0lEVHlwZTtcbiAgICBQcm9ncmFtbWVkPzogYm9vbGVhbjtcbiAgICBTZW50PzogYm9vbGVhbjtcbiAgICBTdGFycmVkPzogYm9vbGVhbjtcbiAgICBTdWJqZWN0Pzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdFN0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEJsb2NrZWQ/OiBib29sZWFuO1xuICAgIEJvdW5jZWQ/OiBib29sZWFuO1xuICAgIENsaWNrPzogYm9vbGVhbjtcbiAgICBEZWZlcnJlZD86IGJvb2xlYW47XG4gICAgSGFyZGJvdW5jZWQ/OiBib29sZWFuO1xuICAgIExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE1heExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE1pbkxhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE9wZW4/OiBib29sZWFuO1xuICAgIFF1ZXVlZD86IGJvb2xlYW47XG4gICAgU2VudD86IGJvb2xlYW47XG4gICAgU3BhbT86IGJvb2xlYW47XG4gICAgU29mdGJvdW5jZWQ/OiBib29sZWFuO1xuICAgIFVuc3Vic2NyaWJlZD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRHRU9TdGF0aXN0aWNzUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5UaW1lc3RhbXBQZXJpb2Q+ICZcbiAgICBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmXG4gIHtcbiAgICBDYW1wYWlnbklEPzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBDdXN0b21DYW1wYWlnbj86IHN0cmluZztcbiAgICBGcm9tPzogc3RyaW5nO1xuICAgIEZyb21Eb21haW4/OiBzdHJpbmc7XG4gICAgRnJvbUlEPzogbnVtYmVyO1xuICAgIEZyb21UeXBlPzogTWVzc2FnZS5Gcm9tVHlwZTtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzTmV3c2xldHRlclRvb2w/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgTWVzc2FnZVN0YXR1cz86IE1lc3NhZ2UuTWVzc2FnZVN0YXR1cztcbiAgICBQZXJpb2Q/OiBDb21tb24uUGVyaW9kO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0TGlzdFJlY2lwaWVudFN0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEJsb2NrZWQ/OiBib29sZWFuO1xuICAgIEJvdW5jZWQ/OiBib29sZWFuO1xuICAgIENsaWNrPzogYm9vbGVhbjtcbiAgICBDb250YWN0PzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBJc0V4Y2x1ZGVkRnJvbUNhbXBhaWducz86IGJvb2xlYW47XG4gICAgSXNVbnN1YnNjcmliZWQ/OiBib29sZWFuO1xuICAgIExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE1heExhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE1pbkxhc3RBY3Rpdml0eUF0Pzogc3RyaW5nO1xuICAgIE1heFVuc3Vic2NyaWJlZEF0Pzogc3RyaW5nO1xuICAgIE1pblVuc3Vic2NyaWJlZEF0Pzogc3RyaW5nO1xuICAgIE9wZW4/OiBib29sZWFuO1xuICAgIFF1ZXVlZD86IGJvb2xlYW47XG4gICAgU2VudD86IGJvb2xlYW47XG4gICAgU2hvd0V4dHJhRGF0YT86IGJvb2xlYW47XG4gICAgU3BhbT86IGJvb2xlYW47XG4gICAgVGltZVpvbmU/OiBzdHJpbmc7XG4gICAgVW5zdWJzY3JpYmVkPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldFN0YXRDb3VudGVyc1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uVGltZXN0YW1wUGVyaW9kPiAmXG4gICAgUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJlxuICB7XG4gICAgQ291bnRlclNvdXJjZTogQ291bnRlclNvdXJjZTtcbiAgICBDb3VudGVyUmVzb2x1dGlvbjogQ291bnRlclJlc29sdXRpb247XG4gICAgQ291bnRlclRpbWluZzogQ291bnRlclRpbWluZztcbiAgICBTb3VyY2VJRD86IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldExpbmtDbGlja1N0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIENhbXBhaWduSUQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldFJlY2lwaWVudEVTUFN0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IEdldExpbmtDbGlja1N0YXRpc3RpY3NRdWVyeVBhcmFtcyAmXG4gIHtcbiAgICBFU1BfTmFtZT86IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldFRvcExpbmtDbGlja2VkUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5UaW1lc3RhbXBQZXJpb2Q+ICZcbiAgICBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmXG4gIHtcbiAgICBBY3R1YWxDbGlja3M/OiBib29sZWFuO1xuICAgIENhbXBhaWduSUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgQ3VzdG9tQ2FtcGFpZ24/OiBzdHJpbmc7XG4gICAgRnJvbT86IHN0cmluZztcbiAgICBGcm9tRG9tYWluPzogc3RyaW5nO1xuICAgIEZyb21JRD86IG51bWJlcjtcbiAgICBGcm9tVHlwZT86IE1lc3NhZ2UuRnJvbVR5cGU7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc05ld3NsZXR0ZXJUb29sPzogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICAgIE1lc3NhZ2U/OiBudW1iZXI7XG4gICAgUGVyaW9kPzogQ29tbW9uLlBlcmlvZDtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldFVzZXJBZ2VudFN0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENhbXBhaWduSUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIEN1c3RvbUNhbXBhaWduPzogc3RyaW5nO1xuICAgIEV2ZW50PzogRW1haWxFdmVudDtcbiAgICBFeGNsdWRlUGxhdGZvcm0/OiBzdHJpbmc7XG4gICAgRnJvbT86IHN0cmluZztcbiAgICBGcm9tRG9tYWluPzogc3RyaW5nO1xuICAgIEZyb21JRD86IG51bWJlcjtcbiAgICBGcm9tVHlwZT86IE1lc3NhZ2UuRnJvbVR5cGU7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc05ld3NsZXR0ZXJUb29sPzogYm9vbGVhbjtcbiAgICBJc1N0YXJyZWQ/OiBib29sZWFuO1xuICAgIFBlcmlvZD86IENvbW1vbi5QZXJpb2Q7XG4gICAgUGxhdGZvcm0/OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduT3ZlcnZpZXdSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDYW1wYWlnbk92ZXJ2aWV3W10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RTdGF0aXN0aWNzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdFN0YXRpc3RpY1tdPjtcblxuICBleHBvcnQgdHlwZSBHZXRHRU9TdGF0aXN0aWNzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8R0VPU3RhdGlzdGljW10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldExpc3RSZWNpcGllbnRTdGF0aXN0aWNzUmVzcG9uc2U8RGF0YSA9IEFycmF5PHVua25vd24+PiA9XG4gICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PExpc3RSZWNpcGllbnRTdGF0aXN0aWM8RGF0YT4+PjtcblxuICBleHBvcnQgdHlwZSBHZXRTdGF0Q291bnRlcnNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxTdGF0Q291bnRlcltdPjtcblxuICBleHBvcnQgdHlwZSBHZXRMaW5rQ2xpY2tTdGF0aXN0aWNzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TGlua0NsaWNrU3RhdGlzdGljW10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldFJlY2lwaWVudEVTUFN0YXRpc3RpY3NSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxSZWNpcGllbnRFU1BTdGF0aXN0aWNbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0VG9wTGlua0NsaWNrZWRSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxUb3BMaW5rQ2xpY2tlZFtdPjtcblxuICBleHBvcnQgdHlwZSBHZXRVc2VyQWdlbnRTdGF0aXN0aWNzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8VXNlckFnZW50U3RhdGlzdGljW10+O1xufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIFRlbXBsYXRlIHtcbiAgZXhwb3J0IGVudW0gQ2F0ZWdvcmllcyB7XG4gICAgRnVsbCA9ICdmdWxsJyxcbiAgICBCYXNpYyA9ICdiYXNpYycsXG4gICAgTmV3c0xldHRlciA9ICduZXdzbGV0dGVyJyxcbiAgICBFQ29tbWVyY2UgPSAnZS1jb21tZXJjZScsXG4gICAgRXZlbnRzID0gJ2V2ZW50cycsXG4gICAgVHJhdmVsID0gJ3RyYXZlbCcsXG4gICAgU3BvcnRzID0gJ3Nwb3J0cycsXG4gICAgV2VsY29tZSA9ICd3ZWxjb21lJyxcbiAgICBDb250YWN0UHJvcGVydHlVcGRhdGUgPSAnY29udGFjdC1wcm9wZXJ0eS11cGRhdGUnLFxuICAgIFN1cHBvcnQgPSAnc3VwcG9ydCcsXG4gICAgSW52b2ljZSA9ICdpbnZvaWNlJyxcbiAgICBBbm5pdmVyc2FyeSA9ICdhbm5pdmVyc2FyeScsXG4gICAgQWNjb3VudCA9ICdhY2NvdW50JyxcbiAgICBBY3RpdmF0aW9uID0gJ2FjdGl2YXRpb24nXG4gIH1cblxuICBleHBvcnQgZW51bSBDYXRlZ29yaWVzU2VsZWN0aW9uTWV0aG9kIHtcbiAgICBDb250YWluc0FueSA9ICdjb250YWluc2FueScsXG4gICAgQ29udGFpbnNBbGwgPSAnY29udGFpbnNhbGwnLFxuICAgIElzU3ViU2V0ID0gJ2lzc3Vic2V0J1xuICB9XG5cbiAgZXhwb3J0IGVudW0gRWRpdE1vZGUge1xuICAgIERyYWdBbmREcm9wQnVpbGRlciA9IDEsXG4gICAgSFRNTEJ1aWxkZXIgPSAyLFxuICAgIFNhdmVkU2VjdGlvbkJ1aWxkZXIgPSAzLFxuICAgIE1KTUxCdWlsZGVyID0gNFxuICB9XG5cbiAgZXhwb3J0IGVudW0gT3duZXJUeXBlIHtcbiAgICBBcGlLZXkgPSAnYXBpa2V5JyxcbiAgICBVc2VyID0gJ3VzZXInLFxuICAgIEdsb2JhbCA9ICdnbG9iYWwnXG4gIH1cblxuICBleHBvcnQgZW51bSBQdXJwb3NlcyB7XG4gICAgTWFya2V0aW5nID0gJ21hcmtldGluZycsXG4gICAgVHJhbnNhY3Rpb25hbCA9ICd0cmFuc2FjdGlvbmFsJyxcbiAgICBBdXRvbWF0aW9uID0gJ2F1dG9tYXRpb24nXG4gIH1cblxuICBleHBvcnQgZW51bSBQdXJwb3Nlc1NlbGVjdGlvbk1ldGhvZCB7XG4gICAgQ29udGFpbnNBbnkgPSAnY29udGFpbnNhbnknLFxuICAgIENvbnRhaW5zQWxsID0gJ2NvbnRhaW5zYWxsJyxcbiAgICBJc1N1YlNldCA9ICdpc3N1YnNldCdcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgSGVhZGVycyB7XG4gICAgRnJvbTogc3RyaW5nO1xuICAgIFN1YmplY3Q6IHN0cmluZztcbiAgICAnUmVwbHktdG8nOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlIHtcbiAgICBBdXRob3I6IHN0cmluZztcbiAgICBDYXRlZ29yaWVzOiBDYXRlZ29yaWVzO1xuICAgIENvcHlyaWdodDogc3RyaW5nO1xuICAgIERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgRWRpdE1vZGU6IEVkaXRNb2RlO1xuICAgIElzU3RhcnJlZDogYm9vbGVhbjtcbiAgICBJc1RleHRQYXJ0R2VuZXJhdGlvbkVuYWJsZWQ6IGJvb2xlYW47XG4gICAgTG9jYWxlOiBzdHJpbmc7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIE93bmVyVHlwZTogT3duZXJUeXBlO1xuICAgIFByZXNldHM6IHN0cmluZztcbiAgICBQdXJwb3NlczogUHVycG9zZXM7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBPd25lcklkOiBudW1iZXI7XG4gICAgUHJldmlld3M6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBMYXN0VXBkYXRlZEF0OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBUZW1wbGF0ZURldGFpbENvbnRlbnQgPSB7XG4gICAgSGVhZGVyczogSGVhZGVycztcbiAgICAnSHRtbC1wYXJ0Jzogc3RyaW5nO1xuICAgICdUZXh0LXBhcnQnOiBzdHJpbmc7XG4gICAgTUpNTENvbnRlbnQ6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0VGVtcGxhdGVCb2R5ID1cbiAgICBQYXJ0aWFsPE9taXQ8VGVtcGxhdGUsICdOYW1lJyB8ICdJRCcgfCAnT3duZXJJZCcgfCAnUHJldmlld3MnIHwgJ0NyZWF0ZWRBdCcgfCAnTGFzdFVwZGF0ZWRBdCc+PiAmXG4gIHtcbiAgICBOYW1lOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRUZW1wbGF0ZUJvZHkgPSBQYXJ0aWFsPFBvc3RUZW1wbGF0ZUJvZHk+XG5cbiAgZXhwb3J0IHR5cGUgR2V0VGVtcGxhdGVRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIENhdGVnb3JpZXM/OiBzdHJpbmc7XG4gICAgQ2F0ZWdvcmllc1NlbGVjdGlvbk1ldGhvZD86IENhdGVnb3JpZXNTZWxlY3Rpb25NZXRob2Q7XG4gICAgRWRpdE1vZGU/OiBFZGl0TW9kZTtcbiAgICBOYW1lPzogc3RyaW5nO1xuICAgIE93bmVyVHlwZT86IE93bmVyVHlwZTtcbiAgICBQdXJwb3Nlcz86IFB1cnBvc2VzO1xuICAgIFB1cnBvc2VzU2VsZWN0aW9uTWV0aG9kPzogUHVycG9zZXNTZWxlY3Rpb25NZXRob2Q7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0VGVtcGxhdGVEZXRhaWxDb250ZW50Qm9keSA9XG4gICAgUGFydGlhbDxPbWl0PFRlbXBsYXRlRGV0YWlsQ29udGVudCwgJ0hlYWRlcnMnPj4gJlxuICB7XG4gICAgSGVhZGVycz86IFBhcnRpYWw8SGVhZGVycz47XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRUZW1wbGF0ZURldGFpbENvbnRlbnRCb2R5ID0gUG9zdFRlbXBsYXRlRGV0YWlsQ29udGVudEJvZHlcblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgVGVtcGxhdGVSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxUZW1wbGF0ZVtdPjtcbiAgdHlwZSBUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxUZW1wbGF0ZURldGFpbENvbnRlbnRbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdFRlbXBsYXRlUmVzcG9uc2UgPSBUZW1wbGF0ZVJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dFRlbXBsYXRlUmVzcG9uc2UgPSBUZW1wbGF0ZVJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldFRlbXBsYXRlUmVzcG9uc2UgPSBUZW1wbGF0ZVJlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgUG9zdFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlID0gVGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0VGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2UgPSBUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZSA9IFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlXG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgV2ViaG9vayB7XG4gIGV4cG9ydCBlbnVtIEV2ZW50VHlwZSB7XG4gICAgT3BlbiA9ICdvcGVuJyxcbiAgICBDbGljayA9ICdjbGljaycsXG4gICAgQm91bmNlID0gJ2JvdW5jZScsXG4gICAgU3BhbSA9ICdzcGFtJyxcbiAgICBCbG9ja2VkID0gJ2Jsb2NrZWQnLFxuICAgIFVuU3ViID0gJ3Vuc3ViJyxcbiAgICBTZW50ID0gJ3NlbnQnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gRXZlbnRUeXBlVmFsdWUge1xuICAgIENsaWNrID0gMSxcbiAgICBCb3VuY2UgPSAyLFxuICAgIFNwYW0gPSAzLFxuICAgIEJsb2NrZWQgPSA0LFxuICAgIFVuc3Vic2NyaWJlID0gNSxcbiAgICBPcGVuID0gNixcbiAgICBTZW50ID0gNyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFN0YXR1cyB7XG4gICAgRGVhZCA9ICdkZWFkJyxcbiAgICBBbGl2ZSA9ICdhbGl2ZSdcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFZlcnNpb24gPSAxIHwgMjtcblxuICBleHBvcnQgaW50ZXJmYWNlIEV2ZW50Q2FsbGJhY2tVcmwge1xuICAgIElEOiBudW1iZXI7XG4gICAgRXZlbnRUeXBlOiBFdmVudFR5cGU7XG4gICAgSXNCYWNrdXA6IGJvb2xlYW47XG4gICAgU3RhdHVzOiBTdGF0dXM7XG4gICAgQVBJS2V5SUQ6IG51bWJlcjtcbiAgICBWZXJzaW9uOiBWZXJzaW9uO1xuICAgIFVybDogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RFdmVudENhbGxiYWNrVXJsQm9keSA9IHtcbiAgICBVcmw6IHN0cmluZztcbiAgICBFdmVudFR5cGU/OiBFdmVudFR5cGU7XG4gICAgSXNCYWNrdXA/OiBib29sZWFuO1xuICAgIFN0YXR1cz86IFN0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dEV2ZW50Q2FsbGJhY2tVcmxCb2R5ID0gUGFydGlhbDxQb3N0RXZlbnRDYWxsYmFja1VybEJvZHk+XG5cbiAgZXhwb3J0IHR5cGUgR2V0RXZlbnRDYWxsYmFja1VybFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQmFja3VwPzogYm9vbGVhbjtcbiAgICBFdmVudFR5cGU/OiBFdmVudFR5cGVWYWx1ZTtcbiAgICBTdGF0dXM/OiBzdHJpbmc7XG4gICAgVmVyc2lvbj86IFZlcnNpb247XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgRXZlbnRDYWxsYmFja1VybFJlc3BvbnNlID0ge1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgVG90YWw6IG51bWJlcjtcbiAgICBEYXRhOiBFdmVudENhbGxiYWNrVXJsW107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgUG9zdEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZSA9IEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRFdmVudENhbGxiYWNrVXJsUmVzcG9uc2UgPSBFdmVudENhbGxiYWNrVXJsUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0RXZlbnRDYWxsYmFja1VybFJlc3BvbnNlID0gRXZlbnRDYWxsYmFja1VybFJlc3BvbnNlXG59XG4iLCIvLyBDT01NT05cbmV4cG9ydCB7IExpYnJhcnlSZXNwb25zZSwgTGlicmFyeUxvY2FsUmVzcG9uc2UgfSBmcm9tICcuL0xpYnJhcnlSZXNwb25zZSc7XG5leHBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbi8vIFNFTkRcbmV4cG9ydCB7XG4gIFNlbmRFbWFpbFYzLFxuICBTZW5kRW1haWxWM18xLFxufSBmcm9tICcuL1NlbmRFbWFpbCc7XG5cbi8vIEFQSVxuZXhwb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4vTWVzc2FnZSc7XG5leHBvcnQge1xuICBDb250YWN0LFxuICBDb250YWN0TGlzdCxcbiAgQnVsa0NvbnRhY3RNYW5hZ2VtZW50LFxuICBDb250YWN0UHJvcGVydGllcyxcbiAgQ29udGFjdFN1YnNjcmlwdGlvbixcbiAgQ29udGFjdFZlcmlmaWNhdGlvbixcbn0gZnJvbSAnLi9Db250YWN0JztcbmV4cG9ydCB7XG4gIERyYWZ0Q2FtcGFpZ24sXG4gIFNlbnRDYW1wYWlnbixcbn0gZnJvbSAnLi9DYW1wYWlnbic7XG5leHBvcnQgeyBTZWdtZW50YXRpb24gfSBmcm9tICcuL1NlZ21lbnRhdGlvbic7XG5leHBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gJy4vVGVtcGxhdGUnO1xuZXhwb3J0IHsgU3RhdGlzdGljIH0gZnJvbSAnLi9TdGF0aXN0aWMnO1xuZXhwb3J0IHsgTWVzc2FnZUV2ZW50IH0gZnJvbSAnLi9NZXNzYWdlRXZlbnQnO1xuZXhwb3J0IHsgV2ViaG9vayB9IGZyb20gJy4vV2ViaG9vayc7XG5leHBvcnQgeyBQYXJzZSB9IGZyb20gJy4vUGFyc2UnO1xuZXhwb3J0IHtcbiAgU2VuZGVyLFxuICBNZXRhc2VuZGVyLFxuICBETlMsXG59IGZyb20gJy4vU2VuZGVyQWRkcmVzc0FuZERvbWFpbic7XG5leHBvcnQge1xuICBBUElLZXlDb25maWd1cmF0aW9uLFxuICBBY2NvdW50U2V0dGluZyxcbn0gZnJvbSAnLi9TZXR0aW5nJztcblxuLy8gU01TXG5leHBvcnQgeyBTZW5kTWVzc2FnZSB9IGZyb20gJy4vU2VuZE1lc3NhZ2UnO1xuZXhwb3J0IHsgU01TTWVzc2FnZSB9IGZyb20gJy4vU01TTWVzc2FnZSc7XG4iLCJpbXBvcnQgaXNOaWwgZnJvbSAnLi9pc05pbCc7XG5pbXBvcnQgaXNOdWxsIGZyb20gJy4vaXNOdWxsJztcbmltcG9ydCBpc1VuZGVmaW5lZCBmcm9tICcuL2lzVW5kZWZpbmVkJztcbmltcG9ydCBpc1B1cmVPYmplY3QgZnJvbSAnLi9pc1B1cmVPYmplY3QnO1xuaW1wb3J0IHNldFZhbHVlSWZOb3ROaWwgZnJvbSAnLi9zZXRWYWx1ZUlmTm90TmlsJztcblxuZXhwb3J0IHtcbiAgaXNOaWwsXG4gIGlzTnVsbCxcbiAgaXNVbmRlZmluZWQsXG4gIGlzUHVyZU9iamVjdCxcbiAgc2V0VmFsdWVJZk5vdE5pbCxcbn07XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbmltcG9ydCBpc051bGwgZnJvbSAnLi9pc051bGwnO1xuaW1wb3J0IGlzVW5kZWZpbmVkIGZyb20gJy4vaXNVbmRlZmluZWQnO1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzTmlsKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1VuZGVmaW5lZCh2YWx1ZSkgfHwgaXNOdWxsKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNOaWw7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc051bGwodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudWxsIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc051bGw7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc1B1cmVPYmplY3QodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAmJiB2YWx1ZSAhPT0gbnVsbFxuICAgICYmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT09IG51bGwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1B1cmVPYmplY3Q7XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHVuZGVmaW5lZCB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1VuZGVmaW5lZDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbmltcG9ydCB7IFRPYmplY3QgfSBmcm9tICcuLi90eXBlcyc7XG4vKnV0aWxzKi9cbmltcG9ydCBpc05pbCBmcm9tICcuL2lzTmlsJztcbmltcG9ydCBpc051bGwgZnJvbSAnLi9pc051bGwnO1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIHNldFZhbHVlSWZOb3ROaWwoXG4gIHRhcmdldE9iamVjdDogVE9iamVjdC5Vbmtub3duUmVjLFxuICBwYXRoOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duLFxuKTogdm9pZCB7XG4gIGlmICh0eXBlb2YgdGFyZ2V0T2JqZWN0ICE9PSAnb2JqZWN0JyB8fCBpc051bGwodGFyZ2V0T2JqZWN0KSkge1xuICAgIHRocm93IEVycm9yKCdBcmd1bWVudCBcInRhcmdldE9iamVjdFwiIGlzIG5vdCBvYmplY3QnKTtcbiAgfVxuXG4gIGlmICghcGF0aCkge1xuICAgIHRocm93IEVycm9yKCdBcmd1bWVudCBcInBhdGhcIiBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFpc05pbCh2YWx1ZSkpIHtcbiAgICB0YXJnZXRPYmplY3RbcGF0aF0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzZXRWYWx1ZUlmTm90TmlsO1xuIiwiOyhmdW5jdGlvbiAoZ2xvYmFsT2JqZWN0KSB7XHJcbiAgJ3VzZSBzdHJpY3QnO1xyXG5cclxuLypcclxuICogICAgICBiaWdudW1iZXIuanMgdjkuMC4xXHJcbiAqICAgICAgQSBKYXZhU2NyaXB0IGxpYnJhcnkgZm9yIGFyYml0cmFyeS1wcmVjaXNpb24gYXJpdGhtZXRpYy5cclxuICogICAgICBodHRwczovL2dpdGh1Yi5jb20vTWlrZU1jbC9iaWdudW1iZXIuanNcclxuICogICAgICBDb3B5cmlnaHQgKGMpIDIwMjAgTWljaGFlbCBNY2xhdWdobGluIDxNOGNoODhsQGdtYWlsLmNvbT5cclxuICogICAgICBNSVQgTGljZW5zZWQuXHJcbiAqXHJcbiAqICAgICAgQmlnTnVtYmVyLnByb3RvdHlwZSBtZXRob2RzICAgICB8ICBCaWdOdW1iZXIgbWV0aG9kc1xyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIGFic29sdXRlVmFsdWUgICAgICAgICAgICBhYnMgICAgfCAgY2xvbmVcclxuICogICAgICBjb21wYXJlZFRvICAgICAgICAgICAgICAgICAgICAgIHwgIGNvbmZpZyAgICAgICAgICAgICAgIHNldFxyXG4gKiAgICAgIGRlY2ltYWxQbGFjZXMgICAgICAgICAgICBkcCAgICAgfCAgICAgIERFQ0lNQUxfUExBQ0VTXHJcbiAqICAgICAgZGl2aWRlZEJ5ICAgICAgICAgICAgICAgIGRpdiAgICB8ICAgICAgUk9VTkRJTkdfTU9ERVxyXG4gKiAgICAgIGRpdmlkZWRUb0ludGVnZXJCeSAgICAgICBpZGl2ICAgfCAgICAgIEVYUE9ORU5USUFMX0FUXHJcbiAqICAgICAgZXhwb25lbnRpYXRlZEJ5ICAgICAgICAgIHBvdyAgICB8ICAgICAgUkFOR0VcclxuICogICAgICBpbnRlZ2VyVmFsdWUgICAgICAgICAgICAgICAgICAgIHwgICAgICBDUllQVE9cclxuICogICAgICBpc0VxdWFsVG8gICAgICAgICAgICAgICAgZXEgICAgIHwgICAgICBNT0RVTE9fTU9ERVxyXG4gKiAgICAgIGlzRmluaXRlICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIFBPV19QUkVDSVNJT05cclxuICogICAgICBpc0dyZWF0ZXJUaGFuICAgICAgICAgICAgZ3QgICAgIHwgICAgICBGT1JNQVRcclxuICogICAgICBpc0dyZWF0ZXJUaGFuT3JFcXVhbFRvICAgZ3RlICAgIHwgICAgICBBTFBIQUJFVFxyXG4gKiAgICAgIGlzSW50ZWdlciAgICAgICAgICAgICAgICAgICAgICAgfCAgaXNCaWdOdW1iZXJcclxuICogICAgICBpc0xlc3NUaGFuICAgICAgICAgICAgICAgbHQgICAgIHwgIG1heGltdW0gICAgICAgICAgICAgIG1heFxyXG4gKiAgICAgIGlzTGVzc1RoYW5PckVxdWFsVG8gICAgICBsdGUgICAgfCAgbWluaW11bSAgICAgICAgICAgICAgbWluXHJcbiAqICAgICAgaXNOYU4gICAgICAgICAgICAgICAgICAgICAgICAgICB8ICByYW5kb21cclxuICogICAgICBpc05lZ2F0aXZlICAgICAgICAgICAgICAgICAgICAgIHwgIHN1bVxyXG4gKiAgICAgIGlzUG9zaXRpdmUgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIGlzWmVybyAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIG1pbnVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIG1vZHVsbyAgICAgICAgICAgICAgICAgICBtb2QgICAgfFxyXG4gKiAgICAgIG11bHRpcGxpZWRCeSAgICAgICAgICAgICB0aW1lcyAgfFxyXG4gKiAgICAgIG5lZ2F0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHByZWNpc2lvbiAgICAgICAgICAgICAgICBzZCAgICAgfFxyXG4gKiAgICAgIHNoaWZ0ZWRCeSAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHNxdWFyZVJvb3QgICAgICAgICAgICAgICBzcXJ0ICAgfFxyXG4gKiAgICAgIHRvRXhwb25lbnRpYWwgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRml4ZWQgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRnJhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvSlNPTiAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvTnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvUHJlY2lzaW9uICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHZhbHVlT2YgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKlxyXG4gKi9cclxuXHJcblxyXG4gIHZhciBCaWdOdW1iZXIsXHJcbiAgICBpc051bWVyaWMgPSAvXi0/KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OmVbKy1dP1xcZCspPyQvaSxcclxuICAgIG1hdGhjZWlsID0gTWF0aC5jZWlsLFxyXG4gICAgbWF0aGZsb29yID0gTWF0aC5mbG9vcixcclxuXHJcbiAgICBiaWdudW1iZXJFcnJvciA9ICdbQmlnTnVtYmVyIEVycm9yXSAnLFxyXG4gICAgdG9vTWFueURpZ2l0cyA9IGJpZ251bWJlckVycm9yICsgJ051bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6ICcsXHJcblxyXG4gICAgQkFTRSA9IDFlMTQsXHJcbiAgICBMT0dfQkFTRSA9IDE0LFxyXG4gICAgTUFYX1NBRkVfSU5URUdFUiA9IDB4MWZmZmZmZmZmZmZmZmYsICAgICAgICAgLy8gMl41MyAtIDFcclxuICAgIC8vIE1BWF9JTlQzMiA9IDB4N2ZmZmZmZmYsICAgICAgICAgICAgICAgICAgIC8vIDJeMzEgLSAxXHJcbiAgICBQT1dTX1RFTiA9IFsxLCAxMCwgMTAwLCAxZTMsIDFlNCwgMWU1LCAxZTYsIDFlNywgMWU4LCAxZTksIDFlMTAsIDFlMTEsIDFlMTIsIDFlMTNdLFxyXG4gICAgU1FSVF9CQVNFID0gMWU3LFxyXG5cclxuICAgIC8vIEVESVRBQkxFXHJcbiAgICAvLyBUaGUgbGltaXQgb24gdGhlIHZhbHVlIG9mIERFQ0lNQUxfUExBQ0VTLCBUT19FWFBfTkVHLCBUT19FWFBfUE9TLCBNSU5fRVhQLCBNQVhfRVhQLCBhbmRcclxuICAgIC8vIHRoZSBhcmd1bWVudHMgdG8gdG9FeHBvbmVudGlhbCwgdG9GaXhlZCwgdG9Gb3JtYXQsIGFuZCB0b1ByZWNpc2lvbi5cclxuICAgIE1BWCA9IDFFOTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYX0lOVDMyXHJcblxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgQmlnTnVtYmVyIGNvbnN0cnVjdG9yLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNsb25lKGNvbmZpZ09iamVjdCkge1xyXG4gICAgdmFyIGRpdiwgY29udmVydEJhc2UsIHBhcnNlTnVtZXJpYyxcclxuICAgICAgUCA9IEJpZ051bWJlci5wcm90b3R5cGUgPSB7IGNvbnN0cnVjdG9yOiBCaWdOdW1iZXIsIHRvU3RyaW5nOiBudWxsLCB2YWx1ZU9mOiBudWxsIH0sXHJcbiAgICAgIE9ORSA9IG5ldyBCaWdOdW1iZXIoMSksXHJcblxyXG5cclxuICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFRElUQUJMRSBDT05GSUcgREVGQVVMVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICAgIC8vIFRoZSBkZWZhdWx0IHZhbHVlcyBiZWxvdyBtdXN0IGJlIGludGVnZXJzIHdpdGhpbiB0aGUgaW5jbHVzaXZlIHJhbmdlcyBzdGF0ZWQuXHJcbiAgICAgIC8vIFRoZSB2YWx1ZXMgY2FuIGFsc28gYmUgY2hhbmdlZCBhdCBydW4tdGltZSB1c2luZyBCaWdOdW1iZXIuc2V0LlxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGZvciBvcGVyYXRpb25zIGludm9sdmluZyBkaXZpc2lvbi5cclxuICAgICAgREVDSU1BTF9QTEFDRVMgPSAyMCwgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWFxyXG5cclxuICAgICAgLy8gVGhlIHJvdW5kaW5nIG1vZGUgdXNlZCB3aGVuIHJvdW5kaW5nIHRvIHRoZSBhYm92ZSBkZWNpbWFsIHBsYWNlcywgYW5kIHdoZW4gdXNpbmdcclxuICAgICAgLy8gdG9FeHBvbmVudGlhbCwgdG9GaXhlZCwgdG9Gb3JtYXQgYW5kIHRvUHJlY2lzaW9uLCBhbmQgcm91bmQgKGRlZmF1bHQgdmFsdWUpLlxyXG4gICAgICAvLyBVUCAgICAgICAgIDAgQXdheSBmcm9tIHplcm8uXHJcbiAgICAgIC8vIERPV04gICAgICAgMSBUb3dhcmRzIHplcm8uXHJcbiAgICAgIC8vIENFSUwgICAgICAgMiBUb3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gRkxPT1IgICAgICAzIFRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICAvLyBIQUxGX1VQICAgIDQgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHVwLlxyXG4gICAgICAvLyBIQUxGX0RPV04gIDUgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIGRvd24uXHJcbiAgICAgIC8vIEhBTEZfRVZFTiAgNiBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyBldmVuIG5laWdoYm91ci5cclxuICAgICAgLy8gSEFMRl9DRUlMICA3IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gSEFMRl9GTE9PUiA4IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgUk9VTkRJTkdfTU9ERSA9IDQsICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDhcclxuXHJcbiAgICAgIC8vIEVYUE9ORU5USUFMX0FUIDogW1RPX0VYUF9ORUcgLCBUT19FWFBfUE9TXVxyXG5cclxuICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBiZW5lYXRoIHdoaWNoIHRvU3RyaW5nIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAtN1xyXG4gICAgICBUT19FWFBfTkVHID0gLTcsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gLU1BWFxyXG5cclxuICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBhYm92ZSB3aGljaCB0b1N0cmluZyByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogMjFcclxuICAgICAgVE9fRVhQX1BPUyA9IDIxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWFxyXG5cclxuICAgICAgLy8gUkFOR0UgOiBbTUlOX0VYUCwgTUFYX0VYUF1cclxuXHJcbiAgICAgIC8vIFRoZSBtaW5pbXVtIGV4cG9uZW50IHZhbHVlLCBiZW5lYXRoIHdoaWNoIHVuZGVyZmxvdyB0byB6ZXJvIG9jY3Vycy5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6IC0zMjQgICg1ZS0zMjQpXHJcbiAgICAgIE1JTl9FWFAgPSAtMWU3LCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLTEgdG8gLU1BWFxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gZXhwb25lbnQgdmFsdWUsIGFib3ZlIHdoaWNoIG92ZXJmbG93IHRvIEluZmluaXR5IG9jY3Vycy5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6ICAzMDggICgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOClcclxuICAgICAgLy8gRm9yIE1BWF9FWFAgPiAxZTcsIGUuZy4gbmV3IEJpZ051bWJlcignMWUxMDAwMDAwMDAnKS5wbHVzKDEpIG1heSBiZSBzbG93LlxyXG4gICAgICBNQVhfRVhQID0gMWU3LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgdG8gTUFYXHJcblxyXG4gICAgICAvLyBXaGV0aGVyIHRvIHVzZSBjcnlwdG9ncmFwaGljYWxseS1zZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLCBpZiBhdmFpbGFibGUuXHJcbiAgICAgIENSWVBUTyA9IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ1ZSBvciBmYWxzZVxyXG5cclxuICAgICAgLy8gVGhlIG1vZHVsbyBtb2RlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyB0aGUgbW9kdWx1czogYSBtb2Qgbi5cclxuICAgICAgLy8gVGhlIHF1b3RpZW50IChxID0gYSAvIG4pIGlzIGNhbGN1bGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdW5kaW5nIG1vZGUuXHJcbiAgICAgIC8vIFRoZSByZW1haW5kZXIgKHIpIGlzIGNhbGN1bGF0ZWQgYXM6IHIgPSBhIC0gbiAqIHEuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFVQICAgICAgICAwIFRoZSByZW1haW5kZXIgaXMgcG9zaXRpdmUgaWYgdGhlIGRpdmlkZW5kIGlzIG5lZ2F0aXZlLCBlbHNlIGlzIG5lZ2F0aXZlLlxyXG4gICAgICAvLyBET1dOICAgICAgMSBUaGUgcmVtYWluZGVyIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpZGVuZC5cclxuICAgICAgLy8gICAgICAgICAgICAgVGhpcyBtb2R1bG8gbW9kZSBpcyBjb21tb25seSBrbm93biBhcyAndHJ1bmNhdGVkIGRpdmlzaW9uJyBhbmQgaXNcclxuICAgICAgLy8gICAgICAgICAgICAgZXF1aXZhbGVudCB0byAoYSAlIG4pIGluIEphdmFTY3JpcHQuXHJcbiAgICAgIC8vIEZMT09SICAgICAzIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlzb3IgKFB5dGhvbiAlKS5cclxuICAgICAgLy8gSEFMRl9FVkVOIDYgVGhpcyBtb2R1bG8gbW9kZSBpbXBsZW1lbnRzIHRoZSBJRUVFIDc1NCByZW1haW5kZXIgZnVuY3Rpb24uXHJcbiAgICAgIC8vIEVVQ0xJRCAgICA5IEV1Y2xpZGlhbiBkaXZpc2lvbi4gcSA9IHNpZ24obikgKiBmbG9vcihhIC8gYWJzKG4pKS5cclxuICAgICAgLy8gICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBpcyBhbHdheXMgcG9zaXRpdmUuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFRoZSB0cnVuY2F0ZWQgZGl2aXNpb24sIGZsb29yZWQgZGl2aXNpb24sIEV1Y2xpZGlhbiBkaXZpc2lvbiBhbmQgSUVFRSA3NTQgcmVtYWluZGVyXHJcbiAgICAgIC8vIG1vZGVzIGFyZSBjb21tb25seSB1c2VkIGZvciB0aGUgbW9kdWx1cyBvcGVyYXRpb24uXHJcbiAgICAgIC8vIEFsdGhvdWdoIHRoZSBvdGhlciByb3VuZGluZyBtb2RlcyBjYW4gYWxzbyBiZSB1c2VkLCB0aGV5IG1heSBub3QgZ2l2ZSB1c2VmdWwgcmVzdWx0cy5cclxuICAgICAgTU9EVUxPX01PREUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDlcclxuXHJcbiAgICAgIC8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgb2YgdGhlIHJlc3VsdCBvZiB0aGUgZXhwb25lbnRpYXRlZEJ5IG9wZXJhdGlvbi5cclxuICAgICAgLy8gSWYgUE9XX1BSRUNJU0lPTiBpcyAwLCB0aGVyZSB3aWxsIGJlIHVubGltaXRlZCBzaWduaWZpY2FudCBkaWdpdHMuXHJcbiAgICAgIFBPV19QUkVDSVNJT04gPSAwLCAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhcclxuXHJcbiAgICAgIC8vIFRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbiB1c2VkIGJ5IHRoZSBCaWdOdW1iZXIucHJvdG90eXBlLnRvRm9ybWF0IG1ldGhvZC5cclxuICAgICAgRk9STUFUID0ge1xyXG4gICAgICAgIHByZWZpeDogJycsXHJcbiAgICAgICAgZ3JvdXBTaXplOiAzLFxyXG4gICAgICAgIHNlY29uZGFyeUdyb3VwU2l6ZTogMCxcclxuICAgICAgICBncm91cFNlcGFyYXRvcjogJywnLFxyXG4gICAgICAgIGRlY2ltYWxTZXBhcmF0b3I6ICcuJyxcclxuICAgICAgICBmcmFjdGlvbkdyb3VwU2l6ZTogMCxcclxuICAgICAgICBmcmFjdGlvbkdyb3VwU2VwYXJhdG9yOiAnXFx4QTAnLCAgICAgIC8vIG5vbi1icmVha2luZyBzcGFjZVxyXG4gICAgICAgIHN1ZmZpeDogJydcclxuICAgICAgfSxcclxuXHJcbiAgICAgIC8vIFRoZSBhbHBoYWJldCB1c2VkIGZvciBiYXNlIGNvbnZlcnNpb24uIEl0IG11c3QgYmUgYXQgbGVhc3QgMiBjaGFyYWN0ZXJzIGxvbmcsIHdpdGggbm8gJysnLFxyXG4gICAgICAvLyAnLScsICcuJywgd2hpdGVzcGFjZSwgb3IgcmVwZWF0ZWQgY2hhcmFjdGVyLlxyXG4gICAgICAvLyAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVokXydcclxuICAgICAgQUxQSEFCRVQgPSAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JztcclxuXHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgLy8gQ09OU1RSVUNUT1JcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFRoZSBCaWdOdW1iZXIgY29uc3RydWN0b3IgYW5kIGV4cG9ydGVkIGZ1bmN0aW9uLlxyXG4gICAgICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBCaWdOdW1iZXIgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIHYge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBBIG51bWVyaWMgdmFsdWUuXHJcbiAgICAgKiBbYl0ge251bWJlcn0gVGhlIGJhc2Ugb2Ygdi4gSW50ZWdlciwgMiB0byBBTFBIQUJFVC5sZW5ndGggaW5jbHVzaXZlLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBCaWdOdW1iZXIodiwgYikge1xyXG4gICAgICB2YXIgYWxwaGFiZXQsIGMsIGNhc2VDaGFuZ2VkLCBlLCBpLCBpc051bSwgbGVuLCBzdHIsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICAvLyBFbmFibGUgY29uc3RydWN0b3IgY2FsbCB3aXRob3V0IGBuZXdgLlxyXG4gICAgICBpZiAoISh4IGluc3RhbmNlb2YgQmlnTnVtYmVyKSkgcmV0dXJuIG5ldyBCaWdOdW1iZXIodiwgYik7XHJcblxyXG4gICAgICBpZiAoYiA9PSBudWxsKSB7XHJcblxyXG4gICAgICAgIGlmICh2ICYmIHYuX2lzQmlnTnVtYmVyID09PSB0cnVlKSB7XHJcbiAgICAgICAgICB4LnMgPSB2LnM7XHJcblxyXG4gICAgICAgICAgaWYgKCF2LmMgfHwgdi5lID4gTUFYX0VYUCkge1xyXG4gICAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh2LmUgPCBNSU5fRVhQKSB7XHJcbiAgICAgICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguZSA9IHYuZTtcclxuICAgICAgICAgICAgeC5jID0gdi5jLnNsaWNlKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKChpc051bSA9IHR5cGVvZiB2ID09ICdudW1iZXInKSAmJiB2ICogMCA9PSAwKSB7XHJcblxyXG4gICAgICAgICAgLy8gVXNlIGAxIC8gbmAgdG8gaGFuZGxlIG1pbnVzIHplcm8gYWxzby5cclxuICAgICAgICAgIHgucyA9IDEgLyB2IDwgMCA/ICh2ID0gLXYsIC0xKSA6IDE7XHJcblxyXG4gICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBpbnRlZ2Vycywgd2hlcmUgbiA8IDIxNDc0ODM2NDggKDIqKjMxKS5cclxuICAgICAgICAgIGlmICh2ID09PSB+fnYpIHtcclxuICAgICAgICAgICAgZm9yIChlID0gMCwgaSA9IHY7IGkgPj0gMTA7IGkgLz0gMTAsIGUrKyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZSA+IE1BWF9FWFApIHtcclxuICAgICAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICAgICAgeC5jID0gW3ZdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgc3RyID0gU3RyaW5nKHYpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgaWYgKCFpc051bWVyaWMudGVzdChzdHIgPSBTdHJpbmcodikpKSByZXR1cm4gcGFyc2VOdW1lcmljKHgsIHN0ciwgaXNOdW0pO1xyXG5cclxuICAgICAgICAgIHgucyA9IHN0ci5jaGFyQ29kZUF0KDApID09IDQ1ID8gKHN0ciA9IHN0ci5zbGljZSgxKSwgLTEpIDogMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERlY2ltYWwgcG9pbnQ/XHJcbiAgICAgICAgaWYgKChlID0gc3RyLmluZGV4T2YoJy4nKSkgPiAtMSkgc3RyID0gc3RyLnJlcGxhY2UoJy4nLCAnJyk7XHJcblxyXG4gICAgICAgIC8vIEV4cG9uZW50aWFsIGZvcm0/XHJcbiAgICAgICAgaWYgKChpID0gc3RyLnNlYXJjaCgvZS9pKSkgPiAwKSB7XHJcblxyXG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIGV4cG9uZW50LlxyXG4gICAgICAgICAgaWYgKGUgPCAwKSBlID0gaTtcclxuICAgICAgICAgIGUgKz0gK3N0ci5zbGljZShpICsgMSk7XHJcbiAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIGkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZSA8IDApIHtcclxuXHJcbiAgICAgICAgICAvLyBJbnRlZ2VyLlxyXG4gICAgICAgICAgZSA9IHN0ci5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEJhc2Uge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2J9J1xyXG4gICAgICAgIGludENoZWNrKGIsIDIsIEFMUEhBQkVULmxlbmd0aCwgJ0Jhc2UnKTtcclxuXHJcbiAgICAgICAgLy8gQWxsb3cgZXhwb25lbnRpYWwgbm90YXRpb24gdG8gYmUgdXNlZCB3aXRoIGJhc2UgMTAgYXJndW1lbnQsIHdoaWxlXHJcbiAgICAgICAgLy8gYWxzbyByb3VuZGluZyB0byBERUNJTUFMX1BMQUNFUyBhcyB3aXRoIG90aGVyIGJhc2VzLlxyXG4gICAgICAgIGlmIChiID09IDEwKSB7XHJcbiAgICAgICAgICB4ID0gbmV3IEJpZ051bWJlcih2KTtcclxuICAgICAgICAgIHJldHVybiByb3VuZCh4LCBERUNJTUFMX1BMQUNFUyArIHguZSArIDEsIFJPVU5ESU5HX01PREUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RyID0gU3RyaW5nKHYpO1xyXG5cclxuICAgICAgICBpZiAoaXNOdW0gPSB0eXBlb2YgdiA9PSAnbnVtYmVyJykge1xyXG5cclxuICAgICAgICAgIC8vIEF2b2lkIHBvdGVudGlhbCBpbnRlcnByZXRhdGlvbiBvZiBJbmZpbml0eSBhbmQgTmFOIGFzIGJhc2UgNDQrIHZhbHVlcy5cclxuICAgICAgICAgIGlmICh2ICogMCAhPSAwKSByZXR1cm4gcGFyc2VOdW1lcmljKHgsIHN0ciwgaXNOdW0sIGIpO1xyXG5cclxuICAgICAgICAgIHgucyA9IDEgLyB2IDwgMCA/IChzdHIgPSBzdHIuc2xpY2UoMSksIC0xKSA6IDE7XHJcblxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE51bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6IHtufSdcclxuICAgICAgICAgIGlmIChCaWdOdW1iZXIuREVCVUcgJiYgc3RyLnJlcGxhY2UoL14wXFwuMCp8XFwuLywgJycpLmxlbmd0aCA+IDE1KSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAodG9vTWFueURpZ2l0cyArIHYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4LnMgPSBzdHIuY2hhckNvZGVBdCgwKSA9PT0gNDUgPyAoc3RyID0gc3RyLnNsaWNlKDEpLCAtMSkgOiAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWxwaGFiZXQgPSBBTFBIQUJFVC5zbGljZSgwLCBiKTtcclxuICAgICAgICBlID0gaSA9IDA7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIHRoYXQgc3RyIGlzIGEgdmFsaWQgYmFzZSBiIG51bWJlci5cclxuICAgICAgICAvLyBEb24ndCB1c2UgUmVnRXhwLCBzbyBhbHBoYWJldCBjYW4gY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMuXHJcbiAgICAgICAgZm9yIChsZW4gPSBzdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgIGlmIChhbHBoYWJldC5pbmRleE9mKGMgPSBzdHIuY2hhckF0KGkpKSA8IDApIHtcclxuICAgICAgICAgICAgaWYgKGMgPT0gJy4nKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmICcuJyBpcyBub3QgdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQgaXQgaGFzIG5vdCBiZSBmb3VuZCBiZWZvcmUuXHJcbiAgICAgICAgICAgICAgaWYgKGkgPiBlKSB7XHJcbiAgICAgICAgICAgICAgICBlID0gbGVuO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFjYXNlQ2hhbmdlZCkge1xyXG5cclxuICAgICAgICAgICAgICAvLyBBbGxvdyBlLmcuIGhleGFkZWNpbWFsICdGRicgYXMgd2VsbCBhcyAnZmYnLlxyXG4gICAgICAgICAgICAgIGlmIChzdHIgPT0gc3RyLnRvVXBwZXJDYXNlKCkgJiYgKHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpKSB8fFxyXG4gICAgICAgICAgICAgICAgICBzdHIgPT0gc3RyLnRvTG93ZXJDYXNlKCkgJiYgKHN0ciA9IHN0ci50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZUNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgZSA9IDA7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWMoeCwgU3RyaW5nKHYpLCBpc051bSwgYik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQcmV2ZW50IGxhdGVyIGNoZWNrIGZvciBsZW5ndGggb24gY29udmVydGVkIG51bWJlci5cclxuICAgICAgICBpc051bSA9IGZhbHNlO1xyXG4gICAgICAgIHN0ciA9IGNvbnZlcnRCYXNlKHN0ciwgYiwgMTAsIHgucyk7XHJcblxyXG4gICAgICAgIC8vIERlY2ltYWwgcG9pbnQ/XHJcbiAgICAgICAgaWYgKChlID0gc3RyLmluZGV4T2YoJy4nKSkgPiAtMSkgc3RyID0gc3RyLnJlcGxhY2UoJy4nLCAnJyk7XHJcbiAgICAgICAgZWxzZSBlID0gc3RyLmxlbmd0aDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoaSA9IDA7IHN0ci5jaGFyQ29kZUF0KGkpID09PSA0ODsgaSsrKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yIChsZW4gPSBzdHIubGVuZ3RoOyBzdHIuY2hhckNvZGVBdCgtLWxlbikgPT09IDQ4Oyk7XHJcblxyXG4gICAgICBpZiAoc3RyID0gc3RyLnNsaWNlKGksICsrbGVuKSkge1xyXG4gICAgICAgIGxlbiAtPSBpO1xyXG5cclxuICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRpZ2l0czoge259J1xyXG4gICAgICAgIGlmIChpc051bSAmJiBCaWdOdW1iZXIuREVCVUcgJiZcclxuICAgICAgICAgIGxlbiA+IDE1ICYmICh2ID4gTUFYX1NBRkVfSU5URUdFUiB8fCB2ICE9PSBtYXRoZmxvb3IodikpKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAodG9vTWFueURpZ2l0cyArICh4LnMgKiB2KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAgLy8gT3ZlcmZsb3c/XHJcbiAgICAgICAgaWYgKChlID0gZSAtIGkgLSAxKSA+IE1BWF9FWFApIHtcclxuXHJcbiAgICAgICAgICAvLyBJbmZpbml0eS5cclxuICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIFVuZGVyZmxvdz9cclxuICAgICAgICB9IGVsc2UgaWYgKGUgPCBNSU5fRVhQKSB7XHJcblxyXG4gICAgICAgICAgLy8gWmVyby5cclxuICAgICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeC5lID0gZTtcclxuICAgICAgICAgIHguYyA9IFtdO1xyXG5cclxuICAgICAgICAgIC8vIFRyYW5zZm9ybSBiYXNlXHJcblxyXG4gICAgICAgICAgLy8gZSBpcyB0aGUgYmFzZSAxMCBleHBvbmVudC5cclxuICAgICAgICAgIC8vIGkgaXMgd2hlcmUgdG8gc2xpY2Ugc3RyIHRvIGdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgY29lZmZpY2llbnQgYXJyYXkuXHJcbiAgICAgICAgICBpID0gKGUgKyAxKSAlIExPR19CQVNFO1xyXG4gICAgICAgICAgaWYgKGUgPCAwKSBpICs9IExPR19CQVNFOyAgLy8gaSA8IDFcclxuXHJcbiAgICAgICAgICBpZiAoaSA8IGxlbikge1xyXG4gICAgICAgICAgICBpZiAoaSkgeC5jLnB1c2goK3N0ci5zbGljZSgwLCBpKSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxlbiAtPSBMT0dfQkFTRTsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgICB4LmMucHVzaCgrc3RyLnNsaWNlKGksIGkgKz0gTE9HX0JBU0UpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaSA9IExPR19CQVNFIC0gKHN0ciA9IHN0ci5zbGljZShpKSkubGVuZ3RoO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaSAtPSBsZW47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZm9yICg7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICB4LmMucHVzaCgrc3RyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIENPTlNUUlVDVE9SIFBST1BFUlRJRVNcclxuXHJcblxyXG4gICAgQmlnTnVtYmVyLmNsb25lID0gY2xvbmU7XHJcblxyXG4gICAgQmlnTnVtYmVyLlJPVU5EX1VQID0gMDtcclxuICAgIEJpZ051bWJlci5ST1VORF9ET1dOID0gMTtcclxuICAgIEJpZ051bWJlci5ST1VORF9DRUlMID0gMjtcclxuICAgIEJpZ051bWJlci5ST1VORF9GTE9PUiA9IDM7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9VUCA9IDQ7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9ET1dOID0gNTtcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0VWRU4gPSA2O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfQ0VJTCA9IDc7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9GTE9PUiA9IDg7XHJcbiAgICBCaWdOdW1iZXIuRVVDTElEID0gOTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIENvbmZpZ3VyZSBpbmZyZXF1ZW50bHktY2hhbmdpbmcgbGlicmFyeS13aWRlIHNldHRpbmdzLlxyXG4gICAgICpcclxuICAgICAqIEFjY2VwdCBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbmFsIHByb3BlcnRpZXMgKGlmIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGlzXHJcbiAgICAgKiBhIG51bWJlciwgaXQgbXVzdCBiZSBhbiBpbnRlZ2VyIHdpdGhpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIHN0YXRlZCk6XHJcbiAgICAgKlxyXG4gICAgICogICBERUNJTUFMX1BMQUNFUyAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIE1BWFxyXG4gICAgICogICBST1VORElOR19NT0RFICAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIDhcclxuICAgICAqICAgRVhQT05FTlRJQUxfQVQgICB7bnVtYmVyfG51bWJlcltdfSAgLU1BWCB0byBNQVggIG9yICBbLU1BWCB0byAwLCAwIHRvIE1BWF1cclxuICAgICAqICAgUkFOR0UgICAgICAgICAgICB7bnVtYmVyfG51bWJlcltdfSAgLU1BWCB0byBNQVggKG5vdCB6ZXJvKSAgb3IgIFstTUFYIHRvIC0xLCAxIHRvIE1BWF1cclxuICAgICAqICAgQ1JZUFRPICAgICAgICAgICB7Ym9vbGVhbn0gICAgICAgICAgdHJ1ZSBvciBmYWxzZVxyXG4gICAgICogICBNT0RVTE9fTU9ERSAgICAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIDlcclxuICAgICAqICAgUE9XX1BSRUNJU0lPTiAgICAgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byBNQVhcclxuICAgICAqICAgQUxQSEFCRVQgICAgICAgICB7c3RyaW5nfSAgICAgICAgICAgQSBzdHJpbmcgb2YgdHdvIG9yIG1vcmUgdW5pcXVlIGNoYXJhY3RlcnMgd2hpY2ggZG9lc1xyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgY29udGFpbiAnLicuXHJcbiAgICAgKiAgIEZPUk1BVCAgICAgICAgICAge29iamVjdH0gICAgICAgICAgIEFuIG9iamVjdCB3aXRoIHNvbWUgb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxyXG4gICAgICogICAgIHByZWZpeCAgICAgICAgICAgICAgICAge3N0cmluZ31cclxuICAgICAqICAgICBncm91cFNpemUgICAgICAgICAgICAgIHtudW1iZXJ9XHJcbiAgICAgKiAgICAgc2Vjb25kYXJ5R3JvdXBTaXplICAgICB7bnVtYmVyfVxyXG4gICAgICogICAgIGdyb3VwU2VwYXJhdG9yICAgICAgICAge3N0cmluZ31cclxuICAgICAqICAgICBkZWNpbWFsU2VwYXJhdG9yICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgZnJhY3Rpb25Hcm91cFNpemUgICAgICB7bnVtYmVyfVxyXG4gICAgICogICAgIGZyYWN0aW9uR3JvdXBTZXBhcmF0b3Ige3N0cmluZ31cclxuICAgICAqICAgICBzdWZmaXggICAgICAgICAgICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKlxyXG4gICAgICogKFRoZSB2YWx1ZXMgYXNzaWduZWQgdG8gdGhlIGFib3ZlIEZPUk1BVCBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IGNoZWNrZWQgZm9yIHZhbGlkaXR5LilcclxuICAgICAqXHJcbiAgICAgKiBFLmcuXHJcbiAgICAgKiBCaWdOdW1iZXIuY29uZmlnKHsgREVDSU1BTF9QTEFDRVMgOiAyMCwgUk9VTkRJTkdfTU9ERSA6IDQgfSlcclxuICAgICAqXHJcbiAgICAgKiBJZ25vcmUgcHJvcGVydGllcy9wYXJhbWV0ZXJzIHNldCB0byBudWxsIG9yIHVuZGVmaW5lZCwgZXhjZXB0IGZvciBBTFBIQUJFVC5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYW4gb2JqZWN0IHdpdGggdGhlIHByb3BlcnRpZXMgY3VycmVudCB2YWx1ZXMuXHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5jb25maWcgPSBCaWdOdW1iZXIuc2V0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICB2YXIgcCwgdjtcclxuXHJcbiAgICAgIGlmIChvYmogIT0gbnVsbCkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9iaiA9PSAnb2JqZWN0Jykge1xyXG5cclxuICAgICAgICAgIC8vIERFQ0lNQUxfUExBQ0VTIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBERUNJTUFMX1BMQUNFUyB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnREVDSU1BTF9QTEFDRVMnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCBNQVgsIHApO1xyXG4gICAgICAgICAgICBERUNJTUFMX1BMQUNFUyA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUk9VTkRJTkdfTU9ERSB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIFJPVU5ESU5HX01PREUge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ1JPVU5ESU5HX01PREUnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCA4LCBwKTtcclxuICAgICAgICAgICAgUk9VTkRJTkdfTU9ERSA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRVhQT05FTlRJQUxfQVQge251bWJlcnxudW1iZXJbXX1cclxuICAgICAgICAgIC8vIEludGVnZXIsIC1NQVggdG8gTUFYIGluY2x1c2l2ZSBvclxyXG4gICAgICAgICAgLy8gW2ludGVnZXIgLU1BWCB0byAwIGluY2x1c2l2ZSwgMCB0byBNQVggaW5jbHVzaXZlXS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBFWFBPTkVOVElBTF9BVCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnRVhQT05FTlRJQUxfQVQnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodiAmJiB2LnBvcCkge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMF0sIC1NQVgsIDAsIHApO1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMV0sIDAsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgVE9fRVhQX05FRyA9IHZbMF07XHJcbiAgICAgICAgICAgICAgVE9fRVhQX1BPUyA9IHZbMV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodiwgLU1BWCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBUT19FWFBfTkVHID0gLShUT19FWFBfUE9TID0gdiA8IDAgPyAtdiA6IHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUkFOR0Uge251bWJlcnxudW1iZXJbXX0gTm9uLXplcm8gaW50ZWdlciwgLU1BWCB0byBNQVggaW5jbHVzaXZlIG9yXHJcbiAgICAgICAgICAvLyBbaW50ZWdlciAtTUFYIHRvIC0xIGluY2x1c2l2ZSwgaW50ZWdlciAxIHRvIE1BWCBpbmNsdXNpdmVdLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIFJBTkdFIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZXxjYW5ub3QgYmUgemVyb306IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdSQU5HRScpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh2ICYmIHYucG9wKSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlswXSwgLU1BWCwgLTEsIHApO1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMV0sIDEsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgTUlOX0VYUCA9IHZbMF07XHJcbiAgICAgICAgICAgICAgTUFYX0VYUCA9IHZbMV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodiwgLU1BWCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgICAgICAgTUlOX0VYUCA9IC0oTUFYX0VYUCA9IHYgPCAwID8gLXYgOiB2KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBjYW5ub3QgYmUgemVybzogJyArIHYpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIENSWVBUTyB7Ym9vbGVhbn0gdHJ1ZSBvciBmYWxzZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBDUllQVE8gbm90IHRydWUgb3IgZmFsc2U6IHt2fSdcclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBjcnlwdG8gdW5hdmFpbGFibGUnXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnQ1JZUFRPJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHYgPT09ICEhdikge1xyXG4gICAgICAgICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNyeXB0byAhPSAndW5kZWZpbmVkJyAmJiBjcnlwdG8gJiZcclxuICAgICAgICAgICAgICAgICAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcyB8fCBjcnlwdG8ucmFuZG9tQnl0ZXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgIENSWVBUTyA9IHY7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBDUllQVE8gPSAhdjtcclxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdjcnlwdG8gdW5hdmFpbGFibGUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgQ1JZUFRPID0gdjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgbm90IHRydWUgb3IgZmFsc2U6ICcgKyB2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIE1PRFVMT19NT0RFIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gOSBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTU9EVUxPX01PREUge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ01PRFVMT19NT0RFJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgOSwgcCk7XHJcbiAgICAgICAgICAgIE1PRFVMT19NT0RFID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBQT1dfUFJFQ0lTSU9OIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBQT1dfUFJFQ0lTSU9OIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdQT1dfUFJFQ0lTSU9OJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRk9STUFUIHtvYmplY3R9XHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gRk9STUFUIG5vdCBhbiBvYmplY3Q6IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdGT1JNQVQnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHYgPT0gJ29iamVjdCcpIEZPUk1BVCA9IHY7XHJcbiAgICAgICAgICAgIGVsc2UgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIG5vdCBhbiBvYmplY3Q6ICcgKyB2KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBBTFBIQUJFVCB7c3RyaW5nfVxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEFMUEhBQkVUIGludmFsaWQ6IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdBTFBIQUJFVCcpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcblxyXG4gICAgICAgICAgICAvLyBEaXNhbGxvdyBpZiBsZXNzIHRoYW4gdHdvIGNoYXJhY3RlcnMsXHJcbiAgICAgICAgICAgIC8vIG9yIGlmIGl0IGNvbnRhaW5zICcrJywgJy0nLCAnLicsIHdoaXRlc3BhY2UsIG9yIGEgcmVwZWF0ZWQgY2hhcmFjdGVyLlxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHYgPT0gJ3N0cmluZycgJiYgIS9eLj8kfFsrXFwtLlxcc118KC4pLipcXDEvLnRlc3QodikpIHtcclxuICAgICAgICAgICAgICBBTFBIQUJFVCA9IHY7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgaW52YWxpZDogJyArIHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE9iamVjdCBleHBlY3RlZDoge3Z9J1xyXG4gICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnT2JqZWN0IGV4cGVjdGVkOiAnICsgb2JqKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgREVDSU1BTF9QTEFDRVM6IERFQ0lNQUxfUExBQ0VTLFxyXG4gICAgICAgIFJPVU5ESU5HX01PREU6IFJPVU5ESU5HX01PREUsXHJcbiAgICAgICAgRVhQT05FTlRJQUxfQVQ6IFtUT19FWFBfTkVHLCBUT19FWFBfUE9TXSxcclxuICAgICAgICBSQU5HRTogW01JTl9FWFAsIE1BWF9FWFBdLFxyXG4gICAgICAgIENSWVBUTzogQ1JZUFRPLFxyXG4gICAgICAgIE1PRFVMT19NT0RFOiBNT0RVTE9fTU9ERSxcclxuICAgICAgICBQT1dfUFJFQ0lTSU9OOiBQT1dfUFJFQ0lTSU9OLFxyXG4gICAgICAgIEZPUk1BVDogRk9STUFULFxyXG4gICAgICAgIEFMUEhBQkVUOiBBTFBIQUJFVFxyXG4gICAgICB9O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHYgaXMgYSBCaWdOdW1iZXIgaW5zdGFuY2UsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKlxyXG4gICAgICogSWYgQmlnTnVtYmVyLkRFQlVHIGlzIHRydWUsIHRocm93IGlmIGEgQmlnTnVtYmVyIGluc3RhbmNlIGlzIG5vdCB3ZWxsLWZvcm1lZC5cclxuICAgICAqXHJcbiAgICAgKiB2IHthbnl9XHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEludmFsaWQgQmlnTnVtYmVyOiB7dn0nXHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5pc0JpZ051bWJlciA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgIGlmICghdiB8fCB2Ll9pc0JpZ051bWJlciAhPT0gdHJ1ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBpZiAoIUJpZ051bWJlci5ERUJVRykgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICB2YXIgaSwgbixcclxuICAgICAgICBjID0gdi5jLFxyXG4gICAgICAgIGUgPSB2LmUsXHJcbiAgICAgICAgcyA9IHYucztcclxuXHJcbiAgICAgIG91dDogaWYgKHt9LnRvU3RyaW5nLmNhbGwoYykgPT0gJ1tvYmplY3QgQXJyYXldJykge1xyXG5cclxuICAgICAgICBpZiAoKHMgPT09IDEgfHwgcyA9PT0gLTEpICYmIGUgPj0gLU1BWCAmJiBlIDw9IE1BWCAmJiBlID09PSBtYXRoZmxvb3IoZSkpIHtcclxuXHJcbiAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgZWxlbWVudCBpcyB6ZXJvLCB0aGUgQmlnTnVtYmVyIHZhbHVlIG11c3QgYmUgemVyby5cclxuICAgICAgICAgIGlmIChjWzBdID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChlID09PSAwICYmIGMubGVuZ3RoID09PSAxKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBudW1iZXIgb2YgZGlnaXRzIHRoYXQgY1swXSBzaG91bGQgaGF2ZSwgYmFzZWQgb24gdGhlIGV4cG9uZW50LlxyXG4gICAgICAgICAgaSA9IChlICsgMSkgJSBMT0dfQkFTRTtcclxuICAgICAgICAgIGlmIChpIDwgMSkgaSArPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgICAgICAvLyBDYWxjdWxhdGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBjWzBdLlxyXG4gICAgICAgICAgLy9pZiAoTWF0aC5jZWlsKE1hdGgubG9nKGNbMF0gKyAxKSAvIE1hdGguTE4xMCkgPT0gaSkge1xyXG4gICAgICAgICAgaWYgKFN0cmluZyhjWzBdKS5sZW5ndGggPT0gaSkge1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBuID0gY1tpXTtcclxuICAgICAgICAgICAgICBpZiAobiA8IDAgfHwgbiA+PSBCQVNFIHx8IG4gIT09IG1hdGhmbG9vcihuKSkgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBMYXN0IGVsZW1lbnQgY2Fubm90IGJlIHplcm8sIHVubGVzcyBpdCBpcyB0aGUgb25seSBlbGVtZW50LlxyXG4gICAgICAgICAgICBpZiAobiAhPT0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgLy8gSW5maW5pdHkvTmFOXHJcbiAgICAgIH0gZWxzZSBpZiAoYyA9PT0gbnVsbCAmJiBlID09PSBudWxsICYmIChzID09PSBudWxsIHx8IHMgPT09IDEgfHwgcyA9PT0gLTEpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ0ludmFsaWQgQmlnTnVtYmVyOiAnICsgdik7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5tYXhpbXVtID0gQmlnTnVtYmVyLm1heCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIG1heE9yTWluKGFyZ3VtZW50cywgUC5sdCk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgbWluaW11bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5taW5pbXVtID0gQmlnTnVtYmVyLm1pbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIG1heE9yTWluKGFyZ3VtZW50cywgUC5ndCk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aXRoIGEgcmFuZG9tIHZhbHVlIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gMSxcclxuICAgICAqIGFuZCB3aXRoIGRwLCBvciBERUNJTUFMX1BMQUNFUyBpZiBkcCBpcyBvbWl0dGVkLCBkZWNpbWFsIHBsYWNlcyAob3IgbGVzcyBpZiB0cmFpbGluZ1xyXG4gICAgICogemVyb3MgYXJlIHByb2R1Y2VkKS5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcH0nXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gY3J5cHRvIHVuYXZhaWxhYmxlJ1xyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIucmFuZG9tID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHBvdzJfNTMgPSAweDIwMDAwMDAwMDAwMDAwO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIGEgNTMgYml0IGludGVnZXIgbiwgd2hlcmUgMCA8PSBuIDwgOTAwNzE5OTI1NDc0MDk5Mi5cclxuICAgICAgLy8gQ2hlY2sgaWYgTWF0aC5yYW5kb20oKSBwcm9kdWNlcyBtb3JlIHRoYW4gMzIgYml0cyBvZiByYW5kb21uZXNzLlxyXG4gICAgICAvLyBJZiBpdCBkb2VzLCBhc3N1bWUgYXQgbGVhc3QgNTMgYml0cyBhcmUgcHJvZHVjZWQsIG90aGVyd2lzZSBhc3N1bWUgYXQgbGVhc3QgMzAgYml0cy5cclxuICAgICAgLy8gMHg0MDAwMDAwMCBpcyAyXjMwLCAweDgwMDAwMCBpcyAyXjIzLCAweDFmZmZmZiBpcyAyXjIxIC0gMS5cclxuICAgICAgdmFyIHJhbmRvbTUzYml0SW50ID0gKE1hdGgucmFuZG9tKCkgKiBwb3cyXzUzKSAmIDB4MWZmZmZmXHJcbiAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1hdGhmbG9vcihNYXRoLnJhbmRvbSgpICogcG93Ml81Myk7IH1cclxuICAgICAgIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gKChNYXRoLnJhbmRvbSgpICogMHg0MDAwMDAwMCB8IDApICogMHg4MDAwMDApICtcclxuICAgICAgICAgKE1hdGgucmFuZG9tKCkgKiAweDgwMDAwMCB8IDApOyB9O1xyXG5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkcCkge1xyXG4gICAgICAgIHZhciBhLCBiLCBlLCBrLCB2LFxyXG4gICAgICAgICAgaSA9IDAsXHJcbiAgICAgICAgICBjID0gW10sXHJcbiAgICAgICAgICByYW5kID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG5cclxuICAgICAgICBpZiAoZHAgPT0gbnVsbCkgZHAgPSBERUNJTUFMX1BMQUNFUztcclxuICAgICAgICBlbHNlIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG5cclxuICAgICAgICBrID0gbWF0aGNlaWwoZHAgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgICAgIGlmIChDUllQVE8pIHtcclxuXHJcbiAgICAgICAgICAvLyBCcm93c2VycyBzdXBwb3J0aW5nIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuXHJcbiAgICAgICAgICBpZiAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xyXG5cclxuICAgICAgICAgICAgYSA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KGsgKj0gMikpO1xyXG5cclxuICAgICAgICAgICAgZm9yICg7IGkgPCBrOykge1xyXG5cclxuICAgICAgICAgICAgICAvLyA1MyBiaXRzOlxyXG4gICAgICAgICAgICAgIC8vICgoTWF0aC5wb3coMiwgMzIpIC0gMSkgKiBNYXRoLnBvdygyLCAyMSkpLnRvU3RyaW5nKDIpXHJcbiAgICAgICAgICAgICAgLy8gMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDBcclxuICAgICAgICAgICAgICAvLyAoKE1hdGgucG93KDIsIDMyKSAtIDEpID4+PiAxMSkudG9TdHJpbmcoMilcclxuICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTExMSAxMTExMTExMSAxMTExMTExMVxyXG4gICAgICAgICAgICAgIC8vIDB4MjAwMDAgaXMgMl4yMS5cclxuICAgICAgICAgICAgICB2ID0gYVtpXSAqIDB4MjAwMDAgKyAoYVtpICsgMV0gPj4+IDExKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gUmVqZWN0aW9uIHNhbXBsaW5nOlxyXG4gICAgICAgICAgICAgIC8vIDAgPD0gdiA8IDkwMDcxOTkyNTQ3NDA5OTJcclxuICAgICAgICAgICAgICAvLyBQcm9iYWJpbGl0eSB0aGF0IHYgPj0gOWUxNSwgaXNcclxuICAgICAgICAgICAgICAvLyA3MTk5MjU0NzQwOTkyIC8gOTAwNzE5OTI1NDc0MDk5MiB+PSAwLjAwMDgsIGkuZS4gMSBpbiAxMjUxXHJcbiAgICAgICAgICAgICAgaWYgKHYgPj0gOWUxNSkge1xyXG4gICAgICAgICAgICAgICAgYiA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDIpKTtcclxuICAgICAgICAgICAgICAgIGFbaV0gPSBiWzBdO1xyXG4gICAgICAgICAgICAgICAgYVtpICsgMV0gPSBiWzFdO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gMCA8PSB2IDw9IDg5OTk5OTk5OTk5OTk5OTlcclxuICAgICAgICAgICAgICAgIC8vIDAgPD0gKHYgJSAxZTE0KSA8PSA5OTk5OTk5OTk5OTk5OVxyXG4gICAgICAgICAgICAgICAgYy5wdXNoKHYgJSAxZTE0KTtcclxuICAgICAgICAgICAgICAgIGkgKz0gMjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSA9IGsgLyAyO1xyXG5cclxuICAgICAgICAgIC8vIE5vZGUuanMgc3VwcG9ydGluZyBjcnlwdG8ucmFuZG9tQnl0ZXMuXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNyeXB0by5yYW5kb21CeXRlcykge1xyXG5cclxuICAgICAgICAgICAgLy8gYnVmZmVyXHJcbiAgICAgICAgICAgIGEgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoayAqPSA3KTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoOyBpIDwgazspIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gMHgxMDAwMDAwMDAwMDAwIGlzIDJeNDgsIDB4MTAwMDAwMDAwMDAgaXMgMl40MFxyXG4gICAgICAgICAgICAgIC8vIDB4MTAwMDAwMDAwIGlzIDJeMzIsIDB4MTAwMDAwMCBpcyAyXjI0XHJcbiAgICAgICAgICAgICAgLy8gMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTEgMTExMTExMTFcclxuICAgICAgICAgICAgICAvLyAwIDw9IHYgPCA5MDA3MTk5MjU0NzQwOTkyXHJcbiAgICAgICAgICAgICAgdiA9ICgoYVtpXSAmIDMxKSAqIDB4MTAwMDAwMDAwMDAwMCkgKyAoYVtpICsgMV0gKiAweDEwMDAwMDAwMDAwKSArXHJcbiAgICAgICAgICAgICAgICAgKGFbaSArIDJdICogMHgxMDAwMDAwMDApICsgKGFbaSArIDNdICogMHgxMDAwMDAwKSArXHJcbiAgICAgICAgICAgICAgICAgKGFbaSArIDRdIDw8IDE2KSArIChhW2kgKyA1XSA8PCA4KSArIGFbaSArIDZdO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodiA+PSA5ZTE1KSB7XHJcbiAgICAgICAgICAgICAgICBjcnlwdG8ucmFuZG9tQnl0ZXMoNykuY29weShhLCBpKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIDAgPD0gKHYgJSAxZTE0KSA8PSA5OTk5OTk5OTk5OTk5OVxyXG4gICAgICAgICAgICAgICAgYy5wdXNoKHYgJSAxZTE0KTtcclxuICAgICAgICAgICAgICAgIGkgKz0gNztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSA9IGsgLyA3O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgQ1JZUFRPID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnY3J5cHRvIHVuYXZhaWxhYmxlJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVc2UgTWF0aC5yYW5kb20uXHJcbiAgICAgICAgaWYgKCFDUllQVE8pIHtcclxuXHJcbiAgICAgICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcbiAgICAgICAgICAgIHYgPSByYW5kb201M2JpdEludCgpO1xyXG4gICAgICAgICAgICBpZiAodiA8IDllMTUpIGNbaSsrXSA9IHYgJSAxZTE0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgayA9IGNbLS1pXTtcclxuICAgICAgICBkcCAlPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgICAgLy8gQ29udmVydCB0cmFpbGluZyBkaWdpdHMgdG8gemVyb3MgYWNjb3JkaW5nIHRvIGRwLlxyXG4gICAgICAgIGlmIChrICYmIGRwKSB7XHJcbiAgICAgICAgICB2ID0gUE9XU19URU5bTE9HX0JBU0UgLSBkcF07XHJcbiAgICAgICAgICBjW2ldID0gbWF0aGZsb29yKGsgLyB2KSAqIHY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgZWxlbWVudHMgd2hpY2ggYXJlIHplcm8uXHJcbiAgICAgICAgZm9yICg7IGNbaV0gPT09IDA7IGMucG9wKCksIGktLSk7XHJcblxyXG4gICAgICAgIC8vIFplcm8/XHJcbiAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICBjID0gW2UgPSAwXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIGVsZW1lbnRzIHdoaWNoIGFyZSB6ZXJvIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgICAgICBmb3IgKGUgPSAtMSA7IGNbMF0gPT09IDA7IGMuc3BsaWNlKDAsIDEpLCBlIC09IExPR19CQVNFKTtcclxuXHJcbiAgICAgICAgICAvLyBDb3VudCB0aGUgZGlnaXRzIG9mIHRoZSBmaXJzdCBlbGVtZW50IG9mIGMgdG8gZGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MsIGFuZC4uLlxyXG4gICAgICAgICAgZm9yIChpID0gMSwgdiA9IGNbMF07IHYgPj0gMTA7IHYgLz0gMTAsIGkrKyk7XHJcblxyXG4gICAgICAgICAgLy8gYWRqdXN0IHRoZSBleHBvbmVudCBhY2NvcmRpbmdseS5cclxuICAgICAgICAgIGlmIChpIDwgTE9HX0JBU0UpIGUgLT0gTE9HX0JBU0UgLSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmFuZC5lID0gZTtcclxuICAgICAgICByYW5kLmMgPSBjO1xyXG4gICAgICAgIHJldHVybiByYW5kO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgc3VtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn1cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLnN1bSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIGkgPSAxLFxyXG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXHJcbiAgICAgICAgc3VtID0gbmV3IEJpZ051bWJlcihhcmdzWzBdKTtcclxuICAgICAgZm9yICg7IGkgPCBhcmdzLmxlbmd0aDspIHN1bSA9IHN1bS5wbHVzKGFyZ3NbaSsrXSk7XHJcbiAgICAgIHJldHVybiBzdW07XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvLyBQUklWQVRFIEZVTkNUSU9OU1xyXG5cclxuXHJcbiAgICAvLyBDYWxsZWQgYnkgQmlnTnVtYmVyIGFuZCBCaWdOdW1iZXIucHJvdG90eXBlLnRvU3RyaW5nLlxyXG4gICAgY29udmVydEJhc2UgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgZGVjaW1hbCA9ICcwMTIzNDU2Nzg5JztcclxuXHJcbiAgICAgIC8qXHJcbiAgICAgICAqIENvbnZlcnQgc3RyaW5nIG9mIGJhc2VJbiB0byBhbiBhcnJheSBvZiBudW1iZXJzIG9mIGJhc2VPdXQuXHJcbiAgICAgICAqIEVnLiB0b0Jhc2VPdXQoJzI1NScsIDEwLCAxNikgcmV0dXJucyBbMTUsIDE1XS5cclxuICAgICAgICogRWcuIHRvQmFzZU91dCgnZmYnLCAxNiwgMTApIHJldHVybnMgWzIsIDUsIDVdLlxyXG4gICAgICAgKi9cclxuICAgICAgZnVuY3Rpb24gdG9CYXNlT3V0KHN0ciwgYmFzZUluLCBiYXNlT3V0LCBhbHBoYWJldCkge1xyXG4gICAgICAgIHZhciBqLFxyXG4gICAgICAgICAgYXJyID0gWzBdLFxyXG4gICAgICAgICAgYXJyTCxcclxuICAgICAgICAgIGkgPSAwLFxyXG4gICAgICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yICg7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICBmb3IgKGFyckwgPSBhcnIubGVuZ3RoOyBhcnJMLS07IGFyclthcnJMXSAqPSBiYXNlSW4pO1xyXG5cclxuICAgICAgICAgIGFyclswXSArPSBhbHBoYWJldC5pbmRleE9mKHN0ci5jaGFyQXQoaSsrKSk7XHJcblxyXG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IGFyci5sZW5ndGg7IGorKykge1xyXG5cclxuICAgICAgICAgICAgaWYgKGFycltqXSA+IGJhc2VPdXQgLSAxKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGFycltqICsgMV0gPT0gbnVsbCkgYXJyW2ogKyAxXSA9IDA7XHJcbiAgICAgICAgICAgICAgYXJyW2ogKyAxXSArPSBhcnJbal0gLyBiYXNlT3V0IHwgMDtcclxuICAgICAgICAgICAgICBhcnJbal0gJT0gYmFzZU91dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFyci5yZXZlcnNlKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENvbnZlcnQgYSBudW1lcmljIHN0cmluZyBvZiBiYXNlSW4gdG8gYSBudW1lcmljIHN0cmluZyBvZiBiYXNlT3V0LlxyXG4gICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIHRvU3RyaW5nLCB3ZSBhcmUgY29udmVydGluZyBmcm9tIGJhc2UgMTAgdG8gYmFzZU91dC5cclxuICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBCaWdOdW1iZXIsIHdlIGFyZSBjb252ZXJ0aW5nIGZyb20gYmFzZUluIHRvIGJhc2UgMTAuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoc3RyLCBiYXNlSW4sIGJhc2VPdXQsIHNpZ24sIGNhbGxlcklzVG9TdHJpbmcpIHtcclxuICAgICAgICB2YXIgYWxwaGFiZXQsIGQsIGUsIGssIHIsIHgsIHhjLCB5LFxyXG4gICAgICAgICAgaSA9IHN0ci5pbmRleE9mKCcuJyksXHJcbiAgICAgICAgICBkcCA9IERFQ0lNQUxfUExBQ0VTLFxyXG4gICAgICAgICAgcm0gPSBST1VORElOR19NT0RFO1xyXG5cclxuICAgICAgICAvLyBOb24taW50ZWdlci5cclxuICAgICAgICBpZiAoaSA+PSAwKSB7XHJcbiAgICAgICAgICBrID0gUE9XX1BSRUNJU0lPTjtcclxuXHJcbiAgICAgICAgICAvLyBVbmxpbWl0ZWQgcHJlY2lzaW9uLlxyXG4gICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IDA7XHJcbiAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuICAgICAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKGJhc2VJbik7XHJcbiAgICAgICAgICB4ID0geS5wb3coc3RyLmxlbmd0aCAtIGkpO1xyXG4gICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IGs7XHJcblxyXG4gICAgICAgICAgLy8gQ29udmVydCBzdHIgYXMgaWYgYW4gaW50ZWdlciwgdGhlbiByZXN0b3JlIHRoZSBmcmFjdGlvbiBwYXJ0IGJ5IGRpdmlkaW5nIHRoZVxyXG4gICAgICAgICAgLy8gcmVzdWx0IGJ5IGl0cyBiYXNlIHJhaXNlZCB0byBhIHBvd2VyLlxyXG5cclxuICAgICAgICAgIHkuYyA9IHRvQmFzZU91dCh0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyh4LmMpLCB4LmUsICcwJyksXHJcbiAgICAgICAgICAgMTAsIGJhc2VPdXQsIGRlY2ltYWwpO1xyXG4gICAgICAgICAgeS5lID0geS5jLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENvbnZlcnQgdGhlIG51bWJlciBhcyBpbnRlZ2VyLlxyXG5cclxuICAgICAgICB4YyA9IHRvQmFzZU91dChzdHIsIGJhc2VJbiwgYmFzZU91dCwgY2FsbGVySXNUb1N0cmluZ1xyXG4gICAgICAgICA/IChhbHBoYWJldCA9IEFMUEhBQkVULCBkZWNpbWFsKVxyXG4gICAgICAgICA6IChhbHBoYWJldCA9IGRlY2ltYWwsIEFMUEhBQkVUKSk7XHJcblxyXG4gICAgICAgIC8vIHhjIG5vdyByZXByZXNlbnRzIHN0ciBhcyBhbiBpbnRlZ2VyIGFuZCBjb252ZXJ0ZWQgdG8gYmFzZU91dC4gZSBpcyB0aGUgZXhwb25lbnQuXHJcbiAgICAgICAgZSA9IGsgPSB4Yy5sZW5ndGg7XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKDsgeGNbLS1rXSA9PSAwOyB4Yy5wb3AoKSk7XHJcblxyXG4gICAgICAgIC8vIFplcm8/XHJcbiAgICAgICAgaWYgKCF4Y1swXSkgcmV0dXJuIGFscGhhYmV0LmNoYXJBdCgwKTtcclxuXHJcbiAgICAgICAgLy8gRG9lcyBzdHIgcmVwcmVzZW50IGFuIGludGVnZXI/IElmIHNvLCBubyBuZWVkIGZvciB0aGUgZGl2aXNpb24uXHJcbiAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICAtLWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHguYyA9IHhjO1xyXG4gICAgICAgICAgeC5lID0gZTtcclxuXHJcbiAgICAgICAgICAvLyBUaGUgc2lnbiBpcyBuZWVkZWQgZm9yIGNvcnJlY3Qgcm91bmRpbmcuXHJcbiAgICAgICAgICB4LnMgPSBzaWduO1xyXG4gICAgICAgICAgeCA9IGRpdih4LCB5LCBkcCwgcm0sIGJhc2VPdXQpO1xyXG4gICAgICAgICAgeGMgPSB4LmM7XHJcbiAgICAgICAgICByID0geC5yO1xyXG4gICAgICAgICAgZSA9IHguZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHhjIG5vdyByZXByZXNlbnRzIHN0ciBjb252ZXJ0ZWQgdG8gYmFzZU91dC5cclxuXHJcbiAgICAgICAgLy8gVEhlIGluZGV4IG9mIHRoZSByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICBkID0gZSArIGRwICsgMTtcclxuXHJcbiAgICAgICAgLy8gVGhlIHJvdW5kaW5nIGRpZ2l0OiB0aGUgZGlnaXQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBkaWdpdCB0aGF0IG1heSBiZSByb3VuZGVkIHVwLlxyXG4gICAgICAgIGkgPSB4Y1tkXTtcclxuXHJcbiAgICAgICAgLy8gTG9vayBhdCB0aGUgcm91bmRpbmcgZGlnaXRzIGFuZCBtb2RlIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHJvdW5kIHVwLlxyXG5cclxuICAgICAgICBrID0gYmFzZU91dCAvIDI7XHJcbiAgICAgICAgciA9IHIgfHwgZCA8IDAgfHwgeGNbZCArIDFdICE9IG51bGw7XHJcblxyXG4gICAgICAgIHIgPSBybSA8IDQgPyAoaSAhPSBudWxsIHx8IHIpICYmIChybSA9PSAwIHx8IHJtID09ICh4LnMgPCAwID8gMyA6IDIpKVxyXG4gICAgICAgICAgICAgIDogaSA+IGsgfHwgaSA9PSBrICYmKHJtID09IDQgfHwgciB8fCBybSA9PSA2ICYmIHhjW2QgLSAxXSAmIDEgfHxcclxuICAgICAgICAgICAgICAgcm0gPT0gKHgucyA8IDAgPyA4IDogNykpO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgaW5kZXggb2YgdGhlIHJvdW5kaW5nIGRpZ2l0IGlzIG5vdCBncmVhdGVyIHRoYW4gemVybywgb3IgeGMgcmVwcmVzZW50c1xyXG4gICAgICAgIC8vIHplcm8sIHRoZW4gdGhlIHJlc3VsdCBvZiB0aGUgYmFzZSBjb252ZXJzaW9uIGlzIHplcm8gb3IsIGlmIHJvdW5kaW5nIHVwLCBhIHZhbHVlXHJcbiAgICAgICAgLy8gc3VjaCBhcyAwLjAwMDAxLlxyXG4gICAgICAgIGlmIChkIDwgMSB8fCAheGNbMF0pIHtcclxuXHJcbiAgICAgICAgICAvLyAxXi1kcCBvciAwXHJcbiAgICAgICAgICBzdHIgPSByID8gdG9GaXhlZFBvaW50KGFscGhhYmV0LmNoYXJBdCgxKSwgLWRwLCBhbHBoYWJldC5jaGFyQXQoMCkpIDogYWxwaGFiZXQuY2hhckF0KDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gVHJ1bmNhdGUgeGMgdG8gdGhlIHJlcXVpcmVkIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcy5cclxuICAgICAgICAgIHhjLmxlbmd0aCA9IGQ7XHJcblxyXG4gICAgICAgICAgLy8gUm91bmQgdXA/XHJcbiAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgLy8gUm91bmRpbmcgdXAgbWF5IG1lYW4gdGhlIHByZXZpb3VzIGRpZ2l0IGhhcyB0byBiZSByb3VuZGVkIHVwIGFuZCBzbyBvbi5cclxuICAgICAgICAgICAgZm9yICgtLWJhc2VPdXQ7ICsreGNbLS1kXSA+IGJhc2VPdXQ7KSB7XHJcbiAgICAgICAgICAgICAgeGNbZF0gPSAwO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoIWQpIHtcclxuICAgICAgICAgICAgICAgICsrZTtcclxuICAgICAgICAgICAgICAgIHhjID0gWzFdLmNvbmNhdCh4Yyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgICAgZm9yIChrID0geGMubGVuZ3RoOyAheGNbLS1rXTspO1xyXG5cclxuICAgICAgICAgIC8vIEUuZy4gWzQsIDExLCAxNV0gYmVjb21lcyA0YmYuXHJcbiAgICAgICAgICBmb3IgKGkgPSAwLCBzdHIgPSAnJzsgaSA8PSBrOyBzdHIgKz0gYWxwaGFiZXQuY2hhckF0KHhjW2krK10pKTtcclxuXHJcbiAgICAgICAgICAvLyBBZGQgbGVhZGluZyB6ZXJvcywgZGVjaW1hbCBwb2ludCBhbmQgdHJhaWxpbmcgemVyb3MgYXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICBzdHIgPSB0b0ZpeGVkUG9pbnQoc3RyLCBlLCBhbHBoYWJldC5jaGFyQXQoMCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVGhlIGNhbGxlciB3aWxsIGFkZCB0aGUgc2lnbi5cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLy8gUGVyZm9ybSBkaXZpc2lvbiBpbiB0aGUgc3BlY2lmaWVkIGJhc2UuIENhbGxlZCBieSBkaXYgYW5kIGNvbnZlcnRCYXNlLlxyXG4gICAgZGl2ID0gKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgIC8vIEFzc3VtZSBub24temVybyB4IGFuZCBrLlxyXG4gICAgICBmdW5jdGlvbiBtdWx0aXBseSh4LCBrLCBiYXNlKSB7XHJcbiAgICAgICAgdmFyIG0sIHRlbXAsIHhsbywgeGhpLFxyXG4gICAgICAgICAgY2FycnkgPSAwLFxyXG4gICAgICAgICAgaSA9IHgubGVuZ3RoLFxyXG4gICAgICAgICAga2xvID0gayAlIFNRUlRfQkFTRSxcclxuICAgICAgICAgIGtoaSA9IGsgLyBTUVJUX0JBU0UgfCAwO1xyXG5cclxuICAgICAgICBmb3IgKHggPSB4LnNsaWNlKCk7IGktLTspIHtcclxuICAgICAgICAgIHhsbyA9IHhbaV0gJSBTUVJUX0JBU0U7XHJcbiAgICAgICAgICB4aGkgPSB4W2ldIC8gU1FSVF9CQVNFIHwgMDtcclxuICAgICAgICAgIG0gPSBraGkgKiB4bG8gKyB4aGkgKiBrbG87XHJcbiAgICAgICAgICB0ZW1wID0ga2xvICogeGxvICsgKChtICUgU1FSVF9CQVNFKSAqIFNRUlRfQkFTRSkgKyBjYXJyeTtcclxuICAgICAgICAgIGNhcnJ5ID0gKHRlbXAgLyBiYXNlIHwgMCkgKyAobSAvIFNRUlRfQkFTRSB8IDApICsga2hpICogeGhpO1xyXG4gICAgICAgICAgeFtpXSA9IHRlbXAgJSBiYXNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhcnJ5KSB4ID0gW2NhcnJ5XS5jb25jYXQoeCk7XHJcblxyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBjb21wYXJlKGEsIGIsIGFMLCBiTCkge1xyXG4gICAgICAgIHZhciBpLCBjbXA7XHJcblxyXG4gICAgICAgIGlmIChhTCAhPSBiTCkge1xyXG4gICAgICAgICAgY21wID0gYUwgPiBiTCA/IDEgOiAtMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIGZvciAoaSA9IGNtcCA9IDA7IGkgPCBhTDsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKSB7XHJcbiAgICAgICAgICAgICAgY21wID0gYVtpXSA+IGJbaV0gPyAxIDogLTE7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjbXA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIHN1YnRyYWN0KGEsIGIsIGFMLCBiYXNlKSB7XHJcbiAgICAgICAgdmFyIGkgPSAwO1xyXG5cclxuICAgICAgICAvLyBTdWJ0cmFjdCBiIGZyb20gYS5cclxuICAgICAgICBmb3IgKDsgYUwtLTspIHtcclxuICAgICAgICAgIGFbYUxdIC09IGk7XHJcbiAgICAgICAgICBpID0gYVthTF0gPCBiW2FMXSA/IDEgOiAwO1xyXG4gICAgICAgICAgYVthTF0gPSBpICogYmFzZSArIGFbYUxdIC0gYlthTF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKDsgIWFbMF0gJiYgYS5sZW5ndGggPiAxOyBhLnNwbGljZSgwLCAxKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHg6IGRpdmlkZW5kLCB5OiBkaXZpc29yLlxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHgsIHksIGRwLCBybSwgYmFzZSkge1xyXG4gICAgICAgIHZhciBjbXAsIGUsIGksIG1vcmUsIG4sIHByb2QsIHByb2RMLCBxLCBxYywgcmVtLCByZW1MLCByZW0wLCB4aSwgeEwsIHljMCxcclxuICAgICAgICAgIHlMLCB5eixcclxuICAgICAgICAgIHMgPSB4LnMgPT0geS5zID8gMSA6IC0xLFxyXG4gICAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgICB5YyA9IHkuYztcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIE5hTiwgSW5maW5pdHkgb3IgMD9cclxuICAgICAgICBpZiAoIXhjIHx8ICF4Y1swXSB8fCAheWMgfHwgIXljWzBdKSB7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoXHJcblxyXG4gICAgICAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIE5hTiwgb3IgYm90aCBJbmZpbml0eSBvciAwLlxyXG4gICAgICAgICAgICF4LnMgfHwgIXkucyB8fCAoeGMgPyB5YyAmJiB4Y1swXSA9PSB5Y1swXSA6ICF5YykgPyBOYU4gOlxyXG5cclxuICAgICAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiB4IGlzIMKxMCBvciB5IGlzIMKxSW5maW5pdHksIG9yIHJldHVybiDCsUluZmluaXR5IGFzIHkgaXMgwrEwLlxyXG4gICAgICAgICAgICB4YyAmJiB4Y1swXSA9PSAwIHx8ICF5YyA/IHMgKiAwIDogcyAvIDBcclxuICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHEgPSBuZXcgQmlnTnVtYmVyKHMpO1xyXG4gICAgICAgIHFjID0gcS5jID0gW107XHJcbiAgICAgICAgZSA9IHguZSAtIHkuZTtcclxuICAgICAgICBzID0gZHAgKyBlICsgMTtcclxuXHJcbiAgICAgICAgaWYgKCFiYXNlKSB7XHJcbiAgICAgICAgICBiYXNlID0gQkFTRTtcclxuICAgICAgICAgIGUgPSBiaXRGbG9vcih4LmUgLyBMT0dfQkFTRSkgLSBiaXRGbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcbiAgICAgICAgICBzID0gcyAvIExPR19CQVNFIHwgMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlc3VsdCBleHBvbmVudCBtYXkgYmUgb25lIGxlc3MgdGhlbiB0aGUgY3VycmVudCB2YWx1ZSBvZiBlLlxyXG4gICAgICAgIC8vIFRoZSBjb2VmZmljaWVudHMgb2YgdGhlIEJpZ051bWJlcnMgZnJvbSBjb252ZXJ0QmFzZSBtYXkgaGF2ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICBmb3IgKGkgPSAwOyB5Y1tpXSA9PSAoeGNbaV0gfHwgMCk7IGkrKyk7XHJcblxyXG4gICAgICAgIGlmICh5Y1tpXSA+ICh4Y1tpXSB8fCAwKSkgZS0tO1xyXG5cclxuICAgICAgICBpZiAocyA8IDApIHtcclxuICAgICAgICAgIHFjLnB1c2goMSk7XHJcbiAgICAgICAgICBtb3JlID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeEwgPSB4Yy5sZW5ndGg7XHJcbiAgICAgICAgICB5TCA9IHljLmxlbmd0aDtcclxuICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgcyArPSAyO1xyXG5cclxuICAgICAgICAgIC8vIE5vcm1hbGlzZSB4YyBhbmQgeWMgc28gaGlnaGVzdCBvcmRlciBkaWdpdCBvZiB5YyBpcyA+PSBiYXNlIC8gMi5cclxuXHJcbiAgICAgICAgICBuID0gbWF0aGZsb29yKGJhc2UgLyAoeWNbMF0gKyAxKSk7XHJcblxyXG4gICAgICAgICAgLy8gTm90IG5lY2Vzc2FyeSwgYnV0IHRvIGhhbmRsZSBvZGQgYmFzZXMgd2hlcmUgeWNbMF0gPT0gKGJhc2UgLyAyKSAtIDEuXHJcbiAgICAgICAgICAvLyBpZiAobiA+IDEgfHwgbisrID09IDEgJiYgeWNbMF0gPCBiYXNlIC8gMikge1xyXG4gICAgICAgICAgaWYgKG4gPiAxKSB7XHJcbiAgICAgICAgICAgIHljID0gbXVsdGlwbHkoeWMsIG4sIGJhc2UpO1xyXG4gICAgICAgICAgICB4YyA9IG11bHRpcGx5KHhjLCBuLCBiYXNlKTtcclxuICAgICAgICAgICAgeUwgPSB5Yy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHhMID0geGMubGVuZ3RoO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHhpID0geUw7XHJcbiAgICAgICAgICByZW0gPSB4Yy5zbGljZSgwLCB5TCk7XHJcbiAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAvLyBBZGQgemVyb3MgdG8gbWFrZSByZW1haW5kZXIgYXMgbG9uZyBhcyBkaXZpc29yLlxyXG4gICAgICAgICAgZm9yICg7IHJlbUwgPCB5TDsgcmVtW3JlbUwrK10gPSAwKTtcclxuICAgICAgICAgIHl6ID0geWMuc2xpY2UoKTtcclxuICAgICAgICAgIHl6ID0gWzBdLmNvbmNhdCh5eik7XHJcbiAgICAgICAgICB5YzAgPSB5Y1swXTtcclxuICAgICAgICAgIGlmICh5Y1sxXSA+PSBiYXNlIC8gMikgeWMwKys7XHJcbiAgICAgICAgICAvLyBOb3QgbmVjZXNzYXJ5LCBidXQgdG8gcHJldmVudCB0cmlhbCBkaWdpdCBuID4gYmFzZSwgd2hlbiB1c2luZyBiYXNlIDMuXHJcbiAgICAgICAgICAvLyBlbHNlIGlmIChiYXNlID09IDMgJiYgeWMwID09IDEpIHljMCA9IDEgKyAxZS0xNTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIG4gPSAwO1xyXG5cclxuICAgICAgICAgICAgLy8gQ29tcGFyZSBkaXZpc29yIGFuZCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGNtcCA9IGNvbXBhcmUoeWMsIHJlbSwgeUwsIHJlbUwpO1xyXG5cclxuICAgICAgICAgICAgLy8gSWYgZGl2aXNvciA8IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgaWYgKGNtcCA8IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRyaWFsIGRpZ2l0LCBuLlxyXG5cclxuICAgICAgICAgICAgICByZW0wID0gcmVtWzBdO1xyXG4gICAgICAgICAgICAgIGlmICh5TCAhPSByZW1MKSByZW0wID0gcmVtMCAqIGJhc2UgKyAocmVtWzFdIHx8IDApO1xyXG5cclxuICAgICAgICAgICAgICAvLyBuIGlzIGhvdyBtYW55IHRpbWVzIHRoZSBkaXZpc29yIGdvZXMgaW50byB0aGUgY3VycmVudCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgbiA9IG1hdGhmbG9vcihyZW0wIC8geWMwKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gIEFsZ29yaXRobTpcclxuICAgICAgICAgICAgICAvLyAgcHJvZHVjdCA9IGRpdmlzb3IgbXVsdGlwbGllZCBieSB0cmlhbCBkaWdpdCAobikuXHJcbiAgICAgICAgICAgICAgLy8gIENvbXBhcmUgcHJvZHVjdCBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIC8vICBJZiBwcm9kdWN0IGlzIGdyZWF0ZXIgdGhhbiByZW1haW5kZXI6XHJcbiAgICAgICAgICAgICAgLy8gICAgU3VidHJhY3QgZGl2aXNvciBmcm9tIHByb2R1Y3QsIGRlY3JlbWVudCB0cmlhbCBkaWdpdC5cclxuICAgICAgICAgICAgICAvLyAgU3VidHJhY3QgcHJvZHVjdCBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAvLyAgSWYgcHJvZHVjdCB3YXMgbGVzcyB0aGFuIHJlbWFpbmRlciBhdCB0aGUgbGFzdCBjb21wYXJlOlxyXG4gICAgICAgICAgICAgIC8vICAgIENvbXBhcmUgbmV3IHJlbWFpbmRlciBhbmQgZGl2aXNvci5cclxuICAgICAgICAgICAgICAvLyAgICBJZiByZW1haW5kZXIgaXMgZ3JlYXRlciB0aGFuIGRpdmlzb3I6XHJcbiAgICAgICAgICAgICAgLy8gICAgICBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLCBpbmNyZW1lbnQgdHJpYWwgZGlnaXQuXHJcblxyXG4gICAgICAgICAgICAgIGlmIChuID4gMSkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIG4gbWF5IGJlID4gYmFzZSBvbmx5IHdoZW4gYmFzZSBpcyAzLlxyXG4gICAgICAgICAgICAgICAgaWYgKG4gPj0gYmFzZSkgbiA9IGJhc2UgLSAxO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHByb2R1Y3QgPSBkaXZpc29yICogdHJpYWwgZGlnaXQuXHJcbiAgICAgICAgICAgICAgICBwcm9kID0gbXVsdGlwbHkoeWMsIG4sIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgcHJvZHVjdCBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCA+IHJlbWFpbmRlciB0aGVuIHRyaWFsIGRpZ2l0IG4gdG9vIGhpZ2guXHJcbiAgICAgICAgICAgICAgICAvLyBuIGlzIDEgdG9vIGhpZ2ggYWJvdXQgNSUgb2YgdGhlIHRpbWUsIGFuZCBpcyBub3Qga25vd24gdG8gaGF2ZVxyXG4gICAgICAgICAgICAgICAgLy8gZXZlciBiZWVuIG1vcmUgdGhhbiAxIHRvbyBoaWdoLlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvbXBhcmUocHJvZCwgcmVtLCBwcm9kTCwgcmVtTCkgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBuLS07XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcHJvZHVjdC5cclxuICAgICAgICAgICAgICAgICAgc3VidHJhY3QocHJvZCwgeUwgPCBwcm9kTCA/IHl6IDogeWMsIHByb2RMLCBiYXNlKTtcclxuICAgICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgY21wID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIG4gaXMgMCBvciAxLCBjbXAgaXMgLTEuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBuIGlzIDAsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY29tcGFyZSB5YyBhbmQgcmVtIGFnYWluIGJlbG93LFxyXG4gICAgICAgICAgICAgICAgLy8gc28gY2hhbmdlIGNtcCB0byAxIHRvIGF2b2lkIGl0LlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgbiBpcyAxLCBsZWF2ZSBjbXAgYXMgLTEsIHNvIHljIGFuZCByZW0gYXJlIGNvbXBhcmVkIGFnYWluLlxyXG4gICAgICAgICAgICAgICAgaWYgKG4gPT0gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gZGl2aXNvciA8IHJlbWFpbmRlciwgc28gbiBtdXN0IGJlIGF0IGxlYXN0IDEuXHJcbiAgICAgICAgICAgICAgICAgIGNtcCA9IG4gPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHByb2R1Y3QgPSBkaXZpc29yXHJcbiAgICAgICAgICAgICAgICBwcm9kID0geWMuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgIHByb2RMID0gcHJvZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAocHJvZEwgPCByZW1MKSBwcm9kID0gWzBdLmNvbmNhdChwcm9kKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gU3VidHJhY3QgcHJvZHVjdCBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICBzdWJ0cmFjdChyZW0sIHByb2QsIHJlbUwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCB3YXMgPCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgZGl2aXNvciBhbmQgbmV3IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgIC8vIElmIGRpdmlzb3IgPCBuZXcgcmVtYWluZGVyLCBzdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgLy8gVHJpYWwgZGlnaXQgbiB0b28gbG93LlxyXG4gICAgICAgICAgICAgICAgLy8gbiBpcyAxIHRvbyBsb3cgYWJvdXQgNSUgb2YgdGhlIHRpbWUsIGFuZCB2ZXJ5IHJhcmVseSAyIHRvbyBsb3cuXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29tcGFyZSh5YywgcmVtLCB5TCwgcmVtTCkgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIG4rKztcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAgIHN1YnRyYWN0KHJlbSwgeUwgPCByZW1MID8geXogOiB5YywgcmVtTCwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT09IDApIHtcclxuICAgICAgICAgICAgICBuKys7XHJcbiAgICAgICAgICAgICAgcmVtID0gWzBdO1xyXG4gICAgICAgICAgICB9IC8vIGVsc2UgY21wID09PSAxIGFuZCBuIHdpbGwgYmUgMFxyXG5cclxuICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXh0IGRpZ2l0LCBuLCB0byB0aGUgcmVzdWx0IGFycmF5LlxyXG4gICAgICAgICAgICBxY1tpKytdID0gbjtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBpZiAocmVtWzBdKSB7XHJcbiAgICAgICAgICAgICAgcmVtW3JlbUwrK10gPSB4Y1t4aV0gfHwgMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZW0gPSBbeGNbeGldXTtcclxuICAgICAgICAgICAgICByZW1MID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSB3aGlsZSAoKHhpKysgPCB4TCB8fCByZW1bMF0gIT0gbnVsbCkgJiYgcy0tKTtcclxuXHJcbiAgICAgICAgICBtb3JlID0gcmVtWzBdICE9IG51bGw7XHJcblxyXG4gICAgICAgICAgLy8gTGVhZGluZyB6ZXJvP1xyXG4gICAgICAgICAgaWYgKCFxY1swXSkgcWMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhc2UgPT0gQkFTRSkge1xyXG5cclxuICAgICAgICAgIC8vIFRvIGNhbGN1bGF0ZSBxLmUsIGZpcnN0IGdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBxY1swXS5cclxuICAgICAgICAgIGZvciAoaSA9IDEsIHMgPSBxY1swXTsgcyA+PSAxMDsgcyAvPSAxMCwgaSsrKTtcclxuXHJcbiAgICAgICAgICByb3VuZChxLCBkcCArIChxLmUgPSBpICsgZSAqIExPR19CQVNFIC0gMSkgKyAxLCBybSwgbW9yZSk7XHJcblxyXG4gICAgICAgIC8vIENhbGxlciBpcyBjb252ZXJ0QmFzZS5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcS5lID0gZTtcclxuICAgICAgICAgIHEuciA9ICttb3JlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHE7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyIG4gaW4gZml4ZWQtcG9pbnQgb3IgZXhwb25lbnRpYWxcclxuICAgICAqIG5vdGF0aW9uIHJvdW5kZWQgdG8gdGhlIHNwZWNpZmllZCBkZWNpbWFsIHBsYWNlcyBvciBzaWduaWZpY2FudCBkaWdpdHMuXHJcbiAgICAgKlxyXG4gICAgICogbjogYSBCaWdOdW1iZXIuXHJcbiAgICAgKiBpOiB0aGUgaW5kZXggb2YgdGhlIGxhc3QgZGlnaXQgcmVxdWlyZWQgKGkuZS4gdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXApLlxyXG4gICAgICogcm06IHRoZSByb3VuZGluZyBtb2RlLlxyXG4gICAgICogaWQ6IDEgKHRvRXhwb25lbnRpYWwpIG9yIDIgKHRvUHJlY2lzaW9uKS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZm9ybWF0KG4sIGksIHJtLCBpZCkge1xyXG4gICAgICB2YXIgYzAsIGUsIG5lLCBsZW4sIHN0cjtcclxuXHJcbiAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG5cclxuICAgICAgaWYgKCFuLmMpIHJldHVybiBuLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICBjMCA9IG4uY1swXTtcclxuICAgICAgbmUgPSBuLmU7XHJcblxyXG4gICAgICBpZiAoaSA9PSBudWxsKSB7XHJcbiAgICAgICAgc3RyID0gY29lZmZUb1N0cmluZyhuLmMpO1xyXG4gICAgICAgIHN0ciA9IGlkID09IDEgfHwgaWQgPT0gMiAmJiAobmUgPD0gVE9fRVhQX05FRyB8fCBuZSA+PSBUT19FWFBfUE9TKVxyXG4gICAgICAgICA/IHRvRXhwb25lbnRpYWwoc3RyLCBuZSlcclxuICAgICAgICAgOiB0b0ZpeGVkUG9pbnQoc3RyLCBuZSwgJzAnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuID0gcm91bmQobmV3IEJpZ051bWJlcihuKSwgaSwgcm0pO1xyXG5cclxuICAgICAgICAvLyBuLmUgbWF5IGhhdmUgY2hhbmdlZCBpZiB0aGUgdmFsdWUgd2FzIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgZSA9IG4uZTtcclxuXHJcbiAgICAgICAgc3RyID0gY29lZmZUb1N0cmluZyhuLmMpO1xyXG4gICAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgICAgIC8vIHRvUHJlY2lzaW9uIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24gaWYgdGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHNcclxuICAgICAgICAvLyBzcGVjaWZpZWQgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgZGlnaXRzIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIGludGVnZXJcclxuICAgICAgICAvLyBwYXJ0IG9mIHRoZSB2YWx1ZSBpbiBmaXhlZC1wb2ludCBub3RhdGlvbi5cclxuXHJcbiAgICAgICAgLy8gRXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgICAgaWYgKGlkID09IDEgfHwgaWQgPT0gMiAmJiAoaSA8PSBlIHx8IGUgPD0gVE9fRVhQX05FRykpIHtcclxuXHJcbiAgICAgICAgICAvLyBBcHBlbmQgemVyb3M/XHJcbiAgICAgICAgICBmb3IgKDsgbGVuIDwgaTsgc3RyICs9ICcwJywgbGVuKyspO1xyXG4gICAgICAgICAgc3RyID0gdG9FeHBvbmVudGlhbChzdHIsIGUpO1xyXG5cclxuICAgICAgICAvLyBGaXhlZC1wb2ludCBub3RhdGlvbi5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaSAtPSBuZTtcclxuICAgICAgICAgIHN0ciA9IHRvRml4ZWRQb2ludChzdHIsIGUsICcwJyk7XHJcblxyXG4gICAgICAgICAgLy8gQXBwZW5kIHplcm9zP1xyXG4gICAgICAgICAgaWYgKGUgKyAxID4gbGVuKSB7XHJcbiAgICAgICAgICAgIGlmICgtLWkgPiAwKSBmb3IgKHN0ciArPSAnLic7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpICs9IGUgLSBsZW47XHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgICAgICAgIGlmIChlICsgMSA9PSBsZW4pIHN0ciArPSAnLic7XHJcbiAgICAgICAgICAgICAgZm9yICg7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBuLnMgPCAwICYmIGMwID8gJy0nICsgc3RyIDogc3RyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBIYW5kbGUgQmlnTnVtYmVyLm1heCBhbmQgQmlnTnVtYmVyLm1pbi5cclxuICAgIGZ1bmN0aW9uIG1heE9yTWluKGFyZ3MsIG1ldGhvZCkge1xyXG4gICAgICB2YXIgbixcclxuICAgICAgICBpID0gMSxcclxuICAgICAgICBtID0gbmV3IEJpZ051bWJlcihhcmdzWzBdKTtcclxuXHJcbiAgICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKGFyZ3NbaV0pO1xyXG5cclxuICAgICAgICAvLyBJZiBhbnkgbnVtYmVyIGlzIE5hTiwgcmV0dXJuIE5hTi5cclxuICAgICAgICBpZiAoIW4ucykge1xyXG4gICAgICAgICAgbSA9IG47XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZC5jYWxsKG0sIG4pKSB7XHJcbiAgICAgICAgICBtID0gbjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBtO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogU3RyaXAgdHJhaWxpbmcgemVyb3MsIGNhbGN1bGF0ZSBiYXNlIDEwIGV4cG9uZW50IGFuZCBjaGVjayBhZ2FpbnN0IE1JTl9FWFAgYW5kIE1BWF9FWFAuXHJcbiAgICAgKiBDYWxsZWQgYnkgbWludXMsIHBsdXMgYW5kIHRpbWVzLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBub3JtYWxpc2UobiwgYywgZSkge1xyXG4gICAgICB2YXIgaSA9IDEsXHJcbiAgICAgICAgaiA9IGMubGVuZ3RoO1xyXG5cclxuICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yICg7ICFjWy0tal07IGMucG9wKCkpO1xyXG5cclxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBiYXNlIDEwIGV4cG9uZW50LiBGaXJzdCBnZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgY1swXS5cclxuICAgICAgZm9yIChqID0gY1swXTsgaiA+PSAxMDsgaiAvPSAxMCwgaSsrKTtcclxuXHJcbiAgICAgIC8vIE92ZXJmbG93P1xyXG4gICAgICBpZiAoKGUgPSBpICsgZSAqIExPR19CQVNFIC0gMSkgPiBNQVhfRVhQKSB7XHJcblxyXG4gICAgICAgIC8vIEluZmluaXR5LlxyXG4gICAgICAgIG4uYyA9IG4uZSA9IG51bGw7XHJcblxyXG4gICAgICAvLyBVbmRlcmZsb3c/XHJcbiAgICAgIH0gZWxzZSBpZiAoZSA8IE1JTl9FWFApIHtcclxuXHJcbiAgICAgICAgLy8gWmVyby5cclxuICAgICAgICBuLmMgPSBbbi5lID0gMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbi5lID0gZTtcclxuICAgICAgICBuLmMgPSBjO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gSGFuZGxlIHZhbHVlcyB0aGF0IGZhaWwgdGhlIHZhbGlkaXR5IHRlc3QgaW4gQmlnTnVtYmVyLlxyXG4gICAgcGFyc2VOdW1lcmljID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIGJhc2VQcmVmaXggPSAvXigtPykwKFt4Ym9dKSg/PVxcd1tcXHcuXSokKS9pLFxyXG4gICAgICAgIGRvdEFmdGVyID0gL14oW14uXSspXFwuJC8sXHJcbiAgICAgICAgZG90QmVmb3JlID0gL15cXC4oW14uXSspJC8sXHJcbiAgICAgICAgaXNJbmZpbml0eU9yTmFOID0gL14tPyhJbmZpbml0eXxOYU4pJC8sXHJcbiAgICAgICAgd2hpdGVzcGFjZU9yUGx1cyA9IC9eXFxzKlxcKyg/PVtcXHcuXSl8Xlxccyt8XFxzKyQvZztcclxuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoeCwgc3RyLCBpc051bSwgYikge1xyXG4gICAgICAgIHZhciBiYXNlLFxyXG4gICAgICAgICAgcyA9IGlzTnVtID8gc3RyIDogc3RyLnJlcGxhY2Uod2hpdGVzcGFjZU9yUGx1cywgJycpO1xyXG5cclxuICAgICAgICAvLyBObyBleGNlcHRpb24gb24gwrFJbmZpbml0eSBvciBOYU4uXHJcbiAgICAgICAgaWYgKGlzSW5maW5pdHlPck5hTi50ZXN0KHMpKSB7XHJcbiAgICAgICAgICB4LnMgPSBpc05hTihzKSA/IG51bGwgOiBzIDwgMCA/IC0xIDogMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCFpc051bSkge1xyXG5cclxuICAgICAgICAgICAgLy8gYmFzZVByZWZpeCA9IC9eKC0/KTAoW3hib10pKD89XFx3W1xcdy5dKiQpL2lcclxuICAgICAgICAgICAgcyA9IHMucmVwbGFjZShiYXNlUHJlZml4LCBmdW5jdGlvbiAobSwgcDEsIHAyKSB7XHJcbiAgICAgICAgICAgICAgYmFzZSA9IChwMiA9IHAyLnRvTG93ZXJDYXNlKCkpID09ICd4JyA/IDE2IDogcDIgPT0gJ2InID8gMiA6IDg7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICFiIHx8IGIgPT0gYmFzZSA/IHAxIDogbTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYikge1xyXG4gICAgICAgICAgICAgIGJhc2UgPSBiO1xyXG5cclxuICAgICAgICAgICAgICAvLyBFLmcuICcxLicgdG8gJzEnLCAnLjEnIHRvICcwLjEnXHJcbiAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZShkb3RBZnRlciwgJyQxJykucmVwbGFjZShkb3RCZWZvcmUsICcwLiQxJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdHIgIT0gcykgcmV0dXJuIG5ldyBCaWdOdW1iZXIocywgYmFzZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE5vdCBhIG51bWJlcjoge259J1xyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE5vdCBhIGJhc2Uge2J9IG51bWJlcjoge259J1xyXG4gICAgICAgICAgaWYgKEJpZ051bWJlci5ERUJVRykge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdOb3QgYScgKyAoYiA/ICcgYmFzZSAnICsgYiA6ICcnKSArICcgbnVtYmVyOiAnICsgc3RyKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBOYU5cclxuICAgICAgICAgIHgucyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUm91bmQgeCB0byBzZCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBybS4gQ2hlY2sgZm9yIG92ZXIvdW5kZXItZmxvdy5cclxuICAgICAqIElmIHIgaXMgdHJ1dGh5LCBpdCBpcyBrbm93biB0aGF0IHRoZXJlIGFyZSBtb3JlIGRpZ2l0cyBhZnRlciB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHJvdW5kKHgsIHNkLCBybSwgcikge1xyXG4gICAgICB2YXIgZCwgaSwgaiwgaywgbiwgbmksIHJkLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHBvd3MxMCA9IFBPV1NfVEVOO1xyXG5cclxuICAgICAgLy8gaWYgeCBpcyBub3QgSW5maW5pdHkgb3IgTmFOLi4uXHJcbiAgICAgIGlmICh4Yykge1xyXG5cclxuICAgICAgICAvLyByZCBpcyB0aGUgcm91bmRpbmcgZGlnaXQsIGkuZS4gdGhlIGRpZ2l0IGFmdGVyIHRoZSBkaWdpdCB0aGF0IG1heSBiZSByb3VuZGVkIHVwLlxyXG4gICAgICAgIC8vIG4gaXMgYSBiYXNlIDFlMTQgbnVtYmVyLCB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgb2YgYXJyYXkgeC5jIGNvbnRhaW5pbmcgcmQuXHJcbiAgICAgICAgLy8gbmkgaXMgdGhlIGluZGV4IG9mIG4gd2l0aGluIHguYy5cclxuICAgICAgICAvLyBkIGlzIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIG4uXHJcbiAgICAgICAgLy8gaSBpcyB0aGUgaW5kZXggb2YgcmQgd2l0aGluIG4gaW5jbHVkaW5nIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgICAgLy8gaiBpcyB0aGUgYWN0dWFsIGluZGV4IG9mIHJkIHdpdGhpbiBuIChpZiA8IDAsIHJkIGlzIGEgbGVhZGluZyB6ZXJvKS5cclxuICAgICAgICBvdXQ6IHtcclxuXHJcbiAgICAgICAgICAvLyBHZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgeGMuXHJcbiAgICAgICAgICBmb3IgKGQgPSAxLCBrID0geGNbMF07IGsgPj0gMTA7IGsgLz0gMTAsIGQrKyk7XHJcbiAgICAgICAgICBpID0gc2QgLSBkO1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSByb3VuZGluZyBkaWdpdCBpcyBpbiB0aGUgZmlyc3QgZWxlbWVudCBvZiB4Yy4uLlxyXG4gICAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICAgIGkgKz0gTE9HX0JBU0U7XHJcbiAgICAgICAgICAgIGogPSBzZDtcclxuICAgICAgICAgICAgbiA9IHhjW25pID0gMF07XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgdGhlIHJvdW5kaW5nIGRpZ2l0IGF0IGluZGV4IGogb2Ygbi5cclxuICAgICAgICAgICAgcmQgPSBuIC8gcG93czEwW2QgLSBqIC0gMV0gJSAxMCB8IDA7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBuaSA9IG1hdGhjZWlsKChpICsgMSkgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgICAgICAgICBpZiAobmkgPj0geGMubGVuZ3RoKSB7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTmVlZGVkIGJ5IHNxcnQuXHJcbiAgICAgICAgICAgICAgICBmb3IgKDsgeGMubGVuZ3RoIDw9IG5pOyB4Yy5wdXNoKDApKTtcclxuICAgICAgICAgICAgICAgIG4gPSByZCA9IDA7XHJcbiAgICAgICAgICAgICAgICBkID0gMTtcclxuICAgICAgICAgICAgICAgIGkgJT0gTE9HX0JBU0U7XHJcbiAgICAgICAgICAgICAgICBqID0gaSAtIExPR19CQVNFICsgMTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBuID0gayA9IHhjW25pXTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIG4uXHJcbiAgICAgICAgICAgICAgZm9yIChkID0gMTsgayA+PSAxMDsgayAvPSAxMCwgZCsrKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiByZCB3aXRoaW4gbi5cclxuICAgICAgICAgICAgICBpICU9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiBuLCBhZGp1c3RlZCBmb3IgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3Mgb2YgbiBpcyBnaXZlbiBieSBMT0dfQkFTRSAtIGQuXHJcbiAgICAgICAgICAgICAgaiA9IGkgLSBMT0dfQkFTRSArIGQ7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiBuLlxyXG4gICAgICAgICAgICAgIHJkID0gaiA8IDAgPyAwIDogbiAvIHBvd3MxMFtkIC0gaiAtIDFdICUgMTAgfCAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgciA9IHIgfHwgc2QgPCAwIHx8XHJcblxyXG4gICAgICAgICAgLy8gQXJlIHRoZXJlIGFueSBub24temVybyBkaWdpdHMgYWZ0ZXIgdGhlIHJvdW5kaW5nIGRpZ2l0P1xyXG4gICAgICAgICAgLy8gVGhlIGV4cHJlc3Npb24gIG4gJSBwb3dzMTBbZCAtIGogLSAxXSAgcmV0dXJucyBhbGwgZGlnaXRzIG9mIG4gdG8gdGhlIHJpZ2h0XHJcbiAgICAgICAgICAvLyBvZiB0aGUgZGlnaXQgYXQgaiwgZS5nLiBpZiBuIGlzIDkwODcxNCBhbmQgaiBpcyAyLCB0aGUgZXhwcmVzc2lvbiBnaXZlcyA3MTQuXHJcbiAgICAgICAgICAgeGNbbmkgKyAxXSAhPSBudWxsIHx8IChqIDwgMCA/IG4gOiBuICUgcG93czEwW2QgLSBqIC0gMV0pO1xyXG5cclxuICAgICAgICAgIHIgPSBybSA8IDRcclxuICAgICAgICAgICA/IChyZCB8fCByKSAmJiAocm0gPT0gMCB8fCBybSA9PSAoeC5zIDwgMCA/IDMgOiAyKSlcclxuICAgICAgICAgICA6IHJkID4gNSB8fCByZCA9PSA1ICYmIChybSA9PSA0IHx8IHIgfHwgcm0gPT0gNiAmJlxyXG5cclxuICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgZGlnaXQgdG8gdGhlIGxlZnQgb2YgdGhlIHJvdW5kaW5nIGRpZ2l0IGlzIG9kZC5cclxuICAgICAgICAgICAgKChpID4gMCA/IGogPiAwID8gbiAvIHBvd3MxMFtkIC0gal0gOiAwIDogeGNbbmkgLSAxXSkgJSAxMCkgJiAxIHx8XHJcbiAgICAgICAgICAgICBybSA9PSAoeC5zIDwgMCA/IDggOiA3KSk7XHJcblxyXG4gICAgICAgICAgaWYgKHNkIDwgMSB8fCAheGNbMF0pIHtcclxuICAgICAgICAgICAgeGMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIENvbnZlcnQgc2QgdG8gZGVjaW1hbCBwbGFjZXMuXHJcbiAgICAgICAgICAgICAgc2QgLT0geC5lICsgMTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gMSwgMC4xLCAwLjAxLCAwLjAwMSwgMC4wMDAxIGV0Yy5cclxuICAgICAgICAgICAgICB4Y1swXSA9IHBvd3MxMFsoTE9HX0JBU0UgLSBzZCAlIExPR19CQVNFKSAlIExPR19CQVNFXTtcclxuICAgICAgICAgICAgICB4LmUgPSAtc2QgfHwgMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gWmVyby5cclxuICAgICAgICAgICAgICB4Y1swXSA9IHguZSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB4O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJlbW92ZSBleGNlc3MgZGlnaXRzLlxyXG4gICAgICAgICAgaWYgKGkgPT0gMCkge1xyXG4gICAgICAgICAgICB4Yy5sZW5ndGggPSBuaTtcclxuICAgICAgICAgICAgayA9IDE7XHJcbiAgICAgICAgICAgIG5pLS07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB4Yy5sZW5ndGggPSBuaSArIDE7XHJcbiAgICAgICAgICAgIGsgPSBwb3dzMTBbTE9HX0JBU0UgLSBpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIEUuZy4gNTY3MDAgYmVjb21lcyA1NjAwMCBpZiA3IGlzIHRoZSByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICAgICAgLy8gaiA+IDAgbWVhbnMgaSA+IG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIG4uXHJcbiAgICAgICAgICAgIHhjW25pXSA9IGogPiAwID8gbWF0aGZsb29yKG4gLyBwb3dzMTBbZCAtIGpdICUgcG93czEwW2pdKSAqIGsgOiAwO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJvdW5kIHVwP1xyXG4gICAgICAgICAgaWYgKHIpIHtcclxuXHJcbiAgICAgICAgICAgIGZvciAoOyA7KSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmIHRoZSBkaWdpdCB0byBiZSByb3VuZGVkIHVwIGlzIGluIHRoZSBmaXJzdCBlbGVtZW50IG9mIHhjLi4uXHJcbiAgICAgICAgICAgICAgaWYgKG5pID09IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpIHdpbGwgYmUgdGhlIGxlbmd0aCBvZiB4Y1swXSBiZWZvcmUgayBpcyBhZGRlZC5cclxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDEsIGogPSB4Y1swXTsgaiA+PSAxMDsgaiAvPSAxMCwgaSsrKTtcclxuICAgICAgICAgICAgICAgIGogPSB4Y1swXSArPSBrO1xyXG4gICAgICAgICAgICAgICAgZm9yIChrID0gMTsgaiA+PSAxMDsgaiAvPSAxMCwgaysrKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiBpICE9IGsgdGhlIGxlbmd0aCBoYXMgaW5jcmVhc2VkLlxyXG4gICAgICAgICAgICAgICAgaWYgKGkgIT0gaykge1xyXG4gICAgICAgICAgICAgICAgICB4LmUrKztcclxuICAgICAgICAgICAgICAgICAgaWYgKHhjWzBdID09IEJBU0UpIHhjWzBdID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgeGNbbmldICs9IGs7XHJcbiAgICAgICAgICAgICAgICBpZiAoeGNbbmldICE9IEJBU0UpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgeGNbbmktLV0gPSAwO1xyXG4gICAgICAgICAgICAgICAgayA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgICAgZm9yIChpID0geGMubGVuZ3RoOyB4Y1stLWldID09PSAwOyB4Yy5wb3AoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBPdmVyZmxvdz8gSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKHguZSA+IE1BWF9FWFApIHtcclxuICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIFVuZGVyZmxvdz8gWmVyby5cclxuICAgICAgICB9IGVsc2UgaWYgKHguZSA8IE1JTl9FWFApIHtcclxuICAgICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiB2YWx1ZU9mKG4pIHtcclxuICAgICAgdmFyIHN0cixcclxuICAgICAgICBlID0gbi5lO1xyXG5cclxuICAgICAgaWYgKGUgPT09IG51bGwpIHJldHVybiBuLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICBzdHIgPSBjb2VmZlRvU3RyaW5nKG4uYyk7XHJcblxyXG4gICAgICBzdHIgPSBlIDw9IFRPX0VYUF9ORUcgfHwgZSA+PSBUT19FWFBfUE9TXHJcbiAgICAgICAgPyB0b0V4cG9uZW50aWFsKHN0ciwgZSlcclxuICAgICAgICA6IHRvRml4ZWRQb2ludChzdHIsIGUsICcwJyk7XHJcblxyXG4gICAgICByZXR1cm4gbi5zIDwgMCA/ICctJyArIHN0ciA6IHN0cjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gUFJPVE9UWVBFL0lOU1RBTkNFIE1FVEhPRFNcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLlxyXG4gICAgICovXHJcbiAgICBQLmFic29sdXRlVmFsdWUgPSBQLmFicyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHggPSBuZXcgQmlnTnVtYmVyKHRoaXMpO1xyXG4gICAgICBpZiAoeC5zIDwgMCkgeC5zID0gMTtcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuXHJcbiAgICAgKiAgIDEgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogICAtMSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiAgIDAgaWYgdGhleSBoYXZlIHRoZSBzYW1lIHZhbHVlLFxyXG4gICAgICogICBvciBudWxsIGlmIHRoZSB2YWx1ZSBvZiBlaXRoZXIgaXMgTmFOLlxyXG4gICAgICovXHJcbiAgICBQLmNvbXBhcmVkVG8gPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBJZiBkcCBpcyB1bmRlZmluZWQgb3IgbnVsbCBvciB0cnVlIG9yIGZhbHNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBvZiB0aGVcclxuICAgICAqIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLCBvciBudWxsIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyDCsUluZmluaXR5IG9yIE5hTi5cclxuICAgICAqXHJcbiAgICAgKiBPdGhlcndpc2UsIGlmIGRwIGlzIGEgbnVtYmVyLCByZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICAgKiBCaWdOdW1iZXIgcm91bmRlZCB0byBhIG1heGltdW0gb2YgZHAgZGVjaW1hbCBwbGFjZXMgdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3JcclxuICAgICAqIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzOiBpbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAuZGVjaW1hbFBsYWNlcyA9IFAuZHAgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICAgIHZhciBjLCBuLCB2LFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgaWYgKGRwICE9IG51bGwpIHtcclxuICAgICAgICBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuICAgICAgICBpZiAocm0gPT0gbnVsbCkgcm0gPSBST1VORElOR19NT0RFO1xyXG4gICAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG5cclxuICAgICAgICByZXR1cm4gcm91bmQobmV3IEJpZ051bWJlcih4KSwgZHAgKyB4LmUgKyAxLCBybSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghKGMgPSB4LmMpKSByZXR1cm4gbnVsbDtcclxuICAgICAgbiA9ICgodiA9IGMubGVuZ3RoIC0gMSkgLSBiaXRGbG9vcih0aGlzLmUgLyBMT0dfQkFTRSkpICogTE9HX0JBU0U7XHJcblxyXG4gICAgICAvLyBTdWJ0cmFjdCB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9zIG9mIHRoZSBsYXN0IG51bWJlci5cclxuICAgICAgaWYgKHYgPSBjW3ZdKSBmb3IgKDsgdiAlIDEwID09IDA7IHYgLz0gMTAsIG4tLSk7XHJcbiAgICAgIGlmIChuIDwgMCkgbiA9IDA7XHJcblxyXG4gICAgICByZXR1cm4gbjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiAvIDAgPSBJXHJcbiAgICAgKiAgbiAvIE4gPSBOXHJcbiAgICAgKiAgbiAvIEkgPSAwXHJcbiAgICAgKiAgMCAvIG4gPSAwXHJcbiAgICAgKiAgMCAvIDAgPSBOXHJcbiAgICAgKiAgMCAvIE4gPSBOXHJcbiAgICAgKiAgMCAvIEkgPSAwXHJcbiAgICAgKiAgTiAvIG4gPSBOXHJcbiAgICAgKiAgTiAvIDAgPSBOXHJcbiAgICAgKiAgTiAvIE4gPSBOXHJcbiAgICAgKiAgTiAvIEkgPSBOXHJcbiAgICAgKiAgSSAvIG4gPSBJXHJcbiAgICAgKiAgSSAvIDAgPSBJXHJcbiAgICAgKiAgSSAvIE4gPSBOXHJcbiAgICAgKiAgSSAvIEkgPSBOXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgZGl2aWRlZCBieSB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKSwgcm91bmRlZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKi9cclxuICAgIFAuZGl2aWRlZEJ5ID0gUC5kaXYgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gZGl2KHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYiksIERFQ0lNQUxfUExBQ0VTLCBST1VORElOR19NT0RFKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBpbnRlZ2VyIHBhcnQgb2YgZGl2aWRpbmcgdGhlIHZhbHVlIG9mIHRoaXNcclxuICAgICAqIEJpZ051bWJlciBieSB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLmRpdmlkZWRUb0ludGVnZXJCeSA9IFAuaWRpdiA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBkaXYodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSwgMCwgMSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBleHBvbmVudGlhdGVkIGJ5IG4uXHJcbiAgICAgKlxyXG4gICAgICogSWYgbSBpcyBwcmVzZW50LCByZXR1cm4gdGhlIHJlc3VsdCBtb2R1bG8gbS5cclxuICAgICAqIElmIG4gaXMgbmVnYXRpdmUgcm91bmQgYWNjb3JkaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFuZCBST1VORElOR19NT0RFLlxyXG4gICAgICogSWYgUE9XX1BSRUNJU0lPTiBpcyBub24temVybyBhbmQgbSBpcyBub3QgcHJlc2VudCwgcm91bmQgdG8gUE9XX1BSRUNJU0lPTiB1c2luZyBST1VORElOR19NT0RFLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBtb2R1bGFyIHBvd2VyIG9wZXJhdGlvbiB3b3JrcyBlZmZpY2llbnRseSB3aGVuIHgsIG4sIGFuZCBtIGFyZSBpbnRlZ2Vycywgb3RoZXJ3aXNlIGl0XHJcbiAgICAgKiBpcyBlcXVpdmFsZW50IHRvIGNhbGN1bGF0aW5nIHguZXhwb25lbnRpYXRlZEJ5KG4pLm1vZHVsbyhtKSB3aXRoIGEgUE9XX1BSRUNJU0lPTiBvZiAwLlxyXG4gICAgICpcclxuICAgICAqIG4ge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBUaGUgZXhwb25lbnQuIEFuIGludGVnZXIuXHJcbiAgICAgKiBbbV0ge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBUaGUgbW9kdWx1cy5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gRXhwb25lbnQgbm90IGFuIGludGVnZXI6IHtufSdcclxuICAgICAqL1xyXG4gICAgUC5leHBvbmVudGlhdGVkQnkgPSBQLnBvdyA9IGZ1bmN0aW9uIChuLCBtKSB7XHJcbiAgICAgIHZhciBoYWxmLCBpc01vZEV4cCwgaSwgaywgbW9yZSwgbklzQmlnLCBuSXNOZWcsIG5Jc09kZCwgeSxcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKG4pO1xyXG5cclxuICAgICAgLy8gQWxsb3cgTmFOIGFuZCDCsUluZmluaXR5LCBidXQgbm90IG90aGVyIG5vbi1pbnRlZ2Vycy5cclxuICAgICAgaWYgKG4uYyAmJiAhbi5pc0ludGVnZXIoKSkge1xyXG4gICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnRXhwb25lbnQgbm90IGFuIGludGVnZXI6ICcgKyB2YWx1ZU9mKG4pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG0gIT0gbnVsbCkgbSA9IG5ldyBCaWdOdW1iZXIobSk7XHJcblxyXG4gICAgICAvLyBFeHBvbmVudCBvZiBNQVhfU0FGRV9JTlRFR0VSIGlzIDE1LlxyXG4gICAgICBuSXNCaWcgPSBuLmUgPiAxNDtcclxuXHJcbiAgICAgIC8vIElmIHggaXMgTmFOLCDCsUluZmluaXR5LCDCsTAgb3IgwrExLCBvciBuIGlzIMKxSW5maW5pdHksIE5hTiBvciDCsTAuXHJcbiAgICAgIGlmICgheC5jIHx8ICF4LmNbMF0gfHwgeC5jWzBdID09IDEgJiYgIXguZSAmJiB4LmMubGVuZ3RoID09IDEgfHwgIW4uYyB8fCAhbi5jWzBdKSB7XHJcblxyXG4gICAgICAgIC8vIFRoZSBzaWduIG9mIHRoZSByZXN1bHQgb2YgcG93IHdoZW4geCBpcyBuZWdhdGl2ZSBkZXBlbmRzIG9uIHRoZSBldmVubmVzcyBvZiBuLlxyXG4gICAgICAgIC8vIElmICtuIG92ZXJmbG93cyB0byDCsUluZmluaXR5LCB0aGUgZXZlbm5lc3Mgb2YgbiB3b3VsZCBiZSBub3QgYmUga25vd24uXHJcbiAgICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoTWF0aC5wb3coK3ZhbHVlT2YoeCksIG5Jc0JpZyA/IDIgLSBpc09kZChuKSA6ICt2YWx1ZU9mKG4pKSk7XHJcbiAgICAgICAgcmV0dXJuIG0gPyB5Lm1vZChtKSA6IHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5Jc05lZyA9IG4ucyA8IDA7XHJcblxyXG4gICAgICBpZiAobSkge1xyXG5cclxuICAgICAgICAvLyB4ICUgbSByZXR1cm5zIE5hTiBpZiBhYnMobSkgaXMgemVybywgb3IgbSBpcyBOYU4uXHJcbiAgICAgICAgaWYgKG0uYyA/ICFtLmNbMF0gOiAhbS5zKSByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgICBpc01vZEV4cCA9ICFuSXNOZWcgJiYgeC5pc0ludGVnZXIoKSAmJiBtLmlzSW50ZWdlcigpO1xyXG5cclxuICAgICAgICBpZiAoaXNNb2RFeHApIHggPSB4Lm1vZChtKTtcclxuXHJcbiAgICAgIC8vIE92ZXJmbG93IHRvIMKxSW5maW5pdHk6ID49MioqMWUxMCBvciA+PTEuMDAwMDAyNCoqMWUxNS5cclxuICAgICAgLy8gVW5kZXJmbG93IHRvIMKxMDogPD0wLjc5KioxZTEwIG9yIDw9MC45OTk5OTc1KioxZTE1LlxyXG4gICAgICB9IGVsc2UgaWYgKG4uZSA+IDkgJiYgKHguZSA+IDAgfHwgeC5lIDwgLTEgfHwgKHguZSA9PSAwXHJcbiAgICAgICAgLy8gWzEsIDI0MDAwMDAwMF1cclxuICAgICAgICA/IHguY1swXSA+IDEgfHwgbklzQmlnICYmIHguY1sxXSA+PSAyNGU3XHJcbiAgICAgICAgLy8gWzgwMDAwMDAwMDAwMDAwXSAgWzk5OTk5NzUwMDAwMDAwXVxyXG4gICAgICAgIDogeC5jWzBdIDwgOGUxMyB8fCBuSXNCaWcgJiYgeC5jWzBdIDw9IDk5OTk5NzVlNykpKSB7XHJcblxyXG4gICAgICAgIC8vIElmIHggaXMgbmVnYXRpdmUgYW5kIG4gaXMgb2RkLCBrID0gLTAsIGVsc2UgayA9IDAuXHJcbiAgICAgICAgayA9IHgucyA8IDAgJiYgaXNPZGQobikgPyAtMCA6IDA7XHJcblxyXG4gICAgICAgIC8vIElmIHggPj0gMSwgayA9IMKxSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKHguZSA+IC0xKSBrID0gMSAvIGs7XHJcblxyXG4gICAgICAgIC8vIElmIG4gaXMgbmVnYXRpdmUgcmV0dXJuIMKxMCwgZWxzZSByZXR1cm4gwrFJbmZpbml0eS5cclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihuSXNOZWcgPyAxIC8gayA6IGspO1xyXG5cclxuICAgICAgfSBlbHNlIGlmIChQT1dfUFJFQ0lTSU9OKSB7XHJcblxyXG4gICAgICAgIC8vIFRydW5jYXRpbmcgZWFjaCBjb2VmZmljaWVudCBhcnJheSB0byBhIGxlbmd0aCBvZiBrIGFmdGVyIGVhY2ggbXVsdGlwbGljYXRpb25cclxuICAgICAgICAvLyBlcXVhdGVzIHRvIHRydW5jYXRpbmcgc2lnbmlmaWNhbnQgZGlnaXRzIHRvIFBPV19QUkVDSVNJT04gKyBbMjgsIDQxXSxcclxuICAgICAgICAvLyBpLmUuIHRoZXJlIHdpbGwgYmUgYSBtaW5pbXVtIG9mIDI4IGd1YXJkIGRpZ2l0cyByZXRhaW5lZC5cclxuICAgICAgICBrID0gbWF0aGNlaWwoUE9XX1BSRUNJU0lPTiAvIExPR19CQVNFICsgMik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChuSXNCaWcpIHtcclxuICAgICAgICBoYWxmID0gbmV3IEJpZ051bWJlcigwLjUpO1xyXG4gICAgICAgIGlmIChuSXNOZWcpIG4ucyA9IDE7XHJcbiAgICAgICAgbklzT2RkID0gaXNPZGQobik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaSA9IE1hdGguYWJzKCt2YWx1ZU9mKG4pKTtcclxuICAgICAgICBuSXNPZGQgPSBpICUgMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuXHJcbiAgICAgIC8vIFBlcmZvcm1zIDU0IGxvb3AgaXRlcmF0aW9ucyBmb3IgbiBvZiA5MDA3MTk5MjU0NzQwOTkxLlxyXG4gICAgICBmb3IgKDsgOykge1xyXG5cclxuICAgICAgICBpZiAobklzT2RkKSB7XHJcbiAgICAgICAgICB5ID0geS50aW1lcyh4KTtcclxuICAgICAgICAgIGlmICgheS5jKSBicmVhaztcclxuXHJcbiAgICAgICAgICBpZiAoaykge1xyXG4gICAgICAgICAgICBpZiAoeS5jLmxlbmd0aCA+IGspIHkuYy5sZW5ndGggPSBrO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChpc01vZEV4cCkge1xyXG4gICAgICAgICAgICB5ID0geS5tb2QobSk7ICAgIC8veSA9IHkubWludXMoZGl2KHksIG0sIDAsIE1PRFVMT19NT0RFKS50aW1lcyhtKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaSkge1xyXG4gICAgICAgICAgaSA9IG1hdGhmbG9vcihpIC8gMik7XHJcbiAgICAgICAgICBpZiAoaSA9PT0gMCkgYnJlYWs7XHJcbiAgICAgICAgICBuSXNPZGQgPSBpICUgMjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbiA9IG4udGltZXMoaGFsZik7XHJcbiAgICAgICAgICByb3VuZChuLCBuLmUgKyAxLCAxKTtcclxuXHJcbiAgICAgICAgICBpZiAobi5lID4gMTQpIHtcclxuICAgICAgICAgICAgbklzT2RkID0gaXNPZGQobik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpID0gK3ZhbHVlT2Yobik7XHJcbiAgICAgICAgICAgIGlmIChpID09PSAwKSBicmVhaztcclxuICAgICAgICAgICAgbklzT2RkID0gaSAlIDI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4ID0geC50aW1lcyh4KTtcclxuXHJcbiAgICAgICAgaWYgKGspIHtcclxuICAgICAgICAgIGlmICh4LmMgJiYgeC5jLmxlbmd0aCA+IGspIHguYy5sZW5ndGggPSBrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb2RFeHApIHtcclxuICAgICAgICAgIHggPSB4Lm1vZChtKTsgICAgLy94ID0geC5taW51cyhkaXYoeCwgbSwgMCwgTU9EVUxPX01PREUpLnRpbWVzKG0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc01vZEV4cCkgcmV0dXJuIHk7XHJcbiAgICAgIGlmIChuSXNOZWcpIHkgPSBPTkUuZGl2KHkpO1xyXG5cclxuICAgICAgcmV0dXJuIG0gPyB5Lm1vZChtKSA6IGsgPyByb3VuZCh5LCBQT1dfUFJFQ0lTSU9OLCBST1VORElOR19NT0RFLCBtb3JlKSA6IHk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgcm91bmRlZCB0byBhbiBpbnRlZ2VyXHJcbiAgICAgKiB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvciBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7cm19J1xyXG4gICAgICovXHJcbiAgICBQLmludGVnZXJWYWx1ZSA9IGZ1bmN0aW9uIChybSkge1xyXG4gICAgICB2YXIgbiA9IG5ldyBCaWdOdW1iZXIodGhpcyk7XHJcbiAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG4gICAgICByZXR1cm4gcm91bmQobiwgbi5lICsgMSwgcm0pO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBlcXVhbCB0byB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0VxdWFsVG8gPSBQLmVxID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkgPT09IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGEgZmluaXRlIG51bWJlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0Zpbml0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICEhdGhpcy5jO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNHcmVhdGVyVGhhbiA9IFAuZ3QgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSA+IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0dyZWF0ZXJUaGFuT3JFcXVhbFRvID0gUC5ndGUgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gKGIgPSBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpKSA9PT0gMSB8fCBiID09PSAwO1xyXG5cclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgYW4gaW50ZWdlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0ludGVnZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuYyAmJiBiaXRGbG9vcih0aGlzLmUgLyBMT0dfQkFTRSkgPiB0aGlzLmMubGVuZ3RoIC0gMjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTGVzc1RoYW4gPSBQLmx0ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkgPCAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYiksIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNMZXNzVGhhbk9yRXF1YWxUbyA9IFAubHRlID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIChiID0gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSkgPT09IC0xIHx8IGIgPT09IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIE5hTiwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc05hTiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICF0aGlzLnM7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIG5lZ2F0aXZlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTmVnYXRpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnMgPCAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBwb3NpdGl2ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc1Bvc2l0aXZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zID4gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgMCBvciAtMCwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc1plcm8gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuYyAmJiB0aGlzLmNbMF0gPT0gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiAtIDAgPSBuXHJcbiAgICAgKiAgbiAtIE4gPSBOXHJcbiAgICAgKiAgbiAtIEkgPSAtSVxyXG4gICAgICogIDAgLSBuID0gLW5cclxuICAgICAqICAwIC0gMCA9IDBcclxuICAgICAqICAwIC0gTiA9IE5cclxuICAgICAqICAwIC0gSSA9IC1JXHJcbiAgICAgKiAgTiAtIG4gPSBOXHJcbiAgICAgKiAgTiAtIDAgPSBOXHJcbiAgICAgKiAgTiAtIE4gPSBOXHJcbiAgICAgKiAgTiAtIEkgPSBOXHJcbiAgICAgKiAgSSAtIG4gPSBJXHJcbiAgICAgKiAgSSAtIDAgPSBJXHJcbiAgICAgKiAgSSAtIE4gPSBOXHJcbiAgICAgKiAgSSAtIEkgPSBOXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbWludXMgdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAubWludXMgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgaSwgaiwgdCwgeExUeSxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICBhID0geC5zO1xyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoeSwgYik7XHJcbiAgICAgIGIgPSB5LnM7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOP1xyXG4gICAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICAgIGlmIChhICE9IGIpIHtcclxuICAgICAgICB5LnMgPSAtYjtcclxuICAgICAgICByZXR1cm4geC5wbHVzKHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgeGUgPSB4LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB5ZSA9IHkuZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHljID0geS5jO1xyXG5cclxuICAgICAgaWYgKCF4ZSB8fCAheWUpIHtcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIEluZmluaXR5P1xyXG4gICAgICAgIGlmICgheGMgfHwgIXljKSByZXR1cm4geGMgPyAoeS5zID0gLWIsIHkpIDogbmV3IEJpZ051bWJlcih5YyA/IHggOiBOYU4pO1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgemVybz9cclxuICAgICAgICBpZiAoIXhjWzBdIHx8ICF5Y1swXSkge1xyXG5cclxuICAgICAgICAgIC8vIFJldHVybiB5IGlmIHkgaXMgbm9uLXplcm8sIHggaWYgeCBpcyBub24temVybywgb3IgemVybyBpZiBib3RoIGFyZSB6ZXJvLlxyXG4gICAgICAgICAgcmV0dXJuIHljWzBdID8gKHkucyA9IC1iLCB5KSA6IG5ldyBCaWdOdW1iZXIoeGNbMF0gPyB4IDpcclxuXHJcbiAgICAgICAgICAgLy8gSUVFRSA3NTQgKDIwMDgpIDYuMzogbiAtIG4gPSAtMCB3aGVuIHJvdW5kaW5nIHRvIC1JbmZpbml0eVxyXG4gICAgICAgICAgIFJPVU5ESU5HX01PREUgPT0gMyA/IC0wIDogMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB4ZSA9IGJpdEZsb29yKHhlKTtcclxuICAgICAgeWUgPSBiaXRGbG9vcih5ZSk7XHJcbiAgICAgIHhjID0geGMuc2xpY2UoKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSB3aGljaCBpcyB0aGUgYmlnZ2VyIG51bWJlci5cclxuICAgICAgaWYgKGEgPSB4ZSAtIHllKSB7XHJcblxyXG4gICAgICAgIGlmICh4TFR5ID0gYSA8IDApIHtcclxuICAgICAgICAgIGEgPSAtYTtcclxuICAgICAgICAgIHQgPSB4YztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeWUgPSB4ZTtcclxuICAgICAgICAgIHQgPSB5YztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG5cclxuICAgICAgICAvLyBQcmVwZW5kIHplcm9zIHRvIGVxdWFsaXNlIGV4cG9uZW50cy5cclxuICAgICAgICBmb3IgKGIgPSBhOyBiLS07IHQucHVzaCgwKSk7XHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIC8vIEV4cG9uZW50cyBlcXVhbC4gQ2hlY2sgZGlnaXQgYnkgZGlnaXQuXHJcbiAgICAgICAgaiA9ICh4TFR5ID0gKGEgPSB4Yy5sZW5ndGgpIDwgKGIgPSB5Yy5sZW5ndGgpKSA/IGEgOiBiO1xyXG5cclxuICAgICAgICBmb3IgKGEgPSBiID0gMDsgYiA8IGo7IGIrKykge1xyXG5cclxuICAgICAgICAgIGlmICh4Y1tiXSAhPSB5Y1tiXSkge1xyXG4gICAgICAgICAgICB4TFR5ID0geGNbYl0gPCB5Y1tiXTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB4IDwgeT8gUG9pbnQgeGMgdG8gdGhlIGFycmF5IG9mIHRoZSBiaWdnZXIgbnVtYmVyLlxyXG4gICAgICBpZiAoeExUeSkgdCA9IHhjLCB4YyA9IHljLCB5YyA9IHQsIHkucyA9IC15LnM7XHJcblxyXG4gICAgICBiID0gKGogPSB5Yy5sZW5ndGgpIC0gKGkgPSB4Yy5sZW5ndGgpO1xyXG5cclxuICAgICAgLy8gQXBwZW5kIHplcm9zIHRvIHhjIGlmIHNob3J0ZXIuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gYWRkIHplcm9zIHRvIHljIGlmIHNob3J0ZXIgYXMgc3VidHJhY3Qgb25seSBuZWVkcyB0byBzdGFydCBhdCB5Yy5sZW5ndGguXHJcbiAgICAgIGlmIChiID4gMCkgZm9yICg7IGItLTsgeGNbaSsrXSA9IDApO1xyXG4gICAgICBiID0gQkFTRSAtIDE7XHJcblxyXG4gICAgICAvLyBTdWJ0cmFjdCB5YyBmcm9tIHhjLlxyXG4gICAgICBmb3IgKDsgaiA+IGE7KSB7XHJcblxyXG4gICAgICAgIGlmICh4Y1stLWpdIDwgeWNbal0pIHtcclxuICAgICAgICAgIGZvciAoaSA9IGo7IGkgJiYgIXhjWy0taV07IHhjW2ldID0gYik7XHJcbiAgICAgICAgICAtLXhjW2ldO1xyXG4gICAgICAgICAgeGNbal0gKz0gQkFTRTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHhjW2pdIC09IHljW2pdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSZW1vdmUgbGVhZGluZyB6ZXJvcyBhbmQgYWRqdXN0IGV4cG9uZW50IGFjY29yZGluZ2x5LlxyXG4gICAgICBmb3IgKDsgeGNbMF0gPT0gMDsgeGMuc3BsaWNlKDAsIDEpLCAtLXllKTtcclxuXHJcbiAgICAgIC8vIFplcm8/XHJcbiAgICAgIGlmICgheGNbMF0pIHtcclxuXHJcbiAgICAgICAgLy8gRm9sbG93aW5nIElFRUUgNzU0ICgyMDA4KSA2LjMsXHJcbiAgICAgICAgLy8gbiAtIG4gPSArMCAgYnV0ICBuIC0gbiA9IC0wICB3aGVuIHJvdW5kaW5nIHRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICAgIHkucyA9IFJPVU5ESU5HX01PREUgPT0gMyA/IC0xIDogMTtcclxuICAgICAgICB5LmMgPSBbeS5lID0gMF07XHJcbiAgICAgICAgcmV0dXJuIHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgZm9yIEluZmluaXR5IGFzICt4IC0gK3kgIT0gSW5maW5pdHkgJiYgLXggLSAteSAhPSBJbmZpbml0eVxyXG4gICAgICAvLyBmb3IgZmluaXRlIHggYW5kIHkuXHJcbiAgICAgIHJldHVybiBub3JtYWxpc2UoeSwgeGMsIHllKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgIG4gJSAwID0gIE5cclxuICAgICAqICAgbiAlIE4gPSAgTlxyXG4gICAgICogICBuICUgSSA9ICBuXHJcbiAgICAgKiAgIDAgJSBuID0gIDBcclxuICAgICAqICAtMCAlIG4gPSAtMFxyXG4gICAgICogICAwICUgMCA9ICBOXHJcbiAgICAgKiAgIDAgJSBOID0gIE5cclxuICAgICAqICAgMCAlIEkgPSAgMFxyXG4gICAgICogICBOICUgbiA9ICBOXHJcbiAgICAgKiAgIE4gJSAwID0gIE5cclxuICAgICAqICAgTiAlIE4gPSAgTlxyXG4gICAgICogICBOICUgSSA9ICBOXHJcbiAgICAgKiAgIEkgJSBuID0gIE5cclxuICAgICAqICAgSSAlIDAgPSAgTlxyXG4gICAgICogICBJICUgTiA9ICBOXHJcbiAgICAgKiAgIEkgJSBJID0gIE5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBtb2R1bG8gdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYikuIFRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgTU9EVUxPX01PREUuXHJcbiAgICAgKi9cclxuICAgIFAubW9kdWxvID0gUC5tb2QgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgcSwgcyxcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIE5hTiBpZiB4IGlzIEluZmluaXR5IG9yIE5hTiwgb3IgeSBpcyBOYU4gb3IgemVyby5cclxuICAgICAgaWYgKCF4LmMgfHwgIXkucyB8fCB5LmMgJiYgIXkuY1swXSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIEluZmluaXR5IG9yIHggaXMgemVyby5cclxuICAgICAgfSBlbHNlIGlmICgheS5jIHx8IHguYyAmJiAheC5jWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChNT0RVTE9fTU9ERSA9PSA5KSB7XHJcblxyXG4gICAgICAgIC8vIEV1Y2xpZGlhbiBkaXZpc2lvbjogcSA9IHNpZ24oeSkgKiBmbG9vcih4IC8gYWJzKHkpKVxyXG4gICAgICAgIC8vIHIgPSB4IC0gcXkgICAgd2hlcmUgIDAgPD0gciA8IGFicyh5KVxyXG4gICAgICAgIHMgPSB5LnM7XHJcbiAgICAgICAgeS5zID0gMTtcclxuICAgICAgICBxID0gZGl2KHgsIHksIDAsIDMpO1xyXG4gICAgICAgIHkucyA9IHM7XHJcbiAgICAgICAgcS5zICo9IHM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcSA9IGRpdih4LCB5LCAwLCBNT0RVTE9fTU9ERSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHkgPSB4Lm1pbnVzKHEudGltZXMoeSkpO1xyXG5cclxuICAgICAgLy8gVG8gbWF0Y2ggSmF2YVNjcmlwdCAlLCBlbnN1cmUgc2lnbiBvZiB6ZXJvIGlzIHNpZ24gb2YgZGl2aWRlbmQuXHJcbiAgICAgIGlmICgheS5jWzBdICYmIE1PRFVMT19NT0RFID09IDEpIHkucyA9IHgucztcclxuXHJcbiAgICAgIHJldHVybiB5O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuICogMCA9IDBcclxuICAgICAqICBuICogTiA9IE5cclxuICAgICAqICBuICogSSA9IElcclxuICAgICAqICAwICogbiA9IDBcclxuICAgICAqICAwICogMCA9IDBcclxuICAgICAqICAwICogTiA9IE5cclxuICAgICAqICAwICogSSA9IE5cclxuICAgICAqICBOICogbiA9IE5cclxuICAgICAqICBOICogMCA9IE5cclxuICAgICAqICBOICogTiA9IE5cclxuICAgICAqICBOICogSSA9IE5cclxuICAgICAqICBJICogbiA9IElcclxuICAgICAqICBJICogMCA9IE5cclxuICAgICAqICBJICogTiA9IE5cclxuICAgICAqICBJICogSSA9IElcclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBtdWx0aXBsaWVkIGJ5IHRoZSB2YWx1ZVxyXG4gICAgICogb2YgQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLm11bHRpcGxpZWRCeSA9IFAudGltZXMgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgYywgZSwgaSwgaiwgaywgbSwgeGNMLCB4bG8sIHhoaSwgeWNMLCB5bG8sIHloaSwgemMsXHJcbiAgICAgICAgYmFzZSwgc3FydEJhc2UsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgeWMgPSAoeSA9IG5ldyBCaWdOdW1iZXIoeSwgYikpLmM7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOLCDCsUluZmluaXR5IG9yIMKxMD9cclxuICAgICAgaWYgKCF4YyB8fCAheWMgfHwgIXhjWzBdIHx8ICF5Y1swXSkge1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBpcyBOYU4sIG9yIG9uZSBpcyAwIGFuZCB0aGUgb3RoZXIgaXMgSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKCF4LnMgfHwgIXkucyB8fCB4YyAmJiAheGNbMF0gJiYgIXljIHx8IHljICYmICF5Y1swXSAmJiAheGMpIHtcclxuICAgICAgICAgIHkuYyA9IHkuZSA9IHkucyA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHkucyAqPSB4LnM7XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIMKxSW5maW5pdHkgaWYgZWl0aGVyIGlzIMKxSW5maW5pdHkuXHJcbiAgICAgICAgICBpZiAoIXhjIHx8ICF5Yykge1xyXG4gICAgICAgICAgICB5LmMgPSB5LmUgPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8vIFJldHVybiDCsTAgaWYgZWl0aGVyIGlzIMKxMC5cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHkuYyA9IFswXTtcclxuICAgICAgICAgICAgeS5lID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBlID0gYml0Rmxvb3IoeC5lIC8gTE9HX0JBU0UpICsgYml0Rmxvb3IoeS5lIC8gTE9HX0JBU0UpO1xyXG4gICAgICB5LnMgKj0geC5zO1xyXG4gICAgICB4Y0wgPSB4Yy5sZW5ndGg7XHJcbiAgICAgIHljTCA9IHljLmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIEVuc3VyZSB4YyBwb2ludHMgdG8gbG9uZ2VyIGFycmF5IGFuZCB4Y0wgdG8gaXRzIGxlbmd0aC5cclxuICAgICAgaWYgKHhjTCA8IHljTCkgemMgPSB4YywgeGMgPSB5YywgeWMgPSB6YywgaSA9IHhjTCwgeGNMID0geWNMLCB5Y0wgPSBpO1xyXG5cclxuICAgICAgLy8gSW5pdGlhbGlzZSB0aGUgcmVzdWx0IGFycmF5IHdpdGggemVyb3MuXHJcbiAgICAgIGZvciAoaSA9IHhjTCArIHljTCwgemMgPSBbXTsgaS0tOyB6Yy5wdXNoKDApKTtcclxuXHJcbiAgICAgIGJhc2UgPSBCQVNFO1xyXG4gICAgICBzcXJ0QmFzZSA9IFNRUlRfQkFTRTtcclxuXHJcbiAgICAgIGZvciAoaSA9IHljTDsgLS1pID49IDA7KSB7XHJcbiAgICAgICAgYyA9IDA7XHJcbiAgICAgICAgeWxvID0geWNbaV0gJSBzcXJ0QmFzZTtcclxuICAgICAgICB5aGkgPSB5Y1tpXSAvIHNxcnRCYXNlIHwgMDtcclxuXHJcbiAgICAgICAgZm9yIChrID0geGNMLCBqID0gaSArIGs7IGogPiBpOykge1xyXG4gICAgICAgICAgeGxvID0geGNbLS1rXSAlIHNxcnRCYXNlO1xyXG4gICAgICAgICAgeGhpID0geGNba10gLyBzcXJ0QmFzZSB8IDA7XHJcbiAgICAgICAgICBtID0geWhpICogeGxvICsgeGhpICogeWxvO1xyXG4gICAgICAgICAgeGxvID0geWxvICogeGxvICsgKChtICUgc3FydEJhc2UpICogc3FydEJhc2UpICsgemNbal0gKyBjO1xyXG4gICAgICAgICAgYyA9ICh4bG8gLyBiYXNlIHwgMCkgKyAobSAvIHNxcnRCYXNlIHwgMCkgKyB5aGkgKiB4aGk7XHJcbiAgICAgICAgICB6Y1tqLS1dID0geGxvICUgYmFzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHpjW2pdID0gYztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGMpIHtcclxuICAgICAgICArK2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgemMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbm9ybWFsaXNlKHksIHpjLCBlKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBuZWdhdGVkLFxyXG4gICAgICogaS5lLiBtdWx0aXBsaWVkIGJ5IC0xLlxyXG4gICAgICovXHJcbiAgICBQLm5lZ2F0ZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciB4ID0gbmV3IEJpZ051bWJlcih0aGlzKTtcclxuICAgICAgeC5zID0gLXgucyB8fCBudWxsO1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiArIDAgPSBuXHJcbiAgICAgKiAgbiArIE4gPSBOXHJcbiAgICAgKiAgbiArIEkgPSBJXHJcbiAgICAgKiAgMCArIG4gPSBuXHJcbiAgICAgKiAgMCArIDAgPSAwXHJcbiAgICAgKiAgMCArIE4gPSBOXHJcbiAgICAgKiAgMCArIEkgPSBJXHJcbiAgICAgKiAgTiArIG4gPSBOXHJcbiAgICAgKiAgTiArIDAgPSBOXHJcbiAgICAgKiAgTiArIE4gPSBOXHJcbiAgICAgKiAgTiArIEkgPSBOXHJcbiAgICAgKiAgSSArIG4gPSBJXHJcbiAgICAgKiAgSSArIDAgPSBJXHJcbiAgICAgKiAgSSArIE4gPSBOXHJcbiAgICAgKiAgSSArIEkgPSBJXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgcGx1cyB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKS5cclxuICAgICAqL1xyXG4gICAgUC5wbHVzID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgdmFyIHQsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgYSA9IHgucztcclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpO1xyXG4gICAgICBiID0geS5zO1xyXG5cclxuICAgICAgLy8gRWl0aGVyIE5hTj9cclxuICAgICAgaWYgKCFhIHx8ICFiKSByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgLy8gU2lnbnMgZGlmZmVyP1xyXG4gICAgICAgaWYgKGEgIT0gYikge1xyXG4gICAgICAgIHkucyA9IC1iO1xyXG4gICAgICAgIHJldHVybiB4Lm1pbnVzKHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgeGUgPSB4LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB5ZSA9IHkuZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHljID0geS5jO1xyXG5cclxuICAgICAgaWYgKCF4ZSB8fCAheWUpIHtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIMKxSW5maW5pdHkgaWYgZWl0aGVyIMKxSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKCF4YyB8fCAheWMpIHJldHVybiBuZXcgQmlnTnVtYmVyKGEgLyAwKTtcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIHplcm8/XHJcbiAgICAgICAgLy8gUmV0dXJuIHkgaWYgeSBpcyBub24temVybywgeCBpZiB4IGlzIG5vbi16ZXJvLCBvciB6ZXJvIGlmIGJvdGggYXJlIHplcm8uXHJcbiAgICAgICAgaWYgKCF4Y1swXSB8fCAheWNbMF0pIHJldHVybiB5Y1swXSA/IHkgOiBuZXcgQmlnTnVtYmVyKHhjWzBdID8geCA6IGEgKiAwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgeGUgPSBiaXRGbG9vcih4ZSk7XHJcbiAgICAgIHllID0gYml0Rmxvb3IoeWUpO1xyXG4gICAgICB4YyA9IHhjLnNsaWNlKCk7XHJcblxyXG4gICAgICAvLyBQcmVwZW5kIHplcm9zIHRvIGVxdWFsaXNlIGV4cG9uZW50cy4gRmFzdGVyIHRvIHVzZSByZXZlcnNlIHRoZW4gZG8gdW5zaGlmdHMuXHJcbiAgICAgIGlmIChhID0geGUgLSB5ZSkge1xyXG4gICAgICAgIGlmIChhID4gMCkge1xyXG4gICAgICAgICAgeWUgPSB4ZTtcclxuICAgICAgICAgIHQgPSB5YztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYSA9IC1hO1xyXG4gICAgICAgICAgdCA9IHhjO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcbiAgICAgICAgZm9yICg7IGEtLTsgdC5wdXNoKDApKTtcclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgYSA9IHhjLmxlbmd0aDtcclxuICAgICAgYiA9IHljLmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIFBvaW50IHhjIHRvIHRoZSBsb25nZXIgYXJyYXksIGFuZCBiIHRvIHRoZSBzaG9ydGVyIGxlbmd0aC5cclxuICAgICAgaWYgKGEgLSBiIDwgMCkgdCA9IHljLCB5YyA9IHhjLCB4YyA9IHQsIGIgPSBhO1xyXG5cclxuICAgICAgLy8gT25seSBzdGFydCBhZGRpbmcgYXQgeWMubGVuZ3RoIC0gMSBhcyB0aGUgZnVydGhlciBkaWdpdHMgb2YgeGMgY2FuIGJlIGlnbm9yZWQuXHJcbiAgICAgIGZvciAoYSA9IDA7IGI7KSB7XHJcbiAgICAgICAgYSA9ICh4Y1stLWJdID0geGNbYl0gKyB5Y1tiXSArIGEpIC8gQkFTRSB8IDA7XHJcbiAgICAgICAgeGNbYl0gPSBCQVNFID09PSB4Y1tiXSA/IDAgOiB4Y1tiXSAlIEJBU0U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgeGMgPSBbYV0uY29uY2F0KHhjKTtcclxuICAgICAgICArK3llO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGZvciB6ZXJvLCBhcyAreCArICt5ICE9IDAgJiYgLXggKyAteSAhPSAwXHJcbiAgICAgIC8vIHllID0gTUFYX0VYUCArIDEgcG9zc2libGVcclxuICAgICAgcmV0dXJuIG5vcm1hbGlzZSh5LCB4YywgeWUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIElmIHNkIGlzIHVuZGVmaW5lZCBvciBudWxsIG9yIHRydWUgb3IgZmFsc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZlxyXG4gICAgICogdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLCBvciBudWxsIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyDCsUluZmluaXR5IG9yIE5hTi5cclxuICAgICAqIElmIHNkIGlzIHRydWUgaW5jbHVkZSBpbnRlZ2VyLXBhcnQgdHJhaWxpbmcgemVyb3MgaW4gdGhlIGNvdW50LlxyXG4gICAgICpcclxuICAgICAqIE90aGVyd2lzZSwgaWYgc2QgaXMgYSBudW1iZXIsIHJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXNcclxuICAgICAqIEJpZ051bWJlciByb3VuZGVkIHRvIGEgbWF4aW11bSBvZiBzZCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3JcclxuICAgICAqIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBzZCB7bnVtYmVyfGJvb2xlYW59IG51bWJlcjogc2lnbmlmaWNhbnQgZGlnaXRzOiBpbnRlZ2VyLCAxIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW46IHdoZXRoZXIgdG8gY291bnQgaW50ZWdlci1wYXJ0IHRyYWlsaW5nIHplcm9zOiB0cnVlIG9yIGZhbHNlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7c2R8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnByZWNpc2lvbiA9IFAuc2QgPSBmdW5jdGlvbiAoc2QsIHJtKSB7XHJcbiAgICAgIHZhciBjLCBuLCB2LFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgaWYgKHNkICE9IG51bGwgJiYgc2QgIT09ICEhc2QpIHtcclxuICAgICAgICBpbnRDaGVjayhzZCwgMSwgTUFYKTtcclxuICAgICAgICBpZiAocm0gPT0gbnVsbCkgcm0gPSBST1VORElOR19NT0RFO1xyXG4gICAgICAgIGVsc2UgaW50Q2hlY2socm0sIDAsIDgpO1xyXG5cclxuICAgICAgICByZXR1cm4gcm91bmQobmV3IEJpZ051bWJlcih4KSwgc2QsIHJtKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEoYyA9IHguYykpIHJldHVybiBudWxsO1xyXG4gICAgICB2ID0gYy5sZW5ndGggLSAxO1xyXG4gICAgICBuID0gdiAqIExPR19CQVNFICsgMTtcclxuXHJcbiAgICAgIGlmICh2ID0gY1t2XSkge1xyXG5cclxuICAgICAgICAvLyBTdWJ0cmFjdCB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9zIG9mIHRoZSBsYXN0IGVsZW1lbnQuXHJcbiAgICAgICAgZm9yICg7IHYgJSAxMCA9PSAwOyB2IC89IDEwLCBuLS0pO1xyXG5cclxuICAgICAgICAvLyBBZGQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgdGhlIGZpcnN0IGVsZW1lbnQuXHJcbiAgICAgICAgZm9yICh2ID0gY1swXTsgdiA+PSAxMDsgdiAvPSAxMCwgbisrKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHNkICYmIHguZSArIDEgPiBuKSBuID0geC5lICsgMTtcclxuXHJcbiAgICAgIHJldHVybiBuO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIHNoaWZ0ZWQgYnkgayBwbGFjZXNcclxuICAgICAqIChwb3dlcnMgb2YgMTApLiBTaGlmdCB0byB0aGUgcmlnaHQgaWYgbiA+IDAsIGFuZCB0byB0aGUgbGVmdCBpZiBuIDwgMC5cclxuICAgICAqXHJcbiAgICAgKiBrIHtudW1iZXJ9IEludGVnZXIsIC1NQVhfU0FGRV9JTlRFR0VSIHRvIE1BWF9TQUZFX0lOVEVHRVIgaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7a30nXHJcbiAgICAgKi9cclxuICAgIFAuc2hpZnRlZEJ5ID0gZnVuY3Rpb24gKGspIHtcclxuICAgICAgaW50Q2hlY2soaywgLU1BWF9TQUZFX0lOVEVHRVIsIE1BWF9TQUZFX0lOVEVHRVIpO1xyXG4gICAgICByZXR1cm4gdGhpcy50aW1lcygnMWUnICsgayk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIHNxcnQoLW4pID0gIE5cclxuICAgICAqICBzcXJ0KE4pID0gIE5cclxuICAgICAqICBzcXJ0KC1JKSA9ICBOXHJcbiAgICAgKiAgc3FydChJKSA9ICBJXHJcbiAgICAgKiAgc3FydCgwKSA9ICAwXHJcbiAgICAgKiAgc3FydCgtMCkgPSAtMFxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHNxdWFyZSByb290IG9mIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlcixcclxuICAgICAqIHJvdW5kZWQgYWNjb3JkaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFuZCBST1VORElOR19NT0RFLlxyXG4gICAgICovXHJcbiAgICBQLnNxdWFyZVJvb3QgPSBQLnNxcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBtLCBuLCByLCByZXAsIHQsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgYyA9IHguYyxcclxuICAgICAgICBzID0geC5zLFxyXG4gICAgICAgIGUgPSB4LmUsXHJcbiAgICAgICAgZHAgPSBERUNJTUFMX1BMQUNFUyArIDQsXHJcbiAgICAgICAgaGFsZiA9IG5ldyBCaWdOdW1iZXIoJzAuNScpO1xyXG5cclxuICAgICAgLy8gTmVnYXRpdmUvTmFOL0luZmluaXR5L3plcm8/XHJcbiAgICAgIGlmIChzICE9PSAxIHx8ICFjIHx8ICFjWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoIXMgfHwgcyA8IDAgJiYgKCFjIHx8IGNbMF0pID8gTmFOIDogYyA/IHggOiAxIC8gMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEluaXRpYWwgZXN0aW1hdGUuXHJcbiAgICAgIHMgPSBNYXRoLnNxcnQoK3ZhbHVlT2YoeCkpO1xyXG5cclxuICAgICAgLy8gTWF0aC5zcXJ0IHVuZGVyZmxvdy9vdmVyZmxvdz9cclxuICAgICAgLy8gUGFzcyB4IHRvIE1hdGguc3FydCBhcyBpbnRlZ2VyLCB0aGVuIGFkanVzdCB0aGUgZXhwb25lbnQgb2YgdGhlIHJlc3VsdC5cclxuICAgICAgaWYgKHMgPT0gMCB8fCBzID09IDEgLyAwKSB7XHJcbiAgICAgICAgbiA9IGNvZWZmVG9TdHJpbmcoYyk7XHJcbiAgICAgICAgaWYgKChuLmxlbmd0aCArIGUpICUgMiA9PSAwKSBuICs9ICcwJztcclxuICAgICAgICBzID0gTWF0aC5zcXJ0KCtuKTtcclxuICAgICAgICBlID0gYml0Rmxvb3IoKGUgKyAxKSAvIDIpIC0gKGUgPCAwIHx8IGUgJSAyKTtcclxuXHJcbiAgICAgICAgaWYgKHMgPT0gMSAvIDApIHtcclxuICAgICAgICAgIG4gPSAnNWUnICsgZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbiA9IHMudG9FeHBvbmVudGlhbCgpO1xyXG4gICAgICAgICAgbiA9IG4uc2xpY2UoMCwgbi5pbmRleE9mKCdlJykgKyAxKSArIGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByID0gbmV3IEJpZ051bWJlcihuKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByID0gbmV3IEJpZ051bWJlcihzICsgJycpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDaGVjayBmb3IgemVyby5cclxuICAgICAgLy8gciBjb3VsZCBiZSB6ZXJvIGlmIE1JTl9FWFAgaXMgY2hhbmdlZCBhZnRlciB0aGUgdGhpcyB2YWx1ZSB3YXMgY3JlYXRlZC5cclxuICAgICAgLy8gVGhpcyB3b3VsZCBjYXVzZSBhIGRpdmlzaW9uIGJ5IHplcm8gKHgvdCkgYW5kIGhlbmNlIEluZmluaXR5IGJlbG93LCB3aGljaCB3b3VsZCBjYXVzZVxyXG4gICAgICAvLyBjb2VmZlRvU3RyaW5nIHRvIHRocm93LlxyXG4gICAgICBpZiAoci5jWzBdKSB7XHJcbiAgICAgICAgZSA9IHIuZTtcclxuICAgICAgICBzID0gZSArIGRwO1xyXG4gICAgICAgIGlmIChzIDwgMykgcyA9IDA7XHJcblxyXG4gICAgICAgIC8vIE5ld3Rvbi1SYXBoc29uIGl0ZXJhdGlvbi5cclxuICAgICAgICBmb3IgKDsgOykge1xyXG4gICAgICAgICAgdCA9IHI7XHJcbiAgICAgICAgICByID0gaGFsZi50aW1lcyh0LnBsdXMoZGl2KHgsIHQsIGRwLCAxKSkpO1xyXG5cclxuICAgICAgICAgIGlmIChjb2VmZlRvU3RyaW5nKHQuYykuc2xpY2UoMCwgcykgPT09IChuID0gY29lZmZUb1N0cmluZyhyLmMpKS5zbGljZSgwLCBzKSkge1xyXG5cclxuICAgICAgICAgICAgLy8gVGhlIGV4cG9uZW50IG9mIHIgbWF5IGhlcmUgYmUgb25lIGxlc3MgdGhhbiB0aGUgZmluYWwgcmVzdWx0IGV4cG9uZW50LFxyXG4gICAgICAgICAgICAvLyBlLmcgMC4wMDA5OTk5IChlLTQpIC0tPiAwLjAwMSAoZS0zKSwgc28gYWRqdXN0IHMgc28gdGhlIHJvdW5kaW5nIGRpZ2l0c1xyXG4gICAgICAgICAgICAvLyBhcmUgaW5kZXhlZCBjb3JyZWN0bHkuXHJcbiAgICAgICAgICAgIGlmIChyLmUgPCBlKSAtLXM7XHJcbiAgICAgICAgICAgIG4gPSBuLnNsaWNlKHMgLSAzLCBzICsgMSk7XHJcblxyXG4gICAgICAgICAgICAvLyBUaGUgNHRoIHJvdW5kaW5nIGRpZ2l0IG1heSBiZSBpbiBlcnJvciBieSAtMSBzbyBpZiB0aGUgNCByb3VuZGluZyBkaWdpdHNcclxuICAgICAgICAgICAgLy8gYXJlIDk5OTkgb3IgNDk5OSAoaS5lLiBhcHByb2FjaGluZyBhIHJvdW5kaW5nIGJvdW5kYXJ5KSBjb250aW51ZSB0aGVcclxuICAgICAgICAgICAgLy8gaXRlcmF0aW9uLlxyXG4gICAgICAgICAgICBpZiAobiA9PSAnOTk5OScgfHwgIXJlcCAmJiBuID09ICc0OTk5Jykge1xyXG5cclxuICAgICAgICAgICAgICAvLyBPbiB0aGUgZmlyc3QgaXRlcmF0aW9uIG9ubHksIGNoZWNrIHRvIHNlZSBpZiByb3VuZGluZyB1cCBnaXZlcyB0aGVcclxuICAgICAgICAgICAgICAvLyBleGFjdCByZXN1bHQgYXMgdGhlIG5pbmVzIG1heSBpbmZpbml0ZWx5IHJlcGVhdC5cclxuICAgICAgICAgICAgICBpZiAoIXJlcCkge1xyXG4gICAgICAgICAgICAgICAgcm91bmQodCwgdC5lICsgREVDSU1BTF9QTEFDRVMgKyAyLCAwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodC50aW1lcyh0KS5lcSh4KSkge1xyXG4gICAgICAgICAgICAgICAgICByID0gdDtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBkcCArPSA0O1xyXG4gICAgICAgICAgICAgIHMgKz0gNDtcclxuICAgICAgICAgICAgICByZXAgPSAxO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAvLyBJZiByb3VuZGluZyBkaWdpdHMgYXJlIG51bGwsIDB7MCw0fSBvciA1MHswLDN9LCBjaGVjayBmb3IgZXhhY3RcclxuICAgICAgICAgICAgICAvLyByZXN1bHQuIElmIG5vdCwgdGhlbiB0aGVyZSBhcmUgZnVydGhlciBkaWdpdHMgYW5kIG0gd2lsbCBiZSB0cnV0aHkuXHJcbiAgICAgICAgICAgICAgaWYgKCErbiB8fCAhK24uc2xpY2UoMSkgJiYgbi5jaGFyQXQoMCkgPT0gJzUnKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIGZpcnN0IHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgICAgICAgICAgcm91bmQociwgci5lICsgREVDSU1BTF9QTEFDRVMgKyAyLCAxKTtcclxuICAgICAgICAgICAgICAgIG0gPSAhci50aW1lcyhyKS5lcSh4KTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gcm91bmQociwgci5lICsgREVDSU1BTF9QTEFDRVMgKyAxLCBST1VORElOR19NT0RFLCBtKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBleHBvbmVudGlhbCBub3RhdGlvbiBhbmRcclxuICAgICAqIHJvdW5kZWQgdXNpbmcgUk9VTkRJTkdfTU9ERSB0byBkcCBmaXhlZCBkZWNpbWFsIHBsYWNlcy5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAudG9FeHBvbmVudGlhbCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgICAgaWYgKGRwICE9IG51bGwpIHtcclxuICAgICAgICBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuICAgICAgICBkcCsrO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcywgZHAsIHJtLCAxKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBmaXhlZC1wb2ludCBub3RhdGlvbiByb3VuZGluZ1xyXG4gICAgICogdG8gZHAgZml4ZWQgZGVjaW1hbCBwbGFjZXMgdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3IgUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIE5vdGU6IGFzIHdpdGggSmF2YVNjcmlwdCdzIG51bWJlciB0eXBlLCAoLTApLnRvRml4ZWQoMCkgaXMgJzAnLFxyXG4gICAgICogYnV0IGUuZy4gKC0wLjAwMDAxKS50b0ZpeGVkKDApIGlzICctMCcuXHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnRvRml4ZWQgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICAgIGlmIChkcCAhPSBudWxsKSB7XHJcbiAgICAgICAgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcbiAgICAgICAgZHAgPSBkcCArIHRoaXMuZSArIDE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLCBkcCwgcm0pO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uIHJvdW5kZWRcclxuICAgICAqIHVzaW5nIHJtIG9yIFJPVU5ESU5HX01PREUgdG8gZHAgZGVjaW1hbCBwbGFjZXMsIGFuZCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBwcm9wZXJ0aWVzXHJcbiAgICAgKiBvZiB0aGUgZm9ybWF0IG9yIEZPUk1BVCBvYmplY3QgKHNlZSBCaWdOdW1iZXIuc2V0KS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgZm9ybWF0dGluZyBvYmplY3QgbWF5IGNvbnRhaW4gc29tZSBvciBhbGwgb2YgdGhlIHByb3BlcnRpZXMgc2hvd24gYmVsb3cuXHJcbiAgICAgKlxyXG4gICAgICogRk9STUFUID0ge1xyXG4gICAgICogICBwcmVmaXg6ICcnLFxyXG4gICAgICogICBncm91cFNpemU6IDMsXHJcbiAgICAgKiAgIHNlY29uZGFyeUdyb3VwU2l6ZTogMCxcclxuICAgICAqICAgZ3JvdXBTZXBhcmF0b3I6ICcsJyxcclxuICAgICAqICAgZGVjaW1hbFNlcGFyYXRvcjogJy4nLFxyXG4gICAgICogICBmcmFjdGlvbkdyb3VwU2l6ZTogMCxcclxuICAgICAqICAgZnJhY3Rpb25Hcm91cFNlcGFyYXRvcjogJ1xceEEwJywgICAgICAvLyBub24tYnJlYWtpbmcgc3BhY2VcclxuICAgICAqICAgc3VmZml4OiAnJ1xyXG4gICAgICogfTtcclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbZm9ybWF0XSB7b2JqZWN0fSBGb3JtYXR0aW5nIG9wdGlvbnMuIFNlZSBGT1JNQVQgcGJqZWN0IGFib3ZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IG5vdCBhbiBvYmplY3Q6IHtmb3JtYXR9J1xyXG4gICAgICovXHJcbiAgICBQLnRvRm9ybWF0ID0gZnVuY3Rpb24gKGRwLCBybSwgZm9ybWF0KSB7XHJcbiAgICAgIHZhciBzdHIsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBpZiAoZm9ybWF0ID09IG51bGwpIHtcclxuICAgICAgICBpZiAoZHAgIT0gbnVsbCAmJiBybSAmJiB0eXBlb2Ygcm0gPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IHJtO1xyXG4gICAgICAgICAgcm0gPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZHAgJiYgdHlwZW9mIGRwID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBkcDtcclxuICAgICAgICAgIGRwID0gcm0gPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBGT1JNQVQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmb3JtYXQgIT0gJ29iamVjdCcpIHtcclxuICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ0FyZ3VtZW50IG5vdCBhbiBvYmplY3Q6ICcgKyBmb3JtYXQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzdHIgPSB4LnRvRml4ZWQoZHAsIHJtKTtcclxuXHJcbiAgICAgIGlmICh4LmMpIHtcclxuICAgICAgICB2YXIgaSxcclxuICAgICAgICAgIGFyciA9IHN0ci5zcGxpdCgnLicpLFxyXG4gICAgICAgICAgZzEgPSArZm9ybWF0Lmdyb3VwU2l6ZSxcclxuICAgICAgICAgIGcyID0gK2Zvcm1hdC5zZWNvbmRhcnlHcm91cFNpemUsXHJcbiAgICAgICAgICBncm91cFNlcGFyYXRvciA9IGZvcm1hdC5ncm91cFNlcGFyYXRvciB8fCAnJyxcclxuICAgICAgICAgIGludFBhcnQgPSBhcnJbMF0sXHJcbiAgICAgICAgICBmcmFjdGlvblBhcnQgPSBhcnJbMV0sXHJcbiAgICAgICAgICBpc05lZyA9IHgucyA8IDAsXHJcbiAgICAgICAgICBpbnREaWdpdHMgPSBpc05lZyA/IGludFBhcnQuc2xpY2UoMSkgOiBpbnRQYXJ0LFxyXG4gICAgICAgICAgbGVuID0gaW50RGlnaXRzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKGcyKSBpID0gZzEsIGcxID0gZzIsIGcyID0gaSwgbGVuIC09IGk7XHJcblxyXG4gICAgICAgIGlmIChnMSA+IDAgJiYgbGVuID4gMCkge1xyXG4gICAgICAgICAgaSA9IGxlbiAlIGcxIHx8IGcxO1xyXG4gICAgICAgICAgaW50UGFydCA9IGludERpZ2l0cy5zdWJzdHIoMCwgaSk7XHJcbiAgICAgICAgICBmb3IgKDsgaSA8IGxlbjsgaSArPSBnMSkgaW50UGFydCArPSBncm91cFNlcGFyYXRvciArIGludERpZ2l0cy5zdWJzdHIoaSwgZzEpO1xyXG4gICAgICAgICAgaWYgKGcyID4gMCkgaW50UGFydCArPSBncm91cFNlcGFyYXRvciArIGludERpZ2l0cy5zbGljZShpKTtcclxuICAgICAgICAgIGlmIChpc05lZykgaW50UGFydCA9ICctJyArIGludFBhcnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdHIgPSBmcmFjdGlvblBhcnRcclxuICAgICAgICAgPyBpbnRQYXJ0ICsgKGZvcm1hdC5kZWNpbWFsU2VwYXJhdG9yIHx8ICcnKSArICgoZzIgPSArZm9ybWF0LmZyYWN0aW9uR3JvdXBTaXplKVxyXG4gICAgICAgICAgPyBmcmFjdGlvblBhcnQucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxcZHsnICsgZzIgKyAnfVxcXFxCJywgJ2cnKSxcclxuICAgICAgICAgICAnJCYnICsgKGZvcm1hdC5mcmFjdGlvbkdyb3VwU2VwYXJhdG9yIHx8ICcnKSlcclxuICAgICAgICAgIDogZnJhY3Rpb25QYXJ0KVxyXG4gICAgICAgICA6IGludFBhcnQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAoZm9ybWF0LnByZWZpeCB8fCAnJykgKyBzdHIgKyAoZm9ybWF0LnN1ZmZpeCB8fCAnJyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGFuIGFycmF5IG9mIHR3byBCaWdOdW1iZXJzIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgYXMgYSBzaW1wbGVcclxuICAgICAqIGZyYWN0aW9uIHdpdGggYW4gaW50ZWdlciBudW1lcmF0b3IgYW5kIGFuIGludGVnZXIgZGVub21pbmF0b3IuXHJcbiAgICAgKiBUaGUgZGVub21pbmF0b3Igd2lsbCBiZSBhIHBvc2l0aXZlIG5vbi16ZXJvIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc3BlY2lmaWVkXHJcbiAgICAgKiBtYXhpbXVtIGRlbm9taW5hdG9yLiBJZiBhIG1heGltdW0gZGVub21pbmF0b3IgaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlbm9taW5hdG9yIHdpbGwgYmVcclxuICAgICAqIHRoZSBsb3dlc3QgdmFsdWUgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgbnVtYmVyIGV4YWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogW21kXSB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IEludGVnZXIgPj0gMSwgb3IgSW5maW5pdHkuIFRoZSBtYXhpbXVtIGRlbm9taW5hdG9yLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfSA6IHttZH0nXHJcbiAgICAgKi9cclxuICAgIFAudG9GcmFjdGlvbiA9IGZ1bmN0aW9uIChtZCkge1xyXG4gICAgICB2YXIgZCwgZDAsIGQxLCBkMiwgZSwgZXhwLCBuLCBuMCwgbjEsIHEsIHIsIHMsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgeGMgPSB4LmM7XHJcblxyXG4gICAgICBpZiAobWQgIT0gbnVsbCkge1xyXG4gICAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKG1kKTtcclxuXHJcbiAgICAgICAgLy8gVGhyb3cgaWYgbWQgaXMgbGVzcyB0aGFuIG9uZSBvciBpcyBub3QgYW4gaW50ZWdlciwgdW5sZXNzIGl0IGlzIEluZmluaXR5LlxyXG4gICAgICAgIGlmICghbi5pc0ludGVnZXIoKSAmJiAobi5jIHx8IG4ucyAhPT0gMSkgfHwgbi5sdChPTkUpKSB7XHJcbiAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnQXJndW1lbnQgJyArXHJcbiAgICAgICAgICAgICAgKG4uaXNJbnRlZ2VyKCkgPyAnb3V0IG9mIHJhbmdlOiAnIDogJ25vdCBhbiBpbnRlZ2VyOiAnKSArIHZhbHVlT2YobikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF4YykgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XHJcblxyXG4gICAgICBkID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBuMSA9IGQwID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBkMSA9IG4wID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBzID0gY29lZmZUb1N0cmluZyh4Yyk7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgaW5pdGlhbCBkZW5vbWluYXRvci5cclxuICAgICAgLy8gZCBpcyBhIHBvd2VyIG9mIDEwIGFuZCB0aGUgbWluaW11bSBtYXggZGVub21pbmF0b3IgdGhhdCBzcGVjaWZpZXMgdGhlIHZhbHVlIGV4YWN0bHkuXHJcbiAgICAgIGUgPSBkLmUgPSBzLmxlbmd0aCAtIHguZSAtIDE7XHJcbiAgICAgIGQuY1swXSA9IFBPV1NfVEVOWyhleHAgPSBlICUgTE9HX0JBU0UpIDwgMCA/IExPR19CQVNFICsgZXhwIDogZXhwXTtcclxuICAgICAgbWQgPSAhbWQgfHwgbi5jb21wYXJlZFRvKGQpID4gMCA/IChlID4gMCA/IGQgOiBuMSkgOiBuO1xyXG5cclxuICAgICAgZXhwID0gTUFYX0VYUDtcclxuICAgICAgTUFYX0VYUCA9IDEgLyAwO1xyXG4gICAgICBuID0gbmV3IEJpZ051bWJlcihzKTtcclxuXHJcbiAgICAgIC8vIG4wID0gZDEgPSAwXHJcbiAgICAgIG4wLmNbMF0gPSAwO1xyXG5cclxuICAgICAgZm9yICg7IDspICB7XHJcbiAgICAgICAgcSA9IGRpdihuLCBkLCAwLCAxKTtcclxuICAgICAgICBkMiA9IGQwLnBsdXMocS50aW1lcyhkMSkpO1xyXG4gICAgICAgIGlmIChkMi5jb21wYXJlZFRvKG1kKSA9PSAxKSBicmVhaztcclxuICAgICAgICBkMCA9IGQxO1xyXG4gICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgbjEgPSBuMC5wbHVzKHEudGltZXMoZDIgPSBuMSkpO1xyXG4gICAgICAgIG4wID0gZDI7XHJcbiAgICAgICAgZCA9IG4ubWludXMocS50aW1lcyhkMiA9IGQpKTtcclxuICAgICAgICBuID0gZDI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGQyID0gZGl2KG1kLm1pbnVzKGQwKSwgZDEsIDAsIDEpO1xyXG4gICAgICBuMCA9IG4wLnBsdXMoZDIudGltZXMobjEpKTtcclxuICAgICAgZDAgPSBkMC5wbHVzKGQyLnRpbWVzKGQxKSk7XHJcbiAgICAgIG4wLnMgPSBuMS5zID0geC5zO1xyXG4gICAgICBlID0gZSAqIDI7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggZnJhY3Rpb24gaXMgY2xvc2VyIHRvIHgsIG4wL2QwIG9yIG4xL2QxXHJcbiAgICAgIHIgPSBkaXYobjEsIGQxLCBlLCBST1VORElOR19NT0RFKS5taW51cyh4KS5hYnMoKS5jb21wYXJlZFRvKFxyXG4gICAgICAgICAgZGl2KG4wLCBkMCwgZSwgUk9VTkRJTkdfTU9ERSkubWludXMoeCkuYWJzKCkpIDwgMSA/IFtuMSwgZDFdIDogW24wLCBkMF07XHJcblxyXG4gICAgICBNQVhfRVhQID0gZXhwO1xyXG5cclxuICAgICAgcmV0dXJuIHI7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgcHJpbWl0aXZlLlxyXG4gICAgICovXHJcbiAgICBQLnRvTnVtYmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gK3ZhbHVlT2YodGhpcyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgcm91bmRlZCB0byBzZCBzaWduaWZpY2FudCBkaWdpdHNcclxuICAgICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0gb3IgUk9VTkRJTkdfTU9ERS4gSWYgc2QgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgZGlnaXRzXHJcbiAgICAgKiBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBpbnRlZ2VyIHBhcnQgb2YgdGhlIHZhbHVlIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uLCB0aGVuIHVzZVxyXG4gICAgICogZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3NkfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC50b1ByZWNpc2lvbiA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgICAgaWYgKHNkICE9IG51bGwpIGludENoZWNrKHNkLCAxLCBNQVgpO1xyXG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMsIHNkLCBybSwgMik7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gYmFzZSBiLCBvciBiYXNlIDEwIGlmIGIgaXNcclxuICAgICAqIG9taXR0ZWQuIElmIGEgYmFzZSBpcyBzcGVjaWZpZWQsIGluY2x1ZGluZyBiYXNlIDEwLCByb3VuZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kXHJcbiAgICAgKiBST1VORElOR19NT0RFLiBJZiBhIGJhc2UgaXMgbm90IHNwZWNpZmllZCwgYW5kIHRoaXMgQmlnTnVtYmVyIGhhcyBhIHBvc2l0aXZlIGV4cG9uZW50XHJcbiAgICAgKiB0aGF0IGlzIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiBUT19FWFBfUE9TLCBvciBhIG5lZ2F0aXZlIGV4cG9uZW50IGVxdWFsIHRvIG9yIGxlc3MgdGhhblxyXG4gICAgICogVE9fRVhQX05FRywgcmV0dXJuIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIFtiXSB7bnVtYmVyfSBJbnRlZ2VyLCAyIHRvIEFMUEhBQkVULmxlbmd0aCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEJhc2Uge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2J9J1xyXG4gICAgICovXHJcbiAgICBQLnRvU3RyaW5nID0gZnVuY3Rpb24gKGIpIHtcclxuICAgICAgdmFyIHN0cixcclxuICAgICAgICBuID0gdGhpcyxcclxuICAgICAgICBzID0gbi5zLFxyXG4gICAgICAgIGUgPSBuLmU7XHJcblxyXG4gICAgICAvLyBJbmZpbml0eSBvciBOYU4/XHJcbiAgICAgIGlmIChlID09PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHMpIHtcclxuICAgICAgICAgIHN0ciA9ICdJbmZpbml0eSc7XHJcbiAgICAgICAgICBpZiAocyA8IDApIHN0ciA9ICctJyArIHN0cjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc3RyID0gJ05hTic7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChiID09IG51bGwpIHtcclxuICAgICAgICAgIHN0ciA9IGUgPD0gVE9fRVhQX05FRyB8fCBlID49IFRPX0VYUF9QT1NcclxuICAgICAgICAgICA/IHRvRXhwb25lbnRpYWwoY29lZmZUb1N0cmluZyhuLmMpLCBlKVxyXG4gICAgICAgICAgIDogdG9GaXhlZFBvaW50KGNvZWZmVG9TdHJpbmcobi5jKSwgZSwgJzAnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGIgPT09IDEwKSB7XHJcbiAgICAgICAgICBuID0gcm91bmQobmV3IEJpZ051bWJlcihuKSwgREVDSU1BTF9QTEFDRVMgKyBlICsgMSwgUk9VTkRJTkdfTU9ERSk7XHJcbiAgICAgICAgICBzdHIgPSB0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyhuLmMpLCBuLmUsICcwJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGludENoZWNrKGIsIDIsIEFMUEhBQkVULmxlbmd0aCwgJ0Jhc2UnKTtcclxuICAgICAgICAgIHN0ciA9IGNvbnZlcnRCYXNlKHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKG4uYyksIGUsICcwJyksIDEwLCBiLCBzLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzIDwgMCAmJiBuLmNbMF0pIHN0ciA9ICctJyArIHN0cjtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYXMgdG9TdHJpbmcsIGJ1dCBkbyBub3QgYWNjZXB0IGEgYmFzZSBhcmd1bWVudCwgYW5kIGluY2x1ZGUgdGhlIG1pbnVzIHNpZ24gZm9yXHJcbiAgICAgKiBuZWdhdGl2ZSB6ZXJvLlxyXG4gICAgICovXHJcbiAgICBQLnZhbHVlT2YgPSBQLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlT2YodGhpcyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICBQLl9pc0JpZ051bWJlciA9IHRydWU7XHJcblxyXG4gICAgaWYgKGNvbmZpZ09iamVjdCAhPSBudWxsKSBCaWdOdW1iZXIuc2V0KGNvbmZpZ09iamVjdCk7XHJcblxyXG4gICAgcmV0dXJuIEJpZ051bWJlcjtcclxuICB9XHJcblxyXG5cclxuICAvLyBQUklWQVRFIEhFTFBFUiBGVU5DVElPTlNcclxuXHJcbiAgLy8gVGhlc2UgZnVuY3Rpb25zIGRvbid0IG5lZWQgYWNjZXNzIHRvIHZhcmlhYmxlcyxcclxuICAvLyBlLmcuIERFQ0lNQUxfUExBQ0VTLCBpbiB0aGUgc2NvcGUgb2YgdGhlIGBjbG9uZWAgZnVuY3Rpb24gYWJvdmUuXHJcblxyXG5cclxuICBmdW5jdGlvbiBiaXRGbG9vcihuKSB7XHJcbiAgICB2YXIgaSA9IG4gfCAwO1xyXG4gICAgcmV0dXJuIG4gPiAwIHx8IG4gPT09IGkgPyBpIDogaSAtIDE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gUmV0dXJuIGEgY29lZmZpY2llbnQgYXJyYXkgYXMgYSBzdHJpbmcgb2YgYmFzZSAxMCBkaWdpdHMuXHJcbiAgZnVuY3Rpb24gY29lZmZUb1N0cmluZyhhKSB7XHJcbiAgICB2YXIgcywgeixcclxuICAgICAgaSA9IDEsXHJcbiAgICAgIGogPSBhLmxlbmd0aCxcclxuICAgICAgciA9IGFbMF0gKyAnJztcclxuXHJcbiAgICBmb3IgKDsgaSA8IGo7KSB7XHJcbiAgICAgIHMgPSBhW2krK10gKyAnJztcclxuICAgICAgeiA9IExPR19CQVNFIC0gcy5sZW5ndGg7XHJcbiAgICAgIGZvciAoOyB6LS07IHMgPSAnMCcgKyBzKTtcclxuICAgICAgciArPSBzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERldGVybWluZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgIGZvciAoaiA9IHIubGVuZ3RoOyByLmNoYXJDb2RlQXQoLS1qKSA9PT0gNDg7KTtcclxuXHJcbiAgICByZXR1cm4gci5zbGljZSgwLCBqICsgMSB8fCAxKTtcclxuICB9XHJcblxyXG5cclxuICAvLyBDb21wYXJlIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXJzIHggYW5kIHkuXHJcbiAgZnVuY3Rpb24gY29tcGFyZSh4LCB5KSB7XHJcbiAgICB2YXIgYSwgYixcclxuICAgICAgeGMgPSB4LmMsXHJcbiAgICAgIHljID0geS5jLFxyXG4gICAgICBpID0geC5zLFxyXG4gICAgICBqID0geS5zLFxyXG4gICAgICBrID0geC5lLFxyXG4gICAgICBsID0geS5lO1xyXG5cclxuICAgIC8vIEVpdGhlciBOYU4/XHJcbiAgICBpZiAoIWkgfHwgIWopIHJldHVybiBudWxsO1xyXG5cclxuICAgIGEgPSB4YyAmJiAheGNbMF07XHJcbiAgICBiID0geWMgJiYgIXljWzBdO1xyXG5cclxuICAgIC8vIEVpdGhlciB6ZXJvP1xyXG4gICAgaWYgKGEgfHwgYikgcmV0dXJuIGEgPyBiID8gMCA6IC1qIDogaTtcclxuXHJcbiAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICBpZiAoaSAhPSBqKSByZXR1cm4gaTtcclxuXHJcbiAgICBhID0gaSA8IDA7XHJcbiAgICBiID0gayA9PSBsO1xyXG5cclxuICAgIC8vIEVpdGhlciBJbmZpbml0eT9cclxuICAgIGlmICgheGMgfHwgIXljKSByZXR1cm4gYiA/IDAgOiAheGMgXiBhID8gMSA6IC0xO1xyXG5cclxuICAgIC8vIENvbXBhcmUgZXhwb25lbnRzLlxyXG4gICAgaWYgKCFiKSByZXR1cm4gayA+IGwgXiBhID8gMSA6IC0xO1xyXG5cclxuICAgIGogPSAoayA9IHhjLmxlbmd0aCkgPCAobCA9IHljLmxlbmd0aCkgPyBrIDogbDtcclxuXHJcbiAgICAvLyBDb21wYXJlIGRpZ2l0IGJ5IGRpZ2l0LlxyXG4gICAgZm9yIChpID0gMDsgaSA8IGo7IGkrKykgaWYgKHhjW2ldICE9IHljW2ldKSByZXR1cm4geGNbaV0gPiB5Y1tpXSBeIGEgPyAxIDogLTE7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBsZW5ndGhzLlxyXG4gICAgcmV0dXJuIGsgPT0gbCA/IDAgOiBrID4gbCBeIGEgPyAxIDogLTE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDaGVjayB0aGF0IG4gaXMgYSBwcmltaXRpdmUgbnVtYmVyLCBhbiBpbnRlZ2VyLCBhbmQgaW4gcmFuZ2UsIG90aGVyd2lzZSB0aHJvdy5cclxuICAgKi9cclxuICBmdW5jdGlvbiBpbnRDaGVjayhuLCBtaW4sIG1heCwgbmFtZSkge1xyXG4gICAgaWYgKG4gPCBtaW4gfHwgbiA+IG1heCB8fCBuICE9PSBtYXRoZmxvb3IobikpIHtcclxuICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgIChiaWdudW1iZXJFcnJvciArIChuYW1lIHx8ICdBcmd1bWVudCcpICsgKHR5cGVvZiBuID09ICdudW1iZXInXHJcbiAgICAgICAgID8gbiA8IG1pbiB8fCBuID4gbWF4ID8gJyBvdXQgb2YgcmFuZ2U6ICcgOiAnIG5vdCBhbiBpbnRlZ2VyOiAnXHJcbiAgICAgICAgIDogJyBub3QgYSBwcmltaXRpdmUgbnVtYmVyOiAnKSArIFN0cmluZyhuKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQXNzdW1lcyBmaW5pdGUgbi5cclxuICBmdW5jdGlvbiBpc09kZChuKSB7XHJcbiAgICB2YXIgayA9IG4uYy5sZW5ndGggLSAxO1xyXG4gICAgcmV0dXJuIGJpdEZsb29yKG4uZSAvIExPR19CQVNFKSA9PSBrICYmIG4uY1trXSAlIDIgIT0gMDtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiB0b0V4cG9uZW50aWFsKHN0ciwgZSkge1xyXG4gICAgcmV0dXJuIChzdHIubGVuZ3RoID4gMSA/IHN0ci5jaGFyQXQoMCkgKyAnLicgKyBzdHIuc2xpY2UoMSkgOiBzdHIpICtcclxuICAgICAoZSA8IDAgPyAnZScgOiAnZSsnKSArIGU7XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gdG9GaXhlZFBvaW50KHN0ciwgZSwgeikge1xyXG4gICAgdmFyIGxlbiwgenM7XHJcblxyXG4gICAgLy8gTmVnYXRpdmUgZXhwb25lbnQ/XHJcbiAgICBpZiAoZSA8IDApIHtcclxuXHJcbiAgICAgIC8vIFByZXBlbmQgemVyb3MuXHJcbiAgICAgIGZvciAoenMgPSB6ICsgJy4nOyArK2U7IHpzICs9IHopO1xyXG4gICAgICBzdHIgPSB6cyArIHN0cjtcclxuXHJcbiAgICAvLyBQb3NpdGl2ZSBleHBvbmVudFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICAgIC8vIEFwcGVuZCB6ZXJvcy5cclxuICAgICAgaWYgKCsrZSA+IGxlbikge1xyXG4gICAgICAgIGZvciAoenMgPSB6LCBlIC09IGxlbjsgLS1lOyB6cyArPSB6KTtcclxuICAgICAgICBzdHIgKz0genM7XHJcbiAgICAgIH0gZWxzZSBpZiAoZSA8IGxlbikge1xyXG4gICAgICAgIHN0ciA9IHN0ci5zbGljZSgwLCBlKSArICcuJyArIHN0ci5zbGljZShlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRVhQT1JUXHJcblxyXG5cclxuICBCaWdOdW1iZXIgPSBjbG9uZSgpO1xyXG4gIEJpZ051bWJlclsnZGVmYXVsdCddID0gQmlnTnVtYmVyLkJpZ051bWJlciA9IEJpZ051bWJlcjtcclxuXHJcbiAgLy8gQU1ELlxyXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJpZ051bWJlcjsgfSk7XHJcblxyXG4gIC8vIE5vZGUuanMgYW5kIG90aGVyIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMuXHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IEJpZ051bWJlcjtcclxuXHJcbiAgLy8gQnJvd3Nlci5cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKCFnbG9iYWxPYmplY3QpIHtcclxuICAgICAgZ2xvYmFsT2JqZWN0ID0gdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZiA/IHNlbGYgOiB3aW5kb3c7XHJcbiAgICB9XHJcblxyXG4gICAgZ2xvYmFsT2JqZWN0LkJpZ051bWJlciA9IEJpZ051bWJlcjtcclxuICB9XHJcbn0pKHRoaXMpO1xyXG4iLCJ2YXIganNvbl9zdHJpbmdpZnkgPSByZXF1aXJlKCcuL2xpYi9zdHJpbmdpZnkuanMnKS5zdHJpbmdpZnk7XG52YXIganNvbl9wYXJzZSAgICAgPSByZXF1aXJlKCcuL2xpYi9wYXJzZS5qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gIHtcbiAgICAgICAgcGFyc2U6IGpzb25fcGFyc2Uob3B0aW9ucyksXG4gICAgICAgIHN0cmluZ2lmeToganNvbl9zdHJpbmdpZnlcbiAgICB9XG59O1xuLy9jcmVhdGUgdGhlIGRlZmF1bHQgbWV0aG9kIG1lbWJlcnMgd2l0aCBubyBvcHRpb25zIGFwcGxpZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5tb2R1bGUuZXhwb3J0cy5wYXJzZSA9IGpzb25fcGFyc2UoKTtcbm1vZHVsZS5leHBvcnRzLnN0cmluZ2lmeSA9IGpzb25fc3RyaW5naWZ5O1xuIiwidmFyIEJpZ051bWJlciA9IG51bGw7XG5cbi8vIHJlZ2V4cHhzIGV4dHJhY3RlZCBmcm9tXG4vLyAoYykgQlNELTMtQ2xhdXNlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFzdGlmeS9zZWN1cmUtanNvbi1wYXJzZS9ncmFwaHMvY29udHJpYnV0b3JzIGFuZCBodHRwczovL2dpdGh1Yi5jb20vaGFwaWpzL2JvdXJuZS9ncmFwaHMvY29udHJpYnV0b3JzXG5cbmNvbnN0IHN1c3BlY3RQcm90b1J4ID0gLyg/Ol98XFxcXHUwMDVbRmZdKSg/Ol98XFxcXHUwMDVbRmZdKSg/OnB8XFxcXHUwMDcwKSg/OnJ8XFxcXHUwMDcyKSg/Om98XFxcXHUwMDZbRmZdKSg/OnR8XFxcXHUwMDc0KSg/Om98XFxcXHUwMDZbRmZdKSg/Ol98XFxcXHUwMDVbRmZdKSg/Ol98XFxcXHUwMDVbRmZdKS87XG5jb25zdCBzdXNwZWN0Q29uc3RydWN0b3JSeCA9IC8oPzpjfFxcXFx1MDA2MykoPzpvfFxcXFx1MDA2W0ZmXSkoPzpufFxcXFx1MDA2W0VlXSkoPzpzfFxcXFx1MDA3MykoPzp0fFxcXFx1MDA3NCkoPzpyfFxcXFx1MDA3MikoPzp1fFxcXFx1MDA3NSkoPzpjfFxcXFx1MDA2MykoPzp0fFxcXFx1MDA3NCkoPzpvfFxcXFx1MDA2W0ZmXSkoPzpyfFxcXFx1MDA3MikvO1xuXG4vKlxuICAgIGpzb25fcGFyc2UuanNcbiAgICAyMDEyLTA2LTIwXG5cbiAgICBQdWJsaWMgRG9tYWluLlxuXG4gICAgTk8gV0FSUkFOVFkgRVhQUkVTU0VEIE9SIElNUExJRUQuIFVTRSBBVCBZT1VSIE9XTiBSSVNLLlxuXG4gICAgVGhpcyBmaWxlIGNyZWF0ZXMgYSBqc29uX3BhcnNlIGZ1bmN0aW9uLlxuICAgIER1cmluZyBjcmVhdGUgeW91IGNhbiAob3B0aW9uYWxseSkgc3BlY2lmeSBzb21lIGJlaGF2aW91cmFsIHN3aXRjaGVzXG5cbiAgICAgICAgcmVxdWlyZSgnanNvbi1iaWdpbnQnKShvcHRpb25zKVxuXG4gICAgICAgICAgICBUaGUgb3B0aW9uYWwgb3B0aW9ucyBwYXJhbWV0ZXIgaG9sZHMgc3dpdGNoZXMgdGhhdCBkcml2ZSBjZXJ0YWluXG4gICAgICAgICAgICBhc3BlY3RzIG9mIHRoZSBwYXJzaW5nIHByb2Nlc3M6XG4gICAgICAgICAgICAqIG9wdGlvbnMuc3RyaWN0ID0gdHJ1ZSB3aWxsIHdhcm4gYWJvdXQgZHVwbGljYXRlLWtleSB1c2FnZSBpbiB0aGUganNvbi5cbiAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgKHN0cmljdCA9IGZhbHNlKSB3aWxsIHNpbGVudGx5IGlnbm9yZSB0aG9zZSBhbmQgb3ZlcndyaXRlXG4gICAgICAgICAgICAgIHZhbHVlcyBmb3Iga2V5cyB0aGF0IGFyZSBpbiBkdXBsaWNhdGUgdXNlLlxuXG4gICAgVGhlIHJlc3VsdGluZyBmdW5jdGlvbiBmb2xsb3dzIHRoaXMgc2lnbmF0dXJlOlxuICAgICAgICBqc29uX3BhcnNlKHRleHQsIHJldml2ZXIpXG4gICAgICAgICAgICBUaGlzIG1ldGhvZCBwYXJzZXMgYSBKU09OIHRleHQgdG8gcHJvZHVjZSBhbiBvYmplY3Qgb3IgYXJyYXkuXG4gICAgICAgICAgICBJdCBjYW4gdGhyb3cgYSBTeW50YXhFcnJvciBleGNlcHRpb24uXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCByZXZpdmVyIHBhcmFtZXRlciBpcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIGZpbHRlciBhbmRcbiAgICAgICAgICAgIHRyYW5zZm9ybSB0aGUgcmVzdWx0cy4gSXQgcmVjZWl2ZXMgZWFjaCBvZiB0aGUga2V5cyBhbmQgdmFsdWVzLFxuICAgICAgICAgICAgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgd2hhdCBpdCByZWNlaXZlZCwgdGhlbiB0aGUgc3RydWN0dXJlIGlzIG5vdCBtb2RpZmllZC5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgdW5kZWZpbmVkIHRoZW4gdGhlIG1lbWJlciBpcyBkZWxldGVkLlxuXG4gICAgICAgICAgICBFeGFtcGxlOlxuXG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgdGV4dC4gVmFsdWVzIHRoYXQgbG9vayBsaWtlIElTTyBkYXRlIHN0cmluZ3Mgd2lsbFxuICAgICAgICAgICAgLy8gYmUgY29udmVydGVkIHRvIERhdGUgb2JqZWN0cy5cblxuICAgICAgICAgICAgbXlEYXRhID0ganNvbl9wYXJzZSh0ZXh0LCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBhO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGEgPVxuL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KD86XFwuXFxkKik/KVokLy5leGVjKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQygrYVsxXSwgK2FbMl0gLSAxLCArYVszXSwgK2FbNF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgK2FbNV0sICthWzZdKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICBUaGlzIGlzIGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLiBZb3UgYXJlIGZyZWUgdG8gY29weSwgbW9kaWZ5LCBvclxuICAgIHJlZGlzdHJpYnV0ZS5cblxuICAgIFRoaXMgY29kZSBzaG91bGQgYmUgbWluaWZpZWQgYmVmb3JlIGRlcGxveW1lbnQuXG4gICAgU2VlIGh0dHA6Ly9qYXZhc2NyaXB0LmNyb2NrZm9yZC5jb20vanNtaW4uaHRtbFxuXG4gICAgVVNFIFlPVVIgT1dOIENPUFkuIElUIElTIEVYVFJFTUVMWSBVTldJU0UgVE8gTE9BRCBDT0RFIEZST00gU0VSVkVSUyBZT1UgRE9cbiAgICBOT1QgQ09OVFJPTC5cbiovXG5cbi8qbWVtYmVycyBcIlwiLCBcIlxcXCJcIiwgXCJcXC9cIiwgXCJcXFxcXCIsIGF0LCBiLCBjYWxsLCBjaGFyQXQsIGYsIGZyb21DaGFyQ29kZSxcbiAgICBoYXNPd25Qcm9wZXJ0eSwgbWVzc2FnZSwgbiwgbmFtZSwgcHJvdG90eXBlLCBwdXNoLCByLCB0LCB0ZXh0XG4qL1xuXG52YXIganNvbl9wYXJzZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBUaGlzIGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gcGFyc2UgYSBKU09OIHRleHQsIHByb2R1Y2luZyBhIEphdmFTY3JpcHRcbiAgLy8gZGF0YSBzdHJ1Y3R1cmUuIEl0IGlzIGEgc2ltcGxlLCByZWN1cnNpdmUgZGVzY2VudCBwYXJzZXIuIEl0IGRvZXMgbm90IHVzZVxuICAvLyBldmFsIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIHNvIGl0IGNhbiBiZSB1c2VkIGFzIGEgbW9kZWwgZm9yIGltcGxlbWVudGluZ1xuICAvLyBhIEpTT04gcGFyc2VyIGluIG90aGVyIGxhbmd1YWdlcy5cblxuICAvLyBXZSBhcmUgZGVmaW5pbmcgdGhlIGZ1bmN0aW9uIGluc2lkZSBvZiBhbm90aGVyIGZ1bmN0aW9uIHRvIGF2b2lkIGNyZWF0aW5nXG4gIC8vIGdsb2JhbCB2YXJpYWJsZXMuXG5cbiAgLy8gRGVmYXVsdCBvcHRpb25zIG9uZSBjYW4gb3ZlcnJpZGUgYnkgcGFzc2luZyBvcHRpb25zIHRvIHRoZSBwYXJzZSgpXG4gIHZhciBfb3B0aW9ucyA9IHtcbiAgICBzdHJpY3Q6IGZhbHNlLCAvLyBub3QgYmVpbmcgc3RyaWN0IG1lYW5zIGRvIG5vdCBnZW5lcmF0ZSBzeW50YXggZXJyb3JzIGZvciBcImR1cGxpY2F0ZSBrZXlcIlxuICAgIHN0b3JlQXNTdHJpbmc6IGZhbHNlLCAvLyB0b2dnbGVzIHdoZXRoZXIgdGhlIHZhbHVlcyBzaG91bGQgYmUgc3RvcmVkIGFzIEJpZ051bWJlciAoZGVmYXVsdCkgb3IgYSBzdHJpbmdcbiAgICBhbHdheXNQYXJzZUFzQmlnOiBmYWxzZSwgLy8gdG9nZ2xlcyB3aGV0aGVyIGFsbCBudW1iZXJzIHNob3VsZCBiZSBCaWdcbiAgICB1c2VOYXRpdmVCaWdJbnQ6IGZhbHNlLCAvLyB0b2dnbGVzIHdoZXRoZXIgdG8gdXNlIG5hdGl2ZSBCaWdJbnQgaW5zdGVhZCBvZiBiaWdudW1iZXIuanNcbiAgICBwcm90b0FjdGlvbjogJ2Vycm9yJyxcbiAgICBjb25zdHJ1Y3RvckFjdGlvbjogJ2Vycm9yJyxcbiAgfTtcblxuICAvLyBJZiB0aGVyZSBhcmUgb3B0aW9ucywgdGhlbiB1c2UgdGhlbSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBfb3B0aW9uc1xuICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMgIT09IG51bGwpIHtcbiAgICBpZiAob3B0aW9ucy5zdHJpY3QgPT09IHRydWUpIHtcbiAgICAgIF9vcHRpb25zLnN0cmljdCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0b3JlQXNTdHJpbmcgPT09IHRydWUpIHtcbiAgICAgIF9vcHRpb25zLnN0b3JlQXNTdHJpbmcgPSB0cnVlO1xuICAgIH1cbiAgICBfb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnID1cbiAgICAgIG9wdGlvbnMuYWx3YXlzUGFyc2VBc0JpZyA9PT0gdHJ1ZSA/IG9wdGlvbnMuYWx3YXlzUGFyc2VBc0JpZyA6IGZhbHNlO1xuICAgIF9vcHRpb25zLnVzZU5hdGl2ZUJpZ0ludCA9XG4gICAgICBvcHRpb25zLnVzZU5hdGl2ZUJpZ0ludCA9PT0gdHJ1ZSA/IG9wdGlvbnMudXNlTmF0aXZlQmlnSW50IDogZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdlcnJvcicgfHxcbiAgICAgICAgb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2lnbm9yZScgfHxcbiAgICAgICAgb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ3ByZXNlcnZlJ1xuICAgICAgKSB7XG4gICAgICAgIF9vcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID0gb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW5jb3JyZWN0IHZhbHVlIGZvciBjb25zdHJ1Y3RvckFjdGlvbiBvcHRpb24sIG11c3QgYmUgXCJlcnJvclwiLCBcImlnbm9yZVwiIG9yIHVuZGVmaW5lZCBidXQgcGFzc2VkICR7b3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbn1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnByb3RvQWN0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zLnByb3RvQWN0aW9uID09PSAnZXJyb3InIHx8XG4gICAgICAgIG9wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdpZ25vcmUnIHx8XG4gICAgICAgIG9wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdwcmVzZXJ2ZSdcbiAgICAgICkge1xuICAgICAgICBfb3B0aW9ucy5wcm90b0FjdGlvbiA9IG9wdGlvbnMucHJvdG9BY3Rpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEluY29ycmVjdCB2YWx1ZSBmb3IgcHJvdG9BY3Rpb24gb3B0aW9uLCBtdXN0IGJlIFwiZXJyb3JcIiwgXCJpZ25vcmVcIiBvciB1bmRlZmluZWQgYnV0IHBhc3NlZCAke29wdGlvbnMucHJvdG9BY3Rpb259YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBhdCwgLy8gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGNoYXJhY3RlclxuICAgIGNoLCAvLyBUaGUgY3VycmVudCBjaGFyYWN0ZXJcbiAgICBlc2NhcGVlID0ge1xuICAgICAgJ1wiJzogJ1wiJyxcbiAgICAgICdcXFxcJzogJ1xcXFwnLFxuICAgICAgJy8nOiAnLycsXG4gICAgICBiOiAnXFxiJyxcbiAgICAgIGY6ICdcXGYnLFxuICAgICAgbjogJ1xcbicsXG4gICAgICByOiAnXFxyJyxcbiAgICAgIHQ6ICdcXHQnLFxuICAgIH0sXG4gICAgdGV4dCxcbiAgICBlcnJvciA9IGZ1bmN0aW9uIChtKSB7XG4gICAgICAvLyBDYWxsIGVycm9yIHdoZW4gc29tZXRoaW5nIGlzIHdyb25nLlxuXG4gICAgICB0aHJvdyB7XG4gICAgICAgIG5hbWU6ICdTeW50YXhFcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6IG0sXG4gICAgICAgIGF0OiBhdCxcbiAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgIH07XG4gICAgfSxcbiAgICBuZXh0ID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgIC8vIElmIGEgYyBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQsIHZlcmlmeSB0aGF0IGl0IG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLlxuXG4gICAgICBpZiAoYyAmJiBjICE9PSBjaCkge1xuICAgICAgICBlcnJvcihcIkV4cGVjdGVkICdcIiArIGMgKyBcIicgaW5zdGVhZCBvZiAnXCIgKyBjaCArIFwiJ1wiKTtcbiAgICAgIH1cblxuICAgICAgLy8gR2V0IHRoZSBuZXh0IGNoYXJhY3Rlci4gV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBjaGFyYWN0ZXJzLFxuICAgICAgLy8gcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG5cbiAgICAgIGNoID0gdGV4dC5jaGFyQXQoYXQpO1xuICAgICAgYXQgKz0gMTtcbiAgICAgIHJldHVybiBjaDtcbiAgICB9LFxuICAgIG51bWJlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFBhcnNlIGEgbnVtYmVyIHZhbHVlLlxuXG4gICAgICB2YXIgbnVtYmVyLFxuICAgICAgICBzdHJpbmcgPSAnJztcblxuICAgICAgaWYgKGNoID09PSAnLScpIHtcbiAgICAgICAgc3RyaW5nID0gJy0nO1xuICAgICAgICBuZXh0KCctJyk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaCA9PT0gJy4nKSB7XG4gICAgICAgIHN0cmluZyArPSAnLic7XG4gICAgICAgIHdoaWxlIChuZXh0KCkgJiYgY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNoID09PSAnZScgfHwgY2ggPT09ICdFJykge1xuICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgIG5leHQoKTtcbiAgICAgICAgaWYgKGNoID09PSAnLScgfHwgY2ggPT09ICcrJykge1xuICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBudW1iZXIgPSArc3RyaW5nO1xuICAgICAgaWYgKCFpc0Zpbml0ZShudW1iZXIpKSB7XG4gICAgICAgIGVycm9yKCdCYWQgbnVtYmVyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoQmlnTnVtYmVyID09IG51bGwpIEJpZ051bWJlciA9IHJlcXVpcmUoJ2JpZ251bWJlci5qcycpO1xuICAgICAgICAvL2lmIChudW1iZXIgPiA5MDA3MTk5MjU0NzQwOTkyIHx8IG51bWJlciA8IC05MDA3MTk5MjU0NzQwOTkyKVxuICAgICAgICAvLyBCaWdudW1iZXIgaGFzIHN0cmljdGVyIGNoZWNrOiBldmVyeXRoaW5nIHdpdGggbGVuZ3RoID4gMTUgZGlnaXRzIGRpc2FsbG93ZWRcbiAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAxNSlcbiAgICAgICAgICByZXR1cm4gX29wdGlvbnMuc3RvcmVBc1N0cmluZ1xuICAgICAgICAgICAgPyBzdHJpbmdcbiAgICAgICAgICAgIDogX29wdGlvbnMudXNlTmF0aXZlQmlnSW50XG4gICAgICAgICAgICA/IEJpZ0ludChzdHJpbmcpXG4gICAgICAgICAgICA6IG5ldyBCaWdOdW1iZXIoc3RyaW5nKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJldHVybiAhX29wdGlvbnMuYWx3YXlzUGFyc2VBc0JpZ1xuICAgICAgICAgICAgPyBudW1iZXJcbiAgICAgICAgICAgIDogX29wdGlvbnMudXNlTmF0aXZlQmlnSW50XG4gICAgICAgICAgICA/IEJpZ0ludChudW1iZXIpXG4gICAgICAgICAgICA6IG5ldyBCaWdOdW1iZXIobnVtYmVyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFBhcnNlIGEgc3RyaW5nIHZhbHVlLlxuXG4gICAgICB2YXIgaGV4LFxuICAgICAgICBpLFxuICAgICAgICBzdHJpbmcgPSAnJyxcbiAgICAgICAgdWZmZmY7XG5cbiAgICAgIC8vIFdoZW4gcGFyc2luZyBmb3Igc3RyaW5nIHZhbHVlcywgd2UgbXVzdCBsb29rIGZvciBcIiBhbmQgXFwgY2hhcmFjdGVycy5cblxuICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgIHZhciBzdGFydEF0ID0gYXQ7XG4gICAgICAgIHdoaWxlIChuZXh0KCkpIHtcbiAgICAgICAgICBpZiAoY2ggPT09ICdcIicpIHtcbiAgICAgICAgICAgIGlmIChhdCAtIDEgPiBzdGFydEF0KSBzdHJpbmcgKz0gdGV4dC5zdWJzdHJpbmcoc3RhcnRBdCwgYXQgLSAxKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICBpZiAoYXQgLSAxID4gc3RhcnRBdCkgc3RyaW5nICs9IHRleHQuc3Vic3RyaW5nKHN0YXJ0QXQsIGF0IC0gMSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICd1Jykge1xuICAgICAgICAgICAgICB1ZmZmZiA9IDA7XG4gICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBoZXggPSBwYXJzZUludChuZXh0KCksIDE2KTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKGhleCkpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1ZmZmZiA9IHVmZmZmICogMTYgKyBoZXg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodWZmZmYpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXNjYXBlZVtjaF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIHN0cmluZyArPSBlc2NhcGVlW2NoXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhcnRBdCA9IGF0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXJyb3IoJ0JhZCBzdHJpbmcnKTtcbiAgICB9LFxuICAgIHdoaXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNlLlxuXG4gICAgICB3aGlsZSAoY2ggJiYgY2ggPD0gJyAnKSB7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHdvcmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyB0cnVlLCBmYWxzZSwgb3IgbnVsbC5cblxuICAgICAgc3dpdGNoIChjaCkge1xuICAgICAgICBjYXNlICd0JzpcbiAgICAgICAgICBuZXh0KCd0Jyk7XG4gICAgICAgICAgbmV4dCgncicpO1xuICAgICAgICAgIG5leHQoJ3UnKTtcbiAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICAgIG5leHQoJ2YnKTtcbiAgICAgICAgICBuZXh0KCdhJyk7XG4gICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgIG5leHQoJ3MnKTtcbiAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjYXNlICduJzpcbiAgICAgICAgICBuZXh0KCduJyk7XG4gICAgICAgICAgbmV4dCgndScpO1xuICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBlcnJvcihcIlVuZXhwZWN0ZWQgJ1wiICsgY2ggKyBcIidcIik7XG4gICAgfSxcbiAgICB2YWx1ZSwgLy8gUGxhY2UgaG9sZGVyIGZvciB0aGUgdmFsdWUgZnVuY3Rpb24uXG4gICAgYXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhbiBhcnJheSB2YWx1ZS5cblxuICAgICAgdmFyIGFycmF5ID0gW107XG5cbiAgICAgIGlmIChjaCA9PT0gJ1snKSB7XG4gICAgICAgIG5leHQoJ1snKTtcbiAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICBuZXh0KCddJyk7XG4gICAgICAgICAgcmV0dXJuIGFycmF5OyAvLyBlbXB0eSBhcnJheVxuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjaCkge1xuICAgICAgICAgIGFycmF5LnB1c2godmFsdWUoKSk7XG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICBpZiAoY2ggPT09ICddJykge1xuICAgICAgICAgICAgbmV4dCgnXScpO1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0KCcsJyk7XG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXJyb3IoJ0JhZCBhcnJheScpO1xuICAgIH0sXG4gICAgb2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYW4gb2JqZWN0IHZhbHVlLlxuXG4gICAgICB2YXIga2V5LFxuICAgICAgICBvYmplY3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICBpZiAoY2ggPT09ICd7Jykge1xuICAgICAgICBuZXh0KCd7Jyk7XG4gICAgICAgIHdoaXRlKCk7XG4gICAgICAgIGlmIChjaCA9PT0gJ30nKSB7XG4gICAgICAgICAgbmV4dCgnfScpO1xuICAgICAgICAgIHJldHVybiBvYmplY3Q7IC8vIGVtcHR5IG9iamVjdFxuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjaCkge1xuICAgICAgICAgIGtleSA9IHN0cmluZygpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgbmV4dCgnOicpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIF9vcHRpb25zLnN0cmljdCA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBlcnJvcignRHVwbGljYXRlIGtleSBcIicgKyBrZXkgKyAnXCInKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3VzcGVjdFByb3RvUngudGVzdChrZXkpID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoX29wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ09iamVjdCBjb250YWlucyBmb3JiaWRkZW4gcHJvdG90eXBlIHByb3BlcnR5Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9vcHRpb25zLnByb3RvQWN0aW9uID09PSAnaWdub3JlJykge1xuICAgICAgICAgICAgICB2YWx1ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoc3VzcGVjdENvbnN0cnVjdG9yUngudGVzdChrZXkpID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoX29wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ09iamVjdCBjb250YWlucyBmb3JiaWRkZW4gY29uc3RydWN0b3IgcHJvcGVydHknKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX29wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdpZ25vcmUnKSB7XG4gICAgICAgICAgICAgIHZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgIGlmIChjaCA9PT0gJ30nKSB7XG4gICAgICAgICAgICBuZXh0KCd9Jyk7XG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0KCcsJyk7XG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXJyb3IoJ0JhZCBvYmplY3QnKTtcbiAgICB9O1xuXG4gIHZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFBhcnNlIGEgSlNPTiB2YWx1ZS4gSXQgY291bGQgYmUgYW4gb2JqZWN0LCBhbiBhcnJheSwgYSBzdHJpbmcsIGEgbnVtYmVyLFxuICAgIC8vIG9yIGEgd29yZC5cblxuICAgIHdoaXRlKCk7XG4gICAgc3dpdGNoIChjaCkge1xuICAgICAgY2FzZSAneyc6XG4gICAgICAgIHJldHVybiBvYmplY3QoKTtcbiAgICAgIGNhc2UgJ1snOlxuICAgICAgICByZXR1cm4gYXJyYXkoKTtcbiAgICAgIGNhc2UgJ1wiJzpcbiAgICAgICAgcmV0dXJuIHN0cmluZygpO1xuICAgICAgY2FzZSAnLSc6XG4gICAgICAgIHJldHVybiBudW1iZXIoKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBjaCA+PSAnMCcgJiYgY2ggPD0gJzknID8gbnVtYmVyKCkgOiB3b3JkKCk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHVybiB0aGUganNvbl9wYXJzZSBmdW5jdGlvbi4gSXQgd2lsbCBoYXZlIGFjY2VzcyB0byBhbGwgb2YgdGhlIGFib3ZlXG4gIC8vIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzLlxuXG4gIHJldHVybiBmdW5jdGlvbiAoc291cmNlLCByZXZpdmVyKSB7XG4gICAgdmFyIHJlc3VsdDtcblxuICAgIHRleHQgPSBzb3VyY2UgKyAnJztcbiAgICBhdCA9IDA7XG4gICAgY2ggPSAnICc7XG4gICAgcmVzdWx0ID0gdmFsdWUoKTtcbiAgICB3aGl0ZSgpO1xuICAgIGlmIChjaCkge1xuICAgICAgZXJyb3IoJ1N5bnRheCBlcnJvcicpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIGEgcmV2aXZlciBmdW5jdGlvbiwgd2UgcmVjdXJzaXZlbHkgd2FsayB0aGUgbmV3IHN0cnVjdHVyZSxcbiAgICAvLyBwYXNzaW5nIGVhY2ggbmFtZS92YWx1ZSBwYWlyIHRvIHRoZSByZXZpdmVyIGZ1bmN0aW9uIGZvciBwb3NzaWJsZVxuICAgIC8vIHRyYW5zZm9ybWF0aW9uLCBzdGFydGluZyB3aXRoIGEgdGVtcG9yYXJ5IHJvb3Qgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIHJlc3VsdFxuICAgIC8vIGluIGFuIGVtcHR5IGtleS4gSWYgdGhlcmUgaXMgbm90IGEgcmV2aXZlciBmdW5jdGlvbiwgd2Ugc2ltcGx5IHJldHVybiB0aGVcbiAgICAvLyByZXN1bHQuXG5cbiAgICByZXR1cm4gdHlwZW9mIHJldml2ZXIgPT09ICdmdW5jdGlvbidcbiAgICAgID8gKGZ1bmN0aW9uIHdhbGsoaG9sZGVyLCBrZXkpIHtcbiAgICAgICAgICB2YXIgayxcbiAgICAgICAgICAgIHYsXG4gICAgICAgICAgICB2YWx1ZSA9IGhvbGRlcltrZXldO1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgICB2ID0gd2Fsayh2YWx1ZSwgayk7XG4gICAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZVtrXSA9IHY7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2tdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJldml2ZXIuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpO1xuICAgICAgICB9KSh7ICcnOiByZXN1bHQgfSwgJycpXG4gICAgICA6IHJlc3VsdDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ganNvbl9wYXJzZTtcbiIsInZhciBCaWdOdW1iZXIgPSByZXF1aXJlKCdiaWdudW1iZXIuanMnKTtcblxuLypcbiAgICBqc29uMi5qc1xuICAgIDIwMTMtMDUtMjZcblxuICAgIFB1YmxpYyBEb21haW4uXG5cbiAgICBOTyBXQVJSQU5UWSBFWFBSRVNTRUQgT1IgSU1QTElFRC4gVVNFIEFUIFlPVVIgT1dOIFJJU0suXG5cbiAgICBTZWUgaHR0cDovL3d3dy5KU09OLm9yZy9qcy5odG1sXG5cblxuICAgIFRoaXMgY29kZSBzaG91bGQgYmUgbWluaWZpZWQgYmVmb3JlIGRlcGxveW1lbnQuXG4gICAgU2VlIGh0dHA6Ly9qYXZhc2NyaXB0LmNyb2NrZm9yZC5jb20vanNtaW4uaHRtbFxuXG4gICAgVVNFIFlPVVIgT1dOIENPUFkuIElUIElTIEVYVFJFTUVMWSBVTldJU0UgVE8gTE9BRCBDT0RFIEZST00gU0VSVkVSUyBZT1UgRE9cbiAgICBOT1QgQ09OVFJPTC5cblxuXG4gICAgVGhpcyBmaWxlIGNyZWF0ZXMgYSBnbG9iYWwgSlNPTiBvYmplY3QgY29udGFpbmluZyB0d28gbWV0aG9kczogc3RyaW5naWZ5XG4gICAgYW5kIHBhcnNlLlxuXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHZhbHVlLCByZXBsYWNlciwgc3BhY2UpXG4gICAgICAgICAgICB2YWx1ZSAgICAgICBhbnkgSmF2YVNjcmlwdCB2YWx1ZSwgdXN1YWxseSBhbiBvYmplY3Qgb3IgYXJyYXkuXG5cbiAgICAgICAgICAgIHJlcGxhY2VyICAgIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGRldGVybWluZXMgaG93IG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGFyZSBzdHJpbmdpZmllZCBmb3Igb2JqZWN0cy4gSXQgY2FuIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG5cbiAgICAgICAgICAgIHNwYWNlICAgICAgIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IHNwZWNpZmllcyB0aGUgaW5kZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIG9mIG5lc3RlZCBzdHJ1Y3R1cmVzLiBJZiBpdCBpcyBvbWl0dGVkLCB0aGUgdGV4dCB3aWxsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZSBwYWNrZWQgd2l0aG91dCBleHRyYSB3aGl0ZXNwYWNlLiBJZiBpdCBpcyBhIG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdpbGwgc3BlY2lmeSB0aGUgbnVtYmVyIG9mIHNwYWNlcyB0byBpbmRlbnQgYXQgZWFjaFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwuIElmIGl0IGlzIGEgc3RyaW5nIChzdWNoIGFzICdcXHQnIG9yICcmbmJzcDsnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0IGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXJzIHVzZWQgdG8gaW5kZW50IGF0IGVhY2ggbGV2ZWwuXG5cbiAgICAgICAgICAgIFRoaXMgbWV0aG9kIHByb2R1Y2VzIGEgSlNPTiB0ZXh0IGZyb20gYSBKYXZhU2NyaXB0IHZhbHVlLlxuXG4gICAgICAgICAgICBXaGVuIGFuIG9iamVjdCB2YWx1ZSBpcyBmb3VuZCwgaWYgdGhlIG9iamVjdCBjb250YWlucyBhIHRvSlNPTlxuICAgICAgICAgICAgbWV0aG9kLCBpdHMgdG9KU09OIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhbmQgdGhlIHJlc3VsdCB3aWxsIGJlXG4gICAgICAgICAgICBzdHJpbmdpZmllZC4gQSB0b0pTT04gbWV0aG9kIGRvZXMgbm90IHNlcmlhbGl6ZTogaXQgcmV0dXJucyB0aGVcbiAgICAgICAgICAgIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZSBuYW1lL3ZhbHVlIHBhaXIgdGhhdCBzaG91bGQgYmUgc2VyaWFsaXplZCxcbiAgICAgICAgICAgIG9yIHVuZGVmaW5lZCBpZiBub3RoaW5nIHNob3VsZCBiZSBzZXJpYWxpemVkLiBUaGUgdG9KU09OIG1ldGhvZFxuICAgICAgICAgICAgd2lsbCBiZSBwYXNzZWQgdGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlLCBhbmQgdGhpcyB3aWxsIGJlXG4gICAgICAgICAgICBib3VuZCB0byB0aGUgdmFsdWVcblxuICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgd291bGQgc2VyaWFsaXplIERhdGVzIGFzIElTTyBzdHJpbmdzLlxuXG4gICAgICAgICAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmKG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBpbnRlZ2VycyB0byBoYXZlIGF0IGxlYXN0IHR3byBkaWdpdHMuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiA8IDEwID8gJzAnICsgbiA6IG47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRVVENGdWxsWWVhcigpICAgKyAnLScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENNb250aCgpICsgMSkgKyAnLScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENEYXRlKCkpICAgICAgKyAnVCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENIb3VycygpKSAgICAgKyAnOicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENNaW51dGVzKCkpICAgKyAnOicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENTZWNvbmRzKCkpICAgKyAnWic7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsIHJlcGxhY2VyIG1ldGhvZC4gSXQgd2lsbCBiZSBwYXNzZWQgdGhlXG4gICAgICAgICAgICBrZXkgYW5kIHZhbHVlIG9mIGVhY2ggbWVtYmVyLCB3aXRoIHRoaXMgYm91bmQgdG8gdGhlIGNvbnRhaW5pbmdcbiAgICAgICAgICAgIG9iamVjdC4gVGhlIHZhbHVlIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSB5b3VyIG1ldGhvZCB3aWxsIGJlXG4gICAgICAgICAgICBzZXJpYWxpemVkLiBJZiB5b3VyIG1ldGhvZCByZXR1cm5zIHVuZGVmaW5lZCwgdGhlbiB0aGUgbWVtYmVyIHdpbGxcbiAgICAgICAgICAgIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIHNlcmlhbGl6YXRpb24uXG5cbiAgICAgICAgICAgIElmIHRoZSByZXBsYWNlciBwYXJhbWV0ZXIgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncywgdGhlbiBpdCB3aWxsIGJlXG4gICAgICAgICAgICB1c2VkIHRvIHNlbGVjdCB0aGUgbWVtYmVycyB0byBiZSBzZXJpYWxpemVkLiBJdCBmaWx0ZXJzIHRoZSByZXN1bHRzXG4gICAgICAgICAgICBzdWNoIHRoYXQgb25seSBtZW1iZXJzIHdpdGgga2V5cyBsaXN0ZWQgaW4gdGhlIHJlcGxhY2VyIGFycmF5IGFyZVxuICAgICAgICAgICAgc3RyaW5naWZpZWQuXG5cbiAgICAgICAgICAgIFZhbHVlcyB0aGF0IGRvIG5vdCBoYXZlIEpTT04gcmVwcmVzZW50YXRpb25zLCBzdWNoIGFzIHVuZGVmaW5lZCBvclxuICAgICAgICAgICAgZnVuY3Rpb25zLCB3aWxsIG5vdCBiZSBzZXJpYWxpemVkLiBTdWNoIHZhbHVlcyBpbiBvYmplY3RzIHdpbGwgYmVcbiAgICAgICAgICAgIGRyb3BwZWQ7IGluIGFycmF5cyB0aGV5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBudWxsLiBZb3UgY2FuIHVzZVxuICAgICAgICAgICAgYSByZXBsYWNlciBmdW5jdGlvbiB0byByZXBsYWNlIHRob3NlIHdpdGggSlNPTiB2YWx1ZXMuXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh1bmRlZmluZWQpIHJldHVybnMgdW5kZWZpbmVkLlxuXG4gICAgICAgICAgICBUaGUgb3B0aW9uYWwgc3BhY2UgcGFyYW1ldGVyIHByb2R1Y2VzIGEgc3RyaW5naWZpY2F0aW9uIG9mIHRoZVxuICAgICAgICAgICAgdmFsdWUgdGhhdCBpcyBmaWxsZWQgd2l0aCBsaW5lIGJyZWFrcyBhbmQgaW5kZW50YXRpb24gdG8gbWFrZSBpdFxuICAgICAgICAgICAgZWFzaWVyIHRvIHJlYWQuXG5cbiAgICAgICAgICAgIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBub24tZW1wdHkgc3RyaW5nLCB0aGVuIHRoYXQgc3RyaW5nIHdpbGxcbiAgICAgICAgICAgIGJlIHVzZWQgZm9yIGluZGVudGF0aW9uLiBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbnVtYmVyLCB0aGVuXG4gICAgICAgICAgICB0aGUgaW5kZW50YXRpb24gd2lsbCBiZSB0aGF0IG1hbnkgc3BhY2VzLlxuXG4gICAgICAgICAgICBFeGFtcGxlOlxuXG4gICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoWydlJywge3BsdXJpYnVzOiAndW51bSd9XSk7XG4gICAgICAgICAgICAvLyB0ZXh0IGlzICdbXCJlXCIse1wicGx1cmlidXNcIjpcInVudW1cIn1dJ1xuXG5cbiAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShbJ2UnLCB7cGx1cmlidXM6ICd1bnVtJ31dLCBudWxsLCAnXFx0Jyk7XG4gICAgICAgICAgICAvLyB0ZXh0IGlzICdbXFxuXFx0XCJlXCIsXFxuXFx0e1xcblxcdFxcdFwicGx1cmlidXNcIjogXCJ1bnVtXCJcXG5cXHR9XFxuXSdcblxuICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFtuZXcgRGF0ZSgpXSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1trZXldIGluc3RhbmNlb2YgRGF0ZSA/XG4gICAgICAgICAgICAgICAgICAgICdEYXRlKCcgKyB0aGlzW2tleV0gKyAnKScgOiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gdGV4dCBpcyAnW1wiRGF0ZSgtLS1jdXJyZW50IHRpbWUtLS0pXCJdJ1xuXG5cbiAgICAgICAgSlNPTi5wYXJzZSh0ZXh0LCByZXZpdmVyKVxuICAgICAgICAgICAgVGhpcyBtZXRob2QgcGFyc2VzIGEgSlNPTiB0ZXh0IHRvIHByb2R1Y2UgYW4gb2JqZWN0IG9yIGFycmF5LlxuICAgICAgICAgICAgSXQgY2FuIHRocm93IGEgU3ludGF4RXJyb3IgZXhjZXB0aW9uLlxuXG4gICAgICAgICAgICBUaGUgb3B0aW9uYWwgcmV2aXZlciBwYXJhbWV0ZXIgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBmaWx0ZXIgYW5kXG4gICAgICAgICAgICB0cmFuc2Zvcm0gdGhlIHJlc3VsdHMuIEl0IHJlY2VpdmVzIGVhY2ggb2YgdGhlIGtleXMgYW5kIHZhbHVlcyxcbiAgICAgICAgICAgIGFuZCBpdHMgcmV0dXJuIHZhbHVlIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgdmFsdWUuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHdoYXQgaXQgcmVjZWl2ZWQsIHRoZW4gdGhlIHN0cnVjdHVyZSBpcyBub3QgbW9kaWZpZWQuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHVuZGVmaW5lZCB0aGVuIHRoZSBtZW1iZXIgaXMgZGVsZXRlZC5cblxuICAgICAgICAgICAgRXhhbXBsZTpcblxuICAgICAgICAgICAgLy8gUGFyc2UgdGhlIHRleHQuIFZhbHVlcyB0aGF0IGxvb2sgbGlrZSBJU08gZGF0ZSBzdHJpbmdzIHdpbGxcbiAgICAgICAgICAgIC8vIGJlIGNvbnZlcnRlZCB0byBEYXRlIG9iamVjdHMuXG5cbiAgICAgICAgICAgIG15RGF0YSA9IEpTT04ucGFyc2UodGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgYTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBhID1cbi9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSlUKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSg/OlxcLlxcZCopPylaJC8uZXhlYyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoK2FbMV0sICthWzJdIC0gMSwgK2FbM10sICthWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICthWzVdLCArYVs2XSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBteURhdGEgPSBKU09OLnBhcnNlKCdbXCJEYXRlKDA5LzA5LzIwMDEpXCJdJywgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZDtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgNSkgPT09ICdEYXRlKCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKC0xKSA9PT0gJyknKSB7XG4gICAgICAgICAgICAgICAgICAgIGQgPSBuZXcgRGF0ZSh2YWx1ZS5zbGljZSg1LCAtMSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgIFRoaXMgaXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIFlvdSBhcmUgZnJlZSB0byBjb3B5LCBtb2RpZnksIG9yXG4gICAgcmVkaXN0cmlidXRlLlxuKi9cblxuLypqc2xpbnQgZXZpbDogdHJ1ZSwgcmVnZXhwOiB0cnVlICovXG5cbi8qbWVtYmVycyBcIlwiLCBcIlxcYlwiLCBcIlxcdFwiLCBcIlxcblwiLCBcIlxcZlwiLCBcIlxcclwiLCBcIlxcXCJcIiwgSlNPTiwgXCJcXFxcXCIsIGFwcGx5LFxuICAgIGNhbGwsIGNoYXJDb2RlQXQsIGdldFVUQ0RhdGUsIGdldFVUQ0Z1bGxZZWFyLCBnZXRVVENIb3VycyxcbiAgICBnZXRVVENNaW51dGVzLCBnZXRVVENNb250aCwgZ2V0VVRDU2Vjb25kcywgaGFzT3duUHJvcGVydHksIGpvaW4sXG4gICAgbGFzdEluZGV4LCBsZW5ndGgsIHBhcnNlLCBwcm90b3R5cGUsIHB1c2gsIHJlcGxhY2UsIHNsaWNlLCBzdHJpbmdpZnksXG4gICAgdGVzdCwgdG9KU09OLCB0b1N0cmluZywgdmFsdWVPZlxuKi9cblxuXG4vLyBDcmVhdGUgYSBKU09OIG9iamVjdCBvbmx5IGlmIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LiBXZSBjcmVhdGUgdGhlXG4vLyBtZXRob2RzIGluIGEgY2xvc3VyZSB0byBhdm9pZCBjcmVhdGluZyBnbG9iYWwgdmFyaWFibGVzLlxuXG52YXIgSlNPTiA9IG1vZHVsZS5leHBvcnRzO1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGZ1bmN0aW9uIGYobikge1xuICAgICAgICAvLyBGb3JtYXQgaW50ZWdlcnMgdG8gaGF2ZSBhdCBsZWFzdCB0d28gZGlnaXRzLlxuICAgICAgICByZXR1cm4gbiA8IDEwID8gJzAnICsgbiA6IG47XG4gICAgfVxuXG4gICAgdmFyIGN4ID0gL1tcXHUwMDAwXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csXG4gICAgICAgIGVzY2FwYWJsZSA9IC9bXFxcXFxcXCJcXHgwMC1cXHgxZlxceDdmLVxceDlmXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csXG4gICAgICAgIGdhcCxcbiAgICAgICAgaW5kZW50LFxuICAgICAgICBtZXRhID0geyAgICAvLyB0YWJsZSBvZiBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9uc1xuICAgICAgICAgICAgJ1xcYic6ICdcXFxcYicsXG4gICAgICAgICAgICAnXFx0JzogJ1xcXFx0JyxcbiAgICAgICAgICAgICdcXG4nOiAnXFxcXG4nLFxuICAgICAgICAgICAgJ1xcZic6ICdcXFxcZicsXG4gICAgICAgICAgICAnXFxyJzogJ1xcXFxyJyxcbiAgICAgICAgICAgICdcIicgOiAnXFxcXFwiJyxcbiAgICAgICAgICAgICdcXFxcJzogJ1xcXFxcXFxcJ1xuICAgICAgICB9LFxuICAgICAgICByZXA7XG5cblxuICAgIGZ1bmN0aW9uIHF1b3RlKHN0cmluZykge1xuXG4vLyBJZiB0aGUgc3RyaW5nIGNvbnRhaW5zIG5vIGNvbnRyb2wgY2hhcmFjdGVycywgbm8gcXVvdGUgY2hhcmFjdGVycywgYW5kIG5vXG4vLyBiYWNrc2xhc2ggY2hhcmFjdGVycywgdGhlbiB3ZSBjYW4gc2FmZWx5IHNsYXAgc29tZSBxdW90ZXMgYXJvdW5kIGl0LlxuLy8gT3RoZXJ3aXNlIHdlIG11c3QgYWxzbyByZXBsYWNlIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVycyB3aXRoIHNhZmUgZXNjYXBlXG4vLyBzZXF1ZW5jZXMuXG5cbiAgICAgICAgZXNjYXBhYmxlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIHJldHVybiBlc2NhcGFibGUudGVzdChzdHJpbmcpID8gJ1wiJyArIHN0cmluZy5yZXBsYWNlKGVzY2FwYWJsZSwgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIHZhciBjID0gbWV0YVthXTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYyA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICA/IGNcbiAgICAgICAgICAgICAgICA6ICdcXFxcdScgKyAoJzAwMDAnICsgYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpO1xuICAgICAgICB9KSArICdcIicgOiAnXCInICsgc3RyaW5nICsgJ1wiJztcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIHN0cihrZXksIGhvbGRlcikge1xuXG4vLyBQcm9kdWNlIGEgc3RyaW5nIGZyb20gaG9sZGVyW2tleV0uXG5cbiAgICAgICAgdmFyIGksICAgICAgICAgIC8vIFRoZSBsb29wIGNvdW50ZXIuXG4gICAgICAgICAgICBrLCAgICAgICAgICAvLyBUaGUgbWVtYmVyIGtleS5cbiAgICAgICAgICAgIHYsICAgICAgICAgIC8vIFRoZSBtZW1iZXIgdmFsdWUuXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICBtaW5kID0gZ2FwLFxuICAgICAgICAgICAgcGFydGlhbCxcbiAgICAgICAgICAgIHZhbHVlID0gaG9sZGVyW2tleV0sXG4gICAgICAgICAgICBpc0JpZ051bWJlciA9IHZhbHVlICE9IG51bGwgJiYgKHZhbHVlIGluc3RhbmNlb2YgQmlnTnVtYmVyIHx8IEJpZ051bWJlci5pc0JpZ051bWJlcih2YWx1ZSkpO1xuXG4vLyBJZiB0aGUgdmFsdWUgaGFzIGEgdG9KU09OIG1ldGhvZCwgY2FsbCBpdCB0byBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS5cblxuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKGtleSk7XG4gICAgICAgIH1cblxuLy8gSWYgd2Ugd2VyZSBjYWxsZWQgd2l0aCBhIHJlcGxhY2VyIGZ1bmN0aW9uLCB0aGVuIGNhbGwgdGhlIHJlcGxhY2VyIHRvXG4vLyBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS5cblxuICAgICAgICBpZiAodHlwZW9mIHJlcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUgPSByZXAuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpO1xuICAgICAgICB9XG5cbi8vIFdoYXQgaGFwcGVucyBuZXh0IGRlcGVuZHMgb24gdGhlIHZhbHVlJ3MgdHlwZS5cblxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgaWYgKGlzQmlnTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcXVvdGUodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ251bWJlcic6XG5cbi8vIEpTT04gbnVtYmVycyBtdXN0IGJlIGZpbml0ZS4gRW5jb2RlIG5vbi1maW5pdGUgbnVtYmVycyBhcyBudWxsLlxuXG4gICAgICAgICAgICByZXR1cm4gaXNGaW5pdGUodmFsdWUpID8gU3RyaW5nKHZhbHVlKSA6ICdudWxsJztcblxuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgY2FzZSAnbnVsbCc6XG4gICAgICAgIGNhc2UgJ2JpZ2ludCc6XG5cbi8vIElmIHRoZSB2YWx1ZSBpcyBhIGJvb2xlYW4gb3IgbnVsbCwgY29udmVydCBpdCB0byBhIHN0cmluZy4gTm90ZTpcbi8vIHR5cGVvZiBudWxsIGRvZXMgbm90IHByb2R1Y2UgJ251bGwnLiBUaGUgY2FzZSBpcyBpbmNsdWRlZCBoZXJlIGluXG4vLyB0aGUgcmVtb3RlIGNoYW5jZSB0aGF0IHRoaXMgZ2V0cyBmaXhlZCBzb21lZGF5LlxuXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcblxuLy8gSWYgdGhlIHR5cGUgaXMgJ29iamVjdCcsIHdlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBhbiBvYmplY3Qgb3IgYW4gYXJyYXkgb3Jcbi8vIG51bGwuXG5cbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcblxuLy8gRHVlIHRvIGEgc3BlY2lmaWNhdGlvbiBibHVuZGVyIGluIEVDTUFTY3JpcHQsIHR5cGVvZiBudWxsIGlzICdvYmplY3QnLFxuLy8gc28gd2F0Y2ggb3V0IGZvciB0aGF0IGNhc2UuXG5cbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgICAgICAgICAgfVxuXG4vLyBNYWtlIGFuIGFycmF5IHRvIGhvbGQgdGhlIHBhcnRpYWwgcmVzdWx0cyBvZiBzdHJpbmdpZnlpbmcgdGhpcyBvYmplY3QgdmFsdWUuXG5cbiAgICAgICAgICAgIGdhcCArPSBpbmRlbnQ7XG4gICAgICAgICAgICBwYXJ0aWFsID0gW107XG5cbi8vIElzIHRoZSB2YWx1ZSBhbiBhcnJheT9cblxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nKSB7XG5cbi8vIFRoZSB2YWx1ZSBpcyBhbiBhcnJheS4gU3RyaW5naWZ5IGV2ZXJ5IGVsZW1lbnQuIFVzZSBudWxsIGFzIGEgcGxhY2Vob2xkZXJcbi8vIGZvciBub24tSlNPTiB2YWx1ZXMuXG5cbiAgICAgICAgICAgICAgICBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRpYWxbaV0gPSBzdHIoaSwgdmFsdWUpIHx8ICdudWxsJztcbiAgICAgICAgICAgICAgICB9XG5cbi8vIEpvaW4gYWxsIG9mIHRoZSBlbGVtZW50cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLCBhbmQgd3JhcCB0aGVtIGluXG4vLyBicmFja2V0cy5cblxuICAgICAgICAgICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/ICdbXSdcbiAgICAgICAgICAgICAgICAgICAgOiBnYXBcbiAgICAgICAgICAgICAgICAgICAgPyAnW1xcbicgKyBnYXAgKyBwYXJ0aWFsLmpvaW4oJyxcXG4nICsgZ2FwKSArICdcXG4nICsgbWluZCArICddJ1xuICAgICAgICAgICAgICAgICAgICA6ICdbJyArIHBhcnRpYWwuam9pbignLCcpICsgJ10nO1xuICAgICAgICAgICAgICAgIGdhcCA9IG1pbmQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9XG5cbi8vIElmIHRoZSByZXBsYWNlciBpcyBhbiBhcnJheSwgdXNlIGl0IHRvIHNlbGVjdCB0aGUgbWVtYmVycyB0byBiZSBzdHJpbmdpZmllZC5cblxuICAgICAgICAgICAgaWYgKHJlcCAmJiB0eXBlb2YgcmVwID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHJlcC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVwW2ldID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgayA9IHJlcFtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbi8vIE90aGVyd2lzZSwgaXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUga2V5cyBpbiB0aGUgb2JqZWN0LlxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IHN0cihrLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4vLyBKb2luIGFsbCBvZiB0aGUgbWVtYmVyIHRleHRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsXG4vLyBhbmQgd3JhcCB0aGVtIGluIGJyYWNlcy5cblxuICAgICAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgPyAne30nXG4gICAgICAgICAgICAgICAgOiBnYXBcbiAgICAgICAgICAgICAgICA/ICd7XFxuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxcbicgKyBnYXApICsgJ1xcbicgKyBtaW5kICsgJ30nXG4gICAgICAgICAgICAgICAgOiAneycgKyBwYXJ0aWFsLmpvaW4oJywnKSArICd9JztcbiAgICAgICAgICAgIGdhcCA9IG1pbmQ7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuICAgIH1cblxuLy8gSWYgdGhlIEpTT04gb2JqZWN0IGRvZXMgbm90IHlldCBoYXZlIGEgc3RyaW5naWZ5IG1ldGhvZCwgZ2l2ZSBpdCBvbmUuXG5cbiAgICBpZiAodHlwZW9mIEpTT04uc3RyaW5naWZ5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5ID0gZnVuY3Rpb24gKHZhbHVlLCByZXBsYWNlciwgc3BhY2UpIHtcblxuLy8gVGhlIHN0cmluZ2lmeSBtZXRob2QgdGFrZXMgYSB2YWx1ZSBhbmQgYW4gb3B0aW9uYWwgcmVwbGFjZXIsIGFuZCBhbiBvcHRpb25hbFxuLy8gc3BhY2UgcGFyYW1ldGVyLCBhbmQgcmV0dXJucyBhIEpTT04gdGV4dC4gVGhlIHJlcGxhY2VyIGNhbiBiZSBhIGZ1bmN0aW9uXG4vLyB0aGF0IGNhbiByZXBsYWNlIHZhbHVlcywgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IHdpbGwgc2VsZWN0IHRoZSBrZXlzLlxuLy8gQSBkZWZhdWx0IHJlcGxhY2VyIG1ldGhvZCBjYW4gYmUgcHJvdmlkZWQuIFVzZSBvZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGNhblxuLy8gcHJvZHVjZSB0ZXh0IHRoYXQgaXMgbW9yZSBlYXNpbHkgcmVhZGFibGUuXG5cbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZ2FwID0gJyc7XG4gICAgICAgICAgICBpbmRlbnQgPSAnJztcblxuLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG51bWJlciwgbWFrZSBhbiBpbmRlbnQgc3RyaW5nIGNvbnRhaW5pbmcgdGhhdFxuLy8gbWFueSBzcGFjZXMuXG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwYWNlOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50ICs9ICcgJztcbiAgICAgICAgICAgICAgICB9XG5cbi8vIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBzdHJpbmcsIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5kZW50IHN0cmluZy5cblxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5kZW50ID0gc3BhY2U7XG4gICAgICAgICAgICB9XG5cbi8vIElmIHRoZXJlIGlzIGEgcmVwbGFjZXIsIGl0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBhcnJheS5cbi8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3IuXG5cbiAgICAgICAgICAgIHJlcCA9IHJlcGxhY2VyO1xuICAgICAgICAgICAgaWYgKHJlcGxhY2VyICYmIHR5cGVvZiByZXBsYWNlciAhPT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIHJlcGxhY2VyICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVwbGFjZXIubGVuZ3RoICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pTT04uc3RyaW5naWZ5Jyk7XG4gICAgICAgICAgICB9XG5cbi8vIE1ha2UgYSBmYWtlIHJvb3Qgb2JqZWN0IGNvbnRhaW5pbmcgb3VyIHZhbHVlIHVuZGVyIHRoZSBrZXkgb2YgJycuXG4vLyBSZXR1cm4gdGhlIHJlc3VsdCBvZiBzdHJpbmdpZnlpbmcgdGhlIHZhbHVlLlxuXG4gICAgICAgICAgICByZXR1cm4gc3RyKCcnLCB7Jyc6IHZhbHVlfSk7XG4gICAgICAgIH07XG4gICAgfVxufSgpKTtcbiIsIihmdW5jdGlvbiAobmFtZSwgY29udGV4dCwgZGVmaW5pdGlvbikge1xuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIGRlZmluZShkZWZpbml0aW9uKTtcbiAgZWxzZSBjb250ZXh0W25hbWVdID0gZGVmaW5pdGlvbigpO1xufSkoJ3VybGpvaW4nLCB0aGlzLCBmdW5jdGlvbiAoKSB7XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplIChzdHJBcnJheSkge1xuICAgIHZhciByZXN1bHRBcnJheSA9IFtdO1xuICAgIGlmIChzdHJBcnJheS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG5cbiAgICBpZiAodHlwZW9mIHN0ckFycmF5WzBdICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBzdHJBcnJheVswXSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGZpcnN0IHBhcnQgaXMgYSBwbGFpbiBwcm90b2NvbCwgd2UgY29tYmluZSBpdCB3aXRoIHRoZSBuZXh0IHBhcnQuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eW14vOl0rOlxcLyokLykgJiYgc3RyQXJyYXkubGVuZ3RoID4gMSkge1xuICAgICAgdmFyIGZpcnN0ID0gc3RyQXJyYXkuc2hpZnQoKTtcbiAgICAgIHN0ckFycmF5WzBdID0gZmlyc3QgKyBzdHJBcnJheVswXTtcbiAgICB9XG5cbiAgICAvLyBUaGVyZSBtdXN0IGJlIHR3byBvciB0aHJlZSBzbGFzaGVzIGluIHRoZSBmaWxlIHByb3RvY29sLCB0d28gc2xhc2hlcyBpbiBhbnl0aGluZyBlbHNlLlxuICAgIGlmIChzdHJBcnJheVswXS5tYXRjaCgvXmZpbGU6XFwvXFwvXFwvLykpIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8vJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8nKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gc3RyQXJyYXlbaV07XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIGNvbXBvbmVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wb25lbnQgPT09ICcnKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgc3RhcnRpbmcgc2xhc2hlcyBmb3IgZWFjaCBjb21wb25lbnQgYnV0IHRoZSBmaXJzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL15bXFwvXSsvLCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoaSA8IHN0ckFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIGVuZGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGxhc3QuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIHRoZSBsYXN0IGNvbXBvbmVudCB3ZSB3aWxsIGNvbWJpbmUgbXVsdGlwbGUgc2xhc2hlcyB0byBhIHNpbmdsZSBvbmUuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJy8nKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0QXJyYXkucHVzaChjb21wb25lbnQpO1xuXG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IHJlc3VsdEFycmF5LmpvaW4oJy8nKTtcbiAgICAvLyBFYWNoIGlucHV0IGNvbXBvbmVudCBpcyBub3cgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNsYXNoIGV4Y2VwdCB0aGUgcG9zc2libGUgZmlyc3QgcGxhaW4gcHJvdG9jb2wgcGFydC5cblxuICAgIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBiZWZvcmUgcGFyYW1ldGVycyBvciBoYXNoXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcLyhcXD98JnwjW14hXSkvZywgJyQxJyk7XG5cbiAgICAvLyByZXBsYWNlID8gaW4gcGFyYW1ldGVycyB3aXRoICZcbiAgICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJz8nKTtcbiAgICBzdHIgPSBwYXJ0cy5zaGlmdCgpICsgKHBhcnRzLmxlbmd0aCA+IDAgPyAnPyc6ICcnKSArIHBhcnRzLmpvaW4oJyYnKTtcblxuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbnB1dDtcblxuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgaW5wdXQgPSBhcmd1bWVudHNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0ID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemUoaW5wdXQpO1xuICB9O1xuXG59KTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODMyMSk7XG4iXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsInV0aWxzIiwic2V0dGxlIiwiY29va2llcyIsImJ1aWxkVVJMIiwiYnVpbGRGdWxsUGF0aCIsInBhcnNlSGVhZGVycyIsImlzVVJMU2FtZU9yaWdpbiIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwiQXhpb3NFcnJvciIsIkNhbmNlbGVkRXJyb3IiLCJwYXJzZVByb3RvY29sIiwiY29uZmlnIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbkNhbmNlbGVkIiwicmVxdWVzdERhdGEiLCJkYXRhIiwicmVxdWVzdEhlYWRlcnMiLCJoZWFkZXJzIiwicmVzcG9uc2VUeXBlIiwiZG9uZSIsImNhbmNlbFRva2VuIiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaXNGb3JtRGF0YSIsImlzU3RhbmRhcmRCcm93c2VyRW52IiwicmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0IiwiYXV0aCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkF1dGhvcml6YXRpb24iLCJidG9hIiwiZnVsbFBhdGgiLCJiYXNlVVJMIiwidXJsIiwib25sb2FkZW5kIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2UiLCJyZXNwb25zZVRleHQiLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwidmFsdWUiLCJlcnIiLCJvcGVuIiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJwYXJhbXMiLCJwYXJhbXNTZXJpYWxpemVyIiwidGltZW91dCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsImluZGV4T2YiLCJzZXRUaW1lb3V0Iiwib25hYm9ydCIsIkVDT05OQUJPUlRFRCIsIm9uZXJyb3IiLCJFUlJfTkVUV09SSyIsIm9udGltZW91dCIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJ0cmFuc2l0aW9uYWwiLCJjbGFyaWZ5VGltZW91dEVycm9yIiwiRVRJTUVET1VUIiwieHNyZlZhbHVlIiwid2l0aENyZWRlbnRpYWxzIiwieHNyZkNvb2tpZU5hbWUiLCJyZWFkIiwidW5kZWZpbmVkIiwieHNyZkhlYWRlck5hbWUiLCJmb3JFYWNoIiwidmFsIiwia2V5IiwidG9Mb3dlckNhc2UiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiaXNVbmRlZmluZWQiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJhZGRFdmVudExpc3RlbmVyIiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZCIsImNhbmNlbCIsInR5cGUiLCJhYm9ydCIsInN1YnNjcmliZSIsImFib3J0ZWQiLCJwcm90b2NvbCIsIkVSUl9CQURfUkVRVUVTVCIsInNlbmQiLCJiaW5kIiwiQXhpb3MiLCJtZXJnZUNvbmZpZyIsImF4aW9zIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiY29udGV4dCIsImluc3RhbmNlIiwicHJvdG90eXBlIiwiZXh0ZW5kIiwiY3JlYXRlIiwiaW5zdGFuY2VDb25maWciLCJDYW5jZWxUb2tlbiIsImlzQ2FuY2VsIiwiVkVSU0lPTiIsInRvRm9ybURhdGEiLCJDYW5jZWwiLCJhbGwiLCJwcm9taXNlcyIsInNwcmVhZCIsImlzQXhpb3NFcnJvciIsImV4ZWN1dG9yIiwiVHlwZUVycm9yIiwicmVzb2x2ZVByb21pc2UiLCJ0aGlzIiwicHJvbWlzZSIsInRva2VuIiwidGhlbiIsIl9saXN0ZW5lcnMiLCJpIiwibCIsImxlbmd0aCIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJtZXNzYWdlIiwicmVhc29uIiwidGhyb3dJZlJlcXVlc3RlZCIsImxpc3RlbmVyIiwicHVzaCIsImluZGV4Iiwic3BsaWNlIiwic291cmNlIiwiYyIsImNhbGwiLCJFUlJfQ0FOQ0VMRUQiLCJuYW1lIiwiaW5oZXJpdHMiLCJfX0NBTkNFTF9fIiwiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiZGlzcGF0Y2hSZXF1ZXN0IiwidmFsaWRhdG9yIiwidmFsaWRhdG9ycyIsImRlZmF1bHRzIiwiaW50ZXJjZXB0b3JzIiwiY29uZmlnT3JVcmwiLCJhc3NlcnRPcHRpb25zIiwic2lsZW50SlNPTlBhcnNpbmciLCJib29sZWFuIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiIsInN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwicnVuV2hlbiIsInN5bmNocm9ub3VzIiwidW5zaGlmdCIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwicmVzcG9uc2VJbnRlcmNlcHRvckNoYWluIiwiY2hhaW4iLCJBcnJheSIsImFwcGx5IiwiY29uY2F0Iiwic2hpZnQiLCJuZXdDb25maWciLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJlcnJvciIsImdldFVyaSIsImdlbmVyYXRlSFRUUE1ldGhvZCIsImlzRm9ybSIsImNvZGUiLCJFcnJvciIsInRvSlNPTiIsImRlc2NyaXB0aW9uIiwibnVtYmVyIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwic3RhY2siLCJkZXNjcmlwdG9ycyIsIk9iamVjdCIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImZyb20iLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJ0b0ZsYXRPYmplY3QiLCJvYmoiLCJhc3NpZ24iLCJoYW5kbGVycyIsInVzZSIsIm9wdGlvbnMiLCJlamVjdCIsImlkIiwiZm4iLCJoIiwiaXNBYnNvbHV0ZVVSTCIsImNvbWJpbmVVUkxzIiwicmVxdWVzdGVkVVJMIiwidHJhbnNmb3JtRGF0YSIsInRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwibWVyZ2UiLCJjb21tb24iLCJhZGFwdGVyIiwidHJhbnNmb3JtUmVzcG9uc2UiLCJjb25maWcxIiwiY29uZmlnMiIsImdldE1lcmdlZFZhbHVlIiwidGFyZ2V0IiwiaXNQbGFpbk9iamVjdCIsImlzQXJyYXkiLCJzbGljZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJwcm9wIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsImtleXMiLCJjb25maWdWYWx1ZSIsInZhbGlkYXRlU3RhdHVzIiwiRVJSX0JBRF9SRVNQT05TRSIsIk1hdGgiLCJmbG9vciIsImZucyIsIm5vcm1hbGl6ZUhlYWRlck5hbWUiLCJERUZBVUxUX0NPTlRFTlRfVFlQRSIsInNldENvbnRlbnRUeXBlSWZVbnNldCIsInByb2Nlc3MiLCJ0b1N0cmluZyIsImlzQXJyYXlCdWZmZXIiLCJpc0J1ZmZlciIsImlzU3RyZWFtIiwiaXNGaWxlIiwiaXNCbG9iIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJidWZmZXIiLCJpc1VSTFNlYXJjaFBhcmFtcyIsImlzRmlsZUxpc3QiLCJpc09iamVjdFBheWxvYWQiLCJpc09iamVjdCIsImNvbnRlbnRUeXBlIiwiX0Zvcm1EYXRhIiwiZW52IiwiRm9ybURhdGEiLCJyYXdWYWx1ZSIsInBhcnNlciIsImVuY29kZXIiLCJpc1N0cmluZyIsIkpTT04iLCJwYXJzZSIsInRyaW0iLCJlIiwic3RyaW5naWZ5Iiwic3RyaW5naWZ5U2FmZWx5Iiwic3RyaWN0SlNPTlBhcnNpbmciLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsInRoaXNBcmciLCJhcmdzIiwiYXJndW1lbnRzIiwiZW5jb2RlIiwicmVwbGFjZSIsInNlcmlhbGl6ZWRQYXJhbXMiLCJwYXJ0cyIsInYiLCJpc0RhdGUiLCJ0b0lTT1N0cmluZyIsImpvaW4iLCJoYXNobWFya0luZGV4IiwicmVsYXRpdmVVUkwiLCJ3cml0ZSIsImV4cGlyZXMiLCJwYXRoIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwiaXNOdW1iZXIiLCJEYXRlIiwidG9HTVRTdHJpbmciLCJkb2N1bWVudCIsIm1hdGNoIiwiUmVnRXhwIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVtb3ZlIiwibm93IiwidGVzdCIsInBheWxvYWQiLCJvcmlnaW5VUkwiLCJtc2llIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJjcmVhdGVFbGVtZW50IiwicmVzb2x2ZVVSTCIsImhyZWYiLCJzZXRBdHRyaWJ1dGUiLCJob3N0Iiwic2VhcmNoIiwiaGFzaCIsImhvc3RuYW1lIiwicG9ydCIsInBhdGhuYW1lIiwiY2hhckF0Iiwid2luZG93IiwibG9jYXRpb24iLCJyZXF1ZXN0VVJMIiwicGFyc2VkIiwibm9ybWFsaXplZE5hbWUiLCJpZ25vcmVEdXBsaWNhdGVPZiIsInNwbGl0IiwibGluZSIsInN1YnN0ciIsImV4ZWMiLCJjYWxsYmFjayIsImFyciIsImZvcm1EYXRhIiwiY29udmVydFZhbHVlIiwiaXNUeXBlZEFycmF5IiwiQmxvYiIsIkJ1ZmZlciIsImJ1aWxkIiwicGFyZW50S2V5IiwiZnVsbEtleSIsImVuZHNXaXRoIiwidG9BcnJheSIsImVsIiwiYXBwZW5kIiwicG9wIiwidGhpbmciLCJkZXByZWNhdGVkV2FybmluZ3MiLCJ2ZXJzaW9uIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiRVJSX0RFUFJFQ0FURUQiLCJjb25zb2xlIiwid2FybiIsInNjaGVtYSIsImFsbG93VW5rbm93biIsIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwicmVzdWx0IiwiRVJSX0JBRF9PUFRJT04iLCJjYWNoZSIsImtpbmRPZiIsInN0ciIsImtpbmRPZlRlc3QiLCJnZXRQcm90b3R5cGVPZiIsImlzRnVuY3Rpb24iLCJoYXNPd25Qcm9wZXJ0eSIsIlR5cGVkQXJyYXkiLCJVaW50OEFycmF5IiwiY29uc3RydWN0b3IiLCJwYXR0ZXJuIiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJwaXBlIiwicHJvZHVjdCIsImFzc2lnblZhbHVlIiwiYSIsImIiLCJzdHJpcEJPTSIsImNvbnRlbnQiLCJjaGFyQ29kZUF0Iiwic3VwZXJDb25zdHJ1Y3RvciIsInByb3BzIiwic291cmNlT2JqIiwiZGVzdE9iaiIsImZpbHRlciIsIm1lcmdlZCIsImdldE93blByb3BlcnR5TmFtZXMiLCJzZWFyY2hTdHJpbmciLCJwb3NpdGlvbiIsIlN0cmluZyIsImxhc3RJbmRleCIsImlzUHVyZU9iamVjdCIsImluaXQiLCJjbG9uZVBhcmFtcyIsIkNsaWVudCIsImFwaUtleSIsImFwaVNlY3JldCIsImFwaVRva2VuIiwicmVzb3VyY2UiLCJyZXF1ZXN0XzEiLCJIdHRwTWV0aG9kc18xIiwiR2V0IiwiUG9zdCIsIlB1dCIsIkRlbGV0ZSIsInBhY2thZ2VKU09OIiwic2V0Q29uZmlnIiwic2V0T3B0aW9ucyIsInRva2VuQ29ubmVjdFN0cmF0ZWd5IiwiYmFzaWNDb25uZWN0U3RyYXRlZ3kiLCJjbG9uZWRQYXJhbXMiLCJfX2Fzc2lnbiIsInByb3h5IiwiY3VzdG9tQ29uZmlnIiwic2V0VmFsdWVJZk5vdE5pbCIsIm91dHB1dCIsImZyZWV6ZSIsInBhY2thZ2VfanNvbl8xIiwiaW5kZXhfMSIsImluZGV4XzIiLCJfX2V4dGVuZHMiLCJNYWlsamV0IiwiX19leHBvcnRTdGFyIiwiSHR0cE1ldGhvZHMiLCJKU09OYiIsInN0b3JlQXNTdHJpbmciLCJjbGllbnQiLCJjbGllbnRfMSIsInZhbHVlcyIsImluY2x1ZGVzIiwic3ViUGF0aCIsImJ1aWxkU3ViUGF0aCIsImFjdGlvblBhdGgiLCJSZXF1ZXN0IiwiZ2V0UGFja2FnZVZlcnNpb24iLCJnZXRBUElUb2tlbiIsImdldEFQSUtleSIsImdldEFQSVNlY3JldCIsImNsaWVudENvbmZpZyIsImdldENvbmZpZyIsIl9hIiwiX2IiLCJpc0NvbnRhY3RMaXN0V2l0aENTViIsImlzQmF0Y2hKb2JXaXRoQ1NWIiwiaXNTZW5kUmVzb3VyY2UiLCJyZXNvdXJjZUNvbnRhaW5TTVMiLCJyZXF1ZXN0Q29uZmlnIiwiZ2V0UmVxdWVzdEJvZHkiLCJnZXRVc2VyQWdlbnQiLCJnZXRDb250ZW50VHlwZSIsInJlc3BvbnNlRGF0YSIsImRhdGFJc1N0cmluZyIsImlzSlNPTlJlcXVlc3RlZCIsInBhcnNlVG9KU09OYiIsImlzQnJvd3NlciIsImNyZWRlbnRpYWxzIiwiZ2V0Q3JlZGVudGlhbHMiLCJjbGllbnRPcHRpb25zIiwiZ2V0T3B0aW9ucyIsImJhc2VVcmwiLCJwZXJmb3JtQVBJQ2FsbCIsImJ1aWxkRnVsbFVybCIsInNldEJhc2VVUkwiLCJib2R5IiwibWFrZVJlcXVlc3QiLCJfZyIsImF4aW9zXzEiLCJlcnJfMSIsIl9mIiwic3RhdHVzXzEiLCJzdGF0dXNDb2RlIiwiZXJyb3JNZXNzYWdlIiwiRXJyb3JNZXNzYWdlIiwib3JpZ2luYWxNZXNzYWdlIiwiZnVsbE1lc3NhZ2UiLCJNZXNzYWdlcyIsIl9jIiwiRXJyb3JzIiwiX2QiLCJfZSIsIkVycm9yQ29kZSIsIkVycm9ySWRlbnRpZmllciIsIkVycm9yUmVsYXRlZFRvIiwidGV4dCIsIkRyYWZ0Q2FtcGFpZ24iLCJFZGl0TW9kZSIsIkNhbXBhaWduRHJhZnRTdGF0dXMiLCJDYW1wYWlnbkRyYWZ0U2VuZGluZ1N0YXR1cyIsIlNlbnRDYW1wYWlnbiIsIkNhbXBhaWduVHlwZSIsIkNvbW1vbiIsIlBlcmlvZCIsIkJ1bGtDb250YWN0TWFuYWdlbWVudCIsIk1hbmFnZUNvbnRhY3RzQWN0aW9uIiwiSW1wb3J0TGlzdEFjdGlvbiIsIkltcG9ydENTVk1ldGhvZCIsIkNTVkltcG9ydFN0YXR1cyIsIkpvYlN0YXR1cyIsIkNvbnRhY3RQcm9wZXJ0aWVzIiwiRGF0YVR5cGUiLCJOYW1lU3BhY2UiLCJNZXNzYWdlIiwiTWVzc2FnZVN0YXRlIiwiRnJvbVR5cGUiLCJNZXNzYWdlU3RhdHVzIiwiQ3VycmVudE1lc3NhZ2VTdGF0dXMiLCJFdmVudFR5cGUiLCJTZWdtZW50YXRpb24iLCJTZWdtZW50U3RhdHVzIiwiU2VuZEVtYWlsVjNfMSIsIlRyYWNrT3BlbnMiLCJUcmFja0NsaWNrcyIsIlJlc3BvbnNlU3RhdHVzIiwiU2VuZGVyIiwiRW1haWxUeXBlIiwiU2VuZGVyU3RhdHVzIiwiRE5TIiwiREtJTUNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cyIsIkRLSU1Db25maWd1cmF0aW9uU3RhdHVzIiwiU1BGQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzIiwiU1BGQ29uZmlndXJhdGlvblN0YXR1cyIsIkFQSUtleUNvbmZpZ3VyYXRpb24iLCJSdW5MZXZlbCIsIlN0YXRpc3RpYyIsIkNhbXBhaWduT3ZlcnZpZXdJRFR5cGUiLCJDYW1wYWlnbk92ZXJ2aWV3RWRpdE1vZGUiLCJDYW1wYWlnbk92ZXJ2aWV3RWRpdFR5cGUiLCJDb3VudGVyU291cmNlIiwiQ291bnRlclJlc29sdXRpb24iLCJDb3VudGVyVGltaW5nIiwiRW1haWxFdmVudCIsIlRlbXBsYXRlIiwiQ2F0ZWdvcmllcyIsIkNhdGVnb3JpZXNTZWxlY3Rpb25NZXRob2QiLCJPd25lclR5cGUiLCJQdXJwb3NlcyIsIlB1cnBvc2VzU2VsZWN0aW9uTWV0aG9kIiwiV2ViaG9vayIsIkV2ZW50VHlwZVZhbHVlIiwiU3RhdHVzIiwiZW51bWVyYWJsZSIsImdldCIsImlzTmlsXzEiLCJpc051bGxfMSIsImlzVW5kZWZpbmVkXzEiLCJpc1B1cmVPYmplY3RfMSIsInNldFZhbHVlSWZOb3ROaWxfMSIsInRhcmdldE9iamVjdCIsImdsb2JhbE9iamVjdCIsIkJpZ051bWJlciIsImlzTnVtZXJpYyIsIm1hdGhjZWlsIiwiY2VpbCIsIm1hdGhmbG9vciIsImJpZ251bWJlckVycm9yIiwidG9vTWFueURpZ2l0cyIsIkJBU0UiLCJMT0dfQkFTRSIsIk1BWF9TQUZFX0lOVEVHRVIiLCJQT1dTX1RFTiIsIlNRUlRfQkFTRSIsIk1BWCIsImJpdEZsb29yIiwibiIsImNvZWZmVG9TdHJpbmciLCJzIiwieiIsImoiLCJyIiwiY29tcGFyZSIsIngiLCJ5IiwieGMiLCJ5YyIsImsiLCJpbnRDaGVjayIsIm1pbiIsIm1heCIsImlzT2RkIiwidG9FeHBvbmVudGlhbCIsInRvRml4ZWRQb2ludCIsImxlbiIsInpzIiwiY2xvbmUiLCJjb25maWdPYmplY3QiLCJkaXYiLCJjb252ZXJ0QmFzZSIsInBhcnNlTnVtZXJpYyIsInBvdzJfNTMiLCJyYW5kb201M2JpdEludCIsImJhc2VQcmVmaXgiLCJkb3RBZnRlciIsImRvdEJlZm9yZSIsImlzSW5maW5pdHlPck5hTiIsIndoaXRlc3BhY2VPclBsdXMiLCJQIiwidmFsdWVPZiIsIk9ORSIsIkRFQ0lNQUxfUExBQ0VTIiwiUk9VTkRJTkdfTU9ERSIsIlRPX0VYUF9ORUciLCJUT19FWFBfUE9TIiwiTUlOX0VYUCIsIk1BWF9FWFAiLCJDUllQVE8iLCJNT0RVTE9fTU9ERSIsIlBPV19QUkVDSVNJT04iLCJGT1JNQVQiLCJwcmVmaXgiLCJncm91cFNpemUiLCJzZWNvbmRhcnlHcm91cFNpemUiLCJncm91cFNlcGFyYXRvciIsImRlY2ltYWxTZXBhcmF0b3IiLCJmcmFjdGlvbkdyb3VwU2l6ZSIsImZyYWN0aW9uR3JvdXBTZXBhcmF0b3IiLCJzdWZmaXgiLCJBTFBIQUJFVCIsImFscGhhYmV0IiwiY2FzZUNoYW5nZWQiLCJpc051bSIsIl9pc0JpZ051bWJlciIsInN1YnN0cmluZyIsInJvdW5kIiwiREVCVUciLCJmb3JtYXQiLCJybSIsImMwIiwibmUiLCJtYXhPck1pbiIsIm0iLCJub3JtYWxpc2UiLCJzZCIsImQiLCJuaSIsInJkIiwicG93czEwIiwib3V0IiwiUk9VTkRfVVAiLCJST1VORF9ET1dOIiwiUk9VTkRfQ0VJTCIsIlJPVU5EX0ZMT09SIiwiUk9VTkRfSEFMRl9VUCIsIlJPVU5EX0hBTEZfRE9XTiIsIlJPVU5EX0hBTEZfRVZFTiIsIlJPVU5EX0hBTEZfQ0VJTCIsIlJPVU5EX0hBTEZfRkxPT1IiLCJFVUNMSUQiLCJzZXQiLCJwIiwiY3J5cHRvIiwiZ2V0UmFuZG9tVmFsdWVzIiwicmFuZG9tQnl0ZXMiLCJFWFBPTkVOVElBTF9BVCIsIlJBTkdFIiwiaXNCaWdOdW1iZXIiLCJtYXhpbXVtIiwibHQiLCJtaW5pbXVtIiwiZ3QiLCJyYW5kb20iLCJkcCIsInJhbmQiLCJVaW50MzJBcnJheSIsImNvcHkiLCJzdW0iLCJwbHVzIiwiZGVjaW1hbCIsInRvQmFzZU91dCIsImJhc2VJbiIsImJhc2VPdXQiLCJhcnJMIiwicmV2ZXJzZSIsInNpZ24iLCJjYWxsZXJJc1RvU3RyaW5nIiwicG93IiwibXVsdGlwbHkiLCJiYXNlIiwidGVtcCIsInhsbyIsInhoaSIsImNhcnJ5Iiwia2xvIiwia2hpIiwiYUwiLCJiTCIsImNtcCIsInN1YnRyYWN0IiwibW9yZSIsInByb2QiLCJwcm9kTCIsInEiLCJxYyIsInJlbSIsInJlbUwiLCJyZW0wIiwieGkiLCJ4TCIsInljMCIsInlMIiwieXoiLCJOYU4iLCJpc05hTiIsInAxIiwicDIiLCJhYnNvbHV0ZVZhbHVlIiwiYWJzIiwiY29tcGFyZWRUbyIsImRlY2ltYWxQbGFjZXMiLCJkaXZpZGVkQnkiLCJkaXZpZGVkVG9JbnRlZ2VyQnkiLCJpZGl2IiwiZXhwb25lbnRpYXRlZEJ5IiwiaGFsZiIsImlzTW9kRXhwIiwibklzQmlnIiwibklzTmVnIiwibklzT2RkIiwiaXNJbnRlZ2VyIiwibW9kIiwidGltZXMiLCJpbnRlZ2VyVmFsdWUiLCJpc0VxdWFsVG8iLCJlcSIsImlzRmluaXRlIiwiaXNHcmVhdGVyVGhhbiIsImlzR3JlYXRlclRoYW5PckVxdWFsVG8iLCJndGUiLCJpc0xlc3NUaGFuIiwiaXNMZXNzVGhhbk9yRXF1YWxUbyIsImx0ZSIsImlzTmVnYXRpdmUiLCJpc1Bvc2l0aXZlIiwiaXNaZXJvIiwibWludXMiLCJ0IiwieExUeSIsInhlIiwieWUiLCJtb2R1bG8iLCJtdWx0aXBsaWVkQnkiLCJ4Y0wiLCJ5Y0wiLCJ5bG8iLCJ5aGkiLCJ6YyIsInNxcnRCYXNlIiwibmVnYXRlZCIsInByZWNpc2lvbiIsInNoaWZ0ZWRCeSIsInNxdWFyZVJvb3QiLCJzcXJ0IiwicmVwIiwidG9GaXhlZCIsInRvRm9ybWF0IiwiZzEiLCJnMiIsImludFBhcnQiLCJmcmFjdGlvblBhcnQiLCJpc05lZyIsImludERpZ2l0cyIsInRvRnJhY3Rpb24iLCJtZCIsImQwIiwiZDEiLCJkMiIsImV4cCIsIm4wIiwibjEiLCJ0b051bWJlciIsInRvUHJlY2lzaW9uIiwianNvbl9zdHJpbmdpZnkiLCJqc29uX3BhcnNlIiwic3VzcGVjdFByb3RvUngiLCJzdXNwZWN0Q29uc3RydWN0b3JSeCIsIl9vcHRpb25zIiwic3RyaWN0IiwiYWx3YXlzUGFyc2VBc0JpZyIsInVzZU5hdGl2ZUJpZ0ludCIsInByb3RvQWN0aW9uIiwiY29uc3RydWN0b3JBY3Rpb24iLCJhdCIsImNoIiwiZXNjYXBlZSIsImYiLCJuZXh0Iiwic3RyaW5nIiwiQmlnSW50IiwiaGV4IiwidWZmZmYiLCJzdGFydEF0IiwicGFyc2VJbnQiLCJmcm9tQ2hhckNvZGUiLCJ3aGl0ZSIsIm9iamVjdCIsImFycmF5Iiwid29yZCIsInJldml2ZXIiLCJ3YWxrIiwiaG9sZGVyIiwiZ2FwIiwiaW5kZW50IiwiZXNjYXBhYmxlIiwibWV0YSIsInF1b3RlIiwicGFydGlhbCIsIm1pbmQiLCJyZXBsYWNlciIsInNwYWNlIiwibm9ybWFsaXplIiwic3RyQXJyYXkiLCJyZXN1bHRBcnJheSIsImZpcnN0IiwiY29tcG9uZW50IiwiZGVmaW5pdGlvbiIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19leHBvcnRzX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file