=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|t}function h(t,e){if(p.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||Z(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const n=t.length,i=arguments.length>2&&!0===arguments[2];if(!i&&0===n)return 0;let r=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return Q(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Y(t).length;default:if(r)return i?-1:Q(t).length;e=(""+e).toLowerCase(),r=!0}}function g(t,e,n){let i=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return M(this,e,n);case"utf8":case"utf-8":return k(this,e,n);case"ascii":return A(this,e,n);case"latin1":case"binary":return T(this,e,n);case"base64":return j(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,e,n);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}function v(t,e,n){const i=t[e];t[e]=t[n],t[n]=i}function _(t,e,n,i,r){if(0===t.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),J(n=+n)&&(n=r?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(r)return-1;n=t.length-1}else if(n<0){if(!r)return-1;n=0}if("string"==typeof e&&(e=p.from(e,i)),p.isBuffer(e))return 0===e.length?-1:b(t,e,n,i,r);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):b(t,[e],n,i,r);throw new TypeError("val must be string, number or Buffer")}function b(t,e,n,i,r){let o,a=1,s=t.length,p=e.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(t.length<2||e.length<2)return-1;a=2,s/=2,p/=2,n/=2}function c(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(r){let i=-1;for(o=n;os&&(n=s-p),o=n;o>=0;o--){let n=!0;for(let i=0;ir&&(i=r):i=r;const o=e.length;let a;for(i>o/2&&(i=o/2),a=0;a>8,r=n%256,o.push(r),o.push(i);return o}(e,t.length-n),t,n,i)}function j(t,e,n){return 0===e&&n===t.length?i.fromByteArray(t):i.fromByteArray(t.slice(e,n))}function k(t,e,n){n=Math.min(t.length,n);const i=[];let r=e;for(;r239?4:e>223?3:e>191?2:1;if(r+a<=n){let n,i,s,p;switch(a){case 1:e<128&&(o=e);break;case 2:n=t[r+1],128==(192&n)&&(p=(31&e)<<6|63&n,p>127&&(o=p));break;case 3:n=t[r+1],i=t[r+2],128==(192&n)&&128==(192&i)&&(p=(15&e)<<12|(63&n)<<6|63&i,p>2047&&(p<55296||p>57343)&&(o=p));break;case 4:n=t[r+1],i=t[r+2],s=t[r+3],128==(192&n)&&128==(192&i)&&128==(192&s)&&(p=(15&e)<<18|(63&n)<<12|(63&i)<<6|63&s,p>65535&&p<1114112&&(o=p))}}null===o?(o=65533,a=1):o>65535&&(o-=65536,i.push(o>>>10&1023|55296),o=56320|1023&o),i.push(o),r+=a}return function(t){const e=t.length;if(e<=I)return String.fromCharCode.apply(String,t);let n="",i=0;for(;ii.length?(p.isBuffer(e)||(e=p.from(e)),e.copy(i,r)):Uint8Array.prototype.set.call(i,e,r);else{if(!p.isBuffer(e))throw new TypeError('"list" argument must be an Array of Buffers');e.copy(i,r)}r+=e.length}return i},p.byteLength=h,p.prototype._isBuffer=!0,p.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let e=0;en&&(t+=" ... "),""},o&&(p.prototype[o]=p.prototype.inspect),p.prototype.compare=function(t,e,n,i,r){if(Z(t,Uint8Array)&&(t=p.from(t,t.offset,t.byteLength)),!p.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===i&&(i=0),void 0===r&&(r=this.length),e<0||n>t.length||i<0||r>this.length)throw new RangeError("out of range index");if(i>=r&&e>=n)return 0;if(i>=r)return-1;if(e>=n)return 1;if(this===t)return 0;let o=(r>>>=0)-(i>>>=0),a=(n>>>=0)-(e>>>=0);const s=Math.min(o,a),c=this.slice(i,r),l=t.slice(e,n);for(let t=0;t>>=0,isFinite(n)?(n>>>=0,void 0===i&&(i="utf8")):(i=n,n=void 0)}const r=this.length-e;if((void 0===n||n>r)&&(n=r),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");let o=!1;for(;;)switch(i){case"hex":return y(this,t,e,n);case"utf8":case"utf-8":return x(this,t,e,n);case"ascii":case"latin1":case"binary":return w(this,t,e,n);case"base64":return O(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0}},p.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const I=4096;function A(t,e,n){let i="";n=Math.min(t.length,n);for(let r=e;ri)&&(n=i);let r="";for(let i=e;in)throw new RangeError("Trying to access beyond buffer length")}function P(t,e,n,i,r,o){if(!p.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>r||et.length)throw new RangeError("Index out of range")}function C(t,e,n,i,r){F(e,i,r,t,n,7);let o=Number(e&BigInt(4294967295));t[n++]=o,o>>=8,t[n++]=o,o>>=8,t[n++]=o,o>>=8,t[n++]=o;let a=Number(e>>BigInt(32)&BigInt(4294967295));return t[n++]=a,a>>=8,t[n++]=a,a>>=8,t[n++]=a,a>>=8,t[n++]=a,n}function B(t,e,n,i,r){F(e,i,r,t,n,7);let o=Number(e&BigInt(4294967295));t[n+7]=o,o>>=8,t[n+6]=o,o>>=8,t[n+5]=o,o>>=8,t[n+4]=o;let a=Number(e>>BigInt(32)&BigInt(4294967295));return t[n+3]=a,a>>=8,t[n+2]=a,a>>=8,t[n+1]=a,a>>=8,t[n]=a,n+8}function D(t,e,n,i,r,o){if(n+i>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function $(t,e,n,i,o){return e=+e,n>>>=0,o||D(t,0,n,4),r.write(t,e,n,i,23,4),n+4}function L(t,e,n,i,o){return e=+e,n>>>=0,o||D(t,0,n,8),r.write(t,e,n,i,52,8),n+8}p.prototype.slice=function(t,e){const n=this.length;(t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(e=void 0===e?n:~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),e>>=0,e>>>=0,n||N(t,e,this.length);let i=this[t],r=1,o=0;for(;++o>>=0,e>>>=0,n||N(t,e,this.length);let i=this[t+--e],r=1;for(;e>0&&(r*=256);)i+=this[t+--e]*r;return i},p.prototype.readUint8=p.prototype.readUInt8=function(t,e){return t>>>=0,e||N(t,1,this.length),this[t]},p.prototype.readUint16LE=p.prototype.readUInt16LE=function(t,e){return t>>>=0,e||N(t,2,this.length),this[t]|this[t+1]<<8},p.prototype.readUint16BE=p.prototype.readUInt16BE=function(t,e){return t>>>=0,e||N(t,2,this.length),this[t]<<8|this[t+1]},p.prototype.readUint32LE=p.prototype.readUInt32LE=function(t,e){return t>>>=0,e||N(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},p.prototype.readUint32BE=p.prototype.readUInt32BE=function(t,e){return t>>>=0,e||N(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},p.prototype.readBigUInt64LE=W((function(t){q(t>>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||H(t,this.length-8);const i=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,r=this[++t]+256*this[++t]+65536*this[++t]+n*2**24;return BigInt(i)+(BigInt(r)<>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||H(t,this.length-8);const i=e*2**24+65536*this[++t]+256*this[++t]+this[++t],r=this[++t]*2**24+65536*this[++t]+256*this[++t]+n;return(BigInt(i)<>>=0,e>>>=0,n||N(t,e,this.length);let i=this[t],r=1,o=0;for(;++o=r&&(i-=Math.pow(2,8*e)),i},p.prototype.readIntBE=function(t,e,n){t>>>=0,e>>>=0,n||N(t,e,this.length);let i=e,r=1,o=this[t+--i];for(;i>0&&(r*=256);)o+=this[t+--i]*r;return r*=128,o>=r&&(o-=Math.pow(2,8*e)),o},p.prototype.readInt8=function(t,e){return t>>>=0,e||N(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},p.prototype.readInt16LE=function(t,e){t>>>=0,e||N(t,2,this.length);const n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},p.prototype.readInt16BE=function(t,e){t>>>=0,e||N(t,2,this.length);const n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},p.prototype.readInt32LE=function(t,e){return t>>>=0,e||N(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},p.prototype.readInt32BE=function(t,e){return t>>>=0,e||N(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},p.prototype.readBigInt64LE=W((function(t){q(t>>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||H(t,this.length-8);const i=this[t+4]+256*this[t+5]+65536*this[t+6]+(n<<24);return(BigInt(i)<>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||H(t,this.length-8);const i=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(i)<>>=0,e||N(t,4,this.length),r.read(this,t,!0,23,4)},p.prototype.readFloatBE=function(t,e){return t>>>=0,e||N(t,4,this.length),r.read(this,t,!1,23,4)},p.prototype.readDoubleLE=function(t,e){return t>>>=0,e||N(t,8,this.length),r.read(this,t,!0,52,8)},p.prototype.readDoubleBE=function(t,e){return t>>>=0,e||N(t,8,this.length),r.read(this,t,!1,52,8)},p.prototype.writeUintLE=p.prototype.writeUIntLE=function(t,e,n,i){t=+t,e>>>=0,n>>>=0,i||P(this,t,e,n,Math.pow(2,8*n)-1,0);let r=1,o=0;for(this[e]=255&t;++o>>=0,n>>>=0,i||P(this,t,e,n,Math.pow(2,8*n)-1,0);let r=n-1,o=1;for(this[e+r]=255&t;--r>=0&&(o*=256);)this[e+r]=t/o&255;return e+n},p.prototype.writeUint8=p.prototype.writeUInt8=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,1,255,0),this[e]=255&t,e+1},p.prototype.writeUint16LE=p.prototype.writeUInt16LE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeUint16BE=p.prototype.writeUInt16BE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeUint32LE=p.prototype.writeUInt32LE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},p.prototype.writeUint32BE=p.prototype.writeUInt32BE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigUInt64LE=W((function(t,e=0){return C(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),p.prototype.writeBigUInt64BE=W((function(t,e=0){return B(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),p.prototype.writeIntLE=function(t,e,n,i){if(t=+t,e>>>=0,!i){const i=Math.pow(2,8*n-1);P(this,t,e,n,i-1,-i)}let r=0,o=1,a=0;for(this[e]=255&t;++r>0)-a&255;return e+n},p.prototype.writeIntBE=function(t,e,n,i){if(t=+t,e>>>=0,!i){const i=Math.pow(2,8*n-1);P(this,t,e,n,i-1,-i)}let r=n-1,o=1,a=0;for(this[e+r]=255&t;--r>=0&&(o*=256);)t<0&&0===a&&0!==this[e+r+1]&&(a=1),this[e+r]=(t/o>>0)-a&255;return e+n},p.prototype.writeInt8=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},p.prototype.writeInt16LE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeInt16BE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeInt32LE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},p.prototype.writeInt32BE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigInt64LE=W((function(t,e=0){return C(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),p.prototype.writeBigInt64BE=W((function(t,e=0){return B(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),p.prototype.writeFloatLE=function(t,e,n){return $(this,t,e,!0,n)},p.prototype.writeFloatBE=function(t,e,n){return $(this,t,e,!1,n)},p.prototype.writeDoubleLE=function(t,e,n){return L(this,t,e,!0,n)},p.prototype.writeDoubleBE=function(t,e,n){return L(this,t,e,!1,n)},p.prototype.copy=function(t,e,n,i){if(!p.isBuffer(t))throw new TypeError("argument should be a Buffer");if(n||(n=0),i||0===i||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i=this.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-e>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(r=e;r=i+4;n-=3)e=`_${t.slice(n-3,n)}${e}`;return`${t.slice(0,n)}${e}`}function F(t,e,n,i,r,o){if(t>n||t3?0===e||e===BigInt(0)?`>= 0${i} and < 2${i} ** ${8*(o+1)}${i}`:`>= -(2${i} ** ${8*(o+1)-1}${i}) and < 2 ** ${8*(o+1)-1}${i}`:`>= ${e}${i} and <= ${n}${i}`,new z.ERR_OUT_OF_RANGE("value",r,t)}!function(t,e,n){q(e,"offset"),void 0!==t[e]&&void 0!==t[e+n]||H(e,t.length-(n+1))}(i,r,o)}function q(t,e){if("number"!=typeof t)throw new z.ERR_INVALID_ARG_TYPE(e,"number",t)}function H(t,e,n){if(Math.floor(t)!==t)throw q(t,n),new z.ERR_OUT_OF_RANGE(n||"offset","an integer",t);if(e<0)throw new z.ERR_BUFFER_OUT_OF_BOUNDS;throw new z.ERR_OUT_OF_RANGE(n||"offset",`>= ${n?1:0} and <= ${e}`,t)}U("ERR_BUFFER_OUT_OF_BOUNDS",(function(t){return t?`${t} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),U("ERR_INVALID_ARG_TYPE",(function(t,e){return`The "${t}" argument must be of type number. Received type ${typeof e}`}),TypeError),U("ERR_OUT_OF_RANGE",(function(t,e,n){let i=`The value of "${t}" is out of range.`,r=n;return Number.isInteger(n)&&Math.abs(n)>2**32?r=R(String(n)):"bigint"==typeof n&&(r=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(r=R(r)),r+="n"),i+=` It must be ${e}. Received ${r}`,i}),RangeError);const G=/[^+/0-9A-Za-z-_]/g;function Q(t,e){let n;e=e||1/0;const i=t.length;let r=null;const o=[];for(let a=0;a55295&&n<57344){if(!r){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===i){(e-=3)>-1&&o.push(239,191,189);continue}r=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),r=n;continue}n=65536+(r-55296<<10|n-56320)}else r&&(e-=3)>-1&&o.push(239,191,189);if(r=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function Y(t){return i.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(G,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function V(t,e,n,i){let r;for(r=0;r=e.length||r>=t.length);++r)e[r+n]=t[r];return r}function Z(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function J(t){return t!=t}const K=function(){const t="0123456789abcdef",e=new Array(256);for(let n=0;n<16;++n){const i=16*n;for(let r=0;r<16;++r)e[i+r]=t[n]+t[r]}return e}();function W(t){return"undefined"==typeof BigInt?X:t}function X(){throw new Error("BigInt not supported")}},645:(t,e)=>{e.read=function(t,e,n,i,r){var o,a,s=8*r-i-1,p=(1<>1,l=-7,u=n?r-1:0,d=n?-1:1,f=t[e+u];for(u+=d,o=f&(1<<-l)-1,f>>=-l,l+=s;l>0;o=256*o+t[e+u],u+=d,l-=8);for(a=o&(1<<-l)-1,o>>=-l,l+=i;l>0;a=256*a+t[e+u],u+=d,l-=8);if(0===o)o=1-c;else{if(o===p)return a?NaN:1/0*(f?-1:1);a+=Math.pow(2,i),o-=c}return(f?-1:1)*a*Math.pow(2,o-i)},e.write=function(t,e,n,i,r,o){var a,s,p,c=8*o-r-1,l=(1<>1,d=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,f=i?0:o-1,m=i?1:-1,h=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=l):(a=Math.floor(Math.log(e)/Math.LN2),e*(p=Math.pow(2,-a))<1&&(a--,p*=2),(e+=a+u>=1?d/p:d*Math.pow(2,1-u))*p>=2&&(a++,p/=2),a+u>=l?(s=0,a=l):a+u>=1?(s=(e*p-1)*Math.pow(2,r),a+=u):(s=e*Math.pow(2,u-1)*Math.pow(2,r),a=0));r>=8;t[n+f]=255&s,f+=m,s/=256,r-=8);for(a=a<0;t[n+f]=255&a,f+=m,a/=256,c-=8);t[n+f-m]|=128*h}},499:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._base64Decode=e._base64Encode=e._isBuffer=e.Buffer=void 0;const i=n(764);e.Buffer=i.Buffer,e._isBuffer=t=>e.Buffer.isBuffer(t),e._base64Encode=(t,n)=>e.Buffer.from(t,n).toString("base64"),e._base64Decode=t=>e.Buffer.from(t,"base64")},599:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(499),e)},413:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AlphaNum=void 0;const n=Symbol("AlphaNum");class i{static get CHARS(){return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"}[n]={value:0,sign:1};get value(){return this[n].value*this[n].sign}set value(t){const e=parseInt(Number(t))||0;this[n].sign=e<0?-1:1,this[n].value=Math.abs(e)}get indexes(){const t=i.CHARS.length,e=[];let r=this[n].value,o=0;for(;e.unshift(Math.max(r%t-o,0)),r=Math.floor(r/t);)o=1;return-1===this[n].sign&&e.unshift(-1),e}set indexes(t){const e=i.CHARS.length;try{let n=[...t],i=n.length,r=1,o=0;if(i){if(-1===n[0]){if(1===i)throw Error("The `AlphaNum` indexes array is incomplete.");n=n.slice(1),r=-1}for(let t=0;t=0&&i `'AX'`|`49`; `[-1,0,23]` => `'-AX'`|`-49`)");o=o*e+i+1}}o>=e&&(o-=1),this.value=o*r}catch(e){throw console.warn({error:e,value:t}),new TypeError(e)}}get text(){const t=i.CHARS;let e="",n=this.indexes;return-1===n[0]&&(n=n.slice(1),n.length&&(e="-")),e+=n.map((e=>t[e])).join(""),e}constructor(t=0){this.value=t}set(t){return this.value=t,this}add(t=1){return this.value+=parseInt(Number(t))||0,this}toString(){return this.text}static parse(t){const e=new i;if("object"==typeof t&&t)try{e.indexes=t}catch(t){throw new TypeError(`Failed to parse \`AlphaNum\` object value; ${t}`)}else{let n=String(t??"").trim().toUpperCase();if(!n)return e;if(/[A-Z]/.test(n)){const t=this.CHARS,i=[],r=n.split("");let o=!1;for(let e=0;e{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._animate=e.DEFAULT_DURATION=e.DEFAULT_EASING=void 0;const i=n(377),r=n(539),o=n(892);e.DEFAULT_EASING=r.Easings.easeLinear,e.DEFAULT_DURATION=1e3,e._animate=function(t,n=!1){let{update:a,before:s,after:p,easing:c=e.DEFAULT_EASING,duration:l=1e3,delay:u,delayed:d=!1,from:f,to:m,timeout:h,manual:g=!1}=t;const v=this,_="object"==typeof v&&v?v:null,b=(0,i._isFunc)(a)?a:void 0,y=(0,i._isFunc)(s)?s:void 0,x=(0,i._isFunc)(p)?p:void 0;if(!b){let e="The update callback is not defined in `_animate` options!";throw console.error(e,t),new Error(e)}const w=("string"==typeof c&&r.Easings.hasOwnProperty(c)&&(c=r.Easings[c]),"function"==typeof c?c:e.DEFAULT_EASING),O=(0,i._posInt)(l,0)??e.DEFAULT_DURATION,E=(0,i._posInt)(u,0)??0,j=Boolean(d),k=Boolean(g),I=(0,i._posInt)(h,0)??0,A=(0,i._num)(f,0),T=(0,i._num)(m,0),M=T-A;let S,N,P,C,B,D,$=0,L=0,z=0,U=0,R=0,F=-1,q=Date.now();const H=()=>{D&&clearTimeout(D),S&&(0,o.cancelAnimationFrame)(S),S=D=N=P=C=B=void 0,$=L=U=z=R=0,F=-1,q=(new Date).getTime()},G=t=>{D&&clearTimeout(D),z&&(L+=t-z,z=0);let e,n=L,i=Math.max(Date.now()-q,R+U),r=!1,o=!r;if(P&&P<0)switch(r=!0,P){case-1:e="update";break;case-2:e="begin";break;case-4:e="timeout";break;default:e="abort"}x&&x.call(_,{aborted:r,abort_method:e,complete:o,pause_duration:n,total_duration:i}),S=void 0},Q=e=>(void 0===N&&(e=>{I&&(D=setTimeout((()=>P=-4),I)),y&&!1===y.call(_,{timestamp:e,options:t,then:q})&&(P=-2)})(e),N||(N=e),R=e-N+U,P?G(e):C?(S=void 0,U=R,z=e,N=0,void(R=0)):(z&&(L+=e-z,z=0),(!$||$-+R.toFixed(2)<=.1)&&(!R&&j||(t=>{if(t===B||P)return;B=t,F+=1;let e=O?w.call(_,t,0,1,O):0,n=0;M&&(n=Math.min(e*Math.abs(M),Math.abs(M)),n=A+n*(M<0?-1:1));let i=b.call(_,{index:F,delta:e,pos:n,time:t});t>=O?P=1:!1===i&&(P=-1)})(Math.min(+R.toFixed(1),$||O)),$+=E),!P&&R>=O&&(P=1),P?G(e):void(S=(0,o.requestAnimationFrame)(Q)))),Y=(t=!1)=>(n&&console.debug(`[_animate] ${C?"resume":"play"}.`,{restart:t,is_paused:C,is_done:P,duration:O,from:A,to:T,diff:M,easing:w}),t&&H(),!P&&(C=void 0,S&&(0,o.cancelAnimationFrame)(S),S=(0,o.requestAnimationFrame)(Q),!0)),V=(t=!0)=>(t=null===t?!C:Boolean(t),n&&console.debug(`[_animate] ${t?"pause":"unpause"}.`,{toggle:t,is_paused:C,is_done:P}),!P&&(t===C?C:t?C=t:Y()));return k||Y(),{get _debug(){return n},get begun(){return void 0!==N},get paused(){return Boolean(C)},get done(){return Boolean(P)},play:Y,pause:V,resume:()=>!!C&&V(!1),restart:()=>Y(!0),cancel:()=>(H(),n&&console.debug("[_animate] cancelled."),!P),abort:()=>!P&&(P=-3,!0)}}},892:(t,e)=>{"use strict";var n;Object.defineProperty(e,"__esModule",{value:!0}),e.cancelAnimationFrame=e.requestAnimationFrame=void 0,n=(()=>{let t,e,n,i;if("undefined"!=typeof window){const n=["ms","moz","webkit","o"];t=window.requestAnimationFrame,e=window.cancelAnimationFrame;for(let i=0;i"function"==typeof e?e(r):null),i);return t=r,o}}return i=e||function(t){clearTimeout(t)},"undefined"!=typeof window&&(window.requestAnimationFrame||(window.requestAnimationFrame=n),window.cancelAnimationFrame||(window.cancelAnimationFrame=i)),[n,i]})(),e.requestAnimationFrame=n[0],e.cancelAnimationFrame=n[1]},269:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.easeInBack=e.easeInOutElastic=e.easeOutElastic=e.easeInElastic=e.easeInOutQuint=e.easeOutQuint=e.easeInQuint=e.easeInOutQuart=e.easeOutQuart=e.easeInQuart=e.easeInOutCubic=e.easeOutCubic=e.easeInCubic=e.easeInOutCirc=e.easeOutCirc=e.easeInCirc=e.easeInOutExpo=e.easeOutExpo=e.easeInExpo=e.easeInOutSine=e.easeOutSine=e.easeInSine=e.easeInOutQuad=e.easeOutQuad=e.easeInQuad=e.easeLinear=void 0,e.easeLinear=(t,e,n,i)=>n*t/i+e,e.easeInQuad=(t,e,n,i)=>n*(t/=i)*t+e,e.easeOutQuad=(t,e,n,i)=>-n*(t/=i)*(t-2)+e,e.easeInOutQuad=(t,e,n,i)=>(t/=i/2)<1?n/2*t*t+e:-n/2*(--t*(t-2)-1)+e,e.easeInSine=(t,e,n,i)=>-n*Math.cos(t/i*(Math.PI/2))+n+e,e.easeOutSine=(t,e,n,i)=>n*Math.sin(t/i*(Math.PI/2))+e,e.easeInOutSine=(t,e,n,i)=>-n/2*(Math.cos(Math.PI*t/i)-1)+e,e.easeInExpo=(t,e,n,i)=>0===t?e:n*Math.pow(2,10*(t/i-1))+e,e.easeOutExpo=(t,e,n,i)=>t===i?e+n:n*(1-Math.pow(2,-10*t/i))+e,e.easeInOutExpo=(t,e,n,i)=>0===t?e:t===i?e+n:(t/=i/2)<1?n/2*Math.pow(2,10*(t-1))+e:n/2*(2-Math.pow(2,-10*--t))+e,e.easeInCirc=(t,e,n,i)=>-n*(Math.sqrt(1-(t/=i)*t)-1)+e,e.easeOutCirc=(t,e,n,i)=>n*Math.sqrt(1-(t=t/i-1)*t)+e,e.easeInOutCirc=(t,e,n,i)=>(t/=i/2)<1?-n/2*(Math.sqrt(1-t*t)-1)+e:n/2*(Math.sqrt(1-(t-=2)*t)+1)+e,e.easeInCubic=(t,e,n,i)=>n*(t/=i)*t*t+e,e.easeOutCubic=(t,e,n,i)=>n*((t=t/i-1)*t*t+1)+e,e.easeInOutCubic=(t,e,n,i)=>(t/=i/2)<1?n/2*t*t*t+e:n/2*((t-=2)*t*t+2)+e,e.easeInQuart=(t,e,n,i)=>n*(t/=i)*t*t*t+e,e.easeOutQuart=(t,e,n,i)=>-n*((t=t/i-1)*t*t*t-1)+e,e.easeInOutQuart=(t,e,n,i)=>(t/=i/2)<1?n/2*t*t*t*t+e:-n/2*((t-=2)*t*t*t-2)+e,e.easeInQuint=(t,e,n,i)=>n*(t/=i)*t*t*t*t+e,e.easeOutQuint=(t,e,n,i)=>n*((t=t/i-1)*t*t*t*t+1)+e,e.easeInOutQuint=(t,e,n,i)=>(t/=i/2)<1?n/2*t*t*t*t*t+e:n/2*((t-=2)*t*t*t*t+2)+e,e.easeInElastic=(t,e,n,i)=>{let r=1.70158,o=0,a=n;return 0===t?e:1==(t/=i)?e+n:(o||(o=.3*i),a{let r=1.70158,o=0,a=n;return 0===t?e:1==(t/=i)?e+n:(o||(o=.3*i),a{let r=1.70158,o=0,a=n;return 0===t?e:2==(t/=i/2)?e+n:(o||(o=i*(.3*1.5)),a{let r;return void 0===r&&(r=1.70158),n*(t/=i)*t*((r+1)*t-r)+e}},539:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Easings=void 0;const i=n(269);e.Easings={easeLinear:i.easeLinear,easeInQuad:i.easeInQuad,easeOutQuad:i.easeOutQuad,easeInOutQuad:i.easeInOutQuad,easeInSine:i.easeInSine,easeOutSine:i.easeOutSine,easeInOutSine:i.easeInOutSine,easeInExpo:i.easeInExpo,easeOutExpo:i.easeOutExpo,easeInOutExpo:i.easeInOutExpo,easeInCirc:i.easeInCirc,easeOutCirc:i.easeOutCirc,easeInOutCirc:i.easeInOutCirc,easeInCubic:i.easeInCubic,easeOutCubic:i.easeOutCubic,easeInOutCubic:i.easeInOutCubic,easeInQuart:i.easeInQuart,easeOutQuart:i.easeOutQuart,easeInOutQuart:i.easeInOutQuart,easeInQuint:i.easeInQuint,easeOutQuint:i.easeOutQuint,easeInOutQuint:i.easeInOutQuint,easeInElastic:i.easeInElastic,easeOutElastic:i.easeOutElastic,easeInOutElastic:i.easeInOutElastic,easeInBack:i.easeInBack}},885:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(539),e),r(n(892),e),r(n(830),e)},102:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ElapsedTime=void 0;const i=n(925),r=n(782);e.ElapsedTime=class{start_time;stop_time;_ms;constructor(){this.start_time=new Date,this.stop_time=void 0,this._ms=void 0}start(){const t=new Date;return this.start_time=(0,i._isDate)(this.start_time)?this.start_time:t,this.stop_time=void 0,this._ms=void 0,this}now(t=!1){const e=new Date,n=(0,i._isDate)(this.start_time)?this.start_time:this.start_time=e;return this._ms=e.getTime()-n.getTime(),t&&(this.start_time=e),this}stop(){const t=new Date,e=((0,i._isDate)(this.start_time)?this.start_time:t).getTime(),n=this.stop_time,r=(0,i._isDate)(n)&&n.getTime()>=e?n:this.stop_time=t;return this._ms=r.getTime()-e,this}started(){return(0,i._isDate)(this.start_time)}stopped(){return(0,i._isDate)(this.stop_time)}ms(){return parseInt(this._ms)}sec(t=3){return(0,r._round)(this.ms()/1e3,t)}min(t=3){return(0,r._round)(this.ms()/6e4,t)}data(){return this.stop(),{start_time:(0,i._isDate)(this.start_time)?this.start_time:void 0,stop_time:(0,i._isDate)(this.stop_time)?this.stop_time:void 0,elapsed_ms:this.ms()}}}},114:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(102),e)},149:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EventEmitter=void 0;let n=10;const i=Symbol(`__private_props_${Date.now()}__`);class r{static get max_listeners(){return n}static set max_listeners(t){n=!isNaN(t=parseInt(t))&&Number.isInteger(t)&&t>=1?t:10}[i]={};get max_listeners(){return this[i]._max_listeners}set max_listeners(t){this[i]._max_listeners=!isNaN(t=parseInt(t))&&Number.isInteger(t)&&t>=0?t:r.max_listeners}constructor(){this[i]={_events:{},_max_listeners:void 0}}static type(t,e=!1){let n="";if("string"!=typeof t||!(n=t.trim())){const n="Invalid event type.";if(console.warn(n,{type:t}),e)throw new TypeError(n)}return n}static listener(t,e=!1){let n;if("function"==typeof t)n=t;else{const n="Invalid event listener callback function.";if(console.warn(n,{listener:t}),e)throw new TypeError(n)}return n}listeners(t){const e=this[i],n=[];if((t=r.type(t))&&e._events.hasOwnProperty(t)){const i=e._events[t];if("function"==typeof i)n.push(i);else if(Array.isArray(i)&&i.length)for(const t of i)"function"==typeof t&&n.push(t)}return n}hasListener(t,e){return this.listeners(t).findIndex((t=>t===e))>-1}emit(t,e){const n={type:t,data:e,time:Date.now()},i=this.listeners(t=r.type(t,!0));if(i.length){for(const t of i)t.call(this,n);return!0}if("error"===t){if(e instanceof Error)throw e;const t='Uncaught, unspecified "error" event.';throw console.warn(t,{event:n}),new Error(t)}return!1}on(t,e,n=!1){return this.addListener(t,e,n)}once(t,e){return this.addListener(t,e,!0)}subscribe(t,e){return t=r.type(t,!0),e=r.listener(e,!0),this.addListener(t,e),()=>{this.removeListener(t,e)}}addListener(t,e,n=!1){t=r.type(t,!0);let o=e=r.listener(e,!0);if(n){let n=!1;o=i=>{n||(n=!0,e.call(this,i),this.removeListener(t,o))}}const a=this.listeners(t);if(a.findIndex((t=>t===o))<0){const e=this[i];if(e._events.newListener&&this.emit("newListener",{type:t,handler:o}),e._events[t]=a.length?[...a,o]:o,Array.isArray(e._events[t])){const n=e._events[t].length,i="number"==typeof e._max_listeners?e._max_listeners:r.max_listeners;"number"==typeof i&&i>0&&n>i&&console.error(`EventEmitter possible memory leak detected - ${n} "${t}" event listeners added, max count is ${i}.`)}}else console.warn(`This "${t}" event listener is already added.`);return this}removeListener(t,e){if(!(t=r.type(t)))return this;const n=this[i];if(!n._events.hasOwnProperty(t))return this;let o=!1;if(Array.isArray(n._events[t])){const i=n._events[t],r=i.findIndex((t=>t===e));i.splice(r,1),o=!0}else n._events[t]===e&&(delete n._events[t],o=!0);return o&&(this.listeners(t).length||delete n._events[t],n._events.removeListener&&this.emit("removeListener",{type:t,listener:e})),this}removeAllListeners(t){if(!(t=r.type(t)))return this;const e=this[i];if(!e._events.hasOwnProperty(t))return this;const n="removeListener"!==t&&e._events.removeListener,o=n?this.listeners(t):[];if(delete e._events[t],n&&o.length)for(const e of o)this.emit("removeListener",{type:t,listener:e});return this}}e.EventEmitter=r},534:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Events=void 0;const i=n(149);e.Events=new i.EventEmitter},821:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(149),e),r(n(534),e)},649:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Exception=void 0;const n=Symbol(`__private_props_${Date.now()}__`);class i extends Error{[n]={};get message(){return this[n].message}get name(){return this[n].name}get code(){return this[n].code}get data(){return this[n].data}get time(){return this[n].time}constructor(t,e,i,r,o){const a=Date.now();super(t=t&&"string"==typeof t&&(t=t.trim())?t:"Unspecified exception message."),"string"==typeof i?i=(i=i.trim())?i:0:"number"==typeof i&&!isNaN(i=parseInt(`${i}`))&&Number.isInteger(i)&&Number.isFinite(i)||(i=0),this[n]={message:t,name:e&&"string"==typeof e&&(e=e.trim())?e:"Exception",code:i,data:r,time:o&&!isNaN(o=parseInt(o))&&Number.isInteger(o)&&Number.isFinite(o)&&o>=0?o:a}}toString(){const{message:t,name:e,code:n}=this;let i=e+":";return 0!==n&&(i+=" ["+n+"]"),i+=" "+t,i}static error(t,e,n,r,o){return new i(t,e,n,r,o)}static parse(t){const e=Date.now(),n={},r=t=>"string"==typeof t&&(t=t.trim())?t:void 0,o=t=>!isNaN(t=parseInt(t))&&Number.isInteger(t)&&Number.isFinite(t)&&t>=0?t:void 0,a=t=>{let e;return void 0!==(e=o(t))||(e=r(t)),e};if(t&&"object"==typeof t){let e=!1;if(Array.isArray(t)){const i=t[Symbol.iterator];(["values","entries"].includes(i?.name)||"function"==typeof i)&&(t=[...t]),t.length&&(n.message=r(t[0]),n.name=r(t[1]),n.code=a(t[2]),n.data=t[3],n.time=o(t[4]),e=!0)}if(!e&&t instanceof Error){const i=t;n.message=r(i.message),n.name=r(i.name),n.code=a(i.code),n.data=i.data,n.time=o(i.time),e=!0}e||(n.message=r(t.message),n.name=r(t.name),n.code=a(t.code),n.data=t.data,n.time=o(t.time),e=!0)}else n.message=r(t);return new i(n.message??"Unknown exception error.",n.name??"Error",n.code,n.data,n.time??e)}}e.Exception=i},882:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(649),e)},246:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Task=e.TASK_STATUSES=void 0;const i=n(821);e.TASK_STATUSES=["new","running","stopped","failed","done"];let r=200,o=2;const a=(t,e=0,n=0)=>[void 0,null].includes(t)||"string"==typeof t&&!(t=t.trim())?n:!isNaN(t=parseFloat(t))&&Number.isFinite(t)&&t>=0?t:e,s=(t,e=0,n=0)=>parseInt(a(t,e,n)+""),p=(t,e)=>{const n=10**s(e,o,o);return Math.round((t+Number.EPSILON)*n)/n},c=t=>{void 0===t&&(t=null);const e=[];return JSON.stringify(t,(function(t,n){if(n&&"object"==typeof n){if(e.indexOf(n)>-1)return;e.push(n)}return n}))},l=t=>{if([void 0,null].includes(t))return"";let e="";try{Object(t)===t&&t[Symbol.iterator]&&(t=c([...t])),e=String(t)}catch(t){e=""}return Object(t)!==t||e&&!/\[object \w+\]/.test(e)||(e=c(t).replace(/^"|"$/g,"")),e.trim()},u=t=>(Object(t)!==t||t instanceof Error||(t.error instanceof Error||"string"==typeof t.error&&t.error.trim()||t.reason instanceof Error||"string"==typeof t.reason&&t.reason.trim()?t=t.error:"string"==typeof t.message&&t.message.trim()&&(t=t.message)),l(t)),d=(t,e=0)=>{let n,i;const r=()=>{clearTimeout(n),clearTimeout(i),i=void 0,t()};return()=>{if(!e)return t();clearTimeout(n),n=setTimeout(r,e),i||(i=setTimeout(r,Math.floor(1.5*e)))}},f=Symbol(`__private_props_${Date.now()}__`);class m{static get event_debounce(){return r}static set event_debounce(t){r=s(t,r,0)}static get decimal_precision(){return o}static set decimal_precision(t){o=s(t,o,2)}[f]={};get name(){return this[f].name}get label(){return this[f].label}get linked(){return this[f].linked}get precision(){return this[f].precision}get event_debounce(){return this[f].event_debounce}get progress(){return this[f].progress}get total(){return this[f].total}get value(){return this[f].value}get error(){return this[f].error}get status(){return this[f].status}get startTime(){return this[f].startTime}get stopTime(){return this[f].stopTime}get elapsedTime(){return this.stopTime?this.stopTime-this.startTime:0}get complete(){return this[f].complete}get item(){return this[f].item}constructor(t,e=!1,n=m.decimal_precision,r=m.event_debounce){if(!(t=l(t)))throw new TypeError("Invalid new task name.");n=s(n,m.decimal_precision,m.decimal_precision),r=s(r,m.event_debounce,m.event_debounce),this[f]={name:t,label:"",linked:e,precision:n,event_debounce:r,progress:0,total:0,value:0,error:"",status:"new",startTime:0,stopTime:0,complete:!1,item:void 0,_done:!1,_round:t=>p(t,this[f].precision),_emitter:new i.EventEmitter,_debounced_update:d((()=>{const t=this[f];t._done||t._emitter.emit("update",this.data())}),r)}}get data(){return()=>{const{name:t,label:e,linked:n,precision:i,event_debounce:r,progress:o,total:a,value:s,error:p,status:c,startTime:l,stopTime:u,elapsedTime:d,complete:f,item:m}=this;return{name:t,label:e,linked:n,precision:i,event_debounce:r,progress:o,total:a,value:s,error:p,status:c,startTime:l,stopTime:u,elapsedTime:d,complete:f,item:m}}}get update(){return()=>(this[f]._debounced_update(),this)}subscribe(t){return this[f]._emitter.subscribe("update",t)}start(t=!1){const e=this[f];let n=0;return e.complete&&!t?(console.warn("Task `start` while complete ignored! Try using `task.start(restart=true)` to override."),this):(e.complete&&(n++,e.complete=!1),"running"!==e.status&&(n++,e.status="running"),e.startTime&&!t||(n++,e.startTime=Date.now()),e.stopTime&&(n++,e.stopTime=0),e.error&&(n++,e.error=""),n&&this.update(),this)}stop(){const t=this[f];let e=0;return"running"===t.status&&(e++,t.status="stopped"),t.stopTime||(e++,t.stopTime=Date.now(),t.startTime||(t.startTime=t.stopTime)),e&&this.update(),this}failure(t){t=(t=u(t))?t:"Unknown task error.";const e=this[f];let n=0;return e.error!==t&&(n++,e.error=t),"failed"!==e.status&&(n++,e.status="failed"),e.stopTime||(n++,e.stopTime=Date.now(),e.startTime||(e.startTime=e.stopTime)),n&&this.update(),this}done(t=!1){const e=this[f];let n=0;if(e.complete||(n++,e.complete=!0),"stopped"!==e.status){const i=e.error?"failed":"done";if(e.status!==i&&(n++,e.status=i),e.linked||t){let t=100;t!==e.progress&&(n++,e.progress=t),e.total&&e.value!==e.total&&(n++,e.value=e.total)}}return e.stopTime||(n++,e.stopTime=Date.now(),e.startTime||(e.startTime=e.stopTime)),e._done=!0,n&&e._emitter.emit("update",this.data()),this}setProgress(t,e,n){const i=this[f];if(i._done)return console.warn("Task `setProgress` while done ignored."),this;let r=a(t,-1,-1);if(r<0)throw new TypeError(`Invalid set task \`progress\` value (${t}).`);(t=i._round(r))>100&&(t=100);let o=i.value,s=i.total;i.linked?s&&(o=100===t?s:i._round(t/100*s)):((n=a(n,-1,-1))>=0&&(s=i._round(n)),(e=a(e,-1,-1))>=0&&(o=i._round(e)));let p=0;return t!==i.progress&&(p++,i.progress=t),o!==i.value&&(p++,i.value=o),s!==i.total&&(p++,i.total=s),p&&this.update(),this}setTotal(t){const e=this[f];if(e._done)return console.warn("Task `setTotal` while done ignored."),this;let n=a(t,-1,-1);if(n<0)throw new TypeError(`Invalid set task \`total\` value (${t}).`);t=e._round(n);let i=e.progress,r=e.value;e.linked&&(t?r?r>=t?(r=t,i=100):i=e._round(r/t*100):i&&(r=e._round(i/100*t)):(r=0,i=0));let o=0;return i!==e.progress&&(o++,e.progress=i),r!==e.value&&(o++,e.value=r),t!==e.total&&(o++,e.total=t),o&&this.update(),this}setValue(t){const e=this[f];if(e._done)return console.warn("Task `setValue` while done ignored."),this;let n=a(t,-1,-1);if(n<0)throw new TypeError(`Invalid set task \`value\` value (${t}).`);t=e._round(n);let i=e.total,r=e.progress;e.linked&&(t?i?t>i?(i=t,r=100):r=e._round(t/i*100):r&&(i=e._round(100/r*t)):r=0);let o=0;return r!==e.progress&&(o++,e.progress=r),t!==e.value&&(o++,e.value=t),i!==e.total&&(o++,e.total=i),o&&this.update(),this}setItem(t){const e=this[f];return e._done?(console.warn("Task `setItem` while done ignored."),this):(e.item=t,this)}static create(t,n,i){let{name:r,label:o,linked:c,precision:h,event_debounce:g,progress:v,total:_,value:b,error:y,status:x,startTime:w,stopTime:O,complete:E,item:j}=Object(t);try{let t;if(!(t=l(r)))throw new TypeError("Invalid task `name` value.");r=t,o=l(o),c=!!c,t=s(h,-1,m.decimal_precision),n=(t=s(n,-1,t))<0?m.decimal_precision:t,t=s(g,-1,m.event_debounce),i=(t=s(i,-1,t))<0?m.event_debounce:t;const k=t=>p(t,n);if((t=a(v,-1))<0)throw new TypeError("Invalid task `progress` value.");if((v=k(t))>100&&(v=100),(t=a(_,-1))<0)throw new TypeError("Invalid task `total` value.");if(_=k(t),(t=a(b,-1))<0)throw new TypeError("Invalid task `value` value.");if(b=k(t),c)if(b)if(_)if(b>_)console.warn(`Task linked \`value\` (${b}) is greater than \`total\` (${_}). Using value as new total${100!==v?" - updating progress":""}.`),_=b,v=100;else{const t=k(b/_*100);v!==t&&(v&&console.warn(`Task linked \`progress\` (${v}) recalculated to (${t}) using current value/total (${b}/${_}) %.`),v=t)}else v&&(_=k(100/v*b));else v=0;if(E=!!E,y=u(y),(x=l(x).toLowerCase())&&e.TASK_STATUSES.includes(x)||(x="new"),(t=s(w,-1))<0)throw new TypeError("Invalid task `startTime` value.");if(w=t,(t=s(O,-1))<0)throw new TypeError("Invalid task `stopTime` value.");if(O=t,["stopped","failed","done"].includes(x)&&w&&O&&w{A._done||A._emitter.emit("update",I.data())}),I.event_debounce),I}catch(t){const e=`Create Task Failure! ${t instanceof Error?t.message:t}`.trim(),a={name:r,label:o,linked:c,precision:n,event_debounce:i,progress:v,total:_,value:b,error:e,status:x,startTime:w,stopTime:O,complete:E,item:j};throw console.warn(e,{_options:a}),"TypeError"===t.name?new TypeError(e):new Error(e)}}}e.Task=m},638:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Tasks=void 0;const i=n(821),r=n(246);let o=200,a=2;const s=(t,e=0,n=0)=>parseInt(((t,e=0,n=0)=>[void 0,null].includes(t)||"string"==typeof t&&!(t=t.trim())?n:!isNaN(t=parseFloat(t))&&Number.isFinite(t)&&t>=0?t:e)(t,e,n)+""),p=(t,e=0)=>{let n,i;const r=()=>{clearTimeout(n),clearTimeout(i),i=void 0,t()};return()=>{if(!e)return t();clearTimeout(n),n=setTimeout(r,e),i||(i=setTimeout(r,Math.floor(1.5*e)))}},c=Symbol(`__private_props_${Date.now()}__`);class l{static get event_debounce(){return o}static set event_debounce(t){o=s(t,o,0)}static get decimal_precision(){return a}static set decimal_precision(t){a=s(t,a,2)}[c]={};get size(){return this[c]._tasks.size}get precision(){return this[c].precision}get event_debounce(){return this[c].event_debounce}constructor(t=l.decimal_precision,e=l.event_debounce){t=s(t,l.decimal_precision,l.decimal_precision),e=s(e,l.event_debounce,l.event_debounce),this[c]={precision:t,event_debounce:e,_tasks:new Map,_unsubscribe:new Map,_emitter:new i.EventEmitter,_debounced_update:p((()=>{this[c]._emitter.emit("update",this.data())}),e)}}get data(){return()=>{const t=this[c];let e=0,n=0,i=0,r=0,o=0,p=!1,l=!1,u=!1;const d=[];for(const a of[...t._tasks.values()]){const t=a.data();e++,o+=100,r+=t.progress,u||t.complete||(u=!0),"running"===t.status?(p||(p=!0),l||(l=!0)):!l&&["failed","done"].includes(t.status)&&(l=!0),t.startTime&&!n&&t.startTimei&&(i=t.stopTime),d.push([a.name,t])}const f=Object.fromEntries(d),m=r&&o?r>=o?100:((t,e)=>{const n=10**s(e,a,a);return Math.round((t+Number.EPSILON)*n)/n})(r/o*100,t.precision):0,h=p,g=l,v=g&&!u;let _=0;return i&&n&&(i(this[c]._debounced_update(),this)}subscribe(t){return this[c]._emitter.subscribe("update",t)}has(t){return this[c]._tasks.has(t)}get(t){return this[c]._tasks.get(t)}add(t,e=!1,n){const i=this[c];let o;if(n=(n=s(n,-1,-1))>=0?n:void 0,"string"==typeof t?o=new r.Task(t,e,i.precision,n):t instanceof r.Task?o=t:"object"==typeof t&&"string"==typeof t?.name&&(o=r.Task.create(t,i.precision,n)),!(o instanceof r.Task))throw new TypeError("Add `Task` object is invalid.");this.has(o.name)&&console.warn(`Existing task named "${o.name}" has been replaced.`);const a=o.subscribe((t=>{console.debug(`-- task event ${t.data.name}`,t.data.progress),this.update()}));return i._tasks.set(o.name,o),i._unsubscribe.set(o.name,a),this.update(),o}remove(t){const e=this[c];if(!e._tasks.has(t))return this;const n=e._unsubscribe.get(t);return n&&(e._unsubscribe.delete(t),n()),e._tasks.delete(t),this.update(),this}}e.Tasks=l},921:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(246),e),r(n(638),e)},0:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Term=void 0;const i=n(377);let r,o=!1;e.Term=class{static get FORMAT_DISABLED(){return o}static set FORMAT_DISABLED(t){o=(0,i._bool)(t,!0)??!1}static get LOG_METHODS(){return["log","debug","warn","error","info"]}static get LOG_METHOD(){return r}static set LOG_METHOD(t){r=this.LOG_METHODS.includes(t)?t:void 0}static get FORMATS(){return{reset:"[0m",bright:"[1m",dim:"[2m",underscore:"[4m",blink:"[5m",reverse:"[7m",hidden:"[8m",fg_black:"[30m",fg_red:"[31m",fg_green:"[32m",fg_yellow:"[33m",fg_blue:"[34m",fg_magenta:"[35m",fg_cyan:"[36m",fg_white:"[37m",fg_gray:"[90m",bg_black:"[40m",bg_red:"[41m",bg_green:"[42m",bg_yellow:"[43m",bg_blue:"[44m",bg_magenta:"[45m",bg_cyan:"[46m",bg_white:"[47m",bg_gray:"[100m"}}static get PREDEFINED_FORMATS(){return{log:"fg_white",dump:["fg_white","bright"],debug:"fg_gray",error:"fg_red",warn:"fg_yellow",info:["fg_cyan","bright"],success:"fg_green",bg_log:["bg_blue","fg_white"],bg_debug:["bg_gray","fg_black"],bg_error:["bg_red","fg_white"],bg_warn:["bg_yellow","fg_black"],bg_info:["bg_cyan","fg_black"],bg_success:["bg_green","fg_white"]}}static getFormats(t){const e=this.FORMATS,n=this.PREDEFINED_FORMATS;return(Array.isArray(t)?t:"string"==typeof t?[t]:[]).reduce(((t,i)=>{if((i=i.trim().toLowerCase())&&"reset"!==i){let r=i=i.replace(/[^a-z0-9]/gi,"_").replace("grey","gray");const o=e=>{const i=n[e];Array.isArray(i)?t.push(...i):"string"==typeof i&&t.push(i)};e.hasOwnProperty(i)?t.push(i):e.hasOwnProperty(r=`fg_${i}`)?t.push(r):n.hasOwnProperty(i)?o(i):n.hasOwnProperty(r=`bg_${i}`)&&o(r)}return t}),[])}static format(t,...e){let n;const r=this.getFormats(t),o=e=>{if(this.FORMAT_DISABLED||!t.length)return e;if("object"==typeof e&&e){if(Array.isArray(e))return e;if(new RegExp("\\[object \\w+\\]").test(n=(0,i._string)(e)))return e;e=n}return"string"==typeof e&&e.length?r.reduce(((t,e)=>this.FORMATS[e]+t+this.FORMATS.reset),e):e},a=this,s=[];for(const t of Array.isArray(e)?e:[])s.push(o(t));let p=a.LOG_METHOD;const c=t=>p||(a.LOG_METHODS.includes(t)?t:"log");return{method(t){return p=a.LOG_METHODS.includes(t)?t:a.LOG_METHOD,this},format(t,...e){return s.push(...a.format(t,...e).values()),this},values(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));return[...s,...e]},clean:(...t)=>a.clean(...s,...t),log(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("log")](...s,...e)},debug(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("debug")](...s,...e)},warn(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("warn")](...s,...e)},error(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("error")](...s,...e)},info(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("info")](...s,...e)}}}static clean(...t){const e=t=>Object.values(this.FORMATS).reduce(((t,e)=>t.replace(new RegExp(String(e).replace(/\x1B/,"\\x1B").replace(/\[/,"\\["),"g"),"")),t),n=[];for(const i of t)n.push("string"==typeof i&&i.trim().length?e(i):i);return n}static text(t,e){const n=(0,i._string)(t),r=[],o=Array.isArray(e)?e:"string"==typeof e?[e]:[];for(const t of o)"string"==typeof t&&t.trim()&&r.push(t);return r.length&&n.trim().length?this.format(r,n).values()[0]:n}static br(){console.log(" ")}static log(...t){this.format("log",...t).log()}static debug(...t){this.format("debug",...t).debug()}static error(...t){this.format("error",...t).error()}static warn(...t){this.format("warn",...t).warn()}static info(...t){this.format("info",...t).info()}static success(...t){this.format("success",...t).log()}static list(t,e=!1){let n=[t=(0,i._clone)(t)],r="values";if("object"==typeof t&&t)if(r=t[Symbol.iterator]?.name)n="entries"===r?e?[...t]:[t]:[...t];else if(r="values",n=[t],e&&!1===(0,i._stringable)(t)){let e=Object.fromEntries(Object.entries(t)),i=[];"object"==typeof e&&e&&(i=Object.entries(e)).length||(i=Object.entries(t)),i.length&&(r="entries",n=i)}return[n,r]}static table(t,e,n,r,o){let a,s,p,c;const l="undefined"!=typeof process&&Array.isArray(process?.argv)?process.argv.slice(2).join("|"):"";let u=l.match(/--cellMaxLength=(\d+)(\||$)/);u&&(a=(0,i._posInt)(u[1],0)),(u=l.match(/--divider(\||$)/))?s=!0:(u=l.match(/--divider=false(\||$)/))&&(s=!1),(u=l.match(/--noIndex(\||$)/))?p=!0:(u=l.match(/--noIndex=false(\||$)/))&&(p=!1),(u=l.match(/--numIndex(\||$)/))?c=!0:(u=l.match(/--numIndex=false(\||$)/))&&(c=!1),e=a??(0,i._posInt)(e,0)??250,n=s??n??!1,r=p??r??!1,o=c??o??!1;const d=this,[f,m]=d.list(t,"object"==typeof t&&t&&!(0,i._stringable)(t)),h=t=>{let e,n;if(Array.isArray(t)||!1===(n=(0,i._stringable)(t))){if("object"==typeof t&&t){const e=t[Symbol.iterator];e?(t=[...t],"entries"===e&&(t=Object.fromEntries(t))):t=Object.fromEntries(Object.entries(t))}t=(0,i._jsonStringify)(t),e="magenta"}else e="green","number"==typeof t?e="yellow":null==t?e="gray":!0===t?e="cyan":!1===t?e="red":/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2][1-9]|[1-3]0|3[01])T(?:[0-1][0-9]|2[0-3])(?::[0-6]\d)(?::[0-6]\d)?(?:\.\d{3})?(?:[+-][0-2]\d:[0-5]\d|Z)?$/.test(n)&&(e="magenta"),t=n;return t=t.replace(/\t/g," "),[(0,i._strEscape)(t).replace(/(\\n)+/g,"\n").trim(),e]};let g;const v=[];if("entries"===m)r||v.push(["[#]","Values"]),v.push(...f);else{let t=[],e=[];for(let n=0;ne&&(n=e),n>s&&(s=n)}s>_[i]&&(_[i]=s),n.push([o,a])}b.push(n)}const y=b.length;for(let t=0;ts){for(;t.length>s;){const e=t.substring(0,s).padEnd(s);t=t.slice(s),p.push(d.text(e,a))}t.length&&p.push(d.text(t.padEnd(s),a))}else p.push(d.text(t.padEnd(s),a));r.push(p),i{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._mime=e.EXT_MIMES=void 0;const i=n(377);e.EXT_MIMES=n(154),e._mime=(t,n=0)=>{const r={value:t,type:"",ext:"",error:"",toString(t){return this[t&&["mime","ext","error"].includes(t=(0,i._str)(t,!0).toLowerCase())?t+"":"type"]}};try{const n=[],o=(0,i._str)(t,!0);if(o){let t=null;if(t=o.match(/(\.|^)([-_0-9a-zA-Z]+)$/i)){let i=t[2].toLowerCase();"jpeg"===i&&(i="jpg"),e.EXT_MIMES.hasOwnProperty(i)?r.type=e.EXT_MIMES[r.ext=i]:n.push(`Mime file extension "${i}" is not supported`)}else if(/^[-_a-z0-9]+\/[^\/]+$/i.test(o)){const t=Object.entries(e.EXT_MIMES).find((t=>t[1].startsWith(o.toLowerCase())||o.toLowerCase().startsWith(t[1])));if(t){let[e,n]=t;"jpeg"===e&&(e="jpg"),r.ext=e,r.type=n}else n.push(`Mime type "${o}" is not supported`)}else n.push("Invalid mime type or file extension string value")}else n.push("Blank mime type or file extension string value");if(n.length)throw new Error(r.error=n.join("; ")+".");return r}catch(t){return new i.FailError(t,n,{item:r},"MimeTypeError"),r}}},297:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._filepath=e._basename=void 0;const i=n(377);e._basename=(t,e=!1,n=!1,r)=>{const o=[0,1,2].includes(r=parseInt(r+""))?r:0,a={value:t,basename:"",name:"",ext:"",error:"",illegal:[],invalid:[],toString(t){return this[t&&["basename","name","ext","error"].includes(t=(0,i._str)(t,!0).toLowerCase())?t+"":"basename"]}};let s=null;const p=a.name=a.basename=(0,i._str)((0,i._str)(t,!0).split(/[\\\/]/g).pop(),!0);(s=p.match(/([^\\/]*)$/i))&&(a.name=s[1],(s=a.name.match(/(.*)(\.([-_0-9a-zA-Z]+))$/i))&&(a.name=s[1],a.ext=s[3]));try{const t=[];if(p?(!e&&["..",".."].includes(p)&&(a.invalid.push(p),t.push(`The basename "${p}" dots not allowed`)),(/^\.\.[\.]+$/.test(p)||/[^\.][\.]+$/.test(p))&&(a.invalid.length||a.invalid.push(p),t.push(`The basename "${p}" format is invalid`)),(s=p.match(/[\:\?\"\<\>\|\*]/g))&&(a.illegal.push(...s),t.push(`The basename "${p}" contains illegal characters (:?"<>|*) => "${s.join("")}"`))):t.push("The basename string value is empty"),t.length)throw new Error(a.error=t.join("; ")+".");return a}catch(t){if(n&&(a.basename="",a.name="",a.ext=""),o){class e extends Error{name="BasenameError";item=a}const n=new e(`${t.message||t}`);if(2===o)throw n;console.warn(n+"",{item:a})}return a}},e._filepath=(t,n,r=!1,o,a)=>{const s=["","/","\\"].includes(n=(0,i._str)(n,!0))?n:"",p=(o=(0,i._str)(o,!0).replace(/path\s*$/i,"").trim())?o+" ":"",c=[0,1,2].includes(a=parseInt(a+""))?a:0,l={value:t,root:"",drive:"",path:"",dir:"",basename:"",name:"",ext:"",error:"",illegal:[],invalid:[],toString(t){let e=t&&["file","root","drive","path","dir","basename","name","ext","error"].includes(t=(0,i._str)(t,!0).toLowerCase())?t+"":"path";if("file"===e){if(this.error||!this.basename)return"";e="path"}return this[e]}};let u=(0,i._str)(t,!0);try{let t="",n="";const r=[],o=(0,i._split)(u,/[\\\/]/);for(let e=0;e-1&&h[t][0]&&![".",".."].includes(h[t][0])){h.pop();continue}}else if(t&&(m.push([r,o]),n))continue;h.push([r,o])}t&&h.length&&!h[0][0]&&h[0][1]&&(h[0][1]=""),m.length&&m.push(...h),l.root=t,l.drive=n;let g="";for(const t of h)g+=t.join("");l.dir=l.path=u=t+g.replace(/[\\/]$/,"");const v=h.pop();if(v&&!["",".",".."].includes(v[0])){const n=(0,e._basename)(v[0]);l.basename=n.basename,l.name=n.name,l.ext=n.ext,g="";for(const t of h)g+=t.join("");l.dir=t+g.replace(/[\\/]$/,"")}const _=[];g="";for(const t of m)g+=t.join("");const b=g?t+g:"";if(b&&_.push(`The ${p}root (${t}) dot nav path is outbound "${b}" => "${u}"`),d.size&&_.push(`The ${p}path contains invalid name${d.size>1?"s":""} (${(0,i._jsonStringify)([...d])})`),f.size&&_.push(`The ${p}path contains illegal characters (:?"<>|*) => "${[...f].join("")}"`),_.length)throw l.invalid=[...d],l.illegal=[...f],new Error(l.error=_.join("; ")+".");return l}catch(t){if(r&&(l.root="",l.drive="",l.path="",l.dir="",l.basename="",l.name="",l.ext=""),c){class e extends Error{name="NormPathError";item=l}const n=new e(`${t.message||t}`);if(2===c)throw n;console.warn(n+"",{item:l})}return l}}},307:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(93),e),r(n(297),e)},713:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(599),e),r(n(109),e),r(n(377),e),r(n(114),e),r(n(926),e),r(n(885),e),r(n(821),e),r(n(882),e),r(n(921),e),r(n(307),e),r(n(959),e)},302:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},109:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(302),e)},586:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._batchValues=void 0,e._batchValues=(t,e)=>{if(!(Number.isInteger(e)&&e>0))throw new Error("Invalid batch size.");const n=t.slice(0),i=[];for(;n.length;)i.push(n.splice(0,e));return i}},501:(t,e)=>{"use strict";function n(t,e){if(!t||"object"!=typeof t)return t;if(e.has(t))return e.get(t);let i;if(t.nodeType&&"cloneNode"in t)i=t.cloneNode(!0),e.set(t,i);else if(t instanceof Date)i=new Date(t.getTime()),e.set(t,i);else if(t instanceof RegExp)i=new RegExp(t),e.set(t,i);else if(Array.isArray(t)){i=new Array(t.length),e.set(t,i);for(let r=0;rn(t,new Map)},473:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._cloneDeep=e.clonePrototype=void 0;const i=n(599),r=(t,e)=>"object"==typeof e&&e&&t instanceof e,o=t=>Object.prototype.toString.call(t);e.clonePrototype=t=>{if(null==t)return t;"object"!=typeof t&&(t=Object.getPrototypeOf(t));const e=function(){};return e.prototype=t,new e},e._cloneDeep=function(t,e){const{circular:n=!0,depth:a=1/0,prototype:s,non_enumerable:p=!1}=Object(e),c=void 0===n||Boolean(n),l=!isNaN(a)&&Number.isInteger(a)&&a>0?a:1/0,u=s,d=Boolean(p),f=[],m=[],h=void 0!==i.Buffer,g=(t,e)=>{if(0===e||"object"!=typeof t||!t)return t;let n,a;if(r(t,Map))n=new Map;else if(r(t,Set))n=new Set;else if(r(t,Promise))n=new Promise(((n,i)=>{t.then((t=>n(g(t,e-1)))).catch((t=>i(g(t,e-1))))}));else if("object"==typeof(s=t)&&"[object Array]"===o(s))n=[];else if((t=>"object"==typeof t&&"[object RegExp]"===o(t))(t))n=new RegExp(t.source,(t=>{let e="";return t?.global&&(e+="g"),t?.ignoreCase&&(e+="i"),t?.multiline&&(e+="m"),e})(t)),t.lastIndex&&(n.lastIndex=t.lastIndex);else if((t=>"object"==typeof t&&"[object Date]"===o(t))(t))n=new Date(t.getTime());else{if(h&&i.Buffer.isBuffer(t))return i.Buffer.from?n=i.Buffer.from(t):(n=new i.Buffer(t.length),t.copy(n)),n;r(t,Error)?n=Object.create(t):"object"!=typeof u?(a=Object.getPrototypeOf(t),n=Object.create(a)):(n=Object.create(u),a=u)}var s;if(c){const e=f.indexOf(t);if(-1!==e)return m[e];f.push(t),m.push(n)}if(r(t,Map))for(const[i,r]of t){const t=g(i,e-1),o=g(r,e-1);n.set(t,o)}if(r(t,Set))for(const i of t){const t=g(i,e-1);n.add(t)}for(let i in t){Object.getOwnPropertyDescriptor(t,i)&&(n[i]=g(t[i],e-1));try{const r=Object.getOwnPropertyDescriptor(t,i);if(void 0===r?.set)continue;n[i]=g(t[i],e-1),r&&Object.defineProperty(n,i,r)}catch(t){if(t instanceof TypeError)continue;if(t instanceof ReferenceError)continue}}if(Object.getOwnPropertySymbols){const i=Object.getOwnPropertySymbols(t);for(let r=0;r{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._compare=void 0,e._compare=(...t)=>{let e=[],n=[];if(t.length<1)return console.warn((t.length?"Less than two":"No")+" `_compare` arguments provided."),!0;for(let r=1;r-1||n.indexOf(r)>-1)return!1;for(let e in r)if(r.hasOwnProperty(e)===t.hasOwnProperty(e)&&typeof r[e]!=typeof t[e])return!1;for(let o in t){if(r.hasOwnProperty(o)!==t.hasOwnProperty(o))return!1;if(typeof r[o]!=typeof t[o])return!1;let a=t[o],s=r[o];switch(typeof a){case"object":case"function":if(e.push(t),n.push(r),!i(a,s))return!1;e.pop(),n.pop();break;default:if(a!==s)return!1}}return!0}}},47:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._compareShallow=void 0,e._compareShallow=(...t)=>{if(t.length<1)return console.warn((t.length?"Less than two":"No")+" `_compareShallow` arguments provided."),!0;for(let n=1;n{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._duration=e._elapsed=e.SECOND_MS=e.MINUTE_MS=e.HOUR_MS=e.DAY_MS=e.MONTH_MS=e.YEAR_MS=e._parseIso=e._timestr=e._datestr=e._datetime=e._yearEnd=e._yearStart=e._monthEnd=e._monthStart=e._dayEnd=e._dayStart=e._monthName=e.MONTH_NAMES=e._dayName=e.DAY_NAMES=e._time=e._date=e._isDate=void 0,e._isDate=t=>t instanceof Date&&!isNaN(t.getTime()),e._date=(t,e=!0)=>{if(void 0===t)return e?void 0:new Date;const n=t=>isNaN(t)||!(t>1)&&e?void 0:new Date(t);if([null,!1,!0,0].includes(t))return n(t);if(t instanceof Date)return n(t.getTime());if("number"==typeof t)return n(new Date(t).getTime());try{let e=String(t).trim();if(!e||/\[object \w+\]/.test(e))return;return/^[+-]?\d+$/.test(e)?n(parseInt(e)):n(Date.parse(e))}catch(t){return void console.warn("[_date] exception:",t)}},e._time=(t,n,i,r=!0)=>{const o=(0,e._date)(t,r);if(!o)return;const a=o.getTime();return!isNaN(n=parseFloat(n))&&ai?void 0:a},e.DAY_NAMES=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],e._dayName=t=>(t=isNaN(t=parseInt(t))?0:t,e.DAY_NAMES[Math.abs(t%e.DAY_NAMES.length)]),e.MONTH_NAMES=["January","February","March","April","May","June","July","August","September","October","November","December"],e._monthName=t=>(t=isNaN(t=parseInt(t))?0:t,e.MONTH_NAMES[Math.abs(t%e.MONTH_NAMES.length)]),e._dayStart=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,0,0)},e._dayEnd=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),i.getMonth(),i.getDate(),23,59,59,999)},e._monthStart=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),i.getMonth(),1,0,0,0,0)},e._monthEnd=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),i.getMonth()+1,0,23,59,59,999)},e._yearStart=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),0,1,0,0,0,0)},e._yearEnd=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),11,0,23,59,59,999)},e._datetime=(t,n=!1)=>{const i=(0,e._date)(t,n);if(!i)return"";const r=[i.getFullYear(),i.getMonth()+1,i.getDate(),i.getHours(),i.getMinutes(),i.getSeconds()],o=[];for(const t of r)o.push((t+"").padStart(2,"0"));return o.splice(0,3).join("-")+" "+o.join(":")},e._datestr=(t,n=!1)=>(0,e._datetime)(t,n).substring(0,10),e._timestr=(t,n=!1)=>(0,e._datetime)(t,n).substring(11,19),e._parseIso=t=>{let e,n=NaN;try{t=String(t)}catch(e){t=""}if(e=/^(\d{4}|[+-]\d{6})(?:-?(\d{2})(?:-?(\d{2}))?)?(?:[ T]?(\d{2}):?(\d{2})(?::?(\d{2})(?:[,.](\d{1,}))?)?(?:(Z)|([+-])(\d{2})(?::?(\d{2}))?)?)?$/.exec(t)){for(const t of[1,4,5,6,7,10,11])e[t]=+e[t]||0;if(e[2]=(+e[2]||1)-1,e[3]=+e[3]||1,e[7]=e[7]?String(e[7]).substring(0,3):0,void 0!==e[8]&&""!==e[8]||void 0!==e[9]&&""!==e[9]){let t=0;"Z"!==e[8]&&void 0!==e[9]&&(t=60*e[10]+e[11],"+"===e[9]&&(t=0-t)),n=Date.UTC(e[1],e[2],e[3],e[4],e[5]+t,e[6],e[7])}else n=+new Date(e[1],e[2],e[3],e[4],e[5],e[6],e[7])}else n=Date.parse?Date.parse(t):NaN;return isNaN(n)?void 0:n},e.YEAR_MS=315576e5,e.MONTH_MS=2630016000.0000005,e.DAY_MS=864e5,e.HOUR_MS=36e5,e.MINUTE_MS=6e4,e.SECOND_MS=1e3;const n=(t,e,n,i,r,o,a,s,p,c,l)=>({years:t,months:e,days:n,hours:i,minutes:r,seconds:o,milliseconds:a,total_days:s,total_time:p,start_time:c,end_time:l,toString:function(s=0){s=[0,1].includes(s=parseInt(s))?s:0;const p=[],c=[],l=(t,e)=>{if(0===s&&["hour","minute","second","millisecond"].includes(e)){if("millisecond"===e)return;c.push(String(t).padStart(2,"0"))}else t&&p.push(t+" "+e+(t>1?"s":""))};return l(t,"year"),l(e,"month"),l(n,"day"),l(i,"hour"),l(r,"minute"),l(o,"second"),l(a,"millisecond"),0===s?(p.length?p.join(", ")+" ":"")+c.join(":"):(p.length||p.push("0 milliseconds"),p.join(", ").replace(/,([^,]*)$/," and$1"))}});e._elapsed=(t,i=void 0,r=!1)=>{if(!(t=(0,e._date)(t,r)))throw new TypeError("Invalid elapsed start date value! Pass a valid Date instance, integer timestamp or date string value.");if(!(i=(0,e._date)(i,r)))throw new TypeError("Invalid elapsed end date value! Pass a valid Date instance, integer timestamp or date string value.");if(t>i){const e=t;t=i,i=e}let o=0,a=0,s=0,p=0,c=0,l=0,u=0;const d=t.getTime(),f=i.getTime(),m=f-d,h=Math.floor(m/e.DAY_MS);(u+=i.getMilliseconds()-t.getMilliseconds())<0&&(l--,u+=1e3),(l+=i.getSeconds()-t.getSeconds())<0&&(c--,l+=60),(c+=i.getMinutes()-t.getMinutes())<0&&(p--,c+=60),(p+=i.getHours()-t.getHours())<0&&(s--,p+=24);const g=t.getFullYear();let v=t.getMonth();return o=i.getFullYear()-g,(a=i.getMonth()-v)<0&&(o--,a+=12),(s+=i.getDate()-t.getDate())<0&&(i.getMonth()===t.getMonth()&&v++,a<=0?(o--,a=11):a--,s+=new Date(g,v+1,0).getDate()),n(o,a,s,p,c,l,u,h,m,d,f)},e._duration=(t,i=0,r=!1)=>{if(!(t=(0,e._date)(t,r)))throw new TypeError("Invalid duration start date value! Pass a valid Date instance, integer timestamp or date string value.");if(!(i=(0,e._date)(i,r)))throw new TypeError("Invalid duration end date value! Pass a valid Date instance, integer timestamp or date string value.");if(t>i){const e=t;t=i,i=e}let o=0;const a=i.getTime(),s=t.getTime(),p=o=Math.abs(a-s),c=Math.floor(p/e.DAY_MS),l=Math.floor(p/e.YEAR_MS);o%=e.YEAR_MS;const u=Math.floor(o/e.MONTH_MS);o%=e.MONTH_MS;const d=Math.floor(o/e.DAY_MS);o%=e.DAY_MS;const f=Math.floor(o/e.HOUR_MS);o%=e.HOUR_MS;const m=Math.floor(o/e.MINUTE_MS);o%=e.MINUTE_MS;const h=Math.floor(o/e.SECOND_MS),g=o%e.SECOND_MS;return n(l,u,d,f,m,h,g,c,p,s,a)}},802:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._debouced=void 0,e._debouced=(t,e=200,n=0,i=!1)=>{let r,o,a,s;e=!isNaN(e=parseFloat(e))&&e>=0?e:200,n=!isNaN(n=parseFloat(n))&&n>=0&&n>e?n:0,i=!!i;const p=n=>{let p=s;s=void 0,a&&(clearTimeout(a),a=void 0),o&&!n&&(clearTimeout(o),o=void 0),p?.length&&"function"==typeof t&&t.apply(...p),e&&i&&!n&&(r=setTimeout((()=>{clearTimeout(r),r=void 0}),e))},c=function(...t){if(s=[this,t],!e)return p();const c=(t=0)=>{clearTimeout(o),o=setTimeout((()=>p()),e),t||!n||a||(a=setTimeout((()=>p()),n))};if(!i||r||o)return c();c(1),p(1)};return Object.defineProperties(c,{length:{value:t.length},name:{value:`${t.name||"anonymous"}__debounced__${e}`}}),c}},597:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._sayHello=void 0,e._sayHello=t=>{const e=`[x] - Hello ${t=t?.length?t:"Thuku"}!`;return console.log(e),e}},917:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._isObjJson=e._jsonCopy=e._jsonParse=e._jsonStringify=void 0,e._jsonStringify=(t,e,n=null)=>{const i=null===e?void 0:e,r=[],o=["this"],a=new Map,s=function(t,e){if(null===e)return e;if(e instanceof Error)try{e=String(e)}catch(t){const n="[FAILURE] Parse Error to String failed!";console.warn(n,{value:e,e:t}),e=n}if(e instanceof Set&&(e=[...e]),e instanceof Map&&(e=[...e]),e instanceof RegExp&&(e+=""),"object"==typeof e){t&&((t,e)=>{let n=r.length-1,i=r[n];if(i[t]===e||0===n)return o.push(t),void r.push(e);for(;n-- >=0;)if(i=r[n],i?.[t]===e){n+=2,r.length=n,o.length=n,--n,r[n]=e,o[n]=t;break}})(t,e);const n=a.get(e);if(n)return"[Circular Reference]"+n;a.set(e,o.join("."))}return e};try{return void 0===t&&(t=void 0!==n?n:n=null),r.push(t),JSON.stringify(t,s,i)}finally{a.clear(),r.length=0,o.length=1}},e._jsonParse=(t,e)=>{try{return JSON.parse(t)}catch(t){return e}},e._jsonCopy=t=>"object"==typeof t&&t?(0,e._jsonParse)((0,e._jsonStringify)(t)):t,e._isObjJson=t=>{try{if("string"!=typeof t||!(t=t.trim()))return!1;if(!/^\{.+\}$|^\[.+\]$/s.test(t))return!1;const n=(0,e._jsonParse)(t);return n&&Object(n)===n}catch(t){return!1}}},782:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._numk=e._logx=e._distance=e._rad2deg=e._deg2rad=e._base2dec=e._oct2dec=e._dec2oct=e._hex2dec=e._dec2hex=e._bin2dec=e._dec2bin=e._dec2base=e._bytesVal=e._px2rem=e._rand=e._commas=e._round=e._posInt=e._int=e._posNum=e._num=e._numeric=void 0,e._numeric=(t,e=!1,n=!1)=>{if("number"==typeof t)return!isNaN(t);if("boolean"==typeof t)return!!e;const i=String(t).trim();return""===i?!!n:/(^[+-]?[0-9]+([.][0-9]+)?([eE][+-]?[0-9]+)?$)|(^[+-]?\.[0-9]+$)|(^[+-]?[0-9]+\.$)/.test(i)},e._num=(t,e=NaN)=>{if("string"==typeof t)if((t=t.trim())&&/^.*$/.test(t)){let e="",n=t.trim().match(/^([\+-])\s*(\d.*)$/);n&&(e=n[1],t=n[2]),(t=t.replace(/\s*([\.,])\s*/g,"$1")).match(/^\d{1,3}(,\d{3})*(\.|(\.\d+))?$/)&&(t=t.replace(/,/g,"").trim()),/^\d+\.$|^\.\d+$|^\d+(\.\d+){0,1}$/.test(t)?!isNaN(t=parseFloat(t))&&e&&(t=parseFloat(e+t)):t=NaN}else t=NaN;else t=Number(t);if(!isNaN(t=Number(t))&&t>=Number.MIN_SAFE_INTEGER&&t<=Number.MAX_SAFE_INTEGER){let e=String(t).match(/^([\+-]?\d+\.\d{5,})(0{3,}\d*)$/);return e&&(t=Number(e[1])),t}return Number(e)},e._posNum=(t,n,i)=>{const r=(0,e._num)(t);if(!isNaN(r)&&r>=0&&!("number"==typeof n&&!isNaN(n)&&n>=0&&r=0&&r>i))return r},e._int=(t,n=NaN)=>{const i=Math.floor((0,e._num)(t,n));return isNaN(i)?n:i},e._posInt=(t,n,i,r=!1)=>{const o=(0,e._int)(t);if(!isNaN(o)&&o>=0)return"number"==typeof n&&!isNaN(n)&&n>=0&&o=0&&o>i?r?i:void 0:o},e._round=(t,n=2)=>{if(isNaN(t))return NaN;let i=10**Math.abs((0,e._int)(n,2));return Math.round((t+Number.EPSILON)*i)/i},e._commas=(t,n=2,i=!1)=>{const r=(0,e._round)((0,e._num)(t),n=(0,e._int)(n,2));if(isNaN(r))return console.warn("[WARNING: `_commas`] NaN value:",t),"";let o=String(r).replace(/\B(?=(\d{3})+(?!\d))/g,",");return n&&i&&(-1===o.indexOf(".")?o+=".".padEnd(n+1,"0"):o=o.split(".").reduce(((t,e,i)=>(t.push(1===i&&e.lengthMath.floor(Math.random()*(e-t+1))+t,e._px2rem=(t=1,n=!1,i=16)=>{t=(0,e._num)(t,1);const r=16===(i=(0,e._num)(i,16))?.0625:16/i*.0625;return n?t/r:t*r},e._bytesVal=(t,n=0,i,r=2,o=!1)=>{if(n=(0,e._posInt)(n,0,1)??0,!(t=(0,e._posInt)(t,0)??0))return 1===n?0:"0 B";const a=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],s="string"==typeof i&&a.includes(i=i.trim().toUpperCase())?i:"",p=s?a.findIndex((t=>t.toLowerCase()===s.toLowerCase())):Math.floor(Math.log(t)/Math.log(1024));if(!(p>=0&&p{let r=(0,e._posInt)(t,0)??0;if(0===r)return"0";const o=16===(n=[2,8,16].includes(n=(0,e._posInt)(n,2)??2)?n:2)?"0123456789ABCDEF".split(""):[];let a="";for(;r>0;){let t=r%n;a=(16===n?o[t]:t)+a,r=Math.floor(r/n)}if([2,16].includes(n)&&(i=(0,e._posInt)(i,0)??0)){let t="";for(;a.length;){let e=a.length-i;t=a.substring(e).padStart(i,"0")+(t?" ":"")+t,a=a.substring(0,e)}a=t}return a},e._dec2bin=(t,n=0)=>(0,e._dec2base)(t,2,n),e._bin2dec=t=>{if("string"!=typeof t||!/^[01]+$/.test(t=t.replace(/\s/g,"")))return;let e=0,n=0;for(let i=t.length-1;i>=0;i--)e+=parseInt(t[i])*Math.pow(2,n),n++;return e},e._dec2hex=(t,n=0)=>(0,e._dec2base)(t,16,n),e._hex2dec=t=>{if("string"!=typeof t||!/^[0-9A-F]+$/.test(t=t.replace(/0x/gi,"").replace(/\s/g,"").toUpperCase()))return;const e=Object.fromEntries("0123456789ABCDEF".split("").map(((t,e)=>[t,e])));let n=0;for(let i=0;i(0,e._dec2base)(t,8),e._oct2dec=t=>{if("string"!=typeof t||!/^[0-7]+$/.test(t=t.replace(/0o/gi,"").replace(/\s/g,"").toUpperCase()))return;let e=0;for(let n=0;n2===(n=[2,8,16].includes(n=(0,e._posInt)(n,2)??2)?n:2)?(0,e._bin2dec)(t):8===n?(0,e._oct2dec)(t):(0,e._hex2dec)(t),e._deg2rad=t=>{if(isNaN(t=(0,e._num)(t)))throw new TypeError("The _deg2rad `degrees` argument is not a valid angle number value.");return t*(Math.PI/180)},e._rad2deg=t=>{if(isNaN(t=(0,e._num)(t)))throw new TypeError("The _rad2deg `radians` argument is not a valid angle number value.");return t*(180/Math.PI)},e._distance=(t,n,i,r)=>{if(isNaN(t=(0,e._num)(t)))throw new TypeError("The _latLonDistance `latitude1` argument is not a valid latitude number value.");if(isNaN(n=(0,e._num)(n)))throw new TypeError("The _latLonDistance `longitude1` argument is not a valid longitude number value.");if(isNaN(i=(0,e._num)(i)))throw new TypeError("The _latLonDistance `latitude2` argument is not a valid latitude number value.");if(isNaN(r=(0,e._num)(r)))throw new TypeError("The _latLonDistance `longitude2` argument is not a valid longitude number value.");const o=t*Math.PI/180,a=i*Math.PI/180,s=(i-t)*Math.PI/180,p=(r-n)*Math.PI/180,c=Math.sin(s/2)*Math.sin(s/2)+Math.cos(o)*Math.cos(a)*Math.sin(p/2)*Math.sin(p/2);return 2*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))*6378e3},e._logx=(t,n)=>isNaN(t=(0,e._num)(t))||isNaN(n=(0,e._num)(n))?NaN:Math.log2(n)/Math.log2(t),e._numk=(t,n=1)=>{if(isNaN(t=(0,e._num)(t)))return NaN.toString();if(!t)return"0";n=(0,e._posInt)(n,0,3,!0)??1;const i=["","k","M","B","T"],r=i.length-1,o=t<0?"-":"",a=Math.floor((0,e._logx)(1e3,t=Math.abs(t))),s=Math.min(a,r),p=i[s];let c=(0,e._round)(t/1e3**s,n),l=`${o}${c}${p}`;if(a>r){const t=Math.floor(Math.log10(c));c=(0,e._round)(c/10**t,n),l=`${o}${c}e${t}${p}`}return l}},962:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._tree=e._selectKeys=e._chunks=e._propsObj=e.FailError=e._mapValues=e._arrayList=e._trans=e._sort=e._dumpVal=e._values=e._isArray=e._isObject=e._iterable=e._empty=e._valueOf=e._dotGet=e._bool=e._validDotPath=e._dotInflate=e._dotFlat=e._minMax=e._isFunc=e._isClass=e._getProp=e._hasAnyProps=e._hasProps=e._hasProp=e._getAllProperties=e._getAllPropertyDescriptors=void 0;const i=n(917),r=n(782),o=n(301),a=n(599);e._getAllPropertyDescriptors=t=>{if([null,void 0].includes(t))return{};const n=Object.getPrototypeOf(t);return{...(0,e._getAllPropertyDescriptors)(n),...Object.getOwnPropertyDescriptors(t)}},e._getAllProperties=(t,n=!1)=>{if([null,void 0].includes(t))return[];const i=new Set;for(const e of Object.getOwnPropertyNames(t))i.add(e);const r=t=>(t=>{const e=[];for(let n in t)e.push(n);return e})((0,e._getAllPropertyDescriptors)(t)).concat(Object.getOwnPropertySymbols(t)),o=[...new Set([...r(Function.prototype),...n?r(Function):[],...r(Object.prototype),...n?r(Object):[]])],a=t=>{for(const e of r(t))o.includes(e)||i.add(e)};return a(t),n&&a(Object(t).constructor),[...i]},e._hasProp=(t,e,n=!1)=>!("object"!=typeof t||!t)&&(Object.prototype.hasOwnProperty.call(t,e)||!n&&e in t),e._hasProps=(t,...n)=>{if("object"!=typeof t||!t)return!1;if(!n.length)return!1;for(const i of n)if(!(0,e._hasProp)(t,i))return!1;return!0},e._hasAnyProps=(t,...n)=>{if("object"!=typeof t||!t)return!1;if(!n.length)return!1;const i=new Set;for(const r of n)(0,e._hasProp)(t,r)&&i.add(r);return!!i.size&&[...i]},e._getProp=(t,n,i=!1)=>{const r={match:n,key:void 0,value:void 0,exists:0},a=(0,e._getAllProperties)(t,!1);if(a.includes(n))return r.key=n,r.value=t[n],r.exists=t.hasOwnProperty(n)?1:2,r;const s=(0,o._stringable)(n);if(!1!==s){if(a.includes(n=s))return r.key=n,r.value=t[n],r.exists=t.hasOwnProperty(n)?1:2,r;if(i)for(const e of a){const i=(0,o._stringable)(e);if(!1!==i&&i.toLowerCase()===n.toLowerCase())return r.key=i,r.value=t[i],r.exists=t.hasOwnProperty(n)?1:2,r}}return r},e._isClass=t=>!(!t||t.constructor!==Function||void 0===t.prototype)&&(Function.prototype!==Object.getPrototypeOf(t)||Object.getOwnPropertyNames(t.prototype).length>1),e._isFunc=(t,n=!1)=>t&&"function"==typeof t&&(!!n||!(0,e._isClass)(t)),e._minMax=(t,e)=>{let n=t,i=e;return t>e&&(n=e,i=t),[n,i]},e._dotFlat=(t,e=[])=>{if(!t||"object"!=typeof t)return{};const n=[],i=(t,r)=>{for(const o of Object.entries(t)){const[t,a]=o,s=`${r?`${r}.`:""}${t}`;e&&Array.isArray(e)&&e.length&&(e.includes(`${t}`)||e.includes(s))||(a&&"object"==typeof a?i(a,s):n.push([s,a]))}};return i(t,""),Object.fromEntries(n)},e._dotInflate=t=>{const n=Object.entries((0,e._dotFlat)(t)),i={};for(const[t,e]of n){const n=t.split(".");if(1===n.length){i[n[0]]=e;continue}let r=n.slice().reverse().reduce(((t,e)=>({[e]:t})),e),o=i;for(let t=0;t{if(Object(t)!==t)return t;let e,n=0;(n=(e=Object.keys(t)).length)&&Object.keys([...Array(n)]).join(",")===e.join(",")&&(t=Object.values(t));for(const e in t)t[e]=r(t[e]);return t};return r(i)},e._validDotPath=(t,e=!1,n=0)=>{try{if(!(t=(0,o._str)(t,!0)))throw new TypeError("Invalid dot path value.");const n=[];for(let e of t.split("."))(e=e.trim())&&n.push(e);if(!n.length)throw new TypeError(`Invalid dot path format "${t}".`);const i=[];for(let t=0;t-1){const t=[];for(let e of r.split(","))(e=e.trim())&&!/^[-_0-9a-zA-Z]+\=([^\=\.]*)$/.test(e)&&t.push(e);t.length||(o=!0)}if(!o)throw new TypeError(`Invalid dot path key "${r}".`);i.push(r)}return i.join(".")}catch(i){return new s(i,n,{dot_path:t,operations:e}),""}},e._bool=(t,e=!1,n=!0)=>{if(n&&"string"==typeof t&&(t=t.trim()),!e||["true","false",!0,!1,1,0].includes(t))return"false"!==t&&!!t},e._dotGet=(t,n,o=!1,a=0,p)=>{try{const s=(t=(0,e._validDotPath)(t,!0,a)).split(".");if(!s.length)throw new TypeError("Invalid resolve dot path format.");let c=!1,l=s.reduce(((t,n)=>{if(c)return t;if(t&&"object"==typeof t){const a=(0,e._getProp)(t,n,o);if(a.exists)return a.value;if(Array.isArray(t)){if("!reverse"===n)return t.slice().reverse();if("!slice"===n)return t.slice();let a;if((a=(0,r._num)(n,0))<0&&Number.isInteger(a))return t.slice(a);if(t.length&&n.indexOf("=")>-1){const r=[];for(let t of n.split(",")){if(!(t=t.trim()))continue;let e=t.split("=");if(2!==e.length)return[];let n=e[0].trim(),o=decodeURIComponent(e[1]);n&&r.push([n,(0,i._jsonParse)(o,o)])}let a=-1;if(r.length)for(let n=0;n-1?t[a]:void(c=!0)}}}c=!0}),n);return c?p:l}catch(e){return new s(e,a,{path:t,target:n,ignoreCase:o,_default:p},"DotGetError"),p}},e._valueOf=t=>{if(!t||"object"!=typeof t)return t;let e=t.valueOf();if(e===t){if(Object(t[Symbol.toPrimitive])===t[Symbol.toPrimitive]&&!isNaN(e=Number(t)))return e;if(!1!==(e=(0,o._stringable)(t)))return e;if("function"==typeof t.toJSON&&(e=t.toJSON())!==t)return e}return e},e._empty=(t,n=!1)=>!(![null,void 0,NaN,""].includes(t)&&(["function","boolean","number"].includes(typeof t)||("string"==typeof t||(0,a._isBuffer)(t)?(0,o._str)(t,n).length:"object"!=typeof t||(t instanceof Map||t instanceof Set?t.size:Array.isArray(t)?t.length:Object(t[Symbol.iterator])===t[Symbol.iterator]?[...t].length:(0,e._getAllProperties)(t).length)))),e._iterable=(t,e=!1)=>"function"==typeof t?.[e?Symbol.asyncIterator:Symbol.iterator],e._isObject=(t,n=!1)=>!(!t||"object"!=typeof t||Object.getPrototypeOf(t)!==Object.prototype||n&&(0,e._empty)(t)),e._isArray=(t,e=!1,n=0)=>{if(n=[0,1,2].includes(n=parseInt(n))?n:0,!Array.isArray(t)){if(1===n)return!1;const e=t?.[Symbol.iterator];if(Object(e)!==e)return!1;if(2!==n&&!["values","[Symbol.iterator]"].includes(e.name))return!1}try{const n=t.length??[...t].length;return!(!(Number.isInteger(n)&&n>=0)||e&&!n)}catch(t){return!1}},e._values=(t,n=!1,i=!1,r)=>{let o=void 0===t?[]:n?[["0",t]]:[t];if(t&&"object"==typeof t&&"function"!=typeof t)if(Object(t[Symbol.iterator])===t[Symbol.iterator]){const e=(o=[...t]).length&&o.findIndex((t=>!(Array.isArray(t)&&2===t.length&&Object.keys(t)+""=="0,1")))<0;if(n)o=e?o:Object.entries(o);else if(e){const t=[];for(const e of o)t.push(e[1]);o=t}}else if(i){const i=Object.entries(t);if(i.length||(0,e._empty)(t)&&(0,e._isObject)(t))if(!n&&i.length){const t=[];for(const e of i)t.push(e[1]);o=t}else o=i}else(0,e._empty)(t)&&(0,e._isObject)(t)&&(o=[]);if(void 0!==r){let t=r;-1===r?t=1/0:[null,!0].includes(t)&&(t=void 0),o=o.flat(t)}return o},e._dumpVal=(t,e=200,n=!1)=>{t=(0,i._jsonCopy)(t),e=(e=(0,r._int)(e,200))?e>=20?e:200:0;const o=t=>{if(Array.isArray(t)){let e=1,n="";for(let i=0;i{if("object"==typeof t&&t)for(let e in t)t.hasOwnProperty(e)&&(t[e]=a(t[e]));else t=(t=>{if(!("string"==typeof t&&t.length>e))return t;const n=`...(${t.length})`;return t.substring(0,e-n.length)+n})(t);return t};return a(n?o(t):t)},e._sort=(t,e,n,i)=>{try{const r=[...t].slice();if(!r.length)return r;const o=e,a={locales:i?.locales||"en",options:{sensitivity:"base",...Object(i?.options)}},s="function"==typeof n?n:void 0,p=(t,e,n)=>{let i=t,r=e;if(s){const o=s(t,e,n),a=parseInt(o);if([-1,1,0].includes(a))return a;i=o?.[0]??i,r=o?.[1]??r}let o=0,p=0;return"string"==typeof i&&"string"==typeof r&&"function"==typeof i.localeCompare?(1,o=i.localeCompare(r,a.locales,a.options)):o=i>r?1:i{let e=t??1;if("string"==typeof e){if(!(e=e.trim()))return 1;if(e.toLowerCase().startsWith("asc"))return 1;if(e.toLowerCase().startsWith("desc"))return-1}return-1===(e=parseInt(e))?-1:(1!==e&&console.warn(`[-] unsupported _sort \`mode\` value (${t}).`),1)},l=(t,e,n,i)=>p(t,e,i)*c(n),u=()=>{const t=new Map;let e;if(Object(o)===o){const n=(t,e="")=>Array.isArray(t)&&"string"==typeof t[0]&&(e=t[0].trim())?[e,(t[1]??"").trim()||"asc"]:void 0;if("function"==typeof o[Symbol.iterator]){const i=[...o];if(e=n(i))t.set(e[0],e[1]);else for(const r of i)(e=n(r))&&t.set(e[0],e[1])}else for(const i of Object.entries(o))(e=n(i))&&t.set(e[0],e[1])}if(!t.size)return(t,e)=>l(t,e,o);const n=[...t];return(t,e)=>{let i=0,r=0,o=0;for(const[a,s]of n){if(!Object(t).hasOwnProperty(a)&&!Object(e).hasOwnProperty(a))continue;const n=t?.[a],p=e?.[a],c=l(n,p,s,a);c&&(o=c),1===c?i++:-1===c&&r++}return i&&r&&i===r?o:i>r?1:i{const a=/\{([_0-9a-zA-Z]+)((\.[_0-9a-zA-Z]+)*)\}/g,s=(0,o._str)(t);if(!s.trim())return s;const p=`!!_${Date.now()}_!!`,c="function"==typeof r?r:void 0,l=(t,i="")=>{let r=(0,e._dotGet)(t,n,!0,0,p);if(r===p)return p;if((i=(0,o._str)(i,!0))&&(r=(0,e._dotGet)(i,r,!0,0,p)),r===p)return p;c&&(r=c(r,i,t));const a=!Array.isArray(r)&&(0,o._stringable)(r);return!1!==a?a:(0,o._str)(r,!1,!0)};if(!a.test(s)){const t=l(s);return t!==p?t:s}let u=(0,o._str)(i);return s.replace(a,((...t)=>{const e=t[1],n=t[2].replace(/^\./,"");let i=l(e,n);return i===p&&(i=u),i}))},e._arrayList=t=>(0,e._isArray)(t,!0)?[...t]:[],e._mapValues=(t,n="",i=!1,r=0,a=!0)=>{const s={},p=(0,e._arrayList)(t),c=(0,o._str)(n,!0);for(let t=0;t{const o=Object(t),a=(0,e._arrayList)(n);return i?Object.fromEntries(Object.entries(o).filter((t=>!a.includes(t[0])))):a.reduce(((t,n)=>((0,e._empty)(n,!0)||(o.hasOwnProperty(n)?t[n]=o[n]:r&&(t[n]=void 0)),t)),{})},e._chunks=(t,e=1)=>{const n=[...t],i=[],r=parseInt(e)||0;if(r<0)throw new TypeError(`Invalid \`_chunks\` \`chunk_length\` argument value (${e}).`);if(!r)return[n];for(let t=0;t{const o=(t,e="keys")=>{if("object"!=typeof t||!t)return[];try{return[...new Set([...t])]}catch(t){return console.warn(`[-] invalid \`_selectKeys\` ${e} string array object.`),[]}};t=[...t],n=o(n);const a=[];i&&(!0===i?(a.push(...n),n=[]):a.push(...o(i,"omit"))),r=!!r;const s=[],p=new Set,c={},l=n.length?Object.fromEntries(n.map((t=>[t,void 0]))):{};for(const n of t){if(Object(n)!==n)continue;const t={};for(const[i,o]of Object.entries({...l,...n}))r&&!p.has(i)&&((0,e._empty)(o,!0)?c.hasOwnProperty(i)||(c[i]=1):(c.hasOwnProperty(i)&&delete c[i],p.add(i))),a.includes(i)||(t[i]=o);s.push(t)}const u=[],d=Object.keys(c);for(const t of s){if(n.length){let i=0;const o=[];for(const s of n)a.includes(s)||d.includes(s)||(r&&(0,e._empty)(t[s],!0)&&i++,o.push([s,t[s]]));o.length&&o.length!==i&&u.push(Object.fromEntries(o));continue}let i=0;const o=[],s=Object.entries(t);for(const[t,n]of s)d.includes(t)||(r&&(0,e._empty)(n,!0)&&i++,o.push([t,n]));o.length&&o.length!==i&&u.push(Object.fromEntries(o))}return u},e._tree=(t,e)=>{const{name:n="",pad:a=0,blanks:s=!1,max_length:p=200,wrap_length:c=80,word_break:l=!1}=Object(e);let u=(0,r._posInt)(a,0)??0,d=(0,o._str)(n,!0);d.length&&(d=`[${d}]`,u+=3);const f=t=>{const e="├───",n="└───",r=" ",a="│ ",u=/^\"(.*)\"$/gs,d=[];if("string"==typeof(t=(t=>{if([null,void 0].includes(t))return String(t);if(["boolean","number"].includes(typeof t))return String(t);if(Object(t)!==t)return(0,i._jsonStringify)((0,o._str)(t,!0));const e=t[Symbol.iterator],n=Object(e)===e;return!n&&(0,o._stringable)(t)?(0,o._str)(t,!0):Object.entries(t=(0,i._jsonCopy)(t)).length?t:n?"[]":"{}"})(t)))return{type:"value",lines:[t]};const m=Object.entries(t),h=m.length,g=t[Symbol.iterator],v=Object(g)===g;for(let t=0;t=0,j=E?`[${i}]`:i,k=E&&"value"===x;if(y&&k||d.push(`${b?n:e}${j}`),y)continue;const I=(b?r:a)+(k?"".padStart(`[${i}]`.length+1):""),A="undefined"!=typeof process&&Number.isInteger(process?.stdout?.columns)&&I.lengthu>0?"".padStart(u)+t:t)).join("\n")}},16:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._pendingAbort=e._pending=e.PENDING_CACHE=e.PendingAbortError=e._resolve=e._sleep=e._asyncValues=e._asyncQueue=e._asyncAll=void 0;const i=n(782),r=n(962),o=n(301);async function a(t,e=!1){const n=Promise.resolve("function"!=typeof t?t:(async()=>t.call(this))());return e?new Promise(((t,e)=>n.then(t,e))):n}e._asyncAll=async(t,e,n)=>new Promise((i=>{const a="function"==typeof e?e:void 0,s="function"==typeof n?n:void 0;let p=0,c=0;const l=(0,r._arrayList)(t).map(((t,e)=>({index:e,value:t}))),u=l.length,d=[],f=()=>{setTimeout((()=>i(d)),0)};if(!u)return s&&s(100,u,p,c),f();s&&s(0,u,p,c);const m=(t=!1)=>{if(p++,t&&c++,s){const t=Math.min(Math.floor(p/u*100),100);try{s(t,u,p,c)}catch(t){console.warn(`[IGNORED] _asyncAll > onProgress callback exception; ${(0,o._errorText)(t)}`)}}p>=u&&f()};l.forEach((t=>{(async()=>{let{value:e,index:n}=t;return"function"==typeof e&&(e=e()),e instanceof Promise&&(e=await e),a?a(e,n,u):e})().then((e=>(d[t.index]={status:"resolved",index:t.index,value:e},m()))).catch((e=>(d[t.index]={status:"rejected",index:t.index,reason:e},m(!0))))}))})),e._asyncQueue=async(t,e=0,n,a)=>new Promise((s=>{e=(0,i._posInt)(e)??0;const p="function"==typeof n?n:void 0,c="function"==typeof a?a:void 0,l=(0,r._arrayList)(t).map(((t,e)=>({index:e,value:t}))),u=l.length;let d=0,f=0,m=0;const h=[],g=()=>{setTimeout((()=>s(h)),0)};if(!u)return c&&c(100,u,f,m),g();let v;c&&c(0,u,f,m);const _=()=>{clearTimeout(v),v=setTimeout((()=>function(){if(e&&d+1>e)return;const t=l.shift();if(!t)return;d++;const n=(t=!1)=>{if(d--,f++,t&&m++,c){const t=Math.min(Math.floor(f/u*100),100);try{c(t,u,f,m)}catch(t){console.warn(`[IGNORED] _asyncBatch > onProgress callback exception; ${(0,o._errorText)(t)}`)}}return f>=u?g():_()};(async()=>p?p(t.value,t.index,u):t.value)().then((e=>{h[t.index]={status:"resolved",index:t.index,value:e},n()})).catch((e=>{h[t.index]={status:"rejected",index:t.index,reason:e},n(!0)})),_()}()),v?50:0)};_()})),e._asyncValues=t=>({values:()=>t,size:()=>t.length,async each(t){let e=this,n=!1,i=-1,r=()=>{n=!0};for await(const o of e){if(i++,n)break;await t(o,i,e.size(),r)}},[Symbol.asyncIterator](){let e=0;const n=this;return{async next(){let i,r=n.size();return e>=r?{done:!0,value:i}:(i=await Promise.resolve(t[e]),e++,{done:!1,value:i})}}}}),e._sleep=async t=>(t=!isNaN(t)&&t>=0?t:0,new Promise((e=>setTimeout((()=>e(t)),t)))),e._resolve=a;class s extends Error{name="PendingAbortError";pending;constructor(t,e){super(t),this.pending=e}}e.PendingAbortError=s,e.PENDING_CACHE={},e._pending=(t,n,i=0,r=!1)=>{if(!(t=(0,o._str)(t,!0)))throw new TypeError("Invalid pending `key` value.");if("function"!=typeof n)throw new TypeError("Invalid pending `promise` callback function.");let p,c,l=e.PENDING_CACHE[t];const u=l&&l.promise instanceof Promise&&l.resolved>-1?l.promise:void 0;if(!u||i){const p=u&&1!==i?a(u,!0).then((async t=>2===i?t:a(n))).catch((async()=>a(n))):a(n);l=e.PENDING_CACHE[t]={key:t,promise:p,resolved:0,keep:r,aborted:!1,abortError:void 0,abort:function(t){const e=this;"function"!=typeof c||e.resolved||e.aborted||c(e.abortError=new s((0,o._str)(t,!0)||"aborted",e),e.aborted=!0)}}}else l.abortError=void 0,l.aborted=!1;let d=0;const f=new Promise(((n,i)=>{p=i=>{d||(d=1,n(i)),l.resolved=1,e.PENDING_CACHE[t]!==l||l.keep||delete e.PENDING_CACHE[t]},c=(n,r=!1)=>{d||(d=-1,i(n)),r||(l.resolved=-1,e.PENDING_CACHE[t]===l&&delete e.PENDING_CACHE[t])},l.promise.then(p,(t=>{"function"==typeof c&&c(t)}))}));return f.pending=l,f},e._pendingAbort=(t=!1,n,i)=>{if(n=(0,o._str)(n,!0)){const r=e.PENDING_CACHE[n];"function"==typeof r?.abort&&r.abort(i),t&&r?.key&&delete e.PENDING_CACHE[r.key]}else for(const n of Object.values(e.PENDING_CACHE))"function"==typeof n?.abort&&n.abort(i),t&&n?.key&&delete e.PENDING_CACHE[n.key]}},78:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._queue=void 0,e._queue=()=>{const t={};let e=0,n=0;return{get count(){return n},get length(){return n-e},get isEmpty(){return 0===this.length},enqueue(e){t[n]=e,n++},dequeue(){const n=t[e];return delete t[e],e++,n},peek:()=>t[e],values:()=>Object.values(t)}}},347:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._rc4=void 0,e._rc4=(t,e)=>{if(!(t=String(t??"")))return"";e=String(e??"alohomora");const n=[],i=[];for(let t=0;t<256;t++)n[t]=t,i[t]=e.charCodeAt(t%e.length);let r=0;for(let t=0;t<256;t++)r=(r+n[t]+i[t])%256,[n[t],n[r]]=[n[r],n[t]];let o="",a=0;r=0;for(let e=0;e{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._wrapLines=e._strKeyValues=e._parseKeyValues=e._keyValue=e._cr=e._textMaxLength=e._errorText=e._split=e._toCsv=e._parseCsv=e._isEmail=e._isUrl=e._parseDataUri=e._hash53=e._hashCodeStr=e._hashCode=e._toUpperCase=e._toLowerCase=e._toCamelCase=e._toStudlyCase=e._toSlugCase=e._toSnakeCase=e._toSentenceCase=e._toTitleCase=e._rtrim=e._ltrim=e._trim=e._sqlEscape=e._strEscape=e._regEscape=e._strNorm=e._str=e._stringable=e._string=e._uuid=e._xuid=void 0;const i=n(917);e._xuid=()=>Math.random().toString(36).substring(2)+(new Date).getTime().toString(36),e._uuid=(t,n)=>{const i=void 0!==t&&!isNaN(parseInt(t+""))&&Number.isInteger(t)&&t>=7&&t<=64?t:16,r=()=>{let t="";for(;t.length(t&&(t=!1),r())));o=t?e+r():e}else o=r();return o},e._string=(t,e="")=>{let n="";try{n=t instanceof Date&&!isNaN(t.getTime())?t.toISOString():String(t)}catch(t){n=e}return n},e._stringable=t=>{const n=`!${Date.now()}!`,i=(0,e._string)(t,n);return i!==n&&!/\[object \w+\]/.test(i)&&i},e._str=(t,n=!1,r=!1)=>{if("string"!=typeof t){if(null==t)return"";if("object"==typeof t){if(Array.isArray(t))return r?(0,i._jsonStringify)(t):"";const n=(0,e._stringable)(t);if(!1===n)return r?(0,i._jsonStringify)(t):"";t=n}else t=(0,e._string)(t)}return n?t.trim():t},e._strNorm=t=>(0,e._str)(t).normalize("NFD").replace(/[\u0300-\u036f]/g,""),e._regEscape=t=>(0,e._str)(t).replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),e._strEscape=t=>JSON.stringify((0,e._str)(t)).replace(/\\u([\d\w]{4})/g,((t,e)=>{const n=parseInt(e,16);return n>255?t:"\\"+encodeURIComponent(String.fromCharCode(n)).replace("%","x").replace("x0B","v")})).replace(/^"|"$/g,"").replace(/\\"/g,'"'),e._sqlEscape=t=>null==t?null:"boolean"==typeof t?t:"number"==typeof t?isNaN(t)?null:t:(t=(0,e._str)(t,!1,!0))?t.replace(/\\/g,"\\\\").replace(/\0/g,"\\0").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/'/g,"\\'").replace(/"/g,'\\"').replace(/\x1a/g,"\\Z"):t,e._trim=(t,n=" \r\n\t\f\v\0",i="")=>{if(!(t=(0,e._str)(t))||!(n=(0,e._str)(n)))return t;n=n.replace(/\{default\}/," \r\n\t\f\v\0");let r=[],o=0,a=0;for(const t of[...new Set([...n])])t&&("-"!==t?"_"!==t?r.push(t):a=1:o=1);a&&r.unshift("_"),o&&r.unshift("-");let s=`[${(0,e._regEscape)(r.join(""))}]*`,p=`^${s}|${s}$`;return["l","left"].includes(i)?p=`^${s}`:["r","right"].includes(i)&&(p=`${s}$`),t.replace(new RegExp(p,"gs"),"")},e._ltrim=(t,n=" \r\n\t\f\v\0")=>(0,e._trim)(t,n,"left"),e._rtrim=(t,n=" \r\n\t\f\v\0")=>(0,e._trim)(t,n,"right"),e._toTitleCase=(t,n=!1)=>(0,e._str)(t).replace(/\w\S*/g,(t=>t[0].toUpperCase()+(n?t.substring(1):t.substring(1).toLowerCase()))),e._toSentenceCase=(t,n=!1)=>{let i="";for(let r of(0,e._str)(t).split(/((?:\.|\?|!)\s*)/)){if(r.length){const t=r.charAt(0).toUpperCase(),e=r.length>1?r.slice(1):"";r=t+(n?e:e.toLowerCase())}i+=r}return i},e._toSnakeCase=(t,n=!1)=>{let i=(0,e._strNorm)((0,e._trim)(t)).replace(/[A-Z]+/g,(t=>t[0].toUpperCase()+t.substring(1).toLowerCase())).replace(/\W+/g," ").split(/ |\B(?=[A-Z])/).join("_").replace(/_+/g,"_").toLowerCase();return"_"===i?"":(/^_|_$/.test(i)&&n&&(i=(0,e._trim)(i,"_",["l","left","r","right"].includes(n)?n:"")),i)},e._toSlugCase=(t,n=!1)=>(0,e._toSnakeCase)(t,n).replace(/_/g,"-"),e._toStudlyCase=t=>{let n="";for(const i of(0,e._toSnakeCase)(t).split("_"))i.length&&(n+=i[0].toUpperCase()+i.substring(1).toLowerCase());return n},e._toCamelCase=t=>{let n=(0,e._toStudlyCase)(t);return n.length&&(n=n[0].toLowerCase()+n.substring(1)),n},e._toLowerCase=t=>(0,e._str)(t).toLowerCase(),e._toUpperCase=t=>(0,e._str)(t).toUpperCase(),e._hashCode=t=>{let n=0;if(!(t=(0,e._str)(t)))return n;for(let e=0;e{const n=(0,e._hashCode)(t)+"",i=/^-/;return i.test(n)?n.replace(i,"n"):"x"+n},e._hash53=(t,n=0)=>{if(!(t=(0,e._str)(t)))return 0;isNaN(n)&&(n=0);let i=3735928559^n,r=1103547991^n;for(let e,n=0;n>>16,2246822507)^Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507)^Math.imul(i^i>>>13,3266489909),4294967296*(2097151&r)+(i>>>0)},e._parseDataUri=t=>{if(!(t=(0,e._str)(t,!0)))return;const n=/data:(?[\w/\-\.]+);(?(charset=)?([^,]+)),(?[^\s]+)/.exec(t);return n?{mime:n[1],encoding:n[2],charset:n[3]&&n[4]||"",data:n[5]}:void 0},e._isUrl=(t,n=!1)=>!(!t||"string"!=typeof t||!t.trim())&&(!(!n||!(0,e._parseDataUri)(t))||new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.?)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$","i").test(t)),e._isEmail=t=>!(!t||"string"!=typeof t||!t.trim())&&/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(t.toLowerCase()),e._parseCsv=(t,n,i)=>{const r=new RegExp("","g"),o=new RegExp("","g"),a=new RegExp("","g"),s=1===(n=(0,e._str)(n,!0)).length?n:",",p=new RegExp("(^|["+s+'\\n])"([^"]*(?:""[^"]*)*)"(?=($|['+s+"\\n]))","g"),c=(0,e._str)(t,!0).replace(/\r/g,"").replace(/\n+$/,"").replace(p,((t,e,n)=>e+n.replace(/\n/g,"").replace(/""/g,"").replace(/,/g,""))).split(/\n/),l=[];for(const t of c){if(!t.length)continue;const e=[];for(const n of t.split(s))e.push(n.replace(r,i??"\n").replace(o,'"').replace(a,","));l.push(e)}return l},e._toCsv=(t,n,i)=>{const r=1===(n=(0,e._str)(n,!0)).length?n:",",o=[],a=t=>{let n=(0,e._str)(t);return n.length?("string"==typeof i&&n.indexOf(i)>-1&&"\n"!==i&&(n=n.replace(new RegExp(i,"g"),"\n")),n=n.replace(/\r/g,"").replace(/\n+$/,"").replace(/"/g,'""'),(n.indexOf(r)>-1||n.indexOf('"')>-1||n.indexOf("\n")>-1||/^\s+|\s+$/.test(n))&&(n=`"${n}"`),n):n};if(t&&"object"==typeof t&&t[Symbol.iterator]){const e=[],n=Object.values([...t]);for(const t of n)"object"==typeof t&&t[Symbol.iterator]&&e.push(t);if(e.length)for(const t of n){const e=[];for(const n of t)e.push(a(n));o.push(e)}else{const t=[];for(const e of n)t.push(a(e));o.push(t)}}else if(t=(0,e._str)(t,!0)){const n=(0,e._parseCsv)(t,r,i);for(const t of n){const e=[];for(const n of t)e.push(a(n));o.push(e)}}let s="",p=0;for(let t=0;t{let r,o=(0,e._str)(t);"string"==typeof n?r=new RegExp((0,e._regEscape)((0,e._str)(n))):n instanceof RegExp&&(r=n),r&&(r=new RegExp(r,[...new Set(("g"+r.flags).split(""))].join(""))),i=i&&!isNaN(i=parseInt(i+""))&&i>=0?i:void 0;const a=r?o.split(r,i):o.split(void 0,i),s=r?o.match(r)||[]:o.match(void 0)||[],p=[];for(let t=0;t{const n={},i=r=>{if("object"!=typeof r||!r){const t=(0,e._str)(r,!0);return void(t&&(n[t.toLowerCase()]=t))}if(Array.isArray(r)){for(const t of r)i(t);return}if(r instanceof Error){let i=(0,e._str)(t.name,!0);["Error","TypeError"].includes(i)&&(i="");const r=(0,e._str)(t.message,!0),o=r?(i?i+" ":"")+r:"";return void(o&&(n[o.toLowerCase()]=o))}if(r.response)return i(r.response);if(r.body)return i(r.body);if(r.error)return i(r.error);if(r.message)return i(r.message);const o=(0,e._str)(r,!0,!0);o&&(n[o.toLowerCase()]=o)};return i(t),Object.values(n).join("\n")},e._textMaxLength=(t,n=1e3,i=0)=>{const r=(t=(0,e._str)(t)).length,o=!isNaN(n=parseInt(n))&&n>0?n:1e3;if(r<=o)return t;const a=2===i?`...(${t.length})`:1===i?"...":"",s=a.length,p=o-s;return p>s&&r>p?t.substring(0,p)+a:t.substring(0,o)},e._cr=(t,e,n)=>{const i=[null,void 0].includes(t)?"":String(t),r=Number.isInteger(e=parseInt(e))&&e>=0?e:0,o=([null,void 0].includes(n)?"":String(n))||"QWxvaG9tb3JhIQ";let a="";for(let t=0;t{if(!(t=(0,e._str)(t,!0)))return t;const o=(0,e._str)(i)||"=",a=(0,e._str)(r)||"\n";return n?t.replace(new RegExp(o,"g"),"").replace(new RegExp(a,"g"),""):t.replace(new RegExp("","g"),o).replace(new RegExp("","g"),a)},e._parseKeyValues=(t,n=!1,i="=",r="\n")=>{let o={},a=-1;for(let s of(0,e._str)(t,!0).split("\n")){if(!(s=(0,e._str)(s,!0)))continue;const t=s.trim().split("=");a<0&&(a=t.length>=2?1:0);const p=(0,e._keyValue)(t[0],n,i,r),c=a?(0,e._keyValue)(t[1],n,i,r):p;p&&c&&(o[p.toLowerCase()]=[p,c])}return Object.values(o)},e._strKeyValues=(t,n,i,r="=",o="\n")=>{const a={},s=(0,e._str)(r)||"=",p=(0,e._str)(o)||"\n";let c,l,u=-1,d=!0;const f=t=>{n=(0,e._str)(c=n,!0),i=(0,e._str)(l=i,!0),n&&!i?(i=n,l=c):i&&!n&&(n=i,c=l),Object(t)===t&&(n||i||Object(t)!==t||(t.hasOwnProperty("key")&&(l=i=c=n="key"),t.hasOwnProperty("value")&&(!n&&t.hasOwnProperty("label")?(l=i="label",c=n="value"):c=n=l=i="value")),u=(0,e._str)(c,!0)&&(0,e._str)(l,!0)&&t.hasOwnProperty(c)&&t.hasOwnProperty(l)?1:0)},m=t=>(0,e._keyValue)(t,!0,s,p),h=(t,n)=>{if(Object(t)===t)if(Object(t[Symbol.iterator])===t[Symbol.iterator]){const e=[...t];if(!e.length)return;if(n&&Object(e[0])===e[0])return void e.forEach((t=>h(t,!1)));u<0&&f(e);const i=m(e[u?c:0]),r=m(e[u?l:1]);i&&r&&(i.toLowerCase()!==r.toLowerCase()&&(d=!1),a[i.toLowerCase()]=[i,r])}else{if(u<0&&f(t),!u)return;const e=m(t[c]),n=m(t[l]);e&&n&&(e.toLowerCase()!==n.toLowerCase()&&(d=!1),a[e.toLowerCase()]=[e,n])}else if(n){const n=(0,e._str)(t,!0);if(!n)return;const i=(0,e._parseKeyValues)(n,!1,s,p);return void(i.length&&i.forEach((t=>h(t,!1))))}},g=Object(t)===t&&Object(t[Symbol.iterator])===t[Symbol.iterator]?[...t]:[t];return h(g,!0),Object.values(a).map((t=>d?t[0]:t.join(s))).join(p)},e._wrapLines=(t,n=0,i=!1,r)=>{const o="function"==typeof r?r:void 0,a=Number.isInteger(n=parseInt(n))&&n>=0?n:0;let s=[],p=[];const c=t=>{if(o){const n=o(t,s);if([void 0,null].includes(n))return;t=(0,e._str)(n)}s.push(t)},l=t=>{if(!a)return c(t);const e=t=>{const e=[...p,t].join(" ");if(e.length>a)if(i){let t="",n=0;for(;(t=e.substring(n,n+a)).length===a;)c(t),n+=a;p=[t]}else if(t.length>a){let t="",n=0;for(;(t=e.substring(n,n+a)).length===a;)c(t),n+=a;p=[t]}else p.length&&c([...p,""].join(" ")),(p=[t]).join(" ").length===a&&(c(p.join(" ")),p=[]);else e.length===a?(c(e),p=[]):p=[e]};for(const n of t.split(" "))e(n)};for(const n of(0,e._str)(t).split("\n"))l(n);return p&&c(p.join(" ")),s}},612:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._utf8Decode=e._utf8Encode=e._unescape=e._escape=void 0;const i=n(301);e._escape=t=>{const e=(0,i._str)(t);if(!e.length)return e;let n="";for(let t=0;t{const e=(0,i._str)(t),n=e.length;if(!n)return e;let r="",o=0;for(;o(0,e._unescape)(encodeURIComponent((0,i._str)(t))),e._utf8Decode=t=>decodeURIComponent((0,e._escape)(t))},377:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(586),e),r(n(501),e),r(n(473),e),r(n(740),e),r(n(47),e),r(n(925),e),r(n(802),e),r(n(597),e),r(n(917),e),r(n(782),e),r(n(962),e),r(n(16),e),r(n(78),e),r(n(301),e),r(n(612),e),r(n(347),e)},154:t=>{"use strict";t.exports=JSON.parse('{"123":"application/vnd.lotus-1-2-3","tmp":"text/x-tmp","php":"text/x-php","scss":"text/x-scss","ts":"text/x-typescript","tsx":"application/javascript","jsx":"application/javascript","ez":"application/andrew-inset","aw":"application/applixware","atom":"application/atom+xml","atomcat":"application/atomcat+xml","atomsvc":"application/atomsvc+xml","ccxml":"application/ccxml+xml","cdmia":"application/cdmi-capability","cdmic":"application/cdmi-container","cdmid":"application/cdmi-domain","cdmio":"application/cdmi-object","cdmiq":"application/cdmi-queue","cu":"application/cu-seeme","davmount":"application/davmount+xml","dbk":"application/docbook+xml","dssc":"application/dssc+der","xdssc":"application/dssc+xml","ecma":"application/ecmascript","emma":"application/emma+xml","epub":"application/epub+zip","exi":"application/exi","pfr":"application/font-tdpfr","gml":"application/gml+xml","gpx":"application/gpx+xml","gxf":"application/gxf","stk":"application/hyperstudio","ink":"application/inkml+xml","inkml":"application/inkml+xml","ipfix":"application/ipfix","jar":"application/java-archive","ser":"application/java-serialized-object","class":"application/java-vm","json":"application/json","jsonml":"application/jsonml+json","lostxml":"application/lost+xml","hqx":"application/mac-binhex40","cpt":"application/mac-compactpro","mads":"application/mads+xml","mrc":"application/marc","mrcx":"application/marcxml+xml","ma":"application/mathematica","nb":"application/mathematica","mb":"application/mathematica","mathml":"application/mathml+xml","mbox":"application/mbox","mscml":"application/mediaservercontrol+xml","metalink":"application/metalink+xml","meta4":"application/metalink4+xml","mets":"application/mets+xml","mods":"application/mods+xml","m21":"application/mp21","mp21":"application/mp21","mp4s":"application/mp4","doc":"application/msword","dot":"application/msword","mxf":"application/mxf","bin":"application/octet-stream","dms":"application/octet-stream","lrf":"application/octet-stream","mar":"application/octet-stream","so":"application/octet-stream","dist":"application/octet-stream","distz":"application/octet-stream","pkg":"application/octet-stream","bpk":"application/octet-stream","dump":"application/octet-stream","elc":"application/octet-stream","deploy":"application/octet-stream","oda":"application/oda","opf":"application/oebps-package+xml","ogx":"application/ogg","omdoc":"application/omdoc+xml","onetoc":"application/onenote","onetoc2":"application/onenote","onetmp":"application/onenote","onepkg":"application/onenote","oxps":"application/oxps","xer":"application/patch-ops-error+xml","pdf":"application/pdf","pgp":"application/pgp-encrypted","asc":"application/pgp-signature","sig":"application/pgp-signature","prf":"application/pics-rules","p10":"application/pkcs10","p7m":"application/pkcs7-mime","p7c":"application/pkcs7-mime","p7s":"application/pkcs7-signature","p8":"application/pkcs8","ac":"application/pkix-attr-cert","cer":"application/pkix-cert","crl":"application/pkix-crl","pkipath":"application/pkix-pkipath","pki":"application/pkixcmp","pls":"application/pls+xml","ai":"application/postscript","eps":"application/postscript","ps":"application/postscript","cww":"application/prs.cww","pskcxml":"application/pskc+xml","rdf":"application/rdf+xml","rif":"application/reginfo+xml","rnc":"application/relax-ng-compact-syntax","rl":"application/resource-lists+xml","rld":"application/resource-lists-diff+xml","rs":"application/rls-services+xml","gbr":"application/rpki-ghostbusters","mft":"application/rpki-manifest","roa":"application/rpki-roa","rsd":"application/rsd+xml","rss":"application/rss+xml","rtf":"application/rtf","sbml":"application/sbml+xml","scq":"application/scvp-cv-request","scs":"application/scvp-cv-response","spq":"application/scvp-vp-request","spp":"application/scvp-vp-response","sdp":"application/sdp","setpay":"application/set-payment-initiation","setreg":"application/set-registration-initiation","shf":"application/shf+xml","smi":"application/smil+xml","smil":"application/smil+xml","rq":"application/sparql-query","srx":"application/sparql-results+xml","gram":"application/srgs","grxml":"application/srgs+xml","sru":"application/sru+xml","ssdl":"application/ssdl+xml","ssml":"application/ssml+xml","tei":"application/tei+xml","teicorpus":"application/tei+xml","tfi":"application/thraud+xml","tsd":"application/timestamped-data","plb":"application/vnd.3gpp.pic-bw-large","psb":"application/vnd.3gpp.pic-bw-small","pvb":"application/vnd.3gpp.pic-bw-var","tcap":"application/vnd.3gpp2.tcap","pwn":"application/vnd.3m.post-it-notes","aso":"application/vnd.accpac.simply.aso","imp":"application/vnd.accpac.simply.imp","acu":"application/vnd.acucobol","atc":"application/vnd.acucorp","acutc":"application/vnd.acucorp","air":"application/vnd.adobe.air-application-installer-package+zip","fcdt":"application/vnd.adobe.formscentral.fcdt","fxp":"application/vnd.adobe.fxp","fxpl":"application/vnd.adobe.fxp","xdp":"application/vnd.adobe.xdp+xml","xfdf":"application/vnd.adobe.xfdf","ahead":"application/vnd.ahead.space","azf":"application/vnd.airzip.filesecure.azf","azs":"application/vnd.airzip.filesecure.azs","azw":"application/vnd.amazon.ebook","acc":"application/vnd.americandynamics.acc","ami":"application/vnd.amiga.ami","apk":"application/vnd.android.package-archive","cii":"application/vnd.anser-web-certificate-issue-initiation","fti":"application/vnd.anser-web-funds-transfer-initiation","atx":"application/vnd.antix.game-component","mpkg":"application/vnd.apple.installer+xml","m3u8":"application/vnd.apple.mpegurl","swi":"application/vnd.aristanetworks.swi","iota":"application/vnd.astraea-software.iota","aep":"application/vnd.audiograph","mpm":"application/vnd.blueice.multipass","bmi":"application/vnd.bmi","rep":"application/vnd.businessobjects","cdxml":"application/vnd.chemdraw+xml","mmd":"application/vnd.chipnuts.karaoke-mmd","cdy":"application/vnd.cinderella","cla":"application/vnd.claymore","rp9":"application/vnd.cloanto.rp9","c4g":"application/vnd.clonk.c4group","c4d":"application/vnd.clonk.c4group","c4f":"application/vnd.clonk.c4group","c4p":"application/vnd.clonk.c4group","c4u":"application/vnd.clonk.c4group","c11amc":"application/vnd.cluetrust.cartomobile-config","c11amz":"application/vnd.cluetrust.cartomobile-config-pkg","csp":"application/vnd.commonspace","cdbcmsg":"application/vnd.contact.cmsg","cmc":"application/vnd.cosmocaller","clkx":"application/vnd.crick.clicker","clkk":"application/vnd.crick.clicker.keyboard","clkp":"application/vnd.crick.clicker.palette","clkt":"application/vnd.crick.clicker.template","clkw":"application/vnd.crick.clicker.wordbank","wbs":"application/vnd.criticaltools.wbs+xml","pml":"application/vnd.ctc-posml","ppd":"application/vnd.cups-ppd","car":"application/vnd.curl.car","pcurl":"application/vnd.curl.pcurl","dart":"application/vnd.dart","rdz":"application/vnd.data-vision.rdz","uvf":"application/vnd.dece.data","uvvf":"application/vnd.dece.data","uvd":"application/vnd.dece.data","uvvd":"application/vnd.dece.data","uvt":"application/vnd.dece.ttml+xml","uvvt":"application/vnd.dece.ttml+xml","uvx":"application/vnd.dece.unspecified","uvvx":"application/vnd.dece.unspecified","uvz":"application/vnd.dece.zip","uvvz":"application/vnd.dece.zip","fe_launch":"application/vnd.denovo.fcselayout-link","dna":"application/vnd.dna","mlp":"application/vnd.dolby.mlp","dpg":"application/vnd.dpgraph","dfac":"application/vnd.dreamfactory","kpxx":"application/vnd.ds-keypoint","ait":"application/vnd.dvb.ait","svc":"application/vnd.dvb.service","geo":"application/vnd.dynageo","mag":"application/vnd.ecowin.chart","nml":"application/vnd.enliven","esf":"application/vnd.epson.esf","msf":"application/vnd.epson.msf","qam":"application/vnd.epson.quickanime","slt":"application/vnd.epson.salt","ssf":"application/vnd.epson.ssf","es3":"application/vnd.eszigno3+xml","et3":"application/vnd.eszigno3+xml","ez2":"application/vnd.ezpix-album","ez3":"application/vnd.ezpix-package","fdf":"application/vnd.fdf","mseed":"application/vnd.fdsn.mseed","seed":"application/vnd.fdsn.seed","dataless":"application/vnd.fdsn.seed","gph":"application/vnd.flographit","ftc":"application/vnd.fluxtime.clip","fm":"application/vnd.framemaker","frame":"application/vnd.framemaker","maker":"application/vnd.framemaker","book":"application/vnd.framemaker","fnc":"application/vnd.frogans.fnc","ltf":"application/vnd.frogans.ltf","fsc":"application/vnd.fsc.weblaunch","oas":"application/vnd.fujitsu.oasys","oa2":"application/vnd.fujitsu.oasys2","oa3":"application/vnd.fujitsu.oasys3","fg5":"application/vnd.fujitsu.oasysgp","bh2":"application/vnd.fujitsu.oasysprs","ddd":"application/vnd.fujixerox.ddd","xdw":"application/vnd.fujixerox.docuworks","xbd":"application/vnd.fujixerox.docuworks.binder","fzs":"application/vnd.fuzzysheet","txd":"application/vnd.genomatix.tuxedo","ggb":"application/vnd.geogebra.file","ggt":"application/vnd.geogebra.tool","gex":"application/vnd.geometry-explorer","gre":"application/vnd.geometry-explorer","gxt":"application/vnd.geonext","g2w":"application/vnd.geoplan","g3w":"application/vnd.geospace","gmx":"application/vnd.gmx","kml":"application/vnd.google-earth.kml+xml","kmz":"application/vnd.google-earth.kmz","gqf":"application/vnd.grafeq","gqs":"application/vnd.grafeq","gac":"application/vnd.groove-account","ghf":"application/vnd.groove-help","gim":"application/vnd.groove-identity-message","grv":"application/vnd.groove-injector","gtm":"application/vnd.groove-tool-message","tpl":"application/vnd.groove-tool-template","vcg":"application/vnd.groove-vcard","hal":"application/vnd.hal+xml","zmm":"application/vnd.handheld-entertainment+xml","hbci":"application/vnd.hbci","les":"application/vnd.hhe.lesson-player","hpgl":"application/vnd.hp-hpgl","hpid":"application/vnd.hp-hpid","hps":"application/vnd.hp-hps","jlt":"application/vnd.hp-jlyt","pcl":"application/vnd.hp-pcl","pclxl":"application/vnd.hp-pclxl","sfd-hdstx":"application/vnd.hydrostatix.sof-data","mpy":"application/vnd.ibm.minipay","afp":"application/vnd.ibm.modcap","listafp":"application/vnd.ibm.modcap","list3820":"application/vnd.ibm.modcap","irm":"application/vnd.ibm.rights-management","sc":"application/vnd.ibm.secure-container","icc":"application/vnd.iccprofile","icm":"application/vnd.iccprofile","igl":"application/vnd.igloader","ivp":"application/vnd.immervision-ivp","ivu":"application/vnd.immervision-ivu","igm":"application/vnd.insors.igm","xpw":"application/vnd.intercon.formnet","xpx":"application/vnd.intercon.formnet","i2g":"application/vnd.intergeo","qbo":"application/vnd.intu.qbo","qfx":"application/vnd.intu.qfx","rcprofile":"application/vnd.ipunplugged.rcprofile","irp":"application/vnd.irepository.package+xml","xpr":"application/vnd.is-xpr","fcs":"application/vnd.isac.fcs","jam":"application/vnd.jam","rms":"application/vnd.jcp.javame.midlet-rms","jisp":"application/vnd.jisp","joda":"application/vnd.joost.joda-archive","ktz":"application/vnd.kahootz","ktr":"application/vnd.kahootz","karbon":"application/vnd.kde.karbon","chrt":"application/vnd.kde.kchart","kfo":"application/vnd.kde.kformula","flw":"application/vnd.kde.kivio","kon":"application/vnd.kde.kontour","kpr":"application/vnd.kde.kpresenter","kpt":"application/vnd.kde.kpresenter","ksp":"application/vnd.kde.kspread","kwd":"application/vnd.kde.kword","kwt":"application/vnd.kde.kword","htke":"application/vnd.kenameaapp","kia":"application/vnd.kidspiration","kne":"application/vnd.kinar","knp":"application/vnd.kinar","skp":"application/vnd.koan","skd":"application/vnd.koan","skt":"application/vnd.koan","skm":"application/vnd.koan","sse":"application/vnd.kodak-descriptor","lasxml":"application/vnd.las.las+xml","lbd":"application/vnd.llamagraphics.life-balance.desktop","lbe":"application/vnd.llamagraphics.life-balance.exchange+xml","apr":"application/vnd.lotus-approach","pre":"application/vnd.lotus-freelance","nsf":"application/vnd.lotus-notes","org":"application/vnd.lotus-organizer","scm":"application/vnd.lotus-screencam","lwp":"application/vnd.lotus-wordpro","portpkg":"application/vnd.macports.portpkg","mcd":"application/vnd.mcd","mc1":"application/vnd.medcalcdata","cdkey":"application/vnd.mediastation.cdkey","mwf":"application/vnd.mfer","mfm":"application/vnd.mfmp","flo":"application/vnd.micrografx.flo","igx":"application/vnd.micrografx.igx","mif":"application/vnd.mif","daf":"application/vnd.mobius.daf","dis":"application/vnd.mobius.dis","mbk":"application/vnd.mobius.mbk","mqy":"application/vnd.mobius.mqy","msl":"application/vnd.mobius.msl","plc":"application/vnd.mobius.plc","txf":"application/vnd.mobius.txf","mpn":"application/vnd.mophun.application","mpc":"application/vnd.mophun.certificate","xul":"application/vnd.mozilla.xul+xml","cil":"application/vnd.ms-artgalry","cab":"application/vnd.ms-cab-compressed","xls":"application/vnd.ms-excel","xlm":"application/vnd.ms-excel","xla":"application/vnd.ms-excel","xlc":"application/vnd.ms-excel","xlt":"application/vnd.ms-excel","xlw":"application/vnd.ms-excel","xlam":"application/vnd.ms-excel.addin.macroenabled.12","xlsb":"application/vnd.ms-excel.sheet.binary.macroenabled.12","xlsm":"application/vnd.ms-excel.sheet.macroenabled.12","xltm":"application/vnd.ms-excel.template.macroenabled.12","eot":"application/vnd.ms-fontobject","chm":"application/vnd.ms-htmlhelp","ims":"application/vnd.ms-ims","lrm":"application/vnd.ms-lrm","thmx":"application/vnd.ms-officetheme","cat":"application/vnd.ms-pki.seccat","stl":"application/vnd.ms-pki.stl","ppt":"application/vnd.ms-powerpoint","pps":"application/vnd.ms-powerpoint","pot":"application/vnd.ms-powerpoint","ppam":"application/vnd.ms-powerpoint.addin.macroenabled.12","pptm":"application/vnd.ms-powerpoint.presentation.macroenabled.12","sldm":"application/vnd.ms-powerpoint.slide.macroenabled.12","ppsm":"application/vnd.ms-powerpoint.slideshow.macroenabled.12","potm":"application/vnd.ms-powerpoint.template.macroenabled.12","mpp":"application/vnd.ms-project","mpt":"application/vnd.ms-project","docm":"application/vnd.ms-word.document.macroenabled.12","dotm":"application/vnd.ms-word.template.macroenabled.12","wps":"application/vnd.ms-works","wks":"application/vnd.ms-works","wcm":"application/vnd.ms-works","wdb":"application/vnd.ms-works","wpl":"application/vnd.ms-wpl","xps":"application/vnd.ms-xpsdocument","mseq":"application/vnd.mseq","mus":"application/vnd.musician","msty":"application/vnd.muvee.style","taglet":"application/vnd.mynfc","nlu":"application/vnd.neurolanguage.nlu","ntf":"application/vnd.nitf","nitf":"application/vnd.nitf","nnd":"application/vnd.noblenet-directory","nns":"application/vnd.noblenet-sealer","nnw":"application/vnd.noblenet-web","ngdat":"application/vnd.nokia.n-gage.data","n-gage":"application/vnd.nokia.n-gage.symbian.install","rpst":"application/vnd.nokia.radio-preset","rpss":"application/vnd.nokia.radio-presets","edm":"application/vnd.novadigm.edm","edx":"application/vnd.novadigm.edx","ext":"application/vnd.novadigm.ext","odc":"application/vnd.oasis.opendocument.chart","otc":"application/vnd.oasis.opendocument.chart-template","odb":"application/vnd.oasis.opendocument.database","odf":"application/vnd.oasis.opendocument.formula","odft":"application/vnd.oasis.opendocument.formula-template","odg":"application/vnd.oasis.opendocument.graphics","otg":"application/vnd.oasis.opendocument.graphics-template","odi":"application/vnd.oasis.opendocument.image","oti":"application/vnd.oasis.opendocument.image-template","odp":"application/vnd.oasis.opendocument.presentation","otp":"application/vnd.oasis.opendocument.presentation-template","ods":"application/vnd.oasis.opendocument.spreadsheet","ots":"application/vnd.oasis.opendocument.spreadsheet-template","odt":"application/vnd.oasis.opendocument.text","odm":"application/vnd.oasis.opendocument.text-master","ott":"application/vnd.oasis.opendocument.text-template","oth":"application/vnd.oasis.opendocument.text-web","xo":"application/vnd.olpc-sugar","dd2":"application/vnd.oma.dd2+xml","oxt":"application/vnd.openofficeorg.extension","pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation","sldx":"application/vnd.openxmlformats-officedocument.presentationml.slide","ppsx":"application/vnd.openxmlformats-officedocument.presentationml.slideshow","potx":"application/vnd.openxmlformats-officedocument.presentationml.template","xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","xltx":"application/vnd.openxmlformats-officedocument.spreadsheetml.template","docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document","dotx":"application/vnd.openxmlformats-officedocument.wordprocessingml.template","mgp":"application/vnd.osgeo.mapguide.package","dp":"application/vnd.osgi.dp","esa":"application/vnd.osgi.subsystem","pdb":"application/vnd.palm","pqa":"application/vnd.palm","oprc":"application/vnd.palm","paw":"application/vnd.pawaafile","str":"application/vnd.pg.format","ei6":"application/vnd.pg.osasli","efif":"application/vnd.picsel","wg":"application/vnd.pmi.widget","plf":"application/vnd.pocketlearn","pbd":"application/vnd.powerbuilder6","box":"application/vnd.previewsystems.box","mgz":"application/vnd.proteus.magazine","qps":"application/vnd.publishare-delta-tree","ptid":"application/vnd.pvi.ptid1","qxd":"application/vnd.quark.quarkxpress","qxt":"application/vnd.quark.quarkxpress","qwd":"application/vnd.quark.quarkxpress","qwt":"application/vnd.quark.quarkxpress","qxl":"application/vnd.quark.quarkxpress","qxb":"application/vnd.quark.quarkxpress","bed":"application/vnd.realvnc.bed","mxl":"application/vnd.recordare.musicxml","musicxml":"application/vnd.recordare.musicxml+xml","cryptonote":"application/vnd.rig.cryptonote","cod":"application/vnd.rim.cod","rm":"application/vnd.rn-realmedia","rmvb":"application/vnd.rn-realmedia-vbr","link66":"application/vnd.route66.link66+xml","st":"application/vnd.sailingtracker.track","see":"application/vnd.seemail","sema":"application/vnd.sema","semd":"application/vnd.semd","semf":"application/vnd.semf","ifm":"application/vnd.shana.informed.formdata","itp":"application/vnd.shana.informed.formtemplate","iif":"application/vnd.shana.informed.interchange","ipk":"application/vnd.shana.informed.package","twd":"application/vnd.simtech-mindmapper","twds":"application/vnd.simtech-mindmapper","mmf":"application/vnd.smaf","teacher":"application/vnd.smart.teacher","sdkm":"application/vnd.solent.sdkm+xml","sdkd":"application/vnd.solent.sdkm+xml","dxp":"application/vnd.spotfire.dxp","sfs":"application/vnd.spotfire.sfs","sdc":"application/vnd.stardivision.calc","sda":"application/vnd.stardivision.draw","sdd":"application/vnd.stardivision.impress","smf":"application/vnd.stardivision.math","sdw":"application/vnd.stardivision.writer","vor":"application/vnd.stardivision.writer","sgl":"application/vnd.stardivision.writer-global","smzip":"application/vnd.stepmania.package","sm":"application/vnd.stepmania.stepchart","sxc":"application/vnd.sun.xml.calc","stc":"application/vnd.sun.xml.calc.template","sxd":"application/vnd.sun.xml.draw","std":"application/vnd.sun.xml.draw.template","sxi":"application/vnd.sun.xml.impress","sti":"application/vnd.sun.xml.impress.template","sxm":"application/vnd.sun.xml.math","sxw":"application/vnd.sun.xml.writer","sxg":"application/vnd.sun.xml.writer.global","stw":"application/vnd.sun.xml.writer.template","sus":"application/vnd.sus-calendar","susp":"application/vnd.sus-calendar","svd":"application/vnd.svd","sis":"application/vnd.symbian.install","sisx":"application/vnd.symbian.install","xsm":"application/vnd.syncml+xml","bdm":"application/vnd.syncml.dm+wbxml","xdm":"application/vnd.syncml.dm+xml","tao":"application/vnd.tao.intent-module-archive","pcap":"application/vnd.tcpdump.pcap","cap":"application/vnd.tcpdump.pcap","dmp":"application/vnd.tcpdump.pcap","tmo":"application/vnd.tmobile-livetv","tpt":"application/vnd.trid.tpt","mxs":"application/vnd.triscape.mxs","tra":"application/vnd.trueapp","ufd":"application/vnd.ufdl","ufdl":"application/vnd.ufdl","utz":"application/vnd.uiq.theme","umj":"application/vnd.umajin","unityweb":"application/vnd.unity","uoml":"application/vnd.uoml+xml","vcx":"application/vnd.vcx","vsd":"application/vnd.visio","vst":"application/vnd.visio","vss":"application/vnd.visio","vsw":"application/vnd.visio","vis":"application/vnd.visionary","vsf":"application/vnd.vsf","wbxml":"application/vnd.wap.wbxml","wmlc":"application/vnd.wap.wmlc","wmlsc":"application/vnd.wap.wmlscriptc","wtb":"application/vnd.webturbo","nbp":"application/vnd.wolfram.player","wpd":"application/vnd.wordperfect","wqd":"application/vnd.wqd","stf":"application/vnd.wt.stf","xar":"application/vnd.xara","xfdl":"application/vnd.xfdl","hvd":"application/vnd.yamaha.hv-dic","hvs":"application/vnd.yamaha.hv-script","hvp":"application/vnd.yamaha.hv-voice","osf":"application/vnd.yamaha.openscoreformat","osfpvg":"application/vnd.yamaha.openscoreformat.osfpvg+xml","saf":"application/vnd.yamaha.smaf-audio","spf":"application/vnd.yamaha.smaf-phrase","cmp":"application/vnd.yellowriver-custom-menu","zir":"application/vnd.zul","zirz":"application/vnd.zul","zaz":"application/vnd.zzazz.deck+xml","vxml":"application/voicexml+xml","wgt":"application/widget","hlp":"application/winhlp","wsdl":"application/wsdl+xml","wspolicy":"application/wspolicy+xml","7z":"application/x-7z-compressed","abw":"application/x-abiword","ace":"application/x-ace-compressed","dmg":"application/x-apple-diskimage","aab":"application/x-authorware-bin","x32":"application/x-authorware-bin","u32":"application/x-authorware-bin","vox":"application/x-authorware-bin","aam":"application/x-authorware-map","aas":"application/x-authorware-seg","bcpio":"application/x-bcpio","torrent":"application/x-bittorrent","blb":"application/x-blorb","blorb":"application/x-blorb","bz":"application/x-bzip","bz2":"application/x-bzip2","boz":"application/x-bzip2","cbr":"application/x-cbr","cba":"application/x-cbr","cbt":"application/x-cbr","cbz":"application/x-cbr","cb7":"application/x-cbr","vcd":"application/x-cdlink","cfs":"application/x-cfs-compressed","chat":"application/x-chat","pgn":"application/x-chess-pgn","nsc":"application/x-conference","cpio":"application/x-cpio","csh":"application/x-csh","deb":"application/x-debian-package","udeb":"application/x-debian-package","dgc":"application/x-dgc-compressed","dir":"application/x-director","dcr":"application/x-director","dxr":"application/x-director","cst":"application/x-director","cct":"application/x-director","cxt":"application/x-director","w3d":"application/x-director","fgd":"application/x-director","swa":"application/x-director","wad":"application/x-doom","ncx":"application/x-dtbncx+xml","dtb":"application/x-dtbook+xml","res":"application/x-dtbresource+xml","dvi":"application/x-dvi","evy":"application/x-envoy","eva":"application/x-eva","bdf":"application/x-font-bdf","gsf":"application/x-font-ghostscript","psf":"application/x-font-linux-psf","pcf":"application/x-font-pcf","snf":"application/x-font-snf","pfa":"application/x-font-type1","pfb":"application/x-font-type1","pfm":"application/x-font-type1","afm":"application/x-font-type1","arc":"application/x-freearc","spl":"application/x-futuresplash","gca":"application/x-gca-compressed","ulx":"application/x-glulx","gnumeric":"application/x-gnumeric","gramps":"application/x-gramps-xml","gtar":"application/x-gtar","hdf":"application/x-hdf","install":"application/x-install-instructions","iso":"application/x-iso9660-image","jnlp":"application/x-java-jnlp-file","latex":"application/x-latex","lzh":"application/x-lzh-compressed","lha":"application/x-lzh-compressed","mie":"application/x-mie","prc":"application/x-mobipocket-ebook","mobi":"application/x-mobipocket-ebook","application":"application/x-ms-application","lnk":"application/x-ms-shortcut","wmd":"application/x-ms-wmd","wmz":"application/x-ms-wmz","xbap":"application/x-ms-xbap","mdb":"application/x-msaccess","obd":"application/x-msbinder","crd":"application/x-mscardfile","clp":"application/x-msclip","exe":"application/x-msdownload","dll":"application/x-msdownload","com":"application/x-msdownload","bat":"application/x-msdownload","msi":"application/x-msdownload","mvb":"application/x-msmediaview","m13":"application/x-msmediaview","m14":"application/x-msmediaview","wmf":"application/x-msmetafile","emf":"application/x-msmetafile","emz":"application/x-msmetafile","mny":"application/x-msmoney","pub":"application/x-mspublisher","scd":"application/x-msschedule","trm":"application/x-msterminal","wri":"application/x-mswrite","nc":"application/x-netcdf","cdf":"application/x-netcdf","nzb":"application/x-nzb","p12":"application/x-pkcs12","pfx":"application/x-pkcs12","p7b":"application/x-pkcs7-certificates","spc":"application/x-pkcs7-certificates","p7r":"application/x-pkcs7-certreqresp","rar":"application/x-rar-compressed","ris":"application/x-research-info-systems","sh":"application/x-sh","shar":"application/x-shar","swf":"application/x-shockwave-flash","xap":"application/x-silverlight-app","sql":"application/x-sql","sit":"application/x-stuffit","sitx":"application/x-stuffitx","srt":"application/x-subrip","sv4cpio":"application/x-sv4cpio","sv4crc":"application/x-sv4crc","t3":"application/x-t3vm-image","gam":"application/x-tads","tar":"application/x-tar","tcl":"application/x-tcl","tex":"application/x-tex","tfm":"application/x-tex-tfm","texinfo":"application/x-texinfo","texi":"application/x-texinfo","obj":"application/x-tgif","ustar":"application/x-ustar","src":"application/x-wais-source","der":"application/x-x509-ca-cert","crt":"application/x-x509-ca-cert","fig":"application/x-xfig","xlf":"application/x-xliff+xml","xpi":"application/x-xpinstall","xz":"application/x-xz","z1":"application/x-zmachine","z2":"application/x-zmachine","z3":"application/x-zmachine","z4":"application/x-zmachine","z5":"application/x-zmachine","z6":"application/x-zmachine","z7":"application/x-zmachine","z8":"application/x-zmachine","xaml":"application/xaml+xml","xdf":"application/xcap-diff+xml","xenc":"application/xenc+xml","xhtml":"application/xhtml+xml","xht":"application/xhtml+xml","xml":"application/xml","xsl":"application/xml","dtd":"application/xml-dtd","xop":"application/xop+xml","xpl":"application/xproc+xml","xslt":"application/xslt+xml","xspf":"application/xspf+xml","mxml":"application/xv+xml","xhvml":"application/xv+xml","xvml":"application/xv+xml","xvm":"application/xv+xml","yang":"application/yang","yin":"application/yin+xml","zip":"application/zip","adp":"audio/adpcm","au":"audio/basic","snd":"audio/basic","mid":"audio/midi","midi":"audio/midi","kar":"audio/midi","rmi":"audio/midi","m4a":"audio/mp4","mp4a":"audio/mp4","mpga":"audio/mpeg","mp2":"audio/mpeg","mp2a":"audio/mpeg","mp3":"audio/mpeg","m2a":"audio/mpeg","m3a":"audio/mpeg","oga":"audio/ogg","ogg":"audio/ogg","spx":"audio/ogg","opus":"audio/ogg","s3m":"audio/s3m","sil":"audio/silk","uva":"audio/vnd.dece.audio","uvva":"audio/vnd.dece.audio","eol":"audio/vnd.digital-winds","dra":"audio/vnd.dra","dts":"audio/vnd.dts","dtshd":"audio/vnd.dts.hd","lvp":"audio/vnd.lucent.voice","pya":"audio/vnd.ms-playready.media.pya","ecelp4800":"audio/vnd.nuera.ecelp4800","ecelp7470":"audio/vnd.nuera.ecelp7470","ecelp9600":"audio/vnd.nuera.ecelp9600","rip":"audio/vnd.rip","weba":"audio/webm","aac":"audio/x-aac","aif":"audio/x-aiff","aiff":"audio/x-aiff","aifc":"audio/x-aiff","caf":"audio/x-caf","flac":"audio/x-flac","mka":"audio/x-matroska","m3u":"audio/x-mpegurl","wax":"audio/x-ms-wax","wma":"audio/x-ms-wma","ram":"audio/x-pn-realaudio","ra":"audio/x-pn-realaudio","rmp":"audio/x-pn-realaudio-plugin","wav":"audio/x-wav","xm":"audio/xm","cdx":"chemical/x-cdx","cif":"chemical/x-cif","cmdf":"chemical/x-cmdf","cml":"chemical/x-cml","csml":"chemical/x-csml","xyz":"chemical/x-xyz","ttc":"font/collection","otf":"font/otf","ttf":"font/ttf","woff":"font/woff","woff2":"font/woff2","bmp":"image/bmp","cgm":"image/cgm","g3":"image/g3fax","gif":"image/gif","ief":"image/ief","jpeg":"image/jpeg","jpg":"image/jpeg","jpe":"image/jpeg","ktx":"image/ktx","png":"image/png","btif":"image/prs.btif","sgi":"image/sgi","svg":"image/svg+xml","svgz":"image/svg+xml","tiff":"image/tiff","tif":"image/tiff","psd":"image/vnd.adobe.photoshop","uvi":"image/vnd.dece.graphic","uvvi":"image/vnd.dece.graphic","uvg":"image/vnd.dece.graphic","uvvg":"image/vnd.dece.graphic","djvu":"image/vnd.djvu","djv":"image/vnd.djvu","sub":"image/vnd.dvb.subtitle","dwg":"image/vnd.dwg","dxf":"image/vnd.dxf","fbs":"image/vnd.fastbidsheet","fpx":"image/vnd.fpx","fst":"image/vnd.fst","mmr":"image/vnd.fujixerox.edmics-mmr","rlc":"image/vnd.fujixerox.edmics-rlc","mdi":"image/vnd.ms-modi","wdp":"image/vnd.ms-photo","npx":"image/vnd.net-fpx","wbmp":"image/vnd.wap.wbmp","xif":"image/vnd.xiff","webp":"image/webp","3ds":"image/x-3ds","ras":"image/x-cmu-raster","cmx":"image/x-cmx","fh":"image/x-freehand","fhc":"image/x-freehand","fh4":"image/x-freehand","fh5":"image/x-freehand","fh7":"image/x-freehand","ico":"image/x-icon","sid":"image/x-mrsid-image","pcx":"image/x-pcx","pic":"image/x-pict","pct":"image/x-pict","pnm":"image/x-portable-anymap","pbm":"image/x-portable-bitmap","pgm":"image/x-portable-graymap","ppm":"image/x-portable-pixmap","rgb":"image/x-rgb","tga":"image/x-tga","xbm":"image/x-xbitmap","xpm":"image/x-xpixmap","xwd":"image/x-xwindowdump","eml":"message/rfc822","mime":"message/rfc822","igs":"model/iges","iges":"model/iges","msh":"model/mesh","mesh":"model/mesh","silo":"model/mesh","dae":"model/vnd.collada+xml","dwf":"model/vnd.dwf","gdl":"model/vnd.gdl","gtw":"model/vnd.gtw","mts":"model/vnd.mts","vtu":"model/vnd.vtu","wrl":"model/vrml","vrml":"model/vrml","x3db":"model/x3d+binary","x3dbz":"model/x3d+binary","x3dv":"model/x3d+vrml","x3dvz":"model/x3d+vrml","x3d":"model/x3d+xml","x3dz":"model/x3d+xml","appcache":"text/cache-manifest","ics":"text/calendar","ifb":"text/calendar","css":"text/css","csv":"text/csv","html":"text/html","htm":"text/html","js":"text/javascript","mjs":"text/javascript","n3":"text/n3","txt":"text/plain","text":"text/plain","conf":"text/plain","def":"text/plain","list":"text/plain","log":"text/plain","in":"text/plain","dsc":"text/prs.lines.tag","rtx":"text/richtext","sgml":"text/sgml","sgm":"text/sgml","tsv":"text/tab-separated-values","t":"text/troff","tr":"text/troff","roff":"text/troff","man":"text/troff","me":"text/troff","ms":"text/troff","ttl":"text/turtle","uri":"text/uri-list","uris":"text/uri-list","urls":"text/uri-list","vcard":"text/vcard","curl":"text/vnd.curl","dcurl":"text/vnd.curl.dcurl","mcurl":"text/vnd.curl.mcurl","scurl":"text/vnd.curl.scurl","fly":"text/vnd.fly","flx":"text/vnd.fmi.flexstor","gv":"text/vnd.graphviz","3dml":"text/vnd.in3d.3dml","spot":"text/vnd.in3d.spot","jad":"text/vnd.sun.j2me.app-descriptor","wml":"text/vnd.wap.wml","wmls":"text/vnd.wap.wmlscript","s":"text/x-asm","asm":"text/x-asm","c":"text/x-c","cc":"text/x-c","cxx":"text/x-c","cpp":"text/x-c","h":"text/x-c","hh":"text/x-c","dic":"text/x-c","f":"text/x-fortran","for":"text/x-fortran","f77":"text/x-fortran","f90":"text/x-fortran","java":"text/x-java-source","nfo":"text/x-nfo","opml":"text/x-opml","p":"text/x-pascal","pas":"text/x-pascal","etx":"text/x-setext","sfv":"text/x-sfv","uu":"text/x-uuencode","vcs":"text/x-vcalendar","vcf":"text/x-vcard","3gp":"video/3gpp","3g2":"video/3gpp2","h261":"video/h261","h263":"video/h263","h264":"video/h264","jpgv":"video/jpeg","jpm":"video/jpm","jpgm":"video/jpm","mj2":"video/mj2","mjp2":"video/mj2","mp4":"video/mp4","mp4v":"video/mp4","mpg4":"video/mp4","mpeg":"video/mpeg","mpg":"video/mpeg","mpe":"video/mpeg","m1v":"video/mpeg","m2v":"video/mpeg","ogv":"video/ogg","qt":"video/quicktime","mov":"video/quicktime","uvh":"video/vnd.dece.hd","uvvh":"video/vnd.dece.hd","uvm":"video/vnd.dece.mobile","uvvm":"video/vnd.dece.mobile","uvp":"video/vnd.dece.pd","uvvp":"video/vnd.dece.pd","uvs":"video/vnd.dece.sd","uvvs":"video/vnd.dece.sd","uvv":"video/vnd.dece.video","uvvv":"video/vnd.dece.video","dvb":"video/vnd.dvb.file","fvt":"video/vnd.fvt","mxu":"video/vnd.mpegurl","m4u":"video/vnd.mpegurl","pyv":"video/vnd.ms-playready.media.pyv","uvu":"video/vnd.uvvu.mp4","uvvu":"video/vnd.uvvu.mp4","viv":"video/vnd.vivo","webm":"video/webm","f4v":"video/x-f4v","fli":"video/x-fli","flv":"video/x-flv","m4v":"video/x-m4v","mkv":"video/x-matroska","mk3d":"video/x-matroska","mks":"video/x-matroska","mng":"video/x-mng","asf":"video/x-ms-asf","asx":"video/x-ms-asf","vob":"video/x-ms-vob","wm":"video/x-ms-wm","wmv":"video/x-ms-wmv","wmx":"video/x-ms-wmx","wvx":"video/x-ms-wvx","avi":"video/x-msvideo","movie":"video/x-sgi-movie","smv":"video/x-smv","ice":"x-conference/x-cooltalk"}')}},e={},function n(i){var r=e[i];if(void 0!==r)return r.exports;var o=e[i]={exports:{}};return t[i].call(o.exports,o,o.exports,n),o.exports}(713);var t,e}));
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFlBQ0EsWUFDQSxZQUNBLFlBQ0EsWUFDQSxXQUNBLFdBQ0EsWUFDQSxZQUNBLG83L0JDZEk0cUMsRUFBMkIsQ0FBQyxFQUdoQyxTQUFTQyxFQUFvQkMsR0FFNUIsSUFBSUMsRUFBZUgsRUFBeUJFLEdBQzVDLFFBQXFCdHBDLElBQWpCdXBDLEVBQ0gsT0FBT0EsRUFBYTV1QyxRQUdyQixJQUFJQyxFQUFTd3VDLEVBQXlCRSxHQUFZLENBR2pEM3VDLFFBQVMsQ0FBQyxHQU9YLE9BSEE2dUMsRUFBb0JGLEdBQVV2bkMsS0FBS25ILEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVMwdUMsR0FHcEV6dUMsRUFBT0QsT0FDZixDQ25CMEIwdUMsQ0FBb0IsV0RGMUNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8veHV0aWxzL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly94dXRpbHMvLi9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzIiwid2VicGFjazovL3h1dGlscy8uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliLzNyZC1wYXJ0eS9fQnVmZmVyLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi8zcmQtcGFydHkvaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0FscGhhTnVtL19BbHBoYU51bS50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvQWxwaGFOdW0vaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0FuaW1hdGUvX2FuaW1hdGUudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0FuaW1hdGUvX3BvbHlmaWxsLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9BbmltYXRlL2Vhc2luZ3MvX2Vhc2luZ3MudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0FuaW1hdGUvZWFzaW5ncy9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvQW5pbWF0ZS9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvRWxhcHNlZFRpbWUvX0VsYXBzZWRUaW1lLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9FbGFwc2VkVGltZS9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvRXZlbnRFbWl0dGVyL19FdmVudEVtaXR0ZXIudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0V2ZW50RW1pdHRlci9fRXZlbnRzLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9FdmVudEVtaXR0ZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0V4Y2VwdGlvbi9fRXhjZXB0aW9uLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9FeGNlcHRpb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL1Rhc2tzL19UYXNrLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9UYXNrcy9fVGFza3MudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL1Rhc2tzL2luZGV4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9UZXJtL19UZXJtLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9UZXJtL2luZGV4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9maWxlL19taW1lLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9maWxlL19wYXRoLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9maWxlL2luZGV4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdHlwZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19iYXRjaC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX2Nsb25lLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fY2xvbmVEZWVwLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fY29tcGFyZS50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX2NvbXBhcmVTaGFsbG93LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fZGF0ZXRpbWUudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19kZWJvdWNlZC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX2hlbGxvLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fanNvbi50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX251bWJlci50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX29iamVjdHMudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19wcm9taXNlLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fcXVldWUudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19yYzQudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19zdHJpbmcudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL191dGY4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8veHV0aWxzL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJ4dXRpbHNcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wieHV0aWxzXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgKCkgPT4ge1xucmV0dXJuICIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbmNvbnN0IGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbmNvbnN0IGN1c3RvbUluc3BlY3RTeW1ib2wgPVxuICAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sWydmb3InXSA9PT0gJ2Z1bmN0aW9uJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA/IFN5bWJvbFsnZm9yJ10oJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA6IG51bGxcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG5jb25zdCBLX01BWF9MRU5HVEggPSAweDdmZmZmZmZmXG5leHBvcnRzLmtNYXhMZW5ndGggPSBLX01BWF9MRU5HVEhcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgUHJpbnQgd2FybmluZyBhbmQgcmVjb21tZW5kIHVzaW5nIGBidWZmZXJgIHY0Lnggd2hpY2ggaGFzIGFuIE9iamVjdFxuICogICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogV2UgcmVwb3J0IHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0eXBlZCBhcnJheXMgaWYgdGhlIGFyZSBub3Qgc3ViY2xhc3NhYmxlXG4gKiB1c2luZyBfX3Byb3RvX18uIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgXG4gKiAoU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzgpLiBJRSAxMCBsYWNrcyBzdXBwb3J0XG4gKiBmb3IgX19wcm90b19fIGFuZCBoYXMgYSBidWdneSB0eXBlZCBhcnJheSBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbmlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICAnVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5ICcgK1xuICAgICdgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LidcbiAgKVxufVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIC8vIENhbiB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZD9cbiAgdHJ5IHtcbiAgICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGNvbnN0IHByb3RvID0geyBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH0gfVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgVWludDhBcnJheS5wcm90b3R5cGUpXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFyciwgcHJvdG8pXG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDJcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAncGFyZW50Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ1ZmZlclxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ29mZnNldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAobGVuZ3RoKSB7XG4gIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIGxlbmd0aCArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyLnByb3RvdHlwZSlcbiAgcmV0dXJuIGJ1ZlxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcidcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKGFyZylcbiAgfVxuICByZXR1cm4gZnJvbShhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbmZ1bmN0aW9uIGZyb20gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheVZpZXcodmFsdWUpXG4gIH1cblxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgICAnb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdmFsdWUpXG4gICAgKVxuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2UodmFsdWUsIEFycmF5QnVmZmVyKSB8fFxuICAgICAgKHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBBcnJheUJ1ZmZlcikpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIChpc0luc3RhbmNlKHZhbHVlLCBTaGFyZWRBcnJheUJ1ZmZlcikgfHxcbiAgICAgICh2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgU2hhcmVkQXJyYXlCdWZmZXIpKSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgKVxuICB9XG5cbiAgY29uc3QgdmFsdWVPZiA9IHZhbHVlLnZhbHVlT2YgJiYgdmFsdWUudmFsdWVPZigpXG4gIGlmICh2YWx1ZU9mICE9IG51bGwgJiYgdmFsdWVPZiAhPT0gdmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWVPZiwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgY29uc3QgYiA9IGZyb21PYmplY3QodmFsdWUpXG4gIGlmIChiKSByZXR1cm4gYlxuXG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgnc3RyaW5nJyksIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICdvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB2YWx1ZSlcbiAgKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIE5vdGU6IENoYW5nZSBwcm90b3R5cGUgKmFmdGVyKiBCdWZmZXIuZnJvbSBpcyBkZWZpbmVkIHRvIHdvcmthcm91bmQgQ2hyb21lIGJ1Zzpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvMTQ4XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyLnByb3RvdHlwZSwgVWludDhBcnJheS5wcm90b3R5cGUpXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyLCBVaW50OEFycmF5KVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgc2l6ZSArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAoc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gIH1cblxuICBjb25zdCBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICBsZXQgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcblxuICBjb25zdCBhY3R1YWwgPSBidWYud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIGJ1ZiA9IGJ1Zi5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKGFycmF5KSB7XG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICBjb25zdCBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheVZpZXcgKGFycmF5Vmlldykge1xuICBpZiAoaXNJbnN0YW5jZShhcnJheVZpZXcsIFVpbnQ4QXJyYXkpKSB7XG4gICAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGFycmF5VmlldylcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKGNvcHkuYnVmZmVyLCBjb3B5LmJ5dGVPZmZzZXQsIGNvcHkuYnl0ZUxlbmd0aClcbiAgfVxuICByZXR1cm4gZnJvbUFycmF5TGlrZShhcnJheVZpZXcpXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJvZmZzZXRcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcImxlbmd0aFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBsZXQgYnVmXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXIucHJvdG90eXBlKVxuXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAob2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIGNvbnN0IGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgY29uc3QgYnVmID0gY3JlYXRlQnVmZmVyKGxlbilcblxuICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmXG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoMClcbiAgICB9XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKVxuICB9XG5cbiAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJlxuICAgIGIgIT09IEJ1ZmZlci5wcm90b3R5cGUgLy8gc28gQnVmZmVyLmlzQnVmZmVyKEJ1ZmZlci5wcm90b3R5cGUpIHdpbGwgYmUgZmFsc2Vcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmIChpc0luc3RhbmNlKGEsIFVpbnQ4QXJyYXkpKSBhID0gQnVmZmVyLmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aClcbiAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpIGIgPSBCdWZmZXIuZnJvbShiLCBiLm9mZnNldCwgYi5ieXRlTGVuZ3RoKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJidWYxXCIsIFwiYnVmMlwiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5J1xuICAgIClcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIGxldCB4ID0gYS5sZW5ndGhcbiAgbGV0IHkgPSBiLmxlbmd0aFxuXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgbGV0IGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICBsZXQgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGxldCBidWYgPSBsaXN0W2ldXG4gICAgaWYgKGlzSW5zdGFuY2UoYnVmLCBVaW50OEFycmF5KSkge1xuICAgICAgaWYgKHBvcyArIGJ1Zi5sZW5ndGggPiBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIGJ1ZiA9IEJ1ZmZlci5mcm9tKGJ1ZilcbiAgICAgICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgYnVmLFxuICAgICAgICAgIHBvc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIH1cbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBpc0luc3RhbmNlKHN0cmluZywgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHN0cmluZ1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgY29uc3QgbXVzdE1hdGNoID0gKGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSA9PT0gdHJ1ZSlcbiAgaWYgKCFtdXN0TWF0Y2ggJiYgbGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICBsZXQgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB7XG4gICAgICAgICAgcmV0dXJuIG11c3RNYXRjaCA/IC0xIDogdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgfVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJjaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCAoYW5kIHRoZSBgaXMtYnVmZmVyYCBucG0gcGFja2FnZSlcbi8vIHRvIGRldGVjdCBhIEJ1ZmZlciBpbnN0YW5jZS4gSXQncyBub3QgcG9zc2libGUgdG8gdXNlIGBpbnN0YW5jZW9mIEJ1ZmZlcmBcbi8vIHJlbGlhYmx5IGluIGEgYnJvd3NlcmlmeSBjb250ZXh0IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgZGlmZmVyZW50XG4vLyBjb3BpZXMgb2YgdGhlICdidWZmZXInIHBhY2thZ2UgaW4gdXNlLiBUaGlzIG1ldGhvZCB3b3JrcyBldmVuIGZvciBCdWZmZXJcbi8vIGluc3RhbmNlcyB0aGF0IHdlcmUgY3JlYXRlZCBmcm9tIGFub3RoZXIgY29weSBvZiB0aGUgYGJ1ZmZlcmAgcGFja2FnZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE1NFxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgY29uc3QgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgPSBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nXG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgbGV0IHN0ciA9ICcnXG4gIGNvbnN0IG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5yZXBsYWNlKC8oLnsyfSkvZywgJyQxICcpLnRyaW0oKVxuICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5pZiAoY3VzdG9tSW5zcGVjdFN5bWJvbCkge1xuICBCdWZmZXIucHJvdG90eXBlW2N1c3RvbUluc3BlY3RTeW1ib2xdID0gQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmIChpc0luc3RhbmNlKHRhcmdldCwgVWludDhBcnJheSkpIHtcbiAgICB0YXJnZXQgPSBCdWZmZXIuZnJvbSh0YXJnZXQsIHRhcmdldC5vZmZzZXQsIHRhcmdldC5ieXRlTGVuZ3RoKVxuICB9XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInRhcmdldFwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuICcgK1xuICAgICAgJ1JlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdGFyZ2V0KVxuICAgIClcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIGxldCB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICBsZXQgeSA9IGVuZCAtIHN0YXJ0XG4gIGNvbnN0IGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgY29uc3QgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgY29uc3QgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKG51bWJlcklzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgW3ZhbF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIGxldCBpbmRleFNpemUgPSAxXG4gIGxldCBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIGxldCB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIGxldCBpXG4gIGlmIChkaXIpIHtcbiAgICBsZXQgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIGNvbnN0IHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBsZXQgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICBjb25zdCByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIGxldCBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgY29uc3QgcmVzID0gW11cblxuICBsZXQgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgY29uc3QgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgbGV0IGNvZGVQb2ludCA9IG51bGxcbiAgICBsZXQgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKVxuICAgICAgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKVxuICAgICAgICAgID8gM1xuICAgICAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpXG4gICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIGxldCBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbmNvbnN0IE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICBjb25zdCBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIGxldCByZXMgPSAnJ1xuICBsZXQgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGxldCByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGNvbnN0IGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICBsZXQgb3V0ID0gJydcbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gaGV4U2xpY2VMb29rdXBUYWJsZVtidWZbaV1dXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBjb25zdCBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICBsZXQgcmVzID0gJydcbiAgLy8gSWYgYnl0ZXMubGVuZ3RoIGlzIG9kZCwgdGhlIGxhc3QgOCBiaXRzIG11c3QgYmUgaWdub3JlZCAoc2FtZSBhcyBub2RlLmpzKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgKGJ5dGVzW2kgKyAxXSAqIDI1NikpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICBjb25zdCBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZXdCdWYsIEJ1ZmZlci5wcm90b3R5cGUpXG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0XVxuICBsZXQgbXVsID0gMVxuICBsZXQgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50QkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICBsZXQgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIGxldCBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDE2TEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyQkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnVUludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ1VJbnQ2NExFIChvZmZzZXQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgJ29mZnNldCcpXG4gIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdXG4gIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddXG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA4KVxuICB9XG5cbiAgY29uc3QgbG8gPSBmaXJzdCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDI0XG5cbiAgY29uc3QgaGkgPSB0aGlzWysrb2Zmc2V0XSArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgbGFzdCAqIDIgKiogMjRcblxuICByZXR1cm4gQmlnSW50KGxvKSArIChCaWdJbnQoaGkpIDw8IEJpZ0ludCgzMikpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnVUludDY0QkUgKG9mZnNldCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0JylcbiAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF1cbiAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN11cbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpXG4gIH1cblxuICBjb25zdCBoaSA9IGZpcnN0ICogMiAqKiAyNCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgdGhpc1srK29mZnNldF1cblxuICBjb25zdCBsbyA9IHRoaXNbKytvZmZzZXRdICogMiAqKiAyNCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgbGFzdFxuXG4gIHJldHVybiAoQmlnSW50KGhpKSA8PCBCaWdJbnQoMzIpKSArIEJpZ0ludChsbylcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIGxldCB2YWwgPSB0aGlzW29mZnNldF1cbiAgbGV0IG11bCA9IDFcbiAgbGV0IGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICBsZXQgaSA9IGJ5dGVMZW5ndGhcbiAgbGV0IG11bCA9IDFcbiAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICBjb25zdCB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnSW50NjRMRSAob2Zmc2V0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICdvZmZzZXQnKVxuICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XVxuICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyA3XVxuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOClcbiAgfVxuXG4gIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgNF0gK1xuICAgIHRoaXNbb2Zmc2V0ICsgNV0gKiAyICoqIDggK1xuICAgIHRoaXNbb2Zmc2V0ICsgNl0gKiAyICoqIDE2ICtcbiAgICAobGFzdCA8PCAyNCkgLy8gT3ZlcmZsb3dcblxuICByZXR1cm4gKEJpZ0ludCh2YWwpIDw8IEJpZ0ludCgzMikpICtcbiAgICBCaWdJbnQoZmlyc3QgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAyNClcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEJpZ0ludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ0ludDY0QkUgKG9mZnNldCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0JylcbiAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF1cbiAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN11cbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpXG4gIH1cblxuICBjb25zdCB2YWwgPSAoZmlyc3QgPDwgMjQpICsgLy8gT3ZlcmZsb3dcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICB0aGlzWysrb2Zmc2V0XVxuXG4gIHJldHVybiAoQmlnSW50KHZhbCkgPDwgQmlnSW50KDMyKSkgK1xuICAgIEJpZ0ludCh0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIGxhc3QpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnRMRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY29uc3QgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICBsZXQgbXVsID0gMVxuICBsZXQgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludEJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjb25zdCBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIGxldCBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgbGV0IG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50OCA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQxNkxFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDMyTEUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIHdydEJpZ1VJbnQ2NExFIChidWYsIHZhbHVlLCBvZmZzZXQsIG1pbiwgbWF4KSB7XG4gIGNoZWNrSW50QkkodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgNylcblxuICBsZXQgbG8gPSBOdW1iZXIodmFsdWUgJiBCaWdJbnQoMHhmZmZmZmZmZikpXG4gIGJ1ZltvZmZzZXQrK10gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0KytdID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBsb1xuICBsZXQgaGkgPSBOdW1iZXIodmFsdWUgPj4gQmlnSW50KDMyKSAmIEJpZ0ludCgweGZmZmZmZmZmKSlcbiAgYnVmW29mZnNldCsrXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0KytdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGhpXG4gIHJldHVybiBvZmZzZXRcbn1cblxuZnVuY3Rpb24gd3J0QmlnVUludDY0QkUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHtcbiAgY2hlY2tJbnRCSSh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCA3KVxuXG4gIGxldCBsbyA9IE51bWJlcih2YWx1ZSAmIEJpZ0ludCgweGZmZmZmZmZmKSlcbiAgYnVmW29mZnNldCArIDddID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQgKyA2XSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0ICsgNV0gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCArIDRdID0gbG9cbiAgbGV0IGhpID0gTnVtYmVyKHZhbHVlID4+IEJpZ0ludCgzMikgJiBCaWdJbnQoMHhmZmZmZmZmZikpXG4gIGJ1ZltvZmZzZXQgKyAzXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0ICsgMl0gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldCArIDFdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXRdID0gaGlcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHdyaXRlQmlnVUludDY0TEUgKHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gIHJldHVybiB3cnRCaWdVSW50NjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBCaWdJbnQoMCksIEJpZ0ludCgnMHhmZmZmZmZmZmZmZmZmZmZmJykpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnVUludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRCRSAodmFsdWUsIG9mZnNldCA9IDApIHtcbiAgcmV0dXJuIHdydEJpZ1VJbnQ2NEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIEJpZ0ludCgwKSwgQmlnSW50KCcweGZmZmZmZmZmZmZmZmZmZmYnKSlcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY29uc3QgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgbGV0IGkgPSAwXG4gIGxldCBtdWwgPSAxXG4gIGxldCBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY29uc3QgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgbGV0IGkgPSBieXRlTGVuZ3RoIC0gMVxuICBsZXQgbXVsID0gMVxuICBsZXQgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdJbnQ2NExFICh2YWx1ZSwgb2Zmc2V0ID0gMCkge1xuICByZXR1cm4gd3J0QmlnVUludDY0TEUodGhpcywgdmFsdWUsIG9mZnNldCwgLUJpZ0ludCgnMHg4MDAwMDAwMDAwMDAwMDAwJyksIEJpZ0ludCgnMHg3ZmZmZmZmZmZmZmZmZmZmJykpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ0ludDY0QkUgKHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gIHJldHVybiB3cnRCaWdVSW50NjRCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtQmlnSW50KCcweDgwMDAwMDAwMDAwMDAwMDAnKSwgQmlnSW50KCcweDdmZmZmZmZmZmZmZmZmZmYnKSlcbn0pXG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlcicpXG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICBjb25zdCBsZW4gPSBlbmQgLSBzdGFydFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBVc2UgYnVpbHQtaW4gd2hlbiBhdmFpbGFibGUsIG1pc3NpbmcgZnJvbSBJRTExXG4gICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKChlbmNvZGluZyA9PT0gJ3V0ZjgnICYmIGNvZGUgPCAxMjgpIHx8XG4gICAgICAgICAgZW5jb2RpbmcgPT09ICdsYXRpbjEnKSB7XG4gICAgICAgIC8vIEZhc3QgcGF0aDogSWYgYHZhbGAgZml0cyBpbnRvIGEgc2luZ2xlIGJ5dGUsIHVzZSB0aGF0IG51bWVyaWMgdmFsdWUuXG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHtcbiAgICB2YWwgPSBOdW1iZXIodmFsKVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIGxldCBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgICBjb25zdCBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInICsgdmFsICtcbiAgICAgICAgJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpXG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIENVU1RPTSBFUlJPUlNcbi8vID09PT09PT09PT09PT1cblxuLy8gU2ltcGxpZmllZCB2ZXJzaW9ucyBmcm9tIE5vZGUsIGNoYW5nZWQgZm9yIEJ1ZmZlci1vbmx5IHVzYWdlXG5jb25zdCBlcnJvcnMgPSB7fVxuZnVuY3Rpb24gRSAoc3ltLCBnZXRNZXNzYWdlLCBCYXNlKSB7XG4gIGVycm9yc1tzeW1dID0gY2xhc3MgTm9kZUVycm9yIGV4dGVuZHMgQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgc3VwZXIoKVxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ21lc3NhZ2UnLCB7XG4gICAgICAgIHZhbHVlOiBnZXRNZXNzYWdlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pXG5cbiAgICAgIC8vIEFkZCB0aGUgZXJyb3IgY29kZSB0byB0aGUgbmFtZSB0byBpbmNsdWRlIGl0IGluIHRoZSBzdGFjayB0cmFjZS5cbiAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZX0gWyR7c3ltfV1gXG4gICAgICAvLyBBY2Nlc3MgdGhlIHN0YWNrIHRvIGdlbmVyYXRlIHRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGluZyB0aGUgZXJyb3IgY29kZVxuICAgICAgLy8gZnJvbSB0aGUgbmFtZS5cbiAgICAgIHRoaXMuc3RhY2sgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgIC8vIFJlc2V0IHRoZSBuYW1lIHRvIHRoZSBhY3R1YWwgbmFtZS5cbiAgICAgIGRlbGV0ZSB0aGlzLm5hbWVcbiAgICB9XG5cbiAgICBnZXQgY29kZSAoKSB7XG4gICAgICByZXR1cm4gc3ltXG4gICAgfVxuXG4gICAgc2V0IGNvZGUgKHZhbHVlKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2NvZGUnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRvU3RyaW5nICgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IFske3N5bX1dOiAke3RoaXMubWVzc2FnZX1gXG4gICAgfVxuICB9XG59XG5cbkUoJ0VSUl9CVUZGRVJfT1VUX09GX0JPVU5EUycsXG4gIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiBgJHtuYW1lfSBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgXG4gICAgfVxuXG4gICAgcmV0dXJuICdBdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91bmRzJ1xuICB9LCBSYW5nZUVycm9yKVxuRSgnRVJSX0lOVkFMSURfQVJHX1RZUEUnLFxuICBmdW5jdGlvbiAobmFtZSwgYWN0dWFsKSB7XG4gICAgcmV0dXJuIGBUaGUgXCIke25hbWV9XCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBhY3R1YWx9YFxuICB9LCBUeXBlRXJyb3IpXG5FKCdFUlJfT1VUX09GX1JBTkdFJyxcbiAgZnVuY3Rpb24gKHN0ciwgcmFuZ2UsIGlucHV0KSB7XG4gICAgbGV0IG1zZyA9IGBUaGUgdmFsdWUgb2YgXCIke3N0cn1cIiBpcyBvdXQgb2YgcmFuZ2UuYFxuICAgIGxldCByZWNlaXZlZCA9IGlucHV0XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW5wdXQpICYmIE1hdGguYWJzKGlucHV0KSA+IDIgKiogMzIpIHtcbiAgICAgIHJlY2VpdmVkID0gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKFN0cmluZyhpbnB1dCkpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdiaWdpbnQnKSB7XG4gICAgICByZWNlaXZlZCA9IFN0cmluZyhpbnB1dClcbiAgICAgIGlmIChpbnB1dCA+IEJpZ0ludCgyKSAqKiBCaWdJbnQoMzIpIHx8IGlucHV0IDwgLShCaWdJbnQoMikgKiogQmlnSW50KDMyKSkpIHtcbiAgICAgICAgcmVjZWl2ZWQgPSBhZGROdW1lcmljYWxTZXBhcmF0b3IocmVjZWl2ZWQpXG4gICAgICB9XG4gICAgICByZWNlaXZlZCArPSAnbidcbiAgICB9XG4gICAgbXNnICs9IGAgSXQgbXVzdCBiZSAke3JhbmdlfS4gUmVjZWl2ZWQgJHtyZWNlaXZlZH1gXG4gICAgcmV0dXJuIG1zZ1xuICB9LCBSYW5nZUVycm9yKVxuXG5mdW5jdGlvbiBhZGROdW1lcmljYWxTZXBhcmF0b3IgKHZhbCkge1xuICBsZXQgcmVzID0gJydcbiAgbGV0IGkgPSB2YWwubGVuZ3RoXG4gIGNvbnN0IHN0YXJ0ID0gdmFsWzBdID09PSAnLScgPyAxIDogMFxuICBmb3IgKDsgaSA+PSBzdGFydCArIDQ7IGkgLT0gMykge1xuICAgIHJlcyA9IGBfJHt2YWwuc2xpY2UoaSAtIDMsIGkpfSR7cmVzfWBcbiAgfVxuICByZXR1cm4gYCR7dmFsLnNsaWNlKDAsIGkpfSR7cmVzfWBcbn1cblxuLy8gQ0hFQ0sgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gY2hlY2tCb3VuZHMgKGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgJ29mZnNldCcpXG4gIGlmIChidWZbb2Zmc2V0XSA9PT0gdW5kZWZpbmVkIHx8IGJ1ZltvZmZzZXQgKyBieXRlTGVuZ3RoXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWYubGVuZ3RoIC0gKGJ5dGVMZW5ndGggKyAxKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0ludEJJICh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikge1xuICAgIGNvbnN0IG4gPSB0eXBlb2YgbWluID09PSAnYmlnaW50JyA/ICduJyA6ICcnXG4gICAgbGV0IHJhbmdlXG4gICAgaWYgKGJ5dGVMZW5ndGggPiAzKSB7XG4gICAgICBpZiAobWluID09PSAwIHx8IG1pbiA9PT0gQmlnSW50KDApKSB7XG4gICAgICAgIHJhbmdlID0gYD49IDAke259IGFuZCA8IDIke259ICoqICR7KGJ5dGVMZW5ndGggKyAxKSAqIDh9JHtufWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJhbmdlID0gYD49IC0oMiR7bn0gKiogJHsoYnl0ZUxlbmd0aCArIDEpICogOCAtIDF9JHtufSkgYW5kIDwgMiAqKiBgICtcbiAgICAgICAgICAgICAgICBgJHsoYnl0ZUxlbmd0aCArIDEpICogOCAtIDF9JHtufWBcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UgPSBgPj0gJHttaW59JHtufSBhbmQgPD0gJHttYXh9JHtufWBcbiAgICB9XG4gICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfT1VUX09GX1JBTkdFKCd2YWx1ZScsIHJhbmdlLCB2YWx1ZSlcbiAgfVxuICBjaGVja0JvdW5kcyhidWYsIG9mZnNldCwgYnl0ZUxlbmd0aClcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIgKHZhbHVlLCBuYW1lKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpXG4gIH1cbn1cblxuZnVuY3Rpb24gYm91bmRzRXJyb3IgKHZhbHVlLCBsZW5ndGgsIHR5cGUpIHtcbiAgaWYgKE1hdGguZmxvb3IodmFsdWUpICE9PSB2YWx1ZSkge1xuICAgIHZhbGlkYXRlTnVtYmVyKHZhbHVlLCB0eXBlKVxuICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX09VVF9PRl9SQU5HRSh0eXBlIHx8ICdvZmZzZXQnLCAnYW4gaW50ZWdlcicsIHZhbHVlKVxuICB9XG5cbiAgaWYgKGxlbmd0aCA8IDApIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUygpXG4gIH1cblxuICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9PVVRfT0ZfUkFOR0UodHlwZSB8fCAnb2Zmc2V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA+PSAke3R5cGUgPyAxIDogMH0gYW5kIDw9ICR7bGVuZ3RofWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSlcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG5jb25zdCBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXisvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHRha2VzIGVxdWFsIHNpZ25zIGFzIGVuZCBvZiB0aGUgQmFzZTY0IGVuY29kaW5nXG4gIHN0ciA9IHN0ci5zcGxpdCgnPScpWzBdXG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHIudHJpbSgpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgbGV0IGNvZGVQb2ludFxuICBjb25zdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIGxldCBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICBjb25zdCBieXRlcyA9IFtdXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIGNvbnN0IGJ5dGVBcnJheSA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgbGV0IGMsIGhpLCBsb1xuICBjb25zdCBieXRlQXJyYXkgPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGxldCBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG4vLyBBcnJheUJ1ZmZlciBvciBVaW50OEFycmF5IG9iamVjdHMgZnJvbSBvdGhlciBjb250ZXh0cyAoaS5lLiBpZnJhbWVzKSBkbyBub3QgcGFzc1xuLy8gdGhlIGBpbnN0YW5jZW9mYCBjaGVjayBidXQgdGhleSBzaG91bGQgYmUgdHJlYXRlZCBhcyBvZiB0aGF0IHR5cGUuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNjZcbmZ1bmN0aW9uIGlzSW5zdGFuY2UgKG9iaiwgdHlwZSkge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgdHlwZSB8fFxuICAgIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSAhPSBudWxsICYmXG4gICAgICBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lKVxufVxuZnVuY3Rpb24gbnVtYmVySXNOYU4gKG9iaikge1xuICAvLyBGb3IgSUUxMSBzdXBwb3J0XG4gIHJldHVybiBvYmogIT09IG9iaiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuXG4vLyBDcmVhdGUgbG9va3VwIHRhYmxlIGZvciBgdG9TdHJpbmcoJ2hleCcpYFxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMjE5XG5jb25zdCBoZXhTbGljZUxvb2t1cFRhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYWxwaGFiZXQgPSAnMDEyMzQ1Njc4OWFiY2RlZidcbiAgY29uc3QgdGFibGUgPSBuZXcgQXJyYXkoMjU2KVxuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICBjb25zdCBpMTYgPSBpICogMTZcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIHRhYmxlW2kxNiArIGpdID0gYWxwaGFiZXRbaV0gKyBhbHBoYWJldFtqXVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGFibGVcbn0pKClcblxuLy8gUmV0dXJuIG5vdCBmdW5jdGlvbiB3aXRoIEVycm9yIGlmIEJpZ0ludCBub3Qgc3VwcG9ydGVkXG5mdW5jdGlvbiBkZWZpbmVCaWdJbnRNZXRob2QgKGZuKSB7XG4gIHJldHVybiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IEJ1ZmZlckJpZ0ludE5vdERlZmluZWQgOiBmblxufVxuXG5mdW5jdGlvbiBCdWZmZXJCaWdJbnROb3REZWZpbmVkICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdCaWdJbnQgbm90IHN1cHBvcnRlZCcpXG59XG4iLCIvKiEgaWVlZTc1NC4gQlNELTMtQ2xhdXNlIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL1xuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiaW1wb3J0IHsgQnVmZmVyIGFzIF9CdWZmZXIgfSBmcm9tICdidWZmZXInO1xyXG5pbXBvcnQgeyBCdWZmZXJTdHJpbmcsIEJ1ZmZlckVuY29kaW5nIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuLyoqXHJcbiAqIEJ1ZmZlciBvYmplY3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBCdWZmZXIgPSBfQnVmZmVyO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHZhbHVlIGlzIHZhbGlkIGxlbmd0aFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9pc0J1ZmZlciA9ICh2YWx1ZTogYW55KTogYm9vbGVhbiA9PiBCdWZmZXIuaXNCdWZmZXIodmFsdWUpO1xyXG5cclxuLyoqXHJcbiAqIEJhc2U2NCBlbmNvZGVcclxuICogLSBFeGFtcGxlOiBgX2Jhc2U2NEVuY29kZSgnSGVsbG8gd29ybGQhJylgID0+IGAnU0dWc2JHOGdkMjl5YkdRaCdgXHJcbiAqIFxyXG4gKiBAcGFyYW0gYnVmZmVyXHJcbiAqIEBwYXJhbSBidWZmZXJFbmNvZGluZ1xyXG4gKiBAcmV0dXJucyBiYXNlNjQgZW5jb2RlZCBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9iYXNlNjRFbmNvZGUgPSAoYnVmZmVyOiBCdWZmZXJTdHJpbmcsIGJ1ZmZlckVuY29kaW5nPzogQnVmZmVyRW5jb2RpbmcpOiBzdHJpbmcgPT4ge1xyXG5cdHJldHVybiBCdWZmZXIuZnJvbShidWZmZXIsIGJ1ZmZlckVuY29kaW5nKS50b1N0cmluZygnYmFzZTY0Jyk7XHJcbn07XHJcblxyXG4vKipcclxuICogQmFzZTY0IGRlY29kZVxyXG4gKiAtIEV4YW1wbGU6IGBfYmFzZTY0RGVjb2RlKCdTR1ZzYkc4Z2QyOXliR1FoJylgID0+IGA8QnVmZmVyIDQ4IDY1IDZjIDZjIDZmIDIwIDc3IDZmIDcyIDZjIDY0IDIxPmBcclxuICogLSBFeGFtcGxlOiBgX2Jhc2U2NERlY29kZSgnU0dWc2JHOGdkMjl5YkdRaCcpLnRvU3RyaW5nKClgID0+IGAnSGVsbG8gd29ybGQhJ2BcclxuICogXHJcbiAqIEBwYXJhbSBiYXNlNjRcclxuICogQHJldHVybnMgZGVjb2RlZCBgQnVmZmVyYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9iYXNlNjREZWNvZGUgPSAoYmFzZTY0OiBzdHJpbmcpOiBCdWZmZXIgPT4ge1xyXG5cdHJldHVybiBCdWZmZXIuZnJvbShiYXNlNjQsICdiYXNlNjQnKTtcclxufTsiLCJleHBvcnQgKiBmcm9tICcuL19CdWZmZXInOyIsIi8qKlxyXG4gKiBBbHBoYU51bSBwcml2YXRlIHByb3BzIGtleVxyXG4gKi9cclxuY29uc3QgUFJPUFMgPSBTeW1ib2woJ0FscGhhTnVtJyk7XHJcblxyXG4vKipcclxuICogQWxwaGFiZXRpY2FsIGludGVnZXJcclxuICogXHJcbiAqIEBjbGFzcyBBbHBoYU51bVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFscGhhTnVtXHJcbntcclxuXHQvKipcclxuXHQgKiBBbHBoYWJldCBjaGFyYWN0ZXJzXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBDSEFSUygpe1xyXG5cdFx0cmV0dXJuICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBpbnN0YW5jZSBwcm9wc1xyXG5cdCAqL1xyXG5cdFtQUk9QU106IHt2YWx1ZTogbnVtYmVyLCBzaWduOiAxfC0xfSA9IHt2YWx1ZTogMCwgc2lnbjogMX07XHJcblxyXG5cdC8qKlxyXG5cdCAqIGB2YWx1ZWAgZ2V0dGVyXHJcblx0ICovXHJcblx0Z2V0IHZhbHVlKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10udmFsdWUgKiB0aGlzW1BST1BTXS5zaWduO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogYHZhbHVlYCBzZXR0ZXJcclxuXHQgKi9cclxuXHRzZXQgdmFsdWUodmFsdWUpIHtcclxuXHRcdGNvbnN0IHZhbDogbnVtYmVyID0gcGFyc2VJbnQoTnVtYmVyKHZhbHVlKSBhcyBhbnkpIHx8IDA7XHJcblx0XHR0aGlzW1BST1BTXS5zaWduID0gdmFsIDwgMCA/IC0xIDogMTtcclxuXHRcdHRoaXNbUFJPUFNdLnZhbHVlID0gTWF0aC5hYnModmFsKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGBpbmRleGVzYCBnZXR0ZXJcclxuXHQgKi9cclxuXHRnZXQgaW5kZXhlcygpOiBudW1iZXJbXSB7XHJcblx0XHRjb25zdCBjaGFycyA9IEFscGhhTnVtLkNIQVJTLCBiYXNlOiBudW1iZXIgPSBjaGFycy5sZW5ndGgsIGJ1ZmZlcjogbnVtYmVyW10gPSBbXTtcclxuXHRcdGxldCBkZWM6IG51bWJlciA9IHRoaXNbUFJPUFNdLnZhbHVlO1xyXG5cdFx0bGV0IG4gPSAwO1xyXG5cdFx0d2hpbGUgKDEpe1xyXG5cdFx0XHRidWZmZXIudW5zaGlmdChNYXRoLm1heCgoZGVjJWJhc2UpLW4sIDApKTtcclxuXHRcdFx0aWYgKCEoZGVjID0gTWF0aC5mbG9vcihkZWMvYmFzZSkpKSBicmVhaztcclxuXHRcdFx0biA9IDE7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpc1tQUk9QU10uc2lnbiA9PT0gLTEpIGJ1ZmZlci51bnNoaWZ0KC0xKTtcclxuXHRcdHJldHVybiBidWZmZXI7XHJcblx0fVxyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIGBpbmRleGVzYCBzZXR0ZXJcclxuXHQgKi9cclxuXHRzZXQgaW5kZXhlcyh2YWx1ZSkge1xyXG5cdFx0Y29uc3QgYmFzZTogbnVtYmVyID0gQWxwaGFOdW0uQ0hBUlMubGVuZ3RoO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0bGV0IGFycjogbnVtYmVyW10gPSBbLi4udmFsdWVdO1xyXG5cdFx0XHRsZXQgbGVuID0gYXJyLmxlbmd0aCwgc2lnbiA9IDEsIGRlYyA9IDA7XHJcblx0XHRcdGlmIChsZW4pe1xyXG5cdFx0XHRcdGlmIChhcnJbMF0gPT09IC0xKXtcclxuXHRcdFx0XHRcdGlmIChsZW4gPT09IDEpIHRocm93IEVycm9yKCdUaGUgXFxgQWxwaGFOdW1cXGAgaW5kZXhlcyBhcnJheSBpcyBpbmNvbXBsZXRlLicpO1xyXG5cdFx0XHRcdFx0YXJyID0gYXJyLnNsaWNlKDEpO1xyXG5cdFx0XHRcdFx0c2lnbiA9IC0xO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRcdFx0Y29uc3QgbiA9IGFycltpXVxyXG5cdFx0XHRcdFx0aWYgKCEobiA+PSAwICYmIG4gPCBiYXNlKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFxcYEFscGhhTnVtXFxgIGluZGV4ZXMgbXVzdCBiZSBhbiBpbnRlZ2VyIGFycmF5IG9mIFxcYDAtMjVcXGAgdmFsdWVzIHdpdGggb3B0aW9uYWwgLTEgaW4gMCBpbmRleC4gKGUuZy4gXFxgWzAsMjNdXFxgID0+IFxcYCdBWCdcXGB8XFxgNDlcXGA7IFxcYFstMSwwLDIzXVxcYCA9PiBcXGAnLUFYJ1xcYHxcXGAtNDlcXGApYCk7XHJcblx0XHRcdFx0XHRkZWMgPSBkZWMgKiBiYXNlICsgbiArIDE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChkZWMgPj0gYmFzZSkgZGVjIC09IDE7XHJcblx0XHRcdHRoaXMudmFsdWUgPSBkZWMgKiBzaWduO1xyXG5cdFx0fVxyXG5cdFx0Y2F0Y2ggKGVycm9yOiBhbnkpe1xyXG5cdFx0XHRjb25zb2xlLndhcm4oe2Vycm9yLCB2YWx1ZX0pO1xyXG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGVycm9yKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGB0ZXh0YCBnZXR0ZXJcclxuXHQgKi9cclxuXHRnZXQgdGV4dCgpOiBzdHJpbmcge1xyXG5cdFx0Y29uc3QgY2hhcnMgPSBBbHBoYU51bS5DSEFSUztcclxuXHRcdGxldCB0ZXh0OiBzdHJpbmcgPSAnJztcclxuXHRcdGxldCBhcnI6IG51bWJlcltdID0gdGhpcy5pbmRleGVzO1xyXG5cdFx0aWYgKGFyclswXSA9PT0gLTEpe1xyXG5cdFx0XHRhcnIgPSBhcnIuc2xpY2UoMSk7XHJcblx0XHRcdGlmIChhcnIubGVuZ3RoKSB0ZXh0ID0gJy0nO1xyXG5cdFx0fVxyXG5cdFx0dGV4dCArPSBhcnIubWFwKHYgPT4gY2hhcnNbdl0pLmpvaW4oJycpO1xyXG5cdFx0cmV0dXJuIHRleHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBOZXcgYEFscGhhTnVtYCBpbnN0YW5jZVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIChkZWZhdWx0OiBgMGApIGluaXRpYWwgdmFsdWUgfiBfKiphYnNvbHV0ZSBpbnRlZ2VyKipfXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IodmFsdWU6IG51bWJlciA9IDApe1xyXG5cdFx0dGhpcy52YWx1ZSA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IGB2YWx1ZWBcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdmFsdWUgLSBhZGQgdmFsdWUgfiBfKiphYnNvbHV0ZSBpbnRlZ2VyKipfXHJcblx0ICogQHJldHVybnMgYEFscGhhTnVtYCB+IGluc3RhbmNlXHJcblx0ICovXHJcblx0c2V0KHZhbHVlOiBudW1iZXIpOiBBbHBoYU51bSB7XHJcblx0XHR0aGlzLnZhbHVlID0gdmFsdWU7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCBgdmFsdWVgXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHZhbHVlIC0gKGRlZmF1bHQ6IGAxYCkgYWRkIHZhbHVlIH4gXyoqYWJzb2x1dGUgaW50ZWdlcioqX1xyXG5cdCAqIEByZXR1cm5zIGBBbHBoYU51bWAgfiBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdGFkZCh2YWx1ZTogbnVtYmVyID0gMSk6IEFscGhhTnVtIHtcclxuXHRcdHRoaXMudmFsdWUgKz0gcGFyc2VJbnQoTnVtYmVyKHZhbHVlKSBhcyBhbnkpIHx8IDA7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0ZXh0IHZhbHVlXHJcblx0ICogXHJcblx0ICogQHJldHVybnMgYHN0cmluZ2BcclxuXHQgKi9cclxuXHR0b1N0cmluZygpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMudGV4dDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhcnNlIHZhbHVlIHRvIGBBbHBoYU51bWAgaW5zdGFuY2VcclxuXHQgKiAtIGFjY2VwdHMgYG51bWJlcmAgfiBpbnRlZ2VycyAoZS5nLiBgMTk5OWAgPT4gYCdCWFgnYDsgYC0xOTk5YCA9PiBgJy1CWFgnYClcclxuXHQgKiAtIGFjY2VwdHMgYHRleHRgIGAvLT9bQS1aXSsvYCAoZS5nLiBgJ0JYWCdgID0+IGAxOTk5YDsgYCctQlhYJ2AgPT4gYC0xOTk5YClcclxuXHQgKiAtIGFjY2VwdHMgaW5kZXhlcyBgYXJyYXlgIChlLmcuIGBbMSwyMywyM11gID0+IGAnQlhYJ2B8YDE5OTlgOyBgWy0xLDEsMjMsMjNdYCA9PiBgJy1CWFgnYHxgLTE5OTlgKVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlIF8qKihzZWUgbWV0aG9kIGRvY3MgZm9yIGFjY2VwdGFibGUgdmFsdWVzKSoqX1xyXG5cdCAqIEByZXR1cm5zIGBBbHBoYU51bWAgaW5zdGFuY2VcclxuXHQgKiBAdGhyb3dzIGBUeXBlRXJyb3JgIG9uIGZhaWx1cmVcclxuXHQgKi9cclxuXHRzdGF0aWMgcGFyc2UodmFsdWU6IGFueSk6IEFscGhhTnVtIHtcclxuXHRcdGNvbnN0IGluc3RhbmNlOiBBbHBoYU51bSA9IG5ldyBBbHBoYU51bSgpO1xyXG5cclxuXHRcdC8vcGFyc2Ugc2NhbGFyc1xyXG5cdFx0aWYgKCEoJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSAmJiB2YWx1ZSkpe1xyXG5cdFx0XHRcclxuXHRcdFx0Ly90ZXh0IHZhbHVlXHJcblx0XHRcdGxldCB2YWw6IHN0cmluZyA9IFN0cmluZyh2YWx1ZSA/PyAnJykudHJpbSgpLnRvVXBwZXJDYXNlKCk7XHJcblx0XHRcdGlmICghdmFsKSByZXR1cm4gaW5zdGFuY2U7IC8vPDwgYmxhbmsgc3RyaW5nXHJcblxyXG5cdFx0XHQvL3RleHQgdG8gaW5kZXhlcyB+IC8tP1tBLVpdKy9cclxuXHRcdFx0aWYgKC9bQS1aXS8udGVzdCh2YWwpKXtcclxuXHRcdFx0XHRjb25zdCBjaGFycyA9IHRoaXMuQ0hBUlM7XHJcblx0XHRcdFx0Y29uc3QgaW5kZXhlczogbnVtYmVyW10gPSBbXTtcclxuXHRcdFx0XHRjb25zdCBhcnI6IHN0cmluZ1tdID0gdmFsLnNwbGl0KCcnKTtcclxuXHRcdFx0XHRsZXQgc2lnbmVkOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0XHRcdGNvbnN0IGMgPSBhcnJbaV07XHJcblx0XHRcdFx0XHRpZiAoYyA9PT0gJy0nICYmICFpKXtcclxuXHRcdFx0XHRcdFx0aW5kZXhlcy5wdXNoKC0xKTtcclxuXHRcdFx0XHRcdFx0c2lnbmVkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjb25zdCBuID0gY2hhcnMuaW5kZXhPZihjKTtcclxuXHRcdFx0XHRcdGlmIChuIDwgMCkgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBwYXJzZSBcXGBBbHBoYU51bVxcYCB0ZXh0IHZhbHVlIGNoYXJhY3RlciBcIiR7Y31cIiBhdCAke2l9YCk7XHJcblx0XHRcdFx0XHRpbmRleGVzLnB1c2gobik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChzaWduZWQgJiYgaW5kZXhlcy5sZW5ndGggPT09IDEpIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgcGFyc2UgXFxgQWxwaGFOdW1cXGAgdGV4dCB2YWx1ZSBcIiR7dmFsfVwiLmApO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vKyBzZXQgaW5kZXhlc1xyXG5cdFx0XHRcdGluc3RhbmNlLmluZGV4ZXMgPSBpbmRleGVzO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cclxuXHRcdFx0XHQvL3BhcnNlIGludGVnZXIgfiAvXFxkKy9cclxuXHRcdFx0XHRjb25zdCBpbnQ6IG51bWJlciA9IHBhcnNlSW50KE51bWJlcih2YWx1ZSkgYXMgYW55KTtcclxuXHRcdFx0XHRpZiAoaXNOYU4oaW50KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5zdXBwb3J0ZWQgcGFyc2UgXFxgQWxwaGFOdW1cXGAgdmFsdWUgXCIke3ZhbH1cIi5gKTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvLysgc2V0IHZhbHVlXHJcblx0XHRcdFx0aW5zdGFuY2UudmFsdWUgPSBpbnQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cclxuXHRcdFx0Ly9wYXJzZSBpbmRleGVzIH4gL1soLTEsKT9bMC0yNV0sWzAtMjVdLFswLTI1XV0vXHJcblx0XHRcdHRyeSB7XHJcblxyXG5cdFx0XHRcdC8vKyBzZXQgaW5kZXhlc1xyXG5cdFx0XHRcdGluc3RhbmNlLmluZGV4ZXMgPSB2YWx1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjYXRjaCAoZSkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEZhaWxlZCB0byBwYXJzZSBcXGBBbHBoYU51bVxcYCBvYmplY3QgdmFsdWU7ICR7ZX1gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vPDwgcmVzdWx0IH4gYEFscGhhTnVtYFxyXG5cdFx0cmV0dXJuIGluc3RhbmNlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGFyc2UgdmFsdWUgdG8gYEFscGhhTnVtYCB0ZXh0IH4gYC8tP1tBLVpdKy9gIChlLmcuIGA0OWAgPT4gYCdBWCdgOyBgNDlgID0+IGAnLUFYJ2ApXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWUgXyoqKHNlZSBwYXJzZSgpIGRvY3MpKipfXHJcblx0ICogQHJldHVybnMgYHN0cmluZ2BcclxuXHQgKiBAdGhyb3dzIGBUeXBlRXJyb3JgIG9uIGZhaWx1cmVcclxuXHQgKi9cclxuXHRzdGF0aWMgdGV4dCh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnBhcnNlKHZhbHVlKS50ZXh0O1xyXG5cdH1cclxufSIsImV4cG9ydCAqIGZyb20gJy4vX0FscGhhTnVtJzsiLCJpbXBvcnQgeyBfaXNGdW5jLCBfbnVtLCBfcG9zSW50IH0gZnJvbSAnLi4vdXRpbHMnO1xyXG5pbXBvcnQgeyBFYXNpbmdGdW5jdGlvbiwgRWFzaW5nc0tleSwgRWFzaW5ncyB9IGZyb20gJy4vZWFzaW5ncyc7XHJcbmltcG9ydCB7IHJlcXVlc3RBbmltYXRpb25GcmFtZSwgY2FuY2VsQW5pbWF0aW9uRnJhbWUgfSBmcm9tICcuL19wb2x5ZmlsbCc7XHJcblxyXG4vKipcclxuICogRGVmYXVsdCBhbmltYXRpb24gZWFzaW5nXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgREVGQVVMVF9FQVNJTkc6IEVhc2luZ0Z1bmN0aW9uID0gRWFzaW5ncy5lYXNlTGluZWFyO1xyXG5cclxuLyoqXHJcbiAqIERlZmF1bHQgYW5pbWF0aW9uIGR1cmF0aW9uXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgREVGQVVMVF9EVVJBVElPTjogbnVtYmVyID0gMTAwMDtcclxuXHJcbi8qKlxyXG4gKiBBbmltYXRlIG9wdGlvbnMgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElBbmltYXRlT3B0aW9ucyB7XHJcblx0dXBkYXRlOiAodmFsdWU6IHtcclxuXHRcdGluZGV4OiBudW1iZXI7XHJcblx0XHRkZWx0YTogbnVtYmVyO1xyXG5cdFx0cG9zOiBudW1iZXI7XHJcblx0XHR0aW1lOiBudW1iZXI7XHJcblx0fSkgPT4gdm9pZHxmYWxzZTtcclxuXHRiZWZvcmU/OiAodmFsdWU6IHtcclxuXHRcdHRpbWVzdGFtcDogbnVtYmVyO1xyXG5cdFx0b3B0aW9uczogYW55O1xyXG5cdFx0dGhlbjogbnVtYmVyO1xyXG5cdH0pID0+IHZvaWR8ZmFsc2U7XHJcblx0YWZ0ZXI/OiAodmFsdWU6IHtcclxuXHRcdGFib3J0ZWQ6IGJvb2xlYW47XHJcblx0XHRhYm9ydF9tZXRob2Q6IHVuZGVmaW5lZHwnYWJvcnQnfCd1cGRhdGUnfCdiZWdpbid8J3RpbWVvdXQnO1xyXG5cdFx0Y29tcGxldGU6IGJvb2xlYW47XHJcblx0XHRwYXVzZV9kdXJhdGlvbjogbnVtYmVyO1xyXG5cdFx0dG90YWxfZHVyYXRpb246IG51bWJlcjtcclxuXHR9KSA9PiB2b2lkO1xyXG5cdGVhc2luZzogRWFzaW5nc0tleXxFYXNpbmdGdW5jdGlvbjtcclxuXHRkdXJhdGlvbjogbnVtYmVyO1xyXG5cdGRlbGF5PzogbnVtYmVyO1xyXG5cdGRlbGF5ZWQ/OiBib29sZWFuO1xyXG5cdGZyb20/OiBudW1iZXI7XHJcblx0dG8/OiBudW1iZXI7XHJcblx0dGltZW91dD86IG51bWJlcjtcclxuXHRtYW51YWw/OiBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogQW5pbWF0aW9uIGNvbnRyb2wgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElBbmltYXRpb24ge1xyXG5cdF9kZWJ1ZzogYm9vbGVhbjtcclxuXHRiZWd1bjogYm9vbGVhbjtcclxuXHRwYXVzZWQ6IGJvb2xlYW47XHJcblx0ZG9uZTogYm9vbGVhbjtcclxuXHRwbGF5OiAocmVzdGFydDogYm9vbGVhbikgPT4gYm9vbGVhbjtcclxuXHRwYXVzZTogKHRvZ2dsZTogYm9vbGVhbikgPT4gYm9vbGVhbjtcclxuXHRyZXN1bWU6ICgpID0+IGJvb2xlYW47XHJcblx0cmVzdGFydDogKCkgPT4gYm9vbGVhbjtcclxuXHRjYW5jZWw6ICgpID0+IGJvb2xlYW47XHJcblx0YWJvcnQ6ICgpID0+IGJvb2xlYW47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgdGltZWQgYW5pbWF0aW9uXHJcbiAqIFxyXG4gKiBAcGFyYW0gb3B0aW9uc1xyXG4gKiBAcGFyYW0gX2RlYnVnXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX2FuaW1hdGUodGhpczogYW55LCBvcHRpb25zOiBJQW5pbWF0ZU9wdGlvbnMsIF9kZWJ1ZzogYm9vbGVhbiA9IGZhbHNlKTogSUFuaW1hdGlvbiB7XHJcblx0bGV0IHtcclxuXHRcdHVwZGF0ZTogX3VwZGF0ZSxcclxuXHRcdGJlZm9yZTogX2JlZm9yZSxcclxuXHRcdGFmdGVyOiBfYWZ0ZXIsXHJcblx0XHRlYXNpbmc6IF9lYXNpbmcgPSBERUZBVUxUX0VBU0lORyxcclxuXHRcdGR1cmF0aW9uOiBfZHVyYXRpb24gPSAxMDAwLFxyXG5cdFx0ZGVsYXk6IF9kZWxheSxcclxuXHRcdGRlbGF5ZWQ6IF9kZWxheWVkID0gZmFsc2UsXHJcblx0XHRmcm9tOiBfZnJvbSxcclxuXHRcdHRvOiBfdG8sXHJcblx0XHR0aW1lb3V0OiBfdGltZW91dCxcclxuXHRcdG1hbnVhbDogX21hbnVhbCA9IGZhbHNlLFxyXG5cdH0gPSBvcHRpb25zO1xyXG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cdGNvbnN0IGNvbnRleHQgPSAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiA/IHNlbGYgOiBudWxsO1xyXG5cdGNvbnN0IHVwZGF0ZSA9IF9pc0Z1bmMoX3VwZGF0ZSkgPyBfdXBkYXRlIDogdW5kZWZpbmVkO1xyXG5cdGNvbnN0IGJlZm9yZSA9IF9pc0Z1bmMoX2JlZm9yZSkgPyBfYmVmb3JlIDogdW5kZWZpbmVkO1xyXG5cdGNvbnN0IGFmdGVyID0gX2lzRnVuYyhfYWZ0ZXIpID8gX2FmdGVyIDogdW5kZWZpbmVkO1xyXG5cdGlmICghdXBkYXRlKXtcclxuXHRcdGxldCBlcnIgPSAnVGhlIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgZGVmaW5lZCBpbiBgX2FuaW1hdGVgIG9wdGlvbnMhJztcclxuXHRcdGNvbnNvbGUuZXJyb3IoZXJyLCBvcHRpb25zKTtcclxuXHRcdHRocm93IG5ldyBFcnJvcihlcnIpO1xyXG5cdH1cclxuXHRjb25zdCBlYXNpbmc6IEVhc2luZ0Z1bmN0aW9uID0gKCgpPT57XHJcblx0XHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBfZWFzaW5nICYmIEVhc2luZ3MuaGFzT3duUHJvcGVydHkoX2Vhc2luZykpIF9lYXNpbmcgPSBFYXNpbmdzW19lYXNpbmddO1xyXG5cdFx0cmV0dXJuICdmdW5jdGlvbicgPT09IHR5cGVvZiBfZWFzaW5nID8gX2Vhc2luZyA6IERFRkFVTFRfRUFTSU5HO1xyXG5cdH0pKCk7XHJcblx0Y29uc3QgZHVyYXRpb24gPSBfcG9zSW50KF9kdXJhdGlvbiwgMCkgPz8gREVGQVVMVF9EVVJBVElPTjtcclxuXHRjb25zdCBkZWxheSA9IF9wb3NJbnQoX2RlbGF5LCAwKSA/PyAwO1xyXG5cdGNvbnN0IGRlbGF5ZWQgPSBCb29sZWFuKF9kZWxheWVkKTtcclxuXHRjb25zdCBtYW51YWwgPSBCb29sZWFuKF9tYW51YWwpO1xyXG5cdGNvbnN0IHRpbWVvdXQgPSBfcG9zSW50KF90aW1lb3V0LCAwKSA/PyAwO1xyXG5cdGNvbnN0IGZyb20gPSBfbnVtKF9mcm9tLCAwKTtcclxuXHRjb25zdCB0byA9IF9udW0oX3RvLCAwKTtcclxuXHRjb25zdCBkaWZmID0gdG8gLSBmcm9tO1xyXG5cclxuXHRsZXQgaWQ6IG51bWJlcnx1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblx0bGV0IHN0YXJ0OiBudW1iZXJ8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGxldCBpc19kb25lOiBudW1iZXJ8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGxldCBpc19wYXVzZWQ6IGJvb2xlYW58dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGxldCBwcmV2OiBudW1iZXJ8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGxldCB0OiBudW1iZXJ8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGxldCBkOiBudW1iZXIgPSAwO1xyXG5cdGxldCBwOiBudW1iZXIgPSAwO1xyXG5cdGxldCBwdDogbnVtYmVyID0gMDtcclxuXHRsZXQgZXQ6IG51bWJlciA9IDA7XHJcblx0bGV0IGVsYXBzZWQ6IG51bWJlciA9IDA7XHJcblx0bGV0IGluZGV4OiBudW1iZXIgPSAtMTtcclxuXHRsZXQgdGhlbjogbnVtYmVyID0gRGF0ZS5ub3coKTtcclxuXHJcblx0Ly9yZXNldFxyXG5cdGNvbnN0IHJlc2V0ID0gKCk6IHZvaWQgPT4ge1xyXG5cdFx0aWYgKHQpIGNsZWFyVGltZW91dCh0KTtcclxuXHRcdGlmIChpZCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xyXG5cdFx0aWQgPSB0ID0gc3RhcnQgPSBpc19kb25lID0gaXNfcGF1c2VkID0gcHJldiA9IHVuZGVmaW5lZDtcclxuXHRcdGQgPSBwID0gZXQgPSBwdCA9IGVsYXBzZWQgPSAwO1xyXG5cdFx0aW5kZXggPSAtMTtcclxuXHRcdHRoZW4gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHR9O1xyXG5cclxuXHQvL2ZyYW1lXHJcblx0Y29uc3QgZnJhbWUgPSAodGltZTogbnVtYmVyKTogdm9pZCA9PiB7XHJcblx0XHRpZiAodGltZSA9PT0gcHJldiB8fCBpc19kb25lKSByZXR1cm47XHJcblx0XHRwcmV2ID0gdGltZTtcclxuXHRcdGluZGV4ICs9IDE7XHJcblx0XHRsZXQgZGVsdGEgPSAhZHVyYXRpb24gPyAwIDogZWFzaW5nLmNhbGwoY29udGV4dCwgdGltZSwgMCwgMSwgZHVyYXRpb24pO1xyXG5cdFx0bGV0IHBvcyA9IDA7XHJcblx0XHRpZiAoZGlmZil7XHJcblx0XHRcdHBvcyA9IE1hdGgubWluKGRlbHRhICogTWF0aC5hYnMoZGlmZiksIE1hdGguYWJzKGRpZmYpKTtcclxuXHRcdFx0cG9zID0gZnJvbSArIChwb3MgKiAoZGlmZiA8IDAgPyAtMSA6IDEpKTtcclxuXHRcdH1cclxuXHRcdGxldCByZXMgPSB1cGRhdGUuY2FsbChjb250ZXh0LCB7aW5kZXgsIGRlbHRhLCBwb3MsIHRpbWV9KTtcclxuXHRcdGlmICh0aW1lID49IGR1cmF0aW9uKSBpc19kb25lID0gMTtcclxuXHRcdGVsc2UgaWYgKHJlcyA9PT0gZmFsc2UpIGlzX2RvbmUgPSAtMTtcclxuXHR9O1xyXG5cclxuXHQvL2ZpbmlzaFxyXG5cdGNvbnN0IGZpbmlzaCA9ICh0aW1lc3RhbXA6IG51bWJlcik6IHZvaWQgPT4ge1xyXG5cdFx0aWYgKHQpIGNsZWFyVGltZW91dCh0KTtcclxuXHRcdGlmIChwdCl7XHJcblx0XHRcdHAgKz0gKHRpbWVzdGFtcCAtIHB0KTtcclxuXHRcdFx0cHQgPSAwO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHBhdXNlX2R1cmF0aW9uID0gcDtcclxuXHRcdGxldCB0b3RhbF9kdXJhdGlvbiA9IE1hdGgubWF4KERhdGUubm93KCkgLSB0aGVuLCBlbGFwc2VkICsgZXQpO1xyXG5cdFx0bGV0IGFib3J0X21ldGhvZDogdW5kZWZpbmVkfCdhYm9ydCd8J3VwZGF0ZSd8J2JlZ2luJ3wndGltZW91dCc7XHJcblx0XHRsZXQgYWJvcnRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0bGV0IGNvbXBsZXRlOiBib29sZWFuID0gIWFib3J0ZWQ7XHJcblx0XHRpZiAoaXNfZG9uZSAmJiBpc19kb25lIDwgMCl7XHJcblx0XHRcdGFib3J0ZWQgPSB0cnVlO1xyXG5cdFx0XHRzd2l0Y2ggKGlzX2RvbmUpIHtcclxuXHRcdFx0XHRjYXNlIC0xOlxyXG5cdFx0XHRcdFx0YWJvcnRfbWV0aG9kID0gJ3VwZGF0ZSc7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIC0yOlxyXG5cdFx0XHRcdFx0YWJvcnRfbWV0aG9kID0gJ2JlZ2luJztcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgLTQ6XHJcblx0XHRcdFx0XHRhYm9ydF9tZXRob2QgPSAndGltZW91dCc7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YWJvcnRfbWV0aG9kID0gJ2Fib3J0JztcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoYWZ0ZXIpIGFmdGVyLmNhbGwoY29udGV4dCwge2Fib3J0ZWQsIGFib3J0X21ldGhvZCwgY29tcGxldGUsIHBhdXNlX2R1cmF0aW9uLCB0b3RhbF9kdXJhdGlvbn0pO1xyXG5cdFx0aWQgPSB1bmRlZmluZWQ7XHJcblx0fTtcclxuXHJcblx0Ly9iZWdpblxyXG5cdGNvbnN0IGJlZ2luID0gKHRpbWVzdGFtcDogbnVtYmVyKTogdm9pZCA9PiB7XHJcblx0XHRpZiAodGltZW91dCkgdCA9IHNldFRpbWVvdXQoKCkgPT4gKGlzX2RvbmUgPSAtNCksIHRpbWVvdXQpIGFzIGFueTtcclxuXHRcdGlmIChiZWZvcmUpe1xyXG5cdFx0XHRsZXQgcmVzID0gYmVmb3JlLmNhbGwoY29udGV4dCwge3RpbWVzdGFtcCwgb3B0aW9ucywgdGhlbn0pO1xyXG5cdFx0XHRpZiAocmVzID09PSBmYWxzZSkgaXNfZG9uZSA9IC0yO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8vc3RlcFxyXG5cdGNvbnN0IHN0ZXAgPSAodGltZXN0YW1wOiBudW1iZXIpOiB2b2lkID0+IHtcclxuXHRcdGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSBiZWdpbih0aW1lc3RhbXApO1xyXG5cdFx0aWYgKCFzdGFydCkgc3RhcnQgPSB0aW1lc3RhbXA7XHJcblx0XHRlbGFwc2VkID0gKHRpbWVzdGFtcCAtIHN0YXJ0KSArIGV0O1xyXG5cdFx0aWYgKGlzX2RvbmUpIHJldHVybiBmaW5pc2godGltZXN0YW1wKTtcclxuXHRcdGlmIChpc19wYXVzZWQpe1xyXG5cdFx0XHRpZCA9IHVuZGVmaW5lZDtcclxuXHRcdFx0ZXQgPSBlbGFwc2VkO1xyXG5cdFx0XHRwdCA9IHRpbWVzdGFtcDtcclxuXHRcdFx0c3RhcnQgPSAwO1xyXG5cdFx0XHRlbGFwc2VkID0gMDtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZiAocHQpe1xyXG5cdFx0XHRwICs9ICh0aW1lc3RhbXAgLSBwdCk7XHJcblx0XHRcdHB0ID0gMDtcclxuXHRcdH1cclxuXHRcdGlmICghZCB8fCAoZCAtICtlbGFwc2VkLnRvRml4ZWQoMikpIDw9IDAuMSl7XHJcblx0XHRcdGlmICghKCFlbGFwc2VkICYmIGRlbGF5ZWQpKSBmcmFtZShNYXRoLm1pbigrZWxhcHNlZC50b0ZpeGVkKDEpLCBkID8gZCA6IGR1cmF0aW9uKSk7XHJcblx0XHRcdGQgKz0gZGVsYXk7XHJcblx0XHR9XHJcblx0XHRpZiAoIWlzX2RvbmUgJiYgZWxhcHNlZCA+PSBkdXJhdGlvbikgaXNfZG9uZSA9IDE7XHJcblx0XHRpZiAoaXNfZG9uZSkgcmV0dXJuIGZpbmlzaCh0aW1lc3RhbXApO1xyXG5cdFx0ZWxzZSBpZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuXHR9O1xyXG5cclxuXHQvL2Fib3J0XHJcblx0Y29uc3QgYWJvcnQgPSAoKTogYm9vbGVhbiA9PiB7XHJcblx0XHRpZiAoaXNfZG9uZSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0aXNfZG9uZSA9IC0zO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fTtcclxuXHJcblx0Ly9wbGF5XHJcblx0Y29uc3QgcGxheSA9IChyZXN0YXJ0OiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuID0+IHtcclxuXHRcdGlmIChfZGVidWcpIGNvbnNvbGUuZGVidWcoYFtfYW5pbWF0ZV0gJHtpc19wYXVzZWQgPyAncmVzdW1lJyA6ICdwbGF5J30uYCwge3Jlc3RhcnQsIGlzX3BhdXNlZCwgaXNfZG9uZSwgZHVyYXRpb24sIGZyb20sIHRvLCBkaWZmLCBlYXNpbmd9KTtcclxuXHRcdGlmIChyZXN0YXJ0KSByZXNldCgpO1xyXG5cdFx0aWYgKGlzX2RvbmUpIHJldHVybiBmYWxzZTtcclxuXHRcdGlzX3BhdXNlZCA9IHVuZGVmaW5lZDtcclxuXHRcdGlmIChpZCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xyXG5cdFx0aWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9O1xyXG5cclxuXHQvL3BhdXNlXHJcblx0Y29uc3QgcGF1c2UgPSAodG9nZ2xlOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4gPT4ge1xyXG5cdFx0aWYgKHRvZ2dsZSA9PT0gbnVsbCkgdG9nZ2xlID0gIWlzX3BhdXNlZDtcclxuXHRcdGVsc2UgdG9nZ2xlID0gQm9vbGVhbih0b2dnbGUpO1xyXG5cdFx0aWYgKF9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW19hbmltYXRlXSAke3RvZ2dsZSA/ICdwYXVzZScgOiAndW5wYXVzZSd9LmAsIHt0b2dnbGUsIGlzX3BhdXNlZCwgaXNfZG9uZX0pO1xyXG5cdFx0aWYgKGlzX2RvbmUpIHJldHVybiBmYWxzZTtcclxuXHRcdGlmICh0b2dnbGUgPT09IGlzX3BhdXNlZCkgcmV0dXJuIGlzX3BhdXNlZDtcclxuXHRcdHJldHVybiB0b2dnbGUgPyAoaXNfcGF1c2VkID0gdG9nZ2xlKSA6IHBsYXkoKTtcclxuXHR9O1xyXG5cclxuXHQvL3Jlc3VtZVxyXG5cdGNvbnN0IHJlc3VtZSA9ICgpOiBib29sZWFuID0+IGlzX3BhdXNlZCA/IHBhdXNlKGZhbHNlKSA6IGZhbHNlO1xyXG5cdFxyXG5cdC8vcmVzdGFydFxyXG5cdGNvbnN0IHJlc3RhcnQgPSAoKTogYm9vbGVhbiA9PiBwbGF5KHRydWUpO1xyXG5cdFxyXG5cdC8vY2FuY2VsXHJcblx0Y29uc3QgY2FuY2VsID0gKCk6IGJvb2xlYW4gPT4ge1xyXG5cdFx0cmVzZXQoKTtcclxuXHRcdGlmIChfZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tfYW5pbWF0ZV0gY2FuY2VsbGVkLicpO1xyXG5cdFx0cmV0dXJuICFpc19kb25lO1xyXG5cdH07XHJcblxyXG5cdC8vYXV0b3BsYXlcclxuXHRpZiAoIW1hbnVhbCkgcGxheSgpO1xyXG5cdFxyXG5cdC8vcmVzdWx0IC0gYW5pbWF0aW9uXHJcblx0cmV0dXJuIHtcclxuXHRcdGdldCBfZGVidWcoKXtcclxuXHRcdFx0cmV0dXJuIF9kZWJ1ZztcclxuXHRcdH0sXHJcblx0XHRnZXQgYmVndW4oKXtcclxuXHRcdFx0cmV0dXJuIHN0YXJ0ICE9PSB1bmRlZmluZWQ7XHJcblx0XHR9LFxyXG5cdFx0Z2V0IHBhdXNlZCgpe1xyXG5cdFx0XHRyZXR1cm4gQm9vbGVhbihpc19wYXVzZWQpO1xyXG5cdFx0fSxcclxuXHRcdGdldCBkb25lKCl7XHJcblx0XHRcdHJldHVybiBCb29sZWFuKGlzX2RvbmUpO1xyXG5cdFx0fSxcclxuXHRcdHBsYXksXHJcblx0XHRwYXVzZSxcclxuXHRcdHJlc3VtZSxcclxuXHRcdHJlc3RhcnQsXHJcblx0XHRjYW5jZWwsXHJcblx0XHRhYm9ydCxcclxuXHR9O1xyXG59IiwiLyoqXHJcbiAqIEV4cG9ydCBwb2x5ZmlsbCAtIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIGNhbmNlbEFuaW1hdGlvbkZyYW1lXSA9ICgoKSA9PiB7XHJcblx0bGV0IF9yZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IGFueSA9IHVuZGVmaW5lZDtcclxuXHRsZXQgX2NhbmNlbEFuaW1hdGlvbkZyYW1lOiBhbnkgPSB1bmRlZmluZWQ7XHJcblx0aWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2Ygd2luZG93KXtcclxuXHRcdGNvbnN0IHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xyXG5cdFx0X3JlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XHJcblx0XHRfY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlbmRvcnMubGVuZ3RoICYmICFfcmVxdWVzdEFuaW1hdGlvbkZyYW1lOyBpICsrKXtcclxuXHRcdFx0Y29uc3QgdmVuZG9yOiBhbnkgPSB2ZW5kb3JzW2ldO1xyXG5cdFx0XHRfcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93W2Ake3ZlbmRvcn1SZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGFzIGFueV07XHJcblx0XHRcdF9jYW5jZWxBbmltYXRpb25GcmFtZSA9IHdpbmRvd1tgJHt2ZW5kb3J9Q2FuY2VsQW5pbWF0aW9uRnJhbWVgIGFzIGFueV0gfHwgd2luZG93W2Ake3ZlbmRvcn1DYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGFzIGFueV07XHJcblx0XHR9XHJcblx0fVxyXG5cdGxldCByZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IChjYWxsYmFjazogKCh0aW1lOiBudW1iZXIpPT52b2lkKSkgPT4gbnVtYmVyO1xyXG5cdGlmIChfcmVxdWVzdEFuaW1hdGlvbkZyYW1lKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBfcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGFzICgoY2FsbGJhY2s6ICgodGltZTogbnVtYmVyKT0+dm9pZCkpID0+IG51bWJlcik7XHJcblx0ZWxzZSB7XHJcblx0XHRsZXQgcHJldiA9IDA7XHJcblx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihjYWxsYmFjazogKCh0aW1lOiBudW1iZXIpPT52b2lkKSl7XHJcblx0XHRcdGxldCBjdXJyID0gbmV3IERhdGUoKS5nZXRUaW1lKCksXHJcblx0XHRcdHRpbWVvdXQgPSBNYXRoLm1heCgwLCAxNiAtIChjdXJyIC0gcHJldikpLFxyXG5cdFx0XHR0aW1lID0gY3VyciArIHRpbWVvdXQ7XHJcblx0XHRcdGxldCBpZDogbnVtYmVyID0gc2V0VGltZW91dCgoKSA9PiAnZnVuY3Rpb24nID09PSB0eXBlb2YgY2FsbGJhY2sgPyBjYWxsYmFjayh0aW1lKSA6IG51bGwsIHRpbWVvdXQpIGFzIGFueTtcclxuXHRcdFx0cHJldiA9IHRpbWU7XHJcblx0XHRcdHJldHVybiBpZDtcclxuXHRcdH07XHJcblx0fVxyXG5cdGxldCBjYW5jZWxBbmltYXRpb25GcmFtZTogKChoYW5kbGU6IG51bWJlcikgPT4gdm9pZCk7XHJcblx0aWYgKF9jYW5jZWxBbmltYXRpb25GcmFtZSkgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBfY2FuY2VsQW5pbWF0aW9uRnJhbWUgYXMgKChoYW5kbGU6IG51bWJlcikgPT4gdm9pZClcclxuXHRlbHNlIGNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaGFuZGxlOiBudW1iZXIpe1xyXG5cdFx0Y2xlYXJUaW1lb3V0KGhhbmRsZSk7XHJcblx0fTtcclxuXHRpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiB3aW5kb3cpe1xyXG5cdFx0aWYgKCF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xyXG5cdFx0aWYgKCF3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGNhbmNlbEFuaW1hdGlvbkZyYW1lO1xyXG5cdH1cclxuXHRyZXR1cm4gW3JlcXVlc3RBbmltYXRpb25GcmFtZSwgY2FuY2VsQW5pbWF0aW9uRnJhbWVdO1xyXG59KSgpOyIsImV4cG9ydCB0eXBlIEVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpID0+IG51bWJlcjtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlTGluZWFyOkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gY2hhbmdlICogdGltZSAvIGR1cmF0aW9uICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluUXVhZDpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IGNoYW5nZSAqICh0aW1lIC89IGR1cmF0aW9uKSAqIHRpbWUgKyBiZWdpbjtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlT3V0UXVhZDpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IC1jaGFuZ2UgKiAodGltZSAvPSBkdXJhdGlvbikgKiAodGltZSAtIDIpICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluT3V0UXVhZDpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24gLyAyKSA8IDEpIHJldHVybiBjaGFuZ2UgLyAyICogdGltZSAqIHRpbWUgKyBiZWdpbjtcclxuXHRyZXR1cm4gLWNoYW5nZSAvIDIgKiAoKC0tdGltZSkgKiAodGltZSAtIDIpIC0gMSkgKyBiZWdpbjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5TaW5lOkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gLWNoYW5nZSAqIE1hdGguY29zKHRpbWUgLyBkdXJhdGlvbiAqIChNYXRoLlBJIC8gMikpICsgY2hhbmdlICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZU91dFNpbmU6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiBjaGFuZ2UgKiBNYXRoLnNpbih0aW1lIC8gZHVyYXRpb24gKiAoTWF0aC5QSSAvIDIpKSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJbk91dFNpbmU6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiAtY2hhbmdlIC8gMiAqIChNYXRoLmNvcyhNYXRoLlBJICogdGltZSAvIGR1cmF0aW9uKSAtIDEpICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluRXhwbzpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+ICh0aW1lID09PSAwKSA/IGJlZ2luIDogY2hhbmdlICogTWF0aC5wb3coMiwgMTAgKiAodGltZSAvIGR1cmF0aW9uIC0gMSkpICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZU91dEV4cG86RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiAodGltZSA9PT0gZHVyYXRpb24pID8gYmVnaW4gKyBjaGFuZ2UgOiBjaGFuZ2UgKiAoLU1hdGgucG93KDIsIC0xMCAqIHRpbWUgLyBkdXJhdGlvbikgKyAxKSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJbk91dEV4cG86RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0aWYgKHRpbWUgPT09IDApIHJldHVybiBiZWdpbjtcclxuXHRpZiAodGltZSA9PT0gZHVyYXRpb24pIHJldHVybiBiZWdpbiArIGNoYW5nZTtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24gLyAyKSA8IDEpIHJldHVybiBjaGFuZ2UgLyAyICogTWF0aC5wb3coMiwgMTAgKiAodGltZSAtIDEpKSArIGJlZ2luO1xyXG5cdHJldHVybiBjaGFuZ2UgLyAyICogKC1NYXRoLnBvdygyLCAtMTAgKiAtLXRpbWUpICsgMikgKyBiZWdpbjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5DaXJjOkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gLWNoYW5nZSAqIChNYXRoLnNxcnQoMSAtICh0aW1lIC89IGR1cmF0aW9uKSAqIHRpbWUpIC0gMSkgKyBiZWdpbjtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlT3V0Q2lyYzpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IGNoYW5nZSAqIE1hdGguc3FydCgxIC0gKHRpbWUgPSB0aW1lIC8gZHVyYXRpb24gLSAxKSAqIHRpbWUpICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluT3V0Q2lyYzpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24gLyAyKSA8IDEpIHJldHVybiAtY2hhbmdlIC8gMiAqIChNYXRoLnNxcnQoMSAtIHRpbWUgKiB0aW1lKSAtIDEpICsgYmVnaW47XHJcblx0cmV0dXJuIGNoYW5nZSAvIDIgKiAoTWF0aC5zcXJ0KDEgLSAodGltZSAtPSAyKSAqIHRpbWUpICsgMSkgKyBiZWdpbjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5DdWJpYzpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IGNoYW5nZSAqICh0aW1lIC89IGR1cmF0aW9uKSAqIHRpbWUgKiB0aW1lICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZU91dEN1YmljOkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gY2hhbmdlICogKCh0aW1lID0gdGltZSAvIGR1cmF0aW9uIC0gMSkgKiB0aW1lICogdGltZSArIDEpICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluT3V0Q3ViaWM6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0aWYgKCh0aW1lIC89IGR1cmF0aW9uIC8gMikgPCAxKSByZXR1cm4gY2hhbmdlIC8gMiAqIHRpbWUgKiB0aW1lICogdGltZSArIGJlZ2luO1xyXG5cdHJldHVybiBjaGFuZ2UgLyAyICogKCh0aW1lIC09IDIpICogdGltZSAqIHRpbWUgKyAyKSArIGJlZ2luO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJblF1YXJ0OkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gY2hhbmdlICogKHRpbWUgLz0gZHVyYXRpb24pICogdGltZSAqIHRpbWUgKiB0aW1lICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZU91dFF1YXJ0OkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gLWNoYW5nZSAqICgodGltZSA9IHRpbWUgLyBkdXJhdGlvbiAtIDEpICogdGltZSAqIHRpbWUgKiB0aW1lIC0gMSkgKyBiZWdpbjtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5PdXRRdWFydDpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24gLyAyKSA8IDEpIHJldHVybiBjaGFuZ2UgLyAyICogdGltZSAqIHRpbWUgKiB0aW1lICogdGltZSArIGJlZ2luO1xyXG5cdHJldHVybiAtY2hhbmdlIC8gMiAqICgodGltZSAtPSAyKSAqIHRpbWUgKiB0aW1lICogdGltZSAtIDIpICsgYmVnaW47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluUXVpbnQ6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiBjaGFuZ2UgKiAodGltZSAvPSBkdXJhdGlvbikgKiB0aW1lICogdGltZSAqIHRpbWUgKiB0aW1lICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZU91dFF1aW50OkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gY2hhbmdlICogKCh0aW1lID0gdGltZSAvIGR1cmF0aW9uIC0gMSkgKiB0aW1lICogdGltZSAqIHRpbWUgKiB0aW1lICsgMSkgKyBiZWdpbjtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5PdXRRdWludDpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24gLyAyKSA8IDEpIHJldHVybiBjaGFuZ2UgLyAyICogdGltZSAqIHRpbWUgKiB0aW1lICogdGltZSAqIHRpbWUgKyBiZWdpbjtcclxuXHRyZXR1cm4gY2hhbmdlIC8gMiAqICgodGltZSAtPSAyKSAqIHRpbWUgKiB0aW1lICogdGltZSAqIHRpbWUgKyAyKSArIGJlZ2luO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJbkVsYXN0aWM6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0bGV0IHMgPSAxLjcwMTU4O1xyXG5cdGxldCBwID0gMDtcclxuXHRsZXQgYSA9IGNoYW5nZTtcclxuXHRpZiAodGltZSA9PT0gMCkgcmV0dXJuIGJlZ2luO1xyXG5cdGlmICgodGltZSAvPSBkdXJhdGlvbikgPT09IDEpIHJldHVybiBiZWdpbiArIGNoYW5nZTtcclxuXHRpZiAoIXApIHAgPSBkdXJhdGlvbiAqIC4zO1xyXG5cdGlmIChhIDwgTWF0aC5hYnMoY2hhbmdlKSl7XHJcblx0XHRhID0gY2hhbmdlO1xyXG5cdFx0cyA9IHAgLyA0O1xyXG5cdH1cclxuXHRlbHNlIHMgPSBwIC8gKDIgKiBNYXRoLlBJKSAqIE1hdGguYXNpbihjaGFuZ2UgLyBhKTtcclxuXHRyZXR1cm4gLShhICogTWF0aC5wb3coMiwgMTAgKiAodGltZSAtPSAxKSkgKiBNYXRoLnNpbigodGltZSAqIGR1cmF0aW9uIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkpICsgYmVnaW47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZU91dEVsYXN0aWM6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0bGV0IHMgPSAxLjcwMTU4O1xyXG5cdGxldCBwID0gMDtcclxuXHRsZXQgYSA9IGNoYW5nZTtcclxuXHRpZiAodGltZSA9PT0gMCkgcmV0dXJuIGJlZ2luO1xyXG5cdGlmICgodGltZSAvPSBkdXJhdGlvbikgPT09IDEpIHJldHVybiBiZWdpbiArIGNoYW5nZTtcclxuXHRpZiAoIXApIHAgPSBkdXJhdGlvbiAqIC4zO1xyXG5cdGlmIChhIDwgTWF0aC5hYnMoY2hhbmdlKSkge1xyXG5cdFx0YSA9IGNoYW5nZTtcclxuXHRcdHMgPSBwIC8gNDtcclxuXHR9XHJcblx0ZWxzZSBzID0gcCAvICgyICogTWF0aC5QSSkgKiBNYXRoLmFzaW4oY2hhbmdlIC8gYSk7XHJcblx0cmV0dXJuIGEgKiBNYXRoLnBvdygyLCAtMTAgKiB0aW1lKSAqIE1hdGguc2luKCh0aW1lICogZHVyYXRpb24gLSBzKSAqICgyICogTWF0aC5QSSkgLyBwKSArIGNoYW5nZSArIGJlZ2luO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJbk91dEVsYXN0aWM6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0bGV0IHMgPSAxLjcwMTU4O1xyXG5cdGxldCBwID0gMDtcclxuXHRsZXQgYSA9IGNoYW5nZTtcclxuXHRpZiAodGltZSA9PT0gMCkgcmV0dXJuIGJlZ2luO1xyXG5cdGlmICgodGltZSAvPSBkdXJhdGlvbiAvIDIpID09PSAyKSByZXR1cm4gYmVnaW4gKyBjaGFuZ2U7XHJcblx0aWYgKCFwKSBwID0gZHVyYXRpb24gKiAoLjMgKiAxLjUpO1xyXG5cdGlmIChhIDwgTWF0aC5hYnMoY2hhbmdlKSkge1xyXG5cdFx0YSA9IGNoYW5nZTtcclxuXHRcdHMgPSBwIC8gNDtcclxuXHR9XHJcblx0ZWxzZSBzID0gcCAvICgyICogTWF0aC5QSSkgKiBNYXRoLmFzaW4oY2hhbmdlIC8gYSk7XHJcblx0aWYgKHRpbWUgPCAxKSByZXR1cm4gLS41ICogKGEgKiBNYXRoLnBvdygyLCAxMCAqICh0aW1lIC09IDEpKSAqIE1hdGguc2luKCh0aW1lICogZHVyYXRpb24gLSBzKSAqICgyICogTWF0aC5QSSkgLyBwKSkgKyBiZWdpbjtcclxuXHRyZXR1cm4gYSAqIE1hdGgucG93KDIsIC0xMCAqICh0aW1lIC09IDEpKSAqIE1hdGguc2luKCh0aW1lICogZHVyYXRpb24gLSBzKSAqICgyICogTWF0aC5QSSkgLyBwKSAqIC41ICsgY2hhbmdlICsgYmVnaW47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluQmFjazpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRsZXQgcztcclxuXHRpZiAocyA9PT0gdW5kZWZpbmVkKSBzID0gMS43MDE1ODtcclxuXHRyZXR1cm4gY2hhbmdlICogKHRpbWUgLz0gZHVyYXRpb24pICogdGltZSAqICgocyArIDEpICogdGltZSAtIHMpICsgYmVnaW47XHJcbn07IiwiaW1wb3J0IHR5cGUgeyBFYXNpbmdGdW5jdGlvbiBhcyBfRWFzaW5nRnVuY3Rpb24gfSBmcm9tICcuL19lYXNpbmdzJztcclxuaW1wb3J0IHtcclxuXHRlYXNlTGluZWFyLFxyXG5cdGVhc2VJblF1YWQsXHJcblx0ZWFzZU91dFF1YWQsXHJcblx0ZWFzZUluT3V0UXVhZCxcclxuXHRlYXNlSW5TaW5lLFxyXG5cdGVhc2VPdXRTaW5lLFxyXG5cdGVhc2VJbk91dFNpbmUsXHJcblx0ZWFzZUluRXhwbyxcclxuXHRlYXNlT3V0RXhwbyxcclxuXHRlYXNlSW5PdXRFeHBvLFxyXG5cdGVhc2VJbkNpcmMsXHJcblx0ZWFzZU91dENpcmMsXHJcblx0ZWFzZUluT3V0Q2lyYyxcclxuXHRlYXNlSW5DdWJpYyxcclxuXHRlYXNlT3V0Q3ViaWMsXHJcblx0ZWFzZUluT3V0Q3ViaWMsXHJcblx0ZWFzZUluUXVhcnQsXHJcblx0ZWFzZU91dFF1YXJ0LFxyXG5cdGVhc2VJbk91dFF1YXJ0LFxyXG5cdGVhc2VJblF1aW50LFxyXG5cdGVhc2VPdXRRdWludCxcclxuXHRlYXNlSW5PdXRRdWludCxcclxuXHRlYXNlSW5FbGFzdGljLFxyXG5cdGVhc2VPdXRFbGFzdGljLFxyXG5cdGVhc2VJbk91dEVsYXN0aWMsXHJcblx0ZWFzZUluQmFjayxcclxufSBmcm9tICcuL19lYXNpbmdzJztcclxuZXhwb3J0IHR5cGUgRWFzaW5nRnVuY3Rpb24gPSBfRWFzaW5nRnVuY3Rpb247XHJcbmV4cG9ydCBpbnRlcmZhY2UgSUVhc2luZ3Mge1xyXG5cdGVhc2VMaW5lYXI6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VJblF1YWQ6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VPdXRRdWFkOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlSW5PdXRRdWFkOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlSW5TaW5lOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlT3V0U2luZTogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluT3V0U2luZTogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluRXhwbzogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZU91dEV4cG86IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VJbk91dEV4cG86IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VJbkNpcmM6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VPdXRDaXJjOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlSW5PdXRDaXJjOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlSW5DdWJpYzogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZU91dEN1YmljOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlSW5PdXRDdWJpYzogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluUXVhcnQ6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VPdXRRdWFydDogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluT3V0UXVhcnQ6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VJblF1aW50OiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlT3V0UXVpbnQ6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VJbk91dFF1aW50OiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlSW5FbGFzdGljOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlT3V0RWxhc3RpYzogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluT3V0RWxhc3RpYzogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluQmFjazogRWFzaW5nRnVuY3Rpb247XHJcbn07XHJcbmV4cG9ydCB0eXBlIEVhc2luZ3NLZXkgPSBrZXlvZiBJRWFzaW5ncztcclxuZXhwb3J0IGNvbnN0IEVhc2luZ3M6IElFYXNpbmdzID0ge1xyXG5cdGVhc2VMaW5lYXIsXHJcblx0ZWFzZUluUXVhZCxcclxuXHRlYXNlT3V0UXVhZCxcclxuXHRlYXNlSW5PdXRRdWFkLFxyXG5cdGVhc2VJblNpbmUsXHJcblx0ZWFzZU91dFNpbmUsXHJcblx0ZWFzZUluT3V0U2luZSxcclxuXHRlYXNlSW5FeHBvLFxyXG5cdGVhc2VPdXRFeHBvLFxyXG5cdGVhc2VJbk91dEV4cG8sXHJcblx0ZWFzZUluQ2lyYyxcclxuXHRlYXNlT3V0Q2lyYyxcclxuXHRlYXNlSW5PdXRDaXJjLFxyXG5cdGVhc2VJbkN1YmljLFxyXG5cdGVhc2VPdXRDdWJpYyxcclxuXHRlYXNlSW5PdXRDdWJpYyxcclxuXHRlYXNlSW5RdWFydCxcclxuXHRlYXNlT3V0UXVhcnQsXHJcblx0ZWFzZUluT3V0UXVhcnQsXHJcblx0ZWFzZUluUXVpbnQsXHJcblx0ZWFzZU91dFF1aW50LFxyXG5cdGVhc2VJbk91dFF1aW50LFxyXG5cdGVhc2VJbkVsYXN0aWMsXHJcblx0ZWFzZU91dEVsYXN0aWMsXHJcblx0ZWFzZUluT3V0RWxhc3RpYyxcclxuXHRlYXNlSW5CYWNrLFxyXG59OyIsImV4cG9ydCAqIGZyb20gJy4vZWFzaW5ncyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX3BvbHlmaWxsJztcclxuZXhwb3J0ICogZnJvbSAnLi9fYW5pbWF0ZSc7IiwiaW1wb3J0IHsgX2lzRGF0ZSB9IGZyb20gJy4uL3V0aWxzL19kYXRldGltZSc7XHJcbmltcG9ydCB7IF9yb3VuZCB9IGZyb20gJy4uL3V0aWxzL19udW1iZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVsYXBzZWRUaW1lXHJcbntcclxuXHQvL3Byb3BzXHJcblx0c3RhcnRfdGltZTogRGF0ZXx1bmRlZmluZWQ7XHJcblx0c3RvcF90aW1lOiBEYXRlfHVuZGVmaW5lZDtcclxuXHRfbXM6IG51bWJlcnx1bmRlZmluZWQ7XHJcblx0XHJcblx0LyoqXHJcblx0ICogTmV3IGluc3RhbmNlXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IoKXtcclxuXHRcdHRoaXMuc3RhcnRfdGltZSA9IG5ldyBEYXRlKCk7XHJcblx0XHR0aGlzLnN0b3BfdGltZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX21zID0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU3RhcnQgdGltZSB0cmFja2luZyAoc2V0cyBzdGFydF90aW1lIHRvIG5vdyBhbmQgcmVzZXRzIG90aGVyIHByb3BlcnRpZXMpXHJcblx0ICovXHJcblx0c3RhcnQoKTogRWxhcHNlZFRpbWUge1xyXG5cdFx0Y29uc3QgX25vdyA9IG5ldyBEYXRlKCk7XHJcblx0XHR0aGlzLnN0YXJ0X3RpbWUgPSBfaXNEYXRlKHRoaXMuc3RhcnRfdGltZSkgPyB0aGlzLnN0YXJ0X3RpbWUgOiBfbm93O1xyXG5cdFx0dGhpcy5zdG9wX3RpbWUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLl9tcyA9IHVuZGVmaW5lZDtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVHJhY2sgY3VycmVudCB0aW1lIChzZXRzIHRoaXMuX21zIHRvIHRpbWUgZGlmZmVyZW5jZSBiZXR3ZWVuIGxhc3Qgc3RhcnQgYW5kIG5vdylcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdXBkYXRlU3RhcnQgIFNldCBzdGFydCB0byBub3dcclxuXHQgKi9cclxuXHRub3codXBkYXRlU3RhcnQ6IGJvb2xlYW4gPSBmYWxzZSk6IEVsYXBzZWRUaW1lIHtcclxuXHRcdGNvbnN0IF9ub3cgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0Y29uc3QgX3N0YXJ0OiBhbnkgPSBfaXNEYXRlKHRoaXMuc3RhcnRfdGltZSkgPyB0aGlzLnN0YXJ0X3RpbWUgOiB0aGlzLnN0YXJ0X3RpbWUgPSBfbm93O1xyXG5cdFx0dGhpcy5fbXMgPSBfbm93LmdldFRpbWUoKSAtIF9zdGFydC5nZXRUaW1lKCk7XHJcblx0XHRpZiAodXBkYXRlU3RhcnQpIHRoaXMuc3RhcnRfdGltZSA9IF9ub3c7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN0b3AgdGltZSB0cmFja2luZyAoc2V0cyB0aGlzLl9tcyB0byB0aW1lIGRpZmZlcmVuY2UgYmV0d2VlbiBsYXN0IHN0YXJ0IGFuZCBsYXN0IHN0b3ApXHJcblx0ICogSWYgbGFzdCBzdG9wIGlzIGxlc3MgdGhhbiBzdGFydCB0aW1lLCBzdG9wIHRpbWUgaXMgdXBkYXRlZCB0byBub3cuXHJcblx0ICovXHJcblx0c3RvcCgpOiBFbGFwc2VkVGltZSB7XHJcblx0XHRjb25zdCBfbm93ID0gbmV3IERhdGUoKTtcclxuXHRcdGNvbnN0IF9zdGFydDogYW55ID0gX2lzRGF0ZSh0aGlzLnN0YXJ0X3RpbWUpID8gdGhpcy5zdGFydF90aW1lIDogX25vdywgdCA9IF9zdGFydC5nZXRUaW1lKCk7XHJcblx0XHRjb25zdCBfc3RvcF90aW1lOiBhbnkgPSB0aGlzLnN0b3BfdGltZTtcclxuXHRcdGNvbnN0IF9zdG9wID0gX2lzRGF0ZShfc3RvcF90aW1lKSAmJiBfc3RvcF90aW1lLmdldFRpbWUoKSA+PSB0ID8gX3N0b3BfdGltZSA6IHRoaXMuc3RvcF90aW1lID0gX25vdztcclxuXHRcdHRoaXMuX21zID0gX3N0b3AuZ2V0VGltZSgpIC0gdDtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogV2hldGhlciB0aW1lIHRyYWNraW5nIHdhcyBzdGFydGVkXHJcblx0ICovXHJcblx0c3RhcnRlZCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBfaXNEYXRlKHRoaXMuc3RhcnRfdGltZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBXaGV0aGVyIHRpbWUgdHJhY2tpbmcgd2FzIHN0b3BwZWRcclxuXHQgKi9cclxuXHRzdG9wcGVkKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIF9pc0RhdGUodGhpcy5zdG9wX3RpbWUpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHRyYWNrZWQgZWxhcHNlZCB0aW1lIGluIG1pbGxpc2Vjb25kc1xyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIG1pbGxpc2Vjb25kc1xyXG5cdCAqL1xyXG5cdG1zKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gcGFyc2VJbnQodGhpcy5fbXMgYXMgYW55KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0cmFja2VkIGVsYXBzZWQgdGltZSBpbiBzZWNvbmRzXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGRlY2ltYWxQbGFjZXNcclxuXHQgKiBAcmV0dXJucyBzZWNvbmRzXHJcblx0ICovXHJcblx0c2VjKGRlY2ltYWxQbGFjZXM6IG51bWJlciA9IDMpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIF9yb3VuZCh0aGlzLm1zKCkvMTAwMCwgZGVjaW1hbFBsYWNlcyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdHJhY2tlZCBlbGFwc2VkIHRpbWUgaW4gbWludXRlc1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBkZWNpbWFsUGxhY2VzXHJcblx0ICogQHJldHVybnMgbWludXRlc1xyXG5cdCAqL1xyXG5cdG1pbihkZWNpbWFsUGxhY2VzOiBudW1iZXIgPSAzKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBfcm91bmQodGhpcy5tcygpLzYwMDAwLCBkZWNpbWFsUGxhY2VzKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0cmFja2luZyBkYXRhICh0aGlzIHdpbGwgc3RvcCB0cmFja2luZylcclxuXHQgKi9cclxuXHRkYXRhKCk6IHtzdGFydF90aW1lOiBEYXRlfHVuZGVmaW5lZDsgc3RvcF90aW1lOiBEYXRlfHVuZGVmaW5lZDsgZWxhcHNlZF9tczogbnVtYmVyO317XHJcblx0XHR0aGlzLnN0b3AoKTtcclxuXHRcdGNvbnN0IHN0YXJ0X3RpbWUgPSBfaXNEYXRlKHRoaXMuc3RhcnRfdGltZSkgPyB0aGlzLnN0YXJ0X3RpbWUgOiB1bmRlZmluZWQ7XHJcblx0XHRjb25zdCBzdG9wX3RpbWUgPSBfaXNEYXRlKHRoaXMuc3RvcF90aW1lKSA/IHRoaXMuc3RvcF90aW1lIDogdW5kZWZpbmVkO1xyXG5cdFx0Y29uc3QgZWxhcHNlZF9tcyA9IHRoaXMubXMoKTtcclxuXHRcdHJldHVybiB7c3RhcnRfdGltZSwgc3RvcF90aW1lLCBlbGFwc2VkX21zfTtcclxuXHR9XHJcbn0iLCJleHBvcnQgKiBmcm9tICcuL19FbGFwc2VkVGltZSc7IiwiLyoqXHJcbiAqIEVtaXR0ZWQgZXZlbnQgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudDxUID0gYW55PiB7XHJcblx0dHlwZTogc3RyaW5nO1xyXG5cdHRpbWU6IG51bWJlcjtcclxuXHRkYXRhOiBUO1xyXG59XHJcblxyXG4vKipcclxuICogRGVmYXVsdCBtYXggbGlzdGVuZXIgY291bnRcclxuICovXHJcbmxldCBERUZBVUxUX01BWF9MSVNURU5FUlM6IG51bWJlciA9IDEwO1xyXG5cclxuLyoqXHJcbiAqIFByaXZhdGUgcHJvcHMgYFN5bWJvbGAga2V5IG5hbWVcclxuICovXHJcbmNvbnN0IFBST1BTID0gU3ltYm9sKGBfX3ByaXZhdGVfcHJvcHNfJHtEYXRlLm5vdygpfV9fYCk7XHJcblxyXG4vKipcclxuICogQGNsYXNzIEV2ZW50RW1pdHRlclxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEV2ZW50RW1pdHRlclxyXG57XHJcblx0LyoqXHJcblx0ICogRXZlbnRFbWl0dGVyIGdsb2JhbCBtYXggbGlzdGVuZXJzXHJcblx0ICogLSB3YXJucyBpZiBleGNlZWRlZCAoaGVscHMgZmluZCBtZW1vcnkgbGVha3MpXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBtYXhfbGlzdGVuZXJzKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gREVGQVVMVF9NQVhfTElTVEVORVJTO1xyXG5cdH1cclxuXHRzdGF0aWMgc2V0IG1heF9saXN0ZW5lcnModmFsdWU6IGFueSl7XHJcblx0XHRERUZBVUxUX01BWF9MSVNURU5FUlMgPSAhaXNOYU4odmFsdWUgPSBwYXJzZUludCh2YWx1ZSkpICYmIE51bWJlci5pc0ludGVnZXIodmFsdWUpICYmIHZhbHVlID49IDEgPyB2YWx1ZSA6IDEwO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSW5zdGFuY2UgXCJwcml2YXRlXCIgcHJvcHNcclxuXHQgKi9cclxuXHRbUFJPUFNdOiB7XHJcblx0XHRfZXZlbnRzOiB7W3R5cGU6IHN0cmluZ106IGFueX07XHJcblx0XHRfbWF4X2xpc3RlbmVyczogbnVtYmVyfHVuZGVmaW5lZDtcclxuXHR9ID0ge30gYXMgYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBNYXggbGlzdGVuZXJzIGNvdW50IChkZWZhdWx0OiBgdW5kZWZpZW5kYCB+IGBFdmVudEVtaXR0ZXIubWF4X2xpc3RlbmVyc2ApXHJcblx0ICogLSBBY2NlcHRzIHBvc2l0aXZlIGludGVnZXIgYG51bWJlcmBcclxuXHQgKiAtIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWRcclxuXHQgKi9cclxuXHRnZXQgbWF4X2xpc3RlbmVycygpOiBudW1iZXJ8dW5kZWZpbmVkIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5fbWF4X2xpc3RlbmVycztcclxuXHR9XHJcblx0c2V0IG1heF9saXN0ZW5lcnModmFsdWU6IGFueSl7XHJcblx0XHR0aGlzW1BST1BTXS5fbWF4X2xpc3RlbmVycyA9ICFpc05hTih2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKSkgJiYgTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPj0gMCA/IHZhbHVlIDogRXZlbnRFbWl0dGVyLm1heF9saXN0ZW5lcnM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGUgbmV3IGluc3RhbmNlXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IoKXtcclxuXHRcdHRoaXNbUFJPUFNdID0ge1xyXG5cdFx0XHRfZXZlbnRzOiB7fSxcclxuXHRcdFx0X21heF9saXN0ZW5lcnM6IHVuZGVmaW5lZCxcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdmFsaWQgZXZlbnQgdHlwZVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0eXBlIC0gZXZlbnQgdHlwZS9uYW1lXHJcblx0ICogQHBhcmFtIHRocm93YWJsZSAtIGVuYWJsZSB0aHJvd2luZyBlcnJvciB3aGVuIHR5cGUgaXMgaW52YWxpZFxyXG5cdCAqIEByZXR1cm5zIGBzdHJpbmdgIGxvd2VyY2FzZSBldmVudCBuYW1lIH4gYCcnYCBvbiBlcnJvclxyXG5cdCAqL1xyXG5cdHN0YXRpYyB0eXBlKHR5cGU6IGFueSwgdGhyb3dhYmxlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG5cdFx0bGV0IF90eXBlOiBzdHJpbmcgPSAnJztcclxuXHRcdGlmICghKCdzdHJpbmcnID09PSB0eXBlb2YgdHlwZSAmJiAoX3R5cGUgPSB0eXBlLnRyaW0oKSkpKXtcclxuXHRcdFx0Y29uc3QgZXJyb3IgPSAnSW52YWxpZCBldmVudCB0eXBlLic7XHJcblx0XHRcdGNvbnNvbGUud2FybihlcnJvciwge3R5cGV9KTtcclxuXHRcdFx0aWYgKHRocm93YWJsZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihlcnJvcik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gX3R5cGU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdmFsaWQgZXZlbnQgbGlzdGVuZXIgY2FsbGJhY2sgZnVuY3Rpb24uXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGxpc3RlbmVyIC0gZXZlbnQgbGlzdGVuZXJcclxuXHQgKiBAcGFyYW0gdGhyb3dhYmxlIC0gZW5hYmxlIHRocm93aW5nIGVycm9yIHdoZW4gbGlzdGVuZXIgaXMgaW52YWxpZCBcclxuXHQgKiBAcmV0dXJucyBgKGV2ZW50OklFdmVudCk9PnZvaWRgIGV2ZW50IGhhbmRsZXIgfCBgdW5kZWZpbmVkYCBvbiBlcnJvclxyXG5cdCAqL1xyXG5cdHN0YXRpYyBsaXN0ZW5lcihsaXN0ZW5lcjogKGV2ZW50OklFdmVudCk9PnZvaWQsIHRocm93YWJsZTogYm9vbGVhbiA9IGZhbHNlKTogKChldmVudDpJRXZlbnQpPT52b2lkKXx1bmRlZmluZWQge1xyXG5cdFx0bGV0IF9saXN0ZW5lcjogKChldmVudDpJRXZlbnQpPT52b2lkKXx1bmRlZmluZWQ7XHJcblx0XHRpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVyKSBfbGlzdGVuZXIgPSBsaXN0ZW5lcjtcclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRjb25zdCBlcnJvciA9ICdJbnZhbGlkIGV2ZW50IGxpc3RlbmVyIGNhbGxiYWNrIGZ1bmN0aW9uLic7XHJcblx0XHRcdGNvbnNvbGUud2FybihlcnJvciwge2xpc3RlbmVyfSk7XHJcblx0XHRcdGlmICh0aHJvd2FibGUpIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyb3IpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIF9saXN0ZW5lcjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBldmVudCBsaXN0ZW5lcnNcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdHlwZSAtIGV2ZW50IHR5cGUvbmFtZVxyXG5cdCAqIEByZXR1cm5zIGAoKGV2ZW50OklFdmVudCk9PnZvaWQpW11gIGV2ZW50IGhhbmRsZXJzXHJcblx0ICovXHJcblx0bGlzdGVuZXJzKHR5cGU6IHN0cmluZyk6ICgoZXZlbnQ6SUV2ZW50KT0+dm9pZClbXSB7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdLCBsaXN0ZW5lcnM6ICgoZXZlbnQ6SUV2ZW50KT0+dm9pZClbXSA9IFtdO1xyXG5cdFx0aWYgKCh0eXBlID0gRXZlbnRFbWl0dGVyLnR5cGUodHlwZSkpICYmIHByb3BzLl9ldmVudHMuaGFzT3duUHJvcGVydHkodHlwZSkpe1xyXG5cdFx0XHRjb25zdCBsaXN0ZW5lcjogYW55ID0gcHJvcHMuX2V2ZW50c1t0eXBlXTtcclxuXHRcdFx0aWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBsaXN0ZW5lcikgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xyXG5cdFx0XHRlbHNlIGlmIChBcnJheS5pc0FycmF5KGxpc3RlbmVyKSAmJiBsaXN0ZW5lci5sZW5ndGgpe1xyXG5cdFx0XHRcdGZvciAoY29uc3QgdmFsIG9mIGxpc3RlbmVyKXtcclxuXHRcdFx0XHRcdGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgdmFsKSBsaXN0ZW5lcnMucHVzaCh2YWwpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGxpc3RlbmVycztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIGV2ZW50IGxpc3RlbmVyIGV4aXN0c1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0eXBlIC0gZXZlbnQgdHlwZS9uYW1lXHJcblx0ICogQHBhcmFtIGxpc3RlbmVyIC0gZXZlbnQgbGlzdGVuZXJcclxuXHQgKiBAcmV0dXJucyBgKChldmVudDpJRXZlbnQpPT52b2lkKVtdYCBldmVudCBoYW5kbGVyc1xyXG5cdCAqL1xyXG5cdGhhc0xpc3RlbmVyKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDpJRXZlbnQpPT52b2lkKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5saXN0ZW5lcnModHlwZSkuZmluZEluZGV4KHYgPT4gdiA9PT0gbGlzdGVuZXIpID4gLTE7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBFbWl0IGV2ZW50XHJcblx0ICogXHJcblx0ICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlL25hbWVcclxuXHQgKiBAcGFyYW0gZGF0YSAtIGV2ZW50IGRhdGFcclxuXHQgKiBAcmV0dXJucyBgYm9vbGVhbmAgY2F1Z2h0XHJcblx0ICovXHJcblx0ZW1pdCh0eXBlOiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IGV2ZW50ID0ge3R5cGUsIGRhdGEsIHRpbWU6IERhdGUubm93KCl9O1xyXG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnModHlwZSA9IEV2ZW50RW1pdHRlci50eXBlKHR5cGUsIHRydWUpKTtcclxuXHRcdGlmIChsaXN0ZW5lcnMubGVuZ3RoKXtcclxuXHRcdFx0Zm9yIChjb25zdCBmbiBvZiBsaXN0ZW5lcnMpIGZuLmNhbGwodGhpcywgZXZlbnQpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKHR5cGUgPT09ICdlcnJvcicpe1xyXG5cdFx0XHRpZiAoZGF0YSBpbnN0YW5jZW9mIEVycm9yKSB0aHJvdyBkYXRhO1xyXG5cdFx0XHRjb25zdCBlcnJvciA9ICdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50Lic7XHJcblx0XHRcdGNvbnNvbGUud2FybihlcnJvciwge2V2ZW50fSk7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvcik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgZXZlbnQgbGlzdGVuZXIgfiBlbWl0cyAnbmV3TGlzdGVuZXInIGV2ZW50IGlmIGFkZGVkIChhbGlhcyBgZW1pdHRlci5hZGRMaXN0ZW5lcmApXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlL25hbWVcclxuXHQgKiBAcGFyYW0gbGlzdGVuZXIgLSBldmVudCBsaXN0ZW5lciBjYWxsYmFjayBmdW5jdGlvblxyXG5cdCAqIEBwYXJhbSBvbmNlIC0gb25lIHRpbWUgY2FsbGJhY2tcclxuXHQgKiBAcmV0dXJucyBgRXZlbnRFbWl0dGVyYCAtIGB0aGlzYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdG9uKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDpJRXZlbnQpPT52b2lkLCBvbmNlOiBib29sZWFuID0gZmFsc2UpOiBFdmVudEVtaXR0ZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9uY2UpO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBBZGQgb25lIHRpbWUgZXZlbnQgbGlzdGVuZXIgfiBlbWl0cyAnbmV3TGlzdGVuZXInIGV2ZW50IGlmIGFkZGVkXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlL25hbWVcclxuXHQgKiBAcGFyYW0gbGlzdGVuZXIgLSBldmVudCBsaXN0ZW5lciBjYWxsYmFjayBmdW5jdGlvblxyXG5cdCAqIEByZXR1cm5zIGBFdmVudEVtaXR0ZXJgIC0gYHRoaXNgIGluc3RhbmNlXHJcblx0ICovXHJcblx0b25jZSh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6SUV2ZW50KT0+dm9pZCk6IEV2ZW50RW1pdHRlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgZXZlbnQgc3Vic2NyaWJlclxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0eXBlIC0gZXZlbnQgdHlwZS9uYW1lXHJcblx0ICogQHBhcmFtIGxpc3RlbmVyIC0gZXZlbnQgY2FsbGJhY2sgaGFuZGxlclxyXG5cdCAqIEByZXR1cm5zIGAoKCk9PnZvaWQpYCB1bnN1YnNjcmliZSBjYWxsYmFja1xyXG5cdCAqL1xyXG5cdHN1YnNjcmliZSh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6SUV2ZW50KT0+dm9pZCk6ICgpPT52b2lkIHtcclxuXHRcdHR5cGUgPSBFdmVudEVtaXR0ZXIudHlwZSh0eXBlLCB0cnVlKTtcclxuXHRcdGxpc3RlbmVyID0gRXZlbnRFbWl0dGVyLmxpc3RlbmVyKGxpc3RlbmVyLCB0cnVlKSBhcyAoZXZlbnQ6SUV2ZW50KT0+dm9pZDtcclxuXHRcdHRoaXMuYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpO1xyXG5cdFx0cmV0dXJuICgpOiB2b2lkID0+IHZvaWQgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgZXZlbnQgbGlzdGVuZXIgfiBlbWl0cyAnbmV3TGlzdGVuZXInIGV2ZW50IGlmIGFkZGVkXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlL25hbWVcclxuXHQgKiBAcGFyYW0gbGlzdGVuZXIgLSBldmVudCBsaXN0ZW5lciBjYWxsYmFjayBmdW5jdGlvblxyXG5cdCAqIEBwYXJhbSBvbmNlIC0gb25lIHRpbWUgY2FsbGJhY2tcclxuXHQgKiBAcmV0dXJucyBgRXZlbnRFbWl0dGVyYCAtIGB0aGlzYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdGFkZExpc3RlbmVyKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDpJRXZlbnQpPT52b2lkLCBvbmNlOiBib29sZWFuID0gZmFsc2UpOiBFdmVudEVtaXR0ZXIge1xyXG5cdFx0dHlwZSA9IEV2ZW50RW1pdHRlci50eXBlKHR5cGUsIHRydWUpO1xyXG5cdFx0bGV0IGhhbmRsZXIgPSAobGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIubGlzdGVuZXIobGlzdGVuZXIsIHRydWUpIGFzIChldmVudDpJRXZlbnQpPT52b2lkKTtcclxuXHJcblx0XHQvL29uZSB0aW1lIGxpc3RlbmVyXHJcblx0XHRpZiAob25jZSl7XHJcblx0XHRcdGxldCBmaXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0XHRoYW5kbGVyID0gKGV2ZW50OiBJRXZlbnQpOiB2b2lkID0+IHtcclxuXHRcdFx0XHRpZiAoZmlyZWQpIHJldHVybjtcclxuXHRcdFx0XHRmaXJlZCA9IHRydWU7XHJcblx0XHRcdFx0bGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCk7XHJcblx0XHRcdFx0dGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBoYW5kbGVyKTtcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0Ly9BZGQgZXZlbnQgbGlzdGVuZXIgaWYgbmV3XHJcblx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVycyh0eXBlKTtcclxuXHRcdGlmIChsaXN0ZW5lcnMuZmluZEluZGV4KHYgPT4gdiA9PT0gaGFuZGxlcikgPCAwKXtcclxuXHRcdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdFx0XHJcblx0XHRcdC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXHJcbiAgXHRcdC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cclxuXHRcdFx0aWYgKHByb3BzLl9ldmVudHMubmV3TGlzdGVuZXIpIHRoaXMuZW1pdCgnbmV3TGlzdGVuZXInLCB7dHlwZSwgaGFuZGxlcn0pO1xyXG5cclxuXHRcdFx0Ly8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBkb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXHJcblx0XHRcdHByb3BzLl9ldmVudHNbdHlwZV0gPSBsaXN0ZW5lcnMubGVuZ3RoID8gWy4uLmxpc3RlbmVycywgaGFuZGxlcl0gOiBoYW5kbGVyO1xyXG5cclxuXHRcdFx0Ly8gTWF4IGxpc3RlbmVycyBsZWFrIHdhcm5pbmdcclxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkocHJvcHMuX2V2ZW50c1t0eXBlXSkpe1xyXG5cdFx0XHRcdGNvbnN0IGxlbiA9IHByb3BzLl9ldmVudHNbdHlwZV0ubGVuZ3RoO1xyXG5cdFx0XHRcdGNvbnN0IG1heCA9ICdudW1iZXInID09PSB0eXBlb2YgcHJvcHMuX21heF9saXN0ZW5lcnMgPyBwcm9wcy5fbWF4X2xpc3RlbmVycyA6IEV2ZW50RW1pdHRlci5tYXhfbGlzdGVuZXJzO1xyXG5cdFx0XHRcdGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIG1heCAmJiBtYXggPiAwICYmIGxlbiA+IG1heCl7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGBFdmVudEVtaXR0ZXIgcG9zc2libGUgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQgLSAke2xlbn0gXCIke3R5cGV9XCIgZXZlbnQgbGlzdGVuZXJzIGFkZGVkLCBtYXggY291bnQgaXMgJHttYXh9LmApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0ZWxzZSBjb25zb2xlLndhcm4oYFRoaXMgXCIke3R5cGV9XCIgZXZlbnQgbGlzdGVuZXIgaXMgYWxyZWFkeSBhZGRlZC5gKTtcclxuXHRcdFxyXG5cdFx0Ly9yZXN1bHRcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlIGV2ZW50IGxpc3RlbmVyIH4gZW1pdHMgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiByZW1vdmVkXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlL25hbWVcclxuXHQgKiBAcGFyYW0gbGlzdGVuZXIgLSBldmVudCBsaXN0ZW5lciBjYWxsYmFjayBmdW5jdGlvblxyXG5cdCAqIEByZXR1cm5zIGBFdmVudEVtaXR0ZXJgIC0gYHRoaXNgIGluc3RhbmNlXHJcblx0ICovXHJcblx0cmVtb3ZlTGlzdGVuZXIodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OklFdmVudCk9PnZvaWQpOiBFdmVudEVtaXR0ZXIge1xyXG5cdFx0aWYgKCEodHlwZSA9IEV2ZW50RW1pdHRlci50eXBlKHR5cGUpKSkgcmV0dXJuIHRoaXM7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0aWYgKCEocHJvcHMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkpIHJldHVybiB0aGlzO1xyXG5cdFx0bGV0IHJlbW92ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KHByb3BzLl9ldmVudHNbdHlwZV0pKXtcclxuXHRcdFx0Y29uc3QgX2xpc3RlbmVycyA9IHByb3BzLl9ldmVudHNbdHlwZV0gYXMgKChldmVudDpJRXZlbnQpPT52b2lkKVtdO1xyXG5cdFx0XHRjb25zdCBpbmRleCA9IF9saXN0ZW5lcnMuZmluZEluZGV4KHYgPT4gdiA9PT0gbGlzdGVuZXIpO1xyXG5cdFx0XHRfbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XHJcblx0XHRcdHJlbW92ZWQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZiAocHJvcHMuX2V2ZW50c1t0eXBlXSA9PT0gbGlzdGVuZXIpe1xyXG5cdFx0XHRkZWxldGUgcHJvcHMuX2V2ZW50c1t0eXBlXTtcclxuXHRcdFx0cmVtb3ZlZCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAocmVtb3ZlZCl7XHJcblx0XHRcdGlmICghdGhpcy5saXN0ZW5lcnModHlwZSkubGVuZ3RoKSBkZWxldGUgcHJvcHMuX2V2ZW50c1t0eXBlXTtcclxuXHRcdFx0aWYgKHByb3BzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB7dHlwZSwgbGlzdGVuZXJ9KTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgfiBlbWl0cyAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGZvciBlYWNoIHJlbW92ZWQgbGlzdGVuZXJcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdHlwZSAtIGV2ZW50IHR5cGUvbmFtZSBcclxuXHQgKiBAcmV0dXJucyBgRXZlbnRFbWl0dGVyYCAtIGB0aGlzYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHJlbW92ZUFsbExpc3RlbmVycyh0eXBlOiBzdHJpbmcpOiBFdmVudEVtaXR0ZXIge1xyXG5cdFx0aWYgKCEodHlwZSA9IEV2ZW50RW1pdHRlci50eXBlKHR5cGUpKSkgcmV0dXJuIHRoaXM7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0aWYgKCEocHJvcHMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkpIHJldHVybiB0aGlzO1xyXG5cdFx0Y29uc3QgZW1pdF9yZW1vdmVfbGlzdGVuZXIgPSB0eXBlICE9PSAncmVtb3ZlTGlzdGVuZXInICYmIHByb3BzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXI7XHJcblx0XHRjb25zdCBsaXN0ZW5lcnMgPSBlbWl0X3JlbW92ZV9saXN0ZW5lciA/IHRoaXMubGlzdGVuZXJzKHR5cGUpIDogW107XHJcblx0XHRkZWxldGUgcHJvcHMuX2V2ZW50c1t0eXBlXTtcclxuXHRcdGlmIChlbWl0X3JlbW92ZV9saXN0ZW5lciAmJiBsaXN0ZW5lcnMubGVuZ3RoKXtcclxuXHRcdFx0Zm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMpIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB7dHlwZSwgbGlzdGVuZXJ9KTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxufSIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJy4vX0V2ZW50RW1pdHRlcic7XHJcblxyXG4vKipcclxuICogR2xvYmFsIGV2ZW50cyBlbWl0dGVyXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpOyIsImV4cG9ydCAqIGZyb20gJy4vX0V2ZW50RW1pdHRlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vX0V2ZW50cyc7IiwiLyoqXHJcbiAqIEV4Y2VwdGlvbiBlcnJvciBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUV4Y2VwdGlvbkVycm9yIHtcclxuXHRtZXNzYWdlOiBzdHJpbmc7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdGNvZGU6IHN0cmluZ3xudW1iZXI7XHJcblx0ZGF0YTogYW55O1xyXG5cdHRpbWU6IG51bWJlcjtcclxuXHR0b1N0cmluZzogKCkgPT4gc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogYFN5bWJvbGAgcHJpdmF0ZSBwcm9wcyBrZXkgbmFtZVxyXG4gKi9cclxuY29uc3QgUFJPUFMgPSBTeW1ib2woYF9fcHJpdmF0ZV9wcm9wc18ke0RhdGUubm93KCl9X19gKTtcclxuXHJcbi8qKlxyXG4gKiBgRXhjZXB0aW9uYCBleHRlbmRzIGBFcnJvcmAgfiBsaWtlIGBET01FeGNlcHRpb25gXHJcbiAqIFxyXG4gKiAtIG1lc3NhZ2U6IGBzdHJpbmdgXHJcbiAqIC0gbmFtZTogYHN0cmluZ2BcclxuICogLSBjb2RlOiBgbnVtYmVyYFxyXG4gKiAtIHRvU3RyaW5nOiBgKCk9PnN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjbGFzcyBFeGNlcHRpb24gZXh0ZW5kcyBFcnJvciBpbXBsZW1lbnRzIElFeGNlcHRpb25FcnJvclxyXG57XHJcblx0LyoqXHJcblx0ICogUHJpdmF0ZSBwcm9wc1xyXG5cdCAqL1xyXG5cdFtQUk9QU106IHtcclxuXHRcdG1lc3NhZ2U6IHN0cmluZztcclxuXHRcdG5hbWU6IHN0cmluZztcclxuXHRcdGNvZGU6IHN0cmluZ3xudW1iZXI7XHJcblx0XHRkYXRhOiBhbnk7XHJcblx0XHR0aW1lOiBudW1iZXI7XHJcblx0fSA9IHt9IGFzIGFueTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBFcnJvciBtZXNzYWdlIChkZWZhdWx0OiBgJ1Vuc3BlY2lmaWVkIGV4Y2VwdGlvbiBtZXNzYWdlLidgKVxyXG5cdCAqL1xyXG5cdGdldCBtZXNzYWdlKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10ubWVzc2FnZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEVycm9yIG5hbWUgKGRlZmF1bHQ6IGAnRXhjZXB0aW9uJ2ApXHJcblx0ICovXHJcblx0Z2V0IG5hbWUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5uYW1lO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRXJyb3IgY29kZSAtIGBzdHJpbmdgIHwgZmluaXRlL3BhcnNlZCBgaW50ZWdlcmAgKGRlZmF1bHQ6IGAwYClcclxuXHQgKi9cclxuXHRnZXQgY29kZSgpOiBzdHJpbmd8bnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5jb2RlO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBFcnJvciBkYXRhXHJcblx0ICovXHJcblx0Z2V0IGRhdGEoKTogYW55IHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5kYXRhO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBFcnJvciBkYXRhXHJcblx0ICovXHJcblx0Z2V0IHRpbWUoKTogYW55IHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS50aW1lO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTmV3IGBJRXhjZXB0aW9uRXJyb3JgIGluc3RhbmNlXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG1lc3NhZ2UgLSBlcnJvciBtZXNzYWdlIChkZWZhdWx0OiBgJ1Vuc3BlY2lmaWVkIGV4Y2VwdGlvbiBtZXNzYWdlLidgKVxyXG5cdCAqIEBwYXJhbSBuYW1lIC0gZXJyb3IgbmFtZSAoZGVmYXVsdDogYCdFeGNlcHRpb24nYClcclxuXHQgKiBAcGFyYW0gY29kZSAtIGVycm9yIGNvZGUgLSBgc3RyaW5nYCB8IGZpbml0ZS9wYXJzZWQgYGludGVnZXJgIChkZWZhdWx0OiBgMGApXHJcblx0ICogQHBhcmFtIGRhdGEgLSBlcnJvciBkYXRhXHJcblx0ICogQHBhcmFtIHRpbWUgLSBlcnJvciB0aW1lc3RhbXAgbWlsbGlzZWNvbmRzIChkZWZhdWx0OiBgRGF0ZS5ub3coKWApXHJcblx0ICogQHJldHVybnMgYElFeGNlcHRpb25FcnJvcmBcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBjb2RlPzogc3RyaW5nfG51bWJlciwgZGF0YT86IGFueSwgdGltZT86IG51bWJlcil7XHJcblx0XHRjb25zdCBfdGltZSA9IERhdGUubm93KCk7XHJcblx0XHRzdXBlcihtZXNzYWdlID0gbWVzc2FnZSAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIG1lc3NhZ2UgJiYgKG1lc3NhZ2UgPSBtZXNzYWdlLnRyaW0oKSkgPyBtZXNzYWdlIDogJ1Vuc3BlY2lmaWVkIGV4Y2VwdGlvbiBtZXNzYWdlLicpO1xyXG5cdFx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgY29kZSkgY29kZSA9IChjb2RlID0gY29kZS50cmltKCkpID8gY29kZSA6IDA7XHJcblx0XHRlbHNlIGlmICghKCdudW1iZXInID09PSB0eXBlb2YgY29kZSAmJiAhaXNOYU4oY29kZSA9IHBhcnNlSW50KGAke2NvZGV9YCkpICYmIE51bWJlci5pc0ludGVnZXIoY29kZSkgJiYgTnVtYmVyLmlzRmluaXRlKGNvZGUpKSkgY29kZSA9IDA7XHJcblx0XHR0aGlzW1BST1BTXSA9IHtcclxuXHRcdFx0bWVzc2FnZSxcclxuXHRcdFx0bmFtZTogbmFtZSAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIG5hbWUgJiYgKG5hbWUgPSBuYW1lLnRyaW0oKSkgPyBuYW1lIDogJ0V4Y2VwdGlvbicsXHJcblx0XHRcdGNvZGUsXHJcblx0XHRcdGRhdGEsXHJcblx0XHRcdHRpbWU6IHRpbWUgJiYgIWlzTmFOKHRpbWUgPSBwYXJzZUludCh0aW1lIGFzIGFueSkpICYmIE51bWJlci5pc0ludGVnZXIodGltZSkgJiYgTnVtYmVyLmlzRmluaXRlKHRpbWUpICYmIHRpbWUgPj0gMCA/IHRpbWUgOiBfdGltZSxcclxuXHRcdH07XHJcblx0fVxyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIEdldCBlcnJvciBgc3RyaW5nYFxyXG5cdCAqL1xyXG5cdHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcblx0XHRjb25zdCB7bWVzc2FnZSwgbmFtZSwgY29kZX0gPSB0aGlzO1xyXG5cdFx0bGV0IHRleHQgPSBuYW1lICsgJzonO1xyXG5cdFx0aWYgKGNvZGUgIT09IDApIHRleHQgKz0gJyBbJyArIGNvZGUgKyAnXSc7XHJcblx0XHR0ZXh0ICs9ICcgJyArIG1lc3NhZ2U7XHJcblx0XHRyZXR1cm4gdGV4dDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZSBuZXcgYEV4Y2VwdGlvbmBcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSAtIGVycm9yIG1lc3NhZ2UgKGRlZmF1bHQ6IGAnVW5zcGVjaWZpZWQgZXhjZXB0aW9uIG1lc3NhZ2UuJ2ApXHJcblx0ICogQHBhcmFtIG5hbWUgLSBlcnJvciBuYW1lIChkZWZhdWx0OiBgJ0V4Y2VwdGlvbidgKVxyXG5cdCAqIEBwYXJhbSBjb2RlIC0gZXJyb3IgY29kZSAtIGBzdHJpbmdgIHwgZmluaXRlL3BhcnNlZCBgaW50ZWdlcmAgKGRlZmF1bHQ6IGAwYClcclxuXHQgKiBAcGFyYW0gZGF0YSAtIGVycm9yIGRhdGFcclxuXHQgKiBAcGFyYW0gdGltZSAtIGVycm9yIHRpbWVzdGFtcCBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGBEYXRlLm5vdygpYClcclxuXHQgKiBAcmV0dXJucyBgSUV4Y2VwdGlvbkVycm9yYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBlcnJvcihtZXNzYWdlPzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBjb2RlPzogc3RyaW5nfG51bWJlciwgZGF0YT86IGFueSwgdGltZT86IG51bWJlcik6IElFeGNlcHRpb25FcnJvciB7XHJcblx0XHRyZXR1cm4gbmV3IEV4Y2VwdGlvbihtZXNzYWdlLCBuYW1lLCBjb2RlLCBkYXRhLCB0aW1lKTtcclxuXHR9XHJcblx0XHJcblx0LyoqXHJcblx0ICogQ3JlYXRlIG5ldyBgRXhjZXB0aW9uYCBmcm9tIHBhcnNlZCBlcnJvclxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBlcnJvciAtIHBhcnNlIGVycm9yIHZhbHVlIChpLmUuIGBzdHJpbmdgIG1lc3NhZ2Ugb3IgRXJyb3Ivb2JqZWN0L3ZhbHVlcyB7bWVzc2FnZTogYHN0cmluZ2AsIG5hbWU6IGBzdHJpbmd8dW5kZWZpbmVkYCwgY29kZTogYHN0cmluZ3xudW1iZXJ8dW5kZWZpbmVkYCwgZGF0YTogYGFueWAsIHRpbWU6IGBudW1iZXJgID8/IGBEYXRlLm5vdygpYH0pXHJcblx0ICogQHJldHVybnMgYElFeGNlcHRpb25FcnJvcmBcclxuXHQgKi9cclxuXHRzdGF0aWMgcGFyc2UoZXJyb3I/OiBhbnkpOiBJRXhjZXB0aW9uRXJyb3Ige1xyXG5cdFx0Y29uc3QgdGltZSA9IERhdGUubm93KCk7XHJcblx0XHRjb25zdCBfZXJyb3I6IHtcclxuXHRcdFx0bWVzc2FnZTogc3RyaW5nfHVuZGVmaW5lZCxcclxuXHRcdFx0bmFtZTogc3RyaW5nfHVuZGVmaW5lZCxcclxuXHRcdFx0Y29kZTogc3RyaW5nfG51bWJlcnx1bmRlZmluZWQsXHJcblx0XHRcdGRhdGE6IGFueXx1bmRlZmluZWQsXHJcblx0XHRcdHRpbWU6IG51bWJlcnx1bmRlZmluZWQsXHJcblx0XHR9ID0ge30gYXMgYW55O1xyXG5cdFx0Y29uc3QgX2dldF9zdHIgPSAodmFsOiBhbnkpOiBzdHJpbmd8dW5kZWZpbmVkID0+ICdzdHJpbmcnID09PSB0eXBlb2YgdmFsICYmICh2YWwgPSB2YWwudHJpbSgpKSA/IHZhbCA6IHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IF9nZXRfaW50ID0gKHZhbDogYW55KTogbnVtYmVyfHVuZGVmaW5lZCA9PiAhaXNOYU4odmFsID0gcGFyc2VJbnQodmFsKSkgJiYgTnVtYmVyLmlzSW50ZWdlcih2YWwpICYmIE51bWJlci5pc0Zpbml0ZSh2YWwpICYmIHZhbCA+PSAwID8gdmFsIDogdW5kZWZpbmVkO1xyXG5cdFx0Y29uc3QgX2dldF9jb2RlID0gKHZhbDogYW55KTogc3RyaW5nfG51bWJlcnx1bmRlZmluZWQgPT4ge1xyXG5cdFx0XHRsZXQgdG1wOiBzdHJpbmd8bnVtYmVyfHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHRcdFx0aWYgKCh0bXAgPSBfZ2V0X2ludCh2YWwpKSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdG1wO1xyXG5cdFx0XHRpZiAoKHRtcCA9IF9nZXRfc3RyKHZhbCkpICE9PSB1bmRlZmluZWQpIHJldHVybiB0bXA7XHJcblx0XHRcdHJldHVybiB0bXA7XHJcblx0XHR9O1xyXG5cdFx0aWYgKGVycm9yICYmICdvYmplY3QnID09PSB0eXBlb2YgZXJyb3Ipe1xyXG5cdFx0XHRsZXQgcGFyc2VkOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KGVycm9yKSl7XHJcblx0XHRcdFx0Y29uc3QgaXQgPSBlcnJvcltTeW1ib2wuaXRlcmF0b3JdO1xyXG5cdFx0XHRcdGlmIChbJ3ZhbHVlcycsICdlbnRyaWVzJ10uaW5jbHVkZXMoaXQ/Lm5hbWUpIHx8ICdmdW5jdGlvbicgPT09IHR5cGVvZiBpdCkgZXJyb3IgPSBbLi4uZXJyb3JdO1xyXG5cdFx0XHRcdGlmIChlcnJvci5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0X2Vycm9yLm1lc3NhZ2UgPSBfZ2V0X3N0cihlcnJvclswXSk7XHJcblx0XHRcdFx0XHRfZXJyb3IubmFtZSA9IF9nZXRfc3RyKGVycm9yWzFdKTtcclxuXHRcdFx0XHRcdF9lcnJvci5jb2RlID0gX2dldF9jb2RlKGVycm9yWzJdKTtcclxuXHRcdFx0XHRcdF9lcnJvci5kYXRhID0gZXJyb3JbM107XHJcblx0XHRcdFx0XHRfZXJyb3IudGltZSA9IF9nZXRfaW50KGVycm9yWzRdKTtcclxuXHRcdFx0XHRcdHBhcnNlZCA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghcGFyc2VkICYmIGVycm9yIGluc3RhbmNlb2YgRXJyb3Ipe1xyXG5cdFx0XHRcdGNvbnN0IGVycjogYW55ID0gZXJyb3I7XHJcblx0XHRcdFx0X2Vycm9yLm1lc3NhZ2UgPSBfZ2V0X3N0cihlcnIubWVzc2FnZSk7XHJcblx0XHRcdFx0X2Vycm9yLm5hbWUgPSBfZ2V0X3N0cihlcnIubmFtZSk7XHJcblx0XHRcdFx0X2Vycm9yLmNvZGUgPSBfZ2V0X2NvZGUoZXJyLmNvZGUpO1xyXG5cdFx0XHRcdF9lcnJvci5kYXRhID0gZXJyLmRhdGE7XHJcblx0XHRcdFx0X2Vycm9yLnRpbWUgPSBfZ2V0X2ludChlcnIudGltZSk7XHJcblx0XHRcdFx0cGFyc2VkID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIXBhcnNlZCl7XHJcblx0XHRcdFx0X2Vycm9yLm1lc3NhZ2UgPSBfZ2V0X3N0cihlcnJvci5tZXNzYWdlKTtcclxuXHRcdFx0XHRfZXJyb3IubmFtZSA9IF9nZXRfc3RyKGVycm9yLm5hbWUpO1xyXG5cdFx0XHRcdF9lcnJvci5jb2RlID0gX2dldF9jb2RlKGVycm9yLmNvZGUpO1xyXG5cdFx0XHRcdF9lcnJvci5kYXRhID0gZXJyb3IuZGF0YTtcclxuXHRcdFx0XHRfZXJyb3IudGltZSA9IF9nZXRfaW50KGVycm9yLnRpbWUpO1xyXG5cdFx0XHRcdHBhcnNlZCA9IHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVsc2UgX2Vycm9yLm1lc3NhZ2UgPSBfZ2V0X3N0cihlcnJvcik7XHJcblx0XHRyZXR1cm4gbmV3IEV4Y2VwdGlvbihcclxuXHRcdFx0X2Vycm9yLm1lc3NhZ2UgPz8gJ1Vua25vd24gZXhjZXB0aW9uIGVycm9yLicsXHJcblx0XHRcdF9lcnJvci5uYW1lID8/ICdFcnJvcicsXHJcblx0XHRcdF9lcnJvci5jb2RlLFxyXG5cdFx0XHRfZXJyb3IuZGF0YSxcclxuXHRcdFx0X2Vycm9yLnRpbWUgPz8gdGltZSxcclxuXHRcdCk7XHJcblx0fVxyXG59IiwiZXhwb3J0ICogZnJvbSAnLi9fRXhjZXB0aW9uJzsiLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIElFdmVudCB9IGZyb20gJy4uL0V2ZW50RW1pdHRlcic7XHJcblxyXG4vKipcclxuICogVGFzayBzdGF0dXMgdHlwZVxyXG4gKi9cclxuZXhwb3J0IHR5cGUgVFN0YXR1cyA9ICduZXcnIHwgJ3J1bm5pbmcnIHwgJ3N0b3BwZWQnIHwgJ2ZhaWxlZCcgfCAnZG9uZSc7XHJcblxyXG4vKipcclxuICogVGFzayBzdGF0dXNlcyBsaXN0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVEFTS19TVEFUVVNFUzogVFN0YXR1c1tdID0gWyduZXcnLCAncnVubmluZycsICdzdG9wcGVkJywgJ2ZhaWxlZCcsICdkb25lJ107XHJcblxyXG4vKipcclxuICogVGFzayBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRhc2sge1xyXG5cdG5hbWU6IHN0cmluZztcclxuXHRsYWJlbDogc3RyaW5nO1xyXG5cdGxpbmtlZDogYm9vbGVhbjtcclxuXHRwcmVjaXNpb246IG51bWJlcjtcclxuXHRldmVudF9kZWJvdW5jZTogbnVtYmVyO1xyXG5cdHByb2dyZXNzOiBudW1iZXI7XHJcblx0dG90YWw6IG51bWJlcjtcclxuXHR2YWx1ZTogbnVtYmVyO1xyXG5cdGVycm9yOiBzdHJpbmc7XHJcblx0c3RhdHVzOiBUU3RhdHVzO1xyXG5cdHN0YXJ0VGltZTogbnVtYmVyO1xyXG5cdHN0b3BUaW1lOiBudW1iZXI7XHJcblx0ZWxhcHNlZFRpbWU6IG51bWJlcjtcclxuXHRjb21wbGV0ZTogYm9vbGVhbjtcclxuXHRpdGVtOiBhbnk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IGV2ZW50IGRlYm91bmNlIG1pbGxpc2Vjb25kc1xyXG4gKi9cclxubGV0IERFRkFVTFRfRVZFTlRfREVCT1VOQ0U6IG51bWJlciA9IDIwMDtcclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IHByZWNpc2lvbiB+IHJvdW5kIGRlY2ltYWwgcGxhY2VzXHJcbiAqL1xyXG5sZXQgREVGQVVMVF9QUkVDSVNJT046IG51bWJlciA9IDI7XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gcGFyc2UgcG9zaXRpdmUgbnVtYmVyXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsXHJcbiAqIEBwYXJhbSBfZGVmYXVsdFxyXG4gKiBAcGFyYW0gX2JsYW5rXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgXHJcbiAqL1xyXG5jb25zdCBfcG9zX251bSA9ICh2YWw6IGFueSwgX2RlZmF1bHQ6IG51bWJlciA9IDAsIF9ibGFuazogbnVtYmVyID0gMCk6IG51bWJlciA9PiB7XHJcblx0aWYgKFt1bmRlZmluZWQsIG51bGxdLmluY2x1ZGVzKHZhbCkgfHwgJ3N0cmluZycgPT09IHR5cGVvZiB2YWwgJiYgISh2YWwgPSB2YWwudHJpbSgpKSkgcmV0dXJuIF9ibGFuaztcclxuXHRpZiAoIWlzTmFOKHZhbCA9IHBhcnNlRmxvYXQodmFsKSkgJiYgTnVtYmVyLmlzRmluaXRlKHZhbCkgJiYgdmFsID49IDApIHJldHVybiB2YWw7XHJcblx0cmV0dXJuIF9kZWZhdWx0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciAtIHBhcnNlIHBvc2l0aXZlIGludGVnZXJcclxuICogXHJcbiAqIEBwYXJhbSB2YWxcclxuICogQHBhcmFtIF9kZWZhdWx0XHJcbiAqIEBwYXJhbSBfYmxhbmtcclxuICogQHJldHVybnMgYG51bWJlcmAgaW50ZWdlclxyXG4gKi9cclxuY29uc3QgX3Bvc19pbnQgPSAodmFsOiBhbnksIF9kZWZhdWx0OiBudW1iZXIgPSAwLCBfYmxhbms6IG51bWJlciA9IDApOiBudW1iZXIgPT4gcGFyc2VJbnQoX3Bvc19udW0odmFsLCBfZGVmYXVsdCwgX2JsYW5rKSArICcnKTtcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgLSByb3VuZCBudW1iZXJcclxuICogXHJcbiAqIEBwYXJhbSB2YWwgLSByb3VuZCB2YWx1ZVxyXG4gKiBAcGFyYW0gcGxhY2VzIC0gcHJlY2lzaW9uIGRlY2ltYWwgcGxhY2VzIFtkZWZhdWx0OiBgREVGQVVMVF9QUkVDSVNJT05gXVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCByb3VuZGVkXHJcbiAqL1xyXG5jb25zdCBfcm91bmQgPSAodmFsOiBudW1iZXIsIHBsYWNlcz86IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0Y29uc3QgcCA9IDEwICoqIF9wb3NfaW50KHBsYWNlcywgREVGQVVMVF9QUkVDSVNJT04sIERFRkFVTFRfUFJFQ0lTSU9OKTtcclxuXHRyZXR1cm4gTWF0aC5yb3VuZCgodmFsICsgTnVtYmVyLkVQU0lMT04pICogcCkgLyBwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciAtIGN1c3RvbSBgSlNPTi5zdHJpbmdpZnlgIHdoaWNoIGlnbm9yZXMgc2VsZiByZWZlcmVuY2VzIH4gcmV0dXJucyBgJ251bGwnYCBmb3IgYHVuZGVmaW5lZGAgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBqc29uXHJcbiAqL1xyXG5jb25zdCBfanNvbl9zdHIgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHZhbHVlID0gbnVsbDtcclxuXHRjb25zdCBzZWVuOiBhbnlbXSA9IFtdO1xyXG5cdHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgZnVuY3Rpb24oXywgdmFsKXtcclxuXHRcdGlmICh2YWwgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB2YWwpe1xyXG5cdFx0XHRpZiAoc2Vlbi5pbmRleE9mKHZhbCkgPiAtMSkgcmV0dXJuO1xyXG5cdFx0XHRzZWVuLnB1c2godmFsKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB2YWw7XHJcblx0fSk7XHJcbn07XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gcGFyc2Ugbm9ybWFsaXplZCBzdHJpbmcgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB2YWxcclxuICogQHJldHVybnMgYHN0cmluZ2Agbm9ybWFsaXplZCBhbmQgdHJpbW1lZFxyXG4gKi9cclxuY29uc3QgX2dldF9zdHIgPSAodmFsOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGlmIChbdW5kZWZpbmVkLCBudWxsXS5pbmNsdWRlcyh2YWwpKSByZXR1cm4gJyc7XHJcblx0bGV0IHZhbHVlOiBzdHJpbmcgPSAnJztcclxuXHR0cnkge1xyXG5cdFx0aWYgKE9iamVjdCh2YWwpID09PSB2YWwgJiYgdmFsW1N5bWJvbC5pdGVyYXRvcl0pIHZhbCA9IF9qc29uX3N0cihbLi4udmFsXSk7XHJcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWwpO1xyXG5cdH1cclxuXHRjYXRjaCAoZSl7XHJcblx0XHR2YWx1ZSA9ICcnO1xyXG5cdH1cclxuXHRpZiAoT2JqZWN0KHZhbCkgPT09IHZhbCAmJiAoIXZhbHVlIHx8IC9cXFtvYmplY3QgXFx3K1xcXS8udGVzdCh2YWx1ZSkpKSB2YWx1ZSA9IF9qc29uX3N0cih2YWwpLnJlcGxhY2UoL15cInxcIiQvZywgJycpO1xyXG5cdHJldHVybiB2YWx1ZS50cmltKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gcGFyc2Ugbm9ybWFsaXplZCBlcnJvciB2YWx1ZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBlcnJvclxyXG4gKi9cclxuY29uc3QgX2dldF9lcnJvciA9ICh2YWw6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0aWYgKE9iamVjdCh2YWwpID09PSB2YWwgJiYgISh2YWwgaW5zdGFuY2VvZiBFcnJvcikpe1xyXG5cdFx0aWYgKHZhbC5lcnJvciBpbnN0YW5jZW9mIEVycm9yIHx8ICdzdHJpbmcnID09PSB0eXBlb2YgdmFsLmVycm9yICYmICEhdmFsLmVycm9yLnRyaW0oKSkgdmFsID0gdmFsLmVycm9yO1xyXG5cdFx0ZWxzZSBpZiAodmFsLnJlYXNvbiBpbnN0YW5jZW9mIEVycm9yIHx8ICdzdHJpbmcnID09PSB0eXBlb2YgdmFsLnJlYXNvbiAmJiAhIXZhbC5yZWFzb24udHJpbSgpKSB2YWwgPSB2YWwuZXJyb3I7XHJcblx0XHRlbHNlIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbC5tZXNzYWdlICYmICEhdmFsLm1lc3NhZ2UudHJpbSgpKSB2YWwgPSB2YWwubWVzc2FnZTtcclxuXHR9XHJcblx0cmV0dXJuIF9nZXRfc3RyKHZhbCk7XHJcbn07XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gZGVib3VuY2VkIGNhbGxiYWNrXHJcbiAqIFxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBjYWxsYmFjayBoYW5kbGVyXHJcbiAqIEBwYXJhbSB0aW1lb3V0IC0gdGltZW91dCBtaWxsaXNlY29uZHNcclxuICogQHJldHVybnMgYCgpPT52b2lkYCBkZWJvdW5jZWQgY2FsbGJhY2tcclxuICovXHJcbmNvbnN0IF9kZWJvdW5jZSA9IChjYWxsYmFjazogKCk9PnZvaWQsIHRpbWVvdXQ6IG51bWJlciA9IDApOiAoKSA9PiB2b2lkID0+IHtcclxuXHRsZXQgdGltZXI6IGFueSwgbWF4X3dhaXQ6IGFueTtcclxuXHRjb25zdCBfaGFuZGxlciA9ICgpID0+IHtcclxuXHRcdGNsZWFyVGltZW91dCh0aW1lcik7XHJcblx0XHRjbGVhclRpbWVvdXQobWF4X3dhaXQpO1xyXG5cdFx0bWF4X3dhaXQgPSB1bmRlZmluZWQ7XHJcblx0XHRjYWxsYmFjaygpO1xyXG5cdH07XHJcblx0cmV0dXJuICgpID0+IHtcclxuXHRcdGlmICghdGltZW91dCkgcmV0dXJuIGNhbGxiYWNrKCk7XHJcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xyXG5cdFx0dGltZXIgPSBzZXRUaW1lb3V0KF9oYW5kbGVyLCB0aW1lb3V0KTtcclxuXHRcdGlmICghbWF4X3dhaXQpIG1heF93YWl0ID0gc2V0VGltZW91dChfaGFuZGxlciwgTWF0aC5mbG9vcih0aW1lb3V0ICogMS41KSk7XHJcblx0fTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBgU3ltYm9sYCBwcml2YXRlIHByb3BzIGtleSBuYW1lXHJcbiAqL1xyXG5jb25zdCBQUk9QUyA9IFN5bWJvbChgX19wcml2YXRlX3Byb3BzXyR7RGF0ZS5ub3coKX1fX2ApO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBUYXNrXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgVGFzayBpbXBsZW1lbnRzIElUYXNrXHJcbntcclxuXHQvKipcclxuXHQgKiBUYXNrIGdsb2JhbCBldmVudCBkZWJvdW5jZSBtaWxsaXNlY29uZHNcclxuXHQgKi9cclxuXHRzdGF0aWMgZ2V0IGV2ZW50X2RlYm91bmNlKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gREVGQVVMVF9FVkVOVF9ERUJPVU5DRTtcclxuXHR9XHJcblx0c3RhdGljIHNldCBldmVudF9kZWJvdW5jZSh2YWx1ZTogYW55KXtcclxuXHRcdERFRkFVTFRfRVZFTlRfREVCT1VOQ0UgPSBfcG9zX2ludCh2YWx1ZSwgREVGQVVMVF9FVkVOVF9ERUJPVU5DRSwgMCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIGdsb2JhbCBwcmVjaXNpb24gfiByb3VuZCBkZWNpbWFsIHBsYWNlc1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXQgZGVjaW1hbF9wcmVjaXNpb24oKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBERUZBVUxUX1BSRUNJU0lPTjtcclxuXHR9XHJcblx0c3RhdGljIHNldCBkZWNpbWFsX3ByZWNpc2lvbih2YWx1ZTogYW55KXtcclxuXHRcdERFRkFVTFRfUFJFQ0lTSU9OID0gX3Bvc19pbnQodmFsdWUsIERFRkFVTFRfUFJFQ0lTSU9OLCAyKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluc3RhbmNlIFwicHJpdmF0ZVwiIHByb3BzXHJcblx0ICovXHJcblx0W1BST1BTXToge1xyXG5cdFx0bmFtZTogc3RyaW5nO1xyXG5cdFx0bGFiZWw6IHN0cmluZztcclxuXHRcdGxpbmtlZDogYm9vbGVhbjtcclxuXHRcdHByZWNpc2lvbjogbnVtYmVyO1xyXG5cdFx0ZXZlbnRfZGVib3VuY2U6IG51bWJlcjtcclxuXHRcdHByb2dyZXNzOiBudW1iZXI7XHJcblx0XHR0b3RhbDogbnVtYmVyO1xyXG5cdFx0dmFsdWU6IG51bWJlcjtcclxuXHRcdGVycm9yOiBzdHJpbmc7XHJcblx0XHRzdGF0dXM6IFRTdGF0dXM7XHJcblx0XHRzdGFydFRpbWU6IG51bWJlcjtcclxuXHRcdHN0b3BUaW1lOiBudW1iZXI7XHJcblx0XHRjb21wbGV0ZTogYm9vbGVhbjtcclxuXHRcdGl0ZW06IGFueTtcclxuXHRcdF9kb25lOiBib29sZWFuO1xyXG5cdFx0X3JvdW5kOiAodmFsOiBudW1iZXIpID0+IG51bWJlcjtcclxuXHRcdF9lbWl0dGVyOiBFdmVudEVtaXR0ZXI7XHJcblx0XHRfZGVib3VuY2VkX3VwZGF0ZTogKCk9PnZvaWQ7XHJcblx0fSA9IHt9IGFzIGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBuYW1lXHJcblx0ICovXHJcblx0Z2V0IG5hbWUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5uYW1lO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBsYWJlbFxyXG5cdCAqL1xyXG5cdGdldCBsYWJlbCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLmxhYmVsO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBsaW5rZWQgLSB2YWx1ZS90b3RhbC9wcm9ncmVzcyAocmVjYWxjdWxhdGUgb24gY2hhbmdlKVxyXG5cdCAqL1xyXG5cdGdldCBsaW5rZWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10ubGlua2VkO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBwcmVjaXNpb24gLSBgaW50ZWdlcmAgZGVjaW1hbCBwbGFjZXNcclxuXHQgKi9cclxuXHRnZXQgcHJlY2lzaW9uKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10ucHJlY2lzaW9uO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBUYXNrIGV2ZW50IGRlYm91bmNlIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogYFRhc2tzLmV2ZW50X2RlYm91bmNlYClcclxuXHQgKi9cclxuXHRnZXQgZXZlbnRfZGVib3VuY2UoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5ldmVudF9kZWJvdW5jZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgcHJvZ3Jlc3NcclxuXHQgKi9cclxuXHRnZXQgcHJvZ3Jlc3MoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5wcm9ncmVzcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgdG90YWxcclxuXHQgKi9cclxuXHRnZXQgdG90YWwoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS50b3RhbDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgdmFsdWVcclxuXHQgKi9cclxuXHRnZXQgdmFsdWUoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS52YWx1ZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgZXJyb3JcclxuXHQgKi9cclxuXHRnZXQgZXJyb3IoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5lcnJvcjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgc3RhdHVzXHJcblx0ICovXHJcblx0Z2V0IHN0YXR1cygpOiBUU3RhdHVzIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5zdGF0dXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIHN0YXJ0VGltZSAtIHRpbWVzdGFtcCBtaWxsaXNlY29uZHMgKGkuZS4gYERhdGUubm93KClgKVxyXG5cdCAqL1xyXG5cdGdldCBzdGFydFRpbWUoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5zdGFydFRpbWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIHN0b3BUaW1lIC0gdGltZXN0YW1wIG1pbGxpc2Vjb25kcyAoaS5lLiBgRGF0ZS5ub3coKWApXHJcblx0ICovXHJcblx0Z2V0IHN0b3BUaW1lKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uc3RvcFRpbWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIGVsYXBzZWRUaW1lIC0gbWlsbGlzZWNvbmQgdGltZXN0YW1wcyBkaWZmZXJlbmNlIChpLmUuIGBzdG9wVGltZSAtIHN0YXJ0VGltZWApXHJcblx0ICovXHJcblx0Z2V0IGVsYXBzZWRUaW1lKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5zdG9wVGltZSA/IHRoaXMuc3RvcFRpbWUgLSB0aGlzLnN0YXJ0VGltZSA6IDA7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIGNvbXBsZXRlXHJcblx0ICovXHJcblx0Z2V0IGNvbXBsZXRlKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLmNvbXBsZXRlO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBUYXNrIGl0ZW1cclxuXHQgKi9cclxuXHRnZXQgaXRlbSgpOiBhbnkge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLml0ZW07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGUgbmV3IGluc3RhbmNlXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG5hbWUgLSB0YXNrIG5hbWVcclxuXHQgKiBAcGFyYW0gbGlua2VkIC0gdGFzayB2YWx1ZS90b3RhbC9wcm9ncmVzcyBsaW5rZWQgfiByZWNhbGN1bGF0ZSBvbiBjaGFuZ2VcclxuXHQgKiBAcGFyYW0gcHJlY2lzaW9uIC0gZGVjaW1hbCBwbGFjZXMgKGRlZmF1bHQ6IGBUYXNrLmRlY2ltYWxfcHJlY2lzaW9uYClcclxuXHQgKiBAcGFyYW0gZXZlbnRfZGVib3VuY2UgLSBldmVudCBkZWJvdW5jZSBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGBUYXNrLmV2ZW50X2RlYm91bmNlYClcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGxpbmtlZDogYm9vbGVhbiA9IGZhbHNlLCBwcmVjaXNpb246IG51bWJlciA9IFRhc2suZGVjaW1hbF9wcmVjaXNpb24sIGV2ZW50X2RlYm91bmNlOiBudW1iZXIgPSBUYXNrLmV2ZW50X2RlYm91bmNlKXtcclxuXHRcdGlmICghKG5hbWUgPSBfZ2V0X3N0cihuYW1lKSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbmV3IHRhc2sgbmFtZS4nKTtcclxuXHRcdHByZWNpc2lvbiA9IF9wb3NfaW50KHByZWNpc2lvbiwgVGFzay5kZWNpbWFsX3ByZWNpc2lvbiwgVGFzay5kZWNpbWFsX3ByZWNpc2lvbik7XHJcblx0XHRldmVudF9kZWJvdW5jZSA9IF9wb3NfaW50KGV2ZW50X2RlYm91bmNlLCBUYXNrLmV2ZW50X2RlYm91bmNlLCBUYXNrLmV2ZW50X2RlYm91bmNlKTtcclxuXHRcdHRoaXNbUFJPUFNdID0ge1xyXG5cdFx0XHRuYW1lLFxyXG5cdFx0XHRsYWJlbDogJycsXHJcblx0XHRcdGxpbmtlZCxcclxuXHRcdFx0cHJlY2lzaW9uLFxyXG5cdFx0XHRldmVudF9kZWJvdW5jZSxcclxuXHRcdFx0cHJvZ3Jlc3M6IDAsXHJcblx0XHRcdHRvdGFsOiAwLFxyXG5cdFx0XHR2YWx1ZTogMCxcclxuXHRcdFx0ZXJyb3I6ICcnLFxyXG5cdFx0XHRzdGF0dXM6ICduZXcnLFxyXG5cdFx0XHRzdGFydFRpbWU6IDAsXHJcblx0XHRcdHN0b3BUaW1lOiAwLFxyXG5cdFx0XHRjb21wbGV0ZTogZmFsc2UsXHJcblx0XHRcdGl0ZW06IHVuZGVmaW5lZCxcclxuXHRcdFx0X2RvbmU6IGZhbHNlLFxyXG5cdFx0XHRfcm91bmQ6ICh2YWw6IG51bWJlcik6IG51bWJlciA9PiBfcm91bmQodmFsLCB0aGlzW1BST1BTXS5wcmVjaXNpb24pLFxyXG5cdFx0XHRfZW1pdHRlcjogbmV3IEV2ZW50RW1pdHRlcigpLFxyXG5cdFx0XHRfZGVib3VuY2VkX3VwZGF0ZTogX2RlYm91bmNlKCgpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0XHRcdGlmIChwcm9wcy5fZG9uZSkgcmV0dXJuO1xyXG5cdFx0XHRcdHByb3BzLl9lbWl0dGVyLmVtaXQoJ3VwZGF0ZScsIHRoaXMuZGF0YSgpKTtcclxuXHRcdFx0fSwgZXZlbnRfZGVib3VuY2UpLFxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0YXNrIGRhdGFcclxuXHQgKiBcclxuXHQgKiBAcmV0dXJucyBgSVRhc2tgIG9wdGlvbnMgfiBpLmUuIGB7bmFtZSwgbGFiZWwsIGxpbmtlZCwgcHJlY2lzaW9uLCBldmVudF9kZWJvdW5jZSwgcHJvZ3Jlc3MsIHRvdGFsLCB2YWx1ZSwgZXJyb3IsIHN0YXR1cywgc3RhcnRUaW1lLCBzdG9wVGltZSwgY29tcGxldGUsIGl0ZW19YFxyXG5cdCAqL1xyXG5cdGdldCBkYXRhKCk6ICgpPT5JVGFzayB7XHJcblx0XHRyZXR1cm4gKCk6IElUYXNrID0+IHtcclxuXHRcdFx0Y29uc3QgeyBuYW1lLCBsYWJlbCwgbGlua2VkLCBwcmVjaXNpb24sIGV2ZW50X2RlYm91bmNlLCBwcm9ncmVzcywgdG90YWwsIHZhbHVlLCBlcnJvciwgc3RhdHVzLCBzdGFydFRpbWUsIHN0b3BUaW1lLCBlbGFwc2VkVGltZSwgY29tcGxldGUsIGl0ZW0gfSA9IHRoaXM7XHJcblx0XHRcdHJldHVybiB7bmFtZSwgbGFiZWwsIGxpbmtlZCwgcHJlY2lzaW9uLCBldmVudF9kZWJvdW5jZSwgcHJvZ3Jlc3MsIHRvdGFsLCB2YWx1ZSwgZXJyb3IsIHN0YXR1cywgc3RhcnRUaW1lLCBzdG9wVGltZSwgZWxhcHNlZFRpbWUsIGNvbXBsZXRlLCBpdGVtfTtcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBVcGRhdGUgZXZlbnQgdHJpZ2dlclxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdGdldCB1cGRhdGUoKTogKCk9PlRhc2sge1xyXG5cdFx0cmV0dXJuICgpOiBUYXNrID0+IHtcclxuXHRcdFx0dGhpc1tQUk9QU10uX2RlYm91bmNlZF91cGRhdGUoKTtcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkIHVwZGF0ZSBldmVudCBzdWJzY3JpYmVyIH4gYGV2ZW50ID0ge3R5cGU6ICd1cGRhdGUnLCBkYXRhOiBJVGFza31gXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGxpc3RlbmVyIC0gZXZlbnQgY2FsbGJhY2sgbGlzdGVuZXJcclxuXHQgKiBAcmV0dXJucyBgKCgpPT52b2lkKWAgdW5zdWJzY3JpYmUgY2FsbGJhY2tcclxuXHQgKi9cclxuXHRzdWJzY3JpYmUobGlzdGVuZXI6IChldmVudDpJRXZlbnQpPT52b2lkKTogKCk9PnZvaWQge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLl9lbWl0dGVyLnN1YnNjcmliZSgndXBkYXRlJywgbGlzdGVuZXIpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBzdGFydFxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHN0YXJ0KHJlc3RhcnQ6IGJvb2xlYW4gPSBmYWxzZSk6IFRhc2sge1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdGxldCBjaGFuZ2VzID0gMDtcclxuXHJcblx0XHQvL3Jlc3RhcnQgY2hlY2tcclxuXHRcdGlmIChwcm9wcy5jb21wbGV0ZSAmJiAhcmVzdGFydCl7XHJcblx0XHRcdGNvbnNvbGUud2FybignVGFzayBcXGBzdGFydFxcYCB3aGlsZSBjb21wbGV0ZSBpZ25vcmVkISBUcnkgdXNpbmcgYHRhc2suc3RhcnQocmVzdGFydD10cnVlKWAgdG8gb3ZlcnJpZGUuJyk7XHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHQvLy0tIGNvbXBsZXRlID0gZmFsc2VcclxuXHRcdGlmIChwcm9wcy5jb21wbGV0ZSl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLmNvbXBsZXRlID0gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vLS0gc3RhdHVzID0gcnVubmluZ1xyXG5cdFx0aWYgKHByb3BzLnN0YXR1cyAhPT0gJ3J1bm5pbmcnKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMuc3RhdHVzID0gJ3J1bm5pbmcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vLS0gc3RhcnRUaW1lXHJcblx0XHRpZiAoIXByb3BzLnN0YXJ0VGltZSB8fCByZXN0YXJ0KXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMuc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLy0tIHN0b3BUaW1lXHJcblx0XHRpZiAocHJvcHMuc3RvcFRpbWUpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy5zdG9wVGltZSA9IDA7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vLS0gZXJyb3JcclxuXHRcdGlmIChwcm9wcy5lcnJvcil7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLmVycm9yID0gJyc7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9jaGFuZ2VzIC0gdXBkYXRlXHJcblx0XHRpZiAoY2hhbmdlcykgdGhpcy51cGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBzdG9wXHJcblx0ICogXHJcblx0ICogQHJldHVybnMgYFRhc2tgIGluc3RhbmNlXHJcblx0ICovXHJcblx0c3RvcCgpOiBUYXNrIHtcclxuXHRcdGNvbnN0IHByb3BzID0gdGhpc1tQUk9QU107XHJcblx0XHRsZXQgY2hhbmdlcyA9IDA7XHJcblxyXG5cdFx0Ly8tLSBzdGF0dXMgPSBzdG9wcGVkXHJcblx0XHRpZiAocHJvcHMuc3RhdHVzID09PSAncnVubmluZycpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy5zdGF0dXMgPSAnc3RvcHBlZCc7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8tLSBzdG9wVGltZSwgc3RhcnRUaW1lXHJcblx0XHRpZiAoIXByb3BzLnN0b3BUaW1lKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMuc3RvcFRpbWUgPSBEYXRlLm5vdygpO1xyXG5cdFx0XHRpZiAoIXByb3BzLnN0YXJ0VGltZSkgcHJvcHMuc3RhcnRUaW1lID0gcHJvcHMuc3RvcFRpbWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9jaGFuZ2VzIC0gdXBkYXRlXHJcblx0XHRpZiAoY2hhbmdlcykgdGhpcy51cGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBmYWlsZWRcclxuXHQgKiBcclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRmYWlsdXJlKGVycm9yPzogYW55KTogVGFzayB7XHJcblx0XHRlcnJvciA9IChlcnJvciA9IF9nZXRfZXJyb3IoZXJyb3IpKSA/IGVycm9yIDogJ1Vua25vd24gdGFzayBlcnJvci4nO1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdGxldCBjaGFuZ2VzID0gMDtcclxuXHRcdFxyXG5cdFx0Ly8tLSBlcnJvclxyXG5cdFx0aWYgKHByb3BzLmVycm9yICE9PSBlcnJvcil7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLmVycm9yID0gZXJyb3I7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8tLSBzdGF0dXNcclxuXHRcdGlmIChwcm9wcy5zdGF0dXMgIT09ICdmYWlsZWQnKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMuc3RhdHVzID0gJ2ZhaWxlZCc7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8tLSBzdG9wVGltZSwgc3RhcnRUaW1lXHJcblx0XHRpZiAoIXByb3BzLnN0b3BUaW1lKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMuc3RvcFRpbWUgPSBEYXRlLm5vdygpO1xyXG5cdFx0XHRpZiAoIXByb3BzLnN0YXJ0VGltZSkgcHJvcHMuc3RhcnRUaW1lID0gcHJvcHMuc3RvcFRpbWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9jaGFuZ2VzIC0gdXBkYXRlXHJcblx0XHRpZiAoY2hhbmdlcykgdGhpcy51cGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBkb25lXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGNvbXBsZXRlUHJvZ3Jlc3MgLSBzZXQgZnVsbCBwcm9ncmVzcyB+IGVuYWJsZWQgd2hlbiBgbGlua2VkYCAoaS5lLiBgcHJvZ3Jlc3M9MTAwYCBhbmQgYHZhbHVlPXRvdGFsYClcclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRkb25lKGNvbXBsZXRlUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSk6IFRhc2sge1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdGxldCBjaGFuZ2VzID0gMDtcclxuXHJcblx0XHQvLy0tIGNvbXBsZXRlID0gdHJ1ZVxyXG5cdFx0aWYgKCFwcm9wcy5jb21wbGV0ZSl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLmNvbXBsZXRlID0gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvL25vdCBzdG9wcGVkXHJcblx0XHRpZiAocHJvcHMuc3RhdHVzICE9PSAnc3RvcHBlZCcpe1xyXG5cdFx0XHRcclxuXHRcdFx0Ly8tLSBzdGF0dXMgPSBkb25lfGZhaWxlZFxyXG5cdFx0XHRjb25zdCBzdGF0dXMgPSBwcm9wcy5lcnJvciA/ICdmYWlsZWQnIDogJ2RvbmUnO1xyXG5cdFx0XHRpZiAocHJvcHMuc3RhdHVzICE9PSBzdGF0dXMpe1xyXG5cdFx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdFx0cHJvcHMuc3RhdHVzID0gc3RhdHVzO1xyXG5cdFx0XHR9XHJcblx0XHJcblx0XHRcdC8vLS0gY29tcGxldGVQcm9ncmVzc1xyXG5cdFx0XHRpZiAocHJvcHMubGlua2VkIHx8IGNvbXBsZXRlUHJvZ3Jlc3Mpe1xyXG5cdFx0XHRcdGxldCBwcm9ncmVzcyA9IDEwMDtcclxuXHRcdFx0XHRpZiAocHJvZ3Jlc3MgIT09IHByb3BzLnByb2dyZXNzKXtcclxuXHRcdFx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdFx0XHRwcm9wcy5wcm9ncmVzcyA9IHByb2dyZXNzO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAocHJvcHMudG90YWwgJiYgcHJvcHMudmFsdWUgIT09IHByb3BzLnRvdGFsKXtcclxuXHRcdFx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdFx0XHRwcm9wcy52YWx1ZSA9IHByb3BzLnRvdGFsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vLS0gc3RhcnRUaW1lLCBzdG9wVGltZSA9IG5vd1xyXG5cdFx0aWYgKCFwcm9wcy5zdG9wVGltZSl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnN0b3BUaW1lID0gRGF0ZS5ub3coKTtcclxuXHRcdFx0aWYgKCFwcm9wcy5zdGFydFRpbWUpIHByb3BzLnN0YXJ0VGltZSA9IHByb3BzLnN0b3BUaW1lO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vZG9uZSAtIGVtaXQgY2hhbmdlc1xyXG5cdFx0cHJvcHMuX2RvbmUgPSB0cnVlO1xyXG5cdFx0aWYgKGNoYW5nZXMpIHByb3BzLl9lbWl0dGVyLmVtaXQoJ3VwZGF0ZScsIHRoaXMuZGF0YSgpKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IHByb2dyZXNzXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHByb2dyZXNzIC0gdGFzayBwZXJjZW50YWdlIHByb2dyZXNzIChgMC0xMDBgKVxyXG5cdCAqIEBwYXJhbSBfdmFsdWUgLSB1bmxpbmtlZCB0YXNrIGB2YWx1ZWAgdXBkYXRlIH4gaWdub3JlcyBgdW5kZWZpbmVkYFxyXG5cdCAqIEBwYXJhbSBfdG90YWwgLSB1bmxpbmtlZCB0YXNrIGB0b3RhbGAgdXBkYXRlIH4gaWdub3JlcyBgdW5kZWZpbmVkYFxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHNldFByb2dyZXNzKHByb2dyZXNzOiBudW1iZXIsIF92YWx1ZT86IG51bWJlciwgX3RvdGFsPzogbnVtYmVyKTogVGFzayB7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cclxuXHRcdC8vZG9uZSAtIGlnbm9yZSB1cGRhdGVzXHJcblx0XHRpZiAocHJvcHMuX2RvbmUpe1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ1Rhc2sgXFxgc2V0UHJvZ3Jlc3NcXGAgd2hpbGUgZG9uZSBpZ25vcmVkLicpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHQvL3BhcnNlIHByb2dyZXNzL2FkanVzdFxyXG5cdFx0bGV0IHRtcDogbnVtYmVyID0gX3Bvc19udW0ocHJvZ3Jlc3MsIC0xLCAtMSk7XHJcblx0XHRpZiAodG1wIDwgMCkgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBzZXQgdGFzayBcXGBwcm9ncmVzc1xcYCB2YWx1ZSAoJHtwcm9ncmVzc30pLmApO1xyXG5cdFx0aWYgKChwcm9ncmVzcyA9IHByb3BzLl9yb3VuZCh0bXApKSA+IDEwMCkgcHJvZ3Jlc3MgPSAxMDA7XHJcblxyXG5cdFx0Ly90b3RhbC92YWx1ZSAtIHVubGlua2VkIHVwZGF0ZS9saW5rZWQgcmVjYWxjdWxhdGVcclxuXHRcdGxldCB2YWx1ZSA9IHByb3BzLnZhbHVlO1xyXG5cdFx0bGV0IHRvdGFsID0gcHJvcHMudG90YWw7XHJcblx0XHRpZiAoIXByb3BzLmxpbmtlZCl7XHJcblx0XHRcdGlmICgoX3RvdGFsID0gX3Bvc19udW0oX3RvdGFsLCAtMSwgLTEpKSA+PSAwKSB0b3RhbCA9IHByb3BzLl9yb3VuZChfdG90YWwpO1xyXG5cdFx0XHRpZiAoKF92YWx1ZSA9IF9wb3NfbnVtKF92YWx1ZSwgLTEsIC0xKSkgPj0gMCkgdmFsdWUgPSBwcm9wcy5fcm91bmQoX3ZhbHVlKTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKHRvdGFsKXtcclxuXHRcdFx0aWYgKHByb2dyZXNzID09PSAxMDApIHZhbHVlID0gdG90YWw7XHJcblx0XHRcdGVsc2UgdmFsdWUgPSBwcm9wcy5fcm91bmQocHJvZ3Jlc3MvMTAwICogdG90YWwpO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHQvL2NoYW5nZXMgLSB1cGRhdGVcclxuXHRcdGxldCBjaGFuZ2VzID0gMDtcclxuXHRcdGlmIChwcm9ncmVzcyAhPT0gcHJvcHMucHJvZ3Jlc3Mpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy5wcm9ncmVzcyA9IHByb2dyZXNzO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHZhbHVlICE9PSBwcm9wcy52YWx1ZSl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnZhbHVlID0gdmFsdWU7XHJcblx0XHR9XHJcblx0XHRpZiAodG90YWwgIT09IHByb3BzLnRvdGFsKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMudG90YWwgPSB0b3RhbDtcclxuXHRcdH1cclxuXHRcdGlmIChjaGFuZ2VzKSB0aGlzLnVwZGF0ZSgpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIFNldCB0b3RhbFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0b3RhbFxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHNldFRvdGFsKHRvdGFsOiBudW1iZXIpOiBUYXNrIHtcclxuXHRcdGNvbnN0IHByb3BzID0gdGhpc1tQUk9QU107XHJcblxyXG5cdFx0Ly9kb25lIC0gaWdub3JlIHVwZGF0ZXNcclxuXHRcdGlmIChwcm9wcy5fZG9uZSl7XHJcblx0XHRcdGNvbnNvbGUud2FybignVGFzayBcXGBzZXRUb3RhbFxcYCB3aGlsZSBkb25lIGlnbm9yZWQuJyk7XHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vcGFyc2UgdG90YWwvYWRqdXN0XHJcblx0XHRsZXQgdG1wOiBudW1iZXIgPSBfcG9zX251bSh0b3RhbCwgLTEsIC0xKTtcclxuXHRcdGlmICh0bXAgPCAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHNldCB0YXNrIFxcYHRvdGFsXFxgIHZhbHVlICgke3RvdGFsfSkuYCk7XHJcblx0XHR0b3RhbCA9IHByb3BzLl9yb3VuZCh0bXApO1xyXG5cclxuXHRcdC8vbGlua2VkIC0gcmVjYWxjdWxhdGUgdmFsdWUvcHJvZ3Jlc3NcclxuXHRcdGxldCBwcm9ncmVzcyA9IHByb3BzLnByb2dyZXNzO1xyXG5cdFx0bGV0IHZhbHVlID0gcHJvcHMudmFsdWU7XHJcblx0XHRpZiAocHJvcHMubGlua2VkKXtcclxuXHRcdFx0aWYgKCF0b3RhbCl7XHJcblx0XHRcdFx0dmFsdWUgPSAwO1xyXG5cdFx0XHRcdHByb2dyZXNzID0gMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmICh2YWx1ZSl7XHJcblx0XHRcdFx0aWYgKHZhbHVlID49IHRvdGFsKXtcclxuXHRcdFx0XHRcdHZhbHVlID0gdG90YWw7XHJcblx0XHRcdFx0XHRwcm9ncmVzcyA9IDEwMDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBwcm9ncmVzcyA9IHByb3BzLl9yb3VuZCh2YWx1ZS90b3RhbCAqIDEwMCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAocHJvZ3Jlc3MpIHZhbHVlID0gcHJvcHMuX3JvdW5kKHByb2dyZXNzLzEwMCAqIHRvdGFsKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL2NoYW5nZXMgLSB1cGRhdGVcclxuXHRcdGxldCBjaGFuZ2VzID0gMDtcclxuXHRcdGlmIChwcm9ncmVzcyAhPT0gcHJvcHMucHJvZ3Jlc3Mpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy5wcm9ncmVzcyA9IHByb2dyZXNzO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHZhbHVlICE9PSBwcm9wcy52YWx1ZSl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnZhbHVlID0gdmFsdWU7XHJcblx0XHR9XHJcblx0XHRpZiAodG90YWwgIT09IHByb3BzLnRvdGFsKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMudG90YWwgPSB0b3RhbDtcclxuXHRcdH1cclxuXHRcdGlmIChjaGFuZ2VzKSB0aGlzLnVwZGF0ZSgpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXQgdmFsdWVcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdmFsdWVcclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRzZXRWYWx1ZSh2YWx1ZTogbnVtYmVyKTogVGFzayB7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0XHJcblx0XHQvL2RvbmUgLSBpZ25vcmUgdXBkYXRlc1xyXG5cdFx0aWYgKHByb3BzLl9kb25lKXtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdUYXNrIFxcYHNldFZhbHVlXFxgIHdoaWxlIGRvbmUgaWdub3JlZC4nKTtcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9wYXJzZSB2YWx1ZS9hZGp1c3RcclxuXHRcdGxldCB0bXA6IG51bWJlciA9IF9wb3NfbnVtKHZhbHVlLCAtMSwgLTEpO1xyXG5cdFx0aWYgKHRtcCA8IDApIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgc2V0IHRhc2sgXFxgdmFsdWVcXGAgdmFsdWUgKCR7dmFsdWV9KS5gKTtcclxuXHRcdHZhbHVlID0gcHJvcHMuX3JvdW5kKHRtcCk7XHJcblxyXG5cdFx0Ly9saW5rZWQgLSByZWNhbGN1bGF0ZSBwcm9ncmVzc1xyXG5cdFx0bGV0IHRvdGFsID0gcHJvcHMudG90YWw7XHJcblx0XHRsZXQgcHJvZ3Jlc3MgPSBwcm9wcy5wcm9ncmVzcztcclxuXHRcdGlmIChwcm9wcy5saW5rZWQpe1xyXG5cdFx0XHRpZiAoIXZhbHVlKSBwcm9ncmVzcyA9IDA7XHJcblx0XHRcdGVsc2UgaWYgKHRvdGFsKXtcclxuXHRcdFx0XHRpZiAodmFsdWUgPiB0b3RhbCl7XHJcblx0XHRcdFx0XHR0b3RhbCA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0cHJvZ3Jlc3MgPSAxMDA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2UgcHJvZ3Jlc3MgPSBwcm9wcy5fcm91bmQodmFsdWUvdG90YWwgKiAxMDApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKHByb2dyZXNzKSB0b3RhbCA9IHByb3BzLl9yb3VuZCgxMDAvcHJvZ3Jlc3MgKiB2YWx1ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9jaGFuZ2VzIC0gdXBkYXRlXHJcblx0XHRsZXQgY2hhbmdlcyA9IDA7XHJcblx0XHRpZiAocHJvZ3Jlc3MgIT09IHByb3BzLnByb2dyZXNzKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMucHJvZ3Jlc3MgPSBwcm9ncmVzcztcclxuXHRcdH1cclxuXHRcdGlmICh2YWx1ZSAhPT0gcHJvcHMudmFsdWUpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy52YWx1ZSA9IHZhbHVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRvdGFsICE9PSBwcm9wcy50b3RhbCl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnRvdGFsID0gdG90YWw7XHJcblx0XHR9XHJcblx0XHRpZiAoY2hhbmdlcykgdGhpcy51cGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IGl0ZW1cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gaXRlbVxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHNldEl0ZW0oaXRlbTogYW55KTogVGFzayB7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0XHJcblx0XHQvL2RvbmUgLSBpZ25vcmUgdXBkYXRlc1xyXG5cdFx0aWYgKHByb3BzLl9kb25lKXtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdUYXNrIFxcYHNldEl0ZW1cXGAgd2hpbGUgZG9uZSBpZ25vcmVkLicpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0Ly9zZXQgaXRlbVxyXG5cdFx0cHJvcHMuaXRlbSA9IGl0ZW07XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZSBpbnN0YW5jZSBmcm9tIGV4aXN0aW5nIHRhc2sgb3B0aW9uc1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBvcHRpb25zIC0gYElUYXNrYCBvcHRpb25zIH4gaS5lLiBge25hbWUsIGxhYmVsLCBsaW5rZWQsIHByZWNpc2lvbiwgZXZlbnRfZGVib3VuY2UsIHByb2dyZXNzLCB0b3RhbCwgdmFsdWUsIGVycm9yLCBzdGF0dXMsIHN0YXJ0VGltZSwgc3RvcFRpbWUsIGNvbXBsZXRlLCBpdGVtfWBcclxuXHQgKiBAcGFyYW0gcHJlY2lzaW9uIC0gZGVjaW1hbCBwbGFjZXMgKGRlZmF1bHQ6IGBUYXNrLmRlY2ltYWxfcHJlY2lzaW9uYClcclxuXHQgKiBAcGFyYW0gZXZlbnRfZGVib3VuY2UgLSBldmVudCBkZWJvdW5jZSBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGBUYXNrLmV2ZW50X2RlYm91bmNlYClcclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKiBAdGhyb3dzIHZhbGlkYXRpb24gYEVycm9yYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBjcmVhdGUob3B0aW9uczogSVRhc2ssIHByZWNpc2lvbj86IG51bWJlciwgZXZlbnRfZGVib3VuY2U/OiBudW1iZXIpOiBUYXNrIHtcclxuXHRcdGxldCB7XHJcblx0XHRcdG5hbWUsXHJcblx0XHRcdGxhYmVsLFxyXG5cdFx0XHRsaW5rZWQsXHJcblx0XHRcdHByZWNpc2lvbjogX3ByZWNpc2lvbixcclxuXHRcdFx0ZXZlbnRfZGVib3VuY2U6IF9ldmVudF9kZWJvdW5jZSxcclxuXHRcdFx0cHJvZ3Jlc3MsXHJcblx0XHRcdHRvdGFsLFxyXG5cdFx0XHR2YWx1ZSxcclxuXHRcdFx0ZXJyb3IsXHJcblx0XHRcdHN0YXR1cyxcclxuXHRcdFx0c3RhcnRUaW1lLFxyXG5cdFx0XHRzdG9wVGltZSxcclxuXHRcdFx0Y29tcGxldGUsXHJcblx0XHRcdGl0ZW0sXHJcblx0XHR9ID0gT2JqZWN0KG9wdGlvbnMpO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0XHJcblx0XHRcdC8vcGFyc2Ugb3B0aW9uc1xyXG5cdFx0XHRsZXQgdG1wOiBhbnk7XHJcblx0XHRcdGlmICghKHRtcCA9IF9nZXRfc3RyKG5hbWUpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB0YXNrIGBuYW1lYCB2YWx1ZS4nKTtcclxuXHRcdFx0bmFtZSA9IHRtcDtcclxuXHRcdFx0bGFiZWwgPSBfZ2V0X3N0cihsYWJlbCk7XHJcblx0XHRcdGxpbmtlZCA9ICEhbGlua2VkO1xyXG5cdFx0XHRcclxuXHRcdFx0Ly8tLSBwcmVjaXNpb25cclxuXHRcdFx0dG1wID0gX3Bvc19pbnQoX3ByZWNpc2lvbiwgLTEsIFRhc2suZGVjaW1hbF9wcmVjaXNpb24pO1xyXG5cdFx0XHRpZiAoKHRtcCA9IF9wb3NfaW50KHByZWNpc2lvbiwgLTEsIHRtcCkpIDwgMCkgcHJlY2lzaW9uID0gVGFzay5kZWNpbWFsX3ByZWNpc2lvbjtcclxuXHRcdFx0ZWxzZSBwcmVjaXNpb24gPSB0bXA7XHJcblxyXG5cdFx0XHQvLy0tIGV2ZW50X2RlYm91bmNlXHJcblx0XHRcdHRtcCA9IF9wb3NfaW50KF9ldmVudF9kZWJvdW5jZSwgLTEsIFRhc2suZXZlbnRfZGVib3VuY2UpO1xyXG5cdFx0XHRpZiAoKHRtcCA9IF9wb3NfaW50KGV2ZW50X2RlYm91bmNlLCAtMSwgdG1wKSkgPCAwKSBldmVudF9kZWJvdW5jZSA9IFRhc2suZXZlbnRfZGVib3VuY2U7XHJcblx0XHRcdGVsc2UgZXZlbnRfZGVib3VuY2UgPSB0bXA7XHJcblxyXG5cdFx0XHQvLy0tIHByZWNpc2lvbiByb3VuZFxyXG5cdFx0XHRjb25zdCBfcm91bmRfcCA9ICh2YWw6IG51bWJlcik6IG51bWJlciA9PiBfcm91bmQodmFsLCBwcmVjaXNpb24pO1xyXG5cclxuXHRcdFx0Ly8tLSBwYXJzZS9hZGp1c3Q6IHByb2dyZXNzLCB0b3RhbCwgdmFsdWVcclxuXHRcdFx0aWYgKCh0bXAgPSBfcG9zX251bShwcm9ncmVzcywgLTEpKSA8IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdGFzayBgcHJvZ3Jlc3NgIHZhbHVlLicpO1xyXG5cdFx0XHRpZiAoKHByb2dyZXNzID0gX3JvdW5kX3AodG1wKSkgPiAxMDApIHByb2dyZXNzID0gMTAwO1xyXG5cdFx0XHRpZiAoKHRtcCA9IF9wb3NfbnVtKHRvdGFsLCAtMSkpIDwgMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB0YXNrIGB0b3RhbGAgdmFsdWUuJyk7XHJcblx0XHRcdHRvdGFsID0gX3JvdW5kX3AodG1wKTtcclxuXHRcdFx0aWYgKCh0bXAgPSBfcG9zX251bSh2YWx1ZSwgLTEpKSA8IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdGFzayBgdmFsdWVgIHZhbHVlLicpO1xyXG5cdFx0XHR2YWx1ZSA9IF9yb3VuZF9wKHRtcCk7XHJcblx0XHRcdGlmIChsaW5rZWQpe1xyXG5cdFx0XHRcdGlmICghdmFsdWUpIHByb2dyZXNzID0gMDtcclxuXHRcdFx0XHRlbHNlIGlmICh0b3RhbCl7XHJcblx0XHRcdFx0XHRpZiAodmFsdWUgPiB0b3RhbCl7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybihgVGFzayBsaW5rZWQgXFxgdmFsdWVcXGAgKCR7dmFsdWV9KSBpcyBncmVhdGVyIHRoYW4gXFxgdG90YWxcXGAgKCR7dG90YWx9KS4gVXNpbmcgdmFsdWUgYXMgbmV3IHRvdGFsJHtwcm9ncmVzcyAhPT0gMTAwID8gJyAtIHVwZGF0aW5nIHByb2dyZXNzJyA6ICcnfS5gKTtcclxuXHRcdFx0XHRcdFx0dG90YWwgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0cHJvZ3Jlc3MgPSAxMDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcHJvZyA9IF9yb3VuZF9wKHZhbHVlL3RvdGFsICogMTAwKTtcclxuXHRcdFx0XHRcdFx0aWYgKHByb2dyZXNzICE9PSBwcm9nKXtcclxuXHRcdFx0XHRcdFx0XHRpZiAocHJvZ3Jlc3MpIGNvbnNvbGUud2FybihgVGFzayBsaW5rZWQgXFxgcHJvZ3Jlc3NcXGAgKCR7cHJvZ3Jlc3N9KSByZWNhbGN1bGF0ZWQgdG8gKCR7cHJvZ30pIHVzaW5nIGN1cnJlbnQgdmFsdWUvdG90YWwgKCR7dmFsdWV9LyR7dG90YWx9KSAlLmApO1xyXG5cdFx0XHRcdFx0XHRcdHByb2dyZXNzID0gcHJvZztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGlmIChwcm9ncmVzcykgdG90YWwgPSBfcm91bmRfcCgxMDAvcHJvZ3Jlc3MgKiB2YWx1ZSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vLS0gcGFyc2UvYWRqdXN0OiBlcnJvciwgc3RhdHVzLCBzdGFydFRpbWUsIHN0b3BUaW1lLCBjb21wbGV0ZVxyXG5cdFx0XHRjb21wbGV0ZSA9ICEhY29tcGxldGU7XHJcblx0XHRcdGVycm9yID0gX2dldF9lcnJvcihlcnJvcik7XHJcblx0XHRcdGlmICghKHN0YXR1cyA9IF9nZXRfc3RyKHN0YXR1cykudG9Mb3dlckNhc2UoKSkpIHN0YXR1cyA9ICduZXcnO1xyXG5cdFx0XHRlbHNlIGlmICghVEFTS19TVEFUVVNFUy5pbmNsdWRlcyhzdGF0dXMpKSBzdGF0dXMgPSAnbmV3JztcclxuXHRcdFx0aWYgKCh0bXAgPSBfcG9zX2ludChzdGFydFRpbWUsIC0xKSkgPCAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHRhc2sgXFxgc3RhcnRUaW1lXFxgIHZhbHVlLicpO1xyXG5cdFx0XHRzdGFydFRpbWUgPSB0bXA7XHJcblx0XHRcdGlmICgodG1wID0gX3Bvc19pbnQoc3RvcFRpbWUsIC0xKSkgPCAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHRhc2sgYHN0b3BUaW1lYCB2YWx1ZS4nKTtcclxuXHRcdFx0c3RvcFRpbWUgPSB0bXA7XHJcblx0XHRcdGlmICghKFsnc3RvcHBlZCcsICdmYWlsZWQnLCAnZG9uZSddLmluY2x1ZGVzKHN0YXR1cykgJiYgc3RhcnRUaW1lICYmIHN0b3BUaW1lICYmIHN0YXJ0VGltZSA8IHN0b3BUaW1lKSl7XHJcblx0XHRcdFx0c3RhdHVzID0gJ25ldyc7XHJcblx0XHRcdFx0c3RhcnRUaW1lID0gMDtcclxuXHRcdFx0XHRzdG9wVGltZSA9IDA7XHJcblx0XHRcdFx0ZXJyb3IgPSAnJztcclxuXHRcdFx0XHRjb21wbGV0ZSA9IGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKGVycm9yICYmIHN0YXR1cyAhPT0gJ2ZhaWxlZCcpIHN0YXR1cyA9ICdmYWlsZWQnO1xyXG5cdFx0XHRlbHNlIGlmIChzdGF0dXMgPT09ICdkb25lJyAmJiAhY29tcGxldGUpIGNvbXBsZXRlID0gdHJ1ZTtcclxuXHRcdFx0aWYgKCFUQVNLX1NUQVRVU0VTLmluY2x1ZGVzKHN0YXR1cykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdGFzayBcXGBzdGF0dXNcXGAgdmFsdWUuJyk7XHJcblxyXG5cdFx0XHQvL2NyZWF0ZSB0YXNrXHJcblx0XHRcdGNvbnN0IHQgPSBuZXcgVGFzayhuYW1lLCBsaW5rZWQsIHByZWNpc2lvbiwgZXZlbnRfZGVib3VuY2UpO1xyXG5cdFx0XHRjb25zdCBwcm9wcyA9IHRbUFJPUFNdO1xyXG5cdFx0XHRwcm9wcy5uYW1lID0gbmFtZTtcclxuXHRcdFx0cHJvcHMubGFiZWwgPSBsYWJlbDtcclxuXHRcdFx0cHJvcHMubGlua2VkID0gbGlua2VkO1xyXG5cdFx0XHRwcm9wcy5wcmVjaXNpb24gPSBwcmVjaXNpb24gYXMgbnVtYmVyO1xyXG5cdFx0XHRwcm9wcy5ldmVudF9kZWJvdW5jZSA9IGV2ZW50X2RlYm91bmNlIGFzIG51bWJlcjtcclxuXHRcdFx0cHJvcHMucHJvZ3Jlc3MgPSBwcm9ncmVzcztcclxuXHRcdFx0cHJvcHMudG90YWwgPSB0b3RhbDtcclxuXHRcdFx0cHJvcHMudmFsdWUgPSB2YWx1ZTtcclxuXHRcdFx0cHJvcHMuZXJyb3IgPSBlcnJvcjtcclxuXHRcdFx0cHJvcHMuc3RhdHVzID0gc3RhdHVzO1xyXG5cdFx0XHRwcm9wcy5zdGFydFRpbWUgPSBzdGFydFRpbWU7XHJcblx0XHRcdHByb3BzLnN0b3BUaW1lID0gc3RvcFRpbWU7XHJcblx0XHRcdHByb3BzLmNvbXBsZXRlID0gY29tcGxldGU7XHJcblx0XHRcdHByb3BzLml0ZW0gPSBpdGVtOyAvLy0tIGl0ZW1cclxuXHRcdFx0cHJvcHMuX2RlYm91bmNlZF91cGRhdGUgPSBfZGVib3VuY2UoKCkgPT4ge1xyXG5cdFx0XHRcdGlmIChwcm9wcy5fZG9uZSkgcmV0dXJuO1xyXG5cdFx0XHRcdHByb3BzLl9lbWl0dGVyLmVtaXQoJ3VwZGF0ZScsIHQuZGF0YSgpKTtcclxuXHRcdFx0fSwgdC5ldmVudF9kZWJvdW5jZSk7XHJcblx0XHRcdHJldHVybiB0O1xyXG5cdFx0fVxyXG5cdFx0Y2F0Y2ggKGU6IGFueSl7XHJcblx0XHRcdGNvbnN0IGVycm9yID0gYENyZWF0ZSBUYXNrIEZhaWx1cmUhICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogZX1gLnRyaW0oKTtcclxuXHRcdFx0Y29uc3QgX29wdGlvbnMgPSB7bmFtZSwgbGFiZWwsIGxpbmtlZCwgcHJlY2lzaW9uLCBldmVudF9kZWJvdW5jZSwgcHJvZ3Jlc3MsIHRvdGFsLCB2YWx1ZSwgZXJyb3IsIHN0YXR1cywgc3RhcnRUaW1lLCBzdG9wVGltZSwgY29tcGxldGUsIGl0ZW19O1xyXG5cdFx0XHRjb25zb2xlLndhcm4oZXJyb3IsIHtfb3B0aW9uc30pO1xyXG5cdFx0XHRpZiAoZS5uYW1lID09PSAnVHlwZUVycm9yJykgdGhyb3cgbmV3IFR5cGVFcnJvcihlcnJvcik7XHJcblx0XHRcdGVsc2UgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcclxuXHRcdH1cclxuXHR9XHJcbn0iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIElFdmVudCB9IGZyb20gJy4uL0V2ZW50RW1pdHRlcic7XHJcbmltcG9ydCB7IElUYXNrLCBUYXNrIH0gZnJvbSAnLi9fVGFzayc7XHJcblxyXG4vKipcclxuICogVGFza3MgZGF0YSBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRhc2tzRGF0YSB7XHJcblx0cHJlY2lzaW9uOiBudW1iZXI7XHJcblx0ZXZlbnRfZGVib3VuY2U6IG51bWJlcjtcclxuXHRzaXplOiBudW1iZXI7XHJcblx0cHJvZ3Jlc3M6IG51bWJlcjtcclxuXHRydW5uaW5nOiBib29sZWFuO1xyXG5cdHN0YXJ0ZWQ6IGJvb2xlYW47XHJcblx0Y29tcGxldGU6IGJvb2xlYW47XHJcblx0c3RhcnRUaW1lOiBudW1iZXI7XHJcblx0c3RvcFRpbWU6IG51bWJlcjtcclxuXHRlbGFwc2VkVGltZTogbnVtYmVyO1xyXG5cdHRhc2tzOiB7W25hbWU6IHN0cmluZ106IElUYXNrfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIERlZmF1bHQgZXZlbnQgZGVib3VuY2UgbWlsbGlzZWNvbmRzXHJcbiAqL1xyXG5sZXQgREVGQVVMVF9FVkVOVF9ERUJPVU5DRTogbnVtYmVyID0gMjAwO1xyXG5cclxuLyoqXHJcbiAqIERlZmF1bHQgcHJlY2lzaW9uIH4gcm91bmQgZGVjaW1hbCBwbGFjZXNcclxuICovXHJcbmxldCBERUZBVUxUX1BSRUNJU0lPTjogbnVtYmVyID0gMjtcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgLSBwYXJzZSBwb3NpdGl2ZSBudW1iZXJcclxuICogXHJcbiAqIEBwYXJhbSB2YWxcclxuICogQHBhcmFtIF9kZWZhdWx0XHJcbiAqIEBwYXJhbSBfYmxhbmtcclxuICogQHJldHVybnMgYG51bWJlcmBcclxuICovXHJcbmNvbnN0IF9wb3NfbnVtID0gKHZhbDogYW55LCBfZGVmYXVsdDogbnVtYmVyID0gMCwgX2JsYW5rOiBudW1iZXIgPSAwKTogbnVtYmVyID0+IHtcclxuXHRpZiAoW3VuZGVmaW5lZCwgbnVsbF0uaW5jbHVkZXModmFsKSB8fCAnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbCAmJiAhKHZhbCA9IHZhbC50cmltKCkpKSByZXR1cm4gX2JsYW5rO1xyXG5cdGlmICghaXNOYU4odmFsID0gcGFyc2VGbG9hdCh2YWwpKSAmJiBOdW1iZXIuaXNGaW5pdGUodmFsKSAmJiB2YWwgPj0gMCkgcmV0dXJuIHZhbDtcclxuXHRyZXR1cm4gX2RlZmF1bHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gcGFyc2UgcG9zaXRpdmUgaW50ZWdlclxyXG4gKiBcclxuICogQHBhcmFtIHZhbFxyXG4gKiBAcGFyYW0gX2RlZmF1bHRcclxuICogQHBhcmFtIF9ibGFua1xyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCBpbnRlZ2VyXHJcbiAqL1xyXG5jb25zdCBfcG9zX2ludCA9ICh2YWw6IGFueSwgX2RlZmF1bHQ6IG51bWJlciA9IDAsIF9ibGFuazogbnVtYmVyID0gMCk6IG51bWJlciA9PiBwYXJzZUludChfcG9zX251bSh2YWwsIF9kZWZhdWx0LCBfYmxhbmspICsgJycpO1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciAtIHJvdW5kIG51bWJlclxyXG4gKiBcclxuICogQHBhcmFtIHZhbCAtIHJvdW5kIHZhbHVlXHJcbiAqIEBwYXJhbSBwbGFjZXMgLSBwcmVjaXNpb24gZGVjaW1hbCBwbGFjZXMgW2RlZmF1bHQ6IGBERUZBVUxUX1BSRUNJU0lPTmBdXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgIHJvdW5kZWRcclxuICovXHJcbmNvbnN0IF9yb3VuZCA9ICh2YWw6IG51bWJlciwgcGxhY2VzPzogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRjb25zdCBwID0gMTAgKiogX3Bvc19pbnQocGxhY2VzLCBERUZBVUxUX1BSRUNJU0lPTiwgREVGQVVMVF9QUkVDSVNJT04pO1xyXG5cdHJldHVybiBNYXRoLnJvdW5kKCh2YWwgKyBOdW1iZXIuRVBTSUxPTikgKiBwKSAvIHA7XHJcbn07XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gZGVib3VuY2VkIGNhbGxiYWNrXHJcbiAqIFxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBjYWxsYmFjayBoYW5kbGVyXHJcbiAqIEBwYXJhbSB0aW1lb3V0IC0gdGltZW91dCBtaWxsaXNlY29uZHNcclxuICogQHJldHVybnMgYCgpPT52b2lkYCBkZWJvdW5jZWQgY2FsbGJhY2tcclxuICovXHJcbmNvbnN0IF9kZWJvdW5jZSA9IChjYWxsYmFjazogKCk9PnZvaWQsIHRpbWVvdXQ6IG51bWJlciA9IDApOiAoKSA9PiB2b2lkID0+IHtcclxuXHRsZXQgdGltZXI6IGFueSwgbWF4X3dhaXQ6IGFueTtcclxuXHRjb25zdCBfaGFuZGxlciA9ICgpID0+IHtcclxuXHRcdGNsZWFyVGltZW91dCh0aW1lcik7XHJcblx0XHRjbGVhclRpbWVvdXQobWF4X3dhaXQpO1xyXG5cdFx0bWF4X3dhaXQgPSB1bmRlZmluZWQ7XHJcblx0XHRjYWxsYmFjaygpO1xyXG5cdH07XHJcblx0cmV0dXJuICgpID0+IHtcclxuXHRcdGlmICghdGltZW91dCkgcmV0dXJuIGNhbGxiYWNrKCk7XHJcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xyXG5cdFx0dGltZXIgPSBzZXRUaW1lb3V0KF9oYW5kbGVyLCB0aW1lb3V0KTtcclxuXHRcdGlmICghbWF4X3dhaXQpIG1heF93YWl0ID0gc2V0VGltZW91dChfaGFuZGxlciwgTWF0aC5mbG9vcih0aW1lb3V0ICogMS41KSk7XHJcblx0fTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBgU3ltYm9sYCBwcml2YXRlIHByb3BzIGtleSBuYW1lXHJcbiAqL1xyXG5jb25zdCBQUk9QUyA9IFN5bWJvbChgX19wcml2YXRlX3Byb3BzXyR7RGF0ZS5ub3coKX1fX2ApO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBUYXNrc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRhc2tzXHJcbntcclxuXHQvKipcclxuXHQgKiBUYXNrcyBnbG9iYWwgZXZlbnQgZGVib3VuY2UgbWlsbGlzZWNvbmRzXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBldmVudF9kZWJvdW5jZSgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIERFRkFVTFRfRVZFTlRfREVCT1VOQ0U7XHJcblx0fVxyXG5cdHN0YXRpYyBzZXQgZXZlbnRfZGVib3VuY2UodmFsdWU6IGFueSl7XHJcblx0XHRERUZBVUxUX0VWRU5UX0RFQk9VTkNFID0gX3Bvc19pbnQodmFsdWUsIERFRkFVTFRfRVZFTlRfREVCT1VOQ0UsIDApO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBnbG9iYWwgcHJlY2lzaW9uIH4gcm91bmQgZGVjaW1hbCBwbGFjZXNcclxuXHQgKi9cclxuXHRzdGF0aWMgZ2V0IGRlY2ltYWxfcHJlY2lzaW9uKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gREVGQVVMVF9QUkVDSVNJT047XHJcblx0fVxyXG5cdHN0YXRpYyBzZXQgZGVjaW1hbF9wcmVjaXNpb24odmFsdWU6IGFueSl7XHJcblx0XHRERUZBVUxUX1BSRUNJU0lPTiA9IF9wb3NfaW50KHZhbHVlLCBERUZBVUxUX1BSRUNJU0lPTiwgMik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBJbnN0YW5jZSBcInByaXZhdGVcIiBwcm9wc1xyXG5cdCAqL1xyXG5cdFtQUk9QU106IHtcclxuXHRcdHByZWNpc2lvbjogbnVtYmVyO1xyXG5cdFx0ZXZlbnRfZGVib3VuY2U6IG51bWJlcjtcclxuXHRcdF90YXNrczogTWFwPHN0cmluZywgVGFzaz47XHJcblx0XHRfdW5zdWJzY3JpYmU6IE1hcDxzdHJpbmcsICgpPT52b2lkPjtcclxuXHRcdF9lbWl0dGVyOiBFdmVudEVtaXR0ZXI7XHJcblx0XHRfZGVib3VuY2VkX3VwZGF0ZTogKCk9PnZvaWQ7XHJcblx0fSA9IHt9IGFzIGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogVGFza3MgY291bnRcclxuXHQgKi9cclxuXHRnZXQgc2l6ZSgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLl90YXNrcy5zaXplO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBUYXNrIHByZWNpc2lvbiAtIGBpbnRlZ2VyYCBkZWNpbWFsIHBsYWNlc1xyXG5cdCAqL1xyXG5cdGdldCBwcmVjaXNpb24oKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5wcmVjaXNpb247XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIGV2ZW50IGRlYm91bmNlIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogYFRhc2tzLmV2ZW50X2RlYm91bmNlYClcclxuXHQgKi9cclxuXHRnZXQgZXZlbnRfZGVib3VuY2UoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5ldmVudF9kZWJvdW5jZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZSBuZXcgaW5zdGFuY2VcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gcHJlY2lzaW9uIC0gZGVjaW1hbCBwbGFjZXMgKGRlZmF1bHQ6IGBUYXNrcy5kZWNpbWFsX3ByZWNpc2lvbmApXHJcblx0ICogQHBhcmFtIGV2ZW50X2RlYm91bmNlIC0gZXZlbnQgZGVib3VuY2UgbWlsbGlzZWNvbmRzIChkZWZhdWx0OiBgVGFza3MuZXZlbnRfZGVib3VuY2VgKVxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKHByZWNpc2lvbjogbnVtYmVyID0gVGFza3MuZGVjaW1hbF9wcmVjaXNpb24sIGV2ZW50X2RlYm91bmNlOiBudW1iZXIgPSBUYXNrcy5ldmVudF9kZWJvdW5jZSl7XHJcblx0XHRwcmVjaXNpb24gPSBfcG9zX2ludChwcmVjaXNpb24sIFRhc2tzLmRlY2ltYWxfcHJlY2lzaW9uLCBUYXNrcy5kZWNpbWFsX3ByZWNpc2lvbik7XHJcblx0XHRldmVudF9kZWJvdW5jZSA9IF9wb3NfaW50KGV2ZW50X2RlYm91bmNlLCBUYXNrcy5ldmVudF9kZWJvdW5jZSwgVGFza3MuZXZlbnRfZGVib3VuY2UpO1xyXG5cdFx0dGhpc1tQUk9QU10gPSB7XHJcblx0XHRcdHByZWNpc2lvbjogcHJlY2lzaW9uLFxyXG5cdFx0XHRldmVudF9kZWJvdW5jZTogZXZlbnRfZGVib3VuY2UsXHJcblx0XHRcdF90YXNrczogbmV3IE1hcCgpLFxyXG5cdFx0XHRfdW5zdWJzY3JpYmU6IG5ldyBNYXAoKSxcclxuXHRcdFx0X2VtaXR0ZXI6IG5ldyBFdmVudEVtaXR0ZXIoKSxcclxuXHRcdFx0X2RlYm91bmNlZF91cGRhdGU6IF9kZWJvdW5jZSgoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdFx0XHRwcm9wcy5fZW1pdHRlci5lbWl0KCd1cGRhdGUnLCB0aGlzLmRhdGEoKSk7XHJcblx0XHRcdH0sIGV2ZW50X2RlYm91bmNlKSxcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdGFza3MgZGF0YVxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIGBJVGFza3NEYXRhYCBvcHRpb25zIH4gaS5lLiBge3ByZWNpc2lvbiwgZXZlbnRfZGVib3VuY2UsIHNpemUsIHByb2dyZXNzLCBydW5uaW5nLCBzdGFydGVkLCBjb21wbGV0ZSwgc3RhcnRUaW1lLCBzdG9wVGltZSwgZWxhcHNlZFRpbWUsIHRhc2tzfWBcclxuXHQgKi9cclxuXHRnZXQgZGF0YSgpOiAoKT0+SVRhc2tzRGF0YSB7XHJcblx0XHRyZXR1cm4gKCk6IElUYXNrc0RhdGEgPT4ge1xyXG5cdFx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0XHRsZXQgc2l6ZTogbnVtYmVyID0gMDtcclxuXHRcdFx0bGV0IHN0YXJ0VGltZTogbnVtYmVyID0gMDtcclxuXHRcdFx0bGV0IHN0b3BUaW1lOiBudW1iZXIgPSAwO1xyXG5cdFx0XHRsZXQgYWxsX3Byb2dyZXNzOiBudW1iZXIgPSAwO1xyXG5cdFx0XHRsZXQgZnVsbF9wcm9ncmVzczogbnVtYmVyID0gMDtcclxuXHRcdFx0bGV0IGhhc19ydW5uaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHRcdGxldCBoYXNfc3RhcnRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0XHRsZXQgaGFzX2luY29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0XHRcdC8vcGFyc2UgdGFza3MgZGF0YVxyXG5cdFx0XHRjb25zdCB0YXNrX2VudHJpZXM6IFtuYW1lOiBzdHJpbmcsIHRhc2s6IElUYXNrXVtdID0gW107XHJcblx0XHRcdGZvciAoY29uc3QgdGFzayBvZiBbLi4ucHJvcHMuX3Rhc2tzLnZhbHVlcygpXSl7XHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IHRhc2suZGF0YSgpO1xyXG5cdFx0XHRcdHNpemUgKys7XHJcblxyXG5cdFx0XHRcdC8vLS0gcHJvZ3Jlc3NcclxuXHRcdFx0XHRmdWxsX3Byb2dyZXNzICs9IDEwMDtcclxuXHRcdFx0XHRhbGxfcHJvZ3Jlc3MgKz0gZGF0YS5wcm9ncmVzcztcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvLy0tIGNvbXBsZXRlXHJcblx0XHRcdFx0aWYgKCFoYXNfaW5jb21wbGV0ZSAmJiAhZGF0YS5jb21wbGV0ZSkgaGFzX2luY29tcGxldGUgPSB0cnVlO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vLS0gc3RhdHVzID0gcnVubmluZy9zdGFydGVkXHJcblx0XHRcdFx0aWYgKGRhdGEuc3RhdHVzID09PSAncnVubmluZycpe1xyXG5cdFx0XHRcdFx0aWYgKCFoYXNfcnVubmluZykgaGFzX3J1bm5pbmcgPSB0cnVlO1xyXG5cdFx0XHRcdFx0aWYgKCFoYXNfc3RhcnRlZCkgaGFzX3N0YXJ0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGlmICghaGFzX3N0YXJ0ZWQgJiYgWydmYWlsZWQnLCAnZG9uZSddLmluY2x1ZGVzKGRhdGEuc3RhdHVzKSkgaGFzX3N0YXJ0ZWQgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHQvLy0tIHN0YXJ0VGltZVxyXG5cdFx0XHRcdGlmIChkYXRhLnN0YXJ0VGltZSAmJiAoIXN0YXJ0VGltZSAmJiBkYXRhLnN0YXJ0VGltZSA8IHN0YXJ0VGltZSkpIHN0YXJ0VGltZSA9IGRhdGEuc3RhcnRUaW1lO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vLS0gc3RvcFRpbWVcclxuXHRcdFx0XHRpZiAoZGF0YS5zdG9wVGltZSAmJiAoIXN0b3BUaW1lICYmIGRhdGEuc3RvcFRpbWUgPiBzdG9wVGltZSkpIHN0b3BUaW1lID0gZGF0YS5zdG9wVGltZTtcclxuXHJcblx0XHRcdFx0Ly90YXNrIGVudHJ5XHJcblx0XHRcdFx0dGFza19lbnRyaWVzLnB1c2goW3Rhc2submFtZSwgZGF0YV0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IHRhc2tzOiB7W25hbWU6IHN0cmluZ106IElUYXNrfSA9IE9iamVjdC5mcm9tRW50cmllcyh0YXNrX2VudHJpZXMpO1xyXG5cdFx0XHRcclxuXHRcdFx0Ly9jYWxjIGRhdGFcclxuXHRcdFx0Y29uc3QgcHJvZ3Jlc3MgPSAoIWFsbF9wcm9ncmVzcyB8fCAhZnVsbF9wcm9ncmVzcykgPyAwIDogKChhbGxfcHJvZ3Jlc3MgPj0gZnVsbF9wcm9ncmVzcykgPyAxMDAgOiAgX3JvdW5kKGFsbF9wcm9ncmVzcy9mdWxsX3Byb2dyZXNzICogMTAwLCBwcm9wcy5wcmVjaXNpb24pKTtcclxuXHRcdFx0Y29uc3QgcnVubmluZyA9IGhhc19ydW5uaW5nO1xyXG5cdFx0XHRjb25zdCBzdGFydGVkID0gaGFzX3N0YXJ0ZWQ7XHJcblx0XHRcdGNvbnN0IGNvbXBsZXRlID0gc3RhcnRlZCAmJiAhaGFzX2luY29tcGxldGU7XHJcblx0XHRcdGxldCBlbGFwc2VkVGltZSA9IDA7XHJcblx0XHRcdGlmIChzdG9wVGltZSAmJiBzdGFydFRpbWUpe1xyXG5cdFx0XHRcdGlmIChzdG9wVGltZSA8IHN0YXJ0VGltZSkgc3RhcnRUaW1lID0gc3RvcFRpbWU7XHJcblx0XHRcdFx0ZWxhcHNlZFRpbWUgPSBzdG9wVGltZSAtIHN0YXJ0VGltZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly9kYXRhXHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0cHJlY2lzaW9uOiB0aGlzLnByZWNpc2lvbixcclxuXHRcdFx0XHRldmVudF9kZWJvdW5jZTogdGhpcy5ldmVudF9kZWJvdW5jZSxcclxuXHRcdFx0XHRzaXplLFxyXG5cdFx0XHRcdHByb2dyZXNzLFxyXG5cdFx0XHRcdHJ1bm5pbmcsXHJcblx0XHRcdFx0c3RhcnRlZCxcclxuXHRcdFx0XHRjb21wbGV0ZSxcclxuXHRcdFx0XHRzdGFydFRpbWUsXHJcblx0XHRcdFx0c3RvcFRpbWUsXHJcblx0XHRcdFx0ZWxhcHNlZFRpbWUsXHJcblx0XHRcdFx0dGFza3MsXHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBVcGRhdGUgZXZlbnQgdHJpZ2dlclxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdGdldCB1cGRhdGUoKTogKCk9PlRhc2tzIHtcclxuXHRcdHJldHVybiAoKTogVGFza3MgPT4ge1xyXG5cdFx0XHR0aGlzW1BST1BTXS5fZGVib3VuY2VkX3VwZGF0ZSgpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgdXBkYXRlIGV2ZW50IHN1YnNjcmliZXIgfiBgZXZlbnQgPSB7dHlwZTogJ3VwZGF0ZScsIGRhdGE6IElUYXNrfWBcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gbGlzdGVuZXIgLSBldmVudCBjYWxsYmFjayBsaXN0ZW5lclxyXG5cdCAqIEByZXR1cm5zIGAoKCk9PnZvaWQpYCB1bnN1YnNjcmliZSBjYWxsYmFja1xyXG5cdCAqL1xyXG5cdHN1YnNjcmliZShsaXN0ZW5lcjogKGV2ZW50OklFdmVudCk9PnZvaWQpOiAoKT0+dm9pZCB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uX2VtaXR0ZXIuc3Vic2NyaWJlKCd1cGRhdGUnLCBsaXN0ZW5lcik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDaGVjayBpZiB0YXNrIG5hbWUgZXhpc3RzXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG5hbWVcclxuXHQgKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuXHQgKi9cclxuXHRoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uX3Rhc2tzLmhhcyhuYW1lKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0YXNrIGJ5IG5hbWVcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gbmFtZSAtIHRhc2sgbmFtZVxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYFxyXG5cdCAqL1xyXG5cdGdldChuYW1lOiBzdHJpbmcpOiBUYXNrfHVuZGVmaW5lZCB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uX3Rhc2tzLmdldChuYW1lKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCBuZXcgdGFza1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0YXNrIC0gYHN0cmluZ2AgdGFzayBuYW1lIHwgYElUYXNrYCB0YXNrIGRhdGEgfCBgVGFza2AgaW5zdGFuY2VcclxuXHQgKiBAcGFyYW0gbGlua2VkIC0gdGFzayB2YWx1ZS90b3RhbC9wcm9ncmVzcyBsaW5rZWQgfiByZWNhbGN1bGF0ZSBvbiBjaGFuZ2VcclxuXHQgKiBAcGFyYW0gZXZlbnRfZGVib3VuY2UgLSBldmVudCBkZWJvdW5jZSBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGBUYXNrLmV2ZW50X2RlYm91bmNlYClcclxuXHQgKiBAcmV0dXJucyBgVGFza2BcclxuXHQgKi9cclxuXHRhZGQodGFzazogc3RyaW5nfElUYXNrfFRhc2ssIGxpbmtlZDogYm9vbGVhbiA9IGZhbHNlLCBldmVudF9kZWJvdW5jZT86IG51bWJlcik6IFRhc2sge1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdGV2ZW50X2RlYm91bmNlID0gKGV2ZW50X2RlYm91bmNlID0gX3Bvc19pbnQoZXZlbnRfZGVib3VuY2UsIC0xLCAtMSkpID49IDAgPyBldmVudF9kZWJvdW5jZSA6IHVuZGVmaW5lZDtcclxuXHRcdFxyXG5cdFx0Ly90YXNrIGluc3RhbmNlXHJcblx0XHRsZXQgX3Rhc2s6IFRhc2sgPSB1bmRlZmluZWQgYXMgYW55O1xyXG5cdFx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdGFzaykgX3Rhc2sgPSBuZXcgVGFzayh0YXNrLCBsaW5rZWQsIHByb3BzLnByZWNpc2lvbiwgZXZlbnRfZGVib3VuY2UpO1xyXG5cdFx0ZWxzZSBpZiAodGFzayBpbnN0YW5jZW9mIFRhc2spIF90YXNrID0gdGFzaztcclxuXHRcdGVsc2UgaWYgKCdvYmplY3QnID09PSB0eXBlb2YgdGFzayAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIHRhc2s/Lm5hbWUpIF90YXNrID0gVGFzay5jcmVhdGUodGFzaywgcHJvcHMucHJlY2lzaW9uLCBldmVudF9kZWJvdW5jZSk7XHJcblx0XHRpZiAoIShfdGFzayBpbnN0YW5jZW9mIFRhc2spKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBZGQgXFxgVGFza1xcYCBvYmplY3QgaXMgaW52YWxpZC4nKTtcclxuXHJcblx0XHQvL3Rhc2sgZXhpc3RzIC0gcmVwbGFjZVxyXG5cdFx0aWYgKHRoaXMuaGFzKF90YXNrLm5hbWUpKSBjb25zb2xlLndhcm4oYEV4aXN0aW5nIHRhc2sgbmFtZWQgXCIke190YXNrLm5hbWV9XCIgaGFzIGJlZW4gcmVwbGFjZWQuYCk7XHJcblxyXG5cdFx0Ly90YXNrIGxpc3RlbmVyXHJcblx0XHRjb25zdCB1bnN1YnNjcmliZSA9IF90YXNrLnN1YnNjcmliZSgoZXZlbnQ6IElFdmVudCkgPT4ge1xyXG5cdFx0XHRjb25zb2xlLmRlYnVnKGAtLSB0YXNrIGV2ZW50ICR7ZXZlbnQuZGF0YS5uYW1lfWAsIGV2ZW50LmRhdGEucHJvZ3Jlc3MpOyAvL1RPRE86IHJlbW92ZSB0YXNrIGV2ZW50IGRlYnVnXHJcblx0XHRcdHRoaXMudXBkYXRlKCk7IC8vdGFzayB1cGRhdGVcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vdGFzayBhZGRcclxuXHRcdHByb3BzLl90YXNrcy5zZXQoX3Rhc2submFtZSwgX3Rhc2spO1xyXG5cdFx0cHJvcHMuX3Vuc3Vic2NyaWJlLnNldChfdGFzay5uYW1lLCB1bnN1YnNjcmliZSk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpOyAvL3VwZGF0ZVxyXG5cdFx0XHJcblx0XHQvL3Jlc3VsdFxyXG5cdFx0cmV0dXJuIF90YXNrO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBSZW1vdmUgdGFzayBieSBuYW1lXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG5hbWUgLSB0YXNrIG5hbWVcclxuXHQgKiBAcmV0dXJucyBgVGFza3NgIGluc3RhbmNlXHJcblx0ICovXHJcblx0cmVtb3ZlKG5hbWU6IHN0cmluZyk6IFRhc2tzIHtcclxuXHRcdGNvbnN0IHByb3BzID0gdGhpc1tQUk9QU107XHJcblx0XHRpZiAoIXByb3BzLl90YXNrcy5oYXMobmFtZSkpIHJldHVybiB0aGlzO1xyXG5cdFx0XHJcblx0XHQvL3Vuc3Vic2NyaWJlIHRhc2sgbGlzdGVuZXJcclxuXHRcdGNvbnN0IHVuc3Vic2NyaWJlID0gcHJvcHMuX3Vuc3Vic2NyaWJlLmdldChuYW1lKTtcclxuXHRcdGlmICh1bnN1YnNjcmliZSl7XHJcblx0XHRcdHByb3BzLl91bnN1YnNjcmliZS5kZWxldGUobmFtZSk7XHJcblx0XHRcdHVuc3Vic2NyaWJlKCk7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vcmVtb3ZlIHRhc2sgLSB1cGRhdGVcclxuXHRcdHByb3BzLl90YXNrcy5kZWxldGUobmFtZSk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG59IiwiZXhwb3J0ICogZnJvbSAnLi9fVGFzayc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX1Rhc2tzJzsiLCJpbXBvcnQgeyBfY2xvbmUsIF9qc29uU3RyaW5naWZ5LCBfaXNEYXRlLCBfc3RyLCBfc3RyaW5nLCBfc3RyaW5nYWJsZSwgX3N0ckVzY2FwZSwgX2Jvb2wsIF9wb3NJbnQgfSBmcm9tICcuLi91dGlscyc7XHJcblxyXG4vKipcclxuICogVGVybSBmb3JtYXQgcmVzdWx0IGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJVGVybUZvcm1hdCB7XHJcblx0bWV0aG9kOiAodmFsdWU6IHVuZGVmaW5lZHwnbG9nJ3wnZGVidWcnfCd3YXJuJ3wnZXJyb3InfCdpbmZvJykgPT4gSVRlcm1Gb3JtYXQ7XHJcblx0Zm9ybWF0OiAoZm9ybWF0czogc3RyaW5nfHN0cmluZ1tdLCAuLi5hcmdzOiBhbnlbXSkgPT4gSVRlcm1Gb3JtYXQ7XHJcblx0dmFsdWVzOiAoLi4uYXJnczogYW55W10pID0+IGFueVtdO1xyXG5cdGNsZWFuOiAoLi4uYXJnczogYW55W10pID0+IGFueVtdO1xyXG5cdGxvZzogKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4gdm9pZDtcclxuXHRkZWJ1ZzogKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4gdm9pZDtcclxuXHR3YXJuOiAobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB2b2lkO1xyXG5cdGVycm9yOiAobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB2b2lkO1xyXG5cdGluZm86IChtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pID0+IHZvaWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUZXJtIGxvZyBtZXRob2QgfiBzdGF0aWMgcmVhZC93cml0ZSBjYWNoZVxyXG4gKi9cclxubGV0IFRFUk1fRk9STUFUX0RJU0FCTEVEOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4vKipcclxuICogVGVybSBsb2cgbWV0aG9kIH4gc3RhdGljIHJlYWQvd3JpdGUgY2FjaGVcclxuICovXHJcbmxldCBURVJNX0xPR19NRVRIT0Q6IHVuZGVmaW5lZHwnbG9nJ3wnZGVidWcnfCd3YXJuJ3wnZXJyb3InfCdpbmZvJyA9IHVuZGVmaW5lZFxyXG5cclxuLyoqXHJcbiAqIFRlcm0gYGNvbnNvbGUuKmAgbG9nZ2VyXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgVGVybVxyXG57XHJcblx0LyoqXHJcblx0ICogRm9ybWF0IGRpc2FibGVkXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBGT1JNQVRfRElTQUJMRUQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gVEVSTV9GT1JNQVRfRElTQUJMRUQ7XHJcblx0fVxyXG5cdHN0YXRpYyBzZXQgRk9STUFUX0RJU0FCTEVEKHZhbHVlOiBhbnkpe1xyXG5cdFx0VEVSTV9GT1JNQVRfRElTQUJMRUQgPSBfYm9vbCh2YWx1ZSwgdHJ1ZSkgPz8gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb25zb2xlIGxvZyBtZXRob2RzXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBMT0dfTUVUSE9EUygpOiBzdHJpbmdbXSB7XHJcblx0XHRyZXR1cm4gWydsb2cnLCAnZGVidWcnLCAnd2FybicsICdlcnJvcicsICdpbmZvJ107XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQcmVmZXJyZWQgY29uc29sZSBsb2cgbWV0aG9kXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBMT0dfTUVUSE9EKCk6IHVuZGVmaW5lZHwnbG9nJ3wnZGVidWcnfCd3YXJuJ3wnZXJyb3InfCdpbmZvJyB7XHJcblx0XHRyZXR1cm4gVEVSTV9MT0dfTUVUSE9EO1xyXG5cdH1cclxuXHRzdGF0aWMgc2V0IExPR19NRVRIT0QodmFsdWU6IGFueSl7XHJcblx0XHRURVJNX0xPR19NRVRIT0QgPSB0aGlzLkxPR19NRVRIT0RTLmluY2x1ZGVzKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGV4dCBmb3JtYXRzXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBGT1JNQVRTKCk6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9IHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHJlc2V0OiAnXFx4MWJbMG0nLFxyXG5cdFx0XHRicmlnaHQ6ICdcXHgxYlsxbScsXHJcblx0XHRcdGRpbTogJ1xceDFiWzJtJyxcclxuXHRcdFx0dW5kZXJzY29yZTogJ1xceDFiWzRtJyxcclxuXHRcdFx0Ymxpbms6ICdcXHgxYls1bScsXHJcblx0XHRcdHJldmVyc2U6ICdcXHgxYls3bScsXHJcblx0XHRcdGhpZGRlbjogJ1xceDFiWzhtJyxcclxuXHRcdFx0ZmdfYmxhY2s6ICdcXHgxYlszMG0nLFxyXG5cdFx0XHRmZ19yZWQ6ICdcXHgxYlszMW0nLFxyXG5cdFx0XHRmZ19ncmVlbjogJ1xceDFiWzMybScsXHJcblx0XHRcdGZnX3llbGxvdzogJ1xceDFiWzMzbScsXHJcblx0XHRcdGZnX2JsdWU6ICdcXHgxYlszNG0nLFxyXG5cdFx0XHRmZ19tYWdlbnRhOiAnXFx4MWJbMzVtJyxcclxuXHRcdFx0ZmdfY3lhbjogJ1xceDFiWzM2bScsXHJcblx0XHRcdGZnX3doaXRlOiAnXFx4MWJbMzdtJyxcclxuXHRcdFx0ZmdfZ3JheTogJ1xceDFiWzkwbScsXHJcblx0XHRcdGJnX2JsYWNrOiAnXFx4MWJbNDBtJyxcclxuXHRcdFx0YmdfcmVkOiAnXFx4MWJbNDFtJyxcclxuXHRcdFx0YmdfZ3JlZW46ICdcXHgxYls0Mm0nLFxyXG5cdFx0XHRiZ195ZWxsb3c6ICdcXHgxYls0M20nLFxyXG5cdFx0XHRiZ19ibHVlOiAnXFx4MWJbNDRtJyxcclxuXHRcdFx0YmdfbWFnZW50YTogJ1xceDFiWzQ1bScsXHJcblx0XHRcdGJnX2N5YW46ICdcXHgxYls0Nm0nLFxyXG5cdFx0XHRiZ193aGl0ZTogJ1xceDFiWzQ3bScsXHJcblx0XHRcdGJnX2dyYXk6ICdcXHgxYlsxMDBtJyxcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQcmVkZWZpbmVkIHRleHQgZm9ybWF0c1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXQgUFJFREVGSU5FRF9GT1JNQVRTKCk6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd8c3RyaW5nW119IHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGxvZzogJ2ZnX3doaXRlJyxcclxuXHRcdFx0ZHVtcDogWydmZ193aGl0ZScsICdicmlnaHQnXSxcclxuXHRcdFx0ZGVidWc6ICdmZ19ncmF5JyxcclxuXHRcdFx0ZXJyb3I6ICdmZ19yZWQnLFxyXG5cdFx0XHR3YXJuOiAnZmdfeWVsbG93JyxcclxuXHRcdFx0aW5mbzogWydmZ19jeWFuJywgJ2JyaWdodCddLFxyXG5cdFx0XHRzdWNjZXNzOiAnZmdfZ3JlZW4nLFxyXG5cdFx0XHRiZ19sb2c6IFsnYmdfYmx1ZScsICdmZ193aGl0ZSddLFxyXG5cdFx0XHRiZ19kZWJ1ZzogWydiZ19ncmF5JywgJ2ZnX2JsYWNrJ10sXHJcblx0XHRcdGJnX2Vycm9yOiBbJ2JnX3JlZCcsICdmZ193aGl0ZSddLFxyXG5cdFx0XHRiZ193YXJuOiBbJ2JnX3llbGxvdycsICdmZ19ibGFjayddLFxyXG5cdFx0XHRiZ19pbmZvOiBbJ2JnX2N5YW4nLCAnZmdfYmxhY2snXSxcclxuXHRcdFx0Ymdfc3VjY2VzczogWydiZ19ncmVlbicsICdmZ193aGl0ZSddLFxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhcnNlIHN0YW5kYXJkIHRleHQgZm9ybWF0c1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBmb3JtYXRzIC0gdGV4dCBmb3JtYXRzXHJcblx0ICogQHJldHVybnMgYHN0cmluZ1tdYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXRGb3JtYXRzKGZvcm1hdHM6IHN0cmluZ3xzdHJpbmdbXSk6IHN0cmluZ1tdIHtcclxuXHRcdGNvbnN0IEZNID0gdGhpcy5GT1JNQVRTO1xyXG5cdFx0Y29uc3QgUEYgPSB0aGlzLlBSRURFRklORURfRk9STUFUUztcclxuXHRcdGNvbnN0IF9mb3JtYXRzOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkoZm9ybWF0cykgPyBmb3JtYXRzIDogJ3N0cmluZycgPT09IHR5cGVvZiBmb3JtYXRzID8gW2Zvcm1hdHNdIDogW107XHJcblx0XHRyZXR1cm4gX2Zvcm1hdHMucmVkdWNlPHN0cmluZ1tdPigocHJldiwgdmFsKSA9PiB7XHJcblx0XHRcdGlmICgodmFsID0gdmFsLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSAmJiB2YWwgIT09ICdyZXNldCcpe1xyXG5cdFx0XHRcdGxldCB0bXAgPSB2YWwgPSB2YWwucmVwbGFjZSgvW15hLXowLTldL2lnLCAnXycpLnJlcGxhY2UoJ2dyZXknLCAnZ3JheScpO1xyXG5cdFx0XHRcdGNvbnN0IF9hZGRQRiA9IChrOiBzdHJpbmcpOiB2b2lkID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHYgPSBQRltrXTtcclxuXHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHYpKSBwcmV2LnB1c2goLi4udik7XHJcblx0XHRcdFx0XHRlbHNlIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHYpIHByZXYucHVzaCh2KTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdGlmIChGTS5oYXNPd25Qcm9wZXJ0eSh2YWwpKSBwcmV2LnB1c2godmFsKTtcclxuXHRcdFx0XHRlbHNlIGlmIChGTS5oYXNPd25Qcm9wZXJ0eSh0bXAgPSBgZmdfJHt2YWx9YCkpIHByZXYucHVzaCh0bXApO1xyXG5cdFx0XHRcdGVsc2UgaWYgKFBGLmhhc093blByb3BlcnR5KHZhbCkpIF9hZGRQRih2YWwpO1xyXG5cdFx0XHRcdGVsc2UgaWYgKFBGLmhhc093blByb3BlcnR5KHRtcCA9IGBiZ18ke3ZhbH1gKSkgX2FkZFBGKHRtcCk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHByZXY7XHJcblx0XHR9LCBbXSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBGb3JtYXQgdGV4dCBpdGVtc1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBmb3JtYXRzIC0gdGV4dCBmb3JtYXRzXHJcblx0ICogQHBhcmFtIGFyZ3MgLSBwYXJzZSBpdGVtcyAoYXJndW1lbnRzKVxyXG5cdCAqIEByZXR1cm5zIGBJVGVybUZvcm1hdGBcclxuXHQgKi9cclxuXHRzdGF0aWMgZm9ybWF0KGZvcm1hdHM6IHN0cmluZ3xzdHJpbmdbXSwgLi4uYXJnczogYW55W10pOiBJVGVybUZvcm1hdCB7XHJcblx0XHRcclxuXHRcdC8vLS0gZm4gPT4gZm9ybWF0IGhlbHBlcnNcclxuXHRcdGxldCB0bXA6IHN0cmluZztcclxuXHRcdGNvbnN0IF9mb3JtYXRzOiBzdHJpbmdbXSA9IHRoaXMuZ2V0Rm9ybWF0cyhmb3JtYXRzKTtcclxuXHRcdGNvbnN0IF9mb3JtYXQgPSAodmFsOiBhbnkpOiBhbnkgPT4ge1xyXG5cdFx0XHRpZiAodGhpcy5GT1JNQVRfRElTQUJMRUQgfHwgIWZvcm1hdHMubGVuZ3RoKSByZXR1cm4gdmFsO1xyXG5cdFx0XHRpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB2YWwgJiYgdmFsKXtcclxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gdmFsO1xyXG5cdFx0XHRcdGlmIChuZXcgUmVnRXhwKCdcXFxcW29iamVjdCBcXFxcdytcXFxcXFxdJykudGVzdCh0bXAgPSBfc3RyaW5nKHZhbCkpKSByZXR1cm4gdmFsO1xyXG5cdFx0XHRcdGVsc2UgdmFsID0gdG1wO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsICYmIHZhbC5sZW5ndGgpKSByZXR1cm4gdmFsO1xyXG5cdFx0XHRyZXR1cm4gX2Zvcm1hdHMucmVkdWNlPHN0cmluZz4oKHYsIGYpID0+IHRoaXMuRk9STUFUU1tmXSArIHYgKyB0aGlzLkZPUk1BVFMucmVzZXQsIHZhbCk7XHJcblx0XHR9O1xyXG5cdFx0Y29uc3QgdGhhdCA9IHRoaXMsIHZhbHVlczogYW55W10gPSBbXTtcclxuXHRcdGZvciAoY29uc3QgdmFsIG9mIChBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IFtdKSkgdmFsdWVzLnB1c2goX2Zvcm1hdCh2YWwpKTtcclxuXHRcdGxldCBsb2dfbWV0aG9kOiBhbnkgPSB0aGF0LkxPR19NRVRIT0Q7XHJcblx0XHRjb25zdCBfbWV0aG9kID0gKG5hbWU6IGFueSk6ICdsb2cnfCdkZWJ1Zyd8J3dhcm4nfCdlcnJvcid8J2luZm8nID0+IHtcclxuXHRcdFx0aWYgKGxvZ19tZXRob2QpIHJldHVybiBsb2dfbWV0aG9kO1xyXG5cdFx0XHRyZXR1cm4gdGhhdC5MT0dfTUVUSE9EUy5pbmNsdWRlcyhuYW1lKSA/IG5hbWUgOiAnbG9nJztcclxuXHRcdH07XHJcblx0XHRcclxuXHRcdC8vPDwgcmVzdWx0IC0gIElUZXJtRm9ybWF0XHJcblx0XHRyZXR1cm4ge1xyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIFNldCBwcmVmZXJyZWQgbG9nIG1ldGhvZFxyXG5cdFx0XHQgKi9cclxuXHRcdFx0bWV0aG9kKHZhbHVlOiB1bmRlZmluZWR8J2xvZyd8J2RlYnVnJ3wnd2Fybid8J2Vycm9yJ3wnaW5mbycpOiBJVGVybUZvcm1hdCB7XHJcblx0XHRcdFx0bG9nX21ldGhvZCA9IHRoYXQuTE9HX01FVEhPRFMuaW5jbHVkZXModmFsdWUgYXMgYW55KSA/IHZhbHVlIDogdGhhdC5MT0dfTUVUSE9EO1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIEFkZCBmb3JtYXR0ZWQgdmFsdWVzXHJcblx0XHRcdCAqIFxyXG5cdFx0XHQgKiBAcGFyYW0gZm9ybWF0c1xyXG5cdFx0XHQgKiBAcGFyYW0gYXJnc1xyXG5cdFx0XHQgKi9cclxuXHRcdFx0Zm9ybWF0KGZvcm1hdHM6IHN0cmluZ3xzdHJpbmdbXSwgLi4uYXJnczogYW55W10pOiBJVGVybUZvcm1hdCB7XHJcblx0XHRcdFx0dmFsdWVzLnB1c2goLi4udGhhdC5mb3JtYXQoZm9ybWF0cywgLi4uYXJncykudmFsdWVzKCkpO1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIEdldCBmb3JtYXR0ZWQgdmFsdWVzXHJcblx0XHRcdCAqIFxyXG5cdFx0XHQgKiBAcGFyYW0gYXJnc1xyXG5cdFx0XHQgKi9cclxuXHRcdFx0dmFsdWVzKC4uLmFyZ3M6IGFueVtdKTogYW55W10ge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFyZ3MpICYmIGFyZ3MubGVuZ3RoKXtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgdmFsIG9mIGFyZ3MpIGl0ZW1zLnB1c2goX2Zvcm1hdCh2YWwpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIFsuLi52YWx1ZXMsIC4uLml0ZW1zXTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBHZXQgdmFsdWVzIHdpdGhvdXQgZm9ybWF0dGluZ1xyXG5cdFx0XHQgKiBcclxuXHRcdFx0ICogQHBhcmFtIGFyZ3NcclxuXHRcdFx0ICovXHJcblx0XHRcdGNsZWFuKC4uLmFyZ3M6IGFueVtdKTogYW55W10ge1xyXG5cdFx0XHRcdHJldHVybiB0aGF0LmNsZWFuKC4uLlsuLi52YWx1ZXMsIC4uLmFyZ3NdKTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBgY29uc29sZS5sb2dgIGZvcm1hdHRlZCB2YWx1ZXNcclxuXHRcdFx0ICogXHJcblx0XHRcdCAqIEBwYXJhbSBhcmdzIFxyXG5cdFx0XHQgKi9cclxuXHRcdFx0bG9nKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbXM6IGFueVtdID0gW107XHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJncykgJiYgYXJncy5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCB2YWwgb2YgYXJncykgaXRlbXMucHVzaChfZm9ybWF0KHZhbCkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zb2xlW19tZXRob2QoJ2xvZycpXSguLi5bLi4udmFsdWVzLCAuLi5pdGVtc10pO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIGBjb25zb2xlLmRlYnVnYCBmb3JtYXR0ZWQgdmFsdWVzXHJcblx0XHRcdCAqIFxyXG5cdFx0XHQgKiBAcGFyYW0gYXJncyBcclxuXHRcdFx0ICovXHJcblx0XHRcdGRlYnVnKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbXM6IGFueVtdID0gW107XHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJncykgJiYgYXJncy5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCB2YWwgb2YgYXJncykgaXRlbXMucHVzaChfZm9ybWF0KHZhbCkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zb2xlW19tZXRob2QoJ2RlYnVnJyldKC4uLlsuLi52YWx1ZXMsIC4uLml0ZW1zXSk7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogYGNvbnNvbGUud2FybmAgZm9ybWF0dGVkIHZhbHVlc1xyXG5cdFx0XHQgKiBcclxuXHRcdFx0ICogQHBhcmFtIGFyZ3MgXHJcblx0XHRcdCAqL1xyXG5cdFx0XHR3YXJuKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbXM6IGFueVtdID0gW107XHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJncykgJiYgYXJncy5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCB2YWwgb2YgYXJncykgaXRlbXMucHVzaChfZm9ybWF0KHZhbCkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zb2xlW19tZXRob2QoJ3dhcm4nKV0oLi4uWy4uLnZhbHVlcywgLi4uaXRlbXNdKTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBgY29uc29sZS5lcnJvcmAgZm9ybWF0dGVkIHZhbHVlc1xyXG5cdFx0XHQgKiBcclxuXHRcdFx0ICogQHBhcmFtIGFyZ3MgXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRlcnJvciguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFyZ3MpICYmIGFyZ3MubGVuZ3RoKXtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgdmFsIG9mIGFyZ3MpIGl0ZW1zLnB1c2goX2Zvcm1hdCh2YWwpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc29sZVtfbWV0aG9kKCdlcnJvcicpXSguLi5bLi4udmFsdWVzLCAuLi5pdGVtc10pO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIGBjb25zb2xlLmluZm9gIGZvcm1hdHRlZCB2YWx1ZXNcclxuXHRcdFx0ICogXHJcblx0XHRcdCAqIEBwYXJhbSBhcmdzIFxyXG5cdFx0XHQgKi9cclxuXHRcdFx0aW5mbyguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFyZ3MpICYmIGFyZ3MubGVuZ3RoKXtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgdmFsIG9mIGFyZ3MpIGl0ZW1zLnB1c2goX2Zvcm1hdCh2YWwpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc29sZVtfbWV0aG9kKCdpbmZvJyldKC4uLlsuLi52YWx1ZXMsIC4uLml0ZW1zXSk7XHJcblx0XHRcdH0sXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2xlYW4vcmVtb3ZlIHRleHQgZm9ybWF0dGluZ1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBhcmdzIC0gcGFyc2UgaXRlbXMgKGFyZ3VtZW50cylcclxuXHQgKiBAcmV0dXJucyBgYW55W11gXHJcblx0ICovXHJcblx0c3RhdGljIGNsZWFuKC4uLmFyZ3M6IGFueVtdKTogYW55W10ge1xyXG5cdFx0Y29uc3QgX2NsZWFuID0gKHZhbDogc3RyaW5nKTogc3RyaW5nID0+IE9iamVjdC52YWx1ZXModGhpcy5GT1JNQVRTKS5yZWR1Y2U8c3RyaW5nPigocCwgdik9PiBwLnJlcGxhY2UobmV3IFJlZ0V4cChTdHJpbmcodikucmVwbGFjZSgvXFx4MUIvLCAnXFxcXHgxQicpLnJlcGxhY2UoL1xcWy8sICdcXFxcWycpLCAnZycpLCAnJyksIHZhbCk7XHJcblx0XHRjb25zdCB2YWx1ZXM6IGFueVtdID0gW107XHJcblx0XHRmb3IgKGNvbnN0IHZhbCBvZiBhcmdzKSB2YWx1ZXMucHVzaCgnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbCAmJiB2YWwudHJpbSgpLmxlbmd0aCA/IF9jbGVhbih2YWwpIDogdmFsKTtcclxuXHRcdHJldHVybiB2YWx1ZXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBGb3JtYXQgdGV4dFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIGZvcm1hdCB0ZXh0XHJcblx0ICogQHBhcmFtIGZvcm1hdHMgLSB0ZXh0IGZvcm1hdHNcclxuXHQgKiBAcmV0dXJucyBgc3RyaW5nYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyB0ZXh0KHZhbHVlOiBzdHJpbmcsIGZvcm1hdHM/OiBzdHJpbmd8c3RyaW5nW10pOiBzdHJpbmcge1xyXG5cdFx0Y29uc3QgX3ZhbDogc3RyaW5nID0gX3N0cmluZyh2YWx1ZSk7XHJcblx0XHRjb25zdCBfZm9ybWF0czogc3RyaW5nW10gPSBbXSwgX2Zvcm1hdHNfbGlzdDogc3RyaW5nW10gPSAoQXJyYXkuaXNBcnJheShmb3JtYXRzKSA/IGZvcm1hdHMgOiAnc3RyaW5nJyA9PT0gdHlwZW9mIGZvcm1hdHMgPyBbZm9ybWF0c10gOiBbXSk7XHJcblx0XHRmb3IgKGNvbnN0IHYgb2YgX2Zvcm1hdHNfbGlzdCl7XHJcblx0XHRcdGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHYgJiYgISF2LnRyaW0oKSkgX2Zvcm1hdHMucHVzaCh2KTtcclxuXHRcdH1cclxuXHRcdGlmICghKF9mb3JtYXRzLmxlbmd0aCAmJiBfdmFsLnRyaW0oKS5sZW5ndGgpKSByZXR1cm4gX3ZhbDtcclxuXHRcdHJldHVybiB0aGlzLmZvcm1hdChfZm9ybWF0cywgX3ZhbCkudmFsdWVzKClbMF07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQcmludCBsaW5lIH4gYGNvbnNvbGUubG9nKCcgJylgXHJcblx0ICovXHJcblx0c3RhdGljIGJyKCk6IHZvaWQge1xyXG5cdFx0Y29uc29sZS5sb2coJyAnKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFByaW50IGxvZyB+IGBjb25zb2xlLmxvZyguLilgXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGFyZ3MgLSBsb2cgYXJndW1lbnRzXHJcblx0ICovXHJcblx0c3RhdGljIGxvZyguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0dGhpcy5mb3JtYXQoJ2xvZycsIC4uLmFyZ3MpLmxvZygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJpbnQgZGVidWcgfiBgY29uc29sZS5kZWJ1ZyguLilgXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGFyZ3MgLSBsb2cgYXJndW1lbnRzXHJcblx0ICovXHJcblx0c3RhdGljIGRlYnVnKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHR0aGlzLmZvcm1hdCgnZGVidWcnLCAuLi5hcmdzKS5kZWJ1ZygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJpbnQgZXJyb3IgfiBgY29uc29sZS5lcnJvciguLilgXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGFyZ3MgLSBsb2cgYXJndW1lbnRzXHJcblx0ICovXHJcblx0c3RhdGljIGVycm9yKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHR0aGlzLmZvcm1hdCgnZXJyb3InLCAuLi5hcmdzKS5lcnJvcigpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJpbnQgd2FybmluZyB+IGBjb25zb2xlLndhcm4oLi4pYFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBhcmdzIC0gbG9nIGFyZ3VtZW50c1xyXG5cdCAqL1xyXG5cdHN0YXRpYyB3YXJuKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHR0aGlzLmZvcm1hdCgnd2FybicsIC4uLmFyZ3MpLndhcm4oKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFByaW50IGluZm8gfiBgY29uc29sZS5pbmZvKC4uKWBcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gYXJncyAtIGxvZyBhcmd1bWVudHNcclxuXHQgKi9cclxuXHRzdGF0aWMgaW5mbyguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0dGhpcy5mb3JtYXQoJ2luZm8nLCAuLi5hcmdzKS5pbmZvKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQcmludCBzdWNjZXNzIH4gYGNvbnNvbGUubG9nKCcuLicpYFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBhcmdzIC0gbG9nIGFyZ3VtZW50c1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBzdWNjZXNzKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHR0aGlzLmZvcm1hdCgnc3VjY2VzcycsIC4uLmFyZ3MpLmxvZygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGFyc2UgbGlzdCBpdGVtc1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcblx0ICogQHBhcmFtIF9lbnRyaWVzIC0gKGRlZmF1bHQ6IGBmYWxzZWApIHdoZXRoZXIgdG8gcGFyc2UgZW50cmllcyB+IGBPYmplY3QuZW50cmllcyh2YWx1ZSlgXHJcblx0ICogQHJldHVybnMgYFtsaXN0OiBhbnlbXSwgdHlwZTondmFsdWVzJ3wnZW50cmllcyddYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBsaXN0KHZhbHVlOiBhbnksIF9lbnRyaWVzOiBib29sZWFuID0gZmFsc2UpOiBbbGlzdDogYW55W10sIHR5cGU6J3ZhbHVlcyd8J2VudHJpZXMnXSB7XHJcblx0XHRsZXQgaXRlbXM6IGFueVtdID0gW3ZhbHVlID0gX2Nsb25lKHZhbHVlKV0sIHR5cGU6ICd2YWx1ZXMnfCdlbnRyaWVzJyA9ICd2YWx1ZXMnO1xyXG5cdFx0aWYgKCdvYmplY3QnID09PSB0eXBlb2YgdmFsdWUgJiYgdmFsdWUpe1xyXG5cdFx0XHRpZiAoISh0eXBlID0gdmFsdWVbU3ltYm9sLml0ZXJhdG9yXT8ubmFtZSkpe1xyXG5cdFx0XHRcdHR5cGUgPSAndmFsdWVzJztcclxuXHRcdFx0XHRpdGVtcyA9IFt2YWx1ZV07XHJcblx0XHRcdFx0aWYgKF9lbnRyaWVzICYmIF9zdHJpbmdhYmxlKHZhbHVlKSA9PT0gZmFsc2Upe1xyXG5cdFx0XHRcdFx0bGV0IHRtcDogYW55ID0gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHZhbHVlKSk7XHJcblx0XHRcdFx0XHRsZXQgdG1wX2VudHJpZXM6IFtrOiBhbnksIHY6IGFueV1bXSA9IFtdO1xyXG5cdFx0XHRcdFx0aWYgKCEoJ29iamVjdCcgPT09IHR5cGVvZiB0bXAgJiYgdG1wICYmICh0bXBfZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRtcCkpLmxlbmd0aCkpIHRtcF9lbnRyaWVzID0gT2JqZWN0LmVudHJpZXModmFsdWUpO1xyXG5cdFx0XHRcdFx0aWYgKHRtcF9lbnRyaWVzLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRcdHR5cGUgPSAnZW50cmllcyc7XHJcblx0XHRcdFx0XHRcdGl0ZW1zID0gdG1wX2VudHJpZXM7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKHR5cGUgPT09ICdlbnRyaWVzJykgaXRlbXMgPSBfZW50cmllcyA/IFsuLi52YWx1ZV0gOiBbdmFsdWVdO1xyXG5cdFx0XHRlbHNlIGl0ZW1zID0gWy4uLnZhbHVlXTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBbaXRlbXMsIHR5cGVdO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogIyMjIFByaW50IHRhYmxlIH4gYGNvbnNvbGUudGFibGVgXHJcblx0ICogXHJcblx0ICogX3VzZXMgcHJvY2VzcyBhcmd1bWVudCBvcHRpb25zIGFzIGRlZmF1bHQgdmFsdWVzIGZvciBwYXJhbXM6X1xyXG5cdCAqIC0gYGNlbGxNYXhMZW5ndGhgID0gYC0tY2VsbE1heExlbmd0aD0jI2AgKHdoZXJlIGAjI2AgaXMgcG9zaXRpdmUgaW50ZWdlcilcclxuXHQgKiAtIGBkaXZpZGVyYCA9IGAtLWRpdmlkZXJgIHwgYC0tZGl2aWRlcj1mYWxzZWBcclxuXHQgKiAtIGBub0luZGV4YCA9IGAtLW5vSW5kZXhgIHwgYC0tbm9JbmRleD1mYWxzZWBcclxuXHQgKiAtIGBudW1JbmRleGAgPSBgLS1udW1JbmRleGAgfCBgLS1udW1JbmRleD1mYWxzZWBcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gZGF0YSAtIGxvZyBkYXRhXHJcblx0ICogQHBhcmFtIGNlbGxNYXhMZW5ndGggLSAoZGVmYXVsdDogYDI1MGApIHRhYmxlIG1heCBjZWxsIGxlbmd0aCAod2lkdGgpXHJcblx0ICogQHBhcmFtIGRpdmlkZXIgLSAoZGVmYXVsdDogYGZhbHNlYCkgd2hldGhlciB0byBhZGQgcm93IGRpdmlkZXJcclxuXHQgKiBAcGFyYW0gbm9JbmRleCAtIChkZWZhdWx0OiBgZmFsc2VgKSB3aGV0aGVyIHRvIHJlbW92ZSBpbmRleCBjb2x1bW4gKFsjXSlcclxuXHQgKiBAcGFyYW0gbnVtSW5kZXggLSAoZGVmYXVsdDogYGZhbHNlYCB+IGAwYCkgd2hldGhlciBpbmRleCBjb2x1bW4gc3RhcnRzIGZyb20gYDFgXHJcblx0ICovXHJcblx0c3RhdGljIHRhYmxlKGRhdGE6IGFueSwgY2VsbE1heExlbmd0aD86IG51bWJlciwgZGl2aWRlcj86IGJvb2xlYW4sIG5vSW5kZXg/OiBib29sZWFuLCBudW1JbmRleD86IGJvb2xlYW4pOiB2b2lkIHtcclxuXHRcdFxyXG5cdFx0Ly9hcmdzXHJcblx0XHRsZXQgYXJnc19jZWxsTWF4TGVuZ3RoOiBudW1iZXJ8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdFx0bGV0IGFyZ3NfZGl2aWRlcjogYm9vbGVhbnx1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblx0XHRsZXQgYXJnc19ub0luZGV4OiBib29sZWFufHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHRcdGxldCBhcmdzX251bUluZGV4OiBib29sZWFufHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IGFyZ3NfdGV4dDogc3RyaW5nID0gdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIEFycmF5LmlzQXJyYXkocHJvY2Vzcz8uYXJndikgPyBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikuam9pbignfCcpIDogJyc7XHJcblx0XHRsZXQgYXJnc19tYXRjaDogUmVnRXhwTWF0Y2hBcnJheXxudWxsID0gYXJnc190ZXh0Lm1hdGNoKC8tLWNlbGxNYXhMZW5ndGg9KFxcZCspKFxcfHwkKS8pO1xyXG5cdFx0aWYgKGFyZ3NfbWF0Y2gpIGFyZ3NfY2VsbE1heExlbmd0aCA9IF9wb3NJbnQoYXJnc19tYXRjaFsxXSwgMCk7XHJcblx0XHRpZiAoISEoYXJnc19tYXRjaCA9IGFyZ3NfdGV4dC5tYXRjaCgvLS1kaXZpZGVyKFxcfHwkKS8pKSkgYXJnc19kaXZpZGVyID0gdHJ1ZTtcclxuXHRcdGVsc2UgaWYgKCEhKGFyZ3NfbWF0Y2ggPSBhcmdzX3RleHQubWF0Y2goLy0tZGl2aWRlcj1mYWxzZShcXHx8JCkvKSkpIGFyZ3NfZGl2aWRlciA9IGZhbHNlO1xyXG5cdFx0aWYgKCEhKGFyZ3NfbWF0Y2ggPSBhcmdzX3RleHQubWF0Y2goLy0tbm9JbmRleChcXHx8JCkvKSkpIGFyZ3Nfbm9JbmRleCA9IHRydWU7XHJcblx0XHRlbHNlIGlmICghIShhcmdzX21hdGNoID0gYXJnc190ZXh0Lm1hdGNoKC8tLW5vSW5kZXg9ZmFsc2UoXFx8fCQpLykpKSBhcmdzX25vSW5kZXggPSBmYWxzZTtcclxuXHRcdGlmICghIShhcmdzX21hdGNoID0gYXJnc190ZXh0Lm1hdGNoKC8tLW51bUluZGV4KFxcfHwkKS8pKSkgYXJnc19udW1JbmRleCA9IHRydWU7XHJcblx0XHRlbHNlIGlmICghIShhcmdzX21hdGNoID0gYXJnc190ZXh0Lm1hdGNoKC8tLW51bUluZGV4PWZhbHNlKFxcfHwkKS8pKSkgYXJnc19udW1JbmRleCA9IGZhbHNlO1xyXG5cdFx0Y2VsbE1heExlbmd0aCA9IGFyZ3NfY2VsbE1heExlbmd0aCA/PyBfcG9zSW50KGNlbGxNYXhMZW5ndGgsIDApID8/IDI1MDtcclxuXHRcdGRpdmlkZXIgPSBhcmdzX2RpdmlkZXIgPz8gZGl2aWRlciA/PyBmYWxzZTtcclxuXHRcdG5vSW5kZXggPSBhcmdzX25vSW5kZXggPz8gbm9JbmRleCA/PyBmYWxzZTtcclxuXHRcdG51bUluZGV4ID0gYXJnc19udW1JbmRleCA/PyBudW1JbmRleCA/PyBmYWxzZTtcclxuXHJcblx0XHQvL3ZhcnNcclxuXHRcdGNvbnN0IHRoYXQgPSB0aGlzO1xyXG5cdFx0Y29uc3QgW2RhdGFfaXRlbXMsIGRhdGFfdHlwZV0gPSB0aGF0Lmxpc3QoZGF0YSwgJ29iamVjdCcgPT09IHR5cGVvZiBkYXRhICYmIGRhdGEgJiYgIV9zdHJpbmdhYmxlKGRhdGEpKTtcclxuXHJcblx0XHQvL2ZuID0+IHN0ciB2YWx1ZVxyXG5cdFx0Y29uc3Qgc3RyVmFsID0gKHZhbDogYW55KTogW192YWx1ZTogc3RyaW5nLCBfZm9ybWF0OiBzdHJpbmddID0+IHtcclxuXHRcdFx0bGV0IGNvbG9yOiBzdHJpbmcsIHRtcDogYW55O1xyXG5cdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkodmFsKSAmJiAodG1wID0gX3N0cmluZ2FibGUodmFsKSkgIT09IGZhbHNlKXtcclxuXHRcdFx0XHRjb2xvciA9ICdncmVlbic7XHJcblx0XHRcdFx0aWYgKCdudW1iZXInID09PSB0eXBlb2YgdmFsKSBjb2xvciA9ICd5ZWxsb3cnO1xyXG5cdFx0XHRcdGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbCkgY29sb3IgPSAnZ3JheSc7XHJcblx0XHRcdFx0ZWxzZSBpZiAodmFsID09PSB0cnVlKSBjb2xvciA9ICdjeWFuJztcclxuXHRcdFx0XHRlbHNlIGlmICh2YWwgPT09IGZhbHNlKSBjb2xvciA9ICdyZWQnO1xyXG5cdFx0XHRcdGVsc2UgaWYgKC9eXFxkezR9LSg/OjBbMS05XXwxWzAtMl0pLSg/OlswLTJdWzEtOV18WzEtM10wfDNbMDFdKVQoPzpbMC0xXVswLTldfDJbMC0zXSkoPzo6WzAtNl1cXGQpKD86OlswLTZdXFxkKT8oPzpcXC5cXGR7M30pPyg/OlsrLV1bMC0yXVxcZDpbMC01XVxcZHxaKT8kLy50ZXN0KHRtcCkpIGNvbG9yID0gJ21hZ2VudGEnOyAvL21hdGNoIElTTyB0aW1lc3RhbXAgKGkuZS4gMjAyMy0wNi0wOVQxODoxODo1Ny4wNzBaKVxyXG5cdFx0XHRcdHZhbCA9IHRtcDtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB2YWwgJiYgdmFsKXtcclxuXHRcdFx0XHRcdGNvbnN0IF90eXBlID0gdmFsW1N5bWJvbC5pdGVyYXRvcl07XHJcblx0XHRcdFx0XHRpZiAoISFfdHlwZSl7XHJcblx0XHRcdFx0XHRcdHZhbCA9IFsuLi52YWxdO1xyXG5cdFx0XHRcdFx0XHRpZiAoX3R5cGUgPT09ICdlbnRyaWVzJykgdmFsID0gT2JqZWN0LmZyb21FbnRyaWVzKHZhbCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIHZhbCA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh2YWwpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFsID0gX2pzb25TdHJpbmdpZnkodmFsKTtcclxuXHRcdFx0XHRjb2xvciA9ICdtYWdlbnRhJztcclxuXHRcdFx0fVxyXG5cdFx0XHR2YWwgPSB2YWwucmVwbGFjZSgvXFx0L2csICcgICcpO1xyXG5cdFx0XHRjb25zdCBfdmFsOiBzdHJpbmcgPSBfc3RyRXNjYXBlKHZhbClcclxuXHRcdFx0LnJlcGxhY2UoLyhcXFxcbikrL2csICdcXG4nKS50cmltKCk7IC8vKysgbXVsdGlsaW5lIHN1cHBvcnRcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coX3ZhbCk7XHJcblx0XHRcdHJldHVybiBbX3ZhbCwgY29sb3JdO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvL3RhYmxlIGl0ZW1zXHJcblx0XHRsZXQgbW9kZTogJ3ZhbHVlcyd8J2VudHJpZXMnID0gdW5kZWZpbmVkIGFzIGFueTtcclxuXHRcdGNvbnN0IHRhYmxlX2l0ZW1zOiBhbnlbXVtdID0gW107XHJcblx0XHRpZiAoZGF0YV90eXBlID09PSAnZW50cmllcycpe1xyXG5cdFx0XHRpZiAoIW5vSW5kZXgpIHRhYmxlX2l0ZW1zLnB1c2goWydbI10nLCAnVmFsdWVzJ10pO1xyXG5cdFx0XHR0YWJsZV9pdGVtcy5wdXNoKC4uLmRhdGFfaXRlbXMpO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSB7XHJcblx0XHRcdGxldCBtYXBfa2V5czogc3RyaW5nW10gPSBbXSwgbWFwX2l0ZW1zOiB7W2tleTogc3RyaW5nXTogYW55fVtdID0gW107XHJcblx0XHRcdGZvciAobGV0IHIgPSAwOyByIDwgZGF0YV9pdGVtcy5sZW5ndGg7IHIgKyspe1xyXG5cdFx0XHRcdGNvbnN0IGRhdGFfaXRlbSA9IGRhdGFfaXRlbXNbcl07XHJcblx0XHRcdFx0bGV0IFtsaXN0X2l0ZW1zLCBsaXN0X3R5cGVdID0gdGhhdC5saXN0KGRhdGFfaXRlbSwgIXIgfHwgbW9kZSA9PT0gJ2VudHJpZXMnKTtcclxuXHRcdFx0XHRpZiAoIXIpIG1vZGUgPSBsaXN0X3R5cGU7XHJcblx0XHRcdFx0Y29uc3QgbWFwX2l0ZW06IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0X2l0ZW1zLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtID0gbGlzdF9pdGVtc1tpXTtcclxuXHRcdFx0XHRcdGxldCBrOiBzdHJpbmcsIHY6IGFueTtcclxuXHRcdFx0XHRcdGlmIChsaXN0X3R5cGUgPT09ICdlbnRyaWVzJyl7XHJcblx0XHRcdFx0XHRcdGsgPSBfc3RyKGl0ZW1bMF0sIHRydWUsIHRydWUpO1xyXG5cdFx0XHRcdFx0XHR2ID0gaXRlbVsxXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRrID0gYCR7aX1gO1xyXG5cdFx0XHRcdFx0XHR2ID0gaXRlbTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICghbWFwX2tleXMuaW5jbHVkZXMoaykpIG1hcF9rZXlzLnB1c2goayk7XHJcblx0XHRcdFx0XHRtYXBfaXRlbVtrXSA9IHY7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdG1hcF9pdGVtcy5wdXNoKG1hcF9pdGVtKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIW5vSW5kZXgpIHRhYmxlX2l0ZW1zLnB1c2goWydbI10nLCAuLi5tYXBfa2V5c10pO1xyXG5cdFx0XHRmb3IgKGxldCByID0gMDsgciA8IG1hcF9pdGVtcy5sZW5ndGg7IHIgKyspe1xyXG5cdFx0XHRcdGNvbnN0IHRhYmxlX2l0ZW06IGFueVtdID0gW10sIG1hcF9pdGVtID0gbWFwX2l0ZW1zW3JdO1xyXG5cdFx0XHRcdGZvciAoY29uc3Qga2V5IG9mIG1hcF9rZXlzKSB0YWJsZV9pdGVtLnB1c2gobWFwX2l0ZW1ba2V5XSk7XHJcblx0XHRcdFx0dGFibGVfaXRlbXMucHVzaChbLi4uKCFub0luZGV4ID8gW3IgKyAobnVtSW5kZXggPyAxIDogMCldIDogW10pLCAuLi50YWJsZV9pdGVtXSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvL3dpZHRoXHJcblx0XHRjb25zdCB3aWR0aF9tYXA6IHtba2V5OiBudW1iZXJdOiBudW1iZXJ9ID0ge307XHJcblx0XHRjb25zdCBzdHJfaXRlbXM6IFtfdmFsdWU6IHN0cmluZywgX2Zvcm1hdDogc3RyaW5nXVtdW10gPSBbXTtcclxuXHRcdGZvciAoY29uc3QgdGFibGVfaXRlbSBvZiB0YWJsZV9pdGVtcyl7XHJcblx0XHRcdGNvbnN0IHN0cl9pdGVtOiBbX3ZhbHVlOiBzdHJpbmcsIF9mb3JtYXQ6IHN0cmluZ11bXSA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRhYmxlX2l0ZW0ubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0XHRjb25zdCB2YWwgPSB0YWJsZV9pdGVtW2ldO1xyXG5cdFx0XHRcdGNvbnN0IFtfdmFsdWUsIF9mb3JtYXRdID0gc3RyVmFsKHZhbCk7XHJcblx0XHRcdFx0aWYgKCF3aWR0aF9tYXAuaGFzT3duUHJvcGVydHkoaSkpIHdpZHRoX21hcFtpXSA9IDA7XHJcblx0XHRcdFx0bGV0IHdpZHRoID0gMDsgLy8rKyBtdWx0aWxpbmUgc3VwcG9ydFxyXG5cdFx0XHRcdGZvciAoY29uc3QgdHh0IG9mIF92YWx1ZS5zcGxpdCgnXFxuJykpeyAvLysrIG11bHRpbGluZSBzdXBwb3J0XHJcblx0XHRcdFx0XHRsZXQgbGVuID0gdHh0Lmxlbmd0aDtcclxuXHRcdFx0XHRcdGlmIChjZWxsTWF4TGVuZ3RoICYmIGxlbiA+IGNlbGxNYXhMZW5ndGgpIGxlbiA9IGNlbGxNYXhMZW5ndGg7IC8vY2VsbE1heExlbmd0aCBsaW1pdFxyXG5cdFx0XHRcdFx0aWYgKGxlbiA+IHdpZHRoKSB3aWR0aCA9IGxlbjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHdpZHRoID4gd2lkdGhfbWFwW2ldKSB3aWR0aF9tYXBbaV0gPSB3aWR0aDsgLy8rKyBtdWx0aWxpbmUgc3VwcG9ydFxyXG5cdFx0XHRcdHN0cl9pdGVtLnB1c2goW192YWx1ZSwgX2Zvcm1hdF0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHN0cl9pdGVtcy5wdXNoKHN0cl9pdGVtKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL3Jvd3NcclxuXHRcdGNvbnN0IHJvd3NfbGVuOiBudW1iZXIgPSBzdHJfaXRlbXMubGVuZ3RoO1xyXG5cdFx0Zm9yIChsZXQgciA9IDA7IHIgPCBzdHJfaXRlbXMubGVuZ3RoOyByICsrKXtcclxuXHRcdFx0Y29uc3Qgc3RyX2l0ZW0gPSBzdHJfaXRlbXNbcl07XHJcblx0XHRcdGxldCBtYXhfbGluZXM6IG51bWJlciA9IDA7XHJcblx0XHRcdGxldCBzdHJfaXRlbV9saW5lczogc3RyaW5nW11bXSA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHN0cl9pdGVtLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0bGV0IFtfdmFsdWUsIF9mb3JtYXRdID0gc3RyX2l0ZW1baV07XHJcblx0XHRcdFx0aWYgKCFpIHx8ICFyKSBfZm9ybWF0ID0gKCFpICYmIHIgJiYgbW9kZSA9PT0gJ3ZhbHVlcycpID8gJ2dyYXknIDogJ3doaXRlJztcclxuXHRcdFx0XHRjb25zdCB3aWR0aDogbnVtYmVyID0gd2lkdGhfbWFwW2ldO1xyXG5cdFx0XHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0XHRcdGZvciAobGV0IHR4dCBvZiBfdmFsdWUuc3BsaXQoJ1xcbicpKXsgLy8rKyBtdWx0aWxpbmUgc3VwcG9ydFxyXG5cdFx0XHRcdFx0aWYgKHR4dC5sZW5ndGggPiB3aWR0aCl7XHJcblx0XHRcdFx0XHRcdHdoaWxlICh0eHQubGVuZ3RoID4gd2lkdGgpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBsaW5lID0gdHh0LnN1YnN0cmluZygwLCB3aWR0aCkucGFkRW5kKHdpZHRoKTtcclxuXHRcdFx0XHRcdFx0XHR0eHQgPSB0eHQuc2xpY2Uod2lkdGgpO1xyXG5cdFx0XHRcdFx0XHRcdGxpbmVzLnB1c2godGhhdC50ZXh0KGxpbmUsIF9mb3JtYXQpKTsgLy9mb3JtYXRcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAodHh0Lmxlbmd0aCkgbGluZXMucHVzaCh0aGF0LnRleHQodHh0LnBhZEVuZCh3aWR0aCksIF9mb3JtYXQpKTsgLy9mb3JtYXRcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGVsc2UgbGluZXMucHVzaCh0aGF0LnRleHQodHh0LnBhZEVuZCh3aWR0aCksIF9mb3JtYXQpKTsgLy9mb3JtYXRcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0c3RyX2l0ZW1fbGluZXMucHVzaChsaW5lcyk7XHJcblx0XHRcdFx0aWYgKG1heF9saW5lcyA8IGxpbmVzLmxlbmd0aCkgbWF4X2xpbmVzID0gbGluZXMubGVuZ3RoO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IG1heF9zdHJfaXRlbV9saW5lczogc3RyaW5nW11bXSA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCBjID0gMDsgYyA8IHN0cl9pdGVtX2xpbmVzLmxlbmd0aDsgYyArKyl7XHJcblx0XHRcdFx0Y29uc3QgbGluZXMgPSBzdHJfaXRlbV9saW5lc1tjXTtcclxuXHRcdFx0XHRjb25zdCB3aWR0aDogbnVtYmVyID0gd2lkdGhfbWFwW2NdO1xyXG5cdFx0XHRcdGNvbnN0IHN0cl9tYXhfbGluZXM6IHN0cmluZ1tdID0gW107XHJcblx0XHRcdFx0Y29uc3QgbWF4X2xpbmVzX2FycmF5OiBhbnlbXSA9IFsuLi5BcnJheShtYXhfbGluZXMpXTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1heF9saW5lc19hcnJheS5sZW5ndGg7IGkgKyspIHN0cl9tYXhfbGluZXMucHVzaChpIDwgbGluZXMubGVuZ3RoID8gbGluZXNbaV0gOiAnJy5wYWRFbmQod2lkdGgpKTtcclxuXHRcdFx0XHRtYXhfc3RyX2l0ZW1fbGluZXMucHVzaChzdHJfbWF4X2xpbmVzKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRzdHJfaXRlbV9saW5lcyA9IG1heF9zdHJfaXRlbV9saW5lcztcclxuXHRcdFx0Y29uc3QgbGluZV9yb3dzOnN0cmluZ1tdW10gPSBbXTtcclxuXHRcdFx0Zm9yIChjb25zdCBfIG9mIFsuLi5BcnJheShtYXhfbGluZXMpXSkgbGluZV9yb3dzLnB1c2goW10pO1xyXG5cdFx0XHRmb3IgKGxldCBjID0gMDsgYyA8IHN0cl9pdGVtX2xpbmVzLmxlbmd0aDsgYyArKyl7XHJcblx0XHRcdFx0Y29uc3QgbGluZXMgPSBzdHJfaXRlbV9saW5lc1tjXTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0XHRsaW5lX3Jvd3NbaV1bY10gPSBsaW5lc1tpXVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCByb3dzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0XHRjb25zdCBsZW4gPSBsaW5lX3Jvd3MubGVuZ3RoO1xyXG5cdFx0XHRjb25zdCBsaW5lc190b3AgPSBbXHJcblx0XHRcdFx0e2xpbmU6ICfilIAnLCBsZWZ0OiAn4pSM4pSAJywgbWlkOiAn4pSA4pSs4pSAJywgcmlnaHQ6ICfilIDilJAnfSxcclxuXHRcdFx0XHR7bGluZTogJ+KVkCcsIGxlZnQ6ICfilZTilZAnLCBtaWQ6ICfilZDilabilZAnLCByaWdodDogJ+KVkOKVlyd9LFxyXG5cdFx0XHRcdHtsaW5lOiAn4pSAJywgbGVmdDogJ+KVk+KUgCcsIG1pZDogJ+KVkOKVpOKVkCcsIHJpZ2h0OiAn4pSA4pWWJ30sXHJcblx0XHRcdF07XHJcblx0XHRcdGNvbnN0IGxpbmVzX21pZCA9IFtcclxuXHRcdFx0XHR7bGluZTogJ+KUgCcsIGxlZnQ6ICfilJzilIAnLCBtaWQ6ICfilIDilLzilIAnLCByaWdodDogJ+KUgOKUpCd9LFxyXG5cdFx0XHRcdHtsaW5lOiAn4pWQJywgbGVmdDogJ+KVoOKVkCcsIG1pZDogJ+KVkOKVrOKVkCcsIHJpZ2h0OiAn4pWQ4pWjJ30sXHJcblx0XHRcdFx0e2xpbmU6ICfilIAnLCBsZWZ0OiAn4pWf4pSAJywgbWlkOiAn4pSA4pWr4pSAJywgcmlnaHQ6ICfilIDilaInfSxcclxuXHRcdFx0XHR7bGluZTogJ+KUgCcsIGxlZnQ6ICfilJzilIAnLCBtaWQ6ICfilIDilLzilIAnLCByaWdodDogJ+KUgOKUpCd9LFxyXG5cdFx0XHRdO1xyXG5cdFx0XHRjb25zdCBsaW5lc19ib3R0b20gPSBbXHJcblx0XHRcdFx0e2xpbmU6ICfilIAnLCBsZWZ0OiAn4pSU4pSAJywgbWlkOiAn4pSA4pS04pSAJywgcmlnaHQ6ICfilIDilJgnfSxcclxuXHRcdFx0XHR7bGluZTogJ+KVkCcsIGxlZnQ6ICfilZrilZAnLCBtaWQ6ICfilZDilanilZAnLCByaWdodDogJ+KVkOKVnSd9LFxyXG5cdFx0XHRdO1xyXG5cdFx0XHRjb25zdCBsaW5lc19zaWRlID0gW1xyXG5cdFx0XHRcdHtsZWZ0OiAn4pSCICcsIG1pZDogJyDilIIgJywgcmlnaHQ6ICcg4pSCJ30sXHJcblx0XHRcdFx0e2xlZnQ6ICfilZEgJywgbWlkOiAnIOKVkSAnLCByaWdodDogJyDilZEnfSxcclxuXHRcdFx0XTtcclxuXHRcdFx0XHJcblx0XHRcdC8vVE9ETzogYm9yZGVyIG1vZGVzXHJcblx0XHRcdGNvbnN0IGJvcmRlck1vZGU6IG51bWJlciA9IDA7XHJcblxyXG5cdFx0XHQvL1JFRjogaHR0cHM6Ly9jYm9hcmQuY3Byb2dyYW1taW5nLmNvbS9jLXByb2dyYW1taW5nLzE1MTkzMC1hc2NpaS10YWJsZS1ib3JkZXIuaHRtbFxyXG5cdFx0XHQvLyBCT1hfRExSICAgICDilZBcclxuXHRcdFx0Ly8gQk9YX0RVRCAgICAg4pWRXHJcblx0XHRcdC8vIEJPWF9EVUwgICAgIOKVnVxyXG5cdFx0XHQvLyBCT1hfRFVSICAgICDilZpcclxuXHRcdFx0Ly8gQk9YX0RETCAgICAg4pWXXHJcblx0XHRcdC8vIEJPWF9ERFIgICAgIOKVlFxyXG5cdFx0XHQvLyBCT1hfRFVETCAgICDilaNcclxuXHRcdFx0Ly8gQk9YX0RVRFIgICAg4pWgXHJcblx0XHRcdC8vIEJPWF9EVUxSICAgIOKVqVxyXG5cdFx0XHQvLyBCT1hfRERMUiAgICDilaZcclxuXHRcdFx0Ly8gQk9YX0RVRExSICAg4pWsXHJcblx0XHRcdC8vIEJPWF9EVV9TTCAgIOKVnFxyXG5cdFx0XHQvLyBCT1hfRFVfU1IgICDilZlcclxuXHRcdFx0Ly8gQk9YX0REX1NMICAg4pWWXHJcblx0XHRcdC8vIEJPWF9ERF9TUiAgIOKVk1xyXG5cdFx0XHQvLyBCT1hfRExfU1UgICDilZtcclxuXHRcdFx0Ly8gQk9YX0RMX1NEICAg4pWVXHJcblx0XHRcdC8vIEJPWF9EUl9TVSAgIOKVmFxyXG5cdFx0XHQvLyBCT1hfRFJfU0QgICDilZJcclxuXHRcdFx0Ly8gQk9YX0RVX1NMUiAg4pWoXHJcblx0XHRcdC8vIEJPWF9ERF9TTFIgIOKVpVxyXG5cdFx0XHQvLyBCT1hfRExfU1VEICDilaFcclxuXHRcdFx0Ly8gQk9YX0RSX1NVRCAg4pWeXHJcblx0XHRcdC8vIEJPWF9ETFJfU1UgIOKVp1xyXG5cdFx0XHQvLyBCT1hfRExSX1NEICDilaRcclxuXHRcdFx0Ly8gQk9YX0RMUl9TVUQg4pWqXHJcblx0XHRcdC8vIEJPWF9EVURfU0wgIOKVolxyXG5cdFx0XHQvLyBCT1hfRFVEX1NSICDilZ9cclxuXHRcdFx0Ly8gQk9YX0RVRF9TTFIg4pWrXHJcblx0XHRcdC8vIEJPWF9TTFIgICAgIOKUgFxyXG5cdFx0XHQvLyBCT1hfU1VEICAgICDilIJcclxuXHRcdFx0Ly8gQk9YX1NVTCAgICAg4pSYXHJcblx0XHRcdC8vIEJPWF9TVVIgICAgIOKUlFxyXG5cdFx0XHQvLyBCT1hfU0RMICAgICDilJBcclxuXHRcdFx0Ly8gQk9YX1NEUiAgICAg4pSMXHJcblx0XHRcdC8vIEJPWF9TVUxSICAgIOKUtFxyXG5cdFx0XHQvLyBCT1hfU0RMUiAgICDilKxcclxuXHRcdFx0Ly8gQk9YX1NVREwgICAg4pSkXHJcblx0XHRcdC8vIEJPWF9TVURSICAgIOKUnFxyXG5cdFx0XHQvLyBCT1hfU1VETFIgICDilLxcclxuXHRcdFx0XHJcblx0XHRcdC8vLS0gdGFibGUgYm9yZGVyc1xyXG5cdFx0XHRmb3IgKGxldCBuID0gMDsgbiA8IGxpbmVfcm93cy5sZW5ndGg7IG4gKyspe1xyXG5cdFx0XHRcdGNvbnN0IGxpbmVfcm93ID0gbGluZV9yb3dzW25dO1xyXG5cdFx0XHRcdGxldCBiOiBhbnksIGJtOiBudW1iZXIgPSBib3JkZXJNb2RlID09PSAwID8gMCA6IDE7XHJcblxyXG5cdFx0XHRcdC8vLS0gYm9yZGVyIHRvcFxyXG5cdFx0XHRcdGIgPSBsaW5lc190b3BbYm1dO1xyXG5cdFx0XHRcdGlmICghbiAmJiAhcil7XHJcblx0XHRcdFx0XHRsZXQgYm9yZGVyX3RvcDogc3RyaW5nID0gYi5sZWZ0O1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lX3Jvdy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRcdFx0XHRib3JkZXJfdG9wICs9IChpID8gYi5taWQgOiAnJykgKyAnJy5wYWRFbmQod2lkdGhfbWFwW2ldLCBiLmxpbmUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ym9yZGVyX3RvcCArPSBiLnJpZ2h0O1xyXG5cdFx0XHRcdFx0cm93cy5wdXNoKGJvcmRlcl90b3ApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8tLSBib3JkZXIgc2lkZVxyXG5cdFx0XHRcdGIgPSBsaW5lc19zaWRlW2JtXTtcclxuXHRcdFx0XHRyb3dzLnB1c2goYi5sZWZ0ICsgbGluZV9yb3cuam9pbihiLm1pZCkgKyBiLnJpZ2h0KTtcclxuXHJcblx0XHRcdFx0Ly8tLSBib3JkZXIgbWlkXHJcblx0XHRcdFx0YiA9IGxpbmVzX21pZFtibV07XHJcblx0XHRcdFx0aWYgKCghciB8fCBkaXZpZGVyKSAmJiBuICsgMSA9PT0gbGVuICYmIHIgKyAxIDwgcm93c19sZW4pe1xyXG5cdFx0XHRcdFx0bGV0IGJvcmRlcl9taWQ6IHN0cmluZyA9IGIubGVmdDtcclxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZV9yb3cubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0XHRcdFx0Ym9yZGVyX21pZCArPSAoaSA/IGIubWlkIDogJycpICsgJycucGFkRW5kKHdpZHRoX21hcFtpXSwgYi5saW5lKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJvcmRlcl9taWQgKz0gYi5yaWdodDtcclxuXHRcdFx0XHRcdHJvd3MucHVzaChib3JkZXJfbWlkKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vLS0gYm9yZGVyIGJvdHRvbVxyXG5cdFx0XHRcdGIgPSBsaW5lc19ib3R0b21bYm1dO1xyXG5cdFx0XHRcdGlmIChuICsgMSA9PT0gbGVuICYmIHIgKyAxID09PSByb3dzX2xlbil7XHJcblx0XHRcdFx0XHRsZXQgYm9yZGVyX2JvdHRvbTogc3RyaW5nID0gYi5sZWZ0O1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lX3Jvdy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRcdFx0XHRib3JkZXJfYm90dG9tICs9IChpID8gYi5taWQgOiAnJykgKyAnJy5wYWRFbmQod2lkdGhfbWFwW2ldLCBiLmxpbmUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ym9yZGVyX2JvdHRvbSArPSBiLnJpZ2h0O1xyXG5cdFx0XHRcdFx0cm93cy5wdXNoKGJvcmRlcl9ib3R0b20pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zb2xlLmxvZyhyb3dzLmpvaW4oJ1xcbicpKTsgLy88PCBwcmludCB0YWJsZVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ29uc29sZSBjbGVhciBsb2dzXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBjbGVhcigpOiAoKSA9PiB2b2lkIHtcclxuXHRcdHJldHVybiBmdW5jdGlvbigpOiB2b2lkIHtcclxuXHRcdFx0Y29uc29sZS5sb2coJ1xceDFCYycpO1xyXG5cdFx0XHRjb25zb2xlLmNsZWFyKCk7XHJcblx0XHR9O1xyXG5cdH1cclxufSIsImV4cG9ydCAqIGZyb20gJy4vX1Rlcm0nOyIsImltcG9ydCB7IEZhaWxFcnJvciwgX3N0ciB9IGZyb20gJy4uL3V0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBGaWxlIGV4dGVuc2lvbiBtaW1lIHR5cGVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRVhUX01JTUVTOiB7W2V4dDogc3RyaW5nXTogc3RyaW5nfSA9IHJlcXVpcmUoJy4vX19taW1lcy5qc29uJyk7XHJcblxyXG4vKipcclxuICogTWltZSB0eXBlIG9iamVjdCBpbnRlcmZhY2UgXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElNaW1lVHlwZSB7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBwYXJzZSB2YWx1ZVxyXG5cdCAqL1xyXG5cdHZhbHVlOiBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gbWltZSB0eXBlIChlLmcuIGAnaW1hZ2UvcG5nJ2ApXHJcblx0ICovXHJcblx0dHlwZTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIGZpbGUgZXh0ZW5zaW9uIChlLmcuIGAncG5nJ2ApXHJcblx0ICovXHJcblx0ZXh0OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gcGFyc2UgZXJyb3IgdGV4dFxyXG5cdCAqL1xyXG5cdGVycm9yOiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gZ2V0IGBzdHJpbmdgIGNhc3RcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gcHJvcCAtIGdldCBwcm9wZXJ0eSAoZGVmYXVsdDogYCd0eXBlJ2ApXHJcblx0ICogQHJldHVybnMgYHN0cmluZ2BcclxuXHQgKi9cclxuXHR0b1N0cmluZzogKFxyXG5cdFx0XHJcblx0XHQvKipcclxuXHRcdCAqIC0gZ2V0IHByb3BlcnR5IChkZWZhdWx0IGAndHlwZSdgKVxyXG5cdFx0ICovXHJcblx0XHRwcm9wPzogJ3R5cGUnfCdleHQnfCdlcnJvcidcclxuXHQpPT5zdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBmaWxlIG1pbWUgdHlwZVxyXG4gKiBcclxuICogQGV4YW1wbGUgU3RyaW5nKF9taW1lKCdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04JykpID0+ICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgbWltZSB0eXBlXHJcbiAqIEBwYXJhbSBfZmFpbHVyZSAtIGBGYWlsRXJyb3JgIG1vZGUgfiBgMGAgPSBzaWxlbnQgKGRlZmF1bHQpIHwgYDFgID0gbG9ncyB3YXJuaW5nIHwgYDJgID0gbG9ncyBlcnJvciB8IGAzYCA9IHRocm93cyBlcnJvclxyXG4gKiBAcmV0dXJucyBgSU1pbWVUeXBlYCBzdHJpbmdhYmxlIG1pbWUgdHlwZSBvYmplY3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBfbWltZSA9ICh2YWx1ZTogYW55LCBfZmFpbHVyZTogMHwxfDJ8MyA9IDApOiBJTWltZVR5cGUgPT4ge1xyXG5cdFxyXG5cdC8vbWltZSB0eXBlIGl0ZW1cclxuXHRjb25zdCBpdGVtOiBJTWltZVR5cGUgPSB7XHJcblx0XHR2YWx1ZSxcclxuXHRcdHR5cGU6ICcnLFxyXG5cdFx0ZXh0OiAnJyxcclxuXHRcdGVycm9yOiAnJyxcclxuXHRcdHRvU3RyaW5nKHByb3A/OiAndHlwZSd8J2V4dCd8J2Vycm9yJyk6IHN0cmluZyB7XHJcblx0XHRcdGNvbnN0IGtleTogc3RyaW5nID0gcHJvcCAmJiBbJ21pbWUnLCAnZXh0JywgJ2Vycm9yJ11cclxuXHRcdFx0LmluY2x1ZGVzKHByb3AgPSBfc3RyKHByb3AsIHRydWUpLnRvTG93ZXJDYXNlKCkgYXMgYW55KSA/IHByb3AgKyAnJyA6ICd0eXBlJztcclxuXHRcdFx0cmV0dXJuIHRoaXNba2V5IGFzICd0eXBlJ3wnZXh0J3wnZXJyb3InXTtcclxuXHRcdH1cclxuXHR9XHJcblx0XHJcblx0Ly9wYXJzZSB2YWx1ZVxyXG5cdHRyeSB7XHJcblx0XHRjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XHJcblx0XHRjb25zdCB2YWw6IHN0cmluZyA9IF9zdHIodmFsdWUsIHRydWUpO1xyXG5cdFx0aWYgKHZhbCl7XHJcblx0XHRcdGxldCBtOiBSZWdFeHBNYXRjaEFycmF5fG51bGwgPSBudWxsO1xyXG5cdFx0XHRpZiAobSA9IHZhbC5tYXRjaCgvKFxcLnxeKShbLV8wLTlhLXpBLVpdKykkL2kpKXsgLy9leHRcclxuXHRcdFx0XHRsZXQgZXh0ID0gbVsyXS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdGlmIChleHQgPT09ICdqcGVnJykgZXh0ID0gJ2pwZyc7XHJcblx0XHRcdFx0aWYgKEVYVF9NSU1FUy5oYXNPd25Qcm9wZXJ0eShleHQpKSBpdGVtLnR5cGUgPSBFWFRfTUlNRVNbaXRlbS5leHQgPSBleHRdO1xyXG5cdFx0XHRcdGVsc2UgZXJyb3JzLnB1c2goYE1pbWUgZmlsZSBleHRlbnNpb24gXCIke2V4dH1cIiBpcyBub3Qgc3VwcG9ydGVkYCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAoL15bLV9hLXowLTldK1xcL1teXFwvXSskL2kudGVzdCh2YWwpKXsgLy9taW1lXHJcblx0XHRcdFx0Y29uc3QgZm91bmQ6IFtleHQ6IHN0cmluZywgdHlwZTogc3RyaW5nXXx1bmRlZmluZWQgPSBPYmplY3QuZW50cmllcyhFWFRfTUlNRVMpLmZpbmQodiA9PiB2WzFdLnN0YXJ0c1dpdGgodmFsLnRvTG93ZXJDYXNlKCkpIHx8IHZhbC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodlsxXSkpO1xyXG5cdFx0XHRcdGlmIChmb3VuZCl7XHJcblx0XHRcdFx0XHRsZXQgW2V4dCwgdHlwZV0gPSBmb3VuZDtcclxuXHRcdFx0XHRcdGlmIChleHQgPT09ICdqcGVnJykgZXh0ID0gJ2pwZyc7XHJcblx0XHRcdFx0XHRpdGVtLmV4dCA9IGV4dDtcclxuXHRcdFx0XHRcdGl0ZW0udHlwZSA9IHR5cGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2UgZXJyb3JzLnB1c2goYE1pbWUgdHlwZSBcIiR7dmFsfVwiIGlzIG5vdCBzdXBwb3J0ZWRgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGVycm9ycy5wdXNoKGBJbnZhbGlkIG1pbWUgdHlwZSBvciBmaWxlIGV4dGVuc2lvbiBzdHJpbmcgdmFsdWVgKTtcclxuXHRcdH1cclxuXHRcdGVsc2UgZXJyb3JzLnB1c2goJ0JsYW5rIG1pbWUgdHlwZSBvciBmaWxlIGV4dGVuc2lvbiBzdHJpbmcgdmFsdWUnKTtcclxuXHRcdGlmIChlcnJvcnMubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoaXRlbS5lcnJvciA9IGVycm9ycy5qb2luKCc7ICcpICsgJy4nKTsgLy9lcnJvciAtIHNldCwgdGhyb3dcclxuXHRcdHJldHVybiBpdGVtOyAvL3Jlc3VsdFxyXG5cdH1cclxuXHRjYXRjaCAoZTogYW55KXtcclxuXHRcdG5ldyBGYWlsRXJyb3IoZSwgX2ZhaWx1cmUsIHtpdGVtfSwgJ01pbWVUeXBlRXJyb3InKTtcclxuXHRcdHJldHVybiBpdGVtOyAvL3Jlc3VsdFxyXG5cdH1cclxufSIsImltcG9ydCB7IF9jb21tYXMsIF9qc29uU3RyaW5naWZ5LCBfcG9zSW50LCBfcm91bmQsIF9zcGxpdCwgX3N0ciB9IGZyb20gJy4uL3V0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBCYXNlbmFtZSAoc3RyaW5nYWJsZSkgb2JqZWN0IGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQmFzZW5hbWUge1xyXG5cdHZhbHVlOiBhbnk7XHJcblx0YmFzZW5hbWU6IHN0cmluZztcclxuXHRuYW1lOiBzdHJpbmc7XHJcblx0ZXh0OiBzdHJpbmc7XHJcblx0ZXJyb3I6IHN0cmluZztcclxuXHRpbGxlZ2FsOiBzdHJpbmdbXTtcclxuXHRpbnZhbGlkOiBzdHJpbmdbXTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBHZXQgYmFzZW5hbWUgdGV4dFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBwcm9wIC0gdGV4dCB2YWx1ZSBwcm9wXHJcblx0ICogQHJldHVybnMgYHN0cmluZ2BcclxuXHQgKi9cclxuXHR0b1N0cmluZzogKFxyXG5cdFx0XHJcblx0XHQvKipcclxuXHRcdCAqIFNwZWNpZnkgdGV4dCB2YWx1ZSBwcm9wIChkZWZhdWx0IGAnYmFzZW5hbWUnYClcclxuXHRcdCAqL1xyXG5cdFx0cHJvcD86ICdiYXNlbmFtZSd8J25hbWUnfCdleHQnfCdlcnJvcidcclxuXHQpPT5zdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCYXNlbmFtZSBlcnJvciBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUJhc2VuYW1lRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdGl0ZW06IElCYXNlbmFtZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB2YWxpZGF0ZWQgYmFzZW5hbWUgZnJvbSBmaWxlIHBhdGggdmFsdWVcclxuICogXHJcbiAqIC0gc3BsaXRzIHBhdGggc2VwYXJhdG9ycyBgW1xcXFwvXWAgdXNlcyBsYXN0IGVudHJ5XHJcbiAqIC0gdHJpbXMgc3BhY2VzLCBpbnZhbGlkYXRlcyBlbXB0eVxyXG4gKiAtIGludmFsaWRhdGVzIGlsbGVnYWwgY2hhcmFjdGVycyAoaS5lLiBgOj9cIjw+fCpgKVxyXG4gKiAtIGludmFsaWRhdGVzIGludmFsaWQgbmFtZXMgKGkuZS4gYCcuLi4nLCAnbmFtZS4nLCAnbmFtZS4uLidgKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgcGF0aCB2YWx1ZVxyXG4gKiBAcGFyYW0gZG90cyAtIGFsbG93IGRvdCBuYXYgfiBgJy4nIHwgJy4uJ2AgKGRlZmF1bHQ6IGBmYWxzZWApXHJcbiAqIEBwYXJhbSBfc3RyaWN0IC0gc3RyaWN0IHBhcnNpbmcgfiByZXR1cm5zIGJsYW5rIChgJydgKSB2YWx1ZXMgb24gZXJyb3JcclxuICogQHBhcmFtIF9mYWlsdXJlIC0gZXJyb3IgaGFuZGxpbmcgfiBgMGAgPSBpZ25vcmUsICcxJyA9IHdhcm4sIGAyYCA9IHRocm93IGVycm9yIChkZWZhdWx0IGAwYClcclxuICogQHJldHVybnMgYElCYXNlbmFtZWAgYmFzZW5hbWUgKHN0cmluZ2FibGUpXHJcbiAqIEB0aHJvd3MgYElCYXNlbmFtZUVycm9yYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9iYXNlbmFtZSA9ICh2YWx1ZTogYW55LCBkb3RzOiBib29sZWFuID0gZmFsc2UsIF9zdHJpY3Q6IGJvb2xlYW4gPSBmYWxzZSwgX2ZhaWx1cmU/OiAwfDF8Mik6IElCYXNlbmFtZSA9PiB7XHJcblx0Y29uc3QgZmFpbHVyZTogMHwxfDIgPSBbMCwgMSwgMl0uaW5jbHVkZXMoX2ZhaWx1cmUgPSBwYXJzZUludChfZmFpbHVyZSArICcnKSBhcyBhbnkpID8gX2ZhaWx1cmUgYXMgKDB8MXwyKSA6IDA7XHJcblxyXG5cdC8vYmFzZW5hbWUgaXRlbVxyXG5cdGNvbnN0IGl0ZW06IElCYXNlbmFtZSA9IHtcclxuXHRcdHZhbHVlLFxyXG5cdFx0YmFzZW5hbWU6ICcnLFxyXG5cdFx0bmFtZTogJycsXHJcblx0XHRleHQ6ICcnLFxyXG5cdFx0ZXJyb3I6ICcnLFxyXG5cdFx0aWxsZWdhbDogW10sXHJcblx0XHRpbnZhbGlkOiBbXSxcclxuXHRcdHRvU3RyaW5nKHByb3A/OiAnYmFzZW5hbWUnfCduYW1lJ3wnZXh0J3wnZXJyb3InKTogc3RyaW5nIHtcclxuXHRcdFx0Y29uc3Qga2V5OiBzdHJpbmcgPSBwcm9wICYmIFsnYmFzZW5hbWUnLCAnbmFtZScsICdleHQnLCAnZXJyb3InXVxyXG5cdFx0XHQuaW5jbHVkZXMocHJvcCA9IF9zdHIocHJvcCwgdHJ1ZSkudG9Mb3dlckNhc2UoKSBhcyBhbnkpID8gcHJvcCArICcnIDogJ2Jhc2VuYW1lJztcclxuXHRcdFx0cmV0dXJuIHRoaXNba2V5IGFzICdiYXNlbmFtZSd8J25hbWUnfCdleHQnfCdlcnJvciddO1xyXG5cdFx0fSxcclxuXHR9O1xyXG5cclxuXHQvL3BhcnNlIHZhbHVlXHJcblx0bGV0IG06IFJlZ0V4cE1hdGNoQXJyYXl8bnVsbCA9IG51bGw7XHJcblx0Y29uc3QgdmFsID0gaXRlbS5uYW1lID0gaXRlbS5iYXNlbmFtZSA9IF9zdHIoX3N0cih2YWx1ZSwgdHJ1ZSkuc3BsaXQoL1tcXFxcXFwvXS9nKS5wb3AoKSwgdHJ1ZSk7XHJcblx0aWYgKG0gPSB2YWwubWF0Y2goLyhbXlxcXFwvXSopJC9pKSl7XHJcblx0XHRpdGVtLm5hbWUgPSBtWzFdO1xyXG5cdFx0aWYgKG0gPSBpdGVtLm5hbWUubWF0Y2goLyguKikoXFwuKFstXzAtOWEtekEtWl0rKSkkL2kpKXtcclxuXHRcdFx0aXRlbS5uYW1lID0gbVsxXTtcclxuXHRcdFx0aXRlbS5leHQgPSBtWzNdO1xyXG5cdFx0fVxyXG5cdH1cclxuXHR0cnkge1xyXG5cdFx0Y29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0aWYgKCF2YWwpIGVycm9ycy5wdXNoKCdUaGUgYmFzZW5hbWUgc3RyaW5nIHZhbHVlIGlzIGVtcHR5Jyk7XHJcblx0XHRlbHNlIHtcclxuXHJcblx0XHRcdC8vZG90c1xyXG5cdFx0XHRpZiAoIWRvdHMgJiYgWycuLicsICcuLiddLmluY2x1ZGVzKHZhbCkpe1xyXG5cdFx0XHRcdGl0ZW0uaW52YWxpZC5wdXNoKHZhbCk7XHJcblx0XHRcdFx0ZXJyb3JzLnB1c2goYFRoZSBiYXNlbmFtZSBcIiR7dmFsfVwiIGRvdHMgbm90IGFsbG93ZWRgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly9pbnZhbGlkXHJcblx0XHRcdGlmICgvXlxcLlxcLltcXC5dKyQvLnRlc3QodmFsKSB8fCAvW15cXC5dW1xcLl0rJC8udGVzdCh2YWwpKXtcclxuXHRcdFx0XHRpZiAoIWl0ZW0uaW52YWxpZC5sZW5ndGgpIGl0ZW0uaW52YWxpZC5wdXNoKHZhbCk7XHJcblx0XHRcdFx0ZXJyb3JzLnB1c2goYFRoZSBiYXNlbmFtZSBcIiR7dmFsfVwiIGZvcm1hdCBpcyBpbnZhbGlkYCk7XHJcblx0XHRcdH1cclxuXHRcdFx0XHJcblx0XHRcdC8vaWxsZWdhbFxyXG5cdFx0XHRpZiAobSA9IHZhbC5tYXRjaCgvW1xcOlxcP1xcXCJcXDxcXD5cXHxcXCpdL2cpKXtcclxuXHRcdFx0XHRpdGVtLmlsbGVnYWwucHVzaCguLi5tKTtcclxuXHRcdFx0XHRlcnJvcnMucHVzaChgVGhlIGJhc2VuYW1lIFwiJHt2YWx9XCIgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzICg6P1wiPD58KikgPT4gXCIke20uam9pbignJyl9XCJgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKGVycm9ycy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcihpdGVtLmVycm9yID0gZXJyb3JzLmpvaW4oJzsgJykgKyAnLicpOyAvL2Vycm9yIC0gc2V0LCB0aHJvd1xyXG5cdFx0cmV0dXJuIGl0ZW07IC8vcmVzdWx0XHJcblx0fVxyXG5cdGNhdGNoIChlOiBhbnkpe1xyXG5cdFx0aWYgKF9zdHJpY3QpeyAvL3N0cmljdCAtIGNsZWFyXHJcblx0XHRcdGl0ZW0uYmFzZW5hbWUgPSAnJztcclxuXHRcdFx0aXRlbS5uYW1lID0gJyc7XHJcblx0XHRcdGl0ZW0uZXh0ID0gJyc7XHJcblx0XHR9XHJcblx0XHRpZiAoZmFpbHVyZSl7IC8vZmFpbHVyZSAtIGN1c3RvbSBlcnJvclxyXG5cdFx0XHRjbGFzcyBCYXNlbmFtZUVycm9yIGV4dGVuZHMgRXJyb3IgaW1wbGVtZW50cyBJQmFzZW5hbWVFcnJvciB7XHJcblx0XHRcdFx0bmFtZTogc3RyaW5nID0gJ0Jhc2VuYW1lRXJyb3InO1xyXG5cdFx0XHRcdGl0ZW06IElCYXNlbmFtZSA9IGl0ZW07XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgZXJyb3IgPSBuZXcgQmFzZW5hbWVFcnJvcihgJHtlLm1lc3NhZ2UgfHwgZX1gKTtcclxuXHRcdFx0aWYgKGZhaWx1cmUgPT09IDIpIHRocm93IGVycm9yOyAvL3Rocm93XHJcblx0XHRcdGVsc2UgY29uc29sZS53YXJuKGVycm9yICsgJycsIHtpdGVtfSk7IC8vd2FyblxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGl0ZW07IC8vcmVzdWx0XHJcblx0fVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIE5vcm1hbGl6ZWQgcGF0aCAoc3RyaW5nYWJsZSkgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElGaWxlUGF0aCB7XHJcblx0dmFsdWU6IGFueTtcclxuXHRyb290OiBzdHJpbmc7XHJcblx0ZHJpdmU6IHN0cmluZztcclxuXHRwYXRoOiBzdHJpbmc7XHJcblx0ZGlyOiBzdHJpbmc7XHJcblx0YmFzZW5hbWU6IHN0cmluZztcclxuXHRuYW1lOiBzdHJpbmc7XHJcblx0ZXh0OiBzdHJpbmc7XHJcblx0ZXJyb3I6IHN0cmluZztcclxuXHRpbGxlZ2FsOiBzdHJpbmdbXTtcclxuXHRpbnZhbGlkOiBzdHJpbmdbXTtcclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHBhdGggdGV4dFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBwcm9wIC0gdGV4dCB2YWx1ZSBwcm9wXHJcblx0ICogQHJldHVybnMgYHN0cmluZ2BcclxuXHQgKi9cclxuXHR0b1N0cmluZzogKFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU3BlY2lmeSB0ZXh0IHZhbHVlIHByb3AgKGRlZmF1bHQ6IGAncGF0aCdgKVxyXG5cdFx0ICogLSB1c2UgYCdmaWxlJ2AgdG8gZW5mb3JjZSB2YWxpZCBiYXNlbmFtZSBhbmQgbm8gZXJyb3JcclxuXHRcdCAqL1xyXG5cdFx0cHJvcD86ICdmaWxlJ3wncm9vdCd8J2RyaXZlJ3wncGF0aCd8J2Rpcid8J2Jhc2VuYW1lJ3wnbmFtZSd8J2V4dCd8J2Vycm9yJ1xyXG5cdCk9PnN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIE5vcm1hbGl6ZWQgcGF0aCBlcnJvciBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUZpbGVQYXRoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdGl0ZW06IElGaWxlUGF0aDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBub3JtYWxpemVkIGZpbGUvZGlyZWN0b3J5IHBhdGggKHZhbGlkYXRlcyBiYXNlbmFtZSlcclxuICogXHJcbiAqIC0gdHJpbXMgc3BhY2VzLCBzaWxlbnRseSBvbWl0cyBlbXB0eVxyXG4gKiAtIGludmFsaWRhdGVzIGlsbGVnYWwgcGF0aCBuYW1lIGNoYXJhY3RlcnMgKGkuZS4gYDo/XCI8PnwqYClcclxuICogLSBpbnZhbGlkYXRlcyBpbnZhbGlkIHBhdGggbmFtZSBkb3RzIChpLmUuIGAnLi4uJywgJ25hbWUuJywgJ25hbWUuLi4nYClcclxuICogLSBpbnZhbGlkYXRlcyBvdXRib3VuZCByb290IGRvdCBuYXZcclxuICogLSBub3JtYWxpemVzIGRvdCBwYXRoXHRcdFx0KGkuZS4gYCcvLidgID0+IGAnLydgLCBgJ2EvYi8uL2MnID0+ICdhL2IvYydgLCBgJy4vYS8uLi9iL2MnID0+ICcuL2IvYydgKSBpZ25vcmVzIG91dCBvZiBib3VuZCAoaS5lLiBgJ0M6L2EvLi4vLi4vYi9jJyA9PiAnQzovYi9jJ2ApXHJcbiAqIC0gbm9ybWFsaXplcyBkcml2ZSBsZXR0ZXJcdChpLmUuIGAnYzpcXFxcYS50eHQnID0+ICdDOlxcXFxhLnR4dCdgLCBgJ2M6J2AgPT4gYCdDOlxcXFwnYClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHBhdGggdmFsdWVcclxuICogQHBhcmFtIHNlcGFyYXRvciAtIHJlc3VsdCBwYXRoIHNlcGFyYXRvciB+IGAnJyB8ICcvJyB8ICdcXFxcJ2AgKGRlZmF1bHQgYCcnYCA9IHVuY2hhbmdlZClcclxuICogQHBhcmFtIF9zdHJpY3QgLSBzdHJpY3QgcGFyc2luZyB+IHJldHVybnMgYmxhbmsgKGAnJ2ApIHZhbHVlcyBvbiBlcnJvclxyXG4gKiBAcGFyYW0gX3R5cGUgLSBwYXRoIHR5cGUgKGRlZmF1bHQgYCcnYCkgfiBuYW1lIHVzZWQgaW4gZXJyb3IgbWVzc2FnZSAoaS5lLiBgJ1RoZSAke190eXBlfSBwYXRoLi4uJ2ApXHJcbiAqIEBwYXJhbSBfZmFpbHVyZSAtIGVycm9yIGhhbmRsaW5nIH4gYDBgID0gaWdub3JlLCAnMScgPSB3YXJuLCBgMmAgPSB0aHJvdyBlcnJvciAoZGVmYXVsdCBgMGApXHJcbiAqIEByZXR1cm5zIGBJRmlsZVBhdGhgIG5vcm1hbGl6ZWQgcGF0aCAoc3RyaW5nYWJsZSlcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZmlsZXBhdGggPSAodmFsdWU6IGFueSwgc2VwYXJhdG9yPzogJyd8Jy8nfCdcXFxcJywgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlLCBfdHlwZT86IHN0cmluZywgX2ZhaWx1cmU/OiAwfDF8Mik6IElGaWxlUGF0aCA9PiB7XHJcblx0Y29uc3Qgc2VwOiAnJ3wnLyd8J1xcXFwnID0gWycnLCAnLycsICdcXFxcJ10uaW5jbHVkZXMoc2VwYXJhdG9yID0gX3N0cihzZXBhcmF0b3IsIHRydWUpIGFzIGFueSkgPyBzZXBhcmF0b3IgYXMgKCcnfCcvJ3wnXFxcXCcpIDogJyc7XHJcblx0Y29uc3QgdHlwZTogc3RyaW5nID0gKF90eXBlID0gX3N0cihfdHlwZSwgdHJ1ZSkucmVwbGFjZSgvcGF0aFxccyokL2ksICcnKS50cmltKCkpID8gX3R5cGUgKyAnICcgOiAnJztcclxuXHRjb25zdCBmYWlsdXJlOiAwfDF8MiA9IFswLCAxLCAyXS5pbmNsdWRlcyhfZmFpbHVyZSA9IHBhcnNlSW50KF9mYWlsdXJlICsgJycpIGFzIGFueSkgPyBfZmFpbHVyZSBhcyAoMHwxfDIpIDogMDtcclxuXHRcclxuXHQvL25vcm1hbGl6ZWQgcGF0aCBpdGVtXHJcblx0Y29uc3QgaXRlbTogSUZpbGVQYXRoID0ge1xyXG5cdFx0dmFsdWUsXHJcblx0XHRyb290OiAnJyxcclxuXHRcdGRyaXZlOiAnJyxcclxuXHRcdHBhdGg6ICcnLFxyXG5cdFx0ZGlyOiAnJyxcclxuXHRcdGJhc2VuYW1lOiAnJyxcclxuXHRcdG5hbWU6ICcnLFxyXG5cdFx0ZXh0OiAnJyxcclxuXHRcdGVycm9yOiAnJyxcclxuXHRcdGlsbGVnYWw6IFtdLFxyXG5cdFx0aW52YWxpZDogW10sXHJcblx0XHR0b1N0cmluZyhwcm9wPzogJ2ZpbGUnfCdyb290J3wnZHJpdmUnfCdwYXRoJ3wnZGlyJ3wnYmFzZW5hbWUnfCduYW1lJ3wnZXh0J3wnZXJyb3InKTogc3RyaW5nIHtcclxuXHRcdFx0bGV0IGtleTogc3RyaW5nID0gcHJvcCAmJiBbJ2ZpbGUnLCAncm9vdCcsICdkcml2ZScsICdwYXRoJywgJ2RpcicsICdiYXNlbmFtZScsICduYW1lJywgJ2V4dCcsICdlcnJvciddXHJcblx0XHRcdC5pbmNsdWRlcyhwcm9wID0gX3N0cihwcm9wLCB0cnVlKS50b0xvd2VyQ2FzZSgpIGFzIGFueSkgPyBwcm9wICsgJycgOiAncGF0aCc7XHJcblx0XHRcdGlmIChrZXkgPT09ICdmaWxlJyl7XHJcblx0XHRcdFx0aWYgKCEoIXRoaXMuZXJyb3IgJiYgdGhpcy5iYXNlbmFtZSkpIHJldHVybiAnJztcclxuXHRcdFx0XHRrZXkgPSAncGF0aCc7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRoaXNba2V5IGFzICdyb290J3wnZHJpdmUnfCdwYXRoJ3wnZGlyJ3wnYmFzZW5hbWUnfCduYW1lJ3wnZXh0J3wnZXJyb3InXTtcclxuXHRcdH0sXHJcblx0fTtcclxuXHJcblx0Ly9wYXJzZSBwYXRoXHJcblx0bGV0IHBhdGg6IHN0cmluZyA9IF9zdHIodmFsdWUsIHRydWUpO1xyXG5cdHRyeSB7XHJcblx0XHRsZXQgcm9vdCA9ICcnLCBkcml2ZSA9ICcnLCBtOiBSZWdFeHBNYXRjaEFycmF5fG51bGwgPSBudWxsO1xyXG5cdFx0Y29uc3QgaXRlbXM6IFtwYXJ0OiBzdHJpbmcsIGRpdjogc3RyaW5nXVtdID0gW107XHJcblx0XHRjb25zdCBwYXRoX3BhcnRzOiBbcGFydDogc3RyaW5nLCBkaXY6IHN0cmluZ11bXSA9IF9zcGxpdChwYXRoLCAvW1xcXFxcXC9dLyk7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGhfcGFydHMubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0bGV0IFtwYXJ0LCBkaXZdID0gcGF0aF9wYXJ0c1tpXTtcclxuXHRcdFx0ZGl2ID0gZGl2ID8gKHNlcCA/IHNlcCA6IGRpdikgOiAnJztcclxuXHRcdFx0aWYgKCFpKXtcclxuXHRcdFx0XHRpZiAoL1thLXpdXFw6L2kudGVzdChwYXJ0KSkgcm9vdCA9IGRyaXZlID0gcGFydC50b1VwcGVyQ2FzZSgpICsgKChzZXAgPyBzZXAgOiBkaXYpIHx8ICdcXFxcJyk7XHJcblx0XHRcdFx0ZWxzZSBpZiAoIXBhcnQgJiYgZGl2KSByb290ID0gZGl2O1xyXG5cdFx0XHRcdGlmIChyb290KSBjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpdGVtcy5wdXNoKFtwYXJ0LCBkaXZdKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL3BhcnNlIGl0ZW1zIC0gdHJpbSBiYXNlbmFtZVxyXG5cdFx0Y29uc3QgdHJpbW1lZF9wYXJ0czogW3BhcnQ6IHN0cmluZywgZGl2OiBzdHJpbmddW10gPSBbXTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0bGV0IFtwYXJ0LCBkaXZdID0gaXRlbXNbaV07XHJcblx0XHRcdHBhcnQgPSBfc3RyKHBhcnQsIHRydWUpO1xyXG5cdFx0XHRpZiAoaSAmJiAhcGFydCkgY29udGludWU7IC8vc2tpcCBibGFuayAoJycpIGVudHJpZXNcclxuXHRcdFx0dHJpbW1lZF9wYXJ0cy5wdXNoKFtwYXJ0LCBkaXZdKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL3BhcnNlIHRyaW1tZWQgLSBub3JtYWxpemUgZG90IHBhdGhcclxuXHRcdGNvbnN0IG5vcm1fcGFydHM6IFtwYXJ0OiBzdHJpbmcsIGRpdjogc3RyaW5nXVtdID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRyaW1tZWRfcGFydHMubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0bGV0IFtwYXJ0LCBkaXZdID0gdHJpbW1lZF9wYXJ0c1tpXTtcclxuXHRcdFx0aWYgKHBhcnQgPT09ICcuJyAmJiAoIWkgJiYgcm9vdCB8fCBpKSl7IC8vbWF0Y2ggZG90IHBhdGggKCcuJykgKGF0IHN0YXJ0IHdpdGggcm9vdCwgbm90IGF0IHN0YXJ0KVxyXG5cdFx0XHRcdGlmIChpICYmIGkgPT09IHRyaW1tZWRfcGFydHMubGVuZ3RoIC0gMSkgdHJpbW1lZF9wYXJ0c1tpIC0gMV1bMV0gPSAnJzsgLy9pZiBsYXN0IHJlbW92ZSBwcmV2aW91cyBzZXBhcmF0b3JcclxuXHRcdFx0XHRjb250aW51ZTsgLy9za2lwIHVubmVjZXNzYXJ5IGRvdCBwYXRoICgnLicpXHJcblx0XHRcdH1cclxuXHRcdFx0bm9ybV9wYXJ0cy5wdXNoKFtwYXJ0LCBkaXZdKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL3BhcnNlIG5vcm1hbGl6ZWQgLSB2YWxpZGF0ZSBwYXJ0c1xyXG5cdFx0Y29uc3QgaW52YWxpZDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XHJcblx0XHRjb25zdCBpbGxlZ2FsOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHRcdGNvbnN0IG91dGJvdW5kOiBbcGFydDogc3RyaW5nLCBkaXY6IHN0cmluZ11bXSA9IFtdO1xyXG5cdFx0Y29uc3QgcGFydHM6IFtwYXJ0OiBzdHJpbmcsIGRpdjogc3RyaW5nXVtdID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG5vcm1fcGFydHMubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0Y29uc3QgW3BhcnQsIGRpdl0gPSBub3JtX3BhcnRzW2ldOyAvL3BhcnQgZW50cnlcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRfYmFzZW5hbWUocGFydCwgdHJ1ZSwgZmFsc2UsIDIpOyAvL3ZhbGlkYXRlIGJhc2VuYW1lXHJcblx0XHRcdH1cclxuXHRcdFx0Y2F0Y2ggKGU6IGFueSkge1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGU/Lml0ZW0/LmludmFsaWQpICYmIGUuaXRlbS5pbnZhbGlkLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHYgb2YgZS5pdGVtLmludmFsaWQpIGludmFsaWQuYWRkKHYpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShlPy5pdGVtPy5pbGxlZ2FsKSAmJiBlLml0ZW0uaWxsZWdhbC5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCB2IG9mIGUuaXRlbS5pbGxlZ2FsKSBpbGxlZ2FsLmFkZCh2KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHBhcnQgPT09ICcuLicpeyAvL2RvdCBwYXRoICgnLi4nKSBuYXZcclxuXHRcdFx0XHRpZiAocGFydHMubGVuZ3RoKXsgLy9wb3AgcGFyZW50XHJcblx0XHRcdFx0XHRjb25zdCBwID0gcGFydHMubGVuZ3RoIC0gMTtcclxuXHRcdFx0XHRcdGlmIChwID4gLTEgJiYgISFwYXJ0c1twXVswXSAmJiAhWycuJywgJy4uJ10uaW5jbHVkZXMocGFydHNbcF1bMF0pKXtcclxuXHRcdFx0XHRcdFx0cGFydHMucG9wKCk7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGlmIChyb290KXsgLy9yb290IHBhcmVudCAtIG91dGJvdW5kIFxyXG5cdFx0XHRcdFx0b3V0Ym91bmQucHVzaChbcGFydCwgZGl2XSk7XHJcblx0XHRcdFx0XHRpZiAoZHJpdmUpIGNvbnRpbnVlOyAvL2lnbm9yZSB3aGVuIHJvb3QgaXMgZHJpdmVcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cGFydHMucHVzaChbcGFydCwgZGl2XSk7IC8vYWRkIGVudHJ5XHJcblx0XHR9XHJcblx0XHRpZiAocm9vdCAmJiBwYXJ0cy5sZW5ndGggJiYgIXBhcnRzWzBdWzBdICYmIHBhcnRzWzBdWzFdKSBwYXJ0c1swXVsxXSA9ICcnOyAvL2ZpeCByb290IHNlcGFyYXRvclxyXG5cdFx0aWYgKG91dGJvdW5kLmxlbmd0aCkgb3V0Ym91bmQucHVzaCguLi5wYXJ0cyk7IC8vb3V0Ym91bmQgZW50cmllc1xyXG5cclxuXHRcdC8vdXBkYXRlIGl0ZW0gLSBzZXQgcm9vdCwgZHJpdmUsIGRpciwgYmFzZW5hbWUsIGV4dCwgZGlyXHJcblx0XHRpdGVtLnJvb3QgPSByb290O1xyXG5cdFx0aXRlbS5kcml2ZSA9IGRyaXZlO1xyXG5cclxuXHRcdC8vam9pbiBwYXJ0cyAtIHVwZGF0ZSBkaXIsIHBhdGhcclxuXHRcdGxldCB0bXBfcGF0aDogc3RyaW5nID0gJyc7XHJcblx0XHRmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHRtcF9wYXRoICs9IHBhcnQuam9pbignJyk7XHJcblx0XHRpdGVtLmRpciA9IGl0ZW0ucGF0aCA9IHBhdGggPSByb290ICsgdG1wX3BhdGgucmVwbGFjZSgvW1xcXFwvXSQvLCAnJyk7XHJcblxyXG5cdFx0Ly91cGRhdGUgaXRlbSAtIHNldCBiYXNlbmFtZSwgbmFtZSwgZXh0LCBkaXJcclxuXHRcdGNvbnN0IGVuZCA9IHBhcnRzLnBvcCgpO1xyXG5cdFx0aWYgKGVuZCAmJiAhWycnLCAnLicsICcuLiddLmluY2x1ZGVzKGVuZFswXSkpe1xyXG5cdFx0XHRjb25zdCBiYXNlbmFtZTogSUJhc2VuYW1lID0gX2Jhc2VuYW1lKGVuZFswXSk7XHJcblx0XHRcdGl0ZW0uYmFzZW5hbWUgPSBiYXNlbmFtZS5iYXNlbmFtZTtcclxuXHRcdFx0aXRlbS5uYW1lID0gYmFzZW5hbWUubmFtZTtcclxuXHRcdFx0aXRlbS5leHQgPSBiYXNlbmFtZS5leHQ7XHJcblxyXG5cdFx0XHQvL2pvaW4gcGFydHMgLSB1cGRhdGUgZGlyXHJcblx0XHRcdHRtcF9wYXRoID0gJyc7XHJcblx0XHRcdGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykgdG1wX3BhdGggKz0gcGFydC5qb2luKCcnKTtcclxuXHRcdFx0aXRlbS5kaXIgPSByb290ICsgdG1wX3BhdGgucmVwbGFjZSgvW1xcXFwvXSQvLCAnJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9jaGVjayBlcnJvcnMgLSB1cGRhdGUgaXRlbVxyXG5cdFx0Y29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0dG1wX3BhdGggPSAnJztcclxuXHRcdGZvciAoY29uc3QgcGFydCBvZiBvdXRib3VuZCkgdG1wX3BhdGggKz0gcGFydC5qb2luKCcnKTtcclxuXHRcdGNvbnN0IG91dGJvdW5kX3BhdGggPSB0bXBfcGF0aCA/IHJvb3QgKyB0bXBfcGF0aCA6ICcnO1xyXG5cdFx0aWYgKG91dGJvdW5kX3BhdGgpIGVycm9ycy5wdXNoKGBUaGUgJHt0eXBlfXJvb3QgKCR7cm9vdH0pIGRvdCBuYXYgcGF0aCBpcyBvdXRib3VuZCBcIiR7b3V0Ym91bmRfcGF0aH1cIiA9PiBcIiR7cGF0aH1cImApOyAvL291dGJvdW5kXHJcblx0XHRpZiAoaW52YWxpZC5zaXplKSBlcnJvcnMucHVzaChgVGhlICR7dHlwZX1wYXRoIGNvbnRhaW5zIGludmFsaWQgbmFtZSR7aW52YWxpZC5zaXplID4gMSA/ICdzJyA6ICcnfSAoJHtfanNvblN0cmluZ2lmeShbLi4uaW52YWxpZF0pfSlgKTsgLy9pbnZhbGlkXHJcblx0XHRpZiAoaWxsZWdhbC5zaXplKSBlcnJvcnMucHVzaChgVGhlICR7dHlwZX1wYXRoIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycyAoOj9cIjw+fCopID0+IFwiJHtbLi4uaWxsZWdhbF0uam9pbignJyl9XCJgKTsgLy9pbGxlZ2FsXHJcblx0XHRpZiAoZXJyb3JzLmxlbmd0aCl7IC8vdGhyb3cgZXJyb3JzXHJcblx0XHRcdGl0ZW0uaW52YWxpZCA9IFsuLi5pbnZhbGlkXTtcclxuXHRcdFx0aXRlbS5pbGxlZ2FsID0gWy4uLmlsbGVnYWxdO1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoaXRlbS5lcnJvciA9IGVycm9ycy5qb2luKCc7ICcpICsgJy4nKTsgLy9lcnJvciAtIHNldCwgdGhyb3dcclxuXHRcdH1cclxuXHRcdHJldHVybiBpdGVtOyAvLzw8IHJlc3VsdCAtIElGaWxlUGF0aFxyXG5cdH1cclxuXHRjYXRjaCAoZTogYW55KXtcclxuXHRcdGlmIChfc3RyaWN0KXsgLy9zdHJpY3QgLSBjbGVhclxyXG5cdFx0XHRpdGVtLnJvb3QgPSAnJztcclxuXHRcdFx0aXRlbS5kcml2ZSA9ICcnO1xyXG5cdFx0XHRpdGVtLnBhdGggPSAnJztcclxuXHRcdFx0aXRlbS5kaXIgPSAnJztcclxuXHRcdFx0aXRlbS5iYXNlbmFtZSA9ICcnO1xyXG5cdFx0XHRpdGVtLm5hbWUgPSAnJztcclxuXHRcdFx0aXRlbS5leHQgPSAnJztcclxuXHRcdH1cclxuXHRcdGlmIChmYWlsdXJlKXsgLy9mYWlsdXJlIC0gY3VzdG9tIGVycm9yXHJcblx0XHRcdGNsYXNzIE5vcm1QYXRoRXJyb3IgZXh0ZW5kcyBFcnJvciBpbXBsZW1lbnRzIElGaWxlUGF0aEVycm9yIHtcclxuXHRcdFx0XHRuYW1lOiBzdHJpbmcgPSAnTm9ybVBhdGhFcnJvcic7XHJcblx0XHRcdFx0aXRlbTogSUZpbGVQYXRoID0gaXRlbTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBlcnJvciA9IG5ldyBOb3JtUGF0aEVycm9yKGAke2UubWVzc2FnZSB8fCBlfWApO1xyXG5cdFx0XHRpZiAoZmFpbHVyZSA9PT0gMikgdGhyb3cgZXJyb3I7IC8vdGhyb3dcclxuXHRcdFx0ZWxzZSBjb25zb2xlLndhcm4oZXJyb3IgKyAnJywge2l0ZW19KTsgLy93YXJuXHJcblx0XHR9XHJcblx0XHRyZXR1cm4gaXRlbTsgLy88PCByZXN1bHQgLSBJRmlsZVBhdGggKGZhaWxlZClcclxuXHR9XHJcbn07IiwiZXhwb3J0ICogZnJvbSAnLi9fbWltZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX3BhdGgnOyIsImV4cG9ydCAqIGZyb20gJy4vM3JkLXBhcnR5JztcclxuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL0VsYXBzZWRUaW1lJztcclxuZXhwb3J0ICogZnJvbSAnLi9UZXJtJztcclxuZXhwb3J0ICogZnJvbSAnLi9BbmltYXRlJztcclxuZXhwb3J0ICogZnJvbSAnLi9FdmVudEVtaXR0ZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL0V4Y2VwdGlvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vVGFza3MnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ZpbGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0FscGhhTnVtJzsiLCJleHBvcnQgKiBmcm9tICcuL19jb21tb24nO1xyXG4iLCIvKipcclxuICogU3BsaXQgYGFycmF5YCBpbnRvIGJhdGNoZXMgYFRbXVtdYCBvZiBzcGVjaWZpZWQgc2l6ZS5cclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9iYXRjaFZhbHVlczxudW1iZXI+KFsxLDIsMyw0LDUsNiw3LDhdLCAzKSA9PiBbWzEsMiwzXSxbNCw1LDZdLFs3LDhdXVxyXG4gKiBcclxuICogQHBhcmFtIGFycmF5ICBCYXRjaCB2YWx1ZXNcclxuICogQHBhcmFtIGJhdGNoU2l6ZSAgQmF0Y2ggc2l6ZSBgeCA+IDBgLlxyXG4gKiBAcmV0dXJucyBgPFQgPSBhbnk+W11bXWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYmF0Y2hWYWx1ZXMgPSA8VCA9IGFueT4oYXJyYXk6IFRbXSwgYmF0Y2hTaXplOiBudW1iZXIpOiBUW11bXSA9PiB7XHJcblx0aWYgKCEoTnVtYmVyLmlzSW50ZWdlcihiYXRjaFNpemUpICYmIGJhdGNoU2l6ZSA+IDApKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYmF0Y2ggc2l6ZS4nKTtcclxuXHRjb25zdCBpdGVtcyA9IGFycmF5LnNsaWNlKDApLCBfYnVmZmVyOiBUW11bXSA9IFtdO1xyXG5cdHdoaWxlIChpdGVtcy5sZW5ndGgpIF9idWZmZXIucHVzaChpdGVtcy5zcGxpY2UoMCwgYmF0Y2hTaXplKSk7XHJcblx0cmV0dXJuIF9idWZmZXI7XHJcbn07IiwiXHJcbi8qKlxyXG4gKiBDbG9uZSB2YWx1ZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIGNvcHlcclxuICovXHJcbmV4cG9ydCBjb25zdCBfY2xvbmUgPSAodmFsdWU6IGFueSk6IGFueSA9PiBjbG9uZSh2YWx1ZSwgbmV3IE1hcCgpKTtcclxuXHJcbi8qKlxyXG4gKiBOYW5vIGNsb25lIChodHRwczovL2dpdGh1Yi5jb20vS2VsaW4yMDI1L25hbm9jbG9uZS5naXQpXHJcbiAqIFxyXG4gKiBAcGFyYW0gc3JjXHJcbiAqIEBwYXJhbSBzZWVuXHJcbiAqL1xyXG5mdW5jdGlvbiBjbG9uZShzcmM6IGFueSwgc2VlbjogTWFwPGFueSwgYW55Pik6IGFueSB7XHJcblx0XHJcblx0Ly8gSW1tdXRhYmxlIHRoaW5ncyAtIG51bGwsIHVuZGVmaW5lZCwgZnVuY3Rpb25zLCBzeW1ib2xzLCBldGMuXHJcblx0aWYgKCFzcmMgfHwgdHlwZW9mIHNyYyAhPT0gJ29iamVjdCcpIHJldHVybiBzcmM7XHJcblxyXG5cdC8vIFRoaW5ncyB3ZSd2ZSBzZWVuIGFscmVhZHkgKGNpcmN1bGFyIHJlZnMpXHJcblx0aWYgKHNlZW4uaGFzKHNyYykpIHJldHVybiBzZWVuLmdldChzcmMpO1xyXG5cclxuXHQvLyBCYXNpYyBwYXR0ZXJuIGZvciBjbG9uaW5nIHNvbWV0aGluZyBiZWxvdyBoZXJlIGlzOlxyXG5cdC8vIDEuIENyZWF0ZSBjb3B5XHJcblx0Ly8gMi4gQWRkIGl0IHRvIGBzZWVuYCBpbW1lZGlhdGVseSwgc28gd2UgcmVjb2duaXplIGl0IGlmIHdlIHNlZSBpdCBpblxyXG5cdC8vICAgIHN1Ym9yZGluYXRlIG1lbWJlcnNcclxuXHQvLyAzLiBjbG9uZSBzdWJvcmRpbmF0ZSBtZW1iZXJzXHJcblx0bGV0IGNvcHk6IGFueTtcclxuXHRcclxuXHQvLyBET00gTm9kZVxyXG5cdGlmIChzcmMubm9kZVR5cGUgJiYgJ2Nsb25lTm9kZScgaW4gc3JjKSB7XHJcblx0XHRjb3B5ID0gc3JjLmNsb25lTm9kZSh0cnVlKTtcclxuXHRcdHNlZW4uc2V0KHNyYywgY29weSk7XHJcblx0fVxyXG5cdFxyXG5cdC8vIERhdGVcclxuXHRlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBEYXRlKSB7XHJcblx0XHRjb3B5ID0gbmV3IERhdGUoc3JjLmdldFRpbWUoKSk7XHJcblx0XHRzZWVuLnNldChzcmMsIGNvcHkpO1xyXG5cdH1cclxuXHRcclxuXHQvLyBSZWdFeHBcclxuXHRlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBSZWdFeHApIHtcclxuXHRcdGNvcHkgPSBuZXcgUmVnRXhwKHNyYyk7XHJcblx0XHRzZWVuLnNldChzcmMsIGNvcHkpO1xyXG5cdH1cclxuXHRcclxuXHQvLyBBcnJheVxyXG5cdGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xyXG5cdFx0Y29weSA9IG5ldyBBcnJheShzcmMubGVuZ3RoKTtcclxuXHRcdHNlZW4uc2V0KHNyYywgY29weSk7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykgY29weVtpXSA9IGNsb25lKHNyY1tpXSwgc2Vlbik7XHJcblx0fVxyXG5cdFxyXG5cdC8vIE1hcFxyXG5cdGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIE1hcCkge1xyXG5cdFx0Y29weSA9IG5ldyBNYXAoKTtcclxuXHRcdHNlZW4uc2V0KHNyYywgY29weSk7XHJcblx0XHRmb3IgKGNvbnN0IFtrLCB2XSBvZiBzcmMuZW50cmllcygpKSBjb3B5LnNldChrLCBjbG9uZSh2LCBzZWVuKSk7XHJcblx0fVxyXG5cdFxyXG5cdC8vIFNldFxyXG5cdGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIFNldCkge1xyXG5cdFx0Y29weSA9IG5ldyBTZXQoKTtcclxuXHRcdHNlZW4uc2V0KHNyYywgY29weSk7XHJcblx0XHRmb3IgKGNvbnN0IHYgb2Ygc3JjKSBjb3B5LmFkZChjbG9uZSh2LCBuZXcgTWFwKCkpKTtcclxuXHR9XHJcblx0XHJcblx0Ly8gT2JqZWN0XHJcblx0ZWxzZSBpZiAoc3JjIGluc3RhbmNlb2YgT2JqZWN0KSB7XHJcblx0XHRjb3B5ID0ge307XHJcblx0XHRzZWVuLnNldChzcmMsIGNvcHkpO1xyXG5cdFx0Zm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoc3JjKSkgY29weVtrXSA9IGNsb25lKHYsIHNlZW4pO1xyXG5cdH1cclxuXHRcclxuXHQvLyBVbnJlY29nbml6ZWQgdGhpbmcuICBJdCdzIGJldHRlciB0byB0aHJvdyBoZXJlIHRoYW4gdG8gcmV0dXJuIGBzcmNgLCBhc1xyXG5cdC8vIHdlIGRvbid0IGtub3cgd2hldGhlciBzcmMgbmVlZHMgdG8gYmUgZGVlcC1jb3BpZWQgaGVyZS5cclxuXHRlbHNlIHtcclxuXHRcdGNvbnN0IGVycm9yID0gYFVuYWJsZSB0byBjbG9uZSAke3NyY31gO1xyXG5cdFx0Y29uc29sZS53YXJuKCdbX2Nsb25lXSBFcnJvcjogJyArIGVycm9yLCBzcmMpO1xyXG5cdFx0dGhyb3cgRXJyb3IoZXJyb3IpO1xyXG5cdH1cclxuXHJcblx0Ly9yZXN1bHRcclxuXHRyZXR1cm4gY29weVxyXG59IiwiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnLi4vM3JkLXBhcnR5JztcclxuXHJcbi8qKlxyXG4gKiBDbG9uZSB1dGlsc1xyXG4gKi9cclxuY29uc3QgX2luc3RhbmNlb2YgPSAobzogYW55LCB0eXBlOiBhbnkpOiBib29sZWFuID0+ICdvYmplY3QnID09PSB0eXBlb2YgdHlwZSAmJiB0eXBlICYmIG8gaW5zdGFuY2VvZiB0eXBlO1xyXG5jb25zdCBfdG9TdHJpbmcgPSAobzogYW55KTogc3RyaW5nID0+IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcclxuY29uc3QgX2lzRGF0ZSA9IChvOiBhbnkpOiBib29sZWFuID0+ICdvYmplY3QnID09PSB0eXBlb2YgbyAmJiBfdG9TdHJpbmcobykgPT09ICdbb2JqZWN0IERhdGVdJztcclxuY29uc3QgX2lzQXJyYXkgPSAobzogYW55KTogYm9vbGVhbiA9PiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX3RvU3RyaW5nKG8pID09PSAnW29iamVjdCBBcnJheV0nO1xyXG5jb25zdCBfaXNSZWdFeHAgPSAobzogYW55KTogYm9vbGVhbiA9PiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX3RvU3RyaW5nKG8pID09PSAnW29iamVjdCBSZWdFeHBdJztcclxuY29uc3QgX2dldFJlZ0V4cEZsYWdzID0gKHJlZ2V4OiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGxldCBmbGFncyA9ICcnO1xyXG5cdGlmIChyZWdleD8uZ2xvYmFsKSBmbGFncyArPSAnZyc7XHJcblx0aWYgKHJlZ2V4Py5pZ25vcmVDYXNlKSBmbGFncyArPSAnaSc7XHJcblx0aWYgKHJlZ2V4Py5tdWx0aWxpbmUpIGZsYWdzICs9ICdtJztcclxuXHRyZXR1cm4gZmxhZ3M7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgcHJvdG90eXBlXHJcbiAqIFxyXG4gKiBAcGFyYW0gcGFyZW50XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY2xvbmVQcm90b3R5cGUgPSAocGFyZW50OiBhbnkpOiBhbnkgPT4ge1xyXG5cdGlmIChwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB1bmRlZmluZWQpIHJldHVybiBwYXJlbnQ7XHJcblx0aWYgKCdvYmplY3QnICE9PSB0eXBlb2YgcGFyZW50KSBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocGFyZW50KTtcclxuXHRjb25zdCBmbjogYW55ID0gZnVuY3Rpb24oKXt9O1xyXG5cdGZuLnByb3RvdHlwZSA9IHBhcmVudDtcclxuXHRyZXR1cm4gbmV3IGZuKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogRGVlcCBjbG9uZSBvcHRpb25zIGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJRGVlcENsb25lT3B0aW9ucyB7XHJcblx0XHJcblx0LyoqIFtkZWZhdWx0OiBgdHJ1ZWBdIEVuYWJsZSBjaXJjdWxhciByZWZlcmVuY2VzIChjYW4gYWxzbyBiZSBvYmplY3Qgd2l0aCBvcHRpb25zIHtjaXJjdWxhciwgZGVwdGgsIHByb3RvdHlwZSwgbm9uX2VudW1lcmFibGV9KSAqL1xyXG5cdGNpcmN1bGFyPzogYm9vbGVhbjtcclxuXHRcclxuXHQvKiogW2RlZmF1bHQ6IGBJbmZpbml0eWBdIENsb25lIGRlcHRoIGxpbWl0IChsZWF2ZSBkZWZhdWx0IHRvIHByZXZlbnQgcmVmZXJlbmNlcyB0byBwYXJlbnQpLiAqL1xyXG5cdGRlcHRoPzogbnVtYmVyO1xyXG5cdFxyXG5cdC8qKiBbZGVmYXVsdDogYHVuZGVmaW5lZGBdIFVzZSBwcm90b3R5cGUuICovXHJcblx0cHJvdG90eXBlPzogYW55O1xyXG5cdFxyXG5cdC8qKiBbZGVmYXVsdDogYGZhbHNlYF0gRW5hYmxlIGNsb25pbmcgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyAoaWdub3JlcyBwcm90b3R5cGUgY2hhaW4gbm9uLWVudW1lcmFibGUgcHJvcHMpICovXHJcblx0bm9uX2VudW1lcmFibGU/OiBib29sZWFuO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsb25lcyAoY29waWVzKSBhbiBPYmplY3QgdXNpbmcgZGVlcCBjb3B5aW5nLlxyXG4gKlxyXG4gKiAtIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBkZWZhdWx0LCBidXQgaWYgeW91IGFyZSBjZXJ0YWluXHJcbiAqIHRoZXJlIGFyZSBubyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHlvdXIgb2JqZWN0LCB5b3UgY2FuIHNhdmUgc29tZSBDUFUgdGltZVxyXG4gKiBieSBjYWxsaW5nIHdpdGggb3B0aW9uIGBjaXJjdWxhcmAgPSBgZmFsc2VgLlxyXG4gKlxyXG4gKiAtIENBVVRJT046IGlmIG9wdGlvbiBgY2lyY3VsYXJgIGlzIGBmYWxzZWAgYW5kIGB2YWx1ZWAgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlcyxcclxuICogeW91ciBwcm9ncmFtIG1heSBlbnRlciBhbiBpbmZpbml0ZSBsb29wIGFuZCBjcmFzaC5cclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgQ2xvbmUgc3ViamVjdCBgPFQ+YFxyXG4gKiBAcGFyYW0gb3B0aW9ucyAgQ2xvbmUgb3B0aW9uc1xyXG4gKiBAcmV0dXJucyBgPFQ+YCBjbG9uZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9jbG9uZURlZXA8VCA9IGFueT4odmFsdWU6IFQsIG9wdGlvbnM/OiBJRGVlcENsb25lT3B0aW9ucyk6IFQge1xyXG5cdGNvbnN0IHtcclxuXHRcdGNpcmN1bGFyOiBfY2lyY3VsYXIgPSB0cnVlLFxyXG5cdFx0ZGVwdGg6IF9kZXB0aCA9IEluZmluaXR5LFxyXG5cdFx0cHJvdG90eXBlOiBfcHJvdG90eXBlID0gdW5kZWZpbmVkLFxyXG5cdFx0bm9uX2VudW1lcmFibGU6IF9ub25fZW51bWVyYWJsZSA9IGZhbHNlLFxyXG5cdH0gPSBPYmplY3Qob3B0aW9ucyk7XHJcblx0Y29uc3QgY2lyY3VsYXIgPSAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIF9jaXJjdWxhciA/IHRydWUgOiBCb29sZWFuKF9jaXJjdWxhcik7XHJcblx0Y29uc3QgZGVwdGggPSAhaXNOYU4oX2RlcHRoKSAmJiBOdW1iZXIuaXNJbnRlZ2VyKF9kZXB0aCkgJiYgX2RlcHRoID4gMCA/IF9kZXB0aCA6IEluZmluaXR5O1xyXG5cdGNvbnN0IHByb3RvdHlwZSA9IF9wcm90b3R5cGU7XHJcblx0Y29uc3Qgbm9uX2VudW1lcmFibGUgPSBCb29sZWFuKF9ub25fZW51bWVyYWJsZSk7XHJcblx0Y29uc3QgYWxsUGFyZW50czogYW55W10gPSBbXTtcclxuXHRjb25zdCBhbGxDaGlsZHJlbjogYW55W10gPSBbXTtcclxuXHRjb25zdCB1c2VCdWZmZXIgPSAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIEJ1ZmZlcjtcclxuXHJcblx0Ly9jbG9uZVxyXG5cdGNvbnN0IF9jbG9uZSA9IChwYXJlbnQ6IGFueSwgZGVwdGg6IG51bWJlcik6IGFueSA9PiB7XHJcblx0XHRpZiAoZGVwdGggPT09IDAgfHwgISgnb2JqZWN0JyA9PT0gdHlwZW9mIHBhcmVudCAmJiBwYXJlbnQpKSByZXR1cm4gcGFyZW50O1xyXG5cdFx0bGV0IGNoaWxkOiBhbnksIHByb3RvOiBhbnk7XHJcblx0XHRpZiAoX2luc3RhbmNlb2YocGFyZW50LCBNYXApKSBjaGlsZCA9IG5ldyBNYXAoKTtcclxuXHRcdGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgU2V0KSkgY2hpbGQgPSBuZXcgU2V0KCk7XHJcblx0XHRlbHNlIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIFByb21pc2UpKXtcclxuXHRcdFx0Y2hpbGQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0cGFyZW50LnRoZW4oKHJlczogYW55KSA9PiByZXNvbHZlKF9jbG9uZShyZXMsIGRlcHRoIC0gMSkpKVxyXG5cdFx0XHRcdC5jYXRjaCgoZXJyOiBhbnkpPT4gcmVqZWN0KF9jbG9uZShlcnIsIGRlcHRoIC0gMSkpKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmIChfaXNBcnJheShwYXJlbnQpKSBjaGlsZCA9IFtdO1xyXG5cdFx0ZWxzZSBpZiAoX2lzUmVnRXhwKHBhcmVudCkpe1xyXG5cdFx0XHRjaGlsZCA9IG5ldyBSZWdFeHAocGFyZW50LnNvdXJjZSwgX2dldFJlZ0V4cEZsYWdzKHBhcmVudCkpO1xyXG5cdFx0XHRpZiAocGFyZW50Lmxhc3RJbmRleCkgY2hpbGQubGFzdEluZGV4ID0gcGFyZW50Lmxhc3RJbmRleDtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKF9pc0RhdGUocGFyZW50KSkgY2hpbGQgPSBuZXcgRGF0ZShwYXJlbnQuZ2V0VGltZSgpKTtcclxuXHRcdGVsc2UgaWYgKHVzZUJ1ZmZlciAmJiBCdWZmZXIuaXNCdWZmZXIocGFyZW50KSl7XHJcblx0XHRcdGlmIChCdWZmZXIuZnJvbSkgY2hpbGQgPSBCdWZmZXIuZnJvbShwYXJlbnQpOyAvL05vZGUuanMgPj0gNS4xMC4wXHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGNoaWxkID0gbmV3IEJ1ZmZlcihwYXJlbnQubGVuZ3RoKTsgLy9PbGRlciBOb2RlLmpzIHZlcnNpb25zXHJcblx0XHRcdFx0cGFyZW50LmNvcHkoY2hpbGQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBjaGlsZDtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgRXJyb3IpKSBjaGlsZCA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRpZiAoJ29iamVjdCcgIT09IHR5cGVvZiBwcm90b3R5cGUpe1xyXG5cdFx0XHRcdHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBhcmVudCk7XHJcblx0XHRcdFx0Y2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRjaGlsZCA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcclxuXHRcdFx0XHRwcm90byA9IHByb3RvdHlwZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKGNpcmN1bGFyKXtcclxuXHRcdFx0Y29uc3QgaW5kZXggPSBhbGxQYXJlbnRzLmluZGV4T2YocGFyZW50KTtcclxuXHRcdFx0aWYgKGluZGV4ICE9PSAtMSkgcmV0dXJuIGFsbENoaWxkcmVuW2luZGV4XTtcclxuXHRcdFx0YWxsUGFyZW50cy5wdXNoKHBhcmVudCk7XHJcblx0XHRcdGFsbENoaWxkcmVuLnB1c2goY2hpbGQpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgTWFwKSl7XHJcblx0XHRcdGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBwYXJlbnQpe1xyXG5cdFx0XHRcdGNvbnN0IGtleUNoaWxkID0gX2Nsb25lKGtleSwgZGVwdGggLSAxKTtcclxuXHRcdFx0XHRjb25zdCB2YWxDaGlsZCA9IF9jbG9uZSh2YWwsIGRlcHRoIC0gMSk7XHJcblx0XHRcdFx0Y2hpbGQuc2V0KGtleUNoaWxkLCB2YWxDaGlsZCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIFNldCkpe1xyXG5cdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiBwYXJlbnQpe1xyXG5cdFx0XHRcdGNvbnN0IHZhbENoaWxkID0gX2Nsb25lKHZhbCwgZGVwdGggLSAxKTtcclxuXHRcdFx0XHRjaGlsZC5hZGQodmFsQ2hpbGQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRmb3IgKGxldCBrZXkgaW4gcGFyZW50KXtcclxuXHRcdFx0Y29uc3QgYXR0cnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwga2V5KTtcclxuXHRcdFx0aWYgKGF0dHJzKSBjaGlsZFtrZXldID0gX2Nsb25lKHBhcmVudFtrZXldLCBkZXB0aCAtIDEpO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbnN0IG9ialByb3BlcnR5ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwYXJlbnQsIGtleSk7XHJcblx0XHRcdFx0aWYgKG9ialByb3BlcnR5Py5zZXQgPT09IHVuZGVmaW5lZCkgY29udGludWU7XHJcblx0XHRcdFx0Y2hpbGRba2V5XSA9IF9jbG9uZShwYXJlbnRba2V5XSwgZGVwdGggLSAxKTtcclxuXHRcdFx0XHRpZiAob2JqUHJvcGVydHkpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGlsZCwga2V5LCBvYmpQcm9wZXJ0eSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Y2F0Y2ggKGUpe1xyXG5cdFx0XHRcdGlmIChlIGluc3RhbmNlb2YgVHlwZUVycm9yKSBjb250aW51ZTsgLy9jaGlsZFtrZXldIG9ubHkgaGFzIGdldHRlciAoc3RyaWN0IG1vZGUpXHJcblx0XHRcdFx0ZWxzZSBpZiAoZSBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yKSBjb250aW51ZTsgLy9zYW1lIGFzIGFib3ZlIChub24gc3RyaWN0IG1vZGUpXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXtcclxuXHRcdFx0Y29uc3Qgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocGFyZW50KTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0Y29uc3Qgc3ltYm9sID0gc3ltYm9sc1tpXTsgLy9wcmltaXRpdmVcclxuXHRcdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwYXJlbnQsIHN5bWJvbCk7XHJcblx0XHRcdFx0aWYgKGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3IuZW51bWVyYWJsZSAmJiAhbm9uX2VudW1lcmFibGUpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdGNoaWxkW3N5bWJvbF0gPSBfY2xvbmUocGFyZW50W3N5bWJvbF0sIGRlcHRoIC0gMSk7XHJcblx0XHRcdFx0aWYgKGRlc2NyaXB0b3IpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGlsZCwgc3ltYm9sLCBkZXNjcmlwdG9yKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKG5vbl9lbnVtZXJhYmxlKXtcclxuXHRcdFx0Y29uc3QgYWxsUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHBhcmVudCk7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYWxsUHJvcGVydHlOYW1lcy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IGFsbFByb3BlcnR5TmFtZXNbaV07XHJcblx0XHRcdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBwcm9wZXJ0eU5hbWUpO1xyXG5cdFx0XHRcdGlmIChkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSkgY29udGludWU7XHJcblx0XHRcdFx0Y2hpbGRbcHJvcGVydHlOYW1lXSA9IF9jbG9uZShwYXJlbnRbcHJvcGVydHlOYW1lXSwgZGVwdGggLSAxKTtcclxuXHRcdFx0XHRpZiAoZGVzY3JpcHRvcikgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gY2hpbGQ7XHJcblx0fTtcclxuXHJcblx0Ly9yZXN1bHRcclxuXHRyZXR1cm4gX2Nsb25lKHZhbHVlLCBkZXB0aCkgYXMgVDtcclxufTsiLCIvKipcclxuICogQ29tcGFyZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBkZWVwIG1hdGNoaW5nXHJcbiAqIC0gY29tcGFyZVRhcmdldFx0PSBgYXJnc1swXWBcclxuICogLSBjb21wYXJlV2l0aFx0PSBgYXJnc1sxKl1gXHJcbiAqIFxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmAgaXMgbWF0Y2hcclxuICovXHJcbmV4cG9ydCBjb25zdCBfY29tcGFyZSA9ICguLi5hcmdzOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xyXG5cdGxldCBsZWZ0Q2hhaW46IGFueVtdID0gW107XHJcblx0bGV0IHJpZ2h0Q2hhaW46IGFueVtdID0gW107XHJcblx0XHJcblx0Ly9jaGVjayBhcmd1bWVudHNcclxuXHRpZiAoYXJncy5sZW5ndGggPCAxKXtcclxuXHRcdGNvbnNvbGUud2FybihgJHthcmdzLmxlbmd0aCA/ICdMZXNzIHRoYW4gdHdvJyA6ICdObyd9IFxcYF9jb21wYXJlXFxgIGFyZ3VtZW50cyBwcm92aWRlZC5gKTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Ly9jb21wYXJlIHZhbHVlc1xyXG5cdGZvciAobGV0IGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0bGVmdENoYWluID0gW107XHJcblx0XHRyaWdodENoYWluID0gW107XHJcblx0XHRpZiAoIWRlZXBNYXRjaChhcmdzWzBdLCBhcmdzW2ldKSkgcmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0Ly9kZWVwIGNvbXBhcmUgdHdvIGl0ZW1zXHJcblx0ZnVuY3Rpb24gZGVlcE1hdGNoKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiB7XHJcblx0XHRcclxuXHRcdC8vTm90ZSB0aGF0IE5hTiA9PT0gTmFOIHJldHVybnMgZmFsc2UgYW5kIGlzTmFOKHVuZGVmaW5lZCkgcmV0dXJucyB0cnVlXHJcblx0XHRpZiAoJ251bWJlcicgPT09IHR5cGVvZiBhICYmICdudW1iZXInID09PSB0eXBlb2YgYiAmJiBpc05hTihhKSAmJiBpc05hTihiKSkgcmV0dXJuIHRydWU7XHJcblxyXG5cdFx0Ly9DaGVjayBpZiBib3RoIGFyZ3VtZW50cyBsaW5rIHRvIHRoZSBzYW1lIG9iamVjdC5cclxuXHRcdGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHQvL0NoZWNrIGZ1bmN0aW9ucyBpbiBjYXNlIHdoZW4gZnVuY3Rpb25zIGFyZSBjcmVhdGVkIGluIGNvbnN0cnVjdG9yIChpLmUuIGRhdGVzLCBidWlsdC1pbnMpXHJcblx0XHRpZiAoXHJcblx0XHRcdCgnZnVuY3Rpb24nID09PSB0eXBlb2YgYSAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgYilcclxuXHRcdFx0fHwgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKVxyXG5cdFx0XHR8fCAoYSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBiIGluc3RhbmNlb2YgUmVnRXhwKVxyXG5cdFx0XHR8fCAoYSBpbnN0YW5jZW9mIFN0cmluZyAmJiBiIGluc3RhbmNlb2YgU3RyaW5nKVxyXG5cdFx0XHR8fCAoYSBpbnN0YW5jZW9mIE51bWJlciAmJiBiIGluc3RhbmNlb2YgTnVtYmVyKVxyXG5cdFx0KSByZXR1cm4gYS50b1N0cmluZygpID09PSBiLnRvU3RyaW5nKCk7XHJcblxyXG5cdFx0Ly9DaGVjayBwcm90b3R5cGVzXHJcblx0XHRpZiAoIShhIGluc3RhbmNlb2YgT2JqZWN0ICYmIGIgaW5zdGFuY2VvZiBPYmplY3QpKSByZXR1cm4gZmFsc2U7XHJcblx0XHRpZiAoYS5pc1Byb3RvdHlwZU9mKGIpIHx8IGIuaXNQcm90b3R5cGVPZihhKSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0aWYgKGEuY29uc3RydWN0b3IgIT09IGIuY29uc3RydWN0b3IpIHJldHVybiBmYWxzZTtcclxuXHRcdGlmIChhLnByb3RvdHlwZSAhPT0gYi5wcm90b3R5cGUpIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHQvL0NoZWNrIGZvciBpbmZpbml0aXZlIGxpbmtpbmcgbG9vcHNcclxuXHRcdGlmIChsZWZ0Q2hhaW4uaW5kZXhPZihhKSA+IC0xIHx8IHJpZ2h0Q2hhaW4uaW5kZXhPZihiKSA+IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Ly9DaGVjayBiIHByb3BzIGluIGFcclxuXHRcdGZvciAobGV0IGtleSBpbiBiKXtcclxuXHRcdFx0aWYgKGIuaGFzT3duUHJvcGVydHkoa2V5KSA9PT0gYS5oYXNPd25Qcm9wZXJ0eShrZXkpKXtcclxuXHRcdFx0XHRpZiAodHlwZW9mIGJba2V5XSAhPT0gdHlwZW9mIGFba2V5XSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9DaGVjayBhIHByb3BzIGluIGJcclxuXHRcdGZvciAobGV0IGtleSBpbiBhKXtcclxuXHRcdFx0aWYgKGIuaGFzT3duUHJvcGVydHkoa2V5KSAhPT0gYS5oYXNPd25Qcm9wZXJ0eShrZXkpKSByZXR1cm4gZmFsc2U7XHJcblx0XHRcdGVsc2UgaWYgKHR5cGVvZiBiW2tleV0gIT09IHR5cGVvZiBhW2tleV0pIHJldHVybiBmYWxzZTtcclxuXHRcdFx0bGV0IHZhbF9hID0gYVtrZXldO1xyXG5cdFx0XHRsZXQgdmFsX2IgPSBiW2tleV07XHJcblx0XHRcdHN3aXRjaCAodHlwZW9mIHZhbF9hKXtcclxuXHRcdFx0XHRjYXNlICdvYmplY3QnOlxyXG5cdFx0XHRcdGNhc2UgJ2Z1bmN0aW9uJzpcclxuXHRcdFx0XHRcdGxlZnRDaGFpbi5wdXNoKGEpO1xyXG5cdFx0XHRcdFx0cmlnaHRDaGFpbi5wdXNoKGIpO1xyXG5cdFx0XHRcdFx0aWYgKCFkZWVwTWF0Y2godmFsX2EsIHZhbF9iKSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0bGVmdENoYWluLnBvcCgpO1xyXG5cdFx0XHRcdFx0cmlnaHRDaGFpbi5wb3AoKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0aWYgKHZhbF9hICE9PSB2YWxfYikgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvL21hdGNoZWRcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufSIsIi8qKlxyXG4gKiBDb21wYXJlIG11bHRpcGxlIHZhbHVlcyB3aXRoIHNoYWxsb3cgbWF0Y2hpbmdcclxuICogLSBjb21wYXJlVGFyZ2V0XHQ9IGBhcmdzWzBdYFxyXG4gKiAtIGNvbXBhcmVXaXRoXHQ9IGBhcmdzWzEqXWBcclxuICogXHJcbiAqIEBwYXJhbSBhICBDb21wYXJlIHZhbHVlIDFcclxuICogQHJldHVybnMgYGJvb2xlYW5gIGlzIG1hdGNoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2NvbXBhcmVTaGFsbG93ID0gKC4uLmFyZ3M6IGFueVtdKTogYm9vbGVhbiA9PiB7XHJcblxyXG5cdC8vY2hlY2sgdmFsdWVzXHJcblx0aWYgKGFyZ3MubGVuZ3RoIDwgMSl7XHJcblx0XHRjb25zb2xlLndhcm4oYCR7YXJncy5sZW5ndGggPyAnTGVzcyB0aGFuIHR3bycgOiAnTm8nfSBcXGBfY29tcGFyZVNoYWxsb3dcXGAgYXJndW1lbnRzIHByb3ZpZGVkLmApO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHQvL2NvbXBhcmUgdmFsdWVzXHJcblx0Zm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRpZiAoIXNoYWxsb3dNYXRjaChhcmdzWzBdLCBhcmdzW2ldKSkgcmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHRyZXR1cm4gdHJ1ZTtcclxuXHRcclxuXHQvL3NoYWxsb3cgY29tcGFyZSB0d28gaXRlbXNcclxuXHRmdW5jdGlvbiBzaGFsbG93TWF0Y2goYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcclxuXHRcdGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcclxuXHRcdGlmICghKGEgaW5zdGFuY2VvZiBPYmplY3QpIHx8ICEoYiBpbnN0YW5jZW9mIE9iamVjdCkpIHJldHVybiBmYWxzZTtcclxuXHRcdGlmIChhLmNvbnN0cnVjdG9yICE9PSBiLmNvbnN0cnVjdG9yKSByZXR1cm4gZmFsc2U7XHJcblx0XHRmb3IgKGxldCBrIGluIGEpe1xyXG5cdFx0XHRpZiAoIWEuaGFzT3duUHJvcGVydHkoaykpIGNvbnRpbnVlO1xyXG5cdFx0XHRpZiAoIWIuaGFzT3duUHJvcGVydHkoaykpIHJldHVybiBmYWxzZTtcclxuXHRcdFx0aWYgKGFba10gPT09IGJba10pIGNvbnRpbnVlO1xyXG5cdFx0XHRpZiAoJ29iamVjdCcgIT09IHR5cGVvZihhW2tdKSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRpZiAoIXNoYWxsb3dNYXRjaChhW2tdLCBiW2tdKSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG59OyIsIi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gc2ltcGxlIGRhdGUgaGVscGVycyAtIGNvbnNpZGVyIHVzZWZ1bCBsaWJyYXJpZXM6IGh0dHBzOi8vbW9tZW50anMuY29tLyBcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuLyoqXHJcbiAqIFZhbGlkYXRlIGBEYXRlYCBpbnN0YW5jZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9pc0RhdGUgPSAodmFsdWU6IGFueSk6IGJvb2xlYW4gPT4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZS5nZXRUaW1lKCkpO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGBEYXRlYCB2YWx1ZSB+IGFjY2VwdHMgdmFsaWQgYERhdGVgIGluc3RhbmNlLCB0aW1lc3RhbXAgaW50ZWdlciwgZGF0ZXRpbWUgc3RyaW5nIChzZWUgYF9zdHJpY3RgIHBhcmFtIGRvY3MpXHJcbiAqIC0gc3VwcG9ydHMgdmFsaWQgYERhdGVgIGluc3RhbmNlLCBgaW50ZWdlcnxzdHJpbmdgIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgYW5kIG90aGVyIGBzdHJpbmdgIGRhdGUgdGV4dHNcclxuICogLSB3aGVuIHN0cmljdCBwYXJzaW5nLCB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgZGF0ZSB2YWx1ZSB3aXRoIG1vcmUgdGhhbiBgMWAgdGltZXN0YW1wIG1pbGxpc2Vjb25kc1xyXG4gKiAtIHdoZW4gc3RyaWN0IHBhcnNpbmcgaXMgZGlzYWJsZWQsIHJlc3VsdCBmb3IgYHVuZGVmaW5lZGAgPSBgbmV3IERhdGUoKWAgYW5kIGBudWxsfGZhbHNlfHRydWV8MGAgPSBgbmV3IERhdGUobnVsbHxmYWxzZXx0cnVlfDApYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZVxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgcGFyc2luZyAoZGVmYXVsdDogYHRydWVgKVxyXG4gKiBAcmV0dXJucyBgRGF0ZWAgaW5zdGFuY2UgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGF0ZSA9ICh2YWx1ZTogYW55LCBfc3RyaWN0OiBib29sZWFuID0gdHJ1ZSk6IERhdGV8dW5kZWZpbmVkID0+IHtcclxuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIF9zdHJpY3QgPyB1bmRlZmluZWQgOiBuZXcgRGF0ZSgpO1xyXG5cdGNvbnN0IF9wYXJzZSA9ICh2YWw6IGFueSk6IERhdGV8dW5kZWZpbmVkID0+ICFpc05hTih2YWwpICYmICh2YWwgPiAxIHx8ICFfc3RyaWN0KSA/IG5ldyBEYXRlKHZhbCkgOiB1bmRlZmluZWQ7XHJcblx0aWYgKFtudWxsLCBmYWxzZSwgdHJ1ZSwgMF0uaW5jbHVkZXModmFsdWUpKSByZXR1cm4gX3BhcnNlKHZhbHVlKTtcclxuXHRpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gX3BhcnNlKHZhbHVlLmdldFRpbWUoKSk7XHJcblx0aWYgKCdudW1iZXInID09PSB0eXBlb2YgdmFsdWUpIHJldHVybiBfcGFyc2UobmV3IERhdGUodmFsdWUpLmdldFRpbWUoKSk7XHJcblx0dHJ5IHtcclxuXHRcdGxldCB0ZXh0OiBzdHJpbmcgPSBTdHJpbmcodmFsdWUpLnRyaW0oKTtcclxuXHRcdGlmICghdGV4dCB8fCAvXFxbb2JqZWN0IFxcdytcXF0vLnRlc3QodGV4dCkpIHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHRpZiAoL15bKy1dP1xcZCskLy50ZXN0KHRleHQpKSByZXR1cm4gX3BhcnNlKHBhcnNlSW50KHRleHQpKTtcclxuXHRcdHJldHVybiBfcGFyc2UoRGF0ZS5wYXJzZSh0ZXh0KSk7XHJcblx0fVxyXG5cdGNhdGNoIChlKXtcclxuXHRcdGNvbnNvbGUud2FybignW19kYXRlXSBleGNlcHRpb246JywgZSk7XHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZWQgYERhdGVgIHRpbWVzdGFtcCB2YWx1ZSAoaS5lLiBgZGF0ZS5nZXRUaW1lKClgKVxyXG4gKiAtIHNlZSBgX2RhdGUoKWAgcGFyc2luZyBkb2NzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBkYXRlIHZhbHVlXHJcbiAqIEBwYXJhbSBtaW4gLSBzZXQgYG1pbmAgdGltZXN0YW1wIGxpbWl0IH4gZW5hYmxlZCB3aGVuIGBtaW5gIGlzIGEgdmFsaWQgdGltZXN0YW1wIGludGVnZXJcclxuICogQHBhcmFtIG1heCAtIHNldCBgbWF4YCB0aW1lc3RhbXAgbGltaXQgfiBlbmFibGVkIHdoZW4gYG1heGAgaXMgYSB2YWxpZCB0aW1lc3RhbXAgaW50ZWdlclxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgcGFyc2luZyAoZGVmYXVsdDogYHRydWVgKVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIHwgYHVuZGVmaW5lZGAgd2hlbiBpbnZhbGlkXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RpbWUgPSAodmFsdWU6IGFueSwgbWluPzogbnVtYmVyLCBtYXg/OiBudW1iZXIsIF9zdHJpY3Q6IGJvb2xlYW4gPSB0cnVlKTogbnVtYmVyfHVuZGVmaW5lZCA9PiB7XHJcblx0Y29uc3QgZGF0ZTogRGF0ZXx1bmRlZmluZWQgPSBfZGF0ZSh2YWx1ZSwgX3N0cmljdCk7XHJcblx0aWYgKCFkYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdGNvbnN0IHRpbWU6IG51bWJlciA9IGRhdGUuZ2V0VGltZSgpO1xyXG5cdGlmICghaXNOYU4obWluID0gcGFyc2VGbG9hdChtaW4gYXMgYW55KSkgJiYgdGltZSA8IG1pbikgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHRpZiAoIWlzTmFOKG1heCA9IHBhcnNlRmxvYXQobWF4IGFzIGFueSkpICYmIHRpbWUgPiBtYXgpIHJldHVybiB1bmRlZmluZWQ7XHJcblx0cmV0dXJuIHRpbWU7XHJcbn07XHJcblxyXG4vKipcclxuICogRGF5IG5hbWVzXHJcbiAqIC0gYCgnU3VuZGF5J3wnTW9uZGF5J3wnVHVlc2RheSd8J1dlZG5lc2RheSd8J1RodXJzZGF5J3wnRnJpZGF5J3wnU2F0dXJkYXknKVtdYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IERBWV9OQU1FUzogc3RyaW5nW10gPSBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J107XHJcblxyXG4vKipcclxuICogR2V0IGRheSBuYW1lXHJcbiAqIFxyXG4gKiBAcGFyYW0gaW5kZXggLSAoZGVmYXVsdDogYDBgKSBkYXkgaW5kZXggYDAtNmAgfiBgREFZX05BTUVTW01hdGguYWJzKGluZGV4ICUgREFZX05BTUVTLmxlbmd0aCldYFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB+IGAnU3VuZGF5J3wnTW9uZGF5J3wnVHVlc2RheSd8J1dlZG5lc2RheSd8J1RodXJzZGF5J3wnRnJpZGF5J3wnU2F0dXJkYXknYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kYXlOYW1lID0gKGluZGV4OiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGluZGV4ID0gIWlzTmFOKGluZGV4ID0gcGFyc2VJbnQoaW5kZXgpKSA/IGluZGV4IDogMDtcclxuXHRyZXR1cm4gREFZX05BTUVTW01hdGguYWJzKGluZGV4ICUgREFZX05BTUVTLmxlbmd0aCldO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE1vbnRoIG5hbWVzXHJcbiAqIC0gYCgnSmFudWFyeSd8J0ZlYnJ1YXJ5J3wnTWFyY2gnfCdBcHJpbCd8J01heSd8J0p1bmUnfCdKdWx5J3wnQXVndXN0J3wnU2VwdGVtYmVyJ3wnT2N0b2Jlcid8J05vdmVtYmVyJ3wnRGVjZW1iZXInKVtdYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IE1PTlRIX05BTUVTOiBzdHJpbmdbXSA9IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddO1xyXG5cclxuLyoqXHJcbiAqIEdldCBtb250aCBuYW1lXHJcbiAqIFxyXG4gKiBAcGFyYW0gaW5kZXggLSAoZGVmYXVsdDogYDBgKSBkYXkgaW5kZXggYDAtMTFgIH4gYE1PTlRIX05BTUVTW01hdGguYWJzKGluZGV4ICUgREFZX05BTUVTLmxlbmd0aCldYFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB+IGAnSmFudWFyeSd8J0ZlYnJ1YXJ5J3wnTWFyY2gnfCdBcHJpbCd8J01heSd8J0p1bmUnfCdKdWx5J3wnQXVndXN0J3wnU2VwdGVtYmVyJ3wnT2N0b2Jlcid8J05vdmVtYmVyJ3wnRGVjZW1iZXInYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9tb250aE5hbWUgPSAoaW5kZXg6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0aW5kZXggPSAhaXNOYU4oaW5kZXggPSBwYXJzZUludChpbmRleCkpID8gaW5kZXggOiAwO1xyXG5cdHJldHVybiBNT05USF9OQU1FU1tNYXRoLmFicyhpbmRleCAlIE1PTlRIX05BTUVTLmxlbmd0aCldO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGBEYXRlYCBkYXkgc3RhcnQgfiBhdCBgMDA6MDA6MDAgMGBcclxuICogLSBzZWUgYF9kYXRlKClgIHBhcnNpbmcgZG9jc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZSB+ICoqXyhkZWZhdWx0cyB0byBgbmV3IERhdGUoKWAgd2hlbiBpbnZhbGlkKV8qKlxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYClcclxuICogQHJldHVybnMgYERhdGVgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2RheVN0YXJ0ID0gKHZhbHVlPzogYW55LCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UpOiBEYXRlID0+IHtcclxuXHRjb25zdCBkYXRlOiBEYXRlID0gX2RhdGUodmFsdWUsIF9zdHJpY3QpID8/IG5ldyBEYXRlKCk7XHJcblx0cmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgMCwgMCwgMCwgMCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgYERhdGVgIGRheSBlbmQgfiBhdCBgMjM6NTk6NTkgOTk5YFxyXG4gKiAtIHNlZSBgX2RhdGUoKWAgcGFyc2luZyBkb2NzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBkYXRlIHZhbHVlIH4gKipfKGRlZmF1bHRzIHRvIGBuZXcgRGF0ZSgpYCB3aGVuIGludmFsaWQpXyoqXHJcbiAqIEBwYXJhbSBfc3RyaWN0IC0gZW5hYmxlIHN0cmljdCBkYXRldGltZSBwYXJzaW5nIChkZWZhdWx0OiBgZmFsc2VgKVxyXG4gKiBAcmV0dXJucyBgRGF0ZWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGF5RW5kID0gKHZhbHVlPzogYW55LCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UpOiBEYXRlID0+IHtcclxuXHRjb25zdCBkYXRlOiBEYXRlID0gX2RhdGUodmFsdWUsIF9zdHJpY3QpID8/IG5ldyBEYXRlKCk7XHJcblx0cmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgMjMsIDU5LCA1OSwgOTk5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBgRGF0ZWAgbW9udGgncyBzdGFydCBkYXkgfiBhdCBgMDA6MDA6MDAgMGBcclxuICogLSBzZWUgYF9kYXRlKClgIHBhcnNpbmcgZG9jc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZSB+ICoqXyhkZWZhdWx0cyB0byBgbmV3IERhdGUoKWAgd2hlbiBpbnZhbGlkKV8qKlxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYCkgfiBzZWUgYF9kYXRlKClgXHJcbiAqIEByZXR1cm5zIGBEYXRlYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9tb250aFN0YXJ0ID0gKHZhbHVlPzogYW55LCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UpOiBEYXRlID0+IHtcclxuXHRjb25zdCBkYXRlOiBEYXRlID0gX2RhdGUodmFsdWUsIF9zdHJpY3QpID8/IG5ldyBEYXRlKCk7XHJcblx0cmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCAxLCAwLCAwLCAwLCAwKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBgRGF0ZWAgbW9udGgncyBlbmQgZGF5IH4gYXQgYDIzOjU5OjU5IDk5OWBcclxuICogLSBzZWUgYF9kYXRlKClgIHBhcnNpbmcgZG9jc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZSB+ICoqXyhkZWZhdWx0cyB0byBgbmV3IERhdGUoKWAgd2hlbiBpbnZhbGlkKV8qKlxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYCkgfiBzZWUgYF9kYXRlKClgXHJcbiAqIEByZXR1cm5zIGBEYXRlYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9tb250aEVuZCA9ICh2YWx1ZT86IGFueSwgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlKTogRGF0ZSA9PiB7XHJcblx0Y29uc3QgZGF0ZTogRGF0ZSA9IF9kYXRlKHZhbHVlLCBfc3RyaWN0KSA/PyBuZXcgRGF0ZSgpO1xyXG5cdHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSArIDEsIDAsIDIzLCA1OSwgNTksIDk5OSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgYERhdGVgIHllYXIncyBzdGFydCBkYXkgfiBhdCBgWVlZWS0wMS0wMSAwMDowMDowMCAwYFxyXG4gKiAtIHNlZSBgX2RhdGUoKWAgcGFyc2luZyBkb2NzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBkYXRlIHZhbHVlIH4gKipfKGRlZmF1bHRzIHRvIGBuZXcgRGF0ZSgpYCB3aGVuIGludmFsaWQpXyoqXHJcbiAqIEBwYXJhbSBfc3RyaWN0IC0gZW5hYmxlIHN0cmljdCBkYXRldGltZSBwYXJzaW5nIChkZWZhdWx0OiBgZmFsc2VgKSB+IHNlZSBgX2RhdGUoKWBcclxuICogQHJldHVybnMgYERhdGVgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3llYXJTdGFydCA9ICh2YWx1ZT86IGFueSwgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlKTogRGF0ZSA9PiB7XHJcblx0Y29uc3QgZGF0ZTogRGF0ZSA9IF9kYXRlKHZhbHVlLCBfc3RyaWN0KSA/PyBuZXcgRGF0ZSgpO1xyXG5cdHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIDAsIDEsIDAsIDAsIDAsIDApO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGBEYXRlYCB5ZWFyJ3MgZW5kIGRheSB+IGF0IGBZWVlZLTEyLTMxIDIzOjU5OjU5IDk5OWBcclxuICogLSBzZWUgYF9kYXRlKClgIHBhcnNpbmcgZG9jc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZSB+ICoqXyhkZWZhdWx0cyB0byBgbmV3IERhdGUoKWAgd2hlbiBpbnZhbGlkKV8qKlxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYCkgfiBzZWUgYF9kYXRlKClgXHJcbiAqIEByZXR1cm5zIGBEYXRlYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF95ZWFyRW5kID0gKHZhbHVlPzogYW55LCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UpOiBEYXRlID0+IHtcclxuXHRjb25zdCBkYXRlOiBEYXRlID0gX2RhdGUodmFsdWUsIF9zdHJpY3QpID8/IG5ldyBEYXRlKCk7XHJcblx0cmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMTEsIDAsIDIzLCA1OSwgNTksIDk5OSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgYERhdGVgIHZhbHVlIHRvIGBZWVlZLU1NLUREIEhIOm1tOnNzYCBmb3JtYXQgKGUuZy4gYCcyMDIzLTA1LTI3IDIyOjExOjU3J2ApXHJcbiAqIC0gc2VlIGBfZGF0ZSgpYCBwYXJzaW5nIGRvY3NcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGRhdGUgdmFsdWVcclxuICogQHBhcmFtIF9zdHJpY3QgLSBlbmFibGUgc3RyaWN0IGRhdGV0aW1lIHBhcnNpbmcgKGRlZmF1bHQ6IGBmYWxzZWApIH4gc2VlIGBfZGF0ZSgpYFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB+IGAnWVlZWS1NTS1ERCBISDptbTpzcydgIHwgZW1wdHkgYCcnYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGF0ZXRpbWUgPSAodmFsdWU/OiBhbnksIF9zdHJpY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgZGF0ZTogRGF0ZXx1bmRlZmluZWQgPSBfZGF0ZSh2YWx1ZSwgX3N0cmljdCk7XHJcblx0aWYgKCFkYXRlKSByZXR1cm4gJyc7XHJcblx0Y29uc3QgdmFsdWVzOiBudW1iZXJbXSA9IFtcclxuXHRcdGRhdGUuZ2V0RnVsbFllYXIoKSwgLy95eXl5XHJcblx0XHRkYXRlLmdldE1vbnRoKCkgKyAxLCAvL01NXHJcblx0XHRkYXRlLmdldERhdGUoKSwgLy9kZFxyXG5cdFx0ZGF0ZS5nZXRIb3VycygpLCAvL0hIXHJcblx0XHRkYXRlLmdldE1pbnV0ZXMoKSwgLy9tbVxyXG5cdFx0ZGF0ZS5nZXRTZWNvbmRzKCksIC8vc3NcclxuXHRdO1xyXG5cdGNvbnN0IHBhZGRlZDogc3RyaW5nW10gPSBbXTtcclxuXHRmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZXMpIHBhZGRlZC5wdXNoKCh2YWwgKyAnJykucGFkU3RhcnQoMiwgJzAnKSk7IC8vcGFkIH4gYCcxJyA9PiAnMDEnYFxyXG5cdHJldHVybiBwYWRkZWQuc3BsaWNlKDAsIDMpLmpvaW4oJy0nKSArICcgJyArIHBhZGRlZC5qb2luKCc6Jyk7IC8vdGltZXN0YW1wXHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgYERhdGVgIHZhbHVlIHRvIGBZWVlZLU1NLUREYCBmb3JtYXQgYHN0cmluZ2AgKGUuZy4gYCcyMDIzLTA1LTI3J2ApXHJcbiAqIC0gc2VlIGBfZGF0ZSgpYCBwYXJzaW5nIGRvY3NcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGRhdGUgdmFsdWVcclxuICogQHBhcmFtIF9zdHJpY3QgLSBlbmFibGUgc3RyaWN0IGRhdGV0aW1lIHBhcnNpbmcgKGRlZmF1bHQ6IGBmYWxzZWApIH4gc2VlIGBfZGF0ZSgpYFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB+IGAnWVlZWS1NTS1ERCdgIHwgZW1wdHkgYCcnYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGF0ZXN0ciA9ICh2YWx1ZT86IGFueSwgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nID0+IF9kYXRldGltZSh2YWx1ZSwgX3N0cmljdCkuc3Vic3RyaW5nKDAsIDEwKTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBgRGF0ZWAgdmFsdWUgdG8gYEhIOm1tOnNzYCBmb3JtYXQgYHN0cmluZ2AgKGUuZy4gYCcyMjoxMTo1NydgKVxyXG4gKiAtIHNlZSBgX2RhdGUoKWAgcGFyc2luZyBkb2NzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBkYXRlIHZhbHVlXHJcbiAqIEBwYXJhbSBfc3RyaWN0IC0gZW5hYmxlIHN0cmljdCBkYXRldGltZSBwYXJzaW5nIChkZWZhdWx0OiBgZmFsc2VgKSB+IHNlZSBgX2RhdGUoKWBcclxuICogQHJldHVybnMgYHN0cmluZ2AgfiBgJ0hIOm1tOnNzJ2AgfCBlbXB0eSBgJydgIHdoZW4gaW52YWxpZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90aW1lc3RyID0gKHZhbHVlPzogYW55LCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcgPT4gX2RhdGV0aW1lKHZhbHVlLCBfc3RyaWN0KS5zdWJzdHJpbmcoMTEsIDE5KTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBJU08gZm9ybWF0dGVkIGRhdGUgdmFsdWUgdG8gbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxyXG4gKiAtIGJvcnJvd2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVuc2UveXVwL2Jsb2IvMWVlOWIyMWM5OTRiNDI5M2YzYWIzMzgxMTlkYzE3YWIyZjRlMjg0Yy9zcmMvdXRpbC9wYXJzZUlzb0RhdGUudHNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElTTyBkYXRlIGBzdHJpbmdgIChpLmUuIGAnMjAyMi0xMi0xOVQxMzoxMjo0Mi4wMDArMDAwMCdgL2AnMjAyMi0xMi0xOVQxMzoxMjo0Mi4wMDBaJ2AgPT4gYDE2NzE0NTU1NjIwMDBgKVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCBtaWxsaXNlY29uZHMgdGltZXN0YW1wIHwgYHVuZGVmaW5lZGAgd2hlbiBpbnZhbGlkXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3BhcnNlSXNvID0gKHZhbHVlOiBzdHJpbmcpOiBudW1iZXJ8dW5kZWZpbmVkID0+IHtcclxuXHRjb25zdCByZWdleCAgPSAvXihcXGR7NH18WystXVxcZHs2fSkoPzotPyhcXGR7Mn0pKD86LT8oXFxkezJ9KSk/KT8oPzpbIFRdPyhcXGR7Mn0pOj8oXFxkezJ9KSg/Ojo/KFxcZHsyfSkoPzpbLC5dKFxcZHsxLH0pKT8pPyg/OihaKXwoWystXSkoXFxkezJ9KSg/Ojo/KFxcZHsyfSkpPyk/KT8kLztcclxuXHQvLyAgICAgICAgICAgICAgICAxIFlZWVkgICAgICAgICAgICAgICAgMiBNTSAgICAgICAgMyBERCAgICAgICAgICAgICAgNCBISCAgICAgNSBtbSAgICAgICAgNiBzcyAgICAgICAgICAgNyBtc2VjICAgICAgICAgOCBaIDkgwrEgICAxMCB0ekhIICAgIDExIHR6bW1cclxuXHRsZXQgc3RydWN0OiBhbnksIHRpbWVzdGFtcDogbnVtYmVyID0gTmFOO1xyXG5cdHRyeSB7XHJcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XHJcblx0fVxyXG5cdGNhdGNoIChlKXtcclxuXHRcdHZhbHVlID0gJyc7XHJcblx0fVxyXG5cdGlmIChzdHJ1Y3QgPSByZWdleC5leGVjKHZhbHVlKSl7XHJcblx0XHRmb3IgKGNvbnN0IGsgb2YgWzEsIDQsIDUsIDYsIDcsIDEwLCAxMV0pIHN0cnVjdFtrXSA9ICtzdHJ1Y3Rba10gfHwgMDsgLy9hbGxvdyB1bmRlZmluZWQgZGF5cyBhbmQgbW9udGhzXHJcblx0XHRzdHJ1Y3RbMl0gPSAoK3N0cnVjdFsyXXx8MSkgLSAxO1xyXG5cdFx0c3RydWN0WzNdID0gK3N0cnVjdFszXXx8MTsgLy9hbGxvdyBhcmJpdHJhcnkgc3ViLXNlY29uZCBwcmVjaXNpb24gYmV5b25kIG1pbGxpc2Vjb25kc1xyXG5cdFx0c3RydWN0WzddID0gc3RydWN0WzddID8gU3RyaW5nKHN0cnVjdFs3XSkuc3Vic3RyaW5nKDAsIDMpIDogMDsgLy90aW1lc3RhbXBzIHdpdGhvdXQgdGltZXpvbmUgaWRlbnRpZmllcnMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgbG9jYWwgdGltZVxyXG5cdFx0aWYgKChzdHJ1Y3RbOF0gPT09IHVuZGVmaW5lZCB8fCBzdHJ1Y3RbOF0gPT09ICcnKSAmJiAoc3RydWN0WzldID09PSB1bmRlZmluZWQgfHwgc3RydWN0WzldID09PSAnJykpe1xyXG5cdFx0XHR0aW1lc3RhbXAgPSArbmV3IERhdGUoc3RydWN0WzFdLCBzdHJ1Y3RbMl0sIHN0cnVjdFszXSwgc3RydWN0WzRdLCBzdHJ1Y3RbNV0sIHN0cnVjdFs2XSwgc3RydWN0WzddKTtcclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRsZXQgbWluX29mZnNldCA9IDA7XHJcblx0XHRcdGlmIChzdHJ1Y3RbOF0gIT09ICdaJyAmJiBzdHJ1Y3RbOV0gIT09IHVuZGVmaW5lZCl7XHJcblx0XHRcdFx0bWluX29mZnNldCA9IHN0cnVjdFsxMF0gKiA2MCArIHN0cnVjdFsxMV07XHJcblx0XHRcdFx0aWYgKHN0cnVjdFs5XSA9PT0gJysnKSBtaW5fb2Zmc2V0ID0gMCAtIG1pbl9vZmZzZXQ7XHJcblx0XHRcdH1cclxuXHRcdFx0dGltZXN0YW1wID0gRGF0ZS5VVEMoc3RydWN0WzFdLCBzdHJ1Y3RbMl0sIHN0cnVjdFszXSwgc3RydWN0WzRdLCBzdHJ1Y3RbNV0gKyBtaW5fb2Zmc2V0LCBzdHJ1Y3RbNl0sIHN0cnVjdFs3XSk7XHJcblx0XHR9XHJcblx0fVxyXG5cdGVsc2UgdGltZXN0YW1wID0gRGF0ZS5wYXJzZSA/IERhdGUucGFyc2UodmFsdWUpIDogTmFOO1xyXG5cdHJldHVybiAhaXNOYU4odGltZXN0YW1wKSA/IHRpbWVzdGFtcCA6IHVuZGVmaW5lZDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBZZWFyIHVuaXQgbWlsbGlzZWNvbmRzIH4gY2xvc2UgZXN0aW1hdGUgYDM2NS4yNWAgZGF5c1xyXG4gKiAtIGAzNjUuMjUgKiAyNCAqIDYwICogNjAgKiAxMDAwYCA9IGAzMTU1NzYwMDAwMGAgbXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBZRUFSX01TOiBudW1iZXIgPSAzNjUuMjUgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xyXG5cclxuLyoqXHJcbiAqIE1vbnRoIHVuaXQgbWlsbGlzZWNvbmRzIH4gY2xvc2UgZXN0aW1hdGUgYDMwLjQ0YCBkYXlzXHJcbiAqIC0gYDMwLjQ0ICogMjQgKiA2MCAqIDYwICogMTAwMGAgPSBgMjYzMDAxNjAwMC4wMDAwMDA1YCBtc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IE1PTlRIX01TOiBudW1iZXIgPSAzMC40NCAqIDI0ICogNjAgKiA2MCAqIDEwMDA7XHJcblxyXG4vKipcclxuICogRGF5IHVuaXQgbWlsbGlzZWNvbmRzXHJcbiAqIC0gYDI0ICogNjAgKiA2MCAqIDEwMDBgID0gYDg2NDAwMDAwYCBtc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IERBWV9NUzogbnVtYmVyID0gMjQgKiA2MCAqIDYwICogMTAwMDtcclxuXHJcbi8qKlxyXG4gKiBIb3VyIHVuaXQgbWlsbGlzZWNvbmRzXHJcbiAqIC0gYDYwICogNjAgKiAxMDAwYCA9IGAzNjAwMDAwYCBtc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEhPVVJfTVM6IG51bWJlciA9IDYwICogNjAgKiAxMDAwO1xyXG5cclxuLyoqXHJcbiAqIE1pbnV0ZSB1bml0IG1pbGxpc2Vjb25kc1xyXG4gKiAtIGA2MCAqIDEwMDBgID0gYDYwMDAwYCBtc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IE1JTlVURV9NUzogbnVtYmVyID0gNjAgKiAxMDAwO1xyXG5cclxuLyoqXHJcbiAqIFNlY29uZCB1bml0IG1pbGxpc2Vjb25kc1xyXG4gKiAtIGAxMDAwYCBtc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFNFQ09ORF9NUzogbnVtYmVyID0gMTAwMDtcclxuXHJcbi8qKlxyXG4gKiBEdXJhdGlvbiBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUR1cmF0aW9uIHtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGR1cmF0aW9uIHllYXJzXHJcblx0ICovXHJcblx0eWVhcnM6IG51bWJlcjtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGR1cmF0aW9uIG1vbnRoc1xyXG5cdCAqL1xyXG5cdG1vbnRoczogbnVtYmVyO1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIC0gZHVyYXRpb24gZGF5c1xyXG5cdCAqL1xyXG5cdGRheXM6IG51bWJlcjtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGR1cmF0aW9uIGhvdXJzXHJcblx0ICovXHJcblx0aG91cnM6IG51bWJlcjtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGR1cmF0aW9uIG1pbnV0ZXNcclxuXHQgKi9cclxuXHRtaW51dGVzOiBudW1iZXI7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBkdXJhdGlvbiBzZWNvbmRzXHJcblx0ICovXHJcblx0c2Vjb25kczogbnVtYmVyO1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIC0gZHVyYXRpb24gbWlsbGlzZWNvbmRzXHJcblx0ICovXHJcblx0bWlsbGlzZWNvbmRzOiBudW1iZXI7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBkdXJhdGlvbiB0b3RhbCBkYXlzIChpLmUuIGBNYXRoLmZsb29yKCh0aW1lX2RpZmZlcmVuY2VfbXMpLygyNCo2MCo2MCoxMDAwKSlgKVxyXG5cdCAqL1xyXG5cdHRvdGFsX2RheXM6IG51bWJlcjtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGR1cmF0aW9uIHRvdGFsIHRpbWUgaW4gbWlsbGlzZWNvbmRzIChpLmUuIGBNYXRoLmFicyh0aW1lX2RpZmZlcmVuY2VfbXMpYClcclxuXHQgKi9cclxuXHR0b3RhbF90aW1lOiBudW1iZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gc3RhcnQgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kc1xyXG5cdCAqL1xyXG5cdHN0YXJ0X3RpbWU6IG51bWJlcixcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGVuZCB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzXHJcblx0ICovXHJcblx0ZW5kX3RpbWU6IG51bWJlcixcclxuXHJcblx0LyoqXHJcblx0ICogLSBjb252ZXJ0IHRvIHRleHQgbWV0aG9kXHJcblx0ICogXHJcblx0ICogQGV4YW1wbGVcclxuXHQgKiBfZHVyYXRpb24oMTgyNDU4ODc4KS50b1N0cmluZygwPykgLy8nMiBkYXlzIDAyOjQwOjU4JyAoc2hvcnQpXHJcblx0ICogX2R1cmF0aW9uKDE4MjQ1ODg3OCkudG9TdHJpbmcoMSkgIC8vJzIgZGF5cywgMiBob3VycywgNDAgbWludXRlcywgNTggc2Vjb25kcyBhbmQgODc4IG1pbGxpc2Vjb25kcycgKGxvbmcpXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG1vZGUgLSB0ZXh0IG1vZGUgKGRlZmF1bHQ6IGAwYCkgfiBgMGAgPSBzaG9ydCwgYDFgID0gbG9uZyBfKHNlZSBkb2NzKV9cclxuXHQgKiBAcmV0dXJucyBgc3RyaW5nYFxyXG5cdCAqL1xyXG5cdHRvU3RyaW5nOiAobW9kZT86bnVtYmVyKT0+c3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogKipbaW50ZXJuYWxdKiogQ3JlYXRlIGBJRHVyYXRpb25gIG9iamVjdFxyXG4gKiBcclxuICogQHBhcmFtIHllYXJzIC0gZWxhcHNlZCB5ZWFyc1xyXG4gKiBAcGFyYW0gbW9udGhzIC0gZWxhcHNlZCBtb250aHNcclxuICogQHBhcmFtIGRheXMgLSBlbGFwc2VkIGRheXNcclxuICogQHBhcmFtIGhvdXJzIC0gZWxhcHNlZCBob3Vyc1xyXG4gKiBAcGFyYW0gbWludXRlcyAtIGVsYXBzZWQgbWludXRlc1xyXG4gKiBAcGFyYW0gc2Vjb25kcyAtIGVsYXBzZWQgc2Vjb25kc1xyXG4gKiBAcGFyYW0gbWlsbGlzZWNvbmRzIC0gZWxhcHNlZCBtaWxsaXNlY29uZHNcclxuICogQHBhcmFtIHRvdGFsX2RheXMgLSBlbGFwc2VkIHRvdGFsIGRheXNcclxuICogQHBhcmFtIHRvdGFsX3RpbWUgLSBlbGFwc2VkIHRvdGFsIHRpbWVcclxuICogQHBhcmFtIHN0YXJ0X3RpbWUgLSBzdGFydCB0aW1lc3RhbXBcclxuICogQHBhcmFtIGVuZF90aW1lIC0gZW5kIHRpbWVzdGFtcFxyXG4gKiBAcmV0dXJucyBgSUR1cmF0aW9uYFxyXG4gKi9cclxuY29uc3QgY3JlYXRlX2R1cmF0aW9uID0gKHllYXJzOiBudW1iZXIsIG1vbnRoczogbnVtYmVyLCBkYXlzOiBudW1iZXIsIGhvdXJzOiBudW1iZXIsIG1pbnV0ZXM6IG51bWJlciwgc2Vjb25kczogbnVtYmVyLCBtaWxsaXNlY29uZHM6IG51bWJlciwgdG90YWxfZGF5czogbnVtYmVyLCB0b3RhbF90aW1lOiBudW1iZXIsIHN0YXJ0X3RpbWU6IG51bWJlciwgZW5kX3RpbWU6IG51bWJlcikgPT4gKHtcclxuXHR5ZWFycyxcclxuXHRtb250aHMsXHJcblx0ZGF5cyxcclxuXHRob3VycyxcclxuXHRtaW51dGVzLFxyXG5cdHNlY29uZHMsXHJcblx0bWlsbGlzZWNvbmRzLFxyXG5cdHRvdGFsX2RheXMsXHJcblx0dG90YWxfdGltZSxcclxuXHRzdGFydF90aW1lLFxyXG5cdGVuZF90aW1lLFxyXG5cdHRvU3RyaW5nOiBmdW5jdGlvbihtb2RlOiBudW1iZXIgPSAwKXtcclxuXHRcdG1vZGUgPSBbMCwgMV0uaW5jbHVkZXMobW9kZSA9IHBhcnNlSW50KG1vZGUgYXMgYW55KSkgPyBtb2RlIDogMDtcclxuXHRcdGNvbnN0IGJ1ZmZlcl90ZXh0OiBzdHJpbmdbXSA9IFtdLCBidWZmZXJfdGltZTogc3RyaW5nW10gPSBbXTtcclxuXHRcdGNvbnN0IF9hZGQgPSAodmFsOiBhbnksIG5hbWU6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG5cdFx0XHRpZiAobW9kZSA9PT0gMCAmJiBbJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsICdtaWxsaXNlY29uZCddLmluY2x1ZGVzKG5hbWUpKXtcclxuXHRcdFx0XHRpZiAobmFtZSA9PT0gJ21pbGxpc2Vjb25kJykgcmV0dXJuO1xyXG5cdFx0XHRcdGJ1ZmZlcl90aW1lLnB1c2goU3RyaW5nKHZhbCkucGFkU3RhcnQoMiwgJzAnKSk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAodmFsKSBidWZmZXJfdGV4dC5wdXNoKHZhbCArICcgJyArIG5hbWUgKyAodmFsID4gMSA/ICdzJyA6ICcnKSk7XHJcblx0XHR9O1xyXG5cdFx0X2FkZCh5ZWFycywgJ3llYXInKTtcclxuXHRcdF9hZGQobW9udGhzLCAnbW9udGgnKTtcclxuXHRcdF9hZGQoZGF5cywgJ2RheScpO1xyXG5cdFx0X2FkZChob3VycywgJ2hvdXInKTtcclxuXHRcdF9hZGQobWludXRlcywgJ21pbnV0ZScpO1xyXG5cdFx0X2FkZChzZWNvbmRzLCAnc2Vjb25kJyk7XHJcblx0XHRfYWRkKG1pbGxpc2Vjb25kcywgJ21pbGxpc2Vjb25kJyk7XHJcblx0XHRpZiAobW9kZSA9PT0gMCkgcmV0dXJuIChidWZmZXJfdGV4dC5sZW5ndGggPyBidWZmZXJfdGV4dC5qb2luKCcsICcpICsgJyAnIDogJycpICsgYnVmZmVyX3RpbWUuam9pbignOicpO1xyXG5cdFx0aWYgKCFidWZmZXJfdGV4dC5sZW5ndGgpIGJ1ZmZlcl90ZXh0LnB1c2goJzAgbWlsbGlzZWNvbmRzJyk7XHJcblx0XHRyZXR1cm4gYnVmZmVyX3RleHQuam9pbignLCAnKS5yZXBsYWNlKC8sKFteLF0qKSQvLCAnIGFuZCQxJyk7XHJcblx0XHQvLyByZXR1cm4gYnVmZmVyX3RleHQubGVuZ3RoID4gMSA/IGJ1ZmZlcl90ZXh0LnNsaWNlKDAsIC0xKS5qb2luKCcsICcpICsgJyBhbmQgJyArIGJ1ZmZlcl90ZXh0W2J1ZmZlcl90ZXh0Lmxlbmd0aCAtIDFdIDogYnVmZmVyX3RleHQuam9pbignJyk7XHJcblx0fSxcclxufSk7XHJcblxyXG4vKipcclxuICogR2V0IGVsYXBzZWQgZHVyYXRpb24gYmV0d2VlbiB0d28gZGF0ZXMvdGltZXN0YW1wcyB+IGV4dHJhIGFjY3VyYWN5IGNvbnNpZGVyaW5nIGxlYXAgeWVhcnNcclxuICogLSBzdGFydCBhbmQgZW5kIHZhbHVlcyBhcmUgcmVvcmRlcmVkIGF1dG9tYXRpY2FsbHkgKHN0YXJ0ID0gbWluLCBlbmQgPSBtYXgpXHJcbiAqIFxyXG4gKiBAcGFyYW0gc3RhcnQgLSBzdGFydCBkYXRlL3RpbWVzdGFtcFxyXG4gKiBAcGFyYW0gZW5kIC0gZW5kIGRhdGUvdGltZXN0YW1wIChkZWZhdWx0OiBgdW5kZWZpbmVkYClcclxuICogQHBhcmFtIF9zdHJpY3QgLSBlbmFibGUgc3RyaWN0IGRhdGV0aW1lIHBhcnNpbmcgKGRlZmF1bHQ6IGBmYWxzZWApIH4gc2VlIGBfZGF0ZSgpYFxyXG4gKiBAdGhyb3dzIGBUeXBlRXJyb3JgIG9uIGludmFsaWQgc3RhcnQvZW5kIHRpbWUgdmFsdWVcclxuICogQHJldHVybnMgYElEdXJhdGlvbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZWxhcHNlZCA9IChzdGFydDogYW55LCBlbmQ6IGFueSA9IHVuZGVmaW5lZCwgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlKTogSUR1cmF0aW9uID0+IHtcclxuXHRpZiAoIShzdGFydCA9IF9kYXRlKHN0YXJ0LCBfc3RyaWN0KSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgZWxhcHNlZCBzdGFydCBkYXRlIHZhbHVlISBQYXNzIGEgdmFsaWQgRGF0ZSBpbnN0YW5jZSwgaW50ZWdlciB0aW1lc3RhbXAgb3IgZGF0ZSBzdHJpbmcgdmFsdWUuJyk7XHJcblx0aWYgKCEoZW5kID0gX2RhdGUoZW5kLCBfc3RyaWN0KSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgZWxhcHNlZCBlbmQgZGF0ZSB2YWx1ZSEgUGFzcyBhIHZhbGlkIERhdGUgaW5zdGFuY2UsIGludGVnZXIgdGltZXN0YW1wIG9yIGRhdGUgc3RyaW5nIHZhbHVlLicpO1xyXG5cdGlmIChzdGFydCA+IGVuZCl7XHJcblx0XHRjb25zdCBzd2FwID0gc3RhcnQ7XHJcblx0XHRzdGFydCA9IGVuZDtcclxuXHRcdGVuZCA9IHN3YXA7XHJcblx0fVxyXG5cdGxldCB5ZWFyczogbnVtYmVyID0gMDtcclxuXHRsZXQgbW9udGhzOiBudW1iZXIgPSAwO1xyXG5cdGxldCBkYXlzOiBudW1iZXIgPSAwO1xyXG5cdGxldCBob3VyczogbnVtYmVyID0gMDtcclxuXHRsZXQgbWludXRlczogbnVtYmVyID0gMDtcclxuXHRsZXQgc2Vjb25kczogbnVtYmVyID0gMDtcclxuXHRsZXQgbWlsbGlzZWNvbmRzOiBudW1iZXIgPSAwXHJcblx0Y29uc3Qgc3RhcnRfdGltZTogbnVtYmVyID0gc3RhcnQuZ2V0VGltZSgpO1xyXG5cdGNvbnN0IGVuZF90aW1lOiBudW1iZXIgPSBlbmQuZ2V0VGltZSgpO1xyXG5cdGNvbnN0IHRvdGFsX3RpbWU6IG51bWJlciA9IGVuZF90aW1lIC0gc3RhcnRfdGltZTtcclxuXHRjb25zdCB0b3RhbF9kYXlzOiBudW1iZXIgPSBNYXRoLmZsb29yKHRvdGFsX3RpbWUgLyBEQVlfTVMpO1xyXG5cdGlmICgobWlsbGlzZWNvbmRzICs9IChlbmQuZ2V0TWlsbGlzZWNvbmRzKCkgLSBzdGFydC5nZXRNaWxsaXNlY29uZHMoKSkpIDwgMCl7XHJcblx0XHRzZWNvbmRzIC0tO1xyXG5cdFx0bWlsbGlzZWNvbmRzICs9IDEwMDA7XHJcblx0fVxyXG5cdGlmICgoc2Vjb25kcyArPSAoZW5kLmdldFNlY29uZHMoKSAtIHN0YXJ0LmdldFNlY29uZHMoKSkpIDwgMCl7XHJcblx0XHRtaW51dGVzIC0tO1xyXG5cdFx0c2Vjb25kcyArPSA2MDtcclxuXHR9XHJcblx0aWYgKChtaW51dGVzICs9IChlbmQuZ2V0TWludXRlcygpIC0gc3RhcnQuZ2V0TWludXRlcygpKSkgPCAwKXtcclxuXHRcdGhvdXJzIC0tO1xyXG5cdFx0bWludXRlcyArPSA2MDtcclxuXHR9XHJcblx0aWYgKChob3VycyArPSAoZW5kLmdldEhvdXJzKCkgLSBzdGFydC5nZXRIb3VycygpKSkgPCAwKXtcclxuXHRcdGRheXMgLS07XHJcblx0XHRob3VycyArPSAyNDtcclxuXHR9XHJcblx0Y29uc3Qgc3RhcnRfeWVhcjogbnVtYmVyID0gc3RhcnQuZ2V0RnVsbFllYXIoKTtcclxuXHRsZXQgc3RhcnRfbW9udGg6IG51bWJlciA9IHN0YXJ0LmdldE1vbnRoKCk7XHJcblx0eWVhcnMgPSBlbmQuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0X3llYXI7XHJcblx0aWYgKChtb250aHMgPSBlbmQuZ2V0TW9udGgoKSAtIHN0YXJ0X21vbnRoKSA8IDApe1xyXG5cdFx0eWVhcnMgLS07XHJcblx0XHRtb250aHMgKz0gMTI7XHJcblx0fVxyXG5cdGlmICgoZGF5cyArPSAoZW5kLmdldERhdGUoKSAtIHN0YXJ0LmdldERhdGUoKSkpIDwgMCl7XHJcblx0XHRpZiAoZW5kLmdldE1vbnRoKCkgPT09IHN0YXJ0LmdldE1vbnRoKCkpIHN0YXJ0X21vbnRoICsrO1xyXG5cdFx0aWYgKG1vbnRocyA8PSAwKXtcclxuXHRcdFx0eWVhcnMgLS07XHJcblx0XHRcdG1vbnRocyA9IDExO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBtb250aHMgLS07XHJcblx0XHRkYXlzICs9IG5ldyBEYXRlKHN0YXJ0X3llYXIsIHN0YXJ0X21vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpO1xyXG5cdH1cclxuXHRyZXR1cm4gY3JlYXRlX2R1cmF0aW9uKHllYXJzLCBtb250aHMsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIHRvdGFsX2RheXMsIHRvdGFsX3RpbWUsIHN0YXJ0X3RpbWUsIGVuZF90aW1lKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgZWxhcHNlZCBkdXJhdGlvbiBiZXR3ZWVuIHR3byBkYXRlcy90aW1lc3RhbXBzIH4gY2xvc2VzdCBlc3RpbWF0aW9uXHJcbiAqIC0gc3RhcnQgYW5kIGVuZCB2YWx1ZXMgYXJlIHJlb3JkZXJlZCBhdXRvbWF0aWNhbGx5IChzdGFydCA9IG1pbiwgZW5kID0gbWF4KVxyXG4gKiBcclxuICogQHBhcmFtIHN0YXJ0IC0gc3RhcnQgZGF0ZS9tcyB0aW1lc3RhbXBcclxuICogQHBhcmFtIGVuZCAtIGVuZCBkYXRlL21zIHRpbWVzdGFtcCAoZGVmYXVsdDogYDBgKVxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYCkgfiBzZWUgYF9kYXRlKClgXHJcbiAqIEB0aHJvd3MgYFR5cGVFcnJvcmAgb24gaW52YWxpZCBzdGFydC9lbmQgdGltZSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgSUR1cmF0aW9uYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kdXJhdGlvbiA9IChzdGFydDogYW55LCBlbmQ6IGFueSA9IDAsIF9zdHJpY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IElEdXJhdGlvbiA9PiB7XHJcblx0aWYgKCEoc3RhcnQgPSBfZGF0ZShzdGFydCwgX3N0cmljdCkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGR1cmF0aW9uIHN0YXJ0IGRhdGUgdmFsdWUhIFBhc3MgYSB2YWxpZCBEYXRlIGluc3RhbmNlLCBpbnRlZ2VyIHRpbWVzdGFtcCBvciBkYXRlIHN0cmluZyB2YWx1ZS4nKTtcclxuXHRpZiAoIShlbmQgPSBfZGF0ZShlbmQsIF9zdHJpY3QpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBkdXJhdGlvbiBlbmQgZGF0ZSB2YWx1ZSEgUGFzcyBhIHZhbGlkIERhdGUgaW5zdGFuY2UsIGludGVnZXIgdGltZXN0YW1wIG9yIGRhdGUgc3RyaW5nIHZhbHVlLicpO1xyXG5cdGlmIChzdGFydCA+IGVuZCl7XHJcblx0XHRjb25zdCBzd2FwID0gc3RhcnQ7XHJcblx0XHRzdGFydCA9IGVuZDtcclxuXHRcdGVuZCA9IHN3YXA7XHJcblx0fVxyXG5cdGxldCBkaWZmOiBudW1iZXIgPSAwO1xyXG5cdGNvbnN0IGVuZF90aW1lOiBudW1iZXIgPSBlbmQuZ2V0VGltZSgpO1xyXG5cdGNvbnN0IHN0YXJ0X3RpbWU6IG51bWJlciA9IHN0YXJ0LmdldFRpbWUoKTtcclxuXHRjb25zdCB0b3RhbF90aW1lOiBudW1iZXIgPSBkaWZmID0gTWF0aC5hYnMoZW5kX3RpbWUgLSBzdGFydF90aW1lKTtcclxuXHRjb25zdCB0b3RhbF9kYXlzOiBudW1iZXIgPSBNYXRoLmZsb29yKHRvdGFsX3RpbWUgLyBEQVlfTVMpO1xyXG5cdGNvbnN0IHllYXJzID0gTWF0aC5mbG9vcih0b3RhbF90aW1lIC8gWUVBUl9NUyk7XHJcblx0ZGlmZiAlPSBZRUFSX01TO1xyXG5cdGNvbnN0IG1vbnRoczogbnVtYmVyID0gTWF0aC5mbG9vcihkaWZmIC8gTU9OVEhfTVMpO1xyXG5cdGRpZmYgJT0gTU9OVEhfTVM7XHJcblx0Y29uc3QgZGF5czogbnVtYmVyID0gTWF0aC5mbG9vcihkaWZmIC8gREFZX01TKTtcclxuXHRkaWZmICU9IERBWV9NUztcclxuXHRjb25zdCBob3VyczogbnVtYmVyID0gTWF0aC5mbG9vcihkaWZmIC8gSE9VUl9NUyk7XHJcblx0ZGlmZiAlPSBIT1VSX01TO1xyXG5cdGNvbnN0IG1pbnV0ZXM6IG51bWJlciA9IE1hdGguZmxvb3IoZGlmZiAvIE1JTlVURV9NUyk7XHJcblx0ZGlmZiAlPSBNSU5VVEVfTVM7XHJcblx0Y29uc3Qgc2Vjb25kczogbnVtYmVyID0gTWF0aC5mbG9vcihkaWZmIC8gU0VDT05EX01TKTtcclxuXHRjb25zdCBtaWxsaXNlY29uZHM6IG51bWJlciA9IGRpZmYgJSBTRUNPTkRfTVM7XHJcblx0cmV0dXJuIGNyZWF0ZV9kdXJhdGlvbih5ZWFycywgbW9udGhzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzLCB0b3RhbF9kYXlzLCB0b3RhbF90aW1lLCBzdGFydF90aW1lLCBlbmRfdGltZSk7XHJcbn07IiwiaW1wb3J0IHsgYm9vbCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgZGVib3VuY2VkIGNhbGxiYWNrIGZ1bmN0aW9uXHJcbiAqIFxyXG4gKiBAcGFyYW0gaGFuZGxlciAgVGhyb3R0bGVkIGNhbGxiYWNrIGhhbmRsZXJcclxuICogQHBhcmFtIGRlbGF5ICBDYWxsYmFjayBkZWxheSBtaWxsaXNlY29uZHNcclxuICogQHBhcmFtIG1heFdhaXQgIE1heGltdW0gY2FsbGJhY2sgZGVsYXkgbWlsbGlzZWNvbmRzXHJcbiAqIEBwYXJhbSBpbW1lZGlhdGUgIEV4ZWN1dGUgY2FsbGJhY2sgYmVmb3JlIGRlbGF5XHJcbiAqIEByZXR1cm5zIFRocm90dGxlZCBjYWxsYmFjayBmdW5jdGlvblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kZWJvdWNlZCA9IChoYW5kbGVyOiAoLi4uYXJnczogYW55KT0+dm9pZCwgZGVsYXk6IG51bWJlciA9IDIwMCwgbWF4V2FpdDogbnVtYmVyID0gMCwgaW1tZWRpYXRlOiBib29sID0gZmFsc2UpOiAoKC4uLmFyZ3M6IGFueSk9PnZvaWQpID0+IHtcclxuXHRkZWxheSA9ICFpc05hTihkZWxheSA9IHBhcnNlRmxvYXQoZGVsYXkgYXMgYW55KSkgJiYgZGVsYXkgPj0gMCA/IGRlbGF5IDogMjAwO1xyXG5cdG1heFdhaXQgPSAhaXNOYU4obWF4V2FpdCA9IHBhcnNlRmxvYXQobWF4V2FpdCBhcyBhbnkpKSAmJiBtYXhXYWl0ID49IDAgJiYgbWF4V2FpdCA+IGRlbGF5ID8gbWF4V2FpdCA6IDA7XHJcblx0aW1tZWRpYXRlID0gISFpbW1lZGlhdGU7XHJcblx0bGV0IGltbWVkaWF0ZVRpbWVyOiBhbnksIGNhbGxUaW1lcjogYW55LCB3YWl0VGltZXI6IGFueSwgbmV4dENhbGw6IFtjb250ZXh0OiBhbnksIGFyZ3M6IGFueVtdXSB8IHVuZGVmaW5lZDtcclxuXHRjb25zdCBleGVjdXRlID0gKGlzX2ltbWVkaWF0ZT86Ym9vbCkgPT4ge1xyXG5cdFx0bGV0IG5leHQgPSBuZXh0Q2FsbDtcclxuXHRcdG5leHRDYWxsID0gdW5kZWZpbmVkO1xyXG5cdFx0aWYgKHdhaXRUaW1lcil7XHJcblx0XHRcdGNsZWFyVGltZW91dCh3YWl0VGltZXIpO1xyXG5cdFx0XHR3YWl0VGltZXIgPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblx0XHRpZiAoY2FsbFRpbWVyICYmICFpc19pbW1lZGlhdGUpe1xyXG5cdFx0XHRjbGVhclRpbWVvdXQoY2FsbFRpbWVyKTtcclxuXHRcdFx0Y2FsbFRpbWVyID0gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdFx0aWYgKG5leHQ/Lmxlbmd0aCAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgaGFuZGxlcikgaGFuZGxlci5hcHBseSguLi5uZXh0KTtcclxuXHRcdGlmIChkZWxheSAmJiBpbW1lZGlhdGUgJiYgIWlzX2ltbWVkaWF0ZSl7XHJcblx0XHRcdGltbWVkaWF0ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KGltbWVkaWF0ZVRpbWVyKTtcclxuXHRcdFx0XHRpbW1lZGlhdGVUaW1lciA9IHVuZGVmaW5lZDtcclxuXHRcdFx0fSwgZGVsYXkpO1xyXG5cdFx0fVxyXG5cdH07XHJcblx0Y29uc3Qgd3JhcHBlciA9IGZ1bmN0aW9uKHRoaXM6IGFueSwgLi4uYXJnczogYW55W10pe1xyXG5cdFx0bmV4dENhbGwgPSBbdGhpcywgYXJnc107XHJcblx0XHRpZiAoIWRlbGF5KSByZXR1cm4gZXhlY3V0ZSgpO1xyXG5cdFx0Y29uc3QgX25leHQgPSAobm9fd2FpdD0wKSA9PiB7XHJcblx0XHRcdGNsZWFyVGltZW91dChjYWxsVGltZXIpO1xyXG5cdFx0XHRjYWxsVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGV4ZWN1dGUoKSwgZGVsYXkpO1xyXG5cdFx0XHRpZiAoIW5vX3dhaXQgJiYgbWF4V2FpdCAmJiAhd2FpdFRpbWVyKSB3YWl0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGV4ZWN1dGUoKSwgbWF4V2FpdCk7XHJcblx0XHR9O1xyXG5cdFx0aWYgKCEoaW1tZWRpYXRlICYmICFpbW1lZGlhdGVUaW1lciAmJiAhY2FsbFRpbWVyKSkgcmV0dXJuIF9uZXh0KCk7XHJcblx0XHRfbmV4dCgxKVxyXG5cdFx0ZXhlY3V0ZSgxKTtcclxuXHR9O1xyXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdyYXBwZXIsIHtcclxuXHRcdGxlbmd0aDoge3ZhbHVlOiBoYW5kbGVyLmxlbmd0aH0sXHJcblx0XHRuYW1lOiB7dmFsdWU6IGAke2hhbmRsZXIubmFtZXx8J2Fub255bW91cyd9X19kZWJvdW5jZWRfXyR7ZGVsYXl9YH0sXHJcblx0fSk7XHJcblx0cmV0dXJuIHdyYXBwZXI7XHJcbn07IiwiLyoqXHJcbiAqIFNheSBIZWxsbyFcclxuICogXHJcbiAqIEBwYXJhbSBuYW1lXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3NheUhlbGxvID0gKG5hbWU/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG5cdG5hbWUgPSBuYW1lPy5sZW5ndGggPyBuYW1lIDogJ1RodWt1JztcclxuXHRjb25zdCBoZWxsbyA9IGBbeF0gLSBIZWxsbyAke25hbWV9IWA7XHJcblx0Y29uc29sZS5sb2coaGVsbG8pO1xyXG5cdHJldHVybiBoZWxsbztcclxufSIsIi8qKlxyXG4gKiBDdXN0b20gYEpTT04uc3RyaW5naWZ5YCB3aXRoIGV4dGVuZGVkIGN1c3RvbSByZXBsYWNlclxyXG4gKiAtIERlZmF1bHQgdmFsdWUgZm9yIGB1bmRlZmluZWRgIHZhbHVlIGFyZ3VtZW50XHJcbiAqIC0gRml4IGBFcnJvcmAsIGBTZXRgLCBgTWFwYCBzdHJpbmdpZnlcclxuICogLSBDaXJjdWxhciByZWZlcmVuY2UgZml4ZXNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgUGFyc2UgdmFsdWUgKGB1bmRlZmluZWRgIHZhbHVlIGlzIHJlcGxhY2VkIHdpdGggYF91bmRlZmluZWRgIGFyZ3VtZW50IHN1YnN0aXR1dGUgdmFsdWUpXHJcbiAqIEBwYXJhbSBzcGFjZSAgSW5kZW50YXRpb24gc3BhY2VcclxuICogQHBhcmFtIF91bmRlZmluZWQgIERlZmF1bHQgYHVuZGVmaW5lZGAgYXJndW1lbnQgYHZhbHVlYCBzdWJzdGl0dXRlIChkZWZhdWx0IGBudWxsYClcclxuICogQHJldHVybnNcclxuICovXHJcbiBleHBvcnQgY29uc3QgX2pzb25TdHJpbmdpZnkgPSAodmFsdWU6IGFueSwgc3BhY2U/OiBzdHJpbmd8bnVtYmVyfG51bGx8dW5kZWZpbmVkLCBfdW5kZWZpbmVkOiBhbnkgPSBudWxsKTogc3RyaW5nID0+IHtcclxuXHRjb25zdCBfc3BhY2U6IHN0cmluZ3xudW1iZXJ8dW5kZWZpbmVkID0gc3BhY2UgPT09IG51bGwgPyB1bmRlZmluZWQgOiBzcGFjZTtcclxuXHRjb25zdCBwYXJlbnRzOiBhbnkgPSBbXTtcclxuXHRjb25zdCBwYXRoOiBhbnlbXSA9IFsndGhpcyddO1xyXG5cdGNvbnN0IHJlZnMgPSBuZXcgTWFwPGFueSwgYW55PigpO1xyXG5cdGNvbnN0IF9jbGVhciA9ICgpOiB2b2lkID0+IHtcclxuXHRcdHJlZnMuY2xlYXIoKTtcclxuXHRcdHBhcmVudHMubGVuZ3RoID0gMDtcclxuXHRcdHBhdGgubGVuZ3RoID0gMTtcclxuXHR9O1xyXG5cdGNvbnN0IF9wYXJlbnRzID0gKGtleTogYW55LCB2YWx1ZTogYW55KTogdm9pZCA9PiB7XHJcblx0XHRsZXQgaSA9IHBhcmVudHMubGVuZ3RoIC0gMSwgcHJldiA9IHBhcmVudHNbaV07XHJcblx0XHRpZiAocHJldltrZXldID09PSB2YWx1ZSB8fCBpID09PSAwKXtcclxuXHRcdFx0cGF0aC5wdXNoKGtleSk7XHJcblx0XHRcdHBhcmVudHMucHVzaCh2YWx1ZSk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHdoaWxlIChpLS0gPj0gMCkge1xyXG5cdFx0XHRwcmV2ID0gcGFyZW50c1tpXTtcclxuXHRcdFx0aWYgKHByZXY/LltrZXldID09PSB2YWx1ZSl7XHJcblx0XHRcdFx0aSArPSAyO1xyXG5cdFx0XHRcdHBhcmVudHMubGVuZ3RoID0gaTtcclxuXHRcdFx0XHRwYXRoLmxlbmd0aCA9IGk7XHJcblx0XHRcdFx0LS1pO1xyXG5cdFx0XHRcdHBhcmVudHNbaV0gPSB2YWx1ZTtcclxuXHRcdFx0XHRwYXRoW2ldID0ga2V5O1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fTtcclxuXHRjb25zdCBfcmVwbGFjZXIgPSBmdW5jdGlvbih0aGlzIDphbnksIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55IHtcclxuXHRcdGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xyXG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3Ipe1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjYXRjaCAoZSl7XHJcblx0XHRcdFx0Y29uc3QgZXJyb3IgPSAnW0ZBSUxVUkVdIFBhcnNlIEVycm9yIHRvIFN0cmluZyBmYWlsZWQhJztcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oZXJyb3IsIHt2YWx1ZSwgZX0pO1xyXG5cdFx0XHRcdHZhbHVlID0gZXJyb3I7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNldCkgdmFsdWUgPSBbLi4udmFsdWVdO1xyXG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgTWFwKSB2YWx1ZSA9IFsuLi52YWx1ZV07XHJcblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHZhbHVlID0gdmFsdWUgKyAnJztcclxuXHRcdGlmICgnb2JqZWN0JyA9PT0gdHlwZW9mIHZhbHVlKXtcclxuXHRcdFx0aWYgKGtleSkgX3BhcmVudHMoa2V5LCB2YWx1ZSk7XHJcblx0XHRcdGNvbnN0IG90aGVyID0gcmVmcy5nZXQodmFsdWUpO1xyXG5cdFx0XHRpZiAob3RoZXIpIHJldHVybiAnW0NpcmN1bGFyIFJlZmVyZW5jZV0nICsgb3RoZXI7XHJcblx0XHRcdGVsc2UgcmVmcy5zZXQodmFsdWUsIHBhdGguam9pbignLicpKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9O1xyXG5cdHRyeSB7XHJcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgdmFsdWUgPSBfdW5kZWZpbmVkICE9PSB1bmRlZmluZWQgPyBfdW5kZWZpbmVkIDogX3VuZGVmaW5lZCA9IG51bGw7XHJcblx0XHRwYXJlbnRzLnB1c2godmFsdWUpO1xyXG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBfcmVwbGFjZXIsIF9zcGFjZSk7XHJcblx0fVxyXG5cdGZpbmFsbHkge1xyXG5cdFx0X2NsZWFyKCk7XHJcblx0fVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEN1c3RvbSBgSlNPTi5wYXJzZWAgd2l0aCBlcnJvciBjYXRjaCBhbmQgZGVmYXVsdCByZXN1bHQgb24gcGFyc2UgZmFpbHVyZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEBwYXJhbSBfZGVmYXVsdFxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9qc29uUGFyc2UgPSAodmFsdWU6IHN0cmluZywgX2RlZmF1bHQ/OiBhbnkpOiBhbnkgPT4ge1xyXG5cdHRyeSB7XHJcblx0XHRyZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcblx0fVxyXG5cdGNhdGNoIChlKXtcclxuXHRcdHJldHVybiBfZGVmYXVsdDtcclxuXHR9XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSBqc29uIHN0cmluZ2lmeSBhbmQgcGFyc2UgdmFsdWUgfiBgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHJldHVybnMgYGFueWAganNvbiBzdHJpbmdpZmllZCBhbmQgcGFyc2VkIHZhbHVlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2pzb25Db3B5ID0gPFRSZXR1cm4gPSBhbnk+KHZhbHVlOiBhbnkpOiBUUmV0dXJuID0+ICgnb2JqZWN0JyA9PT0gdHlwZW9mIHZhbHVlICYmIHZhbHVlID8gX2pzb25QYXJzZShfanNvblN0cmluZ2lmeSh2YWx1ZSkpIDogdmFsdWUpIGFzIGFueTtcclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0ZSBvYmplY3QgSlNPTiB0ZXh0XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSB2YWxpZGF0ZSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaXNPYmpKc29uID0gKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuXHR0cnkge1xyXG5cdFx0aWYgKCEoJ3N0cmluZycgPT09IHR5cGVvZiB2YWx1ZSAmJiAodmFsdWUgPSB2YWx1ZS50cmltKCkpKSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0aWYgKCEvXlxcey4rXFx9JHxeXFxbLitcXF0kL3MudGVzdCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcclxuXHRcdGNvbnN0IHZhbDogYW55ID0gX2pzb25QYXJzZSh2YWx1ZSk7XHJcblx0XHRyZXR1cm4gdmFsICYmIE9iamVjdCh2YWwpID09PSB2YWw7XHJcblx0fVxyXG5cdGNhdGNoIChlKXtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn07XHJcbiIsImltcG9ydCB7IGJvb2wgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdmFsdWUgaXMgbnVtZXJpY1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlICBQYXJzZSB2YWx1ZVxyXG4gKiBAcGFyYW0gYm9vbGVhbnMgIFBhc3MgYGJvb2xlYW5gIHZhbHVlcyBhcyBudW1lcmljXHJcbiAqIEBwYXJhbSBibGFua3MgIFBhc3MgZW1wdHkgYHN0cmluZ2AgdmFsdWVzIChiZWNhdXNlIGAhaXNOYU4oJycpID09PSB0cnVlYClcclxuICogQHJldHVybnMgYGJvb2xlYW5gIGlzIG51bWVyaWNcclxuICovXHJcbmV4cG9ydCBjb25zdCBfbnVtZXJpYyA9ICh2YWx1ZTogYW55LCBib29sZWFuczogYm9vbCA9IGZhbHNlLCBibGFua3M6IGJvb2wgPSBmYWxzZSk6IGJvb2xlYW4gPT4ge1xyXG5cdGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIHZhbHVlKSByZXR1cm4gIWlzTmFOKHZhbHVlKTtcclxuXHRpZiAoJ2Jvb2xlYW4nID09PSB0eXBlb2YgdmFsdWUpIHJldHVybiAhIWJvb2xlYW5zO1xyXG5cdGNvbnN0IHYgPSBTdHJpbmcodmFsdWUpLnRyaW0oKTtcclxuXHRpZiAodiA9PT0gJycpIHJldHVybiAhIWJsYW5rcztcclxuXHRyZXR1cm4gLyheWystXT9bMC05XSsoWy5dWzAtOV0rKT8oW2VFXVsrLV0/WzAtOV0rKT8kKXwoXlsrLV0/XFwuWzAtOV0rJCl8KF5bKy1dP1swLTldK1xcLiQpLy50ZXN0KHYpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBwYXJzZWQgYW5kIG5vcm1hbGl6ZWQgYG51bWJlcmBcclxuICogXHJcbiAqIC0gdHJpbXMgYHN0cmluZ2AgdmFsdWUgYW5kIGAnJ2AgPT4gYE5hTmBcclxuICogLSBzdXBwb3J0cyAoIy8jLiMvLiMvIy4pICYgY29tbWEgc2VwYXJhdGVkL3NwYWNlZCBzdHJpbmcgKGkuZS4gYCcxLCAyMDAsIDAwMCAuIDM0NTUnYCA9PiBgMTIwMDAwMC4zNDU1YClcclxuICogLSBub3JtYWxpemVzIGZsb2F0IGAzK2AgbGFzdCB6ZXJvcyBmcm9tIGA1dGhgIHBsYWNlIChpLmUuIGAxLjEvMTAwYCA9IGAwLjAxMTAwMDAwMDAwMDAwMDAwMWAgPT4gYDAuMDExYClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIG51bWJlciB2YWx1ZVxyXG4gKiBAcGFyYW0gX2RlZmF1bHQgLSBkZWZhdWx0IGBudW1iZXJgIHJlc3VsdCB3aGVuIGludmFsaWQgKGRlZmF1bHQgYE5hTmApXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgIHwgYE5hTmAgd2hlbiBpbnZhbGlkIG9yIHdoZW4gYCcnYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9udW0gPSAodmFsdWU6IGFueSwgX2RlZmF1bHQ6IG51bWJlciA9IE5hTik6IG51bWJlciA9PiB7XHJcblx0XHJcblx0Ly9wYXJzZSBzdHJpbmcgdmFsdWVcclxuXHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB2YWx1ZSl7XHJcblx0XHRcclxuXHRcdC8vcGFyc2UgZmlsbGVkLCBzaW5nbGUgbGluZSB0ZXh0XHJcblx0XHRpZiAoKHZhbHVlID0gdmFsdWUudHJpbSgpKSAmJiAvXi4qJC8udGVzdCh2YWx1ZSkpe1xyXG5cdFx0XHRcclxuXHRcdFx0Ly9tYXRjaCBsZWFkaW5nICsvLSBvcGVyYXRvciBwcmVmaXhcclxuXHRcdFx0bGV0IHByZWZpeCA9ICcnO1xyXG5cdFx0XHRsZXQgbWF0Y2ggPSB2YWx1ZS50cmltKCkubWF0Y2goL14oW1xcKy1dKVxccyooXFxkLiopJC8pO1xyXG5cdFx0XHRpZiAobWF0Y2gpe1xyXG5cdFx0XHRcdHByZWZpeCA9IG1hdGNoWzFdOyAvLyt8LVxyXG5cdFx0XHRcdHZhbHVlID0gbWF0Y2hbMl07IC8vdmFsdWVcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly9yZW1vdmUgd2hpdGVzcGFjZSBhcm91bmQgW1xcZCxcXC5dXHJcblx0XHRcdHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXFxzKihbXFwuLF0pXFxzKi9nLCAnJDEnKTtcclxuXHJcblx0XHRcdC8vbWF0Y2ggJiByZW1vdmUgXCIsXCIgdGhvdXNhbmQgc2VwYXJhdG9yXHJcblx0XHRcdGlmICh2YWx1ZS5tYXRjaCgvXlxcZHsxLDN9KCxcXGR7M30pKihcXC58KFxcLlxcZCspKT8kLykpIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvLC9nLCAnJykudHJpbSgpO1xyXG5cdFx0XHRcclxuXHRcdFx0Ly92YWxpZGF0ZSBudW1iZXIgZm9ybWF0IC0gYWxsb3cgKCMvIy4jLy4jLyMuKVxyXG5cdFx0XHRpZiAoL15cXGQrXFwuJHxeXFwuXFxkKyR8XlxcZCsoXFwuXFxkKyl7MCwxfSQvLnRlc3QodmFsdWUpKXtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvL3BhcnNlIG51bWJlciAmIHJlc3RvcmUgKy8tIG9wZXJhdG9yIHByZWZpeFxyXG5cdFx0XHRcdGlmICghaXNOYU4odmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKSkgJiYgcHJlZml4KSB2YWx1ZSA9IHBhcnNlRmxvYXQocHJlZml4ICsgdmFsdWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgdmFsdWUgPSBOYU47XHJcblx0XHR9XHJcblx0XHRlbHNlIHZhbHVlID0gTmFOOyAvL2ludmFsaWQgbnVtYmVyIHN0cmluZ1xyXG5cdH1cclxuXHRlbHNlIHZhbHVlID0gTnVtYmVyKHZhbHVlKTsgLy9jb2VyY2UgbnVtYmVyXHJcblxyXG5cdC8vdmFsaWQgc2FmZSBudW1iZXIgPT4gcmVzdWx0XHJcblx0aWYgKCFpc05hTih2YWx1ZSA9IE51bWJlcih2YWx1ZSkpICYmIHZhbHVlID49IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSICYmIHZhbHVlIDw9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKXtcclxuXHRcdFxyXG5cdFx0Ly9jaGVjayAmIG5vcm1hbGl6ZSBmbG9hdCBgMytgIGxhc3QgemVyb3MgZnJvbSA1dGggcGxhY2UgfiAwLjAxMTAwMDAwMDAwMDAwMDAwMSA9PiAwLjAxMVxyXG5cdFx0bGV0IG1hdGNoID0gU3RyaW5nKHZhbHVlKS5tYXRjaCgvXihbXFwrLV0/XFxkK1xcLlxcZHs1LH0pKDB7Myx9XFxkKikkLyk7XHJcblx0XHRpZiAobWF0Y2gpIHZhbHVlID0gTnVtYmVyKG1hdGNoWzFdKTtcclxuXHRcdFxyXG5cdFx0Ly9yZXN1bHRcclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdC8vaW52YWxpZCA9PiBkZWZhdWx0IHJlc3VsdFxyXG5cdHJldHVybiBOdW1iZXIoX2RlZmF1bHQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBwYXJzZWQgc2FmZSBwb3NpdGl2ZSBgbnVtYmVyYCB3aXRoIG9wdGlvbmFsIHdpdGhpbiBtaW4vbWF4IGxpbWl0IGNoZWNrXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBudW1iZXIgdmFsdWVcclxuICogQHBhcmFtIG1pbiAtIHNldCBtaW4gbGltaXQgfiBlbmFibGVkIHdoZW4gYG1pbmAgaXMgYSB2YWxpZCBwb3NpdGl2ZSBudW1iZXJcclxuICogQHBhcmFtIG1heCAtIHNldCBtYXggbGltaXQgfiBlbmFibGVkIHdoZW4gYG1heGAgaXMgYSB2YWxpZCBwb3NpdGl2ZSBudW1iZXJcclxuICogQHJldHVybnMgYG51bWJlcmAgcG9zaXRpdmUgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWQgb3Igb3V0IG9mIGBtaW4vbWF4YCBib3VuZHNcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcG9zTnVtID0gKHZhbHVlOiBhbnksIG1pbj86IG51bWJlciwgbWF4PzogbnVtYmVyKTogbnVtYmVyfHVuZGVmaW5lZCA9PiB7XHJcblx0Y29uc3QgdmFsID0gX251bSh2YWx1ZSk7XHJcblx0aWYgKCEoIWlzTmFOKHZhbCkgJiYgdmFsID49IDApKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIG1pbiAmJiAhaXNOYU4obWluKSAmJiBtaW4gPj0gMCAmJiB2YWwgPCBtaW4pIHJldHVybiB1bmRlZmluZWQ7XHJcblx0aWYgKCdudW1iZXInID09PSB0eXBlb2YgbWF4ICYmICFpc05hTihtYXgpICYmIG1heCA+PSAwICYmIHZhbCA+IG1heCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHRyZXR1cm4gdmFsO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBwYXJzZWQgc2FmZSBgaW50ZWdlcmAgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIG51bWJlciB2YWx1ZVxyXG4gKiBAcGFyYW0gX2RlZmF1bHQgLSByZXN1bHQgYG51bWJlcmAgd2hlbiBpbnZhbGlkIChkZWZhdWx0IGBOYU5gKVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCBpbnRlZ2VyXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2ludCA9ICh2YWx1ZTogYW55LCBfZGVmYXVsdDogbnVtYmVyID0gTmFOKTogbnVtYmVyID0+IHtcclxuXHRjb25zdCB2YWwgPSBNYXRoLmZsb29yKF9udW0odmFsdWUsIF9kZWZhdWx0KSk7XHJcblx0cmV0dXJuICFpc05hTih2YWwpID8gdmFsIDogX2RlZmF1bHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IHBhcnNlZCBzYWZlIHBvc2l0aXZlIGBpbnRlZ2VyYCB2YWx1ZSB3aXRoIG9wdGlvbmFsIHdpdGhpbiBtaW4vbWF4IGxpbWl0IGNoZWNrXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBudW1iZXIgdmFsdWVcclxuICogQHBhcmFtIG1pbiAtIHNldCBtaW4gbGltaXQgfiBlbmFibGVkIHdoZW4gYG1pbmAgaXMgYSB2YWxpZCBwb3NpdGl2ZSBudW1iZXJcclxuICogQHBhcmFtIG1heCAtIHNldCBtYXggbGltaXQgfiBlbmFibGVkIHdoZW4gYG1heGAgaXMgYSB2YWxpZCBwb3NpdGl2ZSBudW1iZXJcclxuICogQHBhcmFtIF9saW1pdF9kZWZhdWx0IC0gKGRlZmF1bHQ6IGBmYWxzZWApIHVzZSBtaW4vbWF4IHZhbHVlIHdoZW4gdmFsdWUgZ29lcyBiZXlvbmQgbGltaXQgKGUuZy4gYF9wb3NJbnQoMTUwLDAsMTAwLHRydWUpYCA9PiBgMTAwYClcclxuICogQHJldHVybnMgYG51bWJlcmAgcG9zaXRpdmUgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWQgb3Igb3V0IG9mIGBtaW4vbWF4YCBib3VuZHNcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcG9zSW50ID0gKHZhbHVlOiBhbnksIG1pbj86IG51bWJlciwgbWF4PzogbnVtYmVyLCBfbGltaXRfZGVmYXVsdDogYm9vbGVhbiA9IGZhbHNlKTogbnVtYmVyfHVuZGVmaW5lZCA9PiB7XHJcblx0Y29uc3QgdmFsID0gX2ludCh2YWx1ZSk7XHJcblx0aWYgKCEoIWlzTmFOKHZhbCkgJiYgdmFsID49IDApKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIG1pbiAmJiAhaXNOYU4obWluKSAmJiBtaW4gPj0gMCAmJiB2YWwgPCBtaW4pIHJldHVybiBfbGltaXRfZGVmYXVsdCA/IG1pbiA6IHVuZGVmaW5lZDtcclxuXHRpZiAoJ251bWJlcicgPT09IHR5cGVvZiBtYXggJiYgIWlzTmFOKG1heCkgJiYgbWF4ID49IDAgJiYgdmFsID4gbWF4KSByZXR1cm4gX2xpbWl0X2RlZmF1bHQgPyBtYXggOiB1bmRlZmluZWQ7XHJcblx0cmV0dXJuIHZhbDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3VuZCBudW1iZXIgdG8gZGVjaW1hbCBwbGFjZXNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgUGFyc2UgdmFsdWVcclxuICogQHBhcmFtIHBsYWNlcyAgW2RlZmF1bHQ6IGAyYF0gRGVjaW1hbCBwbGFjZXNcclxuICogQHJldHVybnMgYG51bWJlcmAgcm91bmRlZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9yb3VuZCA9ICh2YWx1ZTogbnVtYmVyLCBwbGFjZXM6IG51bWJlciA9IDIpOiBudW1iZXIgPT4ge1xyXG5cdGlmIChpc05hTih2YWx1ZSkpIHJldHVybiBOYU47XHJcblx0bGV0IHAgPSAxMCAqKiBNYXRoLmFicyhfaW50KHBsYWNlcywgMikpO1xyXG5cdHJldHVybiBNYXRoLnJvdW5kKCh2YWx1ZSArIE51bWJlci5FUFNJTE9OKSAqIHApIC8gcDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IG51bWVyaWMgdmFsdWUgdG8gY29tbWEgdGhvdXNhbmQgZGVsaW1pdGVkIHN0cmluZyAoaS5lLiBgMTAwMC40NTY3YCA9PiBgJzEsMDAwLjQ1J2ApXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgIFBhcnNlIHZhbHVlXHJcbiAqIEBwYXJhbSBwbGFjZXMgIFtkZWZhdWx0OiBgMmBdIFJvdW5kIGRlY2ltYWwgcGxhY2VzXHJcbiAqIEBwYXJhbSB6ZXJvcyAgRW5hYmxlIHRyYWlsaW5nIGAnMCdgIGRlY2ltYWwgcGxhY2VzIChpLmUuIGAxMDAwYCA9PiBgJzEsMDAwLjAwJ2ApXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIENvbW1hIHRob3VzYW5kIGRlbGltaXRlZCBudW1iZXIgKHJldHVybnMgYFwiXCJgIGlmIHBhcnNlZCBgdmFsdWVgIGlzIGBOYU5gKVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9jb21tYXMgPSAodmFsdWU6IGFueSwgcGxhY2VzOiBudW1iZXIgPSAyLCB6ZXJvczogYm9vbCA9IGZhbHNlKTogc3RyaW5nID0+IHtcclxuXHRjb25zdCBudW0gPSBfcm91bmQoX251bSh2YWx1ZSksIHBsYWNlcyA9IF9pbnQocGxhY2VzLCAyKSk7XHJcblx0aWYgKGlzTmFOKG51bSkpe1xyXG5cdFx0Y29uc29sZS53YXJuKCdbV0FSTklORzogYF9jb21tYXNgXSBOYU4gdmFsdWU6JywgdmFsdWUpO1xyXG5cdFx0cmV0dXJuICcnO1xyXG5cdH1cclxuXHRsZXQgdmFsID0gU3RyaW5nKG51bSkucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJywnKTtcclxuXHRpZiAocGxhY2VzICYmIHplcm9zKXtcclxuXHRcdGlmICh2YWwuaW5kZXhPZignLicpID09PSAtMSkgdmFsICs9ICcuJy5wYWRFbmQocGxhY2VzICsgMSwgJzAnKTtcclxuXHRcdGVsc2UgdmFsID0gdmFsLnNwbGl0KCcuJykucmVkdWNlPHN0cmluZ1tdPigocHJldiwgdiwgaSkgPT4ge1xyXG5cdFx0XHRwcmV2LnB1c2goaSA9PT0gMSAmJiB2Lmxlbmd0aCA8IHBsYWNlcyA/IHYucGFkRW5kKHBsYWNlcywgJzAnKSA6IHYpO1xyXG5cdFx0XHRyZXR1cm4gcHJldjtcclxuXHRcdH0sIFtdKS5qb2luKCcuJyk7XHJcblx0fVxyXG5cdHJldHVybiB2YWw7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGUgcmFuZG9tIGBpbnRlZ2VyYCBudW1iZXIuXHJcbiAqIFxyXG4gKiBAcGFyYW0gbWluICBNaW4gYGludGVnZXJgXHJcbiAqIEBwYXJhbSBtYXggIE1heCBgaW50ZWdlcmBcclxuICogQHJldHVybnMgIGBudW1iZXJgIFJhbmRvbSBgaW50ZWdlcmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcmFuZCA9IChtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIgPT4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSArIG1pbjtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHB4IHRvIHJlbSAob3IgcmV2ZXJzZSlcclxuICogXHJcbiAqIEBwYXJhbSB2YWwgLSBjb252ZXJ0IHZhbHVlIFtkZWZhdWx0OiBgMWBdXHJcbiAqIEBwYXJhbSByZXZlcnNlIC0gY29udmVydCByZW0gdG8gcHhcclxuICogQHBhcmFtIGJhc2UgLSByb290IHB4IFtkZWZhdWx0OiBgMTZgXVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9weDJyZW0gPSAodmFsOiBudW1iZXIgPSAxLCByZXZlcnNlOiBib29sZWFuID1mYWxzZSwgYmFzZTogbnVtYmVyID0gMTYpOiBudW1iZXIgPT4ge1xyXG5cdHZhbCA9IF9udW0odmFsLCAxKTtcclxuXHRiYXNlID0gX251bShiYXNlLCAxNik7XHJcblx0Y29uc3QgdW5pdCA9IGJhc2UgPT09IDE2ID8gMC4wNjI1IDogMTYvYmFzZSowLjA2MjU7XHJcblx0cmV0dXJuIHJldmVyc2UgPyB2YWwvdW5pdCA6IHZhbCAqIHVuaXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCBieXRlcyB0byBzaXplIHZhbHVlXHJcbiAqIFxyXG4gKiBAcGFyYW0gYnl0ZXMgLSBwYXJzZSBieXRlc1xyXG4gKiBAcGFyYW0gbW9kZSAtIHBhcnNlIHJlc3VsdCBtb2RlIChkZWZhdWx0OiBgMGApXHJcbiAqIC0gYDBgID0gYHN0cmluZ2Agc2l6ZSB0ZXh0IChlLmcuIGBfYnl0ZXNWYWwoMjA5NzE1MilgID0+IGAyIE1CYClcclxuICogLSBgMWAgPSBgbnVtYmVyYCBzaXplIHZhbHVlIChlLmcuIGBfYnl0ZXNWYWwoMjA5NzE1MiwxLCdNQicsMClgID0+IGAyYClcclxuICogQHBhcmFtIHVuaXQgLSBzaXplIHVuaXQgKGRlZmF1bHQ6IGB1bmRlZmluZWRgID0gbWF4KSB+IGAnQid8J0tCJ3wnTUInfCdHQid8J1RCJ3wnUEInfCdFQid8J1pCJ3wnWUInYFxyXG4gKiBAcGFyYW0gcGxhY2VzIC0gZGVjaW1hbCBwbGFjZXNcclxuICogQHJldHVybnMgYG51bWJlcmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYnl0ZXNWYWwgPSAoYnl0ZXM6IG51bWJlciwgbW9kZTogMHwxID0gMCwgdW5pdD86ICdCJ3wnS0InfCdNQid8J0dCJ3wnVEInfCdQQid8J0VCJ3wnWkInfCdZQicsIHBsYWNlczogbnVtYmVyID0gMiwgY29tbWFzOiBib29sZWFuID0gZmFsc2UpOiBudW1iZXJ8c3RyaW5nID0+IHtcclxuXHRtb2RlID0gX3Bvc0ludChtb2RlLCAwLCAxKSA/PyAwIGFzIGFueTtcclxuXHRpZiAoIShieXRlcyA9IF9wb3NJbnQoYnl0ZXMsIDApID8/IDApKSByZXR1cm4gbW9kZSA9PT0gMSA/IDAgOiAnMCBCJzsgLy8tLSB6ZXJvXHJcblx0Y29uc3Qga2IgPSAxMDI0LCB1bml0cyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddO1xyXG5cdGNvbnN0IHU6IHN0cmluZyA9ICdzdHJpbmcnID09PSB0eXBlb2YgdW5pdCAmJiB1bml0cy5pbmNsdWRlcyh1bml0ID0gdW5pdC50cmltKCkudG9VcHBlckNhc2UoKSBhcyBhbnkpID8gdW5pdCBhcyBhbnkgOiAnJztcclxuXHRjb25zdCBpOiBudW1iZXIgPSB1ID8gdW5pdHMuZmluZEluZGV4KHYgPT4gdi50b0xvd2VyQ2FzZSgpID09PSB1LnRvTG93ZXJDYXNlKCkpIDogTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykvTWF0aC5sb2coa2IpKTtcclxuXHRpZiAoIShpID49IDAgJiYgaSA8IHVuaXRzLmxlbmd0aCkpIHJldHVybiBtb2RlID09PSAxID8gYnl0ZXMgOiBieXRlcyArICcgQic7IC8vLS0gdW5zdXBwb3J0ZWQgc2l6ZSAoZGVmYXVsdHMgdG8gYnl0ZXMpXHJcblx0bGV0IHZhbDogc3RyaW5nfG51bWJlciA9IGJ5dGVzL01hdGgucG93KGtiLCBpKTtcclxuXHRpZiAobW9kZSA9PT0gMSkgcmV0dXJuIF9yb3VuZCh2YWwsIHBsYWNlcyk7XHJcblx0cmV0dXJuIChjb21tYXMgPyBfY29tbWFzKHZhbCwgcGxhY2VzKSA6IF9yb3VuZCh2YWwsIHBsYWNlcykpICsgJyAnICsgdW5pdHNbaV07XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCBkZWNpbWFsIHRvIGJhc2VcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9kZWMyYmFzZSgxMjYsIDIpIC8vICcxMTExMTEwJ1xyXG4gKiBfZGVjMmJhc2UoMTI2LCAyLCA0KSAvLyAnMDExMSAxMTEwJ1xyXG4gKiBfZGVjMmJhc2UoMTI2LCA4KSAvLyAnMTc2J1xyXG4gKiBfZGVjMmJhc2UoMTI2LCAxNikgLy8gJzdFJ1xyXG4gKiBfZGVjMmJhc2UoMTAwMCwgMTYpIC8vICcwM0U4J1xyXG4gKiBfZGVjMmJhc2UoMTAwMCwgMTYsIDIpIC8vICcwMyBFOCdcclxuICogXHJcbiAqIEBwYXJhbSBkZWNpbWFsIC0gcGFyc2UgZGVjaW1hbCBpbnRlZ2VyXHJcbiAqIEBwYXJhbSBiYXNlIC0gdG8gYmFzZSAoZGVmYXVsdDogYDJgKSB+IGAyYCA9IGJpbmFyeSwgYDhgIC0gb2N0YWwsIGAxNmAgLSBoZXhhZGVjaW1hbFxyXG4gKiBAcGFyYW0gZ3JvdXAgLSBzcGFjZSBncm91cCBjaGFyYWN0ZXJzIGxlbmd0aCAoZGVmYXVsdDogYDBgKSB+IGVuYWJsZWQgd2hlbiBiYXNlID0gYDJ8MTZgXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2RlYzJiYXNlID0gKGRlY2ltYWw6IG51bWJlciwgYmFzZTogMnw4fDE2ID0gMiwgZ3JvdXA6IG51bWJlciA9IDApOiBzdHJpbmcgPT4ge1xyXG5cdGxldCBkZWM6IG51bWJlciA9IF9wb3NJbnQoZGVjaW1hbCwgMCkgPz8gMDtcclxuXHRpZiAoZGVjID09PSAwKSByZXR1cm4gJzAnO1xyXG5cdGJhc2UgPSBbMiwgOCwgMTZdLmluY2x1ZGVzKGJhc2UgPSBfcG9zSW50KGJhc2UsIDIpID8/IDIgYXMgYW55KSA/IGJhc2UgOiAyO1xyXG5cdGNvbnN0IGhleF9jaGFyczogc3RyaW5nW10gPSBiYXNlID09PSAxNiA/ICcwMTIzNDU2Nzg5QUJDREVGJy5zcGxpdCgnJykgOiBbXTtcclxuXHRsZXQgdmFsOiBzdHJpbmcgPSAnJztcclxuXHR3aGlsZSAoZGVjID4gMCl7XHJcblx0XHRsZXQgcmVtYWluZGVyID0gZGVjICUgYmFzZTtcclxuXHRcdHZhbCA9IChiYXNlID09PSAxNiA/IGhleF9jaGFyc1tyZW1haW5kZXJdIDogcmVtYWluZGVyKSArIHZhbDtcclxuXHRcdGRlYyA9IE1hdGguZmxvb3IoZGVjIC8gYmFzZSk7XHJcblx0fVxyXG5cdGlmIChbMiwgMTZdLmluY2x1ZGVzKGJhc2UpICYmICEhKGdyb3VwID0gX3Bvc0ludChncm91cCwgMCkgPz8gMCkpe1xyXG5cdFx0bGV0IGJ1ZmZlcjogc3RyaW5nID0gJyc7XHJcblx0XHR3aGlsZSAodmFsLmxlbmd0aCl7XHJcblx0XHRcdGxldCBpID0gdmFsLmxlbmd0aCAtIGdyb3VwO1xyXG5cdFx0XHRidWZmZXIgPSB2YWwuc3Vic3RyaW5nKGkpLnBhZFN0YXJ0KGdyb3VwLCAnMCcpICsgKGJ1ZmZlciA/ICcgJyA6ICcnKSArIGJ1ZmZlcjtcclxuXHRcdFx0dmFsID0gdmFsLnN1YnN0cmluZygwLCBpKTtcclxuXHRcdH1cclxuXHRcdHZhbCA9IGJ1ZmZlcjtcclxuXHR9XHJcblx0cmV0dXJuIHZhbDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBkZWNpbWFsIHRvIGJpbmFyeVxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX2RlYzJiaW4oMTI2KSAvLyAxMTExMTEwXHJcbiAqIF9kZWMyYmluKDEyNiwgNCkgLy8gMDExMSAxMTEwXHJcbiAqIF9kZWMyYmluKDEyNiwgOCkgLy8gMDExMTExMTBcclxuICogXHJcbiAqIEBwYXJhbSBkZWNpbWFsIC0gcGFyc2UgZGVjaW1hbCBpbnRlZ2VyXHJcbiAqIEBwYXJhbSBncm91cCAtIHNwYWNlIGdyb3VwIGNoYXJhY3RlcnMgbGVuZ3RoIChkZWZhdWx0OiBgMGApXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIGJpbmFyeSB0ZXh0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2RlYzJiaW4gPSAoZGVjaW1hbDogbnVtYmVyLCBncm91cDogbnVtYmVyID0gMCk6IHN0cmluZyA9PiBfZGVjMmJhc2UoZGVjaW1hbCwgMiwgZ3JvdXApO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGJpbmFyeSB0byBkZWNpbWFsXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfYmluMmRlYygnMDExMSAxMTEwJykgLy8gMTI2XHJcbiAqIFxyXG4gKiBAcGFyYW0gYmluYXJ5IC0gcGFyc2UgYmluYXJ5IHRleHRcclxuICogQHJldHVybnMgYG51bWJlcnx1bmRlZmluZWRgIH4gcGFyc2VkIGRlY2ltYWwgaW50ZWdlciB8IGB1bmRlZmluZWRgIHdoZW4gaW52YWxpZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9iaW4yZGVjID0gKGJpbmFyeTogc3RyaW5nKTogbnVtYmVyfHVuZGVmaW5lZCA9PiB7XHJcblx0aWYgKCEoJ3N0cmluZycgPT09IHR5cGVvZiBiaW5hcnkgJiYgL15bMDFdKyQvLnRlc3QoYmluYXJ5ID0gYmluYXJ5LnJlcGxhY2UoL1xccy9nLCAnJykpKSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8tLSBpbnZhbGlkIGJpbmFyeSB0ZXh0XHJcblx0bGV0IGRlYzogbnVtYmVyID0gMCwgcG93OiBudW1iZXIgPSAwO1xyXG5cdGZvciAobGV0IGkgPSBiaW5hcnkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pe1xyXG5cdFx0ZGVjICs9IHBhcnNlSW50KGJpbmFyeVtpXSkgKiBNYXRoLnBvdygyLCBwb3cpO1xyXG5cdFx0cG93ICsrO1xyXG5cdH1cclxuXHRyZXR1cm4gZGVjO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGRlY2ltYWwgdG8gaGV4YWRlY2ltYWxcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9kZWMyaGV4KDEwMDApIC8vICcwM0U4J1xyXG4gKiBfZGVjMmhleCgxMDAwLCAyKSAvLyAnMDMgRTgnXHJcbiAqIFxyXG4gKiBAcGFyYW0gZGVjaW1hbCAtIHBhcnNlIGRlY2ltYWwgaW50ZWdlciBgbnVtYmVyYFxyXG4gKiBAcGFyYW0gZ3JvdXAgLSBzcGFjZSBncm91cCBjaGFyYWN0ZXJzIGxlbmd0aCAoZGVmYXVsdDogYDBgKVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCAtIGhleGFkZWNpbWFsIHRleHRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGVjMmhleCA9IChkZWNpbWFsOiBudW1iZXIsIGdyb3VwOiBudW1iZXIgPSAwKTogc3RyaW5nID0+IF9kZWMyYmFzZShkZWNpbWFsLCAxNiwgZ3JvdXApO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGhleGFkZWNpbWFsIHRvIGRlY2ltYWxcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9oZXgyZGVjKCcweDdFJykgLy8gMTI2XHJcbiAqIF9oZXgyZGVjKCcwMyBFOCcpIC8vIDEwMDBcclxuICogXHJcbiAqIEBwYXJhbSBoZXggLSBwYXJzZSBoZXhhZGVjaW1hbCB0ZXh0XHJcbiAqIEByZXR1cm5zIGBudW1iZXJ8dW5kZWZpbmVkYCB+IHBhcnNlZCBkZWNpbWFsIGludGVnZXIgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaGV4MmRlYyA9IChoZXg6IHN0cmluZyk6IG51bWJlcnx1bmRlZmluZWQgPT4ge1xyXG5cdGlmICghKCdzdHJpbmcnID09PSB0eXBlb2YgaGV4ICYmIC9eWzAtOUEtRl0rJC8udGVzdChoZXggPSBoZXgucmVwbGFjZSgvMHgvaWcsICcnKS5yZXBsYWNlKC9cXHMvZywgJycpLnRvVXBwZXJDYXNlKCkpKSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8tLSBpbnZhbGlkIGhleGFkZWNpbWFsIHRleHRcclxuXHRjb25zdCBoZXhfbWFwOiB7W2tleTpzdHJpbmddOiBudW1iZXJ9ID0gT2JqZWN0LmZyb21FbnRyaWVzKCcwMTIzNDU2Nzg5QUJDREVGJy5zcGxpdCgnJykubWFwKCh2LCBpKSA9PiBbdiwgaV0pKTtcclxuXHRsZXQgZGVjID0gMDtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGhleC5sZW5ndGg7IGkgKyspe1xyXG5cdFx0Y29uc3QgdmFsOiBudW1iZXIgPSBoZXhfbWFwW2hleFtpXV07XHJcblx0XHRkZWMgPSBkZWMgKiAxNiArIHZhbDtcclxuXHR9XHJcblx0cmV0dXJuIGRlYztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBkZWNpbWFsIHRvIG9jdGFsXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfZGVjMm9jdCgxMjYpIC8vIDE3NlxyXG4gKiBfZGVjMm9jdCg1MTIpIC8vIDEwMDBcclxuICogXHJcbiAqIEBwYXJhbSBkZWNpbWFsIC0gcGFyc2UgZGVjaW1hbCBpbnRlZ2VyIGBudW1iZXJgXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIC0gb2N0YWwgdGV4dFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kZWMyb2N0ID0gKGRlY2ltYWw6IG51bWJlcik6IHN0cmluZyA9PiBfZGVjMmJhc2UoZGVjaW1hbCwgOCk7XHJcblxyXG4vKipcclxuICogUGFyc2Ugb2N0YWwgdG8gZGVjaW1hbFxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX29jdDJkZWMoJzBvMTc2JykgLy8gMTI2XHJcbiAqIF9vY3QyZGVjKCcxMDAwJykgLy8gNTEyXHJcbiAqIFxyXG4gKiBAcGFyYW0gb2N0YWwgLSBwYXJzZSBvY3RhbCB0ZXh0XHJcbiAqIEByZXR1cm5zIGBudW1iZXJ8dW5kZWZpbmVkYCB+IHBhcnNlZCBkZWNpbWFsIGludGVnZXIgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfb2N0MmRlYyA9IChvY3RhbDogc3RyaW5nKTogbnVtYmVyfHVuZGVmaW5lZCA9PiB7XHJcblx0aWYgKCEoJ3N0cmluZycgPT09IHR5cGVvZiBvY3RhbCAmJiAvXlswLTddKyQvLnRlc3Qob2N0YWwgPSBvY3RhbC5yZXBsYWNlKC8wby9pZywgJycpLnJlcGxhY2UoL1xccy9nLCAnJykudG9VcHBlckNhc2UoKSkpKSByZXR1cm4gdW5kZWZpbmVkOyAvLy0tIGludmFsaWQgb2N0YWwgdGV4dFxyXG5cdGxldCBkZWMgPSAwO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgb2N0YWwubGVuZ3RoOyBpICsrKXtcclxuXHRcdGNvbnN0IHZhbCA9IChvY3RhbFtpXSBhcyBhbnkpIC0gMDtcclxuXHRcdGRlYyA9IGRlYyAqIDggKyB2YWw7XHJcblx0fVxyXG5cdHJldHVybiBkZWM7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgdGV4dCBmcm9tIGJhc2UgdG8gZGVjaW1hbFxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX2Jhc2UyZGVjKCcwMTExIDExMTAnLCAyKSAvLyAxMjZcclxuICogX2Jhc2UyZGVjKCcwbzE3NicsIDgpIC8vIDEyNlxyXG4gKiBfYmFzZTJkZWMoJzB4N0UnLCAxNikgLy8gMTI2XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB0ZXh0XHJcbiAqIEBwYXJhbSBiYXNlIC0gZnJvbSBiYXNlIChkZWZhdWx0OiBgMmApIH4gYDJgID0gYmluYXJ5LCBgOGAgLSBvY3RhbCwgYDE2YCAtIGhleGFkZWNpbWFsXHJcbiAqIEByZXR1cm5zIGBudW1iZXJ8dW5kZWZpbmVkYCB+IHBhcnNlZCBkZWNpbWFsIGludGVnZXIgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYmFzZTJkZWMgPSAodmFsdWU6IHN0cmluZywgYmFzZTogMnw4fDE2ID0gMik6IG51bWJlcnx1bmRlZmluZWQgPT4ge1xyXG5cdGJhc2UgPSBbMiwgOCwgMTZdLmluY2x1ZGVzKGJhc2UgPSBfcG9zSW50KGJhc2UsIDIpID8/IDIgYXMgYW55KSA/IGJhc2UgOiAyO1xyXG5cdGlmIChiYXNlID09PSAyKSByZXR1cm4gX2JpbjJkZWModmFsdWUpO1xyXG5cdGVsc2UgaWYgKGJhc2UgPT09IDgpIHJldHVybiBfb2N0MmRlYyh2YWx1ZSk7XHJcblx0cmV0dXJuIF9oZXgyZGVjKHZhbHVlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IGRlZ3JlZSB0byBbcmFkaWFuXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SYWRpYW4pXHJcbiAqIC0gYDLPgCByYWQgPSAzNjDCsGAg4oi0IGByYWRpYW4gPSBkZWdyZWUgKiDPgC8xODBgXHJcbiAqIFxyXG4gKiBAcGFyYW0gZGVncmVlcyAtIGFuZ2xlIGluIGRlZ3JlZXMgKGkuZS4gMCAtIDM2MMKwKVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCAtIHJhZGlhblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kZWcycmFkID0gKGRlZ3JlZXM6IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0aWYgKGlzTmFOKGRlZ3JlZXMgPSBfbnVtKGRlZ3JlZXMpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9kZWcycmFkIGBkZWdyZWVzYCBhcmd1bWVudCBpcyBub3QgYSB2YWxpZCBhbmdsZSBudW1iZXIgdmFsdWUuJyk7XHJcblx0cmV0dXJuIGRlZ3JlZXMgKiAoTWF0aC5QSSAvIDE4MCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCByYWRpYW4gdG8gW2RlZ3JlZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGVncmVlXyhhbmdsZSkpXHJcbiAqIC0gYDLPgCByYWQgPSAzNjDCsGAg4oi0IGByYWRpYW4gPSBkZWdyZWUgKiDPgC8xODBgXHJcbiAqIFxyXG4gKiBAcGFyYW0gcmFkaWFucyAtIGFuZ2xlIGluIHJhZGlhbnMgKGkuZS4gMCAtIDM2MMKwKVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCAtIGRlZ3JlZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9yYWQyZGVnID0gKHJhZGlhbnM6IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0aWYgKGlzTmFOKHJhZGlhbnMgPSBfbnVtKHJhZGlhbnMpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9yYWQyZGVnIGByYWRpYW5zYCBhcmd1bWVudCBpcyBub3QgYSB2YWxpZCBhbmdsZSBudW1iZXIgdmFsdWUuJyk7XHJcblx0cmV0dXJuIHJhZGlhbnMgKiAoMTgwIC8gTWF0aC5QSSk7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGRpc3RhbmNlIGluIG1ldGVycyBiZXR3ZWVuIHR3byBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGNvb3JkaW5hdGVzXHJcbiAqIFxyXG4gKiBAcGFyYW0gbGF0aXR1ZGUxIC0gZmlyc3QgY29vcmRpbmF0ZSBsYXRpdHVkZSBgbnVtYmVyYFxyXG4gKiBAcGFyYW0gbG9uZ2l0dWRlMSAtIGZpcnN0IGNvb3JkaW5hdGUgbG9uZ2l0dWRlIGBudW1iZXJgXHJcbiAqIEBwYXJhbSBsYXRpdHVkZTIgLSBzZWNvbmQgY29vcmRpbmF0ZSBsYXRpdHVkZSBgbnVtYmVyYFxyXG4gKiBAcGFyYW0gbG9uZ2l0dWRlMiAtIHNlY29uZCBjb29yZGluYXRlIGxvbmdpdHVkZSBgbnVtYmVyYFxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCBgbWAgZGlzdGFuY2VcclxuICogQHRocm93cyBgVHlwZUVycm9yYCB3aGVuIGNvb3JpbmF0ZSBhcmd1bWVudCB2YWx1ZSBpcyBgTmFOYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kaXN0YW5jZSA9IChsYXRpdHVkZTE6IG51bWJlciwgbG9uZ2l0dWRlMTogbnVtYmVyLCBsYXRpdHVkZTI6IG51bWJlciwgbG9uZ2l0dWRlMjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoaXNOYU4obGF0aXR1ZGUxID0gX251bShsYXRpdHVkZTEpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9sYXRMb25EaXN0YW5jZSBgbGF0aXR1ZGUxYCBhcmd1bWVudCBpcyBub3QgYSB2YWxpZCBsYXRpdHVkZSBudW1iZXIgdmFsdWUuJyk7XHJcblx0aWYgKGlzTmFOKGxvbmdpdHVkZTEgPSBfbnVtKGxvbmdpdHVkZTEpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9sYXRMb25EaXN0YW5jZSBgbG9uZ2l0dWRlMWAgYXJndW1lbnQgaXMgbm90IGEgdmFsaWQgbG9uZ2l0dWRlIG51bWJlciB2YWx1ZS4nKTtcclxuXHRpZiAoaXNOYU4obGF0aXR1ZGUyID0gX251bShsYXRpdHVkZTIpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9sYXRMb25EaXN0YW5jZSBgbGF0aXR1ZGUyYCBhcmd1bWVudCBpcyBub3QgYSB2YWxpZCBsYXRpdHVkZSBudW1iZXIgdmFsdWUuJyk7XHJcblx0aWYgKGlzTmFOKGxvbmdpdHVkZTIgPSBfbnVtKGxvbmdpdHVkZTIpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9sYXRMb25EaXN0YW5jZSBgbG9uZ2l0dWRlMmAgYXJndW1lbnQgaXMgbm90IGEgdmFsaWQgbG9uZ2l0dWRlIG51bWJlciB2YWx1ZS4nKTtcclxuXHQvLyBjb25zdCBSID0gNjM3MWUzOyAvLyBFYXJ0aCByYWRpdXMgaW4gbWV0ZXJzXHJcblx0Y29uc3QgUiA9IDYuMzc4ZSs2OyAvLyBFYXJ0aCByYWRpdXMgaW4gbWV0ZXJzXHJcblx0Y29uc3Qgz4YxID0gbGF0aXR1ZGUxICogTWF0aC5QSSAvIDE4MDsgLy8gz4YsIM67IGluIHJhZGlhbnNcclxuXHRjb25zdCDPhjIgPSBsYXRpdHVkZTIgKiBNYXRoLlBJIC8gMTgwO1xyXG5cdGNvbnN0IM6Uz4YgPSAobGF0aXR1ZGUyIC0gbGF0aXR1ZGUxKSAqIE1hdGguUEkgLyAxODA7XHJcblx0Y29uc3QgzpTOuyA9IChsb25naXR1ZGUyIC0gbG9uZ2l0dWRlMSkgKiBNYXRoLlBJIC8gMTgwO1xyXG5cdGNvbnN0IGEgPSBNYXRoLnNpbijOlM+GIC8gMikgKiBNYXRoLnNpbijOlM+GIC8gMikgK1xyXG5cdFx0XHRcdFx0XHRNYXRoLmNvcyjPhjEpICogTWF0aC5jb3Moz4YyKSAqXHJcblx0XHRcdFx0XHRcdE1hdGguc2luKM6UzrsgLyAyKSAqIE1hdGguc2luKM6UzrsgLyAyKTsgLy8gc3F1YXJlIG9mIGhhbGYgdGhlIGNob3JkIGxlbmd0aCBiZXR3ZWVuIHRoZSBwb2ludHMgdXNpbmcgdGhlIEhhdmVyc2luZSBmb3JtdWxhLlxyXG5cdGNvbnN0IGMgPSAyICogTWF0aC5hdGFuMihNYXRoLnNxcnQoYSksIE1hdGguc3FydCgxIC0gYSkpOyAvLyBhbmd1bGFyIGRpc3RhbmNlIGluIHJhZGlhbnMuXHJcblx0cmV0dXJuIFIgKiBjOyAvLyBkaXN0YW5jZSBpbiBtZXRlcnNcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgbG9nYXJpdGhtIG9mIHZhbHVlIHdpdGggY3VzdG9tIGJhc2UgKGkuZS4gYGxvZ194ICogdmFsdWUgPSBsb2cgKiB2YWx1ZS9sb2cgKiBiYXNlYClcclxuICogLSBwb3dlciBvZiBiYXNlIGluIHZhbHVlXHJcbiAqIFxyXG4gKiBAcGFyYW0gYmFzZSAtIGxvZyBiYXNlXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIGxvZyB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCBhcHByb3hpbWF0dGVkIGZsb2F0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2xvZ3ggPSAoYmFzZTogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoaXNOYU4oYmFzZSA9IF9udW0oYmFzZSkpKSByZXR1cm4gTmFOO1xyXG5cdGlmIChpc05hTih2YWx1ZSA9IF9udW0odmFsdWUpKSkgcmV0dXJuIE5hTjtcclxuXHRyZXR1cm4gTWF0aC5sb2cyKHZhbHVlKSAvIE1hdGgubG9nMihiYXNlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgbnVtYmVyIGluIGBrYCAodGhvdXNhbmQpYCB0byBtYXggYFRgICh0cmlsbGlvbikgU0kgU3ltYm9sIHZhbHVlIGdyb3VwXHJcbiAqIC0gYCdrJ2AgVGhvdXNhbmRcclxuICogLSBgJ00nYCBNaWxsaW9uXHJcbiAqIC0gYCdCJ2AgQmlsbGlvblxyXG4gKiAtIGAnVCdgIFRyaWxsaW9uXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBudW1iZXJcclxuICogQHBhcmFtIHBsYWNlcyAtIGRlY2ltYWwgcGxhY2VzICgwIC0gMylcclxuICogQHJldHVybnMgYHN0cmluZ2AgbnVtYmVyIHRleHRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfbnVtayA9ICh2YWx1ZTogbnVtYmVyLCBwbGFjZXM6IG51bWJlciA9IDEpOiBzdHJpbmcgPT4ge1xyXG5cdGlmIChpc05hTih2YWx1ZSA9IF9udW0odmFsdWUpKSkgcmV0dXJuIE5hTi50b1N0cmluZygpO1xyXG5cdGlmICghdmFsdWUpIHJldHVybiAnMCc7XHJcblx0cGxhY2VzID0gX3Bvc0ludChwbGFjZXMsIDAsIDMsIHRydWUpID8/IDE7XHJcblx0Y29uc3QgazogbnVtYmVyID0gMWUzLCB1bml0czogc3RyaW5nW10gPSBbJycsICdrJywgJ00nLCAnQicsICdUJ10sIG1heF9wb3c6IG51bWJlciA9IHVuaXRzLmxlbmd0aCAtIDE7XHJcblx0Y29uc3Qgbjogc3RyaW5nID0gdmFsdWUgPCAwID8gJy0nIDogJycsIHBvdzogbnVtYmVyID0gTWF0aC5mbG9vcihfbG9neChrLCB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKSkpO1xyXG5cdGNvbnN0IGk6IG51bWJlciA9IE1hdGgubWluKHBvdywgbWF4X3BvdyksIHVuaXQ6IHN0cmluZyA9IHVuaXRzW2ldO1xyXG5cdGxldCB2YWw6IG51bWJlciA9IF9yb3VuZCh2YWx1ZS8oayoqaSksIHBsYWNlcyk7XHJcblx0bGV0IHRleHQ6IHN0cmluZyA9IGAke259JHt2YWx9JHt1bml0fWA7XHJcblx0aWYgKHBvdyA+IG1heF9wb3cpe1xyXG5cdFx0Y29uc3QgZTogbnVtYmVyID0gTWF0aC5mbG9vcihNYXRoLmxvZzEwKHZhbCkpO1xyXG5cdFx0dmFsID0gX3JvdW5kKHZhbC8oMTAqKmUpLCBwbGFjZXMpO1xyXG5cdFx0dGV4dCA9IGAke259JHt2YWx9ZSR7ZX0ke3VuaXR9YDtcclxuXHR9XHJcblx0cmV0dXJuIHRleHQ7XHJcbn07IiwiaW1wb3J0IHsgYm9vbCB9IGZyb20gJy4uL3R5cGVzJztcclxuaW1wb3J0IHsgX2pzb25Db3B5LCBfanNvblBhcnNlLCBfanNvblN0cmluZ2lmeSB9IGZyb20gJy4vX2pzb24nO1xyXG5pbXBvcnQgeyBfaW50LCBfbnVtLCBfcG9zSW50IH0gZnJvbSAnLi9fbnVtYmVyJztcclxuaW1wb3J0IHsgX2Vycm9yVGV4dCwgX3N0ciwgX3N0cmluZywgX3N0cmluZ2FibGUsIF90ZXh0TWF4TGVuZ3RoLCBfd3JhcExpbmVzIH0gZnJvbSAnLi9fc3RyaW5nJztcclxuaW1wb3J0IHsgX2lzQnVmZmVyIH0gZnJvbSAnLi4vM3JkLXBhcnR5JztcclxuXHJcbi8qKlxyXG4gKiBHZXQgYWxsIHByb3BlcnR5IGRlc2NyaXB0b3JzXHJcbiAqIC0gQVBJIHJlZjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2RlZmluZVByb3BlcnR5XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZSBvYmplY3RcclxuICogQHJldHVybnMgYHtba2V5OiBzdHJpbmd8bnVtYmVyfHN5bWJvbF06IGFueX1gIH4ge3Byb3BlcnR5ID0+IGRlc2NyaXB0b3JzfSBvYmplY3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZ2V0QWxsUHJvcGVydHlEZXNjcmlwdG9ycyA9ICh2YWx1ZTogYW55KToge1trZXk6IHN0cmluZ3xudW1iZXJ8c3ltYm9sXTogYW55fSA9PiB7XHJcblx0aWYgKFtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKHZhbHVlKSkgcmV0dXJuIHt9O1xyXG5cdGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcclxuXHRyZXR1cm4gey4uLl9nZXRBbGxQcm9wZXJ0eURlc2NyaXB0b3JzKHByb3RvKSwgLi4uT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModmFsdWUpfTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYWxsIHZhbHVlIHByb3BlcnRpZXNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlIG9iamVjdFxyXG4gKiBAcGFyYW0gc3RhdGljcyAtIGluY2x1ZGUgYHN0YXRpY2AgY2xhc3MgcHJvcGVydGllc1xyXG4gKiBAcmV0dXJucyBgKHN0cmluZ3xudW1iZXJ8c3ltYm9sKVtdYCAtIGZvdW5kIG93bi9wcm90b3R5cGUvc3ltYm9sIHByb3BlcnRpZXMgfCBgW11gIHdoZW4gbm9uZSBmb3VuZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9nZXRBbGxQcm9wZXJ0aWVzID0gKHZhbHVlOiBhbnksIHN0YXRpY3M6IGJvb2xlYW4gPSBmYWxzZSk6IChzdHJpbmd8bnVtYmVyfHN5bWJvbClbXSA9PiB7XHJcblx0aWYgKFtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKHZhbHVlKSkgcmV0dXJuIFtdOyAvL2lnbm9yZSBudWxsL3VuZGVmaW5lZFxyXG5cdGNvbnN0IHByb3BzID0gbmV3IFNldDxzdHJpbmd8bnVtYmVyfHN5bWJvbD4oKTsgLy9wcm9wZXJpZXNcclxuXHJcblx0Ly9hZGQgb3duIHByb3BlcnR5IG5hbWVzXHJcblx0Zm9yIChjb25zdCB2IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKSkgcHJvcHMuYWRkKHYpOyAvL293blxyXG5cdFxyXG5cdC8vZm4gPT4gZ2V0IGtleXMgaGVscGVyXHJcblx0Y29uc3QgX19nZXRfa2V5cyA9IChvYmo6IGFueSk6IChzdHJpbmd8bnVtYmVyfHN5bWJvbClbXSA9PiB7XHJcblx0XHRjb25zdCBrZXlzOiAoc3RyaW5nfG51bWJlcnxzeW1ib2wpW10gPSBbXTtcclxuXHRcdGZvciAobGV0IGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xyXG5cdFx0cmV0dXJuIGtleXM7XHJcblx0fTtcclxuXHJcblx0Ly9mbiA9PiBnZXQgcHJvcGVydGllcyBoZWxwZXJcclxuXHRjb25zdCBfX2dldF9wcm9wcyA9ICh2YWw6IGFueSk6IChzdHJpbmd8bnVtYmVyfHN5bWJvbClbXSA9PiBfX2dldF9rZXlzKF9nZXRBbGxQcm9wZXJ0eURlc2NyaXB0b3JzKHZhbCkpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHZhbCkpO1xyXG5cclxuXHQvL2V4Y2x1ZGVkIGRlZmF1bHQgcHJvcHNcclxuXHRjb25zdCBleGNsdWRlZF9wcm9wczogKHN0cmluZ3xudW1iZXJ8c3ltYm9sKVtdID0gWy4uLm5ldyBTZXQoW1xyXG5cdFx0XHJcblx0XHQvL0Z1bmN0aW9uXHJcblx0XHQuLi5fX2dldF9wcm9wcyhGdW5jdGlvbi5wcm90b3R5cGUpLFxyXG5cdFx0Li4uKCFzdGF0aWNzID8gW10gOiBfX2dldF9wcm9wcyhGdW5jdGlvbikpLFxyXG5cclxuXHRcdC8vT2JqZWN0XHJcblx0XHQuLi5fX2dldF9wcm9wcyhPYmplY3QucHJvdG90eXBlKSxcclxuXHRcdC4uLighc3RhdGljcyA/IFtdIDogX19nZXRfcHJvcHMoT2JqZWN0KSksXHJcblx0XSldO1xyXG5cclxuXHQvL2ZuID0+IGFkZCBwcm9wcyBoZWxwZXJcclxuXHRjb25zdCBfX2FkZF9wcm9wcyA9ICh2YWw6IGFueSk6IHZvaWQgPT4ge1xyXG5cdFx0Zm9yIChjb25zdCB2IG9mIF9fZ2V0X3Byb3BzKHZhbCkpe1xyXG5cdFx0XHRpZiAoIWV4Y2x1ZGVkX3Byb3BzLmluY2x1ZGVzKHYpKSBwcm9wcy5hZGQodik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvL2FkZCBwcm9wc1xyXG5cdF9fYWRkX3Byb3BzKHZhbHVlKTtcclxuXHRpZiAoc3RhdGljcykgX19hZGRfcHJvcHMoT2JqZWN0KHZhbHVlKS5jb25zdHJ1Y3Rvcik7XHJcblxyXG5cdC8vcmVzdWx0XHJcblx0cmV0dXJuIFsuLi5wcm9wc107XHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdmFsdWUgaGFzIHByb3BlcnR5XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBgb2JqZWN0YCB2YWx1ZVxyXG4gKiBAcGFyYW0gcHJvcCAtIHByb3BlcnR5IG5hbWVcclxuICogQHBhcmFtIG93biAgW2RlZmF1bHQ6IGBmYWxzZWBdIEFzIG93biBwcm9wZXJ0eVxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaGFzUHJvcCA9ICh2YWx1ZTogYW55LCBwcm9wOiBhbnksIG93bjogYm9vbCA9IGZhbHNlKTogYm9vbGVhbiA9PiB7XHJcblx0aWYgKCEoJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSAmJiAhIXZhbHVlKSkgcmV0dXJuIGZhbHNlO1xyXG5cdHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHByb3ApIHx8IChvd24gPyBmYWxzZSA6IHByb3AgaW4gdmFsdWUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIG9iamVjdCBoYXMgcHJvcGVydGllc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgYG9iamVjdGAgdmFsdWVcclxuICogQHBhcmFtIHByb3BzIC0gcHJvcGVydHkgbmFtZXNcclxuICogQHJldHVybnMgYGJvb2xlYW5gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2hhc1Byb3BzID0gKHZhbHVlOiBhbnksIC4uLnByb3BzOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xyXG5cdGlmICghKCdvYmplY3QnID09PSB0eXBlb2YgdmFsdWUgJiYgISF2YWx1ZSkpIHJldHVybiBmYWxzZTtcclxuXHRpZiAoIXByb3BzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cdGZvciAoY29uc3Qga2V5IG9mIHByb3BzKXtcclxuXHRcdGlmICghX2hhc1Byb3AodmFsdWUsIGtleSkpIHJldHVybiBmYWxzZTtcclxuXHR9XHJcblx0cmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgb2JqZWN0IGhhcyBhbnkgb2YgdGhlIHByb3BlcnRpZXNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGBvYmplY3RgIHZhbHVlXHJcbiAqIEBwYXJhbSBwcm9wcyAtIHByb3BlcnR5IG5hbWVzXHJcbiAqIEByZXR1cm5zIGBmYWxzZXxhbnlbXWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaGFzQW55UHJvcHMgPSAodmFsdWU6IGFueSwgLi4ucHJvcHM6IGFueVtdKTogZmFsc2V8YW55W10gPT4ge1xyXG5cdGlmICghKCdvYmplY3QnID09PSB0eXBlb2YgdmFsdWUgJiYgISF2YWx1ZSkpIHJldHVybiBmYWxzZTtcclxuXHRpZiAoIXByb3BzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cdGNvbnN0IGZvdW5kOiBTZXQ8YW55PiA9IG5ldyBTZXQoKTtcclxuXHRmb3IgKGNvbnN0IGtleSBvZiBwcm9wcyl7XHJcblx0XHRpZiAoX2hhc1Byb3AodmFsdWUsIGtleSkpIGZvdW5kLmFkZChrZXkpO1xyXG5cdH1cclxuXHRyZXR1cm4gZm91bmQuc2l6ZSA/IFsuLi5mb3VuZF0gOiBmYWxzZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQcm9wZXJ0eSBpbnRlcmZhY2UgfiBzZWUgYF9nZXRQcm9wKClgXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElQcm9wZXJ0eSB7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBwcm9wZXJ0eSBtYXRjaFxyXG5cdCAqL1xyXG5cdG1hdGNoOiBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gZm91bmQgcHJvcGVydHlcclxuXHQgKi9cclxuXHRrZXk6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogLSBwcm9wZXJ0eSB2YWx1ZVxyXG5cdCAqL1xyXG5cdHZhbHVlOiBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gcHJvcGVydHkgZXhpc3RzIHN0YXRlXHJcblx0ICogLSBgMGAgPSBub3QgZm91bmRcclxuXHQgKiAtIGAxYCA9IG93biBwcm9wZXJ0eVxyXG5cdCAqIC0gYDJgID0gbm90IG93biBwcm9wZXJ0eVxyXG5cdCAqL1xyXG5cdGV4aXN0czogMHwxfDJ8ZmFsc2U7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdmFsdWUgcHJvcGVydHlcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcbiAqIEBwYXJhbSBtYXRjaCAtIG1hdGNoIHByb3BlcnR5XHJcbiAqIEBwYXJhbSBpZ25vcmVDYXNlIC0gd2hldGhlciB0byBpZ25vcmUgcHJvcGVydHkgbmFtZSBjYXNlXHJcbiAqIEBwYXJhbSBvd24gLSB3aGV0aGVyIHByb3BlcnR5IGlzIHZhbHVlJ3Mgb3duIH4gYHZhbHVlLmhhc093blByb3BlcnR5YFxyXG4gKiBAcmV0dXJucyBgSVByb3BlcnR5YCB+IGB7ZXhpc3RzOmJvb2xlYW47IG5hbWU6c3RyaW5nOyB2YWx1ZTphbnk7fWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZ2V0UHJvcCA9ICh2YWx1ZTogYW55LCBtYXRjaDogYW55LCBpZ25vcmVDYXNlOiBib29sID0gZmFsc2UpOiBJUHJvcGVydHkgPT4ge1xyXG5cdGNvbnN0IHByb3BlcnR5OiBJUHJvcGVydHkgPSB7XHJcblx0XHRtYXRjaCxcclxuXHRcdGtleTogdW5kZWZpbmVkLFxyXG5cdFx0dmFsdWU6IHVuZGVmaW5lZCxcclxuXHRcdGV4aXN0czogMCxcclxuXHR9O1xyXG5cdGNvbnN0IHByb3BzID0gX2dldEFsbFByb3BlcnRpZXModmFsdWUsIGZhbHNlKTtcclxuXHRpZiAocHJvcHMuaW5jbHVkZXMobWF0Y2gpKXtcclxuXHRcdHByb3BlcnR5LmtleSA9IG1hdGNoO1xyXG5cdFx0cHJvcGVydHkudmFsdWUgPSB2YWx1ZVttYXRjaF07XHJcblx0XHRwcm9wZXJ0eS5leGlzdHMgPSB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShtYXRjaCkgPyAxIDogMjtcclxuXHRcdHJldHVybiBwcm9wZXJ0eTtcclxuXHR9XHJcblx0Y29uc3QgdGV4dF9tYXRjaCA9IF9zdHJpbmdhYmxlKG1hdGNoKTtcclxuXHRpZiAodGV4dF9tYXRjaCAhPT0gZmFsc2Upe1xyXG5cdFx0aWYgKHByb3BzLmluY2x1ZGVzKG1hdGNoID0gdGV4dF9tYXRjaCkpe1xyXG5cdFx0XHRwcm9wZXJ0eS5rZXkgPSBtYXRjaDtcclxuXHRcdFx0cHJvcGVydHkudmFsdWUgPSB2YWx1ZVttYXRjaF07XHJcblx0XHRcdHByb3BlcnR5LmV4aXN0cyA9IHZhbHVlLmhhc093blByb3BlcnR5KG1hdGNoKSA/IDEgOiAyO1xyXG5cdFx0XHRyZXR1cm4gcHJvcGVydHk7XHJcblx0XHR9XHJcblx0XHRpZiAoaWdub3JlQ2FzZSl7XHJcblx0XHRcdGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcyl7XHJcblx0XHRcdFx0Y29uc3Qga2V5ID0gX3N0cmluZ2FibGUocHJvcCk7XHJcblx0XHRcdFx0aWYgKGtleSA9PT0gZmFsc2UpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gbWF0Y2gudG9Mb3dlckNhc2UoKSl7XHJcblx0XHRcdFx0XHRwcm9wZXJ0eS5rZXkgPSBrZXk7XHJcblx0XHRcdFx0XHRwcm9wZXJ0eS52YWx1ZSA9IHZhbHVlW2tleV07XHJcblx0XHRcdFx0XHRwcm9wZXJ0eS5leGlzdHMgPSB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShtYXRjaCkgPyAxIDogMjtcclxuXHRcdFx0XHRcdHJldHVybiBwcm9wZXJ0eTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIHByb3BlcnR5O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHZhbHVlIGlzIGEgY2xhc3MgZnVuY3Rpb25cclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2lzQ2xhc3MgPSAodmFsdWU6IGFueSk6IGJvb2xlYW4gPT4ge1xyXG5cdGlmICghKHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBGdW5jdGlvbikgfHwgdmFsdWUucHJvdG90eXBlID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHRpZiAoRnVuY3Rpb24ucHJvdG90eXBlICE9PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpKSByZXR1cm4gdHJ1ZTtcclxuXHRyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUucHJvdG90eXBlKS5sZW5ndGggPiAxO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHZhbHVlIGlzIGEgYGZ1bmN0aW9uYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIG9yQ2xhc3MgLSAoZGVmYXVsdDogYGZhbHNlYCkgaW5jbHVkZSBgY2xhc3NgIG9iamVjdHNcclxuICogQHJldHVybnMgYGJvb2xlYW5gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2lzRnVuYyA9ICh2YWx1ZTogYW55LCBvckNsYXNzOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuID0+IHtcclxuXHRyZXR1cm4gdmFsdWUgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHZhbHVlICYmIChvckNsYXNzID8gdHJ1ZSA6ICFfaXNDbGFzcyh2YWx1ZSkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBgW21pbiwgbWF4XWAgY29tcGFyZWQgYW5kIGFycmFuZ2VkIGluIG9yZGVyXHJcbiAqIC0gRXhhbXBsZTogYF9taW5NYXgoMjAsIDEwKWAgPT4gYFsxMCwgMjBdYFxyXG4gKiAtIEV4YW1wbGU6IGBfbWluTWF4KDAuMjMsIG51bGwpYCA9PiBgW251bGwsIDAuMjNdYFxyXG4gKiAgXHJcbiAqIEBwYXJhbSBhIC0gZmlyc3QgdmFsdWVcclxuICogQHBhcmFtIGIgLSBzZWNvbmQgdmFsdWVcclxuICogQHJldHVybnMgYFttaW4sIG1heF1gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX21pbk1heCA9IChhOiBhbnksIGI6IGFueSk6IFttaW46IGFueSwgbWF4OiBhbnldID0+IHtcclxuXHRsZXQgbWluOiBhbnkgPSBhLCBtYXg6IGFueSA9IGI7XHJcblx0aWYgKGEgPiBiKXtcclxuXHRcdG1pbiA9IGI7XHJcblx0XHRtYXggPSBhO1xyXG5cdH1cclxuXHRyZXR1cm4gW21pbiwgbWF4XTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBGbGF0dGVuIGBvYmplY3RgIHZhbHVlcyByZWN1cnNpdmVseSB0byBkb3QgcGF0aHNcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9kb3RGbGF0KHthOnt4OjF9LGI6e3k6Mix6Ols1LDZdfX0pIC8veydhLngnOjEsJ2IueSc6MiwnYi56LjAnOjUsJ2Iuei4xJzo2fVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgYG9iamVjdGAgdmFsdWVcclxuICogQHBhcmFtIG9taXQgLSBvbWl0IGVudHJ5IGtleXMvZG90IHBhdGhzXHJcbiAqIEByZXR1cm5zIGB7W2tleTogc3RyaW5nXTogYW55fWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZG90RmxhdCA9ICh2YWx1ZTogYW55LCBvbWl0OiBzdHJpbmdbXSA9IFtdKTp7W2tleTogc3RyaW5nXTogYW55fSA9PiB7XHJcblx0aWYgKCEodmFsdWUgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSkpIHJldHVybiB7fTtcclxuXHRjb25zdCBfZW50cmllczogW2tleTogc3RyaW5nLCB2YWw6IGFueV1bXSA9IFtdO1xyXG5cdGNvbnN0IF9hZGRFbnRyaWVzID0gKG9iajogYW55LCBfcF9rZXk6IHN0cmluZykgPT4ge1xyXG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBPYmplY3QuZW50cmllcyhvYmopKXtcclxuXHRcdFx0Y29uc3QgW2ssIHZdID0gZW50cnk7XHJcblx0XHRcdGNvbnN0IF9rZXkgPSBgJHsoX3Bfa2V5ID8gYCR7X3Bfa2V5fS5gIDogJycpfSR7a31gO1xyXG5cdFx0XHRpZiAob21pdCAmJiBBcnJheS5pc0FycmF5KG9taXQpICYmIG9taXQubGVuZ3RoICYmIChvbWl0LmluY2x1ZGVzKGAke2t9YCkgfHwgb21pdC5pbmNsdWRlcyhfa2V5KSkpIGNvbnRpbnVlO1xyXG5cdFx0XHRpZiAodiAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIHYpIF9hZGRFbnRyaWVzKHYsIF9rZXkpO1xyXG5cdFx0XHRlbHNlIF9lbnRyaWVzLnB1c2goW19rZXksIHZdKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cdF9hZGRFbnRyaWVzKHZhbHVlLCAnJyk7XHJcblx0cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhfZW50cmllcyk7XHJcbn07XHJcblxyXG4vKipcclxuICogVW5mbGF0dGVuIGRvdCBmbGF0dGVuZWQgYG9iamVjdGAgfiByZXZlcnNlIG9mIGBfZG90RmxhdGBcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9kb3RJbmZsYXRlKHsnYS54JzoxLCdiLnknOjIsJ2Iuei4wJzo1LCdiLnouMSc6Nn0pIC8ve2E6e3g6MX0sYjp7eToyLHo6WzUsNl19fVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWUgfiBge1tkb3RfcGF0aDogc3RyaW5nXTogYW55fWBcclxuICogQHJldHVybnMgYHtba2V5OiBzdHJpbmddOiBhbnl9YCBwYXJzZWQgcmVzdWx0IHwgYHt9YCB3aGVuIHZhbHVlIGlzIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZG90SW5mbGF0ZSA9ICh2YWx1ZTogYW55KToge1trZXk6IHN0cmluZ106IGFueX0gPT4ge1xyXG5cdGNvbnN0IGVudHJpZXM6IFtzdHJpbmcsIGFueV1bXSA9IE9iamVjdC5lbnRyaWVzKF9kb3RGbGF0KHZhbHVlKSk7XHJcblx0Y29uc3QgYnVmZmVyOiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xyXG5cdGZvciAoY29uc3QgW3BhdGgsIHBhdGhfdmFsdWVdIG9mIGVudHJpZXMpe1xyXG5cdFx0Y29uc3Qga2V5cyA9IHBhdGguc3BsaXQoJy4nKTtcclxuXHRcdGlmIChrZXlzLmxlbmd0aCA9PT0gMSl7XHJcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbMF07XHJcblx0XHRcdGJ1ZmZlcltrZXldID0gcGF0aF92YWx1ZTtcclxuXHRcdFx0Y29udGludWU7XHJcblx0XHR9XHJcblx0XHRjb25zdCBpdGVtID0ga2V5cy5zbGljZSgpLnJldmVyc2UoKS5yZWR1Y2UoKHByZXYsIGtleSkgPT4gKHtba2V5XTogcHJldn0pLCBwYXRoX3ZhbHVlKTtcclxuXHRcdGxldCBrZXlzX2l0ZW06IGFueSA9IGl0ZW07XHJcblx0XHRsZXQga2V5c19idWZmZXI6IGFueSA9IGJ1ZmZlcjtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2ldO1xyXG5cdFx0XHRjb25zdCB2YWwgPSBrZXlzX2l0ZW0gPSBrZXlzX2l0ZW1ba2V5XTtcclxuXHRcdFx0aWYgKCFrZXlzX2J1ZmZlci5oYXNPd25Qcm9wZXJ0eShrZXkpKSBrZXlzX2J1ZmZlcltrZXldID0gdmFsO1xyXG5cdFx0XHRrZXlzX2J1ZmZlciA9IGtleXNfYnVmZmVyW2tleV07XHJcblx0XHR9XHJcblx0fVxyXG5cdGNvbnN0IF9ub3JtID0gKHZhbDogYW55KTogYW55ID0+IHtcclxuXHRcdGlmIChPYmplY3QodmFsKSAhPT0gdmFsKSByZXR1cm4gdmFsO1xyXG5cdFx0bGV0IGtleXM6IGFueSwgbGVuID0gMDtcclxuXHRcdGlmICgobGVuID0gKGtleXMgPSBPYmplY3Qua2V5cyh2YWwpKS5sZW5ndGgpICYmIE9iamVjdC5rZXlzKFsuLi5BcnJheShsZW4pXSkuam9pbignLCcpID09PSBrZXlzLmpvaW4oJywnKSkgdmFsID0gT2JqZWN0LnZhbHVlcyh2YWwpO1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdmFsKSB2YWxba2V5XSA9IF9ub3JtKHZhbFtrZXldKTtcclxuXHRcdHJldHVybiB2YWw7XHJcblx0fTtcclxuXHRyZXR1cm4gX25vcm0oYnVmZmVyKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgdmFsaWRhdGVkIG9iamVjdCBkb3QgcGF0aCAoaS5lLiBgJ2EuYi5jJ2AgdG8gcmVmZXIgdG8gYHthOntiOntjOjF9fX1gKVxyXG4gKiBcclxuICogQHBhcmFtIGRvdF9wYXRoIC0gZG90IHNlcGFyYXRlZCBrZXlzXHJcbiAqIEBwYXJhbSBvcGVyYXRpb25zIC0gc3VwcG9ydHMgb3BlcmF0aW9ucyAoaS5lLiAnIXJldmVyc2UnLychc2xpY2U9MCcpIH4gdGVzdHMgZG90IGtleXMgdXNpbmcgYC9eWy1fMC05YS16QS1aXStcXD0oW15cXD1cXC5dKikkL2AgaW5zdGVhZCBvZiBkZWZhdWx0IGAvXlstXzAtOWEtekEtWl0rJC9gXHJcbiAqIEBwYXJhbSBfZmFpbHVyZSAtIGBGYWlsRXJyb3JgIG1vZGUgfiBgMGAgPSBzaWxlbnQgKGRlZmF1bHQpIHwgYDFgID0gbG9ncyB3YXJuaW5nIHwgYDJgID0gbG9ncyBlcnJvciB8IGAzYCA9IHRocm93cyBlcnJvclxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB2YWxpZCBkb3QgcGF0aFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF92YWxpZERvdFBhdGggPSAoZG90X3BhdGg6IHN0cmluZywgb3BlcmF0aW9uczogYm9vbGVhbiA9IGZhbHNlLCBfZmFpbHVyZTogMHwxfDJ8MyA9IDApOiBzdHJpbmcgPT4ge1xyXG5cdHRyeSB7XHJcblx0XHRpZiAoIShkb3RfcGF0aCA9IF9zdHIoZG90X3BhdGgsIHRydWUpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBkb3QgcGF0aCB2YWx1ZS4nKTtcclxuXHRcdGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgdiBvZiBkb3RfcGF0aC5zcGxpdCgnLicpKXtcclxuXHRcdFx0aWYgKCEhKHYgPSB2LnRyaW0oKSkpIHBhcnRzLnB1c2godik7XHJcblx0XHR9XHJcblx0XHRpZiAoIXBhcnRzLmxlbmd0aCkgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBkb3QgcGF0aCBmb3JtYXQgXCIke2RvdF9wYXRofVwiLmApO1xyXG5cdFx0Y29uc3QgYnVmZmVyID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdGxldCBwYXJ0ID0gcGFydHNbaV07XHJcblx0XHRcdGxldCB2YWxpZDogYm9vbGVhbiA9IC9eWy1fMC05YS16QS1aXSskLy50ZXN0KHBhcnQpO1xyXG5cdFx0XHRpZiAoIXZhbGlkICYmIG9wZXJhdGlvbnMpe1xyXG5cdFx0XHRcdGlmIChbJyFyZXZlcnNlJywgJyFzbGljZSddLmluY2x1ZGVzKHBhcnQpKSB2YWxpZCA9IHRydWU7XHJcblx0XHRcdFx0ZWxzZSBpZiAocGFydC5pbmRleE9mKCc9JykgPiAtMSl7XHJcblx0XHRcdFx0XHRjb25zdCBfaW52YWxpZDogc3RyaW5nW10gPSBbXTtcclxuXHRcdFx0XHRcdGZvciAobGV0IHYgb2YgcGFydC5zcGxpdCgnLCcpKXtcclxuXHRcdFx0XHRcdFx0aWYgKCh2ID0gdi50cmltKCkpICYmICEvXlstXzAtOWEtekEtWl0rXFw9KFteXFw9XFwuXSopJC8udGVzdCh2KSkgX2ludmFsaWQucHVzaCh2KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICghX2ludmFsaWQubGVuZ3RoKSB2YWxpZCA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghdmFsaWQpIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgZG90IHBhdGgga2V5IFwiJHtwYXJ0fVwiLmApO1xyXG5cdFx0XHRidWZmZXIucHVzaChwYXJ0KTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBidWZmZXIuam9pbignLicpO1xyXG5cdH1cclxuXHRjYXRjaCAoZSl7XHJcblx0XHRuZXcgRmFpbEVycm9yKGUsIF9mYWlsdXJlLCB7ZG90X3BhdGgsIG9wZXJhdGlvbnN9KTtcclxuXHRcdHJldHVybiAnJztcclxuXHR9XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IHBhcnNlZCBgYm9vbGVhbmAgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcbiAqIEBwYXJhbSBzdHJpY3QgLSBzdHJpY3QgbW9kZSB+IHN1cHBvcnQgb25seSBgYm9vbGVhbi1saWtlYCB2YWx1ZSAoaS5lLiBgJ3RydWUnfCdmYWxzZSd8dHJ1ZXxmYWxzZXwxfDBgKSByZXR1cm5zIGB1bmRlZmluZWRgIGlmIHVuc3VwcG9ydGVkIHdoZW4gZW5hYmxlZC5cclxuICogQHBhcmFtIHRyaW0gLSB0cmltIGBzdHJpbmdgIHZhbHVlIChkZWZhdWx0IGB0cnVlYClcclxuICogQHJldHVybnNcclxuICogLSBgYm9vbGVhbmBcclxuICogLSBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWQgaWYgYHN0cmljdGAgaXMgZW5hYmxlZFxyXG4gKiAtIGAnZmFsc2UnID0+IGZhbHNlYCB8IGAhIXZhbHVlYCB3aGVuIHN0cmljdCBpcyBkaXNhYmxlZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9ib29sID0gKHZhbHVlOiBhbnksIHN0cmljdDogYm9vbGVhbiA9IGZhbHNlLCB0cmltOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW58dW5kZWZpbmVkID0+IHtcclxuXHRpZiAodHJpbSAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbHVlKSB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcclxuXHRpZiAoc3RyaWN0ICYmICFbJ3RydWUnLCAnZmFsc2UnLCB0cnVlLCBmYWxzZSwgMSwgMF0uaW5jbHVkZXModmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdHJldHVybiB2YWx1ZSA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDogISF2YWx1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXNvbHZlIGRvdCBwYXRoIG9iamVjdCB2YWx1ZSB+IHN1cHBvcnRzIGFycmF5IG9wZXJhdGlvbnMgY2hhaW5pbmdcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIFxyXG4gKiAvL3NpbXBsZSB1c2FnZVxyXG4gKiBfZG90R2V0KCd4Jywgeyd4JzoxfSkgPT4gMVxyXG4gKiBfZG90R2V0KCdhLmIuYycsIHsnYSc6eydiJzp7J2MnOjF9fX0pID0+IDFcclxuICogX2RvdEdldCgnYS5iLmQnLCB7J2EnOnsnYic6eydjJzoxfX19KSA9PiBudWxsXHJcbiAqIF9kb3RHZXQoJ2EuMCcsIHsnYSc6Wyd4JywneSddfSkgPT4gJ3gnXHJcbiAqIFxyXG4gKiAvL2FycmF5IHJldmVyc2Ugb3BlcmF0aW9uIChkb25lIHNsaWNlIGNvcHkpXHJcbiAqIF9kb3RHZXQoJzAuIXJldmVyc2UnLCBbWzMsMiwxXV0pID0+IFszLDIsMV1cclxuICogXHJcbiAqIC8vYXJyYXkgc2xpY2Ugb3BlcmF0aW9uXHJcbiAqIF9kb3RHZXQoJzAuIXNsaWNlJywgW1sxLDIsM11dKSA9PiBbMSwyLDNdXHJcbiAqIFxyXG4gKiAvL2FycmF5IHNsaWNlIG5lZ2F0aXZlIGAtbnVtYmVyYFxyXG4gKiBfZG90R2V0KCcwLi0yJywgW1sxLDIsM11dKSA9PiBbMiwzXVxyXG4gKiBcclxuICogLy9hcnJheSBga2V5PXZhbHVlYCBzZWFyY2hpbmdcclxuICogX2RvdEdldCgnMC5hPTInLCBbW3snYSc6MSwnYic6Mn0seydhJzoyLCdiJzozfV1dKSA9PiB7J2EnOjIsJ2InOjN9XHJcbiAqIF9kb3RHZXQoJzAuYT0xLGI9MicsIFtbeydhJzoxLCdiJzoyLCdjJzozfSx7J2EnOjIsJ2InOjMsJ2MnOjR9XV0pID0+IHsnYSc6MSwnYic6MiwnYyc6M31cclxuICogXHJcbiAqIEBwYXJhbSBwYXRoIC0gZG90IHNlcGFyYXRlZCBrZXlzIH4gb3B0aW9uYWwgYXJyYXkgb3BlcmF0aW9uc1xyXG4gKiBAcGFyYW0gdGFyZ2V0IC0gdHJhdmVyc2Ugb2JqZWN0XHJcbiAqIEBwYXJhbSBpZ25vcmVDYXNlIC0gd2hldGhlciB0byBpZ25vcmUgY2FzZSB3aGVuIG1hdGNoaW5nIGtleXMgKGRlZmF1bHQ6IGBmYWxzZWApXHJcbiAqIEBwYXJhbSBfZmFpbHVyZSAtIGBGYWlsRXJyb3JgIG1vZGUgfiBgMGAgPSBzaWxlbnQgKGRlZmF1bHQpIHwgYDFgID0gbG9ncyB3YXJuaW5nIHwgYDJgID0gbG9ncyBlcnJvciB8IGAzYCA9IHRocm93cyBlcnJvclxyXG4gKiBAcGFyYW0gX2RlZmF1bHQgLSBkZWZhdWx0IHJlc3VsdCBvbiBmYWlsdXJlXHJcbiAqIEByZXR1cm5zIGBhbnlgIGRvdCBwYXRoIG1hdGNoIHJlc3VsdFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kb3RHZXQgPSAocGF0aDogc3RyaW5nLCB0YXJnZXQ6IGFueSwgaWdub3JlQ2FzZTogYm9vbGVhbiA9IGZhbHNlLCBfZmFpbHVyZTogMHwxfDJ8MyA9IDAsIF9kZWZhdWx0PzogYW55KTogYW55ID0+IHtcclxuXHR0cnkge1xyXG5cdFx0Y29uc3Qga2V5cyA9IChwYXRoID0gX3ZhbGlkRG90UGF0aChwYXRoLCB0cnVlLCBfZmFpbHVyZSkpLnNwbGl0KCcuJyk7XHJcblx0XHRpZiAoIWtleXMubGVuZ3RoKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHJlc29sdmUgZG90IHBhdGggZm9ybWF0LicpO1xyXG5cdFx0bGV0IGFib3J0OiBib29sZWFuID0gZmFsc2UsIHZhbHVlOiBhbnkgPSBrZXlzLnJlZHVjZSgocHJldjogYW55LCBrZXk6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRpZiAoYWJvcnQpIHJldHVybiBwcmV2OyAvL25vdCBmb3VuZFxyXG5cdFx0XHRpZiAocHJldiAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIHByZXYpe1xyXG5cdFx0XHRcdGNvbnN0IHByb3AgPSBfZ2V0UHJvcChwcmV2LCBrZXksIGlnbm9yZUNhc2UpO1xyXG5cdFx0XHRcdGlmIChwcm9wLmV4aXN0cykgcmV0dXJuIHByb3AudmFsdWU7IC8va2V5IHZhbHVlXHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkocHJldikpe1xyXG5cdFx0XHRcdFx0aWYgKGtleSA9PT0gJyFyZXZlcnNlJykgcmV0dXJuIHByZXYuc2xpY2UoKS5yZXZlcnNlKCk7IC8vYXJyYXkgcmV2ZXJzZSAoc2xpY2UpXHJcblx0XHRcdFx0XHRpZiAoa2V5ID09PSAnIXNsaWNlJykgcmV0dXJuIHByZXYuc2xpY2UoKTsgLy9hcnJheSBzbGljZVxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHQvL2FycmF5IHNsaWNlIGAtbnVtYmVyYFxyXG5cdFx0XHRcdFx0bGV0IHRtcDogYW55O1xyXG5cdFx0XHRcdFx0aWYgKCh0bXAgPSBfbnVtKGtleSwgMCkpIDwgMCAmJiBOdW1iZXIuaXNJbnRlZ2VyKHRtcCkpIHJldHVybiBwcmV2LnNsaWNlKHRtcCk7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdC8vYXJyYXkgc2VhcmNoXHJcblx0XHRcdFx0XHRpZiAocHJldi5sZW5ndGggJiYga2V5LmluZGV4T2YoJz0nKSA+IC0xKXtcclxuXHRcdFx0XHRcdFx0Y29uc3Qgc2VhcmNoX2VudHJpZXM6IFtrZXk6IHN0cmluZywgdmFsOiBzdHJpbmddW10gPSBbXTtcclxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgdmFsIG9mIGtleS5zcGxpdCgnLCcpKXtcclxuXHRcdFx0XHRcdFx0XHRpZiAoISh2YWwgPSB2YWwudHJpbSgpKSkgY29udGludWU7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGFyciA9IHZhbC5zcGxpdCgnPScpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChhcnIubGVuZ3RoICE9PSAyKSByZXR1cm4gW107XHJcblx0XHRcdFx0XHRcdFx0bGV0IGsgPSBhcnJbMF0udHJpbSgpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KGFyclsxXSk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGspIHNlYXJjaF9lbnRyaWVzLnB1c2goW2ssIF9qc29uUGFyc2UodiwgdildKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRsZXQgaW5kZXggPSAtMTtcclxuXHRcdFx0XHRcdFx0aWYgKHNlYXJjaF9lbnRyaWVzLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2Lmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBlbnRyeSA9IHByZXZbaV07XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtYXRjaGVzOiBba2V5OiBzdHJpbmcsIHZhbDogc3RyaW5nXVtdID0gW107XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHYgb2Ygc2VhcmNoX2VudHJpZXMpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBwcm9wID0gX2dldFByb3AoZW50cnksIHZbMF0sIGlnbm9yZUNhc2UpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocHJvcC5leGlzdHMgJiYgcHJvcC52YWx1ZSA9PT0gdlsxXSkgbWF0Y2hlcy5wdXNoKHYpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKG1hdGNoZXMubGVuZ3RoICYmIG1hdGNoZXMubGVuZ3RoID09PSBzZWFyY2hfZW50cmllcy5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpbmRleCA9IGk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoaW5kZXggPiAtMSkgcmV0dXJuIHByZXZbaW5kZXhdO1xyXG5cdFx0XHRcdFx0XHRhYm9ydCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdFxyXG5cdFx0XHQvL25vdCBmb3VuZFxyXG5cdFx0XHRhYm9ydCA9IHRydWU7XHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHR9LCB0YXJnZXQpO1xyXG5cdFx0cmV0dXJuICFhYm9ydCA/IHZhbHVlIDogX2RlZmF1bHQ7XHJcblx0fVxyXG5cdGNhdGNoIChlKSB7XHJcblx0XHRuZXcgRmFpbEVycm9yKGUsIF9mYWlsdXJlLCB7cGF0aCwgdGFyZ2V0LCBpZ25vcmVDYXNlLCBfZGVmYXVsdH0sICdEb3RHZXRFcnJvcicpO1xyXG5cdFx0cmV0dXJuIF9kZWZhdWx0O1xyXG5cdH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZGVwcmVjYXRlZFxyXG4gKiBHZXQgY29lcmNlZCBgbnVtYmVyL3N0cmluZy9KU09OYCB2YWx1ZSB+IGB2YWx1ZS52YWx1ZU9mKClgXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgYW55YCB+IGBvYmplY3RgfGB1bmRlZmluZWRgfGBib29sZWFuYHxgbnVtYmVyYHxgYmlnaW50YHxgc3RyaW5nYHxgc3ltYm9sYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF92YWx1ZU9mID0gKHZhbHVlOiBhbnkpOiBhbnkgPT4ge1xyXG5cdGlmICghKHZhbHVlICYmICdvYmplY3QnID09PSB0eXBlb2YgdmFsdWUpKSByZXR1cm4gdmFsdWU7XHJcblx0bGV0IHZhbDogYW55ID0gdmFsdWUudmFsdWVPZigpO1xyXG5cdGlmICh2YWwgPT09IHZhbHVlKXtcclxuXHRcdGlmIChPYmplY3QodmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSkgPT09IHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gJiYgIWlzTmFOKHZhbCA9IE51bWJlcih2YWx1ZSkpKSByZXR1cm4gdmFsOyAvL2hpbnQgbnVtYmVyXHJcblx0XHRpZiAoKHZhbCA9IF9zdHJpbmdhYmxlKHZhbHVlKSkgIT09IGZhbHNlKSByZXR1cm4gdmFsOyAvL2hpbnQgc3RyaW5nIHwgdmFsdWUudG9TdHJpbmcoKVxyXG5cdFx0aWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiB2YWx1ZS50b0pTT04gJiYgKHZhbCA9IHZhbHVlLnRvSlNPTigpKSAhPT0gdmFsdWUpIHJldHVybiB2YWw7IC8vdmFsdWUudG9KU09OKClcclxuXHR9XHJcblx0cmV0dXJuIHZhbDsgLy92YWx1ZS52YWx1ZU9mKClcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBlbXB0eSB+IGBudWxsYC9gdW5kZWZpbmVkYC9gTmFOYC9gJydgL2B7fWAvYCFbLi4udmFsdWVdYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIHRyaW0gLSB0cmltIHdoaXRlc3BhY2UgfiB3aGVuIHZhbHVlIGlzIGBzdHJpbmcvQnVmZmVyYFxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZW1wdHkgPSAodmFsdWU6IGFueSwgdHJpbTogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiA9PiB7XHJcblx0aWYgKFtudWxsLCB1bmRlZmluZWQsIE5hTiwgJyddLmluY2x1ZGVzKHZhbHVlKSkgcmV0dXJuIHRydWU7IC8vZGVmYXVsdCBlbXB0eVxyXG5cdGlmIChbJ2Z1bmN0aW9uJywgJ2Jvb2xlYW4nLCAnbnVtYmVyJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKSkgcmV0dXJuIGZhbHNlOyAvL2Z1bmN0aW9uL2Jvb2xlYW4vbnVtYmVyIC0gaWdub3JlXHJcblx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUgfHwgX2lzQnVmZmVyKHZhbHVlKSkgcmV0dXJuICFfc3RyKHZhbHVlLCB0cmltKS5sZW5ndGg7IC8vc3RyaW5nL0J1ZmZlciAtICFsZW5ndGhcclxuXHRpZiAoJ29iamVjdCcgIT09IHR5cGVvZiB2YWx1ZSkgcmV0dXJuIGZhbHNlOyAvL25vbiBvYmplY3QgLSBpZ25vcmVcclxuXHRpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXAgfHwgdmFsdWUgaW5zdGFuY2VvZiBTZXQpIHJldHVybiAhdmFsdWUuc2l6ZTsgLy9NYXAvU2V0IC0gIXNpemVcclxuXHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiAhdmFsdWUubGVuZ3RoOyAvL0FycmF5IC0gIWxlbmd0aFxyXG5cdGlmIChPYmplY3QodmFsdWVbU3ltYm9sLml0ZXJhdG9yXSkgPT09IHZhbHVlW1N5bWJvbC5pdGVyYXRvcl0pIHJldHVybiAhWy4uLnZhbHVlXS5sZW5ndGg7IC8vdmFsdWVbU3ltYm9sLml0ZXJhdG9yXSAtICFsZW5ndGhcclxuXHRpZiAoIV9nZXRBbGxQcm9wZXJ0aWVzKHZhbHVlKS5sZW5ndGgpIHJldHVybiB0cnVlOyAvL2hhcyBubyBzZWxmIHByb3BlcnRpZXNcclxuXHRyZXR1cm4gZmFsc2U7IC8vaWdub3JlXHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdmFsdWUgY2FuIGJlIGl0ZXJhdGVkIH4gYFsuLi52YWx1ZV1gXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZVxyXG4gKiBAcGFyYW0gX2FzeW5jIC0gdXNpbmcgYFtTeW1ib2wuYXN5bmNJdGVyYXRvcl1gIChkZWZhdWx0IGBmYWxzZWAgfiBgW1N5bWJvbC5pdGVyYXRvcl1gKVxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaXRlcmFibGUgPSAodmFsdWU6IGFueSwgX2FzeW5jOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuID0+ICdmdW5jdGlvbicgPT09IHR5cGVvZiB2YWx1ZT8uW19hc3luYyA/IFN5bWJvbC5hc3luY0l0ZXJhdG9yIDogU3ltYm9sLml0ZXJhdG9yXTtcclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0ZSBgT2JqZWN0YCB2YWx1ZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIF9maWxsZWQgLSBtdXN0IG5vdCBiZSBlbXB0eSBge31gXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9pc09iamVjdCA9ICh2YWx1ZTogYW55LCBfZmlsbGVkOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuID0+ICEhdmFsdWUgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBPYmplY3QucHJvdG90eXBlICYmIChfZmlsbGVkID8gIV9lbXB0eSh2YWx1ZSkgOiB0cnVlKTtcclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0ZSB2YWx1ZXMgaXRlcmFibGUgYXJyYXkgbGlzdFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIF9tb2RlIC0gcGFyc2UgbW9kZVxyXG4gKiAtIGAwYCA9IChkZWZhdWx0KSBgW1N5bWJvbC5pdGVyYXRvcl0ubmFtZWAgaXMgJ3ZhbHVlcyd8J1tTeW1ib2wuaXRlcmF0b3JdJ1xyXG4gKiAtIGAxYCA9IGBBcnJheS5pc0FycmF5YFxyXG4gKiAtIGAyYCA9IGlzIGl0ZXJhYmxlIGBbU3ltYm9sLml0ZXJhdG9yXWBcclxuICogQHBhcmFtIF9maWxsZWQgLSBtdXN0IG5vdCBiZSBlbXB0eSBgW11gXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9pc0FycmF5ID0gKHZhbHVlOiBhbnksIF9maWxsZWQ6IGJvb2xlYW4gPSBmYWxzZSwgX21vZGU6IDB8MXwyID0gMCk6IGJvb2xlYW4gPT4ge1xyXG5cdF9tb2RlID0gWzAsIDEsIDJdLmluY2x1ZGVzKF9tb2RlID0gcGFyc2VJbnQoX21vZGUgYXMgYW55KSBhcyBhbnkpID8gX21vZGUgOiAwO1xyXG5cdGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpe1xyXG5cdFx0aWYgKF9tb2RlID09PSAxKSByZXR1cm4gZmFsc2U7XHJcblx0XHRjb25zdCBpdCA9IHZhbHVlPy5bU3ltYm9sLml0ZXJhdG9yXTtcclxuXHRcdGlmIChPYmplY3QoaXQpICE9PSBpdCkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0aWYgKF9tb2RlICE9PSAyICYmICFbJ3ZhbHVlcycsICdbU3ltYm9sLml0ZXJhdG9yXSddLmluY2x1ZGVzKGl0Lm5hbWUpKSByZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cdHRyeSB7XHJcblx0XHRjb25zdCBsZW4gPSB2YWx1ZS5sZW5ndGggPz8gWy4uLnZhbHVlXS5sZW5ndGg7XHJcblx0XHRpZiAoIShOdW1iZXIuaXNJbnRlZ2VyKGxlbikgJiYgbGVuID49IDApKSByZXR1cm4gZmFsc2U7XHJcblx0XHRyZXR1cm4gX2ZpbGxlZCA/ICEhbGVuIDogdHJ1ZTtcclxuXHR9XHJcblx0Y2F0Y2ggKGUpIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn07XHJcblxyXG4vKipcclxuICogT2JqZWN0IGFycmF5IHZhbHVlc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgYXJyYXkgdmFsdWVcclxuICogQHBhcmFtIGVudHJpZXMgLSBlbmFibGUgZ2V0IGVudHJpZXMgKGkuZS4gYFtrZXk6IGFueSwgdmFsdWU6IGFueV1bXWApIGluc3RlYWQgb2YgZGVmYXVsdCB2YWx1ZXMgKGkuZS4gYGFueVtdYClcclxuICogQHBhcmFtIG9iamVjdCAtIGVuYWJsZSBnZXQgYE9iamVjdC52YWx1ZXModmFsdWUpYC9gT2JqZWN0LmVudHJpZXModmFsdWUpYFxyXG4gKiBAcGFyYW0gZmxhdHRlbiAtIGZsYXR0ZW4gZGVwdGggfiBgQXJyYXkuZmxhdGAgZGVwdGggKGFsaWFzOiBgLTFgID0+IGBBcnJheS5mbGF0KEluZmluaXR5KWAsIGB0cnVlfG51bGxgID0+IGBBcnJheS5mbGF0KClgKVxyXG4gKiBAcmV0dXJuc1xyXG4gKiAtIGBhbnlbXWAgdmFsdWVzIG9yIGBba2V5OiBhbnksIHZhbHVlOiBhbnldW11gIHdoZW4gYGVudHJpZXNgIGFyZ3VtZW50IGlzIGB0cnVlYFxyXG4gKiAtIGBbdmFsdWVdYCB3aGVuIGB2YWx1ZWAgYXJndW1lbnQgaXMgbm90IGl0ZXJhYmxlIG9yIGFycmF5YWJsZVxyXG4gKiAtIGBbXWAgd2hlbiBgdmFsdWVgIGFyZ3VtZW50IGlzIGVtcHR5IH4gYFtdYC9ge31gL2B1bmRlZmluZWRgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3ZhbHVlcyA9ICh2YWx1ZTogYW55LCBlbnRyaWVzOiBib29sZWFuID0gZmFsc2UsIG9iamVjdDogYm9vbGVhbiA9IGZhbHNlLCBmbGF0dGVuPzogbnVtYmVyfGJvb2xlYW58bnVsbCk6IGFueVtdID0+IHtcclxuXHRsZXQgaXRlbXM6IGFueVtdID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IFtdIDogZW50cmllcyA/IFtbJzAnLCB2YWx1ZV1dIDogW3ZhbHVlXTtcclxuXHRpZiAodmFsdWUgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSAmJiAnZnVuY3Rpb24nICE9PSB0eXBlb2YgdmFsdWUpe1xyXG5cdFx0aWYgKE9iamVjdCh2YWx1ZVtTeW1ib2wuaXRlcmF0b3JdKSA9PT0gdmFsdWVbU3ltYm9sLml0ZXJhdG9yXSl7XHJcblx0XHRcdGNvbnN0IGhhc19lbnRyaWVzID0gKGl0ZW1zID0gWy4uLnZhbHVlXSkubGVuZ3RoICYmIGl0ZW1zLmZpbmRJbmRleCh2ID0+ICEoQXJyYXkuaXNBcnJheSh2KSAmJiB2Lmxlbmd0aCA9PT0gMiAmJiBPYmplY3Qua2V5cyh2KSArICcnID09PSAnMCwxJykpIDwgMDtcclxuXHRcdFx0aWYgKGVudHJpZXMpIGl0ZW1zID0gaGFzX2VudHJpZXMgPyBpdGVtcyA6IE9iamVjdC5lbnRyaWVzKGl0ZW1zKTtcclxuXHRcdFx0ZWxzZSBpZiAoaGFzX2VudHJpZXMpe1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlczogYW55W10gPSBbXTtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IHYgb2YgaXRlbXMpIHZhbHVlcy5wdXNoKHZbMV0pO1xyXG5cdFx0XHRcdGl0ZW1zID0gdmFsdWVzO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmIChvYmplY3Qpe1xyXG5cdFx0XHRjb25zdCBhcnIgPSBPYmplY3QuZW50cmllcyh2YWx1ZSk7XHJcblx0XHRcdGlmIChhcnIubGVuZ3RoIHx8IChfZW1wdHkodmFsdWUpICYmIF9pc09iamVjdCh2YWx1ZSkpKXtcclxuXHRcdFx0XHRpZiAoIWVudHJpZXMgJiYgYXJyLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZXM6IGFueVtdID0gW107XHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHYgb2YgYXJyKSB2YWx1ZXMucHVzaCh2WzFdKTtcclxuXHRcdFx0XHRcdGl0ZW1zID0gdmFsdWVzOyBcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBpdGVtcyA9IGFycjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZiAoX2VtcHR5KHZhbHVlKSAmJiBfaXNPYmplY3QodmFsdWUpKSBpdGVtcyA9IFtdOyAvL3t9XHJcblx0fVxyXG5cdGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGZsYXR0ZW4pe1xyXG5cdFx0bGV0IGRlcHRoOiBhbnkgPSBmbGF0dGVuO1xyXG5cdFx0aWYgKGZsYXR0ZW4gPT09IC0xKSBkZXB0aCA9IEluZmluaXR5O1xyXG5cdFx0ZWxzZSBpZiAoW251bGwsIHRydWVdLmluY2x1ZGVzKGRlcHRoKSkgZGVwdGggPSB1bmRlZmluZWQ7XHJcblx0XHRpdGVtcyA9IGl0ZW1zLmZsYXQoZGVwdGgpO1xyXG5cdH1cclxuXHRyZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGR1bXAgdmFsdWUgd2l0aCBsaW1pdCBtYXggc3RyaW5nIGxlbmd0aFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIG1heFN0ckxlbmd0aCAtIG1heCBzdHJpbmcgbGVuZ3RoIFtkZWZhdWx0OiBgMjAwYF1cclxuICogQHBhcmFtIGZpcnN0IC0gc3VtbWFyaXplIG9iamVjdCBhcnJheSB0byBjb3VudCBhbmQgZmlyc3QgZW50cnkgKGkuZS4gYHtjb3VudDpudW1iZXIsZmlyc3Q6YW55fWApIFxyXG4gKiBAcmV0dXJucyBgYW55YCAtIGR1bXAgdmFsdWVcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZHVtcFZhbCA9ICh2YWx1ZTogYW55LCBtYXhTdHJMZW5ndGg6IG51bWJlciA9IDIwMCwgZmlyc3Q6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSA9PiB7XHJcblx0Y29uc3QgbWluU3RyTGVuZ3RoID0gMjA7XHJcblx0dmFsdWUgPSBfanNvbkNvcHkodmFsdWUpO1xyXG5cdG1heFN0ckxlbmd0aCA9ICEobWF4U3RyTGVuZ3RoID0gX2ludChtYXhTdHJMZW5ndGgsIDIwMCkpID8gMCA6IChtYXhTdHJMZW5ndGggPj0gbWluU3RyTGVuZ3RoID8gbWF4U3RyTGVuZ3RoIDogMjAwKTtcclxuXHRjb25zdCBfbWF4U3RyID0gKHY6IGFueSk6IGFueSA9PiB7XHJcblx0XHRpZiAoISgnc3RyaW5nJyA9PT0gdHlwZW9mIHYgJiYgdi5sZW5ndGggPiBtYXhTdHJMZW5ndGgpKSByZXR1cm4gdjtcclxuXHRcdGNvbnN0IGFwcGVuZCA9IGAuLi4oJHt2Lmxlbmd0aH0pYDtcclxuXHRcdHJldHVybiB2LnN1YnN0cmluZygwLCBtYXhTdHJMZW5ndGggLSBhcHBlbmQubGVuZ3RoKSArIGFwcGVuZDtcclxuXHR9O1xyXG5cdGNvbnN0IF9nZXRfZmlyc3QgPSAodmFsOiBhbnkpOiBhbnkgPT4ge1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsKSl7XHJcblx0XHRcdGxldCBzYW1lX2tleXMgPSAxLCBwcmV2X2tleXMgPSAnJztcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0XHRjb25zdCB2ID0gdmFsW2ldO1xyXG5cdFx0XHRcdGlmIChPYmplY3QodikgIT09IHYpe1xyXG5cdFx0XHRcdFx0c2FtZV9rZXlzID0gMDtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXModik7XHJcblx0XHRcdFx0aWYgKGtleXMubGVuZ3RoKXtcclxuXHRcdFx0XHRcdHNhbWVfa2V5cyA9IDA7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3Qga2V5c192YWwgPSBrZXlzLmpvaW4oJywnKTtcclxuXHRcdFx0XHRpZiAoIWkpIHByZXZfa2V5cyA9IGtleXNfdmFsO1xyXG5cdFx0XHRcdGVsc2UgaWYgKGtleXNfdmFsICE9PSBwcmV2X2tleXMpe1xyXG5cdFx0XHRcdFx0c2FtZV9rZXlzID0gMDtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoc2FtZV9rZXlzICYmIHZhbC5sZW5ndGgpIHJldHVybiB7Y291bnQ6IHZhbC5sZW5ndGgsIGZpcnN0OiBfZ2V0X2ZpcnN0KHZhbFswXSl9O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHZhbDtcclxuXHR9O1xyXG5cdGNvbnN0IF9wYXJzZSA9ICh2YWw6IGFueSk6IGFueSA9PiB7XHJcblx0XHRpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB2YWwgJiYgdmFsKXtcclxuXHRcdFx0Zm9yIChsZXQgayBpbiB2YWwpe1xyXG5cdFx0XHRcdGlmICghdmFsLmhhc093blByb3BlcnR5KGspKSBjb250aW51ZTtcclxuXHRcdFx0XHR2YWxba10gPSBfcGFyc2UodmFsW2tdKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0ZWxzZSB2YWwgPSBfbWF4U3RyKHZhbCk7XHJcblx0XHRyZXR1cm4gdmFsO1xyXG5cdH07XHJcblx0cmV0dXJuIF9wYXJzZShmaXJzdCA/IF9nZXRfZmlyc3QodmFsdWUpIDogdmFsdWUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNvcnQgbW9kZSBgdHlwZWAgfiBgMXwtMXwnYXNjJ3wnZGVzYyd8J2FzY2VuZGluZyd8J2Rlc2NlbmRpbmcnYFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgVFNvcnRNb2RlID0gMXwtMXwnYXNjJ3wnZGVzYyd8J2FzY2VuZGluZyd8J2Rlc2NlbmRpbmcnO1xyXG5cclxuLyoqXHJcbiAqIFNvcnQgb3JkZXIgYHR5cGVgIH4gYC0xYCAoYmVmb3JlKSB8IGAxYCAoYWZ0ZXIpIHwgYDBgIChlcXVhbClcclxuICovXHJcbmV4cG9ydCB0eXBlIFRTb3J0T3JkZXIgPSAtMXwxfDA7XHJcblxyXG4vKipcclxuICogU29ydCBgQXJyYXlgICoqc2xpY2UqKiB2YWx1ZXNcclxuICogLSByZXR1cm5zIG5ldyBhcnJheSAoaS5lLiBgYXJyYXkuc2xpY2UoKS5zb3J0KC4uLilgIGRvZXMgbm90IGFmZmVjdCBvcmlnaW5hbCBhcnJhbmdlbWVudClcclxuICogXHJcbiAqIEBwYXJhbSBhcnJheSAtIHNvcnQgYEFycmF5YFxyXG4gKiBAcGFyYW0gbW9kZSAtIHNvcnQgbW9kZVxyXG4gKiBAcGFyYW0gb25Db21wYXJlIC0gY3VzdG9tIGNvbXBhcmUgY2FsbGJhY2tcclxuICogQHBhcmFtIGxvY2FsZUNvbXBhcmVDb25maWcgLSBtZXRob2QgY29uZmlnIFtgU3RyaW5nLmxvY2FsZUNvbXBhcmVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvbG9jYWxlQ29tcGFyZSkgKGRlZmF1bHQ6IGB7bG9jYWxlczonZW4nLG9wdGlvbnM6e3NlbnNpdGl2aXR5OidiYXNlJ319YCkgfiBbb3B0aW9ucy5zZW5zaXRpdml0eV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL2xvY2FsZUNvbXBhcmUpXHJcbiAqIEByZXR1cm5zIFNvcnRlZCBgVFtdYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zb3J0ID0gPFQgPSBhbnk+KFxyXG5cdGFycmF5OiBUW10sXHJcblx0bW9kZT86IFRTb3J0TW9kZXx7W2tleTpzdHJpbmddOlRTb3J0TW9kZX18W3N0cmluZyxUU29ydE1vZGVdfFtzdHJpbmcsVFNvcnRNb2RlXVtdLFxyXG5cdG9uQ29tcGFyZT86IChhOmFueSxiOmFueSxrZXk/OnN0cmluZyk9PlRTb3J0T3JkZXJ8W2E6YW55LGI6YW55XSxcclxuXHRsb2NhbGVDb21wYXJlQ29uZmlnPzoge2xvY2FsZXM/OmFueSxvcHRpb25zPzphbnl9XHJcbik6IFRbXSA9PiB7XHJcblxyXG5cdHRyeSB7XHJcblx0XHRcclxuXHRcdC8vIHBhcnNlIGFyZ3NcclxuXHRcdGNvbnN0IGl0ZW1zID0gWy4uLmFycmF5XS5zbGljZSgpO1xyXG5cdFx0aWYgKCFpdGVtcy5sZW5ndGgpIHJldHVybiBpdGVtczsgLy88PCBjYW5jZWwgfiBlbXB0eVxyXG5cdFx0Y29uc3Qgc29ydF9tb2RlOiBhbnkgPSBtb2RlO1xyXG5cdFx0Y29uc3QgbG9jYWxlX2NvbXBhcmVfY29uZmlnOiB7bG9jYWxlcz86YW55LG9wdGlvbnM/OmFueX0gPSB7XHJcblx0XHRcdGxvY2FsZXM6IGxvY2FsZUNvbXBhcmVDb25maWc/LmxvY2FsZXMgfHwgJ2VuJyxcclxuXHRcdFx0b3B0aW9uczoge3NlbnNpdGl2aXR5OiAnYmFzZScsIC4uLk9iamVjdChsb2NhbGVDb21wYXJlQ29uZmlnPy5vcHRpb25zKX0sXHJcblx0XHR9O1xyXG5cclxuXHRcdC8vIG9uQ29tcGFyZSBjYWxsYmFja1xyXG5cdFx0Y29uc3QgX29uX2NvbXBhcmU6IHVuZGVmaW5lZHwoKGE6YW55LGI6YW55LGtleT86c3RyaW5nKT0+VFNvcnRPcmRlcnxbYTphbnksYjphbnldKSA9ICdmdW5jdGlvbicgPT09IHR5cGVvZiBvbkNvbXBhcmUgPyBvbkNvbXBhcmUgOiB1bmRlZmluZWQ7XHJcblx0XHRcclxuXHRcdC8vIGZuID0+IGhlbHBlciB+IHNvcnQgY29tcGFyZVxyXG5cdFx0Y29uc3QgX3NvcnRfY29tcGFyZSA9IChhOiBhbnksIGI6IGFueSwga2V5Pzogc3RyaW5nKTogbnVtYmVyID0+IHtcclxuXHRcdFx0bGV0IHg6IGFueSA9IGEsIHk6IGFueSA9IGI7XHJcblx0XHRcdGlmIChfb25fY29tcGFyZSl7XHJcblx0XHRcdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSBfb25fY29tcGFyZShhLCBiLCBrZXkpO1xyXG5cdFx0XHRcdGNvbnN0IHZhbDogYW55ID0gcGFyc2VJbnQocmVzdWx0KTtcclxuXHRcdFx0XHRpZiAoWy0xLDEsMF0uaW5jbHVkZXModmFsKSkgcmV0dXJuIHZhbDtcclxuXHRcdFx0XHR4ID0gcmVzdWx0Py5bMF0gPz8geDtcclxuXHRcdFx0XHR5ID0gcmVzdWx0Py5bMV0gPz8geTtcclxuXHRcdFx0fVxyXG5cdFx0XHRsZXQgdmFsID0gMCwgc3RyID0gMDtcclxuXHRcdFx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgeCAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIHkgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHgubG9jYWxlQ29tcGFyZSl7XHJcblx0XHRcdFx0c3RyID0gMTtcclxuXHRcdFx0XHR2YWwgPSB4LmxvY2FsZUNvbXBhcmUoeSwgbG9jYWxlX2NvbXBhcmVfY29uZmlnLmxvY2FsZXMsIGxvY2FsZV9jb21wYXJlX2NvbmZpZy5vcHRpb25zKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHZhbCA9IHggPiB5ID8gMSA6IHggPCB5ID8gLTEgOiAwO1xyXG5cdFx0XHRyZXR1cm4gdmFsO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBmbiA9PiBoZWxwZXIgfiBzb3J0IG1vZGUgb3JkZXJcclxuXHRcdGNvbnN0IF9zb3J0X29yZGVyID0gKHNtb2RlOiBhbnkpOiBudW1iZXIgPT4ge1xyXG5cdFx0XHRsZXQgdmFsOiBhbnkgPSBzbW9kZSA/PyAxO1xyXG5cdFx0XHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB2YWwpe1xyXG5cdFx0XHRcdGlmICghKHZhbCA9IHZhbC50cmltKCkpKSByZXR1cm4gMTtcclxuXHRcdFx0XHRpZiAodmFsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnYXNjJykpIHJldHVybiAxO1xyXG5cdFx0XHRcdGlmICh2YWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdkZXNjJykpIHJldHVybiAtMTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoKHZhbCA9IHBhcnNlSW50KHZhbCkpID09PSAtMSkgcmV0dXJuIC0xO1xyXG5cdFx0XHRpZiAodmFsICE9PSAxKSBjb25zb2xlLndhcm4oYFstXSB1bnN1cHBvcnRlZCBfc29ydCBcXGBtb2RlXFxgIHZhbHVlICgke3Ntb2RlfSkuYCk7XHJcblx0XHRcdHJldHVybiAxO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBmbiA9PiBoZWxwZXIgfiBkbyBjb21wYXJlXHJcblx0XHRjb25zdCBfZG9fY29tcGFyZSA9IChhOiBhbnksIGI6IGFueSwgc21vZGU6IGFueSwga2V5Pzogc3RyaW5nKTogbnVtYmVyID0+IHtcclxuXHRcdFx0Y29uc3Qgc2NvbXBhcmUgPSBfc29ydF9jb21wYXJlKGEsIGIsIGtleSk7XHJcblx0XHRcdGNvbnN0IHNvcmRlciA9IF9zb3J0X29yZGVyKHNtb2RlKTtcclxuXHRcdFx0cmV0dXJuIHNjb21wYXJlICogc29yZGVyO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBmbiA9PiBoZWxwZXIgfiBjcmVhdGUgc29ydCBtZXRob2RcclxuXHRcdGNvbnN0IF9zb3J0X21ldGhvZCA9ICgpOigoYTphbnksYjphbnkpPT5udW1iZXIpID0+IHtcclxuXHRcdFx0Y29uc3Qgc29ydF9tYXA6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XHJcblx0XHRcdGxldCBlbnRyeTpbc3RyaW5nLHN0cmluZ118dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdFx0XHRpZiAoT2JqZWN0KHNvcnRfbW9kZSkgPT09IHNvcnRfbW9kZSl7XHJcblx0XHRcdFx0Y29uc3QgX3NvcnRfZW50cnkgPSAodjogYW55W10sIGs9JycpOiBbc3RyaW5nLHN0cmluZ118dW5kZWZpbmVkID0+IEFycmF5LmlzQXJyYXkodikgJiYgJ3N0cmluZycgPT09IHR5cGVvZiB2WzBdICYmICEhKGsgPSB2WzBdLnRyaW0oKSkgPyBbaywgKHZbMV0gPz8gJycpLnRyaW0oKSB8fCAnYXNjJ10gOiB1bmRlZmluZWQ7XHJcblx0XHRcdFx0aWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBzb3J0X21vZGVbU3ltYm9sLml0ZXJhdG9yXSl7XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtczogYW55W10gPSBbLi4uc29ydF9tb2RlXTtcclxuXHRcdFx0XHRcdGlmICghIShlbnRyeSA9IF9zb3J0X2VudHJ5KGl0ZW1zKSkpIHNvcnRfbWFwLnNldChlbnRyeVswXSwgZW50cnlbMV0pOyAvLyBbc3RyaW5nLFRTb3J0TW9kZV1cclxuXHRcdFx0XHRcdGVsc2UgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKXsgLy8gW3N0cmluZyxUU29ydE1vZGVdW11cclxuXHRcdFx0XHRcdFx0aWYgKCEhKGVudHJ5ID0gX3NvcnRfZW50cnkoaXRlbSkpKSBzb3J0X21hcC5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBmb3IgKGNvbnN0IGl0ZW0gb2YgT2JqZWN0LmVudHJpZXMoc29ydF9tb2RlKSl7IC8vIHtbc3RyaW5nXTogVFNvcnRNb2RlfVxyXG5cdFx0XHRcdFx0aWYgKCEhKGVudHJ5ID0gX3NvcnRfZW50cnkoaXRlbSkpKSBzb3J0X21hcC5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIXNvcnRfbWFwLnNpemUpIHJldHVybiAoYSwgYikgPT4gX2RvX2NvbXBhcmUoYSwgYiwgc29ydF9tb2RlKTtcclxuXHRcdFx0Y29uc3Qgc29ydF9lbnRyaWVzOiBbc3RyaW5nLHN0cmluZ11bXSA9IFsuLi5zb3J0X21hcF07XHJcblx0XHRcdHJldHVybiAoYSwgYikgPT4ge1xyXG5cdFx0XHRcdGxldCBhZnRlcjogbnVtYmVyID0gMDsgLy8gMVxyXG5cdFx0XHRcdGxldCBiZWZvcmU6IG51bWJlciA9IDA7IC8vIC0xXHJcblx0XHRcdFx0bGV0IGxhc3Q6IG51bWJlciA9IDA7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBba2V5LCBrZXlfb3JkZXJdIG9mIHNvcnRfZW50cmllcyl7XHJcblx0XHRcdFx0XHRpZiAoIShPYmplY3QoYSkuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBPYmplY3QoYikuaGFzT3duUHJvcGVydHkoa2V5KSkpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0Y29uc3QgeCA9IGE/LltrZXldO1xyXG5cdFx0XHRcdFx0Y29uc3QgeSA9IGI/LltrZXldO1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gX2RvX2NvbXBhcmUoeCwgeSwga2V5X29yZGVyLCBrZXkpO1xyXG5cdFx0XHRcdFx0aWYgKHZhbCkgbGFzdCA9IHZhbDtcclxuXHRcdFx0XHRcdGlmICh2YWwgPT09IDEpIGFmdGVyICsrO1xyXG5cdFx0XHRcdFx0ZWxzZSBpZiAodmFsID09PSAtMSkgYmVmb3JlICsrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYWZ0ZXIgJiYgYmVmb3JlICYmIGFmdGVyID09PSBiZWZvcmUpIHJldHVybiBsYXN0O1xyXG5cdFx0XHRcdHJldHVybiBhZnRlciA+IGJlZm9yZSA/IDEgOiBhZnRlciA8IGJlZm9yZSA/IC0xIDogMDtcclxuXHRcdFx0fTtcclxuXHRcdH07XHJcblx0XHRcclxuXHRcdC8vPDwgcmVzdWx0IH4gc29ydGVkIGl0ZW1zXHJcblx0XHRyZXR1cm4gaXRlbXMuc29ydChfc29ydF9tZXRob2QoKSk7XHJcblx0fVxyXG5cdGNhdGNoIChlcnIpe1xyXG5cdFx0dGhyb3cgbmV3IEVycm9yKGBbLV0gX3NvcnQgZXJyb3I6ICR7ZXJyfWApO1xyXG5cdH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSB0cmFuc2Zvcm0gdGV4dCB0ZW1wbGF0ZSBjb250ZXh0IHZhbHVlc1xyXG4gKiBcclxuICogLSB0ZW1wbGF0ZSBtdXN0IGJlIGluIGRvdCBwYXRoIHBhdHRlcm4gd2hlcmUgZmlyc3QgZGVsaW1pdGVkIHZhbHVlIGlzIHRoZSBjb250ZXh0IGtleSBuYW1lLlxyXG4gKiAtIHRlbXBsYXRlIHZhbHVlcyBtdXN0IGJlIHB1dCBpbiBjdXJseSBicmFja2V0cyB3aGVuIHdpdGhpbiBtaXhlZCB0ZXh0LlxyXG4gKiAtIGRvdCBwYXRoIG1hdGNoaW5nIGlzIGNhc2UgaW5zZW5zaXRpdmUuXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfdHJhbnMoJ015IG5hbWUgaXMge3VzZXIubmFtZX0uJywge1VzZXI6IHtOYW1lOiAnUm9vdCd9fSwgJ05VTEwnKSA9PiAnTXkgbmFtZSBpcyBSb290LidcclxuICogX3RyYW5zKCdNeSBwaG9uZSBudW1iZXIgaXMge3VzZXIucGhvbmV9LicsIHtVc2VyOiB7TmFtZTogJ1Jvb3QnfX0sICdOVUxMJykgPT4gJ015IHBob25lIG51bWJlciBpcyBOVUxMLidcclxuICogX3RyYW5zKCdhZGRyZXNzLmNpdHknLCB7QWRkcmVzczoge0NpdHk6ICdOYWlyb2JpJ319LCAnTlVMTCcpID0+ICdOYWlyb2JpJ1xyXG4gKiBfdHJhbnMoJ2FkZHJlc3MudG93bicsIHtBZGRyZXNzOiB7Q2l0eTogJ05haXJvYmknLCB0b3duOiB1bmRlZmluZWR9fSwgJ05VTEwnKSA9PiAndW5kZWZpbmVkJ1xyXG4gKiBfdHJhbnMoJ05vIHRlbXBsYXRlLicsIHtmb286ICdiYXInfSwgJ05VTEwnKSA9PiAnTm8gdGVtcGxhdGUuJ1xyXG4gKiBfdHJhbnMoJ0tFUyB7aXRlbS5hbW91bnR9Lz0nLCB7aXRlbToge2Ftb3VudDogNDUwMH19LCAnTlVMTCcsICh2YWx1ZTpzdHJpbmcscGF0aDpzdHJpbmcsbmFtZTpzdHJpbmcpID0+IF9jb21tYXModmFsdWUsIHRydWUsIDIpKSA9PiAnTm8gdGVtcGxhdGUuJ1xyXG4gKiAgXHJcbiAqIFxyXG4gKiBAcGFyYW0gdGVtcGxhdGUgLSBwYXJzZSB0ZW1wbGF0ZSB+IHRleHQgd2l0aCB2YWx1ZSB0ZW1wbGF0ZSAoZS5nLiBgJ015IG5hbWUgaXMge3VzZXIubmFtZX0nYClcclxuICogQHBhcmFtIGNvbnRleHQgLSB2YWx1ZXMgY29udGV4dCB+IGB7W25hbWU6IHN0cmluZ106IGFueX1gXHJcbiAqIEBwYXJhbSBfZGVmYXVsdCAtIGRlZmF1bHQgdmFsdWUgd2hlbiB1bmFibGUgdG8gcmVzb2x2ZSB0ZW1wbGF0ZSB2YWx1ZSAoZGVmYXVsdDogYCdOVUxMJ2ApXHJcbiAqIEBwYXJhbSBfZm9ybWF0IC0gZm9ybWF0IHJlc29sdmVkIHZhbHVlIGNhbGxiYWNrICh0aGlzIGFsbG93cyB5b3UgdG8gZnVydGhlciBlZGl0IHJlc29sdmVkIHRlbXBsYXRlIGNvbnRleHQgdmFsdWVzKVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB0cmFuc2Zvcm1lZCB0ZXh0IHdoZXJlIHRlbXBsYXRlIHZhbHVlcyBhcmUgcmVwbGFjZWQgd2l0aCByZXNvbHZlZCBjb250ZXh0IHZhbHVlcyAoc2VlIGV4YW1wbGVzKVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90cmFucyA9ICh0ZW1wbGF0ZTogc3RyaW5nLCBjb250ZXh0OiB7W25hbWU6IHN0cmluZ106IGFueX0sIF9kZWZhdWx0OiBzdHJpbmcgPSAnTlVMTCcsIF9mb3JtYXQ/OiAodmFsdWU6c3RyaW5nLHBhdGg6c3RyaW5nLG5hbWU6c3RyaW5nKT0+YW55KTogc3RyaW5nID0+IHtcclxuXHRjb25zdCBwYXR0ZXJuOiBSZWdFeHAgPSAvXFx7KFtfMC05YS16QS1aXSspKChcXC5bXzAtOWEtekEtWl0rKSopXFx9L2c7XHJcblx0Y29uc3QgdmFsdWU6IHN0cmluZyA9IF9zdHIodGVtcGxhdGUpO1xyXG5cdGlmICghdmFsdWUudHJpbSgpKSByZXR1cm4gdmFsdWU7IC8vLS0gaWdub3JlcyBibGFua1xyXG5cdGNvbnN0IG1pc3NpbmcgPSBgISFfJHtEYXRlLm5vdygpfV8hIWA7XHJcblx0Y29uc3QgX3RyYW5zX2Zvcm1hdDogKCh2YWx1ZTpzdHJpbmcscGF0aDpzdHJpbmcsbmFtZTpzdHJpbmcpPT5hbnkpfHVuZGVmaW5lZCA9ICdmdW5jdGlvbicgPT09IHR5cGVvZiBfZm9ybWF0ID8gX2Zvcm1hdCA6IHVuZGVmaW5lZDtcclxuXHRjb25zdCBfdHJhbnNfZ2V0ID0gKG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nID0gJycpOiBzdHJpbmcgPT4ge1xyXG5cdFx0bGV0IHZhbDogYW55ID0gX2RvdEdldChuYW1lLCBjb250ZXh0LCB0cnVlLCAwLCBtaXNzaW5nKTtcclxuXHRcdGlmICh2YWwgPT09IG1pc3NpbmcpIHJldHVybiBtaXNzaW5nO1xyXG5cdFx0aWYgKCEhKHBhdGggPSBfc3RyKHBhdGgsIHRydWUpKSkgdmFsID0gX2RvdEdldChwYXRoLCB2YWwsIHRydWUsIDAsIG1pc3NpbmcpO1xyXG5cdFx0aWYgKHZhbCA9PT0gbWlzc2luZykgcmV0dXJuIG1pc3Npbmc7XHJcblx0XHRpZiAoX3RyYW5zX2Zvcm1hdCkgdmFsID0gX3RyYW5zX2Zvcm1hdCh2YWwsIHBhdGgsIG5hbWUpO1xyXG5cdFx0Y29uc3QgdGV4dCA9IEFycmF5LmlzQXJyYXkodmFsKSA/IGZhbHNlIDogX3N0cmluZ2FibGUodmFsKTtcclxuXHRcdHJldHVybiB0ZXh0ICE9PSBmYWxzZSA/IHRleHQgOiBfc3RyKHZhbCwgZmFsc2UsIHRydWUpO1xyXG5cdH07XHJcblx0aWYgKCFwYXR0ZXJuLnRlc3QodmFsdWUpKXtcclxuXHRcdGNvbnN0IHZhbCA9IF90cmFuc19nZXQodmFsdWUpO1xyXG5cdFx0cmV0dXJuIHZhbCAhPT0gbWlzc2luZyA/IHZhbCA6IHZhbHVlO1xyXG5cdH1cclxuXHRsZXQgZGVmYXVsdF92YWw6IHN0cmluZyA9IF9zdHIoX2RlZmF1bHQpO1xyXG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sICguLi5hcmdzKTogc3RyaW5nID0+IHtcclxuXHRcdGNvbnN0IG5hbWUgPSBhcmdzWzFdO1xyXG5cdFx0Y29uc3QgcGF0aCA9IGFyZ3NbMl0ucmVwbGFjZSgvXlxcLi8sICcnKTtcclxuXHRcdGxldCB2YWwgPSBfdHJhbnNfZ2V0KG5hbWUsIHBhdGgpO1xyXG5cdFx0aWYgKHZhbCA9PT0gbWlzc2luZykgdmFsID0gZGVmYXVsdF92YWw7XHJcblx0XHRyZXR1cm4gdmFsO1xyXG5cdH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGl0ZXJhYmxlIHZhbHVlcyBhcnJheSBsaXN0XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWVzIC0gcGFyc2UgdmFsdWVzXHJcbiAqIEByZXR1cm5zIGBUW11gIGFycmF5IGxpc3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYXJyYXlMaXN0ID0gPFQgPSBhbnk+KHZhbHVlczogYW55KTogVFtdID0+IF9pc0FycmF5KHZhbHVlcywgdHJ1ZSkgPyBbLi4udmFsdWVzXSA6IFtdO1xyXG5cclxuLyoqXHJcbiAqIE1hcCB2YWx1ZXMgKGBvYmplY3RbXWApIGJ5IGtleSBwcm9wZXJ0eSBJRCB2YWx1ZVxyXG4gKiAtIElEIHZhbHVlIGlzIGEgdHJpbW1lZCBgc3RyaW5nYCAobG93ZXJjYXNlIHdoZW4gYXJndW1lbnQgYF9sb3dlcmNhc2VgIGlzIGB0cnVlYClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBwYXJzZSB2YWx1ZXMgYXJyYXkgfiBgPFQgPSBhbnk+W11gXHJcbiAqIEBwYXJhbSBwcm9wIC0gSUQgcHJvcGVydHkgbmFtZSAoZGVmYXVsdDogYCcnYCB+IHVzZXMgYHN0cmluZ2AgZW50cnkgdmFsdWUgYXMgSUQgZm9yIHNjYWxhciB2YWx1ZXMgYXJyYXkpXHJcbiAqIEBwYXJhbSBfbG93ZXJjYXNlIC0gKGRlZmF1bHQ6IGBmYWxzZWApIHVzZSBsb3dlcmNhc2UgSUQgdmFsdWUgZm9yIHVuaWZvcm0gSUQgdmFsdWUgY2FzZVxyXG4gKiBAcGFyYW0gX3RleHRzIC0gKGRlZmF1bHQ6IGAwYCkgcGFyc2UgdGV4dCBlbnRyeSBtb2RlIH4gKiplbmFibGVkIHdoZW4gYHByb3BgIGFyZ3VtZW50IGlzIGJsYW5rKipcclxuICogLSBgMGAgPT4gZGlzYWJsZWRcclxuICogLSBgMWAgPT4gdHJpbSB0ZXh0IHZhbHVlc1xyXG4gKiAtIGAyYCA9PiBzdHJpbmdpZnkgYW5kIHRyaW0gdGV4dCB2YWx1ZXNcclxuICogQHBhcmFtIF9zaWxlbnQgLSAoZGVmYXVsdDogYHRydWVgKSBkbyBub3QgbG9nIHdhcm5pbmdzIHdoZW4gdmFsdWVzIGVudHJ5IHdpdGggaW52YWxpZCBJRCBpcyBza2lwcGVkIFxyXG4gKiBAcmV0dXJucyBge1tpZDogc3RyaW5nXTogVH1gIG9iamVjdCB3aXRoIHtJRD1lbnRyeX0gbWFwcGluZ1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9tYXBWYWx1ZXMgPSA8VCA9IGFueT4odmFsdWVzOiBUW10sIHByb3A6IHN0cmluZyA9ICcnLCBfbG93ZXJjYXNlOiBib29sZWFuID0gZmFsc2UsIF90ZXh0czogMHwxfDIgPSAwLCBfc2lsZW50OiBib29sZWFuID0gdHJ1ZSk6IHtbaWQ6IHN0cmluZ106IFR9ID0+IHtcclxuXHRjb25zdCBidWZmZXI6IHtba2V5OiBzdHJpbmddOiBUfSA9IHt9LCBpdGVtczogYW55W10gPSBfYXJyYXlMaXN0KHZhbHVlcyksIGtleSA9IF9zdHIocHJvcCwgdHJ1ZSk7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0bGV0IGVudHJ5OiBhbnkgPSBpdGVtc1tpXSwgaWQ6IHN0cmluZyA9ICcnO1xyXG5cdFx0aWYgKCFrZXkpe1xyXG5cdFx0XHRpZiAoKGlkID0gX3N0cihlbnRyeSwgdHJ1ZSkpICYmIFsxLCAyXS5pbmNsdWRlcyhfdGV4dHMpKXtcclxuXHRcdFx0XHRpZiAoX3RleHRzID09PSAyKSBlbnRyeSA9IF9zdHIoZW50cnksIHRydWUpO1xyXG5cdFx0XHRcdGVsc2UgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgZW50cnkpIGVudHJ5ID0gX3N0cihlbnRyeSwgdHJ1ZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVsc2UgaWQgPSBfc3RyKGVudHJ5Py5ba2V5XSwgdHJ1ZSk7XHJcblx0XHRpZiAoIWlkKXtcclxuXHRcdFx0aWYgKCFfc2lsZW50KSBjb25zb2xlLndhcm4oJ0ludmFsaWQgbWFwIHZhbHVlcyBlbnRyeS4gVGhlIElEIHZhbHVlIGlzIGJsYW5rLicsIHtpLCBrZXksIGVudHJ5fSk7XHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKF9sb3dlcmNhc2UpIGlkID0gaWQudG9Mb3dlckNhc2UoKTtcclxuXHRcdGJ1ZmZlcltpZF0gPSBlbnRyeTtcclxuXHR9XHJcblx0cmV0dXJuIGJ1ZmZlcjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgYEZhaWxFcnJvcmAgX2V4dGVuZHMgYEVycm9yYF9cclxuICovXHJcbmV4cG9ydCBjbGFzcyBGYWlsRXJyb3IgZXh0ZW5kcyBFcnJvclxyXG57XHJcblx0LyoqXHJcblx0ICogLSBlcnJvciBtZXNzYWdlXHJcblx0ICovXHJcblx0bWVzc2FnZTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIGVycm9yIG1vZGVcclxuXHQgKi9cclxuXHRtb2RlOiAwfDF8MnwzO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIGVycm9yIGRlYnVnXHJcblx0ICovXHJcblx0ZGVidWc6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogLSBlcnJvciBuYW1lXHJcblx0ICovXHJcblx0bmFtZTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBGYWlsdXJlIGVycm9yIGluc3RhbmNlL2hhbmRsZXJcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gcmVhc29uIC0gcGFyc2UgZXJyb3IgbWVzc2FnZVxyXG5cdCAqIEBwYXJhbSBtb2RlIC0gZXJyb3IgbW9kZSB+IGAwYCA9IHNpbGVudCAoZGVmYXVsdCkgfCBgMWAgPSBsb2dzIHdhcm5pbmcgfCBgMmAgPSBsb2dzIGVycm9yIHwgYDNgID0gdGhyb3dzIGVycm9yXHJcblx0ICogQHBhcmFtIGRlYnVnIC0gZXJyb3IgZGVidWdcclxuXHQgKiBAcGFyYW0gbmFtZSAtIGVycm9yIG5hbWVcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3RvcihyZWFzb246IGFueSwgbW9kZTogMHwxfDJ8MyA9IDAsIGRlYnVnOiBhbnkgPSBTeW1ib2woJ3VuZGVmaW5lZCcpLCBuYW1lPzogc3RyaW5nKXtcclxuXHRcdGNvbnN0IGVycl9tZXNzYWdlOiBzdHJpbmcgPSBfZXJyb3JUZXh0KHJlYXNvbikgfHwgJ0JsYW5rIGVycm9yIG1lc3NhZ2UuJztcclxuXHRcdGNvbnN0IGVycl9tb2RlOiAwfDF8MnwzID0gWzAsIDEsIDIsIDNdLmluY2x1ZGVzKG1vZGUgPSBfcG9zSW50KG1vZGUsIDAsIDMpID8/IDAgYXMgYW55KSA/IG1vZGUgOiAwO1xyXG5cdFx0Y29uc3QgZXJyX2RlYnVnOiBhbnlbXSA9ICdzeW1ib2wnID09PSB0eXBlb2YgZGVidWcgJiYgU3RyaW5nKGRlYnVnKSA9PT0gJ1N5bWJvbChkZWZhdWx0KScgPyBbXSA6IFtkZWJ1Z107XHJcblx0XHRjb25zdCBlcnJfbmFtZTogc3RyaW5nID0gX3N0cihuYW1lLCB0cnVlKSB8fCBfc3RyKHJlYXNvbj8ubmFtZSwgdHJ1ZSkgfHwgJ0ZhaWxFcnJvcic7XHJcblx0XHRzdXBlcihlcnJfbWVzc2FnZSk7XHJcblx0XHR0aGlzLm1lc3NhZ2UgPSBlcnJfbWVzc2FnZTtcclxuXHRcdHRoaXMubW9kZSA9IGVycl9tb2RlO1xyXG5cdFx0dGhpcy5kZWJ1ZyA9IGVycl9kZWJ1Z1swXTtcclxuXHRcdHRoaXMubmFtZSA9IGVycl9uYW1lO1xyXG5cdFx0aWYgKGVycl9tb2RlID09PSAxIHx8IGVycl9tb2RlID09PSAyKSBjb25zb2xlW2Vycl9tb2RlID09PSAxID8gJ3dhcm4nIDogJ2Vycm9yJ10oX3N0cih0aGlzLCB0cnVlKSwgLi4uZXJyX2RlYnVnKTtcclxuXHRcdGVsc2UgaWYgKGVycl9tb2RlID09PSAzKSB0aHJvdyB0aGlzO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEV4dHJhY3QgYG9iamVjdGAgdmFsdWUgcHJvcGVydHkgZW50cmllc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgYG9iamVjdGAgdmFsdWVcclxuICogQHBhcmFtIHByb3BzIC0gZXh0cmFjdCBwcm9wZXJ0eSBuYW1lc1xyXG4gKiBAcGFyYW0gX29taXQgLSAoZGVmYXVsdDogYGZhbHNlYCkgKipleGNsdWRlKiogcHJvcGVydHkgbmFtZXMgZXh0cmFjdCBtb2RlXHJcbiAqIEBwYXJhbSBfdW5kZWZpbmVkIC0gKGRlZmF1bHQ6IGBmYWxzZWApIGluY2x1ZGUgYHVuZGVmaW5lZGAgcHJvcGVydHkgbmFtZXNcclxuICogQHJldHVybnMgYHtbcHJvcDogYW55XTogYW55fWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcHJvcHNPYmogPSAodmFsdWU6IGFueSwgcHJvcHM/OiBhbnlbXSwgX29taXQ6IGJvb2xlYW4gPSBmYWxzZSwgX3VuZGVmaW5lZDogYm9vbGVhbiA9IGZhbHNlKToge1trZXk6c3RyaW5nfG51bWJlcnxzeW1ib2xdOiBhbnl9ID0+IHtcclxuXHRjb25zdCBpdGVtOiB7W2tleTogc3RyaW5nfG51bWJlcnxzeW1ib2xdOiBhbnl9ID0gT2JqZWN0KHZhbHVlKSwga2V5czogYW55W10gPSBfYXJyYXlMaXN0KHByb3BzKTtcclxuXHRpZiAoX29taXQpIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoaXRlbSkuZmlsdGVyKHYgPT4gIWtleXMuaW5jbHVkZXModlswXSkpKTtcclxuXHRyZXR1cm4ga2V5cy5yZWR1Y2UoKHByZXY6IHtba2V5OiBzdHJpbmd8bnVtYmVyfHN5bWJvbF06IGFueX0sIGtleTogYW55KToge1trZXk6IHN0cmluZ3xudW1iZXJ8c3ltYm9sXTogYW55fSA9PiB7XHJcblx0XHRpZiAoIV9lbXB0eShrZXksIHRydWUpKXtcclxuXHRcdFx0aWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoa2V5KSkgcHJldltrZXldID0gaXRlbVtrZXldO1xyXG5cdFx0XHRlbHNlIGlmIChfdW5kZWZpbmVkKSBwcmV2W2tleV0gPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcHJldjtcclxuXHR9LCB7fSk7XHJcbn07XHJcblxyXG4vKipcclxuICogU3BsaXQgYFRbXWAgYXJyYXkgdmFsdWVzIGludG8gYFRbXVtdYCBjaHVua3MgYXJyYXlcclxuICogXHJcbiAqIEBwYXJhbSBhcnJheSAtIHBhcnNlIGl0ZXJhYmxlL3NwcmVhZGFibGUgYXJyYXlcclxuICogQHBhcmFtIHNpemUgLSBzcGxpdCBhcnJheSBjaHVuayBsZW5ndGggKGRlZmF1bHQ6IGAxYCkgfiAqKl8oYDBgIHJldHVybnMgYFtbLi4uYXJyYXldXWApXyoqXHJcbiAqIEByZXR1cm5zIGBUW11bXWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfY2h1bmtzID0gPFQgPSBhbnk+KGFycmF5OiBUW10sIHNpemU6IG51bWJlciA9IDEpOiBUW11bXSA9PiB7XHJcblx0Y29uc3QgaXRlbXM6IFRbXSA9IFsuLi5hcnJheV0sIGNodW5rczogVFtdW10gPSBbXSwgbGVuOiBudW1iZXIgPSBwYXJzZUludChzaXplIGFzIGFueSkgfHwgMDtcclxuXHRpZiAobGVuIDwgMCkgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBcXGBfY2h1bmtzXFxgIFxcYGNodW5rX2xlbmd0aFxcYCBhcmd1bWVudCB2YWx1ZSAoJHtzaXplfSkuYCk7XHJcblx0aWYgKCFsZW4pIHJldHVybiBbaXRlbXNdO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICs9IGxlbikgY2h1bmtzLnB1c2goaXRlbXMuc2xpY2UoaSwgaSArIGxlbikpO1xyXG5cdHJldHVybiBjaHVua3M7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IG9iamVjdHMgYXJyYXkgd2l0aCBrZXlzIHNlbGVjdGlvblxyXG4gKiBcclxuICogQHBhcmFtIGFycmF5IC0gcGFyc2UgaXRlcmFibGUvc3ByZWFkYWJsZSBvYmplY3RzIGFycmF5IGB7W2tleTpzdHJpbmddOmFueX1bXWBcclxuICogQHBhcmFtIGtleXMgLSBzZWxlY3Qga2V5cyBgc3RyaW5nW11gXHJcbiAqIEBwYXJhbSBvbWl0IC0gKGRlZmF1bHQ6IGBmYWxzZWApIGBmYWxzZWAgZGlzYWJsZWQsIGB0cnVlYCBvbWl0IHNlbGVjdCBrZXlzLCBgc3RyaW5nW11gIG9taXQga2V5c1xyXG4gKiBAcGFyYW0gZmlsbGVkX29ubHkgLSAoZGVmYXVsdDogYGZhbHNlYCkgb21pdCBrZXlzIHRoYXQgYXJlIGVtcHR5IHZhbHVlcyBpbiBhbGwgYGFycmF5YCBpdGVtcyBvciBvbWl0IGl0ZW0gdGhhdCBoYXZlIGVtcHR5IHZhbHVlcyBpbiBhbGwga2V5c1xyXG4gKiBAcmV0dXJucyBge1trZXk6c3RyaW5nXTphbnl9W11gIHNlbGVjdGlvblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zZWxlY3RLZXlzID0gKGFycmF5OiB7W2tleTpzdHJpbmddOmFueX1bXSwga2V5czogc3RyaW5nW10sIG9taXQ6IHN0cmluZ1tdfGJvb2xlYW4gPSBmYWxzZSwgZmlsbGVkX29ubHk6IGJvb2xlYW4gPSBmYWxzZSk6IHtba2V5OnN0cmluZ106YW55fVtdID0+IHtcclxuXHRcclxuXHQvL2ZuID0+IGhlbHBlciAtIGdldCBrZXlzXHJcblx0Y29uc3QgX2dldF9rZXlzID0gKHZhbDogYW55LCBsYWJlbDogc3RyaW5nID0gJ2tleXMnKTogc3RyaW5nW10gPT4ge1xyXG5cdFx0aWYgKCEoJ29iamVjdCcgPT09IHR5cGVvZiB2YWwgJiYgdmFsKSkgcmV0dXJuIFtdO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0cmV0dXJuIFsuLi5uZXcgU2V0KFsuLi52YWxdKV07XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oYFstXSBpbnZhbGlkIFxcYF9zZWxlY3RLZXlzXFxgICR7bGFiZWx9IHN0cmluZyBhcnJheSBvYmplY3QuYCk7XHJcblx0XHRcdHJldHVybiBbXTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvL25vcm1hbGl6ZSBhcmdzXHJcblx0YXJyYXkgPSBbLi4uYXJyYXldO1xyXG5cdGtleXMgPSBfZ2V0X2tleXMoa2V5cyk7XHJcblx0Y29uc3Qgb21pdHM6IHN0cmluZ1tdID0gW107XHJcblx0aWYgKCEhb21pdCl7XHJcblx0XHRpZiAob21pdCA9PT0gdHJ1ZSl7XHJcblx0XHRcdG9taXRzLnB1c2goLi4ua2V5cyk7XHJcblx0XHRcdGtleXMgPSBbXTtcclxuXHRcdH1cclxuXHRcdGVsc2Ugb21pdHMucHVzaCguLi5fZ2V0X2tleXMob21pdCwgJ29taXQnKSk7XHJcblx0fVxyXG5cdGZpbGxlZF9vbmx5ID0gISFmaWxsZWRfb25seTtcclxuXHJcblx0Ly9wYXJzZSBhcnJheSA+IGNoZWNrIHVuZmlsbGVkID4gc2tpcCBvbW1pdGVkIGtleXNcclxuXHRjb25zdCBpdGVtczoge1trZXk6c3RyaW5nXTphbnl9W10gPSBbXTtcclxuXHRjb25zdCBmaWxsZWQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpLCB1bmZpbGxlZDoge1trZXk6IHN0cmluZ106IG51bWJlcn0gPSB7fTtcclxuXHRjb25zdCBrZXlzX29iamVjdDoge1trZXk6c3RyaW5nXTphbnl9ID0ga2V5cy5sZW5ndGggPyBPYmplY3QuZnJvbUVudHJpZXMoa2V5cy5tYXAoayA9PiBbaywgdW5kZWZpbmVkXSkpIDoge307XHJcblx0Zm9yIChjb25zdCBvYmogb2YgYXJyYXkpe1xyXG5cdFx0aWYgKE9iamVjdChvYmopICE9PSBvYmopIGNvbnRpbnVlO1xyXG5cdFx0Y29uc3QgaXRlbToge1trZXk6c3RyaW5nXTphbnl9ID0ge307XHJcblx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoey4uLmtleXNfb2JqZWN0LCAuLi5vYmp9KSl7XHJcblx0XHRcdGlmIChmaWxsZWRfb25seSAmJiAhZmlsbGVkLmhhcyhrZXkpKXsgLy9maWxsZWQgY2hlY2tcclxuXHRcdFx0XHRpZiAoX2VtcHR5KHZhbCwgdHJ1ZSkpe1xyXG5cdFx0XHRcdFx0aWYgKCF1bmZpbGxlZC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB1bmZpbGxlZFtrZXldID0gMTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRpZiAodW5maWxsZWQuaGFzT3duUHJvcGVydHkoa2V5KSkgZGVsZXRlIHVuZmlsbGVkW2tleV07XHJcblx0XHRcdFx0XHRmaWxsZWQuYWRkKGtleSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChvbWl0cy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTsgLy9za2lwIG9taXR0ZWRcclxuXHRcdFx0aXRlbVtrZXldID0gdmFsO1xyXG5cdFx0fVxyXG5cdFx0aXRlbXMucHVzaChpdGVtKTsgLy8rYnVmZmVyIGFkZFxyXG5cdH1cclxuXHJcblx0Ly9zZXQgc2VsZWN0ZWQgPiBvbWl0IHVuZmlsbGVkXHJcblx0Y29uc3Qgc2VsZWN0ZWQ6IHtba2V5OnN0cmluZ106YW55fVtdID0gW107XHJcblx0Y29uc3QgdW5maWxsZWRfa2V5czogc3RyaW5nW10gPSBPYmplY3Qua2V5cyh1bmZpbGxlZCk7XHJcblx0Zm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKXtcclxuXHRcdGlmIChrZXlzLmxlbmd0aCl7XHJcblx0XHRcdGxldCB1bmZpbGxlZDogbnVtYmVyID0gMDtcclxuXHRcdFx0Y29uc3QgZW50cmllczogW3N0cmluZyxhbnldW10gPSBbXTtcclxuXHRcdFx0Zm9yIChjb25zdCBrIG9mIGtleXMpe1xyXG5cdFx0XHRcdGlmIChvbWl0cy5pbmNsdWRlcyhrKSkgY29udGludWU7IC8vc2tpcCBvbWl0dGVkXHJcblx0XHRcdFx0aWYgKHVuZmlsbGVkX2tleXMuaW5jbHVkZXMoaykpIGNvbnRpbnVlOyAvL3NraXAgdW5maWxsZWRcclxuXHRcdFx0XHRpZiAoZmlsbGVkX29ubHkgJiYgX2VtcHR5KGl0ZW1ba10sIHRydWUpKSB1bmZpbGxlZCArKztcclxuXHRcdFx0XHRlbnRyaWVzLnB1c2goW2ssIGl0ZW1ba11dKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoZW50cmllcy5sZW5ndGggJiYgZW50cmllcy5sZW5ndGggIT09IHVuZmlsbGVkKSBzZWxlY3RlZC5wdXNoKE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKSk7XHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHVuZmlsbGVkOiBudW1iZXIgPSAwO1xyXG5cdFx0Y29uc3QgZW50cmllczogW3N0cmluZyxhbnldW10gPSBbXTtcclxuXHRcdGNvbnN0IGl0ZW1fZW50cmllczogW3N0cmluZyxhbnldW10gPSBPYmplY3QuZW50cmllcyhpdGVtKTtcclxuXHRcdGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBpdGVtX2VudHJpZXMpe1xyXG5cdFx0XHRpZiAodW5maWxsZWRfa2V5cy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTsgLy9za2lwIHVuZmlsbGVkXHJcblx0XHRcdGlmIChmaWxsZWRfb25seSAmJiBfZW1wdHkodmFsLCB0cnVlKSkgdW5maWxsZWQgKys7XHJcblx0XHRcdGVudHJpZXMucHVzaChba2V5LCB2YWxdKTtcclxuXHRcdH1cclxuXHRcdGlmIChlbnRyaWVzLmxlbmd0aCAmJiBlbnRyaWVzLmxlbmd0aCAhPT0gdW5maWxsZWQpIHNlbGVjdGVkLnB1c2goT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpKTtcclxuXHR9XHJcblxyXG5cdC8vPDwgcmVzdWx0IC0gc2VsZWN0ZWRcclxuXHRyZXR1cm4gc2VsZWN0ZWQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJlZSBvcHRpb25zIGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJVHJlZU9wdGlvbnMge1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIFRyZWUgbmFtZSB+IHJvb3Qgbm9kZSBsYWJlbFxyXG5cdCAqL1xyXG5cdG5hbWU/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN0cmluZyBsaW5lIHN0YXJ0IHBhZGRpbmcgbGVuZ3RoXHJcblx0ICovXHJcblx0cGFkPzogbnVtYmVyO1xyXG5cclxuXHQvKipcclxuXHQgKiBpZ25vcmUgYmxhbmsga2V5IHZhbHVlcyB+IGkuZS4gYG51bGx8dW5kZWZpbmVkfCcnYCAoZGVmYXVsdDogYGZhbHNlYClcclxuXHQgKi9cclxuXHRibGFua3M/OiBib29sZWFuO1xyXG5cclxuXHQvKipcclxuXHQgKiBtYXggdGV4dCB2YWx1ZSBsZW5ndGggKGRlZmF1bHQ6IGAyMDBgKVxyXG5cdCAqL1xyXG5cdG1heF9sZW5ndGg/OiBudW1iZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHRleHQgdmFsdWUgd3JhcCBicmVhayBsZW5ndGggKGRlZmF1bHQ6IGA1NmApXHJcblx0ICovXHJcblx0d3JhcF9sZW5ndGg/OiBudW1iZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHdoZXRoZXIgdG8gdXNlIHdvcmQgYnJlYWsgKGRlZmF1bHQgYGZhbHNlYClcclxuXHQgKi9cclxuXHR3b3JkX2JyZWFrPzogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIER1bXAgdHJlZSBzdHJ1Y3R1cmVcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gYElUcmVlT3B0aW9uc2AgfiBfKHNlZSBJVHJlZU9wdGlvbnMgZG9jcylfXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RyZWUgPSAodmFsdWU6IGFueSwgb3B0aW9ucz86IElUcmVlT3B0aW9ucyk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3Qge1xyXG5cdFx0bmFtZTogX25hbWUgPSAnJyxcclxuXHRcdHBhZDogX3BhZCA9IDAsXHJcblx0XHRibGFua3MgPSBmYWxzZSxcclxuXHRcdG1heF9sZW5ndGggPSAyMDAsXHJcblx0XHR3cmFwX2xlbmd0aCA9IDgwLFxyXG5cdFx0d29yZF9icmVhayA9IGZhbHNlLFxyXG5cdH0gPSBPYmplY3Qob3B0aW9ucyk7XHJcblx0bGV0IHBhZDogbnVtYmVyID0gX3Bvc0ludChfcGFkLCAwKSA/PyAwLCBuYW1lOiBzdHJpbmcgPSBfc3RyKF9uYW1lLCB0cnVlKTtcclxuXHRpZiAobmFtZS5sZW5ndGgpe1xyXG5cdFx0bmFtZSA9IGBbJHtuYW1lfV1gO1xyXG5cdFx0cGFkICs9IDM7XHJcblx0fVxyXG5cdGNvbnN0IF9wYXJzZSA9ICh2YWw6IGFueSk6IHN0cmluZ3x7W2tleTogc3RyaW5nXTogYW55fSA9PiB7XHJcblx0XHRpZiAoW251bGwsIHVuZGVmaW5lZF0uaW5jbHVkZXModmFsKSkgcmV0dXJuIFN0cmluZyh2YWwpO1xyXG5cdFx0aWYgKFsnYm9vbGVhbicsICdudW1iZXInXS5pbmNsdWRlcyh0eXBlb2YgdmFsKSkgcmV0dXJuIFN0cmluZyh2YWwpO1xyXG5cdFx0aWYgKE9iamVjdCh2YWwpICE9PSB2YWwpIHJldHVybiBfanNvblN0cmluZ2lmeShfc3RyKHZhbCwgdHJ1ZSkpO1xyXG5cdFx0Y29uc3QgaXQ6IGFueSA9IHZhbFtTeW1ib2wuaXRlcmF0b3JdLCBpdGVyYWJsZTogYm9vbGVhbiA9IE9iamVjdChpdCkgPT09IGl0O1xyXG5cdFx0aWYgKCFpdGVyYWJsZSAmJiBfc3RyaW5nYWJsZSh2YWwpKSByZXR1cm4gX3N0cih2YWwsIHRydWUpO1xyXG5cdFx0aWYgKCFPYmplY3QuZW50cmllcyh2YWwgPSBfanNvbkNvcHkodmFsKSkubGVuZ3RoKSByZXR1cm4gaXRlcmFibGUgPyAnW10nIDogJ3t9JztcclxuXHRcdHJldHVybiB2YWw7XHJcblx0fTtcclxuXHRjb25zdCBfbGluZXMgPSAodmFsOiBhbnkpOiB7dHlwZTonbm9kZSd8J3ZhbHVlJyxsaW5lczpzdHJpbmdbXX0gPT4ge1xyXG5cdFx0Y29uc3Qgbm9kZSA9ICfilJzilIDilIDilIAnLCBub2RlX2VuZCA9ICfilJTilIDilIDilIAnLCBub2RlX3NwYWNlID0gJyAgICAnLCBub2RlX2JvcmRlciA9ICfilIIgICAnLCByZWdfcXVvdGVzID0gL15cXFwiKC4qKVxcXCIkL2dzO1xyXG5cdFx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XHJcblx0XHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiAodmFsID0gX3BhcnNlKHZhbCkpKSByZXR1cm4ge3R5cGU6ICd2YWx1ZScsIGxpbmVzOiBbdmFsXX07XHJcblx0XHRjb25zdCBlbnRyaWVzOiBbc3RyaW5nLCBhbnldW10gPSBPYmplY3QuZW50cmllcyh2YWwpLCBsZW4gPSBlbnRyaWVzLmxlbmd0aDtcclxuXHRcdGNvbnN0IGl0OiBhbnkgPSB2YWxbU3ltYm9sLml0ZXJhdG9yXSwgaXRlcmFibGU6IGJvb2xlYW4gPSBPYmplY3QoaXQpID09PSBpdDtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICsrKXtcclxuXHRcdFx0Y29uc3QgW2ssIHZdID0gZW50cmllc1tpXSBhcyBbc3RyaW5nLCBhbnldLCBsYXN0OiBib29sZWFuID0gaSArIDEgPT09IGxlbjtcclxuXHRcdFx0bGV0IHNraXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcdFx0aWYgKCFibGFua3MgJiYgW3VuZGVmaW5lZCwgbnVsbCwga10uaW5jbHVkZXModikpIHNraXAgPSB0cnVlO1xyXG5cdFx0XHRsZXQgdHlwZTogJ25vZGUnfCd2YWx1ZScgPSAndmFsdWUnLCB2X2xpbmVzOiBzdHJpbmdbXSA9IFtdLCB2X2xlbjogbnVtYmVyID0gMDtcclxuXHRcdFx0aWYgKCFza2lwKXtcclxuXHRcdFx0XHRjb25zdCByZXMgPSBfbGluZXModik7XHJcblx0XHRcdFx0dHlwZSA9IHJlcy50eXBlO1xyXG5cdFx0XHRcdHZfbGluZXMgPSByZXMubGluZXM7XHJcblx0XHRcdFx0dl9sZW4gPSB2X2xpbmVzLmxlbmd0aDtcclxuXHRcdFx0XHRpZiAoIWJsYW5rcyAmJiB0eXBlID09PSAndmFsdWUnICYmICF2X2xpbmVzWzBdKSBza2lwID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBpc19saXN0OiBib29sZWFuID0gaXRlcmFibGUgJiYgaXQubmFtZSAhPT0gJ2VudHJpZXMnICYmIE51bWJlci5pc0ludGVnZXIoTnVtYmVyKGspKSAmJiBOdW1iZXIoaykgPj0gMDtcclxuXHRcdFx0Y29uc3Qga2V5ID0gaXNfbGlzdCA/IGBbJHtrfV1gIDogaywgbGlzdF92YWx1ZTogYm9vbGVhbiA9IGlzX2xpc3QgJiYgdHlwZSA9PT0gJ3ZhbHVlJztcclxuXHRcdFx0aWYgKCEoc2tpcCAmJiBsaXN0X3ZhbHVlKSkgbGluZXMucHVzaChsaXN0X3ZhbHVlID8gYCR7bGFzdCA/IG5vZGVfZW5kIDogbm9kZX0ke2tleX1gIDogYCR7bGFzdCA/IG5vZGVfZW5kIDogbm9kZX0ke2tleX1gKTtcclxuXHRcdFx0aWYgKHNraXApIGNvbnRpbnVlO1xyXG5cdFx0XHRjb25zdCBrZXlfcGFkOiBzdHJpbmcgPSBsaXN0X3ZhbHVlID8gJycucGFkU3RhcnQoYFske2t9XWAubGVuZ3RoICsgMSkgOiAnJztcclxuXHRcdFx0Y29uc3Qga2V5X25vZGU6IHN0cmluZyA9IChsYXN0ID8gbm9kZV9zcGFjZSA6IG5vZGVfYm9yZGVyKSArIGtleV9wYWQ7XHJcblx0XHRcdGNvbnN0IHByb2NfbGVuOiBudW1iZXIgPSB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgTnVtYmVyLmlzSW50ZWdlcihwcm9jZXNzPy5zdGRvdXQ/LmNvbHVtbnMpICYmIGtleV9ub2RlLmxlbmd0aCA8IChwcm9jZXNzLnN0ZG91dC5jb2x1bW5zLzIpID8gcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyA6IDA7XHJcblx0XHRcdGZvciAobGV0IHggPSAwOyB4IDwgdl9sZW47IHggKyspe1xyXG5cdFx0XHRcdGNvbnN0IHZfbGFzdCA9IHggKyAxID09PSB2X2xlbjtcclxuXHRcdFx0XHRsZXQgdGV4dDogc3RyaW5nID0gdl9saW5lc1t4XTtcclxuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ3ZhbHVlJyl7XHJcblx0XHRcdFx0XHRsZXQgcXVvdGVkID0gcmVnX3F1b3Rlcy50ZXN0KHRleHQpO1xyXG5cdFx0XHRcdFx0aWYgKHF1b3RlZCkgdGV4dCA9IHRleHQucmVwbGFjZShyZWdfcXVvdGVzLCAnJDEnKTtcclxuXHRcdFx0XHRcdHRleHQgPSBfdGV4dE1heExlbmd0aCh0ZXh0LCBtYXhfbGVuZ3RoLCAyKTtcclxuXHRcdFx0XHRcdGlmIChxdW90ZWQpIHRleHQgPSBgXCIke3RleHR9XCJgO1xyXG5cdFx0XHRcdFx0Y29uc3Qgd3JhcF9sZW46IG51bWJlciA9IHByb2NfbGVuID8gKHByb2NfbGVuLWtleV9ub2RlLmxlbmd0aCkvMiA6IHdyYXBfbGVuZ3RoO1xyXG5cdFx0XHRcdFx0Y29uc3Qgd3JhcF9saW5lczogc3RyaW5nW10gPSBfd3JhcExpbmVzKHRleHQsIHdyYXBfbGVuLCB3b3JkX2JyZWFrKTtcclxuXHRcdFx0XHRcdGNvbnN0IHRleHRfbm9kZTogc3RyaW5nID0gdl9sYXN0ID8gbm9kZV9lbmQgOiBub2RlO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgbiA9IDA7IG4gPCB3cmFwX2xpbmVzLmxlbmd0aDsgbiArKyl7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHdyYXBfbm9kZTogc3RyaW5nID0gbGlzdF92YWx1ZSA/ICghbiA/ICcgJyA6IGtleV9ub2RlKSA6ICghbiA/IHRleHRfbm9kZSA6ICh2X2xhc3QgPyBub2RlX3NwYWNlIDogbm9kZV9ib3JkZXIpKTtcclxuXHRcdFx0XHRcdFx0Y29uc3Qgd3JhcF9saW5lOiBzdHJpbmcgPSB3cmFwX2xpbmVzW25dO1xyXG5cdFx0XHRcdFx0XHRpZiAobGlzdF92YWx1ZSl7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCFuKSBsaW5lcy5wdXNoKGxpbmVzLnBvcCgpICsgd3JhcF9ub2RlICsgd3JhcF9saW5lKTtcclxuXHRcdFx0XHRcdFx0XHRlbHNlIGxpbmVzLnB1c2god3JhcF9ub2RlICsgd3JhcF9saW5lKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRlbHNlIGxpbmVzLnB1c2goa2V5X25vZGUgKyB3cmFwX25vZGUgKyB3cmFwX2xpbmUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGxpbmVzLnB1c2goYCR7a2V5X25vZGV9JHt0ZXh0fWApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4ge3R5cGU6ICdub2RlJywgbGluZXN9O1xyXG5cdH07XHJcblx0Y29uc3Qge2xpbmVzfSA9IF9saW5lcyh2YWx1ZSk7XHJcblx0cmV0dXJuICdcXG4nICsgKG5hbWUgPyBgJHtuYW1lfVxcbmAgOiAnJykgKyBsaW5lcy5tYXAobGluZSA9PiBwYWQgPiAwID8gJycucGFkU3RhcnQocGFkKSArIGxpbmUgOiBsaW5lKS5qb2luKCdcXG4nKTtcclxufTsiLCJpbXBvcnQgeyBfY2xvbmUgfSBmcm9tICcuL19jbG9uZSc7XHJcbmltcG9ydCB7IF9wb3NJbnQgfSBmcm9tICcuL19udW1iZXInO1xyXG5pbXBvcnQgeyBfYXJyYXlMaXN0IH0gZnJvbSAnLi9fb2JqZWN0cyc7XHJcbmltcG9ydCB7IF9lcnJvclRleHQsIF9zdHIgfSBmcm9tICcuL19zdHJpbmcnO1xyXG5cclxuLyoqXHJcbiAqIFByb21pc2UgcmVzdWx0IGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJUHJvbWlzZVJlc3VsdDxUUmVzdWx0PiB7XHJcblx0c3RhdHVzOiAncmVzb2x2ZWQnfCdyZWplY3RlZCc7XHJcblx0aW5kZXg6IG51bWJlcjtcclxuXHR2YWx1ZT86IFRSZXN1bHQ7XHJcblx0cmVhc29uPzogYW55O1xyXG59XHJcblxyXG4vKipcclxuICogUGFyYWxsZWwgcmVzb2x2ZSBsaXN0IGl0ZW1zIGA8VD1hbnk+W11gXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBhd2FpdCBfYXN5bmNBbGw8bnVtYmVyLCBudW1iZXI+KFsxLCAyXSwgYXN5bmMgKG51bSkgPT4gbnVtICogMikgLy9be3N0YXR1czoncmVzb2x2ZWQnLGluZGV4OjAsdmFsdWU6Mn0se3N0YXR1czoncmVzb2x2ZWQnLGluZGV4OjEsdmFsdWU6NH1dXHJcbiAqIGF3YWl0IF9hc3luY0FsbChbKCkgPT4gUHJvbWlzZS5yZXNvbHZlKDEpLCAyXSwgYXN5bmMgKG51bSkgPT4gbnVtICogMikgLy9be3N0YXR1czoncmVzb2x2ZWQnLGluZGV4OjAsdmFsdWU6Mn0se3N0YXR1czoncmVzb2x2ZWQnLGluZGV4OjEsdmFsdWU6NH1dXHJcbiAqIGF3YWl0IF9hc3luY0FsbChbYXN5bmMgKCkgPT4gUHJvbWlzZS5yZXNvbHZlKDIpLCA0XSkgLy9be3N0YXR1czoncmVzb2x2ZWQnLGluZGV4OjAsdmFsdWU6Mn0se3N0YXR1czoncmVzb2x2ZWQnLGluZGV4OjEsdmFsdWU6NH1dXHJcbiAqIFxyXG4gKiBAcGFyYW0gaXRlbXMgLSBxdWV1ZSBsaXN0IF8qKihzdXBwb3J0cyBwcm9taXNlIG9yIGNhbGxiYWNrIHZhbHVlcykqKl9cclxuICogQHBhcmFtIGNhbGxiYWNrIC0gcmVzb2x2ZSBxdWV1ZSBpdGVtIGNhbGxiYWNrIH4gc3VwcG9ydHMgcGFyYW1ldGVyczpcclxuICogLSBgaXRlbTpUYCB+IG5leHQgcXVldWUgaXRlbVxyXG4gKiAtIGBpbmRleDpudW1iZXJgIH4gbmV4dCBxdWV1ZSBpdGVtIGluZGV4XHJcbiAqIC0gYGxlbmd0aDpudW1iZXJgIH4gcXVldWVkIGl0ZW1zIGNvdW50XHJcbiAqIC0gXyoqY2FsbGJhY2sgcmVzdWx0IGlzIGFkZGVkIHRvIHRoZSBgSVByb21pc2VSZXN1bHRbXWAgd2l0aCBzYW1lIGBpbmRleGAqKl9cclxuICogXHJcbiAqIEBwYXJhbSBvblByb2dyZXNzIC0gcXVldWUgb24gcHJvZ3Jlc3MgY2FsbGJhY2sgfiBzdXBwb3J0cyBwYXJhbWV0ZXJzOlxyXG4gKiAtIGBwZXJjZW50Om51bWJlcmAgfiBxdWV1ZSBwcm9jZXNzZWQgaXRlbXMgcGVyY2VudGFnZSAoYGludGVnZXIgMCAtIDEwMGApXHJcbiAqIC0gYHRvdGFsOm51bWJlcmAgfiBxdWV1ZWQgaXRlbXMgY291bnRcclxuICogLSBgY29tcGxldGU6bnVtYmVyYCB+IHF1ZXVlIHJlc29sdmVkIGl0ZW1zIGNvdW50XHJcbiAqIC0gYGZhaWx1cmVzOm51bWJlcmAgfiBxdWV1ZSByZWplY3RlZCBpdGVtcyBjb3VudFxyXG4gKiAtIF8qKnJldHVybnMgdm9pZCoqX1xyXG4gKiBcclxuICogQHJldHVybnMgYFByb21pc2U8SVByb21pc2VSZXN1bHQ8VFJlc3VsdD5bXT5gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2FzeW5jQWxsID0gYXN5bmM8VCA9IGFueSwgVFJlc3VsdCA9IGFueT4oXHJcblx0aXRlbXM6IChUfFByb21pc2U8VD58KCgpPT5UfFByb21pc2U8VD4pKVtdLFxyXG5cdGNhbGxiYWNrPzogKGl0ZW06VCxpbmRleDpudW1iZXIsbGVuZ3RoOm51bWJlcik9PlByb21pc2U8VFJlc3VsdD4sXHJcblx0b25Qcm9ncmVzcz86IChwZXJjZW50Om51bWJlcix0b3RhbDpudW1iZXIsY29tcGxldGU6bnVtYmVyLGZhaWx1cmVzOm51bWJlcik9PnZvaWRcclxuKTogUHJvbWlzZTxJUHJvbWlzZVJlc3VsdDxUUmVzdWx0PltdPiA9PiB7XHJcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcblx0XHRcclxuXHRcdC8vLS0gcXVldWUgYXJndW1lbnRzXHJcblx0XHRjb25zdCBfY2FsbGJhY2s6IHVuZGVmaW5lZHwoKGl0ZW06VCxpbmRleDpudW1iZXIsbGVuZ3RoOm51bWJlcik9PlByb21pc2U8VFJlc3VsdD4pID0gJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGNhbGxiYWNrID8gY2FsbGJhY2sgOiB1bmRlZmluZWQ7XHJcblx0XHRjb25zdCBfb25Qcm9ncmVzczogdW5kZWZpbmVkfCgocGVyY2VudDpudW1iZXIsdG90YWw6bnVtYmVyLGNvbXBsZXRlOm51bWJlcixmYWlsdXJlczpudW1iZXIpPT52b2lkKSA9ICdmdW5jdGlvbicgPT09IHR5cGVvZiBvblByb2dyZXNzID8gb25Qcm9ncmVzcyA6IHVuZGVmaW5lZDtcclxuXHJcblx0XHQvLy0tIHF1ZXVlIHByb21pc2VcclxuXHRcdGxldCBjb21wbGV0ZSA9IDAsIGZhaWx1cmVzID0gMDtcclxuXHRcdGludGVyZmFjZSBJUXVldWVJdGVtIHtpbmRleDogbnVtYmVyOyB2YWx1ZTogVDt9XHJcblx0XHRjb25zdCBxdWV1ZTogSVF1ZXVlSXRlbVtdID0gX2FycmF5TGlzdChpdGVtcykubWFwKCh2YWx1ZSwgaW5kZXgpID0+ICh7aW5kZXgsIHZhbHVlfSkpO1xyXG5cdFx0Y29uc3QgbGVuZ3RoID0gcXVldWUubGVuZ3RoO1xyXG5cdFx0Y29uc3QgcmVzdWx0czogSVByb21pc2VSZXN1bHQ8VFJlc3VsdD5bXSA9IFtdO1xyXG5cdFx0Y29uc3QgX3Jlc29sdmUgPSAoKTogdm9pZCA9PiB2b2lkIHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZShyZXN1bHRzKSwgMCk7XHJcblxyXG5cdFx0Ly8tLSBxdWV1ZSBzaXplIGNoZWNrXHJcblx0XHRpZiAoIWxlbmd0aCl7XHJcblx0XHRcdGlmIChfb25Qcm9ncmVzcykgX29uUHJvZ3Jlc3MoMTAwLCBsZW5ndGgsIGNvbXBsZXRlLCBmYWlsdXJlcyk7XHJcblx0XHRcdHJldHVybiBfcmVzb2x2ZSgpO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZiAoX29uUHJvZ3Jlc3MpIF9vblByb2dyZXNzKDAsIGxlbmd0aCwgY29tcGxldGUsIGZhaWx1cmVzKTtcclxuXHJcblx0XHQvL2ZuID0+IGhlbHBlciA+IHBlbmRpbmcgcHJvbWlzZSBjb21wbGV0ZVxyXG5cdFx0Y29uc3QgX2RvbmUgPSAoZmFpbGVkOiBib29sZWFuID0gZmFsc2UpOiB2b2lkID0+IHtcclxuXHRcdFx0Y29tcGxldGUgKys7XHJcblx0XHRcdGlmIChmYWlsZWQpIGZhaWx1cmVzICsrO1xyXG5cclxuXHRcdFx0Ly8tLSBwcm9ncmVzcyB1cGRhdGUgKG9uIGRpZmZlcmVudCB0aHJlYWQpXHJcblx0XHRcdGlmIChfb25Qcm9ncmVzcyl7XHJcblx0XHRcdFx0Y29uc3QgcGVyY2VudDogbnVtYmVyID0gTWF0aC5taW4oTWF0aC5mbG9vcihjb21wbGV0ZS9sZW5ndGggKiAxMDApLCAxMDApO1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRfb25Qcm9ncmVzcyhwZXJjZW50LCBsZW5ndGgsIGNvbXBsZXRlLCBmYWlsdXJlcyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNhdGNoIChlcnI6IGFueSl7XHJcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oYFtJR05PUkVEXSBfYXN5bmNBbGwgPiBvblByb2dyZXNzIGNhbGxiYWNrIGV4Y2VwdGlvbjsgJHtfZXJyb3JUZXh0KGVycil9YCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLy0tIGNoZWNrIGZpbmlzaGVkXHJcblx0XHRcdGlmIChjb21wbGV0ZSA+PSBsZW5ndGgpIF9yZXNvbHZlKCk7XHJcblx0XHR9O1xyXG5cclxuXHRcdC8vLS0gcXVldWUgYWxsIHBlbmRpbmcgcHJvbWlzZXNcclxuXHRcdHF1ZXVlLmZvckVhY2goKG5leHQ6IElRdWV1ZUl0ZW0pOiB2b2lkID0+IHtcclxuXHRcdFx0KGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHRsZXQge3ZhbHVlOiBpdGVtLCBpbmRleH0gPSBuZXh0O1xyXG5cdFx0XHRcdGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgaXRlbSkgaXRlbSA9IGl0ZW0oKTtcclxuXHRcdFx0XHRpZiAoaXRlbSBpbnN0YW5jZW9mIFByb21pc2UpIGl0ZW0gPSBhd2FpdCBpdGVtO1xyXG5cdFx0XHRcdHJldHVybiBfY2FsbGJhY2sgPyBfY2FsbGJhY2soaXRlbSwgaW5kZXgsIGxlbmd0aCkgOiBpdGVtO1xyXG5cdFx0XHR9KSgpXHJcblx0XHRcdC50aGVuKCh2YWx1ZTogYW55KSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0c1tuZXh0LmluZGV4XSA9IHtzdGF0dXM6ICdyZXNvbHZlZCcsIGluZGV4OiBuZXh0LmluZGV4LCB2YWx1ZX07XHJcblx0XHRcdFx0cmV0dXJuIF9kb25lKCk7XHJcblx0XHRcdH0pXHJcblx0XHRcdC5jYXRjaCgocmVhc29uOiBhbnkpID0+IHtcclxuXHRcdFx0XHRyZXN1bHRzW25leHQuaW5kZXhdID0ge3N0YXR1czogJ3JlamVjdGVkJywgaW5kZXg6IG5leHQuaW5kZXgsIHJlYXNvbn07XHJcblx0XHRcdFx0cmV0dXJuIF9kb25lKHRydWUpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcmFsbGVsIHJlc29sdmUgbGlzdCBpdGVtcyBgPFQ9YW55PltdYCB3aXRoIG1heCBzaW11bHRhbmVvdXMgcHJvbWlzZXMgc2l6ZSBsaW1pdFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlcyAtIHF1ZXVlIHZhbHVlc1xyXG4gKiBAcGFyYW0gc2l6ZSAtIG1heCBzaW11bHRhbmVvdXMgcHJvbWlzZXMgc2l6ZSAoZGVmYXVsdDogYDBgIH4gdW5saW1pdGVkKVxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBxdWV1ZSByZXNvbHZlIHZhbHVlIGNhbGxiYWNrIH4gYCh2YWx1ZTpULGluZGV4Om51bWJlcixsZW5ndGg6bnVtYmVyKT0+UHJvbWlzZTxUUmVzdWx0PWFueT5gXHJcbiAqIEBwYXJhbSBvblByb2dyZXNzIC0gcXVldWUgb24gcHJvZ3Jlc3MgY2FsbGJhY2sgfiBgKHBlcmNlbnQ6bnVtYmVyLHRvdGFsOm51bWJlcixjb21wbGV0ZTpudW1iZXIsZmFpbHVyZXM6bnVtYmVyKT0+dm9pZGBcclxuICogQHJldHVybnMgYFByb21pc2U8SVByb21pc2VSZXN1bHQ8VFJlc3VsdD5bXT5gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2FzeW5jUXVldWUgPSBhc3luYyA8VCA9IGFueSwgVFJlc3VsdCA9IGFueT4odmFsdWVzOiBUW10sIHNpemU6IG51bWJlciA9IDAsIGNhbGxiYWNrPzogKHZhbHVlOlQsaW5kZXg6bnVtYmVyLGxlbmd0aDpudW1iZXIpPT5Qcm9taXNlPFRSZXN1bHQ+LCBvblByb2dyZXNzPzogKHBlcmNlbnQ6bnVtYmVyLHRvdGFsOm51bWJlcixjb21wbGV0ZTpudW1iZXIsZmFpbHVyZXM6bnVtYmVyKT0+dm9pZCk6IFByb21pc2U8SVByb21pc2VSZXN1bHQ8VFJlc3VsdD5bXT4gPT4ge1xyXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogKHJlc3VsdHM6SVByb21pc2VSZXN1bHQ8VFJlc3VsdD5bXSk9PnZvaWQpOiB2b2lkID0+IHtcclxuXHRcdFxyXG5cdFx0Ly8tLSBxdWV1ZSBhcmd1bWVudHNcclxuXHRcdHNpemUgPSBfcG9zSW50KHNpemUpID8/IDA7XHJcblx0XHRjb25zdCBfY2FsbGJhY2s6IHVuZGVmaW5lZHwoKHZhbHVlOlQsaW5kZXg6bnVtYmVyLGxlbmd0aDpudW1iZXIpPT5Qcm9taXNlPFRSZXN1bHQ+KSA9ICdmdW5jdGlvbicgPT09IHR5cGVvZiBjYWxsYmFjayA/IGNhbGxiYWNrIDogdW5kZWZpbmVkO1xyXG5cdFx0Y29uc3QgX29uUHJvZ3Jlc3M6IHVuZGVmaW5lZHwoKHBlcmNlbnQ6bnVtYmVyLHRvdGFsOm51bWJlcixjb21wbGV0ZTpudW1iZXIsZmFpbHVyZXM6bnVtYmVyKT0+dm9pZCkgPSAnZnVuY3Rpb24nID09PSB0eXBlb2Ygb25Qcm9ncmVzcyA/IG9uUHJvZ3Jlc3MgOiB1bmRlZmluZWQ7XHJcblx0XHRcclxuXHRcdC8vLS0gcXVldWUgcHJvbWlzZVxyXG5cdFx0aW50ZXJmYWNlIElRdWV1ZUl0ZW0ge2luZGV4OiBudW1iZXI7IHZhbHVlOiBUO31cclxuXHRcdGNvbnN0IHF1ZXVlOiBJUXVldWVJdGVtW10gPSBfYXJyYXlMaXN0KHZhbHVlcykubWFwKCh2YWx1ZSwgaW5kZXgpID0+ICh7aW5kZXgsIHZhbHVlfSkpO1xyXG5cdFx0Y29uc3QgbGVuZ3RoID0gcXVldWUubGVuZ3RoO1xyXG5cdFx0bGV0IHBlbmRpbmcgPSAwLCBjb21wbGV0ZSA9IDAsIGZhaWx1cmVzID0gMDtcclxuXHJcblx0XHQvLy0tIHF1ZXVlIHJlc3VsdHNcclxuXHRcdGNvbnN0IHJlc3VsdHM6IElQcm9taXNlUmVzdWx0PFRSZXN1bHQ+W10gPSBbXTtcclxuXHRcdGNvbnN0IF9yZXNvbHZlID0gKCk6IHZvaWQgPT4gdm9pZCBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUocmVzdWx0cyksIDApO1xyXG5cdFx0XHJcblx0XHQvLy0tIHF1ZXVlIHNpemUgY2hlY2tcclxuXHRcdGlmICghbGVuZ3RoKXtcclxuXHRcdFx0aWYgKF9vblByb2dyZXNzKSBfb25Qcm9ncmVzcygxMDAsIGxlbmd0aCwgY29tcGxldGUsIGZhaWx1cmVzKTtcclxuXHRcdFx0cmV0dXJuIF9yZXNvbHZlKCk7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmIChfb25Qcm9ncmVzcykgX29uUHJvZ3Jlc3MoMCwgbGVuZ3RoLCBjb21wbGV0ZSwgZmFpbHVyZXMpO1xyXG5cclxuXHRcdC8vZm4gPT4gaGVscGVyID4gcXVldWUgbmV4dCB0aW1lb3V0IG11bHRpcGxlIGNhbGxzIHRocm90dGxlICg1MG1zKVxyXG5cdFx0bGV0IG5leHRfdGltZW91dDogYW55ID0gdW5kZWZpbmVkO1xyXG5cdFx0Y29uc3QgX3F1ZXVlX25leHQgPSAoKTogdm9pZCA9PiB7XHJcblx0XHRcdGNsZWFyVGltZW91dChuZXh0X3RpbWVvdXQpO1xyXG5cdFx0XHRuZXh0X3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IF9uZXh0KCksIG5leHRfdGltZW91dCA/IDUwIDogMCk7XHJcblx0XHR9O1xyXG5cclxuXHRcdC8vPj4gcXVldWUgbmV4dCBzdGFydFxyXG5cdFx0X3F1ZXVlX25leHQoKTtcclxuXHJcblx0XHQvL2ZuID0+IGhlbHBlciA+IHF1ZXVlIG5leHRcclxuXHRcdGZ1bmN0aW9uIF9uZXh0KCk6IHZvaWQge1xyXG5cdFx0XHRcclxuXHRcdFx0Ly8tLSBwZW5kaW5nIGxpbWl0ID4gaWdub3JlIH4gc2ltdWx0YW5lb3VzIHNpemUgbGltaXRcclxuXHRcdFx0aWYgKHNpemUgJiYgKHBlbmRpbmcgKyAxKSA+IHNpemUpIHJldHVybjtcclxuXHRcdFx0XHJcblx0XHRcdC8vLS0gbmV4dCBxdWV1ZSBpdGVtID4gaWdub3JlIH4gZW1wdHkgcXVldWVcclxuXHRcdFx0Y29uc3QgbmV4dDogSVF1ZXVlSXRlbXx1bmRlZmluZWQgPSBxdWV1ZS5zaGlmdCgpO1xyXG5cdFx0XHRpZiAoIW5leHQpIHJldHVybjtcclxuXHJcblx0XHRcdC8vLS0gcGVuZGluZyBpbmNyZW1lbnRcclxuXHRcdFx0cGVuZGluZyArKztcclxuXHJcblx0XHRcdC8vZm4gPT4gaGVscGVyID4gcGVuZGluZyBwcm9taXNlIGNvbXBsZXRlXHJcblx0XHRcdGNvbnN0IF9kb25lID0gKGZhaWxlZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCA9PiB7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Ly8tLSBkZWNyZW1lbnQgcGVuZGluZyA+IGluY3JlbWVudCBjb21wbGV0ZS9mYWlsdXJlc1xyXG5cdFx0XHRcdHBlbmRpbmcgLS07XHJcblx0XHRcdFx0Y29tcGxldGUgKys7XHJcblx0XHRcdFx0aWYgKGZhaWxlZCkgZmFpbHVyZXMgKys7XHJcblxyXG5cdFx0XHRcdC8vLS0gcHJvZ3Jlc3MgdXBkYXRlIChvbiBkaWZmZXJlbnQgdGhyZWFkKVxyXG5cdFx0XHRcdGlmIChfb25Qcm9ncmVzcyl7XHJcblx0XHRcdFx0XHRjb25zdCBwZXJjZW50OiBudW1iZXIgPSBNYXRoLm1pbihNYXRoLmZsb29yKGNvbXBsZXRlL2xlbmd0aCAqIDEwMCksIDEwMCk7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRfb25Qcm9ncmVzcyhwZXJjZW50LCBsZW5ndGgsIGNvbXBsZXRlLCBmYWlsdXJlcyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjYXRjaCAoZXJyOiBhbnkpe1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oYFtJR05PUkVEXSBfYXN5bmNCYXRjaCA+IG9uUHJvZ3Jlc3MgY2FsbGJhY2sgZXhjZXB0aW9uOyAke19lcnJvclRleHQoZXJyKX1gKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Ly88PCBxdWV1ZSBjb21wbGV0ZS9uZXh0XHJcblx0XHRcdFx0aWYgKGNvbXBsZXRlID49IGxlbmd0aCkgcmV0dXJuIF9yZXNvbHZlKCk7XHJcblx0XHRcdFx0cmV0dXJuIF9xdWV1ZV9uZXh0KCk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHQvLy0tIHBlbmRpbmcgcHJvbWlzZVxyXG5cdFx0XHQoYXN5bmMoKT0+X2NhbGxiYWNrID8gX2NhbGxiYWNrKG5leHQudmFsdWUsIG5leHQuaW5kZXgsIGxlbmd0aCkgOiBuZXh0LnZhbHVlKSgpXHJcblx0XHRcdC50aGVuKChyZXN1bHQ6IGFueSk6IHZvaWQgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdHNbbmV4dC5pbmRleF0gPSB7c3RhdHVzOiAncmVzb2x2ZWQnLCBpbmRleDogbmV4dC5pbmRleCwgdmFsdWU6IHJlc3VsdH07XHJcblx0XHRcdFx0X2RvbmUoKTtcclxuXHRcdFx0fSlcclxuXHRcdFx0LmNhdGNoKChyZWFzb246IGFueSk6IHZvaWQgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdHNbbmV4dC5pbmRleF0gPSB7c3RhdHVzOiAncmVqZWN0ZWQnLCBpbmRleDogbmV4dC5pbmRleCwgcmVhc29ufTtcclxuXHRcdFx0XHRfZG9uZSh0cnVlKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvLzw8IHF1ZXVlIG5leHQgKGFkZClcclxuXHRcdFx0X3F1ZXVlX25leHQoKTtcclxuXHRcdH1cclxuXHR9KTtcclxufTtcclxuXHJcblxyXG4vKipcclxuICogR2V0IGFzeW5jIGl0ZXJhYmxlIHZhbHVlcyAoaS5lLiBgZm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiBfYXN5bmNWYWx1ZXMoYXJyYXkpKXsuLi59YClcclxuICogXHJcbiAqIEBwYXJhbSBhcnJheSAgVmFsdWVzXHJcbiAqIEByZXR1cm5zIEFzeW5jIGl0ZXJhYmxlIG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9hc3luY1ZhbHVlcyA9IDxUID0gYW55PihhcnJheTogVFtdKToge1xyXG5cdHZhbHVlczogKCkgPT4gVFtdLFxyXG5cdHNpemU6ICgpID0+IG51bWJlcjtcclxuXHRlYWNoOiAoY2FsbGJhY2s6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIsIF9icmVhazogKCk9PnZvaWQpPT5Qcm9taXNlPGFueT4pID0+IFByb21pc2U8dm9pZD47XHJcblx0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogKCkgPT4ge1xyXG5cdFx0bmV4dDogKCkgPT4gUHJvbWlzZTx7ZG9uZTogYm9vbGVhbjsgdmFsdWU6IFR9PjtcclxuXHR9XHJcbn0gPT4gKHtcclxuXHR2YWx1ZXM6ICgpID0+IGFycmF5LFxyXG5cdHNpemU6ICgpID0+IGFycmF5Lmxlbmd0aCxcclxuXHRhc3luYyBlYWNoKGNhbGxiYWNrOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCBfYnJlYWs6ICgpPT52b2lkKT0+UHJvbWlzZTxhbnk+KTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRsZXQgc2VsZiA9IHRoaXMsIGNhbmNlbCA9IGZhbHNlLCBpbmRleCA9IC0xLCBfYnJlYWsgPSAoKSA9PiB7XHJcblx0XHRcdGNhbmNlbCA9IHRydWU7XHJcblx0XHR9O1xyXG5cdFx0Zm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiBzZWxmKXtcclxuXHRcdFx0aW5kZXggKys7XHJcblx0XHRcdGlmIChjYW5jZWwpIGJyZWFrO1xyXG5cdFx0XHRhd2FpdCBjYWxsYmFjayh2YWx1ZSwgaW5kZXgsIHNlbGYuc2l6ZSgpLCBfYnJlYWspO1xyXG5cdFx0fVxyXG5cdH0sXHJcblx0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe1xyXG5cdFx0bGV0IGluZGV4ID0gMDtcclxuXHRcdGNvbnN0IHRoYXQgPSB0aGlzO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0YXN5bmMgbmV4dCgpOiBQcm9taXNlPHtkb25lOiBib29sZWFuOyB2YWx1ZTogVH0+IHtcclxuXHRcdFx0XHRsZXQgdmFsdWU6IFQgPSB1bmRlZmluZWQgYXMgVCwgbGVuZ3RoID0gdGhhdC5zaXplKCk7XHJcblx0XHRcdFx0aWYgKGluZGV4ID49IGxlbmd0aCkgcmV0dXJuIHtkb25lOiB0cnVlLCB2YWx1ZX07XHJcblx0XHRcdFx0dmFsdWUgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoYXJyYXlbaW5kZXhdKTtcclxuXHRcdFx0XHRpbmRleCArKztcclxuXHRcdFx0XHRyZXR1cm4ge2RvbmU6IGZhbHNlLCB2YWx1ZX07XHJcblx0XHRcdH0sXHJcblx0XHR9O1xyXG5cdH0sXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIERlbGF5IHByb21pc2VcclxuICogXHJcbiAqIEBwYXJhbSB0aW1lb3V0ICBEZWxheSBtaWxsaXNlY29uZHNcclxuICogQHJldHVybnMgYFByb21pc2U8bnVtYmVyPmAgdGltZW91dFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zbGVlcCA9IGFzeW5jICh0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG5cdHRpbWVvdXQgPSAhaXNOYU4odGltZW91dCkgJiYgdGltZW91dCA+PSAwID8gdGltZW91dCA6IDBcclxuXHRyZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUodGltZW91dCksIHRpbWVvdXQpKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXNvbHZlIHByb21pc2UgY2FsbGJhY2svdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB0aGlzIC0gY2FsbCBjb250ZXh0XHJcbiAqIEBwYXJhbSBwcm9taXNlIC0gcmVzb2x2ZSB+IGAoKT0+UHJvbWlzZTxhbnk+fGFueWAgY2FsbGJhY2sgcmVzdWx0IHwgYGFueWAgdmFsdWVcclxuICogQHBhcmFtIF9uZXcgLSB3aGV0aGVyIHRvIHJldHVybiBuZXcgcHJvbWlzZVxyXG4gKiBAcmV0dXJucyBgUHJvbWlzZTxhbnk+YCB+IGBQcm9taXNlLnJlc29sdmVgIHZhbHVlL3Jlc3VsdFxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9yZXNvbHZlKHRoaXM6IGFueSwgcHJvbWlzZTogKCgpPT5Qcm9taXNlPGFueT58YW55KXxhbnksIF9uZXc6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8YW55PiB7XHJcblx0Y29uc3QgcmVzb2x2ZWQgPSBQcm9taXNlLnJlc29sdmUoJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHByb21pc2UgPyBwcm9taXNlIDogKGFzeW5jICgpID0+IHByb21pc2UuY2FsbCh0aGlzKSkoKSk7XHJcblx0cmV0dXJuICFfbmV3ID8gcmVzb2x2ZWQgOiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogKHZhbHVlOiBhbnkpPT52b2lkLCByZWplY3Q6IChyZWFzb246IGFueSk9PnZvaWQpID0+IHJlc29sdmVkLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVuZGluZyBwcm9taXNlIGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJUGVuZGluZ1Byb21pc2Uge1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIC0gdW5pcXVlIHByb21pc2Uga2V5L25hbWUvSURcclxuXHQgKi9cclxuXHRrZXk6IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogLSBwcm9taXNlIGluc3RhbmNlXHJcblx0ICovXHJcblx0cHJvbWlzZTogUHJvbWlzZTxhbnk+O1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIC0gcHJvbWlzZSByZXNvbHZlZC9yZWplY3RlZC9hYm9ydGVkXHJcblx0ICovXHJcblx0ZG9uZTogYm9vbGVhbjtcclxuXHJcblx0LyoqXHJcblx0ICogLSBwcm9taXNlIHJlc29sdmVkIChzdWNjZXNzZnVsKSB+IGBmYWxzZWAgd2hlbiBwZW5kaW5nIG9yIHJlamVjdGVkXHJcblx0ICovXHJcblx0cmVzb2x2ZWQ6IGJvb2xlYW47XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gcHJvbWlzZSBhYm9ydGVkXHJcblx0ICovXHJcblx0YWJvcnRlZDogYm9vbGVhbjtcclxuXHJcblx0LyoqXHJcblx0ICogLSBzdGFydCB0aW1lIH4gcGVuZGluZyBwcm9taXNlIGNyZWF0ZSB0aW1lIChtaWxsaXNlY29uZHMgaS5lLiBgRGF0ZS5ub3coKWApXHJcblx0ICovXHJcblx0dGltZV9zdGFydDogbnVtYmVyO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIHN0b3AgdGltZSB+IHRpbWUgcmVzb2x2ZWQvcmVqZWN0ZWQvYWJvcnRlZCAobWlsbGlzZWNvbmRzIGkuZS4gYERhdGUubm93KClgKVxyXG5cdCAqL1xyXG5cdHRpbWVfc3RvcD86IG51bWJlcjtcclxuXHJcblx0LyoqXHJcblx0ICogLSBzdG9wIHRpbWUgfiB0aW1lIHJlc29sdmVkL3JlamVjdGVkIChtaWxsaXNlY29uZHMgaS5lLiBgRGF0ZS5ub3coKWApXHJcblx0ICovXHJcblx0dGltZV9lbmQ/OiBudW1iZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gcHJldmlvdXMgY2hhaW4gcHJvbWlzZSAocmVzb2x2ZWQpXHJcblx0ICovXHJcblx0cHJldmlvdXM/OiBJUGVuZGluZ1Byb21pc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gcmVzb2x2ZSBuZXh0IGNoYWluIHByb21pc2VcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gcHJldmlvdXMgLSBwcmV2aW91cyBgSVBlbmRpbmdQcm9taXNlYFxyXG5cdCAqIEByZXR1cm5zIGBQcm9taXNlPGFueT5gXHJcblx0ICovXHJcblx0bmV4dD86IChwcmV2aW91czpJUGVuZGluZ1Byb21pc2UpPT5Qcm9taXNlPGFueT47XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gY2FuY2VsIHBlbmRpbmcgcHJvbWlzZVxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIGB2b2lkYFxyXG5cdCAqL1xyXG5cdGFib3J0OiAoKT0+dm9pZDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBwZW5kaW5nIHByb21pc2UgYWJvcnQgZXJyb3JcclxuICovXHJcbmV4cG9ydCBjbGFzcyBQZW5kaW5nQWJvcnRFcnJvciBleHRlbmRzIEVycm9yIHtcclxuXHRuYW1lOiBzdHJpbmcgPSAnUGVuZGluZ0Fib3J0RXJyb3InO1xyXG5cdHBlbmRpbmc6IElQZW5kaW5nO1xyXG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcGVuZGluZzogSVBlbmRpbmcpe1xyXG5cdFx0c3VwZXIobWVzc2FnZSk7XHJcblx0XHR0aGlzLnBlbmRpbmcgPSBwZW5kaW5nO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFBlbmRpbmcgcHJvbWlzZSBpdGVtIGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJUGVuZGluZyB7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBwcm9taXNlIGtleSB+IHVuaXF1ZSBpZGVudGlmaWVyIChpZ25vcmVzL2NoYWlucyBkdXBsaWNhdGUpXHJcblx0ICovXHJcblx0a2V5OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gcGVuZGluZyBwcm9taXNlXHJcblx0ICovXHJcblx0cHJvbWlzZTogUHJvbWlzZTxhbnk+O1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIC0gcmVzb2x2ZWQgc3RhdGUgfiBgMGAgPSBwZW5kaW5nLCBgMWAgPSByZXNvbHZlZCwgYC0xYCA9IHJlamVjdGVkXHJcblx0ICovXHJcblx0cmVzb2x2ZWQ6IC0xfDB8MTtcclxuXHJcblx0LyoqXHJcblx0ICogLSB3aGV0aGVyIHRvIGtlZXAgcmVzb2x2ZWQgcHJvbWlzZSBpbiBjYWNoZSB+IHBlbmRpbmcgcHJvbWlzZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBmcm9tIGNhY2hlIGJ5IGRlZmF1bHQgb3Igb24gcmVqZWN0aW9uLlxyXG5cdCAqL1xyXG5cdGtlZXA6IGJvb2xlYW47XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gd2hldGhlciBwZW5kaW5nIHByb21pc2Ugd2FzIGFib3J0ZWRcclxuXHQgKi9cclxuXHRhYm9ydGVkOiBib29sZWFuO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIHdoZXRoZXIgcGVuZGluZyBwcm9taXNlIHdhcyBhYm9ydGVkXHJcblx0ICovXHJcblx0YWJvcnRFcnJvcj86IFBlbmRpbmdBYm9ydEVycm9yO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIGFib3J0IHBlbmRpbmcgcHJvbWlzZSB+IGFib3J0ZWQgcGVuZGluZyBwcm9taXNlcyB3aWxsIHJlamVjdCB3aXRoIGBBYm9ydFBlbmRpbmdFcnJvcmAgcmVhc29uXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHJlYXNvbiAtIHNwZWNpZnkgYWJvcnQgcmVhc29uIChkZWZhdWx0OiBgJ2Fib3J0ZWQnYClcclxuXHQgKi9cclxuXHRhYm9ydDogKHJlYXNvbj86c3RyaW5nKT0+dm9pZDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFBlbmRpbmcgcHJvbWlzZSBpbnRlcmZhY2UgfiBgZXh0ZW5kcyBQcm9taXNlPGFueT5gXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElQZW5kaW5nUHJvbWlzZSBleHRlbmRzIFByb21pc2U8YW55PiB7XHJcblx0cGVuZGluZzogSVBlbmRpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQZW5kaW5nIHByb21pc2UgdGFzayBjYWNoZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFBFTkRJTkdfQ0FDSEU6IHtba2V5OiBzdHJpbmddOiBJUGVuZGluZ30gPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUvcmVzdW1lIHBlbmRpbmcgcHJvbWlzZVxyXG4gKiBcclxuICogQHBhcmFtIGtleSAtIHVuaXF1ZSBwcm9taXNlIGtleS9uYW1lL0lEIH4gYHN0cmluZ2AgKGkuZS4gYFN0cmluZyhEYXRlLm5vdygpKWApXHJcbiAqIEBwYXJhbSBwcm9taXNlIC0gcHJvbWlzZSBpbnN0YW5jZSBjcmVhdG9yIGNhbGxiYWNrIH4gYCgpPT5Qcm9taXNlPFRSZXN1bHQ+YFxyXG4gKiBAcGFyYW0gbW9kZSAtIG5ldyBwZW5kaW5nIGJlaGF2aW9yIHdoZW4gYGtleWAgZHVwbGljYXRlIGV4aXN0czpcclxuICogLSBgMGAgPSBpZ25vcmUgKGRlZmF1bHQpIH4gcmVzb2x2ZSBwZW5kaW5nXHJcbiAqIC0gYDFgID0gcmVwbGFjZSB+IHJlcGxhY2UgcGVuZGluZyBwcm9taXNlXHJcbiAqIC0gYDJgID0gcmV0cnkgfiByZXNvbHZlIG5leHQgaWYgcGVuZGluZyBwcm9taXNlIHJlamVjdGlvblxyXG4gKiAtIGAzYCA9IGNoYWluIH4gcmVzb2x2ZSBuZXh0IGFmdGVyIHBlbmRpbmcgcHJvbWlzZSBpcyBkb25lIChyZXNvbHZlcy9yZWplY3RzKVxyXG4gKiBAcGFyYW0ga2VlcCAtIHdoZXRoZXIgdG8ga2VlcCByZXNvbHZlZCBwcm9taXNlIGluIGNhY2hlIChkZWZhdWx0OiBgZmFsc2VgKSB+IHBlbmRpbmcgcHJvbWlzZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBmcm9tIGNhY2hlIGJ5IGRlZmF1bHQgb3Igb24gcmVqZWN0aW9uLlxyXG4gKiBAcmV0dXJucyBgSVBlbmRpbmdQcm9taXNlYCB+IGBleHRlbmRzIFByb21pc2U8YW55PmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcGVuZGluZyA9IChrZXk6IHN0cmluZywgcHJvbWlzZTogKCk9PlByb21pc2U8YW55PiwgbW9kZTogMHwxfDJ8MyA9IDAsIGtlZXA6IGJvb2xlYW4gPSBmYWxzZSk6IElQZW5kaW5nUHJvbWlzZSA9PiB7XHJcblx0aWYgKCEoa2V5ID0gX3N0cihrZXksIHRydWUpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBwZW5kaW5nIGBrZXlgIHZhbHVlLicpO1xyXG5cdGlmICgnZnVuY3Rpb24nICE9PSB0eXBlb2YgcHJvbWlzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBwZW5kaW5nIGBwcm9taXNlYCBjYWxsYmFjayBmdW5jdGlvbi4nKTtcclxuXHRsZXQgX3BlbmRpbmdfcmVzb2x2ZTogKCh2YWx1ZTphbnkpPT52b2lkKXx1bmRlZmluZWQgPSB1bmRlZmluZWQ7IFxyXG5cdGxldCBfcGVuZGluZ19yZWplY3Q6ICgocmVhc29uOmFueSwgYWJvcnQ/OmJvb2xlYW4pPT52b2lkKXx1bmRlZmluZWQgPSB1bmRlZmluZWQ7IFxyXG5cdGxldCBwZW5kaW5nOiBJUGVuZGluZyA9IFBFTkRJTkdfQ0FDSEVba2V5XTtcclxuXHRjb25zdCBjdXJyZW50ID0gcGVuZGluZyAmJiBwZW5kaW5nLnByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlICYmIHBlbmRpbmcucmVzb2x2ZWQgPiAtMSA/IHBlbmRpbmcucHJvbWlzZSA6IHVuZGVmaW5lZDtcclxuXHRpZiAoIWN1cnJlbnQgfHwgbW9kZSl7XHJcblx0XHRjb25zdCBuZXh0X3Byb21pc2UgPSAoIWN1cnJlbnQgfHwgbW9kZSA9PT0gMSkgPyBfcmVzb2x2ZShwcm9taXNlKSA6IF9yZXNvbHZlKGN1cnJlbnQsIHRydWUpXHJcblx0XHQudGhlbihhc3luYyAodmFsdWU6IGFueSkgPT4gbW9kZSA9PT0gMiA/IHZhbHVlIDogX3Jlc29sdmUocHJvbWlzZSkpXHJcblx0XHQuY2F0Y2goYXN5bmMgKCkgPT4gX3Jlc29sdmUocHJvbWlzZSkpO1xyXG5cdFx0cGVuZGluZyA9IFBFTkRJTkdfQ0FDSEVba2V5XSA9IHtcclxuXHRcdFx0a2V5LFxyXG5cdFx0XHRwcm9taXNlOiBuZXh0X3Byb21pc2UsXHJcblx0XHRcdHJlc29sdmVkOiAwLFxyXG5cdFx0XHRrZWVwLFxyXG5cdFx0XHRhYm9ydGVkOiBmYWxzZSxcclxuXHRcdFx0YWJvcnRFcnJvcjogdW5kZWZpbmVkLFxyXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24ocmVhc29uPzogc3RyaW5nKTogdm9pZCB7XHJcblx0XHRcdFx0Y29uc3QgdGhhdCA9IHRoaXM7XHJcblx0XHRcdFx0aWYgKCEoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIF9wZW5kaW5nX3JlamVjdCAmJiAhdGhhdC5yZXNvbHZlZCAmJiAhdGhhdC5hYm9ydGVkKSkgcmV0dXJuO1xyXG5cdFx0XHRcdF9wZW5kaW5nX3JlamVjdCh0aGF0LmFib3J0RXJyb3IgPSBuZXcgUGVuZGluZ0Fib3J0RXJyb3IoX3N0cihyZWFzb24sIHRydWUpIHx8ICdhYm9ydGVkJywgdGhhdCksIHRoYXQuYWJvcnRlZCA9IHRydWUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fTtcclxuXHR9XHJcblx0ZWxzZSB7XHJcblx0XHRwZW5kaW5nLmFib3J0RXJyb3IgPSB1bmRlZmluZWQ7XHJcblx0XHRwZW5kaW5nLmFib3J0ZWQgPSBmYWxzZTtcclxuXHR9XHJcblx0bGV0IHJlc29sdmVkOiAtMXwwfDEgPSAwO1xyXG5cdGNvbnN0IHBlbmRpbmdfcHJvbWlzZTogSVBlbmRpbmdQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmU6ICh2YWx1ZTogYW55KT0+dm9pZCwgcmVqZWN0OiAocmVhc29uOiBhbnkpPT52b2lkKSA9PiB7XHJcblx0XHRfcGVuZGluZ19yZXNvbHZlID0gKHZhbHVlOiBhbnkpOiB2b2lkID0+IHtcclxuXHRcdFx0aWYgKCFyZXNvbHZlZCl7XHJcblx0XHRcdFx0cmVzb2x2ZWQgPSAxO1xyXG5cdFx0XHRcdHJlc29sdmUodmFsdWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHBlbmRpbmcucmVzb2x2ZWQgPSAxO1xyXG5cdFx0XHRpZiAoUEVORElOR19DQUNIRVtrZXldID09PSBwZW5kaW5nICYmICFwZW5kaW5nLmtlZXApIGRlbGV0ZSBQRU5ESU5HX0NBQ0hFW2tleV07XHJcblx0XHR9O1xyXG5cdFx0X3BlbmRpbmdfcmVqZWN0ID0gKHJlYXNvbjogYW55LCBhYm9ydDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCA9PiB7XHJcblx0XHRcdGlmICghcmVzb2x2ZWQpe1xyXG5cdFx0XHRcdHJlc29sdmVkID0gLTE7XHJcblx0XHRcdFx0cmVqZWN0KHJlYXNvbik7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGFib3J0KSByZXR1cm47XHJcblx0XHRcdHBlbmRpbmcucmVzb2x2ZWQgPSAtMTtcclxuXHRcdFx0aWYgKFBFTkRJTkdfQ0FDSEVba2V5XSA9PT0gcGVuZGluZykgZGVsZXRlIFBFTkRJTkdfQ0FDSEVba2V5XTtcclxuXHRcdH07XHJcblx0XHRjb25zdCBfcmVqZWN0ID0gKHJlYXNvbjogYW55KTogdm9pZCA9PiB2b2lkICgnZnVuY3Rpb24nID09PSB0eXBlb2YgX3BlbmRpbmdfcmVqZWN0ID8gX3BlbmRpbmdfcmVqZWN0KHJlYXNvbikgOiBudWxsKTtcclxuXHRcdHBlbmRpbmcucHJvbWlzZS50aGVuKF9wZW5kaW5nX3Jlc29sdmUsIF9yZWplY3QpO1xyXG5cdH0pIGFzIGFueTtcclxuXHRwZW5kaW5nX3Byb21pc2UucGVuZGluZyA9IHBlbmRpbmc7XHJcblx0cmV0dXJuIHBlbmRpbmdfcHJvbWlzZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFib3J0IGNhY2hlZCBwZW5kaW5nIHByb21pc2VzXHJcbiAqIFxyXG4gKiBAcGFyYW0gcmVtb3ZlIC0gd2hldGhlciB0byByZW1vdmUgYWJvcnRlZCBwcm9taXNlIGZyb20gY2FjaGUgKGRlZmF1bHQ6IGBmYWxzZWApXHJcbiAqIEBwYXJhbSBrZXkgLSBzcGVjaWZ5IGNhY2hlZCBwcm9taXNlIGtleSB0byBhYm9ydCAoZGVmYXVsdDogYGFsbGAgfiB3aGVuIGtleSBpcyBgdW5kZWZpbmVkYC9ibGFuaylcclxuICogQHBhcmFtIHJlYXNvbiAtIHNwZWNpZnkgYWJvcnQgcmVhc29uIChkZWZhdWx0OiBgJ2Fib3J0ZWQnYClcclxuICogQHJldHVybnMgYHZvaWRgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3BlbmRpbmdBYm9ydCA9IChyZW1vdmU6IGJvb2xlYW4gPSBmYWxzZSwga2V5Pzogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiB2b2lkID0+IHtcclxuXHRpZiAoa2V5ID0gX3N0cihrZXksIHRydWUpKXtcclxuXHRcdGNvbnN0IHBlbmRpbmcgPSBQRU5ESU5HX0NBQ0hFW2tleV07XHJcblx0XHRpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHBlbmRpbmc/LmFib3J0KSBwZW5kaW5nLmFib3J0KHJlYXNvbik7XHJcblx0XHRpZiAocmVtb3ZlICYmIHBlbmRpbmc/LmtleSkgZGVsZXRlIFBFTkRJTkdfQ0FDSEVbcGVuZGluZy5rZXldO1xyXG5cdH1cclxuXHRlbHNlIHtcclxuXHRcdGZvciAoY29uc3QgcGVuZGluZyBvZiBPYmplY3QudmFsdWVzKFBFTkRJTkdfQ0FDSEUpKXtcclxuXHRcdFx0aWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBwZW5kaW5nPy5hYm9ydCkgcGVuZGluZy5hYm9ydChyZWFzb24pO1xyXG5cdFx0XHRpZiAocmVtb3ZlICYmIHBlbmRpbmc/LmtleSkgZGVsZXRlIFBFTkRJTkdfQ0FDSEVbcGVuZGluZy5rZXldO1xyXG5cdFx0fVxyXG5cdH1cclxufTsiLCIvKipcclxuICogUXVldWUgb2JqZWN0IGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJUXVldWU8VD4ge1xyXG5cdGNvdW50OiBudW1iZXI7XHJcblx0bGVuZ3RoOiBudW1iZXI7XHJcblx0aXNFbXB0eTogYm9vbGVhbjtcclxuXHRlbnF1ZXVlKHZhbHVlOiBUKTogdm9pZDtcclxuXHRkZXF1ZXVlKCk6IFR8dW5kZWZpbmVkO1xyXG5cdHBlZWsoKTogVHx1bmRlZmluZWQ7XHJcblx0dmFsdWVzKCk6IFRbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBxdWV1ZSBvYmplY3RcclxuICogXHJcbiAqIEByZXR1cm5zIGBJUXVldWVgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3F1ZXVlID0gPFQgPSBhbnk+KCk6IElRdWV1ZTxUPiA9PiB7XHJcblx0Y29uc3QgaXRlbXM6IHtba2V5OiBudW1iZXJdOiBUfSA9IHt9O1xyXG5cdGxldCBoZWFkOiBudW1iZXIgPSAwO1xyXG5cdGxldCB0YWlsOiBudW1iZXIgPSAwO1xyXG5cdHJldHVybiB7XHJcblx0XHRnZXQgY291bnQoKTogbnVtYmVyIHtcclxuXHRcdFx0cmV0dXJuIHRhaWw7XHJcblx0XHR9LFxyXG5cdFx0Z2V0IGxlbmd0aCgpOiBudW1iZXIge1xyXG5cdFx0XHRyZXR1cm4gdGFpbCAtIGhlYWQ7XHJcblx0XHR9LFxyXG5cdFx0Z2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XHJcblx0XHRcdHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMDtcclxuXHRcdH0sXHJcblx0XHRlbnF1ZXVlKHZhbHVlOiBUKTogdm9pZCB7XHJcblx0XHRcdGl0ZW1zW3RhaWxdID0gdmFsdWU7XHJcblx0XHRcdHRhaWwgKys7XHJcblx0XHR9LFxyXG5cdFx0ZGVxdWV1ZSgpOiBUfHVuZGVmaW5lZCB7XHJcblx0XHRcdGNvbnN0IGl0ZW0gPSBpdGVtc1toZWFkXTtcclxuXHRcdFx0ZGVsZXRlIGl0ZW1zW2hlYWRdO1xyXG5cdFx0XHRoZWFkICsrO1xyXG5cdFx0XHRyZXR1cm4gaXRlbTtcclxuXHRcdH0sXHJcblx0XHRwZWVrKCk6IFR8dW5kZWZpbmVkIHtcclxuXHRcdFx0cmV0dXJuIGl0ZW1zW2hlYWRdO1xyXG5cdFx0fSxcclxuXHRcdHZhbHVlcygpOiBUW10ge1xyXG5cdFx0XHRyZXR1cm4gT2JqZWN0LnZhbHVlcyhpdGVtcyk7XHJcblx0XHR9LFxyXG5cdH07XHJcbn07IiwiLyoqXHJcbiAqIFJDNCBlbmNyeXB0L2RlY3J5cHQgdGV4dCB2YWx1ZVxyXG4gKiBcclxuICogQHBhcmFtIHRleHQgLSBwYXJzZSB0ZXh0XHJcbiAqIEBwYXJhbSBrZXkgLSBjeXBoZXIga2V5IChkZWZhdWx0OiBgJ2Fsb2hvbW9yYSdgKVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9yYzQgPSAodGV4dDogYW55LCBrZXk/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG5cdGlmICghKHRleHQgPSBTdHJpbmcodGV4dCA/PyAnJykpKSByZXR1cm4gJyc7XHJcblx0a2V5ID0gU3RyaW5nKGtleSA/PyAnYWxvaG9tb3JhJyk7XHJcblx0Y29uc3QgUzogYW55W10gPSBbXSwgSzogYW55W10gPSBbXTtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgaSsrKXtcclxuXHRcdFNbaV0gPSBpO1xyXG5cdFx0S1tpXSA9IGtleS5jaGFyQ29kZUF0KGkgJSBrZXkubGVuZ3RoKTtcclxuXHR9XHJcblx0bGV0IGogPSAwO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcclxuXHRcdGogPSAoaiArIFNbaV0gKyBLW2ldKSAlIDI1NjtcclxuXHRcdFtTW2ldLCBTW2pdXSA9IFtTW2pdLCBTW2ldXTtcclxuXHR9XHJcblx0bGV0IHJlc3VsdCA9ICcnLCBpID0gMDsgaiA9IDA7XHJcblx0Zm9yIChsZXQgbiA9IDA7IG4gPCB0ZXh0Lmxlbmd0aDsgbisrKSB7XHJcblx0XHRpID0gKGkgKyAxKSAlIDI1NjtcclxuXHRcdGogPSAoaiArIFNbaV0pICUgMjU2O1xyXG5cdFx0W1NbaV0sIFNbal1dID0gW1Nbal0sIFNbaV1dO1xyXG5cdFx0Y29uc3Qga2V5c3RyZWFtID0gU1soU1tpXSArIFNbal0pICUgMjU2XTtcclxuXHRcdHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRleHQuY2hhckNvZGVBdChuKSBeIGtleXN0cmVhbSk7XHJcblx0fVxyXG5cdHJldHVybiByZXN1bHQ7XHJcbn07IiwiaW1wb3J0IHsgYm9vbCB9IGZyb20gJy4uL3R5cGVzJztcclxuaW1wb3J0IHsgX2pzb25TdHJpbmdpZnkgfSBmcm9tICcuL19qc29uJztcclxuXHJcbi8qKlxyXG4gKiBHZXQgdW5pcXVlIHN0cmluZyBvZiByYW5kb20gY2hhcmFjdGVyc1xyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX3h1aWQoKSA9PiAnenQ3ZWc0ZXUzYjZtZjY2amdhJyAxOFxyXG4gKiBcclxuICogQHJldHVybnMgYHN0cmluZ2AgfiBhbHBoYW51bWVyaWMgbG93ZXJjYXNlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3h1aWQgPSAoKTogc3RyaW5nID0+IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKSArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkudG9TdHJpbmcoMzYpO1xyXG5cclxuLyoqXHJcbiAqIEdldCB1bmlxdWUgc3RyaW5nIG9mIHJhbmRvbSBjaGFyYWN0ZXJzIGBzdHJpbmdgIH4gYWxwaGFudW1lcmljIGxvd2VyY2FzZVxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX3V1aWQoKSA9PiAnZzllZW01dHJ5M3BsbDl1ZScgMTZcclxuICogX3V1aWQoMjApID0+ICdrNnlvMnpnem9kamxsOXVlcnM0dScgMjBcclxuICogX3V1aWQoNywgJ3Rlc3RfJykgPT4gJ3Rlc3RfM2JteGoydCcgMTJcclxuICogX3V1aWQoNywgJ3Rlc3Rfe3V1aWR9X2V4YW1wbGUnKSA9PiAndGVzdF9sazlyNXR2X2V4YW1wbGUnIDIwXHJcbiAqIF91dWlkKDcsICd0ZXN0X3t1dWlkfV97dXVpZH1fZXhhbXBsZScpID0+ICd0ZXN0X2c5NDh2cWZfMHM2bXM4eV9leGFtcGxlJyAyOFxyXG4gKiBcclxuICogQHBhcmFtIGxlbmd0aCAtIHV1aWQgbGVuZ3RoIC0gaW50ZWdlciBgbnVtYmVyYCBtaW49YDdgLCBtYXg9YDY0YCAoZGVmYXVsdCBgMTZgKVxyXG4gKiBAcGFyYW0gdGVtcGxhdGUgLSB1dWlkIHRlbXBsYXRlIC0gdHJpbW1lZCBgc3RyaW5nYCB+IGFwcGVuZHMgd2hlbiBgJ3t1dWlkfSdgIG5vdCBpbiB0ZW1wbGF0ZVxyXG4gKiBAcmV0dXJucyB1bmlxdWUgYHN0cmluZ2AgfiBhbHBoYW51bWVyaWMgbG93ZXJjYXNlIGAobGVuZ3RoW21pbjogNywgbWF4OiA2NF0pYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF91dWlkID0gKGxlbmd0aD86IG51bWJlciwgdGVtcGxhdGU/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG5cdGNvbnN0IGxlbjogbnVtYmVyID0gbGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgIWlzTmFOKHBhcnNlSW50KGxlbmd0aCArICcnKSkgJiYgTnVtYmVyLmlzSW50ZWdlcihsZW5ndGgpICYmIGxlbmd0aCA+PSA3ICYmIGxlbmd0aCA8PSA2NCA/IGxlbmd0aCA6IDE2O1xyXG5cdGNvbnN0IF9nZXRfdXVpZCA9ICgpID0+IHtcclxuXHRcdGxldCBidWZmZXIgPSAnJztcclxuXHRcdHdoaWxlIChidWZmZXIubGVuZ3RoIDwgbGVuKSBidWZmZXIgKz0gX3h1aWQoKTtcclxuXHRcdHJldHVybiBidWZmZXIuc3Vic3RyaW5nKDAsIGxlbik7XHJcblx0fTtcclxuXHRsZXQgdXVpZDogc3RyaW5nID0gJyc7XHJcblx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdGVtcGxhdGUgJiYgKHRlbXBsYXRlID0gdGVtcGxhdGUudHJpbSgpKSl7XHJcblx0XHRsZXQgYXBwZW5kOiBib29sZWFuID0gdHJ1ZTtcclxuXHRcdGNvbnN0IHRtcCA9IHRlbXBsYXRlLnJlcGxhY2UoL1xce3V1aWRcXH0vZywgKCkgPT4ge1xyXG5cdFx0XHRpZiAoYXBwZW5kKSBhcHBlbmQgPSBmYWxzZTtcclxuXHRcdFx0cmV0dXJuIF9nZXRfdXVpZCgpO1xyXG5cdFx0fSk7XHJcblx0XHR1dWlkID0gYXBwZW5kID8gdG1wICsgX2dldF91dWlkKCkgOiB0bXA7XHJcblx0fVxyXG5cdGVsc2UgdXVpZCA9IF9nZXRfdXVpZCgpO1xyXG5cdHJldHVybiB1dWlkO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNhZmVseSBgc3RyaW5nYCBjYXN0IHZhbHVlXHJcbiAqIC0gUmV0dXJucyBJU08gZm9ybWF0IHRpbWVzdGFtcCBmb3IgdmFsaWQgRGF0ZSB2YWx1ZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlICBDYXN0IHZhbHVlXHJcbiAqIEBwYXJhbSBfZGVmYXVsdCAgW2RlZmF1bHQ6IGAnJ2BdIERlZmF1bHQgcmVzdWx0IG9uIGZhaWx1cmVcclxuICogQHJldHVybnMgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfc3RyaW5nID0gKHZhbHVlOiBhbnksIF9kZWZhdWx0OiBzdHJpbmcgPSAnJyk6IHN0cmluZyA9PiB7XHJcblx0bGV0IHZhbDogc3RyaW5nID0gJyc7XHJcblx0dHJ5IHtcclxuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHZhbHVlLmdldFRpbWUoKSkpIHZhbCA9IHZhbHVlLnRvSVNPU3RyaW5nKCk7XHJcblx0XHRlbHNlIHZhbCA9IFN0cmluZyh2YWx1ZSk7XHJcblx0fVxyXG5cdGNhdGNoIChlKXtcclxuXHRcdHZhbCA9IF9kZWZhdWx0O1xyXG5cdH1cclxuXHRyZXR1cm4gdmFsO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNhZmVseSBgc3RyaW5nYCBjYXN0IHZhbHVlIGlmIHBvc3NpYmxlLlxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIGBmYWxzZXxzdHJpbmdgIENhc3QgcmVzdWx0IG9yIGBmYWxzZWAgb24gZmFpbHVyZVxyXG4gKiBAcmV0dXJucyB2YWx1ZSBgc3RyaW5nYCB8IGBmYWxzZWAgb24gZmFpbHVyZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zdHJpbmdhYmxlID0gKHZhbHVlOiBhbnkpOiBmYWxzZXxzdHJpbmcgPT4ge1xyXG5cdGNvbnN0IGZhaWxlZCA9IGAhJHtEYXRlLm5vdygpfSFgLCB2YWwgPSBfc3RyaW5nKHZhbHVlLCBmYWlsZWQpLCBwYXR0ZXJuID0gL1xcW29iamVjdCBcXHcrXFxdLztcclxuXHRyZXR1cm4gISh2YWwgPT09IGZhaWxlZCB8fCBwYXR0ZXJuLnRlc3QodmFsKSkgPyB2YWwgOiBmYWxzZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHZhbHVlIHRvIGBzdHJpbmdgIGVxdWl2YWxlbnRcclxuICogXHJcbiAqIC0gUmV0dXJucyAnJyBmb3IgYG51bGxgIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZVxyXG4gKiAtIFdoZW4gYHN0cmluZ2lmeWAgaXMgYGZhbHNlYCwgcmV0dXJucyAnJyBmb3IgYGFycmF5YCBvciBgb2JqZWN0YCB2YWx1ZSB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBgdG9TdHJpbmcoKWAgbWV0aG9kXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWVcclxuICogQHBhcmFtIHRyaW0gIFRyaW0gcmVzdWx0XHJcbiAqIEBwYXJhbSBzdHJpbmdpZnkgIFN0cmluZ2lmeSBgYXJyYXlgIG9yIGBvYmplY3RgIHZhbHVlIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGB0b1N0cmluZygpYCBtZXRob2RcclxuICogQHJldHVybnMgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfc3RyID0gKHZhbHVlOiBhbnksIHRyaW06IGJvb2xlYW4gPSBmYWxzZSwgc3RyaW5naWZ5OiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xyXG5cdGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIHZhbHVlKXtcclxuXHRcdGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XHJcblx0XHRlbHNlIGlmICgnb2JqZWN0JyA9PT0gdHlwZW9mIHZhbHVlKXtcclxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gc3RyaW5naWZ5ID8gX2pzb25TdHJpbmdpZnkodmFsdWUpIDogJyc7XHJcblx0XHRcdGNvbnN0IHRtcCA9IF9zdHJpbmdhYmxlKHZhbHVlKTtcclxuXHRcdFx0aWYgKHRtcCA9PT0gZmFsc2UpIHJldHVybiBzdHJpbmdpZnkgPyBfanNvblN0cmluZ2lmeSh2YWx1ZSkgOiAnJztcclxuXHRcdFx0ZWxzZSB2YWx1ZSA9IHRtcDtcclxuXHRcdH1cclxuXHRcdGVsc2UgdmFsdWUgPSBfc3RyaW5nKHZhbHVlKTtcclxuXHR9XHJcblx0cmV0dXJuIHRyaW0gPyB2YWx1ZS50cmltKCkgOiB2YWx1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgc3RyaW5nIGJ5IHJlbW92aW5nIGFjY2VudHMgKGkuZS4gXCJBbcOpbGllXCIgPT4gXCJBbWVsaWVcIilcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBub3JtYWxpemVkIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3N0ck5vcm0gPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiBfc3RyKHZhbHVlKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuXHJcbi8qKlxyXG4gKiBFc2NhcGUgcmVnZXggb3BlcmF0b3JzIGZyb20gc3RyaW5nXHJcbiAqIC0gaS5lLiBgJ1xcXFxzXFxuXFxyXFx0XFx2XFx4MDB+XyFAIyQlXiYqKClbXVxcXFwvLC4/XCJcXCc6O3t9fDw+PSstJ2AgPT4gYCdcXFxcc1xcblxcclxcdFxcdlxceDAwXFxzfl8hQCNcXFxcJCVcXFxcXiZcXFxcKlxcXFwoXFxcXClcXFxcW1xcXFxdXFxcXFxcXFwvLFxcXFwuXFxcXD9cIlxcJzo7XFxcXHtcXFxcfVxcXFx8PD49XFxcXCstJ2BcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBlc2NhcGVkIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3JlZ0VzY2FwZSA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IF9zdHIodmFsdWUpLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XHJcblxyXG4vKipcclxuICogRXNjYXBlIHN0cmluZyBzcGVjaWFsIGNoYXJhY3RlcnNcclxuICogLSBpLmUuIGAnXFxyXFxuXFx0XFxmXFx2XFx4MDAtXFx1MDBmMy1cXHUxMjM0LVxceGI0LVxcdTAwMGItL1xcXFwnYCA9PiBgJ1xcXFxyXFxcXG5cXFxcdFxcXFxmXFxcXHZcXFxceDAwLcOzLeGItC3CtC1cXFxcdi0vXFxcXFxcXFwnYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIGVzY2FwZWQgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfc3RyRXNjYXBlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4gSlNPTi5zdHJpbmdpZnkoX3N0cih2YWx1ZSkpXHJcbi5yZXBsYWNlKC9cXFxcdShbXFxkXFx3XXs0fSkvZywgKG0sIHMpID0+IHtcclxuXHRjb25zdCBoID0gcGFyc2VJbnQocywgMTYpO1xyXG5cdHJldHVybiBoID4gMjU1ID8gbSA6ICdcXFxcJyArIGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcuZnJvbUNoYXJDb2RlKGgpKS5yZXBsYWNlKCclJywgJ3gnKS5yZXBsYWNlKCd4MEInLCAndicpO1xyXG59KVxyXG4ucmVwbGFjZSgvXlwifFwiJC9nLCAnJylcclxuLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKTtcclxuXHJcbi8qKlxyXG4gKiBFc2NhcGUgYFNRTGAgc3BlY2lhbCBjaGFyYWN0ZXJzIGZyb20gcXVlcnkgYHN0cmluZ2AgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGBzdHJpbmdgXHJcbiAqIEByZXR1cm5zXHJcbiAqIC0gYHN0cmluZ2Agd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMgZXNjYXBlZCB+IGAnXFxcXCdcIlxcMFxcblxcclxceDFhJ2BcclxuICogLSBgbnVtYmVyYCAodW5jaGFuZ2VkKSB3aGVuIHR5cGUgaXMgYG51bWJlcmAgYW5kIG5vdCAgYE5hTmBcclxuICogLSBgYm9vbGVhbmAgKHVuY2hhbmdlZCkgd2hlbiB0eXBlIGlzIGB0cnVlYCBvciBgZmFsc2VgXHJcbiAqIC0gYG51bGxgIHdoZW4gdHlwZSBpcyBgdW5kZWZpbmVkYHxgTmFOYHxgbnVsbGBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfc3FsRXNjYXBlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmd8bnVtYmVyfGJvb2xlYW58bnVsbCA9PiB7XHJcblx0aWYgKHVuZGVmaW5lZCA9PT0gdmFsdWUgfHwgbnVsbCA9PT0gdmFsdWUpIHJldHVybiBudWxsO1xyXG5cdGVsc2UgaWYgKCdib29sZWFuJyA9PT0gdHlwZW9mIHZhbHVlKSByZXR1cm4gdmFsdWU7XHJcblx0ZWxzZSBpZiAoJ251bWJlcicgPT09IHR5cGVvZiB2YWx1ZSkgcmV0dXJuICFpc05hTih2YWx1ZSkgPyB2YWx1ZSA6IG51bGw7XHJcblx0aWYgKCEodmFsdWUgPSBfc3RyKHZhbHVlLCBmYWxzZSwgdHJ1ZSkpKSByZXR1cm4gdmFsdWU7XHJcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcclxuXHQucmVwbGFjZSgvXFwwL2csICdcXFxcMCcpXHJcblx0LnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKVxyXG5cdC5yZXBsYWNlKC9cXHIvZywgJ1xcXFxyJylcclxuXHQucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXHJcblx0LnJlcGxhY2UoL1wiL2csICdcXFxcXCInKVxyXG5cdC5yZXBsYWNlKC9cXHgxYS9nLCAnXFxcXFonKVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlZ2V4IHN0cmluZyB0cmltIGNoYXJhY3RlcnNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgVHJpbSB2YWx1ZVxyXG4gKiBAcGFyYW0gY2hhcnMgIFN0cmlwIGNoYXJhY3RlcnMgW2RlZmF1bHQ6IGAnIFxcblxcclxcdFxcZlxcdlxceDAwJ2BdIC0gdXNlIGAne2RlZmF1bHR9J2AgdG8gaW5jbHVkZSBkZWZhdWx0cyAoaS5lIGAnLXtkZWZhdWx0c30nYCA9PSBgJy0gXFxuXFxyXFx0XFxmXFx2XFx4MDAnYClcclxuICogQHBhcmFtIHJsICBUcmltIG1vZGUgKGAnJ2AgPT4gKGRlZmF1bHQpIHRyaW0gcmlnaHQgJiBsZWZ0LCBgJ3InfCdyaWdodCdgID0+IHRyaW0gcmlnaHQsIGAnbCd8J2xlZnQnYCA9PiB0cmltIGxlZnQpXHJcbiAqIEByZXR1cm5zIHRyaW1tZWQgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdHJpbSA9ICh2YWx1ZTogYW55LCBjaGFyczogc3RyaW5nID0gJyBcXHJcXG5cXHRcXGZcXHZcXHgwMCcsIHJsOiAnJ3wncid8J2wnfCdyaWdodCd8J2xlZnQnID0gJycpOiBzdHJpbmcgPT4ge1xyXG5cdGlmICghKHZhbHVlID0gX3N0cih2YWx1ZSkpIHx8ICEoKGNoYXJzID0gX3N0cihjaGFycykpKSkgcmV0dXJuIHZhbHVlO1xyXG5cdGNoYXJzID0gY2hhcnMucmVwbGFjZSgvXFx7ZGVmYXVsdFxcfS8sICcgXFxyXFxuXFx0XFxmXFx2XFx4MDAnKTtcclxuXHRsZXQgdHJpbV9jaGFyczogc3RyaW5nW10gPSBbXSwgZDEgPSAwLCBkMiA9IDA7XHJcblx0Zm9yIChjb25zdCB2IG9mIFsuLi5uZXcgU2V0KFsuLi5jaGFyc10pXSl7XHJcblx0XHRpZiAoIXYpIGNvbnRpbnVlO1xyXG5cdFx0aWYgKHYgPT09ICctJyl7XHJcblx0XHRcdGQxID0gMTtcclxuXHRcdFx0Y29udGludWU7XHJcblx0XHR9XHJcblx0XHRpZiAodiA9PT0gJ18nKXtcclxuXHRcdFx0ZDIgPSAxO1xyXG5cdFx0XHRjb250aW51ZTtcclxuXHRcdH1cclxuXHRcdHRyaW1fY2hhcnMucHVzaCh2KTtcclxuXHR9XHJcblx0aWYgKGQyKSB0cmltX2NoYXJzLnVuc2hpZnQoJ18nKTtcclxuXHRpZiAoZDEpIHRyaW1fY2hhcnMudW5zaGlmdCgnLScpO1xyXG5cdGxldCBwID0gYFske19yZWdFc2NhcGUodHJpbV9jaGFycy5qb2luKCcnKSl9XSpgLCBwYXR0ZXJuID0gYF4ke3B9fCR7cH0kYDtcclxuXHRpZiAoWydsJywgJ2xlZnQnXS5pbmNsdWRlcyhybCkpIHBhdHRlcm4gPSBgXiR7cH1gO1xyXG5cdGVsc2UgaWYgKFsncicsICdyaWdodCddLmluY2x1ZGVzKHJsKSkgcGF0dGVybiA9IGAke3B9JGA7XHJcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cChwYXR0ZXJuLCAnZ3MnKSwgJycpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlZ2V4IHN0cmluZyB0cmltIGxlYWRpbmcgY2hhcmFjdGVycyAobGVmdClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSBUcmltIHZhbHVlXHJcbiAqIEBwYXJhbSBjaGFycyBTdHJpcCBjaGFyYWN0ZXJzIFtkZWZhdWx0OiBgJyBcXG5cXHJcXHRcXGZcXHZcXHgwMCdgXSAtIHVzZSBgJ3tkZWZhdWx0fSdgIHRvIGluY2x1ZGUgZGVmYXVsdHMgKGkuZSBgJy17ZGVmYXVsdHN9J2AgPT0gYCctIFxcblxcclxcdFxcZlxcdlxceDAwJ2ApXHJcbiAqIEByZXR1cm5zIGxlZnQgdHJpbW1lZCBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9sdHJpbSA9ICh2YWx1ZTogYW55LCBjaGFyczogc3RyaW5nID0gJyBcXHJcXG5cXHRcXGZcXHZcXHgwMCcpOiBzdHJpbmcgPT4gX3RyaW0odmFsdWUsIGNoYXJzLCAnbGVmdCcpO1xyXG5cclxuLyoqXHJcbiAqIFJlZ2V4IHN0cmluZyB0cmltIHRyYWlsaW5nIGNoYXJhY3RlcnMgKHJpZ2h0KVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIFRyaW0gdmFsdWVcclxuICogQHBhcmFtIGNoYXJzIFN0cmlwIGNoYXJhY3RlcnMgW2RlZmF1bHQ6IGAnIFxcblxcclxcdFxcZlxcdlxceDAwJ2BdIC0gdXNlIGAne2RlZmF1bHR9J2AgdG8gaW5jbHVkZSBkZWZhdWx0cyAoaS5lIGAnLXtkZWZhdWx0c30nYCA9PSBgJy0gXFxuXFxyXFx0XFxmXFx2XFx4MDAnYClcclxuICogQHJldHVybnMgcmlnaHQgdHJpbW1lZCBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9ydHJpbSA9ICh2YWx1ZTogYW55LCBjaGFyczogc3RyaW5nID0gJyBcXHJcXG5cXHRcXGZcXHZcXHgwMCcpOiBzdHJpbmcgPT4gX3RyaW0odmFsdWUsIGNoYXJzLCAncmlnaHQnKTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHN0cmluZyB0byB0aXRsZSBjYXNlIChpLmUuIFwiaGVMTG8gd29SbGRcIiA9PiBcIkhlbGxvIFdvcmxkXCIpXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgIFBhcnNlIHN0cmluZ1xyXG4gKiBAcGFyYW0ga2VlcENhc2UgIERpc2FibGUgbG93ZXJjYXNpbmcgdW5jYXBpdGFsaXplZCBjaGFyYWN0ZXJzXHJcbiAqIEByZXR1cm5zIFRpdGxlIENhc2UgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdG9UaXRsZUNhc2UgPSAodmFsdWU6IGFueSwga2VlcENhc2U6IGJvb2wgPSBmYWxzZSk6IHN0cmluZyA9PiBfc3RyKHZhbHVlKVxyXG4ucmVwbGFjZSgvXFx3XFxTKi9nLCBtYXRjaCA9PiBtYXRjaFswXS50b1VwcGVyQ2FzZSgpXHJcbisgKGtlZXBDYXNlID8gbWF0Y2guc3Vic3RyaW5nKDEpIDogbWF0Y2guc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCkpKTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHN0cmluZyB0byBzZW50ZW5jZSBjYXNlXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgIFBhcnNlIHN0cmluZ1xyXG4gKiBAcGFyYW0ga2VlcENhc2UgIERpc2FibGUgbG93ZXJjYXNpbmcgdW5jYXBpdGFsaXplZCBjaGFyYWN0ZXJzXHJcbiAqIEByZXR1cm5zIFNlbnRlbmNlIGNhc2UgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdG9TZW50ZW5jZUNhc2UgPSAodmFsdWU6IGFueSwga2VlcENhc2U6IGJvb2wgPSBmYWxzZSk6IHN0cmluZyA9PiB7XHJcblx0bGV0IGJ1ZmZlcjogc3RyaW5nID0gJyc7XHJcblx0Zm9yIChsZXQgdmFsIG9mIF9zdHIodmFsdWUpLnNwbGl0KC8oKD86XFwufFxcP3whKVxccyopLykpe1xyXG5cdFx0aWYgKHZhbC5sZW5ndGgpe1xyXG5cdFx0XHRjb25zdCBmaXJzdCA9IHZhbC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTtcclxuXHRcdFx0Y29uc3QgcmVzdCA9IHZhbC5sZW5ndGggPiAxID8gdmFsLnNsaWNlKDEpIDogJyc7XHJcblx0XHRcdHZhbCA9IGZpcnN0ICsgKGtlZXBDYXNlID8gcmVzdCA6IHJlc3QudG9Mb3dlckNhc2UoKSk7XHJcblx0XHR9XHJcblx0XHRidWZmZXIgKz0gdmFsO1xyXG5cdH1cclxuXHRyZXR1cm4gYnVmZmVyO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgdmFsdWUgdG8gc25ha2UgY2FzZSAoaS5lLiAnSGVsbG9Xb3JsZCcgPT4gJ2hlbGxvX3dvcmxkJylcclxuICogLSBhY2NlbnRzIGFyZSBub3JtYWxpemVkIChpLmUuIFwiVGVzdCBBbcOpbGllXCIgPT4gXCJ0ZXN0X2FtZWxpZVwiKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlICBQYXJzZSBzdHJpbmdcclxuICogQHBhcmFtIHRyaW1UcmFpbGluZyAgVHJpbSB0cmFpbGluZyBcIl9cIiAoYGZhbHNlYCA9IChkZWZhdWx0KSBkaXNhYmxlZCwgYHRydWVgID0+IHRyaW0gcmlnaHQgJiBsZWZ0LCBgJ3InfCdyaWdodCdgID0+IHRyaW0gcmlnaHQsIGAnbCd8J2xlZnQnYCA9PiB0cmltIGxlZnQpXHJcbiAqIEByZXR1cm5zIHNuYWtlX2Nhc2UgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdG9TbmFrZUNhc2UgPSAodmFsdWU6IGFueSwgdHJpbVRyYWlsaW5nOiBib29sZWFufCdsJ3wnbGVmdCd8J3InfCdyaWdodCcgPSBmYWxzZSk6IHN0cmluZyA9PiB7XHJcblx0bGV0IHJlcyA9IF9zdHJOb3JtKF90cmltKHZhbHVlKSlcclxuXHQucmVwbGFjZSgvW0EtWl0rL2csIG0gPT4gbVswXS50b1VwcGVyQ2FzZSgpICsgbS5zdWJzdHJpbmcoMSkudG9Mb3dlckNhc2UoKSlcclxuXHQucmVwbGFjZSgvXFxXKy9nLCAnICcpXHJcblx0LnNwbGl0KC8gfFxcQig/PVtBLVpdKS8pLmpvaW4oJ18nKS5yZXBsYWNlKC9fKy9nLCAnXycpLnRvTG93ZXJDYXNlKCk7XHJcblx0aWYgKHJlcyA9PT0gJ18nKSByZXR1cm4gJyc7XHJcblx0aWYgKC9eX3xfJC8udGVzdChyZXMpICYmIHRyaW1UcmFpbGluZykgcmVzID0gX3RyaW0ocmVzLCAnXycsIChbJ2wnLCdsZWZ0JywncicsJ3JpZ2h0J10uaW5jbHVkZXModHJpbVRyYWlsaW5nIGFzIGFueSkgPyB0cmltVHJhaWxpbmcgOiAnJykgYXMgYW55KTtcclxuXHRyZXR1cm4gcmVzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgdmFsdWUgdG8gc2x1ZyBjYXNlIChpLmUuICdIZWxsb1dvcmxkJyA9PiAnaGVsbG8td29ybGQnKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlICBQYXJzZSBzdHJpbmdcclxuICogQHJldHVybnMgc2x1Zy1jYXNlIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RvU2x1Z0Nhc2UgPSAodmFsdWU6IGFueSwgdHJpbVRyYWlsaW5nOiBib29sZWFufCdsJ3wnbGVmdCd8J3InfCdyaWdodCcgPSBmYWxzZSk6IHN0cmluZyA9PiBfdG9TbmFrZUNhc2UodmFsdWUsIHRyaW1UcmFpbGluZykucmVwbGFjZSgvXy9nLCAnLScpO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgdmFsdWUgdG8gc3R1ZGx5IGNhc2UgKGkuZS4gJ2hlbGxvLXdvcmxkJyA9PiAnSGVsbG9Xb3JsZCcpXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgIFBhcnNlIHN0cmluZ1xyXG4gKiBAcmV0dXJucyBTdHVkbHlDYXNlIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RvU3R1ZGx5Q2FzZSA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IHtcclxuXHRsZXQgYnVmZmVyOiBzdHJpbmcgPSAnJztcclxuXHRmb3IgKGNvbnN0IHdvcmQgb2YgX3RvU25ha2VDYXNlKHZhbHVlKS5zcGxpdCgnXycpKXtcclxuXHRcdGlmICghd29yZC5sZW5ndGgpIGNvbnRpbnVlO1xyXG5cdFx0YnVmZmVyICs9IHdvcmRbMF0udG9VcHBlckNhc2UoKSArIHdvcmQuc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCk7XHJcblx0fVxyXG5cdHJldHVybiBidWZmZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCB2YWx1ZSB0byBjYW1lbCBjYXNlIChpLmUuICdoZWxsby13b3JsZCcgPT4gJ2hlbGxvV29ybGQnKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlICBQYXJzZSBzdHJpbmdcclxuICogQHJldHVybnMgY2FtZWxDYXNlIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RvQ2FtZWxDYXNlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGxldCByZXMgPSBfdG9TdHVkbHlDYXNlKHZhbHVlKTtcclxuXHRpZiAocmVzLmxlbmd0aCkgcmVzID0gcmVzWzBdLnRvTG93ZXJDYXNlKCkgKyByZXMuc3Vic3RyaW5nKDEpO1xyXG5cdHJldHVybiByZXM7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCB2YWx1ZSB0byBsb3dlciBjYXNlIHN0aW5nXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWVcclxuICogQHJldHVybnMgbG93ZXJjYXNlIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RvTG93ZXJDYXNlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4gX3N0cih2YWx1ZSkudG9Mb3dlckNhc2UoKTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHZhbHVlIHRvIGxvd2VyIGNhc2Ugc3RpbmdcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBVUFBFUkNBU0UgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdG9VcHBlckNhc2UgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiBfc3RyKHZhbHVlKS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIHRleHQgdmFsdWUgaGFzaCBjb2RlXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfaGFzaENvZGUoJ0hlbGxvIHdvcmxkIScpID0+IC01Mjk2NjkxNVxyXG4gKiBfaGFzaENvZGUoJ0hlbGxvJykgPT4gNjk2MDk2NTBcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHRleHQgdmFsdWVcclxuICogQHJldHVybnMgYG51bWJlcmAgfiBoYXNoIGNvZGUgfCBgMGAgd2hlbiBibGFua1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9oYXNoQ29kZSA9ICh2YWx1ZTogYW55KTogbnVtYmVyID0+IHtcclxuICBsZXQgaGFzaCA9IDA7XHJcbiAgaWYgKCEodmFsdWUgPSBfc3RyKHZhbHVlKSkpIHJldHVybiBoYXNoO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpICsrKXtcclxuICAgIGxldCBjaHIgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpO1xyXG4gICAgaGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgY2hyO1xyXG4gICAgaGFzaCB8PSAwOyAvL0NvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxyXG4gIH1cclxuICByZXR1cm4gaGFzaDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSB0ZXh0IHZhbHVlIGhhc2ggY29kZSBpbiBgc3RyaW5nYCBmb3JtYXQgfiB1c2VzIGBfaGFzaENvZGUodmFsdWUpYCBidXQgcHJlcGVuZHMgYCduJ2Agd2hlbiByZXN1bHQgbnVtYmVyIGlzIG5lZ2F0aXZlIGFuZCBgJ3gnYCB3aGVuIHBvc2l0aXZlXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfaGFzaENvZGVTdHIoJ0hlbGxvIHdvcmxkIScpID0+ICduNTI5NjY5MTUnXHJcbiAqIF9oYXNoQ29kZVN0cignSGVsbG8nKSA9PiAneDY5NjA5NjUwJ1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdGV4dCB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB+IGhhcyBjb2RlIHRleHRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaGFzaENvZGVTdHIgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgY29kZTogc3RyaW5nID0gX2hhc2hDb2RlKHZhbHVlKSArICcnLCByZSA9IC9eLS87XHJcblx0cmV0dXJuIHJlLnRlc3QoY29kZSkgPyBjb2RlLnJlcGxhY2UocmUsICduJykgOiAneCcgKyBjb2RlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIHRleHQgdmFsdWUgaGFzaCBjb2RlIHVzaW5nIGhhc2g1M1xyXG4gKiAtIEEgc2ltcGxlIGJ1dCBoaWdoIHF1YWxpdHkgNTMtYml0IHN0cmluZyBoYXNoIGdlbmVyYXRvclxyXG4gKiAtIEJhc2VkIG9uIGBjeXJiNTNgIHNjcmlwdCBieSBgYnJ5Y2AgKGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MjE3MTQ4MC8zNzM1NTc2KVxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX2hhc2g1MygnSGVsbG8gd29ybGQhJykgPT4gNTIxMTAyNDEyMTM3MTIzMlxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdGV4dCB2YWx1ZVxyXG4gKiBAcGFyYW0gc2VlZCAtIGhhc2ggZW50cm9weSBzZWVkXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgIH4gNTMtYml0IGhhc2ggY29kZSAobGVuZ3RoPTE2KSB8IGAwYCB3aGVuIGJsYW5rXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2hhc2g1MyA9ICh2YWx1ZTogYW55LCBzZWVkOiBudW1iZXIgPSAwKTogbnVtYmVyID0+IHtcclxuXHRpZiAoISh2YWx1ZSA9IF9zdHIodmFsdWUpKSkgcmV0dXJuIDA7XHJcblx0aWYgKGlzTmFOKHNlZWQpKSBzZWVkID0gMDtcclxuXHRsZXQgaDEgPSAweGRlYWRiZWVmIF4gc2VlZCwgaDIgPSAweDQxYzZjZTU3IF4gc2VlZDtcclxuXHRmb3IgKGxldCBpID0gMCwgY2g7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKyl7XHJcblx0XHRjaCA9IHZhbHVlLmNoYXJDb2RlQXQoaSk7XHJcblx0XHRoMSA9IE1hdGguaW11bChoMSBeIGNoLCAyNjU0NDM1NzYxKTtcclxuXHRcdGgyID0gTWF0aC5pbXVsKGgyIF4gY2gsIDE1OTczMzQ2NzcpO1xyXG5cdH1cclxuXHRoMSA9IE1hdGguaW11bChoMSBeIChoMSA+Pj4gMTYpLCAyMjQ2ODIyNTA3KSBeIE1hdGguaW11bChoMiBeIChoMiA+Pj4gMTMpLCAzMjY2NDg5OTA5KTtcclxuXHRoMiA9IE1hdGguaW11bChoMiBeIChoMiA+Pj4gMTYpLCAyMjQ2ODIyNTA3KSBeIE1hdGguaW11bChoMSBeIChoMSA+Pj4gMTMpLCAzMjY2NDg5OTA5KTtcclxuXHRyZXR1cm4gNDI5NDk2NzI5NiAqICgyMDk3MTUxICYgaDIpICsgKGgxID4+PiAwKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZWQgZGF0YSBVUkkgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhVXJpIHtcclxuXHRtaW1lOiBzdHJpbmc7XHJcblx0ZW5jb2Rpbmc6IHN0cmluZztcclxuXHRjaGFyc2V0OiBzdHJpbmc7XHJcblx0ZGF0YTogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogUGFyc2UgZGF0YSBVUkkgKHVuaWZvcm0gcmVzb3VyY2UgaWRlbnRpZmllcilcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9wYXJzZURhdGFVcmkoJ2RhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04LEhlbGxvJTIwd29ybGQlMjEnKSA9PiB7XHJcbiAqICAgbWltZTogJ3RleHQvcGxhaW4nLFxyXG4gKiAgIGVuY29kaW5nOiAnY2hhcnNldD11dGYtOCcsXHJcbiAqICAgY2hhcnNldDogJ3V0Zi04JyxcclxuICogICBkYXRhOiAnSGVsbG8lMjB3b3JsZCUyMScsXHJcbiAqIH1cclxuICogX3BhcnNlRGF0YVVyaSgnZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwvOWovNEFBUVNrWkpSZ0FCQWdBQVpBQmtBQUQnKSA9PiB7XHJcbiAqICAgbWltZTogJ2ltYWdlL2pwZWcnLFxyXG4gKiAgIGVuY29kaW5nOiAnYmFzZTY0JyxcclxuICogICBjaGFyc2V0OiAnJyxcclxuICogICBkYXRhOiAnLzlqLzRBQVFTa1pKUmdBQkFnQUFaQUJrQUFEJyxcclxuICogfVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0YSB1cmkgdmFsdWVcclxuICogQHJldHVybnNcclxuICogLSBgSURhdGFVcmlgIH4gYHttaW1lOnN0cmluZztlbmNvZGluZzpzdHJpbmc7Y2hhcnNldDpzdHJpbmc7ZGF0YTpzdHJpbmd9YFxyXG4gKiAtIGB1bmRlZmluZWRgIG9uIGVycm9yXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3BhcnNlRGF0YVVyaSA9ICh2YWx1ZTogYW55KTogSURhdGFVcml8dW5kZWZpbmVkID0+IHtcclxuXHRpZiAoISh2YWx1ZSA9IF9zdHIodmFsdWUsIHRydWUpKSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHRjb25zdCByZSA9IC9kYXRhOig/PG1pbWU+W1xcdy9cXC1cXC5dKyk7KD88ZW5jb2Rpbmc+KGNoYXJzZXQ9KT8oW14sXSspKSwoPzxkYXRhPlteXFxzXSspLztcclxuXHRjb25zdCByZXM6IFJlZ0V4cEV4ZWNBcnJheXxudWxsID0gcmUuZXhlYyh2YWx1ZSk7XHJcblx0aWYgKCFyZXMpIHJldHVybiB1bmRlZmluZWQ7XHJcblx0cmV0dXJuIHtcclxuXHRcdG1pbWU6IHJlc1sxXSxcclxuXHRcdGVuY29kaW5nOiByZXNbMl0sXHJcblx0XHRjaGFyc2V0OiByZXNbM10gJiYgcmVzWzRdIHx8ICcnLFxyXG5cdFx0ZGF0YTogcmVzWzVdLFxyXG5cdH07XHJcbn07XHJcblxyXG4vKipcclxuICogVmFsaWRhdGUgVVJMIGBzdHJpbmdgICh1bmlmb3JtIHJlc291cmNlIGxvY2F0b3IpXHJcbiAqIC0gaW5jbHVkZXMgSVAgKHY0KSBhZGRyZXNzZXNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHVybCBgc3RyaW5nYCB2YWx1ZVxyXG4gKiBAcGFyYW0gbWF0Y2hEYXRhVVJJIC0gdmFsaWRhdGlvbiBpbmNsdWRlcyBkYXRhIFVSSSAoaS5lLiAnZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwvOWovNEFBUVNrWkpSZ0FCQWdBQVpBQmtBQUQnKVxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmAgLSB2YWxpZCB1cmxcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaXNVcmwgPSAodmFsdWU6IGFueSwgbWF0Y2hEYXRhVVJJOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuID0+IHtcclxuXHRpZiAoISh2YWx1ZSAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbHVlICYmIHZhbHVlLnRyaW0oKSkpIHJldHVybiBmYWxzZTtcclxuXHRpZiAobWF0Y2hEYXRhVVJJICYmIF9wYXJzZURhdGFVcmkodmFsdWUpKSByZXR1cm4gdHJ1ZTtcclxuXHRjb25zdCBwYXR0ZXJuID0gJ14oaHR0cHM/OlxcXFwvXFxcXC8pPycgIC8vIHByb3RvY29sXHJcblx0KyAnKCgoW2EtelxcXFxkXShbYS16XFxcXGQtXSpbYS16XFxcXGRdKSopXFxcXC4/KStbYS16XXsyLH18JyAgLy8gZG9tYWluIG5hbWVcclxuXHQrICcoKFxcXFxkezEsM31cXFxcLil7M31cXFxcZHsxLDN9KSknICAvLyBvciBJUCAodjQpIGFkZHJlc3NcclxuXHQrICcoXFxcXDpcXFxcZCspPyhcXFxcL1stYS16XFxcXGQlXy5+K10qKSonICAvLyBwb3J0IGFuZCBwYXRoXHJcblx0KyAnKFxcXFw/WzsmYS16XFxcXGQlXy5+Kz0tXSopPycgLy8gcXVlcnkgc3RyaW5nXHJcblx0KyAnKFxcXFwjWy1hLXpcXFxcZF9dKik/JCc7IC8vIGZyYWdtZW50IGxvY2F0b3JcclxuXHRyZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCAnaScpLnRlc3QodmFsdWUpO1xyXG59XHJcbi8vUkVGOiAoeXVwIHVybCB2YWxpZGF0aW9uIHJlZ2V4KVxyXG4vL2xldCByVXJsID0gL14oKGh0dHBzP3xmdHApOik/XFwvXFwvKCgoKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDopKkApPygoKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSlcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pXFwuKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKSl8KCgoW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkqKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKVxcLikrKChbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkqKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpXFwuPykoOlxcZCopPykoXFwvKCgoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OnxAKSsoXFwvKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApKikqKT8pPyhcXD8oKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApfFtcXHVFMDAwLVxcdUY4RkZdfFxcL3xcXD8pKik/KFxcIygoKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDp8QCl8XFwvfFxcPykqKT8kL2k7XHJcblxyXG4vKipcclxuICogVmFsaWRhdGUgZW1haWwgYWRkcmVzcyBgc3RyaW5nYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9pc0VtYWlsID0gKHZhbHVlOiBhbnkpOiBib29sZWFuID0+IHtcclxuXHRpZiAoISh2YWx1ZSAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbHVlICYmIHZhbHVlLnRyaW0oKSkpIHJldHVybiBmYWxzZTtcclxuXHRyZXR1cm4gL14oKFtePD4oKVtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVtcXF1cXFxcLiw7Olxcc0BcIl0rKSopfC4oXCIuK1wiKSlAKChcXFtbMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFxdKXwoKFthLXpBLVpcXC0wLTldK1xcLikrW2EtekEtWl17Mix9KSkkLy50ZXN0KHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xyXG59O1xyXG4vL1JFRjogKHl1cCBlbWFpbCB2YWxpZGF0aW9uIHJlZ2V4KVxyXG4vLyBsZXQgckVtYWlsID0gL15bYS16QS1aMC05LiEjJCUmJyorXFwvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlxcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC87XHJcblxyXG4vKipcclxuICogUGFyc2UgY3N2IGRhdGEgaW50byAyZCBzdHJpbmcgYXJyYXlcclxuICogXHJcbiAqIEBwYXJhbSB0ZXh0IC0gcGFyc2UgdGV4dFxyXG4gKiBAcGFyYW0gZGVsaW1pdGVyIC0gZGVsaW1pdGVyIGNoYXJhY3RlciAoZGVmYXVsdDogYCcsJ2ApXHJcbiAqIEBwYXJhbSBiciAtIG5ldyBsaW5lIChkZWZhdWx0OiBgJ1xcbidgKVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nW11bXWAgfiBgW1suLi5jb2xzXSwgLi4ucm93c11gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3BhcnNlQ3N2ID0gKHRleHQ6IHN0cmluZywgZGVsaW1pdGVyPzogc3RyaW5nLCBicj86IHN0cmluZyk6IHN0cmluZ1tdW10gPT4ge1xyXG5cdGNvbnN0IG5fc2VwID0gJ1xceDFEJzsgY29uc3Qgbl9zZXBfcmUgPSBuZXcgUmVnRXhwKG5fc2VwLCAnZycpO1xyXG5cdGNvbnN0IHFfc2VwID0gJ1xceDFFJzsgY29uc3QgcV9zZXBfcmUgPSBuZXcgUmVnRXhwKHFfc2VwLCAnZycpO1xyXG5cdGNvbnN0IGNfc2VwID0gJ1xceDFGJzsgY29uc3QgY19zZXBfcmUgPSBuZXcgUmVnRXhwKGNfc2VwLCAnZycpO1xyXG5cdGNvbnN0IGRlbGltOiBzdHJpbmcgPSAoZGVsaW1pdGVyID0gX3N0cihkZWxpbWl0ZXIsIHRydWUpKS5sZW5ndGggPT09IDEgPyBkZWxpbWl0ZXIgOiAnLCc7XHJcblx0Y29uc3QgZmllbGRfcmUgPSBuZXcgUmVnRXhwKCcoXnxbJyArIGRlbGltICsgJ1xcXFxuXSlcIihbXlwiXSooPzpcIlwiW15cIl0qKSopXCIoPz0oJHxbJyArIGRlbGltICsgJ1xcXFxuXSkpJywgJ2cnKTtcclxuXHRjb25zdCBsaW5lczogc3RyaW5nW10gPSBfc3RyKHRleHQsIHRydWUpXHJcblx0LnJlcGxhY2UoL1xcci9nLCAnJylcclxuXHQucmVwbGFjZSgvXFxuKyQvLCAnJylcclxuXHQucmVwbGFjZShmaWVsZF9yZSwgKF86IHN0cmluZywgcDE6IHN0cmluZywgcDI6IHN0cmluZykgPT4gcDEgKyBwMi5yZXBsYWNlKC9cXG4vZywgbl9zZXApLnJlcGxhY2UoL1wiXCIvZywgcV9zZXApLnJlcGxhY2UoLywvZywgY19zZXApKVxyXG5cdC5zcGxpdCgvXFxuLyk7XHJcblx0Y29uc3Qgcm93czogc3RyaW5nW11bXSA9IFtdO1xyXG5cdGZvciAoY29uc3QgbGluZSBvZiBsaW5lcyl7XHJcblx0XHRpZiAoIWxpbmUubGVuZ3RoKSBjb250aW51ZTtcclxuXHRcdGNvbnN0IHJvdzogc3RyaW5nW10gPSBbXTtcclxuXHRcdGZvciAoY29uc3QgY2VsbCBvZiBsaW5lLnNwbGl0KGRlbGltKSl7XHJcblx0XHRcdHJvdy5wdXNoKGNlbGwucmVwbGFjZShuX3NlcF9yZSwgYnIgPz8gJ1xcbicpLnJlcGxhY2UocV9zZXBfcmUsICdcIicpLnJlcGxhY2UoY19zZXBfcmUsICcsJykpO1xyXG5cdFx0fVxyXG5cdFx0cm93cy5wdXNoKHJvdyk7XHJcblx0fVxyXG5cdHJldHVybiByb3dzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgZGF0YSB0byBjc3YgdGV4dFxyXG4gKiBcclxuICogQHBhcmFtIGRhdGEgLSBwYXJzZSBkYXRhXHJcbiAqIEBwYXJhbSBkZWxpbWl0ZXIgLSBkZWxpbWl0ZXIgY2hhcmFjdGVyIChkZWZhdWx0OiBgJywnYClcclxuICogQHBhcmFtIGJyIC0gbmV3IGxpbmUgcmVwbGFjZSAoZGVmYXVsdDogYCdcXG4nYClcclxuICogQHJldHVybnMgYHN0cmluZ2AgY3N2IHRleHRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdG9Dc3YgPSAoZGF0YTogc3RyaW5nfHN0cmluZ1tdfHN0cmluZ1tdW10sIGRlbGltaXRlcj86IHN0cmluZywgYnI/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG5cdGNvbnN0IGRlbGltOiBzdHJpbmcgPSAoZGVsaW1pdGVyID0gX3N0cihkZWxpbWl0ZXIsIHRydWUpKS5sZW5ndGggPT09IDEgPyBkZWxpbWl0ZXIgOiAnLCc7XHJcblx0Y29uc3Qgcm93czogc3RyaW5nW11bXSA9IFtdO1xyXG5cdGNvbnN0IF9jZWxsID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdFx0bGV0IHZhbDogc3RyaW5nID0gX3N0cih2YWx1ZSk7XHJcblx0XHRpZiAoIXZhbC5sZW5ndGgpIHJldHVybiB2YWw7XHJcblx0XHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBiciAmJiB2YWwuaW5kZXhPZihicikgPiAtMSAmJiBiciAhPT0gJ1xcbicpIHZhbCA9IHZhbC5yZXBsYWNlKG5ldyBSZWdFeHAoYnIsICdnJyksICdcXG4nKTtcclxuXHRcdHZhbCA9IHZhbC5yZXBsYWNlKC9cXHIvZywgJycpLnJlcGxhY2UoL1xcbiskLywgJycpLnJlcGxhY2UoL1wiL2csICdcIlwiJyk7XHJcblx0XHRpZiAodmFsLmluZGV4T2YoZGVsaW0pID4gLTEgfHwgdmFsLmluZGV4T2YoJ1wiJykgPiAtMSB8fCB2YWwuaW5kZXhPZignXFxuJykgPiAtMSB8fCAvXlxccyt8XFxzKyQvLnRlc3QodmFsKSkgdmFsID0gYFwiJHt2YWx9XCJgO1xyXG5cdFx0cmV0dXJuIHZhbDtcclxuXHR9O1xyXG5cdGlmIChkYXRhICYmICdvYmplY3QnID09PSB0eXBlb2YgZGF0YSAmJiBkYXRhW1N5bWJvbC5pdGVyYXRvcl0pe1xyXG5cdFx0Y29uc3QgaXRlcmFibGVzOiBhbnlbXSA9IFtdLCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKFsuLi5kYXRhXSk7XHJcblx0XHRmb3IgKGNvbnN0IHYgb2YgdmFsdWVzKXtcclxuXHRcdFx0aWYgKCdvYmplY3QnID09PSB0eXBlb2YgdiAmJiB2W1N5bWJvbC5pdGVyYXRvcl0pIGl0ZXJhYmxlcy5wdXNoKHYpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGl0ZXJhYmxlcy5sZW5ndGgpe1xyXG5cdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZXMpe1xyXG5cdFx0XHRcdGNvbnN0IHZfcm93OiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0XHRcdGZvciAoY29uc3QgY2VsbCBvZiB2YWwpe1xyXG5cdFx0XHRcdFx0dl9yb3cucHVzaChfY2VsbChjZWxsIGFzIGFueSkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyb3dzLnB1c2godl9yb3cpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0Y29uc3Qgdl9yb3c6IHN0cmluZ1tdID0gW107XHJcblx0XHRcdGZvciAoY29uc3QgdmFsIG9mIHZhbHVlcyl7XHJcblx0XHRcdFx0dl9yb3cucHVzaChfY2VsbCh2YWwgYXMgYW55KSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cm93cy5wdXNoKHZfcm93KTtcclxuXHRcdH1cclxuXHR9XHJcblx0ZWxzZSBpZiAoZGF0YSA9IF9zdHIoZGF0YSwgdHJ1ZSkpe1xyXG5cdFx0Y29uc3QgZGF0YV9yb3dzOiBzdHJpbmdbXVtdID0gX3BhcnNlQ3N2KGRhdGEsIGRlbGltLCBicik7XHJcblx0XHRmb3IgKGNvbnN0IGRhdGFfcm93IG9mIGRhdGFfcm93cyl7XHJcblx0XHRcdGNvbnN0IGRfcm93OiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiBkYXRhX3Jvdyl7XHJcblx0XHRcdFx0ZF9yb3cucHVzaChfY2VsbCh2YWwpKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyb3dzLnB1c2goZF9yb3cpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRsZXQgY3N2OiBzdHJpbmcgPSAnJywgZGl2ID0gMDtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpICsrKXtcclxuXHRcdGNvbnN0IGxpbmU6IHN0cmluZyA9IHJvd3NbaV0uam9pbihkZWxpbSkudHJpbSgpO1xyXG5cdFx0aWYgKCFsaW5lKSBjb250aW51ZTtcclxuXHRcdGlmICghZGl2KXtcclxuXHRcdFx0ZGl2ID0gMTtcclxuXHRcdFx0Y3N2ICs9IGxpbmU7XHJcblx0XHR9XHJcblx0XHRlbHNlIGNzdiArPSAnXFxuJyArIGxpbmU7XHJcblx0fVxyXG5cdHJldHVybiBjc3Y7XHJcbn07XHJcblxyXG4vKipcclxuICogU3BsaXQgYHN0cmluZ2AgdmFsdWUgaW50byBwYXJ0cyB+IHBhcnQgYW5kIHNlcGFyYXRvciBhcnJheSAobGFzdCBlbnRyeSdzIHNlcGFyYXRvciBpcyBgJydgKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gc3BsaXQgc3RyaW5nXHJcbiAqIEBwYXJhbSBzZXBhcmF0b3IgLSBzcGxpdCBzZXBhcmF0b3IgKGRlZmF1bHQ6IGB1bmRlZmluZWRgKVxyXG4gKiBAcGFyYW0gbGltaXQgLSBzcGxpdCBpdGVtcyBsaW1pdC9jb3VudCAoZGVmYXVsdDogYHVuZGVmaW5lZGApXHJcbiAqIEByZXR1cm5zIGBbcGFydDogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyB8ICcnXVtdYCBzcGxpdCBwYXJ0c1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0ICBfc3BsaXQgPSAodmFsdWU6IGFueSwgc2VwYXJhdG9yPzogc3RyaW5nfFJlZ0V4cCwgbGltaXQ/OiBudW1iZXIpOiBbcGFydDogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyB8ICcnXVtdID0+IHtcclxuXHRsZXQgdmFsID0gX3N0cih2YWx1ZSk7XHJcblx0bGV0IHJlOiBSZWdFeHB8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHNlcGFyYXRvcikgcmUgPSBuZXcgUmVnRXhwKF9yZWdFc2NhcGUoX3N0cihzZXBhcmF0b3IpKSk7XHJcblx0ZWxzZSBpZiAoc2VwYXJhdG9yIGluc3RhbmNlb2YgUmVnRXhwKSByZSA9IHNlcGFyYXRvcjtcclxuXHRpZiAocmUpIHJlID0gbmV3IFJlZ0V4cChyZSwgWy4uLm5ldyBTZXQoKCdnJyArIHJlLmZsYWdzKS5zcGxpdCgnJykpXS5qb2luKCcnKSk7XHJcblx0bGltaXQgPSBsaW1pdCAmJiAhaXNOYU4obGltaXQgPSBwYXJzZUludChsaW1pdCArICcnKSkgJiYgbGltaXQgPj0gMCA/IGxpbWl0IDogdW5kZWZpbmVkO1xyXG5cdGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IHJlID8gdmFsLnNwbGl0KHJlLCBsaW1pdCkgOiB2YWwuc3BsaXQodW5kZWZpbmVkIGFzIGFueSwgbGltaXQpO1xyXG5cdGNvbnN0IG1hdGNoZXM6IHN0cmluZ1tdID0gcmUgPyB2YWwubWF0Y2gocmUpIHx8IFtdIDogdmFsLm1hdGNoKHVuZGVmaW5lZCBhcyBhbnkpIHx8IFtdO1xyXG5cdGNvbnN0IGl0ZW1zOiBbcGFydDogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyB8ICcnXVtdID0gW107XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0Y29uc3QgcGFydDogc3RyaW5nID0gcGFydHNbaV07XHJcblx0XHRjb25zdCBzZXBhcmF0b3I6IHN0cmluZyA9IG1hdGNoZXNbaV0gPz8gJyc7XHJcblx0XHRpdGVtcy5wdXNoKFtwYXJ0LCBzZXBhcmF0b3JdKTtcclxuXHR9XHJcblx0cmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBlcnJvciB0ZXh0XHJcbiAqIFxyXG4gKiBAcGFyYW0gZXJyb3IgLSBwYXJzZSBlcnJvciB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9lcnJvclRleHQgPSAoZXJyb3I6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgZXJyb3JzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHt9O1xyXG5cdGNvbnN0IF9wYXJzZSA9IChpdGVtOiBhbnkpOiB2b2lkID0+IHtcclxuXHRcdGlmICghKCdvYmplY3QnID09PSB0eXBlb2YgaXRlbSAmJiBpdGVtKSl7XHJcblx0XHRcdGNvbnN0IHZhbCA9IF9zdHIoaXRlbSwgdHJ1ZSk7XHJcblx0XHRcdGlmICh2YWwpIGVycm9yc1t2YWwudG9Mb3dlckNhc2UoKV0gPSB2YWw7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKXtcclxuXHRcdFx0Zm9yIChjb25zdCB2YWwgb2YgaXRlbSkgX3BhcnNlKHZhbCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGlmIChpdGVtIGluc3RhbmNlb2YgRXJyb3Ipe1xyXG5cdFx0XHRsZXQgbmFtZTogc3RyaW5nID0gX3N0cihlcnJvci5uYW1lLCB0cnVlKTtcclxuXHRcdFx0aWYgKFsnRXJyb3InLCAnVHlwZUVycm9yJ10uaW5jbHVkZXMobmFtZSkpIG5hbWUgPSAnJztcclxuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IF9zdHIoZXJyb3IubWVzc2FnZSwgdHJ1ZSk7XHJcblx0XHRcdGNvbnN0IHZhbCA9IG1lc3NhZ2UgPyAobmFtZSA/IG5hbWUgKyAnICc6ICcnKSArIG1lc3NhZ2UgOiAnJztcclxuXHRcdFx0aWYgKHZhbCkgZXJyb3JzW3ZhbC50b0xvd2VyQ2FzZSgpXSA9IHZhbDtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGl0ZW0ucmVzcG9uc2UpIHJldHVybiBfcGFyc2UoaXRlbS5yZXNwb25zZSk7XHJcblx0XHRpZiAoaXRlbS5ib2R5KSByZXR1cm4gX3BhcnNlKGl0ZW0uYm9keSk7XHJcblx0XHRpZiAoaXRlbS5lcnJvcikgcmV0dXJuIF9wYXJzZShpdGVtLmVycm9yKTtcclxuXHRcdGlmIChpdGVtLm1lc3NhZ2UpIHJldHVybiBfcGFyc2UoaXRlbS5tZXNzYWdlKTtcclxuXHRcdGNvbnN0IHZhbCA9IF9zdHIoaXRlbSwgdHJ1ZSwgdHJ1ZSk7XHJcblx0XHRpZiAodmFsKSBlcnJvcnNbdmFsLnRvTG93ZXJDYXNlKCldID0gdmFsO1xyXG5cdH07XHJcblx0X3BhcnNlKGVycm9yKTtcclxuXHRyZXR1cm4gT2JqZWN0LnZhbHVlcyhlcnJvcnMpLmpvaW4oJ1xcbicpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCB0ZXh0IHdpdGggbWF4IGxlbmd0aCBsaW1pdFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdGV4dFxyXG4gKiBAcGFyYW0gbWF4IC0gbWF4IGNoYXJhY3RlcnMgbGVuZ3RoIChkZWZhdWx0OiBgMTAwMGApXHJcbiAqIEBwYXJhbSBtb2RlIC0gcmVzdWx0IG1vZGVcclxuICogLSBgMGAgPSBgc3Vic3RyaW5nKDAsIG1heClgXHJcbiAqIC0gYDFgID0gYHN1YnN0cmluZygwLCBtYXggLSAzKSArICcuLi4nYFxyXG4gKiAtIGAyYCA9IGBzdWJzdHJpbmcoMCwgbWF4IC0gW2FwcGVuZF0ubGVuZ3RoKSArIFthcHBlbmRdYCB3aGVyZSBgW2FwcGVuZF1gIGlzIGAnLi4uKCcgKyB2YWx1ZS5sZW5ndGggKyAnKSdgXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIH4gd2hvc2UgY2hhcmFjdGVyIGxlbmd0aCBpcyA8PSBtYXhcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdGV4dE1heExlbmd0aCA9ICh2YWx1ZTogYW55LCBtYXg6IG51bWJlciA9IDEwMDAsIG1vZGU6IDB8MXwyID0gMCk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgbGVuID0gKHZhbHVlID0gX3N0cih2YWx1ZSkpLmxlbmd0aCwgbWF4X2xlbiA9ICFpc05hTihtYXggPSBwYXJzZUludChtYXggYXMgYW55KSkgJiYgbWF4ID4gMCA/IG1heCA6IDEwMDA7XHJcblx0aWYgKGxlbiA8PSBtYXhfbGVuKSByZXR1cm4gdmFsdWU7XHJcblx0Y29uc3QgYXBwZW5kID0gbW9kZSA9PT0gMiA/IGAuLi4oJHt2YWx1ZS5sZW5ndGh9KWAgOiBtb2RlID09PSAxID8gJy4uLicgOiAnJztcclxuXHRjb25zdCBhcHBlbmRfbGVuID0gYXBwZW5kLmxlbmd0aCwgdGV4dF9sZW4gPSBtYXhfbGVuIC0gYXBwZW5kX2xlbjtcclxuXHRpZiAodGV4dF9sZW4gPiBhcHBlbmRfbGVuICYmIGxlbiA+IHRleHRfbGVuKSByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIHRleHRfbGVuKSArIGFwcGVuZDtcclxuXHRyZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIG1heF9sZW4pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEN1c3RvbSB0ZXh0IGVuY3J5cHQvZGVjcnlwdCBjeXBoZXIgfiBgdjIwMjMxMDI3MjMyODUwYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gdGV4dCB2YWx1ZSB+IGBzdHJpbmdgXHJcbiAqIEBwYXJhbSBpbmRleCAtIGluZGV4IG9mZnNldCB+IGBpbnRlZ2VyYCAoZGVmYXVsdDogYDBgKVxyXG4gKiBAcGFyYW0ga2V5IC0gcGFyc2Uga2V5IH4gYHN0cmluZ2AgKGRlZmF1bHQ6IGAnUVd4dmFHOXRiM0poSVEnYClcclxuICogQHJldHVybnMgYHN0cmluZ2AgYnVmZmVyIHwgYCdFUlJPUidgIG9uIGZhaWx1cmVcclxuICovXHJcbmV4cG9ydCBjb25zdCBfY3IgPSAodmFsdWU6IGFueSwgaW5kZXg/OiBhbnksIGtleT86IGFueSk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgdGV4dDogc3RyaW5nID0gW251bGwsIHVuZGVmaW5lZF0uaW5jbHVkZXModmFsdWUpID8gJycgOiBTdHJpbmcodmFsdWUpO1xyXG5cdGNvbnN0IG9mZnNldDogbnVtYmVyID0gTnVtYmVyLmlzSW50ZWdlcihpbmRleCA9IHBhcnNlSW50KGluZGV4IGFzIGFueSkpICYmIGluZGV4ID49IDAgPyBpbmRleCA6IDA7XHJcblx0Y29uc3QgcGFzczogc3RyaW5nID0gKFtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKGtleSBhcyBhbnkpID8gJycgOiBTdHJpbmcoa2V5KSkgfHwgJ1FXeHZhRzl0YjNKaElRJztcclxuXHRsZXQgYnVmZmVyOiBzdHJpbmcgPSAnJztcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpICsrKXtcclxuXHRcdGNvbnN0IGNoYXI6IHN0cmluZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUodGV4dFtpXS5jaGFyQ29kZUF0KDApIF4gKHBhc3NbKG9mZnNldCArIGkpICUgcGFzcy5sZW5ndGhdLmNoYXJDb2RlQXQoMCkgKiogMikpO1xyXG5cdFx0YnVmZmVyICs9IGNoYXI7XHJcblx0fVxyXG5cdHJldHVybiBidWZmZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2Uga2V5IHZhbHVlIHRleHQgfiBlc2NhcGVzL3Jlc3RvcmVzIHZhbHVlcyBkZWxpbWl0ZXIgKGkuZS4gYCc9J2ApIGFuZCBlbnRyaWVzIGRlbGltaXRlciAoaS5lLiBgJ1xcbidgKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWUgdGV4dCAoYHN0cmluZ2ApXHJcbiAqIEBwYXJhbSBlc2NhcGUgLSB3aGV0aGVyIHRvIGVzY2FwZSBkZWxpbWl0ZXJzIChkZWZhdWx0OiBgZmFsc2VgIH4gcmVzdG9yZSlcclxuICogQHBhcmFtIHZhbHVlX2RlbGltaXRlciAtIHZhbHVlIGRlbGltaXRlciAoZGVmYXVsdDogYCc9J2AgfiBlLmcuIGAna2V5PXZhbHVlJ2ApXHJcbiAqIEBwYXJhbSBlbnRyaWVzX2RlbGltaXRlciAtIGVudHJpZXMgZGVsaW1pdGVyIChkZWZhdWx0OiBgJ1xcbidgIH4gZS5nLiBgJ2tleT12YWx1ZVxcbmtleTI9dmFsdWUyJ2ApXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2tleVZhbHVlID0gKHZhbHVlOiBhbnksIGVzY2FwZTogYm9vbGVhbiA9IGZhbHNlLCB2YWx1ZV9kZWxpbWl0ZXI6IHN0cmluZyA9ICc9JywgZW50cmllc19kZWxpbWl0ZXI6IHN0cmluZyA9ICdcXG4nKTogc3RyaW5nID0+IHtcclxuXHRpZiAoISh2YWx1ZSA9IF9zdHIodmFsdWUsIHRydWUpKSkgcmV0dXJuIHZhbHVlO1xyXG5cdGNvbnN0IHZkID0gJ1xceDFFJywgdmFsdWVfZGVsaW0gPSBfc3RyKHZhbHVlX2RlbGltaXRlcikgfHwgJz0nO1xyXG5cdGNvbnN0IGVkID0gJ1xceDFEJywgZW50cmllc19kZWxpbSA9IF9zdHIoZW50cmllc19kZWxpbWl0ZXIpIHx8ICdcXG4nO1xyXG5cdGlmIChlc2NhcGUpIHJldHVybiB2YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAodmFsdWVfZGVsaW0sICdnJyksIHZkKS5yZXBsYWNlKG5ldyBSZWdFeHAoZW50cmllc19kZWxpbSwgJ2cnKSwgZWQpO1xyXG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAodmQsICdnJyksIHZhbHVlX2RlbGltKS5yZXBsYWNlKG5ldyBSZWdFeHAoZWQsICdnJyksIGVudHJpZXNfZGVsaW0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIHNlcmlhbGl6ZWQga2V5IHZhbHVlcyB+IChpLmUuIGAna2V5PXZhbHVlXFxua2V5Mj12YWx1ZTInYClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHNlcmlhbGl6ZWQgdGV4dFxyXG4gKiBAcGFyYW0gZXNjYXBlIC0gd2hldGhlciB0byBlc2NhcGUgZGVsaW1pdGVycyAoZGVmYXVsdDogYGZhbHNlYCB+IHJlc3RvcmUpXHJcbiAqIEBwYXJhbSB2YWx1ZV9kZWxpbWl0ZXIgLSB2YWx1ZSBkZWxpbWl0ZXIgKGRlZmF1bHQ6IGAnPSdgIH4gZS5nLiBgJ2tleT12YWx1ZSdgKVxyXG4gKiBAcGFyYW0gZW50cmllc19kZWxpbWl0ZXIgLSBlbnRyaWVzIGRlbGltaXRlciAoZGVmYXVsdDogYCdcXG4nYCB+IGUuZy4gYCdrZXk9dmFsdWVcXG5rZXkyPXZhbHVlMidgKVxyXG4gKiBAcmV0dXJucyBgW2tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nXVtdYCBlbnRyaWVzIGxpc3Qgd2l0aCB1bmlxdWUga2V5c1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9wYXJzZUtleVZhbHVlcyA9ICh2YWx1ZTogYW55LCBlc2NhcGU6IGJvb2xlYW4gPSBmYWxzZSwgdmFsdWVfZGVsaW1pdGVyOiBzdHJpbmcgPSAnPScsIGVudHJpZXNfZGVsaW1pdGVyOiBzdHJpbmcgPSAnXFxuJyk6IFtrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZ11bXSA9PiB7XHJcblx0bGV0IGJ1ZmZlcjoge1trZXk6IHN0cmluZ106IFtzdHJpbmcsIHN0cmluZ119ID0ge30sIHBhcnNlX2VudHJpZXM6IC0xfDB8MSA9IC0xOyAvLy0xID0gdW5kZWZpbmVkLCAwID0gZGlzYWJsZWQsIDEgPSBlbmFibGVkXHJcblx0Zm9yIChsZXQgaXRlbSBvZiBfc3RyKHZhbHVlLCB0cnVlKS5zcGxpdCgnXFxuJykpe1xyXG5cdFx0aWYgKCEoaXRlbSA9IF9zdHIoaXRlbSwgdHJ1ZSkpKSBjb250aW51ZTtcclxuXHRcdGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IGl0ZW0udHJpbSgpLnNwbGl0KCc9Jyk7XHJcblx0XHRpZiAocGFyc2VfZW50cmllcyA8IDApIHBhcnNlX2VudHJpZXMgPSBwYXJ0cy5sZW5ndGggPj0gMiA/IDEgOiAwO1xyXG5cdFx0Y29uc3Qga2V5OiBzdHJpbmcgPSBfa2V5VmFsdWUocGFydHNbMF0sIGVzY2FwZSwgdmFsdWVfZGVsaW1pdGVyLCBlbnRyaWVzX2RlbGltaXRlcik7XHJcblx0XHRjb25zdCB2YWx1ZTogc3RyaW5nID0gIXBhcnNlX2VudHJpZXMgPyBrZXkgOiBfa2V5VmFsdWUocGFydHNbMV0sIGVzY2FwZSwgdmFsdWVfZGVsaW1pdGVyLCBlbnRyaWVzX2RlbGltaXRlcik7XHJcblx0XHRpZiAoa2V5ICYmIHZhbHVlKSBidWZmZXJba2V5LnRvTG93ZXJDYXNlKCldID0gW2tleSwgdmFsdWVdO1xyXG5cdH1cclxuXHRyZXR1cm4gT2JqZWN0LnZhbHVlcyhidWZmZXIpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNlcmlhbGl6ZSBrZXkgdmFsdWVzIH4gKGkuZS4gYFsna2V5JywndmFsdWUnLCdrZXkyJywndmFsdWUyJ11gID0+IGAna2V5PXZhbHVlXFxua2V5Mj12YWx1ZTInYClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBwYXJzZSB2YWx1ZXMgfiAoaS5lLiBgc3RyaW5nfHN0cmluZ1tdfFtzdHJpbmcsc3RyaW5nXVtdfHtba2V5OnN0cmluZ106c3RyaW5nfVtdYClcclxuICogQHBhcmFtIF9rZXkgLSBzcGVjaWZ5IGVudHJ5IGBrZXlgIHByb3BlcnR5IG5hbWUgd2hlbiBgdmFsdWVzYCBpcyBge1trZXk6c3RyaW5nXTpzdHJpbmd9W11gXHJcbiAqIEBwYXJhbSBfdmFsdWUgLSBzcGVjaWZ5IGVudHJ5IGB2YWx1ZWAgcHJvcGVydHkgbmFtZSB3aGVuIGB2YWx1ZXNgIGlzIGB7W2tleTpzdHJpbmddOnN0cmluZ31bXWBcclxuICogQHJldHVybnMgYHN0cmluZ2Agc2VyaWFsaXplZCBrZXkgdmFsdWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3N0cktleVZhbHVlcyA9ICh2YWx1ZXM6IGFueSwgX2tleT86IGFueSwgX3ZhbHVlPzogYW55LCBfdmFsdWVfZGVsaW1pdGVyOiBzdHJpbmcgPSAnPScsIF9lbnRyaWVzX2RlbGltaXRlcjogc3RyaW5nID0gJ1xcbicpOiBzdHJpbmcgPT4ge1xyXG5cdGNvbnN0IGJ1ZmZlcjoge1trZXk6IHN0cmluZ106IFtzdHJpbmcsIHN0cmluZ119ID0ge307XHJcblx0Y29uc3QgdmFsdWVfZGVsaW1pdGVyID0gX3N0cihfdmFsdWVfZGVsaW1pdGVyKSB8fCAnPSc7XHJcblx0Y29uc3QgZW50cmllc19kZWxpbWl0ZXIgPSBfc3RyKF9lbnRyaWVzX2RlbGltaXRlcikgfHwgJ1xcbic7XHJcblx0bGV0IGtleV9wcm9wOiBhbnkgPSB1bmRlZmluZWQsIHZhbF9wcm9wOiBhbnkgPSB1bmRlZmluZWQsIG1vZGU6IC0xfDB8MSA9IC0xLCBzYW1lOiBib29sZWFuID0gdHJ1ZTtcclxuXHRjb25zdCBfc2V0X21vZGUgPSAoaXRlbTogYW55KTogdm9pZCA9PiB7XHJcblx0XHRfa2V5ID0gX3N0cihrZXlfcHJvcCA9IF9rZXksIHRydWUpO1xyXG5cdFx0X3ZhbHVlID0gX3N0cih2YWxfcHJvcCA9IF92YWx1ZSwgdHJ1ZSk7XHJcblx0XHRpZiAoX2tleSAmJiAhX3ZhbHVlKXtcclxuXHRcdFx0X3ZhbHVlID0gX2tleTtcclxuXHRcdFx0dmFsX3Byb3AgPSBrZXlfcHJvcDtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKF92YWx1ZSAmJiAhX2tleSl7XHJcblx0XHRcdF9rZXkgPSBfdmFsdWU7XHJcblx0XHRcdGtleV9wcm9wID0gdmFsX3Byb3A7XHJcblx0XHR9XHJcblx0XHRpZiAoT2JqZWN0KGl0ZW0pID09PSBpdGVtKXtcclxuXHRcdFx0aWYgKCFfa2V5ICYmICFfdmFsdWUgJiYgT2JqZWN0KGl0ZW0pID09PSBpdGVtKXtcclxuXHRcdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgna2V5JykpIHZhbF9wcm9wID0gX3ZhbHVlID0ga2V5X3Byb3AgPSBfa2V5ID0gJ2tleSc7XHJcblx0XHRcdFx0aWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpe1xyXG5cdFx0XHRcdFx0aWYgKCFfa2V5ICYmIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2xhYmVsJykpe1xyXG5cdFx0XHRcdFx0XHR2YWxfcHJvcCA9IF92YWx1ZSA9ICdsYWJlbCc7XHJcblx0XHRcdFx0XHRcdGtleV9wcm9wID0gX2tleSA9ICd2YWx1ZSc7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIGtleV9wcm9wID0gX2tleSA9IHZhbF9wcm9wID0gX3ZhbHVlID0gJ3ZhbHVlJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bW9kZSA9IF9zdHIoa2V5X3Byb3AsIHRydWUpICYmIF9zdHIodmFsX3Byb3AsIHRydWUpICYmIGl0ZW0uaGFzT3duUHJvcGVydHkoa2V5X3Byb3ApICYmIGl0ZW0uaGFzT3duUHJvcGVydHkodmFsX3Byb3ApID8gMSA6IDA7XHJcblx0XHR9XHJcblx0fTtcclxuXHRjb25zdCBfc3RyX3ZhbHVlID0gKHZhbDogYW55KTogc3RyaW5nID0+IF9rZXlWYWx1ZSh2YWwsIHRydWUsIHZhbHVlX2RlbGltaXRlciwgZW50cmllc19kZWxpbWl0ZXIpO1xyXG5cdGNvbnN0IF9hZGRfaXRlbSA9IChpdGVtOiBhbnksIF9yZWN1cnNlOiBib29sZWFuKTogdm9pZCA9PiB7XHJcblx0XHRpZiAoT2JqZWN0KGl0ZW0pID09PSBpdGVtKXtcclxuXHRcdFx0aWYgKE9iamVjdChpdGVtW1N5bWJvbC5pdGVyYXRvcl0pID09PSBpdGVtW1N5bWJvbC5pdGVyYXRvcl0pe1xyXG5cdFx0XHRcdGNvbnN0IGVudHJpZXM6IGFueVtdID0gWy4uLml0ZW1dO1xyXG5cdFx0XHRcdGlmICghZW50cmllcy5sZW5ndGgpIHJldHVybjtcclxuXHRcdFx0XHRpZiAoX3JlY3Vyc2UgJiYgT2JqZWN0KGVudHJpZXNbMF0pID09PSBlbnRyaWVzWzBdKSByZXR1cm4gdm9pZCBlbnRyaWVzLmZvckVhY2godiA9PiBfYWRkX2l0ZW0odiwgZmFsc2UpKTtcclxuXHRcdFx0XHRpZiAobW9kZSA8IDApIF9zZXRfbW9kZShlbnRyaWVzKTtcclxuXHRcdFx0XHRjb25zdCBrZXk6IHN0cmluZyA9IF9zdHJfdmFsdWUoZW50cmllc1ttb2RlID8ga2V5X3Byb3AgOiAwXSk7XHJcblx0XHRcdFx0Y29uc3QgdmFsOiBzdHJpbmcgPSBfc3RyX3ZhbHVlKGVudHJpZXNbbW9kZSA/IHZhbF9wcm9wIDogMV0pO1xyXG5cdFx0XHRcdGlmIChrZXkgJiYgdmFsKXtcclxuXHRcdFx0XHRcdGlmIChrZXkudG9Mb3dlckNhc2UoKSAhPT0gdmFsLnRvTG93ZXJDYXNlKCkpIHNhbWUgPSBmYWxzZTtcclxuXHRcdFx0XHRcdGJ1ZmZlcltrZXkudG9Mb3dlckNhc2UoKV0gPSBba2V5LCB2YWxdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRpZiAobW9kZSA8IDApIF9zZXRfbW9kZShpdGVtKTtcclxuXHRcdFx0XHRpZiAoIW1vZGUpIHJldHVybjtcclxuXHRcdFx0XHRjb25zdCBrZXk6IHN0cmluZyA9IF9zdHJfdmFsdWUoaXRlbVtrZXlfcHJvcF0pO1xyXG5cdFx0XHRcdGNvbnN0IHZhbDogc3RyaW5nID0gX3N0cl92YWx1ZShpdGVtW3ZhbF9wcm9wXSk7XHJcblx0XHRcdFx0aWYgKGtleSAmJiB2YWwpe1xyXG5cdFx0XHRcdFx0aWYgKGtleS50b0xvd2VyQ2FzZSgpICE9PSB2YWwudG9Mb3dlckNhc2UoKSkgc2FtZSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0YnVmZmVyW2tleS50b0xvd2VyQ2FzZSgpXSA9IFtrZXksIHZhbF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmIChfcmVjdXJzZSl7XHJcblx0XHRcdGNvbnN0IHRleHQ6IHN0cmluZyA9IF9zdHIoaXRlbSwgdHJ1ZSk7XHJcblx0XHRcdGlmICghdGV4dCkgcmV0dXJuO1xyXG5cdFx0XHRjb25zdCBlbnRyaWVzOiBhbnlbXSA9IF9wYXJzZUtleVZhbHVlcyh0ZXh0LCBmYWxzZSwgdmFsdWVfZGVsaW1pdGVyLCBlbnRyaWVzX2RlbGltaXRlcik7XHJcblx0XHRcdHJldHVybiB2b2lkIChlbnRyaWVzLmxlbmd0aCA/IGVudHJpZXMuZm9yRWFjaCh2ID0+IF9hZGRfaXRlbSh2LCBmYWxzZSkpIDogbnVsbCk7XHJcblx0XHR9XHJcblx0fTtcclxuXHRjb25zdCBpdGVtczogYW55W10gPSBPYmplY3QodmFsdWVzKSA9PT0gdmFsdWVzICYmIE9iamVjdCh2YWx1ZXNbU3ltYm9sLml0ZXJhdG9yXSkgPT09IHZhbHVlc1tTeW1ib2wuaXRlcmF0b3JdID8gWy4uLnZhbHVlc10gOiBbdmFsdWVzXTtcclxuXHRfYWRkX2l0ZW0oaXRlbXMsIHRydWUpO1xyXG5cdHJldHVybiBPYmplY3QudmFsdWVzKGJ1ZmZlcilcclxuXHQubWFwKGVudHJ5ID0+IHNhbWUgPyBlbnRyeVswXSA6IGVudHJ5LmpvaW4odmFsdWVfZGVsaW1pdGVyKSlcclxuXHQuam9pbihlbnRyaWVzX2RlbGltaXRlcik7XHJcbn07XHJcblxyXG4vKipcclxuICogVGV4dCB3cmFwIGxpbmVzIG9uIGxlbmd0aCBsaW1pdFxyXG4gKiBcclxuICogQHBhcmFtIHRleHQgLSBwYXJzZSB0ZXh0XHJcbiAqIEBwYXJhbSBtYXhfbGVuZ3RoIC0gbWF4IGxpbmUgbGVuZ3RoXHJcbiAqIEBwYXJhbSB3b3JkX2JyZWFrIC0gd2hldGhlciB0byB1c2Ugd29yZCBicmVhayAoZGVmYXVsdCBgZmFsc2VgKVxyXG4gKiBAcGFyYW0gb25BZGRMaW5lIC0gYWRkIGxpbmUgYnVmZmVyIGhhbmRsZXIgY2FsbGJhY2sgfiByZXR1cm4gbW9kaWZpZWQgbGluZSB2YWx1ZSBvciBgdW5kZWZpbmVkYHxgbnVsbGAgdG8gc2tpcFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nW11gIHRleHQgd3JhcCBsaW5lc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF93cmFwTGluZXMgPSAodGV4dDogYW55LCBtYXhfbGVuZ3RoOiBudW1iZXIgPSAwLCB3b3JkX2JyZWFrOiBib29sZWFuID0gZmFsc2UsIG9uQWRkTGluZT86IChsaW5lOnN0cmluZyxsaW5lc19idWZmZXI6c3RyaW5nW10pPT5zdHJpbmd8dW5kZWZpbmVkKTogc3RyaW5nW10gPT4ge1xyXG5cdGNvbnN0IF9vbkFkZExpbmU6ICgobGluZTpzdHJpbmcsbGluZXNfYnVmZmVyOnN0cmluZ1tdKT0+c3RyaW5nfHVuZGVmaW5lZCl8dW5kZWZpbmVkID0gJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIG9uQWRkTGluZSA/IG9uQWRkTGluZSA6IHVuZGVmaW5lZDtcclxuXHRjb25zdCBtYXg6IG51bWJlciA9IE51bWJlci5pc0ludGVnZXIobWF4X2xlbmd0aCA9IHBhcnNlSW50KG1heF9sZW5ndGggYXMgYW55KSkgJiYgbWF4X2xlbmd0aCA+PSAwID8gbWF4X2xlbmd0aCA6IDA7XHJcblx0bGV0IGxpbmVzX2J1ZmZlcjogc3RyaW5nW10gPSBbXSwgbGluZV9idWZmZXI6IHN0cmluZ1tdID0gW107XHJcblx0Y29uc3QgX2FkZF9saW5lID0gKGxpbmU6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG5cdFx0aWYgKF9vbkFkZExpbmUpe1xyXG5cdFx0XHRjb25zdCByZXM6IGFueSA9IF9vbkFkZExpbmUobGluZSwgbGluZXNfYnVmZmVyKTtcclxuXHRcdFx0aWYgKFt1bmRlZmluZWQsIG51bGxdLmluY2x1ZGVzKHJlcykpIHJldHVybjtcclxuXHRcdFx0bGluZSA9IF9zdHIocmVzKTtcclxuXHRcdH1cclxuXHRcdGxpbmVzX2J1ZmZlci5wdXNoKGxpbmUpO1xyXG5cdH07XHJcblx0Y29uc3QgX3BhcnNlX2xpbmUgPSAobGluZTogc3RyaW5nKSA9PiB7XHJcblx0XHRpZiAoIW1heCkgcmV0dXJuIF9hZGRfbGluZShsaW5lKTtcclxuXHRcdGNvbnN0IF9saW5lX2J1ZmZlcl9hZGQgPSAod29yZDogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGNvbnN0IGxpbmVfdGV4dDogc3RyaW5nID0gWy4uLmxpbmVfYnVmZmVyLCB3b3JkXS5qb2luKCcgJyk7XHJcblx0XHRcdGlmIChsaW5lX3RleHQubGVuZ3RoID4gbWF4KXtcclxuXHRcdFx0XHRpZiAod29yZF9icmVhayl7IC8vLS0gd29yZCBicmVha1xyXG5cdFx0XHRcdFx0bGV0IHZhbDogc3RyaW5nID0gJycsIG9mZnNldDogbnVtYmVyID0gMDtcclxuXHRcdFx0XHRcdHdoaWxlICgodmFsID0gbGluZV90ZXh0LnN1YnN0cmluZyhvZmZzZXQsIG9mZnNldCArIG1heCkpLmxlbmd0aCA9PT0gbWF4KXtcclxuXHRcdFx0XHRcdFx0X2FkZF9saW5lKHZhbCk7XHJcblx0XHRcdFx0XHRcdG9mZnNldCArPSBtYXg7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRsaW5lX2J1ZmZlciA9IFt2YWxdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdGlmICh3b3JkLmxlbmd0aCA+IG1heCl7IC8vLS0gd29yZCBicmVhayB+IGxvbmdlciB0aGFuIG1heFxyXG5cdFx0XHRcdFx0XHRsZXQgdmFsOiBzdHJpbmcgPSAnJywgb2Zmc2V0OiBudW1iZXIgPSAwO1xyXG5cdFx0XHRcdFx0XHR3aGlsZSAoKHZhbCA9IGxpbmVfdGV4dC5zdWJzdHJpbmcob2Zmc2V0LCBvZmZzZXQgKyBtYXgpKS5sZW5ndGggPT09IG1heCl7XHJcblx0XHRcdFx0XHRcdFx0X2FkZF9saW5lKHZhbCk7XHJcblx0XHRcdFx0XHRcdFx0b2Zmc2V0ICs9IG1heDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRsaW5lX2J1ZmZlciA9IFt2YWxdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSB7IC8vLS0gd3JhcCB3b3JkXHJcblx0XHRcdFx0XHRcdGlmIChsaW5lX2J1ZmZlci5sZW5ndGgpIF9hZGRfbGluZShbLi4ubGluZV9idWZmZXIsICcnXS5qb2luKCcgJykpO1xyXG5cdFx0XHRcdFx0XHRpZiAoKGxpbmVfYnVmZmVyID0gW3dvcmRdKS5qb2luKCcgJykubGVuZ3RoID09PSBtYXgpe1xyXG5cdFx0XHRcdFx0XHRcdF9hZGRfbGluZShsaW5lX2J1ZmZlci5qb2luKCcgJykpO1xyXG5cdFx0XHRcdFx0XHRcdGxpbmVfYnVmZmVyID0gW107XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAobGluZV90ZXh0Lmxlbmd0aCA9PT0gbWF4KXtcclxuXHRcdFx0XHRfYWRkX2xpbmUobGluZV90ZXh0KTtcclxuXHRcdFx0XHRsaW5lX2J1ZmZlciA9IFtdO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgbGluZV9idWZmZXIgPSBbbGluZV90ZXh0XTtcclxuXHRcdH07XHJcblx0XHRmb3IgKGNvbnN0IHdvcmQgb2YgbGluZS5zcGxpdCgnICcpKSBfbGluZV9idWZmZXJfYWRkKHdvcmQpO1xyXG5cdH07XHJcblx0Zm9yIChjb25zdCBsaW5lIG9mIF9zdHIodGV4dCkuc3BsaXQoJ1xcbicpKSBfcGFyc2VfbGluZShsaW5lKTtcclxuXHRpZiAobGluZV9idWZmZXIpIF9hZGRfbGluZShsaW5lX2J1ZmZlci5qb2luKCcgJykpO1xyXG5cdHJldHVybiBsaW5lc19idWZmZXI7XHJcbn07IiwiaW1wb3J0IHsgX3N0ciB9IGZyb20gJy4vX3N0cmluZyc7XHJcblxyXG4vKipcclxuICogVGhlIFtlc2NhcGUoKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvZXNjYXBlKSBmdW5jdGlvbiB+IF8qKmRlcHJlY2F0aW9uLWFsdCoqX1xyXG4gKiAtIFJlcGxhY2VzIGFsbCBjaGFyYWN0ZXJzIHdpdGggZXNjYXBlIHNlcXVlbmNlcywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIEFTQ0lJIHdvcmQgY2hhcmFjdGVycyBgKEHigJNaLCBh4oCTeiwgMOKAkzksIF8pYCBhbmQgYEBcXCpfKy0uL2AuXHJcbiAqIC0gW0VjbWFTY3JpcHQgc3BlY10oaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy1CLjIuMSlcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHRleHRcclxuICogQHJldHVybnMgYHN0cmluZ2AgZXNjYXBlZCB0ZXh0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2VzY2FwZSA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IHtcclxuXHRjb25zdCB0ZXh0OiBzdHJpbmcgPSBfc3RyKHZhbHVlKTtcclxuXHRpZiAoIXRleHQubGVuZ3RoKSByZXR1cm4gdGV4dDtcclxuXHRsZXQgYnVmZmVyOiBzdHJpbmcgPSAnJztcclxuXHRjb25zdCBza2lwOiBzdHJpbmcgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODlAKl8rLS4vLCc7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSArKyl7XHJcblx0XHRsZXQgY2hhcjogc3RyaW5nID0gdGV4dFtpXTtcclxuXHRcdGlmIChza2lwLmluZGV4T2YoY2hhcikgPCAwKXtcclxuXHRcdFx0Y29uc3Qgb3JkOiBudW1iZXIgPSB0ZXh0LmNoYXJDb2RlQXQoaSk7XHJcblx0XHRcdGNoYXIgPSBvcmQgPCAyNTYgPyAnJScgKyAoJzAwJyArIG9yZC50b1N0cmluZygxNikpLnRvVXBwZXJDYXNlKCkuc2xpY2UoLTIpIDogJyV1JyArICgnMDAwMCcgKyBvcmQudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpLnNsaWNlKC00KTtcclxuXHRcdH1cclxuXHRcdGJ1ZmZlciArPSBjaGFyO1xyXG5cdH1cclxuXHRyZXR1cm4gYnVmZmVyO1xyXG59O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBUaGUgW3VuZXNjYXBlKCldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL3VuZXNjYXBlKSBmdW5jdGlvbiB+IF8qKmRlcHJlY2F0aW9uLWFsdCoqX1xyXG4gKiAtIENvbXB1dGVzIGEgbmV3IHN0cmluZyBpbiB3aGljaCBoZXhhZGVjaW1hbCBlc2NhcGUgc2VxdWVuY2VzIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBjaGFyYWN0ZXJzIHRoYXQgdGhleSByZXByZXNlbnQgfiBfc2VlIGBfZXNjYXBlKClgX1xyXG4gKiAtIFtFY21hU2NyaXB0IHNwZWNdKGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtQi4yLjIpXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB0ZXh0XHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIHVuZXNjYXBlZCB0ZXh0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3VuZXNjYXBlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGNvbnN0IHRleHQ6IHN0cmluZyA9IF9zdHIodmFsdWUpLCBsZW46IG51bWJlciA9IHRleHQubGVuZ3RoO1xyXG5cdGlmICghbGVuKSByZXR1cm4gdGV4dDtcclxuXHRsZXQgYnVmZmVyOiBzdHJpbmcgPSAnJywgazogbnVtYmVyID0gMDtcclxuXHR3aGlsZSAoayA8IGxlbil7XHJcblx0XHRsZXQgY2hhcjogc3RyaW5nID0gdGV4dFtrXTtcclxuXHRcdGlmIChjaGFyID09PSAnJScpeyAvLzdcclxuXHRcdFx0bGV0IGNoYXJzOiBzdHJpbmcgPSBrIDw9IChsZW4gLSA2KSAmJiB0ZXh0W2sgKyAxXSA9PT0gJ3UnID8gdGV4dC5zdWJzdHJpbmcoayArIDIsIGsgKyA2KSA6IChrIDw9IChsZW4gLSAzKSA/IHRleHQuc3Vic3RyaW5nKGsgKyAxLCBrICsgMykgOiAnJyk7XHJcblx0XHRcdGlmICghL15bMC05QS1GXSskL2kudGVzdChjaGFycykpIGNoYXJzID0gJyc7XHJcblx0XHRcdGlmIChjaGFycy5sZW5ndGggPT09IDQpe1xyXG5cdFx0XHRcdGNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGNoYXJzLCAxNikpO1xyXG5cdFx0XHRcdGsgKz0gNTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmIChjaGFycy5sZW5ndGggPT09IDIpe1xyXG5cdFx0XHRcdGNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KCcwMCcgKyBjaGFycywgMTYpKTtcclxuXHRcdFx0XHRrICs9IDI7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGJ1ZmZlciArPSBjaGFyOyAvLzE4XHJcblx0XHRrICs9IDE7XHJcblx0fVxyXG5cdHJldHVybiBidWZmZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogVVRGOCBlbmNvZGUgdGV4dCB+IFtSRUZdKGh0dHBzOi8vZWNtYW5hdXQuYmxvZ3Nwb3QuY29tLzIwMDYvMDcvZW5jb2RpbmctZGVjb2RpbmctdXRmOC1pbi1qYXZhc2NyaXB0Lmh0bWwpXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB0ZXh0XHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIFVURjggZW5jb2RlZCB0ZXh0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3V0ZjhFbmNvZGUgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiBfdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KF9zdHIodmFsdWUpKSk7XHJcblxyXG4vKipcclxuICogVVRGOCBkZWNvZGUgdGV4dFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdGV4dFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBVVEY4IGRlY29kZWQgdGV4dFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF91dGY4RGVjb2RlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4gZGVjb2RlVVJJQ29tcG9uZW50KF9lc2NhcGUodmFsdWUpKTsiLCJleHBvcnQgKiBmcm9tICcuL19iYXRjaCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX2Nsb25lJztcclxuZXhwb3J0ICogZnJvbSAnLi9fY2xvbmVEZWVwJztcclxuZXhwb3J0ICogZnJvbSAnLi9fY29tcGFyZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX2NvbXBhcmVTaGFsbG93JztcclxuZXhwb3J0ICogZnJvbSAnLi9fZGF0ZXRpbWUnO1xyXG5leHBvcnQgKiBmcm9tICcuL19kZWJvdWNlZCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX2hlbGxvJztcclxuZXhwb3J0ICogZnJvbSAnLi9fanNvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vX251bWJlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vX29iamVjdHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL19wcm9taXNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9fcXVldWUnO1xyXG5leHBvcnQgKiBmcm9tICcuL19zdHJpbmcnO1xyXG5leHBvcnQgKiBmcm9tICcuL191dGY4JztcclxuZXhwb3J0ICogZnJvbSAnLi9fcmM0JzsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxMyk7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwidGhpcyIsImJ5dGVMZW5ndGgiLCJiNjQiLCJsZW5zIiwiZ2V0TGVucyIsInZhbGlkTGVuIiwicGxhY2VIb2xkZXJzTGVuIiwidG9CeXRlQXJyYXkiLCJ0bXAiLCJpIiwiYXJyIiwiQXJyIiwiX2J5dGVMZW5ndGgiLCJjdXJCeXRlIiwibGVuIiwicmV2TG9va3VwIiwiY2hhckNvZGVBdCIsImZyb21CeXRlQXJyYXkiLCJ1aW50OCIsImxlbmd0aCIsImV4dHJhQnl0ZXMiLCJwYXJ0cyIsIm1heENodW5rTGVuZ3RoIiwibGVuMiIsInB1c2giLCJlbmNvZGVDaHVuayIsImxvb2t1cCIsImpvaW4iLCJVaW50OEFycmF5IiwiQXJyYXkiLCJjb2RlIiwiRXJyb3IiLCJpbmRleE9mIiwic3RhcnQiLCJlbmQiLCJudW0iLCJvdXRwdXQiLCJiYXNlNjQiLCJpZWVlNzU0IiwiY3VzdG9tSW5zcGVjdFN5bWJvbCIsIlN5bWJvbCIsIkJ1ZmZlciIsIlNsb3dCdWZmZXIiLCJhbGxvYyIsIklOU1BFQ1RfTUFYX0JZVEVTIiwiS19NQVhfTEVOR1RIIiwiY3JlYXRlQnVmZmVyIiwiUmFuZ2VFcnJvciIsImJ1ZiIsIk9iamVjdCIsInNldFByb3RvdHlwZU9mIiwicHJvdG90eXBlIiwiYXJnIiwiZW5jb2RpbmdPck9mZnNldCIsIlR5cGVFcnJvciIsImFsbG9jVW5zYWZlIiwiZnJvbSIsInZhbHVlIiwic3RyaW5nIiwiZW5jb2RpbmciLCJpc0VuY29kaW5nIiwiYWN0dWFsIiwid3JpdGUiLCJzbGljZSIsImZyb21TdHJpbmciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImFycmF5VmlldyIsImlzSW5zdGFuY2UiLCJjb3B5IiwiZnJvbUFycmF5QnVmZmVyIiwiYnVmZmVyIiwiYnl0ZU9mZnNldCIsImZyb21BcnJheUxpa2UiLCJmcm9tQXJyYXlWaWV3IiwiU2hhcmVkQXJyYXlCdWZmZXIiLCJ2YWx1ZU9mIiwiYiIsIm9iaiIsImlzQnVmZmVyIiwiY2hlY2tlZCIsInVuZGVmaW5lZCIsIm51bWJlcklzTmFOIiwidHlwZSIsImlzQXJyYXkiLCJkYXRhIiwiZnJvbU9iamVjdCIsInRvUHJpbWl0aXZlIiwiYXNzZXJ0U2l6ZSIsInNpemUiLCJhcnJheSIsInRvU3RyaW5nIiwibXVzdE1hdGNoIiwiYXJndW1lbnRzIiwibG93ZXJlZENhc2UiLCJ1dGY4VG9CeXRlcyIsImJhc2U2NFRvQnl0ZXMiLCJ0b0xvd2VyQ2FzZSIsInNsb3dUb1N0cmluZyIsImhleFNsaWNlIiwidXRmOFNsaWNlIiwiYXNjaWlTbGljZSIsImxhdGluMVNsaWNlIiwiYmFzZTY0U2xpY2UiLCJ1dGYxNmxlU2xpY2UiLCJzd2FwIiwibiIsIm0iLCJiaWRpcmVjdGlvbmFsSW5kZXhPZiIsInZhbCIsImRpciIsImFycmF5SW5kZXhPZiIsImNhbGwiLCJsYXN0SW5kZXhPZiIsImluZGV4U2l6ZSIsImFyckxlbmd0aCIsInZhbExlbmd0aCIsIlN0cmluZyIsInJlYWQiLCJyZWFkVUludDE2QkUiLCJmb3VuZEluZGV4IiwiZm91bmQiLCJqIiwiaGV4V3JpdGUiLCJvZmZzZXQiLCJOdW1iZXIiLCJyZW1haW5pbmciLCJzdHJMZW4iLCJwYXJzZWQiLCJwYXJzZUludCIsInN1YnN0ciIsInV0ZjhXcml0ZSIsImJsaXRCdWZmZXIiLCJhc2NpaVdyaXRlIiwic3RyIiwiYnl0ZUFycmF5IiwiYXNjaWlUb0J5dGVzIiwiYmFzZTY0V3JpdGUiLCJ1Y3MyV3JpdGUiLCJ1bml0cyIsImMiLCJoaSIsImxvIiwidXRmMTZsZVRvQnl0ZXMiLCJNYXRoIiwibWluIiwicmVzIiwiZmlyc3RCeXRlIiwiY29kZVBvaW50IiwiYnl0ZXNQZXJTZXF1ZW5jZSIsInNlY29uZEJ5dGUiLCJ0aGlyZEJ5dGUiLCJmb3VydGhCeXRlIiwidGVtcENvZGVQb2ludCIsImNvZGVQb2ludHMiLCJNQVhfQVJHVU1FTlRTX0xFTkdUSCIsImZyb21DaGFyQ29kZSIsImFwcGx5IiwiZGVjb2RlQ29kZVBvaW50c0FycmF5Iiwia01heExlbmd0aCIsIlRZUEVEX0FSUkFZX1NVUFBPUlQiLCJwcm90byIsImZvbyIsImUiLCJ0eXBlZEFycmF5U3VwcG9ydCIsImNvbnNvbGUiLCJlcnJvciIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInBvb2xTaXplIiwiZmlsbCIsImFsbG9jVW5zYWZlU2xvdyIsIl9pc0J1ZmZlciIsImNvbXBhcmUiLCJhIiwieCIsInkiLCJjb25jYXQiLCJsaXN0IiwicG9zIiwic2V0Iiwic3dhcDE2Iiwic3dhcDMyIiwic3dhcDY0IiwidG9Mb2NhbGVTdHJpbmciLCJlcXVhbHMiLCJpbnNwZWN0IiwibWF4IiwicmVwbGFjZSIsInRyaW0iLCJ0YXJnZXQiLCJ0aGlzU3RhcnQiLCJ0aGlzRW5kIiwidGhpc0NvcHkiLCJ0YXJnZXRDb3B5IiwiaW5jbHVkZXMiLCJpc0Zpbml0ZSIsInRvSlNPTiIsIl9hcnIiLCJyZXQiLCJvdXQiLCJoZXhTbGljZUxvb2t1cFRhYmxlIiwiYnl0ZXMiLCJjaGVja09mZnNldCIsImV4dCIsImNoZWNrSW50Iiwid3J0QmlnVUludDY0TEUiLCJjaGVja0ludEJJIiwiQmlnSW50Iiwid3J0QmlnVUludDY0QkUiLCJjaGVja0lFRUU3NTQiLCJ3cml0ZUZsb2F0IiwibGl0dGxlRW5kaWFuIiwibm9Bc3NlcnQiLCJ3cml0ZURvdWJsZSIsIm5ld0J1ZiIsInN1YmFycmF5IiwicmVhZFVpbnRMRSIsInJlYWRVSW50TEUiLCJtdWwiLCJyZWFkVWludEJFIiwicmVhZFVJbnRCRSIsInJlYWRVaW50OCIsInJlYWRVSW50OCIsInJlYWRVaW50MTZMRSIsInJlYWRVSW50MTZMRSIsInJlYWRVaW50MTZCRSIsInJlYWRVaW50MzJMRSIsInJlYWRVSW50MzJMRSIsInJlYWRVaW50MzJCRSIsInJlYWRVSW50MzJCRSIsInJlYWRCaWdVSW50NjRMRSIsImRlZmluZUJpZ0ludE1ldGhvZCIsInZhbGlkYXRlTnVtYmVyIiwiZmlyc3QiLCJsYXN0IiwiYm91bmRzRXJyb3IiLCJyZWFkQmlnVUludDY0QkUiLCJyZWFkSW50TEUiLCJwb3ciLCJyZWFkSW50QkUiLCJyZWFkSW50OCIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZEJpZ0ludDY0TEUiLCJyZWFkQmlnSW50NjRCRSIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJ3cml0ZVVpbnRMRSIsIndyaXRlVUludExFIiwid3JpdGVVaW50QkUiLCJ3cml0ZVVJbnRCRSIsIndyaXRlVWludDgiLCJ3cml0ZVVJbnQ4Iiwid3JpdGVVaW50MTZMRSIsIndyaXRlVUludDE2TEUiLCJ3cml0ZVVpbnQxNkJFIiwid3JpdGVVSW50MTZCRSIsIndyaXRlVWludDMyTEUiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVVaW50MzJCRSIsIndyaXRlVUludDMyQkUiLCJ3cml0ZUJpZ1VJbnQ2NExFIiwid3JpdGVCaWdVSW50NjRCRSIsIndyaXRlSW50TEUiLCJsaW1pdCIsInN1YiIsIndyaXRlSW50QkUiLCJ3cml0ZUludDgiLCJ3cml0ZUludDE2TEUiLCJ3cml0ZUludDE2QkUiLCJ3cml0ZUludDMyTEUiLCJ3cml0ZUludDMyQkUiLCJ3cml0ZUJpZ0ludDY0TEUiLCJ3cml0ZUJpZ0ludDY0QkUiLCJ3cml0ZUZsb2F0TEUiLCJ3cml0ZUZsb2F0QkUiLCJ3cml0ZURvdWJsZUxFIiwid3JpdGVEb3VibGVCRSIsInRhcmdldFN0YXJ0IiwiY29weVdpdGhpbiIsImVycm9ycyIsIkUiLCJzeW0iLCJnZXRNZXNzYWdlIiwiQmFzZSIsImNvbnN0cnVjdG9yIiwic3VwZXIiLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsIm5hbWUiLCJzdGFjayIsIm1lc3NhZ2UiLCJhZGROdW1lcmljYWxTZXBhcmF0b3IiLCJyYW5nZSIsIkVSUl9PVVRfT0ZfUkFOR0UiLCJjaGVja0JvdW5kcyIsIkVSUl9JTlZBTElEX0FSR19UWVBFIiwiZmxvb3IiLCJFUlJfQlVGRkVSX09VVF9PRl9CT1VORFMiLCJpbnB1dCIsIm1zZyIsInJlY2VpdmVkIiwiaXNJbnRlZ2VyIiwiYWJzIiwiSU5WQUxJRF9CQVNFNjRfUkUiLCJJbmZpbml0eSIsImxlYWRTdXJyb2dhdGUiLCJzcGxpdCIsImJhc2U2NGNsZWFuIiwic3JjIiwiZHN0IiwiYWxwaGFiZXQiLCJ0YWJsZSIsImkxNiIsImZuIiwiQnVmZmVyQmlnSW50Tm90RGVmaW5lZCIsImlzTEUiLCJtTGVuIiwibkJ5dGVzIiwiZUxlbiIsImVNYXgiLCJlQmlhcyIsIm5CaXRzIiwiZCIsInMiLCJOYU4iLCJydCIsImlzTmFOIiwibG9nIiwiTE4yIiwiX2Jhc2U2NEVuY29kZSIsImJ1ZmZlckVuY29kaW5nIiwiX2Jhc2U2NERlY29kZSIsIlBST1BTIiwiQWxwaGFOdW0iLCJDSEFSUyIsInNpZ24iLCJpbmRleGVzIiwiYmFzZSIsImRlYyIsInVuc2hpZnQiLCJ3YXJuIiwidGV4dCIsImNoYXJzIiwibWFwIiwidiIsImFkZCIsInBhcnNlIiwiaW5zdGFuY2UiLCJ0b1VwcGVyQ2FzZSIsInRlc3QiLCJzaWduZWQiLCJpbnQiLCJERUZBVUxUX0VBU0lORyIsIkVhc2luZ3MiLCJlYXNlTGluZWFyIiwiREVGQVVMVF9EVVJBVElPTiIsIm9wdGlvbnMiLCJfZGVidWciLCJ1cGRhdGUiLCJfdXBkYXRlIiwiYmVmb3JlIiwiX2JlZm9yZSIsImFmdGVyIiwiX2FmdGVyIiwiZWFzaW5nIiwiX2Vhc2luZyIsImR1cmF0aW9uIiwiX2R1cmF0aW9uIiwiZGVsYXkiLCJfZGVsYXkiLCJkZWxheWVkIiwiX2RlbGF5ZWQiLCJfZnJvbSIsInRvIiwiX3RvIiwidGltZW91dCIsIl90aW1lb3V0IiwibWFudWFsIiwiX21hbnVhbCIsInNlbGYiLCJjb250ZXh0IiwiX2lzRnVuYyIsImVyciIsImhhc093blByb3BlcnR5IiwiX3Bvc0ludCIsIkJvb2xlYW4iLCJfbnVtIiwiZGlmZiIsImlkIiwiaXNfZG9uZSIsImlzX3BhdXNlZCIsInByZXYiLCJ0IiwicCIsInB0IiwiZXQiLCJlbGFwc2VkIiwiaW5kZXgiLCJ0aGVuIiwiRGF0ZSIsIm5vdyIsInJlc2V0IiwiY2xlYXJUaW1lb3V0IiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJnZXRUaW1lIiwiZmluaXNoIiwidGltZXN0YW1wIiwiYWJvcnRfbWV0aG9kIiwicGF1c2VfZHVyYXRpb24iLCJ0b3RhbF9kdXJhdGlvbiIsImFib3J0ZWQiLCJjb21wbGV0ZSIsInN0ZXAiLCJzZXRUaW1lb3V0IiwiYmVnaW4iLCJ0b0ZpeGVkIiwidGltZSIsImRlbHRhIiwiZnJhbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJwbGF5IiwicmVzdGFydCIsImRlYnVnIiwicGF1c2UiLCJ0b2dnbGUiLCJiZWd1biIsInBhdXNlZCIsImRvbmUiLCJyZXN1bWUiLCJjYW5jZWwiLCJhYm9ydCIsIl9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJfY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJ3aW5kb3ciLCJ2ZW5kb3JzIiwidmVuZG9yIiwiY2FsbGJhY2siLCJjdXJyIiwiaGFuZGxlIiwiY2hhbmdlIiwiZWFzZUluUXVhZCIsImVhc2VPdXRRdWFkIiwiZWFzZUluT3V0UXVhZCIsImVhc2VJblNpbmUiLCJjb3MiLCJQSSIsImVhc2VPdXRTaW5lIiwic2luIiwiZWFzZUluT3V0U2luZSIsImVhc2VJbkV4cG8iLCJlYXNlT3V0RXhwbyIsImVhc2VJbk91dEV4cG8iLCJlYXNlSW5DaXJjIiwic3FydCIsImVhc2VPdXRDaXJjIiwiZWFzZUluT3V0Q2lyYyIsImVhc2VJbkN1YmljIiwiZWFzZU91dEN1YmljIiwiZWFzZUluT3V0Q3ViaWMiLCJlYXNlSW5RdWFydCIsImVhc2VPdXRRdWFydCIsImVhc2VJbk91dFF1YXJ0IiwiZWFzZUluUXVpbnQiLCJlYXNlT3V0UXVpbnQiLCJlYXNlSW5PdXRRdWludCIsImVhc2VJbkVsYXN0aWMiLCJhc2luIiwiZWFzZU91dEVsYXN0aWMiLCJlYXNlSW5PdXRFbGFzdGljIiwiZWFzZUluQmFjayIsInN0YXJ0X3RpbWUiLCJzdG9wX3RpbWUiLCJfbXMiLCJfbm93IiwiX2lzRGF0ZSIsInVwZGF0ZVN0YXJ0IiwiX3N0YXJ0Iiwic3RvcCIsIl9zdG9wX3RpbWUiLCJfc3RvcCIsInN0YXJ0ZWQiLCJzdG9wcGVkIiwibXMiLCJzZWMiLCJkZWNpbWFsUGxhY2VzIiwiX3JvdW5kIiwiZWxhcHNlZF9tcyIsIkRFRkFVTFRfTUFYX0xJU1RFTkVSUyIsIkV2ZW50RW1pdHRlciIsIm1heF9saXN0ZW5lcnMiLCJfbWF4X2xpc3RlbmVycyIsIl9ldmVudHMiLCJ0aHJvd2FibGUiLCJfdHlwZSIsImxpc3RlbmVyIiwiX2xpc3RlbmVyIiwibGlzdGVuZXJzIiwicHJvcHMiLCJoYXNMaXN0ZW5lciIsImZpbmRJbmRleCIsImVtaXQiLCJldmVudCIsIm9uIiwib25jZSIsImFkZExpc3RlbmVyIiwic3Vic2NyaWJlIiwicmVtb3ZlTGlzdGVuZXIiLCJoYW5kbGVyIiwiZmlyZWQiLCJuZXdMaXN0ZW5lciIsInJlbW92ZWQiLCJfbGlzdGVuZXJzIiwic3BsaWNlIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwiZW1pdF9yZW1vdmVfbGlzdGVuZXIiLCJFdmVudHMiLCJFeGNlcHRpb24iLCJfdGltZSIsIl9lcnJvciIsIl9nZXRfc3RyIiwiX2dldF9pbnQiLCJfZ2V0X2NvZGUiLCJpdCIsIml0ZXJhdG9yIiwiVEFTS19TVEFUVVNFUyIsIkRFRkFVTFRfRVZFTlRfREVCT1VOQ0UiLCJERUZBVUxUX1BSRUNJU0lPTiIsIl9wb3NfbnVtIiwiX2RlZmF1bHQiLCJfYmxhbmsiLCJwYXJzZUZsb2F0IiwiX3Bvc19pbnQiLCJwbGFjZXMiLCJyb3VuZCIsIkVQU0lMT04iLCJfanNvbl9zdHIiLCJzZWVuIiwiSlNPTiIsInN0cmluZ2lmeSIsIl8iLCJfZ2V0X2Vycm9yIiwicmVhc29uIiwiX2RlYm91bmNlIiwidGltZXIiLCJtYXhfd2FpdCIsIl9oYW5kbGVyIiwiVGFzayIsImV2ZW50X2RlYm91bmNlIiwiZGVjaW1hbF9wcmVjaXNpb24iLCJsYWJlbCIsImxpbmtlZCIsInByZWNpc2lvbiIsInByb2dyZXNzIiwidG90YWwiLCJzdGF0dXMiLCJzdGFydFRpbWUiLCJzdG9wVGltZSIsImVsYXBzZWRUaW1lIiwiaXRlbSIsIl9kb25lIiwiX2VtaXR0ZXIiLCJfZGVib3VuY2VkX3VwZGF0ZSIsImNoYW5nZXMiLCJmYWlsdXJlIiwiY29tcGxldGVQcm9ncmVzcyIsInNldFByb2dyZXNzIiwiX3ZhbHVlIiwiX3RvdGFsIiwic2V0VG90YWwiLCJzZXRWYWx1ZSIsInNldEl0ZW0iLCJjcmVhdGUiLCJfcHJlY2lzaW9uIiwiX2V2ZW50X2RlYm91bmNlIiwiX3JvdW5kX3AiLCJwcm9nIiwiX29wdGlvbnMiLCJUYXNrcyIsIl90YXNrcyIsIk1hcCIsIl91bnN1YnNjcmliZSIsImFsbF9wcm9ncmVzcyIsImZ1bGxfcHJvZ3Jlc3MiLCJoYXNfcnVubmluZyIsImhhc19zdGFydGVkIiwiaGFzX2luY29tcGxldGUiLCJ0YXNrX2VudHJpZXMiLCJ0YXNrIiwidmFsdWVzIiwidGFza3MiLCJmcm9tRW50cmllcyIsInJ1bm5pbmciLCJoYXMiLCJfdGFzayIsInVuc3Vic2NyaWJlIiwicmVtb3ZlIiwiZGVsZXRlIiwiVEVSTV9MT0dfTUVUSE9EIiwiVEVSTV9GT1JNQVRfRElTQUJMRUQiLCJGT1JNQVRfRElTQUJMRUQiLCJfYm9vbCIsIkxPR19NRVRIT0RTIiwiTE9HX01FVEhPRCIsIkZPUk1BVFMiLCJicmlnaHQiLCJkaW0iLCJ1bmRlcnNjb3JlIiwiYmxpbmsiLCJyZXZlcnNlIiwiaGlkZGVuIiwiZmdfYmxhY2siLCJmZ19yZWQiLCJmZ19ncmVlbiIsImZnX3llbGxvdyIsImZnX2JsdWUiLCJmZ19tYWdlbnRhIiwiZmdfY3lhbiIsImZnX3doaXRlIiwiZmdfZ3JheSIsImJnX2JsYWNrIiwiYmdfcmVkIiwiYmdfZ3JlZW4iLCJiZ195ZWxsb3ciLCJiZ19ibHVlIiwiYmdfbWFnZW50YSIsImJnX2N5YW4iLCJiZ193aGl0ZSIsImJnX2dyYXkiLCJQUkVERUZJTkVEX0ZPUk1BVFMiLCJkdW1wIiwiaW5mbyIsInN1Y2Nlc3MiLCJiZ19sb2ciLCJiZ19kZWJ1ZyIsImJnX2Vycm9yIiwiYmdfd2FybiIsImJnX2luZm8iLCJiZ19zdWNjZXNzIiwiZ2V0Rm9ybWF0cyIsImZvcm1hdHMiLCJGTSIsIlBGIiwicmVkdWNlIiwiX2FkZFBGIiwiayIsImZvcm1hdCIsImFyZ3MiLCJfZm9ybWF0cyIsIl9mb3JtYXQiLCJSZWdFeHAiLCJfc3RyaW5nIiwiZiIsInRoYXQiLCJsb2dfbWV0aG9kIiwiX21ldGhvZCIsIm1ldGhvZCIsIml0ZW1zIiwiY2xlYW4iLCJfY2xlYW4iLCJfdmFsIiwiX2Zvcm1hdHNfbGlzdCIsImJyIiwiX2VudHJpZXMiLCJfY2xvbmUiLCJfc3RyaW5nYWJsZSIsImVudHJpZXMiLCJ0bXBfZW50cmllcyIsImNlbGxNYXhMZW5ndGgiLCJkaXZpZGVyIiwibm9JbmRleCIsIm51bUluZGV4IiwiYXJnc19jZWxsTWF4TGVuZ3RoIiwiYXJnc19kaXZpZGVyIiwiYXJnc19ub0luZGV4IiwiYXJnc19udW1JbmRleCIsImFyZ3NfdGV4dCIsInByb2Nlc3MiLCJhcmd2IiwiYXJnc19tYXRjaCIsIm1hdGNoIiwiZGF0YV9pdGVtcyIsImRhdGFfdHlwZSIsInN0clZhbCIsImNvbG9yIiwiX2pzb25TdHJpbmdpZnkiLCJfc3RyRXNjYXBlIiwibW9kZSIsInRhYmxlX2l0ZW1zIiwibWFwX2tleXMiLCJtYXBfaXRlbXMiLCJyIiwiZGF0YV9pdGVtIiwibGlzdF9pdGVtcyIsImxpc3RfdHlwZSIsIm1hcF9pdGVtIiwiX3N0ciIsInRhYmxlX2l0ZW0iLCJrZXkiLCJ3aWR0aF9tYXAiLCJzdHJfaXRlbXMiLCJzdHJfaXRlbSIsIndpZHRoIiwidHh0Iiwicm93c19sZW4iLCJtYXhfbGluZXMiLCJzdHJfaXRlbV9saW5lcyIsImxpbmVzIiwibGluZSIsInN1YnN0cmluZyIsInBhZEVuZCIsIm1heF9zdHJfaXRlbV9saW5lcyIsInN0cl9tYXhfbGluZXMiLCJtYXhfbGluZXNfYXJyYXkiLCJsaW5lX3Jvd3MiLCJyb3dzIiwibGluZXNfdG9wIiwibGVmdCIsIm1pZCIsInJpZ2h0IiwibGluZXNfbWlkIiwibGluZXNfYm90dG9tIiwibGluZXNfc2lkZSIsImJvcmRlck1vZGUiLCJsaW5lX3JvdyIsImJtIiwiYm9yZGVyX3RvcCIsImJvcmRlcl9taWQiLCJib3JkZXJfYm90dG9tIiwiY2xlYXIiLCJFWFRfTUlNRVMiLCJfbWltZSIsIl9mYWlsdXJlIiwicHJvcCIsImZpbmQiLCJzdGFydHNXaXRoIiwiRmFpbEVycm9yIiwiX2Jhc2VuYW1lIiwiZG90cyIsIl9zdHJpY3QiLCJiYXNlbmFtZSIsImlsbGVnYWwiLCJpbnZhbGlkIiwicG9wIiwiQmFzZW5hbWVFcnJvciIsIl9maWxlcGF0aCIsInNlcGFyYXRvciIsInNlcCIsImRyaXZlIiwicGF0aCIsInBhdGhfcGFydHMiLCJfc3BsaXQiLCJwYXJ0IiwiZGl2IiwidHJpbW1lZF9wYXJ0cyIsIm5vcm1fcGFydHMiLCJTZXQiLCJvdXRib3VuZCIsInRtcF9wYXRoIiwib3V0Ym91bmRfcGF0aCIsIk5vcm1QYXRoRXJyb3IiLCJfYmF0Y2hWYWx1ZXMiLCJiYXRjaFNpemUiLCJfYnVmZmVyIiwiY2xvbmUiLCJub2RlVHlwZSIsImNsb25lTm9kZSIsIl9pbnN0YW5jZW9mIiwibyIsIl90b1N0cmluZyIsImNsb25lUHJvdG90eXBlIiwicGFyZW50IiwiZ2V0UHJvdG90eXBlT2YiLCJjaXJjdWxhciIsIl9jaXJjdWxhciIsImRlcHRoIiwiX2RlcHRoIiwiX3Byb3RvdHlwZSIsIm5vbl9lbnVtZXJhYmxlIiwiX25vbl9lbnVtZXJhYmxlIiwiYWxsUGFyZW50cyIsImFsbENoaWxkcmVuIiwidXNlQnVmZmVyIiwiY2hpbGQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImNhdGNoIiwiX2lzUmVnRXhwIiwic291cmNlIiwicmVnZXgiLCJmbGFncyIsImdsb2JhbCIsImlnbm9yZUNhc2UiLCJtdWx0aWxpbmUiLCJfZ2V0UmVnRXhwRmxhZ3MiLCJsYXN0SW5kZXgiLCJrZXlDaGlsZCIsInZhbENoaWxkIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib2JqUHJvcGVydHkiLCJSZWZlcmVuY2VFcnJvciIsImdldE93blByb3BlcnR5U3ltYm9scyIsInN5bWJvbHMiLCJzeW1ib2wiLCJkZXNjcmlwdG9yIiwiYWxsUHJvcGVydHlOYW1lcyIsImdldE93blByb3BlcnR5TmFtZXMiLCJwcm9wZXJ0eU5hbWUiLCJfY29tcGFyZSIsImxlZnRDaGFpbiIsInJpZ2h0Q2hhaW4iLCJkZWVwTWF0Y2giLCJpc1Byb3RvdHlwZU9mIiwidmFsX2EiLCJ2YWxfYiIsIl9jb21wYXJlU2hhbGxvdyIsInNoYWxsb3dNYXRjaCIsIl9kYXRlIiwiX3BhcnNlIiwiZGF0ZSIsIkRBWV9OQU1FUyIsIl9kYXlOYW1lIiwiTU9OVEhfTkFNRVMiLCJfbW9udGhOYW1lIiwiX2RheVN0YXJ0IiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImdldERhdGUiLCJfZGF5RW5kIiwiX21vbnRoU3RhcnQiLCJfbW9udGhFbmQiLCJfeWVhclN0YXJ0IiwiX3llYXJFbmQiLCJfZGF0ZXRpbWUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwicGFkZGVkIiwicGFkU3RhcnQiLCJfZGF0ZXN0ciIsIl90aW1lc3RyIiwiX3BhcnNlSXNvIiwic3RydWN0IiwiZXhlYyIsIm1pbl9vZmZzZXQiLCJVVEMiLCJZRUFSX01TIiwiTU9OVEhfTVMiLCJEQVlfTVMiLCJIT1VSX01TIiwiTUlOVVRFX01TIiwiU0VDT05EX01TIiwiY3JlYXRlX2R1cmF0aW9uIiwieWVhcnMiLCJtb250aHMiLCJkYXlzIiwiaG91cnMiLCJtaW51dGVzIiwic2Vjb25kcyIsIm1pbGxpc2Vjb25kcyIsInRvdGFsX2RheXMiLCJ0b3RhbF90aW1lIiwiZW5kX3RpbWUiLCJidWZmZXJfdGV4dCIsImJ1ZmZlcl90aW1lIiwiX2FkZCIsIl9lbGFwc2VkIiwiZ2V0TWlsbGlzZWNvbmRzIiwic3RhcnRfeWVhciIsInN0YXJ0X21vbnRoIiwiX2RlYm91Y2VkIiwibWF4V2FpdCIsImltbWVkaWF0ZSIsImltbWVkaWF0ZVRpbWVyIiwiY2FsbFRpbWVyIiwid2FpdFRpbWVyIiwibmV4dENhbGwiLCJleGVjdXRlIiwiaXNfaW1tZWRpYXRlIiwibmV4dCIsIndyYXBwZXIiLCJfbmV4dCIsIm5vX3dhaXQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3NheUhlbGxvIiwiaGVsbG8iLCJzcGFjZSIsIl91bmRlZmluZWQiLCJfc3BhY2UiLCJwYXJlbnRzIiwicmVmcyIsIl9yZXBsYWNlciIsIl9wYXJlbnRzIiwib3RoZXIiLCJfanNvblBhcnNlIiwiX2pzb25Db3B5IiwiX2lzT2JqSnNvbiIsIl9udW1lcmljIiwiYm9vbGVhbnMiLCJibGFua3MiLCJwcmVmaXgiLCJNSU5fU0FGRV9JTlRFR0VSIiwiTUFYX1NBRkVfSU5URUdFUiIsIl9wb3NOdW0iLCJfaW50IiwiX2xpbWl0X2RlZmF1bHQiLCJfY29tbWFzIiwiemVyb3MiLCJfcmFuZCIsInJhbmRvbSIsIl9weDJyZW0iLCJ1bml0IiwiX2J5dGVzVmFsIiwiY29tbWFzIiwidSIsIl9kZWMyYmFzZSIsImRlY2ltYWwiLCJncm91cCIsImhleF9jaGFycyIsInJlbWFpbmRlciIsIl9kZWMyYmluIiwiX2JpbjJkZWMiLCJiaW5hcnkiLCJfZGVjMmhleCIsIl9oZXgyZGVjIiwiaGV4IiwiaGV4X21hcCIsIl9kZWMyb2N0IiwiX29jdDJkZWMiLCJvY3RhbCIsIl9iYXNlMmRlYyIsIl9kZWcycmFkIiwiZGVncmVlcyIsIl9yYWQyZGVnIiwicmFkaWFucyIsIl9kaXN0YW5jZSIsImxhdGl0dWRlMSIsImxvbmdpdHVkZTEiLCJsYXRpdHVkZTIiLCJsb25naXR1ZGUyIiwiYXRhbjIiLCJfbG9neCIsImxvZzIiLCJfbnVtayIsIm1heF9wb3ciLCJsb2cxMCIsIl9nZXRBbGxQcm9wZXJ0eURlc2NyaXB0b3JzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsIl9nZXRBbGxQcm9wZXJ0aWVzIiwic3RhdGljcyIsIl9fZ2V0X3Byb3BzIiwia2V5cyIsIl9fZ2V0X2tleXMiLCJleGNsdWRlZF9wcm9wcyIsIkZ1bmN0aW9uIiwiX19hZGRfcHJvcHMiLCJfaGFzUHJvcCIsIm93biIsIl9oYXNQcm9wcyIsIl9oYXNBbnlQcm9wcyIsIl9nZXRQcm9wIiwicHJvcGVydHkiLCJleGlzdHMiLCJ0ZXh0X21hdGNoIiwiX2lzQ2xhc3MiLCJvckNsYXNzIiwiX21pbk1heCIsIl9kb3RGbGF0Iiwib21pdCIsIl9hZGRFbnRyaWVzIiwiX3Bfa2V5IiwiZW50cnkiLCJfa2V5IiwiX2RvdEluZmxhdGUiLCJwYXRoX3ZhbHVlIiwia2V5c19pdGVtIiwia2V5c19idWZmZXIiLCJfbm9ybSIsIl92YWxpZERvdFBhdGgiLCJkb3RfcGF0aCIsIm9wZXJhdGlvbnMiLCJ2YWxpZCIsIl9pbnZhbGlkIiwic3RyaWN0IiwiX2RvdEdldCIsInNlYXJjaF9lbnRyaWVzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwibWF0Y2hlcyIsIl92YWx1ZU9mIiwiX2VtcHR5IiwiX2l0ZXJhYmxlIiwiX2FzeW5jIiwiYXN5bmNJdGVyYXRvciIsIl9pc09iamVjdCIsIl9maWxsZWQiLCJfaXNBcnJheSIsIl9tb2RlIiwiX3ZhbHVlcyIsIm9iamVjdCIsImZsYXR0ZW4iLCJoYXNfZW50cmllcyIsImZsYXQiLCJfZHVtcFZhbCIsIm1heFN0ckxlbmd0aCIsIl9nZXRfZmlyc3QiLCJzYW1lX2tleXMiLCJwcmV2X2tleXMiLCJrZXlzX3ZhbCIsImNvdW50IiwiYXBwZW5kIiwiX21heFN0ciIsIl9zb3J0Iiwib25Db21wYXJlIiwibG9jYWxlQ29tcGFyZUNvbmZpZyIsInNvcnRfbW9kZSIsImxvY2FsZV9jb21wYXJlX2NvbmZpZyIsImxvY2FsZXMiLCJzZW5zaXRpdml0eSIsIl9vbl9jb21wYXJlIiwiX3NvcnRfY29tcGFyZSIsInJlc3VsdCIsImxvY2FsZUNvbXBhcmUiLCJfc29ydF9vcmRlciIsInNtb2RlIiwiX2RvX2NvbXBhcmUiLCJfc29ydF9tZXRob2QiLCJzb3J0X21hcCIsIl9zb3J0X2VudHJ5Iiwic29ydF9lbnRyaWVzIiwia2V5X29yZGVyIiwic29ydCIsIl90cmFucyIsInRlbXBsYXRlIiwicGF0dGVybiIsIm1pc3NpbmciLCJfdHJhbnNfZm9ybWF0IiwiX3RyYW5zX2dldCIsImRlZmF1bHRfdmFsIiwiX2FycmF5TGlzdCIsIl9tYXBWYWx1ZXMiLCJfbG93ZXJjYXNlIiwiX3RleHRzIiwiX3NpbGVudCIsImVycl9tZXNzYWdlIiwiX2Vycm9yVGV4dCIsImVycl9tb2RlIiwiZXJyX2RlYnVnIiwiZXJyX25hbWUiLCJfcHJvcHNPYmoiLCJfb21pdCIsImZpbHRlciIsIl9jaHVua3MiLCJjaHVua3MiLCJfc2VsZWN0S2V5cyIsImZpbGxlZF9vbmx5IiwiX2dldF9rZXlzIiwib21pdHMiLCJmaWxsZWQiLCJ1bmZpbGxlZCIsImtleXNfb2JqZWN0Iiwic2VsZWN0ZWQiLCJ1bmZpbGxlZF9rZXlzIiwiaXRlbV9lbnRyaWVzIiwiX3RyZWUiLCJfbmFtZSIsInBhZCIsIl9wYWQiLCJtYXhfbGVuZ3RoIiwid3JhcF9sZW5ndGgiLCJ3b3JkX2JyZWFrIiwiX2xpbmVzIiwibm9kZSIsIm5vZGVfZW5kIiwibm9kZV9zcGFjZSIsIm5vZGVfYm9yZGVyIiwicmVnX3F1b3RlcyIsIml0ZXJhYmxlIiwic2tpcCIsInZfbGluZXMiLCJ2X2xlbiIsImlzX2xpc3QiLCJsaXN0X3ZhbHVlIiwia2V5X25vZGUiLCJwcm9jX2xlbiIsInN0ZG91dCIsImNvbHVtbnMiLCJ2X2xhc3QiLCJxdW90ZWQiLCJfdGV4dE1heExlbmd0aCIsIndyYXBfbGVuIiwid3JhcF9saW5lcyIsIl93cmFwTGluZXMiLCJ0ZXh0X25vZGUiLCJ3cmFwX25vZGUiLCJ3cmFwX2xpbmUiLCJhc3luYyIsIl9yZXNvbHZlIiwicHJvbWlzZSIsIl9uZXciLCJyZXNvbHZlZCIsIl9hc3luY0FsbCIsIm9uUHJvZ3Jlc3MiLCJfY2FsbGJhY2siLCJfb25Qcm9ncmVzcyIsImZhaWx1cmVzIiwicXVldWUiLCJyZXN1bHRzIiwiZmFpbGVkIiwicGVyY2VudCIsImZvckVhY2giLCJfYXN5bmNRdWV1ZSIsInBlbmRpbmciLCJuZXh0X3RpbWVvdXQiLCJfcXVldWVfbmV4dCIsInNoaWZ0IiwiX2FzeW5jVmFsdWVzIiwiZWFjaCIsIl9icmVhayIsIl9zbGVlcCIsIlBlbmRpbmdBYm9ydEVycm9yIiwiUEVORElOR19DQUNIRSIsIl9wZW5kaW5nIiwia2VlcCIsIl9wZW5kaW5nX3Jlc29sdmUiLCJfcGVuZGluZ19yZWplY3QiLCJjdXJyZW50IiwibmV4dF9wcm9taXNlIiwiYWJvcnRFcnJvciIsInBlbmRpbmdfcHJvbWlzZSIsIl9wZW5kaW5nQWJvcnQiLCJfcXVldWUiLCJoZWFkIiwidGFpbCIsImlzRW1wdHkiLCJlbnF1ZXVlIiwiZGVxdWV1ZSIsInBlZWsiLCJfcmM0IiwiUyIsIksiLCJrZXlzdHJlYW0iLCJfeHVpZCIsIl91dWlkIiwiX2dldF91dWlkIiwidXVpZCIsInRvSVNPU3RyaW5nIiwiX3N0ck5vcm0iLCJub3JtYWxpemUiLCJfcmVnRXNjYXBlIiwiaCIsImVuY29kZVVSSUNvbXBvbmVudCIsIl9zcWxFc2NhcGUiLCJfdHJpbSIsInJsIiwidHJpbV9jaGFycyIsImQxIiwiZDIiLCJfbHRyaW0iLCJfcnRyaW0iLCJfdG9UaXRsZUNhc2UiLCJrZWVwQ2FzZSIsIl90b1NlbnRlbmNlQ2FzZSIsImNoYXJBdCIsInJlc3QiLCJfdG9TbmFrZUNhc2UiLCJ0cmltVHJhaWxpbmciLCJfdG9TbHVnQ2FzZSIsIl90b1N0dWRseUNhc2UiLCJ3b3JkIiwiX3RvQ2FtZWxDYXNlIiwiX3RvTG93ZXJDYXNlIiwiX3RvVXBwZXJDYXNlIiwiX2hhc2hDb2RlIiwiaGFzaCIsIl9oYXNoQ29kZVN0ciIsInJlIiwiX2hhc2g1MyIsInNlZWQiLCJoMSIsImgyIiwiY2giLCJpbXVsIiwiX3BhcnNlRGF0YVVyaSIsIm1pbWUiLCJjaGFyc2V0IiwiX2lzVXJsIiwibWF0Y2hEYXRhVVJJIiwiX2lzRW1haWwiLCJfcGFyc2VDc3YiLCJkZWxpbWl0ZXIiLCJuX3NlcF9yZSIsInFfc2VwX3JlIiwiY19zZXBfcmUiLCJkZWxpbSIsImZpZWxkX3JlIiwicDEiLCJwMiIsInJvdyIsImNlbGwiLCJfdG9Dc3YiLCJfY2VsbCIsIml0ZXJhYmxlcyIsInZfcm93IiwiZGF0YV9yb3dzIiwiZGF0YV9yb3ciLCJkX3JvdyIsImNzdiIsInJlc3BvbnNlIiwiYm9keSIsIm1heF9sZW4iLCJhcHBlbmRfbGVuIiwidGV4dF9sZW4iLCJfY3IiLCJwYXNzIiwiX2tleVZhbHVlIiwiZXNjYXBlIiwidmFsdWVfZGVsaW1pdGVyIiwiZW50cmllc19kZWxpbWl0ZXIiLCJ2YWx1ZV9kZWxpbSIsImVudHJpZXNfZGVsaW0iLCJfcGFyc2VLZXlWYWx1ZXMiLCJwYXJzZV9lbnRyaWVzIiwiX3N0cktleVZhbHVlcyIsIl92YWx1ZV9kZWxpbWl0ZXIiLCJfZW50cmllc19kZWxpbWl0ZXIiLCJrZXlfcHJvcCIsInZhbF9wcm9wIiwic2FtZSIsIl9zZXRfbW9kZSIsIl9zdHJfdmFsdWUiLCJfYWRkX2l0ZW0iLCJfcmVjdXJzZSIsIm9uQWRkTGluZSIsIl9vbkFkZExpbmUiLCJsaW5lc19idWZmZXIiLCJsaW5lX2J1ZmZlciIsIl9hZGRfbGluZSIsIl9wYXJzZV9saW5lIiwiX2xpbmVfYnVmZmVyX2FkZCIsImxpbmVfdGV4dCIsIl9lc2NhcGUiLCJjaGFyIiwib3JkIiwiX3VuZXNjYXBlIiwiX3V0ZjhFbmNvZGUiLCJfdXRmOERlY29kZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iXSwic291cmNlUm9vdCI6IiJ9
\ No newline at end of file
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.xutils=e():t.xutils=e()}(this,(()=>{return t={9742:(t,e)=>{"use strict";e.byteLength=function(t){var e=s(t),n=e[0],i=e[1];return 3*(n+i)/4-i},e.toByteArray=function(t){var e,n,o=s(t),a=o[0],p=o[1],c=new r(function(t,e,n){return 3*(e+n)/4-n}(0,a,p)),l=0,u=p>0?a-4:a;for(n=0;n>16&255,c[l++]=e>>8&255,c[l++]=255&e;return 2===p&&(e=i[t.charCodeAt(n)]<<2|i[t.charCodeAt(n+1)]>>4,c[l++]=255&e),1===p&&(e=i[t.charCodeAt(n)]<<10|i[t.charCodeAt(n+1)]<<4|i[t.charCodeAt(n+2)]>>2,c[l++]=e>>8&255,c[l++]=255&e),c},e.fromByteArray=function(t){for(var e,i=t.length,r=i%3,o=[],a=16383,s=0,c=i-r;sc?c:s+a));return 1===r?(e=t[i-1],o.push(n[e>>2]+n[e<<4&63]+"==")):2===r&&(e=(t[i-2]<<8)+t[i-1],o.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"=")),o.join("")};for(var n=[],i=[],r="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0;a<64;++a)n[a]=o[a],i[o.charCodeAt(a)]=a;function s(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");return-1===n&&(n=e),[n,n===e?0:4-n%4]}function p(t,e,i){for(var r,o,a=[],s=e;s>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return a.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},8764:(t,e,n)=>{"use strict";const i=n(9742),r=n(645),o="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=p,e.SlowBuffer=function(t){return+t!=t&&(t=0),p.alloc(+t)},e.INSPECT_MAX_BYTES=50;const a=2147483647;function s(t){if(t>a)throw new RangeError('The value "'+t+'" is invalid for option "size"');const e=new Uint8Array(t);return Object.setPrototypeOf(e,p.prototype),e}function p(t,e,n){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return u(t)}return c(t,e,n)}function c(t,e,n){if("string"==typeof t)return function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!p.isEncoding(e))throw new TypeError("Unknown encoding: "+e);const n=0|h(t,e);let i=s(n);const r=i.write(t,e);return r!==n&&(i=i.slice(0,r)),i}(t,e);if(ArrayBuffer.isView(t))return function(t){if(Z(t,Uint8Array)){const e=new Uint8Array(t);return f(e.buffer,e.byteOffset,e.byteLength)}return d(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(Z(t,ArrayBuffer)||t&&Z(t.buffer,ArrayBuffer))return f(t,e,n);if("undefined"!=typeof SharedArrayBuffer&&(Z(t,SharedArrayBuffer)||t&&Z(t.buffer,SharedArrayBuffer)))return f(t,e,n);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');const i=t.valueOf&&t.valueOf();if(null!=i&&i!==t)return p.from(i,e,n);const r=function(t){if(p.isBuffer(t)){const e=0|m(t.length),n=s(e);return 0===n.length||t.copy(n,0,0,e),n}return void 0!==t.length?"number"!=typeof t.length||J(t.length)?s(0):d(t):"Buffer"===t.type&&Array.isArray(t.data)?d(t.data):void 0}(t);if(r)return r;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return p.from(t[Symbol.toPrimitive]("string"),e,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function l(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function u(t){return l(t),s(t<0?0:0|m(t))}function d(t){const e=t.length<0?0:0|m(t.length),n=s(e);for(let i=0;i=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|t}function h(t,e){if(p.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||Z(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const n=t.length,i=arguments.length>2&&!0===arguments[2];if(!i&&0===n)return 0;let r=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return Y(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return V(t).length;default:if(r)return i?-1:Y(t).length;e=(""+e).toLowerCase(),r=!0}}function g(t,e,n){let i=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return I(this,e,n);case"utf8":case"utf-8":return k(this,e,n);case"ascii":return M(this,e,n);case"latin1":case"binary":return T(this,e,n);case"base64":return j(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return N(this,e,n);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}function v(t,e,n){const i=t[e];t[e]=t[n],t[n]=i}function _(t,e,n,i,r){if(0===t.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),J(n=+n)&&(n=r?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(r)return-1;n=t.length-1}else if(n<0){if(!r)return-1;n=0}if("string"==typeof e&&(e=p.from(e,i)),p.isBuffer(e))return 0===e.length?-1:b(t,e,n,i,r);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):b(t,[e],n,i,r);throw new TypeError("val must be string, number or Buffer")}function b(t,e,n,i,r){let o,a=1,s=t.length,p=e.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(t.length<2||e.length<2)return-1;a=2,s/=2,p/=2,n/=2}function c(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(r){let i=-1;for(o=n;os&&(n=s-p),o=n;o>=0;o--){let n=!0;for(let i=0;ir&&(i=r):i=r;const o=e.length;let a;for(i>o/2&&(i=o/2),a=0;a>8,r=n%256,o.push(r),o.push(i);return o}(e,t.length-n),t,n,i)}function j(t,e,n){return 0===e&&n===t.length?i.fromByteArray(t):i.fromByteArray(t.slice(e,n))}function k(t,e,n){n=Math.min(t.length,n);const i=[];let r=e;for(;r239?4:e>223?3:e>191?2:1;if(r+a<=n){let n,i,s,p;switch(a){case 1:e<128&&(o=e);break;case 2:n=t[r+1],128==(192&n)&&(p=(31&e)<<6|63&n,p>127&&(o=p));break;case 3:n=t[r+1],i=t[r+2],128==(192&n)&&128==(192&i)&&(p=(15&e)<<12|(63&n)<<6|63&i,p>2047&&(p<55296||p>57343)&&(o=p));break;case 4:n=t[r+1],i=t[r+2],s=t[r+3],128==(192&n)&&128==(192&i)&&128==(192&s)&&(p=(15&e)<<18|(63&n)<<12|(63&i)<<6|63&s,p>65535&&p<1114112&&(o=p))}}null===o?(o=65533,a=1):o>65535&&(o-=65536,i.push(o>>>10&1023|55296),o=56320|1023&o),i.push(o),r+=a}return function(t){const e=t.length;if(e<=A)return String.fromCharCode.apply(String,t);let n="",i=0;for(;ii.length?(p.isBuffer(e)||(e=p.from(e)),e.copy(i,r)):Uint8Array.prototype.set.call(i,e,r);else{if(!p.isBuffer(e))throw new TypeError('"list" argument must be an Array of Buffers');e.copy(i,r)}r+=e.length}return i},p.byteLength=h,p.prototype._isBuffer=!0,p.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let e=0;en&&(t+=" ... "),""},o&&(p.prototype[o]=p.prototype.inspect),p.prototype.compare=function(t,e,n,i,r){if(Z(t,Uint8Array)&&(t=p.from(t,t.offset,t.byteLength)),!p.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===i&&(i=0),void 0===r&&(r=this.length),e<0||n>t.length||i<0||r>this.length)throw new RangeError("out of range index");if(i>=r&&e>=n)return 0;if(i>=r)return-1;if(e>=n)return 1;if(this===t)return 0;let o=(r>>>=0)-(i>>>=0),a=(n>>>=0)-(e>>>=0);const s=Math.min(o,a),c=this.slice(i,r),l=t.slice(e,n);for(let t=0;t>>=0,isFinite(n)?(n>>>=0,void 0===i&&(i="utf8")):(i=n,n=void 0)}const r=this.length-e;if((void 0===n||n>r)&&(n=r),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");let o=!1;for(;;)switch(i){case"hex":return y(this,t,e,n);case"utf8":case"utf-8":return x(this,t,e,n);case"ascii":case"latin1":case"binary":return w(this,t,e,n);case"base64":return O(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0}},p.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const A=4096;function M(t,e,n){let i="";n=Math.min(t.length,n);for(let r=e;ri)&&(n=i);let r="";for(let i=e;in)throw new RangeError("Trying to access beyond buffer length")}function P(t,e,n,i,r,o){if(!p.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>r||et.length)throw new RangeError("Index out of range")}function C(t,e,n,i,r){F(e,i,r,t,n,7);let o=Number(e&BigInt(4294967295));t[n++]=o,o>>=8,t[n++]=o,o>>=8,t[n++]=o,o>>=8,t[n++]=o;let a=Number(e>>BigInt(32)&BigInt(4294967295));return t[n++]=a,a>>=8,t[n++]=a,a>>=8,t[n++]=a,a>>=8,t[n++]=a,n}function B(t,e,n,i,r){F(e,i,r,t,n,7);let o=Number(e&BigInt(4294967295));t[n+7]=o,o>>=8,t[n+6]=o,o>>=8,t[n+5]=o,o>>=8,t[n+4]=o;let a=Number(e>>BigInt(32)&BigInt(4294967295));return t[n+3]=a,a>>=8,t[n+2]=a,a>>=8,t[n+1]=a,a>>=8,t[n]=a,n+8}function D(t,e,n,i,r,o){if(n+i>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function $(t,e,n,i,o){return e=+e,n>>>=0,o||D(t,0,n,4),r.write(t,e,n,i,23,4),n+4}function L(t,e,n,i,o){return e=+e,n>>>=0,o||D(t,0,n,8),r.write(t,e,n,i,52,8),n+8}p.prototype.slice=function(t,e){const n=this.length;(t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(e=void 0===e?n:~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),e>>=0,e>>>=0,n||S(t,e,this.length);let i=this[t],r=1,o=0;for(;++o>>=0,e>>>=0,n||S(t,e,this.length);let i=this[t+--e],r=1;for(;e>0&&(r*=256);)i+=this[t+--e]*r;return i},p.prototype.readUint8=p.prototype.readUInt8=function(t,e){return t>>>=0,e||S(t,1,this.length),this[t]},p.prototype.readUint16LE=p.prototype.readUInt16LE=function(t,e){return t>>>=0,e||S(t,2,this.length),this[t]|this[t+1]<<8},p.prototype.readUint16BE=p.prototype.readUInt16BE=function(t,e){return t>>>=0,e||S(t,2,this.length),this[t]<<8|this[t+1]},p.prototype.readUint32LE=p.prototype.readUInt32LE=function(t,e){return t>>>=0,e||S(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},p.prototype.readUint32BE=p.prototype.readUInt32BE=function(t,e){return t>>>=0,e||S(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},p.prototype.readBigUInt64LE=W((function(t){q(t>>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||H(t,this.length-8);const i=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,r=this[++t]+256*this[++t]+65536*this[++t]+n*2**24;return BigInt(i)+(BigInt(r)<>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||H(t,this.length-8);const i=e*2**24+65536*this[++t]+256*this[++t]+this[++t],r=this[++t]*2**24+65536*this[++t]+256*this[++t]+n;return(BigInt(i)<>>=0,e>>>=0,n||S(t,e,this.length);let i=this[t],r=1,o=0;for(;++o=r&&(i-=Math.pow(2,8*e)),i},p.prototype.readIntBE=function(t,e,n){t>>>=0,e>>>=0,n||S(t,e,this.length);let i=e,r=1,o=this[t+--i];for(;i>0&&(r*=256);)o+=this[t+--i]*r;return r*=128,o>=r&&(o-=Math.pow(2,8*e)),o},p.prototype.readInt8=function(t,e){return t>>>=0,e||S(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},p.prototype.readInt16LE=function(t,e){t>>>=0,e||S(t,2,this.length);const n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},p.prototype.readInt16BE=function(t,e){t>>>=0,e||S(t,2,this.length);const n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},p.prototype.readInt32LE=function(t,e){return t>>>=0,e||S(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},p.prototype.readInt32BE=function(t,e){return t>>>=0,e||S(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},p.prototype.readBigInt64LE=W((function(t){q(t>>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||H(t,this.length-8);const i=this[t+4]+256*this[t+5]+65536*this[t+6]+(n<<24);return(BigInt(i)<>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||H(t,this.length-8);const i=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(i)<>>=0,e||S(t,4,this.length),r.read(this,t,!0,23,4)},p.prototype.readFloatBE=function(t,e){return t>>>=0,e||S(t,4,this.length),r.read(this,t,!1,23,4)},p.prototype.readDoubleLE=function(t,e){return t>>>=0,e||S(t,8,this.length),r.read(this,t,!0,52,8)},p.prototype.readDoubleBE=function(t,e){return t>>>=0,e||S(t,8,this.length),r.read(this,t,!1,52,8)},p.prototype.writeUintLE=p.prototype.writeUIntLE=function(t,e,n,i){t=+t,e>>>=0,n>>>=0,i||P(this,t,e,n,Math.pow(2,8*n)-1,0);let r=1,o=0;for(this[e]=255&t;++o>>=0,n>>>=0,i||P(this,t,e,n,Math.pow(2,8*n)-1,0);let r=n-1,o=1;for(this[e+r]=255&t;--r>=0&&(o*=256);)this[e+r]=t/o&255;return e+n},p.prototype.writeUint8=p.prototype.writeUInt8=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,1,255,0),this[e]=255&t,e+1},p.prototype.writeUint16LE=p.prototype.writeUInt16LE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeUint16BE=p.prototype.writeUInt16BE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeUint32LE=p.prototype.writeUInt32LE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},p.prototype.writeUint32BE=p.prototype.writeUInt32BE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigUInt64LE=W((function(t,e=0){return C(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),p.prototype.writeBigUInt64BE=W((function(t,e=0){return B(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),p.prototype.writeIntLE=function(t,e,n,i){if(t=+t,e>>>=0,!i){const i=Math.pow(2,8*n-1);P(this,t,e,n,i-1,-i)}let r=0,o=1,a=0;for(this[e]=255&t;++r>0)-a&255;return e+n},p.prototype.writeIntBE=function(t,e,n,i){if(t=+t,e>>>=0,!i){const i=Math.pow(2,8*n-1);P(this,t,e,n,i-1,-i)}let r=n-1,o=1,a=0;for(this[e+r]=255&t;--r>=0&&(o*=256);)t<0&&0===a&&0!==this[e+r+1]&&(a=1),this[e+r]=(t/o>>0)-a&255;return e+n},p.prototype.writeInt8=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},p.prototype.writeInt16LE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeInt16BE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeInt32LE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},p.prototype.writeInt32BE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigInt64LE=W((function(t,e=0){return C(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),p.prototype.writeBigInt64BE=W((function(t,e=0){return B(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),p.prototype.writeFloatLE=function(t,e,n){return $(this,t,e,!0,n)},p.prototype.writeFloatBE=function(t,e,n){return $(this,t,e,!1,n)},p.prototype.writeDoubleLE=function(t,e,n){return L(this,t,e,!0,n)},p.prototype.writeDoubleBE=function(t,e,n){return L(this,t,e,!1,n)},p.prototype.copy=function(t,e,n,i){if(!p.isBuffer(t))throw new TypeError("argument should be a Buffer");if(n||(n=0),i||0===i||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i=this.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-e>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(r=e;r=i+4;n-=3)e=`_${t.slice(n-3,n)}${e}`;return`${t.slice(0,n)}${e}`}function F(t,e,n,i,r,o){if(t>n||t3?0===e||e===BigInt(0)?`>= 0${i} and < 2${i} ** ${8*(o+1)}${i}`:`>= -(2${i} ** ${8*(o+1)-1}${i}) and < 2 ** ${8*(o+1)-1}${i}`:`>= ${e}${i} and <= ${n}${i}`,new z.ERR_OUT_OF_RANGE("value",r,t)}!function(t,e,n){q(e,"offset"),void 0!==t[e]&&void 0!==t[e+n]||H(e,t.length-(n+1))}(i,r,o)}function q(t,e){if("number"!=typeof t)throw new z.ERR_INVALID_ARG_TYPE(e,"number",t)}function H(t,e,n){if(Math.floor(t)!==t)throw q(t,n),new z.ERR_OUT_OF_RANGE(n||"offset","an integer",t);if(e<0)throw new z.ERR_BUFFER_OUT_OF_BOUNDS;throw new z.ERR_OUT_OF_RANGE(n||"offset",`>= ${n?1:0} and <= ${e}`,t)}U("ERR_BUFFER_OUT_OF_BOUNDS",(function(t){return t?`${t} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),U("ERR_INVALID_ARG_TYPE",(function(t,e){return`The "${t}" argument must be of type number. Received type ${typeof e}`}),TypeError),U("ERR_OUT_OF_RANGE",(function(t,e,n){let i=`The value of "${t}" is out of range.`,r=n;return Number.isInteger(n)&&Math.abs(n)>2**32?r=R(String(n)):"bigint"==typeof n&&(r=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(r=R(r)),r+="n"),i+=` It must be ${e}. Received ${r}`,i}),RangeError);const G=/[^+/0-9A-Za-z-_]/g;function Y(t,e){let n;e=e||1/0;const i=t.length;let r=null;const o=[];for(let a=0;a55295&&n<57344){if(!r){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===i){(e-=3)>-1&&o.push(239,191,189);continue}r=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),r=n;continue}n=65536+(r-55296<<10|n-56320)}else r&&(e-=3)>-1&&o.push(239,191,189);if(r=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function V(t){return i.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(G,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function Q(t,e,n,i){let r;for(r=0;r=e.length||r>=t.length);++r)e[r+n]=t[r];return r}function Z(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function J(t){return t!=t}const K=function(){const t="0123456789abcdef",e=new Array(256);for(let n=0;n<16;++n){const i=16*n;for(let r=0;r<16;++r)e[i+r]=t[n]+t[r]}return e}();function W(t){return"undefined"==typeof BigInt?X:t}function X(){throw new Error("BigInt not supported")}},645:(t,e)=>{e.read=function(t,e,n,i,r){var o,a,s=8*r-i-1,p=(1<>1,l=-7,u=n?r-1:0,d=n?-1:1,f=t[e+u];for(u+=d,o=f&(1<<-l)-1,f>>=-l,l+=s;l>0;o=256*o+t[e+u],u+=d,l-=8);for(a=o&(1<<-l)-1,o>>=-l,l+=i;l>0;a=256*a+t[e+u],u+=d,l-=8);if(0===o)o=1-c;else{if(o===p)return a?NaN:1/0*(f?-1:1);a+=Math.pow(2,i),o-=c}return(f?-1:1)*a*Math.pow(2,o-i)},e.write=function(t,e,n,i,r,o){var a,s,p,c=8*o-r-1,l=(1<>1,d=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,f=i?0:o-1,m=i?1:-1,h=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=l):(a=Math.floor(Math.log(e)/Math.LN2),e*(p=Math.pow(2,-a))<1&&(a--,p*=2),(e+=a+u>=1?d/p:d*Math.pow(2,1-u))*p>=2&&(a++,p/=2),a+u>=l?(s=0,a=l):a+u>=1?(s=(e*p-1)*Math.pow(2,r),a+=u):(s=e*Math.pow(2,u-1)*Math.pow(2,r),a=0));r>=8;t[n+f]=255&s,f+=m,s/=256,r-=8);for(a=a<0;t[n+f]=255&a,f+=m,a/=256,c-=8);t[n+f-m]|=128*h}},4499:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._base64Decode=e._base64Encode=e._isBuffer=e.Buffer=void 0;const i=n(8764);e.Buffer=i.Buffer,e._isBuffer=t=>e.Buffer.isBuffer(t),e._base64Encode=(t,n)=>e.Buffer.from(t,n).toString("base64"),e._base64Decode=t=>e.Buffer.from(t,"base64")},1599:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(4499),e)},9413:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AlphaNum=void 0;const n=Symbol("AlphaNum");class i{static get CHARS(){return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"}[n]={value:0,sign:1};get value(){return this[n].value*this[n].sign}set value(t){const e=parseInt(Number(t))||0;this[n].sign=e<0?-1:1,this[n].value=Math.abs(e)}get indexes(){const t=i.CHARS.length,e=[];let r=this[n].value,o=0;for(;e.unshift(Math.max(r%t-o,0)),r=Math.floor(r/t);)o=1;return-1===this[n].sign&&e.unshift(-1),e}set indexes(t){const e=i.CHARS.length;try{let n=[...t],i=n.length,r=1,o=0;if(i){if(-1===n[0]){if(1===i)throw Error("The `AlphaNum` indexes array is incomplete.");n=n.slice(1),r=-1}for(let t=0;t=0&&i `'AX'`|`49`; `[-1,0,23]` => `'-AX'`|`-49`)");o=o*e+i+1}}o>=e&&(o-=1),this.value=o*r}catch(e){throw console.warn({error:e,value:t}),new TypeError(e)}}get text(){const t=i.CHARS;let e="",n=this.indexes;return-1===n[0]&&(n=n.slice(1),n.length&&(e="-")),e+=n.map((e=>t[e])).join(""),e}constructor(t=0){this.value=t}set(t){return this.value=t,this}add(t=1){return this.value+=parseInt(Number(t))||0,this}toString(){return this.text}static parse(t){const e=new i;if("object"==typeof t&&t)try{e.indexes=t}catch(t){throw new TypeError(`Failed to parse \`AlphaNum\` object value; ${t}`)}else{let n=String(t??"").trim().toUpperCase();if(!n)return e;if(/[A-Z]/.test(n)){const t=this.CHARS,i=[],r=n.split("");let o=!1;for(let e=0;e{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._animate=e.ANIMATE_DEFAULT_DURATION=e.ANIMATE_DEFAULT_EASING=void 0;const i=n(3377),r=n(9539),o=n(2892);e.ANIMATE_DEFAULT_EASING=r.Easings.easeLinear,e.ANIMATE_DEFAULT_DURATION=1e3,e._animate=function(t,n=!1){let{update:a,before:s,after:p,easing:c=e.ANIMATE_DEFAULT_EASING,duration:l=1e3,delay:u,delayed:d=!1,from:f,to:m,timeout:h,autoplay:g=!1}=Object(t);const v=this,_="object"==typeof v&&v?v:null,b=(0,i._isFunc)(a)?a:void 0,y=(0,i._isFunc)(s)?s:void 0,x=(0,i._isFunc)(p)?p:void 0;if(!b){let e="The update callback is not defined in `_animate` options!";throw console.error(e,t),new Error(e)}const w=("string"==typeof c&&r.Easings.hasOwnProperty(c)&&(c=r.Easings[c]),"function"==typeof c?c:e.ANIMATE_DEFAULT_EASING),O=(0,i._posInt)(l,0)??e.ANIMATE_DEFAULT_DURATION,E=(0,i._posInt)(u,0)??0,j=Boolean(d),k=Boolean(g),A=(0,i._posInt)(h,0)??0,M=(0,i._num)(f,0),T=(0,i._num)(m,0),I=T-M;let N,S,P,C,B,D,$=0,L=0,z=0,U=0,R=0,F=-1,q=Date.now();const H=()=>(D&&clearTimeout(D),N&&(0,o.cancelAnimationFrame)(N),N=D=S=P=C=B=void 0,$=L=U=z=R=0,F=-1,q=(new Date).getTime(),n&&console.debug("[_animate] reset."),!P),G=t=>{D&&clearTimeout(D),z&&(L+=t-z,z=0);let e,n=L,i=Math.max(Date.now()-q,R+U),r=!1,o=!r;if(P&&P<0)switch(r=!0,P){case-1:e="update";break;case-2:e="begin";break;case-4:e="timeout";break;default:e="abort"}x&&x.call(_,{aborted:r,abort_method:e,complete:o,pause_duration:n,total_duration:i}),N=void 0},Y=e=>(void 0===S&&(e=>{A&&(D=setTimeout((()=>P=-4),A)),y&&!1===y.call(_,{timestamp:e,options:t,then:q})&&(P=-2)})(e),S||(S=e),R=e-S+U,P?G(e):C?(N=void 0,U=R,z=e,S=0,void(R=0)):(z&&(L+=e-z,z=0),(!$||$-+R.toFixed(2)<=.1)&&(!R&&j||(t=>{if(t===B||P)return;B=t,F+=1;let e=O?w.call(_,t,0,1,O):0,n=0;I&&(n=Math.min(e*Math.abs(I),Math.abs(I)),n=M+n*(I<0?-1:1));let i=b.call(_,{index:F,delta:e,pos:n,time:t});t>=O?P=1:!1===i&&(P=-1)})(Math.min(+R.toFixed(1),$||O)),$+=E),!P&&R>=O&&(P=1),P?G(e):void(N=(0,o.requestAnimationFrame)(Y)))),V=(t=!1)=>(n&&console.debug(`[_animate] ${C?"resume":"play"}.`,{restart:t,is_paused:C,is_done:P,duration:O,from:M,to:T,diff:I,easing:w}),t&&H(),!P&&(C=void 0,N&&(0,o.cancelAnimationFrame)(N),N=(0,o.requestAnimationFrame)(Y),!0)),Q=(t=!0)=>(t=null===t?!C:Boolean(t),n&&console.debug(`[_animate] ${t?"pause":"unpause"}.`,{toggle:t,is_paused:C,is_done:P}),!P&&(t===C?C:t?C=t:V()));return k&&V(),{get _debug(){return n},get begun(){return void 0!==S},get paused(){return Boolean(C)},get done(){return Boolean(P)},play:V,pause:Q,resume:()=>!!C&&Q(!1),restart:()=>V(!0),reset:H,abort:()=>!P&&(P=-3,!0)}}},2892:(t,e)=>{"use strict";var n;Object.defineProperty(e,"__esModule",{value:!0}),e.cancelAnimationFrame=e.requestAnimationFrame=void 0,n=(()=>{let t,e,n,i;if("undefined"!=typeof window){const n=["ms","moz","webkit","o"];t=window.requestAnimationFrame,e=window.cancelAnimationFrame;for(let i=0;i"function"==typeof e?e(r):null),i);return t=r,o}}return i=e||function(t){clearTimeout(t)},"undefined"!=typeof window&&(window.requestAnimationFrame||(window.requestAnimationFrame=n),window.cancelAnimationFrame||(window.cancelAnimationFrame=i)),[n,i]})(),e.requestAnimationFrame=n[0],e.cancelAnimationFrame=n[1]},4047:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9599:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.easeInBack=e.easeInOutElastic=e.easeOutElastic=e.easeInElastic=e.easeInOutQuint=e.easeOutQuint=e.easeInQuint=e.easeInOutQuart=e.easeOutQuart=e.easeInQuart=e.easeInOutCubic=e.easeOutCubic=e.easeInCubic=e.easeInOutCirc=e.easeOutCirc=e.easeInCirc=e.easeInOutExpo=e.easeOutExpo=e.easeInExpo=e.easeInOutSine=e.easeOutSine=e.easeInSine=e.easeInOutQuad=e.easeOutQuad=e.easeInQuad=e.easeLinear=void 0,e.easeLinear=(t,e,n,i)=>n*t/i+e,e.easeInQuad=(t,e,n,i)=>n*(t/=i)*t+e,e.easeOutQuad=(t,e,n,i)=>-n*(t/=i)*(t-2)+e,e.easeInOutQuad=(t,e,n,i)=>(t/=i/2)<1?n/2*t*t+e:-n/2*(--t*(t-2)-1)+e,e.easeInSine=(t,e,n,i)=>-n*Math.cos(t/i*(Math.PI/2))+n+e,e.easeOutSine=(t,e,n,i)=>n*Math.sin(t/i*(Math.PI/2))+e,e.easeInOutSine=(t,e,n,i)=>-n/2*(Math.cos(Math.PI*t/i)-1)+e,e.easeInExpo=(t,e,n,i)=>0===t?e:n*Math.pow(2,10*(t/i-1))+e,e.easeOutExpo=(t,e,n,i)=>t===i?e+n:n*(1-Math.pow(2,-10*t/i))+e,e.easeInOutExpo=(t,e,n,i)=>0===t?e:t===i?e+n:(t/=i/2)<1?n/2*Math.pow(2,10*(t-1))+e:n/2*(2-Math.pow(2,-10*--t))+e,e.easeInCirc=(t,e,n,i)=>-n*(Math.sqrt(1-(t/=i)*t)-1)+e,e.easeOutCirc=(t,e,n,i)=>n*Math.sqrt(1-(t=t/i-1)*t)+e,e.easeInOutCirc=(t,e,n,i)=>(t/=i/2)<1?-n/2*(Math.sqrt(1-t*t)-1)+e:n/2*(Math.sqrt(1-(t-=2)*t)+1)+e,e.easeInCubic=(t,e,n,i)=>n*(t/=i)*t*t+e,e.easeOutCubic=(t,e,n,i)=>n*((t=t/i-1)*t*t+1)+e,e.easeInOutCubic=(t,e,n,i)=>(t/=i/2)<1?n/2*t*t*t+e:n/2*((t-=2)*t*t+2)+e,e.easeInQuart=(t,e,n,i)=>n*(t/=i)*t*t*t+e,e.easeOutQuart=(t,e,n,i)=>-n*((t=t/i-1)*t*t*t-1)+e,e.easeInOutQuart=(t,e,n,i)=>(t/=i/2)<1?n/2*t*t*t*t+e:-n/2*((t-=2)*t*t*t-2)+e,e.easeInQuint=(t,e,n,i)=>n*(t/=i)*t*t*t*t+e,e.easeOutQuint=(t,e,n,i)=>n*((t=t/i-1)*t*t*t*t+1)+e,e.easeInOutQuint=(t,e,n,i)=>(t/=i/2)<1?n/2*t*t*t*t*t+e:n/2*((t-=2)*t*t*t*t+2)+e,e.easeInElastic=(t,e,n,i)=>{let r=1.70158,o=0,a=n;return 0===t?e:1==(t/=i)?e+n:(o||(o=.3*i),a{let r=1.70158,o=0,a=n;return 0===t?e:1==(t/=i)?e+n:(o||(o=.3*i),a{let r=1.70158,o=0,a=n;return 0===t?e:2==(t/=i/2)?e+n:(o||(o=i*(.3*1.5)),a{let r;return void 0===r&&(r=1.70158),n*(t/=i)*t*((r+1)*t-r)+e}},2269:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Easings=void 0;const i=n(9599);e.Easings={...i}},4531:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9539:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(4531),e),r(n(2269),e)},4885:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(9539),e),r(n(2892),e),r(n(4047),e),r(n(9830),e)},9102:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ElapsedTime=void 0;const i=n(9925),r=n(8782);e.ElapsedTime=class{start_time;stop_time;_ms;constructor(){this.start_time=new Date,this.stop_time=void 0,this._ms=void 0}start(){const t=new Date;return this.start_time=(0,i._isDate)(this.start_time)?this.start_time:t,this.stop_time=void 0,this._ms=void 0,this}now(t=!1){const e=new Date,n=(0,i._isDate)(this.start_time)?this.start_time:this.start_time=e;return this._ms=e.getTime()-n.getTime(),t&&(this.start_time=e),this}stop(){const t=new Date,e=((0,i._isDate)(this.start_time)?this.start_time:t).getTime(),n=this.stop_time,r=(0,i._isDate)(n)&&n.getTime()>=e?n:this.stop_time=t;return this._ms=r.getTime()-e,this}started(){return(0,i._isDate)(this.start_time)}stopped(){return(0,i._isDate)(this.stop_time)}ms(){return parseInt(this._ms)}sec(t=3){return(0,r._round)(this.ms()/1e3,t)}min(t=3){return(0,r._round)(this.ms()/6e4,t)}data(){return this.stop(),{start_time:(0,i._isDate)(this.start_time)?this.start_time:void 0,stop_time:(0,i._isDate)(this.stop_time)?this.stop_time:void 0,elapsed_ms:this.ms()}}}},114:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(9102),e)},7149:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EventEmitter=void 0;let n=10;const i=Symbol(`__private_props_${Date.now()}__`);class r{static get max_listeners(){return n}static set max_listeners(t){n=!isNaN(t=parseInt(t))&&Number.isInteger(t)&&t>=1?t:10}[i]={};get max_listeners(){return this[i]._max_listeners}set max_listeners(t){this[i]._max_listeners=!isNaN(t=parseInt(t))&&Number.isInteger(t)&&t>=0?t:r.max_listeners}constructor(){this[i]={_events:{},_max_listeners:void 0}}static type(t,e=!1){let n="";if("string"!=typeof t||!(n=t.trim())){const n="Invalid event type.";if(console.warn(n,{type:t}),e)throw new TypeError(n)}return n}static listener(t,e=!1){let n;if("function"==typeof t)n=t;else{const n="Invalid event listener callback function.";if(console.warn(n,{listener:t}),e)throw new TypeError(n)}return n}listeners(t){const e=this[i],n=[];if((t=r.type(t))&&e._events.hasOwnProperty(t)){const i=e._events[t];if("function"==typeof i)n.push(i);else if(Array.isArray(i)&&i.length)for(const t of i)"function"==typeof t&&n.push(t)}return n}hasListener(t,e){return this.listeners(t).findIndex((t=>t===e))>-1}emit(t,e){const n={type:t,data:e,time:Date.now()},i=this.listeners(t=r.type(t,!0));if(i.length){for(const t of i)t.call(this,n);return!0}if("error"===t){if(e instanceof Error)throw e;const t='Uncaught, unspecified "error" event.';throw console.warn(t,{event:n}),new Error(t)}return!1}on(t,e,n=!1){return this.addListener(t,e,n)}once(t,e){return this.addListener(t,e,!0)}subscribe(t,e){return t=r.type(t,!0),e=r.listener(e,!0),this.addListener(t,e),()=>{this.removeListener(t,e)}}addListener(t,e,n=!1){t=r.type(t,!0);let o=e=r.listener(e,!0);if(n){let n=!1;o=i=>{n||(n=!0,e.call(this,i),this.removeListener(t,o))}}const a=this.listeners(t);if(a.findIndex((t=>t===o))<0){const e=this[i];if(e._events.newListener&&this.emit("newListener",{type:t,handler:o}),e._events[t]=a.length?[...a,o]:o,Array.isArray(e._events[t])){const n=e._events[t].length,i="number"==typeof e._max_listeners?e._max_listeners:r.max_listeners;"number"==typeof i&&i>0&&n>i&&console.error(`EventEmitter possible memory leak detected - ${n} "${t}" event listeners added, max count is ${i}.`)}}else console.warn(`This "${t}" event listener is already added.`);return this}removeListener(t,e){if(!(t=r.type(t)))return this;const n=this[i];if(!n._events.hasOwnProperty(t))return this;let o=!1;if(Array.isArray(n._events[t])){const i=n._events[t],r=i.findIndex((t=>t===e));i.splice(r,1),o=!0}else n._events[t]===e&&(delete n._events[t],o=!0);return o&&(this.listeners(t).length||delete n._events[t],n._events.removeListener&&this.emit("removeListener",{type:t,listener:e})),this}removeAllListeners(t){if(!(t=r.type(t)))return this;const e=this[i];if(!e._events.hasOwnProperty(t))return this;const n="removeListener"!==t&&e._events.removeListener,o=n?this.listeners(t):[];if(delete e._events[t],n&&o.length)for(const e of o)this.emit("removeListener",{type:t,listener:e});return this}}e.EventEmitter=r},534:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Events=void 0;const i=n(7149);e.Events=new i.EventEmitter},4821:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(7149),e),r(n(534),e)},9649:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Exception=void 0;const n=Symbol(`__private_props_${Date.now()}__`);class i extends Error{[n]={};get message(){return this[n].message}get name(){return this[n].name}get code(){return this[n].code}get data(){return this[n].data}get time(){return this[n].time}constructor(t,e,i,r,o){const a=Date.now();super(t=t&&"string"==typeof t&&(t=t.trim())?t:"Unspecified exception message."),"string"==typeof i?i=(i=i.trim())?i:0:"number"==typeof i&&!isNaN(i=parseInt(`${i}`))&&Number.isInteger(i)&&Number.isFinite(i)||(i=0),this[n]={message:t,name:e&&"string"==typeof e&&(e=e.trim())?e:"Exception",code:i,data:r,time:o&&!isNaN(o=parseInt(o))&&Number.isInteger(o)&&Number.isFinite(o)&&o>=0?o:a}}toString(){const{message:t,name:e,code:n}=this;let i=e+":";return 0!==n&&(i+=" ["+n+"]"),i+=" "+t,i}static error(t,e,n,r,o){return new i(t,e,n,r,o)}static parse(t){const e=Date.now(),n={},r=t=>"string"==typeof t&&(t=t.trim())?t:void 0,o=t=>!isNaN(t=parseInt(t))&&Number.isInteger(t)&&Number.isFinite(t)&&t>=0?t:void 0,a=t=>{let e;return void 0!==(e=o(t))||(e=r(t)),e};if(t&&"object"==typeof t){let e=!1;if(Array.isArray(t)){const i=t[Symbol.iterator];(["values","entries"].includes(i?.name)||"function"==typeof i)&&(t=[...t]),t.length&&(n.message=r(t[0]),n.name=r(t[1]),n.code=a(t[2]),n.data=t[3],n.time=o(t[4]),e=!0)}if(!e&&t instanceof Error){const i=t;n.message=r(i.message),n.name=r(i.name),n.code=a(i.code),n.data=i.data,n.time=o(i.time),e=!0}e||(n.message=r(t.message),n.name=r(t.name),n.code=a(t.code),n.data=t.data,n.time=o(t.time),e=!0)}else n.message=r(t);return new i(n.message??"Unknown exception error.",n.name??"Error",n.code,n.data,n.time??e)}}e.Exception=i},6882:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(9649),e)},5246:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Task=e.TASK_STATUSES=void 0;const i=n(4821);e.TASK_STATUSES=["new","running","stopped","failed","done"];let r=200,o=2;const a=(t,e=0,n=0)=>[void 0,null].includes(t)||"string"==typeof t&&!(t=t.trim())?n:!isNaN(t=parseFloat(t))&&Number.isFinite(t)&&t>=0?t:e,s=(t,e=0,n=0)=>parseInt(a(t,e,n)+""),p=(t,e)=>{const n=10**s(e,o,o);return Math.round((t+Number.EPSILON)*n)/n},c=t=>{void 0===t&&(t=null);const e=[];return JSON.stringify(t,(function(t,n){if(n&&"object"==typeof n){if(e.indexOf(n)>-1)return;e.push(n)}return n}))},l=t=>{if([void 0,null].includes(t))return"";let e="";try{Object(t)===t&&t[Symbol.iterator]&&(t=c([...t])),e=String(t)}catch(t){e=""}return Object(t)!==t||e&&!/\[object \w+\]/.test(e)||(e=c(t).replace(/^"|"$/g,"")),e.trim()},u=t=>(Object(t)!==t||t instanceof Error||(t.error instanceof Error||"string"==typeof t.error&&t.error.trim()||t.reason instanceof Error||"string"==typeof t.reason&&t.reason.trim()?t=t.error:"string"==typeof t.message&&t.message.trim()&&(t=t.message)),l(t)),d=(t,e=0)=>{let n,i;const r=()=>{clearTimeout(n),clearTimeout(i),i=void 0,t()};return()=>{if(!e)return t();clearTimeout(n),n=setTimeout(r,e),i||(i=setTimeout(r,Math.floor(1.5*e)))}},f=Symbol(`__private_props_${Date.now()}__`);class m{static get event_debounce(){return r}static set event_debounce(t){r=s(t,r,0)}static get decimal_precision(){return o}static set decimal_precision(t){o=s(t,o,2)}[f]={};get name(){return this[f].name}get label(){return this[f].label}get linked(){return this[f].linked}get precision(){return this[f].precision}get event_debounce(){return this[f].event_debounce}get progress(){return this[f].progress}get total(){return this[f].total}get value(){return this[f].value}get error(){return this[f].error}get status(){return this[f].status}get startTime(){return this[f].startTime}get stopTime(){return this[f].stopTime}get elapsedTime(){return this.stopTime?this.stopTime-this.startTime:0}get complete(){return this[f].complete}get item(){return this[f].item}constructor(t,e=!1,n=m.decimal_precision,r=m.event_debounce){if(!(t=l(t)))throw new TypeError("Invalid new task name.");n=s(n,m.decimal_precision,m.decimal_precision),r=s(r,m.event_debounce,m.event_debounce),this[f]={name:t,label:"",linked:e,precision:n,event_debounce:r,progress:0,total:0,value:0,error:"",status:"new",startTime:0,stopTime:0,complete:!1,item:void 0,_done:!1,_round:t=>p(t,this[f].precision),_emitter:new i.EventEmitter,_debounced_update:d((()=>{const t=this[f];t._done||t._emitter.emit("update",this.data())}),r)}}get data(){return()=>{const{name:t,label:e,linked:n,precision:i,event_debounce:r,progress:o,total:a,value:s,error:p,status:c,startTime:l,stopTime:u,elapsedTime:d,complete:f,item:m}=this;return{name:t,label:e,linked:n,precision:i,event_debounce:r,progress:o,total:a,value:s,error:p,status:c,startTime:l,stopTime:u,elapsedTime:d,complete:f,item:m}}}get update(){return()=>(this[f]._debounced_update(),this)}subscribe(t){return this[f]._emitter.subscribe("update",t)}start(t=!1){const e=this[f];let n=0;return e.complete&&!t?(console.warn("Task `start` while complete ignored! Try using `task.start(restart=true)` to override."),this):(e.complete&&(n++,e.complete=!1),"running"!==e.status&&(n++,e.status="running"),e.startTime&&!t||(n++,e.startTime=Date.now()),e.stopTime&&(n++,e.stopTime=0),e.error&&(n++,e.error=""),n&&this.update(),this)}stop(){const t=this[f];let e=0;return"running"===t.status&&(e++,t.status="stopped"),t.stopTime||(e++,t.stopTime=Date.now(),t.startTime||(t.startTime=t.stopTime)),e&&this.update(),this}failure(t){t=(t=u(t))?t:"Unknown task error.";const e=this[f];let n=0;return e.error!==t&&(n++,e.error=t),"failed"!==e.status&&(n++,e.status="failed"),e.stopTime||(n++,e.stopTime=Date.now(),e.startTime||(e.startTime=e.stopTime)),n&&this.update(),this}done(t=!1){const e=this[f];let n=0;if(e.complete||(n++,e.complete=!0),"stopped"!==e.status){const i=e.error?"failed":"done";if(e.status!==i&&(n++,e.status=i),e.linked||t){let t=100;t!==e.progress&&(n++,e.progress=t),e.total&&e.value!==e.total&&(n++,e.value=e.total)}}return e.stopTime||(n++,e.stopTime=Date.now(),e.startTime||(e.startTime=e.stopTime)),e._done=!0,n&&e._emitter.emit("update",this.data()),this}setProgress(t,e,n){const i=this[f];if(i._done)return console.warn("Task `setProgress` while done ignored."),this;let r=a(t,-1,-1);if(r<0)throw new TypeError(`Invalid set task \`progress\` value (${t}).`);(t=i._round(r))>100&&(t=100);let o=i.value,s=i.total;i.linked?s&&(o=100===t?s:i._round(t/100*s)):((n=a(n,-1,-1))>=0&&(s=i._round(n)),(e=a(e,-1,-1))>=0&&(o=i._round(e)));let p=0;return t!==i.progress&&(p++,i.progress=t),o!==i.value&&(p++,i.value=o),s!==i.total&&(p++,i.total=s),p&&this.update(),this}setTotal(t){const e=this[f];if(e._done)return console.warn("Task `setTotal` while done ignored."),this;let n=a(t,-1,-1);if(n<0)throw new TypeError(`Invalid set task \`total\` value (${t}).`);t=e._round(n);let i=e.progress,r=e.value;e.linked&&(t?r?r>=t?(r=t,i=100):i=e._round(r/t*100):i&&(r=e._round(i/100*t)):(r=0,i=0));let o=0;return i!==e.progress&&(o++,e.progress=i),r!==e.value&&(o++,e.value=r),t!==e.total&&(o++,e.total=t),o&&this.update(),this}setValue(t){const e=this[f];if(e._done)return console.warn("Task `setValue` while done ignored."),this;let n=a(t,-1,-1);if(n<0)throw new TypeError(`Invalid set task \`value\` value (${t}).`);t=e._round(n);let i=e.total,r=e.progress;e.linked&&(t?i?t>i?(i=t,r=100):r=e._round(t/i*100):r&&(i=e._round(100/r*t)):r=0);let o=0;return r!==e.progress&&(o++,e.progress=r),t!==e.value&&(o++,e.value=t),i!==e.total&&(o++,e.total=i),o&&this.update(),this}setItem(t){const e=this[f];return e._done?(console.warn("Task `setItem` while done ignored."),this):(e.item=t,this)}static create(t,n,i){let{name:r,label:o,linked:c,precision:h,event_debounce:g,progress:v,total:_,value:b,error:y,status:x,startTime:w,stopTime:O,complete:E,item:j}=Object(t);try{let t;if(!(t=l(r)))throw new TypeError("Invalid task `name` value.");r=t,o=l(o),c=!!c,t=s(h,-1,m.decimal_precision),n=(t=s(n,-1,t))<0?m.decimal_precision:t,t=s(g,-1,m.event_debounce),i=(t=s(i,-1,t))<0?m.event_debounce:t;const k=t=>p(t,n);if((t=a(v,-1))<0)throw new TypeError("Invalid task `progress` value.");if((v=k(t))>100&&(v=100),(t=a(_,-1))<0)throw new TypeError("Invalid task `total` value.");if(_=k(t),(t=a(b,-1))<0)throw new TypeError("Invalid task `value` value.");if(b=k(t),c)if(b)if(_)if(b>_)console.warn(`Task linked \`value\` (${b}) is greater than \`total\` (${_}). Using value as new total${100!==v?" - updating progress":""}.`),_=b,v=100;else{const t=k(b/_*100);v!==t&&(v&&console.warn(`Task linked \`progress\` (${v}) recalculated to (${t}) using current value/total (${b}/${_}) %.`),v=t)}else v&&(_=k(100/v*b));else v=0;if(E=!!E,y=u(y),(x=l(x).toLowerCase())&&e.TASK_STATUSES.includes(x)||(x="new"),(t=s(w,-1))<0)throw new TypeError("Invalid task `startTime` value.");if(w=t,(t=s(O,-1))<0)throw new TypeError("Invalid task `stopTime` value.");if(O=t,["stopped","failed","done"].includes(x)&&w&&O&&w{M._done||M._emitter.emit("update",A.data())}),A.event_debounce),A}catch(t){const e=`Create Task Failure! ${t instanceof Error?t.message:t}`.trim(),a={name:r,label:o,linked:c,precision:n,event_debounce:i,progress:v,total:_,value:b,error:e,status:x,startTime:w,stopTime:O,complete:E,item:j};throw console.warn(e,{_options:a}),"TypeError"===t.name?new TypeError(e):new Error(e)}}}e.Task=m},5638:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Tasks=void 0;const i=n(4821),r=n(5246);let o=200,a=2;const s=(t,e=0,n=0)=>parseInt(((t,e=0,n=0)=>[void 0,null].includes(t)||"string"==typeof t&&!(t=t.trim())?n:!isNaN(t=parseFloat(t))&&Number.isFinite(t)&&t>=0?t:e)(t,e,n)+""),p=(t,e=0)=>{let n,i;const r=()=>{clearTimeout(n),clearTimeout(i),i=void 0,t()};return()=>{if(!e)return t();clearTimeout(n),n=setTimeout(r,e),i||(i=setTimeout(r,Math.floor(1.5*e)))}},c=Symbol(`__private_props_${Date.now()}__`);class l{static get event_debounce(){return o}static set event_debounce(t){o=s(t,o,0)}static get decimal_precision(){return a}static set decimal_precision(t){a=s(t,a,2)}[c]={};get size(){return this[c]._tasks.size}get precision(){return this[c].precision}get event_debounce(){return this[c].event_debounce}constructor(t=l.decimal_precision,e=l.event_debounce){t=s(t,l.decimal_precision,l.decimal_precision),e=s(e,l.event_debounce,l.event_debounce),this[c]={precision:t,event_debounce:e,_tasks:new Map,_unsubscribe:new Map,_emitter:new i.EventEmitter,_debounced_update:p((()=>{this[c]._emitter.emit("update",this.data())}),e)}}get data(){return()=>{const t=this[c];let e=0,n=0,i=0,r=0,o=0,p=!1,l=!1,u=!1;const d=[];for(const a of[...t._tasks.values()]){const t=a.data();e++,o+=100,r+=t.progress,u||t.complete||(u=!0),"running"===t.status?(p||(p=!0),l||(l=!0)):!l&&["failed","done"].includes(t.status)&&(l=!0),t.startTime&&!n&&t.startTimei&&(i=t.stopTime),d.push([a.name,t])}const f=Object.fromEntries(d),m=r&&o?r>=o?100:((t,e)=>{const n=10**s(e,a,a);return Math.round((t+Number.EPSILON)*n)/n})(r/o*100,t.precision):0,h=p,g=l,v=g&&!u;let _=0;return i&&n&&(i(this[c]._debounced_update(),this)}subscribe(t){return this[c]._emitter.subscribe("update",t)}has(t){return this[c]._tasks.has(t)}get(t){return this[c]._tasks.get(t)}add(t,e=!1,n){const i=this[c];let o;if(n=(n=s(n,-1,-1))>=0?n:void 0,"string"==typeof t?o=new r.Task(t,e,i.precision,n):t instanceof r.Task?o=t:"object"==typeof t&&"string"==typeof t?.name&&(o=r.Task.create(t,i.precision,n)),!(o instanceof r.Task))throw new TypeError("Add `Task` object is invalid.");this.has(o.name)&&console.warn(`Existing task named "${o.name}" has been replaced.`);const a=o.subscribe((t=>{console.debug(`-- task event ${t.data.name}`,t.data.progress),this.update()}));return i._tasks.set(o.name,o),i._unsubscribe.set(o.name,a),this.update(),o}remove(t){const e=this[c];if(!e._tasks.has(t))return this;const n=e._unsubscribe.get(t);return n&&(e._unsubscribe.delete(t),n()),e._tasks.delete(t),this.update(),this}}e.Tasks=l},8921:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(5246),e),r(n(5638),e)},3742:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Term=void 0;const i=n(3377);let r,o=!1;e.Term=class{static get FORMAT_DISABLED(){return o}static set FORMAT_DISABLED(t){o=(0,i._bool)(t,!0)??!1}static get LOG_METHODS(){return["log","debug","warn","error","info"]}static get LOG_METHOD(){return r}static set LOG_METHOD(t){r=this.LOG_METHODS.includes(t)?t:void 0}static get FORMATS(){return{reset:"[0m",bright:"[1m",dim:"[2m",underscore:"[4m",blink:"[5m",reverse:"[7m",hidden:"[8m",fg_black:"[30m",fg_red:"[31m",fg_green:"[32m",fg_yellow:"[33m",fg_blue:"[34m",fg_magenta:"[35m",fg_cyan:"[36m",fg_white:"[37m",fg_gray:"[90m",bg_black:"[40m",bg_red:"[41m",bg_green:"[42m",bg_yellow:"[43m",bg_blue:"[44m",bg_magenta:"[45m",bg_cyan:"[46m",bg_white:"[47m",bg_gray:"[100m"}}static get PREDEFINED_FORMATS(){return{log:"fg_white",dump:["fg_white","bright"],debug:"fg_gray",error:"fg_red",warn:"fg_yellow",info:["fg_cyan","bright"],success:"fg_green",bg_log:["bg_blue","fg_white"],bg_debug:["bg_gray","fg_black"],bg_error:["bg_red","fg_white"],bg_warn:["bg_yellow","fg_black"],bg_info:["bg_cyan","fg_black"],bg_success:["bg_green","fg_white"]}}static getFormats(t){const e=this.FORMATS,n=this.PREDEFINED_FORMATS;return(Array.isArray(t)?t:"string"==typeof t?[t]:[]).reduce(((t,i)=>{if((i=i.trim().toLowerCase())&&"reset"!==i){let r=i=i.replace(/[^a-z0-9]/gi,"_").replace("grey","gray");const o=e=>{const i=n[e];Array.isArray(i)?t.push(...i):"string"==typeof i&&t.push(i)};e.hasOwnProperty(i)?t.push(i):e.hasOwnProperty(r=`fg_${i}`)?t.push(r):n.hasOwnProperty(i)?o(i):n.hasOwnProperty(r=`bg_${i}`)&&o(r)}return t}),[])}static format(t,...e){let n;const r=this.getFormats(t),o=e=>{if(this.FORMAT_DISABLED||!t.length)return e;if("object"==typeof e&&e){if(Array.isArray(e))return e;if(new RegExp("\\[object \\w+\\]").test(n=(0,i._string)(e)))return e;e=n}return"string"==typeof e&&e.length?r.reduce(((t,e)=>this.FORMATS[e]+t+this.FORMATS.reset),e):e},a=this,s=[];for(const t of Array.isArray(e)?e:[])s.push(o(t));let p=a.LOG_METHOD;const c=t=>p||(a.LOG_METHODS.includes(t)?t:"log");return{method(t){return p=a.LOG_METHODS.includes(t)?t:a.LOG_METHOD,this},format(t,...e){return s.push(...a.format(t,...e).values()),this},values(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));return[...s,...e]},clean:(...t)=>a.clean(...s,...t),log(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("log")](...s,...e)},debug(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("debug")](...s,...e)},warn(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("warn")](...s,...e)},error(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("error")](...s,...e)},info(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("info")](...s,...e)}}}static clean(...t){const e=t=>Object.values(this.FORMATS).reduce(((t,e)=>t.replace(new RegExp(String(e).replace(/\x1B/,"\\x1B").replace(/\[/,"\\["),"g"),"")),t),n=[];for(const i of t)n.push("string"==typeof i&&i.trim().length?e(i):i);return n}static text(t,e){const n=(0,i._string)(t),r=[],o=Array.isArray(e)?e:"string"==typeof e?[e]:[];for(const t of o)"string"==typeof t&&t.trim()&&r.push(t);return r.length&&n.trim().length?this.format(r,n).values()[0]:n}static br(){console.log(" ")}static log(...t){this.format("log",...t).log()}static debug(...t){this.format("debug",...t).debug()}static error(...t){this.format("error",...t).error()}static warn(...t){this.format("warn",...t).warn()}static info(...t){this.format("info",...t).info()}static success(...t){this.format("success",...t).log()}static list(t,e=!1){let n=[t=(0,i._clone)(t)],r="values";if("object"==typeof t&&t)if(r=t[Symbol.iterator]?.name)n="entries"===r?e?[...t]:[t]:[...t];else if(r="values",n=[t],e&&!1===(0,i._stringable)(t)){let e=Object.fromEntries(Object.entries(t)),i=[];"object"==typeof e&&e&&(i=Object.entries(e)).length||(i=Object.entries(t)),i.length&&(r="entries",n=i)}return[n,r]}static table(t,e,n,r,o){let a,s,p,c;const l="undefined"!=typeof process&&Array.isArray(process?.argv)?process.argv.slice(2).join("|"):"";let u=l.match(/--cellMaxLength=(\d+)(\||$)/);u&&(a=(0,i._posInt)(u[1],0)),(u=l.match(/--divider(\||$)/))?s=!0:(u=l.match(/--divider=false(\||$)/))&&(s=!1),(u=l.match(/--noIndex(\||$)/))?p=!0:(u=l.match(/--noIndex=false(\||$)/))&&(p=!1),(u=l.match(/--numIndex(\||$)/))?c=!0:(u=l.match(/--numIndex=false(\||$)/))&&(c=!1),e=a??(0,i._posInt)(e,0)??250,n=s??n??!1,r=p??r??!1,o=c??o??!1;const d=this,[f,m]=d.list(t,"object"==typeof t&&t&&!(0,i._stringable)(t)),h=t=>{let e,n;if(Array.isArray(t)||!1===(n=(0,i._stringable)(t))){if("object"==typeof t&&t){const e=t[Symbol.iterator];e?(t=[...t],"entries"===e&&(t=Object.fromEntries(t))):t=Object.fromEntries(Object.entries(t))}t=(0,i._jsonStringify)(t),e="magenta"}else e="green","number"==typeof t?e="yellow":null==t?e="gray":!0===t?e="cyan":!1===t?e="red":/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2][1-9]|[1-3]0|3[01])T(?:[0-1][0-9]|2[0-3])(?::[0-6]\d)(?::[0-6]\d)?(?:\.\d{3})?(?:[+-][0-2]\d:[0-5]\d|Z)?$/.test(n)&&(e="magenta"),t=n;return t=t.replace(/\t/g," "),[(0,i._strEscape)(t).replace(/(\\n)+/g,"\n").trim(),e]};let g;const v=[];if("entries"===m)r||v.push(["[#]","Values"]),v.push(...f);else{let t=[],e=[];for(let n=0;ne&&(n=e),n>s&&(s=n)}s>_[i]&&(_[i]=s),n.push([o,a])}b.push(n)}const y=b.length;for(let t=0;ts){for(;t.length>s;){const e=t.substring(0,s).padEnd(s);t=t.slice(s),p.push(d.text(e,a))}t.length&&p.push(d.text(t.padEnd(s),a))}else p.push(d.text(t.padEnd(s),a));r.push(p),i{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._mime=e.EXT_MIMES=void 0;const i=n(3377);e.EXT_MIMES=n(4713),e._mime=(t,n=0)=>{const r={value:t,type:"",ext:"",error:"",toString(t){return this[t&&["mime","ext","error"].includes(t=(0,i._str)(t,!0).toLowerCase())?t+"":"type"]}};try{const n=[],o=(0,i._str)(t,!0);if(o){let t=null;if(t=o.match(/(\.|^)([-_0-9a-zA-Z]+)$/i)){let i=t[2].toLowerCase();"jpeg"===i&&(i="jpg"),e.EXT_MIMES.hasOwnProperty(i)?r.type=e.EXT_MIMES[r.ext=i]:n.push(`Mime file extension "${i}" is not supported`)}else if(/^[-_a-z0-9]+\/[^\/]+$/i.test(o)){const t=Object.entries(e.EXT_MIMES).find((t=>t[1].startsWith(o.toLowerCase())||o.toLowerCase().startsWith(t[1])));if(t){let[e,n]=t;"jpeg"===e&&(e="jpg"),r.ext=e,r.type=n}else n.push(`Mime type "${o}" is not supported`)}else n.push("Invalid mime type or file extension string value")}else n.push("Blank mime type or file extension string value");if(n.length)throw new Error(r.error=n.join("; ")+".");return r}catch(t){return new i.FailError(t,n,{item:r},"MimeTypeError"),r}}},4297:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._filepath=e._basename=void 0;const i=n(3377);e._basename=(t,e=!1,n=!1,r)=>{const o=[0,1,2].includes(r=parseInt(r+""))?r:0,a={value:t,basename:"",name:"",ext:"",error:"",illegal:[],invalid:[],toString(t){return this[t&&["basename","name","ext","error"].includes(t=(0,i._str)(t,!0).toLowerCase())?t+"":"basename"]}};let s=null;const p=a.name=a.basename=(0,i._str)((0,i._str)(t,!0).split(/[\\\/]/g).pop(),!0);(s=p.match(/([^\\/]*)$/i))&&(a.name=s[1],(s=a.name.match(/(.*)(\.([-_0-9a-zA-Z]+))$/i))&&(a.name=s[1],a.ext=s[3]));try{const t=[];if(p?(!e&&["..",".."].includes(p)&&(a.invalid.push(p),t.push(`The basename "${p}" dots not allowed`)),(/^\.\.[\.]+$/.test(p)||/[^\.][\.]+$/.test(p))&&(a.invalid.length||a.invalid.push(p),t.push(`The basename "${p}" format is invalid`)),(s=p.match(/[\:\?\"\<\>\|\*]/g))&&(a.illegal.push(...s),t.push(`The basename "${p}" contains illegal characters (:?"<>|*) => "${s.join("")}"`))):t.push("The basename string value is empty"),t.length)throw new Error(a.error=t.join("; ")+".");return a}catch(t){if(n&&(a.basename="",a.name="",a.ext=""),o){class e extends Error{name="BasenameError";item=a}const n=new e(`${t.message||t}`);if(2===o)throw n;console.warn(n+"",{item:a})}return a}},e._filepath=(t,n,r=!1,o,a)=>{const s=["","/","\\"].includes(n=(0,i._str)(n,!0))?n:"",p=(o=(0,i._str)(o,!0).replace(/path\s*$/i,"").trim())?o+" ":"",c=[0,1,2].includes(a=parseInt(a+""))?a:0,l={value:t,root:"",drive:"",path:"",dir:"",basename:"",name:"",ext:"",error:"",illegal:[],invalid:[],toString(t){let e=t&&["file","root","drive","path","dir","basename","name","ext","error"].includes(t=(0,i._str)(t,!0).toLowerCase())?t+"":"path";if("file"===e){if(this.error||!this.basename)return"";e="path"}return this[e]}};let u=(0,i._str)(t,!0);try{let t="",n="";const r=[],o=(0,i._split)(u,/[\\\/]/);for(let e=0;e-1&&h[t][0]&&![".",".."].includes(h[t][0])){h.pop();continue}}else if(t&&(m.push([r,o]),n))continue;h.push([r,o])}t&&h.length&&!h[0][0]&&h[0][1]&&(h[0][1]=""),m.length&&m.push(...h),l.root=t,l.drive=n;let g="";for(const t of h)g+=t.join("");l.dir=l.path=u=t+g.replace(/[\\/]$/,"");const v=h.pop();if(v&&!["",".",".."].includes(v[0])){const n=(0,e._basename)(v[0]);l.basename=n.basename,l.name=n.name,l.ext=n.ext,g="";for(const t of h)g+=t.join("");l.dir=t+g.replace(/[\\/]$/,"")}const _=[];g="";for(const t of m)g+=t.join("");const b=g?t+g:"";if(b&&_.push(`The ${p}root (${t}) dot nav path is outbound "${b}" => "${u}"`),d.size&&_.push(`The ${p}path contains invalid name${d.size>1?"s":""} (${(0,i._jsonStringify)([...d])})`),f.size&&_.push(`The ${p}path contains illegal characters (:?"<>|*) => "${[...f].join("")}"`),_.length)throw l.invalid=[...d],l.illegal=[...f],new Error(l.error=_.join("; ")+".");return l}catch(t){if(r&&(l.root="",l.drive="",l.path="",l.dir="",l.basename="",l.name="",l.ext=""),c){class e extends Error{name="NormPathError";item=l}const n=new e(`${t.message||t}`);if(2===c)throw n;console.warn(n+"",{item:l})}return l}}},9307:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(3093),e),r(n(4297),e)},8713:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(1599),e),r(n(4109),e),r(n(3377),e),r(n(114),e),r(n(8926),e),r(n(4885),e),r(n(4821),e),r(n(6882),e),r(n(8921),e),r(n(9307),e),r(n(5959),e)},9302:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4109:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(9302),e)},7586:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._batchValues=void 0,e._batchValues=(t,e)=>{if(!(Number.isInteger(e)&&e>0))throw new Error("Invalid batch size.");const n=t.slice(0),i=[];for(;n.length;)i.push(n.splice(0,e));return i}},3501:(t,e)=>{"use strict";function n(t,e){if(!t||"object"!=typeof t)return t;if(e.has(t))return e.get(t);let i;if(t.nodeType&&"cloneNode"in t)i=t.cloneNode(!0),e.set(t,i);else if(t instanceof Date)i=new Date(t.getTime()),e.set(t,i);else if(t instanceof RegExp)i=new RegExp(t),e.set(t,i);else if(Array.isArray(t)){i=new Array(t.length),e.set(t,i);for(let r=0;rn(t,new Map)},9473:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._cloneDeep=e.clonePrototype=void 0;const i=n(1599),r=(t,e)=>"object"==typeof e&&e&&t instanceof e,o=t=>Object.prototype.toString.call(t);e.clonePrototype=t=>{if(null==t)return t;"object"!=typeof t&&(t=Object.getPrototypeOf(t));const e=function(){};return e.prototype=t,new e},e._cloneDeep=function(t,e){const{circular:n=!0,depth:a=1/0,prototype:s,non_enumerable:p=!1}=Object(e),c=void 0===n||Boolean(n),l=!isNaN(a)&&Number.isInteger(a)&&a>0?a:1/0,u=s,d=Boolean(p),f=[],m=[],h=void 0!==i.Buffer,g=(t,e)=>{if(0===e||"object"!=typeof t||!t)return t;let n,a;if(r(t,Map))n=new Map;else if(r(t,Set))n=new Set;else if(r(t,Promise))n=new Promise(((n,i)=>{t.then((t=>n(g(t,e-1)))).catch((t=>i(g(t,e-1))))}));else if("object"==typeof(s=t)&&"[object Array]"===o(s))n=[];else if((t=>"object"==typeof t&&"[object RegExp]"===o(t))(t))n=new RegExp(t.source,(t=>{let e="";return t?.global&&(e+="g"),t?.ignoreCase&&(e+="i"),t?.multiline&&(e+="m"),e})(t)),t.lastIndex&&(n.lastIndex=t.lastIndex);else if((t=>"object"==typeof t&&"[object Date]"===o(t))(t))n=new Date(t.getTime());else{if(h&&i.Buffer.isBuffer(t))return i.Buffer.from?n=i.Buffer.from(t):(n=new i.Buffer(t.length),t.copy(n)),n;r(t,Error)?n=Object.create(t):"object"!=typeof u?(a=Object.getPrototypeOf(t),n=Object.create(a)):(n=Object.create(u),a=u)}var s;if(c){const e=f.indexOf(t);if(-1!==e)return m[e];f.push(t),m.push(n)}if(r(t,Map))for(const[i,r]of t){const t=g(i,e-1),o=g(r,e-1);n.set(t,o)}if(r(t,Set))for(const i of t){const t=g(i,e-1);n.add(t)}for(let i in t){Object.getOwnPropertyDescriptor(t,i)&&(n[i]=g(t[i],e-1));try{const r=Object.getOwnPropertyDescriptor(t,i);if(void 0===r?.set)continue;n[i]=g(t[i],e-1),r&&Object.defineProperty(n,i,r)}catch(t){if(t instanceof TypeError)continue;if(t instanceof ReferenceError)continue}}if(Object.getOwnPropertySymbols){const i=Object.getOwnPropertySymbols(t);for(let r=0;r{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._compare=void 0,e._compare=(...t)=>{let e=[],n=[];if(t.length<1)return console.warn((t.length?"Less than two":"No")+" `_compare` arguments provided."),!0;for(let r=1;r-1||n.indexOf(r)>-1)return!1;for(let e in r)if(r.hasOwnProperty(e)===t.hasOwnProperty(e)&&typeof r[e]!=typeof t[e])return!1;for(let o in t){if(r.hasOwnProperty(o)!==t.hasOwnProperty(o))return!1;if(typeof r[o]!=typeof t[o])return!1;let a=t[o],s=r[o];switch(typeof a){case"object":case"function":if(e.push(t),n.push(r),!i(a,s))return!1;e.pop(),n.pop();break;default:if(a!==s)return!1}}return!0}}},5047:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._compareShallow=void 0,e._compareShallow=(...t)=>{if(t.length<1)return console.warn((t.length?"Less than two":"No")+" `_compareShallow` arguments provided."),!0;for(let n=1;n{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._duration=e._elapsed=e.SECOND_MS=e.MINUTE_MS=e.HOUR_MS=e.DAY_MS=e.MONTH_MS=e.YEAR_MS=e._parseIso=e._timestr=e._datestr=e._datetime=e._yearEnd=e._yearStart=e._monthEnd=e._monthStart=e._dayEnd=e._dayStart=e._monthName=e.MONTH_NAMES=e._dayName=e.DAY_NAMES=e._time=e._date=e._isDate=void 0,e._isDate=t=>t instanceof Date&&!isNaN(t.getTime()),e._date=(t,e=!0)=>{if(void 0===t)return e?void 0:new Date;const n=t=>isNaN(t)||!(t>1)&&e?void 0:new Date(t);if([null,!1,!0,0].includes(t))return n(t);if(t instanceof Date)return n(t.getTime());if("number"==typeof t)return n(new Date(t).getTime());try{let e=String(t).trim();if(!e||/\[object \w+\]/.test(e))return;return/^[+-]?\d+$/.test(e)?n(parseInt(e)):n(Date.parse(e))}catch(t){return void console.warn("[_date] exception:",t)}},e._time=(t,n,i,r=!0)=>{const o=(0,e._date)(t,r);if(!o)return;const a=o.getTime();return!isNaN(n=parseFloat(n))&&ai?void 0:a},e.DAY_NAMES=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],e._dayName=t=>(t=isNaN(t=parseInt(t))?0:t,e.DAY_NAMES[Math.abs(t%e.DAY_NAMES.length)]),e.MONTH_NAMES=["January","February","March","April","May","June","July","August","September","October","November","December"],e._monthName=t=>(t=isNaN(t=parseInt(t))?0:t,e.MONTH_NAMES[Math.abs(t%e.MONTH_NAMES.length)]),e._dayStart=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,0,0)},e._dayEnd=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),i.getMonth(),i.getDate(),23,59,59,999)},e._monthStart=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),i.getMonth(),1,0,0,0,0)},e._monthEnd=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),i.getMonth()+1,0,23,59,59,999)},e._yearStart=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),0,1,0,0,0,0)},e._yearEnd=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),11,0,23,59,59,999)},e._datetime=(t,n=!1)=>{const i=(0,e._date)(t,n);if(!i)return"";const r=[i.getFullYear(),i.getMonth()+1,i.getDate(),i.getHours(),i.getMinutes(),i.getSeconds()],o=[];for(const t of r)o.push((t+"").padStart(2,"0"));return o.splice(0,3).join("-")+" "+o.join(":")},e._datestr=(t,n=!1)=>(0,e._datetime)(t,n).substring(0,10),e._timestr=(t,n=!1)=>(0,e._datetime)(t,n).substring(11,19),e._parseIso=t=>{let e,n=NaN;try{t=String(t)}catch(e){t=""}if(e=/^(\d{4}|[+-]\d{6})(?:-?(\d{2})(?:-?(\d{2}))?)?(?:[ T]?(\d{2}):?(\d{2})(?::?(\d{2})(?:[,.](\d{1,}))?)?(?:(Z)|([+-])(\d{2})(?::?(\d{2}))?)?)?$/.exec(t)){for(const t of[1,4,5,6,7,10,11])e[t]=+e[t]||0;if(e[2]=(+e[2]||1)-1,e[3]=+e[3]||1,e[7]=e[7]?String(e[7]).substring(0,3):0,void 0!==e[8]&&""!==e[8]||void 0!==e[9]&&""!==e[9]){let t=0;"Z"!==e[8]&&void 0!==e[9]&&(t=60*e[10]+e[11],"+"===e[9]&&(t=0-t)),n=Date.UTC(e[1],e[2],e[3],e[4],e[5]+t,e[6],e[7])}else n=+new Date(e[1],e[2],e[3],e[4],e[5],e[6],e[7])}else n=Date.parse?Date.parse(t):NaN;return isNaN(n)?void 0:n},e.YEAR_MS=315576e5,e.MONTH_MS=2630016000.0000005,e.DAY_MS=864e5,e.HOUR_MS=36e5,e.MINUTE_MS=6e4,e.SECOND_MS=1e3;const n=(t,e,n,i,r,o,a,s,p,c,l)=>({years:t,months:e,days:n,hours:i,minutes:r,seconds:o,milliseconds:a,total_days:s,total_time:p,start_time:c,end_time:l,toString:function(s=0){s=[0,1].includes(s=parseInt(s))?s:0;const p=[],c=[],l=(t,e)=>{if(0===s&&["hour","minute","second","millisecond"].includes(e)){if("millisecond"===e)return;c.push(String(t).padStart(2,"0"))}else t&&p.push(t+" "+e+(t>1?"s":""))};return l(t,"year"),l(e,"month"),l(n,"day"),l(i,"hour"),l(r,"minute"),l(o,"second"),l(a,"millisecond"),0===s?(p.length?p.join(", ")+" ":"")+c.join(":"):(p.length||p.push("0 milliseconds"),p.join(", ").replace(/,([^,]*)$/," and$1"))}});e._elapsed=(t,i=void 0,r=!1)=>{if(!(t=(0,e._date)(t,r)))throw new TypeError("Invalid elapsed start date value! Pass a valid Date instance, integer timestamp or date string value.");if(!(i=(0,e._date)(i,r)))throw new TypeError("Invalid elapsed end date value! Pass a valid Date instance, integer timestamp or date string value.");if(t>i){const e=t;t=i,i=e}let o=0,a=0,s=0,p=0,c=0,l=0,u=0;const d=t.getTime(),f=i.getTime(),m=f-d,h=Math.floor(m/e.DAY_MS);(u+=i.getMilliseconds()-t.getMilliseconds())<0&&(l--,u+=1e3),(l+=i.getSeconds()-t.getSeconds())<0&&(c--,l+=60),(c+=i.getMinutes()-t.getMinutes())<0&&(p--,c+=60),(p+=i.getHours()-t.getHours())<0&&(s--,p+=24);const g=t.getFullYear();let v=t.getMonth();return o=i.getFullYear()-g,(a=i.getMonth()-v)<0&&(o--,a+=12),(s+=i.getDate()-t.getDate())<0&&(i.getMonth()===t.getMonth()&&v++,a<=0?(o--,a=11):a--,s+=new Date(g,v+1,0).getDate()),n(o,a,s,p,c,l,u,h,m,d,f)},e._duration=(t,i=0,r=!1)=>{if(!(t=(0,e._date)(t,r)))throw new TypeError("Invalid duration start date value! Pass a valid Date instance, integer timestamp or date string value.");if(!(i=(0,e._date)(i,r)))throw new TypeError("Invalid duration end date value! Pass a valid Date instance, integer timestamp or date string value.");if(t>i){const e=t;t=i,i=e}let o=0;const a=i.getTime(),s=t.getTime(),p=o=Math.abs(a-s),c=Math.floor(p/e.DAY_MS),l=Math.floor(p/e.YEAR_MS);o%=e.YEAR_MS;const u=Math.floor(o/e.MONTH_MS);o%=e.MONTH_MS;const d=Math.floor(o/e.DAY_MS);o%=e.DAY_MS;const f=Math.floor(o/e.HOUR_MS);o%=e.HOUR_MS;const m=Math.floor(o/e.MINUTE_MS);o%=e.MINUTE_MS;const h=Math.floor(o/e.SECOND_MS),g=o%e.SECOND_MS;return n(l,u,d,f,m,h,g,c,p,s,a)}},9802:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._debouced=void 0,e._debouced=(t,e=200,n=0,i=!1)=>{let r,o,a,s;e=!isNaN(e=parseFloat(e))&&e>=0?e:200,n=!isNaN(n=parseFloat(n))&&n>=0&&n>e?n:0,i=!!i;const p=n=>{let p=s;s=void 0,a&&(clearTimeout(a),a=void 0),o&&!n&&(clearTimeout(o),o=void 0),p?.length&&"function"==typeof t&&t.apply(...p),e&&i&&!n&&(r=setTimeout((()=>{clearTimeout(r),r=void 0}),e))},c=function(...t){if(s=[this,t],!e)return p();const c=(t=0)=>{clearTimeout(o),o=setTimeout((()=>p()),e),t||!n||a||(a=setTimeout((()=>p()),n))};if(!i||r||o)return c();c(1),p(1)};return Object.defineProperties(c,{length:{value:t.length},name:{value:`${t.name||"anonymous"}__debounced__${e}`}}),c}},5597:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._sayHello=void 0,e._sayHello=t=>{const e=`[x] - Hello ${t=t?.length?t:"Thuku"}!`;return console.log(e),e}},8917:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._isObjJson=e._jsonCopy=e._jsonParse=e._jsonStringify=void 0,e._jsonStringify=(t,e,n=null)=>{const i=null===e?void 0:e,r=[],o=["this"],a=new Map,s=function(t,e){if(null===e)return e;if(e instanceof Error)try{e=String(e)}catch(t){const n="[FAILURE] Parse Error to String failed!";console.warn(n,{value:e,e:t}),e=n}if(e instanceof Set&&(e=[...e]),e instanceof Map&&(e=[...e]),e instanceof RegExp&&(e+=""),"object"==typeof e){t&&((t,e)=>{let n=r.length-1,i=r[n];if(i[t]===e||0===n)return o.push(t),void r.push(e);for(;n-- >=0;)if(i=r[n],i?.[t]===e){n+=2,r.length=n,o.length=n,--n,r[n]=e,o[n]=t;break}})(t,e);const n=a.get(e);if(n)return"[Circular Reference]"+n;a.set(e,o.join("."))}return e};try{return void 0===t&&(t=void 0!==n?n:n=null),r.push(t),JSON.stringify(t,s,i)}finally{a.clear(),r.length=0,o.length=1}},e._jsonParse=(t,e)=>{try{return JSON.parse(t)}catch(t){return e}},e._jsonCopy=t=>"object"==typeof t&&t?(0,e._jsonParse)((0,e._jsonStringify)(t)):t,e._isObjJson=t=>{try{if("string"!=typeof t||!(t=t.trim()))return!1;if(!/^\{.+\}$|^\[.+\]$/s.test(t))return!1;const n=(0,e._jsonParse)(t);return n&&Object(n)===n}catch(t){return!1}}},8782:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._numk=e._logx=e._distance=e._rad2deg=e._deg2rad=e._base2dec=e._oct2dec=e._dec2oct=e._hex2dec=e._dec2hex=e._bin2dec=e._dec2bin=e._dec2base=e._bytesVal=e._px2rem=e._rand=e._commas=e._round=e._posInt=e._int=e._posNum=e._num=e._numeric=void 0,e._numeric=(t,e=!1,n=!1)=>{if("number"==typeof t)return!isNaN(t);if("boolean"==typeof t)return!!e;const i=String(t).trim();return""===i?!!n:/(^[+-]?[0-9]+([.][0-9]+)?([eE][+-]?[0-9]+)?$)|(^[+-]?\.[0-9]+$)|(^[+-]?[0-9]+\.$)/.test(i)},e._num=(t,e=NaN)=>{if("string"==typeof t)if((t=t.trim())&&/^.*$/.test(t)){let e="",n=t.trim().match(/^([\+-])\s*(\d.*)$/);n&&(e=n[1],t=n[2]),(t=t.replace(/\s*([\.,])\s*/g,"$1")).match(/^\d{1,3}(,\d{3})*(\.|(\.\d+))?$/)&&(t=t.replace(/,/g,"").trim()),/^\d+\.$|^\.\d+$|^\d+(\.\d+){0,1}$/.test(t)?!isNaN(t=parseFloat(t))&&e&&(t=parseFloat(e+t)):t=NaN}else t=NaN;else t=Number(t);if(!isNaN(t=Number(t))&&t>=Number.MIN_SAFE_INTEGER&&t<=Number.MAX_SAFE_INTEGER){let e=String(t).match(/^([\+-]?\d+\.\d{5,})(0{3,}\d*)$/);return e&&(t=Number(e[1])),t}return Number(e)},e._posNum=(t,n,i)=>{const r=(0,e._num)(t);if(!isNaN(r)&&r>=0&&!("number"==typeof n&&!isNaN(n)&&n>=0&&r=0&&r>i))return r},e._int=(t,n=NaN)=>{const i=Math.floor((0,e._num)(t,n));return isNaN(i)?n:i},e._posInt=(t,n,i,r=!1)=>{const o=(0,e._int)(t);if(!isNaN(o)&&o>=0)return"number"==typeof n&&!isNaN(n)&&n>=0&&o=0&&o>i?r?i:void 0:o},e._round=(t,n=2)=>{if(isNaN(t))return NaN;let i=10**Math.abs((0,e._int)(n,2));return Math.round((t+Number.EPSILON)*i)/i},e._commas=(t,n=2,i=!1)=>{const r=(0,e._round)((0,e._num)(t),n=(0,e._int)(n,2));if(isNaN(r))return console.warn("[WARNING: `_commas`] NaN value:",t),"";let o=String(r).replace(/\B(?=(\d{3})+(?!\d))/g,",");return n&&i&&(-1===o.indexOf(".")?o+=".".padEnd(n+1,"0"):o=o.split(".").reduce(((t,e,i)=>(t.push(1===i&&e.lengthMath.floor(Math.random()*(e-t+1))+t,e._px2rem=(t=1,n=!1,i=16)=>{t=(0,e._num)(t,1);const r=16===(i=(0,e._num)(i,16))?.0625:16/i*.0625;return n?t/r:t*r},e._bytesVal=(t,n=0,i,r=2,o=!1)=>{if(n=(0,e._posInt)(n,0,1)??0,!(t=(0,e._posInt)(t,0)??0))return 1===n?0:"0 B";const a=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],s="string"==typeof i&&a.includes(i=i.trim().toUpperCase())?i:"",p=s?a.findIndex((t=>t.toLowerCase()===s.toLowerCase())):Math.floor(Math.log(t)/Math.log(1024));if(!(p>=0&&p{let r=(0,e._posInt)(t,0)??0;if(0===r)return"0";const o=16===(n=[2,8,16].includes(n=(0,e._posInt)(n,2)??2)?n:2)?"0123456789ABCDEF".split(""):[];let a="";for(;r>0;){let t=r%n;a=(16===n?o[t]:t)+a,r=Math.floor(r/n)}if([2,16].includes(n)&&(i=(0,e._posInt)(i,0)??0)){let t="";for(;a.length;){let e=a.length-i;t=a.substring(e).padStart(i,"0")+(t?" ":"")+t,a=a.substring(0,e)}a=t}return a},e._dec2bin=(t,n=0)=>(0,e._dec2base)(t,2,n),e._bin2dec=t=>{if("string"!=typeof t||!/^[01]+$/.test(t=t.replace(/\s/g,"")))return;let e=0,n=0;for(let i=t.length-1;i>=0;i--)e+=parseInt(t[i])*Math.pow(2,n),n++;return e},e._dec2hex=(t,n=0)=>(0,e._dec2base)(t,16,n),e._hex2dec=t=>{if("string"!=typeof t||!/^[0-9A-F]+$/.test(t=t.replace(/0x/gi,"").replace(/\s/g,"").toUpperCase()))return;const e=Object.fromEntries("0123456789ABCDEF".split("").map(((t,e)=>[t,e])));let n=0;for(let i=0;i(0,e._dec2base)(t,8),e._oct2dec=t=>{if("string"!=typeof t||!/^[0-7]+$/.test(t=t.replace(/0o/gi,"").replace(/\s/g,"").toUpperCase()))return;let e=0;for(let n=0;n2===(n=[2,8,16].includes(n=(0,e._posInt)(n,2)??2)?n:2)?(0,e._bin2dec)(t):8===n?(0,e._oct2dec)(t):(0,e._hex2dec)(t),e._deg2rad=t=>{if(isNaN(t=(0,e._num)(t)))throw new TypeError("The _deg2rad `degrees` argument is not a valid angle number value.");return t*(Math.PI/180)},e._rad2deg=t=>{if(isNaN(t=(0,e._num)(t)))throw new TypeError("The _rad2deg `radians` argument is not a valid angle number value.");return t*(180/Math.PI)},e._distance=(t,n,i,r)=>{if(isNaN(t=(0,e._num)(t)))throw new TypeError("The _latLonDistance `latitude1` argument is not a valid latitude number value.");if(isNaN(n=(0,e._num)(n)))throw new TypeError("The _latLonDistance `longitude1` argument is not a valid longitude number value.");if(isNaN(i=(0,e._num)(i)))throw new TypeError("The _latLonDistance `latitude2` argument is not a valid latitude number value.");if(isNaN(r=(0,e._num)(r)))throw new TypeError("The _latLonDistance `longitude2` argument is not a valid longitude number value.");const o=t*Math.PI/180,a=i*Math.PI/180,s=(i-t)*Math.PI/180,p=(r-n)*Math.PI/180,c=Math.sin(s/2)*Math.sin(s/2)+Math.cos(o)*Math.cos(a)*Math.sin(p/2)*Math.sin(p/2);return 2*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))*6378e3},e._logx=(t,n)=>isNaN(t=(0,e._num)(t))||isNaN(n=(0,e._num)(n))?NaN:Math.log2(n)/Math.log2(t),e._numk=(t,n=1)=>{if(isNaN(t=(0,e._num)(t)))return NaN.toString();if(!t)return"0";n=(0,e._posInt)(n,0,3,!0)??1;const i=["","k","M","B","T"],r=i.length-1,o=t<0?"-":"",a=Math.floor((0,e._logx)(1e3,t=Math.abs(t))),s=Math.min(a,r),p=i[s];let c=(0,e._round)(t/1e3**s,n),l=`${o}${c}${p}`;if(a>r){const t=Math.floor(Math.log10(c));c=(0,e._round)(c/10**t,n),l=`${o}${c}e${t}${p}`}return l}},2962:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._tree=e._selectKeys=e._chunks=e._propsObj=e.FailError=e._mapValues=e._arrayList=e._trans=e._sort=e._dumpVal=e._values=e._isArray=e._isObject=e._iterable=e._empty=e._valueOf=e._dotGet=e._bool=e._validDotPath=e._dotInflate=e._dotFlat=e._minMax=e._isFunc=e._isClass=e._getProp=e._hasAnyProps=e._hasProps=e._hasProp=e._getAllProperties=e._getAllPropertyDescriptors=void 0;const i=n(8917),r=n(8782),o=n(5301),a=n(1599);e._getAllPropertyDescriptors=t=>{if([null,void 0].includes(t))return{};const n=Object.getPrototypeOf(t);return{...(0,e._getAllPropertyDescriptors)(n),...Object.getOwnPropertyDescriptors(t)}},e._getAllProperties=(t,n=!1)=>{if([null,void 0].includes(t))return[];const i=new Set;for(const e of Object.getOwnPropertyNames(t))i.add(e);const r=t=>(t=>{const e=[];for(let n in t)e.push(n);return e})((0,e._getAllPropertyDescriptors)(t)).concat(Object.getOwnPropertySymbols(t)),o=[...new Set([...r(Function.prototype),...n?r(Function):[],...r(Object.prototype),...n?r(Object):[]])],a=t=>{for(const e of r(t))o.includes(e)||i.add(e)};return a(t),n&&a(Object(t).constructor),[...i]},e._hasProp=(t,e,n=!1)=>!("object"!=typeof t||!t)&&(Object.prototype.hasOwnProperty.call(t,e)||!n&&e in t),e._hasProps=(t,...n)=>{if("object"!=typeof t||!t)return!1;if(!n.length)return!1;for(const i of n)if(!(0,e._hasProp)(t,i))return!1;return!0},e._hasAnyProps=(t,...n)=>{if("object"!=typeof t||!t)return!1;if(!n.length)return!1;const i=new Set;for(const r of n)(0,e._hasProp)(t,r)&&i.add(r);return!!i.size&&[...i]},e._getProp=(t,n,i=!1)=>{const r={match:n,key:void 0,value:void 0,exists:0},a=(0,e._getAllProperties)(t,!1);if(a.includes(n))return r.key=n,r.value=t[n],r.exists=t.hasOwnProperty(n)?1:2,r;const s=(0,o._stringable)(n);if(!1!==s){if(a.includes(n=s))return r.key=n,r.value=t[n],r.exists=t.hasOwnProperty(n)?1:2,r;if(i)for(const e of a){const i=(0,o._stringable)(e);if(!1!==i&&i.toLowerCase()===n.toLowerCase())return r.key=i,r.value=t[i],r.exists=t.hasOwnProperty(n)?1:2,r}}return r},e._isClass=t=>!(!t||t.constructor!==Function||void 0===t.prototype)&&(Function.prototype!==Object.getPrototypeOf(t)||Object.getOwnPropertyNames(t.prototype).length>1),e._isFunc=(t,n=!1)=>t&&"function"==typeof t&&(!!n||!(0,e._isClass)(t)),e._minMax=(t,e)=>{let n=t,i=e;return t>e&&(n=e,i=t),[n,i]},e._dotFlat=(t,e=[])=>{if(!t||"object"!=typeof t)return{};const n=[],i=(t,r)=>{for(const o of Object.entries(t)){const[t,a]=o,s=`${r?`${r}.`:""}${t}`;e&&Array.isArray(e)&&e.length&&(e.includes(`${t}`)||e.includes(s))||(a&&"object"==typeof a?i(a,s):n.push([s,a]))}};return i(t,""),Object.fromEntries(n)},e._dotInflate=t=>{const n=Object.entries((0,e._dotFlat)(t)),i={};for(const[t,e]of n){const n=t.split(".");if(1===n.length){i[n[0]]=e;continue}let r=n.slice().reverse().reduce(((t,e)=>({[e]:t})),e),o=i;for(let t=0;t{if(Object(t)!==t)return t;let e,n=0;(n=(e=Object.keys(t)).length)&&Object.keys([...Array(n)]).join(",")===e.join(",")&&(t=Object.values(t));for(const e in t)t[e]=r(t[e]);return t};return r(i)},e._validDotPath=(t,e=!1,n=0)=>{try{if(!(t=(0,o._str)(t,!0)))throw new TypeError("Invalid dot path value.");const n=[];for(let e of t.split("."))(e=e.trim())&&n.push(e);if(!n.length)throw new TypeError(`Invalid dot path format "${t}".`);const i=[];for(let t=0;t-1){const t=[];for(let e of r.split(","))(e=e.trim())&&!/^[-_0-9a-zA-Z]+\=([^\=\.]*)$/.test(e)&&t.push(e);t.length||(o=!0)}if(!o)throw new TypeError(`Invalid dot path key "${r}".`);i.push(r)}return i.join(".")}catch(i){return new s(i,n,{dot_path:t,operations:e}),""}},e._bool=(t,e=!1,n=!0)=>{if(n&&"string"==typeof t&&(t=t.trim()),!e||["true","false",!0,!1,1,0].includes(t))return"false"!==t&&!!t},e._dotGet=(t,n,o=!1,a=0,p)=>{try{const s=(t=(0,e._validDotPath)(t,!0,a)).split(".");if(!s.length)throw new TypeError("Invalid resolve dot path format.");let c=!1,l=s.reduce(((t,n)=>{if(c)return t;if(t&&"object"==typeof t){const a=(0,e._getProp)(t,n,o);if(a.exists)return a.value;if(Array.isArray(t)){if("!reverse"===n)return t.slice().reverse();if("!slice"===n)return t.slice();let a;if((a=(0,r._num)(n,0))<0&&Number.isInteger(a))return t.slice(a);if(t.length&&n.indexOf("=")>-1){const r=[];for(let t of n.split(",")){if(!(t=t.trim()))continue;let e=t.split("=");if(2!==e.length)return[];let n=e[0].trim(),o=decodeURIComponent(e[1]);n&&r.push([n,(0,i._jsonParse)(o,o)])}let a=-1;if(r.length)for(let n=0;n-1?t[a]:void(c=!0)}}}c=!0}),n);return c?p:l}catch(e){return new s(e,a,{path:t,target:n,ignoreCase:o,_default:p},"DotGetError"),p}},e._valueOf=t=>{if(!t||"object"!=typeof t)return t;let e=t.valueOf();if(e===t){if(Object(t[Symbol.toPrimitive])===t[Symbol.toPrimitive]&&!isNaN(e=Number(t)))return e;if(!1!==(e=(0,o._stringable)(t)))return e;if("function"==typeof t.toJSON&&(e=t.toJSON())!==t)return e}return e},e._empty=(t,n=!1)=>!(![null,void 0,NaN,""].includes(t)&&(["function","boolean","number"].includes(typeof t)||("string"==typeof t||(0,a._isBuffer)(t)?(0,o._str)(t,n).length:"object"!=typeof t||(t instanceof Map||t instanceof Set?t.size:Array.isArray(t)?t.length:Object(t[Symbol.iterator])===t[Symbol.iterator]?[...t].length:(0,e._getAllProperties)(t).length)))),e._iterable=(t,e=!1)=>"function"==typeof t?.[e?Symbol.asyncIterator:Symbol.iterator],e._isObject=(t,n=!1)=>!(!t||"object"!=typeof t||Object.getPrototypeOf(t)!==Object.prototype||n&&(0,e._empty)(t)),e._isArray=(t,e=!1,n=0)=>{if(n=[0,1,2].includes(n=parseInt(n))?n:0,!Array.isArray(t)){if(1===n)return!1;const e=t?.[Symbol.iterator];if(Object(e)!==e)return!1;if(2!==n&&!["values","[Symbol.iterator]"].includes(e.name))return!1}try{const n=t.length??[...t].length;return!(!(Number.isInteger(n)&&n>=0)||e&&!n)}catch(t){return!1}},e._values=(t,n=!1,i=!1,r)=>{let o=void 0===t?[]:n?[["0",t]]:[t];if(t&&"object"==typeof t&&"function"!=typeof t)if(Object(t[Symbol.iterator])===t[Symbol.iterator]){const e=(o=[...t]).length&&o.findIndex((t=>!(Array.isArray(t)&&2===t.length&&Object.keys(t)+""=="0,1")))<0;if(n)o=e?o:Object.entries(o);else if(e){const t=[];for(const e of o)t.push(e[1]);o=t}}else if(i){const i=Object.entries(t);if(i.length||(0,e._empty)(t)&&(0,e._isObject)(t))if(!n&&i.length){const t=[];for(const e of i)t.push(e[1]);o=t}else o=i}else(0,e._empty)(t)&&(0,e._isObject)(t)&&(o=[]);if(void 0!==r){let t=r;-1===r?t=1/0:[null,!0].includes(t)&&(t=void 0),o=o.flat(t)}return o},e._dumpVal=(t,e=200,n=!1)=>{t=(0,i._jsonCopy)(t),e=(e=(0,r._int)(e,200))?e>=20?e:200:0;const o=t=>{if(Array.isArray(t)){let e=1,n="";for(let i=0;i{if("object"==typeof t&&t)for(let e in t)t.hasOwnProperty(e)&&(t[e]=a(t[e]));else t=(t=>{if(!("string"==typeof t&&t.length>e))return t;const n=`...(${t.length})`;return t.substring(0,e-n.length)+n})(t);return t};return a(n?o(t):t)},e._sort=(t,e,n,i)=>{try{const r=[...t].slice();if(!r.length)return r;const o=e,a={locales:i?.locales||"en",options:{sensitivity:"base",...Object(i?.options)}},s="function"==typeof n?n:void 0,p=(t,e,n)=>{let i=t,r=e;if(s){const o=s(t,e,n),a=parseInt(o);if([-1,1,0].includes(a))return a;i=o?.[0]??i,r=o?.[1]??r}let o=0,p=0;return"string"==typeof i&&"string"==typeof r&&"function"==typeof i.localeCompare?(1,o=i.localeCompare(r,a.locales,a.options)):o=i>r?1:i{let e=t??1;if("string"==typeof e){if(!(e=e.trim()))return 1;if(e.toLowerCase().startsWith("asc"))return 1;if(e.toLowerCase().startsWith("desc"))return-1}return-1===(e=parseInt(e))?-1:(1!==e&&console.warn(`[-] unsupported _sort \`mode\` value (${t}).`),1)},l=(t,e,n,i)=>p(t,e,i)*c(n),u=()=>{const t=new Map;let e;if(Object(o)===o){const n=(t,e="")=>Array.isArray(t)&&"string"==typeof t[0]&&(e=t[0].trim())?[e,(t[1]??"").trim()||"asc"]:void 0;if("function"==typeof o[Symbol.iterator]){const i=[...o];if(e=n(i))t.set(e[0],e[1]);else for(const r of i)(e=n(r))&&t.set(e[0],e[1])}else for(const i of Object.entries(o))(e=n(i))&&t.set(e[0],e[1])}if(!t.size)return(t,e)=>l(t,e,o);const n=[...t];return(t,e)=>{let i=0,r=0,o=0;for(const[a,s]of n){if(!Object(t).hasOwnProperty(a)&&!Object(e).hasOwnProperty(a))continue;const n=t?.[a],p=e?.[a],c=l(n,p,s,a);c&&(o=c),1===c?i++:-1===c&&r++}return i&&r&&i===r?o:i>r?1:i{const a=/\{([_0-9a-zA-Z]+)((\.[_0-9a-zA-Z]+)*)\}/g,s=(0,o._str)(t);if(!s.trim())return s;const p=`!!_${Date.now()}_!!`,c="function"==typeof r?r:void 0,l=(t,i="")=>{let r=(0,e._dotGet)(t,n,!0,0,p);if(r===p)return p;if((i=(0,o._str)(i,!0))&&(r=(0,e._dotGet)(i,r,!0,0,p)),r===p)return p;c&&(r=c(r,i,t));const a=!Array.isArray(r)&&(0,o._stringable)(r);return!1!==a?a:(0,o._str)(r,!1,!0)};if(!a.test(s)){const t=l(s);return t!==p?t:s}let u=(0,o._str)(i);return s.replace(a,((...t)=>{const e=t[1],n=t[2].replace(/^\./,"");let i=l(e,n);return i===p&&(i=u),i}))},e._arrayList=t=>(0,e._isArray)(t,!0)?[...t]:[],e._mapValues=(t,n="",i=!1,r=0,a=!0)=>{const s={},p=(0,e._arrayList)(t),c=(0,o._str)(n,!0);for(let t=0;t{const o=Object(t),a=(0,e._arrayList)(n);return i?Object.fromEntries(Object.entries(o).filter((t=>!a.includes(t[0])))):a.reduce(((t,n)=>((0,e._empty)(n,!0)||(o.hasOwnProperty(n)?t[n]=o[n]:r&&(t[n]=void 0)),t)),{})},e._chunks=(t,e=1)=>{const n=[...t],i=[],r=parseInt(e)||0;if(r<0)throw new TypeError(`Invalid \`_chunks\` \`chunk_length\` argument value (${e}).`);if(!r)return[n];for(let t=0;t{const o=(t,e="keys")=>{if("object"!=typeof t||!t)return[];try{return[...new Set([...t])]}catch(t){return console.warn(`[-] invalid \`_selectKeys\` ${e} string array object.`),[]}};t=[...t],n=o(n);const a=[];i&&(!0===i?(a.push(...n),n=[]):a.push(...o(i,"omit"))),r=!!r;const s=[],p=new Set,c={},l=n.length?Object.fromEntries(n.map((t=>[t,void 0]))):{};for(const n of t){if(Object(n)!==n)continue;const t={};for(const[i,o]of Object.entries({...l,...n}))r&&!p.has(i)&&((0,e._empty)(o,!0)?c.hasOwnProperty(i)||(c[i]=1):(c.hasOwnProperty(i)&&delete c[i],p.add(i))),a.includes(i)||(t[i]=o);s.push(t)}const u=[],d=Object.keys(c);for(const t of s){if(n.length){let i=0;const o=[];for(const s of n)a.includes(s)||d.includes(s)||(r&&(0,e._empty)(t[s],!0)&&i++,o.push([s,t[s]]));o.length&&o.length!==i&&u.push(Object.fromEntries(o));continue}let i=0;const o=[],s=Object.entries(t);for(const[t,n]of s)d.includes(t)||(r&&(0,e._empty)(n,!0)&&i++,o.push([t,n]));o.length&&o.length!==i&&u.push(Object.fromEntries(o))}return u},e._tree=(t,e)=>{const{name:n="",pad:a=0,blanks:s=!1,max_length:p=200,wrap_length:c=80,word_break:l=!1}=Object(e);let u=(0,r._posInt)(a,0)??0,d=(0,o._str)(n,!0);d.length&&(d=`[${d}]`,u+=3);const f=t=>{const e="├───",n="└───",r=" ",a="│ ",u=/^\"(.*)\"$/gs,d=[];if("string"==typeof(t=(t=>{if([null,void 0].includes(t))return String(t);if(["boolean","number"].includes(typeof t))return String(t);if(Object(t)!==t)return(0,i._jsonStringify)((0,o._str)(t,!0));const e=t[Symbol.iterator],n=Object(e)===e;return!n&&(0,o._stringable)(t)?(0,o._str)(t,!0):Object.entries(t=(0,i._jsonCopy)(t)).length?t:n?"[]":"{}"})(t)))return{type:"value",lines:[t]};const m=Object.entries(t),h=m.length,g=t[Symbol.iterator],v=Object(g)===g;for(let t=0;t=0,j=E?`[${i}]`:i,k=E&&"value"===x;if(y&&k||d.push(`${b?n:e}${j}`),y)continue;const A=(b?r:a)+(k?"".padStart(`[${i}]`.length+1):""),M="undefined"!=typeof process&&Number.isInteger(process?.stdout?.columns)&&A.lengthu>0?"".padStart(u)+t:t)).join("\n")}},9016:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._pendingAbort=e._pending=e.PENDING_CACHE=e.PendingAbortError=e._resolve=e._sleep=e._asyncValues=e._asyncQueue=e._asyncAll=void 0;const i=n(8782),r=n(2962),o=n(5301);async function a(t,e=!1){const n=Promise.resolve("function"!=typeof t?t:(async()=>t.call(this))());return e?new Promise(((t,e)=>n.then(t,e))):n}e._asyncAll=async(t,e,n)=>new Promise((i=>{const a="function"==typeof e?e:void 0,s="function"==typeof n?n:void 0;let p=0,c=0;const l=(0,r._arrayList)(t).map(((t,e)=>({index:e,value:t}))),u=l.length,d=[],f=()=>{setTimeout((()=>i(d)),0)};if(!u)return s&&s(100,u,p,c),f();s&&s(0,u,p,c);const m=(t=!1)=>{if(p++,t&&c++,s){const t=Math.min(Math.floor(p/u*100),100);try{s(t,u,p,c)}catch(t){console.warn(`[IGNORED] _asyncAll > onProgress callback exception; ${(0,o._errorText)(t)}`)}}p>=u&&f()};l.forEach((t=>{(async()=>{let{value:e,index:n}=t;return"function"==typeof e&&(e=e()),e instanceof Promise&&(e=await e),a?a(e,n,u):e})().then((e=>(d[t.index]={status:"resolved",index:t.index,value:e},m()))).catch((e=>(d[t.index]={status:"rejected",index:t.index,reason:e},m(!0))))}))})),e._asyncQueue=async(t,e=0,n,a)=>new Promise((s=>{e=(0,i._posInt)(e)??0;const p="function"==typeof n?n:void 0,c="function"==typeof a?a:void 0,l=(0,r._arrayList)(t).map(((t,e)=>({index:e,value:t}))),u=l.length;let d=0,f=0,m=0;const h=[],g=()=>{setTimeout((()=>s(h)),0)};if(!u)return c&&c(100,u,f,m),g();let v;c&&c(0,u,f,m);const _=()=>{clearTimeout(v),v=setTimeout((()=>function(){if(e&&d+1>e)return;const t=l.shift();if(!t)return;d++;const n=(t=!1)=>{if(d--,f++,t&&m++,c){const t=Math.min(Math.floor(f/u*100),100);try{c(t,u,f,m)}catch(t){console.warn(`[IGNORED] _asyncBatch > onProgress callback exception; ${(0,o._errorText)(t)}`)}}return f>=u?g():_()};(async()=>p?p(t.value,t.index,u):t.value)().then((e=>{h[t.index]={status:"resolved",index:t.index,value:e},n()})).catch((e=>{h[t.index]={status:"rejected",index:t.index,reason:e},n(!0)})),_()}()),v?50:0)};_()})),e._asyncValues=t=>({values:()=>t,size:()=>t.length,async each(t){let e=this,n=!1,i=-1,r=()=>{n=!0};for await(const o of e){if(i++,n)break;await t(o,i,e.size(),r)}},[Symbol.asyncIterator](){let e=0;const n=this;return{async next(){let i,r=n.size();return e>=r?{done:!0,value:i}:(i=await Promise.resolve(t[e]),e++,{done:!1,value:i})}}}}),e._sleep=async t=>(t=!isNaN(t)&&t>=0?t:0,new Promise((e=>setTimeout((()=>e(t)),t)))),e._resolve=a;class s extends Error{name="PendingAbortError";pending;constructor(t,e){super(t),this.pending=e}}e.PendingAbortError=s,e.PENDING_CACHE={},e._pending=(t,n,i=0,r=!1)=>{if(!(t=(0,o._str)(t,!0)))throw new TypeError("Invalid pending `key` value.");if("function"!=typeof n)throw new TypeError("Invalid pending `promise` callback function.");let p,c,l=e.PENDING_CACHE[t];const u=l&&l.promise instanceof Promise&&l.resolved>-1?l.promise:void 0;if(!u||i){const p=u&&1!==i?a(u,!0).then((async t=>2===i?t:a(n))).catch((async()=>a(n))):a(n);l=e.PENDING_CACHE[t]={key:t,promise:p,resolved:0,keep:r,aborted:!1,abortError:void 0,abort:function(t){const e=this;"function"!=typeof c||e.resolved||e.aborted||c(e.abortError=new s((0,o._str)(t,!0)||"aborted",e),e.aborted=!0)}}}else l.abortError=void 0,l.aborted=!1;let d=0;const f=new Promise(((n,i)=>{p=i=>{d||(d=1,n(i)),l.resolved=1,e.PENDING_CACHE[t]!==l||l.keep||delete e.PENDING_CACHE[t]},c=(n,r=!1)=>{d||(d=-1,i(n)),r||(l.resolved=-1,e.PENDING_CACHE[t]===l&&delete e.PENDING_CACHE[t])},l.promise.then(p,(t=>{"function"==typeof c&&c(t)}))}));return f.pending=l,f},e._pendingAbort=(t=!1,n,i)=>{if(n=(0,o._str)(n,!0)){const r=e.PENDING_CACHE[n];"function"==typeof r?.abort&&r.abort(i),t&&r?.key&&delete e.PENDING_CACHE[r.key]}else for(const n of Object.values(e.PENDING_CACHE))"function"==typeof n?.abort&&n.abort(i),t&&n?.key&&delete e.PENDING_CACHE[n.key]}},78:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._queue=void 0,e._queue=()=>{const t={};let e=0,n=0;return{get count(){return n},get length(){return n-e},get isEmpty(){return 0===this.length},enqueue(e){t[n]=e,n++},dequeue(){const n=t[e];return delete t[e],e++,n},peek:()=>t[e],values:()=>Object.values(t)}}},1347:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._rc4=void 0,e._rc4=(t,e)=>{if(!(t=String(t??"")))return"";e=String(e??"alohomora");const n=[],i=[];for(let t=0;t<256;t++)n[t]=t,i[t]=e.charCodeAt(t%e.length);let r=0;for(let t=0;t<256;t++)r=(r+n[t]+i[t])%256,[n[t],n[r]]=[n[r],n[t]];let o="",a=0;r=0;for(let e=0;e{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._wrapLines=e._strKeyValues=e._parseKeyValues=e._keyValue=e._cr=e._textMaxLength=e._errorText=e._split=e._toCsv=e._parseCsv=e._isEmail=e._isUrl=e._parseDataUri=e._hash53=e._hashCodeStr=e._hashCode=e._toUpperCase=e._toLowerCase=e._toCamelCase=e._toStudlyCase=e._toSlugCase=e._toSnakeCase=e._toSentenceCase=e._toTitleCase=e._rtrim=e._ltrim=e._trim=e._sqlEscape=e._strEscape=e._regEscape=e._strNorm=e._str=e._stringable=e._string=e._uuid=e._xuid=void 0;const i=n(8917);e._xuid=()=>Math.random().toString(36).substring(2)+(new Date).getTime().toString(36),e._uuid=(t,n)=>{const i=void 0!==t&&!isNaN(parseInt(t+""))&&Number.isInteger(t)&&t>=7&&t<=64?t:16,r=()=>{let t="";for(;t.length(t&&(t=!1),r())));o=t?e+r():e}else o=r();return o},e._string=(t,e="")=>{let n="";try{n=t instanceof Date&&!isNaN(t.getTime())?t.toISOString():String(t)}catch(t){n=e}return n},e._stringable=t=>{const n=`!${Date.now()}!`,i=(0,e._string)(t,n);return i!==n&&!/\[object \w+\]/.test(i)&&i},e._str=(t,n=!1,r=!1)=>{if("string"!=typeof t){if(null==t)return"";if("object"==typeof t){if(Array.isArray(t))return r?(0,i._jsonStringify)(t):"";const n=(0,e._stringable)(t);if(!1===n)return r?(0,i._jsonStringify)(t):"";t=n}else t=(0,e._string)(t)}return n?t.trim():t},e._strNorm=t=>(0,e._str)(t).normalize("NFD").replace(/[\u0300-\u036f]/g,""),e._regEscape=t=>(0,e._str)(t).replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),e._strEscape=t=>JSON.stringify((0,e._str)(t)).replace(/\\u([\d\w]{4})/g,((t,e)=>{const n=parseInt(e,16);return n>255?t:"\\"+encodeURIComponent(String.fromCharCode(n)).replace("%","x").replace("x0B","v")})).replace(/^"|"$/g,"").replace(/\\"/g,'"'),e._sqlEscape=t=>null==t?null:"boolean"==typeof t?t:"number"==typeof t?isNaN(t)?null:t:(t=(0,e._str)(t,!1,!0))?t.replace(/\\/g,"\\\\").replace(/\0/g,"\\0").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/'/g,"\\'").replace(/"/g,'\\"').replace(/\x1a/g,"\\Z"):t,e._trim=(t,n=" \r\n\t\f\v\0",i="")=>{if(!(t=(0,e._str)(t))||!(n=(0,e._str)(n)))return t;n=n.replace(/\{default\}/," \r\n\t\f\v\0");let r=[],o=0,a=0;for(const t of[...new Set([...n])])t&&("-"!==t?"_"!==t?r.push(t):a=1:o=1);a&&r.unshift("_"),o&&r.unshift("-");let s=`[${(0,e._regEscape)(r.join(""))}]*`,p=`^${s}|${s}$`;return["l","left"].includes(i)?p=`^${s}`:["r","right"].includes(i)&&(p=`${s}$`),t.replace(new RegExp(p,"gs"),"")},e._ltrim=(t,n=" \r\n\t\f\v\0")=>(0,e._trim)(t,n,"left"),e._rtrim=(t,n=" \r\n\t\f\v\0")=>(0,e._trim)(t,n,"right"),e._toTitleCase=(t,n=!1)=>(0,e._str)(t).replace(/\w\S*/g,(t=>t[0].toUpperCase()+(n?t.substring(1):t.substring(1).toLowerCase()))),e._toSentenceCase=(t,n=!1)=>{let i="";for(let r of(0,e._str)(t).split(/((?:\.|\?|!)\s*)/)){if(r.length){const t=r.charAt(0).toUpperCase(),e=r.length>1?r.slice(1):"";r=t+(n?e:e.toLowerCase())}i+=r}return i},e._toSnakeCase=(t,n=!1)=>{let i=(0,e._strNorm)((0,e._trim)(t)).replace(/[A-Z]+/g,(t=>t[0].toUpperCase()+t.substring(1).toLowerCase())).replace(/\W+/g," ").split(/ |\B(?=[A-Z])/).join("_").replace(/_+/g,"_").toLowerCase();return"_"===i?"":(/^_|_$/.test(i)&&n&&(i=(0,e._trim)(i,"_",["l","left","r","right"].includes(n)?n:"")),i)},e._toSlugCase=(t,n=!1)=>(0,e._toSnakeCase)(t,n).replace(/_/g,"-"),e._toStudlyCase=t=>{let n="";for(const i of(0,e._toSnakeCase)(t).split("_"))i.length&&(n+=i[0].toUpperCase()+i.substring(1).toLowerCase());return n},e._toCamelCase=t=>{let n=(0,e._toStudlyCase)(t);return n.length&&(n=n[0].toLowerCase()+n.substring(1)),n},e._toLowerCase=t=>(0,e._str)(t).toLowerCase(),e._toUpperCase=t=>(0,e._str)(t).toUpperCase(),e._hashCode=t=>{let n=0;if(!(t=(0,e._str)(t)))return n;for(let e=0;e{const n=(0,e._hashCode)(t)+"",i=/^-/;return i.test(n)?n.replace(i,"n"):"x"+n},e._hash53=(t,n=0)=>{if(!(t=(0,e._str)(t)))return 0;isNaN(n)&&(n=0);let i=3735928559^n,r=1103547991^n;for(let e,n=0;n>>16,2246822507)^Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507)^Math.imul(i^i>>>13,3266489909),4294967296*(2097151&r)+(i>>>0)},e._parseDataUri=t=>{if(!(t=(0,e._str)(t,!0)))return;const n=/data:(?[\w/\-\.]+);(?(charset=)?([^,]+)),(?[^\s]+)/.exec(t);return n?{mime:n[1],encoding:n[2],charset:n[3]&&n[4]||"",data:n[5]}:void 0},e._isUrl=(t,n=!1)=>!(!t||"string"!=typeof t||!t.trim())&&(!(!n||!(0,e._parseDataUri)(t))||new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.?)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$","i").test(t)),e._isEmail=t=>!(!t||"string"!=typeof t||!t.trim())&&/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(t.toLowerCase()),e._parseCsv=(t,n,i)=>{const r=new RegExp("","g"),o=new RegExp("","g"),a=new RegExp("","g"),s=1===(n=(0,e._str)(n,!0)).length?n:",",p=new RegExp("(^|["+s+'\\n])"([^"]*(?:""[^"]*)*)"(?=($|['+s+"\\n]))","g"),c=(0,e._str)(t,!0).replace(/\r/g,"").replace(/\n+$/,"").replace(p,((t,e,n)=>e+n.replace(/\n/g,"").replace(/""/g,"").replace(/,/g,""))).split(/\n/),l=[];for(const t of c){if(!t.length)continue;const e=[];for(const n of t.split(s))e.push(n.replace(r,i??"\n").replace(o,'"').replace(a,","));l.push(e)}return l},e._toCsv=(t,n,i)=>{const r=1===(n=(0,e._str)(n,!0)).length?n:",",o=[],a=t=>{let n=(0,e._str)(t);return n.length?("string"==typeof i&&n.indexOf(i)>-1&&"\n"!==i&&(n=n.replace(new RegExp(i,"g"),"\n")),n=n.replace(/\r/g,"").replace(/\n+$/,"").replace(/"/g,'""'),(n.indexOf(r)>-1||n.indexOf('"')>-1||n.indexOf("\n")>-1||/^\s+|\s+$/.test(n))&&(n=`"${n}"`),n):n};if(t&&"object"==typeof t&&t[Symbol.iterator]){const e=[],n=Object.values([...t]);for(const t of n)"object"==typeof t&&t[Symbol.iterator]&&e.push(t);if(e.length)for(const t of n){const e=[];for(const n of t)e.push(a(n));o.push(e)}else{const t=[];for(const e of n)t.push(a(e));o.push(t)}}else if(t=(0,e._str)(t,!0)){const n=(0,e._parseCsv)(t,r,i);for(const t of n){const e=[];for(const n of t)e.push(a(n));o.push(e)}}let s="",p=0;for(let t=0;t{let r,o=(0,e._str)(t);"string"==typeof n?r=new RegExp((0,e._regEscape)((0,e._str)(n))):n instanceof RegExp&&(r=n),r&&(r=new RegExp(r,[...new Set(("g"+r.flags).split(""))].join(""))),i=i&&!isNaN(i=parseInt(i+""))&&i>=0?i:void 0;const a=r?o.split(r,i):o.split(void 0,i),s=r?o.match(r)||[]:o.match(void 0)||[],p=[];for(let t=0;t{const n={},i=r=>{if("object"!=typeof r||!r){const t=(0,e._str)(r,!0);return void(t&&(n[t.toLowerCase()]=t))}if(Array.isArray(r)){for(const t of r)i(t);return}if(r instanceof Error){let i=(0,e._str)(t.name,!0);["Error","TypeError"].includes(i)&&(i="");const r=(0,e._str)(t.message,!0),o=r?(i?i+" ":"")+r:"";return void(o&&(n[o.toLowerCase()]=o))}if(r.response)return i(r.response);if(r.body)return i(r.body);if(r.error)return i(r.error);if(r.message)return i(r.message);const o=(0,e._str)(r,!0,!0);o&&(n[o.toLowerCase()]=o)};return i(t),Object.values(n).join("\n")},e._textMaxLength=(t,n=1e3,i=0)=>{const r=(t=(0,e._str)(t)).length,o=!isNaN(n=parseInt(n))&&n>0?n:1e3;if(r<=o)return t;const a=2===i?`...(${t.length})`:1===i?"...":"",s=a.length,p=o-s;return p>s&&r>p?t.substring(0,p)+a:t.substring(0,o)},e._cr=(t,e,n)=>{const i=[null,void 0].includes(t)?"":String(t),r=Number.isInteger(e=parseInt(e))&&e>=0?e:0,o=([null,void 0].includes(n)?"":String(n))||"QWxvaG9tb3JhIQ";let a="";for(let t=0;t{if(!(t=(0,e._str)(t,!0)))return t;const o=(0,e._str)(i)||"=",a=(0,e._str)(r)||"\n";return n?t.replace(new RegExp(o,"g"),"").replace(new RegExp(a,"g"),""):t.replace(new RegExp("","g"),o).replace(new RegExp("","g"),a)},e._parseKeyValues=(t,n=!1,i="=",r="\n")=>{let o={},a=-1;for(let s of(0,e._str)(t,!0).split("\n")){if(!(s=(0,e._str)(s,!0)))continue;const t=s.trim().split("=");a<0&&(a=t.length>=2?1:0);const p=(0,e._keyValue)(t[0],n,i,r),c=a?(0,e._keyValue)(t[1],n,i,r):p;p&&c&&(o[p.toLowerCase()]=[p,c])}return Object.values(o)},e._strKeyValues=(t,n,i,r="=",o="\n")=>{const a={},s=(0,e._str)(r)||"=",p=(0,e._str)(o)||"\n";let c,l,u=-1,d=!0;const f=t=>{n=(0,e._str)(c=n,!0),i=(0,e._str)(l=i,!0),n&&!i?(i=n,l=c):i&&!n&&(n=i,c=l),Object(t)===t&&(n||i||Object(t)!==t||(t.hasOwnProperty("key")&&(l=i=c=n="key"),t.hasOwnProperty("value")&&(!n&&t.hasOwnProperty("label")?(l=i="label",c=n="value"):c=n=l=i="value")),u=(0,e._str)(c,!0)&&(0,e._str)(l,!0)&&t.hasOwnProperty(c)&&t.hasOwnProperty(l)?1:0)},m=t=>(0,e._keyValue)(t,!0,s,p),h=(t,n)=>{if(Object(t)===t)if(Object(t[Symbol.iterator])===t[Symbol.iterator]){const e=[...t];if(!e.length)return;if(n&&Object(e[0])===e[0])return void e.forEach((t=>h(t,!1)));u<0&&f(e);const i=m(e[u?c:0]),r=m(e[u?l:1]);i&&r&&(i.toLowerCase()!==r.toLowerCase()&&(d=!1),a[i.toLowerCase()]=[i,r])}else{if(u<0&&f(t),!u)return;const e=m(t[c]),n=m(t[l]);e&&n&&(e.toLowerCase()!==n.toLowerCase()&&(d=!1),a[e.toLowerCase()]=[e,n])}else if(n){const n=(0,e._str)(t,!0);if(!n)return;const i=(0,e._parseKeyValues)(n,!1,s,p);return void(i.length&&i.forEach((t=>h(t,!1))))}},g=Object(t)===t&&Object(t[Symbol.iterator])===t[Symbol.iterator]?[...t]:[t];return h(g,!0),Object.values(a).map((t=>d?t[0]:t.join(s))).join(p)},e._wrapLines=(t,n=0,i=!1,r)=>{const o="function"==typeof r?r:void 0,a=Number.isInteger(n=parseInt(n))&&n>=0?n:0;let s=[],p=[];const c=t=>{if(o){const n=o(t,s);if([void 0,null].includes(n))return;t=(0,e._str)(n)}s.push(t)},l=t=>{if(!a)return c(t);const e=t=>{const e=[...p,t].join(" ");if(e.length>a)if(i){let t="",n=0;for(;(t=e.substring(n,n+a)).length===a;)c(t),n+=a;p=[t]}else if(t.length>a){let t="",n=0;for(;(t=e.substring(n,n+a)).length===a;)c(t),n+=a;p=[t]}else p.length&&c([...p,""].join(" ")),(p=[t]).join(" ").length===a&&(c(p.join(" ")),p=[]);else e.length===a?(c(e),p=[]):p=[e]};for(const n of t.split(" "))e(n)};for(const n of(0,e._str)(t).split("\n"))l(n);return p&&c(p.join(" ")),s}},7612:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._utf8Decode=e._utf8Encode=e._unescape=e._escape=void 0;const i=n(5301);e._escape=t=>{const e=(0,i._str)(t);if(!e.length)return e;let n="";for(let t=0;t{const e=(0,i._str)(t),n=e.length;if(!n)return e;let r="",o=0;for(;o(0,e._unescape)(encodeURIComponent((0,i._str)(t))),e._utf8Decode=t=>decodeURIComponent((0,e._escape)(t))},3377:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(7586),e),r(n(3501),e),r(n(9473),e),r(n(740),e),r(n(5047),e),r(n(9925),e),r(n(9802),e),r(n(5597),e),r(n(8917),e),r(n(8782),e),r(n(2962),e),r(n(9016),e),r(n(78),e),r(n(5301),e),r(n(7612),e),r(n(1347),e)},4713:t=>{"use strict";t.exports=JSON.parse('{"123":"application/vnd.lotus-1-2-3","tmp":"text/x-tmp","php":"text/x-php","scss":"text/x-scss","ts":"text/x-typescript","tsx":"application/javascript","jsx":"application/javascript","ez":"application/andrew-inset","aw":"application/applixware","atom":"application/atom+xml","atomcat":"application/atomcat+xml","atomsvc":"application/atomsvc+xml","ccxml":"application/ccxml+xml","cdmia":"application/cdmi-capability","cdmic":"application/cdmi-container","cdmid":"application/cdmi-domain","cdmio":"application/cdmi-object","cdmiq":"application/cdmi-queue","cu":"application/cu-seeme","davmount":"application/davmount+xml","dbk":"application/docbook+xml","dssc":"application/dssc+der","xdssc":"application/dssc+xml","ecma":"application/ecmascript","emma":"application/emma+xml","epub":"application/epub+zip","exi":"application/exi","pfr":"application/font-tdpfr","gml":"application/gml+xml","gpx":"application/gpx+xml","gxf":"application/gxf","stk":"application/hyperstudio","ink":"application/inkml+xml","inkml":"application/inkml+xml","ipfix":"application/ipfix","jar":"application/java-archive","ser":"application/java-serialized-object","class":"application/java-vm","json":"application/json","jsonml":"application/jsonml+json","lostxml":"application/lost+xml","hqx":"application/mac-binhex40","cpt":"application/mac-compactpro","mads":"application/mads+xml","mrc":"application/marc","mrcx":"application/marcxml+xml","ma":"application/mathematica","nb":"application/mathematica","mb":"application/mathematica","mathml":"application/mathml+xml","mbox":"application/mbox","mscml":"application/mediaservercontrol+xml","metalink":"application/metalink+xml","meta4":"application/metalink4+xml","mets":"application/mets+xml","mods":"application/mods+xml","m21":"application/mp21","mp21":"application/mp21","mp4s":"application/mp4","doc":"application/msword","dot":"application/msword","mxf":"application/mxf","bin":"application/octet-stream","dms":"application/octet-stream","lrf":"application/octet-stream","mar":"application/octet-stream","so":"application/octet-stream","dist":"application/octet-stream","distz":"application/octet-stream","pkg":"application/octet-stream","bpk":"application/octet-stream","dump":"application/octet-stream","elc":"application/octet-stream","deploy":"application/octet-stream","oda":"application/oda","opf":"application/oebps-package+xml","ogx":"application/ogg","omdoc":"application/omdoc+xml","onetoc":"application/onenote","onetoc2":"application/onenote","onetmp":"application/onenote","onepkg":"application/onenote","oxps":"application/oxps","xer":"application/patch-ops-error+xml","pdf":"application/pdf","pgp":"application/pgp-encrypted","asc":"application/pgp-signature","sig":"application/pgp-signature","prf":"application/pics-rules","p10":"application/pkcs10","p7m":"application/pkcs7-mime","p7c":"application/pkcs7-mime","p7s":"application/pkcs7-signature","p8":"application/pkcs8","ac":"application/pkix-attr-cert","cer":"application/pkix-cert","crl":"application/pkix-crl","pkipath":"application/pkix-pkipath","pki":"application/pkixcmp","pls":"application/pls+xml","ai":"application/postscript","eps":"application/postscript","ps":"application/postscript","cww":"application/prs.cww","pskcxml":"application/pskc+xml","rdf":"application/rdf+xml","rif":"application/reginfo+xml","rnc":"application/relax-ng-compact-syntax","rl":"application/resource-lists+xml","rld":"application/resource-lists-diff+xml","rs":"application/rls-services+xml","gbr":"application/rpki-ghostbusters","mft":"application/rpki-manifest","roa":"application/rpki-roa","rsd":"application/rsd+xml","rss":"application/rss+xml","rtf":"application/rtf","sbml":"application/sbml+xml","scq":"application/scvp-cv-request","scs":"application/scvp-cv-response","spq":"application/scvp-vp-request","spp":"application/scvp-vp-response","sdp":"application/sdp","setpay":"application/set-payment-initiation","setreg":"application/set-registration-initiation","shf":"application/shf+xml","smi":"application/smil+xml","smil":"application/smil+xml","rq":"application/sparql-query","srx":"application/sparql-results+xml","gram":"application/srgs","grxml":"application/srgs+xml","sru":"application/sru+xml","ssdl":"application/ssdl+xml","ssml":"application/ssml+xml","tei":"application/tei+xml","teicorpus":"application/tei+xml","tfi":"application/thraud+xml","tsd":"application/timestamped-data","plb":"application/vnd.3gpp.pic-bw-large","psb":"application/vnd.3gpp.pic-bw-small","pvb":"application/vnd.3gpp.pic-bw-var","tcap":"application/vnd.3gpp2.tcap","pwn":"application/vnd.3m.post-it-notes","aso":"application/vnd.accpac.simply.aso","imp":"application/vnd.accpac.simply.imp","acu":"application/vnd.acucobol","atc":"application/vnd.acucorp","acutc":"application/vnd.acucorp","air":"application/vnd.adobe.air-application-installer-package+zip","fcdt":"application/vnd.adobe.formscentral.fcdt","fxp":"application/vnd.adobe.fxp","fxpl":"application/vnd.adobe.fxp","xdp":"application/vnd.adobe.xdp+xml","xfdf":"application/vnd.adobe.xfdf","ahead":"application/vnd.ahead.space","azf":"application/vnd.airzip.filesecure.azf","azs":"application/vnd.airzip.filesecure.azs","azw":"application/vnd.amazon.ebook","acc":"application/vnd.americandynamics.acc","ami":"application/vnd.amiga.ami","apk":"application/vnd.android.package-archive","cii":"application/vnd.anser-web-certificate-issue-initiation","fti":"application/vnd.anser-web-funds-transfer-initiation","atx":"application/vnd.antix.game-component","mpkg":"application/vnd.apple.installer+xml","m3u8":"application/vnd.apple.mpegurl","swi":"application/vnd.aristanetworks.swi","iota":"application/vnd.astraea-software.iota","aep":"application/vnd.audiograph","mpm":"application/vnd.blueice.multipass","bmi":"application/vnd.bmi","rep":"application/vnd.businessobjects","cdxml":"application/vnd.chemdraw+xml","mmd":"application/vnd.chipnuts.karaoke-mmd","cdy":"application/vnd.cinderella","cla":"application/vnd.claymore","rp9":"application/vnd.cloanto.rp9","c4g":"application/vnd.clonk.c4group","c4d":"application/vnd.clonk.c4group","c4f":"application/vnd.clonk.c4group","c4p":"application/vnd.clonk.c4group","c4u":"application/vnd.clonk.c4group","c11amc":"application/vnd.cluetrust.cartomobile-config","c11amz":"application/vnd.cluetrust.cartomobile-config-pkg","csp":"application/vnd.commonspace","cdbcmsg":"application/vnd.contact.cmsg","cmc":"application/vnd.cosmocaller","clkx":"application/vnd.crick.clicker","clkk":"application/vnd.crick.clicker.keyboard","clkp":"application/vnd.crick.clicker.palette","clkt":"application/vnd.crick.clicker.template","clkw":"application/vnd.crick.clicker.wordbank","wbs":"application/vnd.criticaltools.wbs+xml","pml":"application/vnd.ctc-posml","ppd":"application/vnd.cups-ppd","car":"application/vnd.curl.car","pcurl":"application/vnd.curl.pcurl","dart":"application/vnd.dart","rdz":"application/vnd.data-vision.rdz","uvf":"application/vnd.dece.data","uvvf":"application/vnd.dece.data","uvd":"application/vnd.dece.data","uvvd":"application/vnd.dece.data","uvt":"application/vnd.dece.ttml+xml","uvvt":"application/vnd.dece.ttml+xml","uvx":"application/vnd.dece.unspecified","uvvx":"application/vnd.dece.unspecified","uvz":"application/vnd.dece.zip","uvvz":"application/vnd.dece.zip","fe_launch":"application/vnd.denovo.fcselayout-link","dna":"application/vnd.dna","mlp":"application/vnd.dolby.mlp","dpg":"application/vnd.dpgraph","dfac":"application/vnd.dreamfactory","kpxx":"application/vnd.ds-keypoint","ait":"application/vnd.dvb.ait","svc":"application/vnd.dvb.service","geo":"application/vnd.dynageo","mag":"application/vnd.ecowin.chart","nml":"application/vnd.enliven","esf":"application/vnd.epson.esf","msf":"application/vnd.epson.msf","qam":"application/vnd.epson.quickanime","slt":"application/vnd.epson.salt","ssf":"application/vnd.epson.ssf","es3":"application/vnd.eszigno3+xml","et3":"application/vnd.eszigno3+xml","ez2":"application/vnd.ezpix-album","ez3":"application/vnd.ezpix-package","fdf":"application/vnd.fdf","mseed":"application/vnd.fdsn.mseed","seed":"application/vnd.fdsn.seed","dataless":"application/vnd.fdsn.seed","gph":"application/vnd.flographit","ftc":"application/vnd.fluxtime.clip","fm":"application/vnd.framemaker","frame":"application/vnd.framemaker","maker":"application/vnd.framemaker","book":"application/vnd.framemaker","fnc":"application/vnd.frogans.fnc","ltf":"application/vnd.frogans.ltf","fsc":"application/vnd.fsc.weblaunch","oas":"application/vnd.fujitsu.oasys","oa2":"application/vnd.fujitsu.oasys2","oa3":"application/vnd.fujitsu.oasys3","fg5":"application/vnd.fujitsu.oasysgp","bh2":"application/vnd.fujitsu.oasysprs","ddd":"application/vnd.fujixerox.ddd","xdw":"application/vnd.fujixerox.docuworks","xbd":"application/vnd.fujixerox.docuworks.binder","fzs":"application/vnd.fuzzysheet","txd":"application/vnd.genomatix.tuxedo","ggb":"application/vnd.geogebra.file","ggt":"application/vnd.geogebra.tool","gex":"application/vnd.geometry-explorer","gre":"application/vnd.geometry-explorer","gxt":"application/vnd.geonext","g2w":"application/vnd.geoplan","g3w":"application/vnd.geospace","gmx":"application/vnd.gmx","kml":"application/vnd.google-earth.kml+xml","kmz":"application/vnd.google-earth.kmz","gqf":"application/vnd.grafeq","gqs":"application/vnd.grafeq","gac":"application/vnd.groove-account","ghf":"application/vnd.groove-help","gim":"application/vnd.groove-identity-message","grv":"application/vnd.groove-injector","gtm":"application/vnd.groove-tool-message","tpl":"application/vnd.groove-tool-template","vcg":"application/vnd.groove-vcard","hal":"application/vnd.hal+xml","zmm":"application/vnd.handheld-entertainment+xml","hbci":"application/vnd.hbci","les":"application/vnd.hhe.lesson-player","hpgl":"application/vnd.hp-hpgl","hpid":"application/vnd.hp-hpid","hps":"application/vnd.hp-hps","jlt":"application/vnd.hp-jlyt","pcl":"application/vnd.hp-pcl","pclxl":"application/vnd.hp-pclxl","sfd-hdstx":"application/vnd.hydrostatix.sof-data","mpy":"application/vnd.ibm.minipay","afp":"application/vnd.ibm.modcap","listafp":"application/vnd.ibm.modcap","list3820":"application/vnd.ibm.modcap","irm":"application/vnd.ibm.rights-management","sc":"application/vnd.ibm.secure-container","icc":"application/vnd.iccprofile","icm":"application/vnd.iccprofile","igl":"application/vnd.igloader","ivp":"application/vnd.immervision-ivp","ivu":"application/vnd.immervision-ivu","igm":"application/vnd.insors.igm","xpw":"application/vnd.intercon.formnet","xpx":"application/vnd.intercon.formnet","i2g":"application/vnd.intergeo","qbo":"application/vnd.intu.qbo","qfx":"application/vnd.intu.qfx","rcprofile":"application/vnd.ipunplugged.rcprofile","irp":"application/vnd.irepository.package+xml","xpr":"application/vnd.is-xpr","fcs":"application/vnd.isac.fcs","jam":"application/vnd.jam","rms":"application/vnd.jcp.javame.midlet-rms","jisp":"application/vnd.jisp","joda":"application/vnd.joost.joda-archive","ktz":"application/vnd.kahootz","ktr":"application/vnd.kahootz","karbon":"application/vnd.kde.karbon","chrt":"application/vnd.kde.kchart","kfo":"application/vnd.kde.kformula","flw":"application/vnd.kde.kivio","kon":"application/vnd.kde.kontour","kpr":"application/vnd.kde.kpresenter","kpt":"application/vnd.kde.kpresenter","ksp":"application/vnd.kde.kspread","kwd":"application/vnd.kde.kword","kwt":"application/vnd.kde.kword","htke":"application/vnd.kenameaapp","kia":"application/vnd.kidspiration","kne":"application/vnd.kinar","knp":"application/vnd.kinar","skp":"application/vnd.koan","skd":"application/vnd.koan","skt":"application/vnd.koan","skm":"application/vnd.koan","sse":"application/vnd.kodak-descriptor","lasxml":"application/vnd.las.las+xml","lbd":"application/vnd.llamagraphics.life-balance.desktop","lbe":"application/vnd.llamagraphics.life-balance.exchange+xml","apr":"application/vnd.lotus-approach","pre":"application/vnd.lotus-freelance","nsf":"application/vnd.lotus-notes","org":"application/vnd.lotus-organizer","scm":"application/vnd.lotus-screencam","lwp":"application/vnd.lotus-wordpro","portpkg":"application/vnd.macports.portpkg","mcd":"application/vnd.mcd","mc1":"application/vnd.medcalcdata","cdkey":"application/vnd.mediastation.cdkey","mwf":"application/vnd.mfer","mfm":"application/vnd.mfmp","flo":"application/vnd.micrografx.flo","igx":"application/vnd.micrografx.igx","mif":"application/vnd.mif","daf":"application/vnd.mobius.daf","dis":"application/vnd.mobius.dis","mbk":"application/vnd.mobius.mbk","mqy":"application/vnd.mobius.mqy","msl":"application/vnd.mobius.msl","plc":"application/vnd.mobius.plc","txf":"application/vnd.mobius.txf","mpn":"application/vnd.mophun.application","mpc":"application/vnd.mophun.certificate","xul":"application/vnd.mozilla.xul+xml","cil":"application/vnd.ms-artgalry","cab":"application/vnd.ms-cab-compressed","xls":"application/vnd.ms-excel","xlm":"application/vnd.ms-excel","xla":"application/vnd.ms-excel","xlc":"application/vnd.ms-excel","xlt":"application/vnd.ms-excel","xlw":"application/vnd.ms-excel","xlam":"application/vnd.ms-excel.addin.macroenabled.12","xlsb":"application/vnd.ms-excel.sheet.binary.macroenabled.12","xlsm":"application/vnd.ms-excel.sheet.macroenabled.12","xltm":"application/vnd.ms-excel.template.macroenabled.12","eot":"application/vnd.ms-fontobject","chm":"application/vnd.ms-htmlhelp","ims":"application/vnd.ms-ims","lrm":"application/vnd.ms-lrm","thmx":"application/vnd.ms-officetheme","cat":"application/vnd.ms-pki.seccat","stl":"application/vnd.ms-pki.stl","ppt":"application/vnd.ms-powerpoint","pps":"application/vnd.ms-powerpoint","pot":"application/vnd.ms-powerpoint","ppam":"application/vnd.ms-powerpoint.addin.macroenabled.12","pptm":"application/vnd.ms-powerpoint.presentation.macroenabled.12","sldm":"application/vnd.ms-powerpoint.slide.macroenabled.12","ppsm":"application/vnd.ms-powerpoint.slideshow.macroenabled.12","potm":"application/vnd.ms-powerpoint.template.macroenabled.12","mpp":"application/vnd.ms-project","mpt":"application/vnd.ms-project","docm":"application/vnd.ms-word.document.macroenabled.12","dotm":"application/vnd.ms-word.template.macroenabled.12","wps":"application/vnd.ms-works","wks":"application/vnd.ms-works","wcm":"application/vnd.ms-works","wdb":"application/vnd.ms-works","wpl":"application/vnd.ms-wpl","xps":"application/vnd.ms-xpsdocument","mseq":"application/vnd.mseq","mus":"application/vnd.musician","msty":"application/vnd.muvee.style","taglet":"application/vnd.mynfc","nlu":"application/vnd.neurolanguage.nlu","ntf":"application/vnd.nitf","nitf":"application/vnd.nitf","nnd":"application/vnd.noblenet-directory","nns":"application/vnd.noblenet-sealer","nnw":"application/vnd.noblenet-web","ngdat":"application/vnd.nokia.n-gage.data","n-gage":"application/vnd.nokia.n-gage.symbian.install","rpst":"application/vnd.nokia.radio-preset","rpss":"application/vnd.nokia.radio-presets","edm":"application/vnd.novadigm.edm","edx":"application/vnd.novadigm.edx","ext":"application/vnd.novadigm.ext","odc":"application/vnd.oasis.opendocument.chart","otc":"application/vnd.oasis.opendocument.chart-template","odb":"application/vnd.oasis.opendocument.database","odf":"application/vnd.oasis.opendocument.formula","odft":"application/vnd.oasis.opendocument.formula-template","odg":"application/vnd.oasis.opendocument.graphics","otg":"application/vnd.oasis.opendocument.graphics-template","odi":"application/vnd.oasis.opendocument.image","oti":"application/vnd.oasis.opendocument.image-template","odp":"application/vnd.oasis.opendocument.presentation","otp":"application/vnd.oasis.opendocument.presentation-template","ods":"application/vnd.oasis.opendocument.spreadsheet","ots":"application/vnd.oasis.opendocument.spreadsheet-template","odt":"application/vnd.oasis.opendocument.text","odm":"application/vnd.oasis.opendocument.text-master","ott":"application/vnd.oasis.opendocument.text-template","oth":"application/vnd.oasis.opendocument.text-web","xo":"application/vnd.olpc-sugar","dd2":"application/vnd.oma.dd2+xml","oxt":"application/vnd.openofficeorg.extension","pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation","sldx":"application/vnd.openxmlformats-officedocument.presentationml.slide","ppsx":"application/vnd.openxmlformats-officedocument.presentationml.slideshow","potx":"application/vnd.openxmlformats-officedocument.presentationml.template","xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","xltx":"application/vnd.openxmlformats-officedocument.spreadsheetml.template","docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document","dotx":"application/vnd.openxmlformats-officedocument.wordprocessingml.template","mgp":"application/vnd.osgeo.mapguide.package","dp":"application/vnd.osgi.dp","esa":"application/vnd.osgi.subsystem","pdb":"application/vnd.palm","pqa":"application/vnd.palm","oprc":"application/vnd.palm","paw":"application/vnd.pawaafile","str":"application/vnd.pg.format","ei6":"application/vnd.pg.osasli","efif":"application/vnd.picsel","wg":"application/vnd.pmi.widget","plf":"application/vnd.pocketlearn","pbd":"application/vnd.powerbuilder6","box":"application/vnd.previewsystems.box","mgz":"application/vnd.proteus.magazine","qps":"application/vnd.publishare-delta-tree","ptid":"application/vnd.pvi.ptid1","qxd":"application/vnd.quark.quarkxpress","qxt":"application/vnd.quark.quarkxpress","qwd":"application/vnd.quark.quarkxpress","qwt":"application/vnd.quark.quarkxpress","qxl":"application/vnd.quark.quarkxpress","qxb":"application/vnd.quark.quarkxpress","bed":"application/vnd.realvnc.bed","mxl":"application/vnd.recordare.musicxml","musicxml":"application/vnd.recordare.musicxml+xml","cryptonote":"application/vnd.rig.cryptonote","cod":"application/vnd.rim.cod","rm":"application/vnd.rn-realmedia","rmvb":"application/vnd.rn-realmedia-vbr","link66":"application/vnd.route66.link66+xml","st":"application/vnd.sailingtracker.track","see":"application/vnd.seemail","sema":"application/vnd.sema","semd":"application/vnd.semd","semf":"application/vnd.semf","ifm":"application/vnd.shana.informed.formdata","itp":"application/vnd.shana.informed.formtemplate","iif":"application/vnd.shana.informed.interchange","ipk":"application/vnd.shana.informed.package","twd":"application/vnd.simtech-mindmapper","twds":"application/vnd.simtech-mindmapper","mmf":"application/vnd.smaf","teacher":"application/vnd.smart.teacher","sdkm":"application/vnd.solent.sdkm+xml","sdkd":"application/vnd.solent.sdkm+xml","dxp":"application/vnd.spotfire.dxp","sfs":"application/vnd.spotfire.sfs","sdc":"application/vnd.stardivision.calc","sda":"application/vnd.stardivision.draw","sdd":"application/vnd.stardivision.impress","smf":"application/vnd.stardivision.math","sdw":"application/vnd.stardivision.writer","vor":"application/vnd.stardivision.writer","sgl":"application/vnd.stardivision.writer-global","smzip":"application/vnd.stepmania.package","sm":"application/vnd.stepmania.stepchart","sxc":"application/vnd.sun.xml.calc","stc":"application/vnd.sun.xml.calc.template","sxd":"application/vnd.sun.xml.draw","std":"application/vnd.sun.xml.draw.template","sxi":"application/vnd.sun.xml.impress","sti":"application/vnd.sun.xml.impress.template","sxm":"application/vnd.sun.xml.math","sxw":"application/vnd.sun.xml.writer","sxg":"application/vnd.sun.xml.writer.global","stw":"application/vnd.sun.xml.writer.template","sus":"application/vnd.sus-calendar","susp":"application/vnd.sus-calendar","svd":"application/vnd.svd","sis":"application/vnd.symbian.install","sisx":"application/vnd.symbian.install","xsm":"application/vnd.syncml+xml","bdm":"application/vnd.syncml.dm+wbxml","xdm":"application/vnd.syncml.dm+xml","tao":"application/vnd.tao.intent-module-archive","pcap":"application/vnd.tcpdump.pcap","cap":"application/vnd.tcpdump.pcap","dmp":"application/vnd.tcpdump.pcap","tmo":"application/vnd.tmobile-livetv","tpt":"application/vnd.trid.tpt","mxs":"application/vnd.triscape.mxs","tra":"application/vnd.trueapp","ufd":"application/vnd.ufdl","ufdl":"application/vnd.ufdl","utz":"application/vnd.uiq.theme","umj":"application/vnd.umajin","unityweb":"application/vnd.unity","uoml":"application/vnd.uoml+xml","vcx":"application/vnd.vcx","vsd":"application/vnd.visio","vst":"application/vnd.visio","vss":"application/vnd.visio","vsw":"application/vnd.visio","vis":"application/vnd.visionary","vsf":"application/vnd.vsf","wbxml":"application/vnd.wap.wbxml","wmlc":"application/vnd.wap.wmlc","wmlsc":"application/vnd.wap.wmlscriptc","wtb":"application/vnd.webturbo","nbp":"application/vnd.wolfram.player","wpd":"application/vnd.wordperfect","wqd":"application/vnd.wqd","stf":"application/vnd.wt.stf","xar":"application/vnd.xara","xfdl":"application/vnd.xfdl","hvd":"application/vnd.yamaha.hv-dic","hvs":"application/vnd.yamaha.hv-script","hvp":"application/vnd.yamaha.hv-voice","osf":"application/vnd.yamaha.openscoreformat","osfpvg":"application/vnd.yamaha.openscoreformat.osfpvg+xml","saf":"application/vnd.yamaha.smaf-audio","spf":"application/vnd.yamaha.smaf-phrase","cmp":"application/vnd.yellowriver-custom-menu","zir":"application/vnd.zul","zirz":"application/vnd.zul","zaz":"application/vnd.zzazz.deck+xml","vxml":"application/voicexml+xml","wgt":"application/widget","hlp":"application/winhlp","wsdl":"application/wsdl+xml","wspolicy":"application/wspolicy+xml","7z":"application/x-7z-compressed","abw":"application/x-abiword","ace":"application/x-ace-compressed","dmg":"application/x-apple-diskimage","aab":"application/x-authorware-bin","x32":"application/x-authorware-bin","u32":"application/x-authorware-bin","vox":"application/x-authorware-bin","aam":"application/x-authorware-map","aas":"application/x-authorware-seg","bcpio":"application/x-bcpio","torrent":"application/x-bittorrent","blb":"application/x-blorb","blorb":"application/x-blorb","bz":"application/x-bzip","bz2":"application/x-bzip2","boz":"application/x-bzip2","cbr":"application/x-cbr","cba":"application/x-cbr","cbt":"application/x-cbr","cbz":"application/x-cbr","cb7":"application/x-cbr","vcd":"application/x-cdlink","cfs":"application/x-cfs-compressed","chat":"application/x-chat","pgn":"application/x-chess-pgn","nsc":"application/x-conference","cpio":"application/x-cpio","csh":"application/x-csh","deb":"application/x-debian-package","udeb":"application/x-debian-package","dgc":"application/x-dgc-compressed","dir":"application/x-director","dcr":"application/x-director","dxr":"application/x-director","cst":"application/x-director","cct":"application/x-director","cxt":"application/x-director","w3d":"application/x-director","fgd":"application/x-director","swa":"application/x-director","wad":"application/x-doom","ncx":"application/x-dtbncx+xml","dtb":"application/x-dtbook+xml","res":"application/x-dtbresource+xml","dvi":"application/x-dvi","evy":"application/x-envoy","eva":"application/x-eva","bdf":"application/x-font-bdf","gsf":"application/x-font-ghostscript","psf":"application/x-font-linux-psf","pcf":"application/x-font-pcf","snf":"application/x-font-snf","pfa":"application/x-font-type1","pfb":"application/x-font-type1","pfm":"application/x-font-type1","afm":"application/x-font-type1","arc":"application/x-freearc","spl":"application/x-futuresplash","gca":"application/x-gca-compressed","ulx":"application/x-glulx","gnumeric":"application/x-gnumeric","gramps":"application/x-gramps-xml","gtar":"application/x-gtar","hdf":"application/x-hdf","install":"application/x-install-instructions","iso":"application/x-iso9660-image","jnlp":"application/x-java-jnlp-file","latex":"application/x-latex","lzh":"application/x-lzh-compressed","lha":"application/x-lzh-compressed","mie":"application/x-mie","prc":"application/x-mobipocket-ebook","mobi":"application/x-mobipocket-ebook","application":"application/x-ms-application","lnk":"application/x-ms-shortcut","wmd":"application/x-ms-wmd","wmz":"application/x-ms-wmz","xbap":"application/x-ms-xbap","mdb":"application/x-msaccess","obd":"application/x-msbinder","crd":"application/x-mscardfile","clp":"application/x-msclip","exe":"application/x-msdownload","dll":"application/x-msdownload","com":"application/x-msdownload","bat":"application/x-msdownload","msi":"application/x-msdownload","mvb":"application/x-msmediaview","m13":"application/x-msmediaview","m14":"application/x-msmediaview","wmf":"application/x-msmetafile","emf":"application/x-msmetafile","emz":"application/x-msmetafile","mny":"application/x-msmoney","pub":"application/x-mspublisher","scd":"application/x-msschedule","trm":"application/x-msterminal","wri":"application/x-mswrite","nc":"application/x-netcdf","cdf":"application/x-netcdf","nzb":"application/x-nzb","p12":"application/x-pkcs12","pfx":"application/x-pkcs12","p7b":"application/x-pkcs7-certificates","spc":"application/x-pkcs7-certificates","p7r":"application/x-pkcs7-certreqresp","rar":"application/x-rar-compressed","ris":"application/x-research-info-systems","sh":"application/x-sh","shar":"application/x-shar","swf":"application/x-shockwave-flash","xap":"application/x-silverlight-app","sql":"application/x-sql","sit":"application/x-stuffit","sitx":"application/x-stuffitx","srt":"application/x-subrip","sv4cpio":"application/x-sv4cpio","sv4crc":"application/x-sv4crc","t3":"application/x-t3vm-image","gam":"application/x-tads","tar":"application/x-tar","tcl":"application/x-tcl","tex":"application/x-tex","tfm":"application/x-tex-tfm","texinfo":"application/x-texinfo","texi":"application/x-texinfo","obj":"application/x-tgif","ustar":"application/x-ustar","src":"application/x-wais-source","der":"application/x-x509-ca-cert","crt":"application/x-x509-ca-cert","fig":"application/x-xfig","xlf":"application/x-xliff+xml","xpi":"application/x-xpinstall","xz":"application/x-xz","z1":"application/x-zmachine","z2":"application/x-zmachine","z3":"application/x-zmachine","z4":"application/x-zmachine","z5":"application/x-zmachine","z6":"application/x-zmachine","z7":"application/x-zmachine","z8":"application/x-zmachine","xaml":"application/xaml+xml","xdf":"application/xcap-diff+xml","xenc":"application/xenc+xml","xhtml":"application/xhtml+xml","xht":"application/xhtml+xml","xml":"application/xml","xsl":"application/xml","dtd":"application/xml-dtd","xop":"application/xop+xml","xpl":"application/xproc+xml","xslt":"application/xslt+xml","xspf":"application/xspf+xml","mxml":"application/xv+xml","xhvml":"application/xv+xml","xvml":"application/xv+xml","xvm":"application/xv+xml","yang":"application/yang","yin":"application/yin+xml","zip":"application/zip","adp":"audio/adpcm","au":"audio/basic","snd":"audio/basic","mid":"audio/midi","midi":"audio/midi","kar":"audio/midi","rmi":"audio/midi","m4a":"audio/mp4","mp4a":"audio/mp4","mpga":"audio/mpeg","mp2":"audio/mpeg","mp2a":"audio/mpeg","mp3":"audio/mpeg","m2a":"audio/mpeg","m3a":"audio/mpeg","oga":"audio/ogg","ogg":"audio/ogg","spx":"audio/ogg","opus":"audio/ogg","s3m":"audio/s3m","sil":"audio/silk","uva":"audio/vnd.dece.audio","uvva":"audio/vnd.dece.audio","eol":"audio/vnd.digital-winds","dra":"audio/vnd.dra","dts":"audio/vnd.dts","dtshd":"audio/vnd.dts.hd","lvp":"audio/vnd.lucent.voice","pya":"audio/vnd.ms-playready.media.pya","ecelp4800":"audio/vnd.nuera.ecelp4800","ecelp7470":"audio/vnd.nuera.ecelp7470","ecelp9600":"audio/vnd.nuera.ecelp9600","rip":"audio/vnd.rip","weba":"audio/webm","aac":"audio/x-aac","aif":"audio/x-aiff","aiff":"audio/x-aiff","aifc":"audio/x-aiff","caf":"audio/x-caf","flac":"audio/x-flac","mka":"audio/x-matroska","m3u":"audio/x-mpegurl","wax":"audio/x-ms-wax","wma":"audio/x-ms-wma","ram":"audio/x-pn-realaudio","ra":"audio/x-pn-realaudio","rmp":"audio/x-pn-realaudio-plugin","wav":"audio/x-wav","xm":"audio/xm","cdx":"chemical/x-cdx","cif":"chemical/x-cif","cmdf":"chemical/x-cmdf","cml":"chemical/x-cml","csml":"chemical/x-csml","xyz":"chemical/x-xyz","ttc":"font/collection","otf":"font/otf","ttf":"font/ttf","woff":"font/woff","woff2":"font/woff2","bmp":"image/bmp","cgm":"image/cgm","g3":"image/g3fax","gif":"image/gif","ief":"image/ief","jpeg":"image/jpeg","jpg":"image/jpeg","jpe":"image/jpeg","ktx":"image/ktx","png":"image/png","btif":"image/prs.btif","sgi":"image/sgi","svg":"image/svg+xml","svgz":"image/svg+xml","tiff":"image/tiff","tif":"image/tiff","psd":"image/vnd.adobe.photoshop","uvi":"image/vnd.dece.graphic","uvvi":"image/vnd.dece.graphic","uvg":"image/vnd.dece.graphic","uvvg":"image/vnd.dece.graphic","djvu":"image/vnd.djvu","djv":"image/vnd.djvu","sub":"image/vnd.dvb.subtitle","dwg":"image/vnd.dwg","dxf":"image/vnd.dxf","fbs":"image/vnd.fastbidsheet","fpx":"image/vnd.fpx","fst":"image/vnd.fst","mmr":"image/vnd.fujixerox.edmics-mmr","rlc":"image/vnd.fujixerox.edmics-rlc","mdi":"image/vnd.ms-modi","wdp":"image/vnd.ms-photo","npx":"image/vnd.net-fpx","wbmp":"image/vnd.wap.wbmp","xif":"image/vnd.xiff","webp":"image/webp","3ds":"image/x-3ds","ras":"image/x-cmu-raster","cmx":"image/x-cmx","fh":"image/x-freehand","fhc":"image/x-freehand","fh4":"image/x-freehand","fh5":"image/x-freehand","fh7":"image/x-freehand","ico":"image/x-icon","sid":"image/x-mrsid-image","pcx":"image/x-pcx","pic":"image/x-pict","pct":"image/x-pict","pnm":"image/x-portable-anymap","pbm":"image/x-portable-bitmap","pgm":"image/x-portable-graymap","ppm":"image/x-portable-pixmap","rgb":"image/x-rgb","tga":"image/x-tga","xbm":"image/x-xbitmap","xpm":"image/x-xpixmap","xwd":"image/x-xwindowdump","eml":"message/rfc822","mime":"message/rfc822","igs":"model/iges","iges":"model/iges","msh":"model/mesh","mesh":"model/mesh","silo":"model/mesh","dae":"model/vnd.collada+xml","dwf":"model/vnd.dwf","gdl":"model/vnd.gdl","gtw":"model/vnd.gtw","mts":"model/vnd.mts","vtu":"model/vnd.vtu","wrl":"model/vrml","vrml":"model/vrml","x3db":"model/x3d+binary","x3dbz":"model/x3d+binary","x3dv":"model/x3d+vrml","x3dvz":"model/x3d+vrml","x3d":"model/x3d+xml","x3dz":"model/x3d+xml","appcache":"text/cache-manifest","ics":"text/calendar","ifb":"text/calendar","css":"text/css","csv":"text/csv","html":"text/html","htm":"text/html","js":"text/javascript","mjs":"text/javascript","n3":"text/n3","txt":"text/plain","text":"text/plain","conf":"text/plain","def":"text/plain","list":"text/plain","log":"text/plain","in":"text/plain","dsc":"text/prs.lines.tag","rtx":"text/richtext","sgml":"text/sgml","sgm":"text/sgml","tsv":"text/tab-separated-values","t":"text/troff","tr":"text/troff","roff":"text/troff","man":"text/troff","me":"text/troff","ms":"text/troff","ttl":"text/turtle","uri":"text/uri-list","uris":"text/uri-list","urls":"text/uri-list","vcard":"text/vcard","curl":"text/vnd.curl","dcurl":"text/vnd.curl.dcurl","mcurl":"text/vnd.curl.mcurl","scurl":"text/vnd.curl.scurl","fly":"text/vnd.fly","flx":"text/vnd.fmi.flexstor","gv":"text/vnd.graphviz","3dml":"text/vnd.in3d.3dml","spot":"text/vnd.in3d.spot","jad":"text/vnd.sun.j2me.app-descriptor","wml":"text/vnd.wap.wml","wmls":"text/vnd.wap.wmlscript","s":"text/x-asm","asm":"text/x-asm","c":"text/x-c","cc":"text/x-c","cxx":"text/x-c","cpp":"text/x-c","h":"text/x-c","hh":"text/x-c","dic":"text/x-c","f":"text/x-fortran","for":"text/x-fortran","f77":"text/x-fortran","f90":"text/x-fortran","java":"text/x-java-source","nfo":"text/x-nfo","opml":"text/x-opml","p":"text/x-pascal","pas":"text/x-pascal","etx":"text/x-setext","sfv":"text/x-sfv","uu":"text/x-uuencode","vcs":"text/x-vcalendar","vcf":"text/x-vcard","3gp":"video/3gpp","3g2":"video/3gpp2","h261":"video/h261","h263":"video/h263","h264":"video/h264","jpgv":"video/jpeg","jpm":"video/jpm","jpgm":"video/jpm","mj2":"video/mj2","mjp2":"video/mj2","mp4":"video/mp4","mp4v":"video/mp4","mpg4":"video/mp4","mpeg":"video/mpeg","mpg":"video/mpeg","mpe":"video/mpeg","m1v":"video/mpeg","m2v":"video/mpeg","ogv":"video/ogg","qt":"video/quicktime","mov":"video/quicktime","uvh":"video/vnd.dece.hd","uvvh":"video/vnd.dece.hd","uvm":"video/vnd.dece.mobile","uvvm":"video/vnd.dece.mobile","uvp":"video/vnd.dece.pd","uvvp":"video/vnd.dece.pd","uvs":"video/vnd.dece.sd","uvvs":"video/vnd.dece.sd","uvv":"video/vnd.dece.video","uvvv":"video/vnd.dece.video","dvb":"video/vnd.dvb.file","fvt":"video/vnd.fvt","mxu":"video/vnd.mpegurl","m4u":"video/vnd.mpegurl","pyv":"video/vnd.ms-playready.media.pyv","uvu":"video/vnd.uvvu.mp4","uvvu":"video/vnd.uvvu.mp4","viv":"video/vnd.vivo","webm":"video/webm","f4v":"video/x-f4v","fli":"video/x-fli","flv":"video/x-flv","m4v":"video/x-m4v","mkv":"video/x-matroska","mk3d":"video/x-matroska","mks":"video/x-matroska","mng":"video/x-mng","asf":"video/x-ms-asf","asx":"video/x-ms-asf","vob":"video/x-ms-vob","wm":"video/x-ms-wm","wmv":"video/x-ms-wmv","wmx":"video/x-ms-wmx","wvx":"video/x-ms-wvx","avi":"video/x-msvideo","movie":"video/x-sgi-movie","smv":"video/x-smv","ice":"x-conference/x-cooltalk"}')}},e={},function n(i){var r=e[i];if(void 0!==r)return r.exports;var o=e[i]={exports:{}};return t[i].call(o.exports,o,o.exports,n),o.exports}(8713);var t,e}));
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEdBQWEvUyxFQUFLK1csVUFBVWhFLEVBQUksRUFBR0EsRUFBSSxHQUFNQSxHQUFNN25CLEVBQU0sRUFBSzhVLEVBQUsrVyxVQUFVaEUsRUFBSSxFQUFHQSxFQUFJLEdBQUssR0FDdkksZUFBZXZTLEtBQUtQLEtBQVFBLEVBQVEsSUFDcEIsSUFBakJBLEVBQU0xVSxRQUNUOHNDLEVBQU81bUMsT0FBT3VDLGFBQWEzQixTQUFTNE4sRUFBTyxLQUMzQzhTLEdBQUssR0FFb0IsSUFBakI5UyxFQUFNMVUsU0FDZDhzQyxFQUFPNW1DLE9BQU91QyxhQUFhM0IsU0FBUyxLQUFPNE4sRUFBTyxLQUNsRDhTLEdBQUssR0FHUHBrQixHQUFVMHBDLEVBQ1Z0bEIsR0FBSyxFQUVOLE9BQU9wa0IsQ0FBTSxFQVNELEVBQUE2cEMsWUFBZTNxQyxJQUF1QixJQUFBMHFDLFdBQVU3RixvQkFBbUIsSUFBQXhjLE1BQUtyb0IsS0FReEUsRUFBQTRxQyxZQUFlNXFDLEdBQXVCdzZCLG9CQUFtQixJQUFBK1AsU0FBUXZxQyw0Z0JDekU5RSxhQUNBLGFBQ0EsYUFDQSxZQUNBLGFBQ0EsYUFDQSxhQUNBLGFBQ0EsYUFDQSxhQUNBLGFBQ0EsYUFDQSxXQUNBLGFBQ0EsYUFDQSxzNy9CQ2RJNnFDLEVBQTJCLENBQUMsRUFHaEMsU0FBU0MsRUFBb0JDLEdBRTVCLElBQUlDLEVBQWVILEVBQXlCRSxHQUM1QyxRQUFxQnZwQyxJQUFqQndwQyxFQUNILE9BQU9BLEVBQWE3dUMsUUFHckIsSUFBSUMsRUFBU3l1QyxFQUF5QkUsR0FBWSxDQUdqRDV1QyxRQUFTLENBQUMsR0FPWCxPQUhBOHVDLEVBQW9CRixHQUFVeG5DLEtBQUtuSCxFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTMnVDLEdBR3BFMXVDLEVBQU9ELE9BQ2YsQ0NuQjBCMnVDLENBQW9CLFlERjFDRCIsInNvdXJjZXMiOlsid2VicGFjazovL3h1dGlscy93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly94dXRpbHMvLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwid2VicGFjazovL3h1dGlscy8uL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi8zcmQtcGFydHkvX0J1ZmZlci50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvM3JkLXBhcnR5L2luZGV4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9BbHBoYU51bS9fQWxwaGFOdW0udHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0FscGhhTnVtL2luZGV4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9BbmltYXRlL19hbmltYXRlLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9BbmltYXRlL19wb2x5ZmlsbC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvQW5pbWF0ZS9lYXNpbmdzL19lYXNpbmdfZnVuY3Rpb25zLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9BbmltYXRlL2Vhc2luZ3MvX2Vhc2luZ3MudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0FuaW1hdGUvZWFzaW5ncy9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvQW5pbWF0ZS9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvRWxhcHNlZFRpbWUvX0VsYXBzZWRUaW1lLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9FbGFwc2VkVGltZS9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvRXZlbnRFbWl0dGVyL19FdmVudEVtaXR0ZXIudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0V2ZW50RW1pdHRlci9fRXZlbnRzLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9FdmVudEVtaXR0ZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0V4Y2VwdGlvbi9fRXhjZXB0aW9uLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9FeGNlcHRpb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL1Rhc2tzL19UYXNrLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9UYXNrcy9fVGFza3MudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL1Rhc2tzL2luZGV4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9UZXJtL19UZXJtLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9UZXJtL2luZGV4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9maWxlL19taW1lLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9maWxlL19wYXRoLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9maWxlL2luZGV4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdHlwZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19iYXRjaC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX2Nsb25lLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fY2xvbmVEZWVwLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fY29tcGFyZS50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX2NvbXBhcmVTaGFsbG93LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fZGF0ZXRpbWUudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19kZWJvdWNlZC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX2hlbGxvLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fanNvbi50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX251bWJlci50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX29iamVjdHMudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19wcm9taXNlLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fcXVldWUudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19yYzQudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19zdHJpbmcudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL191dGY4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8veHV0aWxzL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJ4dXRpbHNcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wieHV0aWxzXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgKCkgPT4ge1xucmV0dXJuICIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbmNvbnN0IGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbmNvbnN0IGN1c3RvbUluc3BlY3RTeW1ib2wgPVxuICAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sWydmb3InXSA9PT0gJ2Z1bmN0aW9uJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA/IFN5bWJvbFsnZm9yJ10oJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA6IG51bGxcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG5jb25zdCBLX01BWF9MRU5HVEggPSAweDdmZmZmZmZmXG5leHBvcnRzLmtNYXhMZW5ndGggPSBLX01BWF9MRU5HVEhcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgUHJpbnQgd2FybmluZyBhbmQgcmVjb21tZW5kIHVzaW5nIGBidWZmZXJgIHY0Lnggd2hpY2ggaGFzIGFuIE9iamVjdFxuICogICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogV2UgcmVwb3J0IHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0eXBlZCBhcnJheXMgaWYgdGhlIGFyZSBub3Qgc3ViY2xhc3NhYmxlXG4gKiB1c2luZyBfX3Byb3RvX18uIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgXG4gKiAoU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzgpLiBJRSAxMCBsYWNrcyBzdXBwb3J0XG4gKiBmb3IgX19wcm90b19fIGFuZCBoYXMgYSBidWdneSB0eXBlZCBhcnJheSBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbmlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICAnVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5ICcgK1xuICAgICdgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LidcbiAgKVxufVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIC8vIENhbiB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZD9cbiAgdHJ5IHtcbiAgICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGNvbnN0IHByb3RvID0geyBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH0gfVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgVWludDhBcnJheS5wcm90b3R5cGUpXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFyciwgcHJvdG8pXG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDJcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAncGFyZW50Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ1ZmZlclxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ29mZnNldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAobGVuZ3RoKSB7XG4gIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIGxlbmd0aCArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyLnByb3RvdHlwZSlcbiAgcmV0dXJuIGJ1ZlxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcidcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKGFyZylcbiAgfVxuICByZXR1cm4gZnJvbShhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbmZ1bmN0aW9uIGZyb20gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheVZpZXcodmFsdWUpXG4gIH1cblxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgICAnb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdmFsdWUpXG4gICAgKVxuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2UodmFsdWUsIEFycmF5QnVmZmVyKSB8fFxuICAgICAgKHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBBcnJheUJ1ZmZlcikpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIChpc0luc3RhbmNlKHZhbHVlLCBTaGFyZWRBcnJheUJ1ZmZlcikgfHxcbiAgICAgICh2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgU2hhcmVkQXJyYXlCdWZmZXIpKSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgKVxuICB9XG5cbiAgY29uc3QgdmFsdWVPZiA9IHZhbHVlLnZhbHVlT2YgJiYgdmFsdWUudmFsdWVPZigpXG4gIGlmICh2YWx1ZU9mICE9IG51bGwgJiYgdmFsdWVPZiAhPT0gdmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWVPZiwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgY29uc3QgYiA9IGZyb21PYmplY3QodmFsdWUpXG4gIGlmIChiKSByZXR1cm4gYlxuXG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgnc3RyaW5nJyksIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICdvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB2YWx1ZSlcbiAgKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIE5vdGU6IENoYW5nZSBwcm90b3R5cGUgKmFmdGVyKiBCdWZmZXIuZnJvbSBpcyBkZWZpbmVkIHRvIHdvcmthcm91bmQgQ2hyb21lIGJ1Zzpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvMTQ4XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyLnByb3RvdHlwZSwgVWludDhBcnJheS5wcm90b3R5cGUpXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyLCBVaW50OEFycmF5KVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgc2l6ZSArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAoc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gIH1cblxuICBjb25zdCBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICBsZXQgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcblxuICBjb25zdCBhY3R1YWwgPSBidWYud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIGJ1ZiA9IGJ1Zi5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKGFycmF5KSB7XG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICBjb25zdCBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheVZpZXcgKGFycmF5Vmlldykge1xuICBpZiAoaXNJbnN0YW5jZShhcnJheVZpZXcsIFVpbnQ4QXJyYXkpKSB7XG4gICAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGFycmF5VmlldylcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKGNvcHkuYnVmZmVyLCBjb3B5LmJ5dGVPZmZzZXQsIGNvcHkuYnl0ZUxlbmd0aClcbiAgfVxuICByZXR1cm4gZnJvbUFycmF5TGlrZShhcnJheVZpZXcpXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJvZmZzZXRcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcImxlbmd0aFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBsZXQgYnVmXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXIucHJvdG90eXBlKVxuXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAob2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIGNvbnN0IGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgY29uc3QgYnVmID0gY3JlYXRlQnVmZmVyKGxlbilcblxuICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmXG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoMClcbiAgICB9XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKVxuICB9XG5cbiAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJlxuICAgIGIgIT09IEJ1ZmZlci5wcm90b3R5cGUgLy8gc28gQnVmZmVyLmlzQnVmZmVyKEJ1ZmZlci5wcm90b3R5cGUpIHdpbGwgYmUgZmFsc2Vcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmIChpc0luc3RhbmNlKGEsIFVpbnQ4QXJyYXkpKSBhID0gQnVmZmVyLmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aClcbiAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpIGIgPSBCdWZmZXIuZnJvbShiLCBiLm9mZnNldCwgYi5ieXRlTGVuZ3RoKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJidWYxXCIsIFwiYnVmMlwiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5J1xuICAgIClcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIGxldCB4ID0gYS5sZW5ndGhcbiAgbGV0IHkgPSBiLmxlbmd0aFxuXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgbGV0IGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICBsZXQgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGxldCBidWYgPSBsaXN0W2ldXG4gICAgaWYgKGlzSW5zdGFuY2UoYnVmLCBVaW50OEFycmF5KSkge1xuICAgICAgaWYgKHBvcyArIGJ1Zi5sZW5ndGggPiBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIGJ1ZiA9IEJ1ZmZlci5mcm9tKGJ1ZilcbiAgICAgICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgYnVmLFxuICAgICAgICAgIHBvc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIH1cbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBpc0luc3RhbmNlKHN0cmluZywgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHN0cmluZ1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgY29uc3QgbXVzdE1hdGNoID0gKGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSA9PT0gdHJ1ZSlcbiAgaWYgKCFtdXN0TWF0Y2ggJiYgbGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICBsZXQgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB7XG4gICAgICAgICAgcmV0dXJuIG11c3RNYXRjaCA/IC0xIDogdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgfVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJjaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCAoYW5kIHRoZSBgaXMtYnVmZmVyYCBucG0gcGFja2FnZSlcbi8vIHRvIGRldGVjdCBhIEJ1ZmZlciBpbnN0YW5jZS4gSXQncyBub3QgcG9zc2libGUgdG8gdXNlIGBpbnN0YW5jZW9mIEJ1ZmZlcmBcbi8vIHJlbGlhYmx5IGluIGEgYnJvd3NlcmlmeSBjb250ZXh0IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgZGlmZmVyZW50XG4vLyBjb3BpZXMgb2YgdGhlICdidWZmZXInIHBhY2thZ2UgaW4gdXNlLiBUaGlzIG1ldGhvZCB3b3JrcyBldmVuIGZvciBCdWZmZXJcbi8vIGluc3RhbmNlcyB0aGF0IHdlcmUgY3JlYXRlZCBmcm9tIGFub3RoZXIgY29weSBvZiB0aGUgYGJ1ZmZlcmAgcGFja2FnZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE1NFxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgY29uc3QgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgPSBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nXG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgbGV0IHN0ciA9ICcnXG4gIGNvbnN0IG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5yZXBsYWNlKC8oLnsyfSkvZywgJyQxICcpLnRyaW0oKVxuICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5pZiAoY3VzdG9tSW5zcGVjdFN5bWJvbCkge1xuICBCdWZmZXIucHJvdG90eXBlW2N1c3RvbUluc3BlY3RTeW1ib2xdID0gQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmIChpc0luc3RhbmNlKHRhcmdldCwgVWludDhBcnJheSkpIHtcbiAgICB0YXJnZXQgPSBCdWZmZXIuZnJvbSh0YXJnZXQsIHRhcmdldC5vZmZzZXQsIHRhcmdldC5ieXRlTGVuZ3RoKVxuICB9XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInRhcmdldFwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuICcgK1xuICAgICAgJ1JlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdGFyZ2V0KVxuICAgIClcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIGxldCB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICBsZXQgeSA9IGVuZCAtIHN0YXJ0XG4gIGNvbnN0IGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgY29uc3QgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgY29uc3QgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKG51bWJlcklzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgW3ZhbF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIGxldCBpbmRleFNpemUgPSAxXG4gIGxldCBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIGxldCB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIGxldCBpXG4gIGlmIChkaXIpIHtcbiAgICBsZXQgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIGNvbnN0IHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBsZXQgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICBjb25zdCByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIGxldCBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgY29uc3QgcmVzID0gW11cblxuICBsZXQgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgY29uc3QgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgbGV0IGNvZGVQb2ludCA9IG51bGxcbiAgICBsZXQgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKVxuICAgICAgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKVxuICAgICAgICAgID8gM1xuICAgICAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpXG4gICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIGxldCBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbmNvbnN0IE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICBjb25zdCBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIGxldCByZXMgPSAnJ1xuICBsZXQgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGxldCByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGNvbnN0IGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICBsZXQgb3V0ID0gJydcbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gaGV4U2xpY2VMb29rdXBUYWJsZVtidWZbaV1dXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBjb25zdCBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICBsZXQgcmVzID0gJydcbiAgLy8gSWYgYnl0ZXMubGVuZ3RoIGlzIG9kZCwgdGhlIGxhc3QgOCBiaXRzIG11c3QgYmUgaWdub3JlZCAoc2FtZSBhcyBub2RlLmpzKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgKGJ5dGVzW2kgKyAxXSAqIDI1NikpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICBjb25zdCBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZXdCdWYsIEJ1ZmZlci5wcm90b3R5cGUpXG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0XVxuICBsZXQgbXVsID0gMVxuICBsZXQgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50QkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICBsZXQgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIGxldCBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDE2TEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyQkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnVUludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ1VJbnQ2NExFIChvZmZzZXQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgJ29mZnNldCcpXG4gIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdXG4gIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddXG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA4KVxuICB9XG5cbiAgY29uc3QgbG8gPSBmaXJzdCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDI0XG5cbiAgY29uc3QgaGkgPSB0aGlzWysrb2Zmc2V0XSArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgbGFzdCAqIDIgKiogMjRcblxuICByZXR1cm4gQmlnSW50KGxvKSArIChCaWdJbnQoaGkpIDw8IEJpZ0ludCgzMikpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnVUludDY0QkUgKG9mZnNldCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0JylcbiAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF1cbiAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN11cbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpXG4gIH1cblxuICBjb25zdCBoaSA9IGZpcnN0ICogMiAqKiAyNCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgdGhpc1srK29mZnNldF1cblxuICBjb25zdCBsbyA9IHRoaXNbKytvZmZzZXRdICogMiAqKiAyNCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgbGFzdFxuXG4gIHJldHVybiAoQmlnSW50KGhpKSA8PCBCaWdJbnQoMzIpKSArIEJpZ0ludChsbylcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIGxldCB2YWwgPSB0aGlzW29mZnNldF1cbiAgbGV0IG11bCA9IDFcbiAgbGV0IGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICBsZXQgaSA9IGJ5dGVMZW5ndGhcbiAgbGV0IG11bCA9IDFcbiAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICBjb25zdCB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnSW50NjRMRSAob2Zmc2V0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICdvZmZzZXQnKVxuICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XVxuICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyA3XVxuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOClcbiAgfVxuXG4gIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgNF0gK1xuICAgIHRoaXNbb2Zmc2V0ICsgNV0gKiAyICoqIDggK1xuICAgIHRoaXNbb2Zmc2V0ICsgNl0gKiAyICoqIDE2ICtcbiAgICAobGFzdCA8PCAyNCkgLy8gT3ZlcmZsb3dcblxuICByZXR1cm4gKEJpZ0ludCh2YWwpIDw8IEJpZ0ludCgzMikpICtcbiAgICBCaWdJbnQoZmlyc3QgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAyNClcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEJpZ0ludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ0ludDY0QkUgKG9mZnNldCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0JylcbiAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF1cbiAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN11cbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpXG4gIH1cblxuICBjb25zdCB2YWwgPSAoZmlyc3QgPDwgMjQpICsgLy8gT3ZlcmZsb3dcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICB0aGlzWysrb2Zmc2V0XVxuXG4gIHJldHVybiAoQmlnSW50KHZhbCkgPDwgQmlnSW50KDMyKSkgK1xuICAgIEJpZ0ludCh0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIGxhc3QpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnRMRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY29uc3QgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICBsZXQgbXVsID0gMVxuICBsZXQgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludEJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjb25zdCBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIGxldCBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgbGV0IG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50OCA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQxNkxFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDMyTEUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIHdydEJpZ1VJbnQ2NExFIChidWYsIHZhbHVlLCBvZmZzZXQsIG1pbiwgbWF4KSB7XG4gIGNoZWNrSW50QkkodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgNylcblxuICBsZXQgbG8gPSBOdW1iZXIodmFsdWUgJiBCaWdJbnQoMHhmZmZmZmZmZikpXG4gIGJ1ZltvZmZzZXQrK10gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0KytdID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBsb1xuICBsZXQgaGkgPSBOdW1iZXIodmFsdWUgPj4gQmlnSW50KDMyKSAmIEJpZ0ludCgweGZmZmZmZmZmKSlcbiAgYnVmW29mZnNldCsrXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0KytdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGhpXG4gIHJldHVybiBvZmZzZXRcbn1cblxuZnVuY3Rpb24gd3J0QmlnVUludDY0QkUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHtcbiAgY2hlY2tJbnRCSSh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCA3KVxuXG4gIGxldCBsbyA9IE51bWJlcih2YWx1ZSAmIEJpZ0ludCgweGZmZmZmZmZmKSlcbiAgYnVmW29mZnNldCArIDddID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQgKyA2XSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0ICsgNV0gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCArIDRdID0gbG9cbiAgbGV0IGhpID0gTnVtYmVyKHZhbHVlID4+IEJpZ0ludCgzMikgJiBCaWdJbnQoMHhmZmZmZmZmZikpXG4gIGJ1ZltvZmZzZXQgKyAzXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0ICsgMl0gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldCArIDFdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXRdID0gaGlcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHdyaXRlQmlnVUludDY0TEUgKHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gIHJldHVybiB3cnRCaWdVSW50NjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBCaWdJbnQoMCksIEJpZ0ludCgnMHhmZmZmZmZmZmZmZmZmZmZmJykpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnVUludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRCRSAodmFsdWUsIG9mZnNldCA9IDApIHtcbiAgcmV0dXJuIHdydEJpZ1VJbnQ2NEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIEJpZ0ludCgwKSwgQmlnSW50KCcweGZmZmZmZmZmZmZmZmZmZmYnKSlcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY29uc3QgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgbGV0IGkgPSAwXG4gIGxldCBtdWwgPSAxXG4gIGxldCBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY29uc3QgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgbGV0IGkgPSBieXRlTGVuZ3RoIC0gMVxuICBsZXQgbXVsID0gMVxuICBsZXQgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdJbnQ2NExFICh2YWx1ZSwgb2Zmc2V0ID0gMCkge1xuICByZXR1cm4gd3J0QmlnVUludDY0TEUodGhpcywgdmFsdWUsIG9mZnNldCwgLUJpZ0ludCgnMHg4MDAwMDAwMDAwMDAwMDAwJyksIEJpZ0ludCgnMHg3ZmZmZmZmZmZmZmZmZmZmJykpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ0ludDY0QkUgKHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gIHJldHVybiB3cnRCaWdVSW50NjRCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtQmlnSW50KCcweDgwMDAwMDAwMDAwMDAwMDAnKSwgQmlnSW50KCcweDdmZmZmZmZmZmZmZmZmZmYnKSlcbn0pXG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlcicpXG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICBjb25zdCBsZW4gPSBlbmQgLSBzdGFydFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBVc2UgYnVpbHQtaW4gd2hlbiBhdmFpbGFibGUsIG1pc3NpbmcgZnJvbSBJRTExXG4gICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKChlbmNvZGluZyA9PT0gJ3V0ZjgnICYmIGNvZGUgPCAxMjgpIHx8XG4gICAgICAgICAgZW5jb2RpbmcgPT09ICdsYXRpbjEnKSB7XG4gICAgICAgIC8vIEZhc3QgcGF0aDogSWYgYHZhbGAgZml0cyBpbnRvIGEgc2luZ2xlIGJ5dGUsIHVzZSB0aGF0IG51bWVyaWMgdmFsdWUuXG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHtcbiAgICB2YWwgPSBOdW1iZXIodmFsKVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIGxldCBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgICBjb25zdCBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInICsgdmFsICtcbiAgICAgICAgJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpXG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIENVU1RPTSBFUlJPUlNcbi8vID09PT09PT09PT09PT1cblxuLy8gU2ltcGxpZmllZCB2ZXJzaW9ucyBmcm9tIE5vZGUsIGNoYW5nZWQgZm9yIEJ1ZmZlci1vbmx5IHVzYWdlXG5jb25zdCBlcnJvcnMgPSB7fVxuZnVuY3Rpb24gRSAoc3ltLCBnZXRNZXNzYWdlLCBCYXNlKSB7XG4gIGVycm9yc1tzeW1dID0gY2xhc3MgTm9kZUVycm9yIGV4dGVuZHMgQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgc3VwZXIoKVxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ21lc3NhZ2UnLCB7XG4gICAgICAgIHZhbHVlOiBnZXRNZXNzYWdlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pXG5cbiAgICAgIC8vIEFkZCB0aGUgZXJyb3IgY29kZSB0byB0aGUgbmFtZSB0byBpbmNsdWRlIGl0IGluIHRoZSBzdGFjayB0cmFjZS5cbiAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZX0gWyR7c3ltfV1gXG4gICAgICAvLyBBY2Nlc3MgdGhlIHN0YWNrIHRvIGdlbmVyYXRlIHRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGluZyB0aGUgZXJyb3IgY29kZVxuICAgICAgLy8gZnJvbSB0aGUgbmFtZS5cbiAgICAgIHRoaXMuc3RhY2sgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgIC8vIFJlc2V0IHRoZSBuYW1lIHRvIHRoZSBhY3R1YWwgbmFtZS5cbiAgICAgIGRlbGV0ZSB0aGlzLm5hbWVcbiAgICB9XG5cbiAgICBnZXQgY29kZSAoKSB7XG4gICAgICByZXR1cm4gc3ltXG4gICAgfVxuXG4gICAgc2V0IGNvZGUgKHZhbHVlKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2NvZGUnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRvU3RyaW5nICgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IFske3N5bX1dOiAke3RoaXMubWVzc2FnZX1gXG4gICAgfVxuICB9XG59XG5cbkUoJ0VSUl9CVUZGRVJfT1VUX09GX0JPVU5EUycsXG4gIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiBgJHtuYW1lfSBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgXG4gICAgfVxuXG4gICAgcmV0dXJuICdBdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91bmRzJ1xuICB9LCBSYW5nZUVycm9yKVxuRSgnRVJSX0lOVkFMSURfQVJHX1RZUEUnLFxuICBmdW5jdGlvbiAobmFtZSwgYWN0dWFsKSB7XG4gICAgcmV0dXJuIGBUaGUgXCIke25hbWV9XCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBhY3R1YWx9YFxuICB9LCBUeXBlRXJyb3IpXG5FKCdFUlJfT1VUX09GX1JBTkdFJyxcbiAgZnVuY3Rpb24gKHN0ciwgcmFuZ2UsIGlucHV0KSB7XG4gICAgbGV0IG1zZyA9IGBUaGUgdmFsdWUgb2YgXCIke3N0cn1cIiBpcyBvdXQgb2YgcmFuZ2UuYFxuICAgIGxldCByZWNlaXZlZCA9IGlucHV0XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW5wdXQpICYmIE1hdGguYWJzKGlucHV0KSA+IDIgKiogMzIpIHtcbiAgICAgIHJlY2VpdmVkID0gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKFN0cmluZyhpbnB1dCkpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdiaWdpbnQnKSB7XG4gICAgICByZWNlaXZlZCA9IFN0cmluZyhpbnB1dClcbiAgICAgIGlmIChpbnB1dCA+IEJpZ0ludCgyKSAqKiBCaWdJbnQoMzIpIHx8IGlucHV0IDwgLShCaWdJbnQoMikgKiogQmlnSW50KDMyKSkpIHtcbiAgICAgICAgcmVjZWl2ZWQgPSBhZGROdW1lcmljYWxTZXBhcmF0b3IocmVjZWl2ZWQpXG4gICAgICB9XG4gICAgICByZWNlaXZlZCArPSAnbidcbiAgICB9XG4gICAgbXNnICs9IGAgSXQgbXVzdCBiZSAke3JhbmdlfS4gUmVjZWl2ZWQgJHtyZWNlaXZlZH1gXG4gICAgcmV0dXJuIG1zZ1xuICB9LCBSYW5nZUVycm9yKVxuXG5mdW5jdGlvbiBhZGROdW1lcmljYWxTZXBhcmF0b3IgKHZhbCkge1xuICBsZXQgcmVzID0gJydcbiAgbGV0IGkgPSB2YWwubGVuZ3RoXG4gIGNvbnN0IHN0YXJ0ID0gdmFsWzBdID09PSAnLScgPyAxIDogMFxuICBmb3IgKDsgaSA+PSBzdGFydCArIDQ7IGkgLT0gMykge1xuICAgIHJlcyA9IGBfJHt2YWwuc2xpY2UoaSAtIDMsIGkpfSR7cmVzfWBcbiAgfVxuICByZXR1cm4gYCR7dmFsLnNsaWNlKDAsIGkpfSR7cmVzfWBcbn1cblxuLy8gQ0hFQ0sgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gY2hlY2tCb3VuZHMgKGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgJ29mZnNldCcpXG4gIGlmIChidWZbb2Zmc2V0XSA9PT0gdW5kZWZpbmVkIHx8IGJ1ZltvZmZzZXQgKyBieXRlTGVuZ3RoXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWYubGVuZ3RoIC0gKGJ5dGVMZW5ndGggKyAxKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0ludEJJICh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikge1xuICAgIGNvbnN0IG4gPSB0eXBlb2YgbWluID09PSAnYmlnaW50JyA/ICduJyA6ICcnXG4gICAgbGV0IHJhbmdlXG4gICAgaWYgKGJ5dGVMZW5ndGggPiAzKSB7XG4gICAgICBpZiAobWluID09PSAwIHx8IG1pbiA9PT0gQmlnSW50KDApKSB7XG4gICAgICAgIHJhbmdlID0gYD49IDAke259IGFuZCA8IDIke259ICoqICR7KGJ5dGVMZW5ndGggKyAxKSAqIDh9JHtufWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJhbmdlID0gYD49IC0oMiR7bn0gKiogJHsoYnl0ZUxlbmd0aCArIDEpICogOCAtIDF9JHtufSkgYW5kIDwgMiAqKiBgICtcbiAgICAgICAgICAgICAgICBgJHsoYnl0ZUxlbmd0aCArIDEpICogOCAtIDF9JHtufWBcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UgPSBgPj0gJHttaW59JHtufSBhbmQgPD0gJHttYXh9JHtufWBcbiAgICB9XG4gICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfT1VUX09GX1JBTkdFKCd2YWx1ZScsIHJhbmdlLCB2YWx1ZSlcbiAgfVxuICBjaGVja0JvdW5kcyhidWYsIG9mZnNldCwgYnl0ZUxlbmd0aClcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIgKHZhbHVlLCBuYW1lKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpXG4gIH1cbn1cblxuZnVuY3Rpb24gYm91bmRzRXJyb3IgKHZhbHVlLCBsZW5ndGgsIHR5cGUpIHtcbiAgaWYgKE1hdGguZmxvb3IodmFsdWUpICE9PSB2YWx1ZSkge1xuICAgIHZhbGlkYXRlTnVtYmVyKHZhbHVlLCB0eXBlKVxuICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX09VVF9PRl9SQU5HRSh0eXBlIHx8ICdvZmZzZXQnLCAnYW4gaW50ZWdlcicsIHZhbHVlKVxuICB9XG5cbiAgaWYgKGxlbmd0aCA8IDApIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUygpXG4gIH1cblxuICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9PVVRfT0ZfUkFOR0UodHlwZSB8fCAnb2Zmc2V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA+PSAke3R5cGUgPyAxIDogMH0gYW5kIDw9ICR7bGVuZ3RofWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSlcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG5jb25zdCBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXisvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHRha2VzIGVxdWFsIHNpZ25zIGFzIGVuZCBvZiB0aGUgQmFzZTY0IGVuY29kaW5nXG4gIHN0ciA9IHN0ci5zcGxpdCgnPScpWzBdXG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHIudHJpbSgpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgbGV0IGNvZGVQb2ludFxuICBjb25zdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIGxldCBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICBjb25zdCBieXRlcyA9IFtdXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIGNvbnN0IGJ5dGVBcnJheSA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgbGV0IGMsIGhpLCBsb1xuICBjb25zdCBieXRlQXJyYXkgPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGxldCBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG4vLyBBcnJheUJ1ZmZlciBvciBVaW50OEFycmF5IG9iamVjdHMgZnJvbSBvdGhlciBjb250ZXh0cyAoaS5lLiBpZnJhbWVzKSBkbyBub3QgcGFzc1xuLy8gdGhlIGBpbnN0YW5jZW9mYCBjaGVjayBidXQgdGhleSBzaG91bGQgYmUgdHJlYXRlZCBhcyBvZiB0aGF0IHR5cGUuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNjZcbmZ1bmN0aW9uIGlzSW5zdGFuY2UgKG9iaiwgdHlwZSkge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgdHlwZSB8fFxuICAgIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSAhPSBudWxsICYmXG4gICAgICBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lKVxufVxuZnVuY3Rpb24gbnVtYmVySXNOYU4gKG9iaikge1xuICAvLyBGb3IgSUUxMSBzdXBwb3J0XG4gIHJldHVybiBvYmogIT09IG9iaiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuXG4vLyBDcmVhdGUgbG9va3VwIHRhYmxlIGZvciBgdG9TdHJpbmcoJ2hleCcpYFxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMjE5XG5jb25zdCBoZXhTbGljZUxvb2t1cFRhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYWxwaGFiZXQgPSAnMDEyMzQ1Njc4OWFiY2RlZidcbiAgY29uc3QgdGFibGUgPSBuZXcgQXJyYXkoMjU2KVxuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICBjb25zdCBpMTYgPSBpICogMTZcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIHRhYmxlW2kxNiArIGpdID0gYWxwaGFiZXRbaV0gKyBhbHBoYWJldFtqXVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGFibGVcbn0pKClcblxuLy8gUmV0dXJuIG5vdCBmdW5jdGlvbiB3aXRoIEVycm9yIGlmIEJpZ0ludCBub3Qgc3VwcG9ydGVkXG5mdW5jdGlvbiBkZWZpbmVCaWdJbnRNZXRob2QgKGZuKSB7XG4gIHJldHVybiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IEJ1ZmZlckJpZ0ludE5vdERlZmluZWQgOiBmblxufVxuXG5mdW5jdGlvbiBCdWZmZXJCaWdJbnROb3REZWZpbmVkICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdCaWdJbnQgbm90IHN1cHBvcnRlZCcpXG59XG4iLCIvKiEgaWVlZTc1NC4gQlNELTMtQ2xhdXNlIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL1xuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiaW1wb3J0IHsgQnVmZmVyIGFzIF9CdWZmZXIgfSBmcm9tICdidWZmZXInO1xyXG5pbXBvcnQgeyBCdWZmZXJTdHJpbmcsIEJ1ZmZlckVuY29kaW5nIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuLyoqXHJcbiAqIEJ1ZmZlciBvYmplY3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBCdWZmZXIgPSBfQnVmZmVyO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHZhbHVlIGlzIHZhbGlkIGxlbmd0aFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9pc0J1ZmZlciA9ICh2YWx1ZTogYW55KTogYm9vbGVhbiA9PiBCdWZmZXIuaXNCdWZmZXIodmFsdWUpO1xyXG5cclxuLyoqXHJcbiAqIEJhc2U2NCBlbmNvZGVcclxuICogLSBFeGFtcGxlOiBgX2Jhc2U2NEVuY29kZSgnSGVsbG8gd29ybGQhJylgID0+IGAnU0dWc2JHOGdkMjl5YkdRaCdgXHJcbiAqIFxyXG4gKiBAcGFyYW0gYnVmZmVyXHJcbiAqIEBwYXJhbSBidWZmZXJFbmNvZGluZ1xyXG4gKiBAcmV0dXJucyBiYXNlNjQgZW5jb2RlZCBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9iYXNlNjRFbmNvZGUgPSAoYnVmZmVyOiBCdWZmZXJTdHJpbmcsIGJ1ZmZlckVuY29kaW5nPzogQnVmZmVyRW5jb2RpbmcpOiBzdHJpbmcgPT4ge1xyXG5cdHJldHVybiBCdWZmZXIuZnJvbShidWZmZXIsIGJ1ZmZlckVuY29kaW5nKS50b1N0cmluZygnYmFzZTY0Jyk7XHJcbn07XHJcblxyXG4vKipcclxuICogQmFzZTY0IGRlY29kZVxyXG4gKiAtIEV4YW1wbGU6IGBfYmFzZTY0RGVjb2RlKCdTR1ZzYkc4Z2QyOXliR1FoJylgID0+IGA8QnVmZmVyIDQ4IDY1IDZjIDZjIDZmIDIwIDc3IDZmIDcyIDZjIDY0IDIxPmBcclxuICogLSBFeGFtcGxlOiBgX2Jhc2U2NERlY29kZSgnU0dWc2JHOGdkMjl5YkdRaCcpLnRvU3RyaW5nKClgID0+IGAnSGVsbG8gd29ybGQhJ2BcclxuICogXHJcbiAqIEBwYXJhbSBiYXNlNjRcclxuICogQHJldHVybnMgZGVjb2RlZCBgQnVmZmVyYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9iYXNlNjREZWNvZGUgPSAoYmFzZTY0OiBzdHJpbmcpOiBCdWZmZXIgPT4ge1xyXG5cdHJldHVybiBCdWZmZXIuZnJvbShiYXNlNjQsICdiYXNlNjQnKTtcclxufTsiLCJleHBvcnQgKiBmcm9tICcuL19CdWZmZXInOyIsIi8qKlxyXG4gKiBBbHBoYU51bSBwcml2YXRlIHByb3BzIGtleVxyXG4gKi9cclxuY29uc3QgUFJPUFMgPSBTeW1ib2woJ0FscGhhTnVtJyk7XHJcblxyXG4vKipcclxuICogQWxwaGFiZXRpY2FsIGludGVnZXJcclxuICogXHJcbiAqIEBjbGFzcyBBbHBoYU51bVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFscGhhTnVtXHJcbntcclxuXHQvKipcclxuXHQgKiBBbHBoYWJldCBjaGFyYWN0ZXJzXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBDSEFSUygpe1xyXG5cdFx0cmV0dXJuICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBpbnN0YW5jZSBwcm9wc1xyXG5cdCAqL1xyXG5cdFtQUk9QU106IHt2YWx1ZTogbnVtYmVyLCBzaWduOiAxfC0xfSA9IHt2YWx1ZTogMCwgc2lnbjogMX07XHJcblxyXG5cdC8qKlxyXG5cdCAqIGB2YWx1ZWAgZ2V0dGVyXHJcblx0ICovXHJcblx0Z2V0IHZhbHVlKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10udmFsdWUgKiB0aGlzW1BST1BTXS5zaWduO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogYHZhbHVlYCBzZXR0ZXJcclxuXHQgKi9cclxuXHRzZXQgdmFsdWUodmFsdWUpIHtcclxuXHRcdGNvbnN0IHZhbDogbnVtYmVyID0gcGFyc2VJbnQoTnVtYmVyKHZhbHVlKSBhcyBhbnkpIHx8IDA7XHJcblx0XHR0aGlzW1BST1BTXS5zaWduID0gdmFsIDwgMCA/IC0xIDogMTtcclxuXHRcdHRoaXNbUFJPUFNdLnZhbHVlID0gTWF0aC5hYnModmFsKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGBpbmRleGVzYCBnZXR0ZXJcclxuXHQgKi9cclxuXHRnZXQgaW5kZXhlcygpOiBudW1iZXJbXSB7XHJcblx0XHRjb25zdCBjaGFycyA9IEFscGhhTnVtLkNIQVJTLCBiYXNlOiBudW1iZXIgPSBjaGFycy5sZW5ndGgsIGJ1ZmZlcjogbnVtYmVyW10gPSBbXTtcclxuXHRcdGxldCBkZWM6IG51bWJlciA9IHRoaXNbUFJPUFNdLnZhbHVlO1xyXG5cdFx0bGV0IG4gPSAwO1xyXG5cdFx0d2hpbGUgKDEpe1xyXG5cdFx0XHRidWZmZXIudW5zaGlmdChNYXRoLm1heCgoZGVjJWJhc2UpLW4sIDApKTtcclxuXHRcdFx0aWYgKCEoZGVjID0gTWF0aC5mbG9vcihkZWMvYmFzZSkpKSBicmVhaztcclxuXHRcdFx0biA9IDE7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpc1tQUk9QU10uc2lnbiA9PT0gLTEpIGJ1ZmZlci51bnNoaWZ0KC0xKTtcclxuXHRcdHJldHVybiBidWZmZXI7XHJcblx0fVxyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIGBpbmRleGVzYCBzZXR0ZXJcclxuXHQgKi9cclxuXHRzZXQgaW5kZXhlcyh2YWx1ZSkge1xyXG5cdFx0Y29uc3QgYmFzZTogbnVtYmVyID0gQWxwaGFOdW0uQ0hBUlMubGVuZ3RoO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0bGV0IGFycjogbnVtYmVyW10gPSBbLi4udmFsdWVdO1xyXG5cdFx0XHRsZXQgbGVuID0gYXJyLmxlbmd0aCwgc2lnbiA9IDEsIGRlYyA9IDA7XHJcblx0XHRcdGlmIChsZW4pe1xyXG5cdFx0XHRcdGlmIChhcnJbMF0gPT09IC0xKXtcclxuXHRcdFx0XHRcdGlmIChsZW4gPT09IDEpIHRocm93IEVycm9yKCdUaGUgXFxgQWxwaGFOdW1cXGAgaW5kZXhlcyBhcnJheSBpcyBpbmNvbXBsZXRlLicpO1xyXG5cdFx0XHRcdFx0YXJyID0gYXJyLnNsaWNlKDEpO1xyXG5cdFx0XHRcdFx0c2lnbiA9IC0xO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRcdFx0Y29uc3QgbiA9IGFycltpXVxyXG5cdFx0XHRcdFx0aWYgKCEobiA+PSAwICYmIG4gPCBiYXNlKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFxcYEFscGhhTnVtXFxgIGluZGV4ZXMgbXVzdCBiZSBhbiBpbnRlZ2VyIGFycmF5IG9mIFxcYDAtMjVcXGAgdmFsdWVzIHdpdGggb3B0aW9uYWwgLTEgaW4gMCBpbmRleC4gKGUuZy4gXFxgWzAsMjNdXFxgID0+IFxcYCdBWCdcXGB8XFxgNDlcXGA7IFxcYFstMSwwLDIzXVxcYCA9PiBcXGAnLUFYJ1xcYHxcXGAtNDlcXGApYCk7XHJcblx0XHRcdFx0XHRkZWMgPSBkZWMgKiBiYXNlICsgbiArIDE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChkZWMgPj0gYmFzZSkgZGVjIC09IDE7XHJcblx0XHRcdHRoaXMudmFsdWUgPSBkZWMgKiBzaWduO1xyXG5cdFx0fVxyXG5cdFx0Y2F0Y2ggKGVycm9yOiBhbnkpe1xyXG5cdFx0XHRjb25zb2xlLndhcm4oe2Vycm9yLCB2YWx1ZX0pO1xyXG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGVycm9yKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGB0ZXh0YCBnZXR0ZXJcclxuXHQgKi9cclxuXHRnZXQgdGV4dCgpOiBzdHJpbmcge1xyXG5cdFx0Y29uc3QgY2hhcnMgPSBBbHBoYU51bS5DSEFSUztcclxuXHRcdGxldCB0ZXh0OiBzdHJpbmcgPSAnJztcclxuXHRcdGxldCBhcnI6IG51bWJlcltdID0gdGhpcy5pbmRleGVzO1xyXG5cdFx0aWYgKGFyclswXSA9PT0gLTEpe1xyXG5cdFx0XHRhcnIgPSBhcnIuc2xpY2UoMSk7XHJcblx0XHRcdGlmIChhcnIubGVuZ3RoKSB0ZXh0ID0gJy0nO1xyXG5cdFx0fVxyXG5cdFx0dGV4dCArPSBhcnIubWFwKHYgPT4gY2hhcnNbdl0pLmpvaW4oJycpO1xyXG5cdFx0cmV0dXJuIHRleHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBOZXcgYEFscGhhTnVtYCBpbnN0YW5jZVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIChkZWZhdWx0OiBgMGApIGluaXRpYWwgdmFsdWUgfiBfKiphYnNvbHV0ZSBpbnRlZ2VyKipfXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IodmFsdWU6IG51bWJlciA9IDApe1xyXG5cdFx0dGhpcy52YWx1ZSA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IGB2YWx1ZWBcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdmFsdWUgLSBhZGQgdmFsdWUgfiBfKiphYnNvbHV0ZSBpbnRlZ2VyKipfXHJcblx0ICogQHJldHVybnMgYEFscGhhTnVtYCB+IGluc3RhbmNlXHJcblx0ICovXHJcblx0c2V0KHZhbHVlOiBudW1iZXIpOiBBbHBoYU51bSB7XHJcblx0XHR0aGlzLnZhbHVlID0gdmFsdWU7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCBgdmFsdWVgXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHZhbHVlIC0gKGRlZmF1bHQ6IGAxYCkgYWRkIHZhbHVlIH4gXyoqYWJzb2x1dGUgaW50ZWdlcioqX1xyXG5cdCAqIEByZXR1cm5zIGBBbHBoYU51bWAgfiBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdGFkZCh2YWx1ZTogbnVtYmVyID0gMSk6IEFscGhhTnVtIHtcclxuXHRcdHRoaXMudmFsdWUgKz0gcGFyc2VJbnQoTnVtYmVyKHZhbHVlKSBhcyBhbnkpIHx8IDA7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0ZXh0IHZhbHVlXHJcblx0ICogXHJcblx0ICogQHJldHVybnMgYHN0cmluZ2BcclxuXHQgKi9cclxuXHR0b1N0cmluZygpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMudGV4dDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhcnNlIHZhbHVlIHRvIGBBbHBoYU51bWAgaW5zdGFuY2VcclxuXHQgKiAtIGFjY2VwdHMgYG51bWJlcmAgfiBpbnRlZ2VycyAoZS5nLiBgMTk5OWAgPT4gYCdCWFgnYDsgYC0xOTk5YCA9PiBgJy1CWFgnYClcclxuXHQgKiAtIGFjY2VwdHMgYHRleHRgIGAvLT9bQS1aXSsvYCAoZS5nLiBgJ0JYWCdgID0+IGAxOTk5YDsgYCctQlhYJ2AgPT4gYC0xOTk5YClcclxuXHQgKiAtIGFjY2VwdHMgaW5kZXhlcyBgYXJyYXlgIChlLmcuIGBbMSwyMywyM11gID0+IGAnQlhYJ2B8YDE5OTlgOyBgWy0xLDEsMjMsMjNdYCA9PiBgJy1CWFgnYHxgLTE5OTlgKVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlIF8qKihzZWUgbWV0aG9kIGRvY3MgZm9yIGFjY2VwdGFibGUgdmFsdWVzKSoqX1xyXG5cdCAqIEByZXR1cm5zIGBBbHBoYU51bWAgaW5zdGFuY2VcclxuXHQgKiBAdGhyb3dzIGBUeXBlRXJyb3JgIG9uIGZhaWx1cmVcclxuXHQgKi9cclxuXHRzdGF0aWMgcGFyc2UodmFsdWU6IGFueSk6IEFscGhhTnVtIHtcclxuXHRcdGNvbnN0IGluc3RhbmNlOiBBbHBoYU51bSA9IG5ldyBBbHBoYU51bSgpO1xyXG5cclxuXHRcdC8vcGFyc2Ugc2NhbGFyc1xyXG5cdFx0aWYgKCEoJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSAmJiB2YWx1ZSkpe1xyXG5cdFx0XHRcclxuXHRcdFx0Ly90ZXh0IHZhbHVlXHJcblx0XHRcdGxldCB2YWw6IHN0cmluZyA9IFN0cmluZyh2YWx1ZSA/PyAnJykudHJpbSgpLnRvVXBwZXJDYXNlKCk7XHJcblx0XHRcdGlmICghdmFsKSByZXR1cm4gaW5zdGFuY2U7IC8vPDwgYmxhbmsgc3RyaW5nXHJcblxyXG5cdFx0XHQvL3RleHQgdG8gaW5kZXhlcyB+IC8tP1tBLVpdKy9cclxuXHRcdFx0aWYgKC9bQS1aXS8udGVzdCh2YWwpKXtcclxuXHRcdFx0XHRjb25zdCBjaGFycyA9IHRoaXMuQ0hBUlM7XHJcblx0XHRcdFx0Y29uc3QgaW5kZXhlczogbnVtYmVyW10gPSBbXTtcclxuXHRcdFx0XHRjb25zdCBhcnI6IHN0cmluZ1tdID0gdmFsLnNwbGl0KCcnKTtcclxuXHRcdFx0XHRsZXQgc2lnbmVkOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0XHRcdGNvbnN0IGMgPSBhcnJbaV07XHJcblx0XHRcdFx0XHRpZiAoYyA9PT0gJy0nICYmICFpKXtcclxuXHRcdFx0XHRcdFx0aW5kZXhlcy5wdXNoKC0xKTtcclxuXHRcdFx0XHRcdFx0c2lnbmVkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjb25zdCBuID0gY2hhcnMuaW5kZXhPZihjKTtcclxuXHRcdFx0XHRcdGlmIChuIDwgMCkgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBwYXJzZSBcXGBBbHBoYU51bVxcYCB0ZXh0IHZhbHVlIGNoYXJhY3RlciBcIiR7Y31cIiBhdCAke2l9YCk7XHJcblx0XHRcdFx0XHRpbmRleGVzLnB1c2gobik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChzaWduZWQgJiYgaW5kZXhlcy5sZW5ndGggPT09IDEpIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgcGFyc2UgXFxgQWxwaGFOdW1cXGAgdGV4dCB2YWx1ZSBcIiR7dmFsfVwiLmApO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vKyBzZXQgaW5kZXhlc1xyXG5cdFx0XHRcdGluc3RhbmNlLmluZGV4ZXMgPSBpbmRleGVzO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cclxuXHRcdFx0XHQvL3BhcnNlIGludGVnZXIgfiAvXFxkKy9cclxuXHRcdFx0XHRjb25zdCBpbnQ6IG51bWJlciA9IHBhcnNlSW50KE51bWJlcih2YWx1ZSkgYXMgYW55KTtcclxuXHRcdFx0XHRpZiAoaXNOYU4oaW50KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5zdXBwb3J0ZWQgcGFyc2UgXFxgQWxwaGFOdW1cXGAgdmFsdWUgXCIke3ZhbH1cIi5gKTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvLysgc2V0IHZhbHVlXHJcblx0XHRcdFx0aW5zdGFuY2UudmFsdWUgPSBpbnQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cclxuXHRcdFx0Ly9wYXJzZSBpbmRleGVzIH4gL1soLTEsKT9bMC0yNV0sWzAtMjVdLFswLTI1XV0vXHJcblx0XHRcdHRyeSB7XHJcblxyXG5cdFx0XHRcdC8vKyBzZXQgaW5kZXhlc1xyXG5cdFx0XHRcdGluc3RhbmNlLmluZGV4ZXMgPSB2YWx1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjYXRjaCAoZSkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEZhaWxlZCB0byBwYXJzZSBcXGBBbHBoYU51bVxcYCBvYmplY3QgdmFsdWU7ICR7ZX1gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vPDwgcmVzdWx0IH4gYEFscGhhTnVtYFxyXG5cdFx0cmV0dXJuIGluc3RhbmNlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGFyc2UgdmFsdWUgdG8gYEFscGhhTnVtYCB0ZXh0IH4gYC8tP1tBLVpdKy9gIChlLmcuIGA0OWAgPT4gYCdBWCdgOyBgNDlgID0+IGAnLUFYJ2ApXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWUgXyoqKHNlZSBwYXJzZSgpIGRvY3MpKipfXHJcblx0ICogQHJldHVybnMgYHN0cmluZ2BcclxuXHQgKiBAdGhyb3dzIGBUeXBlRXJyb3JgIG9uIGZhaWx1cmVcclxuXHQgKi9cclxuXHRzdGF0aWMgdGV4dCh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnBhcnNlKHZhbHVlKS50ZXh0O1xyXG5cdH1cclxufSIsImV4cG9ydCAqIGZyb20gJy4vX0FscGhhTnVtJzsiLCJpbXBvcnQgeyBfaXNGdW5jLCBfbnVtLCBfcG9zSW50IH0gZnJvbSAnLi4vdXRpbHMnO1xyXG5pbXBvcnQgeyBURWFzaW5nRnVuY3Rpb24sIEVhc2luZ3MgfSBmcm9tICcuL2Vhc2luZ3MnO1xyXG5pbXBvcnQgeyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIGNhbmNlbEFuaW1hdGlvbkZyYW1lIH0gZnJvbSAnLi9fcG9seWZpbGwnO1xyXG5pbXBvcnQgeyBJQW5pbWF0ZU9wdGlvbnMsIElBbmltYXRpb24gfSBmcm9tICcuL190eXBlcyc7XHJcblxyXG4vKipcclxuICogVGhlIGRlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHVzZWQgaW4gYW5pbWF0aW9ucy5cclxuICpcclxuICogQGNvbnN0YW50IHtURWFzaW5nRnVuY3Rpb259XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgQU5JTUFURV9ERUZBVUxUX0VBU0lORzogVEVhc2luZ0Z1bmN0aW9uID0gRWFzaW5ncy5lYXNlTGluZWFyO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBkZWZhdWx0IGR1cmF0aW9uIGZvciBhbmltYXRpb25zLCBpbiBtaWxsaXNlY29uZHMuXHJcbiAqXHJcbiAqIEBjb25zdGFudCB7bnVtYmVyfVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEFOSU1BVEVfREVGQVVMVF9EVVJBVElPTjogbnVtYmVyID0gMTAwMDtcclxuXHJcbi8qKlxyXG4gKiBBbmltYXRlcyBhbiBvYmplY3QgYmFzZWQgb24gdGhlIHByb3ZpZGVkIG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7SUFuaW1hdGVPcHRpb25zfSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSBhbmltYXRpb24uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW19kZWJ1Zz1mYWxzZV0gLSBFbmFibGVzIGRlYnVnIG1vZGUgaWYgdHJ1ZS5cclxuICogQHJldHVybnMge0lBbmltYXRpb259IFRoZSBhbmltYXRpb24gY29udHJvbCBvYmplY3QuXHJcbiAqIEB0aHJvd3Mge0Vycm9yfSBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgZGVmaW5lZCBpbiBvcHRpb25zLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9hbmltYXRlKHRoaXM6IGFueSwgb3B0aW9uczogSUFuaW1hdGVPcHRpb25zLCBfZGVidWc6IGJvb2xlYW4gPSBmYWxzZSk6IElBbmltYXRpb24ge1xyXG5cdGxldCB7XHJcblx0XHR1cGRhdGU6IF91cGRhdGUsXHJcblx0XHRiZWZvcmU6IF9iZWZvcmUsXHJcblx0XHRhZnRlcjogX2FmdGVyLFxyXG5cdFx0ZWFzaW5nOiBfZWFzaW5nID0gQU5JTUFURV9ERUZBVUxUX0VBU0lORyxcclxuXHRcdGR1cmF0aW9uOiBfZHVyYXRpb24gPSAxMDAwLFxyXG5cdFx0ZGVsYXk6IF9kZWxheSxcclxuXHRcdGRlbGF5ZWQ6IF9kZWxheWVkID0gZmFsc2UsXHJcblx0XHRmcm9tOiBfZnJvbSxcclxuXHRcdHRvOiBfdG8sXHJcblx0XHR0aW1lb3V0OiBfdGltZW91dCxcclxuXHRcdGF1dG9wbGF5OiBfYXV0b3BsYXkgPSBmYWxzZSxcclxuXHR9ID0gT2JqZWN0KG9wdGlvbnMpO1xyXG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cdGNvbnN0IGNvbnRleHQgPSAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiA/IHNlbGYgOiBudWxsO1xyXG5cdGNvbnN0IHVwZGF0ZSA9IF9pc0Z1bmMoX3VwZGF0ZSkgPyBfdXBkYXRlIDogdW5kZWZpbmVkO1xyXG5cdGNvbnN0IGJlZm9yZSA9IF9pc0Z1bmMoX2JlZm9yZSkgPyBfYmVmb3JlIDogdW5kZWZpbmVkO1xyXG5cdGNvbnN0IGFmdGVyID0gX2lzRnVuYyhfYWZ0ZXIpID8gX2FmdGVyIDogdW5kZWZpbmVkO1xyXG5cdGlmICghdXBkYXRlKXtcclxuXHRcdGxldCBlcnIgPSAnVGhlIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgZGVmaW5lZCBpbiBgX2FuaW1hdGVgIG9wdGlvbnMhJztcclxuXHRcdGNvbnNvbGUuZXJyb3IoZXJyLCBvcHRpb25zKTtcclxuXHRcdHRocm93IG5ldyBFcnJvcihlcnIpO1xyXG5cdH1cclxuXHRjb25zdCBlYXNpbmc6IFRFYXNpbmdGdW5jdGlvbiA9ICgoKT0+e1xyXG5cdFx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgX2Vhc2luZyAmJiBFYXNpbmdzLmhhc093blByb3BlcnR5KF9lYXNpbmcpKSBfZWFzaW5nID0gRWFzaW5nc1tfZWFzaW5nXTtcclxuXHRcdHJldHVybiAnZnVuY3Rpb24nID09PSB0eXBlb2YgX2Vhc2luZyA/IF9lYXNpbmcgOiBBTklNQVRFX0RFRkFVTFRfRUFTSU5HO1xyXG5cdH0pKCk7XHJcblx0Y29uc3QgZHVyYXRpb24gPSBfcG9zSW50KF9kdXJhdGlvbiwgMCkgPz8gQU5JTUFURV9ERUZBVUxUX0RVUkFUSU9OO1xyXG5cdGNvbnN0IGRlbGF5ID0gX3Bvc0ludChfZGVsYXksIDApID8/IDA7XHJcblx0Y29uc3QgZGVsYXllZCA9IEJvb2xlYW4oX2RlbGF5ZWQpO1xyXG5cdGNvbnN0IGF1dG9wbGF5ID0gQm9vbGVhbihfYXV0b3BsYXkpO1xyXG5cdGNvbnN0IHRpbWVvdXQgPSBfcG9zSW50KF90aW1lb3V0LCAwKSA/PyAwO1xyXG5cdGNvbnN0IGZyb20gPSBfbnVtKF9mcm9tLCAwKTtcclxuXHRjb25zdCB0byA9IF9udW0oX3RvLCAwKTtcclxuXHRjb25zdCBkaWZmID0gdG8gLSBmcm9tO1xyXG5cclxuXHRsZXQgaWQ6IG51bWJlcnx1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblx0bGV0IHN0YXJ0OiBudW1iZXJ8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGxldCBpc19kb25lOiBudW1iZXJ8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGxldCBpc19wYXVzZWQ6IGJvb2xlYW58dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGxldCBwcmV2OiBudW1iZXJ8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGxldCB0OiBudW1iZXJ8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGxldCBkOiBudW1iZXIgPSAwO1xyXG5cdGxldCBwOiBudW1iZXIgPSAwO1xyXG5cdGxldCBwdDogbnVtYmVyID0gMDtcclxuXHRsZXQgZXQ6IG51bWJlciA9IDA7XHJcblx0bGV0IGVsYXBzZWQ6IG51bWJlciA9IDA7XHJcblx0bGV0IGluZGV4OiBudW1iZXIgPSAtMTtcclxuXHRsZXQgdGhlbjogbnVtYmVyID0gRGF0ZS5ub3coKTtcclxuXHJcblx0Ly9yZXNldFxyXG5cdGNvbnN0IHJlc2V0ID0gKCk6IGJvb2xlYW4gPT4ge1xyXG5cdFx0aWYgKHQpIGNsZWFyVGltZW91dCh0KTtcclxuXHRcdGlmIChpZCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xyXG5cdFx0aWQgPSB0ID0gc3RhcnQgPSBpc19kb25lID0gaXNfcGF1c2VkID0gcHJldiA9IHVuZGVmaW5lZDtcclxuXHRcdGQgPSBwID0gZXQgPSBwdCA9IGVsYXBzZWQgPSAwO1xyXG5cdFx0aW5kZXggPSAtMTtcclxuXHRcdHRoZW4gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHRcdGlmIChfZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tfYW5pbWF0ZV0gcmVzZXQuJyk7XHJcblx0XHRyZXR1cm4gIWlzX2RvbmU7XHJcblx0fTtcclxuXHJcblx0Ly9mcmFtZVxyXG5cdGNvbnN0IGZyYW1lID0gKHRpbWU6IG51bWJlcik6IHZvaWQgPT4ge1xyXG5cdFx0aWYgKHRpbWUgPT09IHByZXYgfHwgaXNfZG9uZSkgcmV0dXJuO1xyXG5cdFx0cHJldiA9IHRpbWU7XHJcblx0XHRpbmRleCArPSAxO1xyXG5cdFx0bGV0IGRlbHRhID0gIWR1cmF0aW9uID8gMCA6IGVhc2luZy5jYWxsKGNvbnRleHQsIHRpbWUsIDAsIDEsIGR1cmF0aW9uKTtcclxuXHRcdGxldCBwb3MgPSAwO1xyXG5cdFx0aWYgKGRpZmYpe1xyXG5cdFx0XHRwb3MgPSBNYXRoLm1pbihkZWx0YSAqIE1hdGguYWJzKGRpZmYpLCBNYXRoLmFicyhkaWZmKSk7XHJcblx0XHRcdHBvcyA9IGZyb20gKyAocG9zICogKGRpZmYgPCAwID8gLTEgOiAxKSk7XHJcblx0XHR9XHJcblx0XHRsZXQgcmVzID0gdXBkYXRlLmNhbGwoY29udGV4dCwge2luZGV4LCBkZWx0YSwgcG9zLCB0aW1lfSk7XHJcblx0XHRpZiAodGltZSA+PSBkdXJhdGlvbikgaXNfZG9uZSA9IDE7XHJcblx0XHRlbHNlIGlmIChyZXMgPT09IGZhbHNlKSBpc19kb25lID0gLTE7XHJcblx0fTtcclxuXHJcblx0Ly9maW5pc2hcclxuXHRjb25zdCBmaW5pc2ggPSAodGltZXN0YW1wOiBudW1iZXIpOiB2b2lkID0+IHtcclxuXHRcdGlmICh0KSBjbGVhclRpbWVvdXQodCk7XHJcblx0XHRpZiAocHQpe1xyXG5cdFx0XHRwICs9ICh0aW1lc3RhbXAgLSBwdCk7XHJcblx0XHRcdHB0ID0gMDtcclxuXHRcdH1cclxuXHRcdGxldCBwYXVzZV9kdXJhdGlvbiA9IHA7XHJcblx0XHRsZXQgdG90YWxfZHVyYXRpb24gPSBNYXRoLm1heChEYXRlLm5vdygpIC0gdGhlbiwgZWxhcHNlZCArIGV0KTtcclxuXHRcdGxldCBhYm9ydF9tZXRob2Q6IHVuZGVmaW5lZHwnYWJvcnQnfCd1cGRhdGUnfCdiZWdpbid8J3RpbWVvdXQnO1xyXG5cdFx0bGV0IGFib3J0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcdGxldCBjb21wbGV0ZTogYm9vbGVhbiA9ICFhYm9ydGVkO1xyXG5cdFx0aWYgKGlzX2RvbmUgJiYgaXNfZG9uZSA8IDApe1xyXG5cdFx0XHRhYm9ydGVkID0gdHJ1ZTtcclxuXHRcdFx0c3dpdGNoIChpc19kb25lKSB7XHJcblx0XHRcdFx0Y2FzZSAtMTpcclxuXHRcdFx0XHRcdGFib3J0X21ldGhvZCA9ICd1cGRhdGUnO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSAtMjpcclxuXHRcdFx0XHRcdGFib3J0X21ldGhvZCA9ICdiZWdpbic7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIC00OlxyXG5cdFx0XHRcdFx0YWJvcnRfbWV0aG9kID0gJ3RpbWVvdXQnO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGFib3J0X21ldGhvZCA9ICdhYm9ydCc7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKGFmdGVyKSBhZnRlci5jYWxsKGNvbnRleHQsIHthYm9ydGVkLCBhYm9ydF9tZXRob2QsIGNvbXBsZXRlLCBwYXVzZV9kdXJhdGlvbiwgdG90YWxfZHVyYXRpb259KTtcclxuXHRcdGlkID0gdW5kZWZpbmVkO1xyXG5cdH07XHJcblxyXG5cdC8vYmVnaW5cclxuXHRjb25zdCBiZWdpbiA9ICh0aW1lc3RhbXA6IG51bWJlcik6IHZvaWQgPT4ge1xyXG5cdFx0aWYgKHRpbWVvdXQpIHQgPSBzZXRUaW1lb3V0KCgpID0+IChpc19kb25lID0gLTQpLCB0aW1lb3V0KSBhcyBhbnk7XHJcblx0XHRpZiAoYmVmb3JlKXtcclxuXHRcdFx0bGV0IHJlcyA9IGJlZm9yZS5jYWxsKGNvbnRleHQsIHt0aW1lc3RhbXAsIG9wdGlvbnMsIHRoZW59KTtcclxuXHRcdFx0aWYgKHJlcyA9PT0gZmFsc2UpIGlzX2RvbmUgPSAtMjtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvL3N0ZXBcclxuXHRjb25zdCBzdGVwID0gKHRpbWVzdGFtcDogbnVtYmVyKTogdm9pZCA9PiB7XHJcblx0XHRpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkgYmVnaW4odGltZXN0YW1wKTtcclxuXHRcdGlmICghc3RhcnQpIHN0YXJ0ID0gdGltZXN0YW1wO1xyXG5cdFx0ZWxhcHNlZCA9ICh0aW1lc3RhbXAgLSBzdGFydCkgKyBldDtcclxuXHRcdGlmIChpc19kb25lKSByZXR1cm4gZmluaXNoKHRpbWVzdGFtcCk7XHJcblx0XHRpZiAoaXNfcGF1c2VkKXtcclxuXHRcdFx0aWQgPSB1bmRlZmluZWQ7XHJcblx0XHRcdGV0ID0gZWxhcHNlZDtcclxuXHRcdFx0cHQgPSB0aW1lc3RhbXA7XHJcblx0XHRcdHN0YXJ0ID0gMDtcclxuXHRcdFx0ZWxhcHNlZCA9IDA7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKHB0KXtcclxuXHRcdFx0cCArPSAodGltZXN0YW1wIC0gcHQpO1xyXG5cdFx0XHRwdCA9IDA7XHJcblx0XHR9XHJcblx0XHRpZiAoIWQgfHwgKGQgLSArZWxhcHNlZC50b0ZpeGVkKDIpKSA8PSAwLjEpe1xyXG5cdFx0XHRpZiAoISghZWxhcHNlZCAmJiBkZWxheWVkKSkgZnJhbWUoTWF0aC5taW4oK2VsYXBzZWQudG9GaXhlZCgxKSwgZCA/IGQgOiBkdXJhdGlvbikpO1xyXG5cdFx0XHRkICs9IGRlbGF5O1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFpc19kb25lICYmIGVsYXBzZWQgPj0gZHVyYXRpb24pIGlzX2RvbmUgPSAxO1xyXG5cdFx0aWYgKGlzX2RvbmUpIHJldHVybiBmaW5pc2godGltZXN0YW1wKTtcclxuXHRcdGVsc2UgaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XHJcblx0fTtcclxuXHJcblx0Ly9hYm9ydFxyXG5cdGNvbnN0IGFib3J0ID0gKCk6IGJvb2xlYW4gPT4ge1xyXG5cdFx0aWYgKGlzX2RvbmUpIHJldHVybiBmYWxzZTtcclxuXHRcdGlzX2RvbmUgPSAtMztcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH07XHJcblxyXG5cdC8vcGxheVxyXG5cdGNvbnN0IHBsYXkgPSAocmVzdGFydDogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiA9PiB7XHJcblx0XHRpZiAoX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbX2FuaW1hdGVdICR7aXNfcGF1c2VkID8gJ3Jlc3VtZScgOiAncGxheSd9LmAsIHtyZXN0YXJ0LCBpc19wYXVzZWQsIGlzX2RvbmUsIGR1cmF0aW9uLCBmcm9tLCB0bywgZGlmZiwgZWFzaW5nfSk7XHJcblx0XHRpZiAocmVzdGFydCkgcmVzZXQoKTtcclxuXHRcdGlmIChpc19kb25lKSByZXR1cm4gZmFsc2U7XHJcblx0XHRpc19wYXVzZWQgPSB1bmRlZmluZWQ7XHJcblx0XHRpZiAoaWQpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTtcclxuXHRcdGlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fTtcclxuXHJcblx0Ly9wYXVzZVxyXG5cdGNvbnN0IHBhdXNlID0gKHRvZ2dsZTogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuID0+IHtcclxuXHRcdGlmICh0b2dnbGUgPT09IG51bGwpIHRvZ2dsZSA9ICFpc19wYXVzZWQ7XHJcblx0XHRlbHNlIHRvZ2dsZSA9IEJvb2xlYW4odG9nZ2xlKTtcclxuXHRcdGlmIChfZGVidWcpIGNvbnNvbGUuZGVidWcoYFtfYW5pbWF0ZV0gJHt0b2dnbGUgPyAncGF1c2UnIDogJ3VucGF1c2UnfS5gLCB7dG9nZ2xlLCBpc19wYXVzZWQsIGlzX2RvbmV9KTtcclxuXHRcdGlmIChpc19kb25lKSByZXR1cm4gZmFsc2U7XHJcblx0XHRpZiAodG9nZ2xlID09PSBpc19wYXVzZWQpIHJldHVybiBpc19wYXVzZWQ7XHJcblx0XHRyZXR1cm4gdG9nZ2xlID8gKGlzX3BhdXNlZCA9IHRvZ2dsZSkgOiBwbGF5KCk7XHJcblx0fTtcclxuXHJcblx0Ly9yZXN1bWVcclxuXHRjb25zdCByZXN1bWUgPSAoKTogYm9vbGVhbiA9PiBpc19wYXVzZWQgPyBwYXVzZShmYWxzZSkgOiBmYWxzZTtcclxuXHRcclxuXHQvL3Jlc3RhcnRcclxuXHRjb25zdCByZXN0YXJ0ID0gKCk6IGJvb2xlYW4gPT4gcGxheSh0cnVlKTtcclxuXHJcblx0Ly9hdXRvcGxheVxyXG5cdGlmIChhdXRvcGxheSkgcGxheSgpO1xyXG5cdFxyXG5cdC8vcmVzdWx0IC0gYW5pbWF0aW9uXHJcblx0cmV0dXJuIHtcclxuXHRcdGdldCBfZGVidWcoKXtcclxuXHRcdFx0cmV0dXJuIF9kZWJ1ZztcclxuXHRcdH0sXHJcblx0XHRnZXQgYmVndW4oKXtcclxuXHRcdFx0cmV0dXJuIHN0YXJ0ICE9PSB1bmRlZmluZWQ7XHJcblx0XHR9LFxyXG5cdFx0Z2V0IHBhdXNlZCgpe1xyXG5cdFx0XHRyZXR1cm4gQm9vbGVhbihpc19wYXVzZWQpO1xyXG5cdFx0fSxcclxuXHRcdGdldCBkb25lKCl7XHJcblx0XHRcdHJldHVybiBCb29sZWFuKGlzX2RvbmUpO1xyXG5cdFx0fSxcclxuXHRcdHBsYXksXHJcblx0XHRwYXVzZSxcclxuXHRcdHJlc3VtZSxcclxuXHRcdHJlc3RhcnQsXHJcblx0XHRyZXNldCxcclxuXHRcdGFib3J0LFxyXG5cdH07XHJcbn0iLCIvKipcclxuICogRXhwb3J0IHBvbHlmaWxsIGZvciBgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZWAgYW5kIGB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWVgLlxyXG4gKiBcclxuICogVGhpcyBwb2x5ZmlsbCBwcm92aWRlcyBjb21wYXRpYmlsaXR5IGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgXHJcbiAqIGFuZCBgY2FuY2VsQW5pbWF0aW9uRnJhbWVgIGJ5IGRlZmF1bHQuIEl0IGNoZWNrcyBmb3IgdmVuZG9yLXByZWZpeGVkIGltcGxlbWVudGF0aW9ucyBhbmRcclxuICogZmFsbHMgYmFjayB0byBhIHRpbWVvdXQtYmFzZWQgc29sdXRpb24gaWYgbmVjZXNzYXJ5LlxyXG4gKiBcclxuICogQGNvbnN0YW50IHtbKGNhbGxiYWNrOiAodGltZTogbnVtYmVyKSA9PiB2b2lkKSA9PiBudW1iZXIsIChoYW5kbGU6IG51bWJlcikgPT4gdm9pZF19XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgW3JlcXVlc3RBbmltYXRpb25GcmFtZSwgY2FuY2VsQW5pbWF0aW9uRnJhbWVdID0gKCgpID0+IHtcclxuXHRsZXQgX3JlcXVlc3RBbmltYXRpb25GcmFtZTogYW55ID0gdW5kZWZpbmVkO1xyXG5cdGxldCBfY2FuY2VsQW5pbWF0aW9uRnJhbWU6IGFueSA9IHVuZGVmaW5lZDtcclxuXHRpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiB3aW5kb3cpe1xyXG5cdFx0Y29uc3QgdmVuZG9ycyA9IFsnbXMnLCAnbW96JywgJ3dlYmtpdCcsICdvJ107XHJcblx0XHRfcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTtcclxuXHRcdF9jYW5jZWxBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVuZG9ycy5sZW5ndGggJiYgIV9yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7IGkgKyspe1xyXG5cdFx0XHRjb25zdCB2ZW5kb3I6IGFueSA9IHZlbmRvcnNbaV07XHJcblx0XHRcdF9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB3aW5kb3dbYCR7dmVuZG9yfVJlcXVlc3RBbmltYXRpb25GcmFtZWAgYXMgYW55XTtcclxuXHRcdFx0X2NhbmNlbEFuaW1hdGlvbkZyYW1lID0gd2luZG93W2Ake3ZlbmRvcn1DYW5jZWxBbmltYXRpb25GcmFtZWAgYXMgYW55XSB8fCB3aW5kb3dbYCR7dmVuZG9yfUNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZWAgYXMgYW55XTtcclxuXHRcdH1cclxuXHR9XHJcblx0bGV0IHJlcXVlc3RBbmltYXRpb25GcmFtZTogKGNhbGxiYWNrOiAoKHRpbWU6IG51bWJlcik9PnZvaWQpKSA9PiBudW1iZXI7XHJcblx0aWYgKF9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IF9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgYXMgKChjYWxsYmFjazogKCh0aW1lOiBudW1iZXIpPT52b2lkKSkgPT4gbnVtYmVyKTtcclxuXHRlbHNlIHtcclxuXHRcdGxldCBwcmV2ID0gMDtcclxuXHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGNhbGxiYWNrOiAoKHRpbWU6IG51bWJlcik9PnZvaWQpKXtcclxuXHRcdFx0bGV0IGN1cnIgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcclxuXHRcdFx0dGltZW91dCA9IE1hdGgubWF4KDAsIDE2IC0gKGN1cnIgLSBwcmV2KSksXHJcblx0XHRcdHRpbWUgPSBjdXJyICsgdGltZW91dDtcclxuXHRcdFx0bGV0IGlkOiBudW1iZXIgPSBzZXRUaW1lb3V0KCgpID0+ICdmdW5jdGlvbicgPT09IHR5cGVvZiBjYWxsYmFjayA/IGNhbGxiYWNrKHRpbWUpIDogbnVsbCwgdGltZW91dCkgYXMgYW55O1xyXG5cdFx0XHRwcmV2ID0gdGltZTtcclxuXHRcdFx0cmV0dXJuIGlkO1xyXG5cdFx0fTtcclxuXHR9XHJcblx0bGV0IGNhbmNlbEFuaW1hdGlvbkZyYW1lOiAoKGhhbmRsZTogbnVtYmVyKSA9PiB2b2lkKTtcclxuXHRpZiAoX2NhbmNlbEFuaW1hdGlvbkZyYW1lKSBjYW5jZWxBbmltYXRpb25GcmFtZSA9IF9jYW5jZWxBbmltYXRpb25GcmFtZSBhcyAoKGhhbmRsZTogbnVtYmVyKSA9PiB2b2lkKVxyXG5cdGVsc2UgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihoYW5kbGU6IG51bWJlcil7XHJcblx0XHRjbGVhclRpbWVvdXQoaGFuZGxlKTtcclxuXHR9O1xyXG5cdGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHdpbmRvdyl7XHJcblx0XHRpZiAoIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XHJcblx0XHRpZiAoIXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSkgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gY2FuY2VsQW5pbWF0aW9uRnJhbWU7XHJcblx0fVxyXG5cdHJldHVybiBbcmVxdWVzdEFuaW1hdGlvbkZyYW1lLCBjYW5jZWxBbmltYXRpb25GcmFtZV07XHJcbn0pKCk7IiwiaW1wb3J0IHsgVEVhc2luZ0Z1bmN0aW9uIH0gZnJvbSAnLi9fdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VMaW5lYXI6VEVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gY2hhbmdlICogdGltZSAvIGR1cmF0aW9uICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluUXVhZDpURWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiBjaGFuZ2UgKiAodGltZSAvPSBkdXJhdGlvbikgKiB0aW1lICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZU91dFF1YWQ6VEVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gLWNoYW5nZSAqICh0aW1lIC89IGR1cmF0aW9uKSAqICh0aW1lIC0gMikgKyBiZWdpbjtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5PdXRRdWFkOlRFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24gLyAyKSA8IDEpIHJldHVybiBjaGFuZ2UgLyAyICogdGltZSAqIHRpbWUgKyBiZWdpbjtcclxuXHRyZXR1cm4gLWNoYW5nZSAvIDIgKiAoKC0tdGltZSkgKiAodGltZSAtIDIpIC0gMSkgKyBiZWdpbjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5TaW5lOlRFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IC1jaGFuZ2UgKiBNYXRoLmNvcyh0aW1lIC8gZHVyYXRpb24gKiAoTWF0aC5QSSAvIDIpKSArIGNoYW5nZSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VPdXRTaW5lOlRFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IGNoYW5nZSAqIE1hdGguc2luKHRpbWUgLyBkdXJhdGlvbiAqIChNYXRoLlBJIC8gMikpICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluT3V0U2luZTpURWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiAtY2hhbmdlIC8gMiAqIChNYXRoLmNvcyhNYXRoLlBJICogdGltZSAvIGR1cmF0aW9uKSAtIDEpICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluRXhwbzpURWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiAodGltZSA9PT0gMCkgPyBiZWdpbiA6IGNoYW5nZSAqIE1hdGgucG93KDIsIDEwICogKHRpbWUgLyBkdXJhdGlvbiAtIDEpKSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VPdXRFeHBvOlRFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+ICh0aW1lID09PSBkdXJhdGlvbikgPyBiZWdpbiArIGNoYW5nZSA6IGNoYW5nZSAqICgtTWF0aC5wb3coMiwgLTEwICogdGltZSAvIGR1cmF0aW9uKSArIDEpICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluT3V0RXhwbzpURWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0aWYgKHRpbWUgPT09IDApIHJldHVybiBiZWdpbjtcclxuXHRpZiAodGltZSA9PT0gZHVyYXRpb24pIHJldHVybiBiZWdpbiArIGNoYW5nZTtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24gLyAyKSA8IDEpIHJldHVybiBjaGFuZ2UgLyAyICogTWF0aC5wb3coMiwgMTAgKiAodGltZSAtIDEpKSArIGJlZ2luO1xyXG5cdHJldHVybiBjaGFuZ2UgLyAyICogKC1NYXRoLnBvdygyLCAtMTAgKiAtLXRpbWUpICsgMikgKyBiZWdpbjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5DaXJjOlRFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IC1jaGFuZ2UgKiAoTWF0aC5zcXJ0KDEgLSAodGltZSAvPSBkdXJhdGlvbikgKiB0aW1lKSAtIDEpICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZU91dENpcmM6VEVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gY2hhbmdlICogTWF0aC5zcXJ0KDEgLSAodGltZSA9IHRpbWUgLyBkdXJhdGlvbiAtIDEpICogdGltZSkgKyBiZWdpbjtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5PdXRDaXJjOlRFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24gLyAyKSA8IDEpIHJldHVybiAtY2hhbmdlIC8gMiAqIChNYXRoLnNxcnQoMSAtIHRpbWUgKiB0aW1lKSAtIDEpICsgYmVnaW47XHJcblx0cmV0dXJuIGNoYW5nZSAvIDIgKiAoTWF0aC5zcXJ0KDEgLSAodGltZSAtPSAyKSAqIHRpbWUpICsgMSkgKyBiZWdpbjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5DdWJpYzpURWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiBjaGFuZ2UgKiAodGltZSAvPSBkdXJhdGlvbikgKiB0aW1lICogdGltZSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VPdXRDdWJpYzpURWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiBjaGFuZ2UgKiAoKHRpbWUgPSB0aW1lIC8gZHVyYXRpb24gLSAxKSAqIHRpbWUgKiB0aW1lICsgMSkgKyBiZWdpbjtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5PdXRDdWJpYzpURWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0aWYgKCh0aW1lIC89IGR1cmF0aW9uIC8gMikgPCAxKSByZXR1cm4gY2hhbmdlIC8gMiAqIHRpbWUgKiB0aW1lICogdGltZSArIGJlZ2luO1xyXG5cdHJldHVybiBjaGFuZ2UgLyAyICogKCh0aW1lIC09IDIpICogdGltZSAqIHRpbWUgKyAyKSArIGJlZ2luO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJblF1YXJ0OlRFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IGNoYW5nZSAqICh0aW1lIC89IGR1cmF0aW9uKSAqIHRpbWUgKiB0aW1lICogdGltZSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VPdXRRdWFydDpURWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiAtY2hhbmdlICogKCh0aW1lID0gdGltZSAvIGR1cmF0aW9uIC0gMSkgKiB0aW1lICogdGltZSAqIHRpbWUgLSAxKSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJbk91dFF1YXJ0OlRFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24gLyAyKSA8IDEpIHJldHVybiBjaGFuZ2UgLyAyICogdGltZSAqIHRpbWUgKiB0aW1lICogdGltZSArIGJlZ2luO1xyXG5cdHJldHVybiAtY2hhbmdlIC8gMiAqICgodGltZSAtPSAyKSAqIHRpbWUgKiB0aW1lICogdGltZSAtIDIpICsgYmVnaW47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluUXVpbnQ6VEVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gY2hhbmdlICogKHRpbWUgLz0gZHVyYXRpb24pICogdGltZSAqIHRpbWUgKiB0aW1lICogdGltZSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VPdXRRdWludDpURWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiBjaGFuZ2UgKiAoKHRpbWUgPSB0aW1lIC8gZHVyYXRpb24gLSAxKSAqIHRpbWUgKiB0aW1lICogdGltZSAqIHRpbWUgKyAxKSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJbk91dFF1aW50OlRFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24gLyAyKSA8IDEpIHJldHVybiBjaGFuZ2UgLyAyICogdGltZSAqIHRpbWUgKiB0aW1lICogdGltZSAqIHRpbWUgKyBiZWdpbjtcclxuXHRyZXR1cm4gY2hhbmdlIC8gMiAqICgodGltZSAtPSAyKSAqIHRpbWUgKiB0aW1lICogdGltZSAqIHRpbWUgKyAyKSArIGJlZ2luO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJbkVsYXN0aWM6VEVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4ge1xyXG5cdGxldCBzID0gMS43MDE1ODtcclxuXHRsZXQgcCA9IDA7XHJcblx0bGV0IGEgPSBjaGFuZ2U7XHJcblx0aWYgKHRpbWUgPT09IDApIHJldHVybiBiZWdpbjtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24pID09PSAxKSByZXR1cm4gYmVnaW4gKyBjaGFuZ2U7XHJcblx0aWYgKCFwKSBwID0gZHVyYXRpb24gKiAuMztcclxuXHRpZiAoYSA8IE1hdGguYWJzKGNoYW5nZSkpe1xyXG5cdFx0YSA9IGNoYW5nZTtcclxuXHRcdHMgPSBwIC8gNDtcclxuXHR9XHJcblx0ZWxzZSBzID0gcCAvICgyICogTWF0aC5QSSkgKiBNYXRoLmFzaW4oY2hhbmdlIC8gYSk7XHJcblx0cmV0dXJuIC0oYSAqIE1hdGgucG93KDIsIDEwICogKHRpbWUgLT0gMSkpICogTWF0aC5zaW4oKHRpbWUgKiBkdXJhdGlvbiAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApKSArIGJlZ2luO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VPdXRFbGFzdGljOlRFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRsZXQgcyA9IDEuNzAxNTg7XHJcblx0bGV0IHAgPSAwO1xyXG5cdGxldCBhID0gY2hhbmdlO1xyXG5cdGlmICh0aW1lID09PSAwKSByZXR1cm4gYmVnaW47XHJcblx0aWYgKCh0aW1lIC89IGR1cmF0aW9uKSA9PT0gMSkgcmV0dXJuIGJlZ2luICsgY2hhbmdlO1xyXG5cdGlmICghcCkgcCA9IGR1cmF0aW9uICogLjM7XHJcblx0aWYgKGEgPCBNYXRoLmFicyhjaGFuZ2UpKSB7XHJcblx0XHRhID0gY2hhbmdlO1xyXG5cdFx0cyA9IHAgLyA0O1xyXG5cdH1cclxuXHRlbHNlIHMgPSBwIC8gKDIgKiBNYXRoLlBJKSAqIE1hdGguYXNpbihjaGFuZ2UgLyBhKTtcclxuXHRyZXR1cm4gYSAqIE1hdGgucG93KDIsIC0xMCAqIHRpbWUpICogTWF0aC5zaW4oKHRpbWUgKiBkdXJhdGlvbiAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICsgY2hhbmdlICsgYmVnaW47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluT3V0RWxhc3RpYzpURWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0bGV0IHMgPSAxLjcwMTU4O1xyXG5cdGxldCBwID0gMDtcclxuXHRsZXQgYSA9IGNoYW5nZTtcclxuXHRpZiAodGltZSA9PT0gMCkgcmV0dXJuIGJlZ2luO1xyXG5cdGlmICgodGltZSAvPSBkdXJhdGlvbiAvIDIpID09PSAyKSByZXR1cm4gYmVnaW4gKyBjaGFuZ2U7XHJcblx0aWYgKCFwKSBwID0gZHVyYXRpb24gKiAoLjMgKiAxLjUpO1xyXG5cdGlmIChhIDwgTWF0aC5hYnMoY2hhbmdlKSkge1xyXG5cdFx0YSA9IGNoYW5nZTtcclxuXHRcdHMgPSBwIC8gNDtcclxuXHR9XHJcblx0ZWxzZSBzID0gcCAvICgyICogTWF0aC5QSSkgKiBNYXRoLmFzaW4oY2hhbmdlIC8gYSk7XHJcblx0aWYgKHRpbWUgPCAxKSByZXR1cm4gLS41ICogKGEgKiBNYXRoLnBvdygyLCAxMCAqICh0aW1lIC09IDEpKSAqIE1hdGguc2luKCh0aW1lICogZHVyYXRpb24gLSBzKSAqICgyICogTWF0aC5QSSkgLyBwKSkgKyBiZWdpbjtcclxuXHRyZXR1cm4gYSAqIE1hdGgucG93KDIsIC0xMCAqICh0aW1lIC09IDEpKSAqIE1hdGguc2luKCh0aW1lICogZHVyYXRpb24gLSBzKSAqICgyICogTWF0aC5QSSkgLyBwKSAqIC41ICsgY2hhbmdlICsgYmVnaW47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluQmFjazpURWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0bGV0IHM7XHJcblx0aWYgKHMgPT09IHVuZGVmaW5lZCkgcyA9IDEuNzAxNTg7XHJcblx0cmV0dXJuIGNoYW5nZSAqICh0aW1lIC89IGR1cmF0aW9uKSAqIHRpbWUgKiAoKHMgKyAxKSAqIHRpbWUgLSBzKSArIGJlZ2luO1xyXG59OyIsImltcG9ydCB7IFRFYXNpbmdzIH0gZnJvbSAnLi9fdHlwZXMnO1xyXG5pbXBvcnQgKiBhcyBBbGxFYXNpbmdzIGZyb20gJy4vX2Vhc2luZ19mdW5jdGlvbnMnO1xyXG5leHBvcnQgY29uc3QgRWFzaW5nczogVEVhc2luZ3MgPSB7Li4uQWxsRWFzaW5nc307IiwiZXhwb3J0ICogZnJvbSAnLi9fdHlwZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL19lYXNpbmdzJzsiLCJleHBvcnQgKiBmcm9tICcuL2Vhc2luZ3MnO1xyXG5leHBvcnQgKiBmcm9tICcuL19wb2x5ZmlsbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX3R5cGVzJztcclxuZXhwb3J0ICogZnJvbSAnLi9fYW5pbWF0ZSc7IiwiaW1wb3J0IHsgX2lzRGF0ZSB9IGZyb20gJy4uL3V0aWxzL19kYXRldGltZSc7XHJcbmltcG9ydCB7IF9yb3VuZCB9IGZyb20gJy4uL3V0aWxzL19udW1iZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVsYXBzZWRUaW1lXHJcbntcclxuXHQvL3Byb3BzXHJcblx0c3RhcnRfdGltZTogRGF0ZXx1bmRlZmluZWQ7XHJcblx0c3RvcF90aW1lOiBEYXRlfHVuZGVmaW5lZDtcclxuXHRfbXM6IG51bWJlcnx1bmRlZmluZWQ7XHJcblx0XHJcblx0LyoqXHJcblx0ICogTmV3IGluc3RhbmNlXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IoKXtcclxuXHRcdHRoaXMuc3RhcnRfdGltZSA9IG5ldyBEYXRlKCk7XHJcblx0XHR0aGlzLnN0b3BfdGltZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX21zID0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU3RhcnQgdGltZSB0cmFja2luZyAoc2V0cyBzdGFydF90aW1lIHRvIG5vdyBhbmQgcmVzZXRzIG90aGVyIHByb3BlcnRpZXMpXHJcblx0ICovXHJcblx0c3RhcnQoKTogRWxhcHNlZFRpbWUge1xyXG5cdFx0Y29uc3QgX25vdyA9IG5ldyBEYXRlKCk7XHJcblx0XHR0aGlzLnN0YXJ0X3RpbWUgPSBfaXNEYXRlKHRoaXMuc3RhcnRfdGltZSkgPyB0aGlzLnN0YXJ0X3RpbWUgOiBfbm93O1xyXG5cdFx0dGhpcy5zdG9wX3RpbWUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLl9tcyA9IHVuZGVmaW5lZDtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVHJhY2sgY3VycmVudCB0aW1lIChzZXRzIHRoaXMuX21zIHRvIHRpbWUgZGlmZmVyZW5jZSBiZXR3ZWVuIGxhc3Qgc3RhcnQgYW5kIG5vdylcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdXBkYXRlU3RhcnQgIFNldCBzdGFydCB0byBub3dcclxuXHQgKi9cclxuXHRub3codXBkYXRlU3RhcnQ6IGJvb2xlYW4gPSBmYWxzZSk6IEVsYXBzZWRUaW1lIHtcclxuXHRcdGNvbnN0IF9ub3cgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0Y29uc3QgX3N0YXJ0OiBhbnkgPSBfaXNEYXRlKHRoaXMuc3RhcnRfdGltZSkgPyB0aGlzLnN0YXJ0X3RpbWUgOiB0aGlzLnN0YXJ0X3RpbWUgPSBfbm93O1xyXG5cdFx0dGhpcy5fbXMgPSBfbm93LmdldFRpbWUoKSAtIF9zdGFydC5nZXRUaW1lKCk7XHJcblx0XHRpZiAodXBkYXRlU3RhcnQpIHRoaXMuc3RhcnRfdGltZSA9IF9ub3c7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN0b3AgdGltZSB0cmFja2luZyAoc2V0cyB0aGlzLl9tcyB0byB0aW1lIGRpZmZlcmVuY2UgYmV0d2VlbiBsYXN0IHN0YXJ0IGFuZCBsYXN0IHN0b3ApXHJcblx0ICogSWYgbGFzdCBzdG9wIGlzIGxlc3MgdGhhbiBzdGFydCB0aW1lLCBzdG9wIHRpbWUgaXMgdXBkYXRlZCB0byBub3cuXHJcblx0ICovXHJcblx0c3RvcCgpOiBFbGFwc2VkVGltZSB7XHJcblx0XHRjb25zdCBfbm93ID0gbmV3IERhdGUoKTtcclxuXHRcdGNvbnN0IF9zdGFydDogYW55ID0gX2lzRGF0ZSh0aGlzLnN0YXJ0X3RpbWUpID8gdGhpcy5zdGFydF90aW1lIDogX25vdywgdCA9IF9zdGFydC5nZXRUaW1lKCk7XHJcblx0XHRjb25zdCBfc3RvcF90aW1lOiBhbnkgPSB0aGlzLnN0b3BfdGltZTtcclxuXHRcdGNvbnN0IF9zdG9wID0gX2lzRGF0ZShfc3RvcF90aW1lKSAmJiBfc3RvcF90aW1lLmdldFRpbWUoKSA+PSB0ID8gX3N0b3BfdGltZSA6IHRoaXMuc3RvcF90aW1lID0gX25vdztcclxuXHRcdHRoaXMuX21zID0gX3N0b3AuZ2V0VGltZSgpIC0gdDtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogV2hldGhlciB0aW1lIHRyYWNraW5nIHdhcyBzdGFydGVkXHJcblx0ICovXHJcblx0c3RhcnRlZCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBfaXNEYXRlKHRoaXMuc3RhcnRfdGltZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBXaGV0aGVyIHRpbWUgdHJhY2tpbmcgd2FzIHN0b3BwZWRcclxuXHQgKi9cclxuXHRzdG9wcGVkKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIF9pc0RhdGUodGhpcy5zdG9wX3RpbWUpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHRyYWNrZWQgZWxhcHNlZCB0aW1lIGluIG1pbGxpc2Vjb25kc1xyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIG1pbGxpc2Vjb25kc1xyXG5cdCAqL1xyXG5cdG1zKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gcGFyc2VJbnQodGhpcy5fbXMgYXMgYW55KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0cmFja2VkIGVsYXBzZWQgdGltZSBpbiBzZWNvbmRzXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGRlY2ltYWxQbGFjZXNcclxuXHQgKiBAcmV0dXJucyBzZWNvbmRzXHJcblx0ICovXHJcblx0c2VjKGRlY2ltYWxQbGFjZXM6IG51bWJlciA9IDMpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIF9yb3VuZCh0aGlzLm1zKCkvMTAwMCwgZGVjaW1hbFBsYWNlcyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdHJhY2tlZCBlbGFwc2VkIHRpbWUgaW4gbWludXRlc1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBkZWNpbWFsUGxhY2VzXHJcblx0ICogQHJldHVybnMgbWludXRlc1xyXG5cdCAqL1xyXG5cdG1pbihkZWNpbWFsUGxhY2VzOiBudW1iZXIgPSAzKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBfcm91bmQodGhpcy5tcygpLzYwMDAwLCBkZWNpbWFsUGxhY2VzKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0cmFja2luZyBkYXRhICh0aGlzIHdpbGwgc3RvcCB0cmFja2luZylcclxuXHQgKi9cclxuXHRkYXRhKCk6IHtzdGFydF90aW1lOiBEYXRlfHVuZGVmaW5lZDsgc3RvcF90aW1lOiBEYXRlfHVuZGVmaW5lZDsgZWxhcHNlZF9tczogbnVtYmVyO317XHJcblx0XHR0aGlzLnN0b3AoKTtcclxuXHRcdGNvbnN0IHN0YXJ0X3RpbWUgPSBfaXNEYXRlKHRoaXMuc3RhcnRfdGltZSkgPyB0aGlzLnN0YXJ0X3RpbWUgOiB1bmRlZmluZWQ7XHJcblx0XHRjb25zdCBzdG9wX3RpbWUgPSBfaXNEYXRlKHRoaXMuc3RvcF90aW1lKSA/IHRoaXMuc3RvcF90aW1lIDogdW5kZWZpbmVkO1xyXG5cdFx0Y29uc3QgZWxhcHNlZF9tcyA9IHRoaXMubXMoKTtcclxuXHRcdHJldHVybiB7c3RhcnRfdGltZSwgc3RvcF90aW1lLCBlbGFwc2VkX21zfTtcclxuXHR9XHJcbn0iLCJleHBvcnQgKiBmcm9tICcuL19FbGFwc2VkVGltZSc7IiwiLyoqXHJcbiAqIEVtaXR0ZWQgZXZlbnQgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudDxUID0gYW55PiB7XHJcblx0dHlwZTogc3RyaW5nO1xyXG5cdHRpbWU6IG51bWJlcjtcclxuXHRkYXRhOiBUO1xyXG59XHJcblxyXG4vKipcclxuICogRGVmYXVsdCBtYXggbGlzdGVuZXIgY291bnRcclxuICovXHJcbmxldCBERUZBVUxUX01BWF9MSVNURU5FUlM6IG51bWJlciA9IDEwO1xyXG5cclxuLyoqXHJcbiAqIFByaXZhdGUgcHJvcHMgYFN5bWJvbGAga2V5IG5hbWVcclxuICovXHJcbmNvbnN0IFBST1BTID0gU3ltYm9sKGBfX3ByaXZhdGVfcHJvcHNfJHtEYXRlLm5vdygpfV9fYCk7XHJcblxyXG4vKipcclxuICogQGNsYXNzIEV2ZW50RW1pdHRlclxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEV2ZW50RW1pdHRlclxyXG57XHJcblx0LyoqXHJcblx0ICogRXZlbnRFbWl0dGVyIGdsb2JhbCBtYXggbGlzdGVuZXJzXHJcblx0ICogLSB3YXJucyBpZiBleGNlZWRlZCAoaGVscHMgZmluZCBtZW1vcnkgbGVha3MpXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBtYXhfbGlzdGVuZXJzKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gREVGQVVMVF9NQVhfTElTVEVORVJTO1xyXG5cdH1cclxuXHRzdGF0aWMgc2V0IG1heF9saXN0ZW5lcnModmFsdWU6IGFueSl7XHJcblx0XHRERUZBVUxUX01BWF9MSVNURU5FUlMgPSAhaXNOYU4odmFsdWUgPSBwYXJzZUludCh2YWx1ZSkpICYmIE51bWJlci5pc0ludGVnZXIodmFsdWUpICYmIHZhbHVlID49IDEgPyB2YWx1ZSA6IDEwO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSW5zdGFuY2UgXCJwcml2YXRlXCIgcHJvcHNcclxuXHQgKi9cclxuXHRbUFJPUFNdOiB7XHJcblx0XHRfZXZlbnRzOiB7W3R5cGU6IHN0cmluZ106IGFueX07XHJcblx0XHRfbWF4X2xpc3RlbmVyczogbnVtYmVyfHVuZGVmaW5lZDtcclxuXHR9ID0ge30gYXMgYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBNYXggbGlzdGVuZXJzIGNvdW50IChkZWZhdWx0OiBgdW5kZWZpZW5kYCB+IGBFdmVudEVtaXR0ZXIubWF4X2xpc3RlbmVyc2ApXHJcblx0ICogLSBBY2NlcHRzIHBvc2l0aXZlIGludGVnZXIgYG51bWJlcmBcclxuXHQgKiAtIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWRcclxuXHQgKi9cclxuXHRnZXQgbWF4X2xpc3RlbmVycygpOiBudW1iZXJ8dW5kZWZpbmVkIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5fbWF4X2xpc3RlbmVycztcclxuXHR9XHJcblx0c2V0IG1heF9saXN0ZW5lcnModmFsdWU6IGFueSl7XHJcblx0XHR0aGlzW1BST1BTXS5fbWF4X2xpc3RlbmVycyA9ICFpc05hTih2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKSkgJiYgTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPj0gMCA/IHZhbHVlIDogRXZlbnRFbWl0dGVyLm1heF9saXN0ZW5lcnM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGUgbmV3IGluc3RhbmNlXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IoKXtcclxuXHRcdHRoaXNbUFJPUFNdID0ge1xyXG5cdFx0XHRfZXZlbnRzOiB7fSxcclxuXHRcdFx0X21heF9saXN0ZW5lcnM6IHVuZGVmaW5lZCxcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdmFsaWQgZXZlbnQgdHlwZVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0eXBlIC0gZXZlbnQgdHlwZS9uYW1lXHJcblx0ICogQHBhcmFtIHRocm93YWJsZSAtIGVuYWJsZSB0aHJvd2luZyBlcnJvciB3aGVuIHR5cGUgaXMgaW52YWxpZFxyXG5cdCAqIEByZXR1cm5zIGBzdHJpbmdgIGxvd2VyY2FzZSBldmVudCBuYW1lIH4gYCcnYCBvbiBlcnJvclxyXG5cdCAqL1xyXG5cdHN0YXRpYyB0eXBlKHR5cGU6IGFueSwgdGhyb3dhYmxlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG5cdFx0bGV0IF90eXBlOiBzdHJpbmcgPSAnJztcclxuXHRcdGlmICghKCdzdHJpbmcnID09PSB0eXBlb2YgdHlwZSAmJiAoX3R5cGUgPSB0eXBlLnRyaW0oKSkpKXtcclxuXHRcdFx0Y29uc3QgZXJyb3IgPSAnSW52YWxpZCBldmVudCB0eXBlLic7XHJcblx0XHRcdGNvbnNvbGUud2FybihlcnJvciwge3R5cGV9KTtcclxuXHRcdFx0aWYgKHRocm93YWJsZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihlcnJvcik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gX3R5cGU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdmFsaWQgZXZlbnQgbGlzdGVuZXIgY2FsbGJhY2sgZnVuY3Rpb24uXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGxpc3RlbmVyIC0gZXZlbnQgbGlzdGVuZXJcclxuXHQgKiBAcGFyYW0gdGhyb3dhYmxlIC0gZW5hYmxlIHRocm93aW5nIGVycm9yIHdoZW4gbGlzdGVuZXIgaXMgaW52YWxpZCBcclxuXHQgKiBAcmV0dXJucyBgKGV2ZW50OklFdmVudCk9PnZvaWRgIGV2ZW50IGhhbmRsZXIgfCBgdW5kZWZpbmVkYCBvbiBlcnJvclxyXG5cdCAqL1xyXG5cdHN0YXRpYyBsaXN0ZW5lcihsaXN0ZW5lcjogKGV2ZW50OklFdmVudCk9PnZvaWQsIHRocm93YWJsZTogYm9vbGVhbiA9IGZhbHNlKTogKChldmVudDpJRXZlbnQpPT52b2lkKXx1bmRlZmluZWQge1xyXG5cdFx0bGV0IF9saXN0ZW5lcjogKChldmVudDpJRXZlbnQpPT52b2lkKXx1bmRlZmluZWQ7XHJcblx0XHRpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVyKSBfbGlzdGVuZXIgPSBsaXN0ZW5lcjtcclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRjb25zdCBlcnJvciA9ICdJbnZhbGlkIGV2ZW50IGxpc3RlbmVyIGNhbGxiYWNrIGZ1bmN0aW9uLic7XHJcblx0XHRcdGNvbnNvbGUud2FybihlcnJvciwge2xpc3RlbmVyfSk7XHJcblx0XHRcdGlmICh0aHJvd2FibGUpIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyb3IpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIF9saXN0ZW5lcjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBldmVudCBsaXN0ZW5lcnNcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdHlwZSAtIGV2ZW50IHR5cGUvbmFtZVxyXG5cdCAqIEByZXR1cm5zIGAoKGV2ZW50OklFdmVudCk9PnZvaWQpW11gIGV2ZW50IGhhbmRsZXJzXHJcblx0ICovXHJcblx0bGlzdGVuZXJzKHR5cGU6IHN0cmluZyk6ICgoZXZlbnQ6SUV2ZW50KT0+dm9pZClbXSB7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdLCBsaXN0ZW5lcnM6ICgoZXZlbnQ6SUV2ZW50KT0+dm9pZClbXSA9IFtdO1xyXG5cdFx0aWYgKCh0eXBlID0gRXZlbnRFbWl0dGVyLnR5cGUodHlwZSkpICYmIHByb3BzLl9ldmVudHMuaGFzT3duUHJvcGVydHkodHlwZSkpe1xyXG5cdFx0XHRjb25zdCBsaXN0ZW5lcjogYW55ID0gcHJvcHMuX2V2ZW50c1t0eXBlXTtcclxuXHRcdFx0aWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBsaXN0ZW5lcikgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xyXG5cdFx0XHRlbHNlIGlmIChBcnJheS5pc0FycmF5KGxpc3RlbmVyKSAmJiBsaXN0ZW5lci5sZW5ndGgpe1xyXG5cdFx0XHRcdGZvciAoY29uc3QgdmFsIG9mIGxpc3RlbmVyKXtcclxuXHRcdFx0XHRcdGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgdmFsKSBsaXN0ZW5lcnMucHVzaCh2YWwpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGxpc3RlbmVycztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIGV2ZW50IGxpc3RlbmVyIGV4aXN0c1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0eXBlIC0gZXZlbnQgdHlwZS9uYW1lXHJcblx0ICogQHBhcmFtIGxpc3RlbmVyIC0gZXZlbnQgbGlzdGVuZXJcclxuXHQgKiBAcmV0dXJucyBgKChldmVudDpJRXZlbnQpPT52b2lkKVtdYCBldmVudCBoYW5kbGVyc1xyXG5cdCAqL1xyXG5cdGhhc0xpc3RlbmVyKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDpJRXZlbnQpPT52b2lkKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5saXN0ZW5lcnModHlwZSkuZmluZEluZGV4KHYgPT4gdiA9PT0gbGlzdGVuZXIpID4gLTE7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBFbWl0IGV2ZW50XHJcblx0ICogXHJcblx0ICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlL25hbWVcclxuXHQgKiBAcGFyYW0gZGF0YSAtIGV2ZW50IGRhdGFcclxuXHQgKiBAcmV0dXJucyBgYm9vbGVhbmAgY2F1Z2h0XHJcblx0ICovXHJcblx0ZW1pdCh0eXBlOiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IGV2ZW50ID0ge3R5cGUsIGRhdGEsIHRpbWU6IERhdGUubm93KCl9O1xyXG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnModHlwZSA9IEV2ZW50RW1pdHRlci50eXBlKHR5cGUsIHRydWUpKTtcclxuXHRcdGlmIChsaXN0ZW5lcnMubGVuZ3RoKXtcclxuXHRcdFx0Zm9yIChjb25zdCBmbiBvZiBsaXN0ZW5lcnMpIGZuLmNhbGwodGhpcywgZXZlbnQpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKHR5cGUgPT09ICdlcnJvcicpe1xyXG5cdFx0XHRpZiAoZGF0YSBpbnN0YW5jZW9mIEVycm9yKSB0aHJvdyBkYXRhO1xyXG5cdFx0XHRjb25zdCBlcnJvciA9ICdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50Lic7XHJcblx0XHRcdGNvbnNvbGUud2FybihlcnJvciwge2V2ZW50fSk7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvcik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgZXZlbnQgbGlzdGVuZXIgfiBlbWl0cyAnbmV3TGlzdGVuZXInIGV2ZW50IGlmIGFkZGVkIChhbGlhcyBgZW1pdHRlci5hZGRMaXN0ZW5lcmApXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlL25hbWVcclxuXHQgKiBAcGFyYW0gbGlzdGVuZXIgLSBldmVudCBsaXN0ZW5lciBjYWxsYmFjayBmdW5jdGlvblxyXG5cdCAqIEBwYXJhbSBvbmNlIC0gb25lIHRpbWUgY2FsbGJhY2tcclxuXHQgKiBAcmV0dXJucyBgRXZlbnRFbWl0dGVyYCAtIGB0aGlzYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdG9uKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDpJRXZlbnQpPT52b2lkLCBvbmNlOiBib29sZWFuID0gZmFsc2UpOiBFdmVudEVtaXR0ZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9uY2UpO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBBZGQgb25lIHRpbWUgZXZlbnQgbGlzdGVuZXIgfiBlbWl0cyAnbmV3TGlzdGVuZXInIGV2ZW50IGlmIGFkZGVkXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlL25hbWVcclxuXHQgKiBAcGFyYW0gbGlzdGVuZXIgLSBldmVudCBsaXN0ZW5lciBjYWxsYmFjayBmdW5jdGlvblxyXG5cdCAqIEByZXR1cm5zIGBFdmVudEVtaXR0ZXJgIC0gYHRoaXNgIGluc3RhbmNlXHJcblx0ICovXHJcblx0b25jZSh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6SUV2ZW50KT0+dm9pZCk6IEV2ZW50RW1pdHRlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgZXZlbnQgc3Vic2NyaWJlclxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0eXBlIC0gZXZlbnQgdHlwZS9uYW1lXHJcblx0ICogQHBhcmFtIGxpc3RlbmVyIC0gZXZlbnQgY2FsbGJhY2sgaGFuZGxlclxyXG5cdCAqIEByZXR1cm5zIGAoKCk9PnZvaWQpYCB1bnN1YnNjcmliZSBjYWxsYmFja1xyXG5cdCAqL1xyXG5cdHN1YnNjcmliZSh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6SUV2ZW50KT0+dm9pZCk6ICgpPT52b2lkIHtcclxuXHRcdHR5cGUgPSBFdmVudEVtaXR0ZXIudHlwZSh0eXBlLCB0cnVlKTtcclxuXHRcdGxpc3RlbmVyID0gRXZlbnRFbWl0dGVyLmxpc3RlbmVyKGxpc3RlbmVyLCB0cnVlKSBhcyAoZXZlbnQ6SUV2ZW50KT0+dm9pZDtcclxuXHRcdHRoaXMuYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpO1xyXG5cdFx0cmV0dXJuICgpOiB2b2lkID0+IHZvaWQgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgZXZlbnQgbGlzdGVuZXIgfiBlbWl0cyAnbmV3TGlzdGVuZXInIGV2ZW50IGlmIGFkZGVkXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlL25hbWVcclxuXHQgKiBAcGFyYW0gbGlzdGVuZXIgLSBldmVudCBsaXN0ZW5lciBjYWxsYmFjayBmdW5jdGlvblxyXG5cdCAqIEBwYXJhbSBvbmNlIC0gb25lIHRpbWUgY2FsbGJhY2tcclxuXHQgKiBAcmV0dXJucyBgRXZlbnRFbWl0dGVyYCAtIGB0aGlzYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdGFkZExpc3RlbmVyKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDpJRXZlbnQpPT52b2lkLCBvbmNlOiBib29sZWFuID0gZmFsc2UpOiBFdmVudEVtaXR0ZXIge1xyXG5cdFx0dHlwZSA9IEV2ZW50RW1pdHRlci50eXBlKHR5cGUsIHRydWUpO1xyXG5cdFx0bGV0IGhhbmRsZXIgPSAobGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIubGlzdGVuZXIobGlzdGVuZXIsIHRydWUpIGFzIChldmVudDpJRXZlbnQpPT52b2lkKTtcclxuXHJcblx0XHQvL29uZSB0aW1lIGxpc3RlbmVyXHJcblx0XHRpZiAob25jZSl7XHJcblx0XHRcdGxldCBmaXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0XHRoYW5kbGVyID0gKGV2ZW50OiBJRXZlbnQpOiB2b2lkID0+IHtcclxuXHRcdFx0XHRpZiAoZmlyZWQpIHJldHVybjtcclxuXHRcdFx0XHRmaXJlZCA9IHRydWU7XHJcblx0XHRcdFx0bGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCk7XHJcblx0XHRcdFx0dGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBoYW5kbGVyKTtcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0Ly9BZGQgZXZlbnQgbGlzdGVuZXIgaWYgbmV3XHJcblx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVycyh0eXBlKTtcclxuXHRcdGlmIChsaXN0ZW5lcnMuZmluZEluZGV4KHYgPT4gdiA9PT0gaGFuZGxlcikgPCAwKXtcclxuXHRcdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdFx0XHJcblx0XHRcdC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXHJcbiAgXHRcdC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cclxuXHRcdFx0aWYgKHByb3BzLl9ldmVudHMubmV3TGlzdGVuZXIpIHRoaXMuZW1pdCgnbmV3TGlzdGVuZXInLCB7dHlwZSwgaGFuZGxlcn0pO1xyXG5cclxuXHRcdFx0Ly8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBkb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXHJcblx0XHRcdHByb3BzLl9ldmVudHNbdHlwZV0gPSBsaXN0ZW5lcnMubGVuZ3RoID8gWy4uLmxpc3RlbmVycywgaGFuZGxlcl0gOiBoYW5kbGVyO1xyXG5cclxuXHRcdFx0Ly8gTWF4IGxpc3RlbmVycyBsZWFrIHdhcm5pbmdcclxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkocHJvcHMuX2V2ZW50c1t0eXBlXSkpe1xyXG5cdFx0XHRcdGNvbnN0IGxlbiA9IHByb3BzLl9ldmVudHNbdHlwZV0ubGVuZ3RoO1xyXG5cdFx0XHRcdGNvbnN0IG1heCA9ICdudW1iZXInID09PSB0eXBlb2YgcHJvcHMuX21heF9saXN0ZW5lcnMgPyBwcm9wcy5fbWF4X2xpc3RlbmVycyA6IEV2ZW50RW1pdHRlci5tYXhfbGlzdGVuZXJzO1xyXG5cdFx0XHRcdGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIG1heCAmJiBtYXggPiAwICYmIGxlbiA+IG1heCl7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGBFdmVudEVtaXR0ZXIgcG9zc2libGUgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQgLSAke2xlbn0gXCIke3R5cGV9XCIgZXZlbnQgbGlzdGVuZXJzIGFkZGVkLCBtYXggY291bnQgaXMgJHttYXh9LmApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0ZWxzZSBjb25zb2xlLndhcm4oYFRoaXMgXCIke3R5cGV9XCIgZXZlbnQgbGlzdGVuZXIgaXMgYWxyZWFkeSBhZGRlZC5gKTtcclxuXHRcdFxyXG5cdFx0Ly9yZXN1bHRcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlIGV2ZW50IGxpc3RlbmVyIH4gZW1pdHMgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiByZW1vdmVkXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlL25hbWVcclxuXHQgKiBAcGFyYW0gbGlzdGVuZXIgLSBldmVudCBsaXN0ZW5lciBjYWxsYmFjayBmdW5jdGlvblxyXG5cdCAqIEByZXR1cm5zIGBFdmVudEVtaXR0ZXJgIC0gYHRoaXNgIGluc3RhbmNlXHJcblx0ICovXHJcblx0cmVtb3ZlTGlzdGVuZXIodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OklFdmVudCk9PnZvaWQpOiBFdmVudEVtaXR0ZXIge1xyXG5cdFx0aWYgKCEodHlwZSA9IEV2ZW50RW1pdHRlci50eXBlKHR5cGUpKSkgcmV0dXJuIHRoaXM7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0aWYgKCEocHJvcHMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkpIHJldHVybiB0aGlzO1xyXG5cdFx0bGV0IHJlbW92ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KHByb3BzLl9ldmVudHNbdHlwZV0pKXtcclxuXHRcdFx0Y29uc3QgX2xpc3RlbmVycyA9IHByb3BzLl9ldmVudHNbdHlwZV0gYXMgKChldmVudDpJRXZlbnQpPT52b2lkKVtdO1xyXG5cdFx0XHRjb25zdCBpbmRleCA9IF9saXN0ZW5lcnMuZmluZEluZGV4KHYgPT4gdiA9PT0gbGlzdGVuZXIpO1xyXG5cdFx0XHRfbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XHJcblx0XHRcdHJlbW92ZWQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZiAocHJvcHMuX2V2ZW50c1t0eXBlXSA9PT0gbGlzdGVuZXIpe1xyXG5cdFx0XHRkZWxldGUgcHJvcHMuX2V2ZW50c1t0eXBlXTtcclxuXHRcdFx0cmVtb3ZlZCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAocmVtb3ZlZCl7XHJcblx0XHRcdGlmICghdGhpcy5saXN0ZW5lcnModHlwZSkubGVuZ3RoKSBkZWxldGUgcHJvcHMuX2V2ZW50c1t0eXBlXTtcclxuXHRcdFx0aWYgKHByb3BzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB7dHlwZSwgbGlzdGVuZXJ9KTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgfiBlbWl0cyAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGZvciBlYWNoIHJlbW92ZWQgbGlzdGVuZXJcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdHlwZSAtIGV2ZW50IHR5cGUvbmFtZSBcclxuXHQgKiBAcmV0dXJucyBgRXZlbnRFbWl0dGVyYCAtIGB0aGlzYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHJlbW92ZUFsbExpc3RlbmVycyh0eXBlOiBzdHJpbmcpOiBFdmVudEVtaXR0ZXIge1xyXG5cdFx0aWYgKCEodHlwZSA9IEV2ZW50RW1pdHRlci50eXBlKHR5cGUpKSkgcmV0dXJuIHRoaXM7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0aWYgKCEocHJvcHMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkpIHJldHVybiB0aGlzO1xyXG5cdFx0Y29uc3QgZW1pdF9yZW1vdmVfbGlzdGVuZXIgPSB0eXBlICE9PSAncmVtb3ZlTGlzdGVuZXInICYmIHByb3BzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXI7XHJcblx0XHRjb25zdCBsaXN0ZW5lcnMgPSBlbWl0X3JlbW92ZV9saXN0ZW5lciA/IHRoaXMubGlzdGVuZXJzKHR5cGUpIDogW107XHJcblx0XHRkZWxldGUgcHJvcHMuX2V2ZW50c1t0eXBlXTtcclxuXHRcdGlmIChlbWl0X3JlbW92ZV9saXN0ZW5lciAmJiBsaXN0ZW5lcnMubGVuZ3RoKXtcclxuXHRcdFx0Zm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMpIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB7dHlwZSwgbGlzdGVuZXJ9KTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxufSIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJy4vX0V2ZW50RW1pdHRlcic7XHJcblxyXG4vKipcclxuICogR2xvYmFsIGV2ZW50cyBlbWl0dGVyXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpOyIsImV4cG9ydCAqIGZyb20gJy4vX0V2ZW50RW1pdHRlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vX0V2ZW50cyc7IiwiLyoqXHJcbiAqIEV4Y2VwdGlvbiBlcnJvciBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUV4Y2VwdGlvbkVycm9yIHtcclxuXHRtZXNzYWdlOiBzdHJpbmc7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdGNvZGU6IHN0cmluZ3xudW1iZXI7XHJcblx0ZGF0YTogYW55O1xyXG5cdHRpbWU6IG51bWJlcjtcclxuXHR0b1N0cmluZzogKCkgPT4gc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogYFN5bWJvbGAgcHJpdmF0ZSBwcm9wcyBrZXkgbmFtZVxyXG4gKi9cclxuY29uc3QgUFJPUFMgPSBTeW1ib2woYF9fcHJpdmF0ZV9wcm9wc18ke0RhdGUubm93KCl9X19gKTtcclxuXHJcbi8qKlxyXG4gKiBgRXhjZXB0aW9uYCBleHRlbmRzIGBFcnJvcmAgfiBsaWtlIGBET01FeGNlcHRpb25gXHJcbiAqIFxyXG4gKiAtIG1lc3NhZ2U6IGBzdHJpbmdgXHJcbiAqIC0gbmFtZTogYHN0cmluZ2BcclxuICogLSBjb2RlOiBgbnVtYmVyYFxyXG4gKiAtIHRvU3RyaW5nOiBgKCk9PnN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjbGFzcyBFeGNlcHRpb24gZXh0ZW5kcyBFcnJvciBpbXBsZW1lbnRzIElFeGNlcHRpb25FcnJvclxyXG57XHJcblx0LyoqXHJcblx0ICogUHJpdmF0ZSBwcm9wc1xyXG5cdCAqL1xyXG5cdFtQUk9QU106IHtcclxuXHRcdG1lc3NhZ2U6IHN0cmluZztcclxuXHRcdG5hbWU6IHN0cmluZztcclxuXHRcdGNvZGU6IHN0cmluZ3xudW1iZXI7XHJcblx0XHRkYXRhOiBhbnk7XHJcblx0XHR0aW1lOiBudW1iZXI7XHJcblx0fSA9IHt9IGFzIGFueTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBFcnJvciBtZXNzYWdlIChkZWZhdWx0OiBgJ1Vuc3BlY2lmaWVkIGV4Y2VwdGlvbiBtZXNzYWdlLidgKVxyXG5cdCAqL1xyXG5cdGdldCBtZXNzYWdlKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10ubWVzc2FnZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEVycm9yIG5hbWUgKGRlZmF1bHQ6IGAnRXhjZXB0aW9uJ2ApXHJcblx0ICovXHJcblx0Z2V0IG5hbWUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5uYW1lO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRXJyb3IgY29kZSAtIGBzdHJpbmdgIHwgZmluaXRlL3BhcnNlZCBgaW50ZWdlcmAgKGRlZmF1bHQ6IGAwYClcclxuXHQgKi9cclxuXHRnZXQgY29kZSgpOiBzdHJpbmd8bnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5jb2RlO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBFcnJvciBkYXRhXHJcblx0ICovXHJcblx0Z2V0IGRhdGEoKTogYW55IHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5kYXRhO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBFcnJvciBkYXRhXHJcblx0ICovXHJcblx0Z2V0IHRpbWUoKTogYW55IHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS50aW1lO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTmV3IGBJRXhjZXB0aW9uRXJyb3JgIGluc3RhbmNlXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG1lc3NhZ2UgLSBlcnJvciBtZXNzYWdlIChkZWZhdWx0OiBgJ1Vuc3BlY2lmaWVkIGV4Y2VwdGlvbiBtZXNzYWdlLidgKVxyXG5cdCAqIEBwYXJhbSBuYW1lIC0gZXJyb3IgbmFtZSAoZGVmYXVsdDogYCdFeGNlcHRpb24nYClcclxuXHQgKiBAcGFyYW0gY29kZSAtIGVycm9yIGNvZGUgLSBgc3RyaW5nYCB8IGZpbml0ZS9wYXJzZWQgYGludGVnZXJgIChkZWZhdWx0OiBgMGApXHJcblx0ICogQHBhcmFtIGRhdGEgLSBlcnJvciBkYXRhXHJcblx0ICogQHBhcmFtIHRpbWUgLSBlcnJvciB0aW1lc3RhbXAgbWlsbGlzZWNvbmRzIChkZWZhdWx0OiBgRGF0ZS5ub3coKWApXHJcblx0ICogQHJldHVybnMgYElFeGNlcHRpb25FcnJvcmBcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBjb2RlPzogc3RyaW5nfG51bWJlciwgZGF0YT86IGFueSwgdGltZT86IG51bWJlcil7XHJcblx0XHRjb25zdCBfdGltZSA9IERhdGUubm93KCk7XHJcblx0XHRzdXBlcihtZXNzYWdlID0gbWVzc2FnZSAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIG1lc3NhZ2UgJiYgKG1lc3NhZ2UgPSBtZXNzYWdlLnRyaW0oKSkgPyBtZXNzYWdlIDogJ1Vuc3BlY2lmaWVkIGV4Y2VwdGlvbiBtZXNzYWdlLicpO1xyXG5cdFx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgY29kZSkgY29kZSA9IChjb2RlID0gY29kZS50cmltKCkpID8gY29kZSA6IDA7XHJcblx0XHRlbHNlIGlmICghKCdudW1iZXInID09PSB0eXBlb2YgY29kZSAmJiAhaXNOYU4oY29kZSA9IHBhcnNlSW50KGAke2NvZGV9YCkpICYmIE51bWJlci5pc0ludGVnZXIoY29kZSkgJiYgTnVtYmVyLmlzRmluaXRlKGNvZGUpKSkgY29kZSA9IDA7XHJcblx0XHR0aGlzW1BST1BTXSA9IHtcclxuXHRcdFx0bWVzc2FnZSxcclxuXHRcdFx0bmFtZTogbmFtZSAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIG5hbWUgJiYgKG5hbWUgPSBuYW1lLnRyaW0oKSkgPyBuYW1lIDogJ0V4Y2VwdGlvbicsXHJcblx0XHRcdGNvZGUsXHJcblx0XHRcdGRhdGEsXHJcblx0XHRcdHRpbWU6IHRpbWUgJiYgIWlzTmFOKHRpbWUgPSBwYXJzZUludCh0aW1lIGFzIGFueSkpICYmIE51bWJlci5pc0ludGVnZXIodGltZSkgJiYgTnVtYmVyLmlzRmluaXRlKHRpbWUpICYmIHRpbWUgPj0gMCA/IHRpbWUgOiBfdGltZSxcclxuXHRcdH07XHJcblx0fVxyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIEdldCBlcnJvciBgc3RyaW5nYFxyXG5cdCAqL1xyXG5cdHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcblx0XHRjb25zdCB7bWVzc2FnZSwgbmFtZSwgY29kZX0gPSB0aGlzO1xyXG5cdFx0bGV0IHRleHQgPSBuYW1lICsgJzonO1xyXG5cdFx0aWYgKGNvZGUgIT09IDApIHRleHQgKz0gJyBbJyArIGNvZGUgKyAnXSc7XHJcblx0XHR0ZXh0ICs9ICcgJyArIG1lc3NhZ2U7XHJcblx0XHRyZXR1cm4gdGV4dDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZSBuZXcgYEV4Y2VwdGlvbmBcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSAtIGVycm9yIG1lc3NhZ2UgKGRlZmF1bHQ6IGAnVW5zcGVjaWZpZWQgZXhjZXB0aW9uIG1lc3NhZ2UuJ2ApXHJcblx0ICogQHBhcmFtIG5hbWUgLSBlcnJvciBuYW1lIChkZWZhdWx0OiBgJ0V4Y2VwdGlvbidgKVxyXG5cdCAqIEBwYXJhbSBjb2RlIC0gZXJyb3IgY29kZSAtIGBzdHJpbmdgIHwgZmluaXRlL3BhcnNlZCBgaW50ZWdlcmAgKGRlZmF1bHQ6IGAwYClcclxuXHQgKiBAcGFyYW0gZGF0YSAtIGVycm9yIGRhdGFcclxuXHQgKiBAcGFyYW0gdGltZSAtIGVycm9yIHRpbWVzdGFtcCBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGBEYXRlLm5vdygpYClcclxuXHQgKiBAcmV0dXJucyBgSUV4Y2VwdGlvbkVycm9yYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBlcnJvcihtZXNzYWdlPzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBjb2RlPzogc3RyaW5nfG51bWJlciwgZGF0YT86IGFueSwgdGltZT86IG51bWJlcik6IElFeGNlcHRpb25FcnJvciB7XHJcblx0XHRyZXR1cm4gbmV3IEV4Y2VwdGlvbihtZXNzYWdlLCBuYW1lLCBjb2RlLCBkYXRhLCB0aW1lKTtcclxuXHR9XHJcblx0XHJcblx0LyoqXHJcblx0ICogQ3JlYXRlIG5ldyBgRXhjZXB0aW9uYCBmcm9tIHBhcnNlZCBlcnJvclxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBlcnJvciAtIHBhcnNlIGVycm9yIHZhbHVlIChpLmUuIGBzdHJpbmdgIG1lc3NhZ2Ugb3IgRXJyb3Ivb2JqZWN0L3ZhbHVlcyB7bWVzc2FnZTogYHN0cmluZ2AsIG5hbWU6IGBzdHJpbmd8dW5kZWZpbmVkYCwgY29kZTogYHN0cmluZ3xudW1iZXJ8dW5kZWZpbmVkYCwgZGF0YTogYGFueWAsIHRpbWU6IGBudW1iZXJgID8/IGBEYXRlLm5vdygpYH0pXHJcblx0ICogQHJldHVybnMgYElFeGNlcHRpb25FcnJvcmBcclxuXHQgKi9cclxuXHRzdGF0aWMgcGFyc2UoZXJyb3I/OiBhbnkpOiBJRXhjZXB0aW9uRXJyb3Ige1xyXG5cdFx0Y29uc3QgdGltZSA9IERhdGUubm93KCk7XHJcblx0XHRjb25zdCBfZXJyb3I6IHtcclxuXHRcdFx0bWVzc2FnZTogc3RyaW5nfHVuZGVmaW5lZCxcclxuXHRcdFx0bmFtZTogc3RyaW5nfHVuZGVmaW5lZCxcclxuXHRcdFx0Y29kZTogc3RyaW5nfG51bWJlcnx1bmRlZmluZWQsXHJcblx0XHRcdGRhdGE6IGFueXx1bmRlZmluZWQsXHJcblx0XHRcdHRpbWU6IG51bWJlcnx1bmRlZmluZWQsXHJcblx0XHR9ID0ge30gYXMgYW55O1xyXG5cdFx0Y29uc3QgX2dldF9zdHIgPSAodmFsOiBhbnkpOiBzdHJpbmd8dW5kZWZpbmVkID0+ICdzdHJpbmcnID09PSB0eXBlb2YgdmFsICYmICh2YWwgPSB2YWwudHJpbSgpKSA/IHZhbCA6IHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IF9nZXRfaW50ID0gKHZhbDogYW55KTogbnVtYmVyfHVuZGVmaW5lZCA9PiAhaXNOYU4odmFsID0gcGFyc2VJbnQodmFsKSkgJiYgTnVtYmVyLmlzSW50ZWdlcih2YWwpICYmIE51bWJlci5pc0Zpbml0ZSh2YWwpICYmIHZhbCA+PSAwID8gdmFsIDogdW5kZWZpbmVkO1xyXG5cdFx0Y29uc3QgX2dldF9jb2RlID0gKHZhbDogYW55KTogc3RyaW5nfG51bWJlcnx1bmRlZmluZWQgPT4ge1xyXG5cdFx0XHRsZXQgdG1wOiBzdHJpbmd8bnVtYmVyfHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHRcdFx0aWYgKCh0bXAgPSBfZ2V0X2ludCh2YWwpKSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdG1wO1xyXG5cdFx0XHRpZiAoKHRtcCA9IF9nZXRfc3RyKHZhbCkpICE9PSB1bmRlZmluZWQpIHJldHVybiB0bXA7XHJcblx0XHRcdHJldHVybiB0bXA7XHJcblx0XHR9O1xyXG5cdFx0aWYgKGVycm9yICYmICdvYmplY3QnID09PSB0eXBlb2YgZXJyb3Ipe1xyXG5cdFx0XHRsZXQgcGFyc2VkOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KGVycm9yKSl7XHJcblx0XHRcdFx0Y29uc3QgaXQgPSBlcnJvcltTeW1ib2wuaXRlcmF0b3JdO1xyXG5cdFx0XHRcdGlmIChbJ3ZhbHVlcycsICdlbnRyaWVzJ10uaW5jbHVkZXMoaXQ/Lm5hbWUpIHx8ICdmdW5jdGlvbicgPT09IHR5cGVvZiBpdCkgZXJyb3IgPSBbLi4uZXJyb3JdO1xyXG5cdFx0XHRcdGlmIChlcnJvci5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0X2Vycm9yLm1lc3NhZ2UgPSBfZ2V0X3N0cihlcnJvclswXSk7XHJcblx0XHRcdFx0XHRfZXJyb3IubmFtZSA9IF9nZXRfc3RyKGVycm9yWzFdKTtcclxuXHRcdFx0XHRcdF9lcnJvci5jb2RlID0gX2dldF9jb2RlKGVycm9yWzJdKTtcclxuXHRcdFx0XHRcdF9lcnJvci5kYXRhID0gZXJyb3JbM107XHJcblx0XHRcdFx0XHRfZXJyb3IudGltZSA9IF9nZXRfaW50KGVycm9yWzRdKTtcclxuXHRcdFx0XHRcdHBhcnNlZCA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghcGFyc2VkICYmIGVycm9yIGluc3RhbmNlb2YgRXJyb3Ipe1xyXG5cdFx0XHRcdGNvbnN0IGVycjogYW55ID0gZXJyb3I7XHJcblx0XHRcdFx0X2Vycm9yLm1lc3NhZ2UgPSBfZ2V0X3N0cihlcnIubWVzc2FnZSk7XHJcblx0XHRcdFx0X2Vycm9yLm5hbWUgPSBfZ2V0X3N0cihlcnIubmFtZSk7XHJcblx0XHRcdFx0X2Vycm9yLmNvZGUgPSBfZ2V0X2NvZGUoZXJyLmNvZGUpO1xyXG5cdFx0XHRcdF9lcnJvci5kYXRhID0gZXJyLmRhdGE7XHJcblx0XHRcdFx0X2Vycm9yLnRpbWUgPSBfZ2V0X2ludChlcnIudGltZSk7XHJcblx0XHRcdFx0cGFyc2VkID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIXBhcnNlZCl7XHJcblx0XHRcdFx0X2Vycm9yLm1lc3NhZ2UgPSBfZ2V0X3N0cihlcnJvci5tZXNzYWdlKTtcclxuXHRcdFx0XHRfZXJyb3IubmFtZSA9IF9nZXRfc3RyKGVycm9yLm5hbWUpO1xyXG5cdFx0XHRcdF9lcnJvci5jb2RlID0gX2dldF9jb2RlKGVycm9yLmNvZGUpO1xyXG5cdFx0XHRcdF9lcnJvci5kYXRhID0gZXJyb3IuZGF0YTtcclxuXHRcdFx0XHRfZXJyb3IudGltZSA9IF9nZXRfaW50KGVycm9yLnRpbWUpO1xyXG5cdFx0XHRcdHBhcnNlZCA9IHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVsc2UgX2Vycm9yLm1lc3NhZ2UgPSBfZ2V0X3N0cihlcnJvcik7XHJcblx0XHRyZXR1cm4gbmV3IEV4Y2VwdGlvbihcclxuXHRcdFx0X2Vycm9yLm1lc3NhZ2UgPz8gJ1Vua25vd24gZXhjZXB0aW9uIGVycm9yLicsXHJcblx0XHRcdF9lcnJvci5uYW1lID8/ICdFcnJvcicsXHJcblx0XHRcdF9lcnJvci5jb2RlLFxyXG5cdFx0XHRfZXJyb3IuZGF0YSxcclxuXHRcdFx0X2Vycm9yLnRpbWUgPz8gdGltZSxcclxuXHRcdCk7XHJcblx0fVxyXG59IiwiZXhwb3J0ICogZnJvbSAnLi9fRXhjZXB0aW9uJzsiLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIElFdmVudCB9IGZyb20gJy4uL0V2ZW50RW1pdHRlcic7XHJcblxyXG4vKipcclxuICogVGFzayBzdGF0dXMgdHlwZVxyXG4gKi9cclxuZXhwb3J0IHR5cGUgVFN0YXR1cyA9ICduZXcnIHwgJ3J1bm5pbmcnIHwgJ3N0b3BwZWQnIHwgJ2ZhaWxlZCcgfCAnZG9uZSc7XHJcblxyXG4vKipcclxuICogVGFzayBzdGF0dXNlcyBsaXN0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVEFTS19TVEFUVVNFUzogVFN0YXR1c1tdID0gWyduZXcnLCAncnVubmluZycsICdzdG9wcGVkJywgJ2ZhaWxlZCcsICdkb25lJ107XHJcblxyXG4vKipcclxuICogVGFzayBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRhc2sge1xyXG5cdG5hbWU6IHN0cmluZztcclxuXHRsYWJlbDogc3RyaW5nO1xyXG5cdGxpbmtlZDogYm9vbGVhbjtcclxuXHRwcmVjaXNpb246IG51bWJlcjtcclxuXHRldmVudF9kZWJvdW5jZTogbnVtYmVyO1xyXG5cdHByb2dyZXNzOiBudW1iZXI7XHJcblx0dG90YWw6IG51bWJlcjtcclxuXHR2YWx1ZTogbnVtYmVyO1xyXG5cdGVycm9yOiBzdHJpbmc7XHJcblx0c3RhdHVzOiBUU3RhdHVzO1xyXG5cdHN0YXJ0VGltZTogbnVtYmVyO1xyXG5cdHN0b3BUaW1lOiBudW1iZXI7XHJcblx0ZWxhcHNlZFRpbWU6IG51bWJlcjtcclxuXHRjb21wbGV0ZTogYm9vbGVhbjtcclxuXHRpdGVtOiBhbnk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IGV2ZW50IGRlYm91bmNlIG1pbGxpc2Vjb25kc1xyXG4gKi9cclxubGV0IERFRkFVTFRfRVZFTlRfREVCT1VOQ0U6IG51bWJlciA9IDIwMDtcclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IHByZWNpc2lvbiB+IHJvdW5kIGRlY2ltYWwgcGxhY2VzXHJcbiAqL1xyXG5sZXQgREVGQVVMVF9QUkVDSVNJT046IG51bWJlciA9IDI7XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gcGFyc2UgcG9zaXRpdmUgbnVtYmVyXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsXHJcbiAqIEBwYXJhbSBfZGVmYXVsdFxyXG4gKiBAcGFyYW0gX2JsYW5rXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgXHJcbiAqL1xyXG5jb25zdCBfcG9zX251bSA9ICh2YWw6IGFueSwgX2RlZmF1bHQ6IG51bWJlciA9IDAsIF9ibGFuazogbnVtYmVyID0gMCk6IG51bWJlciA9PiB7XHJcblx0aWYgKFt1bmRlZmluZWQsIG51bGxdLmluY2x1ZGVzKHZhbCkgfHwgJ3N0cmluZycgPT09IHR5cGVvZiB2YWwgJiYgISh2YWwgPSB2YWwudHJpbSgpKSkgcmV0dXJuIF9ibGFuaztcclxuXHRpZiAoIWlzTmFOKHZhbCA9IHBhcnNlRmxvYXQodmFsKSkgJiYgTnVtYmVyLmlzRmluaXRlKHZhbCkgJiYgdmFsID49IDApIHJldHVybiB2YWw7XHJcblx0cmV0dXJuIF9kZWZhdWx0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciAtIHBhcnNlIHBvc2l0aXZlIGludGVnZXJcclxuICogXHJcbiAqIEBwYXJhbSB2YWxcclxuICogQHBhcmFtIF9kZWZhdWx0XHJcbiAqIEBwYXJhbSBfYmxhbmtcclxuICogQHJldHVybnMgYG51bWJlcmAgaW50ZWdlclxyXG4gKi9cclxuY29uc3QgX3Bvc19pbnQgPSAodmFsOiBhbnksIF9kZWZhdWx0OiBudW1iZXIgPSAwLCBfYmxhbms6IG51bWJlciA9IDApOiBudW1iZXIgPT4gcGFyc2VJbnQoX3Bvc19udW0odmFsLCBfZGVmYXVsdCwgX2JsYW5rKSArICcnKTtcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgLSByb3VuZCBudW1iZXJcclxuICogXHJcbiAqIEBwYXJhbSB2YWwgLSByb3VuZCB2YWx1ZVxyXG4gKiBAcGFyYW0gcGxhY2VzIC0gcHJlY2lzaW9uIGRlY2ltYWwgcGxhY2VzIFtkZWZhdWx0OiBgREVGQVVMVF9QUkVDSVNJT05gXVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCByb3VuZGVkXHJcbiAqL1xyXG5jb25zdCBfcm91bmQgPSAodmFsOiBudW1iZXIsIHBsYWNlcz86IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0Y29uc3QgcCA9IDEwICoqIF9wb3NfaW50KHBsYWNlcywgREVGQVVMVF9QUkVDSVNJT04sIERFRkFVTFRfUFJFQ0lTSU9OKTtcclxuXHRyZXR1cm4gTWF0aC5yb3VuZCgodmFsICsgTnVtYmVyLkVQU0lMT04pICogcCkgLyBwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciAtIGN1c3RvbSBgSlNPTi5zdHJpbmdpZnlgIHdoaWNoIGlnbm9yZXMgc2VsZiByZWZlcmVuY2VzIH4gcmV0dXJucyBgJ251bGwnYCBmb3IgYHVuZGVmaW5lZGAgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBqc29uXHJcbiAqL1xyXG5jb25zdCBfanNvbl9zdHIgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHZhbHVlID0gbnVsbDtcclxuXHRjb25zdCBzZWVuOiBhbnlbXSA9IFtdO1xyXG5cdHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgZnVuY3Rpb24oXywgdmFsKXtcclxuXHRcdGlmICh2YWwgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB2YWwpe1xyXG5cdFx0XHRpZiAoc2Vlbi5pbmRleE9mKHZhbCkgPiAtMSkgcmV0dXJuO1xyXG5cdFx0XHRzZWVuLnB1c2godmFsKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB2YWw7XHJcblx0fSk7XHJcbn07XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gcGFyc2Ugbm9ybWFsaXplZCBzdHJpbmcgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB2YWxcclxuICogQHJldHVybnMgYHN0cmluZ2Agbm9ybWFsaXplZCBhbmQgdHJpbW1lZFxyXG4gKi9cclxuY29uc3QgX2dldF9zdHIgPSAodmFsOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGlmIChbdW5kZWZpbmVkLCBudWxsXS5pbmNsdWRlcyh2YWwpKSByZXR1cm4gJyc7XHJcblx0bGV0IHZhbHVlOiBzdHJpbmcgPSAnJztcclxuXHR0cnkge1xyXG5cdFx0aWYgKE9iamVjdCh2YWwpID09PSB2YWwgJiYgdmFsW1N5bWJvbC5pdGVyYXRvcl0pIHZhbCA9IF9qc29uX3N0cihbLi4udmFsXSk7XHJcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWwpO1xyXG5cdH1cclxuXHRjYXRjaCAoZSl7XHJcblx0XHR2YWx1ZSA9ICcnO1xyXG5cdH1cclxuXHRpZiAoT2JqZWN0KHZhbCkgPT09IHZhbCAmJiAoIXZhbHVlIHx8IC9cXFtvYmplY3QgXFx3K1xcXS8udGVzdCh2YWx1ZSkpKSB2YWx1ZSA9IF9qc29uX3N0cih2YWwpLnJlcGxhY2UoL15cInxcIiQvZywgJycpO1xyXG5cdHJldHVybiB2YWx1ZS50cmltKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gcGFyc2Ugbm9ybWFsaXplZCBlcnJvciB2YWx1ZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBlcnJvclxyXG4gKi9cclxuY29uc3QgX2dldF9lcnJvciA9ICh2YWw6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0aWYgKE9iamVjdCh2YWwpID09PSB2YWwgJiYgISh2YWwgaW5zdGFuY2VvZiBFcnJvcikpe1xyXG5cdFx0aWYgKHZhbC5lcnJvciBpbnN0YW5jZW9mIEVycm9yIHx8ICdzdHJpbmcnID09PSB0eXBlb2YgdmFsLmVycm9yICYmICEhdmFsLmVycm9yLnRyaW0oKSkgdmFsID0gdmFsLmVycm9yO1xyXG5cdFx0ZWxzZSBpZiAodmFsLnJlYXNvbiBpbnN0YW5jZW9mIEVycm9yIHx8ICdzdHJpbmcnID09PSB0eXBlb2YgdmFsLnJlYXNvbiAmJiAhIXZhbC5yZWFzb24udHJpbSgpKSB2YWwgPSB2YWwuZXJyb3I7XHJcblx0XHRlbHNlIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbC5tZXNzYWdlICYmICEhdmFsLm1lc3NhZ2UudHJpbSgpKSB2YWwgPSB2YWwubWVzc2FnZTtcclxuXHR9XHJcblx0cmV0dXJuIF9nZXRfc3RyKHZhbCk7XHJcbn07XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gZGVib3VuY2VkIGNhbGxiYWNrXHJcbiAqIFxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBjYWxsYmFjayBoYW5kbGVyXHJcbiAqIEBwYXJhbSB0aW1lb3V0IC0gdGltZW91dCBtaWxsaXNlY29uZHNcclxuICogQHJldHVybnMgYCgpPT52b2lkYCBkZWJvdW5jZWQgY2FsbGJhY2tcclxuICovXHJcbmNvbnN0IF9kZWJvdW5jZSA9IChjYWxsYmFjazogKCk9PnZvaWQsIHRpbWVvdXQ6IG51bWJlciA9IDApOiAoKSA9PiB2b2lkID0+IHtcclxuXHRsZXQgdGltZXI6IGFueSwgbWF4X3dhaXQ6IGFueTtcclxuXHRjb25zdCBfaGFuZGxlciA9ICgpID0+IHtcclxuXHRcdGNsZWFyVGltZW91dCh0aW1lcik7XHJcblx0XHRjbGVhclRpbWVvdXQobWF4X3dhaXQpO1xyXG5cdFx0bWF4X3dhaXQgPSB1bmRlZmluZWQ7XHJcblx0XHRjYWxsYmFjaygpO1xyXG5cdH07XHJcblx0cmV0dXJuICgpID0+IHtcclxuXHRcdGlmICghdGltZW91dCkgcmV0dXJuIGNhbGxiYWNrKCk7XHJcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xyXG5cdFx0dGltZXIgPSBzZXRUaW1lb3V0KF9oYW5kbGVyLCB0aW1lb3V0KTtcclxuXHRcdGlmICghbWF4X3dhaXQpIG1heF93YWl0ID0gc2V0VGltZW91dChfaGFuZGxlciwgTWF0aC5mbG9vcih0aW1lb3V0ICogMS41KSk7XHJcblx0fTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBgU3ltYm9sYCBwcml2YXRlIHByb3BzIGtleSBuYW1lXHJcbiAqL1xyXG5jb25zdCBQUk9QUyA9IFN5bWJvbChgX19wcml2YXRlX3Byb3BzXyR7RGF0ZS5ub3coKX1fX2ApO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBUYXNrXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgVGFzayBpbXBsZW1lbnRzIElUYXNrXHJcbntcclxuXHQvKipcclxuXHQgKiBUYXNrIGdsb2JhbCBldmVudCBkZWJvdW5jZSBtaWxsaXNlY29uZHNcclxuXHQgKi9cclxuXHRzdGF0aWMgZ2V0IGV2ZW50X2RlYm91bmNlKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gREVGQVVMVF9FVkVOVF9ERUJPVU5DRTtcclxuXHR9XHJcblx0c3RhdGljIHNldCBldmVudF9kZWJvdW5jZSh2YWx1ZTogYW55KXtcclxuXHRcdERFRkFVTFRfRVZFTlRfREVCT1VOQ0UgPSBfcG9zX2ludCh2YWx1ZSwgREVGQVVMVF9FVkVOVF9ERUJPVU5DRSwgMCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIGdsb2JhbCBwcmVjaXNpb24gfiByb3VuZCBkZWNpbWFsIHBsYWNlc1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXQgZGVjaW1hbF9wcmVjaXNpb24oKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBERUZBVUxUX1BSRUNJU0lPTjtcclxuXHR9XHJcblx0c3RhdGljIHNldCBkZWNpbWFsX3ByZWNpc2lvbih2YWx1ZTogYW55KXtcclxuXHRcdERFRkFVTFRfUFJFQ0lTSU9OID0gX3Bvc19pbnQodmFsdWUsIERFRkFVTFRfUFJFQ0lTSU9OLCAyKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluc3RhbmNlIFwicHJpdmF0ZVwiIHByb3BzXHJcblx0ICovXHJcblx0W1BST1BTXToge1xyXG5cdFx0bmFtZTogc3RyaW5nO1xyXG5cdFx0bGFiZWw6IHN0cmluZztcclxuXHRcdGxpbmtlZDogYm9vbGVhbjtcclxuXHRcdHByZWNpc2lvbjogbnVtYmVyO1xyXG5cdFx0ZXZlbnRfZGVib3VuY2U6IG51bWJlcjtcclxuXHRcdHByb2dyZXNzOiBudW1iZXI7XHJcblx0XHR0b3RhbDogbnVtYmVyO1xyXG5cdFx0dmFsdWU6IG51bWJlcjtcclxuXHRcdGVycm9yOiBzdHJpbmc7XHJcblx0XHRzdGF0dXM6IFRTdGF0dXM7XHJcblx0XHRzdGFydFRpbWU6IG51bWJlcjtcclxuXHRcdHN0b3BUaW1lOiBudW1iZXI7XHJcblx0XHRjb21wbGV0ZTogYm9vbGVhbjtcclxuXHRcdGl0ZW06IGFueTtcclxuXHRcdF9kb25lOiBib29sZWFuO1xyXG5cdFx0X3JvdW5kOiAodmFsOiBudW1iZXIpID0+IG51bWJlcjtcclxuXHRcdF9lbWl0dGVyOiBFdmVudEVtaXR0ZXI7XHJcblx0XHRfZGVib3VuY2VkX3VwZGF0ZTogKCk9PnZvaWQ7XHJcblx0fSA9IHt9IGFzIGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBuYW1lXHJcblx0ICovXHJcblx0Z2V0IG5hbWUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5uYW1lO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBsYWJlbFxyXG5cdCAqL1xyXG5cdGdldCBsYWJlbCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLmxhYmVsO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBsaW5rZWQgLSB2YWx1ZS90b3RhbC9wcm9ncmVzcyAocmVjYWxjdWxhdGUgb24gY2hhbmdlKVxyXG5cdCAqL1xyXG5cdGdldCBsaW5rZWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10ubGlua2VkO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBwcmVjaXNpb24gLSBgaW50ZWdlcmAgZGVjaW1hbCBwbGFjZXNcclxuXHQgKi9cclxuXHRnZXQgcHJlY2lzaW9uKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10ucHJlY2lzaW9uO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBUYXNrIGV2ZW50IGRlYm91bmNlIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogYFRhc2tzLmV2ZW50X2RlYm91bmNlYClcclxuXHQgKi9cclxuXHRnZXQgZXZlbnRfZGVib3VuY2UoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5ldmVudF9kZWJvdW5jZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgcHJvZ3Jlc3NcclxuXHQgKi9cclxuXHRnZXQgcHJvZ3Jlc3MoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5wcm9ncmVzcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgdG90YWxcclxuXHQgKi9cclxuXHRnZXQgdG90YWwoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS50b3RhbDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgdmFsdWVcclxuXHQgKi9cclxuXHRnZXQgdmFsdWUoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS52YWx1ZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgZXJyb3JcclxuXHQgKi9cclxuXHRnZXQgZXJyb3IoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5lcnJvcjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgc3RhdHVzXHJcblx0ICovXHJcblx0Z2V0IHN0YXR1cygpOiBUU3RhdHVzIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5zdGF0dXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIHN0YXJ0VGltZSAtIHRpbWVzdGFtcCBtaWxsaXNlY29uZHMgKGkuZS4gYERhdGUubm93KClgKVxyXG5cdCAqL1xyXG5cdGdldCBzdGFydFRpbWUoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5zdGFydFRpbWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIHN0b3BUaW1lIC0gdGltZXN0YW1wIG1pbGxpc2Vjb25kcyAoaS5lLiBgRGF0ZS5ub3coKWApXHJcblx0ICovXHJcblx0Z2V0IHN0b3BUaW1lKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uc3RvcFRpbWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIGVsYXBzZWRUaW1lIC0gbWlsbGlzZWNvbmQgdGltZXN0YW1wcyBkaWZmZXJlbmNlIChpLmUuIGBzdG9wVGltZSAtIHN0YXJ0VGltZWApXHJcblx0ICovXHJcblx0Z2V0IGVsYXBzZWRUaW1lKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5zdG9wVGltZSA/IHRoaXMuc3RvcFRpbWUgLSB0aGlzLnN0YXJ0VGltZSA6IDA7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIGNvbXBsZXRlXHJcblx0ICovXHJcblx0Z2V0IGNvbXBsZXRlKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLmNvbXBsZXRlO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBUYXNrIGl0ZW1cclxuXHQgKi9cclxuXHRnZXQgaXRlbSgpOiBhbnkge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLml0ZW07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGUgbmV3IGluc3RhbmNlXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG5hbWUgLSB0YXNrIG5hbWVcclxuXHQgKiBAcGFyYW0gbGlua2VkIC0gdGFzayB2YWx1ZS90b3RhbC9wcm9ncmVzcyBsaW5rZWQgfiByZWNhbGN1bGF0ZSBvbiBjaGFuZ2VcclxuXHQgKiBAcGFyYW0gcHJlY2lzaW9uIC0gZGVjaW1hbCBwbGFjZXMgKGRlZmF1bHQ6IGBUYXNrLmRlY2ltYWxfcHJlY2lzaW9uYClcclxuXHQgKiBAcGFyYW0gZXZlbnRfZGVib3VuY2UgLSBldmVudCBkZWJvdW5jZSBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGBUYXNrLmV2ZW50X2RlYm91bmNlYClcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGxpbmtlZDogYm9vbGVhbiA9IGZhbHNlLCBwcmVjaXNpb246IG51bWJlciA9IFRhc2suZGVjaW1hbF9wcmVjaXNpb24sIGV2ZW50X2RlYm91bmNlOiBudW1iZXIgPSBUYXNrLmV2ZW50X2RlYm91bmNlKXtcclxuXHRcdGlmICghKG5hbWUgPSBfZ2V0X3N0cihuYW1lKSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbmV3IHRhc2sgbmFtZS4nKTtcclxuXHRcdHByZWNpc2lvbiA9IF9wb3NfaW50KHByZWNpc2lvbiwgVGFzay5kZWNpbWFsX3ByZWNpc2lvbiwgVGFzay5kZWNpbWFsX3ByZWNpc2lvbik7XHJcblx0XHRldmVudF9kZWJvdW5jZSA9IF9wb3NfaW50KGV2ZW50X2RlYm91bmNlLCBUYXNrLmV2ZW50X2RlYm91bmNlLCBUYXNrLmV2ZW50X2RlYm91bmNlKTtcclxuXHRcdHRoaXNbUFJPUFNdID0ge1xyXG5cdFx0XHRuYW1lLFxyXG5cdFx0XHRsYWJlbDogJycsXHJcblx0XHRcdGxpbmtlZCxcclxuXHRcdFx0cHJlY2lzaW9uLFxyXG5cdFx0XHRldmVudF9kZWJvdW5jZSxcclxuXHRcdFx0cHJvZ3Jlc3M6IDAsXHJcblx0XHRcdHRvdGFsOiAwLFxyXG5cdFx0XHR2YWx1ZTogMCxcclxuXHRcdFx0ZXJyb3I6ICcnLFxyXG5cdFx0XHRzdGF0dXM6ICduZXcnLFxyXG5cdFx0XHRzdGFydFRpbWU6IDAsXHJcblx0XHRcdHN0b3BUaW1lOiAwLFxyXG5cdFx0XHRjb21wbGV0ZTogZmFsc2UsXHJcblx0XHRcdGl0ZW06IHVuZGVmaW5lZCxcclxuXHRcdFx0X2RvbmU6IGZhbHNlLFxyXG5cdFx0XHRfcm91bmQ6ICh2YWw6IG51bWJlcik6IG51bWJlciA9PiBfcm91bmQodmFsLCB0aGlzW1BST1BTXS5wcmVjaXNpb24pLFxyXG5cdFx0XHRfZW1pdHRlcjogbmV3IEV2ZW50RW1pdHRlcigpLFxyXG5cdFx0XHRfZGVib3VuY2VkX3VwZGF0ZTogX2RlYm91bmNlKCgpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0XHRcdGlmIChwcm9wcy5fZG9uZSkgcmV0dXJuO1xyXG5cdFx0XHRcdHByb3BzLl9lbWl0dGVyLmVtaXQoJ3VwZGF0ZScsIHRoaXMuZGF0YSgpKTtcclxuXHRcdFx0fSwgZXZlbnRfZGVib3VuY2UpLFxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0YXNrIGRhdGFcclxuXHQgKiBcclxuXHQgKiBAcmV0dXJucyBgSVRhc2tgIG9wdGlvbnMgfiBpLmUuIGB7bmFtZSwgbGFiZWwsIGxpbmtlZCwgcHJlY2lzaW9uLCBldmVudF9kZWJvdW5jZSwgcHJvZ3Jlc3MsIHRvdGFsLCB2YWx1ZSwgZXJyb3IsIHN0YXR1cywgc3RhcnRUaW1lLCBzdG9wVGltZSwgY29tcGxldGUsIGl0ZW19YFxyXG5cdCAqL1xyXG5cdGdldCBkYXRhKCk6ICgpPT5JVGFzayB7XHJcblx0XHRyZXR1cm4gKCk6IElUYXNrID0+IHtcclxuXHRcdFx0Y29uc3QgeyBuYW1lLCBsYWJlbCwgbGlua2VkLCBwcmVjaXNpb24sIGV2ZW50X2RlYm91bmNlLCBwcm9ncmVzcywgdG90YWwsIHZhbHVlLCBlcnJvciwgc3RhdHVzLCBzdGFydFRpbWUsIHN0b3BUaW1lLCBlbGFwc2VkVGltZSwgY29tcGxldGUsIGl0ZW0gfSA9IHRoaXM7XHJcblx0XHRcdHJldHVybiB7bmFtZSwgbGFiZWwsIGxpbmtlZCwgcHJlY2lzaW9uLCBldmVudF9kZWJvdW5jZSwgcHJvZ3Jlc3MsIHRvdGFsLCB2YWx1ZSwgZXJyb3IsIHN0YXR1cywgc3RhcnRUaW1lLCBzdG9wVGltZSwgZWxhcHNlZFRpbWUsIGNvbXBsZXRlLCBpdGVtfTtcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBVcGRhdGUgZXZlbnQgdHJpZ2dlclxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdGdldCB1cGRhdGUoKTogKCk9PlRhc2sge1xyXG5cdFx0cmV0dXJuICgpOiBUYXNrID0+IHtcclxuXHRcdFx0dGhpc1tQUk9QU10uX2RlYm91bmNlZF91cGRhdGUoKTtcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkIHVwZGF0ZSBldmVudCBzdWJzY3JpYmVyIH4gYGV2ZW50ID0ge3R5cGU6ICd1cGRhdGUnLCBkYXRhOiBJVGFza31gXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGxpc3RlbmVyIC0gZXZlbnQgY2FsbGJhY2sgbGlzdGVuZXJcclxuXHQgKiBAcmV0dXJucyBgKCgpPT52b2lkKWAgdW5zdWJzY3JpYmUgY2FsbGJhY2tcclxuXHQgKi9cclxuXHRzdWJzY3JpYmUobGlzdGVuZXI6IChldmVudDpJRXZlbnQpPT52b2lkKTogKCk9PnZvaWQge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLl9lbWl0dGVyLnN1YnNjcmliZSgndXBkYXRlJywgbGlzdGVuZXIpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBzdGFydFxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHN0YXJ0KHJlc3RhcnQ6IGJvb2xlYW4gPSBmYWxzZSk6IFRhc2sge1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdGxldCBjaGFuZ2VzID0gMDtcclxuXHJcblx0XHQvL3Jlc3RhcnQgY2hlY2tcclxuXHRcdGlmIChwcm9wcy5jb21wbGV0ZSAmJiAhcmVzdGFydCl7XHJcblx0XHRcdGNvbnNvbGUud2FybignVGFzayBcXGBzdGFydFxcYCB3aGlsZSBjb21wbGV0ZSBpZ25vcmVkISBUcnkgdXNpbmcgYHRhc2suc3RhcnQocmVzdGFydD10cnVlKWAgdG8gb3ZlcnJpZGUuJyk7XHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHQvLy0tIGNvbXBsZXRlID0gZmFsc2VcclxuXHRcdGlmIChwcm9wcy5jb21wbGV0ZSl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLmNvbXBsZXRlID0gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vLS0gc3RhdHVzID0gcnVubmluZ1xyXG5cdFx0aWYgKHByb3BzLnN0YXR1cyAhPT0gJ3J1bm5pbmcnKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMuc3RhdHVzID0gJ3J1bm5pbmcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vLS0gc3RhcnRUaW1lXHJcblx0XHRpZiAoIXByb3BzLnN0YXJ0VGltZSB8fCByZXN0YXJ0KXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMuc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLy0tIHN0b3BUaW1lXHJcblx0XHRpZiAocHJvcHMuc3RvcFRpbWUpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy5zdG9wVGltZSA9IDA7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vLS0gZXJyb3JcclxuXHRcdGlmIChwcm9wcy5lcnJvcil7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLmVycm9yID0gJyc7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9jaGFuZ2VzIC0gdXBkYXRlXHJcblx0XHRpZiAoY2hhbmdlcykgdGhpcy51cGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBzdG9wXHJcblx0ICogXHJcblx0ICogQHJldHVybnMgYFRhc2tgIGluc3RhbmNlXHJcblx0ICovXHJcblx0c3RvcCgpOiBUYXNrIHtcclxuXHRcdGNvbnN0IHByb3BzID0gdGhpc1tQUk9QU107XHJcblx0XHRsZXQgY2hhbmdlcyA9IDA7XHJcblxyXG5cdFx0Ly8tLSBzdGF0dXMgPSBzdG9wcGVkXHJcblx0XHRpZiAocHJvcHMuc3RhdHVzID09PSAncnVubmluZycpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy5zdGF0dXMgPSAnc3RvcHBlZCc7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8tLSBzdG9wVGltZSwgc3RhcnRUaW1lXHJcblx0XHRpZiAoIXByb3BzLnN0b3BUaW1lKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMuc3RvcFRpbWUgPSBEYXRlLm5vdygpO1xyXG5cdFx0XHRpZiAoIXByb3BzLnN0YXJ0VGltZSkgcHJvcHMuc3RhcnRUaW1lID0gcHJvcHMuc3RvcFRpbWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9jaGFuZ2VzIC0gdXBkYXRlXHJcblx0XHRpZiAoY2hhbmdlcykgdGhpcy51cGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBmYWlsZWRcclxuXHQgKiBcclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRmYWlsdXJlKGVycm9yPzogYW55KTogVGFzayB7XHJcblx0XHRlcnJvciA9IChlcnJvciA9IF9nZXRfZXJyb3IoZXJyb3IpKSA/IGVycm9yIDogJ1Vua25vd24gdGFzayBlcnJvci4nO1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdGxldCBjaGFuZ2VzID0gMDtcclxuXHRcdFxyXG5cdFx0Ly8tLSBlcnJvclxyXG5cdFx0aWYgKHByb3BzLmVycm9yICE9PSBlcnJvcil7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLmVycm9yID0gZXJyb3I7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8tLSBzdGF0dXNcclxuXHRcdGlmIChwcm9wcy5zdGF0dXMgIT09ICdmYWlsZWQnKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMuc3RhdHVzID0gJ2ZhaWxlZCc7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8tLSBzdG9wVGltZSwgc3RhcnRUaW1lXHJcblx0XHRpZiAoIXByb3BzLnN0b3BUaW1lKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMuc3RvcFRpbWUgPSBEYXRlLm5vdygpO1xyXG5cdFx0XHRpZiAoIXByb3BzLnN0YXJ0VGltZSkgcHJvcHMuc3RhcnRUaW1lID0gcHJvcHMuc3RvcFRpbWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9jaGFuZ2VzIC0gdXBkYXRlXHJcblx0XHRpZiAoY2hhbmdlcykgdGhpcy51cGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBkb25lXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGNvbXBsZXRlUHJvZ3Jlc3MgLSBzZXQgZnVsbCBwcm9ncmVzcyB+IGVuYWJsZWQgd2hlbiBgbGlua2VkYCAoaS5lLiBgcHJvZ3Jlc3M9MTAwYCBhbmQgYHZhbHVlPXRvdGFsYClcclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRkb25lKGNvbXBsZXRlUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSk6IFRhc2sge1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdGxldCBjaGFuZ2VzID0gMDtcclxuXHJcblx0XHQvLy0tIGNvbXBsZXRlID0gdHJ1ZVxyXG5cdFx0aWYgKCFwcm9wcy5jb21wbGV0ZSl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLmNvbXBsZXRlID0gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvL25vdCBzdG9wcGVkXHJcblx0XHRpZiAocHJvcHMuc3RhdHVzICE9PSAnc3RvcHBlZCcpe1xyXG5cdFx0XHRcclxuXHRcdFx0Ly8tLSBzdGF0dXMgPSBkb25lfGZhaWxlZFxyXG5cdFx0XHRjb25zdCBzdGF0dXMgPSBwcm9wcy5lcnJvciA/ICdmYWlsZWQnIDogJ2RvbmUnO1xyXG5cdFx0XHRpZiAocHJvcHMuc3RhdHVzICE9PSBzdGF0dXMpe1xyXG5cdFx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdFx0cHJvcHMuc3RhdHVzID0gc3RhdHVzO1xyXG5cdFx0XHR9XHJcblx0XHJcblx0XHRcdC8vLS0gY29tcGxldGVQcm9ncmVzc1xyXG5cdFx0XHRpZiAocHJvcHMubGlua2VkIHx8IGNvbXBsZXRlUHJvZ3Jlc3Mpe1xyXG5cdFx0XHRcdGxldCBwcm9ncmVzcyA9IDEwMDtcclxuXHRcdFx0XHRpZiAocHJvZ3Jlc3MgIT09IHByb3BzLnByb2dyZXNzKXtcclxuXHRcdFx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdFx0XHRwcm9wcy5wcm9ncmVzcyA9IHByb2dyZXNzO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAocHJvcHMudG90YWwgJiYgcHJvcHMudmFsdWUgIT09IHByb3BzLnRvdGFsKXtcclxuXHRcdFx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdFx0XHRwcm9wcy52YWx1ZSA9IHByb3BzLnRvdGFsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vLS0gc3RhcnRUaW1lLCBzdG9wVGltZSA9IG5vd1xyXG5cdFx0aWYgKCFwcm9wcy5zdG9wVGltZSl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnN0b3BUaW1lID0gRGF0ZS5ub3coKTtcclxuXHRcdFx0aWYgKCFwcm9wcy5zdGFydFRpbWUpIHByb3BzLnN0YXJ0VGltZSA9IHByb3BzLnN0b3BUaW1lO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vZG9uZSAtIGVtaXQgY2hhbmdlc1xyXG5cdFx0cHJvcHMuX2RvbmUgPSB0cnVlO1xyXG5cdFx0aWYgKGNoYW5nZXMpIHByb3BzLl9lbWl0dGVyLmVtaXQoJ3VwZGF0ZScsIHRoaXMuZGF0YSgpKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IHByb2dyZXNzXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHByb2dyZXNzIC0gdGFzayBwZXJjZW50YWdlIHByb2dyZXNzIChgMC0xMDBgKVxyXG5cdCAqIEBwYXJhbSBfdmFsdWUgLSB1bmxpbmtlZCB0YXNrIGB2YWx1ZWAgdXBkYXRlIH4gaWdub3JlcyBgdW5kZWZpbmVkYFxyXG5cdCAqIEBwYXJhbSBfdG90YWwgLSB1bmxpbmtlZCB0YXNrIGB0b3RhbGAgdXBkYXRlIH4gaWdub3JlcyBgdW5kZWZpbmVkYFxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHNldFByb2dyZXNzKHByb2dyZXNzOiBudW1iZXIsIF92YWx1ZT86IG51bWJlciwgX3RvdGFsPzogbnVtYmVyKTogVGFzayB7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cclxuXHRcdC8vZG9uZSAtIGlnbm9yZSB1cGRhdGVzXHJcblx0XHRpZiAocHJvcHMuX2RvbmUpe1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ1Rhc2sgXFxgc2V0UHJvZ3Jlc3NcXGAgd2hpbGUgZG9uZSBpZ25vcmVkLicpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHQvL3BhcnNlIHByb2dyZXNzL2FkanVzdFxyXG5cdFx0bGV0IHRtcDogbnVtYmVyID0gX3Bvc19udW0ocHJvZ3Jlc3MsIC0xLCAtMSk7XHJcblx0XHRpZiAodG1wIDwgMCkgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBzZXQgdGFzayBcXGBwcm9ncmVzc1xcYCB2YWx1ZSAoJHtwcm9ncmVzc30pLmApO1xyXG5cdFx0aWYgKChwcm9ncmVzcyA9IHByb3BzLl9yb3VuZCh0bXApKSA+IDEwMCkgcHJvZ3Jlc3MgPSAxMDA7XHJcblxyXG5cdFx0Ly90b3RhbC92YWx1ZSAtIHVubGlua2VkIHVwZGF0ZS9saW5rZWQgcmVjYWxjdWxhdGVcclxuXHRcdGxldCB2YWx1ZSA9IHByb3BzLnZhbHVlO1xyXG5cdFx0bGV0IHRvdGFsID0gcHJvcHMudG90YWw7XHJcblx0XHRpZiAoIXByb3BzLmxpbmtlZCl7XHJcblx0XHRcdGlmICgoX3RvdGFsID0gX3Bvc19udW0oX3RvdGFsLCAtMSwgLTEpKSA+PSAwKSB0b3RhbCA9IHByb3BzLl9yb3VuZChfdG90YWwpO1xyXG5cdFx0XHRpZiAoKF92YWx1ZSA9IF9wb3NfbnVtKF92YWx1ZSwgLTEsIC0xKSkgPj0gMCkgdmFsdWUgPSBwcm9wcy5fcm91bmQoX3ZhbHVlKTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKHRvdGFsKXtcclxuXHRcdFx0aWYgKHByb2dyZXNzID09PSAxMDApIHZhbHVlID0gdG90YWw7XHJcblx0XHRcdGVsc2UgdmFsdWUgPSBwcm9wcy5fcm91bmQocHJvZ3Jlc3MvMTAwICogdG90YWwpO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHQvL2NoYW5nZXMgLSB1cGRhdGVcclxuXHRcdGxldCBjaGFuZ2VzID0gMDtcclxuXHRcdGlmIChwcm9ncmVzcyAhPT0gcHJvcHMucHJvZ3Jlc3Mpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy5wcm9ncmVzcyA9IHByb2dyZXNzO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHZhbHVlICE9PSBwcm9wcy52YWx1ZSl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnZhbHVlID0gdmFsdWU7XHJcblx0XHR9XHJcblx0XHRpZiAodG90YWwgIT09IHByb3BzLnRvdGFsKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMudG90YWwgPSB0b3RhbDtcclxuXHRcdH1cclxuXHRcdGlmIChjaGFuZ2VzKSB0aGlzLnVwZGF0ZSgpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIFNldCB0b3RhbFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0b3RhbFxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHNldFRvdGFsKHRvdGFsOiBudW1iZXIpOiBUYXNrIHtcclxuXHRcdGNvbnN0IHByb3BzID0gdGhpc1tQUk9QU107XHJcblxyXG5cdFx0Ly9kb25lIC0gaWdub3JlIHVwZGF0ZXNcclxuXHRcdGlmIChwcm9wcy5fZG9uZSl7XHJcblx0XHRcdGNvbnNvbGUud2FybignVGFzayBcXGBzZXRUb3RhbFxcYCB3aGlsZSBkb25lIGlnbm9yZWQuJyk7XHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vcGFyc2UgdG90YWwvYWRqdXN0XHJcblx0XHRsZXQgdG1wOiBudW1iZXIgPSBfcG9zX251bSh0b3RhbCwgLTEsIC0xKTtcclxuXHRcdGlmICh0bXAgPCAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHNldCB0YXNrIFxcYHRvdGFsXFxgIHZhbHVlICgke3RvdGFsfSkuYCk7XHJcblx0XHR0b3RhbCA9IHByb3BzLl9yb3VuZCh0bXApO1xyXG5cclxuXHRcdC8vbGlua2VkIC0gcmVjYWxjdWxhdGUgdmFsdWUvcHJvZ3Jlc3NcclxuXHRcdGxldCBwcm9ncmVzcyA9IHByb3BzLnByb2dyZXNzO1xyXG5cdFx0bGV0IHZhbHVlID0gcHJvcHMudmFsdWU7XHJcblx0XHRpZiAocHJvcHMubGlua2VkKXtcclxuXHRcdFx0aWYgKCF0b3RhbCl7XHJcblx0XHRcdFx0dmFsdWUgPSAwO1xyXG5cdFx0XHRcdHByb2dyZXNzID0gMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmICh2YWx1ZSl7XHJcblx0XHRcdFx0aWYgKHZhbHVlID49IHRvdGFsKXtcclxuXHRcdFx0XHRcdHZhbHVlID0gdG90YWw7XHJcblx0XHRcdFx0XHRwcm9ncmVzcyA9IDEwMDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBwcm9ncmVzcyA9IHByb3BzLl9yb3VuZCh2YWx1ZS90b3RhbCAqIDEwMCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAocHJvZ3Jlc3MpIHZhbHVlID0gcHJvcHMuX3JvdW5kKHByb2dyZXNzLzEwMCAqIHRvdGFsKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL2NoYW5nZXMgLSB1cGRhdGVcclxuXHRcdGxldCBjaGFuZ2VzID0gMDtcclxuXHRcdGlmIChwcm9ncmVzcyAhPT0gcHJvcHMucHJvZ3Jlc3Mpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy5wcm9ncmVzcyA9IHByb2dyZXNzO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHZhbHVlICE9PSBwcm9wcy52YWx1ZSl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnZhbHVlID0gdmFsdWU7XHJcblx0XHR9XHJcblx0XHRpZiAodG90YWwgIT09IHByb3BzLnRvdGFsKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMudG90YWwgPSB0b3RhbDtcclxuXHRcdH1cclxuXHRcdGlmIChjaGFuZ2VzKSB0aGlzLnVwZGF0ZSgpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXQgdmFsdWVcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdmFsdWVcclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRzZXRWYWx1ZSh2YWx1ZTogbnVtYmVyKTogVGFzayB7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0XHJcblx0XHQvL2RvbmUgLSBpZ25vcmUgdXBkYXRlc1xyXG5cdFx0aWYgKHByb3BzLl9kb25lKXtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdUYXNrIFxcYHNldFZhbHVlXFxgIHdoaWxlIGRvbmUgaWdub3JlZC4nKTtcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9wYXJzZSB2YWx1ZS9hZGp1c3RcclxuXHRcdGxldCB0bXA6IG51bWJlciA9IF9wb3NfbnVtKHZhbHVlLCAtMSwgLTEpO1xyXG5cdFx0aWYgKHRtcCA8IDApIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgc2V0IHRhc2sgXFxgdmFsdWVcXGAgdmFsdWUgKCR7dmFsdWV9KS5gKTtcclxuXHRcdHZhbHVlID0gcHJvcHMuX3JvdW5kKHRtcCk7XHJcblxyXG5cdFx0Ly9saW5rZWQgLSByZWNhbGN1bGF0ZSBwcm9ncmVzc1xyXG5cdFx0bGV0IHRvdGFsID0gcHJvcHMudG90YWw7XHJcblx0XHRsZXQgcHJvZ3Jlc3MgPSBwcm9wcy5wcm9ncmVzcztcclxuXHRcdGlmIChwcm9wcy5saW5rZWQpe1xyXG5cdFx0XHRpZiAoIXZhbHVlKSBwcm9ncmVzcyA9IDA7XHJcblx0XHRcdGVsc2UgaWYgKHRvdGFsKXtcclxuXHRcdFx0XHRpZiAodmFsdWUgPiB0b3RhbCl7XHJcblx0XHRcdFx0XHR0b3RhbCA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0cHJvZ3Jlc3MgPSAxMDA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2UgcHJvZ3Jlc3MgPSBwcm9wcy5fcm91bmQodmFsdWUvdG90YWwgKiAxMDApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKHByb2dyZXNzKSB0b3RhbCA9IHByb3BzLl9yb3VuZCgxMDAvcHJvZ3Jlc3MgKiB2YWx1ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9jaGFuZ2VzIC0gdXBkYXRlXHJcblx0XHRsZXQgY2hhbmdlcyA9IDA7XHJcblx0XHRpZiAocHJvZ3Jlc3MgIT09IHByb3BzLnByb2dyZXNzKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMucHJvZ3Jlc3MgPSBwcm9ncmVzcztcclxuXHRcdH1cclxuXHRcdGlmICh2YWx1ZSAhPT0gcHJvcHMudmFsdWUpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy52YWx1ZSA9IHZhbHVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRvdGFsICE9PSBwcm9wcy50b3RhbCl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnRvdGFsID0gdG90YWw7XHJcblx0XHR9XHJcblx0XHRpZiAoY2hhbmdlcykgdGhpcy51cGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IGl0ZW1cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gaXRlbVxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHNldEl0ZW0oaXRlbTogYW55KTogVGFzayB7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0XHJcblx0XHQvL2RvbmUgLSBpZ25vcmUgdXBkYXRlc1xyXG5cdFx0aWYgKHByb3BzLl9kb25lKXtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdUYXNrIFxcYHNldEl0ZW1cXGAgd2hpbGUgZG9uZSBpZ25vcmVkLicpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0Ly9zZXQgaXRlbVxyXG5cdFx0cHJvcHMuaXRlbSA9IGl0ZW07XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZSBpbnN0YW5jZSBmcm9tIGV4aXN0aW5nIHRhc2sgb3B0aW9uc1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBvcHRpb25zIC0gYElUYXNrYCBvcHRpb25zIH4gaS5lLiBge25hbWUsIGxhYmVsLCBsaW5rZWQsIHByZWNpc2lvbiwgZXZlbnRfZGVib3VuY2UsIHByb2dyZXNzLCB0b3RhbCwgdmFsdWUsIGVycm9yLCBzdGF0dXMsIHN0YXJ0VGltZSwgc3RvcFRpbWUsIGNvbXBsZXRlLCBpdGVtfWBcclxuXHQgKiBAcGFyYW0gcHJlY2lzaW9uIC0gZGVjaW1hbCBwbGFjZXMgKGRlZmF1bHQ6IGBUYXNrLmRlY2ltYWxfcHJlY2lzaW9uYClcclxuXHQgKiBAcGFyYW0gZXZlbnRfZGVib3VuY2UgLSBldmVudCBkZWJvdW5jZSBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGBUYXNrLmV2ZW50X2RlYm91bmNlYClcclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKiBAdGhyb3dzIHZhbGlkYXRpb24gYEVycm9yYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBjcmVhdGUob3B0aW9uczogSVRhc2ssIHByZWNpc2lvbj86IG51bWJlciwgZXZlbnRfZGVib3VuY2U/OiBudW1iZXIpOiBUYXNrIHtcclxuXHRcdGxldCB7XHJcblx0XHRcdG5hbWUsXHJcblx0XHRcdGxhYmVsLFxyXG5cdFx0XHRsaW5rZWQsXHJcblx0XHRcdHByZWNpc2lvbjogX3ByZWNpc2lvbixcclxuXHRcdFx0ZXZlbnRfZGVib3VuY2U6IF9ldmVudF9kZWJvdW5jZSxcclxuXHRcdFx0cHJvZ3Jlc3MsXHJcblx0XHRcdHRvdGFsLFxyXG5cdFx0XHR2YWx1ZSxcclxuXHRcdFx0ZXJyb3IsXHJcblx0XHRcdHN0YXR1cyxcclxuXHRcdFx0c3RhcnRUaW1lLFxyXG5cdFx0XHRzdG9wVGltZSxcclxuXHRcdFx0Y29tcGxldGUsXHJcblx0XHRcdGl0ZW0sXHJcblx0XHR9ID0gT2JqZWN0KG9wdGlvbnMpO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0XHJcblx0XHRcdC8vcGFyc2Ugb3B0aW9uc1xyXG5cdFx0XHRsZXQgdG1wOiBhbnk7XHJcblx0XHRcdGlmICghKHRtcCA9IF9nZXRfc3RyKG5hbWUpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB0YXNrIGBuYW1lYCB2YWx1ZS4nKTtcclxuXHRcdFx0bmFtZSA9IHRtcDtcclxuXHRcdFx0bGFiZWwgPSBfZ2V0X3N0cihsYWJlbCk7XHJcblx0XHRcdGxpbmtlZCA9ICEhbGlua2VkO1xyXG5cdFx0XHRcclxuXHRcdFx0Ly8tLSBwcmVjaXNpb25cclxuXHRcdFx0dG1wID0gX3Bvc19pbnQoX3ByZWNpc2lvbiwgLTEsIFRhc2suZGVjaW1hbF9wcmVjaXNpb24pO1xyXG5cdFx0XHRpZiAoKHRtcCA9IF9wb3NfaW50KHByZWNpc2lvbiwgLTEsIHRtcCkpIDwgMCkgcHJlY2lzaW9uID0gVGFzay5kZWNpbWFsX3ByZWNpc2lvbjtcclxuXHRcdFx0ZWxzZSBwcmVjaXNpb24gPSB0bXA7XHJcblxyXG5cdFx0XHQvLy0tIGV2ZW50X2RlYm91bmNlXHJcblx0XHRcdHRtcCA9IF9wb3NfaW50KF9ldmVudF9kZWJvdW5jZSwgLTEsIFRhc2suZXZlbnRfZGVib3VuY2UpO1xyXG5cdFx0XHRpZiAoKHRtcCA9IF9wb3NfaW50KGV2ZW50X2RlYm91bmNlLCAtMSwgdG1wKSkgPCAwKSBldmVudF9kZWJvdW5jZSA9IFRhc2suZXZlbnRfZGVib3VuY2U7XHJcblx0XHRcdGVsc2UgZXZlbnRfZGVib3VuY2UgPSB0bXA7XHJcblxyXG5cdFx0XHQvLy0tIHByZWNpc2lvbiByb3VuZFxyXG5cdFx0XHRjb25zdCBfcm91bmRfcCA9ICh2YWw6IG51bWJlcik6IG51bWJlciA9PiBfcm91bmQodmFsLCBwcmVjaXNpb24pO1xyXG5cclxuXHRcdFx0Ly8tLSBwYXJzZS9hZGp1c3Q6IHByb2dyZXNzLCB0b3RhbCwgdmFsdWVcclxuXHRcdFx0aWYgKCh0bXAgPSBfcG9zX251bShwcm9ncmVzcywgLTEpKSA8IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdGFzayBgcHJvZ3Jlc3NgIHZhbHVlLicpO1xyXG5cdFx0XHRpZiAoKHByb2dyZXNzID0gX3JvdW5kX3AodG1wKSkgPiAxMDApIHByb2dyZXNzID0gMTAwO1xyXG5cdFx0XHRpZiAoKHRtcCA9IF9wb3NfbnVtKHRvdGFsLCAtMSkpIDwgMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB0YXNrIGB0b3RhbGAgdmFsdWUuJyk7XHJcblx0XHRcdHRvdGFsID0gX3JvdW5kX3AodG1wKTtcclxuXHRcdFx0aWYgKCh0bXAgPSBfcG9zX251bSh2YWx1ZSwgLTEpKSA8IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdGFzayBgdmFsdWVgIHZhbHVlLicpO1xyXG5cdFx0XHR2YWx1ZSA9IF9yb3VuZF9wKHRtcCk7XHJcblx0XHRcdGlmIChsaW5rZWQpe1xyXG5cdFx0XHRcdGlmICghdmFsdWUpIHByb2dyZXNzID0gMDtcclxuXHRcdFx0XHRlbHNlIGlmICh0b3RhbCl7XHJcblx0XHRcdFx0XHRpZiAodmFsdWUgPiB0b3RhbCl7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybihgVGFzayBsaW5rZWQgXFxgdmFsdWVcXGAgKCR7dmFsdWV9KSBpcyBncmVhdGVyIHRoYW4gXFxgdG90YWxcXGAgKCR7dG90YWx9KS4gVXNpbmcgdmFsdWUgYXMgbmV3IHRvdGFsJHtwcm9ncmVzcyAhPT0gMTAwID8gJyAtIHVwZGF0aW5nIHByb2dyZXNzJyA6ICcnfS5gKTtcclxuXHRcdFx0XHRcdFx0dG90YWwgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0cHJvZ3Jlc3MgPSAxMDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcHJvZyA9IF9yb3VuZF9wKHZhbHVlL3RvdGFsICogMTAwKTtcclxuXHRcdFx0XHRcdFx0aWYgKHByb2dyZXNzICE9PSBwcm9nKXtcclxuXHRcdFx0XHRcdFx0XHRpZiAocHJvZ3Jlc3MpIGNvbnNvbGUud2FybihgVGFzayBsaW5rZWQgXFxgcHJvZ3Jlc3NcXGAgKCR7cHJvZ3Jlc3N9KSByZWNhbGN1bGF0ZWQgdG8gKCR7cHJvZ30pIHVzaW5nIGN1cnJlbnQgdmFsdWUvdG90YWwgKCR7dmFsdWV9LyR7dG90YWx9KSAlLmApO1xyXG5cdFx0XHRcdFx0XHRcdHByb2dyZXNzID0gcHJvZztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGlmIChwcm9ncmVzcykgdG90YWwgPSBfcm91bmRfcCgxMDAvcHJvZ3Jlc3MgKiB2YWx1ZSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vLS0gcGFyc2UvYWRqdXN0OiBlcnJvciwgc3RhdHVzLCBzdGFydFRpbWUsIHN0b3BUaW1lLCBjb21wbGV0ZVxyXG5cdFx0XHRjb21wbGV0ZSA9ICEhY29tcGxldGU7XHJcblx0XHRcdGVycm9yID0gX2dldF9lcnJvcihlcnJvcik7XHJcblx0XHRcdGlmICghKHN0YXR1cyA9IF9nZXRfc3RyKHN0YXR1cykudG9Mb3dlckNhc2UoKSkpIHN0YXR1cyA9ICduZXcnO1xyXG5cdFx0XHRlbHNlIGlmICghVEFTS19TVEFUVVNFUy5pbmNsdWRlcyhzdGF0dXMpKSBzdGF0dXMgPSAnbmV3JztcclxuXHRcdFx0aWYgKCh0bXAgPSBfcG9zX2ludChzdGFydFRpbWUsIC0xKSkgPCAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHRhc2sgXFxgc3RhcnRUaW1lXFxgIHZhbHVlLicpO1xyXG5cdFx0XHRzdGFydFRpbWUgPSB0bXA7XHJcblx0XHRcdGlmICgodG1wID0gX3Bvc19pbnQoc3RvcFRpbWUsIC0xKSkgPCAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHRhc2sgYHN0b3BUaW1lYCB2YWx1ZS4nKTtcclxuXHRcdFx0c3RvcFRpbWUgPSB0bXA7XHJcblx0XHRcdGlmICghKFsnc3RvcHBlZCcsICdmYWlsZWQnLCAnZG9uZSddLmluY2x1ZGVzKHN0YXR1cykgJiYgc3RhcnRUaW1lICYmIHN0b3BUaW1lICYmIHN0YXJ0VGltZSA8IHN0b3BUaW1lKSl7XHJcblx0XHRcdFx0c3RhdHVzID0gJ25ldyc7XHJcblx0XHRcdFx0c3RhcnRUaW1lID0gMDtcclxuXHRcdFx0XHRzdG9wVGltZSA9IDA7XHJcblx0XHRcdFx0ZXJyb3IgPSAnJztcclxuXHRcdFx0XHRjb21wbGV0ZSA9IGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKGVycm9yICYmIHN0YXR1cyAhPT0gJ2ZhaWxlZCcpIHN0YXR1cyA9ICdmYWlsZWQnO1xyXG5cdFx0XHRlbHNlIGlmIChzdGF0dXMgPT09ICdkb25lJyAmJiAhY29tcGxldGUpIGNvbXBsZXRlID0gdHJ1ZTtcclxuXHRcdFx0aWYgKCFUQVNLX1NUQVRVU0VTLmluY2x1ZGVzKHN0YXR1cykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdGFzayBcXGBzdGF0dXNcXGAgdmFsdWUuJyk7XHJcblxyXG5cdFx0XHQvL2NyZWF0ZSB0YXNrXHJcblx0XHRcdGNvbnN0IHQgPSBuZXcgVGFzayhuYW1lLCBsaW5rZWQsIHByZWNpc2lvbiwgZXZlbnRfZGVib3VuY2UpO1xyXG5cdFx0XHRjb25zdCBwcm9wcyA9IHRbUFJPUFNdO1xyXG5cdFx0XHRwcm9wcy5uYW1lID0gbmFtZTtcclxuXHRcdFx0cHJvcHMubGFiZWwgPSBsYWJlbDtcclxuXHRcdFx0cHJvcHMubGlua2VkID0gbGlua2VkO1xyXG5cdFx0XHRwcm9wcy5wcmVjaXNpb24gPSBwcmVjaXNpb24gYXMgbnVtYmVyO1xyXG5cdFx0XHRwcm9wcy5ldmVudF9kZWJvdW5jZSA9IGV2ZW50X2RlYm91bmNlIGFzIG51bWJlcjtcclxuXHRcdFx0cHJvcHMucHJvZ3Jlc3MgPSBwcm9ncmVzcztcclxuXHRcdFx0cHJvcHMudG90YWwgPSB0b3RhbDtcclxuXHRcdFx0cHJvcHMudmFsdWUgPSB2YWx1ZTtcclxuXHRcdFx0cHJvcHMuZXJyb3IgPSBlcnJvcjtcclxuXHRcdFx0cHJvcHMuc3RhdHVzID0gc3RhdHVzO1xyXG5cdFx0XHRwcm9wcy5zdGFydFRpbWUgPSBzdGFydFRpbWU7XHJcblx0XHRcdHByb3BzLnN0b3BUaW1lID0gc3RvcFRpbWU7XHJcblx0XHRcdHByb3BzLmNvbXBsZXRlID0gY29tcGxldGU7XHJcblx0XHRcdHByb3BzLml0ZW0gPSBpdGVtOyAvLy0tIGl0ZW1cclxuXHRcdFx0cHJvcHMuX2RlYm91bmNlZF91cGRhdGUgPSBfZGVib3VuY2UoKCkgPT4ge1xyXG5cdFx0XHRcdGlmIChwcm9wcy5fZG9uZSkgcmV0dXJuO1xyXG5cdFx0XHRcdHByb3BzLl9lbWl0dGVyLmVtaXQoJ3VwZGF0ZScsIHQuZGF0YSgpKTtcclxuXHRcdFx0fSwgdC5ldmVudF9kZWJvdW5jZSk7XHJcblx0XHRcdHJldHVybiB0O1xyXG5cdFx0fVxyXG5cdFx0Y2F0Y2ggKGU6IGFueSl7XHJcblx0XHRcdGNvbnN0IGVycm9yID0gYENyZWF0ZSBUYXNrIEZhaWx1cmUhICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogZX1gLnRyaW0oKTtcclxuXHRcdFx0Y29uc3QgX29wdGlvbnMgPSB7bmFtZSwgbGFiZWwsIGxpbmtlZCwgcHJlY2lzaW9uLCBldmVudF9kZWJvdW5jZSwgcHJvZ3Jlc3MsIHRvdGFsLCB2YWx1ZSwgZXJyb3IsIHN0YXR1cywgc3RhcnRUaW1lLCBzdG9wVGltZSwgY29tcGxldGUsIGl0ZW19O1xyXG5cdFx0XHRjb25zb2xlLndhcm4oZXJyb3IsIHtfb3B0aW9uc30pO1xyXG5cdFx0XHRpZiAoZS5uYW1lID09PSAnVHlwZUVycm9yJykgdGhyb3cgbmV3IFR5cGVFcnJvcihlcnJvcik7XHJcblx0XHRcdGVsc2UgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcclxuXHRcdH1cclxuXHR9XHJcbn0iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIElFdmVudCB9IGZyb20gJy4uL0V2ZW50RW1pdHRlcic7XHJcbmltcG9ydCB7IElUYXNrLCBUYXNrIH0gZnJvbSAnLi9fVGFzayc7XHJcblxyXG4vKipcclxuICogVGFza3MgZGF0YSBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRhc2tzRGF0YSB7XHJcblx0cHJlY2lzaW9uOiBudW1iZXI7XHJcblx0ZXZlbnRfZGVib3VuY2U6IG51bWJlcjtcclxuXHRzaXplOiBudW1iZXI7XHJcblx0cHJvZ3Jlc3M6IG51bWJlcjtcclxuXHRydW5uaW5nOiBib29sZWFuO1xyXG5cdHN0YXJ0ZWQ6IGJvb2xlYW47XHJcblx0Y29tcGxldGU6IGJvb2xlYW47XHJcblx0c3RhcnRUaW1lOiBudW1iZXI7XHJcblx0c3RvcFRpbWU6IG51bWJlcjtcclxuXHRlbGFwc2VkVGltZTogbnVtYmVyO1xyXG5cdHRhc2tzOiB7W25hbWU6IHN0cmluZ106IElUYXNrfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIERlZmF1bHQgZXZlbnQgZGVib3VuY2UgbWlsbGlzZWNvbmRzXHJcbiAqL1xyXG5sZXQgREVGQVVMVF9FVkVOVF9ERUJPVU5DRTogbnVtYmVyID0gMjAwO1xyXG5cclxuLyoqXHJcbiAqIERlZmF1bHQgcHJlY2lzaW9uIH4gcm91bmQgZGVjaW1hbCBwbGFjZXNcclxuICovXHJcbmxldCBERUZBVUxUX1BSRUNJU0lPTjogbnVtYmVyID0gMjtcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgLSBwYXJzZSBwb3NpdGl2ZSBudW1iZXJcclxuICogXHJcbiAqIEBwYXJhbSB2YWxcclxuICogQHBhcmFtIF9kZWZhdWx0XHJcbiAqIEBwYXJhbSBfYmxhbmtcclxuICogQHJldHVybnMgYG51bWJlcmBcclxuICovXHJcbmNvbnN0IF9wb3NfbnVtID0gKHZhbDogYW55LCBfZGVmYXVsdDogbnVtYmVyID0gMCwgX2JsYW5rOiBudW1iZXIgPSAwKTogbnVtYmVyID0+IHtcclxuXHRpZiAoW3VuZGVmaW5lZCwgbnVsbF0uaW5jbHVkZXModmFsKSB8fCAnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbCAmJiAhKHZhbCA9IHZhbC50cmltKCkpKSByZXR1cm4gX2JsYW5rO1xyXG5cdGlmICghaXNOYU4odmFsID0gcGFyc2VGbG9hdCh2YWwpKSAmJiBOdW1iZXIuaXNGaW5pdGUodmFsKSAmJiB2YWwgPj0gMCkgcmV0dXJuIHZhbDtcclxuXHRyZXR1cm4gX2RlZmF1bHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gcGFyc2UgcG9zaXRpdmUgaW50ZWdlclxyXG4gKiBcclxuICogQHBhcmFtIHZhbFxyXG4gKiBAcGFyYW0gX2RlZmF1bHRcclxuICogQHBhcmFtIF9ibGFua1xyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCBpbnRlZ2VyXHJcbiAqL1xyXG5jb25zdCBfcG9zX2ludCA9ICh2YWw6IGFueSwgX2RlZmF1bHQ6IG51bWJlciA9IDAsIF9ibGFuazogbnVtYmVyID0gMCk6IG51bWJlciA9PiBwYXJzZUludChfcG9zX251bSh2YWwsIF9kZWZhdWx0LCBfYmxhbmspICsgJycpO1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciAtIHJvdW5kIG51bWJlclxyXG4gKiBcclxuICogQHBhcmFtIHZhbCAtIHJvdW5kIHZhbHVlXHJcbiAqIEBwYXJhbSBwbGFjZXMgLSBwcmVjaXNpb24gZGVjaW1hbCBwbGFjZXMgW2RlZmF1bHQ6IGBERUZBVUxUX1BSRUNJU0lPTmBdXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgIHJvdW5kZWRcclxuICovXHJcbmNvbnN0IF9yb3VuZCA9ICh2YWw6IG51bWJlciwgcGxhY2VzPzogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRjb25zdCBwID0gMTAgKiogX3Bvc19pbnQocGxhY2VzLCBERUZBVUxUX1BSRUNJU0lPTiwgREVGQVVMVF9QUkVDSVNJT04pO1xyXG5cdHJldHVybiBNYXRoLnJvdW5kKCh2YWwgKyBOdW1iZXIuRVBTSUxPTikgKiBwKSAvIHA7XHJcbn07XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gZGVib3VuY2VkIGNhbGxiYWNrXHJcbiAqIFxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBjYWxsYmFjayBoYW5kbGVyXHJcbiAqIEBwYXJhbSB0aW1lb3V0IC0gdGltZW91dCBtaWxsaXNlY29uZHNcclxuICogQHJldHVybnMgYCgpPT52b2lkYCBkZWJvdW5jZWQgY2FsbGJhY2tcclxuICovXHJcbmNvbnN0IF9kZWJvdW5jZSA9IChjYWxsYmFjazogKCk9PnZvaWQsIHRpbWVvdXQ6IG51bWJlciA9IDApOiAoKSA9PiB2b2lkID0+IHtcclxuXHRsZXQgdGltZXI6IGFueSwgbWF4X3dhaXQ6IGFueTtcclxuXHRjb25zdCBfaGFuZGxlciA9ICgpID0+IHtcclxuXHRcdGNsZWFyVGltZW91dCh0aW1lcik7XHJcblx0XHRjbGVhclRpbWVvdXQobWF4X3dhaXQpO1xyXG5cdFx0bWF4X3dhaXQgPSB1bmRlZmluZWQ7XHJcblx0XHRjYWxsYmFjaygpO1xyXG5cdH07XHJcblx0cmV0dXJuICgpID0+IHtcclxuXHRcdGlmICghdGltZW91dCkgcmV0dXJuIGNhbGxiYWNrKCk7XHJcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xyXG5cdFx0dGltZXIgPSBzZXRUaW1lb3V0KF9oYW5kbGVyLCB0aW1lb3V0KTtcclxuXHRcdGlmICghbWF4X3dhaXQpIG1heF93YWl0ID0gc2V0VGltZW91dChfaGFuZGxlciwgTWF0aC5mbG9vcih0aW1lb3V0ICogMS41KSk7XHJcblx0fTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBgU3ltYm9sYCBwcml2YXRlIHByb3BzIGtleSBuYW1lXHJcbiAqL1xyXG5jb25zdCBQUk9QUyA9IFN5bWJvbChgX19wcml2YXRlX3Byb3BzXyR7RGF0ZS5ub3coKX1fX2ApO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBUYXNrc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRhc2tzXHJcbntcclxuXHQvKipcclxuXHQgKiBUYXNrcyBnbG9iYWwgZXZlbnQgZGVib3VuY2UgbWlsbGlzZWNvbmRzXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBldmVudF9kZWJvdW5jZSgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIERFRkFVTFRfRVZFTlRfREVCT1VOQ0U7XHJcblx0fVxyXG5cdHN0YXRpYyBzZXQgZXZlbnRfZGVib3VuY2UodmFsdWU6IGFueSl7XHJcblx0XHRERUZBVUxUX0VWRU5UX0RFQk9VTkNFID0gX3Bvc19pbnQodmFsdWUsIERFRkFVTFRfRVZFTlRfREVCT1VOQ0UsIDApO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBnbG9iYWwgcHJlY2lzaW9uIH4gcm91bmQgZGVjaW1hbCBwbGFjZXNcclxuXHQgKi9cclxuXHRzdGF0aWMgZ2V0IGRlY2ltYWxfcHJlY2lzaW9uKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gREVGQVVMVF9QUkVDSVNJT047XHJcblx0fVxyXG5cdHN0YXRpYyBzZXQgZGVjaW1hbF9wcmVjaXNpb24odmFsdWU6IGFueSl7XHJcblx0XHRERUZBVUxUX1BSRUNJU0lPTiA9IF9wb3NfaW50KHZhbHVlLCBERUZBVUxUX1BSRUNJU0lPTiwgMik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBJbnN0YW5jZSBcInByaXZhdGVcIiBwcm9wc1xyXG5cdCAqL1xyXG5cdFtQUk9QU106IHtcclxuXHRcdHByZWNpc2lvbjogbnVtYmVyO1xyXG5cdFx0ZXZlbnRfZGVib3VuY2U6IG51bWJlcjtcclxuXHRcdF90YXNrczogTWFwPHN0cmluZywgVGFzaz47XHJcblx0XHRfdW5zdWJzY3JpYmU6IE1hcDxzdHJpbmcsICgpPT52b2lkPjtcclxuXHRcdF9lbWl0dGVyOiBFdmVudEVtaXR0ZXI7XHJcblx0XHRfZGVib3VuY2VkX3VwZGF0ZTogKCk9PnZvaWQ7XHJcblx0fSA9IHt9IGFzIGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogVGFza3MgY291bnRcclxuXHQgKi9cclxuXHRnZXQgc2l6ZSgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLl90YXNrcy5zaXplO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBUYXNrIHByZWNpc2lvbiAtIGBpbnRlZ2VyYCBkZWNpbWFsIHBsYWNlc1xyXG5cdCAqL1xyXG5cdGdldCBwcmVjaXNpb24oKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5wcmVjaXNpb247XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIGV2ZW50IGRlYm91bmNlIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogYFRhc2tzLmV2ZW50X2RlYm91bmNlYClcclxuXHQgKi9cclxuXHRnZXQgZXZlbnRfZGVib3VuY2UoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5ldmVudF9kZWJvdW5jZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZSBuZXcgaW5zdGFuY2VcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gcHJlY2lzaW9uIC0gZGVjaW1hbCBwbGFjZXMgKGRlZmF1bHQ6IGBUYXNrcy5kZWNpbWFsX3ByZWNpc2lvbmApXHJcblx0ICogQHBhcmFtIGV2ZW50X2RlYm91bmNlIC0gZXZlbnQgZGVib3VuY2UgbWlsbGlzZWNvbmRzIChkZWZhdWx0OiBgVGFza3MuZXZlbnRfZGVib3VuY2VgKVxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKHByZWNpc2lvbjogbnVtYmVyID0gVGFza3MuZGVjaW1hbF9wcmVjaXNpb24sIGV2ZW50X2RlYm91bmNlOiBudW1iZXIgPSBUYXNrcy5ldmVudF9kZWJvdW5jZSl7XHJcblx0XHRwcmVjaXNpb24gPSBfcG9zX2ludChwcmVjaXNpb24sIFRhc2tzLmRlY2ltYWxfcHJlY2lzaW9uLCBUYXNrcy5kZWNpbWFsX3ByZWNpc2lvbik7XHJcblx0XHRldmVudF9kZWJvdW5jZSA9IF9wb3NfaW50KGV2ZW50X2RlYm91bmNlLCBUYXNrcy5ldmVudF9kZWJvdW5jZSwgVGFza3MuZXZlbnRfZGVib3VuY2UpO1xyXG5cdFx0dGhpc1tQUk9QU10gPSB7XHJcblx0XHRcdHByZWNpc2lvbjogcHJlY2lzaW9uLFxyXG5cdFx0XHRldmVudF9kZWJvdW5jZTogZXZlbnRfZGVib3VuY2UsXHJcblx0XHRcdF90YXNrczogbmV3IE1hcCgpLFxyXG5cdFx0XHRfdW5zdWJzY3JpYmU6IG5ldyBNYXAoKSxcclxuXHRcdFx0X2VtaXR0ZXI6IG5ldyBFdmVudEVtaXR0ZXIoKSxcclxuXHRcdFx0X2RlYm91bmNlZF91cGRhdGU6IF9kZWJvdW5jZSgoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdFx0XHRwcm9wcy5fZW1pdHRlci5lbWl0KCd1cGRhdGUnLCB0aGlzLmRhdGEoKSk7XHJcblx0XHRcdH0sIGV2ZW50X2RlYm91bmNlKSxcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdGFza3MgZGF0YVxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIGBJVGFza3NEYXRhYCBvcHRpb25zIH4gaS5lLiBge3ByZWNpc2lvbiwgZXZlbnRfZGVib3VuY2UsIHNpemUsIHByb2dyZXNzLCBydW5uaW5nLCBzdGFydGVkLCBjb21wbGV0ZSwgc3RhcnRUaW1lLCBzdG9wVGltZSwgZWxhcHNlZFRpbWUsIHRhc2tzfWBcclxuXHQgKi9cclxuXHRnZXQgZGF0YSgpOiAoKT0+SVRhc2tzRGF0YSB7XHJcblx0XHRyZXR1cm4gKCk6IElUYXNrc0RhdGEgPT4ge1xyXG5cdFx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0XHRsZXQgc2l6ZTogbnVtYmVyID0gMDtcclxuXHRcdFx0bGV0IHN0YXJ0VGltZTogbnVtYmVyID0gMDtcclxuXHRcdFx0bGV0IHN0b3BUaW1lOiBudW1iZXIgPSAwO1xyXG5cdFx0XHRsZXQgYWxsX3Byb2dyZXNzOiBudW1iZXIgPSAwO1xyXG5cdFx0XHRsZXQgZnVsbF9wcm9ncmVzczogbnVtYmVyID0gMDtcclxuXHRcdFx0bGV0IGhhc19ydW5uaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHRcdGxldCBoYXNfc3RhcnRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0XHRsZXQgaGFzX2luY29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0XHRcdC8vcGFyc2UgdGFza3MgZGF0YVxyXG5cdFx0XHRjb25zdCB0YXNrX2VudHJpZXM6IFtuYW1lOiBzdHJpbmcsIHRhc2s6IElUYXNrXVtdID0gW107XHJcblx0XHRcdGZvciAoY29uc3QgdGFzayBvZiBbLi4ucHJvcHMuX3Rhc2tzLnZhbHVlcygpXSl7XHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IHRhc2suZGF0YSgpO1xyXG5cdFx0XHRcdHNpemUgKys7XHJcblxyXG5cdFx0XHRcdC8vLS0gcHJvZ3Jlc3NcclxuXHRcdFx0XHRmdWxsX3Byb2dyZXNzICs9IDEwMDtcclxuXHRcdFx0XHRhbGxfcHJvZ3Jlc3MgKz0gZGF0YS5wcm9ncmVzcztcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvLy0tIGNvbXBsZXRlXHJcblx0XHRcdFx0aWYgKCFoYXNfaW5jb21wbGV0ZSAmJiAhZGF0YS5jb21wbGV0ZSkgaGFzX2luY29tcGxldGUgPSB0cnVlO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vLS0gc3RhdHVzID0gcnVubmluZy9zdGFydGVkXHJcblx0XHRcdFx0aWYgKGRhdGEuc3RhdHVzID09PSAncnVubmluZycpe1xyXG5cdFx0XHRcdFx0aWYgKCFoYXNfcnVubmluZykgaGFzX3J1bm5pbmcgPSB0cnVlO1xyXG5cdFx0XHRcdFx0aWYgKCFoYXNfc3RhcnRlZCkgaGFzX3N0YXJ0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGlmICghaGFzX3N0YXJ0ZWQgJiYgWydmYWlsZWQnLCAnZG9uZSddLmluY2x1ZGVzKGRhdGEuc3RhdHVzKSkgaGFzX3N0YXJ0ZWQgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHQvLy0tIHN0YXJ0VGltZVxyXG5cdFx0XHRcdGlmIChkYXRhLnN0YXJ0VGltZSAmJiAoIXN0YXJ0VGltZSAmJiBkYXRhLnN0YXJ0VGltZSA8IHN0YXJ0VGltZSkpIHN0YXJ0VGltZSA9IGRhdGEuc3RhcnRUaW1lO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vLS0gc3RvcFRpbWVcclxuXHRcdFx0XHRpZiAoZGF0YS5zdG9wVGltZSAmJiAoIXN0b3BUaW1lICYmIGRhdGEuc3RvcFRpbWUgPiBzdG9wVGltZSkpIHN0b3BUaW1lID0gZGF0YS5zdG9wVGltZTtcclxuXHJcblx0XHRcdFx0Ly90YXNrIGVudHJ5XHJcblx0XHRcdFx0dGFza19lbnRyaWVzLnB1c2goW3Rhc2submFtZSwgZGF0YV0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IHRhc2tzOiB7W25hbWU6IHN0cmluZ106IElUYXNrfSA9IE9iamVjdC5mcm9tRW50cmllcyh0YXNrX2VudHJpZXMpO1xyXG5cdFx0XHRcclxuXHRcdFx0Ly9jYWxjIGRhdGFcclxuXHRcdFx0Y29uc3QgcHJvZ3Jlc3MgPSAoIWFsbF9wcm9ncmVzcyB8fCAhZnVsbF9wcm9ncmVzcykgPyAwIDogKChhbGxfcHJvZ3Jlc3MgPj0gZnVsbF9wcm9ncmVzcykgPyAxMDAgOiAgX3JvdW5kKGFsbF9wcm9ncmVzcy9mdWxsX3Byb2dyZXNzICogMTAwLCBwcm9wcy5wcmVjaXNpb24pKTtcclxuXHRcdFx0Y29uc3QgcnVubmluZyA9IGhhc19ydW5uaW5nO1xyXG5cdFx0XHRjb25zdCBzdGFydGVkID0gaGFzX3N0YXJ0ZWQ7XHJcblx0XHRcdGNvbnN0IGNvbXBsZXRlID0gc3RhcnRlZCAmJiAhaGFzX2luY29tcGxldGU7XHJcblx0XHRcdGxldCBlbGFwc2VkVGltZSA9IDA7XHJcblx0XHRcdGlmIChzdG9wVGltZSAmJiBzdGFydFRpbWUpe1xyXG5cdFx0XHRcdGlmIChzdG9wVGltZSA8IHN0YXJ0VGltZSkgc3RhcnRUaW1lID0gc3RvcFRpbWU7XHJcblx0XHRcdFx0ZWxhcHNlZFRpbWUgPSBzdG9wVGltZSAtIHN0YXJ0VGltZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly9kYXRhXHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0cHJlY2lzaW9uOiB0aGlzLnByZWNpc2lvbixcclxuXHRcdFx0XHRldmVudF9kZWJvdW5jZTogdGhpcy5ldmVudF9kZWJvdW5jZSxcclxuXHRcdFx0XHRzaXplLFxyXG5cdFx0XHRcdHByb2dyZXNzLFxyXG5cdFx0XHRcdHJ1bm5pbmcsXHJcblx0XHRcdFx0c3RhcnRlZCxcclxuXHRcdFx0XHRjb21wbGV0ZSxcclxuXHRcdFx0XHRzdGFydFRpbWUsXHJcblx0XHRcdFx0c3RvcFRpbWUsXHJcblx0XHRcdFx0ZWxhcHNlZFRpbWUsXHJcblx0XHRcdFx0dGFza3MsXHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBVcGRhdGUgZXZlbnQgdHJpZ2dlclxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdGdldCB1cGRhdGUoKTogKCk9PlRhc2tzIHtcclxuXHRcdHJldHVybiAoKTogVGFza3MgPT4ge1xyXG5cdFx0XHR0aGlzW1BST1BTXS5fZGVib3VuY2VkX3VwZGF0ZSgpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgdXBkYXRlIGV2ZW50IHN1YnNjcmliZXIgfiBgZXZlbnQgPSB7dHlwZTogJ3VwZGF0ZScsIGRhdGE6IElUYXNrfWBcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gbGlzdGVuZXIgLSBldmVudCBjYWxsYmFjayBsaXN0ZW5lclxyXG5cdCAqIEByZXR1cm5zIGAoKCk9PnZvaWQpYCB1bnN1YnNjcmliZSBjYWxsYmFja1xyXG5cdCAqL1xyXG5cdHN1YnNjcmliZShsaXN0ZW5lcjogKGV2ZW50OklFdmVudCk9PnZvaWQpOiAoKT0+dm9pZCB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uX2VtaXR0ZXIuc3Vic2NyaWJlKCd1cGRhdGUnLCBsaXN0ZW5lcik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDaGVjayBpZiB0YXNrIG5hbWUgZXhpc3RzXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG5hbWVcclxuXHQgKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuXHQgKi9cclxuXHRoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uX3Rhc2tzLmhhcyhuYW1lKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0YXNrIGJ5IG5hbWVcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gbmFtZSAtIHRhc2sgbmFtZVxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYFxyXG5cdCAqL1xyXG5cdGdldChuYW1lOiBzdHJpbmcpOiBUYXNrfHVuZGVmaW5lZCB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uX3Rhc2tzLmdldChuYW1lKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCBuZXcgdGFza1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0YXNrIC0gYHN0cmluZ2AgdGFzayBuYW1lIHwgYElUYXNrYCB0YXNrIGRhdGEgfCBgVGFza2AgaW5zdGFuY2VcclxuXHQgKiBAcGFyYW0gbGlua2VkIC0gdGFzayB2YWx1ZS90b3RhbC9wcm9ncmVzcyBsaW5rZWQgfiByZWNhbGN1bGF0ZSBvbiBjaGFuZ2VcclxuXHQgKiBAcGFyYW0gZXZlbnRfZGVib3VuY2UgLSBldmVudCBkZWJvdW5jZSBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGBUYXNrLmV2ZW50X2RlYm91bmNlYClcclxuXHQgKiBAcmV0dXJucyBgVGFza2BcclxuXHQgKi9cclxuXHRhZGQodGFzazogc3RyaW5nfElUYXNrfFRhc2ssIGxpbmtlZDogYm9vbGVhbiA9IGZhbHNlLCBldmVudF9kZWJvdW5jZT86IG51bWJlcik6IFRhc2sge1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdGV2ZW50X2RlYm91bmNlID0gKGV2ZW50X2RlYm91bmNlID0gX3Bvc19pbnQoZXZlbnRfZGVib3VuY2UsIC0xLCAtMSkpID49IDAgPyBldmVudF9kZWJvdW5jZSA6IHVuZGVmaW5lZDtcclxuXHRcdFxyXG5cdFx0Ly90YXNrIGluc3RhbmNlXHJcblx0XHRsZXQgX3Rhc2s6IFRhc2sgPSB1bmRlZmluZWQgYXMgYW55O1xyXG5cdFx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdGFzaykgX3Rhc2sgPSBuZXcgVGFzayh0YXNrLCBsaW5rZWQsIHByb3BzLnByZWNpc2lvbiwgZXZlbnRfZGVib3VuY2UpO1xyXG5cdFx0ZWxzZSBpZiAodGFzayBpbnN0YW5jZW9mIFRhc2spIF90YXNrID0gdGFzaztcclxuXHRcdGVsc2UgaWYgKCdvYmplY3QnID09PSB0eXBlb2YgdGFzayAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIHRhc2s/Lm5hbWUpIF90YXNrID0gVGFzay5jcmVhdGUodGFzaywgcHJvcHMucHJlY2lzaW9uLCBldmVudF9kZWJvdW5jZSk7XHJcblx0XHRpZiAoIShfdGFzayBpbnN0YW5jZW9mIFRhc2spKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBZGQgXFxgVGFza1xcYCBvYmplY3QgaXMgaW52YWxpZC4nKTtcclxuXHJcblx0XHQvL3Rhc2sgZXhpc3RzIC0gcmVwbGFjZVxyXG5cdFx0aWYgKHRoaXMuaGFzKF90YXNrLm5hbWUpKSBjb25zb2xlLndhcm4oYEV4aXN0aW5nIHRhc2sgbmFtZWQgXCIke190YXNrLm5hbWV9XCIgaGFzIGJlZW4gcmVwbGFjZWQuYCk7XHJcblxyXG5cdFx0Ly90YXNrIGxpc3RlbmVyXHJcblx0XHRjb25zdCB1bnN1YnNjcmliZSA9IF90YXNrLnN1YnNjcmliZSgoZXZlbnQ6IElFdmVudCkgPT4ge1xyXG5cdFx0XHRjb25zb2xlLmRlYnVnKGAtLSB0YXNrIGV2ZW50ICR7ZXZlbnQuZGF0YS5uYW1lfWAsIGV2ZW50LmRhdGEucHJvZ3Jlc3MpOyAvL1RPRE86IHJlbW92ZSB0YXNrIGV2ZW50IGRlYnVnXHJcblx0XHRcdHRoaXMudXBkYXRlKCk7IC8vdGFzayB1cGRhdGVcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vdGFzayBhZGRcclxuXHRcdHByb3BzLl90YXNrcy5zZXQoX3Rhc2submFtZSwgX3Rhc2spO1xyXG5cdFx0cHJvcHMuX3Vuc3Vic2NyaWJlLnNldChfdGFzay5uYW1lLCB1bnN1YnNjcmliZSk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpOyAvL3VwZGF0ZVxyXG5cdFx0XHJcblx0XHQvL3Jlc3VsdFxyXG5cdFx0cmV0dXJuIF90YXNrO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBSZW1vdmUgdGFzayBieSBuYW1lXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG5hbWUgLSB0YXNrIG5hbWVcclxuXHQgKiBAcmV0dXJucyBgVGFza3NgIGluc3RhbmNlXHJcblx0ICovXHJcblx0cmVtb3ZlKG5hbWU6IHN0cmluZyk6IFRhc2tzIHtcclxuXHRcdGNvbnN0IHByb3BzID0gdGhpc1tQUk9QU107XHJcblx0XHRpZiAoIXByb3BzLl90YXNrcy5oYXMobmFtZSkpIHJldHVybiB0aGlzO1xyXG5cdFx0XHJcblx0XHQvL3Vuc3Vic2NyaWJlIHRhc2sgbGlzdGVuZXJcclxuXHRcdGNvbnN0IHVuc3Vic2NyaWJlID0gcHJvcHMuX3Vuc3Vic2NyaWJlLmdldChuYW1lKTtcclxuXHRcdGlmICh1bnN1YnNjcmliZSl7XHJcblx0XHRcdHByb3BzLl91bnN1YnNjcmliZS5kZWxldGUobmFtZSk7XHJcblx0XHRcdHVuc3Vic2NyaWJlKCk7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vcmVtb3ZlIHRhc2sgLSB1cGRhdGVcclxuXHRcdHByb3BzLl90YXNrcy5kZWxldGUobmFtZSk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG59IiwiZXhwb3J0ICogZnJvbSAnLi9fVGFzayc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX1Rhc2tzJzsiLCJpbXBvcnQgeyBfY2xvbmUsIF9qc29uU3RyaW5naWZ5LCBfaXNEYXRlLCBfc3RyLCBfc3RyaW5nLCBfc3RyaW5nYWJsZSwgX3N0ckVzY2FwZSwgX2Jvb2wsIF9wb3NJbnQgfSBmcm9tICcuLi91dGlscyc7XHJcblxyXG4vKipcclxuICogVGVybSBmb3JtYXQgcmVzdWx0IGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJVGVybUZvcm1hdCB7XHJcblx0bWV0aG9kOiAodmFsdWU6IHVuZGVmaW5lZHwnbG9nJ3wnZGVidWcnfCd3YXJuJ3wnZXJyb3InfCdpbmZvJykgPT4gSVRlcm1Gb3JtYXQ7XHJcblx0Zm9ybWF0OiAoZm9ybWF0czogc3RyaW5nfHN0cmluZ1tdLCAuLi5hcmdzOiBhbnlbXSkgPT4gSVRlcm1Gb3JtYXQ7XHJcblx0dmFsdWVzOiAoLi4uYXJnczogYW55W10pID0+IGFueVtdO1xyXG5cdGNsZWFuOiAoLi4uYXJnczogYW55W10pID0+IGFueVtdO1xyXG5cdGxvZzogKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4gdm9pZDtcclxuXHRkZWJ1ZzogKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4gdm9pZDtcclxuXHR3YXJuOiAobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB2b2lkO1xyXG5cdGVycm9yOiAobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB2b2lkO1xyXG5cdGluZm86IChtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pID0+IHZvaWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUZXJtIGxvZyBtZXRob2QgfiBzdGF0aWMgcmVhZC93cml0ZSBjYWNoZVxyXG4gKi9cclxubGV0IFRFUk1fRk9STUFUX0RJU0FCTEVEOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4vKipcclxuICogVGVybSBsb2cgbWV0aG9kIH4gc3RhdGljIHJlYWQvd3JpdGUgY2FjaGVcclxuICovXHJcbmxldCBURVJNX0xPR19NRVRIT0Q6IHVuZGVmaW5lZHwnbG9nJ3wnZGVidWcnfCd3YXJuJ3wnZXJyb3InfCdpbmZvJyA9IHVuZGVmaW5lZFxyXG5cclxuLyoqXHJcbiAqIFRlcm0gYGNvbnNvbGUuKmAgbG9nZ2VyXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgVGVybVxyXG57XHJcblx0LyoqXHJcblx0ICogRm9ybWF0IGRpc2FibGVkXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBGT1JNQVRfRElTQUJMRUQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gVEVSTV9GT1JNQVRfRElTQUJMRUQ7XHJcblx0fVxyXG5cdHN0YXRpYyBzZXQgRk9STUFUX0RJU0FCTEVEKHZhbHVlOiBhbnkpe1xyXG5cdFx0VEVSTV9GT1JNQVRfRElTQUJMRUQgPSBfYm9vbCh2YWx1ZSwgdHJ1ZSkgPz8gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb25zb2xlIGxvZyBtZXRob2RzXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBMT0dfTUVUSE9EUygpOiBzdHJpbmdbXSB7XHJcblx0XHRyZXR1cm4gWydsb2cnLCAnZGVidWcnLCAnd2FybicsICdlcnJvcicsICdpbmZvJ107XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQcmVmZXJyZWQgY29uc29sZSBsb2cgbWV0aG9kXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBMT0dfTUVUSE9EKCk6IHVuZGVmaW5lZHwnbG9nJ3wnZGVidWcnfCd3YXJuJ3wnZXJyb3InfCdpbmZvJyB7XHJcblx0XHRyZXR1cm4gVEVSTV9MT0dfTUVUSE9EO1xyXG5cdH1cclxuXHRzdGF0aWMgc2V0IExPR19NRVRIT0QodmFsdWU6IGFueSl7XHJcblx0XHRURVJNX0xPR19NRVRIT0QgPSB0aGlzLkxPR19NRVRIT0RTLmluY2x1ZGVzKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGV4dCBmb3JtYXRzXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBGT1JNQVRTKCk6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9IHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHJlc2V0OiAnXFx4MWJbMG0nLFxyXG5cdFx0XHRicmlnaHQ6ICdcXHgxYlsxbScsXHJcblx0XHRcdGRpbTogJ1xceDFiWzJtJyxcclxuXHRcdFx0dW5kZXJzY29yZTogJ1xceDFiWzRtJyxcclxuXHRcdFx0Ymxpbms6ICdcXHgxYls1bScsXHJcblx0XHRcdHJldmVyc2U6ICdcXHgxYls3bScsXHJcblx0XHRcdGhpZGRlbjogJ1xceDFiWzhtJyxcclxuXHRcdFx0ZmdfYmxhY2s6ICdcXHgxYlszMG0nLFxyXG5cdFx0XHRmZ19yZWQ6ICdcXHgxYlszMW0nLFxyXG5cdFx0XHRmZ19ncmVlbjogJ1xceDFiWzMybScsXHJcblx0XHRcdGZnX3llbGxvdzogJ1xceDFiWzMzbScsXHJcblx0XHRcdGZnX2JsdWU6ICdcXHgxYlszNG0nLFxyXG5cdFx0XHRmZ19tYWdlbnRhOiAnXFx4MWJbMzVtJyxcclxuXHRcdFx0ZmdfY3lhbjogJ1xceDFiWzM2bScsXHJcblx0XHRcdGZnX3doaXRlOiAnXFx4MWJbMzdtJyxcclxuXHRcdFx0ZmdfZ3JheTogJ1xceDFiWzkwbScsXHJcblx0XHRcdGJnX2JsYWNrOiAnXFx4MWJbNDBtJyxcclxuXHRcdFx0YmdfcmVkOiAnXFx4MWJbNDFtJyxcclxuXHRcdFx0YmdfZ3JlZW46ICdcXHgxYls0Mm0nLFxyXG5cdFx0XHRiZ195ZWxsb3c6ICdcXHgxYls0M20nLFxyXG5cdFx0XHRiZ19ibHVlOiAnXFx4MWJbNDRtJyxcclxuXHRcdFx0YmdfbWFnZW50YTogJ1xceDFiWzQ1bScsXHJcblx0XHRcdGJnX2N5YW46ICdcXHgxYls0Nm0nLFxyXG5cdFx0XHRiZ193aGl0ZTogJ1xceDFiWzQ3bScsXHJcblx0XHRcdGJnX2dyYXk6ICdcXHgxYlsxMDBtJyxcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQcmVkZWZpbmVkIHRleHQgZm9ybWF0c1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXQgUFJFREVGSU5FRF9GT1JNQVRTKCk6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd8c3RyaW5nW119IHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGxvZzogJ2ZnX3doaXRlJyxcclxuXHRcdFx0ZHVtcDogWydmZ193aGl0ZScsICdicmlnaHQnXSxcclxuXHRcdFx0ZGVidWc6ICdmZ19ncmF5JyxcclxuXHRcdFx0ZXJyb3I6ICdmZ19yZWQnLFxyXG5cdFx0XHR3YXJuOiAnZmdfeWVsbG93JyxcclxuXHRcdFx0aW5mbzogWydmZ19jeWFuJywgJ2JyaWdodCddLFxyXG5cdFx0XHRzdWNjZXNzOiAnZmdfZ3JlZW4nLFxyXG5cdFx0XHRiZ19sb2c6IFsnYmdfYmx1ZScsICdmZ193aGl0ZSddLFxyXG5cdFx0XHRiZ19kZWJ1ZzogWydiZ19ncmF5JywgJ2ZnX2JsYWNrJ10sXHJcblx0XHRcdGJnX2Vycm9yOiBbJ2JnX3JlZCcsICdmZ193aGl0ZSddLFxyXG5cdFx0XHRiZ193YXJuOiBbJ2JnX3llbGxvdycsICdmZ19ibGFjayddLFxyXG5cdFx0XHRiZ19pbmZvOiBbJ2JnX2N5YW4nLCAnZmdfYmxhY2snXSxcclxuXHRcdFx0Ymdfc3VjY2VzczogWydiZ19ncmVlbicsICdmZ193aGl0ZSddLFxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhcnNlIHN0YW5kYXJkIHRleHQgZm9ybWF0c1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBmb3JtYXRzIC0gdGV4dCBmb3JtYXRzXHJcblx0ICogQHJldHVybnMgYHN0cmluZ1tdYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXRGb3JtYXRzKGZvcm1hdHM6IHN0cmluZ3xzdHJpbmdbXSk6IHN0cmluZ1tdIHtcclxuXHRcdGNvbnN0IEZNID0gdGhpcy5GT1JNQVRTO1xyXG5cdFx0Y29uc3QgUEYgPSB0aGlzLlBSRURFRklORURfRk9STUFUUztcclxuXHRcdGNvbnN0IF9mb3JtYXRzOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkoZm9ybWF0cykgPyBmb3JtYXRzIDogJ3N0cmluZycgPT09IHR5cGVvZiBmb3JtYXRzID8gW2Zvcm1hdHNdIDogW107XHJcblx0XHRyZXR1cm4gX2Zvcm1hdHMucmVkdWNlPHN0cmluZ1tdPigocHJldiwgdmFsKSA9PiB7XHJcblx0XHRcdGlmICgodmFsID0gdmFsLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSAmJiB2YWwgIT09ICdyZXNldCcpe1xyXG5cdFx0XHRcdGxldCB0bXAgPSB2YWwgPSB2YWwucmVwbGFjZSgvW15hLXowLTldL2lnLCAnXycpLnJlcGxhY2UoJ2dyZXknLCAnZ3JheScpO1xyXG5cdFx0XHRcdGNvbnN0IF9hZGRQRiA9IChrOiBzdHJpbmcpOiB2b2lkID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHYgPSBQRltrXTtcclxuXHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHYpKSBwcmV2LnB1c2goLi4udik7XHJcblx0XHRcdFx0XHRlbHNlIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHYpIHByZXYucHVzaCh2KTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdGlmIChGTS5oYXNPd25Qcm9wZXJ0eSh2YWwpKSBwcmV2LnB1c2godmFsKTtcclxuXHRcdFx0XHRlbHNlIGlmIChGTS5oYXNPd25Qcm9wZXJ0eSh0bXAgPSBgZmdfJHt2YWx9YCkpIHByZXYucHVzaCh0bXApO1xyXG5cdFx0XHRcdGVsc2UgaWYgKFBGLmhhc093blByb3BlcnR5KHZhbCkpIF9hZGRQRih2YWwpO1xyXG5cdFx0XHRcdGVsc2UgaWYgKFBGLmhhc093blByb3BlcnR5KHRtcCA9IGBiZ18ke3ZhbH1gKSkgX2FkZFBGKHRtcCk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHByZXY7XHJcblx0XHR9LCBbXSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBGb3JtYXQgdGV4dCBpdGVtc1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBmb3JtYXRzIC0gdGV4dCBmb3JtYXRzXHJcblx0ICogQHBhcmFtIGFyZ3MgLSBwYXJzZSBpdGVtcyAoYXJndW1lbnRzKVxyXG5cdCAqIEByZXR1cm5zIGBJVGVybUZvcm1hdGBcclxuXHQgKi9cclxuXHRzdGF0aWMgZm9ybWF0KGZvcm1hdHM6IHN0cmluZ3xzdHJpbmdbXSwgLi4uYXJnczogYW55W10pOiBJVGVybUZvcm1hdCB7XHJcblx0XHRcclxuXHRcdC8vLS0gZm4gPT4gZm9ybWF0IGhlbHBlcnNcclxuXHRcdGxldCB0bXA6IHN0cmluZztcclxuXHRcdGNvbnN0IF9mb3JtYXRzOiBzdHJpbmdbXSA9IHRoaXMuZ2V0Rm9ybWF0cyhmb3JtYXRzKTtcclxuXHRcdGNvbnN0IF9mb3JtYXQgPSAodmFsOiBhbnkpOiBhbnkgPT4ge1xyXG5cdFx0XHRpZiAodGhpcy5GT1JNQVRfRElTQUJMRUQgfHwgIWZvcm1hdHMubGVuZ3RoKSByZXR1cm4gdmFsO1xyXG5cdFx0XHRpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB2YWwgJiYgdmFsKXtcclxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gdmFsO1xyXG5cdFx0XHRcdGlmIChuZXcgUmVnRXhwKCdcXFxcW29iamVjdCBcXFxcdytcXFxcXFxdJykudGVzdCh0bXAgPSBfc3RyaW5nKHZhbCkpKSByZXR1cm4gdmFsO1xyXG5cdFx0XHRcdGVsc2UgdmFsID0gdG1wO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsICYmIHZhbC5sZW5ndGgpKSByZXR1cm4gdmFsO1xyXG5cdFx0XHRyZXR1cm4gX2Zvcm1hdHMucmVkdWNlPHN0cmluZz4oKHYsIGYpID0+IHRoaXMuRk9STUFUU1tmXSArIHYgKyB0aGlzLkZPUk1BVFMucmVzZXQsIHZhbCk7XHJcblx0XHR9O1xyXG5cdFx0Y29uc3QgdGhhdCA9IHRoaXMsIHZhbHVlczogYW55W10gPSBbXTtcclxuXHRcdGZvciAoY29uc3QgdmFsIG9mIChBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IFtdKSkgdmFsdWVzLnB1c2goX2Zvcm1hdCh2YWwpKTtcclxuXHRcdGxldCBsb2dfbWV0aG9kOiBhbnkgPSB0aGF0LkxPR19NRVRIT0Q7XHJcblx0XHRjb25zdCBfbWV0aG9kID0gKG5hbWU6IGFueSk6ICdsb2cnfCdkZWJ1Zyd8J3dhcm4nfCdlcnJvcid8J2luZm8nID0+IHtcclxuXHRcdFx0aWYgKGxvZ19tZXRob2QpIHJldHVybiBsb2dfbWV0aG9kO1xyXG5cdFx0XHRyZXR1cm4gdGhhdC5MT0dfTUVUSE9EUy5pbmNsdWRlcyhuYW1lKSA/IG5hbWUgOiAnbG9nJztcclxuXHRcdH07XHJcblx0XHRcclxuXHRcdC8vPDwgcmVzdWx0IC0gIElUZXJtRm9ybWF0XHJcblx0XHRyZXR1cm4ge1xyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIFNldCBwcmVmZXJyZWQgbG9nIG1ldGhvZFxyXG5cdFx0XHQgKi9cclxuXHRcdFx0bWV0aG9kKHZhbHVlOiB1bmRlZmluZWR8J2xvZyd8J2RlYnVnJ3wnd2Fybid8J2Vycm9yJ3wnaW5mbycpOiBJVGVybUZvcm1hdCB7XHJcblx0XHRcdFx0bG9nX21ldGhvZCA9IHRoYXQuTE9HX01FVEhPRFMuaW5jbHVkZXModmFsdWUgYXMgYW55KSA/IHZhbHVlIDogdGhhdC5MT0dfTUVUSE9EO1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIEFkZCBmb3JtYXR0ZWQgdmFsdWVzXHJcblx0XHRcdCAqIFxyXG5cdFx0XHQgKiBAcGFyYW0gZm9ybWF0c1xyXG5cdFx0XHQgKiBAcGFyYW0gYXJnc1xyXG5cdFx0XHQgKi9cclxuXHRcdFx0Zm9ybWF0KGZvcm1hdHM6IHN0cmluZ3xzdHJpbmdbXSwgLi4uYXJnczogYW55W10pOiBJVGVybUZvcm1hdCB7XHJcblx0XHRcdFx0dmFsdWVzLnB1c2goLi4udGhhdC5mb3JtYXQoZm9ybWF0cywgLi4uYXJncykudmFsdWVzKCkpO1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIEdldCBmb3JtYXR0ZWQgdmFsdWVzXHJcblx0XHRcdCAqIFxyXG5cdFx0XHQgKiBAcGFyYW0gYXJnc1xyXG5cdFx0XHQgKi9cclxuXHRcdFx0dmFsdWVzKC4uLmFyZ3M6IGFueVtdKTogYW55W10ge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFyZ3MpICYmIGFyZ3MubGVuZ3RoKXtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgdmFsIG9mIGFyZ3MpIGl0ZW1zLnB1c2goX2Zvcm1hdCh2YWwpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIFsuLi52YWx1ZXMsIC4uLml0ZW1zXTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBHZXQgdmFsdWVzIHdpdGhvdXQgZm9ybWF0dGluZ1xyXG5cdFx0XHQgKiBcclxuXHRcdFx0ICogQHBhcmFtIGFyZ3NcclxuXHRcdFx0ICovXHJcblx0XHRcdGNsZWFuKC4uLmFyZ3M6IGFueVtdKTogYW55W10ge1xyXG5cdFx0XHRcdHJldHVybiB0aGF0LmNsZWFuKC4uLlsuLi52YWx1ZXMsIC4uLmFyZ3NdKTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBgY29uc29sZS5sb2dgIGZvcm1hdHRlZCB2YWx1ZXNcclxuXHRcdFx0ICogXHJcblx0XHRcdCAqIEBwYXJhbSBhcmdzIFxyXG5cdFx0XHQgKi9cclxuXHRcdFx0bG9nKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbXM6IGFueVtdID0gW107XHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJncykgJiYgYXJncy5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCB2YWwgb2YgYXJncykgaXRlbXMucHVzaChfZm9ybWF0KHZhbCkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zb2xlW19tZXRob2QoJ2xvZycpXSguLi5bLi4udmFsdWVzLCAuLi5pdGVtc10pO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIGBjb25zb2xlLmRlYnVnYCBmb3JtYXR0ZWQgdmFsdWVzXHJcblx0XHRcdCAqIFxyXG5cdFx0XHQgKiBAcGFyYW0gYXJncyBcclxuXHRcdFx0ICovXHJcblx0XHRcdGRlYnVnKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbXM6IGFueVtdID0gW107XHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJncykgJiYgYXJncy5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCB2YWwgb2YgYXJncykgaXRlbXMucHVzaChfZm9ybWF0KHZhbCkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zb2xlW19tZXRob2QoJ2RlYnVnJyldKC4uLlsuLi52YWx1ZXMsIC4uLml0ZW1zXSk7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogYGNvbnNvbGUud2FybmAgZm9ybWF0dGVkIHZhbHVlc1xyXG5cdFx0XHQgKiBcclxuXHRcdFx0ICogQHBhcmFtIGFyZ3MgXHJcblx0XHRcdCAqL1xyXG5cdFx0XHR3YXJuKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbXM6IGFueVtdID0gW107XHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJncykgJiYgYXJncy5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCB2YWwgb2YgYXJncykgaXRlbXMucHVzaChfZm9ybWF0KHZhbCkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zb2xlW19tZXRob2QoJ3dhcm4nKV0oLi4uWy4uLnZhbHVlcywgLi4uaXRlbXNdKTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBgY29uc29sZS5lcnJvcmAgZm9ybWF0dGVkIHZhbHVlc1xyXG5cdFx0XHQgKiBcclxuXHRcdFx0ICogQHBhcmFtIGFyZ3MgXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRlcnJvciguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFyZ3MpICYmIGFyZ3MubGVuZ3RoKXtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgdmFsIG9mIGFyZ3MpIGl0ZW1zLnB1c2goX2Zvcm1hdCh2YWwpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc29sZVtfbWV0aG9kKCdlcnJvcicpXSguLi5bLi4udmFsdWVzLCAuLi5pdGVtc10pO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIGBjb25zb2xlLmluZm9gIGZvcm1hdHRlZCB2YWx1ZXNcclxuXHRcdFx0ICogXHJcblx0XHRcdCAqIEBwYXJhbSBhcmdzIFxyXG5cdFx0XHQgKi9cclxuXHRcdFx0aW5mbyguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFyZ3MpICYmIGFyZ3MubGVuZ3RoKXtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgdmFsIG9mIGFyZ3MpIGl0ZW1zLnB1c2goX2Zvcm1hdCh2YWwpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc29sZVtfbWV0aG9kKCdpbmZvJyldKC4uLlsuLi52YWx1ZXMsIC4uLml0ZW1zXSk7XHJcblx0XHRcdH0sXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2xlYW4vcmVtb3ZlIHRleHQgZm9ybWF0dGluZ1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBhcmdzIC0gcGFyc2UgaXRlbXMgKGFyZ3VtZW50cylcclxuXHQgKiBAcmV0dXJucyBgYW55W11gXHJcblx0ICovXHJcblx0c3RhdGljIGNsZWFuKC4uLmFyZ3M6IGFueVtdKTogYW55W10ge1xyXG5cdFx0Y29uc3QgX2NsZWFuID0gKHZhbDogc3RyaW5nKTogc3RyaW5nID0+IE9iamVjdC52YWx1ZXModGhpcy5GT1JNQVRTKS5yZWR1Y2U8c3RyaW5nPigocCwgdik9PiBwLnJlcGxhY2UobmV3IFJlZ0V4cChTdHJpbmcodikucmVwbGFjZSgvXFx4MUIvLCAnXFxcXHgxQicpLnJlcGxhY2UoL1xcWy8sICdcXFxcWycpLCAnZycpLCAnJyksIHZhbCk7XHJcblx0XHRjb25zdCB2YWx1ZXM6IGFueVtdID0gW107XHJcblx0XHRmb3IgKGNvbnN0IHZhbCBvZiBhcmdzKSB2YWx1ZXMucHVzaCgnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbCAmJiB2YWwudHJpbSgpLmxlbmd0aCA/IF9jbGVhbih2YWwpIDogdmFsKTtcclxuXHRcdHJldHVybiB2YWx1ZXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBGb3JtYXQgdGV4dFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIGZvcm1hdCB0ZXh0XHJcblx0ICogQHBhcmFtIGZvcm1hdHMgLSB0ZXh0IGZvcm1hdHNcclxuXHQgKiBAcmV0dXJucyBgc3RyaW5nYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyB0ZXh0KHZhbHVlOiBzdHJpbmcsIGZvcm1hdHM/OiBzdHJpbmd8c3RyaW5nW10pOiBzdHJpbmcge1xyXG5cdFx0Y29uc3QgX3ZhbDogc3RyaW5nID0gX3N0cmluZyh2YWx1ZSk7XHJcblx0XHRjb25zdCBfZm9ybWF0czogc3RyaW5nW10gPSBbXSwgX2Zvcm1hdHNfbGlzdDogc3RyaW5nW10gPSAoQXJyYXkuaXNBcnJheShmb3JtYXRzKSA/IGZvcm1hdHMgOiAnc3RyaW5nJyA9PT0gdHlwZW9mIGZvcm1hdHMgPyBbZm9ybWF0c10gOiBbXSk7XHJcblx0XHRmb3IgKGNvbnN0IHYgb2YgX2Zvcm1hdHNfbGlzdCl7XHJcblx0XHRcdGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHYgJiYgISF2LnRyaW0oKSkgX2Zvcm1hdHMucHVzaCh2KTtcclxuXHRcdH1cclxuXHRcdGlmICghKF9mb3JtYXRzLmxlbmd0aCAmJiBfdmFsLnRyaW0oKS5sZW5ndGgpKSByZXR1cm4gX3ZhbDtcclxuXHRcdHJldHVybiB0aGlzLmZvcm1hdChfZm9ybWF0cywgX3ZhbCkudmFsdWVzKClbMF07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQcmludCBsaW5lIH4gYGNvbnNvbGUubG9nKCcgJylgXHJcblx0ICovXHJcblx0c3RhdGljIGJyKCk6IHZvaWQge1xyXG5cdFx0Y29uc29sZS5sb2coJyAnKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFByaW50IGxvZyB+IGBjb25zb2xlLmxvZyguLilgXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGFyZ3MgLSBsb2cgYXJndW1lbnRzXHJcblx0ICovXHJcblx0c3RhdGljIGxvZyguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0dGhpcy5mb3JtYXQoJ2xvZycsIC4uLmFyZ3MpLmxvZygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJpbnQgZGVidWcgfiBgY29uc29sZS5kZWJ1ZyguLilgXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGFyZ3MgLSBsb2cgYXJndW1lbnRzXHJcblx0ICovXHJcblx0c3RhdGljIGRlYnVnKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHR0aGlzLmZvcm1hdCgnZGVidWcnLCAuLi5hcmdzKS5kZWJ1ZygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJpbnQgZXJyb3IgfiBgY29uc29sZS5lcnJvciguLilgXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGFyZ3MgLSBsb2cgYXJndW1lbnRzXHJcblx0ICovXHJcblx0c3RhdGljIGVycm9yKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHR0aGlzLmZvcm1hdCgnZXJyb3InLCAuLi5hcmdzKS5lcnJvcigpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJpbnQgd2FybmluZyB+IGBjb25zb2xlLndhcm4oLi4pYFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBhcmdzIC0gbG9nIGFyZ3VtZW50c1xyXG5cdCAqL1xyXG5cdHN0YXRpYyB3YXJuKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHR0aGlzLmZvcm1hdCgnd2FybicsIC4uLmFyZ3MpLndhcm4oKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFByaW50IGluZm8gfiBgY29uc29sZS5pbmZvKC4uKWBcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gYXJncyAtIGxvZyBhcmd1bWVudHNcclxuXHQgKi9cclxuXHRzdGF0aWMgaW5mbyguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0dGhpcy5mb3JtYXQoJ2luZm8nLCAuLi5hcmdzKS5pbmZvKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQcmludCBzdWNjZXNzIH4gYGNvbnNvbGUubG9nKCcuLicpYFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBhcmdzIC0gbG9nIGFyZ3VtZW50c1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBzdWNjZXNzKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHR0aGlzLmZvcm1hdCgnc3VjY2VzcycsIC4uLmFyZ3MpLmxvZygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGFyc2UgbGlzdCBpdGVtc1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcblx0ICogQHBhcmFtIF9lbnRyaWVzIC0gKGRlZmF1bHQ6IGBmYWxzZWApIHdoZXRoZXIgdG8gcGFyc2UgZW50cmllcyB+IGBPYmplY3QuZW50cmllcyh2YWx1ZSlgXHJcblx0ICogQHJldHVybnMgYFtsaXN0OiBhbnlbXSwgdHlwZTondmFsdWVzJ3wnZW50cmllcyddYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBsaXN0KHZhbHVlOiBhbnksIF9lbnRyaWVzOiBib29sZWFuID0gZmFsc2UpOiBbbGlzdDogYW55W10sIHR5cGU6J3ZhbHVlcyd8J2VudHJpZXMnXSB7XHJcblx0XHRsZXQgaXRlbXM6IGFueVtdID0gW3ZhbHVlID0gX2Nsb25lKHZhbHVlKV0sIHR5cGU6ICd2YWx1ZXMnfCdlbnRyaWVzJyA9ICd2YWx1ZXMnO1xyXG5cdFx0aWYgKCdvYmplY3QnID09PSB0eXBlb2YgdmFsdWUgJiYgdmFsdWUpe1xyXG5cdFx0XHRpZiAoISh0eXBlID0gdmFsdWVbU3ltYm9sLml0ZXJhdG9yXT8ubmFtZSkpe1xyXG5cdFx0XHRcdHR5cGUgPSAndmFsdWVzJztcclxuXHRcdFx0XHRpdGVtcyA9IFt2YWx1ZV07XHJcblx0XHRcdFx0aWYgKF9lbnRyaWVzICYmIF9zdHJpbmdhYmxlKHZhbHVlKSA9PT0gZmFsc2Upe1xyXG5cdFx0XHRcdFx0bGV0IHRtcDogYW55ID0gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHZhbHVlKSk7XHJcblx0XHRcdFx0XHRsZXQgdG1wX2VudHJpZXM6IFtrOiBhbnksIHY6IGFueV1bXSA9IFtdO1xyXG5cdFx0XHRcdFx0aWYgKCEoJ29iamVjdCcgPT09IHR5cGVvZiB0bXAgJiYgdG1wICYmICh0bXBfZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRtcCkpLmxlbmd0aCkpIHRtcF9lbnRyaWVzID0gT2JqZWN0LmVudHJpZXModmFsdWUpO1xyXG5cdFx0XHRcdFx0aWYgKHRtcF9lbnRyaWVzLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRcdHR5cGUgPSAnZW50cmllcyc7XHJcblx0XHRcdFx0XHRcdGl0ZW1zID0gdG1wX2VudHJpZXM7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKHR5cGUgPT09ICdlbnRyaWVzJykgaXRlbXMgPSBfZW50cmllcyA/IFsuLi52YWx1ZV0gOiBbdmFsdWVdO1xyXG5cdFx0XHRlbHNlIGl0ZW1zID0gWy4uLnZhbHVlXTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBbaXRlbXMsIHR5cGVdO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogIyMjIFByaW50IHRhYmxlIH4gYGNvbnNvbGUudGFibGVgXHJcblx0ICogXHJcblx0ICogX3VzZXMgcHJvY2VzcyBhcmd1bWVudCBvcHRpb25zIGFzIGRlZmF1bHQgdmFsdWVzIGZvciBwYXJhbXM6X1xyXG5cdCAqIC0gYGNlbGxNYXhMZW5ndGhgID0gYC0tY2VsbE1heExlbmd0aD0jI2AgKHdoZXJlIGAjI2AgaXMgcG9zaXRpdmUgaW50ZWdlcilcclxuXHQgKiAtIGBkaXZpZGVyYCA9IGAtLWRpdmlkZXJgIHwgYC0tZGl2aWRlcj1mYWxzZWBcclxuXHQgKiAtIGBub0luZGV4YCA9IGAtLW5vSW5kZXhgIHwgYC0tbm9JbmRleD1mYWxzZWBcclxuXHQgKiAtIGBudW1JbmRleGAgPSBgLS1udW1JbmRleGAgfCBgLS1udW1JbmRleD1mYWxzZWBcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gZGF0YSAtIGxvZyBkYXRhXHJcblx0ICogQHBhcmFtIGNlbGxNYXhMZW5ndGggLSAoZGVmYXVsdDogYDI1MGApIHRhYmxlIG1heCBjZWxsIGxlbmd0aCAod2lkdGgpXHJcblx0ICogQHBhcmFtIGRpdmlkZXIgLSAoZGVmYXVsdDogYGZhbHNlYCkgd2hldGhlciB0byBhZGQgcm93IGRpdmlkZXJcclxuXHQgKiBAcGFyYW0gbm9JbmRleCAtIChkZWZhdWx0OiBgZmFsc2VgKSB3aGV0aGVyIHRvIHJlbW92ZSBpbmRleCBjb2x1bW4gKFsjXSlcclxuXHQgKiBAcGFyYW0gbnVtSW5kZXggLSAoZGVmYXVsdDogYGZhbHNlYCB+IGAwYCkgd2hldGhlciBpbmRleCBjb2x1bW4gc3RhcnRzIGZyb20gYDFgXHJcblx0ICovXHJcblx0c3RhdGljIHRhYmxlKGRhdGE6IGFueSwgY2VsbE1heExlbmd0aD86IG51bWJlciwgZGl2aWRlcj86IGJvb2xlYW4sIG5vSW5kZXg/OiBib29sZWFuLCBudW1JbmRleD86IGJvb2xlYW4pOiB2b2lkIHtcclxuXHRcdFxyXG5cdFx0Ly9hcmdzXHJcblx0XHRsZXQgYXJnc19jZWxsTWF4TGVuZ3RoOiBudW1iZXJ8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdFx0bGV0IGFyZ3NfZGl2aWRlcjogYm9vbGVhbnx1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblx0XHRsZXQgYXJnc19ub0luZGV4OiBib29sZWFufHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHRcdGxldCBhcmdzX251bUluZGV4OiBib29sZWFufHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IGFyZ3NfdGV4dDogc3RyaW5nID0gdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIEFycmF5LmlzQXJyYXkocHJvY2Vzcz8uYXJndikgPyBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikuam9pbignfCcpIDogJyc7XHJcblx0XHRsZXQgYXJnc19tYXRjaDogUmVnRXhwTWF0Y2hBcnJheXxudWxsID0gYXJnc190ZXh0Lm1hdGNoKC8tLWNlbGxNYXhMZW5ndGg9KFxcZCspKFxcfHwkKS8pO1xyXG5cdFx0aWYgKGFyZ3NfbWF0Y2gpIGFyZ3NfY2VsbE1heExlbmd0aCA9IF9wb3NJbnQoYXJnc19tYXRjaFsxXSwgMCk7XHJcblx0XHRpZiAoISEoYXJnc19tYXRjaCA9IGFyZ3NfdGV4dC5tYXRjaCgvLS1kaXZpZGVyKFxcfHwkKS8pKSkgYXJnc19kaXZpZGVyID0gdHJ1ZTtcclxuXHRcdGVsc2UgaWYgKCEhKGFyZ3NfbWF0Y2ggPSBhcmdzX3RleHQubWF0Y2goLy0tZGl2aWRlcj1mYWxzZShcXHx8JCkvKSkpIGFyZ3NfZGl2aWRlciA9IGZhbHNlO1xyXG5cdFx0aWYgKCEhKGFyZ3NfbWF0Y2ggPSBhcmdzX3RleHQubWF0Y2goLy0tbm9JbmRleChcXHx8JCkvKSkpIGFyZ3Nfbm9JbmRleCA9IHRydWU7XHJcblx0XHRlbHNlIGlmICghIShhcmdzX21hdGNoID0gYXJnc190ZXh0Lm1hdGNoKC8tLW5vSW5kZXg9ZmFsc2UoXFx8fCQpLykpKSBhcmdzX25vSW5kZXggPSBmYWxzZTtcclxuXHRcdGlmICghIShhcmdzX21hdGNoID0gYXJnc190ZXh0Lm1hdGNoKC8tLW51bUluZGV4KFxcfHwkKS8pKSkgYXJnc19udW1JbmRleCA9IHRydWU7XHJcblx0XHRlbHNlIGlmICghIShhcmdzX21hdGNoID0gYXJnc190ZXh0Lm1hdGNoKC8tLW51bUluZGV4PWZhbHNlKFxcfHwkKS8pKSkgYXJnc19udW1JbmRleCA9IGZhbHNlO1xyXG5cdFx0Y2VsbE1heExlbmd0aCA9IGFyZ3NfY2VsbE1heExlbmd0aCA/PyBfcG9zSW50KGNlbGxNYXhMZW5ndGgsIDApID8/IDI1MDtcclxuXHRcdGRpdmlkZXIgPSBhcmdzX2RpdmlkZXIgPz8gZGl2aWRlciA/PyBmYWxzZTtcclxuXHRcdG5vSW5kZXggPSBhcmdzX25vSW5kZXggPz8gbm9JbmRleCA/PyBmYWxzZTtcclxuXHRcdG51bUluZGV4ID0gYXJnc19udW1JbmRleCA/PyBudW1JbmRleCA/PyBmYWxzZTtcclxuXHJcblx0XHQvL3ZhcnNcclxuXHRcdGNvbnN0IHRoYXQgPSB0aGlzO1xyXG5cdFx0Y29uc3QgW2RhdGFfaXRlbXMsIGRhdGFfdHlwZV0gPSB0aGF0Lmxpc3QoZGF0YSwgJ29iamVjdCcgPT09IHR5cGVvZiBkYXRhICYmIGRhdGEgJiYgIV9zdHJpbmdhYmxlKGRhdGEpKTtcclxuXHJcblx0XHQvL2ZuID0+IHN0ciB2YWx1ZVxyXG5cdFx0Y29uc3Qgc3RyVmFsID0gKHZhbDogYW55KTogW192YWx1ZTogc3RyaW5nLCBfZm9ybWF0OiBzdHJpbmddID0+IHtcclxuXHRcdFx0bGV0IGNvbG9yOiBzdHJpbmcsIHRtcDogYW55O1xyXG5cdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkodmFsKSAmJiAodG1wID0gX3N0cmluZ2FibGUodmFsKSkgIT09IGZhbHNlKXtcclxuXHRcdFx0XHRjb2xvciA9ICdncmVlbic7XHJcblx0XHRcdFx0aWYgKCdudW1iZXInID09PSB0eXBlb2YgdmFsKSBjb2xvciA9ICd5ZWxsb3cnO1xyXG5cdFx0XHRcdGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbCkgY29sb3IgPSAnZ3JheSc7XHJcblx0XHRcdFx0ZWxzZSBpZiAodmFsID09PSB0cnVlKSBjb2xvciA9ICdjeWFuJztcclxuXHRcdFx0XHRlbHNlIGlmICh2YWwgPT09IGZhbHNlKSBjb2xvciA9ICdyZWQnO1xyXG5cdFx0XHRcdGVsc2UgaWYgKC9eXFxkezR9LSg/OjBbMS05XXwxWzAtMl0pLSg/OlswLTJdWzEtOV18WzEtM10wfDNbMDFdKVQoPzpbMC0xXVswLTldfDJbMC0zXSkoPzo6WzAtNl1cXGQpKD86OlswLTZdXFxkKT8oPzpcXC5cXGR7M30pPyg/OlsrLV1bMC0yXVxcZDpbMC01XVxcZHxaKT8kLy50ZXN0KHRtcCkpIGNvbG9yID0gJ21hZ2VudGEnOyAvL21hdGNoIElTTyB0aW1lc3RhbXAgKGkuZS4gMjAyMy0wNi0wOVQxODoxODo1Ny4wNzBaKVxyXG5cdFx0XHRcdHZhbCA9IHRtcDtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB2YWwgJiYgdmFsKXtcclxuXHRcdFx0XHRcdGNvbnN0IF90eXBlID0gdmFsW1N5bWJvbC5pdGVyYXRvcl07XHJcblx0XHRcdFx0XHRpZiAoISFfdHlwZSl7XHJcblx0XHRcdFx0XHRcdHZhbCA9IFsuLi52YWxdO1xyXG5cdFx0XHRcdFx0XHRpZiAoX3R5cGUgPT09ICdlbnRyaWVzJykgdmFsID0gT2JqZWN0LmZyb21FbnRyaWVzKHZhbCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIHZhbCA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh2YWwpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFsID0gX2pzb25TdHJpbmdpZnkodmFsKTtcclxuXHRcdFx0XHRjb2xvciA9ICdtYWdlbnRhJztcclxuXHRcdFx0fVxyXG5cdFx0XHR2YWwgPSB2YWwucmVwbGFjZSgvXFx0L2csICcgICcpO1xyXG5cdFx0XHRjb25zdCBfdmFsOiBzdHJpbmcgPSBfc3RyRXNjYXBlKHZhbClcclxuXHRcdFx0LnJlcGxhY2UoLyhcXFxcbikrL2csICdcXG4nKS50cmltKCk7IC8vKysgbXVsdGlsaW5lIHN1cHBvcnRcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coX3ZhbCk7XHJcblx0XHRcdHJldHVybiBbX3ZhbCwgY29sb3JdO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvL3RhYmxlIGl0ZW1zXHJcblx0XHRsZXQgbW9kZTogJ3ZhbHVlcyd8J2VudHJpZXMnID0gdW5kZWZpbmVkIGFzIGFueTtcclxuXHRcdGNvbnN0IHRhYmxlX2l0ZW1zOiBhbnlbXVtdID0gW107XHJcblx0XHRpZiAoZGF0YV90eXBlID09PSAnZW50cmllcycpe1xyXG5cdFx0XHRpZiAoIW5vSW5kZXgpIHRhYmxlX2l0ZW1zLnB1c2goWydbI10nLCAnVmFsdWVzJ10pO1xyXG5cdFx0XHR0YWJsZV9pdGVtcy5wdXNoKC4uLmRhdGFfaXRlbXMpO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSB7XHJcblx0XHRcdGxldCBtYXBfa2V5czogc3RyaW5nW10gPSBbXSwgbWFwX2l0ZW1zOiB7W2tleTogc3RyaW5nXTogYW55fVtdID0gW107XHJcblx0XHRcdGZvciAobGV0IHIgPSAwOyByIDwgZGF0YV9pdGVtcy5sZW5ndGg7IHIgKyspe1xyXG5cdFx0XHRcdGNvbnN0IGRhdGFfaXRlbSA9IGRhdGFfaXRlbXNbcl07XHJcblx0XHRcdFx0bGV0IFtsaXN0X2l0ZW1zLCBsaXN0X3R5cGVdID0gdGhhdC5saXN0KGRhdGFfaXRlbSwgIXIgfHwgbW9kZSA9PT0gJ2VudHJpZXMnKTtcclxuXHRcdFx0XHRpZiAoIXIpIG1vZGUgPSBsaXN0X3R5cGU7XHJcblx0XHRcdFx0Y29uc3QgbWFwX2l0ZW06IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0X2l0ZW1zLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtID0gbGlzdF9pdGVtc1tpXTtcclxuXHRcdFx0XHRcdGxldCBrOiBzdHJpbmcsIHY6IGFueTtcclxuXHRcdFx0XHRcdGlmIChsaXN0X3R5cGUgPT09ICdlbnRyaWVzJyl7XHJcblx0XHRcdFx0XHRcdGsgPSBfc3RyKGl0ZW1bMF0sIHRydWUsIHRydWUpO1xyXG5cdFx0XHRcdFx0XHR2ID0gaXRlbVsxXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRrID0gYCR7aX1gO1xyXG5cdFx0XHRcdFx0XHR2ID0gaXRlbTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICghbWFwX2tleXMuaW5jbHVkZXMoaykpIG1hcF9rZXlzLnB1c2goayk7XHJcblx0XHRcdFx0XHRtYXBfaXRlbVtrXSA9IHY7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdG1hcF9pdGVtcy5wdXNoKG1hcF9pdGVtKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIW5vSW5kZXgpIHRhYmxlX2l0ZW1zLnB1c2goWydbI10nLCAuLi5tYXBfa2V5c10pO1xyXG5cdFx0XHRmb3IgKGxldCByID0gMDsgciA8IG1hcF9pdGVtcy5sZW5ndGg7IHIgKyspe1xyXG5cdFx0XHRcdGNvbnN0IHRhYmxlX2l0ZW06IGFueVtdID0gW10sIG1hcF9pdGVtID0gbWFwX2l0ZW1zW3JdO1xyXG5cdFx0XHRcdGZvciAoY29uc3Qga2V5IG9mIG1hcF9rZXlzKSB0YWJsZV9pdGVtLnB1c2gobWFwX2l0ZW1ba2V5XSk7XHJcblx0XHRcdFx0dGFibGVfaXRlbXMucHVzaChbLi4uKCFub0luZGV4ID8gW3IgKyAobnVtSW5kZXggPyAxIDogMCldIDogW10pLCAuLi50YWJsZV9pdGVtXSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvL3dpZHRoXHJcblx0XHRjb25zdCB3aWR0aF9tYXA6IHtba2V5OiBudW1iZXJdOiBudW1iZXJ9ID0ge307XHJcblx0XHRjb25zdCBzdHJfaXRlbXM6IFtfdmFsdWU6IHN0cmluZywgX2Zvcm1hdDogc3RyaW5nXVtdW10gPSBbXTtcclxuXHRcdGZvciAoY29uc3QgdGFibGVfaXRlbSBvZiB0YWJsZV9pdGVtcyl7XHJcblx0XHRcdGNvbnN0IHN0cl9pdGVtOiBbX3ZhbHVlOiBzdHJpbmcsIF9mb3JtYXQ6IHN0cmluZ11bXSA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRhYmxlX2l0ZW0ubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0XHRjb25zdCB2YWwgPSB0YWJsZV9pdGVtW2ldO1xyXG5cdFx0XHRcdGNvbnN0IFtfdmFsdWUsIF9mb3JtYXRdID0gc3RyVmFsKHZhbCk7XHJcblx0XHRcdFx0aWYgKCF3aWR0aF9tYXAuaGFzT3duUHJvcGVydHkoaSkpIHdpZHRoX21hcFtpXSA9IDA7XHJcblx0XHRcdFx0bGV0IHdpZHRoID0gMDsgLy8rKyBtdWx0aWxpbmUgc3VwcG9ydFxyXG5cdFx0XHRcdGZvciAoY29uc3QgdHh0IG9mIF92YWx1ZS5zcGxpdCgnXFxuJykpeyAvLysrIG11bHRpbGluZSBzdXBwb3J0XHJcblx0XHRcdFx0XHRsZXQgbGVuID0gdHh0Lmxlbmd0aDtcclxuXHRcdFx0XHRcdGlmIChjZWxsTWF4TGVuZ3RoICYmIGxlbiA+IGNlbGxNYXhMZW5ndGgpIGxlbiA9IGNlbGxNYXhMZW5ndGg7IC8vY2VsbE1heExlbmd0aCBsaW1pdFxyXG5cdFx0XHRcdFx0aWYgKGxlbiA+IHdpZHRoKSB3aWR0aCA9IGxlbjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHdpZHRoID4gd2lkdGhfbWFwW2ldKSB3aWR0aF9tYXBbaV0gPSB3aWR0aDsgLy8rKyBtdWx0aWxpbmUgc3VwcG9ydFxyXG5cdFx0XHRcdHN0cl9pdGVtLnB1c2goW192YWx1ZSwgX2Zvcm1hdF0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHN0cl9pdGVtcy5wdXNoKHN0cl9pdGVtKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL3Jvd3NcclxuXHRcdGNvbnN0IHJvd3NfbGVuOiBudW1iZXIgPSBzdHJfaXRlbXMubGVuZ3RoO1xyXG5cdFx0Zm9yIChsZXQgciA9IDA7IHIgPCBzdHJfaXRlbXMubGVuZ3RoOyByICsrKXtcclxuXHRcdFx0Y29uc3Qgc3RyX2l0ZW0gPSBzdHJfaXRlbXNbcl07XHJcblx0XHRcdGxldCBtYXhfbGluZXM6IG51bWJlciA9IDA7XHJcblx0XHRcdGxldCBzdHJfaXRlbV9saW5lczogc3RyaW5nW11bXSA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHN0cl9pdGVtLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0bGV0IFtfdmFsdWUsIF9mb3JtYXRdID0gc3RyX2l0ZW1baV07XHJcblx0XHRcdFx0aWYgKCFpIHx8ICFyKSBfZm9ybWF0ID0gKCFpICYmIHIgJiYgbW9kZSA9PT0gJ3ZhbHVlcycpID8gJ2dyYXknIDogJ3doaXRlJztcclxuXHRcdFx0XHRjb25zdCB3aWR0aDogbnVtYmVyID0gd2lkdGhfbWFwW2ldO1xyXG5cdFx0XHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0XHRcdGZvciAobGV0IHR4dCBvZiBfdmFsdWUuc3BsaXQoJ1xcbicpKXsgLy8rKyBtdWx0aWxpbmUgc3VwcG9ydFxyXG5cdFx0XHRcdFx0aWYgKHR4dC5sZW5ndGggPiB3aWR0aCl7XHJcblx0XHRcdFx0XHRcdHdoaWxlICh0eHQubGVuZ3RoID4gd2lkdGgpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBsaW5lID0gdHh0LnN1YnN0cmluZygwLCB3aWR0aCkucGFkRW5kKHdpZHRoKTtcclxuXHRcdFx0XHRcdFx0XHR0eHQgPSB0eHQuc2xpY2Uod2lkdGgpO1xyXG5cdFx0XHRcdFx0XHRcdGxpbmVzLnB1c2godGhhdC50ZXh0KGxpbmUsIF9mb3JtYXQpKTsgLy9mb3JtYXRcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAodHh0Lmxlbmd0aCkgbGluZXMucHVzaCh0aGF0LnRleHQodHh0LnBhZEVuZCh3aWR0aCksIF9mb3JtYXQpKTsgLy9mb3JtYXRcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGVsc2UgbGluZXMucHVzaCh0aGF0LnRleHQodHh0LnBhZEVuZCh3aWR0aCksIF9mb3JtYXQpKTsgLy9mb3JtYXRcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0c3RyX2l0ZW1fbGluZXMucHVzaChsaW5lcyk7XHJcblx0XHRcdFx0aWYgKG1heF9saW5lcyA8IGxpbmVzLmxlbmd0aCkgbWF4X2xpbmVzID0gbGluZXMubGVuZ3RoO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IG1heF9zdHJfaXRlbV9saW5lczogc3RyaW5nW11bXSA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCBjID0gMDsgYyA8IHN0cl9pdGVtX2xpbmVzLmxlbmd0aDsgYyArKyl7XHJcblx0XHRcdFx0Y29uc3QgbGluZXMgPSBzdHJfaXRlbV9saW5lc1tjXTtcclxuXHRcdFx0XHRjb25zdCB3aWR0aDogbnVtYmVyID0gd2lkdGhfbWFwW2NdO1xyXG5cdFx0XHRcdGNvbnN0IHN0cl9tYXhfbGluZXM6IHN0cmluZ1tdID0gW107XHJcblx0XHRcdFx0Y29uc3QgbWF4X2xpbmVzX2FycmF5OiBhbnlbXSA9IFsuLi5BcnJheShtYXhfbGluZXMpXTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1heF9saW5lc19hcnJheS5sZW5ndGg7IGkgKyspIHN0cl9tYXhfbGluZXMucHVzaChpIDwgbGluZXMubGVuZ3RoID8gbGluZXNbaV0gOiAnJy5wYWRFbmQod2lkdGgpKTtcclxuXHRcdFx0XHRtYXhfc3RyX2l0ZW1fbGluZXMucHVzaChzdHJfbWF4X2xpbmVzKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRzdHJfaXRlbV9saW5lcyA9IG1heF9zdHJfaXRlbV9saW5lcztcclxuXHRcdFx0Y29uc3QgbGluZV9yb3dzOnN0cmluZ1tdW10gPSBbXTtcclxuXHRcdFx0Zm9yIChjb25zdCBfIG9mIFsuLi5BcnJheShtYXhfbGluZXMpXSkgbGluZV9yb3dzLnB1c2goW10pO1xyXG5cdFx0XHRmb3IgKGxldCBjID0gMDsgYyA8IHN0cl9pdGVtX2xpbmVzLmxlbmd0aDsgYyArKyl7XHJcblx0XHRcdFx0Y29uc3QgbGluZXMgPSBzdHJfaXRlbV9saW5lc1tjXTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0XHRsaW5lX3Jvd3NbaV1bY10gPSBsaW5lc1tpXVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCByb3dzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0XHRjb25zdCBsZW4gPSBsaW5lX3Jvd3MubGVuZ3RoO1xyXG5cdFx0XHRjb25zdCBsaW5lc190b3AgPSBbXHJcblx0XHRcdFx0e2xpbmU6ICfilIAnLCBsZWZ0OiAn4pSM4pSAJywgbWlkOiAn4pSA4pSs4pSAJywgcmlnaHQ6ICfilIDilJAnfSxcclxuXHRcdFx0XHR7bGluZTogJ+KVkCcsIGxlZnQ6ICfilZTilZAnLCBtaWQ6ICfilZDilabilZAnLCByaWdodDogJ+KVkOKVlyd9LFxyXG5cdFx0XHRcdHtsaW5lOiAn4pSAJywgbGVmdDogJ+KVk+KUgCcsIG1pZDogJ+KVkOKVpOKVkCcsIHJpZ2h0OiAn4pSA4pWWJ30sXHJcblx0XHRcdF07XHJcblx0XHRcdGNvbnN0IGxpbmVzX21pZCA9IFtcclxuXHRcdFx0XHR7bGluZTogJ+KUgCcsIGxlZnQ6ICfilJzilIAnLCBtaWQ6ICfilIDilLzilIAnLCByaWdodDogJ+KUgOKUpCd9LFxyXG5cdFx0XHRcdHtsaW5lOiAn4pWQJywgbGVmdDogJ+KVoOKVkCcsIG1pZDogJ+KVkOKVrOKVkCcsIHJpZ2h0OiAn4pWQ4pWjJ30sXHJcblx0XHRcdFx0e2xpbmU6ICfilIAnLCBsZWZ0OiAn4pWf4pSAJywgbWlkOiAn4pSA4pWr4pSAJywgcmlnaHQ6ICfilIDilaInfSxcclxuXHRcdFx0XHR7bGluZTogJ+KUgCcsIGxlZnQ6ICfilJzilIAnLCBtaWQ6ICfilIDilLzilIAnLCByaWdodDogJ+KUgOKUpCd9LFxyXG5cdFx0XHRdO1xyXG5cdFx0XHRjb25zdCBsaW5lc19ib3R0b20gPSBbXHJcblx0XHRcdFx0e2xpbmU6ICfilIAnLCBsZWZ0OiAn4pSU4pSAJywgbWlkOiAn4pSA4pS04pSAJywgcmlnaHQ6ICfilIDilJgnfSxcclxuXHRcdFx0XHR7bGluZTogJ+KVkCcsIGxlZnQ6ICfilZrilZAnLCBtaWQ6ICfilZDilanilZAnLCByaWdodDogJ+KVkOKVnSd9LFxyXG5cdFx0XHRdO1xyXG5cdFx0XHRjb25zdCBsaW5lc19zaWRlID0gW1xyXG5cdFx0XHRcdHtsZWZ0OiAn4pSCICcsIG1pZDogJyDilIIgJywgcmlnaHQ6ICcg4pSCJ30sXHJcblx0XHRcdFx0e2xlZnQ6ICfilZEgJywgbWlkOiAnIOKVkSAnLCByaWdodDogJyDilZEnfSxcclxuXHRcdFx0XTtcclxuXHRcdFx0XHJcblx0XHRcdC8vVE9ETzogYm9yZGVyIG1vZGVzXHJcblx0XHRcdGNvbnN0IGJvcmRlck1vZGU6IG51bWJlciA9IDA7XHJcblxyXG5cdFx0XHQvL1JFRjogaHR0cHM6Ly9jYm9hcmQuY3Byb2dyYW1taW5nLmNvbS9jLXByb2dyYW1taW5nLzE1MTkzMC1hc2NpaS10YWJsZS1ib3JkZXIuaHRtbFxyXG5cdFx0XHQvLyBCT1hfRExSICAgICDilZBcclxuXHRcdFx0Ly8gQk9YX0RVRCAgICAg4pWRXHJcblx0XHRcdC8vIEJPWF9EVUwgICAgIOKVnVxyXG5cdFx0XHQvLyBCT1hfRFVSICAgICDilZpcclxuXHRcdFx0Ly8gQk9YX0RETCAgICAg4pWXXHJcblx0XHRcdC8vIEJPWF9ERFIgICAgIOKVlFxyXG5cdFx0XHQvLyBCT1hfRFVETCAgICDilaNcclxuXHRcdFx0Ly8gQk9YX0RVRFIgICAg4pWgXHJcblx0XHRcdC8vIEJPWF9EVUxSICAgIOKVqVxyXG5cdFx0XHQvLyBCT1hfRERMUiAgICDilaZcclxuXHRcdFx0Ly8gQk9YX0RVRExSICAg4pWsXHJcblx0XHRcdC8vIEJPWF9EVV9TTCAgIOKVnFxyXG5cdFx0XHQvLyBCT1hfRFVfU1IgICDilZlcclxuXHRcdFx0Ly8gQk9YX0REX1NMICAg4pWWXHJcblx0XHRcdC8vIEJPWF9ERF9TUiAgIOKVk1xyXG5cdFx0XHQvLyBCT1hfRExfU1UgICDilZtcclxuXHRcdFx0Ly8gQk9YX0RMX1NEICAg4pWVXHJcblx0XHRcdC8vIEJPWF9EUl9TVSAgIOKVmFxyXG5cdFx0XHQvLyBCT1hfRFJfU0QgICDilZJcclxuXHRcdFx0Ly8gQk9YX0RVX1NMUiAg4pWoXHJcblx0XHRcdC8vIEJPWF9ERF9TTFIgIOKVpVxyXG5cdFx0XHQvLyBCT1hfRExfU1VEICDilaFcclxuXHRcdFx0Ly8gQk9YX0RSX1NVRCAg4pWeXHJcblx0XHRcdC8vIEJPWF9ETFJfU1UgIOKVp1xyXG5cdFx0XHQvLyBCT1hfRExSX1NEICDilaRcclxuXHRcdFx0Ly8gQk9YX0RMUl9TVUQg4pWqXHJcblx0XHRcdC8vIEJPWF9EVURfU0wgIOKVolxyXG5cdFx0XHQvLyBCT1hfRFVEX1NSICDilZ9cclxuXHRcdFx0Ly8gQk9YX0RVRF9TTFIg4pWrXHJcblx0XHRcdC8vIEJPWF9TTFIgICAgIOKUgFxyXG5cdFx0XHQvLyBCT1hfU1VEICAgICDilIJcclxuXHRcdFx0Ly8gQk9YX1NVTCAgICAg4pSYXHJcblx0XHRcdC8vIEJPWF9TVVIgICAgIOKUlFxyXG5cdFx0XHQvLyBCT1hfU0RMICAgICDilJBcclxuXHRcdFx0Ly8gQk9YX1NEUiAgICAg4pSMXHJcblx0XHRcdC8vIEJPWF9TVUxSICAgIOKUtFxyXG5cdFx0XHQvLyBCT1hfU0RMUiAgICDilKxcclxuXHRcdFx0Ly8gQk9YX1NVREwgICAg4pSkXHJcblx0XHRcdC8vIEJPWF9TVURSICAgIOKUnFxyXG5cdFx0XHQvLyBCT1hfU1VETFIgICDilLxcclxuXHRcdFx0XHJcblx0XHRcdC8vLS0gdGFibGUgYm9yZGVyc1xyXG5cdFx0XHRmb3IgKGxldCBuID0gMDsgbiA8IGxpbmVfcm93cy5sZW5ndGg7IG4gKyspe1xyXG5cdFx0XHRcdGNvbnN0IGxpbmVfcm93ID0gbGluZV9yb3dzW25dO1xyXG5cdFx0XHRcdGxldCBiOiBhbnksIGJtOiBudW1iZXIgPSBib3JkZXJNb2RlID09PSAwID8gMCA6IDE7XHJcblxyXG5cdFx0XHRcdC8vLS0gYm9yZGVyIHRvcFxyXG5cdFx0XHRcdGIgPSBsaW5lc190b3BbYm1dO1xyXG5cdFx0XHRcdGlmICghbiAmJiAhcil7XHJcblx0XHRcdFx0XHRsZXQgYm9yZGVyX3RvcDogc3RyaW5nID0gYi5sZWZ0O1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lX3Jvdy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRcdFx0XHRib3JkZXJfdG9wICs9IChpID8gYi5taWQgOiAnJykgKyAnJy5wYWRFbmQod2lkdGhfbWFwW2ldLCBiLmxpbmUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ym9yZGVyX3RvcCArPSBiLnJpZ2h0O1xyXG5cdFx0XHRcdFx0cm93cy5wdXNoKGJvcmRlcl90b3ApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8tLSBib3JkZXIgc2lkZVxyXG5cdFx0XHRcdGIgPSBsaW5lc19zaWRlW2JtXTtcclxuXHRcdFx0XHRyb3dzLnB1c2goYi5sZWZ0ICsgbGluZV9yb3cuam9pbihiLm1pZCkgKyBiLnJpZ2h0KTtcclxuXHJcblx0XHRcdFx0Ly8tLSBib3JkZXIgbWlkXHJcblx0XHRcdFx0YiA9IGxpbmVzX21pZFtibV07XHJcblx0XHRcdFx0aWYgKCghciB8fCBkaXZpZGVyKSAmJiBuICsgMSA9PT0gbGVuICYmIHIgKyAxIDwgcm93c19sZW4pe1xyXG5cdFx0XHRcdFx0bGV0IGJvcmRlcl9taWQ6IHN0cmluZyA9IGIubGVmdDtcclxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZV9yb3cubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0XHRcdFx0Ym9yZGVyX21pZCArPSAoaSA/IGIubWlkIDogJycpICsgJycucGFkRW5kKHdpZHRoX21hcFtpXSwgYi5saW5lKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJvcmRlcl9taWQgKz0gYi5yaWdodDtcclxuXHRcdFx0XHRcdHJvd3MucHVzaChib3JkZXJfbWlkKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vLS0gYm9yZGVyIGJvdHRvbVxyXG5cdFx0XHRcdGIgPSBsaW5lc19ib3R0b21bYm1dO1xyXG5cdFx0XHRcdGlmIChuICsgMSA9PT0gbGVuICYmIHIgKyAxID09PSByb3dzX2xlbil7XHJcblx0XHRcdFx0XHRsZXQgYm9yZGVyX2JvdHRvbTogc3RyaW5nID0gYi5sZWZ0O1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lX3Jvdy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRcdFx0XHRib3JkZXJfYm90dG9tICs9IChpID8gYi5taWQgOiAnJykgKyAnJy5wYWRFbmQod2lkdGhfbWFwW2ldLCBiLmxpbmUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ym9yZGVyX2JvdHRvbSArPSBiLnJpZ2h0O1xyXG5cdFx0XHRcdFx0cm93cy5wdXNoKGJvcmRlcl9ib3R0b20pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zb2xlLmxvZyhyb3dzLmpvaW4oJ1xcbicpKTsgLy88PCBwcmludCB0YWJsZVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ29uc29sZSBjbGVhciBsb2dzXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBjbGVhcigpOiAoKSA9PiB2b2lkIHtcclxuXHRcdHJldHVybiBmdW5jdGlvbigpOiB2b2lkIHtcclxuXHRcdFx0Y29uc29sZS5sb2coJ1xceDFCYycpO1xyXG5cdFx0XHRjb25zb2xlLmNsZWFyKCk7XHJcblx0XHR9O1xyXG5cdH1cclxufSIsImV4cG9ydCAqIGZyb20gJy4vX1Rlcm0nOyIsImltcG9ydCB7IEZhaWxFcnJvciwgX3N0ciB9IGZyb20gJy4uL3V0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBGaWxlIGV4dGVuc2lvbiBtaW1lIHR5cGVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRVhUX01JTUVTOiB7W2V4dDogc3RyaW5nXTogc3RyaW5nfSA9IHJlcXVpcmUoJy4vX19taW1lcy5qc29uJyk7XHJcblxyXG4vKipcclxuICogTWltZSB0eXBlIG9iamVjdCBpbnRlcmZhY2UgXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElNaW1lVHlwZSB7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBwYXJzZSB2YWx1ZVxyXG5cdCAqL1xyXG5cdHZhbHVlOiBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gbWltZSB0eXBlIChlLmcuIGAnaW1hZ2UvcG5nJ2ApXHJcblx0ICovXHJcblx0dHlwZTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIGZpbGUgZXh0ZW5zaW9uIChlLmcuIGAncG5nJ2ApXHJcblx0ICovXHJcblx0ZXh0OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gcGFyc2UgZXJyb3IgdGV4dFxyXG5cdCAqL1xyXG5cdGVycm9yOiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gZ2V0IGBzdHJpbmdgIGNhc3RcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gcHJvcCAtIGdldCBwcm9wZXJ0eSAoZGVmYXVsdDogYCd0eXBlJ2ApXHJcblx0ICogQHJldHVybnMgYHN0cmluZ2BcclxuXHQgKi9cclxuXHR0b1N0cmluZzogKFxyXG5cdFx0XHJcblx0XHQvKipcclxuXHRcdCAqIC0gZ2V0IHByb3BlcnR5IChkZWZhdWx0IGAndHlwZSdgKVxyXG5cdFx0ICovXHJcblx0XHRwcm9wPzogJ3R5cGUnfCdleHQnfCdlcnJvcidcclxuXHQpPT5zdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBmaWxlIG1pbWUgdHlwZVxyXG4gKiBcclxuICogQGV4YW1wbGUgU3RyaW5nKF9taW1lKCdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04JykpID0+ICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgbWltZSB0eXBlXHJcbiAqIEBwYXJhbSBfZmFpbHVyZSAtIGBGYWlsRXJyb3JgIG1vZGUgfiBgMGAgPSBzaWxlbnQgKGRlZmF1bHQpIHwgYDFgID0gbG9ncyB3YXJuaW5nIHwgYDJgID0gbG9ncyBlcnJvciB8IGAzYCA9IHRocm93cyBlcnJvclxyXG4gKiBAcmV0dXJucyBgSU1pbWVUeXBlYCBzdHJpbmdhYmxlIG1pbWUgdHlwZSBvYmplY3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBfbWltZSA9ICh2YWx1ZTogYW55LCBfZmFpbHVyZTogMHwxfDJ8MyA9IDApOiBJTWltZVR5cGUgPT4ge1xyXG5cdFxyXG5cdC8vbWltZSB0eXBlIGl0ZW1cclxuXHRjb25zdCBpdGVtOiBJTWltZVR5cGUgPSB7XHJcblx0XHR2YWx1ZSxcclxuXHRcdHR5cGU6ICcnLFxyXG5cdFx0ZXh0OiAnJyxcclxuXHRcdGVycm9yOiAnJyxcclxuXHRcdHRvU3RyaW5nKHByb3A/OiAndHlwZSd8J2V4dCd8J2Vycm9yJyk6IHN0cmluZyB7XHJcblx0XHRcdGNvbnN0IGtleTogc3RyaW5nID0gcHJvcCAmJiBbJ21pbWUnLCAnZXh0JywgJ2Vycm9yJ11cclxuXHRcdFx0LmluY2x1ZGVzKHByb3AgPSBfc3RyKHByb3AsIHRydWUpLnRvTG93ZXJDYXNlKCkgYXMgYW55KSA/IHByb3AgKyAnJyA6ICd0eXBlJztcclxuXHRcdFx0cmV0dXJuIHRoaXNba2V5IGFzICd0eXBlJ3wnZXh0J3wnZXJyb3InXTtcclxuXHRcdH1cclxuXHR9XHJcblx0XHJcblx0Ly9wYXJzZSB2YWx1ZVxyXG5cdHRyeSB7XHJcblx0XHRjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XHJcblx0XHRjb25zdCB2YWw6IHN0cmluZyA9IF9zdHIodmFsdWUsIHRydWUpO1xyXG5cdFx0aWYgKHZhbCl7XHJcblx0XHRcdGxldCBtOiBSZWdFeHBNYXRjaEFycmF5fG51bGwgPSBudWxsO1xyXG5cdFx0XHRpZiAobSA9IHZhbC5tYXRjaCgvKFxcLnxeKShbLV8wLTlhLXpBLVpdKykkL2kpKXsgLy9leHRcclxuXHRcdFx0XHRsZXQgZXh0ID0gbVsyXS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdGlmIChleHQgPT09ICdqcGVnJykgZXh0ID0gJ2pwZyc7XHJcblx0XHRcdFx0aWYgKEVYVF9NSU1FUy5oYXNPd25Qcm9wZXJ0eShleHQpKSBpdGVtLnR5cGUgPSBFWFRfTUlNRVNbaXRlbS5leHQgPSBleHRdO1xyXG5cdFx0XHRcdGVsc2UgZXJyb3JzLnB1c2goYE1pbWUgZmlsZSBleHRlbnNpb24gXCIke2V4dH1cIiBpcyBub3Qgc3VwcG9ydGVkYCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAoL15bLV9hLXowLTldK1xcL1teXFwvXSskL2kudGVzdCh2YWwpKXsgLy9taW1lXHJcblx0XHRcdFx0Y29uc3QgZm91bmQ6IFtleHQ6IHN0cmluZywgdHlwZTogc3RyaW5nXXx1bmRlZmluZWQgPSBPYmplY3QuZW50cmllcyhFWFRfTUlNRVMpLmZpbmQodiA9PiB2WzFdLnN0YXJ0c1dpdGgodmFsLnRvTG93ZXJDYXNlKCkpIHx8IHZhbC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodlsxXSkpO1xyXG5cdFx0XHRcdGlmIChmb3VuZCl7XHJcblx0XHRcdFx0XHRsZXQgW2V4dCwgdHlwZV0gPSBmb3VuZDtcclxuXHRcdFx0XHRcdGlmIChleHQgPT09ICdqcGVnJykgZXh0ID0gJ2pwZyc7XHJcblx0XHRcdFx0XHRpdGVtLmV4dCA9IGV4dDtcclxuXHRcdFx0XHRcdGl0ZW0udHlwZSA9IHR5cGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2UgZXJyb3JzLnB1c2goYE1pbWUgdHlwZSBcIiR7dmFsfVwiIGlzIG5vdCBzdXBwb3J0ZWRgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGVycm9ycy5wdXNoKGBJbnZhbGlkIG1pbWUgdHlwZSBvciBmaWxlIGV4dGVuc2lvbiBzdHJpbmcgdmFsdWVgKTtcclxuXHRcdH1cclxuXHRcdGVsc2UgZXJyb3JzLnB1c2goJ0JsYW5rIG1pbWUgdHlwZSBvciBmaWxlIGV4dGVuc2lvbiBzdHJpbmcgdmFsdWUnKTtcclxuXHRcdGlmIChlcnJvcnMubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoaXRlbS5lcnJvciA9IGVycm9ycy5qb2luKCc7ICcpICsgJy4nKTsgLy9lcnJvciAtIHNldCwgdGhyb3dcclxuXHRcdHJldHVybiBpdGVtOyAvL3Jlc3VsdFxyXG5cdH1cclxuXHRjYXRjaCAoZTogYW55KXtcclxuXHRcdG5ldyBGYWlsRXJyb3IoZSwgX2ZhaWx1cmUsIHtpdGVtfSwgJ01pbWVUeXBlRXJyb3InKTtcclxuXHRcdHJldHVybiBpdGVtOyAvL3Jlc3VsdFxyXG5cdH1cclxufSIsImltcG9ydCB7IF9jb21tYXMsIF9qc29uU3RyaW5naWZ5LCBfcG9zSW50LCBfcm91bmQsIF9zcGxpdCwgX3N0ciB9IGZyb20gJy4uL3V0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBCYXNlbmFtZSAoc3RyaW5nYWJsZSkgb2JqZWN0IGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQmFzZW5hbWUge1xyXG5cdHZhbHVlOiBhbnk7XHJcblx0YmFzZW5hbWU6IHN0cmluZztcclxuXHRuYW1lOiBzdHJpbmc7XHJcblx0ZXh0OiBzdHJpbmc7XHJcblx0ZXJyb3I6IHN0cmluZztcclxuXHRpbGxlZ2FsOiBzdHJpbmdbXTtcclxuXHRpbnZhbGlkOiBzdHJpbmdbXTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBHZXQgYmFzZW5hbWUgdGV4dFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBwcm9wIC0gdGV4dCB2YWx1ZSBwcm9wXHJcblx0ICogQHJldHVybnMgYHN0cmluZ2BcclxuXHQgKi9cclxuXHR0b1N0cmluZzogKFxyXG5cdFx0XHJcblx0XHQvKipcclxuXHRcdCAqIFNwZWNpZnkgdGV4dCB2YWx1ZSBwcm9wIChkZWZhdWx0IGAnYmFzZW5hbWUnYClcclxuXHRcdCAqL1xyXG5cdFx0cHJvcD86ICdiYXNlbmFtZSd8J25hbWUnfCdleHQnfCdlcnJvcidcclxuXHQpPT5zdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCYXNlbmFtZSBlcnJvciBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUJhc2VuYW1lRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdGl0ZW06IElCYXNlbmFtZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB2YWxpZGF0ZWQgYmFzZW5hbWUgZnJvbSBmaWxlIHBhdGggdmFsdWVcclxuICogXHJcbiAqIC0gc3BsaXRzIHBhdGggc2VwYXJhdG9ycyBgW1xcXFwvXWAgdXNlcyBsYXN0IGVudHJ5XHJcbiAqIC0gdHJpbXMgc3BhY2VzLCBpbnZhbGlkYXRlcyBlbXB0eVxyXG4gKiAtIGludmFsaWRhdGVzIGlsbGVnYWwgY2hhcmFjdGVycyAoaS5lLiBgOj9cIjw+fCpgKVxyXG4gKiAtIGludmFsaWRhdGVzIGludmFsaWQgbmFtZXMgKGkuZS4gYCcuLi4nLCAnbmFtZS4nLCAnbmFtZS4uLidgKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgcGF0aCB2YWx1ZVxyXG4gKiBAcGFyYW0gZG90cyAtIGFsbG93IGRvdCBuYXYgfiBgJy4nIHwgJy4uJ2AgKGRlZmF1bHQ6IGBmYWxzZWApXHJcbiAqIEBwYXJhbSBfc3RyaWN0IC0gc3RyaWN0IHBhcnNpbmcgfiByZXR1cm5zIGJsYW5rIChgJydgKSB2YWx1ZXMgb24gZXJyb3JcclxuICogQHBhcmFtIF9mYWlsdXJlIC0gZXJyb3IgaGFuZGxpbmcgfiBgMGAgPSBpZ25vcmUsICcxJyA9IHdhcm4sIGAyYCA9IHRocm93IGVycm9yIChkZWZhdWx0IGAwYClcclxuICogQHJldHVybnMgYElCYXNlbmFtZWAgYmFzZW5hbWUgKHN0cmluZ2FibGUpXHJcbiAqIEB0aHJvd3MgYElCYXNlbmFtZUVycm9yYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9iYXNlbmFtZSA9ICh2YWx1ZTogYW55LCBkb3RzOiBib29sZWFuID0gZmFsc2UsIF9zdHJpY3Q6IGJvb2xlYW4gPSBmYWxzZSwgX2ZhaWx1cmU/OiAwfDF8Mik6IElCYXNlbmFtZSA9PiB7XHJcblx0Y29uc3QgZmFpbHVyZTogMHwxfDIgPSBbMCwgMSwgMl0uaW5jbHVkZXMoX2ZhaWx1cmUgPSBwYXJzZUludChfZmFpbHVyZSArICcnKSBhcyBhbnkpID8gX2ZhaWx1cmUgYXMgKDB8MXwyKSA6IDA7XHJcblxyXG5cdC8vYmFzZW5hbWUgaXRlbVxyXG5cdGNvbnN0IGl0ZW06IElCYXNlbmFtZSA9IHtcclxuXHRcdHZhbHVlLFxyXG5cdFx0YmFzZW5hbWU6ICcnLFxyXG5cdFx0bmFtZTogJycsXHJcblx0XHRleHQ6ICcnLFxyXG5cdFx0ZXJyb3I6ICcnLFxyXG5cdFx0aWxsZWdhbDogW10sXHJcblx0XHRpbnZhbGlkOiBbXSxcclxuXHRcdHRvU3RyaW5nKHByb3A/OiAnYmFzZW5hbWUnfCduYW1lJ3wnZXh0J3wnZXJyb3InKTogc3RyaW5nIHtcclxuXHRcdFx0Y29uc3Qga2V5OiBzdHJpbmcgPSBwcm9wICYmIFsnYmFzZW5hbWUnLCAnbmFtZScsICdleHQnLCAnZXJyb3InXVxyXG5cdFx0XHQuaW5jbHVkZXMocHJvcCA9IF9zdHIocHJvcCwgdHJ1ZSkudG9Mb3dlckNhc2UoKSBhcyBhbnkpID8gcHJvcCArICcnIDogJ2Jhc2VuYW1lJztcclxuXHRcdFx0cmV0dXJuIHRoaXNba2V5IGFzICdiYXNlbmFtZSd8J25hbWUnfCdleHQnfCdlcnJvciddO1xyXG5cdFx0fSxcclxuXHR9O1xyXG5cclxuXHQvL3BhcnNlIHZhbHVlXHJcblx0bGV0IG06IFJlZ0V4cE1hdGNoQXJyYXl8bnVsbCA9IG51bGw7XHJcblx0Y29uc3QgdmFsID0gaXRlbS5uYW1lID0gaXRlbS5iYXNlbmFtZSA9IF9zdHIoX3N0cih2YWx1ZSwgdHJ1ZSkuc3BsaXQoL1tcXFxcXFwvXS9nKS5wb3AoKSwgdHJ1ZSk7XHJcblx0aWYgKG0gPSB2YWwubWF0Y2goLyhbXlxcXFwvXSopJC9pKSl7XHJcblx0XHRpdGVtLm5hbWUgPSBtWzFdO1xyXG5cdFx0aWYgKG0gPSBpdGVtLm5hbWUubWF0Y2goLyguKikoXFwuKFstXzAtOWEtekEtWl0rKSkkL2kpKXtcclxuXHRcdFx0aXRlbS5uYW1lID0gbVsxXTtcclxuXHRcdFx0aXRlbS5leHQgPSBtWzNdO1xyXG5cdFx0fVxyXG5cdH1cclxuXHR0cnkge1xyXG5cdFx0Y29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0aWYgKCF2YWwpIGVycm9ycy5wdXNoKCdUaGUgYmFzZW5hbWUgc3RyaW5nIHZhbHVlIGlzIGVtcHR5Jyk7XHJcblx0XHRlbHNlIHtcclxuXHJcblx0XHRcdC8vZG90c1xyXG5cdFx0XHRpZiAoIWRvdHMgJiYgWycuLicsICcuLiddLmluY2x1ZGVzKHZhbCkpe1xyXG5cdFx0XHRcdGl0ZW0uaW52YWxpZC5wdXNoKHZhbCk7XHJcblx0XHRcdFx0ZXJyb3JzLnB1c2goYFRoZSBiYXNlbmFtZSBcIiR7dmFsfVwiIGRvdHMgbm90IGFsbG93ZWRgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly9pbnZhbGlkXHJcblx0XHRcdGlmICgvXlxcLlxcLltcXC5dKyQvLnRlc3QodmFsKSB8fCAvW15cXC5dW1xcLl0rJC8udGVzdCh2YWwpKXtcclxuXHRcdFx0XHRpZiAoIWl0ZW0uaW52YWxpZC5sZW5ndGgpIGl0ZW0uaW52YWxpZC5wdXNoKHZhbCk7XHJcblx0XHRcdFx0ZXJyb3JzLnB1c2goYFRoZSBiYXNlbmFtZSBcIiR7dmFsfVwiIGZvcm1hdCBpcyBpbnZhbGlkYCk7XHJcblx0XHRcdH1cclxuXHRcdFx0XHJcblx0XHRcdC8vaWxsZWdhbFxyXG5cdFx0XHRpZiAobSA9IHZhbC5tYXRjaCgvW1xcOlxcP1xcXCJcXDxcXD5cXHxcXCpdL2cpKXtcclxuXHRcdFx0XHRpdGVtLmlsbGVnYWwucHVzaCguLi5tKTtcclxuXHRcdFx0XHRlcnJvcnMucHVzaChgVGhlIGJhc2VuYW1lIFwiJHt2YWx9XCIgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzICg6P1wiPD58KikgPT4gXCIke20uam9pbignJyl9XCJgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKGVycm9ycy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcihpdGVtLmVycm9yID0gZXJyb3JzLmpvaW4oJzsgJykgKyAnLicpOyAvL2Vycm9yIC0gc2V0LCB0aHJvd1xyXG5cdFx0cmV0dXJuIGl0ZW07IC8vcmVzdWx0XHJcblx0fVxyXG5cdGNhdGNoIChlOiBhbnkpe1xyXG5cdFx0aWYgKF9zdHJpY3QpeyAvL3N0cmljdCAtIGNsZWFyXHJcblx0XHRcdGl0ZW0uYmFzZW5hbWUgPSAnJztcclxuXHRcdFx0aXRlbS5uYW1lID0gJyc7XHJcblx0XHRcdGl0ZW0uZXh0ID0gJyc7XHJcblx0XHR9XHJcblx0XHRpZiAoZmFpbHVyZSl7IC8vZmFpbHVyZSAtIGN1c3RvbSBlcnJvclxyXG5cdFx0XHRjbGFzcyBCYXNlbmFtZUVycm9yIGV4dGVuZHMgRXJyb3IgaW1wbGVtZW50cyBJQmFzZW5hbWVFcnJvciB7XHJcblx0XHRcdFx0bmFtZTogc3RyaW5nID0gJ0Jhc2VuYW1lRXJyb3InO1xyXG5cdFx0XHRcdGl0ZW06IElCYXNlbmFtZSA9IGl0ZW07XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgZXJyb3IgPSBuZXcgQmFzZW5hbWVFcnJvcihgJHtlLm1lc3NhZ2UgfHwgZX1gKTtcclxuXHRcdFx0aWYgKGZhaWx1cmUgPT09IDIpIHRocm93IGVycm9yOyAvL3Rocm93XHJcblx0XHRcdGVsc2UgY29uc29sZS53YXJuKGVycm9yICsgJycsIHtpdGVtfSk7IC8vd2FyblxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGl0ZW07IC8vcmVzdWx0XHJcblx0fVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIE5vcm1hbGl6ZWQgcGF0aCAoc3RyaW5nYWJsZSkgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElGaWxlUGF0aCB7XHJcblx0dmFsdWU6IGFueTtcclxuXHRyb290OiBzdHJpbmc7XHJcblx0ZHJpdmU6IHN0cmluZztcclxuXHRwYXRoOiBzdHJpbmc7XHJcblx0ZGlyOiBzdHJpbmc7XHJcblx0YmFzZW5hbWU6IHN0cmluZztcclxuXHRuYW1lOiBzdHJpbmc7XHJcblx0ZXh0OiBzdHJpbmc7XHJcblx0ZXJyb3I6IHN0cmluZztcclxuXHRpbGxlZ2FsOiBzdHJpbmdbXTtcclxuXHRpbnZhbGlkOiBzdHJpbmdbXTtcclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHBhdGggdGV4dFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBwcm9wIC0gdGV4dCB2YWx1ZSBwcm9wXHJcblx0ICogQHJldHVybnMgYHN0cmluZ2BcclxuXHQgKi9cclxuXHR0b1N0cmluZzogKFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU3BlY2lmeSB0ZXh0IHZhbHVlIHByb3AgKGRlZmF1bHQ6IGAncGF0aCdgKVxyXG5cdFx0ICogLSB1c2UgYCdmaWxlJ2AgdG8gZW5mb3JjZSB2YWxpZCBiYXNlbmFtZSBhbmQgbm8gZXJyb3JcclxuXHRcdCAqL1xyXG5cdFx0cHJvcD86ICdmaWxlJ3wncm9vdCd8J2RyaXZlJ3wncGF0aCd8J2Rpcid8J2Jhc2VuYW1lJ3wnbmFtZSd8J2V4dCd8J2Vycm9yJ1xyXG5cdCk9PnN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIE5vcm1hbGl6ZWQgcGF0aCBlcnJvciBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUZpbGVQYXRoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdGl0ZW06IElGaWxlUGF0aDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBub3JtYWxpemVkIGZpbGUvZGlyZWN0b3J5IHBhdGggKHZhbGlkYXRlcyBiYXNlbmFtZSlcclxuICogXHJcbiAqIC0gdHJpbXMgc3BhY2VzLCBzaWxlbnRseSBvbWl0cyBlbXB0eVxyXG4gKiAtIGludmFsaWRhdGVzIGlsbGVnYWwgcGF0aCBuYW1lIGNoYXJhY3RlcnMgKGkuZS4gYDo/XCI8PnwqYClcclxuICogLSBpbnZhbGlkYXRlcyBpbnZhbGlkIHBhdGggbmFtZSBkb3RzIChpLmUuIGAnLi4uJywgJ25hbWUuJywgJ25hbWUuLi4nYClcclxuICogLSBpbnZhbGlkYXRlcyBvdXRib3VuZCByb290IGRvdCBuYXZcclxuICogLSBub3JtYWxpemVzIGRvdCBwYXRoXHRcdFx0KGkuZS4gYCcvLidgID0+IGAnLydgLCBgJ2EvYi8uL2MnID0+ICdhL2IvYydgLCBgJy4vYS8uLi9iL2MnID0+ICcuL2IvYydgKSBpZ25vcmVzIG91dCBvZiBib3VuZCAoaS5lLiBgJ0M6L2EvLi4vLi4vYi9jJyA9PiAnQzovYi9jJ2ApXHJcbiAqIC0gbm9ybWFsaXplcyBkcml2ZSBsZXR0ZXJcdChpLmUuIGAnYzpcXFxcYS50eHQnID0+ICdDOlxcXFxhLnR4dCdgLCBgJ2M6J2AgPT4gYCdDOlxcXFwnYClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHBhdGggdmFsdWVcclxuICogQHBhcmFtIHNlcGFyYXRvciAtIHJlc3VsdCBwYXRoIHNlcGFyYXRvciB+IGAnJyB8ICcvJyB8ICdcXFxcJ2AgKGRlZmF1bHQgYCcnYCA9IHVuY2hhbmdlZClcclxuICogQHBhcmFtIF9zdHJpY3QgLSBzdHJpY3QgcGFyc2luZyB+IHJldHVybnMgYmxhbmsgKGAnJ2ApIHZhbHVlcyBvbiBlcnJvclxyXG4gKiBAcGFyYW0gX3R5cGUgLSBwYXRoIHR5cGUgKGRlZmF1bHQgYCcnYCkgfiBuYW1lIHVzZWQgaW4gZXJyb3IgbWVzc2FnZSAoaS5lLiBgJ1RoZSAke190eXBlfSBwYXRoLi4uJ2ApXHJcbiAqIEBwYXJhbSBfZmFpbHVyZSAtIGVycm9yIGhhbmRsaW5nIH4gYDBgID0gaWdub3JlLCAnMScgPSB3YXJuLCBgMmAgPSB0aHJvdyBlcnJvciAoZGVmYXVsdCBgMGApXHJcbiAqIEByZXR1cm5zIGBJRmlsZVBhdGhgIG5vcm1hbGl6ZWQgcGF0aCAoc3RyaW5nYWJsZSlcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZmlsZXBhdGggPSAodmFsdWU6IGFueSwgc2VwYXJhdG9yPzogJyd8Jy8nfCdcXFxcJywgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlLCBfdHlwZT86IHN0cmluZywgX2ZhaWx1cmU/OiAwfDF8Mik6IElGaWxlUGF0aCA9PiB7XHJcblx0Y29uc3Qgc2VwOiAnJ3wnLyd8J1xcXFwnID0gWycnLCAnLycsICdcXFxcJ10uaW5jbHVkZXMoc2VwYXJhdG9yID0gX3N0cihzZXBhcmF0b3IsIHRydWUpIGFzIGFueSkgPyBzZXBhcmF0b3IgYXMgKCcnfCcvJ3wnXFxcXCcpIDogJyc7XHJcblx0Y29uc3QgdHlwZTogc3RyaW5nID0gKF90eXBlID0gX3N0cihfdHlwZSwgdHJ1ZSkucmVwbGFjZSgvcGF0aFxccyokL2ksICcnKS50cmltKCkpID8gX3R5cGUgKyAnICcgOiAnJztcclxuXHRjb25zdCBmYWlsdXJlOiAwfDF8MiA9IFswLCAxLCAyXS5pbmNsdWRlcyhfZmFpbHVyZSA9IHBhcnNlSW50KF9mYWlsdXJlICsgJycpIGFzIGFueSkgPyBfZmFpbHVyZSBhcyAoMHwxfDIpIDogMDtcclxuXHRcclxuXHQvL25vcm1hbGl6ZWQgcGF0aCBpdGVtXHJcblx0Y29uc3QgaXRlbTogSUZpbGVQYXRoID0ge1xyXG5cdFx0dmFsdWUsXHJcblx0XHRyb290OiAnJyxcclxuXHRcdGRyaXZlOiAnJyxcclxuXHRcdHBhdGg6ICcnLFxyXG5cdFx0ZGlyOiAnJyxcclxuXHRcdGJhc2VuYW1lOiAnJyxcclxuXHRcdG5hbWU6ICcnLFxyXG5cdFx0ZXh0OiAnJyxcclxuXHRcdGVycm9yOiAnJyxcclxuXHRcdGlsbGVnYWw6IFtdLFxyXG5cdFx0aW52YWxpZDogW10sXHJcblx0XHR0b1N0cmluZyhwcm9wPzogJ2ZpbGUnfCdyb290J3wnZHJpdmUnfCdwYXRoJ3wnZGlyJ3wnYmFzZW5hbWUnfCduYW1lJ3wnZXh0J3wnZXJyb3InKTogc3RyaW5nIHtcclxuXHRcdFx0bGV0IGtleTogc3RyaW5nID0gcHJvcCAmJiBbJ2ZpbGUnLCAncm9vdCcsICdkcml2ZScsICdwYXRoJywgJ2RpcicsICdiYXNlbmFtZScsICduYW1lJywgJ2V4dCcsICdlcnJvciddXHJcblx0XHRcdC5pbmNsdWRlcyhwcm9wID0gX3N0cihwcm9wLCB0cnVlKS50b0xvd2VyQ2FzZSgpIGFzIGFueSkgPyBwcm9wICsgJycgOiAncGF0aCc7XHJcblx0XHRcdGlmIChrZXkgPT09ICdmaWxlJyl7XHJcblx0XHRcdFx0aWYgKCEoIXRoaXMuZXJyb3IgJiYgdGhpcy5iYXNlbmFtZSkpIHJldHVybiAnJztcclxuXHRcdFx0XHRrZXkgPSAncGF0aCc7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRoaXNba2V5IGFzICdyb290J3wnZHJpdmUnfCdwYXRoJ3wnZGlyJ3wnYmFzZW5hbWUnfCduYW1lJ3wnZXh0J3wnZXJyb3InXTtcclxuXHRcdH0sXHJcblx0fTtcclxuXHJcblx0Ly9wYXJzZSBwYXRoXHJcblx0bGV0IHBhdGg6IHN0cmluZyA9IF9zdHIodmFsdWUsIHRydWUpO1xyXG5cdHRyeSB7XHJcblx0XHRsZXQgcm9vdCA9ICcnLCBkcml2ZSA9ICcnLCBtOiBSZWdFeHBNYXRjaEFycmF5fG51bGwgPSBudWxsO1xyXG5cdFx0Y29uc3QgaXRlbXM6IFtwYXJ0OiBzdHJpbmcsIGRpdjogc3RyaW5nXVtdID0gW107XHJcblx0XHRjb25zdCBwYXRoX3BhcnRzOiBbcGFydDogc3RyaW5nLCBkaXY6IHN0cmluZ11bXSA9IF9zcGxpdChwYXRoLCAvW1xcXFxcXC9dLyk7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGhfcGFydHMubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0bGV0IFtwYXJ0LCBkaXZdID0gcGF0aF9wYXJ0c1tpXTtcclxuXHRcdFx0ZGl2ID0gZGl2ID8gKHNlcCA/IHNlcCA6IGRpdikgOiAnJztcclxuXHRcdFx0aWYgKCFpKXtcclxuXHRcdFx0XHRpZiAoL1thLXpdXFw6L2kudGVzdChwYXJ0KSkgcm9vdCA9IGRyaXZlID0gcGFydC50b1VwcGVyQ2FzZSgpICsgKChzZXAgPyBzZXAgOiBkaXYpIHx8ICdcXFxcJyk7XHJcblx0XHRcdFx0ZWxzZSBpZiAoIXBhcnQgJiYgZGl2KSByb290ID0gZGl2O1xyXG5cdFx0XHRcdGlmIChyb290KSBjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpdGVtcy5wdXNoKFtwYXJ0LCBkaXZdKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL3BhcnNlIGl0ZW1zIC0gdHJpbSBiYXNlbmFtZVxyXG5cdFx0Y29uc3QgdHJpbW1lZF9wYXJ0czogW3BhcnQ6IHN0cmluZywgZGl2OiBzdHJpbmddW10gPSBbXTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0bGV0IFtwYXJ0LCBkaXZdID0gaXRlbXNbaV07XHJcblx0XHRcdHBhcnQgPSBfc3RyKHBhcnQsIHRydWUpO1xyXG5cdFx0XHRpZiAoaSAmJiAhcGFydCkgY29udGludWU7IC8vc2tpcCBibGFuayAoJycpIGVudHJpZXNcclxuXHRcdFx0dHJpbW1lZF9wYXJ0cy5wdXNoKFtwYXJ0LCBkaXZdKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL3BhcnNlIHRyaW1tZWQgLSBub3JtYWxpemUgZG90IHBhdGhcclxuXHRcdGNvbnN0IG5vcm1fcGFydHM6IFtwYXJ0OiBzdHJpbmcsIGRpdjogc3RyaW5nXVtdID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRyaW1tZWRfcGFydHMubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0bGV0IFtwYXJ0LCBkaXZdID0gdHJpbW1lZF9wYXJ0c1tpXTtcclxuXHRcdFx0aWYgKHBhcnQgPT09ICcuJyAmJiAoIWkgJiYgcm9vdCB8fCBpKSl7IC8vbWF0Y2ggZG90IHBhdGggKCcuJykgKGF0IHN0YXJ0IHdpdGggcm9vdCwgbm90IGF0IHN0YXJ0KVxyXG5cdFx0XHRcdGlmIChpICYmIGkgPT09IHRyaW1tZWRfcGFydHMubGVuZ3RoIC0gMSkgdHJpbW1lZF9wYXJ0c1tpIC0gMV1bMV0gPSAnJzsgLy9pZiBsYXN0IHJlbW92ZSBwcmV2aW91cyBzZXBhcmF0b3JcclxuXHRcdFx0XHRjb250aW51ZTsgLy9za2lwIHVubmVjZXNzYXJ5IGRvdCBwYXRoICgnLicpXHJcblx0XHRcdH1cclxuXHRcdFx0bm9ybV9wYXJ0cy5wdXNoKFtwYXJ0LCBkaXZdKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL3BhcnNlIG5vcm1hbGl6ZWQgLSB2YWxpZGF0ZSBwYXJ0c1xyXG5cdFx0Y29uc3QgaW52YWxpZDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XHJcblx0XHRjb25zdCBpbGxlZ2FsOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHRcdGNvbnN0IG91dGJvdW5kOiBbcGFydDogc3RyaW5nLCBkaXY6IHN0cmluZ11bXSA9IFtdO1xyXG5cdFx0Y29uc3QgcGFydHM6IFtwYXJ0OiBzdHJpbmcsIGRpdjogc3RyaW5nXVtdID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG5vcm1fcGFydHMubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0Y29uc3QgW3BhcnQsIGRpdl0gPSBub3JtX3BhcnRzW2ldOyAvL3BhcnQgZW50cnlcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRfYmFzZW5hbWUocGFydCwgdHJ1ZSwgZmFsc2UsIDIpOyAvL3ZhbGlkYXRlIGJhc2VuYW1lXHJcblx0XHRcdH1cclxuXHRcdFx0Y2F0Y2ggKGU6IGFueSkge1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGU/Lml0ZW0/LmludmFsaWQpICYmIGUuaXRlbS5pbnZhbGlkLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHYgb2YgZS5pdGVtLmludmFsaWQpIGludmFsaWQuYWRkKHYpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShlPy5pdGVtPy5pbGxlZ2FsKSAmJiBlLml0ZW0uaWxsZWdhbC5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCB2IG9mIGUuaXRlbS5pbGxlZ2FsKSBpbGxlZ2FsLmFkZCh2KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHBhcnQgPT09ICcuLicpeyAvL2RvdCBwYXRoICgnLi4nKSBuYXZcclxuXHRcdFx0XHRpZiAocGFydHMubGVuZ3RoKXsgLy9wb3AgcGFyZW50XHJcblx0XHRcdFx0XHRjb25zdCBwID0gcGFydHMubGVuZ3RoIC0gMTtcclxuXHRcdFx0XHRcdGlmIChwID4gLTEgJiYgISFwYXJ0c1twXVswXSAmJiAhWycuJywgJy4uJ10uaW5jbHVkZXMocGFydHNbcF1bMF0pKXtcclxuXHRcdFx0XHRcdFx0cGFydHMucG9wKCk7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGlmIChyb290KXsgLy9yb290IHBhcmVudCAtIG91dGJvdW5kIFxyXG5cdFx0XHRcdFx0b3V0Ym91bmQucHVzaChbcGFydCwgZGl2XSk7XHJcblx0XHRcdFx0XHRpZiAoZHJpdmUpIGNvbnRpbnVlOyAvL2lnbm9yZSB3aGVuIHJvb3QgaXMgZHJpdmVcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cGFydHMucHVzaChbcGFydCwgZGl2XSk7IC8vYWRkIGVudHJ5XHJcblx0XHR9XHJcblx0XHRpZiAocm9vdCAmJiBwYXJ0cy5sZW5ndGggJiYgIXBhcnRzWzBdWzBdICYmIHBhcnRzWzBdWzFdKSBwYXJ0c1swXVsxXSA9ICcnOyAvL2ZpeCByb290IHNlcGFyYXRvclxyXG5cdFx0aWYgKG91dGJvdW5kLmxlbmd0aCkgb3V0Ym91bmQucHVzaCguLi5wYXJ0cyk7IC8vb3V0Ym91bmQgZW50cmllc1xyXG5cclxuXHRcdC8vdXBkYXRlIGl0ZW0gLSBzZXQgcm9vdCwgZHJpdmUsIGRpciwgYmFzZW5hbWUsIGV4dCwgZGlyXHJcblx0XHRpdGVtLnJvb3QgPSByb290O1xyXG5cdFx0aXRlbS5kcml2ZSA9IGRyaXZlO1xyXG5cclxuXHRcdC8vam9pbiBwYXJ0cyAtIHVwZGF0ZSBkaXIsIHBhdGhcclxuXHRcdGxldCB0bXBfcGF0aDogc3RyaW5nID0gJyc7XHJcblx0XHRmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHRtcF9wYXRoICs9IHBhcnQuam9pbignJyk7XHJcblx0XHRpdGVtLmRpciA9IGl0ZW0ucGF0aCA9IHBhdGggPSByb290ICsgdG1wX3BhdGgucmVwbGFjZSgvW1xcXFwvXSQvLCAnJyk7XHJcblxyXG5cdFx0Ly91cGRhdGUgaXRlbSAtIHNldCBiYXNlbmFtZSwgbmFtZSwgZXh0LCBkaXJcclxuXHRcdGNvbnN0IGVuZCA9IHBhcnRzLnBvcCgpO1xyXG5cdFx0aWYgKGVuZCAmJiAhWycnLCAnLicsICcuLiddLmluY2x1ZGVzKGVuZFswXSkpe1xyXG5cdFx0XHRjb25zdCBiYXNlbmFtZTogSUJhc2VuYW1lID0gX2Jhc2VuYW1lKGVuZFswXSk7XHJcblx0XHRcdGl0ZW0uYmFzZW5hbWUgPSBiYXNlbmFtZS5iYXNlbmFtZTtcclxuXHRcdFx0aXRlbS5uYW1lID0gYmFzZW5hbWUubmFtZTtcclxuXHRcdFx0aXRlbS5leHQgPSBiYXNlbmFtZS5leHQ7XHJcblxyXG5cdFx0XHQvL2pvaW4gcGFydHMgLSB1cGRhdGUgZGlyXHJcblx0XHRcdHRtcF9wYXRoID0gJyc7XHJcblx0XHRcdGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykgdG1wX3BhdGggKz0gcGFydC5qb2luKCcnKTtcclxuXHRcdFx0aXRlbS5kaXIgPSByb290ICsgdG1wX3BhdGgucmVwbGFjZSgvW1xcXFwvXSQvLCAnJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9jaGVjayBlcnJvcnMgLSB1cGRhdGUgaXRlbVxyXG5cdFx0Y29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0dG1wX3BhdGggPSAnJztcclxuXHRcdGZvciAoY29uc3QgcGFydCBvZiBvdXRib3VuZCkgdG1wX3BhdGggKz0gcGFydC5qb2luKCcnKTtcclxuXHRcdGNvbnN0IG91dGJvdW5kX3BhdGggPSB0bXBfcGF0aCA/IHJvb3QgKyB0bXBfcGF0aCA6ICcnO1xyXG5cdFx0aWYgKG91dGJvdW5kX3BhdGgpIGVycm9ycy5wdXNoKGBUaGUgJHt0eXBlfXJvb3QgKCR7cm9vdH0pIGRvdCBuYXYgcGF0aCBpcyBvdXRib3VuZCBcIiR7b3V0Ym91bmRfcGF0aH1cIiA9PiBcIiR7cGF0aH1cImApOyAvL291dGJvdW5kXHJcblx0XHRpZiAoaW52YWxpZC5zaXplKSBlcnJvcnMucHVzaChgVGhlICR7dHlwZX1wYXRoIGNvbnRhaW5zIGludmFsaWQgbmFtZSR7aW52YWxpZC5zaXplID4gMSA/ICdzJyA6ICcnfSAoJHtfanNvblN0cmluZ2lmeShbLi4uaW52YWxpZF0pfSlgKTsgLy9pbnZhbGlkXHJcblx0XHRpZiAoaWxsZWdhbC5zaXplKSBlcnJvcnMucHVzaChgVGhlICR7dHlwZX1wYXRoIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycyAoOj9cIjw+fCopID0+IFwiJHtbLi4uaWxsZWdhbF0uam9pbignJyl9XCJgKTsgLy9pbGxlZ2FsXHJcblx0XHRpZiAoZXJyb3JzLmxlbmd0aCl7IC8vdGhyb3cgZXJyb3JzXHJcblx0XHRcdGl0ZW0uaW52YWxpZCA9IFsuLi5pbnZhbGlkXTtcclxuXHRcdFx0aXRlbS5pbGxlZ2FsID0gWy4uLmlsbGVnYWxdO1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoaXRlbS5lcnJvciA9IGVycm9ycy5qb2luKCc7ICcpICsgJy4nKTsgLy9lcnJvciAtIHNldCwgdGhyb3dcclxuXHRcdH1cclxuXHRcdHJldHVybiBpdGVtOyAvLzw8IHJlc3VsdCAtIElGaWxlUGF0aFxyXG5cdH1cclxuXHRjYXRjaCAoZTogYW55KXtcclxuXHRcdGlmIChfc3RyaWN0KXsgLy9zdHJpY3QgLSBjbGVhclxyXG5cdFx0XHRpdGVtLnJvb3QgPSAnJztcclxuXHRcdFx0aXRlbS5kcml2ZSA9ICcnO1xyXG5cdFx0XHRpdGVtLnBhdGggPSAnJztcclxuXHRcdFx0aXRlbS5kaXIgPSAnJztcclxuXHRcdFx0aXRlbS5iYXNlbmFtZSA9ICcnO1xyXG5cdFx0XHRpdGVtLm5hbWUgPSAnJztcclxuXHRcdFx0aXRlbS5leHQgPSAnJztcclxuXHRcdH1cclxuXHRcdGlmIChmYWlsdXJlKXsgLy9mYWlsdXJlIC0gY3VzdG9tIGVycm9yXHJcblx0XHRcdGNsYXNzIE5vcm1QYXRoRXJyb3IgZXh0ZW5kcyBFcnJvciBpbXBsZW1lbnRzIElGaWxlUGF0aEVycm9yIHtcclxuXHRcdFx0XHRuYW1lOiBzdHJpbmcgPSAnTm9ybVBhdGhFcnJvcic7XHJcblx0XHRcdFx0aXRlbTogSUZpbGVQYXRoID0gaXRlbTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBlcnJvciA9IG5ldyBOb3JtUGF0aEVycm9yKGAke2UubWVzc2FnZSB8fCBlfWApO1xyXG5cdFx0XHRpZiAoZmFpbHVyZSA9PT0gMikgdGhyb3cgZXJyb3I7IC8vdGhyb3dcclxuXHRcdFx0ZWxzZSBjb25zb2xlLndhcm4oZXJyb3IgKyAnJywge2l0ZW19KTsgLy93YXJuXHJcblx0XHR9XHJcblx0XHRyZXR1cm4gaXRlbTsgLy88PCByZXN1bHQgLSBJRmlsZVBhdGggKGZhaWxlZClcclxuXHR9XHJcbn07IiwiZXhwb3J0ICogZnJvbSAnLi9fbWltZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX3BhdGgnOyIsImV4cG9ydCAqIGZyb20gJy4vM3JkLXBhcnR5JztcclxuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL0VsYXBzZWRUaW1lJztcclxuZXhwb3J0ICogZnJvbSAnLi9UZXJtJztcclxuZXhwb3J0ICogZnJvbSAnLi9BbmltYXRlJztcclxuZXhwb3J0ICogZnJvbSAnLi9FdmVudEVtaXR0ZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL0V4Y2VwdGlvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vVGFza3MnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ZpbGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0FscGhhTnVtJzsiLCJleHBvcnQgKiBmcm9tICcuL19jb21tb24nO1xyXG4iLCIvKipcclxuICogU3BsaXQgYGFycmF5YCBpbnRvIGJhdGNoZXMgYFRbXVtdYCBvZiBzcGVjaWZpZWQgc2l6ZS5cclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9iYXRjaFZhbHVlczxudW1iZXI+KFsxLDIsMyw0LDUsNiw3LDhdLCAzKSA9PiBbWzEsMiwzXSxbNCw1LDZdLFs3LDhdXVxyXG4gKiBcclxuICogQHBhcmFtIGFycmF5ICBCYXRjaCB2YWx1ZXNcclxuICogQHBhcmFtIGJhdGNoU2l6ZSAgQmF0Y2ggc2l6ZSBgeCA+IDBgLlxyXG4gKiBAcmV0dXJucyBgPFQgPSBhbnk+W11bXWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYmF0Y2hWYWx1ZXMgPSA8VCA9IGFueT4oYXJyYXk6IFRbXSwgYmF0Y2hTaXplOiBudW1iZXIpOiBUW11bXSA9PiB7XHJcblx0aWYgKCEoTnVtYmVyLmlzSW50ZWdlcihiYXRjaFNpemUpICYmIGJhdGNoU2l6ZSA+IDApKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYmF0Y2ggc2l6ZS4nKTtcclxuXHRjb25zdCBpdGVtcyA9IGFycmF5LnNsaWNlKDApLCBfYnVmZmVyOiBUW11bXSA9IFtdO1xyXG5cdHdoaWxlIChpdGVtcy5sZW5ndGgpIF9idWZmZXIucHVzaChpdGVtcy5zcGxpY2UoMCwgYmF0Y2hTaXplKSk7XHJcblx0cmV0dXJuIF9idWZmZXI7XHJcbn07IiwiXHJcbi8qKlxyXG4gKiBDbG9uZSB2YWx1ZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIGNvcHlcclxuICovXHJcbmV4cG9ydCBjb25zdCBfY2xvbmUgPSAodmFsdWU6IGFueSk6IGFueSA9PiBjbG9uZSh2YWx1ZSwgbmV3IE1hcCgpKTtcclxuXHJcbi8qKlxyXG4gKiBOYW5vIGNsb25lIChodHRwczovL2dpdGh1Yi5jb20vS2VsaW4yMDI1L25hbm9jbG9uZS5naXQpXHJcbiAqIFxyXG4gKiBAcGFyYW0gc3JjXHJcbiAqIEBwYXJhbSBzZWVuXHJcbiAqL1xyXG5mdW5jdGlvbiBjbG9uZShzcmM6IGFueSwgc2VlbjogTWFwPGFueSwgYW55Pik6IGFueSB7XHJcblx0XHJcblx0Ly8gSW1tdXRhYmxlIHRoaW5ncyAtIG51bGwsIHVuZGVmaW5lZCwgZnVuY3Rpb25zLCBzeW1ib2xzLCBldGMuXHJcblx0aWYgKCFzcmMgfHwgdHlwZW9mIHNyYyAhPT0gJ29iamVjdCcpIHJldHVybiBzcmM7XHJcblxyXG5cdC8vIFRoaW5ncyB3ZSd2ZSBzZWVuIGFscmVhZHkgKGNpcmN1bGFyIHJlZnMpXHJcblx0aWYgKHNlZW4uaGFzKHNyYykpIHJldHVybiBzZWVuLmdldChzcmMpO1xyXG5cclxuXHQvLyBCYXNpYyBwYXR0ZXJuIGZvciBjbG9uaW5nIHNvbWV0aGluZyBiZWxvdyBoZXJlIGlzOlxyXG5cdC8vIDEuIENyZWF0ZSBjb3B5XHJcblx0Ly8gMi4gQWRkIGl0IHRvIGBzZWVuYCBpbW1lZGlhdGVseSwgc28gd2UgcmVjb2duaXplIGl0IGlmIHdlIHNlZSBpdCBpblxyXG5cdC8vICAgIHN1Ym9yZGluYXRlIG1lbWJlcnNcclxuXHQvLyAzLiBjbG9uZSBzdWJvcmRpbmF0ZSBtZW1iZXJzXHJcblx0bGV0IGNvcHk6IGFueTtcclxuXHRcclxuXHQvLyBET00gTm9kZVxyXG5cdGlmIChzcmMubm9kZVR5cGUgJiYgJ2Nsb25lTm9kZScgaW4gc3JjKSB7XHJcblx0XHRjb3B5ID0gc3JjLmNsb25lTm9kZSh0cnVlKTtcclxuXHRcdHNlZW4uc2V0KHNyYywgY29weSk7XHJcblx0fVxyXG5cdFxyXG5cdC8vIERhdGVcclxuXHRlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBEYXRlKSB7XHJcblx0XHRjb3B5ID0gbmV3IERhdGUoc3JjLmdldFRpbWUoKSk7XHJcblx0XHRzZWVuLnNldChzcmMsIGNvcHkpO1xyXG5cdH1cclxuXHRcclxuXHQvLyBSZWdFeHBcclxuXHRlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBSZWdFeHApIHtcclxuXHRcdGNvcHkgPSBuZXcgUmVnRXhwKHNyYyk7XHJcblx0XHRzZWVuLnNldChzcmMsIGNvcHkpO1xyXG5cdH1cclxuXHRcclxuXHQvLyBBcnJheVxyXG5cdGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xyXG5cdFx0Y29weSA9IG5ldyBBcnJheShzcmMubGVuZ3RoKTtcclxuXHRcdHNlZW4uc2V0KHNyYywgY29weSk7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykgY29weVtpXSA9IGNsb25lKHNyY1tpXSwgc2Vlbik7XHJcblx0fVxyXG5cdFxyXG5cdC8vIE1hcFxyXG5cdGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIE1hcCkge1xyXG5cdFx0Y29weSA9IG5ldyBNYXAoKTtcclxuXHRcdHNlZW4uc2V0KHNyYywgY29weSk7XHJcblx0XHRmb3IgKGNvbnN0IFtrLCB2XSBvZiBzcmMuZW50cmllcygpKSBjb3B5LnNldChrLCBjbG9uZSh2LCBzZWVuKSk7XHJcblx0fVxyXG5cdFxyXG5cdC8vIFNldFxyXG5cdGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIFNldCkge1xyXG5cdFx0Y29weSA9IG5ldyBTZXQoKTtcclxuXHRcdHNlZW4uc2V0KHNyYywgY29weSk7XHJcblx0XHRmb3IgKGNvbnN0IHYgb2Ygc3JjKSBjb3B5LmFkZChjbG9uZSh2LCBuZXcgTWFwKCkpKTtcclxuXHR9XHJcblx0XHJcblx0Ly8gT2JqZWN0XHJcblx0ZWxzZSBpZiAoc3JjIGluc3RhbmNlb2YgT2JqZWN0KSB7XHJcblx0XHRjb3B5ID0ge307XHJcblx0XHRzZWVuLnNldChzcmMsIGNvcHkpO1xyXG5cdFx0Zm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoc3JjKSkgY29weVtrXSA9IGNsb25lKHYsIHNlZW4pO1xyXG5cdH1cclxuXHRcclxuXHQvLyBVbnJlY29nbml6ZWQgdGhpbmcuICBJdCdzIGJldHRlciB0byB0aHJvdyBoZXJlIHRoYW4gdG8gcmV0dXJuIGBzcmNgLCBhc1xyXG5cdC8vIHdlIGRvbid0IGtub3cgd2hldGhlciBzcmMgbmVlZHMgdG8gYmUgZGVlcC1jb3BpZWQgaGVyZS5cclxuXHRlbHNlIHtcclxuXHRcdGNvbnN0IGVycm9yID0gYFVuYWJsZSB0byBjbG9uZSAke3NyY31gO1xyXG5cdFx0Y29uc29sZS53YXJuKCdbX2Nsb25lXSBFcnJvcjogJyArIGVycm9yLCBzcmMpO1xyXG5cdFx0dGhyb3cgRXJyb3IoZXJyb3IpO1xyXG5cdH1cclxuXHJcblx0Ly9yZXN1bHRcclxuXHRyZXR1cm4gY29weVxyXG59IiwiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnLi4vM3JkLXBhcnR5JztcclxuXHJcbi8qKlxyXG4gKiBDbG9uZSB1dGlsc1xyXG4gKi9cclxuY29uc3QgX2luc3RhbmNlb2YgPSAobzogYW55LCB0eXBlOiBhbnkpOiBib29sZWFuID0+ICdvYmplY3QnID09PSB0eXBlb2YgdHlwZSAmJiB0eXBlICYmIG8gaW5zdGFuY2VvZiB0eXBlO1xyXG5jb25zdCBfdG9TdHJpbmcgPSAobzogYW55KTogc3RyaW5nID0+IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcclxuY29uc3QgX2lzRGF0ZSA9IChvOiBhbnkpOiBib29sZWFuID0+ICdvYmplY3QnID09PSB0eXBlb2YgbyAmJiBfdG9TdHJpbmcobykgPT09ICdbb2JqZWN0IERhdGVdJztcclxuY29uc3QgX2lzQXJyYXkgPSAobzogYW55KTogYm9vbGVhbiA9PiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX3RvU3RyaW5nKG8pID09PSAnW29iamVjdCBBcnJheV0nO1xyXG5jb25zdCBfaXNSZWdFeHAgPSAobzogYW55KTogYm9vbGVhbiA9PiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX3RvU3RyaW5nKG8pID09PSAnW29iamVjdCBSZWdFeHBdJztcclxuY29uc3QgX2dldFJlZ0V4cEZsYWdzID0gKHJlZ2V4OiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGxldCBmbGFncyA9ICcnO1xyXG5cdGlmIChyZWdleD8uZ2xvYmFsKSBmbGFncyArPSAnZyc7XHJcblx0aWYgKHJlZ2V4Py5pZ25vcmVDYXNlKSBmbGFncyArPSAnaSc7XHJcblx0aWYgKHJlZ2V4Py5tdWx0aWxpbmUpIGZsYWdzICs9ICdtJztcclxuXHRyZXR1cm4gZmxhZ3M7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgcHJvdG90eXBlXHJcbiAqIFxyXG4gKiBAcGFyYW0gcGFyZW50XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY2xvbmVQcm90b3R5cGUgPSAocGFyZW50OiBhbnkpOiBhbnkgPT4ge1xyXG5cdGlmIChwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB1bmRlZmluZWQpIHJldHVybiBwYXJlbnQ7XHJcblx0aWYgKCdvYmplY3QnICE9PSB0eXBlb2YgcGFyZW50KSBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocGFyZW50KTtcclxuXHRjb25zdCBmbjogYW55ID0gZnVuY3Rpb24oKXt9O1xyXG5cdGZuLnByb3RvdHlwZSA9IHBhcmVudDtcclxuXHRyZXR1cm4gbmV3IGZuKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogRGVlcCBjbG9uZSBvcHRpb25zIGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJRGVlcENsb25lT3B0aW9ucyB7XHJcblx0XHJcblx0LyoqIFtkZWZhdWx0OiBgdHJ1ZWBdIEVuYWJsZSBjaXJjdWxhciByZWZlcmVuY2VzIChjYW4gYWxzbyBiZSBvYmplY3Qgd2l0aCBvcHRpb25zIHtjaXJjdWxhciwgZGVwdGgsIHByb3RvdHlwZSwgbm9uX2VudW1lcmFibGV9KSAqL1xyXG5cdGNpcmN1bGFyPzogYm9vbGVhbjtcclxuXHRcclxuXHQvKiogW2RlZmF1bHQ6IGBJbmZpbml0eWBdIENsb25lIGRlcHRoIGxpbWl0IChsZWF2ZSBkZWZhdWx0IHRvIHByZXZlbnQgcmVmZXJlbmNlcyB0byBwYXJlbnQpLiAqL1xyXG5cdGRlcHRoPzogbnVtYmVyO1xyXG5cdFxyXG5cdC8qKiBbZGVmYXVsdDogYHVuZGVmaW5lZGBdIFVzZSBwcm90b3R5cGUuICovXHJcblx0cHJvdG90eXBlPzogYW55O1xyXG5cdFxyXG5cdC8qKiBbZGVmYXVsdDogYGZhbHNlYF0gRW5hYmxlIGNsb25pbmcgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyAoaWdub3JlcyBwcm90b3R5cGUgY2hhaW4gbm9uLWVudW1lcmFibGUgcHJvcHMpICovXHJcblx0bm9uX2VudW1lcmFibGU/OiBib29sZWFuO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsb25lcyAoY29waWVzKSBhbiBPYmplY3QgdXNpbmcgZGVlcCBjb3B5aW5nLlxyXG4gKlxyXG4gKiAtIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBkZWZhdWx0LCBidXQgaWYgeW91IGFyZSBjZXJ0YWluXHJcbiAqIHRoZXJlIGFyZSBubyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHlvdXIgb2JqZWN0LCB5b3UgY2FuIHNhdmUgc29tZSBDUFUgdGltZVxyXG4gKiBieSBjYWxsaW5nIHdpdGggb3B0aW9uIGBjaXJjdWxhcmAgPSBgZmFsc2VgLlxyXG4gKlxyXG4gKiAtIENBVVRJT046IGlmIG9wdGlvbiBgY2lyY3VsYXJgIGlzIGBmYWxzZWAgYW5kIGB2YWx1ZWAgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlcyxcclxuICogeW91ciBwcm9ncmFtIG1heSBlbnRlciBhbiBpbmZpbml0ZSBsb29wIGFuZCBjcmFzaC5cclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgQ2xvbmUgc3ViamVjdCBgPFQ+YFxyXG4gKiBAcGFyYW0gb3B0aW9ucyAgQ2xvbmUgb3B0aW9uc1xyXG4gKiBAcmV0dXJucyBgPFQ+YCBjbG9uZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9jbG9uZURlZXA8VCA9IGFueT4odmFsdWU6IFQsIG9wdGlvbnM/OiBJRGVlcENsb25lT3B0aW9ucyk6IFQge1xyXG5cdGNvbnN0IHtcclxuXHRcdGNpcmN1bGFyOiBfY2lyY3VsYXIgPSB0cnVlLFxyXG5cdFx0ZGVwdGg6IF9kZXB0aCA9IEluZmluaXR5LFxyXG5cdFx0cHJvdG90eXBlOiBfcHJvdG90eXBlID0gdW5kZWZpbmVkLFxyXG5cdFx0bm9uX2VudW1lcmFibGU6IF9ub25fZW51bWVyYWJsZSA9IGZhbHNlLFxyXG5cdH0gPSBPYmplY3Qob3B0aW9ucyk7XHJcblx0Y29uc3QgY2lyY3VsYXIgPSAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIF9jaXJjdWxhciA/IHRydWUgOiBCb29sZWFuKF9jaXJjdWxhcik7XHJcblx0Y29uc3QgZGVwdGggPSAhaXNOYU4oX2RlcHRoKSAmJiBOdW1iZXIuaXNJbnRlZ2VyKF9kZXB0aCkgJiYgX2RlcHRoID4gMCA/IF9kZXB0aCA6IEluZmluaXR5O1xyXG5cdGNvbnN0IHByb3RvdHlwZSA9IF9wcm90b3R5cGU7XHJcblx0Y29uc3Qgbm9uX2VudW1lcmFibGUgPSBCb29sZWFuKF9ub25fZW51bWVyYWJsZSk7XHJcblx0Y29uc3QgYWxsUGFyZW50czogYW55W10gPSBbXTtcclxuXHRjb25zdCBhbGxDaGlsZHJlbjogYW55W10gPSBbXTtcclxuXHRjb25zdCB1c2VCdWZmZXIgPSAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIEJ1ZmZlcjtcclxuXHJcblx0Ly9jbG9uZVxyXG5cdGNvbnN0IF9jbG9uZSA9IChwYXJlbnQ6IGFueSwgZGVwdGg6IG51bWJlcik6IGFueSA9PiB7XHJcblx0XHRpZiAoZGVwdGggPT09IDAgfHwgISgnb2JqZWN0JyA9PT0gdHlwZW9mIHBhcmVudCAmJiBwYXJlbnQpKSByZXR1cm4gcGFyZW50O1xyXG5cdFx0bGV0IGNoaWxkOiBhbnksIHByb3RvOiBhbnk7XHJcblx0XHRpZiAoX2luc3RhbmNlb2YocGFyZW50LCBNYXApKSBjaGlsZCA9IG5ldyBNYXAoKTtcclxuXHRcdGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgU2V0KSkgY2hpbGQgPSBuZXcgU2V0KCk7XHJcblx0XHRlbHNlIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIFByb21pc2UpKXtcclxuXHRcdFx0Y2hpbGQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0cGFyZW50LnRoZW4oKHJlczogYW55KSA9PiByZXNvbHZlKF9jbG9uZShyZXMsIGRlcHRoIC0gMSkpKVxyXG5cdFx0XHRcdC5jYXRjaCgoZXJyOiBhbnkpPT4gcmVqZWN0KF9jbG9uZShlcnIsIGRlcHRoIC0gMSkpKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmIChfaXNBcnJheShwYXJlbnQpKSBjaGlsZCA9IFtdO1xyXG5cdFx0ZWxzZSBpZiAoX2lzUmVnRXhwKHBhcmVudCkpe1xyXG5cdFx0XHRjaGlsZCA9IG5ldyBSZWdFeHAocGFyZW50LnNvdXJjZSwgX2dldFJlZ0V4cEZsYWdzKHBhcmVudCkpO1xyXG5cdFx0XHRpZiAocGFyZW50Lmxhc3RJbmRleCkgY2hpbGQubGFzdEluZGV4ID0gcGFyZW50Lmxhc3RJbmRleDtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKF9pc0RhdGUocGFyZW50KSkgY2hpbGQgPSBuZXcgRGF0ZShwYXJlbnQuZ2V0VGltZSgpKTtcclxuXHRcdGVsc2UgaWYgKHVzZUJ1ZmZlciAmJiBCdWZmZXIuaXNCdWZmZXIocGFyZW50KSl7XHJcblx0XHRcdGlmIChCdWZmZXIuZnJvbSkgY2hpbGQgPSBCdWZmZXIuZnJvbShwYXJlbnQpOyAvL05vZGUuanMgPj0gNS4xMC4wXHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGNoaWxkID0gbmV3IEJ1ZmZlcihwYXJlbnQubGVuZ3RoKTsgLy9PbGRlciBOb2RlLmpzIHZlcnNpb25zXHJcblx0XHRcdFx0cGFyZW50LmNvcHkoY2hpbGQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBjaGlsZDtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgRXJyb3IpKSBjaGlsZCA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRpZiAoJ29iamVjdCcgIT09IHR5cGVvZiBwcm90b3R5cGUpe1xyXG5cdFx0XHRcdHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBhcmVudCk7XHJcblx0XHRcdFx0Y2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRjaGlsZCA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcclxuXHRcdFx0XHRwcm90byA9IHByb3RvdHlwZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKGNpcmN1bGFyKXtcclxuXHRcdFx0Y29uc3QgaW5kZXggPSBhbGxQYXJlbnRzLmluZGV4T2YocGFyZW50KTtcclxuXHRcdFx0aWYgKGluZGV4ICE9PSAtMSkgcmV0dXJuIGFsbENoaWxkcmVuW2luZGV4XTtcclxuXHRcdFx0YWxsUGFyZW50cy5wdXNoKHBhcmVudCk7XHJcblx0XHRcdGFsbENoaWxkcmVuLnB1c2goY2hpbGQpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgTWFwKSl7XHJcblx0XHRcdGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBwYXJlbnQpe1xyXG5cdFx0XHRcdGNvbnN0IGtleUNoaWxkID0gX2Nsb25lKGtleSwgZGVwdGggLSAxKTtcclxuXHRcdFx0XHRjb25zdCB2YWxDaGlsZCA9IF9jbG9uZSh2YWwsIGRlcHRoIC0gMSk7XHJcblx0XHRcdFx0Y2hpbGQuc2V0KGtleUNoaWxkLCB2YWxDaGlsZCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIFNldCkpe1xyXG5cdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiBwYXJlbnQpe1xyXG5cdFx0XHRcdGNvbnN0IHZhbENoaWxkID0gX2Nsb25lKHZhbCwgZGVwdGggLSAxKTtcclxuXHRcdFx0XHRjaGlsZC5hZGQodmFsQ2hpbGQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRmb3IgKGxldCBrZXkgaW4gcGFyZW50KXtcclxuXHRcdFx0Y29uc3QgYXR0cnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwga2V5KTtcclxuXHRcdFx0aWYgKGF0dHJzKSBjaGlsZFtrZXldID0gX2Nsb25lKHBhcmVudFtrZXldLCBkZXB0aCAtIDEpO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbnN0IG9ialByb3BlcnR5ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwYXJlbnQsIGtleSk7XHJcblx0XHRcdFx0aWYgKG9ialByb3BlcnR5Py5zZXQgPT09IHVuZGVmaW5lZCkgY29udGludWU7XHJcblx0XHRcdFx0Y2hpbGRba2V5XSA9IF9jbG9uZShwYXJlbnRba2V5XSwgZGVwdGggLSAxKTtcclxuXHRcdFx0XHRpZiAob2JqUHJvcGVydHkpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGlsZCwga2V5LCBvYmpQcm9wZXJ0eSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Y2F0Y2ggKGUpe1xyXG5cdFx0XHRcdGlmIChlIGluc3RhbmNlb2YgVHlwZUVycm9yKSBjb250aW51ZTsgLy9jaGlsZFtrZXldIG9ubHkgaGFzIGdldHRlciAoc3RyaWN0IG1vZGUpXHJcblx0XHRcdFx0ZWxzZSBpZiAoZSBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yKSBjb250aW51ZTsgLy9zYW1lIGFzIGFib3ZlIChub24gc3RyaWN0IG1vZGUpXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXtcclxuXHRcdFx0Y29uc3Qgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocGFyZW50KTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0Y29uc3Qgc3ltYm9sID0gc3ltYm9sc1tpXTsgLy9wcmltaXRpdmVcclxuXHRcdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwYXJlbnQsIHN5bWJvbCk7XHJcblx0XHRcdFx0aWYgKGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3IuZW51bWVyYWJsZSAmJiAhbm9uX2VudW1lcmFibGUpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdGNoaWxkW3N5bWJvbF0gPSBfY2xvbmUocGFyZW50W3N5bWJvbF0sIGRlcHRoIC0gMSk7XHJcblx0XHRcdFx0aWYgKGRlc2NyaXB0b3IpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGlsZCwgc3ltYm9sLCBkZXNjcmlwdG9yKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKG5vbl9lbnVtZXJhYmxlKXtcclxuXHRcdFx0Y29uc3QgYWxsUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHBhcmVudCk7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYWxsUHJvcGVydHlOYW1lcy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IGFsbFByb3BlcnR5TmFtZXNbaV07XHJcblx0XHRcdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBwcm9wZXJ0eU5hbWUpO1xyXG5cdFx0XHRcdGlmIChkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSkgY29udGludWU7XHJcblx0XHRcdFx0Y2hpbGRbcHJvcGVydHlOYW1lXSA9IF9jbG9uZShwYXJlbnRbcHJvcGVydHlOYW1lXSwgZGVwdGggLSAxKTtcclxuXHRcdFx0XHRpZiAoZGVzY3JpcHRvcikgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gY2hpbGQ7XHJcblx0fTtcclxuXHJcblx0Ly9yZXN1bHRcclxuXHRyZXR1cm4gX2Nsb25lKHZhbHVlLCBkZXB0aCkgYXMgVDtcclxufTsiLCIvKipcclxuICogQ29tcGFyZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBkZWVwIG1hdGNoaW5nXHJcbiAqIC0gY29tcGFyZVRhcmdldFx0PSBgYXJnc1swXWBcclxuICogLSBjb21wYXJlV2l0aFx0PSBgYXJnc1sxKl1gXHJcbiAqIFxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmAgaXMgbWF0Y2hcclxuICovXHJcbmV4cG9ydCBjb25zdCBfY29tcGFyZSA9ICguLi5hcmdzOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xyXG5cdGxldCBsZWZ0Q2hhaW46IGFueVtdID0gW107XHJcblx0bGV0IHJpZ2h0Q2hhaW46IGFueVtdID0gW107XHJcblx0XHJcblx0Ly9jaGVjayBhcmd1bWVudHNcclxuXHRpZiAoYXJncy5sZW5ndGggPCAxKXtcclxuXHRcdGNvbnNvbGUud2FybihgJHthcmdzLmxlbmd0aCA/ICdMZXNzIHRoYW4gdHdvJyA6ICdObyd9IFxcYF9jb21wYXJlXFxgIGFyZ3VtZW50cyBwcm92aWRlZC5gKTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Ly9jb21wYXJlIHZhbHVlc1xyXG5cdGZvciAobGV0IGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0bGVmdENoYWluID0gW107XHJcblx0XHRyaWdodENoYWluID0gW107XHJcblx0XHRpZiAoIWRlZXBNYXRjaChhcmdzWzBdLCBhcmdzW2ldKSkgcmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0Ly9kZWVwIGNvbXBhcmUgdHdvIGl0ZW1zXHJcblx0ZnVuY3Rpb24gZGVlcE1hdGNoKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiB7XHJcblx0XHRcclxuXHRcdC8vTm90ZSB0aGF0IE5hTiA9PT0gTmFOIHJldHVybnMgZmFsc2UgYW5kIGlzTmFOKHVuZGVmaW5lZCkgcmV0dXJucyB0cnVlXHJcblx0XHRpZiAoJ251bWJlcicgPT09IHR5cGVvZiBhICYmICdudW1iZXInID09PSB0eXBlb2YgYiAmJiBpc05hTihhKSAmJiBpc05hTihiKSkgcmV0dXJuIHRydWU7XHJcblxyXG5cdFx0Ly9DaGVjayBpZiBib3RoIGFyZ3VtZW50cyBsaW5rIHRvIHRoZSBzYW1lIG9iamVjdC5cclxuXHRcdGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHQvL0NoZWNrIGZ1bmN0aW9ucyBpbiBjYXNlIHdoZW4gZnVuY3Rpb25zIGFyZSBjcmVhdGVkIGluIGNvbnN0cnVjdG9yIChpLmUuIGRhdGVzLCBidWlsdC1pbnMpXHJcblx0XHRpZiAoXHJcblx0XHRcdCgnZnVuY3Rpb24nID09PSB0eXBlb2YgYSAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgYilcclxuXHRcdFx0fHwgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKVxyXG5cdFx0XHR8fCAoYSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBiIGluc3RhbmNlb2YgUmVnRXhwKVxyXG5cdFx0XHR8fCAoYSBpbnN0YW5jZW9mIFN0cmluZyAmJiBiIGluc3RhbmNlb2YgU3RyaW5nKVxyXG5cdFx0XHR8fCAoYSBpbnN0YW5jZW9mIE51bWJlciAmJiBiIGluc3RhbmNlb2YgTnVtYmVyKVxyXG5cdFx0KSByZXR1cm4gYS50b1N0cmluZygpID09PSBiLnRvU3RyaW5nKCk7XHJcblxyXG5cdFx0Ly9DaGVjayBwcm90b3R5cGVzXHJcblx0XHRpZiAoIShhIGluc3RhbmNlb2YgT2JqZWN0ICYmIGIgaW5zdGFuY2VvZiBPYmplY3QpKSByZXR1cm4gZmFsc2U7XHJcblx0XHRpZiAoYS5pc1Byb3RvdHlwZU9mKGIpIHx8IGIuaXNQcm90b3R5cGVPZihhKSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0aWYgKGEuY29uc3RydWN0b3IgIT09IGIuY29uc3RydWN0b3IpIHJldHVybiBmYWxzZTtcclxuXHRcdGlmIChhLnByb3RvdHlwZSAhPT0gYi5wcm90b3R5cGUpIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHQvL0NoZWNrIGZvciBpbmZpbml0aXZlIGxpbmtpbmcgbG9vcHNcclxuXHRcdGlmIChsZWZ0Q2hhaW4uaW5kZXhPZihhKSA+IC0xIHx8IHJpZ2h0Q2hhaW4uaW5kZXhPZihiKSA+IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Ly9DaGVjayBiIHByb3BzIGluIGFcclxuXHRcdGZvciAobGV0IGtleSBpbiBiKXtcclxuXHRcdFx0aWYgKGIuaGFzT3duUHJvcGVydHkoa2V5KSA9PT0gYS5oYXNPd25Qcm9wZXJ0eShrZXkpKXtcclxuXHRcdFx0XHRpZiAodHlwZW9mIGJba2V5XSAhPT0gdHlwZW9mIGFba2V5XSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9DaGVjayBhIHByb3BzIGluIGJcclxuXHRcdGZvciAobGV0IGtleSBpbiBhKXtcclxuXHRcdFx0aWYgKGIuaGFzT3duUHJvcGVydHkoa2V5KSAhPT0gYS5oYXNPd25Qcm9wZXJ0eShrZXkpKSByZXR1cm4gZmFsc2U7XHJcblx0XHRcdGVsc2UgaWYgKHR5cGVvZiBiW2tleV0gIT09IHR5cGVvZiBhW2tleV0pIHJldHVybiBmYWxzZTtcclxuXHRcdFx0bGV0IHZhbF9hID0gYVtrZXldO1xyXG5cdFx0XHRsZXQgdmFsX2IgPSBiW2tleV07XHJcblx0XHRcdHN3aXRjaCAodHlwZW9mIHZhbF9hKXtcclxuXHRcdFx0XHRjYXNlICdvYmplY3QnOlxyXG5cdFx0XHRcdGNhc2UgJ2Z1bmN0aW9uJzpcclxuXHRcdFx0XHRcdGxlZnRDaGFpbi5wdXNoKGEpO1xyXG5cdFx0XHRcdFx0cmlnaHRDaGFpbi5wdXNoKGIpO1xyXG5cdFx0XHRcdFx0aWYgKCFkZWVwTWF0Y2godmFsX2EsIHZhbF9iKSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0bGVmdENoYWluLnBvcCgpO1xyXG5cdFx0XHRcdFx0cmlnaHRDaGFpbi5wb3AoKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0aWYgKHZhbF9hICE9PSB2YWxfYikgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvL21hdGNoZWRcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufSIsIi8qKlxyXG4gKiBDb21wYXJlIG11bHRpcGxlIHZhbHVlcyB3aXRoIHNoYWxsb3cgbWF0Y2hpbmdcclxuICogLSBjb21wYXJlVGFyZ2V0XHQ9IGBhcmdzWzBdYFxyXG4gKiAtIGNvbXBhcmVXaXRoXHQ9IGBhcmdzWzEqXWBcclxuICogXHJcbiAqIEBwYXJhbSBhICBDb21wYXJlIHZhbHVlIDFcclxuICogQHJldHVybnMgYGJvb2xlYW5gIGlzIG1hdGNoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2NvbXBhcmVTaGFsbG93ID0gKC4uLmFyZ3M6IGFueVtdKTogYm9vbGVhbiA9PiB7XHJcblxyXG5cdC8vY2hlY2sgdmFsdWVzXHJcblx0aWYgKGFyZ3MubGVuZ3RoIDwgMSl7XHJcblx0XHRjb25zb2xlLndhcm4oYCR7YXJncy5sZW5ndGggPyAnTGVzcyB0aGFuIHR3bycgOiAnTm8nfSBcXGBfY29tcGFyZVNoYWxsb3dcXGAgYXJndW1lbnRzIHByb3ZpZGVkLmApO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHQvL2NvbXBhcmUgdmFsdWVzXHJcblx0Zm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRpZiAoIXNoYWxsb3dNYXRjaChhcmdzWzBdLCBhcmdzW2ldKSkgcmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHRyZXR1cm4gdHJ1ZTtcclxuXHRcclxuXHQvL3NoYWxsb3cgY29tcGFyZSB0d28gaXRlbXNcclxuXHRmdW5jdGlvbiBzaGFsbG93TWF0Y2goYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcclxuXHRcdGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcclxuXHRcdGlmICghKGEgaW5zdGFuY2VvZiBPYmplY3QpIHx8ICEoYiBpbnN0YW5jZW9mIE9iamVjdCkpIHJldHVybiBmYWxzZTtcclxuXHRcdGlmIChhLmNvbnN0cnVjdG9yICE9PSBiLmNvbnN0cnVjdG9yKSByZXR1cm4gZmFsc2U7XHJcblx0XHRmb3IgKGxldCBrIGluIGEpe1xyXG5cdFx0XHRpZiAoIWEuaGFzT3duUHJvcGVydHkoaykpIGNvbnRpbnVlO1xyXG5cdFx0XHRpZiAoIWIuaGFzT3duUHJvcGVydHkoaykpIHJldHVybiBmYWxzZTtcclxuXHRcdFx0aWYgKGFba10gPT09IGJba10pIGNvbnRpbnVlO1xyXG5cdFx0XHRpZiAoJ29iamVjdCcgIT09IHR5cGVvZihhW2tdKSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRpZiAoIXNoYWxsb3dNYXRjaChhW2tdLCBiW2tdKSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG59OyIsIi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gc2ltcGxlIGRhdGUgaGVscGVycyAtIGNvbnNpZGVyIHVzZWZ1bCBsaWJyYXJpZXM6IGh0dHBzOi8vbW9tZW50anMuY29tLyBcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuLyoqXHJcbiAqIFZhbGlkYXRlIGBEYXRlYCBpbnN0YW5jZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9pc0RhdGUgPSAodmFsdWU6IGFueSk6IGJvb2xlYW4gPT4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZS5nZXRUaW1lKCkpO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGBEYXRlYCB2YWx1ZSB+IGFjY2VwdHMgdmFsaWQgYERhdGVgIGluc3RhbmNlLCB0aW1lc3RhbXAgaW50ZWdlciwgZGF0ZXRpbWUgc3RyaW5nIChzZWUgYF9zdHJpY3RgIHBhcmFtIGRvY3MpXHJcbiAqIC0gc3VwcG9ydHMgdmFsaWQgYERhdGVgIGluc3RhbmNlLCBgaW50ZWdlcnxzdHJpbmdgIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgYW5kIG90aGVyIGBzdHJpbmdgIGRhdGUgdGV4dHNcclxuICogLSB3aGVuIHN0cmljdCBwYXJzaW5nLCB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgZGF0ZSB2YWx1ZSB3aXRoIG1vcmUgdGhhbiBgMWAgdGltZXN0YW1wIG1pbGxpc2Vjb25kc1xyXG4gKiAtIHdoZW4gc3RyaWN0IHBhcnNpbmcgaXMgZGlzYWJsZWQsIHJlc3VsdCBmb3IgYHVuZGVmaW5lZGAgPSBgbmV3IERhdGUoKWAgYW5kIGBudWxsfGZhbHNlfHRydWV8MGAgPSBgbmV3IERhdGUobnVsbHxmYWxzZXx0cnVlfDApYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZVxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgcGFyc2luZyAoZGVmYXVsdDogYHRydWVgKVxyXG4gKiBAcmV0dXJucyBgRGF0ZWAgaW5zdGFuY2UgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGF0ZSA9ICh2YWx1ZTogYW55LCBfc3RyaWN0OiBib29sZWFuID0gdHJ1ZSk6IERhdGV8dW5kZWZpbmVkID0+IHtcclxuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIF9zdHJpY3QgPyB1bmRlZmluZWQgOiBuZXcgRGF0ZSgpO1xyXG5cdGNvbnN0IF9wYXJzZSA9ICh2YWw6IGFueSk6IERhdGV8dW5kZWZpbmVkID0+ICFpc05hTih2YWwpICYmICh2YWwgPiAxIHx8ICFfc3RyaWN0KSA/IG5ldyBEYXRlKHZhbCkgOiB1bmRlZmluZWQ7XHJcblx0aWYgKFtudWxsLCBmYWxzZSwgdHJ1ZSwgMF0uaW5jbHVkZXModmFsdWUpKSByZXR1cm4gX3BhcnNlKHZhbHVlKTtcclxuXHRpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gX3BhcnNlKHZhbHVlLmdldFRpbWUoKSk7XHJcblx0aWYgKCdudW1iZXInID09PSB0eXBlb2YgdmFsdWUpIHJldHVybiBfcGFyc2UobmV3IERhdGUodmFsdWUpLmdldFRpbWUoKSk7XHJcblx0dHJ5IHtcclxuXHRcdGxldCB0ZXh0OiBzdHJpbmcgPSBTdHJpbmcodmFsdWUpLnRyaW0oKTtcclxuXHRcdGlmICghdGV4dCB8fCAvXFxbb2JqZWN0IFxcdytcXF0vLnRlc3QodGV4dCkpIHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHRpZiAoL15bKy1dP1xcZCskLy50ZXN0KHRleHQpKSByZXR1cm4gX3BhcnNlKHBhcnNlSW50KHRleHQpKTtcclxuXHRcdHJldHVybiBfcGFyc2UoRGF0ZS5wYXJzZSh0ZXh0KSk7XHJcblx0fVxyXG5cdGNhdGNoIChlKXtcclxuXHRcdGNvbnNvbGUud2FybignW19kYXRlXSBleGNlcHRpb246JywgZSk7XHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZWQgYERhdGVgIHRpbWVzdGFtcCB2YWx1ZSAoaS5lLiBgZGF0ZS5nZXRUaW1lKClgKVxyXG4gKiAtIHNlZSBgX2RhdGUoKWAgcGFyc2luZyBkb2NzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBkYXRlIHZhbHVlXHJcbiAqIEBwYXJhbSBtaW4gLSBzZXQgYG1pbmAgdGltZXN0YW1wIGxpbWl0IH4gZW5hYmxlZCB3aGVuIGBtaW5gIGlzIGEgdmFsaWQgdGltZXN0YW1wIGludGVnZXJcclxuICogQHBhcmFtIG1heCAtIHNldCBgbWF4YCB0aW1lc3RhbXAgbGltaXQgfiBlbmFibGVkIHdoZW4gYG1heGAgaXMgYSB2YWxpZCB0aW1lc3RhbXAgaW50ZWdlclxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgcGFyc2luZyAoZGVmYXVsdDogYHRydWVgKVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIHwgYHVuZGVmaW5lZGAgd2hlbiBpbnZhbGlkXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RpbWUgPSAodmFsdWU6IGFueSwgbWluPzogbnVtYmVyLCBtYXg/OiBudW1iZXIsIF9zdHJpY3Q6IGJvb2xlYW4gPSB0cnVlKTogbnVtYmVyfHVuZGVmaW5lZCA9PiB7XHJcblx0Y29uc3QgZGF0ZTogRGF0ZXx1bmRlZmluZWQgPSBfZGF0ZSh2YWx1ZSwgX3N0cmljdCk7XHJcblx0aWYgKCFkYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdGNvbnN0IHRpbWU6IG51bWJlciA9IGRhdGUuZ2V0VGltZSgpO1xyXG5cdGlmICghaXNOYU4obWluID0gcGFyc2VGbG9hdChtaW4gYXMgYW55KSkgJiYgdGltZSA8IG1pbikgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHRpZiAoIWlzTmFOKG1heCA9IHBhcnNlRmxvYXQobWF4IGFzIGFueSkpICYmIHRpbWUgPiBtYXgpIHJldHVybiB1bmRlZmluZWQ7XHJcblx0cmV0dXJuIHRpbWU7XHJcbn07XHJcblxyXG4vKipcclxuICogRGF5IG5hbWVzXHJcbiAqIC0gYCgnU3VuZGF5J3wnTW9uZGF5J3wnVHVlc2RheSd8J1dlZG5lc2RheSd8J1RodXJzZGF5J3wnRnJpZGF5J3wnU2F0dXJkYXknKVtdYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IERBWV9OQU1FUzogc3RyaW5nW10gPSBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J107XHJcblxyXG4vKipcclxuICogR2V0IGRheSBuYW1lXHJcbiAqIFxyXG4gKiBAcGFyYW0gaW5kZXggLSAoZGVmYXVsdDogYDBgKSBkYXkgaW5kZXggYDAtNmAgfiBgREFZX05BTUVTW01hdGguYWJzKGluZGV4ICUgREFZX05BTUVTLmxlbmd0aCldYFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB+IGAnU3VuZGF5J3wnTW9uZGF5J3wnVHVlc2RheSd8J1dlZG5lc2RheSd8J1RodXJzZGF5J3wnRnJpZGF5J3wnU2F0dXJkYXknYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kYXlOYW1lID0gKGluZGV4OiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGluZGV4ID0gIWlzTmFOKGluZGV4ID0gcGFyc2VJbnQoaW5kZXgpKSA/IGluZGV4IDogMDtcclxuXHRyZXR1cm4gREFZX05BTUVTW01hdGguYWJzKGluZGV4ICUgREFZX05BTUVTLmxlbmd0aCldO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE1vbnRoIG5hbWVzXHJcbiAqIC0gYCgnSmFudWFyeSd8J0ZlYnJ1YXJ5J3wnTWFyY2gnfCdBcHJpbCd8J01heSd8J0p1bmUnfCdKdWx5J3wnQXVndXN0J3wnU2VwdGVtYmVyJ3wnT2N0b2Jlcid8J05vdmVtYmVyJ3wnRGVjZW1iZXInKVtdYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IE1PTlRIX05BTUVTOiBzdHJpbmdbXSA9IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddO1xyXG5cclxuLyoqXHJcbiAqIEdldCBtb250aCBuYW1lXHJcbiAqIFxyXG4gKiBAcGFyYW0gaW5kZXggLSAoZGVmYXVsdDogYDBgKSBkYXkgaW5kZXggYDAtMTFgIH4gYE1PTlRIX05BTUVTW01hdGguYWJzKGluZGV4ICUgREFZX05BTUVTLmxlbmd0aCldYFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB+IGAnSmFudWFyeSd8J0ZlYnJ1YXJ5J3wnTWFyY2gnfCdBcHJpbCd8J01heSd8J0p1bmUnfCdKdWx5J3wnQXVndXN0J3wnU2VwdGVtYmVyJ3wnT2N0b2Jlcid8J05vdmVtYmVyJ3wnRGVjZW1iZXInYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9tb250aE5hbWUgPSAoaW5kZXg6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0aW5kZXggPSAhaXNOYU4oaW5kZXggPSBwYXJzZUludChpbmRleCkpID8gaW5kZXggOiAwO1xyXG5cdHJldHVybiBNT05USF9OQU1FU1tNYXRoLmFicyhpbmRleCAlIE1PTlRIX05BTUVTLmxlbmd0aCldO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGBEYXRlYCBkYXkgc3RhcnQgfiBhdCBgMDA6MDA6MDAgMGBcclxuICogLSBzZWUgYF9kYXRlKClgIHBhcnNpbmcgZG9jc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZSB+ICoqXyhkZWZhdWx0cyB0byBgbmV3IERhdGUoKWAgd2hlbiBpbnZhbGlkKV8qKlxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYClcclxuICogQHJldHVybnMgYERhdGVgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2RheVN0YXJ0ID0gKHZhbHVlPzogYW55LCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UpOiBEYXRlID0+IHtcclxuXHRjb25zdCBkYXRlOiBEYXRlID0gX2RhdGUodmFsdWUsIF9zdHJpY3QpID8/IG5ldyBEYXRlKCk7XHJcblx0cmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgMCwgMCwgMCwgMCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgYERhdGVgIGRheSBlbmQgfiBhdCBgMjM6NTk6NTkgOTk5YFxyXG4gKiAtIHNlZSBgX2RhdGUoKWAgcGFyc2luZyBkb2NzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBkYXRlIHZhbHVlIH4gKipfKGRlZmF1bHRzIHRvIGBuZXcgRGF0ZSgpYCB3aGVuIGludmFsaWQpXyoqXHJcbiAqIEBwYXJhbSBfc3RyaWN0IC0gZW5hYmxlIHN0cmljdCBkYXRldGltZSBwYXJzaW5nIChkZWZhdWx0OiBgZmFsc2VgKVxyXG4gKiBAcmV0dXJucyBgRGF0ZWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGF5RW5kID0gKHZhbHVlPzogYW55LCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UpOiBEYXRlID0+IHtcclxuXHRjb25zdCBkYXRlOiBEYXRlID0gX2RhdGUodmFsdWUsIF9zdHJpY3QpID8/IG5ldyBEYXRlKCk7XHJcblx0cmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgMjMsIDU5LCA1OSwgOTk5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBgRGF0ZWAgbW9udGgncyBzdGFydCBkYXkgfiBhdCBgMDA6MDA6MDAgMGBcclxuICogLSBzZWUgYF9kYXRlKClgIHBhcnNpbmcgZG9jc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZSB+ICoqXyhkZWZhdWx0cyB0byBgbmV3IERhdGUoKWAgd2hlbiBpbnZhbGlkKV8qKlxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYCkgfiBzZWUgYF9kYXRlKClgXHJcbiAqIEByZXR1cm5zIGBEYXRlYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9tb250aFN0YXJ0ID0gKHZhbHVlPzogYW55LCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UpOiBEYXRlID0+IHtcclxuXHRjb25zdCBkYXRlOiBEYXRlID0gX2RhdGUodmFsdWUsIF9zdHJpY3QpID8/IG5ldyBEYXRlKCk7XHJcblx0cmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCAxLCAwLCAwLCAwLCAwKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBgRGF0ZWAgbW9udGgncyBlbmQgZGF5IH4gYXQgYDIzOjU5OjU5IDk5OWBcclxuICogLSBzZWUgYF9kYXRlKClgIHBhcnNpbmcgZG9jc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZSB+ICoqXyhkZWZhdWx0cyB0byBgbmV3IERhdGUoKWAgd2hlbiBpbnZhbGlkKV8qKlxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYCkgfiBzZWUgYF9kYXRlKClgXHJcbiAqIEByZXR1cm5zIGBEYXRlYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9tb250aEVuZCA9ICh2YWx1ZT86IGFueSwgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlKTogRGF0ZSA9PiB7XHJcblx0Y29uc3QgZGF0ZTogRGF0ZSA9IF9kYXRlKHZhbHVlLCBfc3RyaWN0KSA/PyBuZXcgRGF0ZSgpO1xyXG5cdHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSArIDEsIDAsIDIzLCA1OSwgNTksIDk5OSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgYERhdGVgIHllYXIncyBzdGFydCBkYXkgfiBhdCBgWVlZWS0wMS0wMSAwMDowMDowMCAwYFxyXG4gKiAtIHNlZSBgX2RhdGUoKWAgcGFyc2luZyBkb2NzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBkYXRlIHZhbHVlIH4gKipfKGRlZmF1bHRzIHRvIGBuZXcgRGF0ZSgpYCB3aGVuIGludmFsaWQpXyoqXHJcbiAqIEBwYXJhbSBfc3RyaWN0IC0gZW5hYmxlIHN0cmljdCBkYXRldGltZSBwYXJzaW5nIChkZWZhdWx0OiBgZmFsc2VgKSB+IHNlZSBgX2RhdGUoKWBcclxuICogQHJldHVybnMgYERhdGVgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3llYXJTdGFydCA9ICh2YWx1ZT86IGFueSwgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlKTogRGF0ZSA9PiB7XHJcblx0Y29uc3QgZGF0ZTogRGF0ZSA9IF9kYXRlKHZhbHVlLCBfc3RyaWN0KSA/PyBuZXcgRGF0ZSgpO1xyXG5cdHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIDAsIDEsIDAsIDAsIDAsIDApO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGBEYXRlYCB5ZWFyJ3MgZW5kIGRheSB+IGF0IGBZWVlZLTEyLTMxIDIzOjU5OjU5IDk5OWBcclxuICogLSBzZWUgYF9kYXRlKClgIHBhcnNpbmcgZG9jc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZSB+ICoqXyhkZWZhdWx0cyB0byBgbmV3IERhdGUoKWAgd2hlbiBpbnZhbGlkKV8qKlxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYCkgfiBzZWUgYF9kYXRlKClgXHJcbiAqIEByZXR1cm5zIGBEYXRlYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF95ZWFyRW5kID0gKHZhbHVlPzogYW55LCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UpOiBEYXRlID0+IHtcclxuXHRjb25zdCBkYXRlOiBEYXRlID0gX2RhdGUodmFsdWUsIF9zdHJpY3QpID8/IG5ldyBEYXRlKCk7XHJcblx0cmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMTEsIDAsIDIzLCA1OSwgNTksIDk5OSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgYERhdGVgIHZhbHVlIHRvIGBZWVlZLU1NLUREIEhIOm1tOnNzYCBmb3JtYXQgKGUuZy4gYCcyMDIzLTA1LTI3IDIyOjExOjU3J2ApXHJcbiAqIC0gc2VlIGBfZGF0ZSgpYCBwYXJzaW5nIGRvY3NcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGRhdGUgdmFsdWVcclxuICogQHBhcmFtIF9zdHJpY3QgLSBlbmFibGUgc3RyaWN0IGRhdGV0aW1lIHBhcnNpbmcgKGRlZmF1bHQ6IGBmYWxzZWApIH4gc2VlIGBfZGF0ZSgpYFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB+IGAnWVlZWS1NTS1ERCBISDptbTpzcydgIHwgZW1wdHkgYCcnYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGF0ZXRpbWUgPSAodmFsdWU/OiBhbnksIF9zdHJpY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgZGF0ZTogRGF0ZXx1bmRlZmluZWQgPSBfZGF0ZSh2YWx1ZSwgX3N0cmljdCk7XHJcblx0aWYgKCFkYXRlKSByZXR1cm4gJyc7XHJcblx0Y29uc3QgdmFsdWVzOiBudW1iZXJbXSA9IFtcclxuXHRcdGRhdGUuZ2V0RnVsbFllYXIoKSwgLy95eXl5XHJcblx0XHRkYXRlLmdldE1vbnRoKCkgKyAxLCAvL01NXHJcblx0XHRkYXRlLmdldERhdGUoKSwgLy9kZFxyXG5cdFx0ZGF0ZS5nZXRIb3VycygpLCAvL0hIXHJcblx0XHRkYXRlLmdldE1pbnV0ZXMoKSwgLy9tbVxyXG5cdFx0ZGF0ZS5nZXRTZWNvbmRzKCksIC8vc3NcclxuXHRdO1xyXG5cdGNvbnN0IHBhZGRlZDogc3RyaW5nW10gPSBbXTtcclxuXHRmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZXMpIHBhZGRlZC5wdXNoKCh2YWwgKyAnJykucGFkU3RhcnQoMiwgJzAnKSk7IC8vcGFkIH4gYCcxJyA9PiAnMDEnYFxyXG5cdHJldHVybiBwYWRkZWQuc3BsaWNlKDAsIDMpLmpvaW4oJy0nKSArICcgJyArIHBhZGRlZC5qb2luKCc6Jyk7IC8vdGltZXN0YW1wXHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgYERhdGVgIHZhbHVlIHRvIGBZWVlZLU1NLUREYCBmb3JtYXQgYHN0cmluZ2AgKGUuZy4gYCcyMDIzLTA1LTI3J2ApXHJcbiAqIC0gc2VlIGBfZGF0ZSgpYCBwYXJzaW5nIGRvY3NcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGRhdGUgdmFsdWVcclxuICogQHBhcmFtIF9zdHJpY3QgLSBlbmFibGUgc3RyaWN0IGRhdGV0aW1lIHBhcnNpbmcgKGRlZmF1bHQ6IGBmYWxzZWApIH4gc2VlIGBfZGF0ZSgpYFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB+IGAnWVlZWS1NTS1ERCdgIHwgZW1wdHkgYCcnYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGF0ZXN0ciA9ICh2YWx1ZT86IGFueSwgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nID0+IF9kYXRldGltZSh2YWx1ZSwgX3N0cmljdCkuc3Vic3RyaW5nKDAsIDEwKTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBgRGF0ZWAgdmFsdWUgdG8gYEhIOm1tOnNzYCBmb3JtYXQgYHN0cmluZ2AgKGUuZy4gYCcyMjoxMTo1NydgKVxyXG4gKiAtIHNlZSBgX2RhdGUoKWAgcGFyc2luZyBkb2NzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBkYXRlIHZhbHVlXHJcbiAqIEBwYXJhbSBfc3RyaWN0IC0gZW5hYmxlIHN0cmljdCBkYXRldGltZSBwYXJzaW5nIChkZWZhdWx0OiBgZmFsc2VgKSB+IHNlZSBgX2RhdGUoKWBcclxuICogQHJldHVybnMgYHN0cmluZ2AgfiBgJ0hIOm1tOnNzJ2AgfCBlbXB0eSBgJydgIHdoZW4gaW52YWxpZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90aW1lc3RyID0gKHZhbHVlPzogYW55LCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcgPT4gX2RhdGV0aW1lKHZhbHVlLCBfc3RyaWN0KS5zdWJzdHJpbmcoMTEsIDE5KTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBJU08gZm9ybWF0dGVkIGRhdGUgdmFsdWUgdG8gbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxyXG4gKiAtIGJvcnJvd2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVuc2UveXVwL2Jsb2IvMWVlOWIyMWM5OTRiNDI5M2YzYWIzMzgxMTlkYzE3YWIyZjRlMjg0Yy9zcmMvdXRpbC9wYXJzZUlzb0RhdGUudHNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElTTyBkYXRlIGBzdHJpbmdgIChpLmUuIGAnMjAyMi0xMi0xOVQxMzoxMjo0Mi4wMDArMDAwMCdgL2AnMjAyMi0xMi0xOVQxMzoxMjo0Mi4wMDBaJ2AgPT4gYDE2NzE0NTU1NjIwMDBgKVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCBtaWxsaXNlY29uZHMgdGltZXN0YW1wIHwgYHVuZGVmaW5lZGAgd2hlbiBpbnZhbGlkXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3BhcnNlSXNvID0gKHZhbHVlOiBzdHJpbmcpOiBudW1iZXJ8dW5kZWZpbmVkID0+IHtcclxuXHRjb25zdCByZWdleCAgPSAvXihcXGR7NH18WystXVxcZHs2fSkoPzotPyhcXGR7Mn0pKD86LT8oXFxkezJ9KSk/KT8oPzpbIFRdPyhcXGR7Mn0pOj8oXFxkezJ9KSg/Ojo/KFxcZHsyfSkoPzpbLC5dKFxcZHsxLH0pKT8pPyg/OihaKXwoWystXSkoXFxkezJ9KSg/Ojo/KFxcZHsyfSkpPyk/KT8kLztcclxuXHQvLyAgICAgICAgICAgICAgICAxIFlZWVkgICAgICAgICAgICAgICAgMiBNTSAgICAgICAgMyBERCAgICAgICAgICAgICAgNCBISCAgICAgNSBtbSAgICAgICAgNiBzcyAgICAgICAgICAgNyBtc2VjICAgICAgICAgOCBaIDkgwrEgICAxMCB0ekhIICAgIDExIHR6bW1cclxuXHRsZXQgc3RydWN0OiBhbnksIHRpbWVzdGFtcDogbnVtYmVyID0gTmFOO1xyXG5cdHRyeSB7XHJcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XHJcblx0fVxyXG5cdGNhdGNoIChlKXtcclxuXHRcdHZhbHVlID0gJyc7XHJcblx0fVxyXG5cdGlmIChzdHJ1Y3QgPSByZWdleC5leGVjKHZhbHVlKSl7XHJcblx0XHRmb3IgKGNvbnN0IGsgb2YgWzEsIDQsIDUsIDYsIDcsIDEwLCAxMV0pIHN0cnVjdFtrXSA9ICtzdHJ1Y3Rba10gfHwgMDsgLy9hbGxvdyB1bmRlZmluZWQgZGF5cyBhbmQgbW9udGhzXHJcblx0XHRzdHJ1Y3RbMl0gPSAoK3N0cnVjdFsyXXx8MSkgLSAxO1xyXG5cdFx0c3RydWN0WzNdID0gK3N0cnVjdFszXXx8MTsgLy9hbGxvdyBhcmJpdHJhcnkgc3ViLXNlY29uZCBwcmVjaXNpb24gYmV5b25kIG1pbGxpc2Vjb25kc1xyXG5cdFx0c3RydWN0WzddID0gc3RydWN0WzddID8gU3RyaW5nKHN0cnVjdFs3XSkuc3Vic3RyaW5nKDAsIDMpIDogMDsgLy90aW1lc3RhbXBzIHdpdGhvdXQgdGltZXpvbmUgaWRlbnRpZmllcnMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgbG9jYWwgdGltZVxyXG5cdFx0aWYgKChzdHJ1Y3RbOF0gPT09IHVuZGVmaW5lZCB8fCBzdHJ1Y3RbOF0gPT09ICcnKSAmJiAoc3RydWN0WzldID09PSB1bmRlZmluZWQgfHwgc3RydWN0WzldID09PSAnJykpe1xyXG5cdFx0XHR0aW1lc3RhbXAgPSArbmV3IERhdGUoc3RydWN0WzFdLCBzdHJ1Y3RbMl0sIHN0cnVjdFszXSwgc3RydWN0WzRdLCBzdHJ1Y3RbNV0sIHN0cnVjdFs2XSwgc3RydWN0WzddKTtcclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRsZXQgbWluX29mZnNldCA9IDA7XHJcblx0XHRcdGlmIChzdHJ1Y3RbOF0gIT09ICdaJyAmJiBzdHJ1Y3RbOV0gIT09IHVuZGVmaW5lZCl7XHJcblx0XHRcdFx0bWluX29mZnNldCA9IHN0cnVjdFsxMF0gKiA2MCArIHN0cnVjdFsxMV07XHJcblx0XHRcdFx0aWYgKHN0cnVjdFs5XSA9PT0gJysnKSBtaW5fb2Zmc2V0ID0gMCAtIG1pbl9vZmZzZXQ7XHJcblx0XHRcdH1cclxuXHRcdFx0dGltZXN0YW1wID0gRGF0ZS5VVEMoc3RydWN0WzFdLCBzdHJ1Y3RbMl0sIHN0cnVjdFszXSwgc3RydWN0WzRdLCBzdHJ1Y3RbNV0gKyBtaW5fb2Zmc2V0LCBzdHJ1Y3RbNl0sIHN0cnVjdFs3XSk7XHJcblx0XHR9XHJcblx0fVxyXG5cdGVsc2UgdGltZXN0YW1wID0gRGF0ZS5wYXJzZSA/IERhdGUucGFyc2UodmFsdWUpIDogTmFOO1xyXG5cdHJldHVybiAhaXNOYU4odGltZXN0YW1wKSA/IHRpbWVzdGFtcCA6IHVuZGVmaW5lZDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBZZWFyIHVuaXQgbWlsbGlzZWNvbmRzIH4gY2xvc2UgZXN0aW1hdGUgYDM2NS4yNWAgZGF5c1xyXG4gKiAtIGAzNjUuMjUgKiAyNCAqIDYwICogNjAgKiAxMDAwYCA9IGAzMTU1NzYwMDAwMGAgbXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBZRUFSX01TOiBudW1iZXIgPSAzNjUuMjUgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xyXG5cclxuLyoqXHJcbiAqIE1vbnRoIHVuaXQgbWlsbGlzZWNvbmRzIH4gY2xvc2UgZXN0aW1hdGUgYDMwLjQ0YCBkYXlzXHJcbiAqIC0gYDMwLjQ0ICogMjQgKiA2MCAqIDYwICogMTAwMGAgPSBgMjYzMDAxNjAwMC4wMDAwMDA1YCBtc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IE1PTlRIX01TOiBudW1iZXIgPSAzMC40NCAqIDI0ICogNjAgKiA2MCAqIDEwMDA7XHJcblxyXG4vKipcclxuICogRGF5IHVuaXQgbWlsbGlzZWNvbmRzXHJcbiAqIC0gYDI0ICogNjAgKiA2MCAqIDEwMDBgID0gYDg2NDAwMDAwYCBtc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IERBWV9NUzogbnVtYmVyID0gMjQgKiA2MCAqIDYwICogMTAwMDtcclxuXHJcbi8qKlxyXG4gKiBIb3VyIHVuaXQgbWlsbGlzZWNvbmRzXHJcbiAqIC0gYDYwICogNjAgKiAxMDAwYCA9IGAzNjAwMDAwYCBtc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEhPVVJfTVM6IG51bWJlciA9IDYwICogNjAgKiAxMDAwO1xyXG5cclxuLyoqXHJcbiAqIE1pbnV0ZSB1bml0IG1pbGxpc2Vjb25kc1xyXG4gKiAtIGA2MCAqIDEwMDBgID0gYDYwMDAwYCBtc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IE1JTlVURV9NUzogbnVtYmVyID0gNjAgKiAxMDAwO1xyXG5cclxuLyoqXHJcbiAqIFNlY29uZCB1bml0IG1pbGxpc2Vjb25kc1xyXG4gKiAtIGAxMDAwYCBtc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFNFQ09ORF9NUzogbnVtYmVyID0gMTAwMDtcclxuXHJcbi8qKlxyXG4gKiBEdXJhdGlvbiBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUR1cmF0aW9uIHtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGR1cmF0aW9uIHllYXJzXHJcblx0ICovXHJcblx0eWVhcnM6IG51bWJlcjtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGR1cmF0aW9uIG1vbnRoc1xyXG5cdCAqL1xyXG5cdG1vbnRoczogbnVtYmVyO1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIC0gZHVyYXRpb24gZGF5c1xyXG5cdCAqL1xyXG5cdGRheXM6IG51bWJlcjtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGR1cmF0aW9uIGhvdXJzXHJcblx0ICovXHJcblx0aG91cnM6IG51bWJlcjtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGR1cmF0aW9uIG1pbnV0ZXNcclxuXHQgKi9cclxuXHRtaW51dGVzOiBudW1iZXI7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBkdXJhdGlvbiBzZWNvbmRzXHJcblx0ICovXHJcblx0c2Vjb25kczogbnVtYmVyO1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIC0gZHVyYXRpb24gbWlsbGlzZWNvbmRzXHJcblx0ICovXHJcblx0bWlsbGlzZWNvbmRzOiBudW1iZXI7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBkdXJhdGlvbiB0b3RhbCBkYXlzIChpLmUuIGBNYXRoLmZsb29yKCh0aW1lX2RpZmZlcmVuY2VfbXMpLygyNCo2MCo2MCoxMDAwKSlgKVxyXG5cdCAqL1xyXG5cdHRvdGFsX2RheXM6IG51bWJlcjtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGR1cmF0aW9uIHRvdGFsIHRpbWUgaW4gbWlsbGlzZWNvbmRzIChpLmUuIGBNYXRoLmFicyh0aW1lX2RpZmZlcmVuY2VfbXMpYClcclxuXHQgKi9cclxuXHR0b3RhbF90aW1lOiBudW1iZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gc3RhcnQgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kc1xyXG5cdCAqL1xyXG5cdHN0YXJ0X3RpbWU6IG51bWJlcixcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGVuZCB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzXHJcblx0ICovXHJcblx0ZW5kX3RpbWU6IG51bWJlcixcclxuXHJcblx0LyoqXHJcblx0ICogLSBjb252ZXJ0IHRvIHRleHQgbWV0aG9kXHJcblx0ICogXHJcblx0ICogQGV4YW1wbGVcclxuXHQgKiBfZHVyYXRpb24oMTgyNDU4ODc4KS50b1N0cmluZygwPykgLy8nMiBkYXlzIDAyOjQwOjU4JyAoc2hvcnQpXHJcblx0ICogX2R1cmF0aW9uKDE4MjQ1ODg3OCkudG9TdHJpbmcoMSkgIC8vJzIgZGF5cywgMiBob3VycywgNDAgbWludXRlcywgNTggc2Vjb25kcyBhbmQgODc4IG1pbGxpc2Vjb25kcycgKGxvbmcpXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG1vZGUgLSB0ZXh0IG1vZGUgKGRlZmF1bHQ6IGAwYCkgfiBgMGAgPSBzaG9ydCwgYDFgID0gbG9uZyBfKHNlZSBkb2NzKV9cclxuXHQgKiBAcmV0dXJucyBgc3RyaW5nYFxyXG5cdCAqL1xyXG5cdHRvU3RyaW5nOiAobW9kZT86bnVtYmVyKT0+c3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogKipbaW50ZXJuYWxdKiogQ3JlYXRlIGBJRHVyYXRpb25gIG9iamVjdFxyXG4gKiBcclxuICogQHBhcmFtIHllYXJzIC0gZWxhcHNlZCB5ZWFyc1xyXG4gKiBAcGFyYW0gbW9udGhzIC0gZWxhcHNlZCBtb250aHNcclxuICogQHBhcmFtIGRheXMgLSBlbGFwc2VkIGRheXNcclxuICogQHBhcmFtIGhvdXJzIC0gZWxhcHNlZCBob3Vyc1xyXG4gKiBAcGFyYW0gbWludXRlcyAtIGVsYXBzZWQgbWludXRlc1xyXG4gKiBAcGFyYW0gc2Vjb25kcyAtIGVsYXBzZWQgc2Vjb25kc1xyXG4gKiBAcGFyYW0gbWlsbGlzZWNvbmRzIC0gZWxhcHNlZCBtaWxsaXNlY29uZHNcclxuICogQHBhcmFtIHRvdGFsX2RheXMgLSBlbGFwc2VkIHRvdGFsIGRheXNcclxuICogQHBhcmFtIHRvdGFsX3RpbWUgLSBlbGFwc2VkIHRvdGFsIHRpbWVcclxuICogQHBhcmFtIHN0YXJ0X3RpbWUgLSBzdGFydCB0aW1lc3RhbXBcclxuICogQHBhcmFtIGVuZF90aW1lIC0gZW5kIHRpbWVzdGFtcFxyXG4gKiBAcmV0dXJucyBgSUR1cmF0aW9uYFxyXG4gKi9cclxuY29uc3QgY3JlYXRlX2R1cmF0aW9uID0gKHllYXJzOiBudW1iZXIsIG1vbnRoczogbnVtYmVyLCBkYXlzOiBudW1iZXIsIGhvdXJzOiBudW1iZXIsIG1pbnV0ZXM6IG51bWJlciwgc2Vjb25kczogbnVtYmVyLCBtaWxsaXNlY29uZHM6IG51bWJlciwgdG90YWxfZGF5czogbnVtYmVyLCB0b3RhbF90aW1lOiBudW1iZXIsIHN0YXJ0X3RpbWU6IG51bWJlciwgZW5kX3RpbWU6IG51bWJlcikgPT4gKHtcclxuXHR5ZWFycyxcclxuXHRtb250aHMsXHJcblx0ZGF5cyxcclxuXHRob3VycyxcclxuXHRtaW51dGVzLFxyXG5cdHNlY29uZHMsXHJcblx0bWlsbGlzZWNvbmRzLFxyXG5cdHRvdGFsX2RheXMsXHJcblx0dG90YWxfdGltZSxcclxuXHRzdGFydF90aW1lLFxyXG5cdGVuZF90aW1lLFxyXG5cdHRvU3RyaW5nOiBmdW5jdGlvbihtb2RlOiBudW1iZXIgPSAwKXtcclxuXHRcdG1vZGUgPSBbMCwgMV0uaW5jbHVkZXMobW9kZSA9IHBhcnNlSW50KG1vZGUgYXMgYW55KSkgPyBtb2RlIDogMDtcclxuXHRcdGNvbnN0IGJ1ZmZlcl90ZXh0OiBzdHJpbmdbXSA9IFtdLCBidWZmZXJfdGltZTogc3RyaW5nW10gPSBbXTtcclxuXHRcdGNvbnN0IF9hZGQgPSAodmFsOiBhbnksIG5hbWU6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG5cdFx0XHRpZiAobW9kZSA9PT0gMCAmJiBbJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsICdtaWxsaXNlY29uZCddLmluY2x1ZGVzKG5hbWUpKXtcclxuXHRcdFx0XHRpZiAobmFtZSA9PT0gJ21pbGxpc2Vjb25kJykgcmV0dXJuO1xyXG5cdFx0XHRcdGJ1ZmZlcl90aW1lLnB1c2goU3RyaW5nKHZhbCkucGFkU3RhcnQoMiwgJzAnKSk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAodmFsKSBidWZmZXJfdGV4dC5wdXNoKHZhbCArICcgJyArIG5hbWUgKyAodmFsID4gMSA/ICdzJyA6ICcnKSk7XHJcblx0XHR9O1xyXG5cdFx0X2FkZCh5ZWFycywgJ3llYXInKTtcclxuXHRcdF9hZGQobW9udGhzLCAnbW9udGgnKTtcclxuXHRcdF9hZGQoZGF5cywgJ2RheScpO1xyXG5cdFx0X2FkZChob3VycywgJ2hvdXInKTtcclxuXHRcdF9hZGQobWludXRlcywgJ21pbnV0ZScpO1xyXG5cdFx0X2FkZChzZWNvbmRzLCAnc2Vjb25kJyk7XHJcblx0XHRfYWRkKG1pbGxpc2Vjb25kcywgJ21pbGxpc2Vjb25kJyk7XHJcblx0XHRpZiAobW9kZSA9PT0gMCkgcmV0dXJuIChidWZmZXJfdGV4dC5sZW5ndGggPyBidWZmZXJfdGV4dC5qb2luKCcsICcpICsgJyAnIDogJycpICsgYnVmZmVyX3RpbWUuam9pbignOicpO1xyXG5cdFx0aWYgKCFidWZmZXJfdGV4dC5sZW5ndGgpIGJ1ZmZlcl90ZXh0LnB1c2goJzAgbWlsbGlzZWNvbmRzJyk7XHJcblx0XHRyZXR1cm4gYnVmZmVyX3RleHQuam9pbignLCAnKS5yZXBsYWNlKC8sKFteLF0qKSQvLCAnIGFuZCQxJyk7XHJcblx0XHQvLyByZXR1cm4gYnVmZmVyX3RleHQubGVuZ3RoID4gMSA/IGJ1ZmZlcl90ZXh0LnNsaWNlKDAsIC0xKS5qb2luKCcsICcpICsgJyBhbmQgJyArIGJ1ZmZlcl90ZXh0W2J1ZmZlcl90ZXh0Lmxlbmd0aCAtIDFdIDogYnVmZmVyX3RleHQuam9pbignJyk7XHJcblx0fSxcclxufSk7XHJcblxyXG4vKipcclxuICogR2V0IGVsYXBzZWQgZHVyYXRpb24gYmV0d2VlbiB0d28gZGF0ZXMvdGltZXN0YW1wcyB+IGV4dHJhIGFjY3VyYWN5IGNvbnNpZGVyaW5nIGxlYXAgeWVhcnNcclxuICogLSBzdGFydCBhbmQgZW5kIHZhbHVlcyBhcmUgcmVvcmRlcmVkIGF1dG9tYXRpY2FsbHkgKHN0YXJ0ID0gbWluLCBlbmQgPSBtYXgpXHJcbiAqIFxyXG4gKiBAcGFyYW0gc3RhcnQgLSBzdGFydCBkYXRlL3RpbWVzdGFtcFxyXG4gKiBAcGFyYW0gZW5kIC0gZW5kIGRhdGUvdGltZXN0YW1wIChkZWZhdWx0OiBgdW5kZWZpbmVkYClcclxuICogQHBhcmFtIF9zdHJpY3QgLSBlbmFibGUgc3RyaWN0IGRhdGV0aW1lIHBhcnNpbmcgKGRlZmF1bHQ6IGBmYWxzZWApIH4gc2VlIGBfZGF0ZSgpYFxyXG4gKiBAdGhyb3dzIGBUeXBlRXJyb3JgIG9uIGludmFsaWQgc3RhcnQvZW5kIHRpbWUgdmFsdWVcclxuICogQHJldHVybnMgYElEdXJhdGlvbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZWxhcHNlZCA9IChzdGFydDogYW55LCBlbmQ6IGFueSA9IHVuZGVmaW5lZCwgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlKTogSUR1cmF0aW9uID0+IHtcclxuXHRpZiAoIShzdGFydCA9IF9kYXRlKHN0YXJ0LCBfc3RyaWN0KSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgZWxhcHNlZCBzdGFydCBkYXRlIHZhbHVlISBQYXNzIGEgdmFsaWQgRGF0ZSBpbnN0YW5jZSwgaW50ZWdlciB0aW1lc3RhbXAgb3IgZGF0ZSBzdHJpbmcgdmFsdWUuJyk7XHJcblx0aWYgKCEoZW5kID0gX2RhdGUoZW5kLCBfc3RyaWN0KSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgZWxhcHNlZCBlbmQgZGF0ZSB2YWx1ZSEgUGFzcyBhIHZhbGlkIERhdGUgaW5zdGFuY2UsIGludGVnZXIgdGltZXN0YW1wIG9yIGRhdGUgc3RyaW5nIHZhbHVlLicpO1xyXG5cdGlmIChzdGFydCA+IGVuZCl7XHJcblx0XHRjb25zdCBzd2FwID0gc3RhcnQ7XHJcblx0XHRzdGFydCA9IGVuZDtcclxuXHRcdGVuZCA9IHN3YXA7XHJcblx0fVxyXG5cdGxldCB5ZWFyczogbnVtYmVyID0gMDtcclxuXHRsZXQgbW9udGhzOiBudW1iZXIgPSAwO1xyXG5cdGxldCBkYXlzOiBudW1iZXIgPSAwO1xyXG5cdGxldCBob3VyczogbnVtYmVyID0gMDtcclxuXHRsZXQgbWludXRlczogbnVtYmVyID0gMDtcclxuXHRsZXQgc2Vjb25kczogbnVtYmVyID0gMDtcclxuXHRsZXQgbWlsbGlzZWNvbmRzOiBudW1iZXIgPSAwXHJcblx0Y29uc3Qgc3RhcnRfdGltZTogbnVtYmVyID0gc3RhcnQuZ2V0VGltZSgpO1xyXG5cdGNvbnN0IGVuZF90aW1lOiBudW1iZXIgPSBlbmQuZ2V0VGltZSgpO1xyXG5cdGNvbnN0IHRvdGFsX3RpbWU6IG51bWJlciA9IGVuZF90aW1lIC0gc3RhcnRfdGltZTtcclxuXHRjb25zdCB0b3RhbF9kYXlzOiBudW1iZXIgPSBNYXRoLmZsb29yKHRvdGFsX3RpbWUgLyBEQVlfTVMpO1xyXG5cdGlmICgobWlsbGlzZWNvbmRzICs9IChlbmQuZ2V0TWlsbGlzZWNvbmRzKCkgLSBzdGFydC5nZXRNaWxsaXNlY29uZHMoKSkpIDwgMCl7XHJcblx0XHRzZWNvbmRzIC0tO1xyXG5cdFx0bWlsbGlzZWNvbmRzICs9IDEwMDA7XHJcblx0fVxyXG5cdGlmICgoc2Vjb25kcyArPSAoZW5kLmdldFNlY29uZHMoKSAtIHN0YXJ0LmdldFNlY29uZHMoKSkpIDwgMCl7XHJcblx0XHRtaW51dGVzIC0tO1xyXG5cdFx0c2Vjb25kcyArPSA2MDtcclxuXHR9XHJcblx0aWYgKChtaW51dGVzICs9IChlbmQuZ2V0TWludXRlcygpIC0gc3RhcnQuZ2V0TWludXRlcygpKSkgPCAwKXtcclxuXHRcdGhvdXJzIC0tO1xyXG5cdFx0bWludXRlcyArPSA2MDtcclxuXHR9XHJcblx0aWYgKChob3VycyArPSAoZW5kLmdldEhvdXJzKCkgLSBzdGFydC5nZXRIb3VycygpKSkgPCAwKXtcclxuXHRcdGRheXMgLS07XHJcblx0XHRob3VycyArPSAyNDtcclxuXHR9XHJcblx0Y29uc3Qgc3RhcnRfeWVhcjogbnVtYmVyID0gc3RhcnQuZ2V0RnVsbFllYXIoKTtcclxuXHRsZXQgc3RhcnRfbW9udGg6IG51bWJlciA9IHN0YXJ0LmdldE1vbnRoKCk7XHJcblx0eWVhcnMgPSBlbmQuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0X3llYXI7XHJcblx0aWYgKChtb250aHMgPSBlbmQuZ2V0TW9udGgoKSAtIHN0YXJ0X21vbnRoKSA8IDApe1xyXG5cdFx0eWVhcnMgLS07XHJcblx0XHRtb250aHMgKz0gMTI7XHJcblx0fVxyXG5cdGlmICgoZGF5cyArPSAoZW5kLmdldERhdGUoKSAtIHN0YXJ0LmdldERhdGUoKSkpIDwgMCl7XHJcblx0XHRpZiAoZW5kLmdldE1vbnRoKCkgPT09IHN0YXJ0LmdldE1vbnRoKCkpIHN0YXJ0X21vbnRoICsrO1xyXG5cdFx0aWYgKG1vbnRocyA8PSAwKXtcclxuXHRcdFx0eWVhcnMgLS07XHJcblx0XHRcdG1vbnRocyA9IDExO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBtb250aHMgLS07XHJcblx0XHRkYXlzICs9IG5ldyBEYXRlKHN0YXJ0X3llYXIsIHN0YXJ0X21vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpO1xyXG5cdH1cclxuXHRyZXR1cm4gY3JlYXRlX2R1cmF0aW9uKHllYXJzLCBtb250aHMsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIHRvdGFsX2RheXMsIHRvdGFsX3RpbWUsIHN0YXJ0X3RpbWUsIGVuZF90aW1lKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgZWxhcHNlZCBkdXJhdGlvbiBiZXR3ZWVuIHR3byBkYXRlcy90aW1lc3RhbXBzIH4gY2xvc2VzdCBlc3RpbWF0aW9uXHJcbiAqIC0gc3RhcnQgYW5kIGVuZCB2YWx1ZXMgYXJlIHJlb3JkZXJlZCBhdXRvbWF0aWNhbGx5IChzdGFydCA9IG1pbiwgZW5kID0gbWF4KVxyXG4gKiBcclxuICogQHBhcmFtIHN0YXJ0IC0gc3RhcnQgZGF0ZS9tcyB0aW1lc3RhbXBcclxuICogQHBhcmFtIGVuZCAtIGVuZCBkYXRlL21zIHRpbWVzdGFtcCAoZGVmYXVsdDogYDBgKVxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYCkgfiBzZWUgYF9kYXRlKClgXHJcbiAqIEB0aHJvd3MgYFR5cGVFcnJvcmAgb24gaW52YWxpZCBzdGFydC9lbmQgdGltZSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgSUR1cmF0aW9uYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kdXJhdGlvbiA9IChzdGFydDogYW55LCBlbmQ6IGFueSA9IDAsIF9zdHJpY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IElEdXJhdGlvbiA9PiB7XHJcblx0aWYgKCEoc3RhcnQgPSBfZGF0ZShzdGFydCwgX3N0cmljdCkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGR1cmF0aW9uIHN0YXJ0IGRhdGUgdmFsdWUhIFBhc3MgYSB2YWxpZCBEYXRlIGluc3RhbmNlLCBpbnRlZ2VyIHRpbWVzdGFtcCBvciBkYXRlIHN0cmluZyB2YWx1ZS4nKTtcclxuXHRpZiAoIShlbmQgPSBfZGF0ZShlbmQsIF9zdHJpY3QpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBkdXJhdGlvbiBlbmQgZGF0ZSB2YWx1ZSEgUGFzcyBhIHZhbGlkIERhdGUgaW5zdGFuY2UsIGludGVnZXIgdGltZXN0YW1wIG9yIGRhdGUgc3RyaW5nIHZhbHVlLicpO1xyXG5cdGlmIChzdGFydCA+IGVuZCl7XHJcblx0XHRjb25zdCBzd2FwID0gc3RhcnQ7XHJcblx0XHRzdGFydCA9IGVuZDtcclxuXHRcdGVuZCA9IHN3YXA7XHJcblx0fVxyXG5cdGxldCBkaWZmOiBudW1iZXIgPSAwO1xyXG5cdGNvbnN0IGVuZF90aW1lOiBudW1iZXIgPSBlbmQuZ2V0VGltZSgpO1xyXG5cdGNvbnN0IHN0YXJ0X3RpbWU6IG51bWJlciA9IHN0YXJ0LmdldFRpbWUoKTtcclxuXHRjb25zdCB0b3RhbF90aW1lOiBudW1iZXIgPSBkaWZmID0gTWF0aC5hYnMoZW5kX3RpbWUgLSBzdGFydF90aW1lKTtcclxuXHRjb25zdCB0b3RhbF9kYXlzOiBudW1iZXIgPSBNYXRoLmZsb29yKHRvdGFsX3RpbWUgLyBEQVlfTVMpO1xyXG5cdGNvbnN0IHllYXJzID0gTWF0aC5mbG9vcih0b3RhbF90aW1lIC8gWUVBUl9NUyk7XHJcblx0ZGlmZiAlPSBZRUFSX01TO1xyXG5cdGNvbnN0IG1vbnRoczogbnVtYmVyID0gTWF0aC5mbG9vcihkaWZmIC8gTU9OVEhfTVMpO1xyXG5cdGRpZmYgJT0gTU9OVEhfTVM7XHJcblx0Y29uc3QgZGF5czogbnVtYmVyID0gTWF0aC5mbG9vcihkaWZmIC8gREFZX01TKTtcclxuXHRkaWZmICU9IERBWV9NUztcclxuXHRjb25zdCBob3VyczogbnVtYmVyID0gTWF0aC5mbG9vcihkaWZmIC8gSE9VUl9NUyk7XHJcblx0ZGlmZiAlPSBIT1VSX01TO1xyXG5cdGNvbnN0IG1pbnV0ZXM6IG51bWJlciA9IE1hdGguZmxvb3IoZGlmZiAvIE1JTlVURV9NUyk7XHJcblx0ZGlmZiAlPSBNSU5VVEVfTVM7XHJcblx0Y29uc3Qgc2Vjb25kczogbnVtYmVyID0gTWF0aC5mbG9vcihkaWZmIC8gU0VDT05EX01TKTtcclxuXHRjb25zdCBtaWxsaXNlY29uZHM6IG51bWJlciA9IGRpZmYgJSBTRUNPTkRfTVM7XHJcblx0cmV0dXJuIGNyZWF0ZV9kdXJhdGlvbih5ZWFycywgbW9udGhzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzLCB0b3RhbF9kYXlzLCB0b3RhbF90aW1lLCBzdGFydF90aW1lLCBlbmRfdGltZSk7XHJcbn07IiwiaW1wb3J0IHsgYm9vbCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgZGVib3VuY2VkIGNhbGxiYWNrIGZ1bmN0aW9uXHJcbiAqIFxyXG4gKiBAcGFyYW0gaGFuZGxlciAgVGhyb3R0bGVkIGNhbGxiYWNrIGhhbmRsZXJcclxuICogQHBhcmFtIGRlbGF5ICBDYWxsYmFjayBkZWxheSBtaWxsaXNlY29uZHNcclxuICogQHBhcmFtIG1heFdhaXQgIE1heGltdW0gY2FsbGJhY2sgZGVsYXkgbWlsbGlzZWNvbmRzXHJcbiAqIEBwYXJhbSBpbW1lZGlhdGUgIEV4ZWN1dGUgY2FsbGJhY2sgYmVmb3JlIGRlbGF5XHJcbiAqIEByZXR1cm5zIFRocm90dGxlZCBjYWxsYmFjayBmdW5jdGlvblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kZWJvdWNlZCA9IChoYW5kbGVyOiAoLi4uYXJnczogYW55KT0+dm9pZCwgZGVsYXk6IG51bWJlciA9IDIwMCwgbWF4V2FpdDogbnVtYmVyID0gMCwgaW1tZWRpYXRlOiBib29sID0gZmFsc2UpOiAoKC4uLmFyZ3M6IGFueSk9PnZvaWQpID0+IHtcclxuXHRkZWxheSA9ICFpc05hTihkZWxheSA9IHBhcnNlRmxvYXQoZGVsYXkgYXMgYW55KSkgJiYgZGVsYXkgPj0gMCA/IGRlbGF5IDogMjAwO1xyXG5cdG1heFdhaXQgPSAhaXNOYU4obWF4V2FpdCA9IHBhcnNlRmxvYXQobWF4V2FpdCBhcyBhbnkpKSAmJiBtYXhXYWl0ID49IDAgJiYgbWF4V2FpdCA+IGRlbGF5ID8gbWF4V2FpdCA6IDA7XHJcblx0aW1tZWRpYXRlID0gISFpbW1lZGlhdGU7XHJcblx0bGV0IGltbWVkaWF0ZVRpbWVyOiBhbnksIGNhbGxUaW1lcjogYW55LCB3YWl0VGltZXI6IGFueSwgbmV4dENhbGw6IFtjb250ZXh0OiBhbnksIGFyZ3M6IGFueVtdXSB8IHVuZGVmaW5lZDtcclxuXHRjb25zdCBleGVjdXRlID0gKGlzX2ltbWVkaWF0ZT86Ym9vbCkgPT4ge1xyXG5cdFx0bGV0IG5leHQgPSBuZXh0Q2FsbDtcclxuXHRcdG5leHRDYWxsID0gdW5kZWZpbmVkO1xyXG5cdFx0aWYgKHdhaXRUaW1lcil7XHJcblx0XHRcdGNsZWFyVGltZW91dCh3YWl0VGltZXIpO1xyXG5cdFx0XHR3YWl0VGltZXIgPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblx0XHRpZiAoY2FsbFRpbWVyICYmICFpc19pbW1lZGlhdGUpe1xyXG5cdFx0XHRjbGVhclRpbWVvdXQoY2FsbFRpbWVyKTtcclxuXHRcdFx0Y2FsbFRpbWVyID0gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdFx0aWYgKG5leHQ/Lmxlbmd0aCAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgaGFuZGxlcikgaGFuZGxlci5hcHBseSguLi5uZXh0KTtcclxuXHRcdGlmIChkZWxheSAmJiBpbW1lZGlhdGUgJiYgIWlzX2ltbWVkaWF0ZSl7XHJcblx0XHRcdGltbWVkaWF0ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KGltbWVkaWF0ZVRpbWVyKTtcclxuXHRcdFx0XHRpbW1lZGlhdGVUaW1lciA9IHVuZGVmaW5lZDtcclxuXHRcdFx0fSwgZGVsYXkpO1xyXG5cdFx0fVxyXG5cdH07XHJcblx0Y29uc3Qgd3JhcHBlciA9IGZ1bmN0aW9uKHRoaXM6IGFueSwgLi4uYXJnczogYW55W10pe1xyXG5cdFx0bmV4dENhbGwgPSBbdGhpcywgYXJnc107XHJcblx0XHRpZiAoIWRlbGF5KSByZXR1cm4gZXhlY3V0ZSgpO1xyXG5cdFx0Y29uc3QgX25leHQgPSAobm9fd2FpdD0wKSA9PiB7XHJcblx0XHRcdGNsZWFyVGltZW91dChjYWxsVGltZXIpO1xyXG5cdFx0XHRjYWxsVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGV4ZWN1dGUoKSwgZGVsYXkpO1xyXG5cdFx0XHRpZiAoIW5vX3dhaXQgJiYgbWF4V2FpdCAmJiAhd2FpdFRpbWVyKSB3YWl0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGV4ZWN1dGUoKSwgbWF4V2FpdCk7XHJcblx0XHR9O1xyXG5cdFx0aWYgKCEoaW1tZWRpYXRlICYmICFpbW1lZGlhdGVUaW1lciAmJiAhY2FsbFRpbWVyKSkgcmV0dXJuIF9uZXh0KCk7XHJcblx0XHRfbmV4dCgxKVxyXG5cdFx0ZXhlY3V0ZSgxKTtcclxuXHR9O1xyXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdyYXBwZXIsIHtcclxuXHRcdGxlbmd0aDoge3ZhbHVlOiBoYW5kbGVyLmxlbmd0aH0sXHJcblx0XHRuYW1lOiB7dmFsdWU6IGAke2hhbmRsZXIubmFtZXx8J2Fub255bW91cyd9X19kZWJvdW5jZWRfXyR7ZGVsYXl9YH0sXHJcblx0fSk7XHJcblx0cmV0dXJuIHdyYXBwZXI7XHJcbn07IiwiLyoqXHJcbiAqIFNheSBIZWxsbyFcclxuICogXHJcbiAqIEBwYXJhbSBuYW1lXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3NheUhlbGxvID0gKG5hbWU/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG5cdG5hbWUgPSBuYW1lPy5sZW5ndGggPyBuYW1lIDogJ1RodWt1JztcclxuXHRjb25zdCBoZWxsbyA9IGBbeF0gLSBIZWxsbyAke25hbWV9IWA7XHJcblx0Y29uc29sZS5sb2coaGVsbG8pO1xyXG5cdHJldHVybiBoZWxsbztcclxufSIsIi8qKlxyXG4gKiBDdXN0b20gYEpTT04uc3RyaW5naWZ5YCB3aXRoIGV4dGVuZGVkIGN1c3RvbSByZXBsYWNlclxyXG4gKiAtIERlZmF1bHQgdmFsdWUgZm9yIGB1bmRlZmluZWRgIHZhbHVlIGFyZ3VtZW50XHJcbiAqIC0gRml4IGBFcnJvcmAsIGBTZXRgLCBgTWFwYCBzdHJpbmdpZnlcclxuICogLSBDaXJjdWxhciByZWZlcmVuY2UgZml4ZXNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgUGFyc2UgdmFsdWUgKGB1bmRlZmluZWRgIHZhbHVlIGlzIHJlcGxhY2VkIHdpdGggYF91bmRlZmluZWRgIGFyZ3VtZW50IHN1YnN0aXR1dGUgdmFsdWUpXHJcbiAqIEBwYXJhbSBzcGFjZSAgSW5kZW50YXRpb24gc3BhY2VcclxuICogQHBhcmFtIF91bmRlZmluZWQgIERlZmF1bHQgYHVuZGVmaW5lZGAgYXJndW1lbnQgYHZhbHVlYCBzdWJzdGl0dXRlIChkZWZhdWx0IGBudWxsYClcclxuICogQHJldHVybnNcclxuICovXHJcbiBleHBvcnQgY29uc3QgX2pzb25TdHJpbmdpZnkgPSAodmFsdWU6IGFueSwgc3BhY2U/OiBzdHJpbmd8bnVtYmVyfG51bGx8dW5kZWZpbmVkLCBfdW5kZWZpbmVkOiBhbnkgPSBudWxsKTogc3RyaW5nID0+IHtcclxuXHRjb25zdCBfc3BhY2U6IHN0cmluZ3xudW1iZXJ8dW5kZWZpbmVkID0gc3BhY2UgPT09IG51bGwgPyB1bmRlZmluZWQgOiBzcGFjZTtcclxuXHRjb25zdCBwYXJlbnRzOiBhbnkgPSBbXTtcclxuXHRjb25zdCBwYXRoOiBhbnlbXSA9IFsndGhpcyddO1xyXG5cdGNvbnN0IHJlZnMgPSBuZXcgTWFwPGFueSwgYW55PigpO1xyXG5cdGNvbnN0IF9jbGVhciA9ICgpOiB2b2lkID0+IHtcclxuXHRcdHJlZnMuY2xlYXIoKTtcclxuXHRcdHBhcmVudHMubGVuZ3RoID0gMDtcclxuXHRcdHBhdGgubGVuZ3RoID0gMTtcclxuXHR9O1xyXG5cdGNvbnN0IF9wYXJlbnRzID0gKGtleTogYW55LCB2YWx1ZTogYW55KTogdm9pZCA9PiB7XHJcblx0XHRsZXQgaSA9IHBhcmVudHMubGVuZ3RoIC0gMSwgcHJldiA9IHBhcmVudHNbaV07XHJcblx0XHRpZiAocHJldltrZXldID09PSB2YWx1ZSB8fCBpID09PSAwKXtcclxuXHRcdFx0cGF0aC5wdXNoKGtleSk7XHJcblx0XHRcdHBhcmVudHMucHVzaCh2YWx1ZSk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHdoaWxlIChpLS0gPj0gMCkge1xyXG5cdFx0XHRwcmV2ID0gcGFyZW50c1tpXTtcclxuXHRcdFx0aWYgKHByZXY/LltrZXldID09PSB2YWx1ZSl7XHJcblx0XHRcdFx0aSArPSAyO1xyXG5cdFx0XHRcdHBhcmVudHMubGVuZ3RoID0gaTtcclxuXHRcdFx0XHRwYXRoLmxlbmd0aCA9IGk7XHJcblx0XHRcdFx0LS1pO1xyXG5cdFx0XHRcdHBhcmVudHNbaV0gPSB2YWx1ZTtcclxuXHRcdFx0XHRwYXRoW2ldID0ga2V5O1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fTtcclxuXHRjb25zdCBfcmVwbGFjZXIgPSBmdW5jdGlvbih0aGlzIDphbnksIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55IHtcclxuXHRcdGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xyXG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3Ipe1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjYXRjaCAoZSl7XHJcblx0XHRcdFx0Y29uc3QgZXJyb3IgPSAnW0ZBSUxVUkVdIFBhcnNlIEVycm9yIHRvIFN0cmluZyBmYWlsZWQhJztcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oZXJyb3IsIHt2YWx1ZSwgZX0pO1xyXG5cdFx0XHRcdHZhbHVlID0gZXJyb3I7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNldCkgdmFsdWUgPSBbLi4udmFsdWVdO1xyXG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgTWFwKSB2YWx1ZSA9IFsuLi52YWx1ZV07XHJcblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHZhbHVlID0gdmFsdWUgKyAnJztcclxuXHRcdGlmICgnb2JqZWN0JyA9PT0gdHlwZW9mIHZhbHVlKXtcclxuXHRcdFx0aWYgKGtleSkgX3BhcmVudHMoa2V5LCB2YWx1ZSk7XHJcblx0XHRcdGNvbnN0IG90aGVyID0gcmVmcy5nZXQodmFsdWUpO1xyXG5cdFx0XHRpZiAob3RoZXIpIHJldHVybiAnW0NpcmN1bGFyIFJlZmVyZW5jZV0nICsgb3RoZXI7XHJcblx0XHRcdGVsc2UgcmVmcy5zZXQodmFsdWUsIHBhdGguam9pbignLicpKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9O1xyXG5cdHRyeSB7XHJcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgdmFsdWUgPSBfdW5kZWZpbmVkICE9PSB1bmRlZmluZWQgPyBfdW5kZWZpbmVkIDogX3VuZGVmaW5lZCA9IG51bGw7XHJcblx0XHRwYXJlbnRzLnB1c2godmFsdWUpO1xyXG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBfcmVwbGFjZXIsIF9zcGFjZSk7XHJcblx0fVxyXG5cdGZpbmFsbHkge1xyXG5cdFx0X2NsZWFyKCk7XHJcblx0fVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEN1c3RvbSBgSlNPTi5wYXJzZWAgd2l0aCBlcnJvciBjYXRjaCBhbmQgZGVmYXVsdCByZXN1bHQgb24gcGFyc2UgZmFpbHVyZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEBwYXJhbSBfZGVmYXVsdFxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9qc29uUGFyc2UgPSAodmFsdWU6IHN0cmluZywgX2RlZmF1bHQ/OiBhbnkpOiBhbnkgPT4ge1xyXG5cdHRyeSB7XHJcblx0XHRyZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcblx0fVxyXG5cdGNhdGNoIChlKXtcclxuXHRcdHJldHVybiBfZGVmYXVsdDtcclxuXHR9XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSBqc29uIHN0cmluZ2lmeSBhbmQgcGFyc2UgdmFsdWUgfiBgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHJldHVybnMgYGFueWAganNvbiBzdHJpbmdpZmllZCBhbmQgcGFyc2VkIHZhbHVlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2pzb25Db3B5ID0gPFRSZXR1cm4gPSBhbnk+KHZhbHVlOiBhbnkpOiBUUmV0dXJuID0+ICgnb2JqZWN0JyA9PT0gdHlwZW9mIHZhbHVlICYmIHZhbHVlID8gX2pzb25QYXJzZShfanNvblN0cmluZ2lmeSh2YWx1ZSkpIDogdmFsdWUpIGFzIGFueTtcclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0ZSBvYmplY3QgSlNPTiB0ZXh0XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSB2YWxpZGF0ZSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaXNPYmpKc29uID0gKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuXHR0cnkge1xyXG5cdFx0aWYgKCEoJ3N0cmluZycgPT09IHR5cGVvZiB2YWx1ZSAmJiAodmFsdWUgPSB2YWx1ZS50cmltKCkpKSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0aWYgKCEvXlxcey4rXFx9JHxeXFxbLitcXF0kL3MudGVzdCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcclxuXHRcdGNvbnN0IHZhbDogYW55ID0gX2pzb25QYXJzZSh2YWx1ZSk7XHJcblx0XHRyZXR1cm4gdmFsICYmIE9iamVjdCh2YWwpID09PSB2YWw7XHJcblx0fVxyXG5cdGNhdGNoIChlKXtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn07XHJcbiIsImltcG9ydCB7IGJvb2wgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdmFsdWUgaXMgbnVtZXJpY1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlICBQYXJzZSB2YWx1ZVxyXG4gKiBAcGFyYW0gYm9vbGVhbnMgIFBhc3MgYGJvb2xlYW5gIHZhbHVlcyBhcyBudW1lcmljXHJcbiAqIEBwYXJhbSBibGFua3MgIFBhc3MgZW1wdHkgYHN0cmluZ2AgdmFsdWVzIChiZWNhdXNlIGAhaXNOYU4oJycpID09PSB0cnVlYClcclxuICogQHJldHVybnMgYGJvb2xlYW5gIGlzIG51bWVyaWNcclxuICovXHJcbmV4cG9ydCBjb25zdCBfbnVtZXJpYyA9ICh2YWx1ZTogYW55LCBib29sZWFuczogYm9vbCA9IGZhbHNlLCBibGFua3M6IGJvb2wgPSBmYWxzZSk6IGJvb2xlYW4gPT4ge1xyXG5cdGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIHZhbHVlKSByZXR1cm4gIWlzTmFOKHZhbHVlKTtcclxuXHRpZiAoJ2Jvb2xlYW4nID09PSB0eXBlb2YgdmFsdWUpIHJldHVybiAhIWJvb2xlYW5zO1xyXG5cdGNvbnN0IHYgPSBTdHJpbmcodmFsdWUpLnRyaW0oKTtcclxuXHRpZiAodiA9PT0gJycpIHJldHVybiAhIWJsYW5rcztcclxuXHRyZXR1cm4gLyheWystXT9bMC05XSsoWy5dWzAtOV0rKT8oW2VFXVsrLV0/WzAtOV0rKT8kKXwoXlsrLV0/XFwuWzAtOV0rJCl8KF5bKy1dP1swLTldK1xcLiQpLy50ZXN0KHYpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBwYXJzZWQgYW5kIG5vcm1hbGl6ZWQgYG51bWJlcmBcclxuICogXHJcbiAqIC0gdHJpbXMgYHN0cmluZ2AgdmFsdWUgYW5kIGAnJ2AgPT4gYE5hTmBcclxuICogLSBzdXBwb3J0cyAoIy8jLiMvLiMvIy4pICYgY29tbWEgc2VwYXJhdGVkL3NwYWNlZCBzdHJpbmcgKGkuZS4gYCcxLCAyMDAsIDAwMCAuIDM0NTUnYCA9PiBgMTIwMDAwMC4zNDU1YClcclxuICogLSBub3JtYWxpemVzIGZsb2F0IGAzK2AgbGFzdCB6ZXJvcyBmcm9tIGA1dGhgIHBsYWNlIChpLmUuIGAxLjEvMTAwYCA9IGAwLjAxMTAwMDAwMDAwMDAwMDAwMWAgPT4gYDAuMDExYClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIG51bWJlciB2YWx1ZVxyXG4gKiBAcGFyYW0gX2RlZmF1bHQgLSBkZWZhdWx0IGBudW1iZXJgIHJlc3VsdCB3aGVuIGludmFsaWQgKGRlZmF1bHQgYE5hTmApXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgIHwgYE5hTmAgd2hlbiBpbnZhbGlkIG9yIHdoZW4gYCcnYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9udW0gPSAodmFsdWU6IGFueSwgX2RlZmF1bHQ6IG51bWJlciA9IE5hTik6IG51bWJlciA9PiB7XHJcblx0XHJcblx0Ly9wYXJzZSBzdHJpbmcgdmFsdWVcclxuXHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB2YWx1ZSl7XHJcblx0XHRcclxuXHRcdC8vcGFyc2UgZmlsbGVkLCBzaW5nbGUgbGluZSB0ZXh0XHJcblx0XHRpZiAoKHZhbHVlID0gdmFsdWUudHJpbSgpKSAmJiAvXi4qJC8udGVzdCh2YWx1ZSkpe1xyXG5cdFx0XHRcclxuXHRcdFx0Ly9tYXRjaCBsZWFkaW5nICsvLSBvcGVyYXRvciBwcmVmaXhcclxuXHRcdFx0bGV0IHByZWZpeCA9ICcnO1xyXG5cdFx0XHRsZXQgbWF0Y2ggPSB2YWx1ZS50cmltKCkubWF0Y2goL14oW1xcKy1dKVxccyooXFxkLiopJC8pO1xyXG5cdFx0XHRpZiAobWF0Y2gpe1xyXG5cdFx0XHRcdHByZWZpeCA9IG1hdGNoWzFdOyAvLyt8LVxyXG5cdFx0XHRcdHZhbHVlID0gbWF0Y2hbMl07IC8vdmFsdWVcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly9yZW1vdmUgd2hpdGVzcGFjZSBhcm91bmQgW1xcZCxcXC5dXHJcblx0XHRcdHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXFxzKihbXFwuLF0pXFxzKi9nLCAnJDEnKTtcclxuXHJcblx0XHRcdC8vbWF0Y2ggJiByZW1vdmUgXCIsXCIgdGhvdXNhbmQgc2VwYXJhdG9yXHJcblx0XHRcdGlmICh2YWx1ZS5tYXRjaCgvXlxcZHsxLDN9KCxcXGR7M30pKihcXC58KFxcLlxcZCspKT8kLykpIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvLC9nLCAnJykudHJpbSgpO1xyXG5cdFx0XHRcclxuXHRcdFx0Ly92YWxpZGF0ZSBudW1iZXIgZm9ybWF0IC0gYWxsb3cgKCMvIy4jLy4jLyMuKVxyXG5cdFx0XHRpZiAoL15cXGQrXFwuJHxeXFwuXFxkKyR8XlxcZCsoXFwuXFxkKyl7MCwxfSQvLnRlc3QodmFsdWUpKXtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvL3BhcnNlIG51bWJlciAmIHJlc3RvcmUgKy8tIG9wZXJhdG9yIHByZWZpeFxyXG5cdFx0XHRcdGlmICghaXNOYU4odmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKSkgJiYgcHJlZml4KSB2YWx1ZSA9IHBhcnNlRmxvYXQocHJlZml4ICsgdmFsdWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgdmFsdWUgPSBOYU47XHJcblx0XHR9XHJcblx0XHRlbHNlIHZhbHVlID0gTmFOOyAvL2ludmFsaWQgbnVtYmVyIHN0cmluZ1xyXG5cdH1cclxuXHRlbHNlIHZhbHVlID0gTnVtYmVyKHZhbHVlKTsgLy9jb2VyY2UgbnVtYmVyXHJcblxyXG5cdC8vdmFsaWQgc2FmZSBudW1iZXIgPT4gcmVzdWx0XHJcblx0aWYgKCFpc05hTih2YWx1ZSA9IE51bWJlcih2YWx1ZSkpICYmIHZhbHVlID49IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSICYmIHZhbHVlIDw9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKXtcclxuXHRcdFxyXG5cdFx0Ly9jaGVjayAmIG5vcm1hbGl6ZSBmbG9hdCBgMytgIGxhc3QgemVyb3MgZnJvbSA1dGggcGxhY2UgfiAwLjAxMTAwMDAwMDAwMDAwMDAwMSA9PiAwLjAxMVxyXG5cdFx0bGV0IG1hdGNoID0gU3RyaW5nKHZhbHVlKS5tYXRjaCgvXihbXFwrLV0/XFxkK1xcLlxcZHs1LH0pKDB7Myx9XFxkKikkLyk7XHJcblx0XHRpZiAobWF0Y2gpIHZhbHVlID0gTnVtYmVyKG1hdGNoWzFdKTtcclxuXHRcdFxyXG5cdFx0Ly9yZXN1bHRcclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdC8vaW52YWxpZCA9PiBkZWZhdWx0IHJlc3VsdFxyXG5cdHJldHVybiBOdW1iZXIoX2RlZmF1bHQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBwYXJzZWQgc2FmZSBwb3NpdGl2ZSBgbnVtYmVyYCB3aXRoIG9wdGlvbmFsIHdpdGhpbiBtaW4vbWF4IGxpbWl0IGNoZWNrXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBudW1iZXIgdmFsdWVcclxuICogQHBhcmFtIG1pbiAtIHNldCBtaW4gbGltaXQgfiBlbmFibGVkIHdoZW4gYG1pbmAgaXMgYSB2YWxpZCBwb3NpdGl2ZSBudW1iZXJcclxuICogQHBhcmFtIG1heCAtIHNldCBtYXggbGltaXQgfiBlbmFibGVkIHdoZW4gYG1heGAgaXMgYSB2YWxpZCBwb3NpdGl2ZSBudW1iZXJcclxuICogQHJldHVybnMgYG51bWJlcmAgcG9zaXRpdmUgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWQgb3Igb3V0IG9mIGBtaW4vbWF4YCBib3VuZHNcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcG9zTnVtID0gKHZhbHVlOiBhbnksIG1pbj86IG51bWJlciwgbWF4PzogbnVtYmVyKTogbnVtYmVyfHVuZGVmaW5lZCA9PiB7XHJcblx0Y29uc3QgdmFsID0gX251bSh2YWx1ZSk7XHJcblx0aWYgKCEoIWlzTmFOKHZhbCkgJiYgdmFsID49IDApKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIG1pbiAmJiAhaXNOYU4obWluKSAmJiBtaW4gPj0gMCAmJiB2YWwgPCBtaW4pIHJldHVybiB1bmRlZmluZWQ7XHJcblx0aWYgKCdudW1iZXInID09PSB0eXBlb2YgbWF4ICYmICFpc05hTihtYXgpICYmIG1heCA+PSAwICYmIHZhbCA+IG1heCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHRyZXR1cm4gdmFsO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBwYXJzZWQgc2FmZSBgaW50ZWdlcmAgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIG51bWJlciB2YWx1ZVxyXG4gKiBAcGFyYW0gX2RlZmF1bHQgLSByZXN1bHQgYG51bWJlcmAgd2hlbiBpbnZhbGlkIChkZWZhdWx0IGBOYU5gKVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCBpbnRlZ2VyXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2ludCA9ICh2YWx1ZTogYW55LCBfZGVmYXVsdDogbnVtYmVyID0gTmFOKTogbnVtYmVyID0+IHtcclxuXHRjb25zdCB2YWwgPSBNYXRoLmZsb29yKF9udW0odmFsdWUsIF9kZWZhdWx0KSk7XHJcblx0cmV0dXJuICFpc05hTih2YWwpID8gdmFsIDogX2RlZmF1bHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IHBhcnNlZCBzYWZlIHBvc2l0aXZlIGBpbnRlZ2VyYCB2YWx1ZSB3aXRoIG9wdGlvbmFsIHdpdGhpbiBtaW4vbWF4IGxpbWl0IGNoZWNrXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBudW1iZXIgdmFsdWVcclxuICogQHBhcmFtIG1pbiAtIHNldCBtaW4gbGltaXQgfiBlbmFibGVkIHdoZW4gYG1pbmAgaXMgYSB2YWxpZCBwb3NpdGl2ZSBudW1iZXJcclxuICogQHBhcmFtIG1heCAtIHNldCBtYXggbGltaXQgfiBlbmFibGVkIHdoZW4gYG1heGAgaXMgYSB2YWxpZCBwb3NpdGl2ZSBudW1iZXJcclxuICogQHBhcmFtIF9saW1pdF9kZWZhdWx0IC0gKGRlZmF1bHQ6IGBmYWxzZWApIHVzZSBtaW4vbWF4IHZhbHVlIHdoZW4gdmFsdWUgZ29lcyBiZXlvbmQgbGltaXQgKGUuZy4gYF9wb3NJbnQoMTUwLDAsMTAwLHRydWUpYCA9PiBgMTAwYClcclxuICogQHJldHVybnMgYG51bWJlcmAgcG9zaXRpdmUgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWQgb3Igb3V0IG9mIGBtaW4vbWF4YCBib3VuZHNcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcG9zSW50ID0gKHZhbHVlOiBhbnksIG1pbj86IG51bWJlciwgbWF4PzogbnVtYmVyLCBfbGltaXRfZGVmYXVsdDogYm9vbGVhbiA9IGZhbHNlKTogbnVtYmVyfHVuZGVmaW5lZCA9PiB7XHJcblx0Y29uc3QgdmFsID0gX2ludCh2YWx1ZSk7XHJcblx0aWYgKCEoIWlzTmFOKHZhbCkgJiYgdmFsID49IDApKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIG1pbiAmJiAhaXNOYU4obWluKSAmJiBtaW4gPj0gMCAmJiB2YWwgPCBtaW4pIHJldHVybiBfbGltaXRfZGVmYXVsdCA/IG1pbiA6IHVuZGVmaW5lZDtcclxuXHRpZiAoJ251bWJlcicgPT09IHR5cGVvZiBtYXggJiYgIWlzTmFOKG1heCkgJiYgbWF4ID49IDAgJiYgdmFsID4gbWF4KSByZXR1cm4gX2xpbWl0X2RlZmF1bHQgPyBtYXggOiB1bmRlZmluZWQ7XHJcblx0cmV0dXJuIHZhbDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3VuZCBudW1iZXIgdG8gZGVjaW1hbCBwbGFjZXNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgUGFyc2UgdmFsdWVcclxuICogQHBhcmFtIHBsYWNlcyAgW2RlZmF1bHQ6IGAyYF0gRGVjaW1hbCBwbGFjZXNcclxuICogQHJldHVybnMgYG51bWJlcmAgcm91bmRlZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9yb3VuZCA9ICh2YWx1ZTogbnVtYmVyLCBwbGFjZXM6IG51bWJlciA9IDIpOiBudW1iZXIgPT4ge1xyXG5cdGlmIChpc05hTih2YWx1ZSkpIHJldHVybiBOYU47XHJcblx0bGV0IHAgPSAxMCAqKiBNYXRoLmFicyhfaW50KHBsYWNlcywgMikpO1xyXG5cdHJldHVybiBNYXRoLnJvdW5kKCh2YWx1ZSArIE51bWJlci5FUFNJTE9OKSAqIHApIC8gcDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IG51bWVyaWMgdmFsdWUgdG8gY29tbWEgdGhvdXNhbmQgZGVsaW1pdGVkIHN0cmluZyAoaS5lLiBgMTAwMC40NTY3YCA9PiBgJzEsMDAwLjQ1J2ApXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgIFBhcnNlIHZhbHVlXHJcbiAqIEBwYXJhbSBwbGFjZXMgIFtkZWZhdWx0OiBgMmBdIFJvdW5kIGRlY2ltYWwgcGxhY2VzXHJcbiAqIEBwYXJhbSB6ZXJvcyAgRW5hYmxlIHRyYWlsaW5nIGAnMCdgIGRlY2ltYWwgcGxhY2VzIChpLmUuIGAxMDAwYCA9PiBgJzEsMDAwLjAwJ2ApXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIENvbW1hIHRob3VzYW5kIGRlbGltaXRlZCBudW1iZXIgKHJldHVybnMgYFwiXCJgIGlmIHBhcnNlZCBgdmFsdWVgIGlzIGBOYU5gKVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9jb21tYXMgPSAodmFsdWU6IGFueSwgcGxhY2VzOiBudW1iZXIgPSAyLCB6ZXJvczogYm9vbCA9IGZhbHNlKTogc3RyaW5nID0+IHtcclxuXHRjb25zdCBudW0gPSBfcm91bmQoX251bSh2YWx1ZSksIHBsYWNlcyA9IF9pbnQocGxhY2VzLCAyKSk7XHJcblx0aWYgKGlzTmFOKG51bSkpe1xyXG5cdFx0Y29uc29sZS53YXJuKCdbV0FSTklORzogYF9jb21tYXNgXSBOYU4gdmFsdWU6JywgdmFsdWUpO1xyXG5cdFx0cmV0dXJuICcnO1xyXG5cdH1cclxuXHRsZXQgdmFsID0gU3RyaW5nKG51bSkucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJywnKTtcclxuXHRpZiAocGxhY2VzICYmIHplcm9zKXtcclxuXHRcdGlmICh2YWwuaW5kZXhPZignLicpID09PSAtMSkgdmFsICs9ICcuJy5wYWRFbmQocGxhY2VzICsgMSwgJzAnKTtcclxuXHRcdGVsc2UgdmFsID0gdmFsLnNwbGl0KCcuJykucmVkdWNlPHN0cmluZ1tdPigocHJldiwgdiwgaSkgPT4ge1xyXG5cdFx0XHRwcmV2LnB1c2goaSA9PT0gMSAmJiB2Lmxlbmd0aCA8IHBsYWNlcyA/IHYucGFkRW5kKHBsYWNlcywgJzAnKSA6IHYpO1xyXG5cdFx0XHRyZXR1cm4gcHJldjtcclxuXHRcdH0sIFtdKS5qb2luKCcuJyk7XHJcblx0fVxyXG5cdHJldHVybiB2YWw7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGUgcmFuZG9tIGBpbnRlZ2VyYCBudW1iZXIuXHJcbiAqIFxyXG4gKiBAcGFyYW0gbWluICBNaW4gYGludGVnZXJgXHJcbiAqIEBwYXJhbSBtYXggIE1heCBgaW50ZWdlcmBcclxuICogQHJldHVybnMgIGBudW1iZXJgIFJhbmRvbSBgaW50ZWdlcmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcmFuZCA9IChtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIgPT4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSArIG1pbjtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHB4IHRvIHJlbSAob3IgcmV2ZXJzZSlcclxuICogXHJcbiAqIEBwYXJhbSB2YWwgLSBjb252ZXJ0IHZhbHVlIFtkZWZhdWx0OiBgMWBdXHJcbiAqIEBwYXJhbSByZXZlcnNlIC0gY29udmVydCByZW0gdG8gcHhcclxuICogQHBhcmFtIGJhc2UgLSByb290IHB4IFtkZWZhdWx0OiBgMTZgXVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9weDJyZW0gPSAodmFsOiBudW1iZXIgPSAxLCByZXZlcnNlOiBib29sZWFuID1mYWxzZSwgYmFzZTogbnVtYmVyID0gMTYpOiBudW1iZXIgPT4ge1xyXG5cdHZhbCA9IF9udW0odmFsLCAxKTtcclxuXHRiYXNlID0gX251bShiYXNlLCAxNik7XHJcblx0Y29uc3QgdW5pdCA9IGJhc2UgPT09IDE2ID8gMC4wNjI1IDogMTYvYmFzZSowLjA2MjU7XHJcblx0cmV0dXJuIHJldmVyc2UgPyB2YWwvdW5pdCA6IHZhbCAqIHVuaXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCBieXRlcyB0byBzaXplIHZhbHVlXHJcbiAqIFxyXG4gKiBAcGFyYW0gYnl0ZXMgLSBwYXJzZSBieXRlc1xyXG4gKiBAcGFyYW0gbW9kZSAtIHBhcnNlIHJlc3VsdCBtb2RlIChkZWZhdWx0OiBgMGApXHJcbiAqIC0gYDBgID0gYHN0cmluZ2Agc2l6ZSB0ZXh0IChlLmcuIGBfYnl0ZXNWYWwoMjA5NzE1MilgID0+IGAyIE1CYClcclxuICogLSBgMWAgPSBgbnVtYmVyYCBzaXplIHZhbHVlIChlLmcuIGBfYnl0ZXNWYWwoMjA5NzE1MiwxLCdNQicsMClgID0+IGAyYClcclxuICogQHBhcmFtIHVuaXQgLSBzaXplIHVuaXQgKGRlZmF1bHQ6IGB1bmRlZmluZWRgID0gbWF4KSB+IGAnQid8J0tCJ3wnTUInfCdHQid8J1RCJ3wnUEInfCdFQid8J1pCJ3wnWUInYFxyXG4gKiBAcGFyYW0gcGxhY2VzIC0gZGVjaW1hbCBwbGFjZXNcclxuICogQHJldHVybnMgYG51bWJlcmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYnl0ZXNWYWwgPSAoYnl0ZXM6IG51bWJlciwgbW9kZTogMHwxID0gMCwgdW5pdD86ICdCJ3wnS0InfCdNQid8J0dCJ3wnVEInfCdQQid8J0VCJ3wnWkInfCdZQicsIHBsYWNlczogbnVtYmVyID0gMiwgY29tbWFzOiBib29sZWFuID0gZmFsc2UpOiBudW1iZXJ8c3RyaW5nID0+IHtcclxuXHRtb2RlID0gX3Bvc0ludChtb2RlLCAwLCAxKSA/PyAwIGFzIGFueTtcclxuXHRpZiAoIShieXRlcyA9IF9wb3NJbnQoYnl0ZXMsIDApID8/IDApKSByZXR1cm4gbW9kZSA9PT0gMSA/IDAgOiAnMCBCJzsgLy8tLSB6ZXJvXHJcblx0Y29uc3Qga2IgPSAxMDI0LCB1bml0cyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddO1xyXG5cdGNvbnN0IHU6IHN0cmluZyA9ICdzdHJpbmcnID09PSB0eXBlb2YgdW5pdCAmJiB1bml0cy5pbmNsdWRlcyh1bml0ID0gdW5pdC50cmltKCkudG9VcHBlckNhc2UoKSBhcyBhbnkpID8gdW5pdCBhcyBhbnkgOiAnJztcclxuXHRjb25zdCBpOiBudW1iZXIgPSB1ID8gdW5pdHMuZmluZEluZGV4KHYgPT4gdi50b0xvd2VyQ2FzZSgpID09PSB1LnRvTG93ZXJDYXNlKCkpIDogTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykvTWF0aC5sb2coa2IpKTtcclxuXHRpZiAoIShpID49IDAgJiYgaSA8IHVuaXRzLmxlbmd0aCkpIHJldHVybiBtb2RlID09PSAxID8gYnl0ZXMgOiBieXRlcyArICcgQic7IC8vLS0gdW5zdXBwb3J0ZWQgc2l6ZSAoZGVmYXVsdHMgdG8gYnl0ZXMpXHJcblx0bGV0IHZhbDogc3RyaW5nfG51bWJlciA9IGJ5dGVzL01hdGgucG93KGtiLCBpKTtcclxuXHRpZiAobW9kZSA9PT0gMSkgcmV0dXJuIF9yb3VuZCh2YWwsIHBsYWNlcyk7XHJcblx0cmV0dXJuIChjb21tYXMgPyBfY29tbWFzKHZhbCwgcGxhY2VzKSA6IF9yb3VuZCh2YWwsIHBsYWNlcykpICsgJyAnICsgdW5pdHNbaV07XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCBkZWNpbWFsIHRvIGJhc2VcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9kZWMyYmFzZSgxMjYsIDIpIC8vICcxMTExMTEwJ1xyXG4gKiBfZGVjMmJhc2UoMTI2LCAyLCA0KSAvLyAnMDExMSAxMTEwJ1xyXG4gKiBfZGVjMmJhc2UoMTI2LCA4KSAvLyAnMTc2J1xyXG4gKiBfZGVjMmJhc2UoMTI2LCAxNikgLy8gJzdFJ1xyXG4gKiBfZGVjMmJhc2UoMTAwMCwgMTYpIC8vICcwM0U4J1xyXG4gKiBfZGVjMmJhc2UoMTAwMCwgMTYsIDIpIC8vICcwMyBFOCdcclxuICogXHJcbiAqIEBwYXJhbSBkZWNpbWFsIC0gcGFyc2UgZGVjaW1hbCBpbnRlZ2VyXHJcbiAqIEBwYXJhbSBiYXNlIC0gdG8gYmFzZSAoZGVmYXVsdDogYDJgKSB+IGAyYCA9IGJpbmFyeSwgYDhgIC0gb2N0YWwsIGAxNmAgLSBoZXhhZGVjaW1hbFxyXG4gKiBAcGFyYW0gZ3JvdXAgLSBzcGFjZSBncm91cCBjaGFyYWN0ZXJzIGxlbmd0aCAoZGVmYXVsdDogYDBgKSB+IGVuYWJsZWQgd2hlbiBiYXNlID0gYDJ8MTZgXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2RlYzJiYXNlID0gKGRlY2ltYWw6IG51bWJlciwgYmFzZTogMnw4fDE2ID0gMiwgZ3JvdXA6IG51bWJlciA9IDApOiBzdHJpbmcgPT4ge1xyXG5cdGxldCBkZWM6IG51bWJlciA9IF9wb3NJbnQoZGVjaW1hbCwgMCkgPz8gMDtcclxuXHRpZiAoZGVjID09PSAwKSByZXR1cm4gJzAnO1xyXG5cdGJhc2UgPSBbMiwgOCwgMTZdLmluY2x1ZGVzKGJhc2UgPSBfcG9zSW50KGJhc2UsIDIpID8/IDIgYXMgYW55KSA/IGJhc2UgOiAyO1xyXG5cdGNvbnN0IGhleF9jaGFyczogc3RyaW5nW10gPSBiYXNlID09PSAxNiA/ICcwMTIzNDU2Nzg5QUJDREVGJy5zcGxpdCgnJykgOiBbXTtcclxuXHRsZXQgdmFsOiBzdHJpbmcgPSAnJztcclxuXHR3aGlsZSAoZGVjID4gMCl7XHJcblx0XHRsZXQgcmVtYWluZGVyID0gZGVjICUgYmFzZTtcclxuXHRcdHZhbCA9IChiYXNlID09PSAxNiA/IGhleF9jaGFyc1tyZW1haW5kZXJdIDogcmVtYWluZGVyKSArIHZhbDtcclxuXHRcdGRlYyA9IE1hdGguZmxvb3IoZGVjIC8gYmFzZSk7XHJcblx0fVxyXG5cdGlmIChbMiwgMTZdLmluY2x1ZGVzKGJhc2UpICYmICEhKGdyb3VwID0gX3Bvc0ludChncm91cCwgMCkgPz8gMCkpe1xyXG5cdFx0bGV0IGJ1ZmZlcjogc3RyaW5nID0gJyc7XHJcblx0XHR3aGlsZSAodmFsLmxlbmd0aCl7XHJcblx0XHRcdGxldCBpID0gdmFsLmxlbmd0aCAtIGdyb3VwO1xyXG5cdFx0XHRidWZmZXIgPSB2YWwuc3Vic3RyaW5nKGkpLnBhZFN0YXJ0KGdyb3VwLCAnMCcpICsgKGJ1ZmZlciA/ICcgJyA6ICcnKSArIGJ1ZmZlcjtcclxuXHRcdFx0dmFsID0gdmFsLnN1YnN0cmluZygwLCBpKTtcclxuXHRcdH1cclxuXHRcdHZhbCA9IGJ1ZmZlcjtcclxuXHR9XHJcblx0cmV0dXJuIHZhbDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBkZWNpbWFsIHRvIGJpbmFyeVxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX2RlYzJiaW4oMTI2KSAvLyAxMTExMTEwXHJcbiAqIF9kZWMyYmluKDEyNiwgNCkgLy8gMDExMSAxMTEwXHJcbiAqIF9kZWMyYmluKDEyNiwgOCkgLy8gMDExMTExMTBcclxuICogXHJcbiAqIEBwYXJhbSBkZWNpbWFsIC0gcGFyc2UgZGVjaW1hbCBpbnRlZ2VyXHJcbiAqIEBwYXJhbSBncm91cCAtIHNwYWNlIGdyb3VwIGNoYXJhY3RlcnMgbGVuZ3RoIChkZWZhdWx0OiBgMGApXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIGJpbmFyeSB0ZXh0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2RlYzJiaW4gPSAoZGVjaW1hbDogbnVtYmVyLCBncm91cDogbnVtYmVyID0gMCk6IHN0cmluZyA9PiBfZGVjMmJhc2UoZGVjaW1hbCwgMiwgZ3JvdXApO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGJpbmFyeSB0byBkZWNpbWFsXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfYmluMmRlYygnMDExMSAxMTEwJykgLy8gMTI2XHJcbiAqIFxyXG4gKiBAcGFyYW0gYmluYXJ5IC0gcGFyc2UgYmluYXJ5IHRleHRcclxuICogQHJldHVybnMgYG51bWJlcnx1bmRlZmluZWRgIH4gcGFyc2VkIGRlY2ltYWwgaW50ZWdlciB8IGB1bmRlZmluZWRgIHdoZW4gaW52YWxpZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9iaW4yZGVjID0gKGJpbmFyeTogc3RyaW5nKTogbnVtYmVyfHVuZGVmaW5lZCA9PiB7XHJcblx0aWYgKCEoJ3N0cmluZycgPT09IHR5cGVvZiBiaW5hcnkgJiYgL15bMDFdKyQvLnRlc3QoYmluYXJ5ID0gYmluYXJ5LnJlcGxhY2UoL1xccy9nLCAnJykpKSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8tLSBpbnZhbGlkIGJpbmFyeSB0ZXh0XHJcblx0bGV0IGRlYzogbnVtYmVyID0gMCwgcG93OiBudW1iZXIgPSAwO1xyXG5cdGZvciAobGV0IGkgPSBiaW5hcnkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pe1xyXG5cdFx0ZGVjICs9IHBhcnNlSW50KGJpbmFyeVtpXSkgKiBNYXRoLnBvdygyLCBwb3cpO1xyXG5cdFx0cG93ICsrO1xyXG5cdH1cclxuXHRyZXR1cm4gZGVjO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGRlY2ltYWwgdG8gaGV4YWRlY2ltYWxcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9kZWMyaGV4KDEwMDApIC8vICcwM0U4J1xyXG4gKiBfZGVjMmhleCgxMDAwLCAyKSAvLyAnMDMgRTgnXHJcbiAqIFxyXG4gKiBAcGFyYW0gZGVjaW1hbCAtIHBhcnNlIGRlY2ltYWwgaW50ZWdlciBgbnVtYmVyYFxyXG4gKiBAcGFyYW0gZ3JvdXAgLSBzcGFjZSBncm91cCBjaGFyYWN0ZXJzIGxlbmd0aCAoZGVmYXVsdDogYDBgKVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCAtIGhleGFkZWNpbWFsIHRleHRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGVjMmhleCA9IChkZWNpbWFsOiBudW1iZXIsIGdyb3VwOiBudW1iZXIgPSAwKTogc3RyaW5nID0+IF9kZWMyYmFzZShkZWNpbWFsLCAxNiwgZ3JvdXApO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGhleGFkZWNpbWFsIHRvIGRlY2ltYWxcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9oZXgyZGVjKCcweDdFJykgLy8gMTI2XHJcbiAqIF9oZXgyZGVjKCcwMyBFOCcpIC8vIDEwMDBcclxuICogXHJcbiAqIEBwYXJhbSBoZXggLSBwYXJzZSBoZXhhZGVjaW1hbCB0ZXh0XHJcbiAqIEByZXR1cm5zIGBudW1iZXJ8dW5kZWZpbmVkYCB+IHBhcnNlZCBkZWNpbWFsIGludGVnZXIgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaGV4MmRlYyA9IChoZXg6IHN0cmluZyk6IG51bWJlcnx1bmRlZmluZWQgPT4ge1xyXG5cdGlmICghKCdzdHJpbmcnID09PSB0eXBlb2YgaGV4ICYmIC9eWzAtOUEtRl0rJC8udGVzdChoZXggPSBoZXgucmVwbGFjZSgvMHgvaWcsICcnKS5yZXBsYWNlKC9cXHMvZywgJycpLnRvVXBwZXJDYXNlKCkpKSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8tLSBpbnZhbGlkIGhleGFkZWNpbWFsIHRleHRcclxuXHRjb25zdCBoZXhfbWFwOiB7W2tleTpzdHJpbmddOiBudW1iZXJ9ID0gT2JqZWN0LmZyb21FbnRyaWVzKCcwMTIzNDU2Nzg5QUJDREVGJy5zcGxpdCgnJykubWFwKCh2LCBpKSA9PiBbdiwgaV0pKTtcclxuXHRsZXQgZGVjID0gMDtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGhleC5sZW5ndGg7IGkgKyspe1xyXG5cdFx0Y29uc3QgdmFsOiBudW1iZXIgPSBoZXhfbWFwW2hleFtpXV07XHJcblx0XHRkZWMgPSBkZWMgKiAxNiArIHZhbDtcclxuXHR9XHJcblx0cmV0dXJuIGRlYztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBkZWNpbWFsIHRvIG9jdGFsXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfZGVjMm9jdCgxMjYpIC8vIDE3NlxyXG4gKiBfZGVjMm9jdCg1MTIpIC8vIDEwMDBcclxuICogXHJcbiAqIEBwYXJhbSBkZWNpbWFsIC0gcGFyc2UgZGVjaW1hbCBpbnRlZ2VyIGBudW1iZXJgXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIC0gb2N0YWwgdGV4dFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kZWMyb2N0ID0gKGRlY2ltYWw6IG51bWJlcik6IHN0cmluZyA9PiBfZGVjMmJhc2UoZGVjaW1hbCwgOCk7XHJcblxyXG4vKipcclxuICogUGFyc2Ugb2N0YWwgdG8gZGVjaW1hbFxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX29jdDJkZWMoJzBvMTc2JykgLy8gMTI2XHJcbiAqIF9vY3QyZGVjKCcxMDAwJykgLy8gNTEyXHJcbiAqIFxyXG4gKiBAcGFyYW0gb2N0YWwgLSBwYXJzZSBvY3RhbCB0ZXh0XHJcbiAqIEByZXR1cm5zIGBudW1iZXJ8dW5kZWZpbmVkYCB+IHBhcnNlZCBkZWNpbWFsIGludGVnZXIgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfb2N0MmRlYyA9IChvY3RhbDogc3RyaW5nKTogbnVtYmVyfHVuZGVmaW5lZCA9PiB7XHJcblx0aWYgKCEoJ3N0cmluZycgPT09IHR5cGVvZiBvY3RhbCAmJiAvXlswLTddKyQvLnRlc3Qob2N0YWwgPSBvY3RhbC5yZXBsYWNlKC8wby9pZywgJycpLnJlcGxhY2UoL1xccy9nLCAnJykudG9VcHBlckNhc2UoKSkpKSByZXR1cm4gdW5kZWZpbmVkOyAvLy0tIGludmFsaWQgb2N0YWwgdGV4dFxyXG5cdGxldCBkZWMgPSAwO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgb2N0YWwubGVuZ3RoOyBpICsrKXtcclxuXHRcdGNvbnN0IHZhbCA9IChvY3RhbFtpXSBhcyBhbnkpIC0gMDtcclxuXHRcdGRlYyA9IGRlYyAqIDggKyB2YWw7XHJcblx0fVxyXG5cdHJldHVybiBkZWM7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgdGV4dCBmcm9tIGJhc2UgdG8gZGVjaW1hbFxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX2Jhc2UyZGVjKCcwMTExIDExMTAnLCAyKSAvLyAxMjZcclxuICogX2Jhc2UyZGVjKCcwbzE3NicsIDgpIC8vIDEyNlxyXG4gKiBfYmFzZTJkZWMoJzB4N0UnLCAxNikgLy8gMTI2XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB0ZXh0XHJcbiAqIEBwYXJhbSBiYXNlIC0gZnJvbSBiYXNlIChkZWZhdWx0OiBgMmApIH4gYDJgID0gYmluYXJ5LCBgOGAgLSBvY3RhbCwgYDE2YCAtIGhleGFkZWNpbWFsXHJcbiAqIEByZXR1cm5zIGBudW1iZXJ8dW5kZWZpbmVkYCB+IHBhcnNlZCBkZWNpbWFsIGludGVnZXIgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYmFzZTJkZWMgPSAodmFsdWU6IHN0cmluZywgYmFzZTogMnw4fDE2ID0gMik6IG51bWJlcnx1bmRlZmluZWQgPT4ge1xyXG5cdGJhc2UgPSBbMiwgOCwgMTZdLmluY2x1ZGVzKGJhc2UgPSBfcG9zSW50KGJhc2UsIDIpID8/IDIgYXMgYW55KSA/IGJhc2UgOiAyO1xyXG5cdGlmIChiYXNlID09PSAyKSByZXR1cm4gX2JpbjJkZWModmFsdWUpO1xyXG5cdGVsc2UgaWYgKGJhc2UgPT09IDgpIHJldHVybiBfb2N0MmRlYyh2YWx1ZSk7XHJcblx0cmV0dXJuIF9oZXgyZGVjKHZhbHVlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IGRlZ3JlZSB0byBbcmFkaWFuXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SYWRpYW4pXHJcbiAqIC0gYDLPgCByYWQgPSAzNjDCsGAg4oi0IGByYWRpYW4gPSBkZWdyZWUgKiDPgC8xODBgXHJcbiAqIFxyXG4gKiBAcGFyYW0gZGVncmVlcyAtIGFuZ2xlIGluIGRlZ3JlZXMgKGkuZS4gMCAtIDM2MMKwKVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCAtIHJhZGlhblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kZWcycmFkID0gKGRlZ3JlZXM6IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0aWYgKGlzTmFOKGRlZ3JlZXMgPSBfbnVtKGRlZ3JlZXMpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9kZWcycmFkIGBkZWdyZWVzYCBhcmd1bWVudCBpcyBub3QgYSB2YWxpZCBhbmdsZSBudW1iZXIgdmFsdWUuJyk7XHJcblx0cmV0dXJuIGRlZ3JlZXMgKiAoTWF0aC5QSSAvIDE4MCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCByYWRpYW4gdG8gW2RlZ3JlZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGVncmVlXyhhbmdsZSkpXHJcbiAqIC0gYDLPgCByYWQgPSAzNjDCsGAg4oi0IGByYWRpYW4gPSBkZWdyZWUgKiDPgC8xODBgXHJcbiAqIFxyXG4gKiBAcGFyYW0gcmFkaWFucyAtIGFuZ2xlIGluIHJhZGlhbnMgKGkuZS4gMCAtIDM2MMKwKVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCAtIGRlZ3JlZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9yYWQyZGVnID0gKHJhZGlhbnM6IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0aWYgKGlzTmFOKHJhZGlhbnMgPSBfbnVtKHJhZGlhbnMpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9yYWQyZGVnIGByYWRpYW5zYCBhcmd1bWVudCBpcyBub3QgYSB2YWxpZCBhbmdsZSBudW1iZXIgdmFsdWUuJyk7XHJcblx0cmV0dXJuIHJhZGlhbnMgKiAoMTgwIC8gTWF0aC5QSSk7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGRpc3RhbmNlIGluIG1ldGVycyBiZXR3ZWVuIHR3byBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGNvb3JkaW5hdGVzXHJcbiAqIFxyXG4gKiBAcGFyYW0gbGF0aXR1ZGUxIC0gZmlyc3QgY29vcmRpbmF0ZSBsYXRpdHVkZSBgbnVtYmVyYFxyXG4gKiBAcGFyYW0gbG9uZ2l0dWRlMSAtIGZpcnN0IGNvb3JkaW5hdGUgbG9uZ2l0dWRlIGBudW1iZXJgXHJcbiAqIEBwYXJhbSBsYXRpdHVkZTIgLSBzZWNvbmQgY29vcmRpbmF0ZSBsYXRpdHVkZSBgbnVtYmVyYFxyXG4gKiBAcGFyYW0gbG9uZ2l0dWRlMiAtIHNlY29uZCBjb29yZGluYXRlIGxvbmdpdHVkZSBgbnVtYmVyYFxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCBgbWAgZGlzdGFuY2VcclxuICogQHRocm93cyBgVHlwZUVycm9yYCB3aGVuIGNvb3JpbmF0ZSBhcmd1bWVudCB2YWx1ZSBpcyBgTmFOYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kaXN0YW5jZSA9IChsYXRpdHVkZTE6IG51bWJlciwgbG9uZ2l0dWRlMTogbnVtYmVyLCBsYXRpdHVkZTI6IG51bWJlciwgbG9uZ2l0dWRlMjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoaXNOYU4obGF0aXR1ZGUxID0gX251bShsYXRpdHVkZTEpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9sYXRMb25EaXN0YW5jZSBgbGF0aXR1ZGUxYCBhcmd1bWVudCBpcyBub3QgYSB2YWxpZCBsYXRpdHVkZSBudW1iZXIgdmFsdWUuJyk7XHJcblx0aWYgKGlzTmFOKGxvbmdpdHVkZTEgPSBfbnVtKGxvbmdpdHVkZTEpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9sYXRMb25EaXN0YW5jZSBgbG9uZ2l0dWRlMWAgYXJndW1lbnQgaXMgbm90IGEgdmFsaWQgbG9uZ2l0dWRlIG51bWJlciB2YWx1ZS4nKTtcclxuXHRpZiAoaXNOYU4obGF0aXR1ZGUyID0gX251bShsYXRpdHVkZTIpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9sYXRMb25EaXN0YW5jZSBgbGF0aXR1ZGUyYCBhcmd1bWVudCBpcyBub3QgYSB2YWxpZCBsYXRpdHVkZSBudW1iZXIgdmFsdWUuJyk7XHJcblx0aWYgKGlzTmFOKGxvbmdpdHVkZTIgPSBfbnVtKGxvbmdpdHVkZTIpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9sYXRMb25EaXN0YW5jZSBgbG9uZ2l0dWRlMmAgYXJndW1lbnQgaXMgbm90IGEgdmFsaWQgbG9uZ2l0dWRlIG51bWJlciB2YWx1ZS4nKTtcclxuXHQvLyBjb25zdCBSID0gNjM3MWUzOyAvLyBFYXJ0aCByYWRpdXMgaW4gbWV0ZXJzXHJcblx0Y29uc3QgUiA9IDYuMzc4ZSs2OyAvLyBFYXJ0aCByYWRpdXMgaW4gbWV0ZXJzXHJcblx0Y29uc3Qgz4YxID0gbGF0aXR1ZGUxICogTWF0aC5QSSAvIDE4MDsgLy8gz4YsIM67IGluIHJhZGlhbnNcclxuXHRjb25zdCDPhjIgPSBsYXRpdHVkZTIgKiBNYXRoLlBJIC8gMTgwO1xyXG5cdGNvbnN0IM6Uz4YgPSAobGF0aXR1ZGUyIC0gbGF0aXR1ZGUxKSAqIE1hdGguUEkgLyAxODA7XHJcblx0Y29uc3QgzpTOuyA9IChsb25naXR1ZGUyIC0gbG9uZ2l0dWRlMSkgKiBNYXRoLlBJIC8gMTgwO1xyXG5cdGNvbnN0IGEgPSBNYXRoLnNpbijOlM+GIC8gMikgKiBNYXRoLnNpbijOlM+GIC8gMikgK1xyXG5cdFx0XHRcdFx0XHRNYXRoLmNvcyjPhjEpICogTWF0aC5jb3Moz4YyKSAqXHJcblx0XHRcdFx0XHRcdE1hdGguc2luKM6UzrsgLyAyKSAqIE1hdGguc2luKM6UzrsgLyAyKTsgLy8gc3F1YXJlIG9mIGhhbGYgdGhlIGNob3JkIGxlbmd0aCBiZXR3ZWVuIHRoZSBwb2ludHMgdXNpbmcgdGhlIEhhdmVyc2luZSBmb3JtdWxhLlxyXG5cdGNvbnN0IGMgPSAyICogTWF0aC5hdGFuMihNYXRoLnNxcnQoYSksIE1hdGguc3FydCgxIC0gYSkpOyAvLyBhbmd1bGFyIGRpc3RhbmNlIGluIHJhZGlhbnMuXHJcblx0cmV0dXJuIFIgKiBjOyAvLyBkaXN0YW5jZSBpbiBtZXRlcnNcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgbG9nYXJpdGhtIG9mIHZhbHVlIHdpdGggY3VzdG9tIGJhc2UgKGkuZS4gYGxvZ194ICogdmFsdWUgPSBsb2cgKiB2YWx1ZS9sb2cgKiBiYXNlYClcclxuICogLSBwb3dlciBvZiBiYXNlIGluIHZhbHVlXHJcbiAqIFxyXG4gKiBAcGFyYW0gYmFzZSAtIGxvZyBiYXNlXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIGxvZyB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCBhcHByb3hpbWF0dGVkIGZsb2F0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2xvZ3ggPSAoYmFzZTogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoaXNOYU4oYmFzZSA9IF9udW0oYmFzZSkpKSByZXR1cm4gTmFOO1xyXG5cdGlmIChpc05hTih2YWx1ZSA9IF9udW0odmFsdWUpKSkgcmV0dXJuIE5hTjtcclxuXHRyZXR1cm4gTWF0aC5sb2cyKHZhbHVlKSAvIE1hdGgubG9nMihiYXNlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgbnVtYmVyIGluIGBrYCAodGhvdXNhbmQpYCB0byBtYXggYFRgICh0cmlsbGlvbikgU0kgU3ltYm9sIHZhbHVlIGdyb3VwXHJcbiAqIC0gYCdrJ2AgVGhvdXNhbmRcclxuICogLSBgJ00nYCBNaWxsaW9uXHJcbiAqIC0gYCdCJ2AgQmlsbGlvblxyXG4gKiAtIGAnVCdgIFRyaWxsaW9uXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBudW1iZXJcclxuICogQHBhcmFtIHBsYWNlcyAtIGRlY2ltYWwgcGxhY2VzICgwIC0gMylcclxuICogQHJldHVybnMgYHN0cmluZ2AgbnVtYmVyIHRleHRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfbnVtayA9ICh2YWx1ZTogbnVtYmVyLCBwbGFjZXM6IG51bWJlciA9IDEpOiBzdHJpbmcgPT4ge1xyXG5cdGlmIChpc05hTih2YWx1ZSA9IF9udW0odmFsdWUpKSkgcmV0dXJuIE5hTi50b1N0cmluZygpO1xyXG5cdGlmICghdmFsdWUpIHJldHVybiAnMCc7XHJcblx0cGxhY2VzID0gX3Bvc0ludChwbGFjZXMsIDAsIDMsIHRydWUpID8/IDE7XHJcblx0Y29uc3QgazogbnVtYmVyID0gMWUzLCB1bml0czogc3RyaW5nW10gPSBbJycsICdrJywgJ00nLCAnQicsICdUJ10sIG1heF9wb3c6IG51bWJlciA9IHVuaXRzLmxlbmd0aCAtIDE7XHJcblx0Y29uc3Qgbjogc3RyaW5nID0gdmFsdWUgPCAwID8gJy0nIDogJycsIHBvdzogbnVtYmVyID0gTWF0aC5mbG9vcihfbG9neChrLCB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKSkpO1xyXG5cdGNvbnN0IGk6IG51bWJlciA9IE1hdGgubWluKHBvdywgbWF4X3BvdyksIHVuaXQ6IHN0cmluZyA9IHVuaXRzW2ldO1xyXG5cdGxldCB2YWw6IG51bWJlciA9IF9yb3VuZCh2YWx1ZS8oayoqaSksIHBsYWNlcyk7XHJcblx0bGV0IHRleHQ6IHN0cmluZyA9IGAke259JHt2YWx9JHt1bml0fWA7XHJcblx0aWYgKHBvdyA+IG1heF9wb3cpe1xyXG5cdFx0Y29uc3QgZTogbnVtYmVyID0gTWF0aC5mbG9vcihNYXRoLmxvZzEwKHZhbCkpO1xyXG5cdFx0dmFsID0gX3JvdW5kKHZhbC8oMTAqKmUpLCBwbGFjZXMpO1xyXG5cdFx0dGV4dCA9IGAke259JHt2YWx9ZSR7ZX0ke3VuaXR9YDtcclxuXHR9XHJcblx0cmV0dXJuIHRleHQ7XHJcbn07IiwiaW1wb3J0IHsgYm9vbCB9IGZyb20gJy4uL3R5cGVzJztcclxuaW1wb3J0IHsgX2pzb25Db3B5LCBfanNvblBhcnNlLCBfanNvblN0cmluZ2lmeSB9IGZyb20gJy4vX2pzb24nO1xyXG5pbXBvcnQgeyBfaW50LCBfbnVtLCBfcG9zSW50IH0gZnJvbSAnLi9fbnVtYmVyJztcclxuaW1wb3J0IHsgX2Vycm9yVGV4dCwgX3N0ciwgX3N0cmluZywgX3N0cmluZ2FibGUsIF90ZXh0TWF4TGVuZ3RoLCBfd3JhcExpbmVzIH0gZnJvbSAnLi9fc3RyaW5nJztcclxuaW1wb3J0IHsgX2lzQnVmZmVyIH0gZnJvbSAnLi4vM3JkLXBhcnR5JztcclxuXHJcbi8qKlxyXG4gKiBHZXQgYWxsIHByb3BlcnR5IGRlc2NyaXB0b3JzXHJcbiAqIC0gQVBJIHJlZjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2RlZmluZVByb3BlcnR5XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZSBvYmplY3RcclxuICogQHJldHVybnMgYHtba2V5OiBzdHJpbmd8bnVtYmVyfHN5bWJvbF06IGFueX1gIH4ge3Byb3BlcnR5ID0+IGRlc2NyaXB0b3JzfSBvYmplY3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZ2V0QWxsUHJvcGVydHlEZXNjcmlwdG9ycyA9ICh2YWx1ZTogYW55KToge1trZXk6IHN0cmluZ3xudW1iZXJ8c3ltYm9sXTogYW55fSA9PiB7XHJcblx0aWYgKFtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKHZhbHVlKSkgcmV0dXJuIHt9O1xyXG5cdGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcclxuXHRyZXR1cm4gey4uLl9nZXRBbGxQcm9wZXJ0eURlc2NyaXB0b3JzKHByb3RvKSwgLi4uT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModmFsdWUpfTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYWxsIHZhbHVlIHByb3BlcnRpZXNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlIG9iamVjdFxyXG4gKiBAcGFyYW0gc3RhdGljcyAtIGluY2x1ZGUgYHN0YXRpY2AgY2xhc3MgcHJvcGVydGllc1xyXG4gKiBAcmV0dXJucyBgKHN0cmluZ3xudW1iZXJ8c3ltYm9sKVtdYCAtIGZvdW5kIG93bi9wcm90b3R5cGUvc3ltYm9sIHByb3BlcnRpZXMgfCBgW11gIHdoZW4gbm9uZSBmb3VuZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9nZXRBbGxQcm9wZXJ0aWVzID0gKHZhbHVlOiBhbnksIHN0YXRpY3M6IGJvb2xlYW4gPSBmYWxzZSk6IChzdHJpbmd8bnVtYmVyfHN5bWJvbClbXSA9PiB7XHJcblx0aWYgKFtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKHZhbHVlKSkgcmV0dXJuIFtdOyAvL2lnbm9yZSBudWxsL3VuZGVmaW5lZFxyXG5cdGNvbnN0IHByb3BzID0gbmV3IFNldDxzdHJpbmd8bnVtYmVyfHN5bWJvbD4oKTsgLy9wcm9wZXJpZXNcclxuXHJcblx0Ly9hZGQgb3duIHByb3BlcnR5IG5hbWVzXHJcblx0Zm9yIChjb25zdCB2IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKSkgcHJvcHMuYWRkKHYpOyAvL293blxyXG5cdFxyXG5cdC8vZm4gPT4gZ2V0IGtleXMgaGVscGVyXHJcblx0Y29uc3QgX19nZXRfa2V5cyA9IChvYmo6IGFueSk6IChzdHJpbmd8bnVtYmVyfHN5bWJvbClbXSA9PiB7XHJcblx0XHRjb25zdCBrZXlzOiAoc3RyaW5nfG51bWJlcnxzeW1ib2wpW10gPSBbXTtcclxuXHRcdGZvciAobGV0IGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xyXG5cdFx0cmV0dXJuIGtleXM7XHJcblx0fTtcclxuXHJcblx0Ly9mbiA9PiBnZXQgcHJvcGVydGllcyBoZWxwZXJcclxuXHRjb25zdCBfX2dldF9wcm9wcyA9ICh2YWw6IGFueSk6IChzdHJpbmd8bnVtYmVyfHN5bWJvbClbXSA9PiBfX2dldF9rZXlzKF9nZXRBbGxQcm9wZXJ0eURlc2NyaXB0b3JzKHZhbCkpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHZhbCkpO1xyXG5cclxuXHQvL2V4Y2x1ZGVkIGRlZmF1bHQgcHJvcHNcclxuXHRjb25zdCBleGNsdWRlZF9wcm9wczogKHN0cmluZ3xudW1iZXJ8c3ltYm9sKVtdID0gWy4uLm5ldyBTZXQoW1xyXG5cdFx0XHJcblx0XHQvL0Z1bmN0aW9uXHJcblx0XHQuLi5fX2dldF9wcm9wcyhGdW5jdGlvbi5wcm90b3R5cGUpLFxyXG5cdFx0Li4uKCFzdGF0aWNzID8gW10gOiBfX2dldF9wcm9wcyhGdW5jdGlvbikpLFxyXG5cclxuXHRcdC8vT2JqZWN0XHJcblx0XHQuLi5fX2dldF9wcm9wcyhPYmplY3QucHJvdG90eXBlKSxcclxuXHRcdC4uLighc3RhdGljcyA/IFtdIDogX19nZXRfcHJvcHMoT2JqZWN0KSksXHJcblx0XSldO1xyXG5cclxuXHQvL2ZuID0+IGFkZCBwcm9wcyBoZWxwZXJcclxuXHRjb25zdCBfX2FkZF9wcm9wcyA9ICh2YWw6IGFueSk6IHZvaWQgPT4ge1xyXG5cdFx0Zm9yIChjb25zdCB2IG9mIF9fZ2V0X3Byb3BzKHZhbCkpe1xyXG5cdFx0XHRpZiAoIWV4Y2x1ZGVkX3Byb3BzLmluY2x1ZGVzKHYpKSBwcm9wcy5hZGQodik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvL2FkZCBwcm9wc1xyXG5cdF9fYWRkX3Byb3BzKHZhbHVlKTtcclxuXHRpZiAoc3RhdGljcykgX19hZGRfcHJvcHMoT2JqZWN0KHZhbHVlKS5jb25zdHJ1Y3Rvcik7XHJcblxyXG5cdC8vcmVzdWx0XHJcblx0cmV0dXJuIFsuLi5wcm9wc107XHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdmFsdWUgaGFzIHByb3BlcnR5XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBgb2JqZWN0YCB2YWx1ZVxyXG4gKiBAcGFyYW0gcHJvcCAtIHByb3BlcnR5IG5hbWVcclxuICogQHBhcmFtIG93biAgW2RlZmF1bHQ6IGBmYWxzZWBdIEFzIG93biBwcm9wZXJ0eVxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaGFzUHJvcCA9ICh2YWx1ZTogYW55LCBwcm9wOiBhbnksIG93bjogYm9vbCA9IGZhbHNlKTogYm9vbGVhbiA9PiB7XHJcblx0aWYgKCEoJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSAmJiAhIXZhbHVlKSkgcmV0dXJuIGZhbHNlO1xyXG5cdHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHByb3ApIHx8IChvd24gPyBmYWxzZSA6IHByb3AgaW4gdmFsdWUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIG9iamVjdCBoYXMgcHJvcGVydGllc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgYG9iamVjdGAgdmFsdWVcclxuICogQHBhcmFtIHByb3BzIC0gcHJvcGVydHkgbmFtZXNcclxuICogQHJldHVybnMgYGJvb2xlYW5gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2hhc1Byb3BzID0gKHZhbHVlOiBhbnksIC4uLnByb3BzOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xyXG5cdGlmICghKCdvYmplY3QnID09PSB0eXBlb2YgdmFsdWUgJiYgISF2YWx1ZSkpIHJldHVybiBmYWxzZTtcclxuXHRpZiAoIXByb3BzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cdGZvciAoY29uc3Qga2V5IG9mIHByb3BzKXtcclxuXHRcdGlmICghX2hhc1Byb3AodmFsdWUsIGtleSkpIHJldHVybiBmYWxzZTtcclxuXHR9XHJcblx0cmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgb2JqZWN0IGhhcyBhbnkgb2YgdGhlIHByb3BlcnRpZXNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGBvYmplY3RgIHZhbHVlXHJcbiAqIEBwYXJhbSBwcm9wcyAtIHByb3BlcnR5IG5hbWVzXHJcbiAqIEByZXR1cm5zIGBmYWxzZXxhbnlbXWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaGFzQW55UHJvcHMgPSAodmFsdWU6IGFueSwgLi4ucHJvcHM6IGFueVtdKTogZmFsc2V8YW55W10gPT4ge1xyXG5cdGlmICghKCdvYmplY3QnID09PSB0eXBlb2YgdmFsdWUgJiYgISF2YWx1ZSkpIHJldHVybiBmYWxzZTtcclxuXHRpZiAoIXByb3BzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cdGNvbnN0IGZvdW5kOiBTZXQ8YW55PiA9IG5ldyBTZXQoKTtcclxuXHRmb3IgKGNvbnN0IGtleSBvZiBwcm9wcyl7XHJcblx0XHRpZiAoX2hhc1Byb3AodmFsdWUsIGtleSkpIGZvdW5kLmFkZChrZXkpO1xyXG5cdH1cclxuXHRyZXR1cm4gZm91bmQuc2l6ZSA/IFsuLi5mb3VuZF0gOiBmYWxzZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQcm9wZXJ0eSBpbnRlcmZhY2UgfiBzZWUgYF9nZXRQcm9wKClgXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElQcm9wZXJ0eSB7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBwcm9wZXJ0eSBtYXRjaFxyXG5cdCAqL1xyXG5cdG1hdGNoOiBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gZm91bmQgcHJvcGVydHlcclxuXHQgKi9cclxuXHRrZXk6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogLSBwcm9wZXJ0eSB2YWx1ZVxyXG5cdCAqL1xyXG5cdHZhbHVlOiBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gcHJvcGVydHkgZXhpc3RzIHN0YXRlXHJcblx0ICogLSBgMGAgPSBub3QgZm91bmRcclxuXHQgKiAtIGAxYCA9IG93biBwcm9wZXJ0eVxyXG5cdCAqIC0gYDJgID0gbm90IG93biBwcm9wZXJ0eVxyXG5cdCAqL1xyXG5cdGV4aXN0czogMHwxfDJ8ZmFsc2U7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdmFsdWUgcHJvcGVydHlcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcbiAqIEBwYXJhbSBtYXRjaCAtIG1hdGNoIHByb3BlcnR5XHJcbiAqIEBwYXJhbSBpZ25vcmVDYXNlIC0gd2hldGhlciB0byBpZ25vcmUgcHJvcGVydHkgbmFtZSBjYXNlXHJcbiAqIEBwYXJhbSBvd24gLSB3aGV0aGVyIHByb3BlcnR5IGlzIHZhbHVlJ3Mgb3duIH4gYHZhbHVlLmhhc093blByb3BlcnR5YFxyXG4gKiBAcmV0dXJucyBgSVByb3BlcnR5YCB+IGB7ZXhpc3RzOmJvb2xlYW47IG5hbWU6c3RyaW5nOyB2YWx1ZTphbnk7fWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZ2V0UHJvcCA9ICh2YWx1ZTogYW55LCBtYXRjaDogYW55LCBpZ25vcmVDYXNlOiBib29sID0gZmFsc2UpOiBJUHJvcGVydHkgPT4ge1xyXG5cdGNvbnN0IHByb3BlcnR5OiBJUHJvcGVydHkgPSB7XHJcblx0XHRtYXRjaCxcclxuXHRcdGtleTogdW5kZWZpbmVkLFxyXG5cdFx0dmFsdWU6IHVuZGVmaW5lZCxcclxuXHRcdGV4aXN0czogMCxcclxuXHR9O1xyXG5cdGNvbnN0IHByb3BzID0gX2dldEFsbFByb3BlcnRpZXModmFsdWUsIGZhbHNlKTtcclxuXHRpZiAocHJvcHMuaW5jbHVkZXMobWF0Y2gpKXtcclxuXHRcdHByb3BlcnR5LmtleSA9IG1hdGNoO1xyXG5cdFx0cHJvcGVydHkudmFsdWUgPSB2YWx1ZVttYXRjaF07XHJcblx0XHRwcm9wZXJ0eS5leGlzdHMgPSB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShtYXRjaCkgPyAxIDogMjtcclxuXHRcdHJldHVybiBwcm9wZXJ0eTtcclxuXHR9XHJcblx0Y29uc3QgdGV4dF9tYXRjaCA9IF9zdHJpbmdhYmxlKG1hdGNoKTtcclxuXHRpZiAodGV4dF9tYXRjaCAhPT0gZmFsc2Upe1xyXG5cdFx0aWYgKHByb3BzLmluY2x1ZGVzKG1hdGNoID0gdGV4dF9tYXRjaCkpe1xyXG5cdFx0XHRwcm9wZXJ0eS5rZXkgPSBtYXRjaDtcclxuXHRcdFx0cHJvcGVydHkudmFsdWUgPSB2YWx1ZVttYXRjaF07XHJcblx0XHRcdHByb3BlcnR5LmV4aXN0cyA9IHZhbHVlLmhhc093blByb3BlcnR5KG1hdGNoKSA/IDEgOiAyO1xyXG5cdFx0XHRyZXR1cm4gcHJvcGVydHk7XHJcblx0XHR9XHJcblx0XHRpZiAoaWdub3JlQ2FzZSl7XHJcblx0XHRcdGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcyl7XHJcblx0XHRcdFx0Y29uc3Qga2V5ID0gX3N0cmluZ2FibGUocHJvcCk7XHJcblx0XHRcdFx0aWYgKGtleSA9PT0gZmFsc2UpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gbWF0Y2gudG9Mb3dlckNhc2UoKSl7XHJcblx0XHRcdFx0XHRwcm9wZXJ0eS5rZXkgPSBrZXk7XHJcblx0XHRcdFx0XHRwcm9wZXJ0eS52YWx1ZSA9IHZhbHVlW2tleV07XHJcblx0XHRcdFx0XHRwcm9wZXJ0eS5leGlzdHMgPSB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShtYXRjaCkgPyAxIDogMjtcclxuXHRcdFx0XHRcdHJldHVybiBwcm9wZXJ0eTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIHByb3BlcnR5O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHZhbHVlIGlzIGEgY2xhc3MgZnVuY3Rpb25cclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2lzQ2xhc3MgPSAodmFsdWU6IGFueSk6IGJvb2xlYW4gPT4ge1xyXG5cdGlmICghKHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBGdW5jdGlvbikgfHwgdmFsdWUucHJvdG90eXBlID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHRpZiAoRnVuY3Rpb24ucHJvdG90eXBlICE9PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpKSByZXR1cm4gdHJ1ZTtcclxuXHRyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUucHJvdG90eXBlKS5sZW5ndGggPiAxO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHZhbHVlIGlzIGEgYGZ1bmN0aW9uYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIG9yQ2xhc3MgLSAoZGVmYXVsdDogYGZhbHNlYCkgaW5jbHVkZSBgY2xhc3NgIG9iamVjdHNcclxuICogQHJldHVybnMgYGJvb2xlYW5gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2lzRnVuYyA9ICh2YWx1ZTogYW55LCBvckNsYXNzOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuID0+IHtcclxuXHRyZXR1cm4gdmFsdWUgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHZhbHVlICYmIChvckNsYXNzID8gdHJ1ZSA6ICFfaXNDbGFzcyh2YWx1ZSkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBgW21pbiwgbWF4XWAgY29tcGFyZWQgYW5kIGFycmFuZ2VkIGluIG9yZGVyXHJcbiAqIC0gRXhhbXBsZTogYF9taW5NYXgoMjAsIDEwKWAgPT4gYFsxMCwgMjBdYFxyXG4gKiAtIEV4YW1wbGU6IGBfbWluTWF4KDAuMjMsIG51bGwpYCA9PiBgW251bGwsIDAuMjNdYFxyXG4gKiAgXHJcbiAqIEBwYXJhbSBhIC0gZmlyc3QgdmFsdWVcclxuICogQHBhcmFtIGIgLSBzZWNvbmQgdmFsdWVcclxuICogQHJldHVybnMgYFttaW4sIG1heF1gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX21pbk1heCA9IChhOiBhbnksIGI6IGFueSk6IFttaW46IGFueSwgbWF4OiBhbnldID0+IHtcclxuXHRsZXQgbWluOiBhbnkgPSBhLCBtYXg6IGFueSA9IGI7XHJcblx0aWYgKGEgPiBiKXtcclxuXHRcdG1pbiA9IGI7XHJcblx0XHRtYXggPSBhO1xyXG5cdH1cclxuXHRyZXR1cm4gW21pbiwgbWF4XTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBGbGF0dGVuIGBvYmplY3RgIHZhbHVlcyByZWN1cnNpdmVseSB0byBkb3QgcGF0aHNcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9kb3RGbGF0KHthOnt4OjF9LGI6e3k6Mix6Ols1LDZdfX0pIC8veydhLngnOjEsJ2IueSc6MiwnYi56LjAnOjUsJ2Iuei4xJzo2fVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgYG9iamVjdGAgdmFsdWVcclxuICogQHBhcmFtIG9taXQgLSBvbWl0IGVudHJ5IGtleXMvZG90IHBhdGhzXHJcbiAqIEByZXR1cm5zIGB7W2tleTogc3RyaW5nXTogYW55fWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZG90RmxhdCA9ICh2YWx1ZTogYW55LCBvbWl0OiBzdHJpbmdbXSA9IFtdKTp7W2tleTogc3RyaW5nXTogYW55fSA9PiB7XHJcblx0aWYgKCEodmFsdWUgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSkpIHJldHVybiB7fTtcclxuXHRjb25zdCBfZW50cmllczogW2tleTogc3RyaW5nLCB2YWw6IGFueV1bXSA9IFtdO1xyXG5cdGNvbnN0IF9hZGRFbnRyaWVzID0gKG9iajogYW55LCBfcF9rZXk6IHN0cmluZykgPT4ge1xyXG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBPYmplY3QuZW50cmllcyhvYmopKXtcclxuXHRcdFx0Y29uc3QgW2ssIHZdID0gZW50cnk7XHJcblx0XHRcdGNvbnN0IF9rZXkgPSBgJHsoX3Bfa2V5ID8gYCR7X3Bfa2V5fS5gIDogJycpfSR7a31gO1xyXG5cdFx0XHRpZiAob21pdCAmJiBBcnJheS5pc0FycmF5KG9taXQpICYmIG9taXQubGVuZ3RoICYmIChvbWl0LmluY2x1ZGVzKGAke2t9YCkgfHwgb21pdC5pbmNsdWRlcyhfa2V5KSkpIGNvbnRpbnVlO1xyXG5cdFx0XHRpZiAodiAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIHYpIF9hZGRFbnRyaWVzKHYsIF9rZXkpO1xyXG5cdFx0XHRlbHNlIF9lbnRyaWVzLnB1c2goW19rZXksIHZdKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cdF9hZGRFbnRyaWVzKHZhbHVlLCAnJyk7XHJcblx0cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhfZW50cmllcyk7XHJcbn07XHJcblxyXG4vKipcclxuICogVW5mbGF0dGVuIGRvdCBmbGF0dGVuZWQgYG9iamVjdGAgfiByZXZlcnNlIG9mIGBfZG90RmxhdGBcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9kb3RJbmZsYXRlKHsnYS54JzoxLCdiLnknOjIsJ2Iuei4wJzo1LCdiLnouMSc6Nn0pIC8ve2E6e3g6MX0sYjp7eToyLHo6WzUsNl19fVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWUgfiBge1tkb3RfcGF0aDogc3RyaW5nXTogYW55fWBcclxuICogQHJldHVybnMgYHtba2V5OiBzdHJpbmddOiBhbnl9YCBwYXJzZWQgcmVzdWx0IHwgYHt9YCB3aGVuIHZhbHVlIGlzIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZG90SW5mbGF0ZSA9ICh2YWx1ZTogYW55KToge1trZXk6IHN0cmluZ106IGFueX0gPT4ge1xyXG5cdGNvbnN0IGVudHJpZXM6IFtzdHJpbmcsIGFueV1bXSA9IE9iamVjdC5lbnRyaWVzKF9kb3RGbGF0KHZhbHVlKSk7XHJcblx0Y29uc3QgYnVmZmVyOiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xyXG5cdGZvciAoY29uc3QgW3BhdGgsIHBhdGhfdmFsdWVdIG9mIGVudHJpZXMpe1xyXG5cdFx0Y29uc3Qga2V5cyA9IHBhdGguc3BsaXQoJy4nKTtcclxuXHRcdGlmIChrZXlzLmxlbmd0aCA9PT0gMSl7XHJcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbMF07XHJcblx0XHRcdGJ1ZmZlcltrZXldID0gcGF0aF92YWx1ZTtcclxuXHRcdFx0Y29udGludWU7XHJcblx0XHR9XHJcblx0XHRjb25zdCBpdGVtID0ga2V5cy5zbGljZSgpLnJldmVyc2UoKS5yZWR1Y2UoKHByZXYsIGtleSkgPT4gKHtba2V5XTogcHJldn0pLCBwYXRoX3ZhbHVlKTtcclxuXHRcdGxldCBrZXlzX2l0ZW06IGFueSA9IGl0ZW07XHJcblx0XHRsZXQga2V5c19idWZmZXI6IGFueSA9IGJ1ZmZlcjtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2ldO1xyXG5cdFx0XHRjb25zdCB2YWwgPSBrZXlzX2l0ZW0gPSBrZXlzX2l0ZW1ba2V5XTtcclxuXHRcdFx0aWYgKCFrZXlzX2J1ZmZlci5oYXNPd25Qcm9wZXJ0eShrZXkpKSBrZXlzX2J1ZmZlcltrZXldID0gdmFsO1xyXG5cdFx0XHRrZXlzX2J1ZmZlciA9IGtleXNfYnVmZmVyW2tleV07XHJcblx0XHR9XHJcblx0fVxyXG5cdGNvbnN0IF9ub3JtID0gKHZhbDogYW55KTogYW55ID0+IHtcclxuXHRcdGlmIChPYmplY3QodmFsKSAhPT0gdmFsKSByZXR1cm4gdmFsO1xyXG5cdFx0bGV0IGtleXM6IGFueSwgbGVuID0gMDtcclxuXHRcdGlmICgobGVuID0gKGtleXMgPSBPYmplY3Qua2V5cyh2YWwpKS5sZW5ndGgpICYmIE9iamVjdC5rZXlzKFsuLi5BcnJheShsZW4pXSkuam9pbignLCcpID09PSBrZXlzLmpvaW4oJywnKSkgdmFsID0gT2JqZWN0LnZhbHVlcyh2YWwpO1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdmFsKSB2YWxba2V5XSA9IF9ub3JtKHZhbFtrZXldKTtcclxuXHRcdHJldHVybiB2YWw7XHJcblx0fTtcclxuXHRyZXR1cm4gX25vcm0oYnVmZmVyKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgdmFsaWRhdGVkIG9iamVjdCBkb3QgcGF0aCAoaS5lLiBgJ2EuYi5jJ2AgdG8gcmVmZXIgdG8gYHthOntiOntjOjF9fX1gKVxyXG4gKiBcclxuICogQHBhcmFtIGRvdF9wYXRoIC0gZG90IHNlcGFyYXRlZCBrZXlzXHJcbiAqIEBwYXJhbSBvcGVyYXRpb25zIC0gc3VwcG9ydHMgb3BlcmF0aW9ucyAoaS5lLiAnIXJldmVyc2UnLychc2xpY2U9MCcpIH4gdGVzdHMgZG90IGtleXMgdXNpbmcgYC9eWy1fMC05YS16QS1aXStcXD0oW15cXD1cXC5dKikkL2AgaW5zdGVhZCBvZiBkZWZhdWx0IGAvXlstXzAtOWEtekEtWl0rJC9gXHJcbiAqIEBwYXJhbSBfZmFpbHVyZSAtIGBGYWlsRXJyb3JgIG1vZGUgfiBgMGAgPSBzaWxlbnQgKGRlZmF1bHQpIHwgYDFgID0gbG9ncyB3YXJuaW5nIHwgYDJgID0gbG9ncyBlcnJvciB8IGAzYCA9IHRocm93cyBlcnJvclxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB2YWxpZCBkb3QgcGF0aFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF92YWxpZERvdFBhdGggPSAoZG90X3BhdGg6IHN0cmluZywgb3BlcmF0aW9uczogYm9vbGVhbiA9IGZhbHNlLCBfZmFpbHVyZTogMHwxfDJ8MyA9IDApOiBzdHJpbmcgPT4ge1xyXG5cdHRyeSB7XHJcblx0XHRpZiAoIShkb3RfcGF0aCA9IF9zdHIoZG90X3BhdGgsIHRydWUpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBkb3QgcGF0aCB2YWx1ZS4nKTtcclxuXHRcdGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgdiBvZiBkb3RfcGF0aC5zcGxpdCgnLicpKXtcclxuXHRcdFx0aWYgKCEhKHYgPSB2LnRyaW0oKSkpIHBhcnRzLnB1c2godik7XHJcblx0XHR9XHJcblx0XHRpZiAoIXBhcnRzLmxlbmd0aCkgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBkb3QgcGF0aCBmb3JtYXQgXCIke2RvdF9wYXRofVwiLmApO1xyXG5cdFx0Y29uc3QgYnVmZmVyID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdGxldCBwYXJ0ID0gcGFydHNbaV07XHJcblx0XHRcdGxldCB2YWxpZDogYm9vbGVhbiA9IC9eWy1fMC05YS16QS1aXSskLy50ZXN0KHBhcnQpO1xyXG5cdFx0XHRpZiAoIXZhbGlkICYmIG9wZXJhdGlvbnMpe1xyXG5cdFx0XHRcdGlmIChbJyFyZXZlcnNlJywgJyFzbGljZSddLmluY2x1ZGVzKHBhcnQpKSB2YWxpZCA9IHRydWU7XHJcblx0XHRcdFx0ZWxzZSBpZiAocGFydC5pbmRleE9mKCc9JykgPiAtMSl7XHJcblx0XHRcdFx0XHRjb25zdCBfaW52YWxpZDogc3RyaW5nW10gPSBbXTtcclxuXHRcdFx0XHRcdGZvciAobGV0IHYgb2YgcGFydC5zcGxpdCgnLCcpKXtcclxuXHRcdFx0XHRcdFx0aWYgKCh2ID0gdi50cmltKCkpICYmICEvXlstXzAtOWEtekEtWl0rXFw9KFteXFw9XFwuXSopJC8udGVzdCh2KSkgX2ludmFsaWQucHVzaCh2KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICghX2ludmFsaWQubGVuZ3RoKSB2YWxpZCA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghdmFsaWQpIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgZG90IHBhdGgga2V5IFwiJHtwYXJ0fVwiLmApO1xyXG5cdFx0XHRidWZmZXIucHVzaChwYXJ0KTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBidWZmZXIuam9pbignLicpO1xyXG5cdH1cclxuXHRjYXRjaCAoZSl7XHJcblx0XHRuZXcgRmFpbEVycm9yKGUsIF9mYWlsdXJlLCB7ZG90X3BhdGgsIG9wZXJhdGlvbnN9KTtcclxuXHRcdHJldHVybiAnJztcclxuXHR9XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IHBhcnNlZCBgYm9vbGVhbmAgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcbiAqIEBwYXJhbSBzdHJpY3QgLSBzdHJpY3QgbW9kZSB+IHN1cHBvcnQgb25seSBgYm9vbGVhbi1saWtlYCB2YWx1ZSAoaS5lLiBgJ3RydWUnfCdmYWxzZSd8dHJ1ZXxmYWxzZXwxfDBgKSByZXR1cm5zIGB1bmRlZmluZWRgIGlmIHVuc3VwcG9ydGVkIHdoZW4gZW5hYmxlZC5cclxuICogQHBhcmFtIHRyaW0gLSB0cmltIGBzdHJpbmdgIHZhbHVlIChkZWZhdWx0IGB0cnVlYClcclxuICogQHJldHVybnNcclxuICogLSBgYm9vbGVhbmBcclxuICogLSBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWQgaWYgYHN0cmljdGAgaXMgZW5hYmxlZFxyXG4gKiAtIGAnZmFsc2UnID0+IGZhbHNlYCB8IGAhIXZhbHVlYCB3aGVuIHN0cmljdCBpcyBkaXNhYmxlZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9ib29sID0gKHZhbHVlOiBhbnksIHN0cmljdDogYm9vbGVhbiA9IGZhbHNlLCB0cmltOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW58dW5kZWZpbmVkID0+IHtcclxuXHRpZiAodHJpbSAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbHVlKSB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcclxuXHRpZiAoc3RyaWN0ICYmICFbJ3RydWUnLCAnZmFsc2UnLCB0cnVlLCBmYWxzZSwgMSwgMF0uaW5jbHVkZXModmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdHJldHVybiB2YWx1ZSA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDogISF2YWx1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXNvbHZlIGRvdCBwYXRoIG9iamVjdCB2YWx1ZSB+IHN1cHBvcnRzIGFycmF5IG9wZXJhdGlvbnMgY2hhaW5pbmdcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIFxyXG4gKiAvL3NpbXBsZSB1c2FnZVxyXG4gKiBfZG90R2V0KCd4Jywgeyd4JzoxfSkgPT4gMVxyXG4gKiBfZG90R2V0KCdhLmIuYycsIHsnYSc6eydiJzp7J2MnOjF9fX0pID0+IDFcclxuICogX2RvdEdldCgnYS5iLmQnLCB7J2EnOnsnYic6eydjJzoxfX19KSA9PiBudWxsXHJcbiAqIF9kb3RHZXQoJ2EuMCcsIHsnYSc6Wyd4JywneSddfSkgPT4gJ3gnXHJcbiAqIFxyXG4gKiAvL2FycmF5IHJldmVyc2Ugb3BlcmF0aW9uIChkb25lIHNsaWNlIGNvcHkpXHJcbiAqIF9kb3RHZXQoJzAuIXJldmVyc2UnLCBbWzMsMiwxXV0pID0+IFszLDIsMV1cclxuICogXHJcbiAqIC8vYXJyYXkgc2xpY2Ugb3BlcmF0aW9uXHJcbiAqIF9kb3RHZXQoJzAuIXNsaWNlJywgW1sxLDIsM11dKSA9PiBbMSwyLDNdXHJcbiAqIFxyXG4gKiAvL2FycmF5IHNsaWNlIG5lZ2F0aXZlIGAtbnVtYmVyYFxyXG4gKiBfZG90R2V0KCcwLi0yJywgW1sxLDIsM11dKSA9PiBbMiwzXVxyXG4gKiBcclxuICogLy9hcnJheSBga2V5PXZhbHVlYCBzZWFyY2hpbmdcclxuICogX2RvdEdldCgnMC5hPTInLCBbW3snYSc6MSwnYic6Mn0seydhJzoyLCdiJzozfV1dKSA9PiB7J2EnOjIsJ2InOjN9XHJcbiAqIF9kb3RHZXQoJzAuYT0xLGI9MicsIFtbeydhJzoxLCdiJzoyLCdjJzozfSx7J2EnOjIsJ2InOjMsJ2MnOjR9XV0pID0+IHsnYSc6MSwnYic6MiwnYyc6M31cclxuICogXHJcbiAqIEBwYXJhbSBwYXRoIC0gZG90IHNlcGFyYXRlZCBrZXlzIH4gb3B0aW9uYWwgYXJyYXkgb3BlcmF0aW9uc1xyXG4gKiBAcGFyYW0gdGFyZ2V0IC0gdHJhdmVyc2Ugb2JqZWN0XHJcbiAqIEBwYXJhbSBpZ25vcmVDYXNlIC0gd2hldGhlciB0byBpZ25vcmUgY2FzZSB3aGVuIG1hdGNoaW5nIGtleXMgKGRlZmF1bHQ6IGBmYWxzZWApXHJcbiAqIEBwYXJhbSBfZmFpbHVyZSAtIGBGYWlsRXJyb3JgIG1vZGUgfiBgMGAgPSBzaWxlbnQgKGRlZmF1bHQpIHwgYDFgID0gbG9ncyB3YXJuaW5nIHwgYDJgID0gbG9ncyBlcnJvciB8IGAzYCA9IHRocm93cyBlcnJvclxyXG4gKiBAcGFyYW0gX2RlZmF1bHQgLSBkZWZhdWx0IHJlc3VsdCBvbiBmYWlsdXJlXHJcbiAqIEByZXR1cm5zIGBhbnlgIGRvdCBwYXRoIG1hdGNoIHJlc3VsdFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kb3RHZXQgPSAocGF0aDogc3RyaW5nLCB0YXJnZXQ6IGFueSwgaWdub3JlQ2FzZTogYm9vbGVhbiA9IGZhbHNlLCBfZmFpbHVyZTogMHwxfDJ8MyA9IDAsIF9kZWZhdWx0PzogYW55KTogYW55ID0+IHtcclxuXHR0cnkge1xyXG5cdFx0Y29uc3Qga2V5cyA9IChwYXRoID0gX3ZhbGlkRG90UGF0aChwYXRoLCB0cnVlLCBfZmFpbHVyZSkpLnNwbGl0KCcuJyk7XHJcblx0XHRpZiAoIWtleXMubGVuZ3RoKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHJlc29sdmUgZG90IHBhdGggZm9ybWF0LicpO1xyXG5cdFx0bGV0IGFib3J0OiBib29sZWFuID0gZmFsc2UsIHZhbHVlOiBhbnkgPSBrZXlzLnJlZHVjZSgocHJldjogYW55LCBrZXk6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRpZiAoYWJvcnQpIHJldHVybiBwcmV2OyAvL25vdCBmb3VuZFxyXG5cdFx0XHRpZiAocHJldiAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIHByZXYpe1xyXG5cdFx0XHRcdGNvbnN0IHByb3AgPSBfZ2V0UHJvcChwcmV2LCBrZXksIGlnbm9yZUNhc2UpO1xyXG5cdFx0XHRcdGlmIChwcm9wLmV4aXN0cykgcmV0dXJuIHByb3AudmFsdWU7IC8va2V5IHZhbHVlXHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkocHJldikpe1xyXG5cdFx0XHRcdFx0aWYgKGtleSA9PT0gJyFyZXZlcnNlJykgcmV0dXJuIHByZXYuc2xpY2UoKS5yZXZlcnNlKCk7IC8vYXJyYXkgcmV2ZXJzZSAoc2xpY2UpXHJcblx0XHRcdFx0XHRpZiAoa2V5ID09PSAnIXNsaWNlJykgcmV0dXJuIHByZXYuc2xpY2UoKTsgLy9hcnJheSBzbGljZVxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHQvL2FycmF5IHNsaWNlIGAtbnVtYmVyYFxyXG5cdFx0XHRcdFx0bGV0IHRtcDogYW55O1xyXG5cdFx0XHRcdFx0aWYgKCh0bXAgPSBfbnVtKGtleSwgMCkpIDwgMCAmJiBOdW1iZXIuaXNJbnRlZ2VyKHRtcCkpIHJldHVybiBwcmV2LnNsaWNlKHRtcCk7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdC8vYXJyYXkgc2VhcmNoXHJcblx0XHRcdFx0XHRpZiAocHJldi5sZW5ndGggJiYga2V5LmluZGV4T2YoJz0nKSA+IC0xKXtcclxuXHRcdFx0XHRcdFx0Y29uc3Qgc2VhcmNoX2VudHJpZXM6IFtrZXk6IHN0cmluZywgdmFsOiBzdHJpbmddW10gPSBbXTtcclxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgdmFsIG9mIGtleS5zcGxpdCgnLCcpKXtcclxuXHRcdFx0XHRcdFx0XHRpZiAoISh2YWwgPSB2YWwudHJpbSgpKSkgY29udGludWU7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGFyciA9IHZhbC5zcGxpdCgnPScpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChhcnIubGVuZ3RoICE9PSAyKSByZXR1cm4gW107XHJcblx0XHRcdFx0XHRcdFx0bGV0IGsgPSBhcnJbMF0udHJpbSgpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KGFyclsxXSk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGspIHNlYXJjaF9lbnRyaWVzLnB1c2goW2ssIF9qc29uUGFyc2UodiwgdildKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRsZXQgaW5kZXggPSAtMTtcclxuXHRcdFx0XHRcdFx0aWYgKHNlYXJjaF9lbnRyaWVzLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2Lmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBlbnRyeSA9IHByZXZbaV07XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtYXRjaGVzOiBba2V5OiBzdHJpbmcsIHZhbDogc3RyaW5nXVtdID0gW107XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHYgb2Ygc2VhcmNoX2VudHJpZXMpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBwcm9wID0gX2dldFByb3AoZW50cnksIHZbMF0sIGlnbm9yZUNhc2UpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocHJvcC5leGlzdHMgJiYgcHJvcC52YWx1ZSA9PT0gdlsxXSkgbWF0Y2hlcy5wdXNoKHYpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKG1hdGNoZXMubGVuZ3RoICYmIG1hdGNoZXMubGVuZ3RoID09PSBzZWFyY2hfZW50cmllcy5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpbmRleCA9IGk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoaW5kZXggPiAtMSkgcmV0dXJuIHByZXZbaW5kZXhdO1xyXG5cdFx0XHRcdFx0XHRhYm9ydCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdFxyXG5cdFx0XHQvL25vdCBmb3VuZFxyXG5cdFx0XHRhYm9ydCA9IHRydWU7XHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHR9LCB0YXJnZXQpO1xyXG5cdFx0cmV0dXJuICFhYm9ydCA/IHZhbHVlIDogX2RlZmF1bHQ7XHJcblx0fVxyXG5cdGNhdGNoIChlKSB7XHJcblx0XHRuZXcgRmFpbEVycm9yKGUsIF9mYWlsdXJlLCB7cGF0aCwgdGFyZ2V0LCBpZ25vcmVDYXNlLCBfZGVmYXVsdH0sICdEb3RHZXRFcnJvcicpO1xyXG5cdFx0cmV0dXJuIF9kZWZhdWx0O1xyXG5cdH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZGVwcmVjYXRlZFxyXG4gKiBHZXQgY29lcmNlZCBgbnVtYmVyL3N0cmluZy9KU09OYCB2YWx1ZSB+IGB2YWx1ZS52YWx1ZU9mKClgXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgYW55YCB+IGBvYmplY3RgfGB1bmRlZmluZWRgfGBib29sZWFuYHxgbnVtYmVyYHxgYmlnaW50YHxgc3RyaW5nYHxgc3ltYm9sYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF92YWx1ZU9mID0gKHZhbHVlOiBhbnkpOiBhbnkgPT4ge1xyXG5cdGlmICghKHZhbHVlICYmICdvYmplY3QnID09PSB0eXBlb2YgdmFsdWUpKSByZXR1cm4gdmFsdWU7XHJcblx0bGV0IHZhbDogYW55ID0gdmFsdWUudmFsdWVPZigpO1xyXG5cdGlmICh2YWwgPT09IHZhbHVlKXtcclxuXHRcdGlmIChPYmplY3QodmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSkgPT09IHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gJiYgIWlzTmFOKHZhbCA9IE51bWJlcih2YWx1ZSkpKSByZXR1cm4gdmFsOyAvL2hpbnQgbnVtYmVyXHJcblx0XHRpZiAoKHZhbCA9IF9zdHJpbmdhYmxlKHZhbHVlKSkgIT09IGZhbHNlKSByZXR1cm4gdmFsOyAvL2hpbnQgc3RyaW5nIHwgdmFsdWUudG9TdHJpbmcoKVxyXG5cdFx0aWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiB2YWx1ZS50b0pTT04gJiYgKHZhbCA9IHZhbHVlLnRvSlNPTigpKSAhPT0gdmFsdWUpIHJldHVybiB2YWw7IC8vdmFsdWUudG9KU09OKClcclxuXHR9XHJcblx0cmV0dXJuIHZhbDsgLy92YWx1ZS52YWx1ZU9mKClcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBlbXB0eSB+IGBudWxsYC9gdW5kZWZpbmVkYC9gTmFOYC9gJydgL2B7fWAvYCFbLi4udmFsdWVdYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIHRyaW0gLSB0cmltIHdoaXRlc3BhY2UgfiB3aGVuIHZhbHVlIGlzIGBzdHJpbmcvQnVmZmVyYFxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZW1wdHkgPSAodmFsdWU6IGFueSwgdHJpbTogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiA9PiB7XHJcblx0aWYgKFtudWxsLCB1bmRlZmluZWQsIE5hTiwgJyddLmluY2x1ZGVzKHZhbHVlKSkgcmV0dXJuIHRydWU7IC8vZGVmYXVsdCBlbXB0eVxyXG5cdGlmIChbJ2Z1bmN0aW9uJywgJ2Jvb2xlYW4nLCAnbnVtYmVyJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKSkgcmV0dXJuIGZhbHNlOyAvL2Z1bmN0aW9uL2Jvb2xlYW4vbnVtYmVyIC0gaWdub3JlXHJcblx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUgfHwgX2lzQnVmZmVyKHZhbHVlKSkgcmV0dXJuICFfc3RyKHZhbHVlLCB0cmltKS5sZW5ndGg7IC8vc3RyaW5nL0J1ZmZlciAtICFsZW5ndGhcclxuXHRpZiAoJ29iamVjdCcgIT09IHR5cGVvZiB2YWx1ZSkgcmV0dXJuIGZhbHNlOyAvL25vbiBvYmplY3QgLSBpZ25vcmVcclxuXHRpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXAgfHwgdmFsdWUgaW5zdGFuY2VvZiBTZXQpIHJldHVybiAhdmFsdWUuc2l6ZTsgLy9NYXAvU2V0IC0gIXNpemVcclxuXHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiAhdmFsdWUubGVuZ3RoOyAvL0FycmF5IC0gIWxlbmd0aFxyXG5cdGlmIChPYmplY3QodmFsdWVbU3ltYm9sLml0ZXJhdG9yXSkgPT09IHZhbHVlW1N5bWJvbC5pdGVyYXRvcl0pIHJldHVybiAhWy4uLnZhbHVlXS5sZW5ndGg7IC8vdmFsdWVbU3ltYm9sLml0ZXJhdG9yXSAtICFsZW5ndGhcclxuXHRpZiAoIV9nZXRBbGxQcm9wZXJ0aWVzKHZhbHVlKS5sZW5ndGgpIHJldHVybiB0cnVlOyAvL2hhcyBubyBzZWxmIHByb3BlcnRpZXNcclxuXHRyZXR1cm4gZmFsc2U7IC8vaWdub3JlXHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdmFsdWUgY2FuIGJlIGl0ZXJhdGVkIH4gYFsuLi52YWx1ZV1gXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZVxyXG4gKiBAcGFyYW0gX2FzeW5jIC0gdXNpbmcgYFtTeW1ib2wuYXN5bmNJdGVyYXRvcl1gIChkZWZhdWx0IGBmYWxzZWAgfiBgW1N5bWJvbC5pdGVyYXRvcl1gKVxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaXRlcmFibGUgPSAodmFsdWU6IGFueSwgX2FzeW5jOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuID0+ICdmdW5jdGlvbicgPT09IHR5cGVvZiB2YWx1ZT8uW19hc3luYyA/IFN5bWJvbC5hc3luY0l0ZXJhdG9yIDogU3ltYm9sLml0ZXJhdG9yXTtcclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0ZSBgT2JqZWN0YCB2YWx1ZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIF9maWxsZWQgLSBtdXN0IG5vdCBiZSBlbXB0eSBge31gXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9pc09iamVjdCA9ICh2YWx1ZTogYW55LCBfZmlsbGVkOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuID0+ICEhdmFsdWUgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBPYmplY3QucHJvdG90eXBlICYmIChfZmlsbGVkID8gIV9lbXB0eSh2YWx1ZSkgOiB0cnVlKTtcclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0ZSB2YWx1ZXMgaXRlcmFibGUgYXJyYXkgbGlzdFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIF9tb2RlIC0gcGFyc2UgbW9kZVxyXG4gKiAtIGAwYCA9IChkZWZhdWx0KSBgW1N5bWJvbC5pdGVyYXRvcl0ubmFtZWAgaXMgJ3ZhbHVlcyd8J1tTeW1ib2wuaXRlcmF0b3JdJ1xyXG4gKiAtIGAxYCA9IGBBcnJheS5pc0FycmF5YFxyXG4gKiAtIGAyYCA9IGlzIGl0ZXJhYmxlIGBbU3ltYm9sLml0ZXJhdG9yXWBcclxuICogQHBhcmFtIF9maWxsZWQgLSBtdXN0IG5vdCBiZSBlbXB0eSBgW11gXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9pc0FycmF5ID0gKHZhbHVlOiBhbnksIF9maWxsZWQ6IGJvb2xlYW4gPSBmYWxzZSwgX21vZGU6IDB8MXwyID0gMCk6IGJvb2xlYW4gPT4ge1xyXG5cdF9tb2RlID0gWzAsIDEsIDJdLmluY2x1ZGVzKF9tb2RlID0gcGFyc2VJbnQoX21vZGUgYXMgYW55KSBhcyBhbnkpID8gX21vZGUgOiAwO1xyXG5cdGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpe1xyXG5cdFx0aWYgKF9tb2RlID09PSAxKSByZXR1cm4gZmFsc2U7XHJcblx0XHRjb25zdCBpdCA9IHZhbHVlPy5bU3ltYm9sLml0ZXJhdG9yXTtcclxuXHRcdGlmIChPYmplY3QoaXQpICE9PSBpdCkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0aWYgKF9tb2RlICE9PSAyICYmICFbJ3ZhbHVlcycsICdbU3ltYm9sLml0ZXJhdG9yXSddLmluY2x1ZGVzKGl0Lm5hbWUpKSByZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cdHRyeSB7XHJcblx0XHRjb25zdCBsZW4gPSB2YWx1ZS5sZW5ndGggPz8gWy4uLnZhbHVlXS5sZW5ndGg7XHJcblx0XHRpZiAoIShOdW1iZXIuaXNJbnRlZ2VyKGxlbikgJiYgbGVuID49IDApKSByZXR1cm4gZmFsc2U7XHJcblx0XHRyZXR1cm4gX2ZpbGxlZCA/ICEhbGVuIDogdHJ1ZTtcclxuXHR9XHJcblx0Y2F0Y2ggKGUpIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn07XHJcblxyXG4vKipcclxuICogT2JqZWN0IGFycmF5IHZhbHVlc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgYXJyYXkgdmFsdWVcclxuICogQHBhcmFtIGVudHJpZXMgLSBlbmFibGUgZ2V0IGVudHJpZXMgKGkuZS4gYFtrZXk6IGFueSwgdmFsdWU6IGFueV1bXWApIGluc3RlYWQgb2YgZGVmYXVsdCB2YWx1ZXMgKGkuZS4gYGFueVtdYClcclxuICogQHBhcmFtIG9iamVjdCAtIGVuYWJsZSBnZXQgYE9iamVjdC52YWx1ZXModmFsdWUpYC9gT2JqZWN0LmVudHJpZXModmFsdWUpYFxyXG4gKiBAcGFyYW0gZmxhdHRlbiAtIGZsYXR0ZW4gZGVwdGggfiBgQXJyYXkuZmxhdGAgZGVwdGggKGFsaWFzOiBgLTFgID0+IGBBcnJheS5mbGF0KEluZmluaXR5KWAsIGB0cnVlfG51bGxgID0+IGBBcnJheS5mbGF0KClgKVxyXG4gKiBAcmV0dXJuc1xyXG4gKiAtIGBhbnlbXWAgdmFsdWVzIG9yIGBba2V5OiBhbnksIHZhbHVlOiBhbnldW11gIHdoZW4gYGVudHJpZXNgIGFyZ3VtZW50IGlzIGB0cnVlYFxyXG4gKiAtIGBbdmFsdWVdYCB3aGVuIGB2YWx1ZWAgYXJndW1lbnQgaXMgbm90IGl0ZXJhYmxlIG9yIGFycmF5YWJsZVxyXG4gKiAtIGBbXWAgd2hlbiBgdmFsdWVgIGFyZ3VtZW50IGlzIGVtcHR5IH4gYFtdYC9ge31gL2B1bmRlZmluZWRgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3ZhbHVlcyA9ICh2YWx1ZTogYW55LCBlbnRyaWVzOiBib29sZWFuID0gZmFsc2UsIG9iamVjdDogYm9vbGVhbiA9IGZhbHNlLCBmbGF0dGVuPzogbnVtYmVyfGJvb2xlYW58bnVsbCk6IGFueVtdID0+IHtcclxuXHRsZXQgaXRlbXM6IGFueVtdID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IFtdIDogZW50cmllcyA/IFtbJzAnLCB2YWx1ZV1dIDogW3ZhbHVlXTtcclxuXHRpZiAodmFsdWUgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSAmJiAnZnVuY3Rpb24nICE9PSB0eXBlb2YgdmFsdWUpe1xyXG5cdFx0aWYgKE9iamVjdCh2YWx1ZVtTeW1ib2wuaXRlcmF0b3JdKSA9PT0gdmFsdWVbU3ltYm9sLml0ZXJhdG9yXSl7XHJcblx0XHRcdGNvbnN0IGhhc19lbnRyaWVzID0gKGl0ZW1zID0gWy4uLnZhbHVlXSkubGVuZ3RoICYmIGl0ZW1zLmZpbmRJbmRleCh2ID0+ICEoQXJyYXkuaXNBcnJheSh2KSAmJiB2Lmxlbmd0aCA9PT0gMiAmJiBPYmplY3Qua2V5cyh2KSArICcnID09PSAnMCwxJykpIDwgMDtcclxuXHRcdFx0aWYgKGVudHJpZXMpIGl0ZW1zID0gaGFzX2VudHJpZXMgPyBpdGVtcyA6IE9iamVjdC5lbnRyaWVzKGl0ZW1zKTtcclxuXHRcdFx0ZWxzZSBpZiAoaGFzX2VudHJpZXMpe1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlczogYW55W10gPSBbXTtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IHYgb2YgaXRlbXMpIHZhbHVlcy5wdXNoKHZbMV0pO1xyXG5cdFx0XHRcdGl0ZW1zID0gdmFsdWVzO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmIChvYmplY3Qpe1xyXG5cdFx0XHRjb25zdCBhcnIgPSBPYmplY3QuZW50cmllcyh2YWx1ZSk7XHJcblx0XHRcdGlmIChhcnIubGVuZ3RoIHx8IChfZW1wdHkodmFsdWUpICYmIF9pc09iamVjdCh2YWx1ZSkpKXtcclxuXHRcdFx0XHRpZiAoIWVudHJpZXMgJiYgYXJyLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZXM6IGFueVtdID0gW107XHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHYgb2YgYXJyKSB2YWx1ZXMucHVzaCh2WzFdKTtcclxuXHRcdFx0XHRcdGl0ZW1zID0gdmFsdWVzOyBcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBpdGVtcyA9IGFycjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZiAoX2VtcHR5KHZhbHVlKSAmJiBfaXNPYmplY3QodmFsdWUpKSBpdGVtcyA9IFtdOyAvL3t9XHJcblx0fVxyXG5cdGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGZsYXR0ZW4pe1xyXG5cdFx0bGV0IGRlcHRoOiBhbnkgPSBmbGF0dGVuO1xyXG5cdFx0aWYgKGZsYXR0ZW4gPT09IC0xKSBkZXB0aCA9IEluZmluaXR5O1xyXG5cdFx0ZWxzZSBpZiAoW251bGwsIHRydWVdLmluY2x1ZGVzKGRlcHRoKSkgZGVwdGggPSB1bmRlZmluZWQ7XHJcblx0XHRpdGVtcyA9IGl0ZW1zLmZsYXQoZGVwdGgpO1xyXG5cdH1cclxuXHRyZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGR1bXAgdmFsdWUgd2l0aCBsaW1pdCBtYXggc3RyaW5nIGxlbmd0aFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIG1heFN0ckxlbmd0aCAtIG1heCBzdHJpbmcgbGVuZ3RoIFtkZWZhdWx0OiBgMjAwYF1cclxuICogQHBhcmFtIGZpcnN0IC0gc3VtbWFyaXplIG9iamVjdCBhcnJheSB0byBjb3VudCBhbmQgZmlyc3QgZW50cnkgKGkuZS4gYHtjb3VudDpudW1iZXIsZmlyc3Q6YW55fWApIFxyXG4gKiBAcmV0dXJucyBgYW55YCAtIGR1bXAgdmFsdWVcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZHVtcFZhbCA9ICh2YWx1ZTogYW55LCBtYXhTdHJMZW5ndGg6IG51bWJlciA9IDIwMCwgZmlyc3Q6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSA9PiB7XHJcblx0Y29uc3QgbWluU3RyTGVuZ3RoID0gMjA7XHJcblx0dmFsdWUgPSBfanNvbkNvcHkodmFsdWUpO1xyXG5cdG1heFN0ckxlbmd0aCA9ICEobWF4U3RyTGVuZ3RoID0gX2ludChtYXhTdHJMZW5ndGgsIDIwMCkpID8gMCA6IChtYXhTdHJMZW5ndGggPj0gbWluU3RyTGVuZ3RoID8gbWF4U3RyTGVuZ3RoIDogMjAwKTtcclxuXHRjb25zdCBfbWF4U3RyID0gKHY6IGFueSk6IGFueSA9PiB7XHJcblx0XHRpZiAoISgnc3RyaW5nJyA9PT0gdHlwZW9mIHYgJiYgdi5sZW5ndGggPiBtYXhTdHJMZW5ndGgpKSByZXR1cm4gdjtcclxuXHRcdGNvbnN0IGFwcGVuZCA9IGAuLi4oJHt2Lmxlbmd0aH0pYDtcclxuXHRcdHJldHVybiB2LnN1YnN0cmluZygwLCBtYXhTdHJMZW5ndGggLSBhcHBlbmQubGVuZ3RoKSArIGFwcGVuZDtcclxuXHR9O1xyXG5cdGNvbnN0IF9nZXRfZmlyc3QgPSAodmFsOiBhbnkpOiBhbnkgPT4ge1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsKSl7XHJcblx0XHRcdGxldCBzYW1lX2tleXMgPSAxLCBwcmV2X2tleXMgPSAnJztcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0XHRjb25zdCB2ID0gdmFsW2ldO1xyXG5cdFx0XHRcdGlmIChPYmplY3QodikgIT09IHYpe1xyXG5cdFx0XHRcdFx0c2FtZV9rZXlzID0gMDtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXModik7XHJcblx0XHRcdFx0aWYgKGtleXMubGVuZ3RoKXtcclxuXHRcdFx0XHRcdHNhbWVfa2V5cyA9IDA7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3Qga2V5c192YWwgPSBrZXlzLmpvaW4oJywnKTtcclxuXHRcdFx0XHRpZiAoIWkpIHByZXZfa2V5cyA9IGtleXNfdmFsO1xyXG5cdFx0XHRcdGVsc2UgaWYgKGtleXNfdmFsICE9PSBwcmV2X2tleXMpe1xyXG5cdFx0XHRcdFx0c2FtZV9rZXlzID0gMDtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoc2FtZV9rZXlzICYmIHZhbC5sZW5ndGgpIHJldHVybiB7Y291bnQ6IHZhbC5sZW5ndGgsIGZpcnN0OiBfZ2V0X2ZpcnN0KHZhbFswXSl9O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHZhbDtcclxuXHR9O1xyXG5cdGNvbnN0IF9wYXJzZSA9ICh2YWw6IGFueSk6IGFueSA9PiB7XHJcblx0XHRpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB2YWwgJiYgdmFsKXtcclxuXHRcdFx0Zm9yIChsZXQgayBpbiB2YWwpe1xyXG5cdFx0XHRcdGlmICghdmFsLmhhc093blByb3BlcnR5KGspKSBjb250aW51ZTtcclxuXHRcdFx0XHR2YWxba10gPSBfcGFyc2UodmFsW2tdKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0ZWxzZSB2YWwgPSBfbWF4U3RyKHZhbCk7XHJcblx0XHRyZXR1cm4gdmFsO1xyXG5cdH07XHJcblx0cmV0dXJuIF9wYXJzZShmaXJzdCA/IF9nZXRfZmlyc3QodmFsdWUpIDogdmFsdWUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNvcnQgbW9kZSBgdHlwZWAgfiBgMXwtMXwnYXNjJ3wnZGVzYyd8J2FzY2VuZGluZyd8J2Rlc2NlbmRpbmcnYFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgVFNvcnRNb2RlID0gMXwtMXwnYXNjJ3wnZGVzYyd8J2FzY2VuZGluZyd8J2Rlc2NlbmRpbmcnO1xyXG5cclxuLyoqXHJcbiAqIFNvcnQgb3JkZXIgYHR5cGVgIH4gYC0xYCAoYmVmb3JlKSB8IGAxYCAoYWZ0ZXIpIHwgYDBgIChlcXVhbClcclxuICovXHJcbmV4cG9ydCB0eXBlIFRTb3J0T3JkZXIgPSAtMXwxfDA7XHJcblxyXG4vKipcclxuICogU29ydCBgQXJyYXlgICoqc2xpY2UqKiB2YWx1ZXNcclxuICogLSByZXR1cm5zIG5ldyBhcnJheSAoaS5lLiBgYXJyYXkuc2xpY2UoKS5zb3J0KC4uLilgIGRvZXMgbm90IGFmZmVjdCBvcmlnaW5hbCBhcnJhbmdlbWVudClcclxuICogXHJcbiAqIEBwYXJhbSBhcnJheSAtIHNvcnQgYEFycmF5YFxyXG4gKiBAcGFyYW0gbW9kZSAtIHNvcnQgbW9kZVxyXG4gKiBAcGFyYW0gb25Db21wYXJlIC0gY3VzdG9tIGNvbXBhcmUgY2FsbGJhY2tcclxuICogQHBhcmFtIGxvY2FsZUNvbXBhcmVDb25maWcgLSBtZXRob2QgY29uZmlnIFtgU3RyaW5nLmxvY2FsZUNvbXBhcmVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvbG9jYWxlQ29tcGFyZSkgKGRlZmF1bHQ6IGB7bG9jYWxlczonZW4nLG9wdGlvbnM6e3NlbnNpdGl2aXR5OidiYXNlJ319YCkgfiBbb3B0aW9ucy5zZW5zaXRpdml0eV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL2xvY2FsZUNvbXBhcmUpXHJcbiAqIEByZXR1cm5zIFNvcnRlZCBgVFtdYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zb3J0ID0gPFQgPSBhbnk+KFxyXG5cdGFycmF5OiBUW10sXHJcblx0bW9kZT86IFRTb3J0TW9kZXx7W2tleTpzdHJpbmddOlRTb3J0TW9kZX18W3N0cmluZyxUU29ydE1vZGVdfFtzdHJpbmcsVFNvcnRNb2RlXVtdLFxyXG5cdG9uQ29tcGFyZT86IChhOmFueSxiOmFueSxrZXk/OnN0cmluZyk9PlRTb3J0T3JkZXJ8W2E6YW55LGI6YW55XSxcclxuXHRsb2NhbGVDb21wYXJlQ29uZmlnPzoge2xvY2FsZXM/OmFueSxvcHRpb25zPzphbnl9XHJcbik6IFRbXSA9PiB7XHJcblxyXG5cdHRyeSB7XHJcblx0XHRcclxuXHRcdC8vIHBhcnNlIGFyZ3NcclxuXHRcdGNvbnN0IGl0ZW1zID0gWy4uLmFycmF5XS5zbGljZSgpO1xyXG5cdFx0aWYgKCFpdGVtcy5sZW5ndGgpIHJldHVybiBpdGVtczsgLy88PCBjYW5jZWwgfiBlbXB0eVxyXG5cdFx0Y29uc3Qgc29ydF9tb2RlOiBhbnkgPSBtb2RlO1xyXG5cdFx0Y29uc3QgbG9jYWxlX2NvbXBhcmVfY29uZmlnOiB7bG9jYWxlcz86YW55LG9wdGlvbnM/OmFueX0gPSB7XHJcblx0XHRcdGxvY2FsZXM6IGxvY2FsZUNvbXBhcmVDb25maWc/LmxvY2FsZXMgfHwgJ2VuJyxcclxuXHRcdFx0b3B0aW9uczoge3NlbnNpdGl2aXR5OiAnYmFzZScsIC4uLk9iamVjdChsb2NhbGVDb21wYXJlQ29uZmlnPy5vcHRpb25zKX0sXHJcblx0XHR9O1xyXG5cclxuXHRcdC8vIG9uQ29tcGFyZSBjYWxsYmFja1xyXG5cdFx0Y29uc3QgX29uX2NvbXBhcmU6IHVuZGVmaW5lZHwoKGE6YW55LGI6YW55LGtleT86c3RyaW5nKT0+VFNvcnRPcmRlcnxbYTphbnksYjphbnldKSA9ICdmdW5jdGlvbicgPT09IHR5cGVvZiBvbkNvbXBhcmUgPyBvbkNvbXBhcmUgOiB1bmRlZmluZWQ7XHJcblx0XHRcclxuXHRcdC8vIGZuID0+IGhlbHBlciB+IHNvcnQgY29tcGFyZVxyXG5cdFx0Y29uc3QgX3NvcnRfY29tcGFyZSA9IChhOiBhbnksIGI6IGFueSwga2V5Pzogc3RyaW5nKTogbnVtYmVyID0+IHtcclxuXHRcdFx0bGV0IHg6IGFueSA9IGEsIHk6IGFueSA9IGI7XHJcblx0XHRcdGlmIChfb25fY29tcGFyZSl7XHJcblx0XHRcdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSBfb25fY29tcGFyZShhLCBiLCBrZXkpO1xyXG5cdFx0XHRcdGNvbnN0IHZhbDogYW55ID0gcGFyc2VJbnQocmVzdWx0KTtcclxuXHRcdFx0XHRpZiAoWy0xLDEsMF0uaW5jbHVkZXModmFsKSkgcmV0dXJuIHZhbDtcclxuXHRcdFx0XHR4ID0gcmVzdWx0Py5bMF0gPz8geDtcclxuXHRcdFx0XHR5ID0gcmVzdWx0Py5bMV0gPz8geTtcclxuXHRcdFx0fVxyXG5cdFx0XHRsZXQgdmFsID0gMCwgc3RyID0gMDtcclxuXHRcdFx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgeCAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIHkgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHgubG9jYWxlQ29tcGFyZSl7XHJcblx0XHRcdFx0c3RyID0gMTtcclxuXHRcdFx0XHR2YWwgPSB4LmxvY2FsZUNvbXBhcmUoeSwgbG9jYWxlX2NvbXBhcmVfY29uZmlnLmxvY2FsZXMsIGxvY2FsZV9jb21wYXJlX2NvbmZpZy5vcHRpb25zKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHZhbCA9IHggPiB5ID8gMSA6IHggPCB5ID8gLTEgOiAwO1xyXG5cdFx0XHRyZXR1cm4gdmFsO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBmbiA9PiBoZWxwZXIgfiBzb3J0IG1vZGUgb3JkZXJcclxuXHRcdGNvbnN0IF9zb3J0X29yZGVyID0gKHNtb2RlOiBhbnkpOiBudW1iZXIgPT4ge1xyXG5cdFx0XHRsZXQgdmFsOiBhbnkgPSBzbW9kZSA/PyAxO1xyXG5cdFx0XHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB2YWwpe1xyXG5cdFx0XHRcdGlmICghKHZhbCA9IHZhbC50cmltKCkpKSByZXR1cm4gMTtcclxuXHRcdFx0XHRpZiAodmFsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnYXNjJykpIHJldHVybiAxO1xyXG5cdFx0XHRcdGlmICh2YWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdkZXNjJykpIHJldHVybiAtMTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoKHZhbCA9IHBhcnNlSW50KHZhbCkpID09PSAtMSkgcmV0dXJuIC0xO1xyXG5cdFx0XHRpZiAodmFsICE9PSAxKSBjb25zb2xlLndhcm4oYFstXSB1bnN1cHBvcnRlZCBfc29ydCBcXGBtb2RlXFxgIHZhbHVlICgke3Ntb2RlfSkuYCk7XHJcblx0XHRcdHJldHVybiAxO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBmbiA9PiBoZWxwZXIgfiBkbyBjb21wYXJlXHJcblx0XHRjb25zdCBfZG9fY29tcGFyZSA9IChhOiBhbnksIGI6IGFueSwgc21vZGU6IGFueSwga2V5Pzogc3RyaW5nKTogbnVtYmVyID0+IHtcclxuXHRcdFx0Y29uc3Qgc2NvbXBhcmUgPSBfc29ydF9jb21wYXJlKGEsIGIsIGtleSk7XHJcblx0XHRcdGNvbnN0IHNvcmRlciA9IF9zb3J0X29yZGVyKHNtb2RlKTtcclxuXHRcdFx0cmV0dXJuIHNjb21wYXJlICogc29yZGVyO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBmbiA9PiBoZWxwZXIgfiBjcmVhdGUgc29ydCBtZXRob2RcclxuXHRcdGNvbnN0IF9zb3J0X21ldGhvZCA9ICgpOigoYTphbnksYjphbnkpPT5udW1iZXIpID0+IHtcclxuXHRcdFx0Y29uc3Qgc29ydF9tYXA6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XHJcblx0XHRcdGxldCBlbnRyeTpbc3RyaW5nLHN0cmluZ118dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdFx0XHRpZiAoT2JqZWN0KHNvcnRfbW9kZSkgPT09IHNvcnRfbW9kZSl7XHJcblx0XHRcdFx0Y29uc3QgX3NvcnRfZW50cnkgPSAodjogYW55W10sIGs9JycpOiBbc3RyaW5nLHN0cmluZ118dW5kZWZpbmVkID0+IEFycmF5LmlzQXJyYXkodikgJiYgJ3N0cmluZycgPT09IHR5cGVvZiB2WzBdICYmICEhKGsgPSB2WzBdLnRyaW0oKSkgPyBbaywgKHZbMV0gPz8gJycpLnRyaW0oKSB8fCAnYXNjJ10gOiB1bmRlZmluZWQ7XHJcblx0XHRcdFx0aWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBzb3J0X21vZGVbU3ltYm9sLml0ZXJhdG9yXSl7XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtczogYW55W10gPSBbLi4uc29ydF9tb2RlXTtcclxuXHRcdFx0XHRcdGlmICghIShlbnRyeSA9IF9zb3J0X2VudHJ5KGl0ZW1zKSkpIHNvcnRfbWFwLnNldChlbnRyeVswXSwgZW50cnlbMV0pOyAvLyBbc3RyaW5nLFRTb3J0TW9kZV1cclxuXHRcdFx0XHRcdGVsc2UgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKXsgLy8gW3N0cmluZyxUU29ydE1vZGVdW11cclxuXHRcdFx0XHRcdFx0aWYgKCEhKGVudHJ5ID0gX3NvcnRfZW50cnkoaXRlbSkpKSBzb3J0X21hcC5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBmb3IgKGNvbnN0IGl0ZW0gb2YgT2JqZWN0LmVudHJpZXMoc29ydF9tb2RlKSl7IC8vIHtbc3RyaW5nXTogVFNvcnRNb2RlfVxyXG5cdFx0XHRcdFx0aWYgKCEhKGVudHJ5ID0gX3NvcnRfZW50cnkoaXRlbSkpKSBzb3J0X21hcC5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIXNvcnRfbWFwLnNpemUpIHJldHVybiAoYSwgYikgPT4gX2RvX2NvbXBhcmUoYSwgYiwgc29ydF9tb2RlKTtcclxuXHRcdFx0Y29uc3Qgc29ydF9lbnRyaWVzOiBbc3RyaW5nLHN0cmluZ11bXSA9IFsuLi5zb3J0X21hcF07XHJcblx0XHRcdHJldHVybiAoYSwgYikgPT4ge1xyXG5cdFx0XHRcdGxldCBhZnRlcjogbnVtYmVyID0gMDsgLy8gMVxyXG5cdFx0XHRcdGxldCBiZWZvcmU6IG51bWJlciA9IDA7IC8vIC0xXHJcblx0XHRcdFx0bGV0IGxhc3Q6IG51bWJlciA9IDA7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBba2V5LCBrZXlfb3JkZXJdIG9mIHNvcnRfZW50cmllcyl7XHJcblx0XHRcdFx0XHRpZiAoIShPYmplY3QoYSkuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBPYmplY3QoYikuaGFzT3duUHJvcGVydHkoa2V5KSkpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0Y29uc3QgeCA9IGE/LltrZXldO1xyXG5cdFx0XHRcdFx0Y29uc3QgeSA9IGI/LltrZXldO1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gX2RvX2NvbXBhcmUoeCwgeSwga2V5X29yZGVyLCBrZXkpO1xyXG5cdFx0XHRcdFx0aWYgKHZhbCkgbGFzdCA9IHZhbDtcclxuXHRcdFx0XHRcdGlmICh2YWwgPT09IDEpIGFmdGVyICsrO1xyXG5cdFx0XHRcdFx0ZWxzZSBpZiAodmFsID09PSAtMSkgYmVmb3JlICsrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYWZ0ZXIgJiYgYmVmb3JlICYmIGFmdGVyID09PSBiZWZvcmUpIHJldHVybiBsYXN0O1xyXG5cdFx0XHRcdHJldHVybiBhZnRlciA+IGJlZm9yZSA/IDEgOiBhZnRlciA8IGJlZm9yZSA/IC0xIDogMDtcclxuXHRcdFx0fTtcclxuXHRcdH07XHJcblx0XHRcclxuXHRcdC8vPDwgcmVzdWx0IH4gc29ydGVkIGl0ZW1zXHJcblx0XHRyZXR1cm4gaXRlbXMuc29ydChfc29ydF9tZXRob2QoKSk7XHJcblx0fVxyXG5cdGNhdGNoIChlcnIpe1xyXG5cdFx0dGhyb3cgbmV3IEVycm9yKGBbLV0gX3NvcnQgZXJyb3I6ICR7ZXJyfWApO1xyXG5cdH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSB0cmFuc2Zvcm0gdGV4dCB0ZW1wbGF0ZSBjb250ZXh0IHZhbHVlc1xyXG4gKiBcclxuICogLSB0ZW1wbGF0ZSBtdXN0IGJlIGluIGRvdCBwYXRoIHBhdHRlcm4gd2hlcmUgZmlyc3QgZGVsaW1pdGVkIHZhbHVlIGlzIHRoZSBjb250ZXh0IGtleSBuYW1lLlxyXG4gKiAtIHRlbXBsYXRlIHZhbHVlcyBtdXN0IGJlIHB1dCBpbiBjdXJseSBicmFja2V0cyB3aGVuIHdpdGhpbiBtaXhlZCB0ZXh0LlxyXG4gKiAtIGRvdCBwYXRoIG1hdGNoaW5nIGlzIGNhc2UgaW5zZW5zaXRpdmUuXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfdHJhbnMoJ015IG5hbWUgaXMge3VzZXIubmFtZX0uJywge1VzZXI6IHtOYW1lOiAnUm9vdCd9fSwgJ05VTEwnKSA9PiAnTXkgbmFtZSBpcyBSb290LidcclxuICogX3RyYW5zKCdNeSBwaG9uZSBudW1iZXIgaXMge3VzZXIucGhvbmV9LicsIHtVc2VyOiB7TmFtZTogJ1Jvb3QnfX0sICdOVUxMJykgPT4gJ015IHBob25lIG51bWJlciBpcyBOVUxMLidcclxuICogX3RyYW5zKCdhZGRyZXNzLmNpdHknLCB7QWRkcmVzczoge0NpdHk6ICdOYWlyb2JpJ319LCAnTlVMTCcpID0+ICdOYWlyb2JpJ1xyXG4gKiBfdHJhbnMoJ2FkZHJlc3MudG93bicsIHtBZGRyZXNzOiB7Q2l0eTogJ05haXJvYmknLCB0b3duOiB1bmRlZmluZWR9fSwgJ05VTEwnKSA9PiAndW5kZWZpbmVkJ1xyXG4gKiBfdHJhbnMoJ05vIHRlbXBsYXRlLicsIHtmb286ICdiYXInfSwgJ05VTEwnKSA9PiAnTm8gdGVtcGxhdGUuJ1xyXG4gKiBfdHJhbnMoJ0tFUyB7aXRlbS5hbW91bnR9Lz0nLCB7aXRlbToge2Ftb3VudDogNDUwMH19LCAnTlVMTCcsICh2YWx1ZTpzdHJpbmcscGF0aDpzdHJpbmcsbmFtZTpzdHJpbmcpID0+IF9jb21tYXModmFsdWUsIHRydWUsIDIpKSA9PiAnTm8gdGVtcGxhdGUuJ1xyXG4gKiAgXHJcbiAqIFxyXG4gKiBAcGFyYW0gdGVtcGxhdGUgLSBwYXJzZSB0ZW1wbGF0ZSB+IHRleHQgd2l0aCB2YWx1ZSB0ZW1wbGF0ZSAoZS5nLiBgJ015IG5hbWUgaXMge3VzZXIubmFtZX0nYClcclxuICogQHBhcmFtIGNvbnRleHQgLSB2YWx1ZXMgY29udGV4dCB+IGB7W25hbWU6IHN0cmluZ106IGFueX1gXHJcbiAqIEBwYXJhbSBfZGVmYXVsdCAtIGRlZmF1bHQgdmFsdWUgd2hlbiB1bmFibGUgdG8gcmVzb2x2ZSB0ZW1wbGF0ZSB2YWx1ZSAoZGVmYXVsdDogYCdOVUxMJ2ApXHJcbiAqIEBwYXJhbSBfZm9ybWF0IC0gZm9ybWF0IHJlc29sdmVkIHZhbHVlIGNhbGxiYWNrICh0aGlzIGFsbG93cyB5b3UgdG8gZnVydGhlciBlZGl0IHJlc29sdmVkIHRlbXBsYXRlIGNvbnRleHQgdmFsdWVzKVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB0cmFuc2Zvcm1lZCB0ZXh0IHdoZXJlIHRlbXBsYXRlIHZhbHVlcyBhcmUgcmVwbGFjZWQgd2l0aCByZXNvbHZlZCBjb250ZXh0IHZhbHVlcyAoc2VlIGV4YW1wbGVzKVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90cmFucyA9ICh0ZW1wbGF0ZTogc3RyaW5nLCBjb250ZXh0OiB7W25hbWU6IHN0cmluZ106IGFueX0sIF9kZWZhdWx0OiBzdHJpbmcgPSAnTlVMTCcsIF9mb3JtYXQ/OiAodmFsdWU6c3RyaW5nLHBhdGg6c3RyaW5nLG5hbWU6c3RyaW5nKT0+YW55KTogc3RyaW5nID0+IHtcclxuXHRjb25zdCBwYXR0ZXJuOiBSZWdFeHAgPSAvXFx7KFtfMC05YS16QS1aXSspKChcXC5bXzAtOWEtekEtWl0rKSopXFx9L2c7XHJcblx0Y29uc3QgdmFsdWU6IHN0cmluZyA9IF9zdHIodGVtcGxhdGUpO1xyXG5cdGlmICghdmFsdWUudHJpbSgpKSByZXR1cm4gdmFsdWU7IC8vLS0gaWdub3JlcyBibGFua1xyXG5cdGNvbnN0IG1pc3NpbmcgPSBgISFfJHtEYXRlLm5vdygpfV8hIWA7XHJcblx0Y29uc3QgX3RyYW5zX2Zvcm1hdDogKCh2YWx1ZTpzdHJpbmcscGF0aDpzdHJpbmcsbmFtZTpzdHJpbmcpPT5hbnkpfHVuZGVmaW5lZCA9ICdmdW5jdGlvbicgPT09IHR5cGVvZiBfZm9ybWF0ID8gX2Zvcm1hdCA6IHVuZGVmaW5lZDtcclxuXHRjb25zdCBfdHJhbnNfZ2V0ID0gKG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nID0gJycpOiBzdHJpbmcgPT4ge1xyXG5cdFx0bGV0IHZhbDogYW55ID0gX2RvdEdldChuYW1lLCBjb250ZXh0LCB0cnVlLCAwLCBtaXNzaW5nKTtcclxuXHRcdGlmICh2YWwgPT09IG1pc3NpbmcpIHJldHVybiBtaXNzaW5nO1xyXG5cdFx0aWYgKCEhKHBhdGggPSBfc3RyKHBhdGgsIHRydWUpKSkgdmFsID0gX2RvdEdldChwYXRoLCB2YWwsIHRydWUsIDAsIG1pc3NpbmcpO1xyXG5cdFx0aWYgKHZhbCA9PT0gbWlzc2luZykgcmV0dXJuIG1pc3Npbmc7XHJcblx0XHRpZiAoX3RyYW5zX2Zvcm1hdCkgdmFsID0gX3RyYW5zX2Zvcm1hdCh2YWwsIHBhdGgsIG5hbWUpO1xyXG5cdFx0Y29uc3QgdGV4dCA9IEFycmF5LmlzQXJyYXkodmFsKSA/IGZhbHNlIDogX3N0cmluZ2FibGUodmFsKTtcclxuXHRcdHJldHVybiB0ZXh0ICE9PSBmYWxzZSA/IHRleHQgOiBfc3RyKHZhbCwgZmFsc2UsIHRydWUpO1xyXG5cdH07XHJcblx0aWYgKCFwYXR0ZXJuLnRlc3QodmFsdWUpKXtcclxuXHRcdGNvbnN0IHZhbCA9IF90cmFuc19nZXQodmFsdWUpO1xyXG5cdFx0cmV0dXJuIHZhbCAhPT0gbWlzc2luZyA/IHZhbCA6IHZhbHVlO1xyXG5cdH1cclxuXHRsZXQgZGVmYXVsdF92YWw6IHN0cmluZyA9IF9zdHIoX2RlZmF1bHQpO1xyXG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sICguLi5hcmdzKTogc3RyaW5nID0+IHtcclxuXHRcdGNvbnN0IG5hbWUgPSBhcmdzWzFdO1xyXG5cdFx0Y29uc3QgcGF0aCA9IGFyZ3NbMl0ucmVwbGFjZSgvXlxcLi8sICcnKTtcclxuXHRcdGxldCB2YWwgPSBfdHJhbnNfZ2V0KG5hbWUsIHBhdGgpO1xyXG5cdFx0aWYgKHZhbCA9PT0gbWlzc2luZykgdmFsID0gZGVmYXVsdF92YWw7XHJcblx0XHRyZXR1cm4gdmFsO1xyXG5cdH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGl0ZXJhYmxlIHZhbHVlcyBhcnJheSBsaXN0XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWVzIC0gcGFyc2UgdmFsdWVzXHJcbiAqIEByZXR1cm5zIGBUW11gIGFycmF5IGxpc3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYXJyYXlMaXN0ID0gPFQgPSBhbnk+KHZhbHVlczogYW55KTogVFtdID0+IF9pc0FycmF5KHZhbHVlcywgdHJ1ZSkgPyBbLi4udmFsdWVzXSA6IFtdO1xyXG5cclxuLyoqXHJcbiAqIE1hcCB2YWx1ZXMgKGBvYmplY3RbXWApIGJ5IGtleSBwcm9wZXJ0eSBJRCB2YWx1ZVxyXG4gKiAtIElEIHZhbHVlIGlzIGEgdHJpbW1lZCBgc3RyaW5nYCAobG93ZXJjYXNlIHdoZW4gYXJndW1lbnQgYF9sb3dlcmNhc2VgIGlzIGB0cnVlYClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBwYXJzZSB2YWx1ZXMgYXJyYXkgfiBgPFQgPSBhbnk+W11gXHJcbiAqIEBwYXJhbSBwcm9wIC0gSUQgcHJvcGVydHkgbmFtZSAoZGVmYXVsdDogYCcnYCB+IHVzZXMgYHN0cmluZ2AgZW50cnkgdmFsdWUgYXMgSUQgZm9yIHNjYWxhciB2YWx1ZXMgYXJyYXkpXHJcbiAqIEBwYXJhbSBfbG93ZXJjYXNlIC0gKGRlZmF1bHQ6IGBmYWxzZWApIHVzZSBsb3dlcmNhc2UgSUQgdmFsdWUgZm9yIHVuaWZvcm0gSUQgdmFsdWUgY2FzZVxyXG4gKiBAcGFyYW0gX3RleHRzIC0gKGRlZmF1bHQ6IGAwYCkgcGFyc2UgdGV4dCBlbnRyeSBtb2RlIH4gKiplbmFibGVkIHdoZW4gYHByb3BgIGFyZ3VtZW50IGlzIGJsYW5rKipcclxuICogLSBgMGAgPT4gZGlzYWJsZWRcclxuICogLSBgMWAgPT4gdHJpbSB0ZXh0IHZhbHVlc1xyXG4gKiAtIGAyYCA9PiBzdHJpbmdpZnkgYW5kIHRyaW0gdGV4dCB2YWx1ZXNcclxuICogQHBhcmFtIF9zaWxlbnQgLSAoZGVmYXVsdDogYHRydWVgKSBkbyBub3QgbG9nIHdhcm5pbmdzIHdoZW4gdmFsdWVzIGVudHJ5IHdpdGggaW52YWxpZCBJRCBpcyBza2lwcGVkIFxyXG4gKiBAcmV0dXJucyBge1tpZDogc3RyaW5nXTogVH1gIG9iamVjdCB3aXRoIHtJRD1lbnRyeX0gbWFwcGluZ1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9tYXBWYWx1ZXMgPSA8VCA9IGFueT4odmFsdWVzOiBUW10sIHByb3A6IHN0cmluZyA9ICcnLCBfbG93ZXJjYXNlOiBib29sZWFuID0gZmFsc2UsIF90ZXh0czogMHwxfDIgPSAwLCBfc2lsZW50OiBib29sZWFuID0gdHJ1ZSk6IHtbaWQ6IHN0cmluZ106IFR9ID0+IHtcclxuXHRjb25zdCBidWZmZXI6IHtba2V5OiBzdHJpbmddOiBUfSA9IHt9LCBpdGVtczogYW55W10gPSBfYXJyYXlMaXN0KHZhbHVlcyksIGtleSA9IF9zdHIocHJvcCwgdHJ1ZSk7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0bGV0IGVudHJ5OiBhbnkgPSBpdGVtc1tpXSwgaWQ6IHN0cmluZyA9ICcnO1xyXG5cdFx0aWYgKCFrZXkpe1xyXG5cdFx0XHRpZiAoKGlkID0gX3N0cihlbnRyeSwgdHJ1ZSkpICYmIFsxLCAyXS5pbmNsdWRlcyhfdGV4dHMpKXtcclxuXHRcdFx0XHRpZiAoX3RleHRzID09PSAyKSBlbnRyeSA9IF9zdHIoZW50cnksIHRydWUpO1xyXG5cdFx0XHRcdGVsc2UgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgZW50cnkpIGVudHJ5ID0gX3N0cihlbnRyeSwgdHJ1ZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVsc2UgaWQgPSBfc3RyKGVudHJ5Py5ba2V5XSwgdHJ1ZSk7XHJcblx0XHRpZiAoIWlkKXtcclxuXHRcdFx0aWYgKCFfc2lsZW50KSBjb25zb2xlLndhcm4oJ0ludmFsaWQgbWFwIHZhbHVlcyBlbnRyeS4gVGhlIElEIHZhbHVlIGlzIGJsYW5rLicsIHtpLCBrZXksIGVudHJ5fSk7XHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKF9sb3dlcmNhc2UpIGlkID0gaWQudG9Mb3dlckNhc2UoKTtcclxuXHRcdGJ1ZmZlcltpZF0gPSBlbnRyeTtcclxuXHR9XHJcblx0cmV0dXJuIGJ1ZmZlcjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgYEZhaWxFcnJvcmAgX2V4dGVuZHMgYEVycm9yYF9cclxuICovXHJcbmV4cG9ydCBjbGFzcyBGYWlsRXJyb3IgZXh0ZW5kcyBFcnJvclxyXG57XHJcblx0LyoqXHJcblx0ICogLSBlcnJvciBtZXNzYWdlXHJcblx0ICovXHJcblx0bWVzc2FnZTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIGVycm9yIG1vZGVcclxuXHQgKi9cclxuXHRtb2RlOiAwfDF8MnwzO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIGVycm9yIGRlYnVnXHJcblx0ICovXHJcblx0ZGVidWc6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogLSBlcnJvciBuYW1lXHJcblx0ICovXHJcblx0bmFtZTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBGYWlsdXJlIGVycm9yIGluc3RhbmNlL2hhbmRsZXJcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gcmVhc29uIC0gcGFyc2UgZXJyb3IgbWVzc2FnZVxyXG5cdCAqIEBwYXJhbSBtb2RlIC0gZXJyb3IgbW9kZSB+IGAwYCA9IHNpbGVudCAoZGVmYXVsdCkgfCBgMWAgPSBsb2dzIHdhcm5pbmcgfCBgMmAgPSBsb2dzIGVycm9yIHwgYDNgID0gdGhyb3dzIGVycm9yXHJcblx0ICogQHBhcmFtIGRlYnVnIC0gZXJyb3IgZGVidWdcclxuXHQgKiBAcGFyYW0gbmFtZSAtIGVycm9yIG5hbWVcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3RvcihyZWFzb246IGFueSwgbW9kZTogMHwxfDJ8MyA9IDAsIGRlYnVnOiBhbnkgPSBTeW1ib2woJ3VuZGVmaW5lZCcpLCBuYW1lPzogc3RyaW5nKXtcclxuXHRcdGNvbnN0IGVycl9tZXNzYWdlOiBzdHJpbmcgPSBfZXJyb3JUZXh0KHJlYXNvbikgfHwgJ0JsYW5rIGVycm9yIG1lc3NhZ2UuJztcclxuXHRcdGNvbnN0IGVycl9tb2RlOiAwfDF8MnwzID0gWzAsIDEsIDIsIDNdLmluY2x1ZGVzKG1vZGUgPSBfcG9zSW50KG1vZGUsIDAsIDMpID8/IDAgYXMgYW55KSA/IG1vZGUgOiAwO1xyXG5cdFx0Y29uc3QgZXJyX2RlYnVnOiBhbnlbXSA9ICdzeW1ib2wnID09PSB0eXBlb2YgZGVidWcgJiYgU3RyaW5nKGRlYnVnKSA9PT0gJ1N5bWJvbChkZWZhdWx0KScgPyBbXSA6IFtkZWJ1Z107XHJcblx0XHRjb25zdCBlcnJfbmFtZTogc3RyaW5nID0gX3N0cihuYW1lLCB0cnVlKSB8fCBfc3RyKHJlYXNvbj8ubmFtZSwgdHJ1ZSkgfHwgJ0ZhaWxFcnJvcic7XHJcblx0XHRzdXBlcihlcnJfbWVzc2FnZSk7XHJcblx0XHR0aGlzLm1lc3NhZ2UgPSBlcnJfbWVzc2FnZTtcclxuXHRcdHRoaXMubW9kZSA9IGVycl9tb2RlO1xyXG5cdFx0dGhpcy5kZWJ1ZyA9IGVycl9kZWJ1Z1swXTtcclxuXHRcdHRoaXMubmFtZSA9IGVycl9uYW1lO1xyXG5cdFx0aWYgKGVycl9tb2RlID09PSAxIHx8IGVycl9tb2RlID09PSAyKSBjb25zb2xlW2Vycl9tb2RlID09PSAxID8gJ3dhcm4nIDogJ2Vycm9yJ10oX3N0cih0aGlzLCB0cnVlKSwgLi4uZXJyX2RlYnVnKTtcclxuXHRcdGVsc2UgaWYgKGVycl9tb2RlID09PSAzKSB0aHJvdyB0aGlzO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEV4dHJhY3QgYG9iamVjdGAgdmFsdWUgcHJvcGVydHkgZW50cmllc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgYG9iamVjdGAgdmFsdWVcclxuICogQHBhcmFtIHByb3BzIC0gZXh0cmFjdCBwcm9wZXJ0eSBuYW1lc1xyXG4gKiBAcGFyYW0gX29taXQgLSAoZGVmYXVsdDogYGZhbHNlYCkgKipleGNsdWRlKiogcHJvcGVydHkgbmFtZXMgZXh0cmFjdCBtb2RlXHJcbiAqIEBwYXJhbSBfdW5kZWZpbmVkIC0gKGRlZmF1bHQ6IGBmYWxzZWApIGluY2x1ZGUgYHVuZGVmaW5lZGAgcHJvcGVydHkgbmFtZXNcclxuICogQHJldHVybnMgYHtbcHJvcDogYW55XTogYW55fWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcHJvcHNPYmogPSAodmFsdWU6IGFueSwgcHJvcHM/OiBhbnlbXSwgX29taXQ6IGJvb2xlYW4gPSBmYWxzZSwgX3VuZGVmaW5lZDogYm9vbGVhbiA9IGZhbHNlKToge1trZXk6c3RyaW5nfG51bWJlcnxzeW1ib2xdOiBhbnl9ID0+IHtcclxuXHRjb25zdCBpdGVtOiB7W2tleTogc3RyaW5nfG51bWJlcnxzeW1ib2xdOiBhbnl9ID0gT2JqZWN0KHZhbHVlKSwga2V5czogYW55W10gPSBfYXJyYXlMaXN0KHByb3BzKTtcclxuXHRpZiAoX29taXQpIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoaXRlbSkuZmlsdGVyKHYgPT4gIWtleXMuaW5jbHVkZXModlswXSkpKTtcclxuXHRyZXR1cm4ga2V5cy5yZWR1Y2UoKHByZXY6IHtba2V5OiBzdHJpbmd8bnVtYmVyfHN5bWJvbF06IGFueX0sIGtleTogYW55KToge1trZXk6IHN0cmluZ3xudW1iZXJ8c3ltYm9sXTogYW55fSA9PiB7XHJcblx0XHRpZiAoIV9lbXB0eShrZXksIHRydWUpKXtcclxuXHRcdFx0aWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoa2V5KSkgcHJldltrZXldID0gaXRlbVtrZXldO1xyXG5cdFx0XHRlbHNlIGlmIChfdW5kZWZpbmVkKSBwcmV2W2tleV0gPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcHJldjtcclxuXHR9LCB7fSk7XHJcbn07XHJcblxyXG4vKipcclxuICogU3BsaXQgYFRbXWAgYXJyYXkgdmFsdWVzIGludG8gYFRbXVtdYCBjaHVua3MgYXJyYXlcclxuICogXHJcbiAqIEBwYXJhbSBhcnJheSAtIHBhcnNlIGl0ZXJhYmxlL3NwcmVhZGFibGUgYXJyYXlcclxuICogQHBhcmFtIHNpemUgLSBzcGxpdCBhcnJheSBjaHVuayBsZW5ndGggKGRlZmF1bHQ6IGAxYCkgfiAqKl8oYDBgIHJldHVybnMgYFtbLi4uYXJyYXldXWApXyoqXHJcbiAqIEByZXR1cm5zIGBUW11bXWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfY2h1bmtzID0gPFQgPSBhbnk+KGFycmF5OiBUW10sIHNpemU6IG51bWJlciA9IDEpOiBUW11bXSA9PiB7XHJcblx0Y29uc3QgaXRlbXM6IFRbXSA9IFsuLi5hcnJheV0sIGNodW5rczogVFtdW10gPSBbXSwgbGVuOiBudW1iZXIgPSBwYXJzZUludChzaXplIGFzIGFueSkgfHwgMDtcclxuXHRpZiAobGVuIDwgMCkgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBcXGBfY2h1bmtzXFxgIFxcYGNodW5rX2xlbmd0aFxcYCBhcmd1bWVudCB2YWx1ZSAoJHtzaXplfSkuYCk7XHJcblx0aWYgKCFsZW4pIHJldHVybiBbaXRlbXNdO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICs9IGxlbikgY2h1bmtzLnB1c2goaXRlbXMuc2xpY2UoaSwgaSArIGxlbikpO1xyXG5cdHJldHVybiBjaHVua3M7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IG9iamVjdHMgYXJyYXkgd2l0aCBrZXlzIHNlbGVjdGlvblxyXG4gKiBcclxuICogQHBhcmFtIGFycmF5IC0gcGFyc2UgaXRlcmFibGUvc3ByZWFkYWJsZSBvYmplY3RzIGFycmF5IGB7W2tleTpzdHJpbmddOmFueX1bXWBcclxuICogQHBhcmFtIGtleXMgLSBzZWxlY3Qga2V5cyBgc3RyaW5nW11gXHJcbiAqIEBwYXJhbSBvbWl0IC0gKGRlZmF1bHQ6IGBmYWxzZWApIGBmYWxzZWAgZGlzYWJsZWQsIGB0cnVlYCBvbWl0IHNlbGVjdCBrZXlzLCBgc3RyaW5nW11gIG9taXQga2V5c1xyXG4gKiBAcGFyYW0gZmlsbGVkX29ubHkgLSAoZGVmYXVsdDogYGZhbHNlYCkgb21pdCBrZXlzIHRoYXQgYXJlIGVtcHR5IHZhbHVlcyBpbiBhbGwgYGFycmF5YCBpdGVtcyBvciBvbWl0IGl0ZW0gdGhhdCBoYXZlIGVtcHR5IHZhbHVlcyBpbiBhbGwga2V5c1xyXG4gKiBAcmV0dXJucyBge1trZXk6c3RyaW5nXTphbnl9W11gIHNlbGVjdGlvblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zZWxlY3RLZXlzID0gKGFycmF5OiB7W2tleTpzdHJpbmddOmFueX1bXSwga2V5czogc3RyaW5nW10sIG9taXQ6IHN0cmluZ1tdfGJvb2xlYW4gPSBmYWxzZSwgZmlsbGVkX29ubHk6IGJvb2xlYW4gPSBmYWxzZSk6IHtba2V5OnN0cmluZ106YW55fVtdID0+IHtcclxuXHRcclxuXHQvL2ZuID0+IGhlbHBlciAtIGdldCBrZXlzXHJcblx0Y29uc3QgX2dldF9rZXlzID0gKHZhbDogYW55LCBsYWJlbDogc3RyaW5nID0gJ2tleXMnKTogc3RyaW5nW10gPT4ge1xyXG5cdFx0aWYgKCEoJ29iamVjdCcgPT09IHR5cGVvZiB2YWwgJiYgdmFsKSkgcmV0dXJuIFtdO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0cmV0dXJuIFsuLi5uZXcgU2V0KFsuLi52YWxdKV07XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oYFstXSBpbnZhbGlkIFxcYF9zZWxlY3RLZXlzXFxgICR7bGFiZWx9IHN0cmluZyBhcnJheSBvYmplY3QuYCk7XHJcblx0XHRcdHJldHVybiBbXTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvL25vcm1hbGl6ZSBhcmdzXHJcblx0YXJyYXkgPSBbLi4uYXJyYXldO1xyXG5cdGtleXMgPSBfZ2V0X2tleXMoa2V5cyk7XHJcblx0Y29uc3Qgb21pdHM6IHN0cmluZ1tdID0gW107XHJcblx0aWYgKCEhb21pdCl7XHJcblx0XHRpZiAob21pdCA9PT0gdHJ1ZSl7XHJcblx0XHRcdG9taXRzLnB1c2goLi4ua2V5cyk7XHJcblx0XHRcdGtleXMgPSBbXTtcclxuXHRcdH1cclxuXHRcdGVsc2Ugb21pdHMucHVzaCguLi5fZ2V0X2tleXMob21pdCwgJ29taXQnKSk7XHJcblx0fVxyXG5cdGZpbGxlZF9vbmx5ID0gISFmaWxsZWRfb25seTtcclxuXHJcblx0Ly9wYXJzZSBhcnJheSA+IGNoZWNrIHVuZmlsbGVkID4gc2tpcCBvbW1pdGVkIGtleXNcclxuXHRjb25zdCBpdGVtczoge1trZXk6c3RyaW5nXTphbnl9W10gPSBbXTtcclxuXHRjb25zdCBmaWxsZWQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpLCB1bmZpbGxlZDoge1trZXk6IHN0cmluZ106IG51bWJlcn0gPSB7fTtcclxuXHRjb25zdCBrZXlzX29iamVjdDoge1trZXk6c3RyaW5nXTphbnl9ID0ga2V5cy5sZW5ndGggPyBPYmplY3QuZnJvbUVudHJpZXMoa2V5cy5tYXAoayA9PiBbaywgdW5kZWZpbmVkXSkpIDoge307XHJcblx0Zm9yIChjb25zdCBvYmogb2YgYXJyYXkpe1xyXG5cdFx0aWYgKE9iamVjdChvYmopICE9PSBvYmopIGNvbnRpbnVlO1xyXG5cdFx0Y29uc3QgaXRlbToge1trZXk6c3RyaW5nXTphbnl9ID0ge307XHJcblx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoey4uLmtleXNfb2JqZWN0LCAuLi5vYmp9KSl7XHJcblx0XHRcdGlmIChmaWxsZWRfb25seSAmJiAhZmlsbGVkLmhhcyhrZXkpKXsgLy9maWxsZWQgY2hlY2tcclxuXHRcdFx0XHRpZiAoX2VtcHR5KHZhbCwgdHJ1ZSkpe1xyXG5cdFx0XHRcdFx0aWYgKCF1bmZpbGxlZC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB1bmZpbGxlZFtrZXldID0gMTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRpZiAodW5maWxsZWQuaGFzT3duUHJvcGVydHkoa2V5KSkgZGVsZXRlIHVuZmlsbGVkW2tleV07XHJcblx0XHRcdFx0XHRmaWxsZWQuYWRkKGtleSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChvbWl0cy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTsgLy9za2lwIG9taXR0ZWRcclxuXHRcdFx0aXRlbVtrZXldID0gdmFsO1xyXG5cdFx0fVxyXG5cdFx0aXRlbXMucHVzaChpdGVtKTsgLy8rYnVmZmVyIGFkZFxyXG5cdH1cclxuXHJcblx0Ly9zZXQgc2VsZWN0ZWQgPiBvbWl0IHVuZmlsbGVkXHJcblx0Y29uc3Qgc2VsZWN0ZWQ6IHtba2V5OnN0cmluZ106YW55fVtdID0gW107XHJcblx0Y29uc3QgdW5maWxsZWRfa2V5czogc3RyaW5nW10gPSBPYmplY3Qua2V5cyh1bmZpbGxlZCk7XHJcblx0Zm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKXtcclxuXHRcdGlmIChrZXlzLmxlbmd0aCl7XHJcblx0XHRcdGxldCB1bmZpbGxlZDogbnVtYmVyID0gMDtcclxuXHRcdFx0Y29uc3QgZW50cmllczogW3N0cmluZyxhbnldW10gPSBbXTtcclxuXHRcdFx0Zm9yIChjb25zdCBrIG9mIGtleXMpe1xyXG5cdFx0XHRcdGlmIChvbWl0cy5pbmNsdWRlcyhrKSkgY29udGludWU7IC8vc2tpcCBvbWl0dGVkXHJcblx0XHRcdFx0aWYgKHVuZmlsbGVkX2tleXMuaW5jbHVkZXMoaykpIGNvbnRpbnVlOyAvL3NraXAgdW5maWxsZWRcclxuXHRcdFx0XHRpZiAoZmlsbGVkX29ubHkgJiYgX2VtcHR5KGl0ZW1ba10sIHRydWUpKSB1bmZpbGxlZCArKztcclxuXHRcdFx0XHRlbnRyaWVzLnB1c2goW2ssIGl0ZW1ba11dKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoZW50cmllcy5sZW5ndGggJiYgZW50cmllcy5sZW5ndGggIT09IHVuZmlsbGVkKSBzZWxlY3RlZC5wdXNoKE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKSk7XHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHVuZmlsbGVkOiBudW1iZXIgPSAwO1xyXG5cdFx0Y29uc3QgZW50cmllczogW3N0cmluZyxhbnldW10gPSBbXTtcclxuXHRcdGNvbnN0IGl0ZW1fZW50cmllczogW3N0cmluZyxhbnldW10gPSBPYmplY3QuZW50cmllcyhpdGVtKTtcclxuXHRcdGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBpdGVtX2VudHJpZXMpe1xyXG5cdFx0XHRpZiAodW5maWxsZWRfa2V5cy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTsgLy9za2lwIHVuZmlsbGVkXHJcblx0XHRcdGlmIChmaWxsZWRfb25seSAmJiBfZW1wdHkodmFsLCB0cnVlKSkgdW5maWxsZWQgKys7XHJcblx0XHRcdGVudHJpZXMucHVzaChba2V5LCB2YWxdKTtcclxuXHRcdH1cclxuXHRcdGlmIChlbnRyaWVzLmxlbmd0aCAmJiBlbnRyaWVzLmxlbmd0aCAhPT0gdW5maWxsZWQpIHNlbGVjdGVkLnB1c2goT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpKTtcclxuXHR9XHJcblxyXG5cdC8vPDwgcmVzdWx0IC0gc2VsZWN0ZWRcclxuXHRyZXR1cm4gc2VsZWN0ZWQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJlZSBvcHRpb25zIGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJVHJlZU9wdGlvbnMge1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIFRyZWUgbmFtZSB+IHJvb3Qgbm9kZSBsYWJlbFxyXG5cdCAqL1xyXG5cdG5hbWU/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN0cmluZyBsaW5lIHN0YXJ0IHBhZGRpbmcgbGVuZ3RoXHJcblx0ICovXHJcblx0cGFkPzogbnVtYmVyO1xyXG5cclxuXHQvKipcclxuXHQgKiBpZ25vcmUgYmxhbmsga2V5IHZhbHVlcyB+IGkuZS4gYG51bGx8dW5kZWZpbmVkfCcnYCAoZGVmYXVsdDogYGZhbHNlYClcclxuXHQgKi9cclxuXHRibGFua3M/OiBib29sZWFuO1xyXG5cclxuXHQvKipcclxuXHQgKiBtYXggdGV4dCB2YWx1ZSBsZW5ndGggKGRlZmF1bHQ6IGAyMDBgKVxyXG5cdCAqL1xyXG5cdG1heF9sZW5ndGg/OiBudW1iZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHRleHQgdmFsdWUgd3JhcCBicmVhayBsZW5ndGggKGRlZmF1bHQ6IGA1NmApXHJcblx0ICovXHJcblx0d3JhcF9sZW5ndGg/OiBudW1iZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHdoZXRoZXIgdG8gdXNlIHdvcmQgYnJlYWsgKGRlZmF1bHQgYGZhbHNlYClcclxuXHQgKi9cclxuXHR3b3JkX2JyZWFrPzogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIER1bXAgdHJlZSBzdHJ1Y3R1cmVcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gYElUcmVlT3B0aW9uc2AgfiBfKHNlZSBJVHJlZU9wdGlvbnMgZG9jcylfXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RyZWUgPSAodmFsdWU6IGFueSwgb3B0aW9ucz86IElUcmVlT3B0aW9ucyk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3Qge1xyXG5cdFx0bmFtZTogX25hbWUgPSAnJyxcclxuXHRcdHBhZDogX3BhZCA9IDAsXHJcblx0XHRibGFua3MgPSBmYWxzZSxcclxuXHRcdG1heF9sZW5ndGggPSAyMDAsXHJcblx0XHR3cmFwX2xlbmd0aCA9IDgwLFxyXG5cdFx0d29yZF9icmVhayA9IGZhbHNlLFxyXG5cdH0gPSBPYmplY3Qob3B0aW9ucyk7XHJcblx0bGV0IHBhZDogbnVtYmVyID0gX3Bvc0ludChfcGFkLCAwKSA/PyAwLCBuYW1lOiBzdHJpbmcgPSBfc3RyKF9uYW1lLCB0cnVlKTtcclxuXHRpZiAobmFtZS5sZW5ndGgpe1xyXG5cdFx0bmFtZSA9IGBbJHtuYW1lfV1gO1xyXG5cdFx0cGFkICs9IDM7XHJcblx0fVxyXG5cdGNvbnN0IF9wYXJzZSA9ICh2YWw6IGFueSk6IHN0cmluZ3x7W2tleTogc3RyaW5nXTogYW55fSA9PiB7XHJcblx0XHRpZiAoW251bGwsIHVuZGVmaW5lZF0uaW5jbHVkZXModmFsKSkgcmV0dXJuIFN0cmluZyh2YWwpO1xyXG5cdFx0aWYgKFsnYm9vbGVhbicsICdudW1iZXInXS5pbmNsdWRlcyh0eXBlb2YgdmFsKSkgcmV0dXJuIFN0cmluZyh2YWwpO1xyXG5cdFx0aWYgKE9iamVjdCh2YWwpICE9PSB2YWwpIHJldHVybiBfanNvblN0cmluZ2lmeShfc3RyKHZhbCwgdHJ1ZSkpO1xyXG5cdFx0Y29uc3QgaXQ6IGFueSA9IHZhbFtTeW1ib2wuaXRlcmF0b3JdLCBpdGVyYWJsZTogYm9vbGVhbiA9IE9iamVjdChpdCkgPT09IGl0O1xyXG5cdFx0aWYgKCFpdGVyYWJsZSAmJiBfc3RyaW5nYWJsZSh2YWwpKSByZXR1cm4gX3N0cih2YWwsIHRydWUpO1xyXG5cdFx0aWYgKCFPYmplY3QuZW50cmllcyh2YWwgPSBfanNvbkNvcHkodmFsKSkubGVuZ3RoKSByZXR1cm4gaXRlcmFibGUgPyAnW10nIDogJ3t9JztcclxuXHRcdHJldHVybiB2YWw7XHJcblx0fTtcclxuXHRjb25zdCBfbGluZXMgPSAodmFsOiBhbnkpOiB7dHlwZTonbm9kZSd8J3ZhbHVlJyxsaW5lczpzdHJpbmdbXX0gPT4ge1xyXG5cdFx0Y29uc3Qgbm9kZSA9ICfilJzilIDilIDilIAnLCBub2RlX2VuZCA9ICfilJTilIDilIDilIAnLCBub2RlX3NwYWNlID0gJyAgICAnLCBub2RlX2JvcmRlciA9ICfilIIgICAnLCByZWdfcXVvdGVzID0gL15cXFwiKC4qKVxcXCIkL2dzO1xyXG5cdFx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XHJcblx0XHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiAodmFsID0gX3BhcnNlKHZhbCkpKSByZXR1cm4ge3R5cGU6ICd2YWx1ZScsIGxpbmVzOiBbdmFsXX07XHJcblx0XHRjb25zdCBlbnRyaWVzOiBbc3RyaW5nLCBhbnldW10gPSBPYmplY3QuZW50cmllcyh2YWwpLCBsZW4gPSBlbnRyaWVzLmxlbmd0aDtcclxuXHRcdGNvbnN0IGl0OiBhbnkgPSB2YWxbU3ltYm9sLml0ZXJhdG9yXSwgaXRlcmFibGU6IGJvb2xlYW4gPSBPYmplY3QoaXQpID09PSBpdDtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICsrKXtcclxuXHRcdFx0Y29uc3QgW2ssIHZdID0gZW50cmllc1tpXSBhcyBbc3RyaW5nLCBhbnldLCBsYXN0OiBib29sZWFuID0gaSArIDEgPT09IGxlbjtcclxuXHRcdFx0bGV0IHNraXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcdFx0aWYgKCFibGFua3MgJiYgW3VuZGVmaW5lZCwgbnVsbCwga10uaW5jbHVkZXModikpIHNraXAgPSB0cnVlO1xyXG5cdFx0XHRsZXQgdHlwZTogJ25vZGUnfCd2YWx1ZScgPSAndmFsdWUnLCB2X2xpbmVzOiBzdHJpbmdbXSA9IFtdLCB2X2xlbjogbnVtYmVyID0gMDtcclxuXHRcdFx0aWYgKCFza2lwKXtcclxuXHRcdFx0XHRjb25zdCByZXMgPSBfbGluZXModik7XHJcblx0XHRcdFx0dHlwZSA9IHJlcy50eXBlO1xyXG5cdFx0XHRcdHZfbGluZXMgPSByZXMubGluZXM7XHJcblx0XHRcdFx0dl9sZW4gPSB2X2xpbmVzLmxlbmd0aDtcclxuXHRcdFx0XHRpZiAoIWJsYW5rcyAmJiB0eXBlID09PSAndmFsdWUnICYmICF2X2xpbmVzWzBdKSBza2lwID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBpc19saXN0OiBib29sZWFuID0gaXRlcmFibGUgJiYgaXQubmFtZSAhPT0gJ2VudHJpZXMnICYmIE51bWJlci5pc0ludGVnZXIoTnVtYmVyKGspKSAmJiBOdW1iZXIoaykgPj0gMDtcclxuXHRcdFx0Y29uc3Qga2V5ID0gaXNfbGlzdCA/IGBbJHtrfV1gIDogaywgbGlzdF92YWx1ZTogYm9vbGVhbiA9IGlzX2xpc3QgJiYgdHlwZSA9PT0gJ3ZhbHVlJztcclxuXHRcdFx0aWYgKCEoc2tpcCAmJiBsaXN0X3ZhbHVlKSkgbGluZXMucHVzaChsaXN0X3ZhbHVlID8gYCR7bGFzdCA/IG5vZGVfZW5kIDogbm9kZX0ke2tleX1gIDogYCR7bGFzdCA/IG5vZGVfZW5kIDogbm9kZX0ke2tleX1gKTtcclxuXHRcdFx0aWYgKHNraXApIGNvbnRpbnVlO1xyXG5cdFx0XHRjb25zdCBrZXlfcGFkOiBzdHJpbmcgPSBsaXN0X3ZhbHVlID8gJycucGFkU3RhcnQoYFske2t9XWAubGVuZ3RoICsgMSkgOiAnJztcclxuXHRcdFx0Y29uc3Qga2V5X25vZGU6IHN0cmluZyA9IChsYXN0ID8gbm9kZV9zcGFjZSA6IG5vZGVfYm9yZGVyKSArIGtleV9wYWQ7XHJcblx0XHRcdGNvbnN0IHByb2NfbGVuOiBudW1iZXIgPSB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgTnVtYmVyLmlzSW50ZWdlcihwcm9jZXNzPy5zdGRvdXQ/LmNvbHVtbnMpICYmIGtleV9ub2RlLmxlbmd0aCA8IChwcm9jZXNzLnN0ZG91dC5jb2x1bW5zLzIpID8gcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyA6IDA7XHJcblx0XHRcdGZvciAobGV0IHggPSAwOyB4IDwgdl9sZW47IHggKyspe1xyXG5cdFx0XHRcdGNvbnN0IHZfbGFzdCA9IHggKyAxID09PSB2X2xlbjtcclxuXHRcdFx0XHRsZXQgdGV4dDogc3RyaW5nID0gdl9saW5lc1t4XTtcclxuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ3ZhbHVlJyl7XHJcblx0XHRcdFx0XHRsZXQgcXVvdGVkID0gcmVnX3F1b3Rlcy50ZXN0KHRleHQpO1xyXG5cdFx0XHRcdFx0aWYgKHF1b3RlZCkgdGV4dCA9IHRleHQucmVwbGFjZShyZWdfcXVvdGVzLCAnJDEnKTtcclxuXHRcdFx0XHRcdHRleHQgPSBfdGV4dE1heExlbmd0aCh0ZXh0LCBtYXhfbGVuZ3RoLCAyKTtcclxuXHRcdFx0XHRcdGlmIChxdW90ZWQpIHRleHQgPSBgXCIke3RleHR9XCJgO1xyXG5cdFx0XHRcdFx0Y29uc3Qgd3JhcF9sZW46IG51bWJlciA9IHByb2NfbGVuID8gKHByb2NfbGVuLWtleV9ub2RlLmxlbmd0aCkvMiA6IHdyYXBfbGVuZ3RoO1xyXG5cdFx0XHRcdFx0Y29uc3Qgd3JhcF9saW5lczogc3RyaW5nW10gPSBfd3JhcExpbmVzKHRleHQsIHdyYXBfbGVuLCB3b3JkX2JyZWFrKTtcclxuXHRcdFx0XHRcdGNvbnN0IHRleHRfbm9kZTogc3RyaW5nID0gdl9sYXN0ID8gbm9kZV9lbmQgOiBub2RlO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgbiA9IDA7IG4gPCB3cmFwX2xpbmVzLmxlbmd0aDsgbiArKyl7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHdyYXBfbm9kZTogc3RyaW5nID0gbGlzdF92YWx1ZSA/ICghbiA/ICcgJyA6IGtleV9ub2RlKSA6ICghbiA/IHRleHRfbm9kZSA6ICh2X2xhc3QgPyBub2RlX3NwYWNlIDogbm9kZV9ib3JkZXIpKTtcclxuXHRcdFx0XHRcdFx0Y29uc3Qgd3JhcF9saW5lOiBzdHJpbmcgPSB3cmFwX2xpbmVzW25dO1xyXG5cdFx0XHRcdFx0XHRpZiAobGlzdF92YWx1ZSl7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCFuKSBsaW5lcy5wdXNoKGxpbmVzLnBvcCgpICsgd3JhcF9ub2RlICsgd3JhcF9saW5lKTtcclxuXHRcdFx0XHRcdFx0XHRlbHNlIGxpbmVzLnB1c2god3JhcF9ub2RlICsgd3JhcF9saW5lKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRlbHNlIGxpbmVzLnB1c2goa2V5X25vZGUgKyB3cmFwX25vZGUgKyB3cmFwX2xpbmUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGxpbmVzLnB1c2goYCR7a2V5X25vZGV9JHt0ZXh0fWApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4ge3R5cGU6ICdub2RlJywgbGluZXN9O1xyXG5cdH07XHJcblx0Y29uc3Qge2xpbmVzfSA9IF9saW5lcyh2YWx1ZSk7XHJcblx0cmV0dXJuICdcXG4nICsgKG5hbWUgPyBgJHtuYW1lfVxcbmAgOiAnJykgKyBsaW5lcy5tYXAobGluZSA9PiBwYWQgPiAwID8gJycucGFkU3RhcnQocGFkKSArIGxpbmUgOiBsaW5lKS5qb2luKCdcXG4nKTtcclxufTsiLCJpbXBvcnQgeyBfY2xvbmUgfSBmcm9tICcuL19jbG9uZSc7XHJcbmltcG9ydCB7IF9wb3NJbnQgfSBmcm9tICcuL19udW1iZXInO1xyXG5pbXBvcnQgeyBfYXJyYXlMaXN0IH0gZnJvbSAnLi9fb2JqZWN0cyc7XHJcbmltcG9ydCB7IF9lcnJvclRleHQsIF9zdHIgfSBmcm9tICcuL19zdHJpbmcnO1xyXG5cclxuLyoqXHJcbiAqIFByb21pc2UgcmVzdWx0IGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJUHJvbWlzZVJlc3VsdDxUUmVzdWx0PiB7XHJcblx0c3RhdHVzOiAncmVzb2x2ZWQnfCdyZWplY3RlZCc7XHJcblx0aW5kZXg6IG51bWJlcjtcclxuXHR2YWx1ZT86IFRSZXN1bHQ7XHJcblx0cmVhc29uPzogYW55O1xyXG59XHJcblxyXG4vKipcclxuICogUGFyYWxsZWwgcmVzb2x2ZSBsaXN0IGl0ZW1zIGA8VD1hbnk+W11gXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBhd2FpdCBfYXN5bmNBbGw8bnVtYmVyLCBudW1iZXI+KFsxLCAyXSwgYXN5bmMgKG51bSkgPT4gbnVtICogMikgLy9be3N0YXR1czoncmVzb2x2ZWQnLGluZGV4OjAsdmFsdWU6Mn0se3N0YXR1czoncmVzb2x2ZWQnLGluZGV4OjEsdmFsdWU6NH1dXHJcbiAqIGF3YWl0IF9hc3luY0FsbChbKCkgPT4gUHJvbWlzZS5yZXNvbHZlKDEpLCAyXSwgYXN5bmMgKG51bSkgPT4gbnVtICogMikgLy9be3N0YXR1czoncmVzb2x2ZWQnLGluZGV4OjAsdmFsdWU6Mn0se3N0YXR1czoncmVzb2x2ZWQnLGluZGV4OjEsdmFsdWU6NH1dXHJcbiAqIGF3YWl0IF9hc3luY0FsbChbYXN5bmMgKCkgPT4gUHJvbWlzZS5yZXNvbHZlKDIpLCA0XSkgLy9be3N0YXR1czoncmVzb2x2ZWQnLGluZGV4OjAsdmFsdWU6Mn0se3N0YXR1czoncmVzb2x2ZWQnLGluZGV4OjEsdmFsdWU6NH1dXHJcbiAqIFxyXG4gKiBAcGFyYW0gaXRlbXMgLSBxdWV1ZSBsaXN0IF8qKihzdXBwb3J0cyBwcm9taXNlIG9yIGNhbGxiYWNrIHZhbHVlcykqKl9cclxuICogQHBhcmFtIGNhbGxiYWNrIC0gcmVzb2x2ZSBxdWV1ZSBpdGVtIGNhbGxiYWNrIH4gc3VwcG9ydHMgcGFyYW1ldGVyczpcclxuICogLSBgaXRlbTpUYCB+IG5leHQgcXVldWUgaXRlbVxyXG4gKiAtIGBpbmRleDpudW1iZXJgIH4gbmV4dCBxdWV1ZSBpdGVtIGluZGV4XHJcbiAqIC0gYGxlbmd0aDpudW1iZXJgIH4gcXVldWVkIGl0ZW1zIGNvdW50XHJcbiAqIC0gXyoqY2FsbGJhY2sgcmVzdWx0IGlzIGFkZGVkIHRvIHRoZSBgSVByb21pc2VSZXN1bHRbXWAgd2l0aCBzYW1lIGBpbmRleGAqKl9cclxuICogXHJcbiAqIEBwYXJhbSBvblByb2dyZXNzIC0gcXVldWUgb24gcHJvZ3Jlc3MgY2FsbGJhY2sgfiBzdXBwb3J0cyBwYXJhbWV0ZXJzOlxyXG4gKiAtIGBwZXJjZW50Om51bWJlcmAgfiBxdWV1ZSBwcm9jZXNzZWQgaXRlbXMgcGVyY2VudGFnZSAoYGludGVnZXIgMCAtIDEwMGApXHJcbiAqIC0gYHRvdGFsOm51bWJlcmAgfiBxdWV1ZWQgaXRlbXMgY291bnRcclxuICogLSBgY29tcGxldGU6bnVtYmVyYCB+IHF1ZXVlIHJlc29sdmVkIGl0ZW1zIGNvdW50XHJcbiAqIC0gYGZhaWx1cmVzOm51bWJlcmAgfiBxdWV1ZSByZWplY3RlZCBpdGVtcyBjb3VudFxyXG4gKiAtIF8qKnJldHVybnMgdm9pZCoqX1xyXG4gKiBcclxuICogQHJldHVybnMgYFByb21pc2U8SVByb21pc2VSZXN1bHQ8VFJlc3VsdD5bXT5gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2FzeW5jQWxsID0gYXN5bmM8VCA9IGFueSwgVFJlc3VsdCA9IGFueT4oXHJcblx0aXRlbXM6IChUfFByb21pc2U8VD58KCgpPT5UfFByb21pc2U8VD4pKVtdLFxyXG5cdGNhbGxiYWNrPzogKGl0ZW06VCxpbmRleDpudW1iZXIsbGVuZ3RoOm51bWJlcik9PlByb21pc2U8VFJlc3VsdD4sXHJcblx0b25Qcm9ncmVzcz86IChwZXJjZW50Om51bWJlcix0b3RhbDpudW1iZXIsY29tcGxldGU6bnVtYmVyLGZhaWx1cmVzOm51bWJlcik9PnZvaWRcclxuKTogUHJvbWlzZTxJUHJvbWlzZVJlc3VsdDxUUmVzdWx0PltdPiA9PiB7XHJcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcblx0XHRcclxuXHRcdC8vLS0gcXVldWUgYXJndW1lbnRzXHJcblx0XHRjb25zdCBfY2FsbGJhY2s6IHVuZGVmaW5lZHwoKGl0ZW06VCxpbmRleDpudW1iZXIsbGVuZ3RoOm51bWJlcik9PlByb21pc2U8VFJlc3VsdD4pID0gJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGNhbGxiYWNrID8gY2FsbGJhY2sgOiB1bmRlZmluZWQ7XHJcblx0XHRjb25zdCBfb25Qcm9ncmVzczogdW5kZWZpbmVkfCgocGVyY2VudDpudW1iZXIsdG90YWw6bnVtYmVyLGNvbXBsZXRlOm51bWJlcixmYWlsdXJlczpudW1iZXIpPT52b2lkKSA9ICdmdW5jdGlvbicgPT09IHR5cGVvZiBvblByb2dyZXNzID8gb25Qcm9ncmVzcyA6IHVuZGVmaW5lZDtcclxuXHJcblx0XHQvLy0tIHF1ZXVlIHByb21pc2VcclxuXHRcdGxldCBjb21wbGV0ZSA9IDAsIGZhaWx1cmVzID0gMDtcclxuXHRcdGludGVyZmFjZSBJUXVldWVJdGVtIHtpbmRleDogbnVtYmVyOyB2YWx1ZTogVDt9XHJcblx0XHRjb25zdCBxdWV1ZTogSVF1ZXVlSXRlbVtdID0gX2FycmF5TGlzdChpdGVtcykubWFwKCh2YWx1ZSwgaW5kZXgpID0+ICh7aW5kZXgsIHZhbHVlfSkpO1xyXG5cdFx0Y29uc3QgbGVuZ3RoID0gcXVldWUubGVuZ3RoO1xyXG5cdFx0Y29uc3QgcmVzdWx0czogSVByb21pc2VSZXN1bHQ8VFJlc3VsdD5bXSA9IFtdO1xyXG5cdFx0Y29uc3QgX3Jlc29sdmUgPSAoKTogdm9pZCA9PiB2b2lkIHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZShyZXN1bHRzKSwgMCk7XHJcblxyXG5cdFx0Ly8tLSBxdWV1ZSBzaXplIGNoZWNrXHJcblx0XHRpZiAoIWxlbmd0aCl7XHJcblx0XHRcdGlmIChfb25Qcm9ncmVzcykgX29uUHJvZ3Jlc3MoMTAwLCBsZW5ndGgsIGNvbXBsZXRlLCBmYWlsdXJlcyk7XHJcblx0XHRcdHJldHVybiBfcmVzb2x2ZSgpO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZiAoX29uUHJvZ3Jlc3MpIF9vblByb2dyZXNzKDAsIGxlbmd0aCwgY29tcGxldGUsIGZhaWx1cmVzKTtcclxuXHJcblx0XHQvL2ZuID0+IGhlbHBlciA+IHBlbmRpbmcgcHJvbWlzZSBjb21wbGV0ZVxyXG5cdFx0Y29uc3QgX2RvbmUgPSAoZmFpbGVkOiBib29sZWFuID0gZmFsc2UpOiB2b2lkID0+IHtcclxuXHRcdFx0Y29tcGxldGUgKys7XHJcblx0XHRcdGlmIChmYWlsZWQpIGZhaWx1cmVzICsrO1xyXG5cclxuXHRcdFx0Ly8tLSBwcm9ncmVzcyB1cGRhdGUgKG9uIGRpZmZlcmVudCB0aHJlYWQpXHJcblx0XHRcdGlmIChfb25Qcm9ncmVzcyl7XHJcblx0XHRcdFx0Y29uc3QgcGVyY2VudDogbnVtYmVyID0gTWF0aC5taW4oTWF0aC5mbG9vcihjb21wbGV0ZS9sZW5ndGggKiAxMDApLCAxMDApO1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRfb25Qcm9ncmVzcyhwZXJjZW50LCBsZW5ndGgsIGNvbXBsZXRlLCBmYWlsdXJlcyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNhdGNoIChlcnI6IGFueSl7XHJcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oYFtJR05PUkVEXSBfYXN5bmNBbGwgPiBvblByb2dyZXNzIGNhbGxiYWNrIGV4Y2VwdGlvbjsgJHtfZXJyb3JUZXh0KGVycil9YCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLy0tIGNoZWNrIGZpbmlzaGVkXHJcblx0XHRcdGlmIChjb21wbGV0ZSA+PSBsZW5ndGgpIF9yZXNvbHZlKCk7XHJcblx0XHR9O1xyXG5cclxuXHRcdC8vLS0gcXVldWUgYWxsIHBlbmRpbmcgcHJvbWlzZXNcclxuXHRcdHF1ZXVlLmZvckVhY2goKG5leHQ6IElRdWV1ZUl0ZW0pOiB2b2lkID0+IHtcclxuXHRcdFx0KGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHRsZXQge3ZhbHVlOiBpdGVtLCBpbmRleH0gPSBuZXh0O1xyXG5cdFx0XHRcdGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgaXRlbSkgaXRlbSA9IGl0ZW0oKTtcclxuXHRcdFx0XHRpZiAoaXRlbSBpbnN0YW5jZW9mIFByb21pc2UpIGl0ZW0gPSBhd2FpdCBpdGVtO1xyXG5cdFx0XHRcdHJldHVybiBfY2FsbGJhY2sgPyBfY2FsbGJhY2soaXRlbSwgaW5kZXgsIGxlbmd0aCkgOiBpdGVtO1xyXG5cdFx0XHR9KSgpXHJcblx0XHRcdC50aGVuKCh2YWx1ZTogYW55KSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0c1tuZXh0LmluZGV4XSA9IHtzdGF0dXM6ICdyZXNvbHZlZCcsIGluZGV4OiBuZXh0LmluZGV4LCB2YWx1ZX07XHJcblx0XHRcdFx0cmV0dXJuIF9kb25lKCk7XHJcblx0XHRcdH0pXHJcblx0XHRcdC5jYXRjaCgocmVhc29uOiBhbnkpID0+IHtcclxuXHRcdFx0XHRyZXN1bHRzW25leHQuaW5kZXhdID0ge3N0YXR1czogJ3JlamVjdGVkJywgaW5kZXg6IG5leHQuaW5kZXgsIHJlYXNvbn07XHJcblx0XHRcdFx0cmV0dXJuIF9kb25lKHRydWUpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcmFsbGVsIHJlc29sdmUgbGlzdCBpdGVtcyBgPFQ9YW55PltdYCB3aXRoIG1heCBzaW11bHRhbmVvdXMgcHJvbWlzZXMgc2l6ZSBsaW1pdFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlcyAtIHF1ZXVlIHZhbHVlc1xyXG4gKiBAcGFyYW0gc2l6ZSAtIG1heCBzaW11bHRhbmVvdXMgcHJvbWlzZXMgc2l6ZSAoZGVmYXVsdDogYDBgIH4gdW5saW1pdGVkKVxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBxdWV1ZSByZXNvbHZlIHZhbHVlIGNhbGxiYWNrIH4gYCh2YWx1ZTpULGluZGV4Om51bWJlcixsZW5ndGg6bnVtYmVyKT0+UHJvbWlzZTxUUmVzdWx0PWFueT5gXHJcbiAqIEBwYXJhbSBvblByb2dyZXNzIC0gcXVldWUgb24gcHJvZ3Jlc3MgY2FsbGJhY2sgfiBgKHBlcmNlbnQ6bnVtYmVyLHRvdGFsOm51bWJlcixjb21wbGV0ZTpudW1iZXIsZmFpbHVyZXM6bnVtYmVyKT0+dm9pZGBcclxuICogQHJldHVybnMgYFByb21pc2U8SVByb21pc2VSZXN1bHQ8VFJlc3VsdD5bXT5gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2FzeW5jUXVldWUgPSBhc3luYyA8VCA9IGFueSwgVFJlc3VsdCA9IGFueT4odmFsdWVzOiBUW10sIHNpemU6IG51bWJlciA9IDAsIGNhbGxiYWNrPzogKHZhbHVlOlQsaW5kZXg6bnVtYmVyLGxlbmd0aDpudW1iZXIpPT5Qcm9taXNlPFRSZXN1bHQ+LCBvblByb2dyZXNzPzogKHBlcmNlbnQ6bnVtYmVyLHRvdGFsOm51bWJlcixjb21wbGV0ZTpudW1iZXIsZmFpbHVyZXM6bnVtYmVyKT0+dm9pZCk6IFByb21pc2U8SVByb21pc2VSZXN1bHQ8VFJlc3VsdD5bXT4gPT4ge1xyXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogKHJlc3VsdHM6SVByb21pc2VSZXN1bHQ8VFJlc3VsdD5bXSk9PnZvaWQpOiB2b2lkID0+IHtcclxuXHRcdFxyXG5cdFx0Ly8tLSBxdWV1ZSBhcmd1bWVudHNcclxuXHRcdHNpemUgPSBfcG9zSW50KHNpemUpID8/IDA7XHJcblx0XHRjb25zdCBfY2FsbGJhY2s6IHVuZGVmaW5lZHwoKHZhbHVlOlQsaW5kZXg6bnVtYmVyLGxlbmd0aDpudW1iZXIpPT5Qcm9taXNlPFRSZXN1bHQ+KSA9ICdmdW5jdGlvbicgPT09IHR5cGVvZiBjYWxsYmFjayA/IGNhbGxiYWNrIDogdW5kZWZpbmVkO1xyXG5cdFx0Y29uc3QgX29uUHJvZ3Jlc3M6IHVuZGVmaW5lZHwoKHBlcmNlbnQ6bnVtYmVyLHRvdGFsOm51bWJlcixjb21wbGV0ZTpudW1iZXIsZmFpbHVyZXM6bnVtYmVyKT0+dm9pZCkgPSAnZnVuY3Rpb24nID09PSB0eXBlb2Ygb25Qcm9ncmVzcyA/IG9uUHJvZ3Jlc3MgOiB1bmRlZmluZWQ7XHJcblx0XHRcclxuXHRcdC8vLS0gcXVldWUgcHJvbWlzZVxyXG5cdFx0aW50ZXJmYWNlIElRdWV1ZUl0ZW0ge2luZGV4OiBudW1iZXI7IHZhbHVlOiBUO31cclxuXHRcdGNvbnN0IHF1ZXVlOiBJUXVldWVJdGVtW10gPSBfYXJyYXlMaXN0KHZhbHVlcykubWFwKCh2YWx1ZSwgaW5kZXgpID0+ICh7aW5kZXgsIHZhbHVlfSkpO1xyXG5cdFx0Y29uc3QgbGVuZ3RoID0gcXVldWUubGVuZ3RoO1xyXG5cdFx0bGV0IHBlbmRpbmcgPSAwLCBjb21wbGV0ZSA9IDAsIGZhaWx1cmVzID0gMDtcclxuXHJcblx0XHQvLy0tIHF1ZXVlIHJlc3VsdHNcclxuXHRcdGNvbnN0IHJlc3VsdHM6IElQcm9taXNlUmVzdWx0PFRSZXN1bHQ+W10gPSBbXTtcclxuXHRcdGNvbnN0IF9yZXNvbHZlID0gKCk6IHZvaWQgPT4gdm9pZCBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUocmVzdWx0cyksIDApO1xyXG5cdFx0XHJcblx0XHQvLy0tIHF1ZXVlIHNpemUgY2hlY2tcclxuXHRcdGlmICghbGVuZ3RoKXtcclxuXHRcdFx0aWYgKF9vblByb2dyZXNzKSBfb25Qcm9ncmVzcygxMDAsIGxlbmd0aCwgY29tcGxldGUsIGZhaWx1cmVzKTtcclxuXHRcdFx0cmV0dXJuIF9yZXNvbHZlKCk7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmIChfb25Qcm9ncmVzcykgX29uUHJvZ3Jlc3MoMCwgbGVuZ3RoLCBjb21wbGV0ZSwgZmFpbHVyZXMpO1xyXG5cclxuXHRcdC8vZm4gPT4gaGVscGVyID4gcXVldWUgbmV4dCB0aW1lb3V0IG11bHRpcGxlIGNhbGxzIHRocm90dGxlICg1MG1zKVxyXG5cdFx0bGV0IG5leHRfdGltZW91dDogYW55ID0gdW5kZWZpbmVkO1xyXG5cdFx0Y29uc3QgX3F1ZXVlX25leHQgPSAoKTogdm9pZCA9PiB7XHJcblx0XHRcdGNsZWFyVGltZW91dChuZXh0X3RpbWVvdXQpO1xyXG5cdFx0XHRuZXh0X3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IF9uZXh0KCksIG5leHRfdGltZW91dCA/IDUwIDogMCk7XHJcblx0XHR9O1xyXG5cclxuXHRcdC8vPj4gcXVldWUgbmV4dCBzdGFydFxyXG5cdFx0X3F1ZXVlX25leHQoKTtcclxuXHJcblx0XHQvL2ZuID0+IGhlbHBlciA+IHF1ZXVlIG5leHRcclxuXHRcdGZ1bmN0aW9uIF9uZXh0KCk6IHZvaWQge1xyXG5cdFx0XHRcclxuXHRcdFx0Ly8tLSBwZW5kaW5nIGxpbWl0ID4gaWdub3JlIH4gc2ltdWx0YW5lb3VzIHNpemUgbGltaXRcclxuXHRcdFx0aWYgKHNpemUgJiYgKHBlbmRpbmcgKyAxKSA+IHNpemUpIHJldHVybjtcclxuXHRcdFx0XHJcblx0XHRcdC8vLS0gbmV4dCBxdWV1ZSBpdGVtID4gaWdub3JlIH4gZW1wdHkgcXVldWVcclxuXHRcdFx0Y29uc3QgbmV4dDogSVF1ZXVlSXRlbXx1bmRlZmluZWQgPSBxdWV1ZS5zaGlmdCgpO1xyXG5cdFx0XHRpZiAoIW5leHQpIHJldHVybjtcclxuXHJcblx0XHRcdC8vLS0gcGVuZGluZyBpbmNyZW1lbnRcclxuXHRcdFx0cGVuZGluZyArKztcclxuXHJcblx0XHRcdC8vZm4gPT4gaGVscGVyID4gcGVuZGluZyBwcm9taXNlIGNvbXBsZXRlXHJcblx0XHRcdGNvbnN0IF9kb25lID0gKGZhaWxlZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCA9PiB7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Ly8tLSBkZWNyZW1lbnQgcGVuZGluZyA+IGluY3JlbWVudCBjb21wbGV0ZS9mYWlsdXJlc1xyXG5cdFx0XHRcdHBlbmRpbmcgLS07XHJcblx0XHRcdFx0Y29tcGxldGUgKys7XHJcblx0XHRcdFx0aWYgKGZhaWxlZCkgZmFpbHVyZXMgKys7XHJcblxyXG5cdFx0XHRcdC8vLS0gcHJvZ3Jlc3MgdXBkYXRlIChvbiBkaWZmZXJlbnQgdGhyZWFkKVxyXG5cdFx0XHRcdGlmIChfb25Qcm9ncmVzcyl7XHJcblx0XHRcdFx0XHRjb25zdCBwZXJjZW50OiBudW1iZXIgPSBNYXRoLm1pbihNYXRoLmZsb29yKGNvbXBsZXRlL2xlbmd0aCAqIDEwMCksIDEwMCk7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRfb25Qcm9ncmVzcyhwZXJjZW50LCBsZW5ndGgsIGNvbXBsZXRlLCBmYWlsdXJlcyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjYXRjaCAoZXJyOiBhbnkpe1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oYFtJR05PUkVEXSBfYXN5bmNCYXRjaCA+IG9uUHJvZ3Jlc3MgY2FsbGJhY2sgZXhjZXB0aW9uOyAke19lcnJvclRleHQoZXJyKX1gKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Ly88PCBxdWV1ZSBjb21wbGV0ZS9uZXh0XHJcblx0XHRcdFx0aWYgKGNvbXBsZXRlID49IGxlbmd0aCkgcmV0dXJuIF9yZXNvbHZlKCk7XHJcblx0XHRcdFx0cmV0dXJuIF9xdWV1ZV9uZXh0KCk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHQvLy0tIHBlbmRpbmcgcHJvbWlzZVxyXG5cdFx0XHQoYXN5bmMoKT0+X2NhbGxiYWNrID8gX2NhbGxiYWNrKG5leHQudmFsdWUsIG5leHQuaW5kZXgsIGxlbmd0aCkgOiBuZXh0LnZhbHVlKSgpXHJcblx0XHRcdC50aGVuKChyZXN1bHQ6IGFueSk6IHZvaWQgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdHNbbmV4dC5pbmRleF0gPSB7c3RhdHVzOiAncmVzb2x2ZWQnLCBpbmRleDogbmV4dC5pbmRleCwgdmFsdWU6IHJlc3VsdH07XHJcblx0XHRcdFx0X2RvbmUoKTtcclxuXHRcdFx0fSlcclxuXHRcdFx0LmNhdGNoKChyZWFzb246IGFueSk6IHZvaWQgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdHNbbmV4dC5pbmRleF0gPSB7c3RhdHVzOiAncmVqZWN0ZWQnLCBpbmRleDogbmV4dC5pbmRleCwgcmVhc29ufTtcclxuXHRcdFx0XHRfZG9uZSh0cnVlKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvLzw8IHF1ZXVlIG5leHQgKGFkZClcclxuXHRcdFx0X3F1ZXVlX25leHQoKTtcclxuXHRcdH1cclxuXHR9KTtcclxufTtcclxuXHJcblxyXG4vKipcclxuICogR2V0IGFzeW5jIGl0ZXJhYmxlIHZhbHVlcyAoaS5lLiBgZm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiBfYXN5bmNWYWx1ZXMoYXJyYXkpKXsuLi59YClcclxuICogXHJcbiAqIEBwYXJhbSBhcnJheSAgVmFsdWVzXHJcbiAqIEByZXR1cm5zIEFzeW5jIGl0ZXJhYmxlIG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9hc3luY1ZhbHVlcyA9IDxUID0gYW55PihhcnJheTogVFtdKToge1xyXG5cdHZhbHVlczogKCkgPT4gVFtdLFxyXG5cdHNpemU6ICgpID0+IG51bWJlcjtcclxuXHRlYWNoOiAoY2FsbGJhY2s6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIsIF9icmVhazogKCk9PnZvaWQpPT5Qcm9taXNlPGFueT4pID0+IFByb21pc2U8dm9pZD47XHJcblx0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogKCkgPT4ge1xyXG5cdFx0bmV4dDogKCkgPT4gUHJvbWlzZTx7ZG9uZTogYm9vbGVhbjsgdmFsdWU6IFR9PjtcclxuXHR9XHJcbn0gPT4gKHtcclxuXHR2YWx1ZXM6ICgpID0+IGFycmF5LFxyXG5cdHNpemU6ICgpID0+IGFycmF5Lmxlbmd0aCxcclxuXHRhc3luYyBlYWNoKGNhbGxiYWNrOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCBfYnJlYWs6ICgpPT52b2lkKT0+UHJvbWlzZTxhbnk+KTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRsZXQgc2VsZiA9IHRoaXMsIGNhbmNlbCA9IGZhbHNlLCBpbmRleCA9IC0xLCBfYnJlYWsgPSAoKSA9PiB7XHJcblx0XHRcdGNhbmNlbCA9IHRydWU7XHJcblx0XHR9O1xyXG5cdFx0Zm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiBzZWxmKXtcclxuXHRcdFx0aW5kZXggKys7XHJcblx0XHRcdGlmIChjYW5jZWwpIGJyZWFrO1xyXG5cdFx0XHRhd2FpdCBjYWxsYmFjayh2YWx1ZSwgaW5kZXgsIHNlbGYuc2l6ZSgpLCBfYnJlYWspO1xyXG5cdFx0fVxyXG5cdH0sXHJcblx0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe1xyXG5cdFx0bGV0IGluZGV4ID0gMDtcclxuXHRcdGNvbnN0IHRoYXQgPSB0aGlzO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0YXN5bmMgbmV4dCgpOiBQcm9taXNlPHtkb25lOiBib29sZWFuOyB2YWx1ZTogVH0+IHtcclxuXHRcdFx0XHRsZXQgdmFsdWU6IFQgPSB1bmRlZmluZWQgYXMgVCwgbGVuZ3RoID0gdGhhdC5zaXplKCk7XHJcblx0XHRcdFx0aWYgKGluZGV4ID49IGxlbmd0aCkgcmV0dXJuIHtkb25lOiB0cnVlLCB2YWx1ZX07XHJcblx0XHRcdFx0dmFsdWUgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoYXJyYXlbaW5kZXhdKTtcclxuXHRcdFx0XHRpbmRleCArKztcclxuXHRcdFx0XHRyZXR1cm4ge2RvbmU6IGZhbHNlLCB2YWx1ZX07XHJcblx0XHRcdH0sXHJcblx0XHR9O1xyXG5cdH0sXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIERlbGF5IHByb21pc2VcclxuICogXHJcbiAqIEBwYXJhbSB0aW1lb3V0ICBEZWxheSBtaWxsaXNlY29uZHNcclxuICogQHJldHVybnMgYFByb21pc2U8bnVtYmVyPmAgdGltZW91dFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zbGVlcCA9IGFzeW5jICh0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG5cdHRpbWVvdXQgPSAhaXNOYU4odGltZW91dCkgJiYgdGltZW91dCA+PSAwID8gdGltZW91dCA6IDBcclxuXHRyZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUodGltZW91dCksIHRpbWVvdXQpKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXNvbHZlIHByb21pc2UgY2FsbGJhY2svdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB0aGlzIC0gY2FsbCBjb250ZXh0XHJcbiAqIEBwYXJhbSBwcm9taXNlIC0gcmVzb2x2ZSB+IGAoKT0+UHJvbWlzZTxhbnk+fGFueWAgY2FsbGJhY2sgcmVzdWx0IHwgYGFueWAgdmFsdWVcclxuICogQHBhcmFtIF9uZXcgLSB3aGV0aGVyIHRvIHJldHVybiBuZXcgcHJvbWlzZVxyXG4gKiBAcmV0dXJucyBgUHJvbWlzZTxhbnk+YCB+IGBQcm9taXNlLnJlc29sdmVgIHZhbHVlL3Jlc3VsdFxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9yZXNvbHZlKHRoaXM6IGFueSwgcHJvbWlzZTogKCgpPT5Qcm9taXNlPGFueT58YW55KXxhbnksIF9uZXc6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8YW55PiB7XHJcblx0Y29uc3QgcmVzb2x2ZWQgPSBQcm9taXNlLnJlc29sdmUoJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHByb21pc2UgPyBwcm9taXNlIDogKGFzeW5jICgpID0+IHByb21pc2UuY2FsbCh0aGlzKSkoKSk7XHJcblx0cmV0dXJuICFfbmV3ID8gcmVzb2x2ZWQgOiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogKHZhbHVlOiBhbnkpPT52b2lkLCByZWplY3Q6IChyZWFzb246IGFueSk9PnZvaWQpID0+IHJlc29sdmVkLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQGNsYXNzIHBlbmRpbmcgcHJvbWlzZSBhYm9ydCBlcnJvclxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFBlbmRpbmdBYm9ydEVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG5cdG5hbWU6IHN0cmluZyA9ICdQZW5kaW5nQWJvcnRFcnJvcic7XHJcblx0cGVuZGluZzogSVBlbmRpbmc7XHJcblx0Y29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwZW5kaW5nOiBJUGVuZGluZyl7XHJcblx0XHRzdXBlcihtZXNzYWdlKTtcclxuXHRcdHRoaXMucGVuZGluZyA9IHBlbmRpbmc7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogUGVuZGluZyBwcm9taXNlIGl0ZW0gaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElQZW5kaW5nIHtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIHByb21pc2Uga2V5IH4gdW5pcXVlIGlkZW50aWZpZXIgKGlnbm9yZXMvY2hhaW5zIGR1cGxpY2F0ZSlcclxuXHQgKi9cclxuXHRrZXk6IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogLSBwZW5kaW5nIHByb21pc2VcclxuXHQgKi9cclxuXHRwcm9taXNlOiBQcm9taXNlPGFueT47XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSByZXNvbHZlZCBzdGF0ZSB+IGAwYCA9IHBlbmRpbmcsIGAxYCA9IHJlc29sdmVkLCBgLTFgID0gcmVqZWN0ZWRcclxuXHQgKi9cclxuXHRyZXNvbHZlZDogLTF8MHwxO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIHdoZXRoZXIgdG8ga2VlcCByZXNvbHZlZCBwcm9taXNlIGluIGNhY2hlIH4gcGVuZGluZyBwcm9taXNlcyBhcmUgYXV0b21hdGljYWxseSByZW1vdmVkIGZyb20gY2FjaGUgYnkgZGVmYXVsdCBvciBvbiByZWplY3Rpb24uXHJcblx0ICovXHJcblx0a2VlcDogYm9vbGVhbjtcclxuXHJcblx0LyoqXHJcblx0ICogLSB3aGV0aGVyIHBlbmRpbmcgcHJvbWlzZSB3YXMgYWJvcnRlZFxyXG5cdCAqL1xyXG5cdGFib3J0ZWQ6IGJvb2xlYW47XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gd2hldGhlciBwZW5kaW5nIHByb21pc2Ugd2FzIGFib3J0ZWRcclxuXHQgKi9cclxuXHRhYm9ydEVycm9yPzogUGVuZGluZ0Fib3J0RXJyb3I7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gYWJvcnQgcGVuZGluZyBwcm9taXNlIH4gYWJvcnRlZCBwZW5kaW5nIHByb21pc2VzIHdpbGwgcmVqZWN0IHdpdGggYEFib3J0UGVuZGluZ0Vycm9yYCByZWFzb25cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gcmVhc29uIC0gc3BlY2lmeSBhYm9ydCByZWFzb24gKGRlZmF1bHQ6IGAnYWJvcnRlZCdgKVxyXG5cdCAqL1xyXG5cdGFib3J0OiAocmVhc29uPzpzdHJpbmcpPT52b2lkO1xyXG59XHJcblxyXG4vKipcclxuICogUGVuZGluZyBwcm9taXNlIGludGVyZmFjZSB+IGBleHRlbmRzIFByb21pc2U8YW55PmBcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBlbmRpbmdQcm9taXNlIGV4dGVuZHMgUHJvbWlzZTxhbnk+IHtcclxuXHRwZW5kaW5nOiBJUGVuZGluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIFBlbmRpbmcgcHJvbWlzZSB0YXNrIGNhY2hlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgUEVORElOR19DQUNIRToge1trZXk6IHN0cmluZ106IElQZW5kaW5nfSA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZS9yZXN1bWUgcGVuZGluZyBwcm9taXNlXHJcbiAqIFxyXG4gKiBAcGFyYW0ga2V5IC0gdW5pcXVlIHByb21pc2Uga2V5L25hbWUvSUQgfiBgc3RyaW5nYCAoaS5lLiBgU3RyaW5nKERhdGUubm93KCkpYClcclxuICogQHBhcmFtIHByb21pc2UgLSBwcm9taXNlIGluc3RhbmNlIGNyZWF0b3IgY2FsbGJhY2sgfiBgKCk9PlByb21pc2U8VFJlc3VsdD5gXHJcbiAqIEBwYXJhbSBtb2RlIC0gbmV3IHBlbmRpbmcgYmVoYXZpb3Igd2hlbiBga2V5YCBkdXBsaWNhdGUgZXhpc3RzOlxyXG4gKiAtIGAwYCA9IGlnbm9yZSAoZGVmYXVsdCkgfiByZXNvbHZlIHBlbmRpbmdcclxuICogLSBgMWAgPSByZXBsYWNlIH4gcmVwbGFjZSBwZW5kaW5nIHByb21pc2VcclxuICogLSBgMmAgPSByZXRyeSB+IHJlc29sdmUgbmV4dCBpZiBwZW5kaW5nIHByb21pc2UgcmVqZWN0aW9uXHJcbiAqIC0gYDNgID0gY2hhaW4gfiByZXNvbHZlIG5leHQgYWZ0ZXIgcGVuZGluZyBwcm9taXNlIGlzIGRvbmUgKHJlc29sdmVzL3JlamVjdHMpXHJcbiAqIEBwYXJhbSBrZWVwIC0gd2hldGhlciB0byBrZWVwIHJlc29sdmVkIHByb21pc2UgaW4gY2FjaGUgKGRlZmF1bHQ6IGBmYWxzZWApIH4gcGVuZGluZyBwcm9taXNlcyBhcmUgYXV0b21hdGljYWxseSByZW1vdmVkIGZyb20gY2FjaGUgYnkgZGVmYXVsdCBvciBvbiByZWplY3Rpb24uXHJcbiAqIEByZXR1cm5zIGBJUGVuZGluZ1Byb21pc2VgIH4gYGV4dGVuZHMgUHJvbWlzZTxhbnk+YFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9wZW5kaW5nID0gKGtleTogc3RyaW5nLCBwcm9taXNlOiAoKT0+UHJvbWlzZTxhbnk+LCBtb2RlOiAwfDF8MnwzID0gMCwga2VlcDogYm9vbGVhbiA9IGZhbHNlKTogSVBlbmRpbmdQcm9taXNlID0+IHtcclxuXHRpZiAoIShrZXkgPSBfc3RyKGtleSwgdHJ1ZSkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHBlbmRpbmcgYGtleWAgdmFsdWUuJyk7XHJcblx0aWYgKCdmdW5jdGlvbicgIT09IHR5cGVvZiBwcm9taXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHBlbmRpbmcgYHByb21pc2VgIGNhbGxiYWNrIGZ1bmN0aW9uLicpO1xyXG5cdGxldCBfcGVuZGluZ19yZXNvbHZlOiAoKHZhbHVlOmFueSk9PnZvaWQpfHVuZGVmaW5lZCA9IHVuZGVmaW5lZDsgXHJcblx0bGV0IF9wZW5kaW5nX3JlamVjdDogKChyZWFzb246YW55LCBhYm9ydD86Ym9vbGVhbik9PnZvaWQpfHVuZGVmaW5lZCA9IHVuZGVmaW5lZDsgXHJcblx0bGV0IHBlbmRpbmc6IElQZW5kaW5nID0gUEVORElOR19DQUNIRVtrZXldO1xyXG5cdGNvbnN0IGN1cnJlbnQgPSBwZW5kaW5nICYmIHBlbmRpbmcucHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UgJiYgcGVuZGluZy5yZXNvbHZlZCA+IC0xID8gcGVuZGluZy5wcm9taXNlIDogdW5kZWZpbmVkO1xyXG5cdGlmICghY3VycmVudCB8fCBtb2RlKXtcclxuXHRcdGNvbnN0IG5leHRfcHJvbWlzZSA9ICghY3VycmVudCB8fCBtb2RlID09PSAxKSA/IF9yZXNvbHZlKHByb21pc2UpIDogX3Jlc29sdmUoY3VycmVudCwgdHJ1ZSlcclxuXHRcdC50aGVuKGFzeW5jICh2YWx1ZTogYW55KSA9PiBtb2RlID09PSAyID8gdmFsdWUgOiBfcmVzb2x2ZShwcm9taXNlKSlcclxuXHRcdC5jYXRjaChhc3luYyAoKSA9PiBfcmVzb2x2ZShwcm9taXNlKSk7XHJcblx0XHRwZW5kaW5nID0gUEVORElOR19DQUNIRVtrZXldID0ge1xyXG5cdFx0XHRrZXksXHJcblx0XHRcdHByb21pc2U6IG5leHRfcHJvbWlzZSxcclxuXHRcdFx0cmVzb2x2ZWQ6IDAsXHJcblx0XHRcdGtlZXAsXHJcblx0XHRcdGFib3J0ZWQ6IGZhbHNlLFxyXG5cdFx0XHRhYm9ydEVycm9yOiB1bmRlZmluZWQsXHJcblx0XHRcdGFib3J0OiBmdW5jdGlvbihyZWFzb24/OiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdFx0XHRjb25zdCB0aGF0ID0gdGhpcztcclxuXHRcdFx0XHRpZiAoISgnZnVuY3Rpb24nID09PSB0eXBlb2YgX3BlbmRpbmdfcmVqZWN0ICYmICF0aGF0LnJlc29sdmVkICYmICF0aGF0LmFib3J0ZWQpKSByZXR1cm47XHJcblx0XHRcdFx0X3BlbmRpbmdfcmVqZWN0KHRoYXQuYWJvcnRFcnJvciA9IG5ldyBQZW5kaW5nQWJvcnRFcnJvcihfc3RyKHJlYXNvbiwgdHJ1ZSkgfHwgJ2Fib3J0ZWQnLCB0aGF0KSwgdGhhdC5hYm9ydGVkID0gdHJ1ZSk7XHJcblx0XHRcdH0sXHJcblx0XHR9O1xyXG5cdH1cclxuXHRlbHNlIHtcclxuXHRcdHBlbmRpbmcuYWJvcnRFcnJvciA9IHVuZGVmaW5lZDtcclxuXHRcdHBlbmRpbmcuYWJvcnRlZCA9IGZhbHNlO1xyXG5cdH1cclxuXHRsZXQgcmVzb2x2ZWQ6IC0xfDB8MSA9IDA7XHJcblx0Y29uc3QgcGVuZGluZ19wcm9taXNlOiBJUGVuZGluZ1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTogKHZhbHVlOiBhbnkpPT52b2lkLCByZWplY3Q6IChyZWFzb246IGFueSk9PnZvaWQpID0+IHtcclxuXHRcdF9wZW5kaW5nX3Jlc29sdmUgPSAodmFsdWU6IGFueSk6IHZvaWQgPT4ge1xyXG5cdFx0XHRpZiAoIXJlc29sdmVkKXtcclxuXHRcdFx0XHRyZXNvbHZlZCA9IDE7XHJcblx0XHRcdFx0cmVzb2x2ZSh2YWx1ZSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cGVuZGluZy5yZXNvbHZlZCA9IDE7XHJcblx0XHRcdGlmIChQRU5ESU5HX0NBQ0hFW2tleV0gPT09IHBlbmRpbmcgJiYgIXBlbmRpbmcua2VlcCkgZGVsZXRlIFBFTkRJTkdfQ0FDSEVba2V5XTtcclxuXHRcdH07XHJcblx0XHRfcGVuZGluZ19yZWplY3QgPSAocmVhc29uOiBhbnksIGFib3J0OiBib29sZWFuID0gZmFsc2UpOiB2b2lkID0+IHtcclxuXHRcdFx0aWYgKCFyZXNvbHZlZCl7XHJcblx0XHRcdFx0cmVzb2x2ZWQgPSAtMTtcclxuXHRcdFx0XHRyZWplY3QocmVhc29uKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoYWJvcnQpIHJldHVybjtcclxuXHRcdFx0cGVuZGluZy5yZXNvbHZlZCA9IC0xO1xyXG5cdFx0XHRpZiAoUEVORElOR19DQUNIRVtrZXldID09PSBwZW5kaW5nKSBkZWxldGUgUEVORElOR19DQUNIRVtrZXldO1xyXG5cdFx0fTtcclxuXHRcdGNvbnN0IF9yZWplY3QgPSAocmVhc29uOiBhbnkpOiB2b2lkID0+IHZvaWQgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBfcGVuZGluZ19yZWplY3QgPyBfcGVuZGluZ19yZWplY3QocmVhc29uKSA6IG51bGwpO1xyXG5cdFx0cGVuZGluZy5wcm9taXNlLnRoZW4oX3BlbmRpbmdfcmVzb2x2ZSwgX3JlamVjdCk7XHJcblx0fSkgYXMgYW55O1xyXG5cdHBlbmRpbmdfcHJvbWlzZS5wZW5kaW5nID0gcGVuZGluZztcclxuXHRyZXR1cm4gcGVuZGluZ19wcm9taXNlO1xyXG59XHJcblxyXG4vKipcclxuICogQWJvcnQgY2FjaGVkIHBlbmRpbmcgcHJvbWlzZXNcclxuICogXHJcbiAqIEBwYXJhbSByZW1vdmUgLSB3aGV0aGVyIHRvIHJlbW92ZSBhYm9ydGVkIHByb21pc2UgZnJvbSBjYWNoZSAoZGVmYXVsdDogYGZhbHNlYClcclxuICogQHBhcmFtIGtleSAtIHNwZWNpZnkgY2FjaGVkIHByb21pc2Uga2V5IHRvIGFib3J0IChkZWZhdWx0OiBgYWxsYCB+IHdoZW4ga2V5IGlzIGB1bmRlZmluZWRgL2JsYW5rKVxyXG4gKiBAcGFyYW0gcmVhc29uIC0gc3BlY2lmeSBhYm9ydCByZWFzb24gKGRlZmF1bHQ6IGAnYWJvcnRlZCdgKVxyXG4gKiBAcmV0dXJucyBgdm9pZGBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcGVuZGluZ0Fib3J0ID0gKHJlbW92ZTogYm9vbGVhbiA9IGZhbHNlLCBrZXk/OiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IHZvaWQgPT4ge1xyXG5cdGlmIChrZXkgPSBfc3RyKGtleSwgdHJ1ZSkpe1xyXG5cdFx0Y29uc3QgcGVuZGluZyA9IFBFTkRJTkdfQ0FDSEVba2V5XTtcclxuXHRcdGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgcGVuZGluZz8uYWJvcnQpIHBlbmRpbmcuYWJvcnQocmVhc29uKTtcclxuXHRcdGlmIChyZW1vdmUgJiYgcGVuZGluZz8ua2V5KSBkZWxldGUgUEVORElOR19DQUNIRVtwZW5kaW5nLmtleV07XHJcblx0fVxyXG5cdGVsc2Uge1xyXG5cdFx0Zm9yIChjb25zdCBwZW5kaW5nIG9mIE9iamVjdC52YWx1ZXMoUEVORElOR19DQUNIRSkpe1xyXG5cdFx0XHRpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHBlbmRpbmc/LmFib3J0KSBwZW5kaW5nLmFib3J0KHJlYXNvbik7XHJcblx0XHRcdGlmIChyZW1vdmUgJiYgcGVuZGluZz8ua2V5KSBkZWxldGUgUEVORElOR19DQUNIRVtwZW5kaW5nLmtleV07XHJcblx0XHR9XHJcblx0fVxyXG59OyIsIi8qKlxyXG4gKiBRdWV1ZSBvYmplY3QgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElRdWV1ZTxUPiB7XHJcblx0Y291bnQ6IG51bWJlcjtcclxuXHRsZW5ndGg6IG51bWJlcjtcclxuXHRpc0VtcHR5OiBib29sZWFuO1xyXG5cdGVucXVldWUodmFsdWU6IFQpOiB2b2lkO1xyXG5cdGRlcXVldWUoKTogVHx1bmRlZmluZWQ7XHJcblx0cGVlaygpOiBUfHVuZGVmaW5lZDtcclxuXHR2YWx1ZXMoKTogVFtdO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlIHF1ZXVlIG9iamVjdFxyXG4gKiBcclxuICogQHJldHVybnMgYElRdWV1ZWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcXVldWUgPSA8VCA9IGFueT4oKTogSVF1ZXVlPFQ+ID0+IHtcclxuXHRjb25zdCBpdGVtczoge1trZXk6IG51bWJlcl06IFR9ID0ge307XHJcblx0bGV0IGhlYWQ6IG51bWJlciA9IDA7XHJcblx0bGV0IHRhaWw6IG51bWJlciA9IDA7XHJcblx0cmV0dXJuIHtcclxuXHRcdGdldCBjb3VudCgpOiBudW1iZXIge1xyXG5cdFx0XHRyZXR1cm4gdGFpbDtcclxuXHRcdH0sXHJcblx0XHRnZXQgbGVuZ3RoKCk6IG51bWJlciB7XHJcblx0XHRcdHJldHVybiB0YWlsIC0gaGVhZDtcclxuXHRcdH0sXHJcblx0XHRnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMubGVuZ3RoID09PSAwO1xyXG5cdFx0fSxcclxuXHRcdGVucXVldWUodmFsdWU6IFQpOiB2b2lkIHtcclxuXHRcdFx0aXRlbXNbdGFpbF0gPSB2YWx1ZTtcclxuXHRcdFx0dGFpbCArKztcclxuXHRcdH0sXHJcblx0XHRkZXF1ZXVlKCk6IFR8dW5kZWZpbmVkIHtcclxuXHRcdFx0Y29uc3QgaXRlbSA9IGl0ZW1zW2hlYWRdO1xyXG5cdFx0XHRkZWxldGUgaXRlbXNbaGVhZF07XHJcblx0XHRcdGhlYWQgKys7XHJcblx0XHRcdHJldHVybiBpdGVtO1xyXG5cdFx0fSxcclxuXHRcdHBlZWsoKTogVHx1bmRlZmluZWQge1xyXG5cdFx0XHRyZXR1cm4gaXRlbXNbaGVhZF07XHJcblx0XHR9LFxyXG5cdFx0dmFsdWVzKCk6IFRbXSB7XHJcblx0XHRcdHJldHVybiBPYmplY3QudmFsdWVzKGl0ZW1zKTtcclxuXHRcdH0sXHJcblx0fTtcclxufTsiLCIvKipcclxuICogUkM0IGVuY3J5cHQvZGVjcnlwdCB0ZXh0IHZhbHVlXHJcbiAqIFxyXG4gKiBAcGFyYW0gdGV4dCAtIHBhcnNlIHRleHRcclxuICogQHBhcmFtIGtleSAtIGN5cGhlciBrZXkgKGRlZmF1bHQ6IGAnYWxvaG9tb3JhJ2ApXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3JjNCA9ICh0ZXh0OiBhbnksIGtleT86IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcblx0aWYgKCEodGV4dCA9IFN0cmluZyh0ZXh0ID8/ICcnKSkpIHJldHVybiAnJztcclxuXHRrZXkgPSBTdHJpbmcoa2V5ID8/ICdhbG9ob21vcmEnKTtcclxuXHRjb25zdCBTOiBhbnlbXSA9IFtdLCBLOiBhbnlbXSA9IFtdO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspe1xyXG5cdFx0U1tpXSA9IGk7XHJcblx0XHRLW2ldID0ga2V5LmNoYXJDb2RlQXQoaSAlIGtleS5sZW5ndGgpO1xyXG5cdH1cclxuXHRsZXQgaiA9IDA7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xyXG5cdFx0aiA9IChqICsgU1tpXSArIEtbaV0pICUgMjU2O1xyXG5cdFx0W1NbaV0sIFNbal1dID0gW1Nbal0sIFNbaV1dO1xyXG5cdH1cclxuXHRsZXQgcmVzdWx0ID0gJycsIGkgPSAwOyBqID0gMDtcclxuXHRmb3IgKGxldCBuID0gMDsgbiA8IHRleHQubGVuZ3RoOyBuKyspIHtcclxuXHRcdGkgPSAoaSArIDEpICUgMjU2O1xyXG5cdFx0aiA9IChqICsgU1tpXSkgJSAyNTY7XHJcblx0XHRbU1tpXSwgU1tqXV0gPSBbU1tqXSwgU1tpXV07XHJcblx0XHRjb25zdCBrZXlzdHJlYW0gPSBTWyhTW2ldICsgU1tqXSkgJSAyNTZdO1xyXG5cdFx0cmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodGV4dC5jaGFyQ29kZUF0KG4pIF4ga2V5c3RyZWFtKTtcclxuXHR9XHJcblx0cmV0dXJuIHJlc3VsdDtcclxufTsiLCJpbXBvcnQgeyBib29sIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5pbXBvcnQgeyBfanNvblN0cmluZ2lmeSB9IGZyb20gJy4vX2pzb24nO1xyXG5cclxuLyoqXHJcbiAqIEdldCB1bmlxdWUgc3RyaW5nIG9mIHJhbmRvbSBjaGFyYWN0ZXJzXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfeHVpZCgpID0+ICd6dDdlZzRldTNiNm1mNjZqZ2EnIDE4XHJcbiAqIFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB+IGFscGhhbnVtZXJpYyBsb3dlcmNhc2VcclxuICovXHJcbmV4cG9ydCBjb25zdCBfeHVpZCA9ICgpOiBzdHJpbmcgPT4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIpICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKS50b1N0cmluZygzNik7XHJcblxyXG4vKipcclxuICogR2V0IHVuaXF1ZSBzdHJpbmcgb2YgcmFuZG9tIGNoYXJhY3RlcnMgYHN0cmluZ2AgfiBhbHBoYW51bWVyaWMgbG93ZXJjYXNlXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfdXVpZCgpID0+ICdnOWVlbTV0cnkzcGxsOXVlJyAxNlxyXG4gKiBfdXVpZCgyMCkgPT4gJ2s2eW8yemd6b2RqbGw5dWVyczR1JyAyMFxyXG4gKiBfdXVpZCg3LCAndGVzdF8nKSA9PiAndGVzdF8zYm14ajJ0JyAxMlxyXG4gKiBfdXVpZCg3LCAndGVzdF97dXVpZH1fZXhhbXBsZScpID0+ICd0ZXN0X2xrOXI1dHZfZXhhbXBsZScgMjBcclxuICogX3V1aWQoNywgJ3Rlc3Rfe3V1aWR9X3t1dWlkfV9leGFtcGxlJykgPT4gJ3Rlc3RfZzk0OHZxZl8wczZtczh5X2V4YW1wbGUnIDI4XHJcbiAqIFxyXG4gKiBAcGFyYW0gbGVuZ3RoIC0gdXVpZCBsZW5ndGggLSBpbnRlZ2VyIGBudW1iZXJgIG1pbj1gN2AsIG1heD1gNjRgIChkZWZhdWx0IGAxNmApXHJcbiAqIEBwYXJhbSB0ZW1wbGF0ZSAtIHV1aWQgdGVtcGxhdGUgLSB0cmltbWVkIGBzdHJpbmdgIH4gYXBwZW5kcyB3aGVuIGAne3V1aWR9J2Agbm90IGluIHRlbXBsYXRlXHJcbiAqIEByZXR1cm5zIHVuaXF1ZSBgc3RyaW5nYCB+IGFscGhhbnVtZXJpYyBsb3dlcmNhc2UgYChsZW5ndGhbbWluOiA3LCBtYXg6IDY0XSlgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3V1aWQgPSAobGVuZ3RoPzogbnVtYmVyLCB0ZW1wbGF0ZT86IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgbGVuOiBudW1iZXIgPSBsZW5ndGggIT09IHVuZGVmaW5lZCAmJiAhaXNOYU4ocGFyc2VJbnQobGVuZ3RoICsgJycpKSAmJiBOdW1iZXIuaXNJbnRlZ2VyKGxlbmd0aCkgJiYgbGVuZ3RoID49IDcgJiYgbGVuZ3RoIDw9IDY0ID8gbGVuZ3RoIDogMTY7XHJcblx0Y29uc3QgX2dldF91dWlkID0gKCkgPT4ge1xyXG5cdFx0bGV0IGJ1ZmZlciA9ICcnO1xyXG5cdFx0d2hpbGUgKGJ1ZmZlci5sZW5ndGggPCBsZW4pIGJ1ZmZlciArPSBfeHVpZCgpO1xyXG5cdFx0cmV0dXJuIGJ1ZmZlci5zdWJzdHJpbmcoMCwgbGVuKTtcclxuXHR9O1xyXG5cdGxldCB1dWlkOiBzdHJpbmcgPSAnJztcclxuXHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB0ZW1wbGF0ZSAmJiAodGVtcGxhdGUgPSB0ZW1wbGF0ZS50cmltKCkpKXtcclxuXHRcdGxldCBhcHBlbmQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdFx0Y29uc3QgdG1wID0gdGVtcGxhdGUucmVwbGFjZSgvXFx7dXVpZFxcfS9nLCAoKSA9PiB7XHJcblx0XHRcdGlmIChhcHBlbmQpIGFwcGVuZCA9IGZhbHNlO1xyXG5cdFx0XHRyZXR1cm4gX2dldF91dWlkKCk7XHJcblx0XHR9KTtcclxuXHRcdHV1aWQgPSBhcHBlbmQgPyB0bXAgKyBfZ2V0X3V1aWQoKSA6IHRtcDtcclxuXHR9XHJcblx0ZWxzZSB1dWlkID0gX2dldF91dWlkKCk7XHJcblx0cmV0dXJuIHV1aWQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2FmZWx5IGBzdHJpbmdgIGNhc3QgdmFsdWVcclxuICogLSBSZXR1cm5zIElTTyBmb3JtYXQgdGltZXN0YW1wIGZvciB2YWxpZCBEYXRlIHZhbHVlXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgIENhc3QgdmFsdWVcclxuICogQHBhcmFtIF9kZWZhdWx0ICBbZGVmYXVsdDogYCcnYF0gRGVmYXVsdCByZXN1bHQgb24gZmFpbHVyZVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zdHJpbmcgPSAodmFsdWU6IGFueSwgX2RlZmF1bHQ6IHN0cmluZyA9ICcnKTogc3RyaW5nID0+IHtcclxuXHRsZXQgdmFsOiBzdHJpbmcgPSAnJztcclxuXHR0cnkge1xyXG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUuZ2V0VGltZSgpKSkgdmFsID0gdmFsdWUudG9JU09TdHJpbmcoKTtcclxuXHRcdGVsc2UgdmFsID0gU3RyaW5nKHZhbHVlKTtcclxuXHR9XHJcblx0Y2F0Y2ggKGUpe1xyXG5cdFx0dmFsID0gX2RlZmF1bHQ7XHJcblx0fVxyXG5cdHJldHVybiB2YWw7XHJcbn07XHJcblxyXG4vKipcclxuICogU2FmZWx5IGBzdHJpbmdgIGNhc3QgdmFsdWUgaWYgcG9zc2libGUuXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWVcclxuICogQHJldHVybnMgYGZhbHNlfHN0cmluZ2AgQ2FzdCByZXN1bHQgb3IgYGZhbHNlYCBvbiBmYWlsdXJlXHJcbiAqIEByZXR1cm5zIHZhbHVlIGBzdHJpbmdgIHwgYGZhbHNlYCBvbiBmYWlsdXJlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3N0cmluZ2FibGUgPSAodmFsdWU6IGFueSk6IGZhbHNlfHN0cmluZyA9PiB7XHJcblx0Y29uc3QgZmFpbGVkID0gYCEke0RhdGUubm93KCl9IWAsIHZhbCA9IF9zdHJpbmcodmFsdWUsIGZhaWxlZCksIHBhdHRlcm4gPSAvXFxbb2JqZWN0IFxcdytcXF0vO1xyXG5cdHJldHVybiAhKHZhbCA9PT0gZmFpbGVkIHx8IHBhdHRlcm4udGVzdCh2YWwpKSA/IHZhbCA6IGZhbHNlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgdmFsdWUgdG8gYHN0cmluZ2AgZXF1aXZhbGVudFxyXG4gKiBcclxuICogLSBSZXR1cm5zICcnIGZvciBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIHZhbHVlXHJcbiAqIC0gV2hlbiBgc3RyaW5naWZ5YCBpcyBgZmFsc2VgLCByZXR1cm5zICcnIGZvciBgYXJyYXlgIG9yIGBvYmplY3RgIHZhbHVlIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGB0b1N0cmluZygpYCBtZXRob2RcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcGFyYW0gdHJpbSAgVHJpbSByZXN1bHRcclxuICogQHBhcmFtIHN0cmluZ2lmeSAgU3RyaW5naWZ5IGBhcnJheWAgb3IgYG9iamVjdGAgdmFsdWUgdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgYHRvU3RyaW5nKClgIG1ldGhvZFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zdHIgPSAodmFsdWU6IGFueSwgdHJpbTogYm9vbGVhbiA9IGZhbHNlLCBzdHJpbmdpZnk6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyA9PiB7XHJcblx0aWYgKCdzdHJpbmcnICE9PSB0eXBlb2YgdmFsdWUpe1xyXG5cdFx0aWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAnJztcclxuXHRcdGVsc2UgaWYgKCdvYmplY3QnID09PSB0eXBlb2YgdmFsdWUpe1xyXG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBzdHJpbmdpZnkgPyBfanNvblN0cmluZ2lmeSh2YWx1ZSkgOiAnJztcclxuXHRcdFx0Y29uc3QgdG1wID0gX3N0cmluZ2FibGUodmFsdWUpO1xyXG5cdFx0XHRpZiAodG1wID09PSBmYWxzZSkgcmV0dXJuIHN0cmluZ2lmeSA/IF9qc29uU3RyaW5naWZ5KHZhbHVlKSA6ICcnO1xyXG5cdFx0XHRlbHNlIHZhbHVlID0gdG1wO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSB2YWx1ZSA9IF9zdHJpbmcodmFsdWUpO1xyXG5cdH1cclxuXHRyZXR1cm4gdHJpbSA/IHZhbHVlLnRyaW0oKSA6IHZhbHVlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE5vcm1hbGl6ZSBzdHJpbmcgYnkgcmVtb3ZpbmcgYWNjZW50cyAoaS5lLiBcIkFtw6lsaWVcIiA9PiBcIkFtZWxpZVwiKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIG5vcm1hbGl6ZWQgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfc3RyTm9ybSA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IF9zdHIodmFsdWUpLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG5cclxuLyoqXHJcbiAqIEVzY2FwZSByZWdleCBvcGVyYXRvcnMgZnJvbSBzdHJpbmdcclxuICogLSBpLmUuIGAnXFxcXHNcXG5cXHJcXHRcXHZcXHgwMH5fIUAjJCVeJiooKVtdXFxcXC8sLj9cIlxcJzo7e318PD49Ky0nYCA9PiBgJ1xcXFxzXFxuXFxyXFx0XFx2XFx4MDBcXHN+XyFAI1xcXFwkJVxcXFxeJlxcXFwqXFxcXChcXFxcKVxcXFxbXFxcXF1cXFxcXFxcXC8sXFxcXC5cXFxcP1wiXFwnOjtcXFxce1xcXFx9XFxcXHw8Pj1cXFxcKy0nYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIGVzY2FwZWQgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcmVnRXNjYXBlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4gX3N0cih2YWx1ZSkucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcclxuXHJcbi8qKlxyXG4gKiBFc2NhcGUgc3RyaW5nIHNwZWNpYWwgY2hhcmFjdGVyc1xyXG4gKiAtIGkuZS4gYCdcXHJcXG5cXHRcXGZcXHZcXHgwMC1cXHUwMGYzLVxcdTEyMzQtXFx4YjQtXFx1MDAwYi0vXFxcXCdgID0+IGAnXFxcXHJcXFxcblxcXFx0XFxcXGZcXFxcdlxcXFx4MDAtw7Mt4Yi0LcK0LVxcXFx2LS9cXFxcXFxcXCdgXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWVcclxuICogQHJldHVybnMgZXNjYXBlZCBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zdHJFc2NhcGUgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiBKU09OLnN0cmluZ2lmeShfc3RyKHZhbHVlKSlcclxuLnJlcGxhY2UoL1xcXFx1KFtcXGRcXHddezR9KS9nLCAobSwgcykgPT4ge1xyXG5cdGNvbnN0IGggPSBwYXJzZUludChzLCAxNik7XHJcblx0cmV0dXJuIGggPiAyNTUgPyBtIDogJ1xcXFwnICsgZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZy5mcm9tQ2hhckNvZGUoaCkpLnJlcGxhY2UoJyUnLCAneCcpLnJlcGxhY2UoJ3gwQicsICd2Jyk7XHJcbn0pXHJcbi5yZXBsYWNlKC9eXCJ8XCIkL2csICcnKVxyXG4ucmVwbGFjZSgvXFxcXFwiL2csICdcIicpO1xyXG5cclxuLyoqXHJcbiAqIEVzY2FwZSBgU1FMYCBzcGVjaWFsIGNoYXJhY3RlcnMgZnJvbSBxdWVyeSBgc3RyaW5nYCB2YWx1ZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgYHN0cmluZ2BcclxuICogQHJldHVybnNcclxuICogLSBgc3RyaW5nYCB3aXRoIHNwZWNpYWwgY2hhcmFjdGVycyBlc2NhcGVkIH4gYCdcXFxcJ1wiXFwwXFxuXFxyXFx4MWEnYFxyXG4gKiAtIGBudW1iZXJgICh1bmNoYW5nZWQpIHdoZW4gdHlwZSBpcyBgbnVtYmVyYCBhbmQgbm90ICBgTmFOYFxyXG4gKiAtIGBib29sZWFuYCAodW5jaGFuZ2VkKSB3aGVuIHR5cGUgaXMgYHRydWVgIG9yIGBmYWxzZWBcclxuICogLSBgbnVsbGAgd2hlbiB0eXBlIGlzIGB1bmRlZmluZWRgfGBOYU5gfGBudWxsYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zcWxFc2NhcGUgPSAodmFsdWU6IGFueSk6IHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsID0+IHtcclxuXHRpZiAodW5kZWZpbmVkID09PSB2YWx1ZSB8fCBudWxsID09PSB2YWx1ZSkgcmV0dXJuIG51bGw7XHJcblx0ZWxzZSBpZiAoJ2Jvb2xlYW4nID09PSB0eXBlb2YgdmFsdWUpIHJldHVybiB2YWx1ZTtcclxuXHRlbHNlIGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIHZhbHVlKSByZXR1cm4gIWlzTmFOKHZhbHVlKSA/IHZhbHVlIDogbnVsbDtcclxuXHRpZiAoISh2YWx1ZSA9IF9zdHIodmFsdWUsIGZhbHNlLCB0cnVlKSkpIHJldHVybiB2YWx1ZTtcclxuXHRyZXR1cm4gdmFsdWUucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKVxyXG5cdC5yZXBsYWNlKC9cXDAvZywgJ1xcXFwwJylcclxuXHQucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXHJcblx0LnJlcGxhY2UoL1xcci9nLCAnXFxcXHInKVxyXG5cdC5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcclxuXHQucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpXHJcblx0LnJlcGxhY2UoL1xceDFhL2csICdcXFxcWicpXHJcbn07XHJcblxyXG4vKipcclxuICogUmVnZXggc3RyaW5nIHRyaW0gY2hhcmFjdGVyc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlICBUcmltIHZhbHVlXHJcbiAqIEBwYXJhbSBjaGFycyAgU3RyaXAgY2hhcmFjdGVycyBbZGVmYXVsdDogYCcgXFxuXFxyXFx0XFxmXFx2XFx4MDAnYF0gLSB1c2UgYCd7ZGVmYXVsdH0nYCB0byBpbmNsdWRlIGRlZmF1bHRzIChpLmUgYCcte2RlZmF1bHRzfSdgID09IGAnLSBcXG5cXHJcXHRcXGZcXHZcXHgwMCdgKVxyXG4gKiBAcGFyYW0gcmwgIFRyaW0gbW9kZSAoYCcnYCA9PiAoZGVmYXVsdCkgdHJpbSByaWdodCAmIGxlZnQsIGAncid8J3JpZ2h0J2AgPT4gdHJpbSByaWdodCwgYCdsJ3wnbGVmdCdgID0+IHRyaW0gbGVmdClcclxuICogQHJldHVybnMgdHJpbW1lZCBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90cmltID0gKHZhbHVlOiBhbnksIGNoYXJzOiBzdHJpbmcgPSAnIFxcclxcblxcdFxcZlxcdlxceDAwJywgcmw6ICcnfCdyJ3wnbCd8J3JpZ2h0J3wnbGVmdCcgPSAnJyk6IHN0cmluZyA9PiB7XHJcblx0aWYgKCEodmFsdWUgPSBfc3RyKHZhbHVlKSkgfHwgISgoY2hhcnMgPSBfc3RyKGNoYXJzKSkpKSByZXR1cm4gdmFsdWU7XHJcblx0Y2hhcnMgPSBjaGFycy5yZXBsYWNlKC9cXHtkZWZhdWx0XFx9LywgJyBcXHJcXG5cXHRcXGZcXHZcXHgwMCcpO1xyXG5cdGxldCB0cmltX2NoYXJzOiBzdHJpbmdbXSA9IFtdLCBkMSA9IDAsIGQyID0gMDtcclxuXHRmb3IgKGNvbnN0IHYgb2YgWy4uLm5ldyBTZXQoWy4uLmNoYXJzXSldKXtcclxuXHRcdGlmICghdikgY29udGludWU7XHJcblx0XHRpZiAodiA9PT0gJy0nKXtcclxuXHRcdFx0ZDEgPSAxO1xyXG5cdFx0XHRjb250aW51ZTtcclxuXHRcdH1cclxuXHRcdGlmICh2ID09PSAnXycpe1xyXG5cdFx0XHRkMiA9IDE7XHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0fVxyXG5cdFx0dHJpbV9jaGFycy5wdXNoKHYpO1xyXG5cdH1cclxuXHRpZiAoZDIpIHRyaW1fY2hhcnMudW5zaGlmdCgnXycpO1xyXG5cdGlmIChkMSkgdHJpbV9jaGFycy51bnNoaWZ0KCctJyk7XHJcblx0bGV0IHAgPSBgWyR7X3JlZ0VzY2FwZSh0cmltX2NoYXJzLmpvaW4oJycpKX1dKmAsIHBhdHRlcm4gPSBgXiR7cH18JHtwfSRgO1xyXG5cdGlmIChbJ2wnLCAnbGVmdCddLmluY2x1ZGVzKHJsKSkgcGF0dGVybiA9IGBeJHtwfWA7XHJcblx0ZWxzZSBpZiAoWydyJywgJ3JpZ2h0J10uaW5jbHVkZXMocmwpKSBwYXR0ZXJuID0gYCR7cH0kYDtcclxuXHRyZXR1cm4gdmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKHBhdHRlcm4sICdncycpLCAnJyk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmVnZXggc3RyaW5nIHRyaW0gbGVhZGluZyBjaGFyYWN0ZXJzIChsZWZ0KVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIFRyaW0gdmFsdWVcclxuICogQHBhcmFtIGNoYXJzIFN0cmlwIGNoYXJhY3RlcnMgW2RlZmF1bHQ6IGAnIFxcblxcclxcdFxcZlxcdlxceDAwJ2BdIC0gdXNlIGAne2RlZmF1bHR9J2AgdG8gaW5jbHVkZSBkZWZhdWx0cyAoaS5lIGAnLXtkZWZhdWx0c30nYCA9PSBgJy0gXFxuXFxyXFx0XFxmXFx2XFx4MDAnYClcclxuICogQHJldHVybnMgbGVmdCB0cmltbWVkIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2x0cmltID0gKHZhbHVlOiBhbnksIGNoYXJzOiBzdHJpbmcgPSAnIFxcclxcblxcdFxcZlxcdlxceDAwJyk6IHN0cmluZyA9PiBfdHJpbSh2YWx1ZSwgY2hhcnMsICdsZWZ0Jyk7XHJcblxyXG4vKipcclxuICogUmVnZXggc3RyaW5nIHRyaW0gdHJhaWxpbmcgY2hhcmFjdGVycyAocmlnaHQpXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgVHJpbSB2YWx1ZVxyXG4gKiBAcGFyYW0gY2hhcnMgU3RyaXAgY2hhcmFjdGVycyBbZGVmYXVsdDogYCcgXFxuXFxyXFx0XFxmXFx2XFx4MDAnYF0gLSB1c2UgYCd7ZGVmYXVsdH0nYCB0byBpbmNsdWRlIGRlZmF1bHRzIChpLmUgYCcte2RlZmF1bHRzfSdgID09IGAnLSBcXG5cXHJcXHRcXGZcXHZcXHgwMCdgKVxyXG4gKiBAcmV0dXJucyByaWdodCB0cmltbWVkIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3J0cmltID0gKHZhbHVlOiBhbnksIGNoYXJzOiBzdHJpbmcgPSAnIFxcclxcblxcdFxcZlxcdlxceDAwJyk6IHN0cmluZyA9PiBfdHJpbSh2YWx1ZSwgY2hhcnMsICdyaWdodCcpO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgc3RyaW5nIHRvIHRpdGxlIGNhc2UgKGkuZS4gXCJoZUxMbyB3b1JsZFwiID0+IFwiSGVsbG8gV29ybGRcIilcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgUGFyc2Ugc3RyaW5nXHJcbiAqIEBwYXJhbSBrZWVwQ2FzZSAgRGlzYWJsZSBsb3dlcmNhc2luZyB1bmNhcGl0YWxpemVkIGNoYXJhY3RlcnNcclxuICogQHJldHVybnMgVGl0bGUgQ2FzZSBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90b1RpdGxlQ2FzZSA9ICh2YWx1ZTogYW55LCBrZWVwQ2FzZTogYm9vbCA9IGZhbHNlKTogc3RyaW5nID0+IF9zdHIodmFsdWUpXHJcbi5yZXBsYWNlKC9cXHdcXFMqL2csIG1hdGNoID0+IG1hdGNoWzBdLnRvVXBwZXJDYXNlKClcclxuKyAoa2VlcENhc2UgPyBtYXRjaC5zdWJzdHJpbmcoMSkgOiBtYXRjaC5zdWJzdHJpbmcoMSkudG9Mb3dlckNhc2UoKSkpO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgc3RyaW5nIHRvIHNlbnRlbmNlIGNhc2VcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgUGFyc2Ugc3RyaW5nXHJcbiAqIEBwYXJhbSBrZWVwQ2FzZSAgRGlzYWJsZSBsb3dlcmNhc2luZyB1bmNhcGl0YWxpemVkIGNoYXJhY3RlcnNcclxuICogQHJldHVybnMgU2VudGVuY2UgY2FzZSBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90b1NlbnRlbmNlQ2FzZSA9ICh2YWx1ZTogYW55LCBrZWVwQ2FzZTogYm9vbCA9IGZhbHNlKTogc3RyaW5nID0+IHtcclxuXHRsZXQgYnVmZmVyOiBzdHJpbmcgPSAnJztcclxuXHRmb3IgKGxldCB2YWwgb2YgX3N0cih2YWx1ZSkuc3BsaXQoLygoPzpcXC58XFw/fCEpXFxzKikvKSl7XHJcblx0XHRpZiAodmFsLmxlbmd0aCl7XHJcblx0XHRcdGNvbnN0IGZpcnN0ID0gdmFsLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpO1xyXG5cdFx0XHRjb25zdCByZXN0ID0gdmFsLmxlbmd0aCA+IDEgPyB2YWwuc2xpY2UoMSkgOiAnJztcclxuXHRcdFx0dmFsID0gZmlyc3QgKyAoa2VlcENhc2UgPyByZXN0IDogcmVzdC50b0xvd2VyQ2FzZSgpKTtcclxuXHRcdH1cclxuXHRcdGJ1ZmZlciArPSB2YWw7XHJcblx0fVxyXG5cdHJldHVybiBidWZmZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCB2YWx1ZSB0byBzbmFrZSBjYXNlIChpLmUuICdIZWxsb1dvcmxkJyA9PiAnaGVsbG9fd29ybGQnKVxyXG4gKiAtIGFjY2VudHMgYXJlIG5vcm1hbGl6ZWQgKGkuZS4gXCJUZXN0IEFtw6lsaWVcIiA9PiBcInRlc3RfYW1lbGllXCIpXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgIFBhcnNlIHN0cmluZ1xyXG4gKiBAcGFyYW0gdHJpbVRyYWlsaW5nICBUcmltIHRyYWlsaW5nIFwiX1wiIChgZmFsc2VgID0gKGRlZmF1bHQpIGRpc2FibGVkLCBgdHJ1ZWAgPT4gdHJpbSByaWdodCAmIGxlZnQsIGAncid8J3JpZ2h0J2AgPT4gdHJpbSByaWdodCwgYCdsJ3wnbGVmdCdgID0+IHRyaW0gbGVmdClcclxuICogQHJldHVybnMgc25ha2VfY2FzZSBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90b1NuYWtlQ2FzZSA9ICh2YWx1ZTogYW55LCB0cmltVHJhaWxpbmc6IGJvb2xlYW58J2wnfCdsZWZ0J3wncid8J3JpZ2h0JyA9IGZhbHNlKTogc3RyaW5nID0+IHtcclxuXHRsZXQgcmVzID0gX3N0ck5vcm0oX3RyaW0odmFsdWUpKVxyXG5cdC5yZXBsYWNlKC9bQS1aXSsvZywgbSA9PiBtWzBdLnRvVXBwZXJDYXNlKCkgKyBtLnN1YnN0cmluZygxKS50b0xvd2VyQ2FzZSgpKVxyXG5cdC5yZXBsYWNlKC9cXFcrL2csICcgJylcclxuXHQuc3BsaXQoLyB8XFxCKD89W0EtWl0pLykuam9pbignXycpLnJlcGxhY2UoL18rL2csICdfJykudG9Mb3dlckNhc2UoKTtcclxuXHRpZiAocmVzID09PSAnXycpIHJldHVybiAnJztcclxuXHRpZiAoL15ffF8kLy50ZXN0KHJlcykgJiYgdHJpbVRyYWlsaW5nKSByZXMgPSBfdHJpbShyZXMsICdfJywgKFsnbCcsJ2xlZnQnLCdyJywncmlnaHQnXS5pbmNsdWRlcyh0cmltVHJhaWxpbmcgYXMgYW55KSA/IHRyaW1UcmFpbGluZyA6ICcnKSBhcyBhbnkpO1xyXG5cdHJldHVybiByZXM7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCB2YWx1ZSB0byBzbHVnIGNhc2UgKGkuZS4gJ0hlbGxvV29ybGQnID0+ICdoZWxsby13b3JsZCcpXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgIFBhcnNlIHN0cmluZ1xyXG4gKiBAcmV0dXJucyBzbHVnLWNhc2UgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdG9TbHVnQ2FzZSA9ICh2YWx1ZTogYW55LCB0cmltVHJhaWxpbmc6IGJvb2xlYW58J2wnfCdsZWZ0J3wncid8J3JpZ2h0JyA9IGZhbHNlKTogc3RyaW5nID0+IF90b1NuYWtlQ2FzZSh2YWx1ZSwgdHJpbVRyYWlsaW5nKS5yZXBsYWNlKC9fL2csICctJyk7XHJcblxyXG4vKipcclxuICogQ29udmVydCB2YWx1ZSB0byBzdHVkbHkgY2FzZSAoaS5lLiAnaGVsbG8td29ybGQnID0+ICdIZWxsb1dvcmxkJylcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgUGFyc2Ugc3RyaW5nXHJcbiAqIEByZXR1cm5zIFN0dWRseUNhc2UgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdG9TdHVkbHlDYXNlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGxldCBidWZmZXI6IHN0cmluZyA9ICcnO1xyXG5cdGZvciAoY29uc3Qgd29yZCBvZiBfdG9TbmFrZUNhc2UodmFsdWUpLnNwbGl0KCdfJykpe1xyXG5cdFx0aWYgKCF3b3JkLmxlbmd0aCkgY29udGludWU7XHJcblx0XHRidWZmZXIgKz0gd29yZFswXS50b1VwcGVyQ2FzZSgpICsgd29yZC5zdWJzdHJpbmcoMSkudG9Mb3dlckNhc2UoKTtcclxuXHR9XHJcblx0cmV0dXJuIGJ1ZmZlcjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHZhbHVlIHRvIGNhbWVsIGNhc2UgKGkuZS4gJ2hlbGxvLXdvcmxkJyA9PiAnaGVsbG9Xb3JsZCcpXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgIFBhcnNlIHN0cmluZ1xyXG4gKiBAcmV0dXJucyBjYW1lbENhc2UgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdG9DYW1lbENhc2UgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0bGV0IHJlcyA9IF90b1N0dWRseUNhc2UodmFsdWUpO1xyXG5cdGlmIChyZXMubGVuZ3RoKSByZXMgPSByZXNbMF0udG9Mb3dlckNhc2UoKSArIHJlcy5zdWJzdHJpbmcoMSk7XHJcblx0cmV0dXJuIHJlcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHZhbHVlIHRvIGxvd2VyIGNhc2Ugc3RpbmdcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBsb3dlcmNhc2UgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdG9Mb3dlckNhc2UgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiBfc3RyKHZhbHVlKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgdmFsdWUgdG8gbG93ZXIgY2FzZSBzdGluZ1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIFVQUEVSQ0FTRSBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90b1VwcGVyQ2FzZSA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IF9zdHIodmFsdWUpLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4vKipcclxuICogUGFyc2UgdGV4dCB2YWx1ZSBoYXNoIGNvZGVcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9oYXNoQ29kZSgnSGVsbG8gd29ybGQhJykgPT4gLTUyOTY2OTE1XHJcbiAqIF9oYXNoQ29kZSgnSGVsbG8nKSA9PiA2OTYwOTY1MFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdGV4dCB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCB+IGhhc2ggY29kZSB8IGAwYCB3aGVuIGJsYW5rXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2hhc2hDb2RlID0gKHZhbHVlOiBhbnkpOiBudW1iZXIgPT4ge1xyXG4gIGxldCBoYXNoID0gMDtcclxuICBpZiAoISh2YWx1ZSA9IF9zdHIodmFsdWUpKSkgcmV0dXJuIGhhc2g7XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkgKyspe1xyXG4gICAgbGV0IGNociA9IHZhbHVlLmNoYXJDb2RlQXQoaSk7XHJcbiAgICBoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBjaHI7XHJcbiAgICBoYXNoIHw9IDA7IC8vQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXHJcbiAgfVxyXG4gIHJldHVybiBoYXNoO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIHRleHQgdmFsdWUgaGFzaCBjb2RlIGluIGBzdHJpbmdgIGZvcm1hdCB+IHVzZXMgYF9oYXNoQ29kZSh2YWx1ZSlgIGJ1dCBwcmVwZW5kcyBgJ24nYCB3aGVuIHJlc3VsdCBudW1iZXIgaXMgbmVnYXRpdmUgYW5kIGAneCdgIHdoZW4gcG9zaXRpdmVcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9oYXNoQ29kZVN0cignSGVsbG8gd29ybGQhJykgPT4gJ241Mjk2NjkxNSdcclxuICogX2hhc2hDb2RlU3RyKCdIZWxsbycpID0+ICd4Njk2MDk2NTAnXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB0ZXh0IHZhbHVlXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIH4gaGFzIGNvZGUgdGV4dFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9oYXNoQ29kZVN0ciA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IHtcclxuXHRjb25zdCBjb2RlOiBzdHJpbmcgPSBfaGFzaENvZGUodmFsdWUpICsgJycsIHJlID0gL14tLztcclxuXHRyZXR1cm4gcmUudGVzdChjb2RlKSA/IGNvZGUucmVwbGFjZShyZSwgJ24nKSA6ICd4JyArIGNvZGU7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgdGV4dCB2YWx1ZSBoYXNoIGNvZGUgdXNpbmcgaGFzaDUzXHJcbiAqIC0gQSBzaW1wbGUgYnV0IGhpZ2ggcXVhbGl0eSA1My1iaXQgc3RyaW5nIGhhc2ggZ2VuZXJhdG9yXHJcbiAqIC0gQmFzZWQgb24gYGN5cmI1M2Agc2NyaXB0IGJ5IGBicnljYCAoaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUyMTcxNDgwLzM3MzU1NzYpXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfaGFzaDUzKCdIZWxsbyB3b3JsZCEnKSA9PiA1MjExMDI0MTIxMzcxMjMyXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB0ZXh0IHZhbHVlXHJcbiAqIEBwYXJhbSBzZWVkIC0gaGFzaCBlbnRyb3B5IHNlZWRcclxuICogQHJldHVybnMgYG51bWJlcmAgfiA1My1iaXQgaGFzaCBjb2RlIChsZW5ndGg9MTYpIHwgYDBgIHdoZW4gYmxhbmtcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaGFzaDUzID0gKHZhbHVlOiBhbnksIHNlZWQ6IG51bWJlciA9IDApOiBudW1iZXIgPT4ge1xyXG5cdGlmICghKHZhbHVlID0gX3N0cih2YWx1ZSkpKSByZXR1cm4gMDtcclxuXHRpZiAoaXNOYU4oc2VlZCkpIHNlZWQgPSAwO1xyXG5cdGxldCBoMSA9IDB4ZGVhZGJlZWYgXiBzZWVkLCBoMiA9IDB4NDFjNmNlNTcgXiBzZWVkO1xyXG5cdGZvciAobGV0IGkgPSAwLCBjaDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKXtcclxuXHRcdGNoID0gdmFsdWUuY2hhckNvZGVBdChpKTtcclxuXHRcdGgxID0gTWF0aC5pbXVsKGgxIF4gY2gsIDI2NTQ0MzU3NjEpO1xyXG5cdFx0aDIgPSBNYXRoLmltdWwoaDIgXiBjaCwgMTU5NzMzNDY3Nyk7XHJcblx0fVxyXG5cdGgxID0gTWF0aC5pbXVsKGgxIF4gKGgxID4+PiAxNiksIDIyNDY4MjI1MDcpIF4gTWF0aC5pbXVsKGgyIF4gKGgyID4+PiAxMyksIDMyNjY0ODk5MDkpO1xyXG5cdGgyID0gTWF0aC5pbXVsKGgyIF4gKGgyID4+PiAxNiksIDIyNDY4MjI1MDcpIF4gTWF0aC5pbXVsKGgxIF4gKGgxID4+PiAxMyksIDMyNjY0ODk5MDkpO1xyXG5cdHJldHVybiA0Mjk0OTY3Mjk2ICogKDIwOTcxNTEgJiBoMikgKyAoaDEgPj4+IDApO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlZCBkYXRhIFVSSSBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFVcmkge1xyXG5cdG1pbWU6IHN0cmluZztcclxuXHRlbmNvZGluZzogc3RyaW5nO1xyXG5cdGNoYXJzZXQ6IHN0cmluZztcclxuXHRkYXRhOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBkYXRhIFVSSSAodW5pZm9ybSByZXNvdXJjZSBpZGVudGlmaWVyKVxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX3BhcnNlRGF0YVVyaSgnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsSGVsbG8lMjB3b3JsZCUyMScpID0+IHtcclxuICogICBtaW1lOiAndGV4dC9wbGFpbicsXHJcbiAqICAgZW5jb2Rpbmc6ICdjaGFyc2V0PXV0Zi04JyxcclxuICogICBjaGFyc2V0OiAndXRmLTgnLFxyXG4gKiAgIGRhdGE6ICdIZWxsbyUyMHdvcmxkJTIxJyxcclxuICogfVxyXG4gKiBfcGFyc2VEYXRhVXJpKCdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LC85ai80QUFRU2taSlJnQUJBZ0FBWkFCa0FBRCcpID0+IHtcclxuICogICBtaW1lOiAnaW1hZ2UvanBlZycsXHJcbiAqICAgZW5jb2Rpbmc6ICdiYXNlNjQnLFxyXG4gKiAgIGNoYXJzZXQ6ICcnLFxyXG4gKiAgIGRhdGE6ICcvOWovNEFBUVNrWkpSZ0FCQWdBQVpBQmtBQUQnLFxyXG4gKiB9XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBkYXRhIHVyaSB2YWx1ZVxyXG4gKiBAcmV0dXJuc1xyXG4gKiAtIGBJRGF0YVVyaWAgfiBge21pbWU6c3RyaW5nO2VuY29kaW5nOnN0cmluZztjaGFyc2V0OnN0cmluZztkYXRhOnN0cmluZ31gXHJcbiAqIC0gYHVuZGVmaW5lZGAgb24gZXJyb3JcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcGFyc2VEYXRhVXJpID0gKHZhbHVlOiBhbnkpOiBJRGF0YVVyaXx1bmRlZmluZWQgPT4ge1xyXG5cdGlmICghKHZhbHVlID0gX3N0cih2YWx1ZSwgdHJ1ZSkpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdGNvbnN0IHJlID0gL2RhdGE6KD88bWltZT5bXFx3L1xcLVxcLl0rKTsoPzxlbmNvZGluZz4oY2hhcnNldD0pPyhbXixdKykpLCg/PGRhdGE+W15cXHNdKykvO1xyXG5cdGNvbnN0IHJlczogUmVnRXhwRXhlY0FycmF5fG51bGwgPSByZS5leGVjKHZhbHVlKTtcclxuXHRpZiAoIXJlcykgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHRyZXR1cm4ge1xyXG5cdFx0bWltZTogcmVzWzFdLFxyXG5cdFx0ZW5jb2Rpbmc6IHJlc1syXSxcclxuXHRcdGNoYXJzZXQ6IHJlc1szXSAmJiByZXNbNF0gfHwgJycsXHJcblx0XHRkYXRhOiByZXNbNV0sXHJcblx0fTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0ZSBVUkwgYHN0cmluZ2AgKHVuaWZvcm0gcmVzb3VyY2UgbG9jYXRvcilcclxuICogLSBpbmNsdWRlcyBJUCAodjQpIGFkZHJlc3Nlc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdXJsIGBzdHJpbmdgIHZhbHVlXHJcbiAqIEBwYXJhbSBtYXRjaERhdGFVUkkgLSB2YWxpZGF0aW9uIGluY2x1ZGVzIGRhdGEgVVJJIChpLmUuICdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LC85ai80QUFRU2taSlJnQUJBZ0FBWkFCa0FBRCcpXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYCAtIHZhbGlkIHVybFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9pc1VybCA9ICh2YWx1ZTogYW55LCBtYXRjaERhdGFVUkk6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4gPT4ge1xyXG5cdGlmICghKHZhbHVlICYmICdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUgJiYgdmFsdWUudHJpbSgpKSkgcmV0dXJuIGZhbHNlO1xyXG5cdGlmIChtYXRjaERhdGFVUkkgJiYgX3BhcnNlRGF0YVVyaSh2YWx1ZSkpIHJldHVybiB0cnVlO1xyXG5cdGNvbnN0IHBhdHRlcm4gPSAnXihodHRwcz86XFxcXC9cXFxcLyk/JyAgLy8gcHJvdG9jb2xcclxuXHQrICcoKChbYS16XFxcXGRdKFthLXpcXFxcZC1dKlthLXpcXFxcZF0pKilcXFxcLj8pK1thLXpdezIsfXwnICAvLyBkb21haW4gbmFtZVxyXG5cdCsgJygoXFxcXGR7MSwzfVxcXFwuKXszfVxcXFxkezEsM30pKScgIC8vIG9yIElQICh2NCkgYWRkcmVzc1xyXG5cdCsgJyhcXFxcOlxcXFxkKyk/KFxcXFwvWy1hLXpcXFxcZCVfLn4rXSopKicgIC8vIHBvcnQgYW5kIHBhdGhcclxuXHQrICcoXFxcXD9bOyZhLXpcXFxcZCVfLn4rPS1dKik/JyAvLyBxdWVyeSBzdHJpbmdcclxuXHQrICcoXFxcXCNbLWEtelxcXFxkX10qKT8kJzsgLy8gZnJhZ21lbnQgbG9jYXRvclxyXG5cdHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sICdpJykudGVzdCh2YWx1ZSk7XHJcbn1cclxuLy9SRUY6ICh5dXAgdXJsIHZhbGlkYXRpb24gcmVnZXgpXHJcbi8vbGV0IHJVcmwgPSAvXigoaHR0cHM/fGZ0cCk6KT9cXC9cXC8oKCgoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OikqQCk/KCgoXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pXFwuKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSlcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pKXwoKChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpXFwuKSsoKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4/KSg6XFxkKik/KShcXC8oKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApKyhcXC8oKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDp8QCkqKSopPyk/KFxcPygoKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDp8QCl8W1xcdUUwMDAtXFx1RjhGRl18XFwvfFxcPykqKT8oXFwjKCgoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OnxAKXxcXC98XFw/KSopPyQvaTtcclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0ZSBlbWFpbCBhZGRyZXNzIGBzdHJpbmdgXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWVcclxuICogQHJldHVybnMgYGJvb2xlYW5gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2lzRW1haWwgPSAodmFsdWU6IGFueSk6IGJvb2xlYW4gPT4ge1xyXG5cdGlmICghKHZhbHVlICYmICdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUgJiYgdmFsdWUudHJpbSgpKSkgcmV0dXJuIGZhbHNlO1xyXG5cdHJldHVybiAvXigoW148PigpW1xcXVxcXFwuLDs6XFxzQFwiXSsoXFwuW148PigpW1xcXVxcXFwuLDs6XFxzQFwiXSspKil8LihcIi4rXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXF0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKStbYS16QS1aXXsyLH0pKSQvLnRlc3QodmFsdWUudG9Mb3dlckNhc2UoKSk7XHJcbn07XHJcbi8vUkVGOiAoeXVwIGVtYWlsIHZhbGlkYXRpb24gcmVnZXgpXHJcbi8vIGxldCByRW1haWwgPSAvXlthLXpBLVowLTkuISMkJSYnKitcXC89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLztcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBjc3YgZGF0YSBpbnRvIDJkIHN0cmluZyBhcnJheVxyXG4gKiBcclxuICogQHBhcmFtIHRleHQgLSBwYXJzZSB0ZXh0XHJcbiAqIEBwYXJhbSBkZWxpbWl0ZXIgLSBkZWxpbWl0ZXIgY2hhcmFjdGVyIChkZWZhdWx0OiBgJywnYClcclxuICogQHBhcmFtIGJyIC0gbmV3IGxpbmUgKGRlZmF1bHQ6IGAnXFxuJ2ApXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdbXVtdYCB+IGBbWy4uLmNvbHNdLCAuLi5yb3dzXWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcGFyc2VDc3YgPSAodGV4dDogc3RyaW5nLCBkZWxpbWl0ZXI/OiBzdHJpbmcsIGJyPzogc3RyaW5nKTogc3RyaW5nW11bXSA9PiB7XHJcblx0Y29uc3Qgbl9zZXAgPSAnXFx4MUQnOyBjb25zdCBuX3NlcF9yZSA9IG5ldyBSZWdFeHAobl9zZXAsICdnJyk7XHJcblx0Y29uc3QgcV9zZXAgPSAnXFx4MUUnOyBjb25zdCBxX3NlcF9yZSA9IG5ldyBSZWdFeHAocV9zZXAsICdnJyk7XHJcblx0Y29uc3QgY19zZXAgPSAnXFx4MUYnOyBjb25zdCBjX3NlcF9yZSA9IG5ldyBSZWdFeHAoY19zZXAsICdnJyk7XHJcblx0Y29uc3QgZGVsaW06IHN0cmluZyA9IChkZWxpbWl0ZXIgPSBfc3RyKGRlbGltaXRlciwgdHJ1ZSkpLmxlbmd0aCA9PT0gMSA/IGRlbGltaXRlciA6ICcsJztcclxuXHRjb25zdCBmaWVsZF9yZSA9IG5ldyBSZWdFeHAoJyhefFsnICsgZGVsaW0gKyAnXFxcXG5dKVwiKFteXCJdKig/OlwiXCJbXlwiXSopKilcIig/PSgkfFsnICsgZGVsaW0gKyAnXFxcXG5dKSknLCAnZycpO1xyXG5cdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IF9zdHIodGV4dCwgdHJ1ZSlcclxuXHQucmVwbGFjZSgvXFxyL2csICcnKVxyXG5cdC5yZXBsYWNlKC9cXG4rJC8sICcnKVxyXG5cdC5yZXBsYWNlKGZpZWxkX3JlLCAoXzogc3RyaW5nLCBwMTogc3RyaW5nLCBwMjogc3RyaW5nKSA9PiBwMSArIHAyLnJlcGxhY2UoL1xcbi9nLCBuX3NlcCkucmVwbGFjZSgvXCJcIi9nLCBxX3NlcCkucmVwbGFjZSgvLC9nLCBjX3NlcCkpXHJcblx0LnNwbGl0KC9cXG4vKTtcclxuXHRjb25zdCByb3dzOiBzdHJpbmdbXVtdID0gW107XHJcblx0Zm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKXtcclxuXHRcdGlmICghbGluZS5sZW5ndGgpIGNvbnRpbnVlO1xyXG5cdFx0Y29uc3Qgcm93OiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0Zm9yIChjb25zdCBjZWxsIG9mIGxpbmUuc3BsaXQoZGVsaW0pKXtcclxuXHRcdFx0cm93LnB1c2goY2VsbC5yZXBsYWNlKG5fc2VwX3JlLCBiciA/PyAnXFxuJykucmVwbGFjZShxX3NlcF9yZSwgJ1wiJykucmVwbGFjZShjX3NlcF9yZSwgJywnKSk7XHJcblx0XHR9XHJcblx0XHRyb3dzLnB1c2gocm93KTtcclxuXHR9XHJcblx0cmV0dXJuIHJvd3M7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCBkYXRhIHRvIGNzdiB0ZXh0XHJcbiAqIFxyXG4gKiBAcGFyYW0gZGF0YSAtIHBhcnNlIGRhdGFcclxuICogQHBhcmFtIGRlbGltaXRlciAtIGRlbGltaXRlciBjaGFyYWN0ZXIgKGRlZmF1bHQ6IGAnLCdgKVxyXG4gKiBAcGFyYW0gYnIgLSBuZXcgbGluZSByZXBsYWNlIChkZWZhdWx0OiBgJ1xcbidgKVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBjc3YgdGV4dFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90b0NzdiA9IChkYXRhOiBzdHJpbmd8c3RyaW5nW118c3RyaW5nW11bXSwgZGVsaW1pdGVyPzogc3RyaW5nLCBicj86IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgZGVsaW06IHN0cmluZyA9IChkZWxpbWl0ZXIgPSBfc3RyKGRlbGltaXRlciwgdHJ1ZSkpLmxlbmd0aCA9PT0gMSA/IGRlbGltaXRlciA6ICcsJztcclxuXHRjb25zdCByb3dzOiBzdHJpbmdbXVtdID0gW107XHJcblx0Y29uc3QgX2NlbGwgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0XHRsZXQgdmFsOiBzdHJpbmcgPSBfc3RyKHZhbHVlKTtcclxuXHRcdGlmICghdmFsLmxlbmd0aCkgcmV0dXJuIHZhbDtcclxuXHRcdGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIGJyICYmIHZhbC5pbmRleE9mKGJyKSA+IC0xICYmIGJyICE9PSAnXFxuJykgdmFsID0gdmFsLnJlcGxhY2UobmV3IFJlZ0V4cChiciwgJ2cnKSwgJ1xcbicpO1xyXG5cdFx0dmFsID0gdmFsLnJlcGxhY2UoL1xcci9nLCAnJykucmVwbGFjZSgvXFxuKyQvLCAnJykucmVwbGFjZSgvXCIvZywgJ1wiXCInKTtcclxuXHRcdGlmICh2YWwuaW5kZXhPZihkZWxpbSkgPiAtMSB8fCB2YWwuaW5kZXhPZignXCInKSA+IC0xIHx8IHZhbC5pbmRleE9mKCdcXG4nKSA+IC0xIHx8IC9eXFxzK3xcXHMrJC8udGVzdCh2YWwpKSB2YWwgPSBgXCIke3ZhbH1cImA7XHJcblx0XHRyZXR1cm4gdmFsO1xyXG5cdH07XHJcblx0aWYgKGRhdGEgJiYgJ29iamVjdCcgPT09IHR5cGVvZiBkYXRhICYmIGRhdGFbU3ltYm9sLml0ZXJhdG9yXSl7XHJcblx0XHRjb25zdCBpdGVyYWJsZXM6IGFueVtdID0gW10sIHZhbHVlcyA9IE9iamVjdC52YWx1ZXMoWy4uLmRhdGFdKTtcclxuXHRcdGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpe1xyXG5cdFx0XHRpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB2ICYmIHZbU3ltYm9sLml0ZXJhdG9yXSkgaXRlcmFibGVzLnB1c2godik7XHJcblx0XHR9XHJcblx0XHRpZiAoaXRlcmFibGVzLmxlbmd0aCl7XHJcblx0XHRcdGZvciAoY29uc3QgdmFsIG9mIHZhbHVlcyl7XHJcblx0XHRcdFx0Y29uc3Qgdl9yb3c6IHN0cmluZ1tdID0gW107XHJcblx0XHRcdFx0Zm9yIChjb25zdCBjZWxsIG9mIHZhbCl7XHJcblx0XHRcdFx0XHR2X3Jvdy5wdXNoKF9jZWxsKGNlbGwgYXMgYW55KSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJvd3MucHVzaCh2X3Jvdyk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRjb25zdCB2X3Jvdzogc3RyaW5nW10gPSBbXTtcclxuXHRcdFx0Zm9yIChjb25zdCB2YWwgb2YgdmFsdWVzKXtcclxuXHRcdFx0XHR2X3Jvdy5wdXNoKF9jZWxsKHZhbCBhcyBhbnkpKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyb3dzLnB1c2godl9yb3cpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRlbHNlIGlmIChkYXRhID0gX3N0cihkYXRhLCB0cnVlKSl7XHJcblx0XHRjb25zdCBkYXRhX3Jvd3M6IHN0cmluZ1tdW10gPSBfcGFyc2VDc3YoZGF0YSwgZGVsaW0sIGJyKTtcclxuXHRcdGZvciAoY29uc3QgZGF0YV9yb3cgb2YgZGF0YV9yb3dzKXtcclxuXHRcdFx0Y29uc3QgZF9yb3c6IHN0cmluZ1tdID0gW107XHJcblx0XHRcdGZvciAoY29uc3QgdmFsIG9mIGRhdGFfcm93KXtcclxuXHRcdFx0XHRkX3Jvdy5wdXNoKF9jZWxsKHZhbCkpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJvd3MucHVzaChkX3Jvdyk7XHJcblx0XHR9XHJcblx0fVxyXG5cdGxldCBjc3Y6IHN0cmluZyA9ICcnLCBkaXYgPSAwO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0Y29uc3QgbGluZTogc3RyaW5nID0gcm93c1tpXS5qb2luKGRlbGltKS50cmltKCk7XHJcblx0XHRpZiAoIWxpbmUpIGNvbnRpbnVlO1xyXG5cdFx0aWYgKCFkaXYpe1xyXG5cdFx0XHRkaXYgPSAxO1xyXG5cdFx0XHRjc3YgKz0gbGluZTtcclxuXHRcdH1cclxuXHRcdGVsc2UgY3N2ICs9ICdcXG4nICsgbGluZTtcclxuXHR9XHJcblx0cmV0dXJuIGNzdjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTcGxpdCBgc3RyaW5nYCB2YWx1ZSBpbnRvIHBhcnRzIH4gcGFydCBhbmQgc2VwYXJhdG9yIGFycmF5IChsYXN0IGVudHJ5J3Mgc2VwYXJhdG9yIGlzIGAnJ2ApXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBzcGxpdCBzdHJpbmdcclxuICogQHBhcmFtIHNlcGFyYXRvciAtIHNwbGl0IHNlcGFyYXRvciAoZGVmYXVsdDogYHVuZGVmaW5lZGApXHJcbiAqIEBwYXJhbSBsaW1pdCAtIHNwbGl0IGl0ZW1zIGxpbWl0L2NvdW50IChkZWZhdWx0OiBgdW5kZWZpbmVkYClcclxuICogQHJldHVybnMgYFtwYXJ0OiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nIHwgJyddW11gIHNwbGl0IHBhcnRzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgIF9zcGxpdCA9ICh2YWx1ZTogYW55LCBzZXBhcmF0b3I/OiBzdHJpbmd8UmVnRXhwLCBsaW1pdD86IG51bWJlcik6IFtwYXJ0OiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nIHwgJyddW10gPT4ge1xyXG5cdGxldCB2YWwgPSBfc3RyKHZhbHVlKTtcclxuXHRsZXQgcmU6IFJlZ0V4cHx1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2Ygc2VwYXJhdG9yKSByZSA9IG5ldyBSZWdFeHAoX3JlZ0VzY2FwZShfc3RyKHNlcGFyYXRvcikpKTtcclxuXHRlbHNlIGlmIChzZXBhcmF0b3IgaW5zdGFuY2VvZiBSZWdFeHApIHJlID0gc2VwYXJhdG9yO1xyXG5cdGlmIChyZSkgcmUgPSBuZXcgUmVnRXhwKHJlLCBbLi4ubmV3IFNldCgoJ2cnICsgcmUuZmxhZ3MpLnNwbGl0KCcnKSldLmpvaW4oJycpKTtcclxuXHRsaW1pdCA9IGxpbWl0ICYmICFpc05hTihsaW1pdCA9IHBhcnNlSW50KGxpbWl0ICsgJycpKSAmJiBsaW1pdCA+PSAwID8gbGltaXQgOiB1bmRlZmluZWQ7XHJcblx0Y29uc3QgcGFydHM6IHN0cmluZ1tdID0gcmUgPyB2YWwuc3BsaXQocmUsIGxpbWl0KSA6IHZhbC5zcGxpdCh1bmRlZmluZWQgYXMgYW55LCBsaW1pdCk7XHJcblx0Y29uc3QgbWF0Y2hlczogc3RyaW5nW10gPSByZSA/IHZhbC5tYXRjaChyZSkgfHwgW10gOiB2YWwubWF0Y2godW5kZWZpbmVkIGFzIGFueSkgfHwgW107XHJcblx0Y29uc3QgaXRlbXM6IFtwYXJ0OiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nIHwgJyddW10gPSBbXTtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRjb25zdCBwYXJ0OiBzdHJpbmcgPSBwYXJ0c1tpXTtcclxuXHRcdGNvbnN0IHNlcGFyYXRvcjogc3RyaW5nID0gbWF0Y2hlc1tpXSA/PyAnJztcclxuXHRcdGl0ZW1zLnB1c2goW3BhcnQsIHNlcGFyYXRvcl0pO1xyXG5cdH1cclxuXHRyZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGVycm9yIHRleHRcclxuICogXHJcbiAqIEBwYXJhbSBlcnJvciAtIHBhcnNlIGVycm9yIHZhbHVlXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2Vycm9yVGV4dCA9IChlcnJvcjogYW55KTogc3RyaW5nID0+IHtcclxuXHRjb25zdCBlcnJvcnM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge307XHJcblx0Y29uc3QgX3BhcnNlID0gKGl0ZW06IGFueSk6IHZvaWQgPT4ge1xyXG5cdFx0aWYgKCEoJ29iamVjdCcgPT09IHR5cGVvZiBpdGVtICYmIGl0ZW0pKXtcclxuXHRcdFx0Y29uc3QgdmFsID0gX3N0cihpdGVtLCB0cnVlKTtcclxuXHRcdFx0aWYgKHZhbCkgZXJyb3JzW3ZhbC50b0xvd2VyQ2FzZSgpXSA9IHZhbDtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpe1xyXG5cdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiBpdGVtKSBfcGFyc2UodmFsKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGl0ZW0gaW5zdGFuY2VvZiBFcnJvcil7XHJcblx0XHRcdGxldCBuYW1lOiBzdHJpbmcgPSBfc3RyKGVycm9yLm5hbWUsIHRydWUpO1xyXG5cdFx0XHRpZiAoWydFcnJvcicsICdUeXBlRXJyb3InXS5pbmNsdWRlcyhuYW1lKSkgbmFtZSA9ICcnO1xyXG5cdFx0XHRjb25zdCBtZXNzYWdlID0gX3N0cihlcnJvci5tZXNzYWdlLCB0cnVlKTtcclxuXHRcdFx0Y29uc3QgdmFsID0gbWVzc2FnZSA/IChuYW1lID8gbmFtZSArICcgJzogJycpICsgbWVzc2FnZSA6ICcnO1xyXG5cdFx0XHRpZiAodmFsKSBlcnJvcnNbdmFsLnRvTG93ZXJDYXNlKCldID0gdmFsO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRpZiAoaXRlbS5yZXNwb25zZSkgcmV0dXJuIF9wYXJzZShpdGVtLnJlc3BvbnNlKTtcclxuXHRcdGlmIChpdGVtLmJvZHkpIHJldHVybiBfcGFyc2UoaXRlbS5ib2R5KTtcclxuXHRcdGlmIChpdGVtLmVycm9yKSByZXR1cm4gX3BhcnNlKGl0ZW0uZXJyb3IpO1xyXG5cdFx0aWYgKGl0ZW0ubWVzc2FnZSkgcmV0dXJuIF9wYXJzZShpdGVtLm1lc3NhZ2UpO1xyXG5cdFx0Y29uc3QgdmFsID0gX3N0cihpdGVtLCB0cnVlLCB0cnVlKTtcclxuXHRcdGlmICh2YWwpIGVycm9yc1t2YWwudG9Mb3dlckNhc2UoKV0gPSB2YWw7XHJcblx0fTtcclxuXHRfcGFyc2UoZXJyb3IpO1xyXG5cdHJldHVybiBPYmplY3QudmFsdWVzKGVycm9ycykuam9pbignXFxuJyk7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IHRleHQgd2l0aCBtYXggbGVuZ3RoIGxpbWl0XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB0ZXh0XHJcbiAqIEBwYXJhbSBtYXggLSBtYXggY2hhcmFjdGVycyBsZW5ndGggKGRlZmF1bHQ6IGAxMDAwYClcclxuICogQHBhcmFtIG1vZGUgLSByZXN1bHQgbW9kZVxyXG4gKiAtIGAwYCA9IGBzdWJzdHJpbmcoMCwgbWF4KWBcclxuICogLSBgMWAgPSBgc3Vic3RyaW5nKDAsIG1heCAtIDMpICsgJy4uLidgXHJcbiAqIC0gYDJgID0gYHN1YnN0cmluZygwLCBtYXggLSBbYXBwZW5kXS5sZW5ndGgpICsgW2FwcGVuZF1gIHdoZXJlIGBbYXBwZW5kXWAgaXMgYCcuLi4oJyArIHZhbHVlLmxlbmd0aCArICcpJ2BcclxuICogQHJldHVybnMgYHN0cmluZ2AgfiB3aG9zZSBjaGFyYWN0ZXIgbGVuZ3RoIGlzIDw9IG1heFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90ZXh0TWF4TGVuZ3RoID0gKHZhbHVlOiBhbnksIG1heDogbnVtYmVyID0gMTAwMCwgbW9kZTogMHwxfDIgPSAwKTogc3RyaW5nID0+IHtcclxuXHRjb25zdCBsZW4gPSAodmFsdWUgPSBfc3RyKHZhbHVlKSkubGVuZ3RoLCBtYXhfbGVuID0gIWlzTmFOKG1heCA9IHBhcnNlSW50KG1heCBhcyBhbnkpKSAmJiBtYXggPiAwID8gbWF4IDogMTAwMDtcclxuXHRpZiAobGVuIDw9IG1heF9sZW4pIHJldHVybiB2YWx1ZTtcclxuXHRjb25zdCBhcHBlbmQgPSBtb2RlID09PSAyID8gYC4uLigke3ZhbHVlLmxlbmd0aH0pYCA6IG1vZGUgPT09IDEgPyAnLi4uJyA6ICcnO1xyXG5cdGNvbnN0IGFwcGVuZF9sZW4gPSBhcHBlbmQubGVuZ3RoLCB0ZXh0X2xlbiA9IG1heF9sZW4gLSBhcHBlbmRfbGVuO1xyXG5cdGlmICh0ZXh0X2xlbiA+IGFwcGVuZF9sZW4gJiYgbGVuID4gdGV4dF9sZW4pIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgdGV4dF9sZW4pICsgYXBwZW5kO1xyXG5cdHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgbWF4X2xlbik7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3VzdG9tIHRleHQgZW5jcnlwdC9kZWNyeXB0IGN5cGhlciB+IGB2MjAyMzEwMjcyMzI4NTBgXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSB0ZXh0IHZhbHVlIH4gYHN0cmluZ2BcclxuICogQHBhcmFtIGluZGV4IC0gaW5kZXggb2Zmc2V0IH4gYGludGVnZXJgIChkZWZhdWx0OiBgMGApXHJcbiAqIEBwYXJhbSBrZXkgLSBwYXJzZSBrZXkgfiBgc3RyaW5nYCAoZGVmYXVsdDogYCdRV3h2YUc5dGIzSmhJUSdgKVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBidWZmZXIgfCBgJ0VSUk9SJ2Agb24gZmFpbHVyZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9jciA9ICh2YWx1ZTogYW55LCBpbmRleD86IGFueSwga2V5PzogYW55KTogc3RyaW5nID0+IHtcclxuXHRjb25zdCB0ZXh0OiBzdHJpbmcgPSBbbnVsbCwgdW5kZWZpbmVkXS5pbmNsdWRlcyh2YWx1ZSkgPyAnJyA6IFN0cmluZyh2YWx1ZSk7XHJcblx0Y29uc3Qgb2Zmc2V0OiBudW1iZXIgPSBOdW1iZXIuaXNJbnRlZ2VyKGluZGV4ID0gcGFyc2VJbnQoaW5kZXggYXMgYW55KSkgJiYgaW5kZXggPj0gMCA/IGluZGV4IDogMDtcclxuXHRjb25zdCBwYXNzOiBzdHJpbmcgPSAoW251bGwsIHVuZGVmaW5lZF0uaW5jbHVkZXMoa2V5IGFzIGFueSkgPyAnJyA6IFN0cmluZyhrZXkpKSB8fCAnUVd4dmFHOXRiM0poSVEnO1xyXG5cdGxldCBidWZmZXI6IHN0cmluZyA9ICcnO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkgKyspe1xyXG5cdFx0Y29uc3QgY2hhcjogc3RyaW5nID0gU3RyaW5nLmZyb21DaGFyQ29kZSh0ZXh0W2ldLmNoYXJDb2RlQXQoMCkgXiAocGFzc1sob2Zmc2V0ICsgaSkgJSBwYXNzLmxlbmd0aF0uY2hhckNvZGVBdCgwKSAqKiAyKSk7XHJcblx0XHRidWZmZXIgKz0gY2hhcjtcclxuXHR9XHJcblx0cmV0dXJuIGJ1ZmZlcjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBrZXkgdmFsdWUgdGV4dCB+IGVzY2FwZXMvcmVzdG9yZXMgdmFsdWVzIGRlbGltaXRlciAoaS5lLiBgJz0nYCkgYW5kIGVudHJpZXMgZGVsaW1pdGVyIChpLmUuIGAnXFxuJ2ApXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZSB0ZXh0IChgc3RyaW5nYClcclxuICogQHBhcmFtIGVzY2FwZSAtIHdoZXRoZXIgdG8gZXNjYXBlIGRlbGltaXRlcnMgKGRlZmF1bHQ6IGBmYWxzZWAgfiByZXN0b3JlKVxyXG4gKiBAcGFyYW0gdmFsdWVfZGVsaW1pdGVyIC0gdmFsdWUgZGVsaW1pdGVyIChkZWZhdWx0OiBgJz0nYCB+IGUuZy4gYCdrZXk9dmFsdWUnYClcclxuICogQHBhcmFtIGVudHJpZXNfZGVsaW1pdGVyIC0gZW50cmllcyBkZWxpbWl0ZXIgKGRlZmF1bHQ6IGAnXFxuJ2AgfiBlLmcuIGAna2V5PXZhbHVlXFxua2V5Mj12YWx1ZTInYClcclxuICogQHJldHVybnMgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfa2V5VmFsdWUgPSAodmFsdWU6IGFueSwgZXNjYXBlOiBib29sZWFuID0gZmFsc2UsIHZhbHVlX2RlbGltaXRlcjogc3RyaW5nID0gJz0nLCBlbnRyaWVzX2RlbGltaXRlcjogc3RyaW5nID0gJ1xcbicpOiBzdHJpbmcgPT4ge1xyXG5cdGlmICghKHZhbHVlID0gX3N0cih2YWx1ZSwgdHJ1ZSkpKSByZXR1cm4gdmFsdWU7XHJcblx0Y29uc3QgdmQgPSAnXFx4MUUnLCB2YWx1ZV9kZWxpbSA9IF9zdHIodmFsdWVfZGVsaW1pdGVyKSB8fCAnPSc7XHJcblx0Y29uc3QgZWQgPSAnXFx4MUQnLCBlbnRyaWVzX2RlbGltID0gX3N0cihlbnRyaWVzX2RlbGltaXRlcikgfHwgJ1xcbic7XHJcblx0aWYgKGVzY2FwZSkgcmV0dXJuIHZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCh2YWx1ZV9kZWxpbSwgJ2cnKSwgdmQpLnJlcGxhY2UobmV3IFJlZ0V4cChlbnRyaWVzX2RlbGltLCAnZycpLCBlZCk7XHJcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCh2ZCwgJ2cnKSwgdmFsdWVfZGVsaW0pLnJlcGxhY2UobmV3IFJlZ0V4cChlZCwgJ2cnKSwgZW50cmllc19kZWxpbSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2Ugc2VyaWFsaXplZCBrZXkgdmFsdWVzIH4gKGkuZS4gYCdrZXk9dmFsdWVcXG5rZXkyPXZhbHVlMidgKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2Ugc2VyaWFsaXplZCB0ZXh0XHJcbiAqIEBwYXJhbSBlc2NhcGUgLSB3aGV0aGVyIHRvIGVzY2FwZSBkZWxpbWl0ZXJzIChkZWZhdWx0OiBgZmFsc2VgIH4gcmVzdG9yZSlcclxuICogQHBhcmFtIHZhbHVlX2RlbGltaXRlciAtIHZhbHVlIGRlbGltaXRlciAoZGVmYXVsdDogYCc9J2AgfiBlLmcuIGAna2V5PXZhbHVlJ2ApXHJcbiAqIEBwYXJhbSBlbnRyaWVzX2RlbGltaXRlciAtIGVudHJpZXMgZGVsaW1pdGVyIChkZWZhdWx0OiBgJ1xcbidgIH4gZS5nLiBgJ2tleT12YWx1ZVxcbmtleTI9dmFsdWUyJ2ApXHJcbiAqIEByZXR1cm5zIGBba2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmddW11gIGVudHJpZXMgbGlzdCB3aXRoIHVuaXF1ZSBrZXlzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3BhcnNlS2V5VmFsdWVzID0gKHZhbHVlOiBhbnksIGVzY2FwZTogYm9vbGVhbiA9IGZhbHNlLCB2YWx1ZV9kZWxpbWl0ZXI6IHN0cmluZyA9ICc9JywgZW50cmllc19kZWxpbWl0ZXI6IHN0cmluZyA9ICdcXG4nKTogW2tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nXVtdID0+IHtcclxuXHRsZXQgYnVmZmVyOiB7W2tleTogc3RyaW5nXTogW3N0cmluZywgc3RyaW5nXX0gPSB7fSwgcGFyc2VfZW50cmllczogLTF8MHwxID0gLTE7IC8vLTEgPSB1bmRlZmluZWQsIDAgPSBkaXNhYmxlZCwgMSA9IGVuYWJsZWRcclxuXHRmb3IgKGxldCBpdGVtIG9mIF9zdHIodmFsdWUsIHRydWUpLnNwbGl0KCdcXG4nKSl7XHJcblx0XHRpZiAoIShpdGVtID0gX3N0cihpdGVtLCB0cnVlKSkpIGNvbnRpbnVlO1xyXG5cdFx0Y29uc3QgcGFydHM6IHN0cmluZ1tdID0gaXRlbS50cmltKCkuc3BsaXQoJz0nKTtcclxuXHRcdGlmIChwYXJzZV9lbnRyaWVzIDwgMCkgcGFyc2VfZW50cmllcyA9IHBhcnRzLmxlbmd0aCA+PSAyID8gMSA6IDA7XHJcblx0XHRjb25zdCBrZXk6IHN0cmluZyA9IF9rZXlWYWx1ZShwYXJ0c1swXSwgZXNjYXBlLCB2YWx1ZV9kZWxpbWl0ZXIsIGVudHJpZXNfZGVsaW1pdGVyKTtcclxuXHRcdGNvbnN0IHZhbHVlOiBzdHJpbmcgPSAhcGFyc2VfZW50cmllcyA/IGtleSA6IF9rZXlWYWx1ZShwYXJ0c1sxXSwgZXNjYXBlLCB2YWx1ZV9kZWxpbWl0ZXIsIGVudHJpZXNfZGVsaW1pdGVyKTtcclxuXHRcdGlmIChrZXkgJiYgdmFsdWUpIGJ1ZmZlcltrZXkudG9Mb3dlckNhc2UoKV0gPSBba2V5LCB2YWx1ZV07XHJcblx0fVxyXG5cdHJldHVybiBPYmplY3QudmFsdWVzKGJ1ZmZlcik7XHJcbn07XHJcblxyXG4vKipcclxuICogU2VyaWFsaXplIGtleSB2YWx1ZXMgfiAoaS5lLiBgWydrZXknLCd2YWx1ZScsJ2tleTInLCd2YWx1ZTInXWAgPT4gYCdrZXk9dmFsdWVcXG5rZXkyPXZhbHVlMidgKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlcyAtIHBhcnNlIHZhbHVlcyB+IChpLmUuIGBzdHJpbmd8c3RyaW5nW118W3N0cmluZyxzdHJpbmddW118e1trZXk6c3RyaW5nXTpzdHJpbmd9W11gKVxyXG4gKiBAcGFyYW0gX2tleSAtIHNwZWNpZnkgZW50cnkgYGtleWAgcHJvcGVydHkgbmFtZSB3aGVuIGB2YWx1ZXNgIGlzIGB7W2tleTpzdHJpbmddOnN0cmluZ31bXWBcclxuICogQHBhcmFtIF92YWx1ZSAtIHNwZWNpZnkgZW50cnkgYHZhbHVlYCBwcm9wZXJ0eSBuYW1lIHdoZW4gYHZhbHVlc2AgaXMgYHtba2V5OnN0cmluZ106c3RyaW5nfVtdYFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBzZXJpYWxpemVkIGtleSB2YWx1ZXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBfc3RyS2V5VmFsdWVzID0gKHZhbHVlczogYW55LCBfa2V5PzogYW55LCBfdmFsdWU/OiBhbnksIF92YWx1ZV9kZWxpbWl0ZXI6IHN0cmluZyA9ICc9JywgX2VudHJpZXNfZGVsaW1pdGVyOiBzdHJpbmcgPSAnXFxuJyk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgYnVmZmVyOiB7W2tleTogc3RyaW5nXTogW3N0cmluZywgc3RyaW5nXX0gPSB7fTtcclxuXHRjb25zdCB2YWx1ZV9kZWxpbWl0ZXIgPSBfc3RyKF92YWx1ZV9kZWxpbWl0ZXIpIHx8ICc9JztcclxuXHRjb25zdCBlbnRyaWVzX2RlbGltaXRlciA9IF9zdHIoX2VudHJpZXNfZGVsaW1pdGVyKSB8fCAnXFxuJztcclxuXHRsZXQga2V5X3Byb3A6IGFueSA9IHVuZGVmaW5lZCwgdmFsX3Byb3A6IGFueSA9IHVuZGVmaW5lZCwgbW9kZTogLTF8MHwxID0gLTEsIHNhbWU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdGNvbnN0IF9zZXRfbW9kZSA9IChpdGVtOiBhbnkpOiB2b2lkID0+IHtcclxuXHRcdF9rZXkgPSBfc3RyKGtleV9wcm9wID0gX2tleSwgdHJ1ZSk7XHJcblx0XHRfdmFsdWUgPSBfc3RyKHZhbF9wcm9wID0gX3ZhbHVlLCB0cnVlKTtcclxuXHRcdGlmIChfa2V5ICYmICFfdmFsdWUpe1xyXG5cdFx0XHRfdmFsdWUgPSBfa2V5O1xyXG5cdFx0XHR2YWxfcHJvcCA9IGtleV9wcm9wO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZiAoX3ZhbHVlICYmICFfa2V5KXtcclxuXHRcdFx0X2tleSA9IF92YWx1ZTtcclxuXHRcdFx0a2V5X3Byb3AgPSB2YWxfcHJvcDtcclxuXHRcdH1cclxuXHRcdGlmIChPYmplY3QoaXRlbSkgPT09IGl0ZW0pe1xyXG5cdFx0XHRpZiAoIV9rZXkgJiYgIV92YWx1ZSAmJiBPYmplY3QoaXRlbSkgPT09IGl0ZW0pe1xyXG5cdFx0XHRcdGlmIChpdGVtLmhhc093blByb3BlcnR5KCdrZXknKSkgdmFsX3Byb3AgPSBfdmFsdWUgPSBrZXlfcHJvcCA9IF9rZXkgPSAna2V5JztcclxuXHRcdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSl7XHJcblx0XHRcdFx0XHRpZiAoIV9rZXkgJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eSgnbGFiZWwnKSl7XHJcblx0XHRcdFx0XHRcdHZhbF9wcm9wID0gX3ZhbHVlID0gJ2xhYmVsJztcclxuXHRcdFx0XHRcdFx0a2V5X3Byb3AgPSBfa2V5ID0gJ3ZhbHVlJztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGVsc2Uga2V5X3Byb3AgPSBfa2V5ID0gdmFsX3Byb3AgPSBfdmFsdWUgPSAndmFsdWUnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRtb2RlID0gX3N0cihrZXlfcHJvcCwgdHJ1ZSkgJiYgX3N0cih2YWxfcHJvcCwgdHJ1ZSkgJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eShrZXlfcHJvcCkgJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eSh2YWxfcHJvcCkgPyAxIDogMDtcclxuXHRcdH1cclxuXHR9O1xyXG5cdGNvbnN0IF9zdHJfdmFsdWUgPSAodmFsOiBhbnkpOiBzdHJpbmcgPT4gX2tleVZhbHVlKHZhbCwgdHJ1ZSwgdmFsdWVfZGVsaW1pdGVyLCBlbnRyaWVzX2RlbGltaXRlcik7XHJcblx0Y29uc3QgX2FkZF9pdGVtID0gKGl0ZW06IGFueSwgX3JlY3Vyc2U6IGJvb2xlYW4pOiB2b2lkID0+IHtcclxuXHRcdGlmIChPYmplY3QoaXRlbSkgPT09IGl0ZW0pe1xyXG5cdFx0XHRpZiAoT2JqZWN0KGl0ZW1bU3ltYm9sLml0ZXJhdG9yXSkgPT09IGl0ZW1bU3ltYm9sLml0ZXJhdG9yXSl7XHJcblx0XHRcdFx0Y29uc3QgZW50cmllczogYW55W10gPSBbLi4uaXRlbV07XHJcblx0XHRcdFx0aWYgKCFlbnRyaWVzLmxlbmd0aCkgcmV0dXJuO1xyXG5cdFx0XHRcdGlmIChfcmVjdXJzZSAmJiBPYmplY3QoZW50cmllc1swXSkgPT09IGVudHJpZXNbMF0pIHJldHVybiB2b2lkIGVudHJpZXMuZm9yRWFjaCh2ID0+IF9hZGRfaXRlbSh2LCBmYWxzZSkpO1xyXG5cdFx0XHRcdGlmIChtb2RlIDwgMCkgX3NldF9tb2RlKGVudHJpZXMpO1xyXG5cdFx0XHRcdGNvbnN0IGtleTogc3RyaW5nID0gX3N0cl92YWx1ZShlbnRyaWVzW21vZGUgPyBrZXlfcHJvcCA6IDBdKTtcclxuXHRcdFx0XHRjb25zdCB2YWw6IHN0cmluZyA9IF9zdHJfdmFsdWUoZW50cmllc1ttb2RlID8gdmFsX3Byb3AgOiAxXSk7XHJcblx0XHRcdFx0aWYgKGtleSAmJiB2YWwpe1xyXG5cdFx0XHRcdFx0aWYgKGtleS50b0xvd2VyQ2FzZSgpICE9PSB2YWwudG9Mb3dlckNhc2UoKSkgc2FtZSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0YnVmZmVyW2tleS50b0xvd2VyQ2FzZSgpXSA9IFtrZXksIHZhbF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGlmIChtb2RlIDwgMCkgX3NldF9tb2RlKGl0ZW0pO1xyXG5cdFx0XHRcdGlmICghbW9kZSkgcmV0dXJuO1xyXG5cdFx0XHRcdGNvbnN0IGtleTogc3RyaW5nID0gX3N0cl92YWx1ZShpdGVtW2tleV9wcm9wXSk7XHJcblx0XHRcdFx0Y29uc3QgdmFsOiBzdHJpbmcgPSBfc3RyX3ZhbHVlKGl0ZW1bdmFsX3Byb3BdKTtcclxuXHRcdFx0XHRpZiAoa2V5ICYmIHZhbCl7XHJcblx0XHRcdFx0XHRpZiAoa2V5LnRvTG93ZXJDYXNlKCkgIT09IHZhbC50b0xvd2VyQ2FzZSgpKSBzYW1lID0gZmFsc2U7XHJcblx0XHRcdFx0XHRidWZmZXJba2V5LnRvTG93ZXJDYXNlKCldID0gW2tleSwgdmFsXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKF9yZWN1cnNlKXtcclxuXHRcdFx0Y29uc3QgdGV4dDogc3RyaW5nID0gX3N0cihpdGVtLCB0cnVlKTtcclxuXHRcdFx0aWYgKCF0ZXh0KSByZXR1cm47XHJcblx0XHRcdGNvbnN0IGVudHJpZXM6IGFueVtdID0gX3BhcnNlS2V5VmFsdWVzKHRleHQsIGZhbHNlLCB2YWx1ZV9kZWxpbWl0ZXIsIGVudHJpZXNfZGVsaW1pdGVyKTtcclxuXHRcdFx0cmV0dXJuIHZvaWQgKGVudHJpZXMubGVuZ3RoID8gZW50cmllcy5mb3JFYWNoKHYgPT4gX2FkZF9pdGVtKHYsIGZhbHNlKSkgOiBudWxsKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cdGNvbnN0IGl0ZW1zOiBhbnlbXSA9IE9iamVjdCh2YWx1ZXMpID09PSB2YWx1ZXMgJiYgT2JqZWN0KHZhbHVlc1tTeW1ib2wuaXRlcmF0b3JdKSA9PT0gdmFsdWVzW1N5bWJvbC5pdGVyYXRvcl0gPyBbLi4udmFsdWVzXSA6IFt2YWx1ZXNdO1xyXG5cdF9hZGRfaXRlbShpdGVtcywgdHJ1ZSk7XHJcblx0cmV0dXJuIE9iamVjdC52YWx1ZXMoYnVmZmVyKVxyXG5cdC5tYXAoZW50cnkgPT4gc2FtZSA/IGVudHJ5WzBdIDogZW50cnkuam9pbih2YWx1ZV9kZWxpbWl0ZXIpKVxyXG5cdC5qb2luKGVudHJpZXNfZGVsaW1pdGVyKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXh0IHdyYXAgbGluZXMgb24gbGVuZ3RoIGxpbWl0XHJcbiAqIFxyXG4gKiBAcGFyYW0gdGV4dCAtIHBhcnNlIHRleHRcclxuICogQHBhcmFtIG1heF9sZW5ndGggLSBtYXggbGluZSBsZW5ndGhcclxuICogQHBhcmFtIHdvcmRfYnJlYWsgLSB3aGV0aGVyIHRvIHVzZSB3b3JkIGJyZWFrIChkZWZhdWx0IGBmYWxzZWApXHJcbiAqIEBwYXJhbSBvbkFkZExpbmUgLSBhZGQgbGluZSBidWZmZXIgaGFuZGxlciBjYWxsYmFjayB+IHJldHVybiBtb2RpZmllZCBsaW5lIHZhbHVlIG9yIGB1bmRlZmluZWRgfGBudWxsYCB0byBza2lwXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdbXWAgdGV4dCB3cmFwIGxpbmVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3dyYXBMaW5lcyA9ICh0ZXh0OiBhbnksIG1heF9sZW5ndGg6IG51bWJlciA9IDAsIHdvcmRfYnJlYWs6IGJvb2xlYW4gPSBmYWxzZSwgb25BZGRMaW5lPzogKGxpbmU6c3RyaW5nLGxpbmVzX2J1ZmZlcjpzdHJpbmdbXSk9PnN0cmluZ3x1bmRlZmluZWQpOiBzdHJpbmdbXSA9PiB7XHJcblx0Y29uc3QgX29uQWRkTGluZTogKChsaW5lOnN0cmluZyxsaW5lc19idWZmZXI6c3RyaW5nW10pPT5zdHJpbmd8dW5kZWZpbmVkKXx1bmRlZmluZWQgPSAnZnVuY3Rpb24nID09PSB0eXBlb2Ygb25BZGRMaW5lID8gb25BZGRMaW5lIDogdW5kZWZpbmVkO1xyXG5cdGNvbnN0IG1heDogbnVtYmVyID0gTnVtYmVyLmlzSW50ZWdlcihtYXhfbGVuZ3RoID0gcGFyc2VJbnQobWF4X2xlbmd0aCBhcyBhbnkpKSAmJiBtYXhfbGVuZ3RoID49IDAgPyBtYXhfbGVuZ3RoIDogMDtcclxuXHRsZXQgbGluZXNfYnVmZmVyOiBzdHJpbmdbXSA9IFtdLCBsaW5lX2J1ZmZlcjogc3RyaW5nW10gPSBbXTtcclxuXHRjb25zdCBfYWRkX2xpbmUgPSAobGluZTogc3RyaW5nKTogdm9pZCA9PiB7XHJcblx0XHRpZiAoX29uQWRkTGluZSl7XHJcblx0XHRcdGNvbnN0IHJlczogYW55ID0gX29uQWRkTGluZShsaW5lLCBsaW5lc19idWZmZXIpO1xyXG5cdFx0XHRpZiAoW3VuZGVmaW5lZCwgbnVsbF0uaW5jbHVkZXMocmVzKSkgcmV0dXJuO1xyXG5cdFx0XHRsaW5lID0gX3N0cihyZXMpO1xyXG5cdFx0fVxyXG5cdFx0bGluZXNfYnVmZmVyLnB1c2gobGluZSk7XHJcblx0fTtcclxuXHRjb25zdCBfcGFyc2VfbGluZSA9IChsaW5lOiBzdHJpbmcpID0+IHtcclxuXHRcdGlmICghbWF4KSByZXR1cm4gX2FkZF9saW5lKGxpbmUpO1xyXG5cdFx0Y29uc3QgX2xpbmVfYnVmZmVyX2FkZCA9ICh3b3JkOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0Y29uc3QgbGluZV90ZXh0OiBzdHJpbmcgPSBbLi4ubGluZV9idWZmZXIsIHdvcmRdLmpvaW4oJyAnKTtcclxuXHRcdFx0aWYgKGxpbmVfdGV4dC5sZW5ndGggPiBtYXgpe1xyXG5cdFx0XHRcdGlmICh3b3JkX2JyZWFrKXsgLy8tLSB3b3JkIGJyZWFrXHJcblx0XHRcdFx0XHRsZXQgdmFsOiBzdHJpbmcgPSAnJywgb2Zmc2V0OiBudW1iZXIgPSAwO1xyXG5cdFx0XHRcdFx0d2hpbGUgKCh2YWwgPSBsaW5lX3RleHQuc3Vic3RyaW5nKG9mZnNldCwgb2Zmc2V0ICsgbWF4KSkubGVuZ3RoID09PSBtYXgpe1xyXG5cdFx0XHRcdFx0XHRfYWRkX2xpbmUodmFsKTtcclxuXHRcdFx0XHRcdFx0b2Zmc2V0ICs9IG1heDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGxpbmVfYnVmZmVyID0gW3ZhbF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKHdvcmQubGVuZ3RoID4gbWF4KXsgLy8tLSB3b3JkIGJyZWFrIH4gbG9uZ2VyIHRoYW4gbWF4XHJcblx0XHRcdFx0XHRcdGxldCB2YWw6IHN0cmluZyA9ICcnLCBvZmZzZXQ6IG51bWJlciA9IDA7XHJcblx0XHRcdFx0XHRcdHdoaWxlICgodmFsID0gbGluZV90ZXh0LnN1YnN0cmluZyhvZmZzZXQsIG9mZnNldCArIG1heCkpLmxlbmd0aCA9PT0gbWF4KXtcclxuXHRcdFx0XHRcdFx0XHRfYWRkX2xpbmUodmFsKTtcclxuXHRcdFx0XHRcdFx0XHRvZmZzZXQgKz0gbWF4O1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGxpbmVfYnVmZmVyID0gW3ZhbF07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIHsgLy8tLSB3cmFwIHdvcmRcclxuXHRcdFx0XHRcdFx0aWYgKGxpbmVfYnVmZmVyLmxlbmd0aCkgX2FkZF9saW5lKFsuLi5saW5lX2J1ZmZlciwgJyddLmpvaW4oJyAnKSk7XHJcblx0XHRcdFx0XHRcdGlmICgobGluZV9idWZmZXIgPSBbd29yZF0pLmpvaW4oJyAnKS5sZW5ndGggPT09IG1heCl7XHJcblx0XHRcdFx0XHRcdFx0X2FkZF9saW5lKGxpbmVfYnVmZmVyLmpvaW4oJyAnKSk7XHJcblx0XHRcdFx0XHRcdFx0bGluZV9idWZmZXIgPSBbXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmIChsaW5lX3RleHQubGVuZ3RoID09PSBtYXgpe1xyXG5cdFx0XHRcdF9hZGRfbGluZShsaW5lX3RleHQpO1xyXG5cdFx0XHRcdGxpbmVfYnVmZmVyID0gW107XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBsaW5lX2J1ZmZlciA9IFtsaW5lX3RleHRdO1xyXG5cdFx0fTtcclxuXHRcdGZvciAoY29uc3Qgd29yZCBvZiBsaW5lLnNwbGl0KCcgJykpIF9saW5lX2J1ZmZlcl9hZGQod29yZCk7XHJcblx0fTtcclxuXHRmb3IgKGNvbnN0IGxpbmUgb2YgX3N0cih0ZXh0KS5zcGxpdCgnXFxuJykpIF9wYXJzZV9saW5lKGxpbmUpO1xyXG5cdGlmIChsaW5lX2J1ZmZlcikgX2FkZF9saW5lKGxpbmVfYnVmZmVyLmpvaW4oJyAnKSk7XHJcblx0cmV0dXJuIGxpbmVzX2J1ZmZlcjtcclxufTsiLCJpbXBvcnQgeyBfc3RyIH0gZnJvbSAnLi9fc3RyaW5nJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgW2VzY2FwZSgpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9lc2NhcGUpIGZ1bmN0aW9uIH4gXyoqZGVwcmVjYXRpb24tYWx0KipfXHJcbiAqIC0gUmVwbGFjZXMgYWxsIGNoYXJhY3RlcnMgd2l0aCBlc2NhcGUgc2VxdWVuY2VzLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgQVNDSUkgd29yZCBjaGFyYWN0ZXJzIGAoQeKAk1osIGHigJN6LCAw4oCTOSwgXylgIGFuZCBgQFxcKl8rLS4vYC5cclxuICogLSBbRWNtYVNjcmlwdCBzcGVjXShodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLUIuMi4xKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdGV4dFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBlc2NhcGVkIHRleHRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZXNjYXBlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGNvbnN0IHRleHQ6IHN0cmluZyA9IF9zdHIodmFsdWUpO1xyXG5cdGlmICghdGV4dC5sZW5ndGgpIHJldHVybiB0ZXh0O1xyXG5cdGxldCBidWZmZXI6IHN0cmluZyA9ICcnO1xyXG5cdGNvbnN0IHNraXA6IHN0cmluZyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OUAqXystLi8sJztcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpICsrKXtcclxuXHRcdGxldCBjaGFyOiBzdHJpbmcgPSB0ZXh0W2ldO1xyXG5cdFx0aWYgKHNraXAuaW5kZXhPZihjaGFyKSA8IDApe1xyXG5cdFx0XHRjb25zdCBvcmQ6IG51bWJlciA9IHRleHQuY2hhckNvZGVBdChpKTtcclxuXHRcdFx0Y2hhciA9IG9yZCA8IDI1NiA/ICclJyArICgnMDAnICsgb3JkLnRvU3RyaW5nKDE2KSkudG9VcHBlckNhc2UoKS5zbGljZSgtMikgOiAnJXUnICsgKCcwMDAwJyArIG9yZC50b1N0cmluZygxNikpLnRvVXBwZXJDYXNlKCkuc2xpY2UoLTQpO1xyXG5cdFx0fVxyXG5cdFx0YnVmZmVyICs9IGNoYXI7XHJcblx0fVxyXG5cdHJldHVybiBidWZmZXI7XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIFRoZSBbdW5lc2NhcGUoKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvdW5lc2NhcGUpIGZ1bmN0aW9uIH4gXyoqZGVwcmVjYXRpb24tYWx0KipfXHJcbiAqIC0gQ29tcHV0ZXMgYSBuZXcgc3RyaW5nIGluIHdoaWNoIGhleGFkZWNpbWFsIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIHJlcGxhY2VkIHdpdGggdGhlIGNoYXJhY3RlcnMgdGhhdCB0aGV5IHJlcHJlc2VudCB+IF9zZWUgYF9lc2NhcGUoKWBfXHJcbiAqIC0gW0VjbWFTY3JpcHQgc3BlY10oaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy1CLjIuMilcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHRleHRcclxuICogQHJldHVybnMgYHN0cmluZ2AgdW5lc2NhcGVkIHRleHRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdW5lc2NhcGUgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgdGV4dDogc3RyaW5nID0gX3N0cih2YWx1ZSksIGxlbjogbnVtYmVyID0gdGV4dC5sZW5ndGg7XHJcblx0aWYgKCFsZW4pIHJldHVybiB0ZXh0O1xyXG5cdGxldCBidWZmZXI6IHN0cmluZyA9ICcnLCBrOiBudW1iZXIgPSAwO1xyXG5cdHdoaWxlIChrIDwgbGVuKXtcclxuXHRcdGxldCBjaGFyOiBzdHJpbmcgPSB0ZXh0W2tdO1xyXG5cdFx0aWYgKGNoYXIgPT09ICclJyl7IC8vN1xyXG5cdFx0XHRsZXQgY2hhcnM6IHN0cmluZyA9IGsgPD0gKGxlbiAtIDYpICYmIHRleHRbayArIDFdID09PSAndScgPyB0ZXh0LnN1YnN0cmluZyhrICsgMiwgayArIDYpIDogKGsgPD0gKGxlbiAtIDMpID8gdGV4dC5zdWJzdHJpbmcoayArIDEsIGsgKyAzKSA6ICcnKTtcclxuXHRcdFx0aWYgKCEvXlswLTlBLUZdKyQvaS50ZXN0KGNoYXJzKSkgY2hhcnMgPSAnJztcclxuXHRcdFx0aWYgKGNoYXJzLmxlbmd0aCA9PT0gNCl7XHJcblx0XHRcdFx0Y2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoY2hhcnMsIDE2KSk7XHJcblx0XHRcdFx0ayArPSA1O1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKGNoYXJzLmxlbmd0aCA9PT0gMil7XHJcblx0XHRcdFx0Y2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoJzAwJyArIGNoYXJzLCAxNikpO1xyXG5cdFx0XHRcdGsgKz0gMjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0YnVmZmVyICs9IGNoYXI7IC8vMThcclxuXHRcdGsgKz0gMTtcclxuXHR9XHJcblx0cmV0dXJuIGJ1ZmZlcjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBVVEY4IGVuY29kZSB0ZXh0IH4gW1JFRl0oaHR0cHM6Ly9lY21hbmF1dC5ibG9nc3BvdC5jb20vMjAwNi8wNy9lbmNvZGluZy1kZWNvZGluZy11dGY4LWluLWphdmFzY3JpcHQuaHRtbClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHRleHRcclxuICogQHJldHVybnMgYHN0cmluZ2AgVVRGOCBlbmNvZGVkIHRleHRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdXRmOEVuY29kZSA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IF91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoX3N0cih2YWx1ZSkpKTtcclxuXHJcbi8qKlxyXG4gKiBVVEY4IGRlY29kZSB0ZXh0XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB0ZXh0XHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIFVURjggZGVjb2RlZCB0ZXh0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3V0ZjhEZWNvZGUgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiBkZWNvZGVVUklDb21wb25lbnQoX2VzY2FwZSh2YWx1ZSkpOyIsImV4cG9ydCAqIGZyb20gJy4vX2JhdGNoJztcclxuZXhwb3J0ICogZnJvbSAnLi9fY2xvbmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL19jbG9uZURlZXAnO1xyXG5leHBvcnQgKiBmcm9tICcuL19jb21wYXJlJztcclxuZXhwb3J0ICogZnJvbSAnLi9fY29tcGFyZVNoYWxsb3cnO1xyXG5leHBvcnQgKiBmcm9tICcuL19kYXRldGltZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX2RlYm91Y2VkJztcclxuZXhwb3J0ICogZnJvbSAnLi9faGVsbG8nO1xyXG5leHBvcnQgKiBmcm9tICcuL19qc29uJztcclxuZXhwb3J0ICogZnJvbSAnLi9fbnVtYmVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9fb2JqZWN0cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX3Byb21pc2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL19xdWV1ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX3N0cmluZyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX3V0ZjgnO1xyXG5leHBvcnQgKiBmcm9tICcuL19yYzQnOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODcxMyk7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwidGhpcyIsImJ5dGVMZW5ndGgiLCJiNjQiLCJsZW5zIiwiZ2V0TGVucyIsInZhbGlkTGVuIiwicGxhY2VIb2xkZXJzTGVuIiwidG9CeXRlQXJyYXkiLCJ0bXAiLCJpIiwiYXJyIiwiQXJyIiwiX2J5dGVMZW5ndGgiLCJjdXJCeXRlIiwibGVuIiwicmV2TG9va3VwIiwiY2hhckNvZGVBdCIsImZyb21CeXRlQXJyYXkiLCJ1aW50OCIsImxlbmd0aCIsImV4dHJhQnl0ZXMiLCJwYXJ0cyIsIm1heENodW5rTGVuZ3RoIiwibGVuMiIsInB1c2giLCJlbmNvZGVDaHVuayIsImxvb2t1cCIsImpvaW4iLCJVaW50OEFycmF5IiwiQXJyYXkiLCJjb2RlIiwiRXJyb3IiLCJpbmRleE9mIiwic3RhcnQiLCJlbmQiLCJudW0iLCJvdXRwdXQiLCJiYXNlNjQiLCJpZWVlNzU0IiwiY3VzdG9tSW5zcGVjdFN5bWJvbCIsIlN5bWJvbCIsIkJ1ZmZlciIsIlNsb3dCdWZmZXIiLCJhbGxvYyIsIklOU1BFQ1RfTUFYX0JZVEVTIiwiS19NQVhfTEVOR1RIIiwiY3JlYXRlQnVmZmVyIiwiUmFuZ2VFcnJvciIsImJ1ZiIsIk9iamVjdCIsInNldFByb3RvdHlwZU9mIiwicHJvdG90eXBlIiwiYXJnIiwiZW5jb2RpbmdPck9mZnNldCIsIlR5cGVFcnJvciIsImFsbG9jVW5zYWZlIiwiZnJvbSIsInZhbHVlIiwic3RyaW5nIiwiZW5jb2RpbmciLCJpc0VuY29kaW5nIiwiYWN0dWFsIiwid3JpdGUiLCJzbGljZSIsImZyb21TdHJpbmciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImFycmF5VmlldyIsImlzSW5zdGFuY2UiLCJjb3B5IiwiZnJvbUFycmF5QnVmZmVyIiwiYnVmZmVyIiwiYnl0ZU9mZnNldCIsImZyb21BcnJheUxpa2UiLCJmcm9tQXJyYXlWaWV3IiwiU2hhcmVkQXJyYXlCdWZmZXIiLCJ2YWx1ZU9mIiwiYiIsIm9iaiIsImlzQnVmZmVyIiwiY2hlY2tlZCIsInVuZGVmaW5lZCIsIm51bWJlcklzTmFOIiwidHlwZSIsImlzQXJyYXkiLCJkYXRhIiwiZnJvbU9iamVjdCIsInRvUHJpbWl0aXZlIiwiYXNzZXJ0U2l6ZSIsInNpemUiLCJhcnJheSIsInRvU3RyaW5nIiwibXVzdE1hdGNoIiwiYXJndW1lbnRzIiwibG93ZXJlZENhc2UiLCJ1dGY4VG9CeXRlcyIsImJhc2U2NFRvQnl0ZXMiLCJ0b0xvd2VyQ2FzZSIsInNsb3dUb1N0cmluZyIsImhleFNsaWNlIiwidXRmOFNsaWNlIiwiYXNjaWlTbGljZSIsImxhdGluMVNsaWNlIiwiYmFzZTY0U2xpY2UiLCJ1dGYxNmxlU2xpY2UiLCJzd2FwIiwibiIsIm0iLCJiaWRpcmVjdGlvbmFsSW5kZXhPZiIsInZhbCIsImRpciIsImFycmF5SW5kZXhPZiIsImNhbGwiLCJsYXN0SW5kZXhPZiIsImluZGV4U2l6ZSIsImFyckxlbmd0aCIsInZhbExlbmd0aCIsIlN0cmluZyIsInJlYWQiLCJyZWFkVUludDE2QkUiLCJmb3VuZEluZGV4IiwiZm91bmQiLCJqIiwiaGV4V3JpdGUiLCJvZmZzZXQiLCJOdW1iZXIiLCJyZW1haW5pbmciLCJzdHJMZW4iLCJwYXJzZWQiLCJwYXJzZUludCIsInN1YnN0ciIsInV0ZjhXcml0ZSIsImJsaXRCdWZmZXIiLCJhc2NpaVdyaXRlIiwic3RyIiwiYnl0ZUFycmF5IiwiYXNjaWlUb0J5dGVzIiwiYmFzZTY0V3JpdGUiLCJ1Y3MyV3JpdGUiLCJ1bml0cyIsImMiLCJoaSIsImxvIiwidXRmMTZsZVRvQnl0ZXMiLCJNYXRoIiwibWluIiwicmVzIiwiZmlyc3RCeXRlIiwiY29kZVBvaW50IiwiYnl0ZXNQZXJTZXF1ZW5jZSIsInNlY29uZEJ5dGUiLCJ0aGlyZEJ5dGUiLCJmb3VydGhCeXRlIiwidGVtcENvZGVQb2ludCIsImNvZGVQb2ludHMiLCJNQVhfQVJHVU1FTlRTX0xFTkdUSCIsImZyb21DaGFyQ29kZSIsImFwcGx5IiwiZGVjb2RlQ29kZVBvaW50c0FycmF5Iiwia01heExlbmd0aCIsIlRZUEVEX0FSUkFZX1NVUFBPUlQiLCJwcm90byIsImZvbyIsImUiLCJ0eXBlZEFycmF5U3VwcG9ydCIsImNvbnNvbGUiLCJlcnJvciIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInBvb2xTaXplIiwiZmlsbCIsImFsbG9jVW5zYWZlU2xvdyIsIl9pc0J1ZmZlciIsImNvbXBhcmUiLCJhIiwieCIsInkiLCJjb25jYXQiLCJsaXN0IiwicG9zIiwic2V0Iiwic3dhcDE2Iiwic3dhcDMyIiwic3dhcDY0IiwidG9Mb2NhbGVTdHJpbmciLCJlcXVhbHMiLCJpbnNwZWN0IiwibWF4IiwicmVwbGFjZSIsInRyaW0iLCJ0YXJnZXQiLCJ0aGlzU3RhcnQiLCJ0aGlzRW5kIiwidGhpc0NvcHkiLCJ0YXJnZXRDb3B5IiwiaW5jbHVkZXMiLCJpc0Zpbml0ZSIsInRvSlNPTiIsIl9hcnIiLCJyZXQiLCJvdXQiLCJoZXhTbGljZUxvb2t1cFRhYmxlIiwiYnl0ZXMiLCJjaGVja09mZnNldCIsImV4dCIsImNoZWNrSW50Iiwid3J0QmlnVUludDY0TEUiLCJjaGVja0ludEJJIiwiQmlnSW50Iiwid3J0QmlnVUludDY0QkUiLCJjaGVja0lFRUU3NTQiLCJ3cml0ZUZsb2F0IiwibGl0dGxlRW5kaWFuIiwibm9Bc3NlcnQiLCJ3cml0ZURvdWJsZSIsIm5ld0J1ZiIsInN1YmFycmF5IiwicmVhZFVpbnRMRSIsInJlYWRVSW50TEUiLCJtdWwiLCJyZWFkVWludEJFIiwicmVhZFVJbnRCRSIsInJlYWRVaW50OCIsInJlYWRVSW50OCIsInJlYWRVaW50MTZMRSIsInJlYWRVSW50MTZMRSIsInJlYWRVaW50MTZCRSIsInJlYWRVaW50MzJMRSIsInJlYWRVSW50MzJMRSIsInJlYWRVaW50MzJCRSIsInJlYWRVSW50MzJCRSIsInJlYWRCaWdVSW50NjRMRSIsImRlZmluZUJpZ0ludE1ldGhvZCIsInZhbGlkYXRlTnVtYmVyIiwiZmlyc3QiLCJsYXN0IiwiYm91bmRzRXJyb3IiLCJyZWFkQmlnVUludDY0QkUiLCJyZWFkSW50TEUiLCJwb3ciLCJyZWFkSW50QkUiLCJyZWFkSW50OCIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZEJpZ0ludDY0TEUiLCJyZWFkQmlnSW50NjRCRSIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJ3cml0ZVVpbnRMRSIsIndyaXRlVUludExFIiwid3JpdGVVaW50QkUiLCJ3cml0ZVVJbnRCRSIsIndyaXRlVWludDgiLCJ3cml0ZVVJbnQ4Iiwid3JpdGVVaW50MTZMRSIsIndyaXRlVUludDE2TEUiLCJ3cml0ZVVpbnQxNkJFIiwid3JpdGVVSW50MTZCRSIsIndyaXRlVWludDMyTEUiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVVaW50MzJCRSIsIndyaXRlVUludDMyQkUiLCJ3cml0ZUJpZ1VJbnQ2NExFIiwid3JpdGVCaWdVSW50NjRCRSIsIndyaXRlSW50TEUiLCJsaW1pdCIsInN1YiIsIndyaXRlSW50QkUiLCJ3cml0ZUludDgiLCJ3cml0ZUludDE2TEUiLCJ3cml0ZUludDE2QkUiLCJ3cml0ZUludDMyTEUiLCJ3cml0ZUludDMyQkUiLCJ3cml0ZUJpZ0ludDY0TEUiLCJ3cml0ZUJpZ0ludDY0QkUiLCJ3cml0ZUZsb2F0TEUiLCJ3cml0ZUZsb2F0QkUiLCJ3cml0ZURvdWJsZUxFIiwid3JpdGVEb3VibGVCRSIsInRhcmdldFN0YXJ0IiwiY29weVdpdGhpbiIsImVycm9ycyIsIkUiLCJzeW0iLCJnZXRNZXNzYWdlIiwiQmFzZSIsImNvbnN0cnVjdG9yIiwic3VwZXIiLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsIm5hbWUiLCJzdGFjayIsIm1lc3NhZ2UiLCJhZGROdW1lcmljYWxTZXBhcmF0b3IiLCJyYW5nZSIsIkVSUl9PVVRfT0ZfUkFOR0UiLCJjaGVja0JvdW5kcyIsIkVSUl9JTlZBTElEX0FSR19UWVBFIiwiZmxvb3IiLCJFUlJfQlVGRkVSX09VVF9PRl9CT1VORFMiLCJpbnB1dCIsIm1zZyIsInJlY2VpdmVkIiwiaXNJbnRlZ2VyIiwiYWJzIiwiSU5WQUxJRF9CQVNFNjRfUkUiLCJJbmZpbml0eSIsImxlYWRTdXJyb2dhdGUiLCJzcGxpdCIsImJhc2U2NGNsZWFuIiwic3JjIiwiZHN0IiwiYWxwaGFiZXQiLCJ0YWJsZSIsImkxNiIsImZuIiwiQnVmZmVyQmlnSW50Tm90RGVmaW5lZCIsImlzTEUiLCJtTGVuIiwibkJ5dGVzIiwiZUxlbiIsImVNYXgiLCJlQmlhcyIsIm5CaXRzIiwiZCIsInMiLCJOYU4iLCJydCIsImlzTmFOIiwibG9nIiwiTE4yIiwiX2Jhc2U2NEVuY29kZSIsImJ1ZmZlckVuY29kaW5nIiwiX2Jhc2U2NERlY29kZSIsIlBST1BTIiwiQWxwaGFOdW0iLCJDSEFSUyIsInNpZ24iLCJpbmRleGVzIiwiYmFzZSIsImRlYyIsInVuc2hpZnQiLCJ3YXJuIiwidGV4dCIsImNoYXJzIiwibWFwIiwidiIsImFkZCIsInBhcnNlIiwiaW5zdGFuY2UiLCJ0b1VwcGVyQ2FzZSIsInRlc3QiLCJzaWduZWQiLCJpbnQiLCJBTklNQVRFX0RFRkFVTFRfRUFTSU5HIiwiRWFzaW5ncyIsImVhc2VMaW5lYXIiLCJBTklNQVRFX0RFRkFVTFRfRFVSQVRJT04iLCJvcHRpb25zIiwiX2RlYnVnIiwidXBkYXRlIiwiX3VwZGF0ZSIsImJlZm9yZSIsIl9iZWZvcmUiLCJhZnRlciIsIl9hZnRlciIsImVhc2luZyIsIl9lYXNpbmciLCJkdXJhdGlvbiIsIl9kdXJhdGlvbiIsImRlbGF5IiwiX2RlbGF5IiwiZGVsYXllZCIsIl9kZWxheWVkIiwiX2Zyb20iLCJ0byIsIl90byIsInRpbWVvdXQiLCJfdGltZW91dCIsImF1dG9wbGF5IiwiX2F1dG9wbGF5Iiwic2VsZiIsImNvbnRleHQiLCJfaXNGdW5jIiwiZXJyIiwiaGFzT3duUHJvcGVydHkiLCJfcG9zSW50IiwiQm9vbGVhbiIsIl9udW0iLCJkaWZmIiwiaWQiLCJpc19kb25lIiwiaXNfcGF1c2VkIiwicHJldiIsInQiLCJwIiwicHQiLCJldCIsImVsYXBzZWQiLCJpbmRleCIsInRoZW4iLCJEYXRlIiwibm93IiwicmVzZXQiLCJjbGVhclRpbWVvdXQiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImdldFRpbWUiLCJkZWJ1ZyIsImZpbmlzaCIsInRpbWVzdGFtcCIsImFib3J0X21ldGhvZCIsInBhdXNlX2R1cmF0aW9uIiwidG90YWxfZHVyYXRpb24iLCJhYm9ydGVkIiwiY29tcGxldGUiLCJzdGVwIiwic2V0VGltZW91dCIsImJlZ2luIiwidG9GaXhlZCIsInRpbWUiLCJkZWx0YSIsImZyYW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicGxheSIsInJlc3RhcnQiLCJwYXVzZSIsInRvZ2dsZSIsImJlZ3VuIiwicGF1c2VkIiwiZG9uZSIsInJlc3VtZSIsImFib3J0IiwiX3JlcXVlc3RBbmltYXRpb25GcmFtZSIsIl9jYW5jZWxBbmltYXRpb25GcmFtZSIsIndpbmRvdyIsInZlbmRvcnMiLCJ2ZW5kb3IiLCJjYWxsYmFjayIsImN1cnIiLCJoYW5kbGUiLCJjaGFuZ2UiLCJlYXNlSW5RdWFkIiwiZWFzZU91dFF1YWQiLCJlYXNlSW5PdXRRdWFkIiwiZWFzZUluU2luZSIsImNvcyIsIlBJIiwiZWFzZU91dFNpbmUiLCJzaW4iLCJlYXNlSW5PdXRTaW5lIiwiZWFzZUluRXhwbyIsImVhc2VPdXRFeHBvIiwiZWFzZUluT3V0RXhwbyIsImVhc2VJbkNpcmMiLCJzcXJ0IiwiZWFzZU91dENpcmMiLCJlYXNlSW5PdXRDaXJjIiwiZWFzZUluQ3ViaWMiLCJlYXNlT3V0Q3ViaWMiLCJlYXNlSW5PdXRDdWJpYyIsImVhc2VJblF1YXJ0IiwiZWFzZU91dFF1YXJ0IiwiZWFzZUluT3V0UXVhcnQiLCJlYXNlSW5RdWludCIsImVhc2VPdXRRdWludCIsImVhc2VJbk91dFF1aW50IiwiZWFzZUluRWxhc3RpYyIsImFzaW4iLCJlYXNlT3V0RWxhc3RpYyIsImVhc2VJbk91dEVsYXN0aWMiLCJlYXNlSW5CYWNrIiwiQWxsRWFzaW5ncyIsInN0YXJ0X3RpbWUiLCJzdG9wX3RpbWUiLCJfbXMiLCJfbm93IiwiX2lzRGF0ZSIsInVwZGF0ZVN0YXJ0IiwiX3N0YXJ0Iiwic3RvcCIsIl9zdG9wX3RpbWUiLCJfc3RvcCIsInN0YXJ0ZWQiLCJzdG9wcGVkIiwibXMiLCJzZWMiLCJkZWNpbWFsUGxhY2VzIiwiX3JvdW5kIiwiZWxhcHNlZF9tcyIsIkRFRkFVTFRfTUFYX0xJU1RFTkVSUyIsIkV2ZW50RW1pdHRlciIsIm1heF9saXN0ZW5lcnMiLCJfbWF4X2xpc3RlbmVycyIsIl9ldmVudHMiLCJ0aHJvd2FibGUiLCJfdHlwZSIsImxpc3RlbmVyIiwiX2xpc3RlbmVyIiwibGlzdGVuZXJzIiwicHJvcHMiLCJoYXNMaXN0ZW5lciIsImZpbmRJbmRleCIsImVtaXQiLCJldmVudCIsIm9uIiwib25jZSIsImFkZExpc3RlbmVyIiwic3Vic2NyaWJlIiwicmVtb3ZlTGlzdGVuZXIiLCJoYW5kbGVyIiwiZmlyZWQiLCJuZXdMaXN0ZW5lciIsInJlbW92ZWQiLCJfbGlzdGVuZXJzIiwic3BsaWNlIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwiZW1pdF9yZW1vdmVfbGlzdGVuZXIiLCJFdmVudHMiLCJFeGNlcHRpb24iLCJfdGltZSIsIl9lcnJvciIsIl9nZXRfc3RyIiwiX2dldF9pbnQiLCJfZ2V0X2NvZGUiLCJpdCIsIml0ZXJhdG9yIiwiVEFTS19TVEFUVVNFUyIsIkRFRkFVTFRfRVZFTlRfREVCT1VOQ0UiLCJERUZBVUxUX1BSRUNJU0lPTiIsIl9wb3NfbnVtIiwiX2RlZmF1bHQiLCJfYmxhbmsiLCJwYXJzZUZsb2F0IiwiX3Bvc19pbnQiLCJwbGFjZXMiLCJyb3VuZCIsIkVQU0lMT04iLCJfanNvbl9zdHIiLCJzZWVuIiwiSlNPTiIsInN0cmluZ2lmeSIsIl8iLCJfZ2V0X2Vycm9yIiwicmVhc29uIiwiX2RlYm91bmNlIiwidGltZXIiLCJtYXhfd2FpdCIsIl9oYW5kbGVyIiwiVGFzayIsImV2ZW50X2RlYm91bmNlIiwiZGVjaW1hbF9wcmVjaXNpb24iLCJsYWJlbCIsImxpbmtlZCIsInByZWNpc2lvbiIsInByb2dyZXNzIiwidG90YWwiLCJzdGF0dXMiLCJzdGFydFRpbWUiLCJzdG9wVGltZSIsImVsYXBzZWRUaW1lIiwiaXRlbSIsIl9kb25lIiwiX2VtaXR0ZXIiLCJfZGVib3VuY2VkX3VwZGF0ZSIsImNoYW5nZXMiLCJmYWlsdXJlIiwiY29tcGxldGVQcm9ncmVzcyIsInNldFByb2dyZXNzIiwiX3ZhbHVlIiwiX3RvdGFsIiwic2V0VG90YWwiLCJzZXRWYWx1ZSIsInNldEl0ZW0iLCJjcmVhdGUiLCJfcHJlY2lzaW9uIiwiX2V2ZW50X2RlYm91bmNlIiwiX3JvdW5kX3AiLCJwcm9nIiwiX29wdGlvbnMiLCJUYXNrcyIsIl90YXNrcyIsIk1hcCIsIl91bnN1YnNjcmliZSIsImFsbF9wcm9ncmVzcyIsImZ1bGxfcHJvZ3Jlc3MiLCJoYXNfcnVubmluZyIsImhhc19zdGFydGVkIiwiaGFzX2luY29tcGxldGUiLCJ0YXNrX2VudHJpZXMiLCJ0YXNrIiwidmFsdWVzIiwidGFza3MiLCJmcm9tRW50cmllcyIsInJ1bm5pbmciLCJoYXMiLCJfdGFzayIsInVuc3Vic2NyaWJlIiwicmVtb3ZlIiwiZGVsZXRlIiwiVEVSTV9MT0dfTUVUSE9EIiwiVEVSTV9GT1JNQVRfRElTQUJMRUQiLCJGT1JNQVRfRElTQUJMRUQiLCJfYm9vbCIsIkxPR19NRVRIT0RTIiwiTE9HX01FVEhPRCIsIkZPUk1BVFMiLCJicmlnaHQiLCJkaW0iLCJ1bmRlcnNjb3JlIiwiYmxpbmsiLCJyZXZlcnNlIiwiaGlkZGVuIiwiZmdfYmxhY2siLCJmZ19yZWQiLCJmZ19ncmVlbiIsImZnX3llbGxvdyIsImZnX2JsdWUiLCJmZ19tYWdlbnRhIiwiZmdfY3lhbiIsImZnX3doaXRlIiwiZmdfZ3JheSIsImJnX2JsYWNrIiwiYmdfcmVkIiwiYmdfZ3JlZW4iLCJiZ195ZWxsb3ciLCJiZ19ibHVlIiwiYmdfbWFnZW50YSIsImJnX2N5YW4iLCJiZ193aGl0ZSIsImJnX2dyYXkiLCJQUkVERUZJTkVEX0ZPUk1BVFMiLCJkdW1wIiwiaW5mbyIsInN1Y2Nlc3MiLCJiZ19sb2ciLCJiZ19kZWJ1ZyIsImJnX2Vycm9yIiwiYmdfd2FybiIsImJnX2luZm8iLCJiZ19zdWNjZXNzIiwiZ2V0Rm9ybWF0cyIsImZvcm1hdHMiLCJGTSIsIlBGIiwicmVkdWNlIiwiX2FkZFBGIiwiayIsImZvcm1hdCIsImFyZ3MiLCJfZm9ybWF0cyIsIl9mb3JtYXQiLCJSZWdFeHAiLCJfc3RyaW5nIiwiZiIsInRoYXQiLCJsb2dfbWV0aG9kIiwiX21ldGhvZCIsIm1ldGhvZCIsIml0ZW1zIiwiY2xlYW4iLCJfY2xlYW4iLCJfdmFsIiwiX2Zvcm1hdHNfbGlzdCIsImJyIiwiX2VudHJpZXMiLCJfY2xvbmUiLCJfc3RyaW5nYWJsZSIsImVudHJpZXMiLCJ0bXBfZW50cmllcyIsImNlbGxNYXhMZW5ndGgiLCJkaXZpZGVyIiwibm9JbmRleCIsIm51bUluZGV4IiwiYXJnc19jZWxsTWF4TGVuZ3RoIiwiYXJnc19kaXZpZGVyIiwiYXJnc19ub0luZGV4IiwiYXJnc19udW1JbmRleCIsImFyZ3NfdGV4dCIsInByb2Nlc3MiLCJhcmd2IiwiYXJnc19tYXRjaCIsIm1hdGNoIiwiZGF0YV9pdGVtcyIsImRhdGFfdHlwZSIsInN0clZhbCIsImNvbG9yIiwiX2pzb25TdHJpbmdpZnkiLCJfc3RyRXNjYXBlIiwibW9kZSIsInRhYmxlX2l0ZW1zIiwibWFwX2tleXMiLCJtYXBfaXRlbXMiLCJyIiwiZGF0YV9pdGVtIiwibGlzdF9pdGVtcyIsImxpc3RfdHlwZSIsIm1hcF9pdGVtIiwiX3N0ciIsInRhYmxlX2l0ZW0iLCJrZXkiLCJ3aWR0aF9tYXAiLCJzdHJfaXRlbXMiLCJzdHJfaXRlbSIsIndpZHRoIiwidHh0Iiwicm93c19sZW4iLCJtYXhfbGluZXMiLCJzdHJfaXRlbV9saW5lcyIsImxpbmVzIiwibGluZSIsInN1YnN0cmluZyIsInBhZEVuZCIsIm1heF9zdHJfaXRlbV9saW5lcyIsInN0cl9tYXhfbGluZXMiLCJtYXhfbGluZXNfYXJyYXkiLCJsaW5lX3Jvd3MiLCJyb3dzIiwibGluZXNfdG9wIiwibGVmdCIsIm1pZCIsInJpZ2h0IiwibGluZXNfbWlkIiwibGluZXNfYm90dG9tIiwibGluZXNfc2lkZSIsImJvcmRlck1vZGUiLCJsaW5lX3JvdyIsImJtIiwiYm9yZGVyX3RvcCIsImJvcmRlcl9taWQiLCJib3JkZXJfYm90dG9tIiwiY2xlYXIiLCJFWFRfTUlNRVMiLCJfbWltZSIsIl9mYWlsdXJlIiwicHJvcCIsImZpbmQiLCJzdGFydHNXaXRoIiwiRmFpbEVycm9yIiwiX2Jhc2VuYW1lIiwiZG90cyIsIl9zdHJpY3QiLCJiYXNlbmFtZSIsImlsbGVnYWwiLCJpbnZhbGlkIiwicG9wIiwiQmFzZW5hbWVFcnJvciIsIl9maWxlcGF0aCIsInNlcGFyYXRvciIsInNlcCIsImRyaXZlIiwicGF0aCIsInBhdGhfcGFydHMiLCJfc3BsaXQiLCJwYXJ0IiwiZGl2IiwidHJpbW1lZF9wYXJ0cyIsIm5vcm1fcGFydHMiLCJTZXQiLCJvdXRib3VuZCIsInRtcF9wYXRoIiwib3V0Ym91bmRfcGF0aCIsIk5vcm1QYXRoRXJyb3IiLCJfYmF0Y2hWYWx1ZXMiLCJiYXRjaFNpemUiLCJfYnVmZmVyIiwiY2xvbmUiLCJub2RlVHlwZSIsImNsb25lTm9kZSIsIl9pbnN0YW5jZW9mIiwibyIsIl90b1N0cmluZyIsImNsb25lUHJvdG90eXBlIiwicGFyZW50IiwiZ2V0UHJvdG90eXBlT2YiLCJjaXJjdWxhciIsIl9jaXJjdWxhciIsImRlcHRoIiwiX2RlcHRoIiwiX3Byb3RvdHlwZSIsIm5vbl9lbnVtZXJhYmxlIiwiX25vbl9lbnVtZXJhYmxlIiwiYWxsUGFyZW50cyIsImFsbENoaWxkcmVuIiwidXNlQnVmZmVyIiwiY2hpbGQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImNhdGNoIiwiX2lzUmVnRXhwIiwic291cmNlIiwicmVnZXgiLCJmbGFncyIsImdsb2JhbCIsImlnbm9yZUNhc2UiLCJtdWx0aWxpbmUiLCJfZ2V0UmVnRXhwRmxhZ3MiLCJsYXN0SW5kZXgiLCJrZXlDaGlsZCIsInZhbENoaWxkIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib2JqUHJvcGVydHkiLCJSZWZlcmVuY2VFcnJvciIsImdldE93blByb3BlcnR5U3ltYm9scyIsInN5bWJvbHMiLCJzeW1ib2wiLCJkZXNjcmlwdG9yIiwiYWxsUHJvcGVydHlOYW1lcyIsImdldE93blByb3BlcnR5TmFtZXMiLCJwcm9wZXJ0eU5hbWUiLCJfY29tcGFyZSIsImxlZnRDaGFpbiIsInJpZ2h0Q2hhaW4iLCJkZWVwTWF0Y2giLCJpc1Byb3RvdHlwZU9mIiwidmFsX2EiLCJ2YWxfYiIsIl9jb21wYXJlU2hhbGxvdyIsInNoYWxsb3dNYXRjaCIsIl9kYXRlIiwiX3BhcnNlIiwiZGF0ZSIsIkRBWV9OQU1FUyIsIl9kYXlOYW1lIiwiTU9OVEhfTkFNRVMiLCJfbW9udGhOYW1lIiwiX2RheVN0YXJ0IiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImdldERhdGUiLCJfZGF5RW5kIiwiX21vbnRoU3RhcnQiLCJfbW9udGhFbmQiLCJfeWVhclN0YXJ0IiwiX3llYXJFbmQiLCJfZGF0ZXRpbWUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwicGFkZGVkIiwicGFkU3RhcnQiLCJfZGF0ZXN0ciIsIl90aW1lc3RyIiwiX3BhcnNlSXNvIiwic3RydWN0IiwiZXhlYyIsIm1pbl9vZmZzZXQiLCJVVEMiLCJZRUFSX01TIiwiTU9OVEhfTVMiLCJEQVlfTVMiLCJIT1VSX01TIiwiTUlOVVRFX01TIiwiU0VDT05EX01TIiwiY3JlYXRlX2R1cmF0aW9uIiwieWVhcnMiLCJtb250aHMiLCJkYXlzIiwiaG91cnMiLCJtaW51dGVzIiwic2Vjb25kcyIsIm1pbGxpc2Vjb25kcyIsInRvdGFsX2RheXMiLCJ0b3RhbF90aW1lIiwiZW5kX3RpbWUiLCJidWZmZXJfdGV4dCIsImJ1ZmZlcl90aW1lIiwiX2FkZCIsIl9lbGFwc2VkIiwiZ2V0TWlsbGlzZWNvbmRzIiwic3RhcnRfeWVhciIsInN0YXJ0X21vbnRoIiwiX2RlYm91Y2VkIiwibWF4V2FpdCIsImltbWVkaWF0ZSIsImltbWVkaWF0ZVRpbWVyIiwiY2FsbFRpbWVyIiwid2FpdFRpbWVyIiwibmV4dENhbGwiLCJleGVjdXRlIiwiaXNfaW1tZWRpYXRlIiwibmV4dCIsIndyYXBwZXIiLCJfbmV4dCIsIm5vX3dhaXQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3NheUhlbGxvIiwiaGVsbG8iLCJzcGFjZSIsIl91bmRlZmluZWQiLCJfc3BhY2UiLCJwYXJlbnRzIiwicmVmcyIsIl9yZXBsYWNlciIsIl9wYXJlbnRzIiwib3RoZXIiLCJfanNvblBhcnNlIiwiX2pzb25Db3B5IiwiX2lzT2JqSnNvbiIsIl9udW1lcmljIiwiYm9vbGVhbnMiLCJibGFua3MiLCJwcmVmaXgiLCJNSU5fU0FGRV9JTlRFR0VSIiwiTUFYX1NBRkVfSU5URUdFUiIsIl9wb3NOdW0iLCJfaW50IiwiX2xpbWl0X2RlZmF1bHQiLCJfY29tbWFzIiwiemVyb3MiLCJfcmFuZCIsInJhbmRvbSIsIl9weDJyZW0iLCJ1bml0IiwiX2J5dGVzVmFsIiwiY29tbWFzIiwidSIsIl9kZWMyYmFzZSIsImRlY2ltYWwiLCJncm91cCIsImhleF9jaGFycyIsInJlbWFpbmRlciIsIl9kZWMyYmluIiwiX2JpbjJkZWMiLCJiaW5hcnkiLCJfZGVjMmhleCIsIl9oZXgyZGVjIiwiaGV4IiwiaGV4X21hcCIsIl9kZWMyb2N0IiwiX29jdDJkZWMiLCJvY3RhbCIsIl9iYXNlMmRlYyIsIl9kZWcycmFkIiwiZGVncmVlcyIsIl9yYWQyZGVnIiwicmFkaWFucyIsIl9kaXN0YW5jZSIsImxhdGl0dWRlMSIsImxvbmdpdHVkZTEiLCJsYXRpdHVkZTIiLCJsb25naXR1ZGUyIiwiYXRhbjIiLCJfbG9neCIsImxvZzIiLCJfbnVtayIsIm1heF9wb3ciLCJsb2cxMCIsIl9nZXRBbGxQcm9wZXJ0eURlc2NyaXB0b3JzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsIl9nZXRBbGxQcm9wZXJ0aWVzIiwic3RhdGljcyIsIl9fZ2V0X3Byb3BzIiwia2V5cyIsIl9fZ2V0X2tleXMiLCJleGNsdWRlZF9wcm9wcyIsIkZ1bmN0aW9uIiwiX19hZGRfcHJvcHMiLCJfaGFzUHJvcCIsIm93biIsIl9oYXNQcm9wcyIsIl9oYXNBbnlQcm9wcyIsIl9nZXRQcm9wIiwicHJvcGVydHkiLCJleGlzdHMiLCJ0ZXh0X21hdGNoIiwiX2lzQ2xhc3MiLCJvckNsYXNzIiwiX21pbk1heCIsIl9kb3RGbGF0Iiwib21pdCIsIl9hZGRFbnRyaWVzIiwiX3Bfa2V5IiwiZW50cnkiLCJfa2V5IiwiX2RvdEluZmxhdGUiLCJwYXRoX3ZhbHVlIiwia2V5c19pdGVtIiwia2V5c19idWZmZXIiLCJfbm9ybSIsIl92YWxpZERvdFBhdGgiLCJkb3RfcGF0aCIsIm9wZXJhdGlvbnMiLCJ2YWxpZCIsIl9pbnZhbGlkIiwic3RyaWN0IiwiX2RvdEdldCIsInNlYXJjaF9lbnRyaWVzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwibWF0Y2hlcyIsIl92YWx1ZU9mIiwiX2VtcHR5IiwiX2l0ZXJhYmxlIiwiX2FzeW5jIiwiYXN5bmNJdGVyYXRvciIsIl9pc09iamVjdCIsIl9maWxsZWQiLCJfaXNBcnJheSIsIl9tb2RlIiwiX3ZhbHVlcyIsIm9iamVjdCIsImZsYXR0ZW4iLCJoYXNfZW50cmllcyIsImZsYXQiLCJfZHVtcFZhbCIsIm1heFN0ckxlbmd0aCIsIl9nZXRfZmlyc3QiLCJzYW1lX2tleXMiLCJwcmV2X2tleXMiLCJrZXlzX3ZhbCIsImNvdW50IiwiYXBwZW5kIiwiX21heFN0ciIsIl9zb3J0Iiwib25Db21wYXJlIiwibG9jYWxlQ29tcGFyZUNvbmZpZyIsInNvcnRfbW9kZSIsImxvY2FsZV9jb21wYXJlX2NvbmZpZyIsImxvY2FsZXMiLCJzZW5zaXRpdml0eSIsIl9vbl9jb21wYXJlIiwiX3NvcnRfY29tcGFyZSIsInJlc3VsdCIsImxvY2FsZUNvbXBhcmUiLCJfc29ydF9vcmRlciIsInNtb2RlIiwiX2RvX2NvbXBhcmUiLCJfc29ydF9tZXRob2QiLCJzb3J0X21hcCIsIl9zb3J0X2VudHJ5Iiwic29ydF9lbnRyaWVzIiwia2V5X29yZGVyIiwic29ydCIsIl90cmFucyIsInRlbXBsYXRlIiwicGF0dGVybiIsIm1pc3NpbmciLCJfdHJhbnNfZm9ybWF0IiwiX3RyYW5zX2dldCIsImRlZmF1bHRfdmFsIiwiX2FycmF5TGlzdCIsIl9tYXBWYWx1ZXMiLCJfbG93ZXJjYXNlIiwiX3RleHRzIiwiX3NpbGVudCIsImVycl9tZXNzYWdlIiwiX2Vycm9yVGV4dCIsImVycl9tb2RlIiwiZXJyX2RlYnVnIiwiZXJyX25hbWUiLCJfcHJvcHNPYmoiLCJfb21pdCIsImZpbHRlciIsIl9jaHVua3MiLCJjaHVua3MiLCJfc2VsZWN0S2V5cyIsImZpbGxlZF9vbmx5IiwiX2dldF9rZXlzIiwib21pdHMiLCJmaWxsZWQiLCJ1bmZpbGxlZCIsImtleXNfb2JqZWN0Iiwic2VsZWN0ZWQiLCJ1bmZpbGxlZF9rZXlzIiwiaXRlbV9lbnRyaWVzIiwiX3RyZWUiLCJfbmFtZSIsInBhZCIsIl9wYWQiLCJtYXhfbGVuZ3RoIiwid3JhcF9sZW5ndGgiLCJ3b3JkX2JyZWFrIiwiX2xpbmVzIiwibm9kZSIsIm5vZGVfZW5kIiwibm9kZV9zcGFjZSIsIm5vZGVfYm9yZGVyIiwicmVnX3F1b3RlcyIsIml0ZXJhYmxlIiwic2tpcCIsInZfbGluZXMiLCJ2X2xlbiIsImlzX2xpc3QiLCJsaXN0X3ZhbHVlIiwia2V5X25vZGUiLCJwcm9jX2xlbiIsInN0ZG91dCIsImNvbHVtbnMiLCJ2X2xhc3QiLCJxdW90ZWQiLCJfdGV4dE1heExlbmd0aCIsIndyYXBfbGVuIiwid3JhcF9saW5lcyIsIl93cmFwTGluZXMiLCJ0ZXh0X25vZGUiLCJ3cmFwX25vZGUiLCJ3cmFwX2xpbmUiLCJhc3luYyIsIl9yZXNvbHZlIiwicHJvbWlzZSIsIl9uZXciLCJyZXNvbHZlZCIsIl9hc3luY0FsbCIsIm9uUHJvZ3Jlc3MiLCJfY2FsbGJhY2siLCJfb25Qcm9ncmVzcyIsImZhaWx1cmVzIiwicXVldWUiLCJyZXN1bHRzIiwiZmFpbGVkIiwicGVyY2VudCIsImZvckVhY2giLCJfYXN5bmNRdWV1ZSIsInBlbmRpbmciLCJuZXh0X3RpbWVvdXQiLCJfcXVldWVfbmV4dCIsInNoaWZ0IiwiX2FzeW5jVmFsdWVzIiwiZWFjaCIsImNhbmNlbCIsIl9icmVhayIsIl9zbGVlcCIsIlBlbmRpbmdBYm9ydEVycm9yIiwiUEVORElOR19DQUNIRSIsIl9wZW5kaW5nIiwia2VlcCIsIl9wZW5kaW5nX3Jlc29sdmUiLCJfcGVuZGluZ19yZWplY3QiLCJjdXJyZW50IiwibmV4dF9wcm9taXNlIiwiYWJvcnRFcnJvciIsInBlbmRpbmdfcHJvbWlzZSIsIl9wZW5kaW5nQWJvcnQiLCJfcXVldWUiLCJoZWFkIiwidGFpbCIsImlzRW1wdHkiLCJlbnF1ZXVlIiwiZGVxdWV1ZSIsInBlZWsiLCJfcmM0IiwiUyIsIksiLCJrZXlzdHJlYW0iLCJfeHVpZCIsIl91dWlkIiwiX2dldF91dWlkIiwidXVpZCIsInRvSVNPU3RyaW5nIiwiX3N0ck5vcm0iLCJub3JtYWxpemUiLCJfcmVnRXNjYXBlIiwiaCIsImVuY29kZVVSSUNvbXBvbmVudCIsIl9zcWxFc2NhcGUiLCJfdHJpbSIsInJsIiwidHJpbV9jaGFycyIsImQxIiwiZDIiLCJfbHRyaW0iLCJfcnRyaW0iLCJfdG9UaXRsZUNhc2UiLCJrZWVwQ2FzZSIsIl90b1NlbnRlbmNlQ2FzZSIsImNoYXJBdCIsInJlc3QiLCJfdG9TbmFrZUNhc2UiLCJ0cmltVHJhaWxpbmciLCJfdG9TbHVnQ2FzZSIsIl90b1N0dWRseUNhc2UiLCJ3b3JkIiwiX3RvQ2FtZWxDYXNlIiwiX3RvTG93ZXJDYXNlIiwiX3RvVXBwZXJDYXNlIiwiX2hhc2hDb2RlIiwiaGFzaCIsIl9oYXNoQ29kZVN0ciIsInJlIiwiX2hhc2g1MyIsInNlZWQiLCJoMSIsImgyIiwiY2giLCJpbXVsIiwiX3BhcnNlRGF0YVVyaSIsIm1pbWUiLCJjaGFyc2V0IiwiX2lzVXJsIiwibWF0Y2hEYXRhVVJJIiwiX2lzRW1haWwiLCJfcGFyc2VDc3YiLCJkZWxpbWl0ZXIiLCJuX3NlcF9yZSIsInFfc2VwX3JlIiwiY19zZXBfcmUiLCJkZWxpbSIsImZpZWxkX3JlIiwicDEiLCJwMiIsInJvdyIsImNlbGwiLCJfdG9Dc3YiLCJfY2VsbCIsIml0ZXJhYmxlcyIsInZfcm93IiwiZGF0YV9yb3dzIiwiZGF0YV9yb3ciLCJkX3JvdyIsImNzdiIsInJlc3BvbnNlIiwiYm9keSIsIm1heF9sZW4iLCJhcHBlbmRfbGVuIiwidGV4dF9sZW4iLCJfY3IiLCJwYXNzIiwiX2tleVZhbHVlIiwiZXNjYXBlIiwidmFsdWVfZGVsaW1pdGVyIiwiZW50cmllc19kZWxpbWl0ZXIiLCJ2YWx1ZV9kZWxpbSIsImVudHJpZXNfZGVsaW0iLCJfcGFyc2VLZXlWYWx1ZXMiLCJwYXJzZV9lbnRyaWVzIiwiX3N0cktleVZhbHVlcyIsIl92YWx1ZV9kZWxpbWl0ZXIiLCJfZW50cmllc19kZWxpbWl0ZXIiLCJrZXlfcHJvcCIsInZhbF9wcm9wIiwic2FtZSIsIl9zZXRfbW9kZSIsIl9zdHJfdmFsdWUiLCJfYWRkX2l0ZW0iLCJfcmVjdXJzZSIsIm9uQWRkTGluZSIsIl9vbkFkZExpbmUiLCJsaW5lc19idWZmZXIiLCJsaW5lX2J1ZmZlciIsIl9hZGRfbGluZSIsIl9wYXJzZV9saW5lIiwiX2xpbmVfYnVmZmVyX2FkZCIsImxpbmVfdGV4dCIsIl9lc2NhcGUiLCJjaGFyIiwib3JkIiwiX3VuZXNjYXBlIiwiX3V0ZjhFbmNvZGUiLCJfdXRmOERlY29kZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iXSwic291cmNlUm9vdCI6IiJ9
\ No newline at end of file
Alphabetical integer
+