3 lines
247 KiB
JavaScript
3 lines
247 KiB
JavaScript
var vt=Object.create;var xe=Object.defineProperty;var gt=Object.getOwnPropertyDescriptor;var wt=Object.getOwnPropertyNames;var Et=Object.getPrototypeOf,At=Object.prototype.hasOwnProperty;var Ot=(t,e,r)=>e in t?xe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Lt=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var Ie=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var xt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of wt(e))!At.call(t,o)&&o!==r&&xe(t,o,{get:()=>e[o],enumerable:!(n=gt(e,o))||n.enumerable});return t};var Me=(t,e,r)=>(r=t!=null?vt(Et(t)):{},xt(e||!t||!t.__esModule?xe(r,"default",{value:t,enumerable:!0}):r,t));var T=(t,e,r)=>Ot(t,typeof e!="symbol"?e+"":e,r);var qe=Ie((kr,De)=>{"use strict";var X=typeof Reflect=="object"?Reflect:null,Fe=X&&typeof X.apply=="function"?X.apply:function(e,r,n){return Function.prototype.apply.call(e,r,n)},pe;X&&typeof X.ownKeys=="function"?pe=X.ownKeys:Object.getOwnPropertySymbols?pe=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:pe=function(e){return Object.getOwnPropertyNames(e)};function Ct(t){console&&console.warn&&console.warn(t)}var He=Number.isNaN||function(e){return e!==e};function p(){p.init.call(this)}De.exports=p;De.exports.once=It;p.EventEmitter=p;p.prototype._events=void 0;p.prototype._eventsCount=0;p.prototype._maxListeners=void 0;var Je=10;function me(t){if(typeof t!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}Object.defineProperty(p,"defaultMaxListeners",{enumerable:!0,get:function(){return Je},set:function(t){if(typeof t!="number"||t<0||He(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");Je=t}});p.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};p.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||He(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function ze(t){return t._maxListeners===void 0?p.defaultMaxListeners:t._maxListeners}p.prototype.getMaxListeners=function(){return ze(this)};p.prototype.emit=function(e){for(var r=[],n=1;n<arguments.length;n++)r.push(arguments[n]);var o=e==="error",i=this._events;if(i!==void 0)o=o&&i.error===void 0;else if(!o)return!1;if(o){var s;if(r.length>0&&(s=r[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var u=i[e];if(u===void 0)return!1;if(typeof u=="function")Fe(u,this,r);else for(var f=u.length,h=Ve(u,f),n=0;n<f;++n)Fe(h[n],this,r);return!0};function Ke(t,e,r,n){var o,i,s;if(me(r),i=t._events,i===void 0?(i=t._events=Object.create(null),t._eventsCount=0):(i.newListener!==void 0&&(t.emit("newListener",e,r.listener?r.listener:r),i=t._events),s=i[e]),s===void 0)s=i[e]=r,++t._eventsCount;else if(typeof s=="function"?s=i[e]=n?[r,s]:[s,r]:n?s.unshift(r):s.push(r),o=ze(t),o>0&&s.length>o&&!s.warned){s.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=t,a.type=e,a.count=s.length,Ct(a)}return t}p.prototype.addListener=function(e,r){return Ke(this,e,r,!1)};p.prototype.on=p.prototype.addListener;p.prototype.prependListener=function(e,r){return Ke(this,e,r,!0)};function kt(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function Xe(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},o=kt.bind(n);return o.listener=r,n.wrapFn=o,o}p.prototype.once=function(e,r){return me(r),this.on(e,Xe(this,e,r)),this};p.prototype.prependOnceListener=function(e,r){return me(r),this.prependListener(e,Xe(this,e,r)),this};p.prototype.removeListener=function(e,r){var n,o,i,s,a;if(me(r),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===r||n.listener===r)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||r));else if(typeof n!="function"){for(i=-1,s=n.length-1;s>=0;s--)if(n[s]===r||n[s].listener===r){a=n[s].listener,i=s;break}if(i<0)return this;i===0?n.shift():Pt(n,i),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,a||r)}return this};p.prototype.off=p.prototype.removeListener;p.prototype.removeAllListeners=function(e){var r,n,o;if(n=this._events,n===void 0)return this;if(n.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):n[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[e]),this;if(arguments.length===0){var i=Object.keys(n),s;for(o=0;o<i.length;++o)s=i[o],s!=="removeListener"&&this.removeAllListeners(s);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(r=n[e],typeof r=="function")this.removeListener(e,r);else if(r!==void 0)for(o=r.length-1;o>=0;o--)this.removeListener(e,r[o]);return this};function Ge(t,e,r){var n=t._events;if(n===void 0)return[];var o=n[e];return o===void 0?[]:typeof o=="function"?r?[o.listener||o]:[o]:r?Tt(o):Ve(o,o.length)}p.prototype.listeners=function(e){return Ge(this,e,!0)};p.prototype.rawListeners=function(e){return Ge(this,e,!1)};p.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):$e.call(t,e)};p.prototype.listenerCount=$e;function $e(t){var e=this._events;if(e!==void 0){var r=e[t];if(typeof r=="function")return 1;if(r!==void 0)return r.length}return 0}p.prototype.eventNames=function(){return this._eventsCount>0?pe(this._events):[]};function Ve(t,e){for(var r=new Array(e),n=0;n<e;++n)r[n]=t[n];return r}function Pt(t,e){for(;e+1<t.length;e++)t[e]=t[e+1];t.pop()}function Tt(t){for(var e=new Array(t.length),r=0;r<e.length;++r)e[r]=t[r].listener||t[r];return e}function It(t,e){return new Promise(function(r,n){function o(s){t.removeListener(e,i),n(s)}function i(){typeof t.removeListener=="function"&&t.removeListener("error",o),r([].slice.call(arguments))}Ye(t,e,i,{once:!0}),e!=="error"&&Mt(t,o,{once:!0})})}function Mt(t,e,r){typeof t.on=="function"&&Ye(t,"error",e,r)}function Ye(t,e,r,n){if(typeof t.on=="function")n.once?t.once(e,r):t.on(e,r);else if(typeof t.addEventListener=="function")t.addEventListener(e,function o(i){n.once&&t.removeEventListener(e,o),r(i)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof t)}});var it=Ie((Gr,V)=>{"use strict";var c={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(t){this.toString=function(){return"CORRUPT: "+this.message},this.message=t},invalid:function(t){this.toString=function(){return"INVALID: "+this.message},this.message=t},bug:function(t){this.toString=function(){return"BUG: "+this.message},this.message=t},notReady:function(t){this.toString=function(){return"NOT READY: "+this.message},this.message=t}}};c.cipher.aes=function(t){this.w[0][0][0]||this.C();var e,r,n,o,i=this.w[0][4],s=this.w[1];e=t.length;var a=1;if(e!==4&&e!==6&&e!==8)throw new c.exception.invalid("invalid aes key size");for(this.b=[n=t.slice(0),o=[]],t=e;t<4*e+28;t++)r=n[t-1],(t%e===0||e===8&&t%e===4)&&(r=i[r>>>24]<<24^i[r>>16&255]<<16^i[r>>8&255]<<8^i[r&255],t%e===0&&(r=r<<8^r>>>24^a<<24,a=a<<1^283*(a>>7))),n[t]=n[t-e]^r;for(e=0;t;e++,t--)r=n[e&3?t:t-4],o[e]=4>=t||4>e?r:s[0][i[r>>>24]]^s[1][i[r>>16&255]]^s[2][i[r>>8&255]]^s[3][i[r&255]]};c.cipher.aes.prototype={encrypt:function(t){return rt(this,t,0)},decrypt:function(t){return rt(this,t,1)},w:[[[],[],[],[],[]],[[],[],[],[],[]]],C:function(){var t=this.w[0],e=this.w[1],r=t[4],n=e[4],o,i,s,a=[],u=[],f,h,l,y;for(o=0;256>o;o++)u[(a[o]=o<<1^283*(o>>7))^o]=o;for(i=s=0;!r[i];i^=f||1,s=u[s]||1)for(l=s^s<<1^s<<2^s<<3^s<<4,l=l>>8^l&255^99,r[i]=l,n[l]=i,h=a[o=a[f=a[i]]],y=16843009*h^65537*o^257*f^16843008*i,h=257*a[l]^16843008*l,o=0;4>o;o++)t[o][i]=h=h<<24^h>>>8,e[o][l]=y=y<<24^y>>>8;for(o=0;5>o;o++)t[o]=t[o].slice(0),e[o]=e[o].slice(0)}};function rt(t,e,r){if(e.length!==4)throw new c.exception.invalid("invalid aes block size");var n=t.b[r],o=e[0]^n[0],i=e[r?3:1]^n[1],s=e[2]^n[2];e=e[r?1:3]^n[3];var a,u,f,h=n.length/4-2,l,y=4,d=[0,0,0,0];a=t.w[r],t=a[0];var g=a[1],D=a[2],R=a[3],j=a[4];for(l=0;l<h;l++)a=t[o>>>24]^g[i>>16&255]^D[s>>8&255]^R[e&255]^n[y],u=t[i>>>24]^g[s>>16&255]^D[e>>8&255]^R[o&255]^n[y+1],f=t[s>>>24]^g[e>>16&255]^D[o>>8&255]^R[i&255]^n[y+2],e=t[e>>>24]^g[o>>16&255]^D[i>>8&255]^R[s&255]^n[y+3],y+=4,o=a,i=u,s=f;for(l=0;4>l;l++)d[r?3&-l:l]=j[o>>>24]<<24^j[i>>16&255]<<16^j[s>>8&255]<<8^j[e&255]^n[y++],a=o,o=i,i=s,s=e,e=a;return d}c.bitArray={bitSlice:function(t,e,r){return t=c.bitArray.Y(t.slice(e/32),32-(e&31)).slice(1),r===void 0?t:c.bitArray.clamp(t,r-e)},extract:function(t,e,r){var n=Math.floor(-e-r&31);return((e+r-1^e)&-32?t[e/32|0]<<32-n^t[e/32+1|0]>>>n:t[e/32|0]>>>n)&(1<<r)-1},concat:function(t,e){if(t.length===0||e.length===0)return t.concat(e);var r=t[t.length-1],n=c.bitArray.getPartial(r);return n===32?t.concat(e):c.bitArray.Y(e,n,r|0,t.slice(0,t.length-1))},bitLength:function(t){var e=t.length;return e===0?0:32*(e-1)+c.bitArray.getPartial(t[e-1])},clamp:function(t,e){if(32*t.length<e)return t;t=t.slice(0,Math.ceil(e/32));var r=t.length;return e=e&31,0<r&&e&&(t[r-1]=c.bitArray.partial(e,t[r-1]&2147483648>>e-1,1)),t},partial:function(t,e,r){return t===32?e:(r?e|0:e<<32-t)+1099511627776*t},getPartial:function(t){return Math.round(t/1099511627776)||32},equal:function(t,e){if(c.bitArray.bitLength(t)!==c.bitArray.bitLength(e))return!1;var r=0,n;for(n=0;n<t.length;n++)r|=t[n]^e[n];return r===0},Y:function(t,e,r,n){var o;for(o=0,n===void 0&&(n=[]);32<=e;e-=32)n.push(r),r=0;if(e===0)return n.concat(t);for(o=0;o<t.length;o++)n.push(r|t[o]>>>e),r=t[o]<<32-e;return o=t.length?t[t.length-1]:0,t=c.bitArray.getPartial(o),n.push(c.bitArray.partial(e+t&31,32<e+t?r:n.pop(),1)),n},P:function(t,e){return[t[0]^e[0],t[1]^e[1],t[2]^e[2],t[3]^e[3]]},byteswapM:function(t){var e,r;for(e=0;e<t.length;++e)r=t[e],t[e]=r>>>24|r>>>8&65280|(r&65280)<<8|r<<24;return t}};c.codec.utf8String={fromBits:function(t){var e="",r=c.bitArray.bitLength(t),n,o;for(n=0;n<r/8;n++)!(n&3)&&(o=t[n/4]),e+=String.fromCharCode(o>>>8>>>8>>>8),o<<=8;return decodeURIComponent(escape(e))},toBits:function(t){t=unescape(encodeURIComponent(t));var e=[],r,n=0;for(r=0;r<t.length;r++)n=n<<8|t.charCodeAt(r),(r&3)===3&&(e.push(n),n=0);return r&3&&e.push(c.bitArray.partial(8*(r&3),n)),e}};c.codec.hex={fromBits:function(t){var e="",r;for(r=0;r<t.length;r++)e+=((t[r]|0)+0xf00000000000).toString(16).substr(4);return e.substr(0,c.bitArray.bitLength(t)/4)},toBits:function(t){var e,r=[],n;for(t=t.replace(/\s|0x/g,""),n=t.length,t=t+"00000000",e=0;e<t.length;e+=8)r.push(parseInt(t.substr(e,8),16)^0);return c.bitArray.clamp(r,4*n)}};c.codec.base64={S:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",fromBits:function(t,e,r){var n="",o=0,i=c.codec.base64.S,s=0,a=c.bitArray.bitLength(t);for(r&&(i=i.substr(0,62)+"-_"),r=0;6*n.length<a;)n+=i.charAt((s^t[r]>>>o)>>>26),6>o?(s=t[r]<<6-o,o+=26,r++):(s<<=6,o-=6);for(;n.length&3&&!e;)n+="=";return n},toBits:function(t,e){t=t.replace(/\s|=/g,"");var r=[],n,o=0,i=c.codec.base64.S,s=0,a;for(e&&(i=i.substr(0,62)+"-_"),n=0;n<t.length;n++){if(a=i.indexOf(t.charAt(n)),0>a)throw new c.exception.invalid("this isn't base64!");26<o?(o-=26,r.push(s^a>>>o),s=a<<32-o):(o+=6,s^=a<<32-o)}return o&56&&r.push(c.bitArray.partial(o&56,s,1)),r}};c.codec.base64url={fromBits:function(t){return c.codec.base64.fromBits(t,1,1)},toBits:function(t){return c.codec.base64.toBits(t,1)}};c.hash.sha256=function(t){this.b[0]||this.C(),t?(this.g=t.g.slice(0),this.f=t.f.slice(0),this.c=t.c):this.reset()};c.hash.sha256.hash=function(t){return new c.hash.sha256().update(t).finalize()};c.hash.sha256.prototype={blockSize:512,reset:function(){return this.g=this.o.slice(0),this.f=[],this.c=0,this},update:function(t){typeof t=="string"&&(t=c.codec.utf8String.toBits(t));var e,r=this.f=c.bitArray.concat(this.f,t);if(e=this.c,t=this.c=e+c.bitArray.bitLength(t),9007199254740991<t)throw new c.exception.invalid("Cannot hash more than 2^53 - 1 bits");if(typeof Uint32Array<"u"){var n=new Uint32Array(r),o=0;for(e=512+e-(512+e&511);e<=t;e+=512)this.l(n.subarray(16*o,16*(o+1))),o+=1;r.splice(0,16*o)}else for(e=512+e-(512+e&511);e<=t;e+=512)this.l(r.splice(0,16));return this},finalize:function(){var t,r=this.f,e=this.g,r=c.bitArray.concat(r,[c.bitArray.partial(1,1)]);for(t=r.length+2;t&15;t++)r.push(0);for(r.push(Math.floor(this.c/4294967296)),r.push(this.c|0);r.length;)this.l(r.splice(0,16));return this.reset(),e},o:[],b:[],C:function(){function t(i){return 4294967296*(i-Math.floor(i))|0}for(var e=0,r=2,n,o;64>e;r++){for(o=!0,n=2;n*n<=r;n++)if(r%n===0){o=!1;break}o&&(8>e&&(this.o[e]=t(Math.pow(r,.5))),this.b[e]=t(Math.pow(r,1/3)),e++)}},l:function(t){var e,r,n,o=this.g,i=this.b,s=o[0],a=o[1],u=o[2],f=o[3],h=o[4],l=o[5],y=o[6],d=o[7];for(e=0;64>e;e++)16>e?r=t[e]:(r=t[e+1&15],n=t[e+14&15],r=t[e&15]=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(n>>>17^n>>>19^n>>>10^n<<15^n<<13)+t[e&15]+t[e+9&15]|0),r=r+d+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(y^h&(l^y))+i[e],d=y,y=l,l=h,h=f+r|0,f=u,u=a,a=s,s=r+(a&u^f&(a^u))+(a>>>2^a>>>13^a>>>22^a<<30^a<<19^a<<10)|0;o[0]=o[0]+s|0,o[1]=o[1]+a|0,o[2]=o[2]+u|0,o[3]=o[3]+f|0,o[4]=o[4]+h|0,o[5]=o[5]+l|0,o[6]=o[6]+y|0,o[7]=o[7]+d|0}};c.hash.sha512=function(t){this.b[0]||this.C(),t?(this.g=t.g.slice(0),this.f=t.f.slice(0),this.c=t.c):this.reset()};c.hash.sha512.hash=function(t){return new c.hash.sha512().update(t).finalize()};c.hash.sha512.prototype={blockSize:1024,reset:function(){return this.g=this.o.slice(0),this.f=[],this.c=0,this},update:function(t){typeof t=="string"&&(t=c.codec.utf8String.toBits(t));var e,r=this.f=c.bitArray.concat(this.f,t);if(e=this.c,t=this.c=e+c.bitArray.bitLength(t),9007199254740991<t)throw new c.exception.invalid("Cannot hash more than 2^53 - 1 bits");if(typeof Uint32Array<"u"){var n=new Uint32Array(r),o=0;for(e=1024+e-(1024+e&1023);e<=t;e+=1024)this.l(n.subarray(32*o,32*(o+1))),o+=1;r.splice(0,32*o)}else for(e=1024+e-(1024+e&1023);e<=t;e+=1024)this.l(r.splice(0,32));return this},finalize:function(){var t,r=this.f,e=this.g,r=c.bitArray.concat(r,[c.bitArray.partial(1,1)]);for(t=r.length+4;t&31;t++)r.push(0);for(r.push(0),r.push(0),r.push(Math.floor(this.c/4294967296)),r.push(this.c|0);r.length;)this.l(r.splice(0,32));return this.reset(),e},o:[],ia:[12372232,13281083,9762859,1914609,15106769,4090911,4308331,8266105],b:[],ka:[2666018,15689165,5061423,9034684,4764984,380953,1658779,7176472,197186,7368638,14987916,16757986,8096111,1480369,13046325,6891156,15813330,5187043,9229749,11312229,2818677,10937475,4324308,1135541,6741931,11809296,16458047,15666916,11046850,698149,229999,945776,13774844,2541862,12856045,9810911,11494366,7844520,15576806,8533307,15795044,4337665,16291729,5553712,15684120,6662416,7413802,12308920,13816008,4303699,9366425,10176680,13195875,4295371,6546291,11712675,15708924,1519456,15772530,6568428,6495784,8568297,13007125,7492395,2515356,12632583,14740254,7262584,1535930,13146278,16321966,1853211,294276,13051027,13221564,1051980,4080310,6651434,14088940,4675607],C:function(){function t(s){return 4294967296*(s-Math.floor(s))|0}function e(s){return 1099511627776*(s-Math.floor(s))&255}for(var r=0,n=2,o,i;80>r;n++){for(i=!0,o=2;o*o<=n;o++)if(n%o===0){i=!1;break}i&&(8>r&&(this.o[2*r]=t(Math.pow(n,.5)),this.o[2*r+1]=e(Math.pow(n,.5))<<24|this.ia[r]),this.b[2*r]=t(Math.pow(n,1/3)),this.b[2*r+1]=e(Math.pow(n,1/3))<<24|this.ka[r],r++)}},l:function(t){var e,r,n=this.g,o=this.b,i=n[0],s=n[1],a=n[2],u=n[3],f=n[4],h=n[5],l=n[6],y=n[7],d=n[8],g=n[9],D=n[10],R=n[11],j=n[12],fe=n[13],ke=n[14],he=n[15],A;if(typeof Uint32Array<"u"){A=Array(160);for(var w=0;32>w;w++)A[w]=t[w]}else A=t;var w=i,x=s,q=a,H=u,Q=f,z=h,Ee=l,Z=y,C=d,_=g,le=D,ee=R,de=j,te=fe,Ae=ke,re=he;for(t=0;80>t;t++){if(16>t)e=A[2*t],r=A[2*t+1];else{r=A[2*(t-15)];var v=A[2*(t-15)+1];e=(v<<31|r>>>1)^(v<<24|r>>>8)^r>>>7;var k=(r<<31|v>>>1)^(r<<24|v>>>8)^(r<<25|v>>>7);r=A[2*(t-2)];var P=A[2*(t-2)+1],v=(P<<13|r>>>19)^(r<<3|P>>>29)^r>>>6,P=(r<<13|P>>>19)^(P<<3|r>>>29)^(r<<26|P>>>6),Oe=A[2*(t-7)],Le=A[2*(t-16)],ne=A[2*(t-16)+1];r=k+A[2*(t-7)+1],e=e+Oe+(r>>>0<k>>>0?1:0),r+=P,e+=v+(r>>>0<P>>>0?1:0),r+=ne,e+=Le+(r>>>0<ne>>>0?1:0)}A[2*t]=e|=0,A[2*t+1]=r|=0;var Oe=C&le^~C&de,Pe=_&ee^~_&te,P=w&q^w&Q^q&Q,mt=x&H^x&z^H&z,Le=(x<<4|w>>>28)^(w<<30|x>>>2)^(w<<25|x>>>7),ne=(w<<4|x>>>28)^(x<<30|w>>>2)^(x<<25|w>>>7),yt=o[2*t],Te=o[2*t+1],v=re+((C<<18|_>>>14)^(C<<14|_>>>18)^(_<<23|C>>>9)),k=Ae+((_<<18|C>>>14)^(_<<14|C>>>18)^(C<<23|_>>>9))+(v>>>0<re>>>0?1:0),v=v+Pe,k=k+(Oe+(v>>>0<Pe>>>0?1:0)),v=v+Te,k=k+(yt+(v>>>0<Te>>>0?1:0)),v=v+r|0,k=k+(e+(v>>>0<r>>>0?1:0));r=ne+mt,e=Le+P+(r>>>0<ne>>>0?1:0),Ae=de,re=te,de=le,te=ee,le=C,ee=_,_=Z+v|0,C=Ee+k+(_>>>0<Z>>>0?1:0)|0,Ee=Q,Z=z,Q=q,z=H,q=w,H=x,x=v+r|0,w=k+e+(x>>>0<v>>>0?1:0)|0}s=n[1]=s+x|0,n[0]=i+w+(s>>>0<x>>>0?1:0)|0,u=n[3]=u+H|0,n[2]=a+q+(u>>>0<H>>>0?1:0)|0,h=n[5]=h+z|0,n[4]=f+Q+(h>>>0<z>>>0?1:0)|0,y=n[7]=y+Z|0,n[6]=l+Ee+(y>>>0<Z>>>0?1:0)|0,g=n[9]=g+_|0,n[8]=d+C+(g>>>0<_>>>0?1:0)|0,R=n[11]=R+ee|0,n[10]=D+le+(R>>>0<ee>>>0?1:0)|0,fe=n[13]=fe+te|0,n[12]=j+de+(fe>>>0<te>>>0?1:0)|0,he=n[15]=he+re|0,n[14]=ke+Ae+(he>>>0<re>>>0?1:0)|0}};c.mode.ccm={name:"ccm",F:[],listenProgress:function(t){c.mode.ccm.F.push(t)},unListenProgress:function(t){t=c.mode.ccm.F.indexOf(t),-1<t&&c.mode.ccm.F.splice(t,1)},da:function(t){var e=c.mode.ccm.F.slice(),r;for(r=0;r<e.length;r+=1)e[r](t)},encrypt:function(t,e,r,n,o){var i,s=e.slice(0),a=c.bitArray,u=a.bitLength(r)/8,f=a.bitLength(s)/8;if(o=o||64,n=n||[],7>u)throw new c.exception.invalid("ccm: iv must be at least 7 bytes");for(i=2;4>i&&f>>>8*i;i++);return i<15-u&&(i=15-u),r=a.clamp(r,8*(15-i)),e=c.mode.ccm.U(t,e,r,n,o,i),s=c.mode.ccm.V(t,s,r,e,o,i),a.concat(s.data,s.tag)},decrypt:function(t,e,r,n,o){o=o||64,n=n||[];var i=c.bitArray,s=i.bitLength(r)/8,f=i.bitLength(e),a=i.clamp(e,f-o),u=i.bitSlice(e,f-o),f=(f-o)/8;if(7>s)throw new c.exception.invalid("ccm: iv must be at least 7 bytes");for(e=2;4>e&&f>>>8*e;e++);if(e<15-s&&(e=15-s),r=i.clamp(r,8*(15-e)),a=c.mode.ccm.V(t,a,r,u,o,e),t=c.mode.ccm.U(t,a.data,r,n,o,e),!i.equal(a.tag,t))throw new c.exception.corrupt("ccm: tag doesn't match");return a.data},ma:function(t,e,r,n,o,i){var s=[],a=c.bitArray,u=a.P;if(n=[a.partial(8,(e.length?64:0)|n-2<<2|i-1)],n=a.concat(n,r),n[3]|=o,n=t.encrypt(n),e.length)for(r=a.bitLength(e)/8,65279>=r?s=[a.partial(16,r)]:4294967295>=r&&(s=a.concat([a.partial(16,65534)],[r])),s=a.concat(s,e),e=0;e<s.length;e+=4)n=t.encrypt(u(n,s.slice(e,e+4).concat([0,0,0])));return n},U:function(t,e,r,n,o,i){var s=c.bitArray,a=s.P;if(o/=8,o%2||4>o||16<o)throw new c.exception.invalid("ccm: invalid tag length");if(4294967295<n.length||4294967295<e.length)throw new c.exception.bug("ccm: can't deal with 4GiB or more data");for(r=c.mode.ccm.ma(t,n,r,o,s.bitLength(e)/8,i),n=0;n<e.length;n+=4)r=t.encrypt(a(r,e.slice(n,n+4).concat([0,0,0])));return s.clamp(r,8*o)},V:function(t,e,r,n,o,i){var s,a=c.bitArray;s=a.P;var u=e.length,f=a.bitLength(e),h=u/50,l=h;if(r=a.concat([a.partial(8,i-1)],r).concat([0,0,0]).slice(0,4),n=a.bitSlice(s(n,t.encrypt(r)),0,o),!u)return{tag:n,data:[]};for(s=0;s<u;s+=4)s>h&&(c.mode.ccm.da(s/u),h+=l),r[3]++,o=t.encrypt(r),e[s]^=o[0],e[s+1]^=o[1],e[s+2]^=o[2],e[s+3]^=o[3];return{tag:n,data:a.clamp(e,f)}}};c.misc.hmac=function(t,e){this.W=e=e||c.hash.sha256;var r=[[],[]],n,o=e.prototype.blockSize/32;for(this.B=[new e,new e],t.length>o&&(t=e.hash(t)),n=0;n<o;n++)r[0][n]=t[n]^909522486,r[1][n]=t[n]^1549556828;this.B[0].update(r[0]),this.B[1].update(r[1]),this.O=new e(this.B[0])};c.misc.hmac.prototype.encrypt=c.misc.hmac.prototype.mac=function(t){if(this.Z)throw new c.exception.invalid("encrypt on already updated hmac called!");return this.update(t),this.digest(t)};c.misc.hmac.prototype.reset=function(){this.O=new this.W(this.B[0]),this.Z=!1};c.misc.hmac.prototype.update=function(t){this.Z=!0,this.O.update(t)};c.misc.hmac.prototype.digest=function(){var t=this.O.finalize(),t=new this.W(this.B[1]).update(t).finalize();return this.reset(),t};c.misc.pbkdf2=function(t,e,r,n,o){if(r=r||1e4,0>n||0>r)throw new c.exception.invalid("invalid params to pbkdf2");typeof t=="string"&&(t=c.codec.utf8String.toBits(t)),typeof e=="string"&&(e=c.codec.utf8String.toBits(e)),o=o||c.misc.hmac,t=new o(t);var i,s,a,u,f=[],h=c.bitArray;for(u=1;32*f.length<(n||1);u++){for(o=i=t.encrypt(h.concat(e,[u])),s=1;s<r;s++)for(i=t.encrypt(i),a=0;a<i.length;a++)o[a]^=i[a];f=f.concat(o)}return n&&(f=h.clamp(f,n)),f};c.prng=function(t){this.h=[new c.hash.sha256],this.s=[0],this.N=0,this.G={},this.M=0,this.T={},this.X=this.i=this.u=this.fa=0,this.b=[0,0,0,0,0,0,0,0],this.m=[0,0,0,0],this.K=void 0,this.L=t,this.D=!1,this.J={progress:{},seeded:{}},this.A=this.ea=0,this.H=1,this.I=2,this.aa=65536,this.R=[0,48,64,96,128,192,256,384,512,768,1024],this.ba=3e4,this.$=80};c.prng.prototype={randomWords:function(t,e){var r=[],n;n=this.isReady(e);var o;if(n===this.A)throw new c.exception.notReady("generator isn't seeded");if(n&this.I){n=!(n&this.H),o=[];var i=0,s;for(this.X=o[0]=new Date().valueOf()+this.ba,s=0;16>s;s++)o.push(4294967296*Math.random()|0);for(s=0;s<this.h.length&&(o=o.concat(this.h[s].finalize()),i+=this.s[s],this.s[s]=0,n||!(this.N&1<<s));s++);for(this.N>=1<<this.h.length&&(this.h.push(new c.hash.sha256),this.s.push(0)),this.i-=i,i>this.u&&(this.u=i),this.N++,this.b=c.hash.sha256.hash(this.b.concat(o)),this.K=new c.cipher.aes(this.b),n=0;4>n&&(this.m[n]=this.m[n]+1|0,!this.m[n]);n++);}for(n=0;n<t;n+=4)(n+1)%this.aa===0&&ot(this),o=Se(this),r.push(o[0],o[1],o[2],o[3]);return ot(this),r.slice(0,t)},setDefaultParanoia:function(t,e){if(t===0&&e!=="Setting paranoia=0 will ruin your security; use it only for testing")throw new c.exception.invalid("Setting paranoia=0 will ruin your security; use it only for testing");this.L=t},addEntropy:function(t,e,r){r=r||"user";var n,o,i=new Date().valueOf(),s=this.G[r],a=this.isReady(),u=0;switch(n=this.T[r],n===void 0&&(n=this.T[r]=this.fa++),s===void 0&&(s=this.G[r]=0),this.G[r]=(this.G[r]+1)%this.h.length,typeof t){case"number":e===void 0&&(e=1),this.h[s].update([n,this.M++,1,e,i,1,t|0]);break;case"object":if(r=Object.prototype.toString.call(t),r==="[object Uint32Array]"){for(o=[],r=0;r<t.length;r++)o.push(t[r]);t=o}else for(r!=="[object Array]"&&(u=1),r=0;r<t.length&&!u;r++)typeof t[r]!="number"&&(u=1);if(!u){if(e===void 0)for(r=e=0;r<t.length;r++)for(o=t[r];0<o;)e++,o=o>>>1;this.h[s].update([n,this.M++,2,e,i,t.length].concat(t))}break;case"string":e===void 0&&(e=t.length),this.h[s].update([n,this.M++,3,e,i,t.length]),this.h[s].update(t);break;default:u=1}if(u)throw new c.exception.bug("random: addEntropy only supports number, array of numbers or string");this.s[s]+=e,this.i+=e,a===this.A&&(this.isReady()!==this.A&&nt("seeded",Math.max(this.u,this.i)),nt("progress",this.getProgress()))},isReady:function(t){return t=this.R[t!==void 0?t:this.L],this.u&&this.u>=t?this.s[0]>this.$&&new Date().valueOf()>this.X?this.I|this.H:this.H:this.i>=t?this.I|this.A:this.A},getProgress:function(t){return t=this.R[t||this.L],this.u>=t||this.i>t?1:this.i/t},startCollectors:function(){if(!this.D){if(this.a={loadTimeCollector:ce(this,this.la),mouseCollector:ce(this,this.na),keyboardCollector:ce(this,this.ja),accelerometerCollector:ce(this,this.ca),touchCollector:ce(this,this.pa)},window.addEventListener)window.addEventListener("load",this.a.loadTimeCollector,!1),window.addEventListener("mousemove",this.a.mouseCollector,!1),window.addEventListener("keypress",this.a.keyboardCollector,!1),window.addEventListener("devicemotion",this.a.accelerometerCollector,!1),window.addEventListener("touchmove",this.a.touchCollector,!1);else if(document.attachEvent)document.attachEvent("onload",this.a.loadTimeCollector),document.attachEvent("onmousemove",this.a.mouseCollector),document.attachEvent("keypress",this.a.keyboardCollector);else throw new c.exception.bug("can't attach event");this.D=!0}},stopCollectors:function(){this.D&&(window.removeEventListener?(window.removeEventListener("load",this.a.loadTimeCollector,!1),window.removeEventListener("mousemove",this.a.mouseCollector,!1),window.removeEventListener("keypress",this.a.keyboardCollector,!1),window.removeEventListener("devicemotion",this.a.accelerometerCollector,!1),window.removeEventListener("touchmove",this.a.touchCollector,!1)):document.detachEvent&&(document.detachEvent("onload",this.a.loadTimeCollector),document.detachEvent("onmousemove",this.a.mouseCollector),document.detachEvent("keypress",this.a.keyboardCollector)),this.D=!1)},addEventListener:function(t,e){this.J[t][this.ea++]=e},removeEventListener:function(t,e){var r,n,o=this.J[t],i=[];for(n in o)o.hasOwnProperty(n)&&o[n]===e&&i.push(n);for(r=0;r<i.length;r++)n=i[r],delete o[n]},ja:function(){se(this,1)},na:function(t){var e,r;try{e=t.x||t.clientX||t.offsetX||0,r=t.y||t.clientY||t.offsetY||0}catch{r=e=0}e!=0&&r!=0&&this.addEntropy([e,r],2,"mouse"),se(this,0)},pa:function(t){t=t.touches[0]||t.changedTouches[0],this.addEntropy([t.pageX||t.clientX,t.pageY||t.clientY],1,"touch"),se(this,0)},la:function(){se(this,2)},ca:function(t){if(t=t.accelerationIncludingGravity.x||t.accelerationIncludingGravity.y||t.accelerationIncludingGravity.z,window.orientation){var e=window.orientation;typeof e=="number"&&this.addEntropy(e,1,"accelerometer")}t&&this.addEntropy(t,2,"accelerometer"),se(this,0)}};function nt(t,e){var r,n=c.random.J[t],o=[];for(r in n)n.hasOwnProperty(r)&&o.push(n[r]);for(r=0;r<o.length;r++)o[r](e)}function se(t,e){typeof window<"u"&&window.performance&&typeof window.performance.now=="function"?t.addEntropy(window.performance.now(),e,"loadtime"):t.addEntropy(new Date().valueOf(),e,"loadtime")}function ot(t){t.b=Se(t).concat(Se(t)),t.K=new c.cipher.aes(t.b)}function Se(t){for(var e=0;4>e&&(t.m[e]=t.m[e]+1|0,!t.m[e]);e++);return t.K.encrypt(t.m)}function ce(t,e){return function(){e.apply(t,arguments)}}c.random=new c.prng(6);e:try{if(ve=typeof V<"u"&&V.exports){try{ge=Lt("crypto")}catch{ge=null}ve=ye=ge}if(ve&&ye.randomBytes)ae=ye.randomBytes(128),ae=new Uint32Array(new Uint8Array(ae).buffer),c.random.addEntropy(ae,1024,"crypto['randomBytes']");else if(typeof window<"u"&&typeof Uint32Array<"u"){if(ue=new Uint32Array(32),window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(ue);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(ue);else break e;c.random.addEntropy(ue,1024,"crypto['getRandomValues']")}}catch(t){typeof window<"u"&&window.console&&(console.log("There was an error collecting entropy from the browser:"),console.log(t))}var ae,ye,ue,ve,ge;c.json={defaults:{v:1,iter:1e4,ks:128,ts:64,mode:"ccm",adata:"",cipher:"aes"},ha:function(t,e,r,n){r=r||{},n=n||{};var o=c.json,i=o.j({iv:c.random.randomWords(4,0)},o.defaults),s;if(o.j(i,r),r=i.adata,typeof i.salt=="string"&&(i.salt=c.codec.base64.toBits(i.salt)),typeof i.iv=="string"&&(i.iv=c.codec.base64.toBits(i.iv)),!c.mode[i.mode]||!c.cipher[i.cipher]||typeof t=="string"&&100>=i.iter||i.ts!==64&&i.ts!==96&&i.ts!==128||i.ks!==128&&i.ks!==192&&i.ks!==256||2>i.iv.length||4<i.iv.length)throw new c.exception.invalid("json encrypt: invalid parameters");return typeof t=="string"?(s=c.misc.cachedPbkdf2(t,i),t=s.key.slice(0,i.ks/32),i.salt=s.salt):c.ecc&&t instanceof c.ecc.elGamal.publicKey&&(s=t.kem(),i.kemtag=s.tag,t=s.key.slice(0,i.ks/32)),typeof e=="string"&&(e=c.codec.utf8String.toBits(e)),typeof r=="string"&&(i.adata=r=c.codec.utf8String.toBits(r)),s=new c.cipher[i.cipher](t),o.j(n,i),n.key=t,i.ct=i.mode==="ccm"&&c.arrayBuffer&&c.arrayBuffer.ccm&&e instanceof ArrayBuffer?c.arrayBuffer.ccm.encrypt(s,e,i.iv,r,i.ts):c.mode[i.mode].encrypt(s,e,i.iv,r,i.ts),i},encrypt:function(t,e,r,n){var o=c.json,i=o.ha.apply(o,arguments);return o.encode(i)},ga:function(t,e,r,n){r=r||{},n=n||{};var o=c.json;e=o.j(o.j(o.j({},o.defaults),e),r,!0);var i,s;if(i=e.adata,typeof e.salt=="string"&&(e.salt=c.codec.base64.toBits(e.salt)),typeof e.iv=="string"&&(e.iv=c.codec.base64.toBits(e.iv)),!c.mode[e.mode]||!c.cipher[e.cipher]||typeof t=="string"&&100>=e.iter||e.ts!==64&&e.ts!==96&&e.ts!==128||e.ks!==128&&e.ks!==192&&e.ks!==256||!e.iv||2>e.iv.length||4<e.iv.length)throw new c.exception.invalid("json decrypt: invalid parameters");return typeof t=="string"?(s=c.misc.cachedPbkdf2(t,e),t=s.key.slice(0,e.ks/32),e.salt=s.salt):c.ecc&&t instanceof c.ecc.elGamal.secretKey&&(t=t.unkem(c.codec.base64.toBits(e.kemtag)).slice(0,e.ks/32)),typeof i=="string"&&(i=c.codec.utf8String.toBits(i)),s=new c.cipher[e.cipher](t),i=e.mode==="ccm"&&c.arrayBuffer&&c.arrayBuffer.ccm&&e.ct instanceof ArrayBuffer?c.arrayBuffer.ccm.decrypt(s,e.ct,e.iv,e.tag,i,e.ts):c.mode[e.mode].decrypt(s,e.ct,e.iv,i,e.ts),o.j(n,e),n.key=t,r.raw===1?i:c.codec.utf8String.fromBits(i)},decrypt:function(t,e,r,n){var o=c.json;return o.ga(t,o.decode(e),r,n)},encode:function(t){var e,r="{",n="";for(e in t)if(t.hasOwnProperty(e)){if(!e.match(/^[a-z0-9]+$/i))throw new c.exception.invalid("json encode: invalid property name");switch(r+=n+'"'+e+'":',n=",",typeof t[e]){case"number":case"boolean":r+=t[e];break;case"string":r+='"'+escape(t[e])+'"';break;case"object":r+='"'+c.codec.base64.fromBits(t[e],0)+'"';break;default:throw new c.exception.bug("json encode: unsupported type")}}return r+"}"},decode:function(t){if(t=t.replace(/\s/g,""),!t.match(/^\{.*\}$/))throw new c.exception.invalid("json decode: this isn't json!");t=t.replace(/^\{|\}$/g,"").split(/,/);var e={},r,n;for(r=0;r<t.length;r++){if(!(n=t[r].match(/^\s*(?:(["']?)([a-z][a-z0-9]*)\1)\s*:\s*(?:(-?\d+)|"([a-z0-9+\/%*_.@=\-]*)"|(true|false))$/i)))throw new c.exception.invalid("json decode: this isn't json!");n[3]!=null?e[n[2]]=parseInt(n[3],10):n[4]!=null?e[n[2]]=n[2].match(/^(ct|adata|salt|iv)$/)?c.codec.base64.toBits(n[4]):unescape(n[4]):n[5]!=null&&(e[n[2]]=n[5]==="true")}return e},j:function(t,e,r){if(t===void 0&&(t={}),e===void 0)return t;for(var n in e)if(e.hasOwnProperty(n)){if(r&&t[n]!==void 0&&t[n]!==e[n])throw new c.exception.invalid("required parameter overridden");t[n]=e[n]}return t},ra:function(t,e){var r={},n;for(n in t)t.hasOwnProperty(n)&&t[n]!==e[n]&&(r[n]=t[n]);return r},qa:function(t,e){var r={},n;for(n=0;n<e.length;n++)t[e[n]]!==void 0&&(r[e[n]]=t[e[n]]);return r}};c.encrypt=c.json.encrypt;c.decrypt=c.json.decrypt;c.misc.oa={};c.misc.cachedPbkdf2=function(t,e){var r=c.misc.oa,n;return e=e||{},n=e.iter||1e3,r=r[t]=r[t]||{},n=r[n]=r[n]||{firstSalt:e.salt&&e.salt.length?e.salt.slice(0):c.random.randomWords(2,0)},r=e.salt===void 0?n.firstSalt:e.salt,n[r]=n[r]||c.misc.pbkdf2(t,r,e.iter),{key:n[r].slice(0),salt:r.slice(0)}};typeof V<"u"&&V.exports&&(V.exports=c);typeof define=="function"&&define([],function(){return c})});var _t={withStackTrace:!1},Ne=(t,e,r=_t)=>{let n=e.isOk()?{type:"Ok",value:e.value}:{type:"Err",value:e.error},o=r.withStackTrace?new Error().stack:void 0;return{data:n,message:t,stack:o}};function K(t,e,r,n){function o(i){return i instanceof r?i:new r(function(s){s(i)})}return new(r||(r=Promise))(function(i,s){function a(h){try{f(n.next(h))}catch(l){s(l)}}function u(h){try{f(n.throw(h))}catch(l){s(l)}}function f(h){h.done?i(h.value):o(h.value).then(a,u)}f((n=n.apply(t,e||[])).next())})}function Ue(t){var e=typeof Symbol=="function"&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function I(t){return this instanceof I?(this.v=t,this):new I(t)}function je(t,e,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(t,e||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(d){return function(g){return Promise.resolve(g).then(d,l)}}function a(d,g){n[d]&&(o[d]=function(D){return new Promise(function(R,j){i.push([d,D,R,j])>1||u(d,D)})},g&&(o[d]=g(o[d])))}function u(d,g){try{f(n[d](g))}catch(D){y(i[0][3],D)}}function f(d){d.value instanceof I?Promise.resolve(d.value.v).then(h,l):y(i[0][2],d)}function h(d){u("next",d)}function l(d){u("throw",d)}function y(d,g){d(g),i.shift(),i.length&&u(i[0][0],i[0][1])}}function Dt(t){var e,r;return e={},n("next"),n("throw",function(o){throw o}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(o,i){e[o]=t[o]?function(s){return(r=!r)?{value:I(t[o](s)),done:!1}:i?i(s):s}:i}}function bt(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=t[Symbol.asyncIterator],r;return e?e.call(t):(t=typeof Ue=="function"?Ue(t):t[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=t[i]&&function(s){return new Promise(function(a,u){s=t[i](s),o(a,u,s.done,s.value)})}}function o(i,s,a,u){Promise.resolve(u).then(function(f){i({value:f,done:a})},s)}}var E=class t{constructor(e){this._promise=e}static fromSafePromise(e){let r=e.then(n=>new b(n));return new t(r)}static fromPromise(e,r){let n=e.then(o=>new b(o)).catch(o=>new S(r(o)));return new t(n)}static fromThrowable(e,r){return(...n)=>new t(K(this,void 0,void 0,function*(){try{return new b(yield e(...n))}catch(o){return new S(r?r(o):o)}}))}static combine(e){return St(e)}static combineWithAllErrors(e){return Rt(e)}map(e){return new t(this._promise.then(r=>K(this,void 0,void 0,function*(){return r.isErr()?new S(r.error):new b(yield e(r.value))})))}andThrough(e){return new t(this._promise.then(r=>K(this,void 0,void 0,function*(){if(r.isErr())return new S(r.error);let n=yield e(r.value);return n.isErr()?new S(n.error):new b(r.value)})))}andTee(e){return new t(this._promise.then(r=>K(this,void 0,void 0,function*(){if(r.isErr())return new S(r.error);try{yield e(r.value)}catch{}return new b(r.value)})))}mapErr(e){return new t(this._promise.then(r=>K(this,void 0,void 0,function*(){return r.isOk()?new b(r.value):new S(yield e(r.error))})))}andThen(e){return new t(this._promise.then(r=>{if(r.isErr())return new S(r.error);let n=e(r.value);return n instanceof t?n._promise:n}))}orElse(e){return new t(this._promise.then(r=>K(this,void 0,void 0,function*(){return r.isErr()?e(r.error):new b(r.value)})))}match(e,r){return this._promise.then(n=>n.match(e,r))}unwrapOr(e){return this._promise.then(r=>r.unwrapOr(e))}safeUnwrap(){return je(this,arguments,function*(){return yield I(yield I(yield*Dt(bt(yield I(this._promise.then(r=>r.safeUnwrap()))))))})}then(e,r){return this._promise.then(e,r)}[Symbol.asyncIterator](){return je(this,arguments,function*(){let r=yield I(this._promise);return r.isErr()&&(yield yield I(O(r.error))),yield I(r.value)})}},M=t=>new E(Promise.resolve(new b(t))),O=t=>new E(Promise.resolve(new S(t))),or=E.fromPromise,ir=E.fromSafePromise,sr=E.fromThrowable,Be=t=>{let e=F([]);for(let r of t)if(r.isErr()){e=N(r.error);break}else e.map(n=>n.push(r.value));return e},St=t=>E.fromSafePromise(Promise.all(t)).andThen(Be),We=t=>{let e=F([]);for(let r of t)r.isErr()&&e.isErr()?e.error.push(r.error):r.isErr()&&e.isOk()?e=N([r.error]):r.isOk()&&e.isOk()&&e.value.push(r.value);return e},Rt=t=>E.fromSafePromise(Promise.all(t)).andThen(We),_e;(function(t){function e(o,i){return(...s)=>{try{let a=o(...s);return F(a)}catch(a){return N(i?i(a):a)}}}t.fromThrowable=e;function r(o){return Be(o)}t.combine=r;function n(o){return We(o)}t.combineWithAllErrors=n})(_e||(_e={}));var F=t=>new b(t);function N(t){return new S(t)}var b=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return F(e(this.value))}mapErr(e){return F(this.value)}andThen(e){return e(this.value)}andThrough(e){return e(this.value).map(r=>this.value)}andTee(e){try{e(this.value)}catch{}return F(this.value)}orElse(e){return F(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return E.fromSafePromise(e(this.value))}unwrapOr(e){return this.value}match(e,r){return e(this.value)}safeUnwrap(){let e=this.value;return function*(){return e}()}_unsafeUnwrap(e){return this.value}_unsafeUnwrapErr(e){throw Ne("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},S=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return N(this.error)}mapErr(e){return N(e(this.error))}andThrough(e){return N(this.error)}andTee(e){return N(this.error)}andThen(e){return N(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return O(this.error)}asyncAndThrough(e){return O(this.error)}asyncMap(e){return O(this.error)}unwrapOr(e){return e}match(e,r){return r(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield N(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw Ne("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},cr=_e.fromThrowable;var W=class extends Error{constructor(r,n={}){let{cause:o,context:i}=n;super(r,{cause:o});T(this,"context");this.name=this.constructor.name,this.context=i}};var U=class extends W{};var oe=class extends U{constructor(){super(...arguments);T(this,"message","An error occured while trying to connect to WebSocket")}};var J=t=>{if(t instanceof Error)return t;let e="[Unable to stringify the thrown value]";try{e=JSON.stringify(t)}catch{}return new Error(e)};var Ze=Me(qe());var m=new Ze.default,G=(t,e)=>(Object.assign(t,e),typeof WorkerGlobalScope<"u"&&self.postMessage({event:"FILE_UPDATED",lufiFile:t}),t);var et=()=>{m.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),m.once("OPERATION_FAILED",t=>{self.postMessage({event:"OPERATION_FAILED",error:t})})};var $=class{constructor(e,r){if(!e||e.length!=64)throw Error("Charset must contain 64 characters");this._charset=e,this._noPadding=!!r,this._valid=new RegExp("^["+this._charset.replace("-","\\-")+"]+={0,2}$")}Encode(e){let r=e.byteLength;if(!r)return"";let n=new Uint8Array(e),o="";for(let i=0;i<r;i+=3)o+=this._charset[n[i]>>2]+this._charset[(n[i]&3)<<4|n[i+1]>>4]+this._charset[(n[i+1]&15)<<2|n[i+2]>>6]+this._charset[n[i+2]&63];return r%3==2?(o=o.substring(0,o.length-1),this._noPadding||(o+="=")):r%3==1&&(o=o.substring(0,o.length-2),this._noPadding||(o+="==")),o}Decode(e){if(e=(e||"").replace(/[\s]/g,""),!e)return new ArrayBuffer(0);if(!this._valid.test(e))throw Error("Invalid base64 input sequence");let r=Math.floor(e.length*.75);e[e.length-2]=="="?r-=2:e[e.length-1]=="="&&r--;let n=new Uint8Array(r),o,i,s,a,u=0,f=0;for(;u<e.length*.75;)o=this._charset.indexOf(e.charAt(f++)),i=this._charset.indexOf(e.charAt(f++)),s=this._charset.indexOf(e.charAt(f++)),a=this._charset.indexOf(e.charAt(f++)),n[u++]=o<<2|i>>4,n[u++]=(i&15)<<4|s>>2,n[u++]=(s&3)<<6|a;return n.buffer}};var jt=new $("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");function ie(t){return jt.Decode(t)}var Nt=new $("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function be(t){return Nt.Decode(t)}var ct=Me(it());var B=class extends W{};var Y=class extends B{constructor(){super(...arguments);T(this,"message","Unable to decrypt the provided data")}};var at=(t,e)=>{try{let r=typeof e=="string"?e:e.data;return M(ie(ct.default.decrypt(t,r)))}catch(r){return O(new Y(void 0,{cause:J(r)}))}};var ut=(t,e)=>Ht(t).andThen(r=>E.fromPromise(crypto.subtle.decrypt({name:"AES-GCM",iv:e.iv},r,e.data),n=>new Y(void 0,{cause:J(n)})));var Ht=t=>E.fromPromise(crypto.subtle.importKey("raw",be(t),{name:"AES-GCM"},!1,["encrypt","decrypt"]),e=>new B("Unable to import cryptography key",{cause:J(e)}));var ft=(t,e)=>e.algo===void 0||e.algo===0?at(t,e):ut(t,e);var L={},ht=5,Xt=t=>(m.emit("UPLOAD_CANCELLED",t.success),M(void 0)),Gt=(t,e)=>{let r=t.split("XXMOJOXX"),n=r.shift();if(n!==void 0){let o=JSON.parse(n);if(tr(o)){let i=r.shift();if(i){let s=JSON.parse(i);return s.iv&&(s.iv=new Uint8Array(Object.values(s.iv)),s.data=ie(s.data)),ft(e.keys.client,s).andThen(a=>{let u=typeof a=="string"?new TextEncoder().encode(a).buffer:a;return o.part===0?(G(e,{chunksReady:e.chunksReady+1,delAtFirstView:o.del_at_first_view,delay:o.delay,name:o.name,size:o.size,totalChunks:o.total,type:o.type,zipped:o.zipped}),m.emit("DOWNLOAD_STARTED")):G(e,{chunksReady:e.chunksReady+1}),m.emit("CHUNK_DOWNLOADED",u,o.part),e.chunksReady===o.total?qt(e).andThen(()=>(m.emit("DOWNLOAD_COMPLETE"),m.emit("SOCKET_OPERATION_TERMINATED"),M(void 0))):M(void 0)})}else{let s=new U("Cannot retrieve metadata from data received by the server");return m.emit("OPERATION_FAILED",s),O(s)}}else{let i=new U(o.msg);return m.emit("OPERATION_FAILED",i),O(i)}}else{let o=new U("Cannot retrieve metadata from data received by the server");return m.emit("OPERATION_FAILED",o),O(o)}},$t=(t,e)=>{if(t.success)return t.j===0&&(G(e,{keys:{client:e.keys.client,server:t.short},actionToken:t.token,queueIndex:t.i}),m.emit("UPLOAD_STARTED")),G(e,{chunksReady:e.chunksReady+1,createdAt:t.created_at}),m.emit("CHUNK_UPLOADED"),e.chunksReady===e.totalChunks&&(G(e,{uploadStatus:1}),m.emit("UPLOAD_COMPLETE"),m.emit("SOCKET_OPERATION_TERMINATED")),M(void 0);{let r=new U(t.msg);return m.emit("OPERATION_FAILED",r),O(r)}},Vt=(t,e)=>{let r=er(t.data),n;if(r)if(!r.action&&r.msg){let o=new U(r.msg);return m.emit("OPERATION_FAILED",o),O(o)}else"delay"in r?n=$t(r,e):n=Xt(r);else n=Gt(t.data,e);return n},Yt=t=>L!==void 0&&L[t]!==void 0&&L[t].readyState===WebSocket.CONNECTING,Re=t=>L!==void 0&&L[t]!==void 0&&L[t].readyState===WebSocket.OPEN;var lt=(t,e)=>{let r;return t.password?r={part:e,file_pwd:t.password}:r={part:e},Ce(we(t),t,JSON.stringify(r))},qt=t=>{let e;return t.password?e={ended:!0,file_pwd:t.password}:e={ended:!0},Ce(we(t),t,JSON.stringify(e))};var Ce=(t,e,r)=>Re(t)?(L[t].send(r),M(void 0)):dt(t).andThen(()=>(L[t].onmessage=n=>Vt(n,e),Ce(t,e,r))),dt=(t,e=0)=>(!Re(t)&&!Yt(t)&&(L[t]=new WebSocket(t),m.once("SOCKET_OPERATION_TERMINATED",()=>{L[t].close()}),m.once("OPERATION_FAILED",()=>{m.emit("SOCKET_OPERATION_TERMINATED")}),L[t].onopen=()=>{m.emit("SOCKET_OPENED")},L[t].onclose=()=>{},L[t].onerror=()=>++e<=ht?(console.error(`An error happened while trying to connect to WebSocket ${t}. Trying again. ${e} / ${ht}`),dt(t,e)):(m.emit("SOCKET_ONERROR"),O(new oe(`Unable to connect to WebSocket ${t}.`)))),Qt(t).andThen(()=>M(t)).orElse(r=>O(r))),Qt=t=>E.fromPromise(new Promise((e,r)=>{Re(t)?e(void 0):(m.once("SOCKET_OPENED",()=>{e(void 0)}),m.on("SOCKET_ONERROR",()=>{r(new oe)}))}),e=>J(e));var Zt=(t,e)=>{let r=new URL(t);return["ws:","wss:"].includes(r.protocol)||(r.protocol=r.protocol==="http:"?"ws:":"wss:"),r.pathname+=e,new URL(r.origin+r.pathname)},we=t=>Zt(new URL(t.serverUrl),"download"+`/${t.keys.server}`).toString();var er=t=>{try{let e=JSON.parse(t);if(e&&typeof e=="object")return e}catch{}return!1},tr=t=>typeof t=="object"&&t!==null&&!("msg"in t);var pt=!1;self.onmessage=t=>{pt||(et(),pt=!0),m.on("DOWNLOAD_STARTED",()=>{L[we(t.data.args.lufiFile)].close(),self.postMessage({event:"INFOS_RETRIEVED"})}),rr(t.data).mapErr(e=>{self.postMessage({event:"OPERATION_FAILED",error:e})})};var rr=t=>lt(t.args.lufiFile,0);
|
|
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50c0AzLjMuMC9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbHVmaS1zamNsQDEuMC44L25vZGVfbW9kdWxlcy9sdWZpLXNqY2wvc2pjbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbmV2ZXJ0aHJvd0A4LjEuMS9ub2RlX21vZHVsZXMvbmV2ZXJ0aHJvdy9kaXN0L2luZGV4LmVzLmpzIiwgIi4uLy4uL3NyYy9lcnJvci9iYXNlLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWNvbm5lY3Rpb24tZXJyb3IudHMiLCAiLi4vLi4vc3JjL3V0aWxzLnRzIiwgIi4uLy4uL3NyYy93b3JrZXIvc2hhcmVkLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9hcnJheWJ1ZmZlci1lbmNvZGluZ0AxLjEuMC9ub2RlX21vZHVsZXMvYXJyYXlidWZmZXItZW5jb2Rpbmcvc3JjL2Jhc2U2NC9lbmNvZGluZy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vYXJyYXlidWZmZXItZW5jb2RpbmdAMS4xLjAvbm9kZV9tb2R1bGVzL2FycmF5YnVmZmVyLWVuY29kaW5nL3NyYy9iYXNlNjQvc3RhbmRhcmQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2FycmF5YnVmZmVyLWVuY29kaW5nQDEuMS4wL25vZGVfbW9kdWxlcy9hcnJheWJ1ZmZlci1lbmNvZGluZy9zcmMvYmFzZTY0L3VybC50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by9zamNsLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by93ZWIudHMiLCAiLi4vLi4vc3JjL2FwaS9jcnlwdG8udHMiLCAiLi4vLi4vc3JjL2FwaS93ZWJzb2NrZXQudHMiLCAiLi4vLi4vc3JjL3dvcmtlci9pbmZvcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFIgPSB0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgPyBSZWZsZWN0IDogbnVsbFxudmFyIFJlZmxlY3RBcHBseSA9IFIgJiYgdHlwZW9mIFIuYXBwbHkgPT09ICdmdW5jdGlvbidcbiAgPyBSLmFwcGx5XG4gIDogZnVuY3Rpb24gUmVmbGVjdEFwcGx5KHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwodGFyZ2V0LCByZWNlaXZlciwgYXJncyk7XG4gIH1cblxudmFyIFJlZmxlY3RPd25LZXlzXG5pZiAoUiAmJiB0eXBlb2YgUi5vd25LZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gUi5vd25LZXlzXG59IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KVxuICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkpO1xuICB9O1xufSBlbHNlIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUHJvY2Vzc0VtaXRXYXJuaW5nKHdhcm5pbmcpIHtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS53YXJuKSBjb25zb2xlLndhcm4od2FybmluZyk7XG59XG5cbnZhciBOdW1iZXJJc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiBOdW1iZXJJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIEV2ZW50RW1pdHRlci5pbml0LmNhbGwodGhpcyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbm1vZHVsZS5leHBvcnRzLm9uY2UgPSBvbmNlO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gb25jZShlbWl0dGVyLCBuYW1lKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZXJyb3JMaXN0ZW5lcihlcnIpIHtcbiAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIobmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICBpZiAodHlwZW9mIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBlcnJvckxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIHJlc29sdmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgaWYgKG5hbWUgIT09ICdlcnJvcicpIHtcbiAgICAgIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGVycm9yTGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBoYW5kbGVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgJ2Vycm9yJywgaGFuZGxlciwgZmxhZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCBsaXN0ZW5lciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgIGVtaXR0ZXIub25jZShuYW1lLCBsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXR0ZXIub24obmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gRXZlbnRUYXJnZXQgZG9lcyBub3QgaGF2ZSBgZXJyb3JgIGV2ZW50IHNlbWFudGljcyBsaWtlIE5vZGVcbiAgICAvLyBFdmVudEVtaXR0ZXJzLCB3ZSBkbyBub3QgbGlzdGVuIGZvciBgZXJyb3JgIGV2ZW50cyBoZXJlLlxuICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jdGlvbiB3cmFwTGlzdGVuZXIoYXJnKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGJ1aWx0aW4gYHsgb25jZTogdHJ1ZSB9YCBzdXBwb3J0IHNvIHdlXG4gICAgICAvLyBoYXZlIHRvIGRvIGl0IG1hbnVhbGx5LlxuICAgICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIHdyYXBMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICBsaXN0ZW5lcihhcmcpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImVtaXR0ZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgZW1pdHRlcik7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjt2YXIgc2pjbD17Y2lwaGVyOnt9LGhhc2g6e30sa2V5ZXhjaGFuZ2U6e30sbW9kZTp7fSxtaXNjOnt9LGNvZGVjOnt9LGV4Y2VwdGlvbjp7Y29ycnVwdDpmdW5jdGlvbihhKXt0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJDT1JSVVBUOiBcIit0aGlzLm1lc3NhZ2V9O3RoaXMubWVzc2FnZT1hfSxpbnZhbGlkOmZ1bmN0aW9uKGEpe3RoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIklOVkFMSUQ6IFwiK3RoaXMubWVzc2FnZX07dGhpcy5tZXNzYWdlPWF9LGJ1ZzpmdW5jdGlvbihhKXt0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJCVUc6IFwiK3RoaXMubWVzc2FnZX07dGhpcy5tZXNzYWdlPWF9LG5vdFJlYWR5OmZ1bmN0aW9uKGEpe3RoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIk5PVCBSRUFEWTogXCIrdGhpcy5tZXNzYWdlfTt0aGlzLm1lc3NhZ2U9YX19fTtcbnNqY2wuY2lwaGVyLmFlcz1mdW5jdGlvbihhKXt0aGlzLndbMF1bMF1bMF18fHRoaXMuQygpO3ZhciBiLGMsZCxlLGY9dGhpcy53WzBdWzRdLGc9dGhpcy53WzFdO2I9YS5sZW5ndGg7dmFyIGg9MTtpZig0IT09YiYmNiE9PWImJjghPT1iKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiaW52YWxpZCBhZXMga2V5IHNpemVcIik7dGhpcy5iPVtkPWEuc2xpY2UoMCksZT1bXV07Zm9yKGE9YjthPDQqYisyODthKyspe2M9ZFthLTFdO2lmKDA9PT1hJWJ8fDg9PT1iJiY0PT09YSViKWM9ZltjPj4+MjRdPDwyNF5mW2M+PjE2JjI1NV08PDE2XmZbYz4+OCYyNTVdPDw4XmZbYyYyNTVdLDA9PT1hJWImJihjPWM8PDheYz4+PjI0Xmg8PDI0LGg9aDw8MV4yODMqKGg+PjcpKTtkW2FdPWRbYS1iXV5jfWZvcihiPTA7YTtiKyssYS0tKWM9ZFtiJjM/YTphLTRdLGVbYl09ND49YXx8ND5iP2M6Z1swXVtmW2M+Pj4yNF1dXmdbMV1bZltjPj4xNiYyNTVdXV5nWzJdW2ZbYz4+OCYyNTVdXV5nWzNdW2ZbYyZcbjI1NV1dfTtcbnNqY2wuY2lwaGVyLmFlcy5wcm90b3R5cGU9e2VuY3J5cHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFhKHRoaXMsYSwwKX0sZGVjcnlwdDpmdW5jdGlvbihhKXtyZXR1cm4gYWEodGhpcyxhLDEpfSx3OltbW10sW10sW10sW10sW11dLFtbXSxbXSxbXSxbXSxbXV1dLEM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLndbMF0sYj10aGlzLndbMV0sYz1hWzRdLGQ9Yls0XSxlLGYsZyxoPVtdLGs9W10sbixsLG0scDtmb3IoZT0wOzB4MTAwPmU7ZSsrKWtbKGhbZV09ZTw8MV4yODMqKGU+PjcpKV5lXT1lO2ZvcihmPWc9MDshY1tmXTtmXj1ufHwxLGc9a1tnXXx8MSlmb3IobT1nXmc8PDFeZzw8Ml5nPDwzXmc8PDQsbT1tPj44Xm0mMjU1Xjk5LGNbZl09bSxkW21dPWYsbD1oW2U9aFtuPWhbZl1dXSxwPTB4MTAxMDEwMSpsXjB4MTAwMDEqZV4weDEwMSpuXjB4MTAxMDEwMCpmLGw9MHgxMDEqaFttXV4weDEwMTAxMDAqbSxlPTA7ND5lO2UrKylhW2VdW2ZdPWw9bDw8MjRebD4+PjgsYltlXVttXT1wPXA8PDI0XnA+Pj44O2ZvcihlPVxuMDs1PmU7ZSsrKWFbZV09YVtlXS5zbGljZSgwKSxiW2VdPWJbZV0uc2xpY2UoMCl9fTtcbmZ1bmN0aW9uIGFhKGEsYixjKXtpZig0IT09Yi5sZW5ndGgpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJpbnZhbGlkIGFlcyBibG9jayBzaXplXCIpO3ZhciBkPWEuYltjXSxlPWJbMF1eZFswXSxmPWJbYz8zOjFdXmRbMV0sZz1iWzJdXmRbMl07Yj1iW2M/MTozXV5kWzNdO3ZhciBoLGssbixsPWQubGVuZ3RoLzQtMixtLHA9NCx6PVswLDAsMCwwXTtoPWEud1tjXTthPWhbMF07dmFyIEE9aFsxXSxDPWhbMl0sQj1oWzNdLEQ9aFs0XTtmb3IobT0wO208bDttKyspaD1hW2U+Pj4yNF1eQVtmPj4xNiYyNTVdXkNbZz4+OCYyNTVdXkJbYiYyNTVdXmRbcF0saz1hW2Y+Pj4yNF1eQVtnPj4xNiYyNTVdXkNbYj4+OCYyNTVdXkJbZSYyNTVdXmRbcCsxXSxuPWFbZz4+PjI0XV5BW2I+PjE2JjI1NV1eQ1tlPj44JjI1NV1eQltmJjI1NV1eZFtwKzJdLGI9YVtiPj4+MjRdXkFbZT4+MTYmMjU1XV5DW2Y+PjgmMjU1XV5CW2cmMjU1XV5kW3ArM10scCs9NCxlPWgsZj1rLGc9bjtmb3IobT1cbjA7ND5tO20rKyl6W2M/MyYtbTptXT1EW2U+Pj4yNF08PDI0XkRbZj4+MTYmMjU1XTw8MTZeRFtnPj44JjI1NV08PDheRFtiJjI1NV1eZFtwKytdLGg9ZSxlPWYsZj1nLGc9YixiPWg7cmV0dXJuIHp9XG5zamNsLmJpdEFycmF5PXtiaXRTbGljZTpmdW5jdGlvbihhLGIsYyl7YT1zamNsLmJpdEFycmF5LlkoYS5zbGljZShiLzMyKSwzMi0oYiYzMSkpLnNsaWNlKDEpO3JldHVybiB2b2lkIDA9PT1jP2E6c2pjbC5iaXRBcnJheS5jbGFtcChhLGMtYil9LGV4dHJhY3Q6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPU1hdGguZmxvb3IoLWItYyYzMSk7cmV0dXJuKChiK2MtMV5iKSYtMzI/YVtiLzMyfDBdPDwzMi1kXmFbYi8zMisxfDBdPj4+ZDphW2IvMzJ8MF0+Pj5kKSYoMTw8YyktMX0sY29uY2F0OmZ1bmN0aW9uKGEsYil7aWYoMD09PWEubGVuZ3RofHwwPT09Yi5sZW5ndGgpcmV0dXJuIGEuY29uY2F0KGIpO3ZhciBjPWFbYS5sZW5ndGgtMV0sZD1zamNsLmJpdEFycmF5LmdldFBhcnRpYWwoYyk7cmV0dXJuIDMyPT09ZD9hLmNvbmNhdChiKTpzamNsLmJpdEFycmF5LlkoYixkLGN8MCxhLnNsaWNlKDAsYS5sZW5ndGgtMSkpfSxiaXRMZW5ndGg6ZnVuY3Rpb24oYSl7dmFyIGI9YS5sZW5ndGg7cmV0dXJuIDA9PT1cbmI/MDozMiooYi0xKStzamNsLmJpdEFycmF5LmdldFBhcnRpYWwoYVtiLTFdKX0sY2xhbXA6ZnVuY3Rpb24oYSxiKXtpZigzMiphLmxlbmd0aDxiKXJldHVybiBhO2E9YS5zbGljZSgwLE1hdGguY2VpbChiLzMyKSk7dmFyIGM9YS5sZW5ndGg7Yj1iJjMxOzA8YyYmYiYmKGFbYy0xXT1zamNsLmJpdEFycmF5LnBhcnRpYWwoYixhW2MtMV0mMjE0NzQ4MzY0OD4+Yi0xLDEpKTtyZXR1cm4gYX0scGFydGlhbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIDMyPT09YT9iOihjP2J8MDpiPDwzMi1hKSsweDEwMDAwMDAwMDAwKmF9LGdldFBhcnRpYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgucm91bmQoYS8weDEwMDAwMDAwMDAwKXx8MzJ9LGVxdWFsOmZ1bmN0aW9uKGEsYil7aWYoc2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYSkhPT1zamNsLmJpdEFycmF5LmJpdExlbmd0aChiKSlyZXR1cm4hMTt2YXIgYz0wLGQ7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKyljfD1hW2RdXmJbZF07cmV0dXJuIDA9PT1cbmN9LFk6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU7ZT0wO2Zvcih2b2lkIDA9PT1kJiYoZD1bXSk7MzI8PWI7Yi09MzIpZC5wdXNoKGMpLGM9MDtpZigwPT09YilyZXR1cm4gZC5jb25jYXQoYSk7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKylkLnB1c2goY3xhW2VdPj4+YiksYz1hW2VdPDwzMi1iO2U9YS5sZW5ndGg/YVthLmxlbmd0aC0xXTowO2E9c2pjbC5iaXRBcnJheS5nZXRQYXJ0aWFsKGUpO2QucHVzaChzamNsLmJpdEFycmF5LnBhcnRpYWwoYithJjMxLDMyPGIrYT9jOmQucG9wKCksMSkpO3JldHVybiBkfSxQOmZ1bmN0aW9uKGEsYil7cmV0dXJuW2FbMF1eYlswXSxhWzFdXmJbMV0sYVsyXV5iWzJdLGFbM11eYlszXV19LGJ5dGVzd2FwTTpmdW5jdGlvbihhKXt2YXIgYixjO2ZvcihiPTA7YjxhLmxlbmd0aDsrK2IpYz1hW2JdLGFbYl09Yz4+PjI0fGM+Pj44JjB4ZmYwMHwoYyYweGZmMDApPDw4fGM8PDI0O3JldHVybiBhfX07XG5zamNsLmNvZGVjLnV0ZjhTdHJpbmc9e2Zyb21CaXRzOmZ1bmN0aW9uKGEpe3ZhciBiPVwiXCIsYz1zamNsLmJpdEFycmF5LmJpdExlbmd0aChhKSxkLGU7Zm9yKGQ9MDtkPGMvODtkKyspMD09PShkJjMpJiYoZT1hW2QvNF0pLGIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZT4+Pjg+Pj44Pj4+OCksZTw8PTg7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoYikpfSx0b0JpdHM6ZnVuY3Rpb24oYSl7YT11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYSkpO3ZhciBiPVtdLGMsZD0wO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspZD1kPDw4fGEuY2hhckNvZGVBdChjKSwzPT09KGMmMykmJihiLnB1c2goZCksZD0wKTtjJjMmJmIucHVzaChzamNsLmJpdEFycmF5LnBhcnRpYWwoOCooYyYzKSxkKSk7cmV0dXJuIGJ9fTtcbnNqY2wuY29kZWMuaGV4PXtmcm9tQml0czpmdW5jdGlvbihhKXt2YXIgYj1cIlwiLGM7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKyliKz0oKGFbY118MCkrMHhmMDAwMDAwMDAwMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoNCk7cmV0dXJuIGIuc3Vic3RyKDAsc2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYSkvNCl9LHRvQml0czpmdW5jdGlvbihhKXt2YXIgYixjPVtdLGQ7YT1hLnJlcGxhY2UoL1xcc3wweC9nLFwiXCIpO2Q9YS5sZW5ndGg7YT1hK1wiMDAwMDAwMDBcIjtmb3IoYj0wO2I8YS5sZW5ndGg7Yis9OCljLnB1c2gocGFyc2VJbnQoYS5zdWJzdHIoYiw4KSwxNileMCk7cmV0dXJuIHNqY2wuYml0QXJyYXkuY2xhbXAoYyw0KmQpfX07XG5zamNsLmNvZGVjLmJhc2U2ND17UzpcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIixmcm9tQml0czpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9XCJcIixlPTAsZj1zamNsLmNvZGVjLmJhc2U2NC5TLGc9MCxoPXNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpO2MmJihmPWYuc3Vic3RyKDAsNjIpK1wiLV9cIik7Zm9yKGM9MDs2KmQubGVuZ3RoPGg7KWQrPWYuY2hhckF0KChnXmFbY10+Pj5lKT4+PjI2KSw2PmU/KGc9YVtjXTw8Ni1lLGUrPTI2LGMrKyk6KGc8PD02LGUtPTYpO2Zvcig7ZC5sZW5ndGgmMyYmIWI7KWQrPVwiPVwiO3JldHVybiBkfSx0b0JpdHM6ZnVuY3Rpb24oYSxiKXthPWEucmVwbGFjZSgvXFxzfD0vZyxcIlwiKTt2YXIgYz1bXSxkLGU9MCxmPXNqY2wuY29kZWMuYmFzZTY0LlMsZz0wLGg7YiYmKGY9Zi5zdWJzdHIoMCw2MikrXCItX1wiKTtmb3IoZD0wO2Q8YS5sZW5ndGg7ZCsrKXtoPWYuaW5kZXhPZihhLmNoYXJBdChkKSk7XG5pZigwPmgpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJ0aGlzIGlzbid0IGJhc2U2NCFcIik7MjY8ZT8oZS09MjYsYy5wdXNoKGdeaD4+PmUpLGc9aDw8MzItZSk6KGUrPTYsZ149aDw8MzItZSl9ZSY1NiYmYy5wdXNoKHNqY2wuYml0QXJyYXkucGFydGlhbChlJjU2LGcsMSkpO3JldHVybiBjfX07c2pjbC5jb2RlYy5iYXNlNjR1cmw9e2Zyb21CaXRzOmZ1bmN0aW9uKGEpe3JldHVybiBzamNsLmNvZGVjLmJhc2U2NC5mcm9tQml0cyhhLDEsMSl9LHRvQml0czpmdW5jdGlvbihhKXtyZXR1cm4gc2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGEsMSl9fTtzamNsLmhhc2guc2hhMjU2PWZ1bmN0aW9uKGEpe3RoaXMuYlswXXx8dGhpcy5DKCk7YT8odGhpcy5nPWEuZy5zbGljZSgwKSx0aGlzLmY9YS5mLnNsaWNlKDApLHRoaXMuYz1hLmMpOnRoaXMucmVzZXQoKX07c2pjbC5oYXNoLnNoYTI1Ni5oYXNoPWZ1bmN0aW9uKGEpe3JldHVybihuZXcgc2pjbC5oYXNoLnNoYTI1NikudXBkYXRlKGEpLmZpbmFsaXplKCl9O1xuc2pjbC5oYXNoLnNoYTI1Ni5wcm90b3R5cGU9e2Jsb2NrU2l6ZTo1MTIscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmc9dGhpcy5vLnNsaWNlKDApO3RoaXMuZj1bXTt0aGlzLmM9MDtyZXR1cm4gdGhpc30sdXBkYXRlOmZ1bmN0aW9uKGEpe1wic3RyaW5nXCI9PT10eXBlb2YgYSYmKGE9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhhKSk7dmFyIGIsYz10aGlzLmY9c2pjbC5iaXRBcnJheS5jb25jYXQodGhpcy5mLGEpO2I9dGhpcy5jO2E9dGhpcy5jPWIrc2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYSk7aWYoMHgxZmZmZmZmZmZmZmZmZjxhKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiQ2Fubm90IGhhc2ggbW9yZSB0aGFuIDJeNTMgLSAxIGJpdHNcIik7aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBVaW50MzJBcnJheSl7dmFyIGQ9bmV3IFVpbnQzMkFycmF5KGMpLGU9MDtmb3IoYj01MTIrYi0oNTEyK2ImMHgxZmYpO2I8PWE7Yis9NTEyKXRoaXMubChkLnN1YmFycmF5KDE2KmUsXG4xNiooZSsxKSkpLGUrPTE7Yy5zcGxpY2UoMCwxNiplKX1lbHNlIGZvcihiPTUxMitiLSg1MTIrYiYweDFmZik7Yjw9YTtiKz01MTIpdGhpcy5sKGMuc3BsaWNlKDAsMTYpKTtyZXR1cm4gdGhpc30sZmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuZixjPXRoaXMuZyxiPXNqY2wuYml0QXJyYXkuY29uY2F0KGIsW3NqY2wuYml0QXJyYXkucGFydGlhbCgxLDEpXSk7Zm9yKGE9Yi5sZW5ndGgrMjthJjE1O2ErKyliLnB1c2goMCk7Yi5wdXNoKE1hdGguZmxvb3IodGhpcy5jLzB4MTAwMDAwMDAwKSk7Zm9yKGIucHVzaCh0aGlzLmN8MCk7Yi5sZW5ndGg7KXRoaXMubChiLnNwbGljZSgwLDE2KSk7dGhpcy5yZXNldCgpO3JldHVybiBjfSxvOltdLGI6W10sQzpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7cmV0dXJuIDB4MTAwMDAwMDAwKihhLU1hdGguZmxvb3IoYSkpfDB9Zm9yKHZhciBiPTAsYz0yLGQsZTs2ND5iO2MrKyl7ZT0hMDtmb3IoZD0yO2QqZDw9YztkKyspaWYoMD09PWMlZCl7ZT1cbiExO2JyZWFrfWUmJig4PmImJih0aGlzLm9bYl09YShNYXRoLnBvdyhjLC41KSkpLHRoaXMuYltiXT1hKE1hdGgucG93KGMsMS8zKSksYisrKX19LGw6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9dGhpcy5nLGY9dGhpcy5iLGc9ZVswXSxoPWVbMV0saz1lWzJdLG49ZVszXSxsPWVbNF0sbT1lWzVdLHA9ZVs2XSx6PWVbN107Zm9yKGI9MDs2ND5iO2IrKykxNj5iP2M9YVtiXTooYz1hW2IrMSYxNV0sZD1hW2IrMTQmMTVdLGM9YVtiJjE1XT0oYz4+PjdeYz4+PjE4XmM+Pj4zXmM8PDI1XmM8PDE0KSsoZD4+PjE3XmQ+Pj4xOV5kPj4+MTBeZDw8MTVeZDw8MTMpK2FbYiYxNV0rYVtiKzkmMTVdfDApLGM9Yyt6KyhsPj4+Nl5sPj4+MTFebD4+PjI1Xmw8PDI2Xmw8PDIxXmw8PDcpKyhwXmwmKG1ecCkpK2ZbYl0sej1wLHA9bSxtPWwsbD1uK2N8MCxuPWssaz1oLGg9ZyxnPWMrKGgma15uJihoXmspKSsoaD4+PjJeaD4+PjEzXmg+Pj4yMl5oPDwzMF5oPDwxOV5oPDwxMCl8MDtlWzBdPWVbMF0rZ3xcbjA7ZVsxXT1lWzFdK2h8MDtlWzJdPWVbMl0ra3wwO2VbM109ZVszXStufDA7ZVs0XT1lWzRdK2x8MDtlWzVdPWVbNV0rbXwwO2VbNl09ZVs2XStwfDA7ZVs3XT1lWzddK3p8MH19O3NqY2wuaGFzaC5zaGE1MTI9ZnVuY3Rpb24oYSl7dGhpcy5iWzBdfHx0aGlzLkMoKTthPyh0aGlzLmc9YS5nLnNsaWNlKDApLHRoaXMuZj1hLmYuc2xpY2UoMCksdGhpcy5jPWEuYyk6dGhpcy5yZXNldCgpfTtzamNsLmhhc2guc2hhNTEyLmhhc2g9ZnVuY3Rpb24oYSl7cmV0dXJuKG5ldyBzamNsLmhhc2guc2hhNTEyKS51cGRhdGUoYSkuZmluYWxpemUoKX07XG5zamNsLmhhc2guc2hhNTEyLnByb3RvdHlwZT17YmxvY2tTaXplOjEwMjQscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmc9dGhpcy5vLnNsaWNlKDApO3RoaXMuZj1bXTt0aGlzLmM9MDtyZXR1cm4gdGhpc30sdXBkYXRlOmZ1bmN0aW9uKGEpe1wic3RyaW5nXCI9PT10eXBlb2YgYSYmKGE9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhhKSk7dmFyIGIsYz10aGlzLmY9c2pjbC5iaXRBcnJheS5jb25jYXQodGhpcy5mLGEpO2I9dGhpcy5jO2E9dGhpcy5jPWIrc2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYSk7aWYoMHgxZmZmZmZmZmZmZmZmZjxhKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiQ2Fubm90IGhhc2ggbW9yZSB0aGFuIDJeNTMgLSAxIGJpdHNcIik7aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBVaW50MzJBcnJheSl7dmFyIGQ9bmV3IFVpbnQzMkFycmF5KGMpLGU9MDtmb3IoYj0xMDI0K2ItKDEwMjQrYiYxMDIzKTtiPD1hO2IrPTEwMjQpdGhpcy5sKGQuc3ViYXJyYXkoMzIqXG5lLDMyKihlKzEpKSksZSs9MTtjLnNwbGljZSgwLDMyKmUpfWVsc2UgZm9yKGI9MTAyNCtiLSgxMDI0K2ImMTAyMyk7Yjw9YTtiKz0xMDI0KXRoaXMubChjLnNwbGljZSgwLDMyKSk7cmV0dXJuIHRoaXN9LGZpbmFsaXplOmZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLmYsYz10aGlzLmcsYj1zamNsLmJpdEFycmF5LmNvbmNhdChiLFtzamNsLmJpdEFycmF5LnBhcnRpYWwoMSwxKV0pO2ZvcihhPWIubGVuZ3RoKzQ7YSYzMTthKyspYi5wdXNoKDApO2IucHVzaCgwKTtiLnB1c2goMCk7Yi5wdXNoKE1hdGguZmxvb3IodGhpcy5jLzB4MTAwMDAwMDAwKSk7Zm9yKGIucHVzaCh0aGlzLmN8MCk7Yi5sZW5ndGg7KXRoaXMubChiLnNwbGljZSgwLDMyKSk7dGhpcy5yZXNldCgpO3JldHVybiBjfSxvOltdLGlhOlsxMjM3MjIzMiwxMzI4MTA4Myw5NzYyODU5LDE5MTQ2MDksMTUxMDY3NjksNDA5MDkxMSw0MzA4MzMxLDgyNjYxMDVdLGI6W10sa2E6WzI2NjYwMTgsMTU2ODkxNjUsNTA2MTQyMyw5MDM0Njg0LFxuNDc2NDk4NCwzODA5NTMsMTY1ODc3OSw3MTc2NDcyLDE5NzE4Niw3MzY4NjM4LDE0OTg3OTE2LDE2NzU3OTg2LDgwOTYxMTEsMTQ4MDM2OSwxMzA0NjMyNSw2ODkxMTU2LDE1ODEzMzMwLDUxODcwNDMsOTIyOTc0OSwxMTMxMjIyOSwyODE4Njc3LDEwOTM3NDc1LDQzMjQzMDgsMTEzNTU0MSw2NzQxOTMxLDExODA5Mjk2LDE2NDU4MDQ3LDE1NjY2OTE2LDExMDQ2ODUwLDY5ODE0OSwyMjk5OTksOTQ1Nzc2LDEzNzc0ODQ0LDI1NDE4NjIsMTI4NTYwNDUsOTgxMDkxMSwxMTQ5NDM2Niw3ODQ0NTIwLDE1NTc2ODA2LDg1MzMzMDcsMTU3OTUwNDQsNDMzNzY2NSwxNjI5MTcyOSw1NTUzNzEyLDE1Njg0MTIwLDY2NjI0MTYsNzQxMzgwMiwxMjMwODkyMCwxMzgxNjAwOCw0MzAzNjk5LDkzNjY0MjUsMTAxNzY2ODAsMTMxOTU4NzUsNDI5NTM3MSw2NTQ2MjkxLDExNzEyNjc1LDE1NzA4OTI0LDE1MTk0NTYsMTU3NzI1MzAsNjU2ODQyOCw2NDk1Nzg0LDg1NjgyOTcsMTMwMDcxMjUsNzQ5MjM5NSwyNTE1MzU2LFxuMTI2MzI1ODMsMTQ3NDAyNTQsNzI2MjU4NCwxNTM1OTMwLDEzMTQ2Mjc4LDE2MzIxOTY2LDE4NTMyMTEsMjk0Mjc2LDEzMDUxMDI3LDEzMjIxNTY0LDEwNTE5ODAsNDA4MDMxMCw2NjUxNDM0LDE0MDg4OTQwLDQ2NzU2MDddLEM6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3JldHVybiAweDEwMDAwMDAwMCooYS1NYXRoLmZsb29yKGEpKXwwfWZ1bmN0aW9uIGIoYSl7cmV0dXJuIDB4MTAwMDAwMDAwMDAqKGEtTWF0aC5mbG9vcihhKSkmMjU1fWZvcih2YXIgYz0wLGQ9MixlLGY7ODA+YztkKyspe2Y9ITA7Zm9yKGU9MjtlKmU8PWQ7ZSsrKWlmKDA9PT1kJWUpe2Y9ITE7YnJlYWt9ZiYmKDg+YyYmKHRoaXMub1syKmNdPWEoTWF0aC5wb3coZCwuNSkpLHRoaXMub1syKmMrMV09YihNYXRoLnBvdyhkLC41KSk8PDI0fHRoaXMuaWFbY10pLHRoaXMuYlsyKmNdPWEoTWF0aC5wb3coZCwxLzMpKSx0aGlzLmJbMipjKzFdPWIoTWF0aC5wb3coZCwxLzMpKTw8MjR8dGhpcy5rYVtjXSxjKyspfX0sbDpmdW5jdGlvbihhKXt2YXIgYixcbmMsZD10aGlzLmcsZT10aGlzLmIsZj1kWzBdLGc9ZFsxXSxoPWRbMl0saz1kWzNdLG49ZFs0XSxsPWRbNV0sbT1kWzZdLHA9ZFs3XSx6PWRbOF0sQT1kWzldLEM9ZFsxMF0sQj1kWzExXSxEPWRbMTJdLFA9ZFsxM10sZWE9ZFsxNF0sUT1kWzE1XSx0O2lmKFwidW5kZWZpbmVkXCIhPT10eXBlb2YgVWludDMyQXJyYXkpe3Q9QXJyYXkoMTYwKTtmb3IodmFyIHI9MDszMj5yO3IrKyl0W3JdPWFbcl19ZWxzZSB0PWE7dmFyIHI9Zix1PWcsRz1oLEU9ayxIPW4sRj1sLFY9bSxJPXAsdz16LHY9QSxSPUMsSj1CLFM9RCxLPVAsVz1lYSxMPVE7Zm9yKGE9MDs4MD5hO2ErKyl7aWYoMTY+YSliPXRbMiphXSxjPXRbMiphKzFdO2Vsc2V7Yz10WzIqKGEtMTUpXTt2YXIgcT10WzIqKGEtMTUpKzFdO2I9KHE8PDMxfGM+Pj4xKV4ocTw8MjR8Yz4+PjgpXmM+Pj43O3ZhciB4PShjPDwzMXxxPj4+MSleKGM8PDI0fHE+Pj44KV4oYzw8MjV8cT4+PjcpO2M9dFsyKihhLTIpXTt2YXIgeT10WzIqKGEtMikrMV0sXG5xPSh5PDwxM3xjPj4+MTkpXihjPDwzfHk+Pj4yOSleYz4+PjYseT0oYzw8MTN8eT4+PjE5KV4oeTw8M3xjPj4+MjkpXihjPDwyNnx5Pj4+NiksWD10WzIqKGEtNyldLFk9dFsyKihhLTE2KV0sTT10WzIqKGEtMTYpKzFdO2M9eCt0WzIqKGEtNykrMV07Yj1iK1grKGM+Pj4wPHg+Pj4wPzE6MCk7Yys9eTtiKz1xKyhjPj4+MDx5Pj4+MD8xOjApO2MrPU07Yis9WSsoYz4+PjA8TT4+PjA/MTowKX10WzIqYV09Ynw9MDt0WzIqYSsxXT1jfD0wO3ZhciBYPXcmUl5+dyZTLGZhPXYmSl5+diZLLHk9ciZHXnImSF5HJkgsamE9dSZFXnUmRl5FJkYsWT0odTw8NHxyPj4+MjgpXihyPDwzMHx1Pj4+MileKHI8PDI1fHU+Pj43KSxNPShyPDw0fHU+Pj4yOCleKHU8PDMwfHI+Pj4yKV4odTw8MjV8cj4+PjcpLGthPWVbMiphXSxnYT1lWzIqYSsxXSxxPUwrKCh3PDwxOHx2Pj4+MTQpXih3PDwxNHx2Pj4+MTgpXih2PDwyM3x3Pj4+OSkpLHg9VysoKHY8PDE4fHc+Pj4xNCleKHY8PDE0fHc+Pj4xOCleKHc8PFxuMjN8dj4+PjkpKSsocT4+PjA8TD4+PjA/MTowKSxxPXErZmEseD14KyhYKyhxPj4+MDxmYT4+PjA/MTowKSkscT1xK2dhLHg9eCsoa2ErKHE+Pj4wPGdhPj4+MD8xOjApKSxxPXErY3wwLHg9eCsoYisocT4+PjA8Yz4+PjA/MTowKSk7Yz1NK2phO2I9WSt5KyhjPj4+MDxNPj4+MD8xOjApO1c9UztMPUs7Uz1SO0s9SjtSPXc7Sj12O3Y9SStxfDA7dz1WK3grKHY+Pj4wPEk+Pj4wPzE6MCl8MDtWPUg7ST1GO0g9RztGPUU7Rz1yO0U9dTt1PXErY3wwO3I9eCtiKyh1Pj4+MDxxPj4+MD8xOjApfDB9Zz1kWzFdPWcrdXwwO2RbMF09ZityKyhnPj4+MDx1Pj4+MD8xOjApfDA7az1kWzNdPWsrRXwwO2RbMl09aCtHKyhrPj4+MDxFPj4+MD8xOjApfDA7bD1kWzVdPWwrRnwwO2RbNF09bitIKyhsPj4+MDxGPj4+MD8xOjApfDA7cD1kWzddPXArSXwwO2RbNl09bStWKyhwPj4+MDxJPj4+MD8xOjApfDA7QT1kWzldPUErdnwwO2RbOF09eit3KyhBPj4+MDx2Pj4+MD8xOjApfDA7Qj1kWzExXT1CK0p8XG4wO2RbMTBdPUMrUisoQj4+PjA8Sj4+PjA/MTowKXwwO1A9ZFsxM109UCtLfDA7ZFsxMl09RCtTKyhQPj4+MDxLPj4+MD8xOjApfDA7UT1kWzE1XT1RK0x8MDtkWzE0XT1lYStXKyhRPj4+MDxMPj4+MD8xOjApfDB9fTtcbnNqY2wubW9kZS5jY209e25hbWU6XCJjY21cIixGOltdLGxpc3RlblByb2dyZXNzOmZ1bmN0aW9uKGEpe3NqY2wubW9kZS5jY20uRi5wdXNoKGEpfSx1bkxpc3RlblByb2dyZXNzOmZ1bmN0aW9uKGEpe2E9c2pjbC5tb2RlLmNjbS5GLmluZGV4T2YoYSk7LTE8YSYmc2pjbC5tb2RlLmNjbS5GLnNwbGljZShhLDEpfSxkYTpmdW5jdGlvbihhKXt2YXIgYj1zamNsLm1vZGUuY2NtLkYuc2xpY2UoKSxjO2ZvcihjPTA7YzxiLmxlbmd0aDtjKz0xKWJbY10oYSl9LGVuY3J5cHQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnPWIuc2xpY2UoMCksaD1zamNsLmJpdEFycmF5LGs9aC5iaXRMZW5ndGgoYykvOCxuPWguYml0TGVuZ3RoKGcpLzg7ZT1lfHw2NDtkPWR8fFtdO2lmKDc+ayl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImNjbTogaXYgbXVzdCBiZSBhdCBsZWFzdCA3IGJ5dGVzXCIpO2ZvcihmPTI7ND5mJiZuPj4+OCpmO2YrKyk7ZjwxNS1rJiYoZj0xNS1rKTtjPWguY2xhbXAoYyxcbjgqKDE1LWYpKTtiPXNqY2wubW9kZS5jY20uVShhLGIsYyxkLGUsZik7Zz1zamNsLm1vZGUuY2NtLlYoYSxnLGMsYixlLGYpO3JldHVybiBoLmNvbmNhdChnLmRhdGEsZy50YWcpfSxkZWNyeXB0OmZ1bmN0aW9uKGEsYixjLGQsZSl7ZT1lfHw2NDtkPWR8fFtdO3ZhciBmPXNqY2wuYml0QXJyYXksZz1mLmJpdExlbmd0aChjKS84LGg9Zi5iaXRMZW5ndGgoYiksaz1mLmNsYW1wKGIsaC1lKSxuPWYuYml0U2xpY2UoYixoLWUpLGg9KGgtZSkvODtpZig3PmcpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJjY206IGl2IG11c3QgYmUgYXQgbGVhc3QgNyBieXRlc1wiKTtmb3IoYj0yOzQ+YiYmaD4+PjgqYjtiKyspO2I8MTUtZyYmKGI9MTUtZyk7Yz1mLmNsYW1wKGMsOCooMTUtYikpO2s9c2pjbC5tb2RlLmNjbS5WKGEsayxjLG4sZSxiKTthPXNqY2wubW9kZS5jY20uVShhLGsuZGF0YSxjLGQsZSxiKTtpZighZi5lcXVhbChrLnRhZyxhKSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uY29ycnVwdChcImNjbTogdGFnIGRvZXNuJ3QgbWF0Y2hcIik7XG5yZXR1cm4gay5kYXRhfSxtYTpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9W10saD1zamNsLmJpdEFycmF5LGs9aC5QO2Q9W2gucGFydGlhbCg4LChiLmxlbmd0aD82NDowKXxkLTI8PDJ8Zi0xKV07ZD1oLmNvbmNhdChkLGMpO2RbM118PWU7ZD1hLmVuY3J5cHQoZCk7aWYoYi5sZW5ndGgpZm9yKGM9aC5iaXRMZW5ndGgoYikvOCw2NTI3OT49Yz9nPVtoLnBhcnRpYWwoMTYsYyldOjB4ZmZmZmZmZmY+PWMmJihnPWguY29uY2F0KFtoLnBhcnRpYWwoMTYsNjU1MzQpXSxbY10pKSxnPWguY29uY2F0KGcsYiksYj0wO2I8Zy5sZW5ndGg7Yis9NClkPWEuZW5jcnlwdChrKGQsZy5zbGljZShiLGIrNCkuY29uY2F0KFswLDAsMF0pKSk7cmV0dXJuIGR9LFU6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPXNqY2wuYml0QXJyYXksaD1nLlA7ZS89ODtpZihlJTJ8fDQ+ZXx8MTY8ZSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImNjbTogaW52YWxpZCB0YWcgbGVuZ3RoXCIpO1xuaWYoMHhmZmZmZmZmZjxkLmxlbmd0aHx8MHhmZmZmZmZmZjxiLmxlbmd0aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uYnVnKFwiY2NtOiBjYW4ndCBkZWFsIHdpdGggNEdpQiBvciBtb3JlIGRhdGFcIik7Yz1zamNsLm1vZGUuY2NtLm1hKGEsZCxjLGUsZy5iaXRMZW5ndGgoYikvOCxmKTtmb3IoZD0wO2Q8Yi5sZW5ndGg7ZCs9NCljPWEuZW5jcnlwdChoKGMsYi5zbGljZShkLGQrNCkuY29uY2F0KFswLDAsMF0pKSk7cmV0dXJuIGcuY2xhbXAoYyw4KmUpfSxWOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZyxoPXNqY2wuYml0QXJyYXk7Zz1oLlA7dmFyIGs9Yi5sZW5ndGgsbj1oLmJpdExlbmd0aChiKSxsPWsvNTAsbT1sO2M9aC5jb25jYXQoW2gucGFydGlhbCg4LGYtMSldLGMpLmNvbmNhdChbMCwwLDBdKS5zbGljZSgwLDQpO2Q9aC5iaXRTbGljZShnKGQsYS5lbmNyeXB0KGMpKSwwLGUpO2lmKCFrKXJldHVybnt0YWc6ZCxkYXRhOltdfTtmb3IoZz0wO2c8aztnKz00KWc+bCYmKHNqY2wubW9kZS5jY20uZGEoZy9cbmspLGwrPW0pLGNbM10rKyxlPWEuZW5jcnlwdChjKSxiW2ddXj1lWzBdLGJbZysxXV49ZVsxXSxiW2crMl1ePWVbMl0sYltnKzNdXj1lWzNdO3JldHVybnt0YWc6ZCxkYXRhOmguY2xhbXAoYixuKX19fTtzamNsLm1pc2MuaG1hYz1mdW5jdGlvbihhLGIpe3RoaXMuVz1iPWJ8fHNqY2wuaGFzaC5zaGEyNTY7dmFyIGM9W1tdLFtdXSxkLGU9Yi5wcm90b3R5cGUuYmxvY2tTaXplLzMyO3RoaXMuQj1bbmV3IGIsbmV3IGJdO2EubGVuZ3RoPmUmJihhPWIuaGFzaChhKSk7Zm9yKGQ9MDtkPGU7ZCsrKWNbMF1bZF09YVtkXV45MDk1MjI0ODYsY1sxXVtkXT1hW2RdXjE1NDk1NTY4Mjg7dGhpcy5CWzBdLnVwZGF0ZShjWzBdKTt0aGlzLkJbMV0udXBkYXRlKGNbMV0pO3RoaXMuTz1uZXcgYih0aGlzLkJbMF0pfTtcbnNqY2wubWlzYy5obWFjLnByb3RvdHlwZS5lbmNyeXB0PXNqY2wubWlzYy5obWFjLnByb3RvdHlwZS5tYWM9ZnVuY3Rpb24oYSl7aWYodGhpcy5aKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiZW5jcnlwdCBvbiBhbHJlYWR5IHVwZGF0ZWQgaG1hYyBjYWxsZWQhXCIpO3RoaXMudXBkYXRlKGEpO3JldHVybiB0aGlzLmRpZ2VzdChhKX07c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5PPW5ldyB0aGlzLlcodGhpcy5CWzBdKTt0aGlzLlo9ITF9O3NqY2wubWlzYy5obWFjLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oYSl7dGhpcy5aPSEwO3RoaXMuTy51cGRhdGUoYSl9O3NqY2wubWlzYy5obWFjLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLk8uZmluYWxpemUoKSxhPShuZXcgdGhpcy5XKHRoaXMuQlsxXSkpLnVwZGF0ZShhKS5maW5hbGl6ZSgpO3RoaXMucmVzZXQoKTtyZXR1cm4gYX07XG5zamNsLm1pc2MucGJrZGYyPWZ1bmN0aW9uKGEsYixjLGQsZSl7Yz1jfHwxRTQ7aWYoMD5kfHwwPmMpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJpbnZhbGlkIHBhcmFtcyB0byBwYmtkZjJcIik7XCJzdHJpbmdcIj09PXR5cGVvZiBhJiYoYT1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGEpKTtcInN0cmluZ1wiPT09dHlwZW9mIGImJihiPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYikpO2U9ZXx8c2pjbC5taXNjLmhtYWM7YT1uZXcgZShhKTt2YXIgZixnLGgsayxuPVtdLGw9c2pjbC5iaXRBcnJheTtmb3Ioaz0xOzMyKm4ubGVuZ3RoPChkfHwxKTtrKyspe2U9Zj1hLmVuY3J5cHQobC5jb25jYXQoYixba10pKTtmb3IoZz0xO2c8YztnKyspZm9yKGY9YS5lbmNyeXB0KGYpLGg9MDtoPGYubGVuZ3RoO2grKyllW2hdXj1mW2hdO249bi5jb25jYXQoZSl9ZCYmKG49bC5jbGFtcChuLGQpKTtyZXR1cm4gbn07XG5zamNsLnBybmc9ZnVuY3Rpb24oYSl7dGhpcy5oPVtuZXcgc2pjbC5oYXNoLnNoYTI1Nl07dGhpcy5zPVswXTt0aGlzLk49MDt0aGlzLkc9e307dGhpcy5NPTA7dGhpcy5UPXt9O3RoaXMuWD10aGlzLmk9dGhpcy51PXRoaXMuZmE9MDt0aGlzLmI9WzAsMCwwLDAsMCwwLDAsMF07dGhpcy5tPVswLDAsMCwwXTt0aGlzLks9dm9pZCAwO3RoaXMuTD1hO3RoaXMuRD0hMTt0aGlzLko9e3Byb2dyZXNzOnt9LHNlZWRlZDp7fX07dGhpcy5BPXRoaXMuZWE9MDt0aGlzLkg9MTt0aGlzLkk9Mjt0aGlzLmFhPTB4MTAwMDA7dGhpcy5SPVswLDQ4LDY0LDk2LDEyOCwxOTIsMHgxMDAsMzg0LDUxMiw3NjgsMTAyNF07dGhpcy5iYT0zRTQ7dGhpcy4kPTgwfTtcbnNqY2wucHJuZy5wcm90b3R5cGU9e3JhbmRvbVdvcmRzOmZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZDtkPXRoaXMuaXNSZWFkeShiKTt2YXIgZTtpZihkPT09dGhpcy5BKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5ub3RSZWFkeShcImdlbmVyYXRvciBpc24ndCBzZWVkZWRcIik7aWYoZCZ0aGlzLkkpe2Q9IShkJnRoaXMuSCk7ZT1bXTt2YXIgZj0wLGc7dGhpcy5YPWVbMF09KG5ldyBEYXRlKS52YWx1ZU9mKCkrdGhpcy5iYTtmb3IoZz0wOzE2Pmc7ZysrKWUucHVzaCgweDEwMDAwMDAwMCpNYXRoLnJhbmRvbSgpfDApO2ZvcihnPTA7Zzx0aGlzLmgubGVuZ3RoJiYoZT1lLmNvbmNhdCh0aGlzLmhbZ10uZmluYWxpemUoKSksZis9dGhpcy5zW2ddLHRoaXMuc1tnXT0wLGR8fCEodGhpcy5OJjE8PGcpKTtnKyspO3RoaXMuTj49MTw8dGhpcy5oLmxlbmd0aCYmKHRoaXMuaC5wdXNoKG5ldyBzamNsLmhhc2guc2hhMjU2KSx0aGlzLnMucHVzaCgwKSk7dGhpcy5pLT1mO2Y+dGhpcy51JiYodGhpcy51PVxuZik7dGhpcy5OKys7dGhpcy5iPXNqY2wuaGFzaC5zaGEyNTYuaGFzaCh0aGlzLmIuY29uY2F0KGUpKTt0aGlzLks9bmV3IHNqY2wuY2lwaGVyLmFlcyh0aGlzLmIpO2ZvcihkPTA7ND5kJiYodGhpcy5tW2RdPXRoaXMubVtkXSsxfDAsIXRoaXMubVtkXSk7ZCsrKTt9Zm9yKGQ9MDtkPGE7ZCs9NCkwPT09KGQrMSkldGhpcy5hYSYmYmEodGhpcyksZT1OKHRoaXMpLGMucHVzaChlWzBdLGVbMV0sZVsyXSxlWzNdKTtiYSh0aGlzKTtyZXR1cm4gYy5zbGljZSgwLGEpfSxzZXREZWZhdWx0UGFyYW5vaWE6ZnVuY3Rpb24oYSxiKXtpZigwPT09YSYmXCJTZXR0aW5nIHBhcmFub2lhPTAgd2lsbCBydWluIHlvdXIgc2VjdXJpdHk7IHVzZSBpdCBvbmx5IGZvciB0ZXN0aW5nXCIhPT1iKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiU2V0dGluZyBwYXJhbm9pYT0wIHdpbGwgcnVpbiB5b3VyIHNlY3VyaXR5OyB1c2UgaXQgb25seSBmb3IgdGVzdGluZ1wiKTt0aGlzLkw9YX0sYWRkRW50cm9weTpmdW5jdGlvbihhLFxuYixjKXtjPWN8fFwidXNlclwiO3ZhciBkLGUsZj0obmV3IERhdGUpLnZhbHVlT2YoKSxnPXRoaXMuR1tjXSxoPXRoaXMuaXNSZWFkeSgpLGs9MDtkPXRoaXMuVFtjXTt2b2lkIDA9PT1kJiYoZD10aGlzLlRbY109dGhpcy5mYSsrKTt2b2lkIDA9PT1nJiYoZz10aGlzLkdbY109MCk7dGhpcy5HW2NdPSh0aGlzLkdbY10rMSkldGhpcy5oLmxlbmd0aDtzd2l0Y2godHlwZW9mIGEpe2Nhc2UgXCJudW1iZXJcIjp2b2lkIDA9PT1iJiYoYj0xKTt0aGlzLmhbZ10udXBkYXRlKFtkLHRoaXMuTSsrLDEsYixmLDEsYXwwXSk7YnJlYWs7Y2FzZSBcIm9iamVjdFwiOmM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpO2lmKFwiW29iamVjdCBVaW50MzJBcnJheV1cIj09PWMpe2U9W107Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKyllLnB1c2goYVtjXSk7YT1lfWVsc2UgZm9yKFwiW29iamVjdCBBcnJheV1cIiE9PWMmJihrPTEpLGM9MDtjPGEubGVuZ3RoJiYhaztjKyspXCJudW1iZXJcIiE9PXR5cGVvZiBhW2NdJiZcbihrPTEpO2lmKCFrKXtpZih2b2lkIDA9PT1iKWZvcihjPWI9MDtjPGEubGVuZ3RoO2MrKylmb3IoZT1hW2NdOzA8ZTspYisrLGU9ZT4+PjE7dGhpcy5oW2ddLnVwZGF0ZShbZCx0aGlzLk0rKywyLGIsZixhLmxlbmd0aF0uY29uY2F0KGEpKX1icmVhaztjYXNlIFwic3RyaW5nXCI6dm9pZCAwPT09YiYmKGI9YS5sZW5ndGgpO3RoaXMuaFtnXS51cGRhdGUoW2QsdGhpcy5NKyssMyxiLGYsYS5sZW5ndGhdKTt0aGlzLmhbZ10udXBkYXRlKGEpO2JyZWFrO2RlZmF1bHQ6az0xfWlmKGspdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmJ1ZyhcInJhbmRvbTogYWRkRW50cm9weSBvbmx5IHN1cHBvcnRzIG51bWJlciwgYXJyYXkgb2YgbnVtYmVycyBvciBzdHJpbmdcIik7dGhpcy5zW2ddKz1iO3RoaXMuaSs9YjtoPT09dGhpcy5BJiYodGhpcy5pc1JlYWR5KCkhPT10aGlzLkEmJmNhKFwic2VlZGVkXCIsTWF0aC5tYXgodGhpcy51LHRoaXMuaSkpLGNhKFwicHJvZ3Jlc3NcIix0aGlzLmdldFByb2dyZXNzKCkpKX0sXG5pc1JlYWR5OmZ1bmN0aW9uKGEpe2E9dGhpcy5SW3ZvaWQgMCE9PWE/YTp0aGlzLkxdO3JldHVybiB0aGlzLnUmJnRoaXMudT49YT90aGlzLnNbMF0+dGhpcy4kJiYobmV3IERhdGUpLnZhbHVlT2YoKT50aGlzLlg/dGhpcy5JfHRoaXMuSDp0aGlzLkg6dGhpcy5pPj1hP3RoaXMuSXx0aGlzLkE6dGhpcy5BfSxnZXRQcm9ncmVzczpmdW5jdGlvbihhKXthPXRoaXMuUlthP2E6dGhpcy5MXTtyZXR1cm4gdGhpcy51Pj1hPzE6dGhpcy5pPmE/MTp0aGlzLmkvYX0sc3RhcnRDb2xsZWN0b3JzOmZ1bmN0aW9uKCl7aWYoIXRoaXMuRCl7dGhpcy5hPXtsb2FkVGltZUNvbGxlY3RvcjpPKHRoaXMsdGhpcy5sYSksbW91c2VDb2xsZWN0b3I6Tyh0aGlzLHRoaXMubmEpLGtleWJvYXJkQ29sbGVjdG9yOk8odGhpcyx0aGlzLmphKSxhY2NlbGVyb21ldGVyQ29sbGVjdG9yOk8odGhpcyx0aGlzLmNhKSx0b3VjaENvbGxlY3RvcjpPKHRoaXMsdGhpcy5wYSl9O2lmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLFxudGhpcy5hLmxvYWRUaW1lQ29sbGVjdG9yLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMuYS5tb3VzZUNvbGxlY3RvciwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlwcmVzc1wiLHRoaXMuYS5rZXlib2FyZENvbGxlY3RvciwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJkZXZpY2Vtb3Rpb25cIix0aGlzLmEuYWNjZWxlcm9tZXRlckNvbGxlY3RvciwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIix0aGlzLmEudG91Y2hDb2xsZWN0b3IsITEpO2Vsc2UgaWYoZG9jdW1lbnQuYXR0YWNoRXZlbnQpZG9jdW1lbnQuYXR0YWNoRXZlbnQoXCJvbmxvYWRcIix0aGlzLmEubG9hZFRpbWVDb2xsZWN0b3IpLGRvY3VtZW50LmF0dGFjaEV2ZW50KFwib25tb3VzZW1vdmVcIix0aGlzLmEubW91c2VDb2xsZWN0b3IpLGRvY3VtZW50LmF0dGFjaEV2ZW50KFwia2V5cHJlc3NcIix0aGlzLmEua2V5Ym9hcmRDb2xsZWN0b3IpO2Vsc2UgdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmJ1ZyhcImNhbid0IGF0dGFjaCBldmVudFwiKTtcbnRoaXMuRD0hMH19LHN0b3BDb2xsZWN0b3JzOmZ1bmN0aW9uKCl7dGhpcy5EJiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXI/KHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLHRoaXMuYS5sb2FkVGltZUNvbGxlY3RvciwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix0aGlzLmEubW91c2VDb2xsZWN0b3IsITEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIix0aGlzLmEua2V5Ym9hcmRDb2xsZWN0b3IsITEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZGV2aWNlbW90aW9uXCIsdGhpcy5hLmFjY2VsZXJvbWV0ZXJDb2xsZWN0b3IsITEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsdGhpcy5hLnRvdWNoQ29sbGVjdG9yLCExKSk6ZG9jdW1lbnQuZGV0YWNoRXZlbnQmJihkb2N1bWVudC5kZXRhY2hFdmVudChcIm9ubG9hZFwiLHRoaXMuYS5sb2FkVGltZUNvbGxlY3RvciksZG9jdW1lbnQuZGV0YWNoRXZlbnQoXCJvbm1vdXNlbW92ZVwiLFxudGhpcy5hLm1vdXNlQ29sbGVjdG9yKSxkb2N1bWVudC5kZXRhY2hFdmVudChcImtleXByZXNzXCIsdGhpcy5hLmtleWJvYXJkQ29sbGVjdG9yKSksdGhpcy5EPSExKX0sYWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe3RoaXMuSlthXVt0aGlzLmVhKytdPWJ9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9dGhpcy5KW2FdLGY9W107Zm9yKGQgaW4gZSllLmhhc093blByb3BlcnR5KGQpJiZlW2RdPT09YiYmZi5wdXNoKGQpO2ZvcihjPTA7YzxmLmxlbmd0aDtjKyspZD1mW2NdLGRlbGV0ZSBlW2RdfSxqYTpmdW5jdGlvbigpe1QodGhpcywxKX0sbmE6ZnVuY3Rpb24oYSl7dmFyIGIsYzt0cnl7Yj1hLnh8fGEuY2xpZW50WHx8YS5vZmZzZXRYfHwwLGM9YS55fHxhLmNsaWVudFl8fGEub2Zmc2V0WXx8MH1jYXRjaChkKXtjPWI9MH0wIT1iJiYwIT1jJiZ0aGlzLmFkZEVudHJvcHkoW2IsY10sMixcIm1vdXNlXCIpO1QodGhpcywwKX0scGE6ZnVuY3Rpb24oYSl7YT1cbmEudG91Y2hlc1swXXx8YS5jaGFuZ2VkVG91Y2hlc1swXTt0aGlzLmFkZEVudHJvcHkoW2EucGFnZVh8fGEuY2xpZW50WCxhLnBhZ2VZfHxhLmNsaWVudFldLDEsXCJ0b3VjaFwiKTtUKHRoaXMsMCl9LGxhOmZ1bmN0aW9uKCl7VCh0aGlzLDIpfSxjYTpmdW5jdGlvbihhKXthPWEuYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eS54fHxhLmFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkueXx8YS5hY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5Lno7aWYod2luZG93Lm9yaWVudGF0aW9uKXt2YXIgYj13aW5kb3cub3JpZW50YXRpb247XCJudW1iZXJcIj09PXR5cGVvZiBiJiZ0aGlzLmFkZEVudHJvcHkoYiwxLFwiYWNjZWxlcm9tZXRlclwiKX1hJiZ0aGlzLmFkZEVudHJvcHkoYSwyLFwiYWNjZWxlcm9tZXRlclwiKTtUKHRoaXMsMCl9fTtcbmZ1bmN0aW9uIGNhKGEsYil7dmFyIGMsZD1zamNsLnJhbmRvbS5KW2FdLGU9W107Zm9yKGMgaW4gZClkLmhhc093blByb3BlcnR5KGMpJiZlLnB1c2goZFtjXSk7Zm9yKGM9MDtjPGUubGVuZ3RoO2MrKyllW2NdKGIpfWZ1bmN0aW9uIFQoYSxiKXtcInVuZGVmaW5lZFwiIT09dHlwZW9mIHdpbmRvdyYmd2luZG93LnBlcmZvcm1hbmNlJiZcImZ1bmN0aW9uXCI9PT10eXBlb2Ygd2luZG93LnBlcmZvcm1hbmNlLm5vdz9hLmFkZEVudHJvcHkod2luZG93LnBlcmZvcm1hbmNlLm5vdygpLGIsXCJsb2FkdGltZVwiKTphLmFkZEVudHJvcHkoKG5ldyBEYXRlKS52YWx1ZU9mKCksYixcImxvYWR0aW1lXCIpfWZ1bmN0aW9uIGJhKGEpe2EuYj1OKGEpLmNvbmNhdChOKGEpKTthLks9bmV3IHNqY2wuY2lwaGVyLmFlcyhhLmIpfWZ1bmN0aW9uIE4oYSl7Zm9yKHZhciBiPTA7ND5iJiYoYS5tW2JdPWEubVtiXSsxfDAsIWEubVtiXSk7YisrKTtyZXR1cm4gYS5LLmVuY3J5cHQoYS5tKX1cbmZ1bmN0aW9uIE8oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtiLmFwcGx5KGEsYXJndW1lbnRzKX19c2pjbC5yYW5kb209bmV3IHNqY2wucHJuZyg2KTtcbmE6dHJ5e3ZhciBVLGRhLFosaGE7aWYoaGE9XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzKXt2YXIgaWE7dHJ5e2lhPXJlcXVpcmUoXCJjcnlwdG9cIil9Y2F0Y2goYSl7aWE9bnVsbH1oYT1kYT1pYX1pZihoYSYmZGEucmFuZG9tQnl0ZXMpVT1kYS5yYW5kb21CeXRlcygxMjgpLFU9bmV3IFVpbnQzMkFycmF5KChuZXcgVWludDhBcnJheShVKSkuYnVmZmVyKSxzamNsLnJhbmRvbS5hZGRFbnRyb3B5KFUsMTAyNCxcImNyeXB0b1sncmFuZG9tQnl0ZXMnXVwiKTtlbHNlIGlmKFwidW5kZWZpbmVkXCIhPT10eXBlb2Ygd2luZG93JiZcInVuZGVmaW5lZFwiIT09dHlwZW9mIFVpbnQzMkFycmF5KXtaPW5ldyBVaW50MzJBcnJheSgzMik7aWYod2luZG93LmNyeXB0byYmd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoWik7ZWxzZSBpZih3aW5kb3cubXNDcnlwdG8mJndpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMpd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhaKTtcbmVsc2UgYnJlYWsgYTtzamNsLnJhbmRvbS5hZGRFbnRyb3B5KFosMTAyNCxcImNyeXB0b1snZ2V0UmFuZG9tVmFsdWVzJ11cIil9fWNhdGNoKGEpe1widW5kZWZpbmVkXCIhPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuY29uc29sZSYmKGNvbnNvbGUubG9nKFwiVGhlcmUgd2FzIGFuIGVycm9yIGNvbGxlY3RpbmcgZW50cm9weSBmcm9tIHRoZSBicm93c2VyOlwiKSxjb25zb2xlLmxvZyhhKSl9XG5zamNsLmpzb249e2RlZmF1bHRzOnt2OjEsaXRlcjoxRTQsa3M6MTI4LHRzOjY0LG1vZGU6XCJjY21cIixhZGF0YTpcIlwiLGNpcGhlcjpcImFlc1wifSxoYTpmdW5jdGlvbihhLGIsYyxkKXtjPWN8fHt9O2Q9ZHx8e307dmFyIGU9c2pjbC5qc29uLGY9ZS5qKHtpdjpzamNsLnJhbmRvbS5yYW5kb21Xb3Jkcyg0LDApfSxlLmRlZmF1bHRzKSxnO2UuaihmLGMpO2M9Zi5hZGF0YTtcInN0cmluZ1wiPT09dHlwZW9mIGYuc2FsdCYmKGYuc2FsdD1zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoZi5zYWx0KSk7XCJzdHJpbmdcIj09PXR5cGVvZiBmLml2JiYoZi5pdj1zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoZi5pdikpO2lmKCFzamNsLm1vZGVbZi5tb2RlXXx8IXNqY2wuY2lwaGVyW2YuY2lwaGVyXXx8XCJzdHJpbmdcIj09PXR5cGVvZiBhJiYxMDA+PWYuaXRlcnx8NjQhPT1mLnRzJiY5NiE9PWYudHMmJjEyOCE9PWYudHN8fDEyOCE9PWYua3MmJjE5MiE9PWYua3MmJjB4MTAwIT09Zi5rc3x8Mj5mLml2Lmxlbmd0aHx8XG40PGYuaXYubGVuZ3RoKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwianNvbiBlbmNyeXB0OiBpbnZhbGlkIHBhcmFtZXRlcnNcIik7XCJzdHJpbmdcIj09PXR5cGVvZiBhPyhnPXNqY2wubWlzYy5jYWNoZWRQYmtkZjIoYSxmKSxhPWcua2V5LnNsaWNlKDAsZi5rcy8zMiksZi5zYWx0PWcuc2FsdCk6c2pjbC5lY2MmJmEgaW5zdGFuY2VvZiBzamNsLmVjYy5lbEdhbWFsLnB1YmxpY0tleSYmKGc9YS5rZW0oKSxmLmtlbXRhZz1nLnRhZyxhPWcua2V5LnNsaWNlKDAsZi5rcy8zMikpO1wic3RyaW5nXCI9PT10eXBlb2YgYiYmKGI9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhiKSk7XCJzdHJpbmdcIj09PXR5cGVvZiBjJiYoZi5hZGF0YT1jPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYykpO2c9bmV3IHNqY2wuY2lwaGVyW2YuY2lwaGVyXShhKTtlLmooZCxmKTtkLmtleT1hO2YuY3Q9XCJjY21cIj09PWYubW9kZSYmc2pjbC5hcnJheUJ1ZmZlciYmc2pjbC5hcnJheUJ1ZmZlci5jY20mJlxuYiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP3NqY2wuYXJyYXlCdWZmZXIuY2NtLmVuY3J5cHQoZyxiLGYuaXYsYyxmLnRzKTpzamNsLm1vZGVbZi5tb2RlXS5lbmNyeXB0KGcsYixmLml2LGMsZi50cyk7cmV0dXJuIGZ9LGVuY3J5cHQ6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9c2pjbC5qc29uLGY9ZS5oYS5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIGUuZW5jb2RlKGYpfSxnYTpmdW5jdGlvbihhLGIsYyxkKXtjPWN8fHt9O2Q9ZHx8e307dmFyIGU9c2pjbC5qc29uO2I9ZS5qKGUuaihlLmooe30sZS5kZWZhdWx0cyksYiksYywhMCk7dmFyIGYsZztmPWIuYWRhdGE7XCJzdHJpbmdcIj09PXR5cGVvZiBiLnNhbHQmJihiLnNhbHQ9c2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGIuc2FsdCkpO1wic3RyaW5nXCI9PT10eXBlb2YgYi5pdiYmKGIuaXY9c2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGIuaXYpKTtpZighc2pjbC5tb2RlW2IubW9kZV18fCFzamNsLmNpcGhlcltiLmNpcGhlcl18fFwic3RyaW5nXCI9PT1cbnR5cGVvZiBhJiYxMDA+PWIuaXRlcnx8NjQhPT1iLnRzJiY5NiE9PWIudHMmJjEyOCE9PWIudHN8fDEyOCE9PWIua3MmJjE5MiE9PWIua3MmJjB4MTAwIT09Yi5rc3x8IWIuaXZ8fDI+Yi5pdi5sZW5ndGh8fDQ8Yi5pdi5sZW5ndGgpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGRlY3J5cHQ6IGludmFsaWQgcGFyYW1ldGVyc1wiKTtcInN0cmluZ1wiPT09dHlwZW9mIGE/KGc9c2pjbC5taXNjLmNhY2hlZFBia2RmMihhLGIpLGE9Zy5rZXkuc2xpY2UoMCxiLmtzLzMyKSxiLnNhbHQ9Zy5zYWx0KTpzamNsLmVjYyYmYSBpbnN0YW5jZW9mIHNqY2wuZWNjLmVsR2FtYWwuc2VjcmV0S2V5JiYoYT1hLnVua2VtKHNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhiLmtlbXRhZykpLnNsaWNlKDAsYi5rcy8zMikpO1wic3RyaW5nXCI9PT10eXBlb2YgZiYmKGY9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhmKSk7Zz1uZXcgc2pjbC5jaXBoZXJbYi5jaXBoZXJdKGEpO2Y9XCJjY21cIj09PVxuYi5tb2RlJiZzamNsLmFycmF5QnVmZmVyJiZzamNsLmFycmF5QnVmZmVyLmNjbSYmYi5jdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP3NqY2wuYXJyYXlCdWZmZXIuY2NtLmRlY3J5cHQoZyxiLmN0LGIuaXYsYi50YWcsZixiLnRzKTpzamNsLm1vZGVbYi5tb2RlXS5kZWNyeXB0KGcsYi5jdCxiLml2LGYsYi50cyk7ZS5qKGQsYik7ZC5rZXk9YTtyZXR1cm4gMT09PWMucmF3P2Y6c2pjbC5jb2RlYy51dGY4U3RyaW5nLmZyb21CaXRzKGYpfSxkZWNyeXB0OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXNqY2wuanNvbjtyZXR1cm4gZS5nYShhLGUuZGVjb2RlKGIpLGMsZCl9LGVuY29kZTpmdW5jdGlvbihhKXt2YXIgYixjPVwie1wiLGQ9XCJcIjtmb3IoYiBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkoYikpe2lmKCFiLm1hdGNoKC9eW2EtejAtOV0rJC9pKSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImpzb24gZW5jb2RlOiBpbnZhbGlkIHByb3BlcnR5IG5hbWVcIik7Yys9ZCsnXCInK1xuYisnXCI6JztkPVwiLFwiO3N3aXRjaCh0eXBlb2YgYVtiXSl7Y2FzZSBcIm51bWJlclwiOmNhc2UgXCJib29sZWFuXCI6Yys9YVtiXTticmVhaztjYXNlIFwic3RyaW5nXCI6Yys9J1wiJytlc2NhcGUoYVtiXSkrJ1wiJzticmVhaztjYXNlIFwib2JqZWN0XCI6Yys9J1wiJytzamNsLmNvZGVjLmJhc2U2NC5mcm9tQml0cyhhW2JdLDApKydcIic7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uYnVnKFwianNvbiBlbmNvZGU6IHVuc3VwcG9ydGVkIHR5cGVcIik7fX1yZXR1cm4gYytcIn1cIn0sZGVjb2RlOmZ1bmN0aW9uKGEpe2E9YS5yZXBsYWNlKC9cXHMvZyxcIlwiKTtpZighYS5tYXRjaCgvXlxcey4qXFx9JC8pKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwianNvbiBkZWNvZGU6IHRoaXMgaXNuJ3QganNvbiFcIik7YT1hLnJlcGxhY2UoL15cXHt8XFx9JC9nLFwiXCIpLnNwbGl0KC8sLyk7dmFyIGI9e30sYyxkO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspe2lmKCEoZD1hW2NdLm1hdGNoKC9eXFxzKig/OihbXCInXT8pKFthLXpdW2EtejAtOV0qKVxcMSlcXHMqOlxccyooPzooLT9cXGQrKXxcIihbYS16MC05K1xcLyUqXy5APVxcLV0qKVwifCh0cnVlfGZhbHNlKSkkL2kpKSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImpzb24gZGVjb2RlOiB0aGlzIGlzbid0IGpzb24hXCIpO1xubnVsbCE9ZFszXT9iW2RbMl1dPXBhcnNlSW50KGRbM10sMTApOm51bGwhPWRbNF0/YltkWzJdXT1kWzJdLm1hdGNoKC9eKGN0fGFkYXRhfHNhbHR8aXYpJC8pP3NqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhkWzRdKTp1bmVzY2FwZShkWzRdKTpudWxsIT1kWzVdJiYoYltkWzJdXT1cInRydWVcIj09PWRbNV0pfXJldHVybiBifSxqOmZ1bmN0aW9uKGEsYixjKXt2b2lkIDA9PT1hJiYoYT17fSk7aWYodm9pZCAwPT09YilyZXR1cm4gYTtmb3IodmFyIGQgaW4gYilpZihiLmhhc093blByb3BlcnR5KGQpKXtpZihjJiZ2b2lkIDAhPT1hW2RdJiZhW2RdIT09YltkXSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcInJlcXVpcmVkIHBhcmFtZXRlciBvdmVycmlkZGVuXCIpO2FbZF09YltkXX1yZXR1cm4gYX0scmE6ZnVuY3Rpb24oYSxiKXt2YXIgYz17fSxkO2ZvcihkIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShkKSYmYVtkXSE9PWJbZF0mJihjW2RdPWFbZF0pO3JldHVybiBjfSxxYTpmdW5jdGlvbihhLFxuYil7dmFyIGM9e30sZDtmb3IoZD0wO2Q8Yi5sZW5ndGg7ZCsrKXZvaWQgMCE9PWFbYltkXV0mJihjW2JbZF1dPWFbYltkXV0pO3JldHVybiBjfX07c2pjbC5lbmNyeXB0PXNqY2wuanNvbi5lbmNyeXB0O3NqY2wuZGVjcnlwdD1zamNsLmpzb24uZGVjcnlwdDtzamNsLm1pc2Mub2E9e307c2pjbC5taXNjLmNhY2hlZFBia2RmMj1mdW5jdGlvbihhLGIpe3ZhciBjPXNqY2wubWlzYy5vYSxkO2I9Ynx8e307ZD1iLml0ZXJ8fDFFMztjPWNbYV09Y1thXXx8e307ZD1jW2RdPWNbZF18fHtmaXJzdFNhbHQ6Yi5zYWx0JiZiLnNhbHQubGVuZ3RoP2Iuc2FsdC5zbGljZSgwKTpzamNsLnJhbmRvbS5yYW5kb21Xb3JkcygyLDApfTtjPXZvaWQgMD09PWIuc2FsdD9kLmZpcnN0U2FsdDpiLnNhbHQ7ZFtjXT1kW2NdfHxzamNsLm1pc2MucGJrZGYyKGEsYyxiLml0ZXIpO3JldHVybntrZXk6ZFtjXS5zbGljZSgwKSxzYWx0OmMuc2xpY2UoMCl9fTtcblwidW5kZWZpbmVkXCIhPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cyYmKG1vZHVsZS5leHBvcnRzPXNqY2wpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZShbXSxmdW5jdGlvbigpe3JldHVybiBzamNsfSk7XG4iLCAiY29uc3QgZGVmYXVsdEVycm9yQ29uZmlnID0ge1xyXG4gICAgd2l0aFN0YWNrVHJhY2U6IGZhbHNlLFxyXG59O1xyXG4vLyBDdXN0b20gZXJyb3Igb2JqZWN0XHJcbi8vIENvbnRleHQgLyBkaXNjdXNzaW9uOiBodHRwczovL2dpdGh1Yi5jb20vc3VwZXJtYWNyby9uZXZlcnRocm93L3B1bGwvMjE1XHJcbmNvbnN0IGNyZWF0ZU5ldmVyVGhyb3dFcnJvciA9IChtZXNzYWdlLCByZXN1bHQsIGNvbmZpZyA9IGRlZmF1bHRFcnJvckNvbmZpZykgPT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IHJlc3VsdC5pc09rKClcclxuICAgICAgICA/IHsgdHlwZTogJ09rJywgdmFsdWU6IHJlc3VsdC52YWx1ZSB9XHJcbiAgICAgICAgOiB7IHR5cGU6ICdFcnInLCB2YWx1ZTogcmVzdWx0LmVycm9yIH07XHJcbiAgICBjb25zdCBtYXliZVN0YWNrID0gY29uZmlnLndpdGhTdGFja1RyYWNlID8gbmV3IEVycm9yKCkuc3RhY2sgOiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICBzdGFjazogbWF5YmVTdGFjayxcclxuICAgIH07XHJcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXHJcblxyXG5cclxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxuY2xhc3MgUmVzdWx0QXN5bmMge1xyXG4gICAgY29uc3RydWN0b3IocmVzKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IHJlcztcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tU2FmZVByb21pc2UocHJvbWlzZSkge1xyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBwcm9taXNlLnRoZW4oKHZhbHVlKSA9PiBuZXcgT2sodmFsdWUpKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG5ld1Byb21pc2UpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21Qcm9taXNlKHByb21pc2UsIGVycm9yRm4pIHtcclxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gcHJvbWlzZVxyXG4gICAgICAgICAgICAudGhlbigodmFsdWUpID0+IG5ldyBPayh2YWx1ZSkpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gbmV3IEVycihlcnJvckZuKGUpKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuZXdQcm9taXNlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBzdGF0aWMgZnJvbVRocm93YWJsZShmbiwgZXJyb3JGbikge1xyXG4gICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKCgoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZm4oLi4uYXJncykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoZXJyb3JGbiA/IGVycm9yRm4oZXJyb3IpIDogZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSkoKSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjb21iaW5lKGFzeW5jUmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0QXN5bmNMaXN0KGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY29tYmluZVdpdGhBbGxFcnJvcnMoYXN5bmNSZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzKGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZihyZXMudmFsdWUpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgYW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbmV3UmVzID0geWllbGQgZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAobmV3UmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKG5ld1Jlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB5aWVsZCBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRlZSBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZSBlcnJvclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgbWFwRXJyKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNPaygpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoeWllbGQgZihyZXMuZXJyb3IpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3VmFsdWUgaW5zdGFuY2VvZiBSZXN1bHRBc3luYyA/IG5ld1ZhbHVlLl9wcm9taXNlIDogbmV3VmFsdWU7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIG9yRWxzZShmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBtYXRjaChvaywgX2Vycikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gcmVzLm1hdGNoKG9rLCBfZXJyKSk7XHJcbiAgICB9XHJcbiAgICB1bndyYXBPcih0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiByZXMudW53cmFwT3IodCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gOS4wLjAuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiB1c2UgYHNhZmVUcnlgIHdpdGhvdXQgdGhpcyBtZXRob2QuXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogc2FmZVRyeShhc3luYyBmdW5jdGlvbiogKCkge1xyXG4gICAgICogICBjb25zdCBva1ZhbHVlID0geWllbGQqIHlvdXJSZXN1bHRcclxuICAgICAqIH0pXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEVtdWxhdGVzIFJ1c3QncyBgP2Agb3BlcmF0b3IgaW4gYHNhZmVUcnlgJ3MgYm9keS4gU2VlIGFsc28gYHNhZmVUcnlgLlxyXG4gICAgICovXHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIHNhZmVVbndyYXBfMSgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkIF9fYXdhaXQoeWllbGQgX19hd2FpdCh5aWVsZCogX19hc3luY0RlbGVnYXRvcihfX2FzeW5jVmFsdWVzKHlpZWxkIF9fYXdhaXQodGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHJlcy5zYWZlVW53cmFwKCkpKSkpKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBNYWtlcyBSZXN1bHRBc3luYyBpbXBsZW1lbnQgUHJvbWlzZUxpa2U8UmVzdWx0PlxyXG4gICAgdGhlbihzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBfYSgpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgX19hd2FpdCh0aGlzLl9wcm9taXNlKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIF9fYXdhaXQoZXJyQXN5bmMocmVzdWx0LmVycm9yKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCBfX2F3YWl0KHJlc3VsdC52YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuY29uc3Qgb2tBc3luYyA9ICh2YWx1ZSkgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgT2sodmFsdWUpKSk7XHJcbmNvbnN0IGVyckFzeW5jID0gKGVycikgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgRXJyKGVycikpKTtcclxuY29uc3QgZnJvbVByb21pc2UgPSBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZTtcclxuY29uc3QgZnJvbVNhZmVQcm9taXNlID0gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlO1xyXG5jb25zdCBmcm9tQXN5bmNUaHJvd2FibGUgPSBSZXN1bHRBc3luYy5mcm9tVGhyb3dhYmxlO1xuXG4vKipcclxuICogU2hvcnQgY2lyY3VpdHMgb24gdGhlIEZJUlNUIEVyciB2YWx1ZSB0aGF0IHdlIGZpbmRcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRMaXN0ID0gKHJlc3VsdExpc3QpID0+IHtcclxuICAgIGxldCBhY2MgPSBvayhbXSk7XHJcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgIGFjYyA9IGVycihyZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFjYy5tYXAoKGxpc3QpID0+IGxpc3QucHVzaChyZXN1bHQudmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWNjO1xyXG59O1xyXG4vKiBUaGlzIGlzIHRoZSB0eXBlc2FmZSB2ZXJzaW9uIG9mIFByb21pc2UuYWxsXHJcbiAqXHJcbiAqIFRha2VzIGEgbGlzdCBvZiBSZXN1bHRBc3luYzxULCBFPiBhbmQgc3VjY2VzcyBpZiBhbGwgaW5uZXIgcmVzdWx0cyBhcmUgT2sgdmFsdWVzXHJcbiAqIG9yIGZhaWxzIGlmIG9uZSAob3IgbW9yZSkgb2YgdGhlIGlubmVyIHJlc3VsdHMgYXJlIEVyciB2YWx1ZXNcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3QgPSAoYXN5bmNSZXN1bHRMaXN0KSA9PiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoUHJvbWlzZS5hbGwoYXN5bmNSZXN1bHRMaXN0KSkuYW5kVGhlbihjb21iaW5lUmVzdWx0TGlzdCk7XHJcbi8qKlxyXG4gKiBHaXZlIGEgbGlzdCBvZiBhbGwgdGhlIGVycm9ycyB3ZSBmaW5kXHJcbiAqL1xyXG5jb25zdCBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMgPSAocmVzdWx0TGlzdCkgPT4ge1xyXG4gICAgbGV0IGFjYyA9IG9rKFtdKTtcclxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdExpc3QpIHtcclxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgYWNjLmVycm9yLnB1c2gocmVzdWx0LmVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzT2soKSkge1xyXG4gICAgICAgICAgICBhY2MgPSBlcnIoW3Jlc3VsdC5lcnJvcl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZXN1bHQuaXNPaygpICYmIGFjYy5pc09rKCkpIHtcclxuICAgICAgICAgICAgYWNjLnZhbHVlLnB1c2gocmVzdWx0LnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHJlc3VsdC5pc09rKCkgJiYgYWNjLmlzRXJyKClcclxuICAgIH1cclxuICAgIHJldHVybiBhY2M7XHJcbn07XHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzID0gKGFzeW5jUmVzdWx0TGlzdCkgPT4gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlKFByb21pc2UuYWxsKGFzeW5jUmVzdWx0TGlzdCkpLmFuZFRoZW4oY29tYmluZVJlc3VsdExpc3RXaXRoQWxsRXJyb3JzKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcclxudmFyIFJlc3VsdDtcclxuKGZ1bmN0aW9uIChSZXN1bHQpIHtcclxuICAgIC8qKlxyXG4gICAgICogV3JhcHMgYSBmdW5jdGlvbiB3aXRoIGEgdHJ5IGNhdGNoLCBjcmVhdGluZyBhIG5ldyBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lXHJcbiAgICAgKiBhcmd1bWVudHMgYnV0IHJldHVybmluZyBgT2tgIGlmIHN1Y2Nlc3NmdWwsIGBFcnJgIGlmIHRoZSBmdW5jdGlvbiB0aHJvd3NcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZm4gZnVuY3Rpb24gdG8gd3JhcCB3aXRoIG9rIG9uIHN1Y2Nlc3Mgb3IgZXJyIG9uIGZhaWx1cmVcclxuICAgICAqIEBwYXJhbSBlcnJvckZuIHdoZW4gYW4gZXJyb3IgaXMgdGhyb3duLCB0aGlzIHdpbGwgd3JhcCB0aGUgZXJyb3IgcmVzdWx0IGlmIHByb3ZpZGVkXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBmdW5jdGlvbiBmcm9tVGhyb3dhYmxlKGZuLCBlcnJvckZuKSB7XHJcbiAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmbiguLi5hcmdzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvayhyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyKGVycm9yRm4gPyBlcnJvckZuKGUpIDogZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmZyb21UaHJvd2FibGUgPSBmcm9tVGhyb3dhYmxlO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZShyZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRMaXN0KHJlc3VsdExpc3QpO1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmNvbWJpbmUgPSBjb21iaW5lO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZVdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuY29tYmluZVdpdGhBbGxFcnJvcnMgPSBjb21iaW5lV2l0aEFsbEVycm9ycztcclxufSkoUmVzdWx0IHx8IChSZXN1bHQgPSB7fSkpO1xyXG5jb25zdCBvayA9ICh2YWx1ZSkgPT4gbmV3IE9rKHZhbHVlKTtcclxuZnVuY3Rpb24gZXJyKGVycikge1xyXG4gICAgcmV0dXJuIG5ldyBFcnIoZXJyKTtcclxufVxyXG5mdW5jdGlvbiBzYWZlVHJ5KGJvZHkpIHtcclxuICAgIGNvbnN0IG4gPSBib2R5KCkubmV4dCgpO1xyXG4gICAgaWYgKG4gaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuLnRoZW4oKHIpID0+IHIudmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuLnZhbHVlO1xyXG59XHJcbmNsYXNzIE9rIHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgaXNPaygpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlzRXJyKCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5pc09rKCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBvayhmKHRoaXMudmFsdWUpKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcEVycihfZikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaGVuKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKS5tYXAoKF92YWx1ZSkgPT4gdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGYodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIFRlZSBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGVycm9yXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBvckVsc2UoX2YpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhc3luY0FuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFzeW5jQW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSkubWFwKCgpID0+IHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNNYXAoZikge1xyXG4gICAgICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoZih0aGlzLnZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICB1bndyYXBPcihfdikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWF0Y2gob2ssIF9lcnIpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS15aWVsZCAqL1xyXG4gICAgICAgIHJldHVybiAoZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKF8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXBFcnIoY29uZmlnKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yKCdDYWxsZWQgYF91bnNhZmVVbndyYXBFcnJgIG9uIGFuIE9rJywgdGhpcywgY29uZmlnKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcywgcmVxdWlyZS15aWVsZFxyXG4gICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG59XHJcbmNsYXNzIEVyciB7XHJcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgIH1cclxuICAgIGlzT2soKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaXNFcnIoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzT2soKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBtYXBFcnIoZikge1xyXG4gICAgICAgIHJldHVybiBlcnIoZih0aGlzLmVycm9yKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUaHJvdWdoKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgb3JFbHNlKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jQW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFzeW5jQW5kVGhyb3VnaChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jTWFwKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgdW53cmFwT3Iodikge1xyXG4gICAgICAgIHJldHVybiB2O1xyXG4gICAgfVxyXG4gICAgbWF0Y2goX29rLCBlcnIpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgc2FmZVVud3JhcCgpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB5aWVsZCBlcnIoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RvIG5vdCB1c2UgdGhpcyBnZW5lcmF0b3Igb3V0IG9mIGBzYWZlVHJ5YCcpO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKGNvbmZpZykge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZU5ldmVyVGhyb3dFcnJvcignQ2FsbGVkIGBfdW5zYWZlVW53cmFwYCBvbiBhbiBFcnInLCB0aGlzLCBjb25maWcpO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcEVycihfKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3I7XHJcbiAgICB9XHJcbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgeWllbGQgc2VsZjtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICByZXR1cm4gc2VsZjtcclxuICAgIH1cclxufVxyXG5jb25zdCBmcm9tVGhyb3dhYmxlID0gUmVzdWx0LmZyb21UaHJvd2FibGU7XHJcbi8vI2VuZHJlZ2lvblxuXG5leHBvcnQgeyBFcnIsIE9rLCBSZXN1bHQsIFJlc3VsdEFzeW5jLCBlcnIsIGVyckFzeW5jLCBmcm9tQXN5bmNUaHJvd2FibGUsIGZyb21Qcm9taXNlLCBmcm9tU2FmZVByb21pc2UsIGZyb21UaHJvd2FibGUsIG9rLCBva0FzeW5jLCBzYWZlVHJ5IH07XG4iLCAidHlwZSBKc29uYWJsZSA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgYm9vbGVhblxuICB8IG51bGxcbiAgfCB1bmRlZmluZWRcbiAgfCByZWFkb25seSBKc29uYWJsZVtdXG4gIHwgeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBKc29uYWJsZSB9XG4gIHwgeyB0b0pTT04oKTogSnNvbmFibGUgfTtcblxuZXhwb3J0IGNsYXNzIEJhc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRleHQ/OiBKc29uYWJsZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlPzogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgY2F1c2U/OiBFcnJvcjsgY29udGV4dD86IEpzb25hYmxlIH0gPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgeyBjYXVzZSwgY29udGV4dCB9ID0gb3B0aW9ucztcblxuICAgIHN1cGVyKG1lc3NhZ2UsIHsgY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIFdlYlNvY2tldEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHt9XG4iLCAiaW1wb3J0IHsgV2ViU29ja2V0RXJyb3IgfSBmcm9tIFwifi9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IgZXh0ZW5kcyBXZWJTb2NrZXRFcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2UgPSBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gV2ViU29ja2V0XCI7XG59XG4iLCAiaW1wb3J0IHsgZXJyQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IENvbm5lY3Rpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Nvbm5lY3Rpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IFNlcnZlckVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivc2VydmVyLWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckNvbmZpZyB9IGZyb20gXCJ+L2ludGVyZmFjZS9zZXJ2ZXItY29uZmlnLnRzXCI7XG5cbi8qKlxuICogRW5zdXJlIGFuIGVycm9yIG1lc3NhZ2UgaXMgdHJhbnNmb3JtZWQgaW4gYW4gRXJyb3Igb2JqZWN0XG4gKlxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5zdXJlRXJyb3IgPSAodmFsdWU6IHVua25vd24pOiBFcnJvciA9PiB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gdmFsdWU7XG5cbiAgbGV0IHN0cmluZ2lmaWVkID0gXCJbVW5hYmxlIHRvIHN0cmluZ2lmeSB0aGUgdGhyb3duIHZhbHVlXVwiO1xuICB0cnkge1xuICAgIHN0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9IGNhdGNoIChfZXJyb3IpIHtcbiAgICAvKiBlbXB0eSAqL1xuICB9XG5cbiAgcmV0dXJuIG5ldyBFcnJvcihzdHJpbmdpZmllZCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIEx1ZmkncyBjb25maWcgZnJvbSBpdHMgQVBJXG4gKlxuICogQHBhcmFtIGluc3RhbmNlVXJsXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZmV0Y2hTZXJ2ZXJDb25maWcgPSAoXG4gIGluc3RhbmNlVXJsOiBVUkwsXG4pOiBSZXN1bHRBc3luYzxTZXJ2ZXJDb25maWcsIEVycm9yPiA9PiB7XG4gIGNvbnN0IG9yaWdpbk1hdGNoZXMgPSBpbnN0YW5jZVVybC5ocmVmLm1hdGNoKFxuICAgIC8oLio/KVxcLz8oPzpcXC9bZHJdezF9XFwvfGxvZ2luXFwvP3xmaWxlc1xcLz8pLyxcbiAgKTtcblxuICBjb25zdCB1cmxPcmlnaW4gPSBvcmlnaW5NYXRjaGVzICYmIG9yaWdpbk1hdGNoZXNbMV1cbiAgICA/IG9yaWdpbk1hdGNoZXNbMV1cbiAgICA6IGluc3RhbmNlVXJsLm9yaWdpbjtcblxuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgZmV0Y2godXJsT3JpZ2luICsgXCIvYWJvdXQvY29uZmlnXCIpLFxuICAgIChlcnJvcikgPT5cbiAgICAgIG5ldyBDb25uZWN0aW9uRXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgKS5hbmRUaGVuKChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICByZXNwb25zZS5qc29uKCksXG4gICAgICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgICBuZXcgU2VydmVyRXJyb3IodW5kZWZpbmVkLCB7IGNvbnRleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQgfSksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNEZW5vUnVudGltZSA9ICgpOiBib29sZWFuID0+IHR5cGVvZiBEZW5vICE9PSBcInVuZGVmaW5lZFwiO1xuXG5leHBvcnQgY29uc3QgaXNTZWN1cmVDb250ZXh0ID0gKCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gaXNEZW5vUnVudGltZSgpIHx8IGdsb2JhbFRoaXMuaXNTZWN1cmVDb250ZXh0IHx8XG4gICAgZ2xvYmFsVGhpcy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gXCJodHRwczpcIjtcbn07XG5cbmV4cG9ydCBjb25zdCB3b3JrZXJVcmwgPSAocmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBVUkwgPT4ge1xuICByZXR1cm4gaXNEZW5vUnVudGltZSgpXG4gICAgPyBuZXcgVVJMKGAuL3dvcmtlci8ke3JlbGF0aXZlUGF0aH0udHNgLCBuZXcgVVJMKFwiLlwiLCBpbXBvcnQubWV0YS51cmwpLmhyZWYpXG4gICAgOiBuZXcgVVJMKFxuICAgICAgaW1wb3J0Lm1ldGEucmVzb2x2ZShcbiAgICAgICAgYC4vJHtcbiAgICAgICAgICByZWxhdGl2ZVBhdGggIT09IFwiZW5jcnlwdFwiID8gYHdvcmtlci8ke3JlbGF0aXZlUGF0aH1gIDogcmVsYXRpdmVQYXRoXG4gICAgICAgIH0uanNgLFxuICAgICAgKSxcbiAgICApO1xufTtcbiIsICJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudHNcIjtcbmltcG9ydCB7IFdPUktFUl9BQ1RJT04gfSBmcm9tIFwifi9lbnVtL3dvcmtlci1hY3Rpb24udHNcIjtcbmltcG9ydCB0eXBlIHsgTHVmaUZpbGUgfSBmcm9tIFwifi9lbnRpdGllcy9sdWZpLWZpbGUudHNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyQWN0aW9uTWVzc2FnZSB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItYWN0aW9uLW1lc3NhZ2UudHNcIjtcbmltcG9ydCB7IEVWRU5UIH0gZnJvbSBcIn4vZW51bS9ldmVudC50c1wiO1xuaW1wb3J0IHsgVVBMT0FEX1NUQVRVUyB9IGZyb20gXCJ+L2VudW0vZmlsZS1zdGF0dXMudHNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyRXZlbnQgfSBmcm9tIFwifi9pbnRlcmZhY2Uvd29ya2VyLWV2ZW50LnRzXCI7XG5cbmRlY2xhcmUgbGV0IHNlbGY6IFdvcmtlcjtcblxuZXhwb3J0IGNvbnN0IGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsZSBpbiB3b3JrZXJzIGFuZCBwcm92aWRlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1haW4gdGhyZWFkXG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcGFyYW0gYXJnc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUZpbGUgPSAobHVmaUZpbGU6IEx1ZmlGaWxlLCBhcmdzOiBQYXJ0aWFsPEx1ZmlGaWxlPikgPT4ge1xuICBPYmplY3QuYXNzaWduKGx1ZmlGaWxlLCBhcmdzKTtcblxuICBpZiAodHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICBldmVudDogRVZFTlQuRklMRV9VUERBVEVELFxuICAgICAgbHVmaUZpbGUsXG4gICAgfSBhcyBXb3JrZXJFdmVudCk7XG4gIH1cblxuICByZXR1cm4gbHVmaUZpbGU7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VuZEZpbGVFcnJvciA9IChsdWZpRmlsZTogTHVmaUZpbGUsIGVycm9yOiBFcnJvcikgPT4ge1xuICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7IHVwbG9hZFN0YXR1czogVVBMT0FEX1NUQVRVUy5GQUlMRUQgfSk7XG5cbiAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvciB9IGFzIFdvcmtlckV2ZW50KTtcbn07XG5cbi8qKlxuICogSW5pdCBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGNoaWxkIHdvcmtlcidzIG9ubWVzc2FnZSBldmVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IGluaXQgPSAoKSA9PiB7XG4gIGV2ZW50cy5vbmNlKEVWRU5ULlNPQ0tFVF9PUEVORUQsICgpID0+IHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIGV2ZW50OiBFVkVOVC5TT0NLRVRfT1BFTkVELFxuICAgIH0pO1xuICB9KTtcblxuICBldmVudHMub25jZShFVkVOVC5PUEVSQVRJT05fRkFJTEVELCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvciB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNXb3JrZXJBY3Rpb25NZXNzYWdlID0gKFxuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICBtZXNzYWdlOiBhbnksXG4pOiBtZXNzYWdlIGlzIFdvcmtlckFjdGlvbk1lc3NhZ2UgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBtZXNzYWdlID09PSBcIm9iamVjdFwiICYmXG4gICAgbWVzc2FnZSAhPT0gbnVsbCAmJlxuICAgIFwiYWN0aW9uXCIgaW4gbWVzc2FnZSAmJlxuICAgIE9iamVjdC52YWx1ZXMoV09SS0VSX0FDVElPTikuaW5jbHVkZXMobWVzc2FnZS5hY3Rpb24pXG4gICk7XG59O1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgImltcG9ydCB7XG4gIERlY29kZSBhcyBiNjRkZWNvZGUsXG4gIEVuY29kZSBhcyBiNjRlbmNvZGUsXG59IGZyb20gXCJhcnJheWJ1ZmZlci1lbmNvZGluZy9iYXNlNjRcIjtcbmltcG9ydCB7IGVyckFzeW5jLCBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgc2pjbCBmcm9tIFwibHVmaS1zamNsXCI7XG5pbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHsgRGVjcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2RlY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IEVuY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9lbmNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyB0eXBlIEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCB7IGVuc3VyZUVycm9yIH0gZnJvbSBcIn4vdXRpbHMudHNcIjtcbmltcG9ydCB7IEhhc2hpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9oYXNoaW5nLWVycm9yLnRzXCI7XG5cbi8qKlxuICogRGVjcnlwdCBhbiBFbmNyeXB0ZWREYXRhIG9yIGEgc3RyaW5nIHVzaW5nIHRoZSBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvbi5cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gZW5jcnlwdGVkRGF0YVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRlY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICBlbmNyeXB0ZWREYXRhOiBFbmNyeXB0ZWREYXRhIHwgc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8QXJyYXlCdWZmZXIsIERlY3J5cHRpb25FcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgZW5jcnlwdGVkRGF0YSA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBlbmNyeXB0ZWREYXRhXG4gICAgICA6IChlbmNyeXB0ZWREYXRhLmRhdGEpO1xuXG4gICAgcmV0dXJuIG9rQXN5bmMoYjY0ZGVjb2RlKHNqY2wuZGVjcnlwdChrZXksIGRhdGEpKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IERlY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEVuY3J5cHQgYW4gQXJyYXlCdWZmZXIgaW50byBhbiBFbmNyeXB0ZWREYXRhIHVzaW5nIHRoZSBwcm92aWRlZCBrZXlcbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbmNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEFycmF5QnVmZmVyLFxuKTogUmVzdWx0QXN5bmM8RW5jcnlwdGVkRGF0YSwgRW5jcnlwdGlvbkVycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZW5jcnlwdGVkID0gc2pjbC5lbmNyeXB0KGtleSwgYjY0ZW5jb2RlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gb2tBc3luYyh7XG4gICAgICBhbGdvOiBDcnlwdG9BbGdvcml0aG0uU2pjbCxcbiAgICAgIGRhdGE6IGVuY3J5cHRlZCxcbiAgICAgIGl2OiBKU09OLnBhcnNlKGVuY3J5cHRlZCBhcyB1bmtub3duIGFzIHN0cmluZykuaXYsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IEVuY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIHN0cmluZyB1c2luZyBTamNsIEFQSVxuICpcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUtleSA9ICgpOiBSZXN1bHRBc3luYzxzdHJpbmcsIENyeXB0b0Vycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9rQXN5bmMoc2pjbC5jb2RlYy5iYXNlNjQuZnJvbUJpdHMoc2pjbC5yYW5kb20ucmFuZG9tV29yZHMoOCwgMTApKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IENyeXB0b0Vycm9yKFwiVW5hYmxlIHRvIGdlbmVyYXRlIGtleVwiLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEhhc2ggYSBwYXNzd29yZCB1c2luZyBTamNsIEFQSVxuICpcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgSGFzaGluZ0Vycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9rQXN5bmMoc2pjbC5jb2RlYy5oZXguZnJvbUJpdHMoc2pjbC5oYXNoLnNoYTUxMi5oYXNoKHBhc3N3b3JkKSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhuZXcgSGFzaGluZ0Vycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pKTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZXRlY3QgaWYgdGhlIGtleSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgU2pjbC4gU2luY2Ugd2UncmUgbm90IGdlbmVyYXRpbmcgYW4gZXF1YWwgc3ltYm9sIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBXZWJDcnlwdG8gQVBJIChieSB1c2luZyBiYXNlNjR1cmwpLCBpdCdzIGVhc3kgdG8gZGV0ZWN0XG4gKlxuICogQHBhcmFtIGtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2pjbEtleSA9IChrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4ga2V5W2tleS5sZW5ndGggLSAxXSA9PT0gXCI9XCI7XG59O1xuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIENyeXB0b0Vycm9yIGV4dGVuZHMgQmFzZUVycm9yIHt9XG4iLCAiaW1wb3J0IHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBEZWNyeXB0aW9uRXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2U6IHN0cmluZyA9IFwiVW5hYmxlIHRvIGRlY3J5cHQgdGhlIHByb3ZpZGVkIGRhdGFcIjtcbn1cbiIsICJpbXBvcnQge1xuICBEZWNvZGUgYXMgYjY0dXJsZGVjb2RlLFxuICBFbmNvZGUgYXMgYjY0dXJsZW5jb2RlLFxufSBmcm9tIFwiYXJyYXlidWZmZXItZW5jb2RpbmcvYmFzZTY0L3VybFwiO1xuaW1wb3J0IHsgdHlwZSBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IERlY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9kZWNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciB9IGZyb20gXCJ+L3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBFbmNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZW5jcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBIYXNoaW5nRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vaGFzaGluZy1lcnJvci50c1wiO1xuXG4vKipcbiAqIERlY3J5cHQgYW4gZW5jcnlwdGVkRGF0YSB1c2luZyB0aGUga2V5IHVzZWQgZm9yIGVuY3J5cHRpb25cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gZW5jcnlwdGVkXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZGVjcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIGVuY3J5cHRlZDogRW5jcnlwdGVkRGF0YSxcbik6IFJlc3VsdEFzeW5jPEFycmF5QnVmZmVyLCBEZWNyeXB0aW9uRXJyb3I+ID0+IHtcbiAgcmV0dXJuIGltcG9ydEtleShrZXkpLmFuZFRoZW4oKGltcG9ydGVkS2V5KSA9PlxuICAgIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgY3J5cHRvLnN1YnRsZS5kZWNyeXB0KFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJBRVMtR0NNXCIsXG4gICAgICAgICAgaXY6IGVuY3J5cHRlZC5pdiBhcyBVaW50OEFycmF5LFxuICAgICAgICB9LFxuICAgICAgICBpbXBvcnRlZEtleSxcbiAgICAgICAgZW5jcnlwdGVkLmRhdGEgYXMgQXJyYXlCdWZmZXIsXG4gICAgICApLFxuICAgICAgKGVycm9yKSA9PiBuZXcgRGVjcnlwdGlvbkVycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICAgIClcbiAgKTtcbn07XG5cbi8qKlxuICogRW5jcnlwdCBhbiBBcnJheUJ1ZmZlciBpbnRvIGFuIEVuY3J5cHRlZERhdGEgdXNpbmcgdGhlIHByb3ZpZGVkIGtleVxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBBcnJheUJ1ZmZlcixcbik6IFJlc3VsdEFzeW5jPEVuY3J5cHRlZERhdGEsIEVuY3J5cHRpb25FcnJvcj4gPT4ge1xuICByZXR1cm4gaW1wb3J0S2V5KGtleSkuYW5kVGhlbigoaW1wb3J0ZWRLZXkpID0+IHtcbiAgICBjb25zdCBpdiA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTIpKTtcbiAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICBjcnlwdG8uc3VidGxlLmVuY3J5cHQoXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIkFFUy1HQ01cIixcbiAgICAgICAgICBpdixcbiAgICAgICAgfSxcbiAgICAgICAgaW1wb3J0ZWRLZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgKSxcbiAgICAgIChlcnJvcikgPT5cbiAgICAgICAgbmV3IEVuY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgICB9KSxcbiAgICApLmFuZFRoZW4oKGVuY3J5cHRlZCkgPT4ge1xuICAgICAgcmV0dXJuIG9rQXN5bmMoe1xuICAgICAgICBhbGdvOiBDcnlwdG9BbGdvcml0aG0uV2ViQ3J5cHRvLFxuICAgICAgICBkYXRhOiBlbmNyeXB0ZWQsXG4gICAgICAgIGl2LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBzdHJpbmcgaW50byBhIENyeXB0b0tleSwgdXNhYmxlIGluIFdlYiBDcnlwdG8gQVBJXG4gKlxuICogQHBhcmFtIGtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGltcG9ydEtleSA9IChrZXk6IHN0cmluZyk6IFJlc3VsdEFzeW5jPENyeXB0b0tleSwgQ3J5cHRvRXJyb3I+ID0+IHtcbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIGNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICAgXCJyYXdcIixcbiAgICAgIGI2NHVybGRlY29kZShrZXkpLFxuICAgICAgeyBuYW1lOiBcIkFFUy1HQ01cIiB9LFxuICAgICAgZmFsc2UsXG4gICAgICBbXG4gICAgICAgIFwiZW5jcnlwdFwiLFxuICAgICAgICBcImRlY3J5cHRcIixcbiAgICAgIF0sXG4gICAgKSxcbiAgICAoZXJyb3IpID0+XG4gICAgICBuZXcgQ3J5cHRvRXJyb3IoXCJVbmFibGUgdG8gaW1wb3J0IGNyeXB0b2dyYXBoeSBrZXlcIiwge1xuICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgfSksXG4gICk7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIHN0cmluZyB1c2luZyBXZWIgQ3J5cHRvIEFQSS5cbiAqXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVLZXkgPSAoKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBDcnlwdG9FcnJvcj4gPT4ge1xuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgIGNyeXB0by5zdWJ0bGVcbiAgICAgICAgLmdlbmVyYXRlS2V5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQUVTLUdDTVwiLFxuICAgICAgICAgICAgbGVuZ3RoOiAyNTYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCJdLFxuICAgICAgICApXG4gICAgICAgIC50aGVuKChnZW5lcmF0ZWRLZXkpID0+XG4gICAgICAgICAgY3J5cHRvLnN1YnRsZVxuICAgICAgICAgICAgLmV4cG9ydEtleShcInJhd1wiLCBnZW5lcmF0ZWRLZXkpXG4gICAgICAgICAgICAudGhlbigoa2V5KSA9PiByZXNvbHZlKGI2NHVybGVuY29kZShrZXkpKSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBiYXNlNjQgZW5jb2RlIHRoZSB1cmxcIiwge1xuICAgICAgICAgICAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gcmVqZWN0KGVycm9yKSlcbiAgICApLFxuICAgIChlcnJvcikgPT5cbiAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBnZW5lcmF0ZSBrZXlcIiwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICApO1xufTtcblxuLyoqXG4gKiBIYXNoIGEgcGFzc3dvcmQgdXNpbmcgV2ViQ3J5cHRvIEFQSVxuICpcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgSGFzaGluZ0Vycm9yPiA9PiB7XG4gIGNvbnN0IHByb21pc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICBuZXcgVWludDhBcnJheShcbiAgICAgICAgYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXG4gICAgICAgICAgXCJTSEEtNTEyXCIsXG4gICAgICAgICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHBhc3N3b3JkKSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKS5tYXAoKGIpID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKSkuam9pbihcIlwiKTtcbiAgfTtcblxuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgcHJvbWlzZSgpLFxuICAgIChlcnJvcikgPT4gbmV3IEhhc2hpbmdFcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgKTtcbn07XG4iLCAiaW1wb3J0IHsgQ3J5cHRvQWxnb3JpdGhtIH0gZnJvbSBcIn4vZW51bS9jcnlwdG8tYWxnb3JpdGhtLnRzXCI7XG5pbXBvcnQgeyBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgdHlwZSB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBEZWNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBFbmNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZW5jcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgdHlwZSBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgKiBhcyBzamNsIGZyb20gXCJ+L2FwaS9jcnlwdG8vc2pjbC50c1wiO1xuaW1wb3J0ICogYXMgd2ViIGZyb20gXCJ+L2FwaS9jcnlwdG8vd2ViLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEhhc2hpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9oYXNoaW5nLWVycm9yLnRzXCI7XG5cbi8qKlxuICogRGVjcnlwdCBhbiBFbmNyeXB0ZWREYXRhIG9iamVjdCB1c2luZyB0aGUga2V5IHVzZWQgZm9yIGVuY3J5cHRpb25cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEVuY3J5cHRlZERhdGEsXG4pOiBSZXN1bHRBc3luYzxBcnJheUJ1ZmZlciwgRGVjcnlwdGlvbkVycm9yPiA9PlxuICB2YWx1ZS5hbGdvID09PSB1bmRlZmluZWQgfHwgdmFsdWUuYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2xcbiAgICA/IHNqY2wuZGVjcnlwdChrZXksIHZhbHVlKVxuICAgIDogd2ViLmRlY3J5cHQoa2V5LCB2YWx1ZSk7XG5cbi8qKlxuICogRW5jcnlwdCBhbiBBcnJheUJ1ZmZlciB1c2luZyB0aGUgcHJvdmlkZWQga2V5IGFuZCBhbGdvcml0aG1cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSBhbGdvXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBBcnJheUJ1ZmZlcixcbiAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLFxuKTogUmVzdWx0QXN5bmM8RW5jcnlwdGVkRGF0YSwgRW5jcnlwdGlvbkVycm9yPiA9PlxuICAoYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2wpXG4gICAgPyBzamNsLmVuY3J5cHQoa2V5LCB2YWx1ZSlcbiAgICA6IHdlYi5lbmNyeXB0KGtleSwgdmFsdWUpO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgbmV3IGtleSBmb3IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uXG4gKlxuICogQHBhcmFtIGFsZ29cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUtleSA9IChcbiAgYWxnbyA9IENyeXB0b0FsZ29yaXRobS5XZWJDcnlwdG8sXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIENyeXB0b0Vycm9yPiA9PlxuICBhbGdvID09PSBDcnlwdG9BbGdvcml0aG0uU2pjbCA/IHNqY2wuZ2VuZXJhdGVLZXkoKSA6IHdlYi5nZW5lcmF0ZUtleSgpO1xuXG4vKipcbiAqIEhhc2ggYSBwYXNzd29yZCB1c2luZyB0aGUgcHJvdmlkZWQgYWxnb3JpdGhtXG4gKlxuICogQHBhcmFtIHBhc3N3b3JkXG4gKiBAcGFyYW0gYWxnb1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLFxuKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBIYXNoaW5nRXJyb3I+ID0+XG4gIGFsZ28gPT09IENyeXB0b0FsZ29yaXRobS5TamNsXG4gICAgPyBzamNsLmhhc2hQYXNzd29yZChwYXNzd29yZClcbiAgICA6IHdlYi5oYXNoUGFzc3dvcmQocGFzc3dvcmQpO1xuIiwgImltcG9ydCB7IGVyckFzeW5jLCBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgeyBMdWZpRmlsZSB9IGZyb20gXCJ+L2VudGl0aWVzL2x1ZmktZmlsZS50c1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBVUExPQURfU1RBVFVTIH0gZnJvbSBcIn4vZW51bS9maWxlLXN0YXR1cy50c1wiO1xuaW1wb3J0IHsgU29ja2V0UGF0aCB9IGZyb20gXCJ+L2VudW0vc29ja2V0LXBhdGgudHNcIjtcbmltcG9ydCB7IFVwbG9hZEVycm9yIH0gZnJvbSBcIn4vZXJyb3IvdXBsb2FkL3VwbG9hZC1lcnJvci50c1wiO1xuaW1wb3J0IHsgV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd2Vic29ja2V0L3dlYnNvY2tldC1jb25uZWN0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBXZWJTb2NrZXRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dlYnNvY2tldC93ZWJzb2NrZXQtZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50VXBsb2FkQ2h1bmtNZXRhZGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9jbGllbnQtdXBsb2FkLWNodW5rLW1ldGFkYXRhLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyQ2FuY2VsTWV0YWRhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2Uvc2VydmVyLWNhbmNlbC1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci1kb3dubG9hZC1jaHVuay1zdWNjZXNzLW1ldGFkYXRhLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlclVwbG9hZENodW5rTWV0YWRhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2Uvc2VydmVyLXVwbG9hZC1jaHVuay1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJEb3dubG9hZENodW5rTWV0YWRhdGEgfSBmcm9tIFwifi90eXBlL3NlcnZlci1kb3dubG9hZC1jaHVuay1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHsgZW5zdXJlRXJyb3IgfSBmcm9tIFwifi91dGlscy50c1wiO1xuaW1wb3J0IHsgZXZlbnRzLCB1cGRhdGVGaWxlIH0gZnJvbSBcIn4vd29ya2VyL3NoYXJlZC50c1wiO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJ+L2FwaS9jcnlwdG8udHNcIjtcbmltcG9ydCB7XG4gIERlY29kZSBhcyBiNjRkZWNvZGUsXG4gIEVuY29kZSBhcyBiNjRlbmNvZGUsXG59IGZyb20gXCJhcnJheWJ1ZmZlci1lbmNvZGluZy9iYXNlNjRcIjtcblxuZXhwb3J0IGNvbnN0IHNvY2tldHM6IHtcbiAgW2tleTogc3RyaW5nXTogV2ViU29ja2V0O1xufSA9IHt9O1xuXG5jb25zdCBNQVhfRVJST1JTID0gNTtcblxuLyoqXG4gKiBIYW5kbGUgV2ViU29ja2V0IHJlc3BvbnNlIGZvciBjYW5jZWwgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBvbkNhbmNlbE1lc3NhZ2UgPSAoXG4gIGRhdGE6IFNlcnZlckNhbmNlbE1ldGFkYXRhLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgRXJyb3I+ID0+IHtcbiAgZXZlbnRzLmVtaXQoRVZFTlQuVVBMT0FEX0NBTkNFTExFRCwgZGF0YS5zdWNjZXNzKTtcblxuICByZXR1cm4gb2tBc3luYyh1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBIYW5kbGUgV2ViU29ja2V0IHJlc3BvbnNlIGZvciBkb3dubG9hZCByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHJlc3BvbnNlXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IG9uRG93bmxvYWRNZXNzYWdlID0gKFxuICByZXNwb25zZTogc3RyaW5nLFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBjb25zdCByZXN1bHQgPSByZXNwb25zZS5zcGxpdChcIlhYTU9KT1hYXCIpO1xuICBjb25zdCBtZXRhZGF0YVN0cmluZyA9IHJlc3VsdC5zaGlmdCgpO1xuXG4gIGlmIChtZXRhZGF0YVN0cmluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBKU09OLnBhcnNlKG1ldGFkYXRhU3RyaW5nKSBhcyBTZXJ2ZXJEb3dubG9hZENodW5rTWV0YWRhdGE7XG5cbiAgICBpZiAoaXNTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhKG1ldGFkYXRhKSkge1xuICAgICAgY29uc3QgZGF0YVN0cmluZyA9IHJlc3VsdC5zaGlmdCgpO1xuXG4gICAgICBpZiAoZGF0YVN0cmluZykge1xuICAgICAgICBjb25zdCBlbmNyeXB0ZWREYXRhOiBFbmNyeXB0ZWREYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyaW5nKTtcblxuICAgICAgICAvLyBJZiBmaWxlIHdhcyB1cGxvYWRlZCB1c2luZyBMdWZpIEFQSVxuICAgICAgICBpZiAoZW5jcnlwdGVkRGF0YS5pdikge1xuICAgICAgICAgIGVuY3J5cHRlZERhdGEuaXYgPSBuZXcgVWludDhBcnJheShPYmplY3QudmFsdWVzKGVuY3J5cHRlZERhdGEuaXYpKTtcbiAgICAgICAgICBlbmNyeXB0ZWREYXRhLmRhdGEgPSBiNjRkZWNvZGUoZW5jcnlwdGVkRGF0YS5kYXRhIGFzIHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3J5cHRvLmRlY3J5cHQobHVmaUZpbGUua2V5cy5jbGllbnQsIGVuY3J5cHRlZERhdGEpLmFuZFRoZW4oXG4gICAgICAgICAgKGRlY3J5cHRlZFBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IHR5cGVvZiBkZWNyeXB0ZWRQYXJ0ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgID8gKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShkZWNyeXB0ZWRQYXJ0KS5idWZmZXIgYXMgQXJyYXlCdWZmZXIpXG4gICAgICAgICAgICAgIDogZGVjcnlwdGVkUGFydDtcblxuICAgICAgICAgICAgLy8gSWYgZmlyc3QgY2h1bmtcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5wYXJ0ID09PSAwKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHtcbiAgICAgICAgICAgICAgICBjaHVua3NSZWFkeTogbHVmaUZpbGUuY2h1bmtzUmVhZHkgKyAxLFxuICAgICAgICAgICAgICAgIGRlbEF0Rmlyc3RWaWV3OiBtZXRhZGF0YS5kZWxfYXRfZmlyc3RfdmlldyxcbiAgICAgICAgICAgICAgICBkZWxheTogbWV0YWRhdGEuZGVsYXksXG4gICAgICAgICAgICAgICAgbmFtZTogbWV0YWRhdGEubmFtZSxcbiAgICAgICAgICAgICAgICBzaXplOiBtZXRhZGF0YS5zaXplLFxuICAgICAgICAgICAgICAgIHRvdGFsQ2h1bmtzOiBtZXRhZGF0YS50b3RhbCxcbiAgICAgICAgICAgICAgICB0eXBlOiBtZXRhZGF0YS50eXBlLFxuICAgICAgICAgICAgICAgIHppcHBlZDogbWV0YWRhdGEuemlwcGVkLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBldmVudHMuZW1pdChFVkVOVC5ET1dOTE9BRF9TVEFSVEVEKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHsgY2h1bmtzUmVhZHk6IGx1ZmlGaWxlLmNodW5rc1JlYWR5ICsgMSB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuQ0hVTktfRE9XTkxPQURFRCwgYnVmZmVyLCBtZXRhZGF0YS5wYXJ0KTtcblxuICAgICAgICAgICAgaWYgKGx1ZmlGaWxlLmNodW5rc1JlYWR5ID09PSBtZXRhZGF0YS50b3RhbCkge1xuICAgICAgICAgICAgICByZXR1cm4gZW5kRG93bmxvYWQobHVmaUZpbGUpLmFuZFRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULkRPV05MT0FEX0NPTVBMRVRFKTtcbiAgICAgICAgICAgICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT1BFUkFUSU9OX1RFUk1JTkFURUQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFdlYlNvY2tldEVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IHJldHJpZXZlIG1ldGFkYXRhIGZyb20gZGF0YSByZWNlaXZlZCBieSB0aGUgc2VydmVyXCIsXG4gICAgICAgICk7XG5cbiAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IpO1xuICAgICAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihtZXRhZGF0YS5tc2cpO1xuXG4gICAgICBldmVudHMuZW1pdChFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvcik7XG4gICAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihcbiAgICAgIFwiQ2Fubm90IHJldHJpZXZlIG1ldGFkYXRhIGZyb20gZGF0YSByZWNlaXZlZCBieSB0aGUgc2VydmVyXCIsXG4gICAgKTtcblxuICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcbiAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICB9XG59O1xuXG4vKipcbiAqIEhhbmRsZSBXZWJTb2NrZXQgcmVzcG9uc2UgZm9yIHVwbG9hZCByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHJlc3BvbnNlXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IG9uVXBsb2FkTWVzc2FnZSA9IChcbiAgcmVzcG9uc2U6IFNlcnZlclVwbG9hZENodW5rTWV0YWRhdGEsXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFVwbG9hZEVycm9yPiA9PiB7XG4gIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgLy8gSWYgZmlyc3QgY2h1bmtcbiAgICBpZiAocmVzcG9uc2UuaiA9PT0gMCkge1xuICAgICAgLy8gY29uc29sZS5pbmZvKGBVcGxvYWQgb2YgJHtsdWZpRmlsZS5rZXlzLmNsaWVudH0gc3RhcnRlZGApO1xuXG4gICAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7XG4gICAgICAgIGtleXM6IHsgY2xpZW50OiBsdWZpRmlsZS5rZXlzLmNsaWVudCwgc2VydmVyOiByZXNwb25zZS5zaG9ydCB9LFxuICAgICAgICBhY3Rpb25Ub2tlbjogcmVzcG9uc2UudG9rZW4sXG4gICAgICAgIHF1ZXVlSW5kZXg6IHJlc3BvbnNlLmksXG4gICAgICB9KTtcblxuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuVVBMT0FEX1NUQVJURUQpO1xuICAgIH1cblxuICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHtcbiAgICAgIGNodW5rc1JlYWR5OiBsdWZpRmlsZS5jaHVua3NSZWFkeSArIDEsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRfYXQsXG4gICAgfSk7XG5cbiAgICBldmVudHMuZW1pdChFVkVOVC5DSFVOS19VUExPQURFRCk7XG5cbiAgICBpZiAobHVmaUZpbGUuY2h1bmtzUmVhZHkgPT09IGx1ZmlGaWxlLnRvdGFsQ2h1bmtzKSB7XG4gICAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7IHVwbG9hZFN0YXR1czogVVBMT0FEX1NUQVRVUy5DT01QTEVURSB9KTtcblxuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuVVBMT0FEX0NPTVBMRVRFKTtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PUEVSQVRJT05fVEVSTUlOQVRFRCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihyZXNwb25zZS5tc2cpO1xuICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcblxuICAgIHJldHVybiBlcnJBc3luYyhlcnJvcik7XG4gIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIG9uIHNvY2tldHMgXCJvbm1lc3NhZ2VcIiBldmVudFxuICpcbiAqIEBwYXJhbSBlXG4gKiBAcGFyYW0gc29ja2V0VXJsXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBvbk1lc3NhZ2UgPSAoXG4gIGU6IE1lc3NhZ2VFdmVudCxcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgVXBsb2FkRXJyb3I+ID0+IHtcbiAgY29uc3QgZGF0YSA9IHRyeVBhcnNlSnNvbihlLmRhdGEpO1xuICBsZXQgY2FsbGJhY2s7XG5cbiAgaWYgKGRhdGEpIHtcbiAgICBpZiAoIWRhdGEuYWN0aW9uICYmIGRhdGEubXNnKSB7XG4gICAgICAvLyBJZiBlcnJvclxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgV2ViU29ja2V0RXJyb3IoZGF0YS5tc2cpO1xuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IpO1xuXG4gICAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXCJkZWxheVwiIGluIGRhdGEpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvblVwbG9hZE1lc3NhZ2UoZGF0YSwgbHVmaUZpbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbkNhbmNlbE1lc3NhZ2UoZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrID0gb25Eb3dubG9hZE1lc3NhZ2UoZS5kYXRhLCBsdWZpRmlsZSk7XG4gIH1cblxuICByZXR1cm4gY2FsbGJhY2s7XG59O1xuXG4vKipcbiAqIElzIHNvY2tldCBjb25uZWN0aW5nP1xuICpcbiAqIEBwYXJhbSBzb2NrZXRLZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc0Nvbm5lY3RpbmcgPSAoc29ja2V0S2V5OiBzdHJpbmcpOiBib29sZWFuID0+XG4gIHNvY2tldHMgIT09IHVuZGVmaW5lZCAmJlxuICBzb2NrZXRzW3NvY2tldEtleV0gIT09IHVuZGVmaW5lZCAmJlxuICBzb2NrZXRzW3NvY2tldEtleV0ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0LkNPTk5FQ1RJTkc7XG5cbi8qKlxuICogSXMgc29ja2V0IHNwYXduZWQ/XG4gKlxuICogQHBhcmFtIHNvY2tldEtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU3Bhd25lZCA9IChzb2NrZXRLZXk6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgc29ja2V0cyAhPT0gdW5kZWZpbmVkICYmXG4gIHNvY2tldHNbc29ja2V0S2V5XSAhPT0gdW5kZWZpbmVkICYmXG4gIHNvY2tldHNbc29ja2V0S2V5XS5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTjtcblxuLyoqXG4gKiBBc2sgV2ViU29ja2V0IHRvIGNhbmNlbCBhbiB1cGxvYWRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBjYW5jZWxVcGxvYWQgPSAoXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIHJldHVybiBzZW5kTWVzc2FnZShcbiAgICB1cGxvYWRTb2NrZXRVcmwobHVmaUZpbGUpLFxuICAgIGx1ZmlGaWxlLFxuICAgIGAke1xuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBpZDogbHVmaUZpbGUua2V5cy5zZXJ2ZXIsXG4gICAgICAgIG1vZF90b2tlbjogbHVmaUZpbGUuYWN0aW9uVG9rZW4sXG4gICAgICAgIGNhbmNlbDogdHJ1ZSxcbiAgICAgICAgaTogbHVmaUZpbGUucXVldWVJbmRleCxcbiAgICAgIH0pXG4gICAgfVhYTU9KT1hYdXNlbGVzc2AsXG4gICk7XG59O1xuXG4vKipcbiAqIERvd25sb2FkIGEgcGFydCBvZiB0aGUgZmlsZSB0aHJvdWdoIHRoZSBXZWJTb2NrZXRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEBwYXJhbSBjaHVua051bWJlclxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRvd25sb2FkQ2h1bmsgPSAoXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbiAgY2h1bmtOdW1iZXI6IG51bWJlcixcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGxldCBtZXNzYWdlO1xuXG4gIGlmIChsdWZpRmlsZS5wYXNzd29yZCkge1xuICAgIG1lc3NhZ2UgPSB7IHBhcnQ6IGNodW5rTnVtYmVyLCBmaWxlX3B3ZDogbHVmaUZpbGUucGFzc3dvcmQgfTtcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlID0geyBwYXJ0OiBjaHVua051bWJlciB9O1xuICB9XG5cbiAgcmV0dXJuIHNlbmRNZXNzYWdlKFxuICAgIGRvd25sb2FkU29ja2V0VXJsKGx1ZmlGaWxlKSxcbiAgICBsdWZpRmlsZSxcbiAgICBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSxcbiAgKTtcbn07XG5cbi8qKlxuICogVGVsbCB0aGUgV2ViU29ja2V0IHRoZSBkb3dubG9hZCBlbmRlZFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGVuZERvd25sb2FkID0gKFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBsZXQgbWVzc2FnZTogeyBlbmRlZDogdHJ1ZTsgZmlsZV9wd2Q/OiBzdHJpbmcgfTtcblxuICBpZiAobHVmaUZpbGUucGFzc3dvcmQpIHtcbiAgICBtZXNzYWdlID0geyBlbmRlZDogdHJ1ZSwgZmlsZV9wd2Q6IGx1ZmlGaWxlLnBhc3N3b3JkIH07XG4gIH0gZWxzZSB7XG4gICAgbWVzc2FnZSA9IHsgZW5kZWQ6IHRydWUgfTtcbiAgfVxuXG4gIHJldHVybiBzZW5kTWVzc2FnZShcbiAgICBkb3dubG9hZFNvY2tldFVybChsdWZpRmlsZSksXG4gICAgbHVmaUZpbGUsXG4gICAgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksXG4gICk7XG59O1xuXG4vKipcbiAqIFVwbG9hZCBhIGNodW5rIG9mIHRoZSBmaWxlIHRocm91Z2ggdGhlIFdlYlNvY2tldFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHBhcmFtIG1ldGFkYXRhXG4gKiBAcGFyYW0gZW5jcnlwdGVkRGF0YVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwbG9hZENodW5rID0gKFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4gIG1ldGFkYXRhOiBDbGllbnRVcGxvYWRDaHVua01ldGFkYXRhLFxuICBlbmNyeXB0ZWREYXRhOiBFbmNyeXB0ZWREYXRhLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgZW5jcnlwdGVkRGF0YS5kYXRhID0gYjY0ZW5jb2RlKGVuY3J5cHRlZERhdGEuZGF0YSBhcyBBcnJheUJ1ZmZlcik7XG5cbiAgcmV0dXJuIHNlbmRNZXNzYWdlKFxuICAgIHVwbG9hZFNvY2tldFVybChsdWZpRmlsZSksXG4gICAgbHVmaUZpbGUsXG4gICAgYCR7SlNPTi5zdHJpbmdpZnkobWV0YWRhdGEpfVhYTU9KT1hYJHtKU09OLnN0cmluZ2lmeShlbmNyeXB0ZWREYXRhKX1gLFxuICApO1xufTtcblxuLyoqXG4gKiBTZW5kIGEgbWVzc2FnZSB0byB0aGUgV2ViU29ja2V0XG4gKlxuICogQHBhcmFtIHNvY2tldFVybFxuICogQHBhcmFtIG1lc3NhZ2VcbiAqIEBwYXJhbSBoYXNQcmlvcml0eVxuICogQHJldHVybnNcbiAqL1xuY29uc3Qgc2VuZE1lc3NhZ2UgPSAoXG4gIHNvY2tldFVybDogc3RyaW5nLFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGlmICghaXNTcGF3bmVkKHNvY2tldFVybCkpIHtcbiAgICByZXR1cm4gc3Bhd24oc29ja2V0VXJsKS5hbmRUaGVuKCgpID0+IHtcbiAgICAgIHNvY2tldHNbc29ja2V0VXJsXS5vbm1lc3NhZ2UgPSAoZSkgPT4gb25NZXNzYWdlKGUsIGx1ZmlGaWxlKTtcbiAgICAgIHJldHVybiBzZW5kTWVzc2FnZShzb2NrZXRVcmwsIGx1ZmlGaWxlLCBtZXNzYWdlKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzb2NrZXRzW3NvY2tldFVybF0uc2VuZChtZXNzYWdlKTtcblxuICAgIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG4gIH1cbn07XG5cbi8qKlxuICogU3Bhd24gYSBuZXcgV2ViU29ja2V0IG9yIHJldXNlIGFuIGV4aXN0aW5nIG9uZS5cbiAqXG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcGFyYW0gZXJyb3JDb3VudFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNwYXduID0gKFxuICBzb2NrZXRLZXk6IHN0cmluZyxcbiAgZXJyb3JDb3VudCA9IDAsXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGlmICghaXNTcGF3bmVkKHNvY2tldEtleSkgJiYgIWlzQ29ubmVjdGluZyhzb2NrZXRLZXkpKSB7XG4gICAgLy8gY29uc29sZS5pbmZvKGBTcGF3bmluZyBXZWJTb2NrZXQgJHtzb2NrZXRVcmx9YCk7XG4gICAgc29ja2V0c1tzb2NrZXRLZXldID0gbmV3IFdlYlNvY2tldChzb2NrZXRLZXkpO1xuXG4gICAgZXZlbnRzLm9uY2UoRVZFTlQuU09DS0VUX09QRVJBVElPTl9URVJNSU5BVEVELCAoKSA9PiB7XG4gICAgICBzb2NrZXRzW3NvY2tldEtleV0uY2xvc2UoKTtcbiAgICB9KTtcblxuICAgIGV2ZW50cy5vbmNlKEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsICgpID0+IHtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PUEVSQVRJT05fVEVSTUlOQVRFRCk7XG4gICAgfSk7XG5cbiAgICBzb2NrZXRzW3NvY2tldEtleV0ub25vcGVuID0gKCkgPT4ge1xuICAgICAgLy8gY29uc29sZS5pbmZvKGBXZWJzb2NrZXQgJHtzb2NrZXRLZXl9IGhhcyBiZWVuIG9wZW5gKTtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PUEVORUQpO1xuICAgIH07XG5cbiAgICBzb2NrZXRzW3NvY2tldEtleV0ub25jbG9zZSA9ICgpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUuaW5mbyhgV2Vic29ja2V0ICR7c29ja2V0S2V5fSBoYXMgYmVlbiBjbG9zZWRgKTtcbiAgICB9O1xuXG4gICAgc29ja2V0c1tzb2NrZXRLZXldLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBpZiAoKytlcnJvckNvdW50IDw9IE1BWF9FUlJPUlMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gV2ViU29ja2V0ICR7c29ja2V0S2V5fS4gVHJ5aW5nIGFnYWluLiAke2Vycm9yQ291bnR9IC8gJHtNQVhfRVJST1JTfWAsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHNwYXduKHNvY2tldEtleSwgZXJyb3JDb3VudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT05FUlJPUik7XG4gICAgICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgICAgICBuZXcgV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yKFxuICAgICAgICAgICAgYFVuYWJsZSB0byBjb25uZWN0IHRvIFdlYlNvY2tldCAke3NvY2tldEtleX0uYCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gd2FpdEZvckNvbm5lY3Rpb24oc29ja2V0S2V5KVxuICAgIC5hbmRUaGVuKCgpID0+IG9rQXN5bmMoc29ja2V0S2V5KSlcbiAgICAub3JFbHNlKChlcnJvcikgPT4gZXJyQXN5bmMoZXJyb3IpKTtcbn07XG5cbi8qKlxuICogV2FpdCBmb3IgV2ViU29ja2V0IHRvIG9wZW4uIFJldHVybnMgYW4gZXJyb3IgaWYgdG9vIG1hbnkgY29ubmVjdGlvbiBhdHRlbXB0cyBhcmUgbWFkZS5cbiAqXG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3Qgd2FpdEZvckNvbm5lY3Rpb24gPSAoXG4gIHNvY2tldEtleTogc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+XG4gIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghaXNTcGF3bmVkKHNvY2tldEtleSkpIHtcbiAgICAgICAgZXZlbnRzLm9uY2UoRVZFTlQuU09DS0VUX09QRU5FRCwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXZlbnRzLm9uKEVWRU5ULlNPQ0tFVF9PTkVSUk9SLCAoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IoKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIChlcnJvcikgPT4ge1xuICAgICAgcmV0dXJuIGVuc3VyZUVycm9yKGVycm9yKTtcbiAgICB9LFxuICApO1xuXG4vKipcbiAqIENsb3NlIHRoZSBXZWJTb2NrZXRcbiAqIEBwYXJhbSBzb2NrZXRLZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9zZSA9IChzb2NrZXRLZXk6IHN0cmluZyk6IFJlc3VsdEFzeW5jPHN0cmluZywgV2ViU29ja2V0RXJyb3I+ID0+XG4gIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChpc1NwYXduZWQoc29ja2V0S2V5KSkge1xuICAgICAgICBjb25zdCB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZWplY3QobmV3IFdlYlNvY2tldEVycm9yKFwiVW5hYmxlIHRvIGNsb3NlIHRoZSBXZWJTb2NrZXRcIikpO1xuICAgICAgICB9LCAxMDAwKTtcblxuICAgICAgICBzb2NrZXRzW3NvY2tldEtleV0ub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTtcbiAgICAgICAgICByZXNvbHZlKHNvY2tldEtleSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc29ja2V0c1tzb2NrZXRLZXldLmNsb3NlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHNvY2tldEtleSk7XG4gICAgICB9XG4gICAgfSksXG4gICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICk7XG5cbi8qKlxuICogVHJhbnNmb3JtcyBhbiBpbnN0YW5jZSBVUkwgaW4gYSBXZWJTb2NrZXQgVVJMXG4gKlxuICogQHBhcmFtIGluc3RhbmNlVXJsXG4gKiBAcGFyYW0gcGF0aG5hbWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZFNvY2tldFVybCA9IChpbnN0YW5jZVVybDogVVJMLCBwYXRobmFtZTogc3RyaW5nKTogVVJMID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChpbnN0YW5jZVVybCk7XG5cbiAgaWYgKCFbXCJ3czpcIiwgXCJ3c3M6XCJdLmluY2x1ZGVzKHVybC5wcm90b2NvbCkpIHtcbiAgICB1cmwucHJvdG9jb2wgPSB1cmwucHJvdG9jb2wgPT09IFwiaHR0cDpcIiA/IFwid3M6XCIgOiBcIndzczpcIjtcbiAgfVxuICB1cmwucGF0aG5hbWUgKz0gcGF0aG5hbWU7XG5cbiAgcmV0dXJuIG5ldyBVUkwodXJsLm9yaWdpbiArIHVybC5wYXRobmFtZSk7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSBkb3dubG9hZCBVUkwgZm9yIHRoZSBzb2NrZXQuIFJldHVybnMgYSBzdHJpbmcgc2luY2UgaXQncyBtb3N0bHkgdXNlZCBhcyBzb2NrZXRzIGtleVxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRvd25sb2FkU29ja2V0VXJsID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBidWlsZFNvY2tldFVybChcbiAgICBuZXcgVVJMKGx1ZmlGaWxlLnNlcnZlclVybCksXG4gICAgU29ja2V0UGF0aC5ET1dOTE9BRCArIGAvJHtsdWZpRmlsZS5rZXlzLnNlcnZlcn1gLFxuICApLnRvU3RyaW5nKCk7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSB1cGxvYWQgVVJMIGZvciB0aGUgc29ja2V0LiBSZXR1cm5zIGEgc3RyaW5nIHNpbmNlIGl0J3MgbW9zdGx5IHVzZWQgYXMgc29ja2V0cyBrZXlcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB1cGxvYWRTb2NrZXRVcmwgPSAobHVmaUZpbGU6IEx1ZmlGaWxlKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGJ1aWxkU29ja2V0VXJsKG5ldyBVUkwobHVmaUZpbGUuc2VydmVyVXJsKSwgU29ja2V0UGF0aC5VUExPQUQpXG4gICAgLnRvU3RyaW5nKCk7XG59O1xuXG4vKipcbiAqIFRyeSB0byBwYXJzZSBhIHN0cmluZyBpbnRvIGEgSlNPTi4gUmV0dXJucyBmYWxzZSBpZiBub3QgcG9zc2libGUuXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IHRyeVBhcnNlSnNvbiA9IChkYXRhOiBzdHJpbmcpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWRPYmplY3QgPSBKU09OLnBhcnNlKGRhdGEpO1xuXG4gICAgaWYgKHBhcnNlZE9iamVjdCAmJiB0eXBlb2YgcGFyc2VkT2JqZWN0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gcGFyc2VkT2JqZWN0O1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIH0gY2F0Y2ggKF9lKSB7XG4gICAgLyogZW1wdHkgKi9cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBpcyBTZXJ2ZXJEb3dubG9hZENodW5rTWV0YWRhdGFcbiAqXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSA9IChcbiAgbWVzc2FnZTogU2VydmVyRG93bmxvYWRDaHVua01ldGFkYXRhLFxuKTogbWVzc2FnZSBpcyBTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhID0+XG4gIHR5cGVvZiBtZXNzYWdlID09PSBcIm9iamVjdFwiICYmIG1lc3NhZ2UgIT09IG51bGwgJiYgIShcIm1zZ1wiIGluIG1lc3NhZ2UpO1xuIiwgImltcG9ydCB0eXBlIHsgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgZG93bmxvYWRDaHVuaywgZG93bmxvYWRTb2NrZXRVcmwsIHNvY2tldHMgfSBmcm9tIFwifi9hcGkvd2Vic29ja2V0LnRzXCI7XG5pbXBvcnQgeyBFVkVOVCB9IGZyb20gXCJ+L2VudW0vZXZlbnQudHNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyQWN0aW9uTWVzc2FnZSB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItYWN0aW9uLW1lc3NhZ2UudHNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyRXZlbnQgfSBmcm9tIFwifi9pbnRlcmZhY2Uvd29ya2VyLWV2ZW50LnRzXCI7XG5pbXBvcnQgeyBldmVudHMsIGluaXQgfSBmcm9tIFwifi93b3JrZXIvc2hhcmVkLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdlYlNvY2tldEVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd2Vic29ja2V0L3dlYnNvY2tldC1lcnJvci50c1wiO1xuXG5kZWNsYXJlIGNvbnN0IHNlbGY6IFdvcmtlcjtcbmxldCBpc0luaXRpYXRlZCA9IGZhbHNlO1xuXG5zZWxmLm9ubWVzc2FnZSA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gIGlmICghaXNJbml0aWF0ZWQpIHtcbiAgICBpbml0KCk7XG4gICAgaXNJbml0aWF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgZXZlbnRzLm9uKEVWRU5ULkRPV05MT0FEX1NUQVJURUQsICgpID0+IHtcbiAgICBzb2NrZXRzW2Rvd25sb2FkU29ja2V0VXJsKGV2ZW50LmRhdGEuYXJncy5sdWZpRmlsZSldLmNsb3NlKCk7XG5cbiAgICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULklORk9TX1JFVFJJRVZFRCB9KTtcbiAgfSk7XG5cbiAgcmV0cmlldmVJbmZvcyhldmVudC5kYXRhKS5tYXBFcnIoKGVycm9yKSA9PiB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICBldmVudDogRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCxcbiAgICAgIGVycm9yLFxuICAgIH0gYXMgV29ya2VyRXZlbnQpO1xuICB9KTtcbn07XG5cbmNvbnN0IHJldHJpZXZlSW5mb3MgPSAoXG4gIHdvcmtlck1lc3NhZ2U6IFdvcmtlckFjdGlvbk1lc3NhZ2UsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT5cbiAgZG93bmxvYWRDaHVuayh3b3JrZXJNZXNzYWdlLmFyZ3MubHVmaUZpbGUsIDApO1xuIl0sCiAgIm1hcHBpbmdzIjogIis1QkFBQSxJQUFBQSxHQUFBQyxHQUFBLENBQUFDLEdBQUFDLEtBQUEsY0F1QkEsSUFBSUMsRUFBSSxPQUFPLFNBQVksU0FBVyxRQUFVLEtBQzVDQyxHQUFlRCxHQUFLLE9BQU9BLEVBQUUsT0FBVSxXQUN2Q0EsRUFBRSxNQUNGLFNBQXNCRSxFQUFRQyxFQUFVQyxFQUFNLENBQzlDLE9BQU8sU0FBUyxVQUFVLE1BQU0sS0FBS0YsRUFBUUMsRUFBVUMsQ0FBSSxDQUM3RCxFQUVFQyxHQUNBTCxHQUFLLE9BQU9BLEVBQUUsU0FBWSxXQUM1QkssR0FBaUJMLEVBQUUsUUFDVixPQUFPLHNCQUNoQkssR0FBaUIsU0FBd0JILEVBQVEsQ0FDL0MsT0FBTyxPQUFPLG9CQUFvQkEsQ0FBTSxFQUNyQyxPQUFPLE9BQU8sc0JBQXNCQSxDQUFNLENBQUMsQ0FDaEQsRUFFQUcsR0FBaUIsU0FBd0JILEVBQVEsQ0FDL0MsT0FBTyxPQUFPLG9CQUFvQkEsQ0FBTSxDQUMxQyxFQUdGLFNBQVNJLEdBQW1CQyxFQUFTLENBQy9CLFNBQVcsUUFBUSxNQUFNLFFBQVEsS0FBS0EsQ0FBTyxDQUNuRCxDQUVBLElBQUlDLEdBQWMsT0FBTyxPQUFTLFNBQXFCQyxFQUFPLENBQzVELE9BQU9BLElBQVVBLENBQ25CLEVBRUEsU0FBU0MsR0FBZSxDQUN0QkEsRUFBYSxLQUFLLEtBQUssSUFBSSxDQUM3QixDQUNBWCxHQUFPLFFBQVVXLEVBQ2pCWCxHQUFPLFFBQVEsS0FBT1ksR0FHdEJELEVBQWEsYUFBZUEsRUFFNUJBLEVBQWEsVUFBVSxRQUFVLE9BQ2pDQSxFQUFhLFVBQVUsYUFBZSxFQUN0Q0EsRUFBYSxVQUFV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SSxFQUFFSCxDQUFDLEVBQUUsR0FBR0QsR0FBRyxFQUFFQyxFQUFFQyxFQUFFSSxFQUFFLENBQUMsRUFBRUQsRUFBRUgsSUFBSSxFQUFFLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEVBQzNmLEdBQUcsQ0FBQyxDQUFDLEVBQ0xILEVBQUssT0FBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLFNBQVNDLEVBQUUsQ0FBQyxPQUFPUSxHQUFHLEtBQUtSLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFLENBQUMsT0FBT1EsR0FBRyxLQUFLUixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUlBLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUYsRUFBRSxDQUFDLEVBQUVHLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRSxFQUFFLENBQUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxJQUFJVCxFQUFFLEVBQUUsSUFBTUEsRUFBRUEsSUFBSUssR0FBR0YsRUFBRUgsQ0FBQyxFQUFFQSxHQUFHLEVBQUUsS0FBS0EsR0FBRyxJQUFJQSxDQUFDLEVBQUVBLEVBQUUsSUFBSUMsRUFBRUMsRUFBRSxFQUFFLENBQUNKLEVBQUVHLENBQUMsRUFBRUEsR0FBR0ssR0FBRyxFQUFFSixFQUFFRyxFQUFFSCxDQUFDLEdBQUcsRUFBRSxJQUFJTSxFQUFFTixFQUFFQSxHQUFHLEVBQUVBLEdBQUcsRUFBRUEsR0FBRyxFQUFFQSxHQUFHLEVBQUVNLEVBQUVBLEdBQUcsRUFBRUEsRUFBRSxJQUFJLEdBQUdWLEVBQUVHLENBQUMsRUFBRU8sRUFBRVQsRUFBRVMsQ0FBQyxFQUFFUCxFQUFFTSxFQUFFSixFQUFFSCxFQUFFRyxFQUFFRyxFQUFFSCxFQUFFRixDQUFDLENBQUMsQ0FBQyxFQUFFUSxFQUFFLFNBQVVGLEVBQUUsTUFBUVAsRUFBRSxJQUFNTSxFQUFFLFNBQVVMLEVBQUVNLEVBQUUsSUFBTUosRUFBRUssQ0FBQyxFQUFFLFNBQVVBLEVBQUVSLEVBQUUsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVDLENBQUMsRUFBRU0sRUFBRUEsR0FBRyxHQUFHQSxJQUFJLEVBQUVWLEVBQUVHLENBQUMsRUFBRVEsQ0FBQyxFQUFFQyxFQUFFQSxHQUFHLEdBQUdBLElBQUksRUFBRSxJQUFJVCxFQUNsZ0IsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVKLEVBQUVJLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRUgsRUFBRUcsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNoRCxTQUFTSSxHQUFHUixFQUFFQyxFQUFFQyxFQUFFLENBQUMsR0FBT0QsRUFBRSxTQUFOLEVBQWEsTUFBTSxJQUFJRixFQUFLLFVBQVUsUUFBUSx3QkFBd0IsRUFBRSxJQUFJSSxFQUFFSCxFQUFFLEVBQUVFLENBQUMsRUFBRUUsRUFBRUgsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRSxFQUFFSixFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUcsRUFBRUwsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRixFQUFFQSxFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRSxJQUFJSSxFQUFFRSxFQUFFQyxFQUFFQyxFQUFFUixFQUFFLE9BQU8sRUFBRSxFQUFFUyxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUVQLEVBQUVQLEVBQUUsRUFBRUUsQ0FBQyxFQUFFRixFQUFFTyxFQUFFLENBQUMsRUFBRSxJQUFJUSxFQUFFUixFQUFFLENBQUMsRUFBRVMsRUFBRVQsRUFBRSxDQUFDLEVBQUVVLEVBQUVWLEVBQUUsQ0FBQyxFQUFFVyxFQUFFWCxFQUFFLENBQUMsRUFBRSxJQUFJSyxFQUFFLEVBQUVBLEVBQUVELEVBQUVDLElBQUlMLEVBQUVQLEVBQUVJLElBQUksRUFBRSxFQUFFVyxFQUFFVixHQUFHLEdBQUcsR0FBRyxFQUFFVyxFQUFFVixHQUFHLEVBQUUsR0FBRyxFQUFFVyxFQUFFaEIsRUFBRSxHQUFHLEVBQUVFLEVBQUVVLENBQUMsRUFBRUosRUFBRVQsRUFBRUssSUFBSSxFQUFFLEVBQUVVLEVBQUVULEdBQUcsR0FBRyxHQUFHLEVBQUVVLEVBQUVmLEdBQUcsRUFBRSxHQUFHLEVBQUVnQixFQUFFYixFQUFFLEdBQUcsRUFBRUQsRUFBRVUsRUFBRSxDQUFDLEVBQUVILEVBQUVWLEVBQUVNLElBQUksRUFBRSxFQUFFUyxFQUFFZCxHQUFHLEdBQUcsR0FBRyxFQUFFZSxFQUFFWixHQUFHLEVBQUUsR0FBRyxFQUFFYSxFQUFFWixFQUFFLEdBQUcsRUFBRUYsRUFBRVUsRUFBRSxDQUFDLEVBQUVaLEVBQUVELEVBQUVDLElBQUksRUFBRSxFQUFFYyxFQUFFWCxHQUFHLEdBQUcsR0FBRyxFQUFFWSxFQUFFWCxHQUFHLEVBQUUsR0FBRyxFQUFFWSxFQUFFWCxFQUFFLEdBQUcsRUFBRUgsRUFBRVUsRUFBRSxDQUFDLEVBQUVBLEdBQUcsRUFBRVQsRUFBRUcsRUFBRUYsRUFBRUksRUFBRUgsRUFBRUksRUFBRSxJQUFJRSxFQUNyZixFQUFFLEVBQUVBLEVBQUVBLElBQUlFLEVBQUVaLEVBQUUsRUFBRSxDQUFDVSxFQUFFQSxDQUFDLEVBQUVNLEVBQUVkLElBQUksRUFBRSxHQUFHLEdBQUdjLEVBQUViLEdBQUcs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LEVBQUVBLEdBQUcsR0FBR0UsRUFBRSxLQUFLRCxDQUFDLEVBQUVBLEVBQUUsRUFBRSxHQUFPRCxJQUFKLEVBQU0sT0FBT0UsRUFBRSxPQUFPSCxDQUFDLEVBQUUsSUFBSUksRUFBRSxFQUFFQSxFQUFFSixFQUFFLE9BQU9JLElBQUlELEVBQUUsS0FBS0QsRUFBRUYsRUFBRUksQ0FBQyxJQUFJSCxDQUFDLEVBQUVDLEVBQUVGLEVBQUVJLENBQUMsR0FBRyxHQUFHSCxFQUFFLE9BQUFHLEVBQUVKLEVBQUUsT0FBT0EsRUFBRUEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFQSxFQUFFRCxFQUFLLFNBQVMsV0FBV0ssQ0FBQyxFQUFFRCxFQUFFLEtBQUtKLEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFLEdBQUcsR0FBR0MsRUFBRUQsRUFBRUUsRUFBRUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQVNBLENBQUMsRUFBRSxFQUFFLFNBQVNILEVBQUVDLEVBQUUsQ0FBQyxNQUFNLENBQUNELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUQsRUFBRSxDQUFDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRCxFQUFFLENBQUMsRUFBRUMsRUFBRSxDQUFDLEVBQUVELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxJQUFJRCxFQUFFLEVBQUVBLEVBQUVELEVBQUUsT0FBTyxFQUFFQyxFQUFFQyxFQUFFRixFQUFFQyxDQUFDLEVBQUVELEVBQUVDLENBQUMsRUFBRUMsSUFBSSxHQUFHQSxJQUFJLEVBQUUsT0FBUUEsRUFBRSxRQUFTLEVBQUVBLEdBQUcsR0FBRyxPQUFPRixDQUFDLENBQUMsRUFDcGRELEVBQUssTUFBTSxXQUFXLENBQUMsU0FBUyxTQUFTQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxHQUFHQyxFQUFFSCxFQUFLLFNBQVMsVUFBVUMsQ0FBQyxFQUFFRyxFQUFFQyxFQUFFLElBQUlELEVBQUUsRUFBRUEs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SUFBSUgsQ0FBQyxFQUFFRSxFQUFFQyxHQUFHLEdBQUdILElBQUlBLEdBQUcsRUFBRUUsR0FBR0MsR0FBRyxHQUFHSCxFQUFFLENBQUMsT0FBQUEsRUFBRSxJQUFJRixFQUFFLEtBQUtILEVBQUssU0FBUyxRQUFRSyxFQUFFLEdBQUdFLEVBQUUsQ0FBQyxDQUFDLEVBQVNKLENBQUMsQ0FBQyxFQUFFSCxFQUFLLE1BQU0sVUFBVSxDQUFDLFNBQVMsU0FBU0MsRUFBRSxDQUFDLE9BQU9ELEVBQUssTUFBTSxPQUFPLFNBQVNDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLFNBQVNBLEVBQUUsQ0FBQyxPQUFPRCxFQUFLLE1BQU0sT0FBTyxPQUFPQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUVELEVBQUssS0FBSyxPQUFPLFNBQVNDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFQSxHQUFHLEtBQUssRUFBRUEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRUEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRUEsRUFBRSxHQUFHLEtBQUssTUFBTSxDQUFDLEVBQUVELEVBQUssS0FBSyxPQUFPLEtBQUssU0FBU0MsRUFBRSxDQUFDLE9BQU8sSUFBSUQsRUFBSyxLQUFLLFNBQVEsT0FBT0MsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUN4Z0JELEVBQUssS0FBSyxPQUFPLFVBQVUsQ0FBQyxVQUFVLElBQUksTUFBTSxVQUFVLENBQUMsWUFBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFTLElBQUksRUFBRSxPQUFPLFNBQVNDLEVBQUUsQ0FBWSxPQUFPQSxHQUFsQixXQUFzQkEsRUFBRUQsRUFBSyxNQUFNLFdBQVcsT0FBT0MsQ0FBQyxHQUFHLElBQUlDLEVBQUVDLEVBQUUsS0FBSyxFQUFFSCxFQUFLLFNBQVMsT0FBTyxLQUFLLEVBQUVDLENBQUMsRUFBaUQsR0FBL0NDLEVBQUUsS0FBSyxFQUFFRCxFQUFFLEtBQUssRUFBRUMsRUFBRUYsRUFBSyxTQUFTLFVBQVVDLENBQUMsRUFBSyxpQkFBaUJBLEVBQUUsTUFBTSxJQUFJRCxFQUFLLFVBQVUsUUFBUSxxQ0FBcUMsRUFBRSxHQUFpQixPQUFPLFlBQXJCLElBQWlDLENBQUMsSUFBSUksRUFBRSxJQUFJLFlBQVlELENBQUMsRUFBRUUsRUFBRSxFQUFFLElBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVFLEVBQUUsU0FBUyxHQUFHQyxFQUN0ZixJQUFJQSxFQUFFLEVBQUUsQ0FBQyxFQUFFQSxHQUFHLEVBQUVGLEVBQUUsT0FBTyxFQUFFLEdBQUdFLENBQUMsQ0FBQyxLQUFNLEtBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxFQUFFLFNBQVMsVUFBVSxDQUFDLElBQUlGLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFLEtBQUssRUFBRUQsRUFBRUYsRUFBSyxTQUFTLE9BQU9FLEVBQUUsQ0FBQ0YsRUFBSyxTQUFTLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUlDLEVBQUVDLEVBQUUsT0FBTyxFQUFFRCxFQUFFLEdBQUdBLElBQUlDLEVBQUUsS0FBSyxDQUFDLEVBQXlDLElBQXZDQSxFQUFFLEtBQUssS0FBSyxNQUFNLEtBQUssRUFBRSxVQUFXLENBQUMsRUFBTUEsRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDLEVBQUVBLEVBQUUsUUFBUSxLQUFLLEVBQUVBLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQUssTUFBTSxFQUFTQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsU0FBU0YsRUFBRUEsRUFBRSxDQUFDLE1BQU8sYUFBYUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxFQUN6ZixHQUFHLEtBQUssQ0FBQ0EsSUFBSSxFQUFFSCxJQUFJLEtBQUssRUFBRUEsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUVELENBQUMsRUFBRUQsRUFBRSxLQUFLLElBQUlFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRUQsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUgsRUFBRSxDQUFDLEVBQUVLLEVBQUVMLEVBQUUsQ0FBQyxFQUFFTSxFQUFFTixFQUFFLENBQUMsRUFBRU8sRUFBRVAsRUFBRSxDQUFDLEVBQUVRLEVBQUVSLEVBQUUsQ0FBQyxFQUFFUyxFQUFFVCxFQUFFLENBQUMsRUFBRVUsRUFBRVYsRUFBRSxDQUFDLEVBQUUsSUFBSUgsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUksR0FBR0EsRUFBRUMsRUFBRUYsRUFBRUMsQ0FBQyxHQUFHQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsRUFBRSxFQUFFRSxFQUFFSCxFQUFFQyxFQUFFLEdBQUcsRUFBRSxFQUFFQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsR0FBR0MsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksRUFBRUEsR0FBRyxHQUFHQSxHQUFHLEtBQUtDLElBQUksR0FBR0EsSUFBSSxHQUFHQSxJQUFJLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJSCxFQUFFQyxFQUFFLEVBQUUsRUFBRUQsRUFBRUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHQyxFQUFFQSxFQUFFWSxHQUFHSCxJQUFJLEVBQUVBLElBQUksR0FBR0EsSUFBSSxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJRSxFQUFFRixHQUFHQyxFQUFFQyxJQUFJUixFQUFFSixDQUFDLEVBQUVhLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVSLEVBQUUsRUFBRVEsRUFBRUQsRUFBRUEsRUFBRUYsRUFBRUEsRUFBRUQsRUFBRUEsRUFBRUosR0FBR0ssRUFBRUUsRUFBRUMsR0FBR0gsRUFBRUUsS0FBS0YsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksR0FBR0EsR0FBRyxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsSUFBSSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVFLEVBQ3BmLEVBQUVGLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRUcsRUFBRSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVLLEVBQUUsRUFBRUwsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFTSxFQUFFLEVBQUVOLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRU8sRUFBRSxFQUFFUCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVRLEVBQUUsRUFBRVIsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFUyxFQUFFLEVBQUVULEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRVUsRUFBRSxDQUFDLENBQUMsRUFBRWYsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUVBLEdBQUcsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsRUFBRUQsRUFBSyxLQUFLLE9BQU8sS0FBSyxTQUFTQyxFQUFFLENBQUMsT0FBTyxJQUFJRCxFQUFLLEtBQUssU0FBUSxPQUFPQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQy9TRCxFQUFLLEtBQUssT0FBTyxVQUFVLENBQUMsVUFBVSxLQUFLLE1BQU0sVUFBVSxDQUFDLFlBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBUyxJQUFJLEVBQUUsT0FBTyxTQUFTQyxFQUFFLENBQVksT0FBT0EsR0FBbEIsV0FBc0JBLEVBQUVELEVBQUssTUFBTSxXQUFXLE9BQU9DLENBQUMsR0FBRyxJQUFJQyxFQUFFQyxFQUFFLEtBQUssRUFBRUgsRUFBSyxTQUFTLE9BQU8sS0FBSyxFQUFFQyxDQUFDLEVBQWlELEdBQS9DQyxFQUFFLEtBQUssRUFBRUQsRUFBRSxLQUFLLEVBQUVDLEVBQUVGLEVBQUssU0FBUyxVQUFVQyxDQUFDLEVBQUssaUJBQWlCQSxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEscUNBQXFDLEVBQUUsR0FBaUIsT0FBTyxZQUFyQixJQUFpQyxDQUFDLElBQUlJLEVBQUUsSUFBSSxZQUFZRCxDQUFDLEVBQUVFLEVBQUUsRUFBRSxJQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFRSxFQUFFLFNBQVMsR0FDdGZDLEVBQUUsSUFBSUEsRUFBRSxFQUFFLENBQUMsRUFBRUEsR0FBRyxFQUFFRixFQUFFLE9BQU8sRUFBRSxHQUFHRSxDQUFDLENBQUMsS0FBTSxLQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRSxTQUFTLFVBQVUsQ0FBQyxJQUFJRixFQUFFQyxFQUFFLEtBQUssRUFBRUMsRUFBRSxLQUFLLEVBQUVELEVBQUVGLEVBQUssU0FBUyxPQUFPRSxFQUFFLENBQUNGLEVBQUssU0FBUyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJQyxFQUFFQyxFQUFFLE9BQU8sRUFBRUQsRUFBRSxHQUFHQSxJQUFJQyxFQUFFLEtBQUssQ0FBQyxFQUE2RCxJQUEzREEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLEtBQUssTUFBTSxLQUFLLEVBQUUsVUFBVyxDQUFDLEVBQU1BLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLFFBQVEsS0FBSyxFQUFFQSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFLLE1BQU0sRUFBU0MsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsUUFBUSxRQUFRLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxTQUFTLFFBQVEsUUFDbGYsUUFBUSxPQUFPLFFBQVEsUUFBUSxPQUFPLFFBQVEsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxRQUFRLFFBQVEsU0FBUyxTQUFTLFNBQVMsU0FBUyxPQUFPLE9BQU8sT0FBTyxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsU0FBUyxRQUFRLFFBQVEsU0FBUyxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLFFBQVEsUUFDcGYsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxPQUFPLFNBQVMsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLE9BQU8sRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTRixFQUFFQSxFQUFFLENBQUMsTUFBTyxh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RixFQUFFLFFBQVFPLEVBQUVMLEVBQUVELEVBQUUsTUFBTUUsRUFBRUEsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBT0csRUFBRSxNQUFNSixFQUFFLEVBQUVFLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBU0osRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQUVDLEVBQUVSLEVBQUssU0FBU08sRUFBRUMsRUFBRSxFQUFFLElBQUlFLEVBQUVSLEVBQUUsT0FBT1MsRUFBRUgsRUFBRSxVQUFVTixDQUFDLEVBQUVVLEVBQUVGLEVBQUUsR0FBR0csRUFBRUQsRUFBa0csR0FBaEdULEVBQUVLLEVBQUUsT0FBTyxDQUFDQSxFQUFFLFFBQVEsRUFBRUYsRUFBRSxDQUFDLENBQUMsRUFBRUgsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRUMsRUFBRUksRUFBRSxTQUFTRCxFQUFFSCxFQUFFSCxFQUFFLFFBQVFFLENBQUMsQ0FBQyxFQUFFLEVBQUVFLENBQUMsRUFBSyxDQUFDSyxFQUFFLE1BQU0sQ0FBQyxJQUFJTixFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSUcsRUFBRSxFQUFFQSxFQUFFRyxFQUFFSCxHQUFHLEVBQUVBLEVBQUVLLElBQUlaLEVBQUssS0FBSyxJQUFJLEdBQUdPLEVBQ3JnQkcsQ0FBQyxFQUFFRSxHQUFHQyxHQUFHVixFQUFFLENBQUMsSUFBSUUsRUFBRUosRUFBRSxRQUFRRSxDQUFDLEVBQUVELEVBQUVLLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUVILEVBQUVLLEVBQUUsQ0FBQyxHQUFHRixFQUFFLENBQUMsRUFBRUgsRUFBRUssRUFBRSxDQUFDLEdBQUdGLEVBQUUsQ0FBQyxFQUFFSCxFQUFFSyxFQUFFLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUlELEVBQUUsS0FBS0ksRUFBRSxNQUFNTixFQUFFUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVYLEVBQUssS0FBSyxLQUFLLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxLQUFLLEVBQUVBLEVBQUVBLEdBQUdGLEVBQUssS0FBSyxPQUFPLElBQUlHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUVDLEVBQUVDLEVBQUVILEVBQUUsVUFBVSxVQUFVLEdBQWtELElBQS9DLEtBQUssRUFBRSxDQUFDLElBQUlBLEVBQUUsSUFBSUEsQ0FBQyxFQUFFRCxFQUFFLE9BQU9JLElBQUlKLEVBQUVDLEVBQUUsS0FBS0QsQ0FBQyxHQUFPRyxFQUFFLEVBQUVBLEVBQUVDLEVBQUVELElBQUlELEVBQUUsQ0FBQyxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsRUFBRSxVQUFVRCxFQUFFLENBQUMsRUFBRUMsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsV0FBVyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU9ELEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPQSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJRCxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzWUYsRUFBSyxLQUFLLEtBQUssVUFBVSxRQUFRQSxFQUFLLEtBQUssS0FBSyxVQUFVLElBQUksU0FBU0MsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEseUNBQXlDLEVBQUUsWUFBSyxPQUFPQyxDQUFDLEVBQVMsS0FBSyxPQUFPQSxDQUFDLENBQUMsRUFBRUQsRUFBSyxLQUFLLEtBQUssVUFBVSxNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUVBLEVBQUssS0FBSyxLQUFLLFVBQVUsT0FBTyxTQUFTQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLE9BQU9BLENBQUMsQ0FBQyxFQUFFRCxFQUFLLEtBQUssS0FBSyxVQUFVLE9BQU8sVUFBVSxDQUFDLElBQUlDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRUEsRUFBRyxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUcsT0FBT0EsQ0FBQyxFQUFFLFNBQVMsRUFBRSxZQUFLLE1BQU0sRUFBU0EsQ0FBQyxFQUN2ZUQsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFVLEdBQVRGLEVBQUVBLEdBQUcsSUFBTyxFQUFFQyxHQUFHLEVBQUVELEVBQUUsTUFBTSxJQUFJSCxFQUFLLFVBQVUsUUFBUSwwQkFBMEIsRUFBYSxPQUFPQyxHQUFsQixXQUFzQkEsRUFBRUQsRUFBSyxNQUFNLFdBQVcsT0FBT0MsQ0FBQyxHQUFjLE9BQU9DLEdBQWxCLFdBQXNCQSxFQUFFRixFQUFLLE1BQU0sV0FBVyxPQUFPRSxDQUFDLEdBQUdHLEVBQUVBLEdBQUdMLEVBQUssS0FBSyxLQUFLQyxFQUFFLElBQUlJLEVBQUVKLENBQUMsRUFBRSxJQUFJSyxFQUFFQyxFQUFFQyxFQUFFRSxFQUFFQyxFQUFFLENBQUMsRUFBRUMsRUFBRVosRUFBSyxTQUFTLElBQUlVLEVBQUUsRUFBRSxHQUFHQyxFQUFFLFFBQVFQLEdBQUcsR0FBR00sSUFBSSxDQUFnQyxJQUEvQkwsRUFBRUMsRUFBRUwsRUFBRSxRQUFRVyxFQUFFLE9BQU9WLEVBQUUsQ0FBQ1EsQ0FBQyxDQUFDLENBQUMsRUFBTUgsRUFBRSxFQUFFQSxFQUFFSixFQUFFSSxJQUFJLElBQUlELEVBQUVMLEVBQUUsUUFBUUssQ0FBQyxFQUFFRSxFQUFFLEVBQUVBLEVBQUVGLEVBQUUsT0FBT0UsSUFBSUgsRUFBRUcsQ0FBQyxHQUFHRixFQUFFRSxDQUFDLEVBQUVHLEVBQUVBLEVBQUUsT0FBT04sQ0FBQyxDQUFDLENBQUMsT0FBQUQsSUFBSU8sRUFBRUMsRUFBRSxNQUFNRCxFQUFFUCxDQUFDLEdBQVVPLENBQUMsRUFDbmRYLEVBQUssS0FBSyxTQUFTQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSUQsRUFBSyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxHQUFHLE1BQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLEVBQUUsRUFDeldELEVBQUssS0FBSyxVQUFVLENBQUMsWUFBWSxTQUFTQyxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxDQUFDLEVBQUVDLEVBQUVBLEVBQUUsS0FBSyxRQUFRRixDQUFDLEVBQUUsSUFBSUcsRUFBRSxHQUFHRCxJQUFJLEtBQUssRUFBRSxNQUFNLElBQUlKLEVBQUssVUFBVSxTQUFTLHdCQUF3QixFQUFFLEdBQUdJLEVBQUUsS0FBSyxFQUFFLENBQUNBLEVBQUUsRUFBRUEsRUFBRSxLQUFLLEdBQUdDLEVBQUUsQ0FBQyxFQUFFLElBQUlDLEVBQUUsRUFBRUMsRUFBMkMsSUFBekMsS0FBSyxFQUFFRixFQUFFLENBQUMsRUFBRyxJQUFJLE9BQU0sUUFBUSxFQUFFLEtB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Q0gsRUFFQSxJQUFNRCxHQUNKRSxHQUVBQyxHQUFjRCxFQUFjLEtBQUssU0FBVSxDQUFDIiwKICAibmFtZXMiOiBbInJlcXVpcmVfZXZlbnRzIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUiIsICJSZWZsZWN0QXBwbHkiLCAidGFyZ2V0IiwgInJlY2VpdmVyIiwgImFyZ3MiLCAiUmVmbGVjdE93bktleXMiLCAiUHJvY2Vzc0VtaXRXYXJuaW5nIiwgIndhcm5pbmciLCAiTnVtYmVySXNOYU4iLCAidmFsdWUiLCAiRXZlbnRFbWl0dGVyIiwgIm9uY2UiLCAiZGVmYXVsdE1heExpc3RlbmVycyIsICJjaGVja0xpc3RlbmVyIiwgImxpc3RlbmVyIiwgImFyZyIsICJuIiwgIl9nZXRNYXhMaXN0ZW5lcnMiLCAidGhhdCIsICJ0eXBlIiwgImkiLCAiZG9FcnJvciIsICJldmVudHMiLCAiZXIiLCAiZXJyIiwgImhhbmRsZXIiLCAibGVuIiwgImxpc3RlbmVycyIsICJhcnJheUNsb25lIiwgIl9hZGRMaXN0ZW5lciIsICJwcmVwZW5kIiwgIm0iLCAiZXhpc3RpbmciLCAidyIsICJvbmNlV3JhcHBlciIsICJfb25jZVdyYXAiLCAic3RhdGUiLCAid3JhcHBlZCIsICJsaXN0IiwgInBvc2l0aW9uIiwgIm9yaWdpbmFsTGlzdGVuZXIiLCAic3BsaWNlT25lIiwgImtleXMiLCAia2V5IiwgIl9saXN0ZW5lcnMiLCAidW53cmFwIiwgImV2bGlzdGVuZXIiLCAidW53cmFwTGlzdGVuZXJzIiwgImVtaXR0ZXIiLCAibGlzdGVuZXJDb3VudCIsICJhcnIiLCAiY29weSIsICJpbmRleCIsICJyZXQiLCAibmFtZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJlcnJvckxpc3RlbmVyIiwgInJlc29sdmVyIiwgImV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lciIsICJhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlciIsICJmbGFncyIsICJ3cmFwTGlzdGVuZXIiLCAicmVxdWlyZV9zamNsIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAic2pjbCIsICJhIiwgImIiLCAiYyIsICJkIiwgImUiLCAiZiIsICJnIiwgImgiLCAiYWEiLCAiayIsICJuIiwgImwiLCAibSIsICJwIiwgInoiLCAiQSIsICJDIiwgIkIiLCAiRCIsICJQIiwgImVhIiwgIlEiLCAidCIsICJyIiwgInUiLCAiRyIsICJFIiwgIkgiLCAiRiIsICJWIiwgIkkiLCAidyIsICJ2IiwgIlIiLCAiSiIsICJTIiwgIksiLCAiVyIsICJMIiwgInEiLCAieCIsICJ5IiwgIlgiLCAiWSIsICJNIiwgImZhIiwgImphIiwgImthIiwgImdhIiwgImJhIiwgIk4iLCAiY2EiLCAiTyIsICJUIiwgImhhIiwgImlhIiwgImRhIiwgIlUiLCAiWiIsICJkZWZhdWx0RXJyb3JDb25maWciLCAiY3JlYXRlTmV2ZXJUaHJvd0Vycm9yIiwgIm1lc3NhZ2UiLCAicmVzdWx0IiwgImNvbmZpZyIsICJkYXRhIiwgIm1heWJlU3RhY2siLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJQIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgImkiLCAiX19hd2FpdCIsICJ2IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAiZyIsICJxIiwgInZlcmIiLCAiYXdhaXRSZXR1cm4iLCAiZiIsICJuIiwgImEiLCAiYiIsICJyZXN1bWUiLCAic2V0dGxlIiwgInIiLCAiZnVsZmlsbCIsICJfX2FzeW5jRGVsZWdhdG9yIiwgInAiLCAiX19hc3luY1ZhbHVlcyIsICJkIiwgIlJlc3VsdEFzeW5jIiwgIl9SZXN1bHRBc3luYyIsICJyZXMiLCAicHJvbWlzZSIsICJuZXdQcm9taXNlIiwgInZhbHVlIiwgIk9rIiwgImVycm9yRm4iLCAiZSIsICJFcnIiLCAiZm4iLCAiYXJncyIsICJfX2F3YWl0ZXIiLCAiZXJyb3IiLCAiYXN5bmNSZXN1bHRMaXN0IiwgImNvbWJpbmVSZXN1bHRBc3luY0xpc3QiLCAiY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMiLCAiZiIsICJuZXdSZXMiLCAibmV3VmFsdWUiLCAib2siLCAiX2VyciIsICJ0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAiX19hd2FpdCIsICJfX2FzeW5jRGVsZWdhdG9yIiwgIl9fYXN5bmNWYWx1ZXMiLCAic3VjY2Vzc0NhbGxiYWNrIiwgImZhaWx1cmVDYWxsYmFjayIsICJyZXN1bHQiLCAiZXJyQXN5bmMiLCAib2tBc3luYyIsICJlcnIiLCAiZnJvbVByb21pc2UiLCAiZnJvbVNhZmVQcm9taXNlIiwgImZyb21Bc3luY1Rocm93YWJsZSIsICJjb21iaW5lUmVzdWx0TGlzdCIsICJyZXN1bHRMaXN0IiwgImFjYyIsICJsaXN0IiwgImNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyIsICJSZXN1bHQiLCAiZnJvbVRocm93YWJsZSIsICJjb21iaW5lIiwgImNvbWJpbmVXaXRoQWxsRXJyb3JzIiwgIk9rIiwgInZhbHVlIiwgImYiLCAib2siLCAiX2YiLCAiX3ZhbHVlIiwgIlJlc3VsdEFzeW5jIiwgIl92IiwgIl9lcnIiLCAiXyIsICJjb25maWciLCAiY3JlYXRlTmV2ZXJUaHJvd0Vycm9yIiwgIkVyciIsICJlcnJvciIsICJlcnIiLCAiZXJyQXN5bmMiLCAidiIsICJfb2siLCAic2VsZiIsICJmcm9tVGhyb3dhYmxlIiwgIlJlc3VsdCIsICJCYXNlRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgImNhdXNlIiwgImNvbnRleHQiLCAiX19wdWJsaWNGaWVsZCIsICJXZWJTb2NrZXRFcnJvciIsICJCYXNlRXJyb3IiLCAiV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yIiwgIldlYlNvY2tldEVycm9yIiwgIl9fcHVibGljRmllbGQiLCAiZW5zdXJlRXJyb3IiLCAidmFsdWUiLCAic3RyaW5naWZpZWQiLCAiaW1wb3J0X2V2ZW50cyIsICJldmVudHMiLCAiRXZlbnRFbWl0dGVyIiwgInVwZGF0ZUZpbGUiLCAibHVmaUZpbGUiLCAiYXJncyIsICJpbml0IiwgImV2ZW50cyIsICJlcnJvciIsICJFbmNvZGluZyIsICJjaGFyc2V0IiwgIm5vUGFkZGluZyIsICJhYiIsICJsZW4iLCAidmlldyIsICJyZXMiLCAic3RyIiwgInZpZXdMZW4iLCAiZW5jMSIsICJlbmMyIiwgImVuYzMiLCAiZW5jNCIsICJpIiwgImoiLCAib2JqIiwgIkVuY29kaW5nIiwgIkRlY29kZSIsICJzdHIiLCAib2JqIiwgIm9iaiIsICJFbmNvZGluZyIsICJEZWNvZGUiLCAic3RyIiwgIm9iaiIsICJpbXBvcnRfbHVmaV9zamNsIiwgIkNyeXB0b0Vycm9yIiwgIkJhc2VFcnJvciIsICJEZWNyeXB0aW9uRXJyb3IiLCAiQ3J5cHRvRXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJkZWNyeXB0IiwgImtleSIsICJlbmNyeXB0ZWREYXRhIiwgImRhdGEiLCAib2tBc3luYyIsICJEZWNvZGUiLCAic2pjbCIsICJlcnJvciIsICJlcnJBc3luYyIsICJEZWNyeXB0aW9uRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiZGVjcnlwdCIsICJrZXkiLCAiZW5jcnlwdGVkIiwgImltcG9ydEtleSIsICJpbXBvcnRlZEtleSIsICJSZXN1bHRBc3luYyIsICJlcnJvciIsICJEZWNyeXB0aW9uRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiaW1wb3J0S2V5IiwgImtleSIsICJSZXN1bHRBc3luYyIsICJEZWNvZGUiLCAiZXJyb3IiLCAiQ3J5cHRvRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiZGVjcnlwdCIsICJrZXkiLCAidmFsdWUiLCAic29ja2V0cyIsICJNQVhfRVJST1JTIiwgIm9uQ2FuY2VsTWVzc2FnZSIsICJkYXRhIiwgImV2ZW50cyIsICJva0FzeW5jIiwgIm9uRG93bmxvYWRNZXNzYWdlIiwgInJlc3BvbnNlIiwgImx1ZmlGaWxlIiwgInJlc3VsdCIsICJtZXRhZGF0YVN0cmluZyIsICJtZXRhZGF0YSIsICJpc1NlcnZlckRvd25sb2FkQ2h1bmtTdWNjZXNzTWV0YWRhdGEiLCAiZGF0YVN0cmluZyIsICJlbmNyeXB0ZWREYXRhIiwgIkRlY29kZSIsICJkZWNyeXB0IiwgImRlY3J5cHRlZFBhcnQiLCAiYnVmZmVyIiwgInVwZGF0ZUZpbGUiLCAiZW5kRG93bmxvYWQiLCAiZXJyb3IiLCAiV2ViU29ja2V0RXJyb3IiLCAiZXJyQXN5bmMiLCAib25VcGxvYWRNZXNzYWdlIiwgIm9uTWVzc2FnZSIsICJlIiwgInRyeVBhcnNlSnNvbiIsICJjYWxsYmFjayIsICJpc0Nvbm5lY3RpbmciLCAic29ja2V0S2V5IiwgImlzU3Bhd25lZCIsICJkb3dubG9hZENodW5rIiwgImx1ZmlGaWxlIiwgImNodW5rTnVtYmVyIiwgIm1lc3NhZ2UiLCAic2VuZE1lc3NhZ2UiLCAiZG93bmxvYWRTb2NrZXRVcmwiLCAiZW5kRG93bmxvYWQiLCAic2VuZE1lc3NhZ2UiLCAic29ja2V0VXJsIiwgImx1ZmlGaWxlIiwgIm1lc3NhZ2UiLCAiaXNTcGF3bmVkIiwgInNvY2tldHMiLCAib2tBc3luYyIsICJzcGF3biIsICJlIiwgIm9uTWVzc2FnZSIsICJzb2NrZXRLZXkiLCAiZXJyb3JDb3VudCIsICJpc0Nvbm5lY3RpbmciLCAiZXZlbnRzIiwgIk1BWF9FUlJPUlMiLCAiZXJyQXN5bmMiLCAiV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yIiwgIndhaXRGb3JDb25uZWN0aW9uIiwgImVycm9yIiwgIlJlc3VsdEFzeW5jIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVuc3VyZUVycm9yIiwgImJ1aWxkU29ja2V0VXJsIiwgImluc3RhbmNlVXJsIiwgInBhdGhuYW1lIiwgInVybCIsICJkb3dubG9hZFNvY2tldFVybCIsICJsdWZpRmlsZSIsICJ0cnlQYXJzZUpzb24iLCAiZGF0YSIsICJwYXJzZWRPYmplY3QiLCAiaXNTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhIiwgIm1lc3NhZ2UiLCAiaXNJbml0aWF0ZWQiLCAiZXZlbnQiLCAiaW5pdCIsICJldmVudHMiLCAic29ja2V0cyIsICJkb3dubG9hZFNvY2tldFVybCIsICJyZXRyaWV2ZUluZm9zIiwgImVycm9yIiwgIndvcmtlck1lc3NhZ2UiLCAiZG93bmxvYWRDaHVuayJdCn0K
|