node-zlib.dev.js
322 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/** @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License */(function() {'use strict';function q(b){throw b;}var t=void 0,v=!0;var B="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array&&"undefined"!==typeof DataView;function G(b,a){this.index="number"===typeof a?a:0;this.m=0;this.buffer=b instanceof(B?Uint8Array:Array)?b:new (B?Uint8Array:Array)(32768);2*this.buffer.length<=this.index&&q(Error("invalid index"));this.buffer.length<=this.index&&this.f()}G.prototype.f=function(){var b=this.buffer,a,c=b.length,d=new (B?Uint8Array:Array)(c<<1);if(B)d.set(b);else for(a=0;a<c;++a)d[a]=b[a];return this.buffer=d};
G.prototype.d=function(b,a,c){var d=this.buffer,e=this.index,f=this.m,g=d[e],k;c&&1<a&&(b=8<a?(I[b&255]<<24|I[b>>>8&255]<<16|I[b>>>16&255]<<8|I[b>>>24&255])>>32-a:I[b]>>8-a);if(8>a+f)g=g<<a|b,f+=a;else for(k=0;k<a;++k)g=g<<1|b>>a-k-1&1,8===++f&&(f=0,d[e++]=I[g],g=0,e===d.length&&(d=this.f()));d[e]=g;this.buffer=d;this.m=f;this.index=e};G.prototype.finish=function(){var b=this.buffer,a=this.index,c;0<this.m&&(b[a]<<=8-this.m,b[a]=I[b[a]],a++);B?c=b.subarray(0,a):(b.length=a,c=b);return c};
var aa=new (B?Uint8Array:Array)(256),L;for(L=0;256>L;++L){for(var R=L,ba=R,ca=7,R=R>>>1;R;R>>>=1)ba<<=1,ba|=R&1,--ca;aa[L]=(ba<<ca&255)>>>0}var I=aa;function ha(b,a,c){var d,e="number"===typeof a?a:a=0,f="number"===typeof c?c:b.length;d=-1;for(e=f&7;e--;++a)d=d>>>8^S[(d^b[a])&255];for(e=f>>3;e--;a+=8)d=d>>>8^S[(d^b[a])&255],d=d>>>8^S[(d^b[a+1])&255],d=d>>>8^S[(d^b[a+2])&255],d=d>>>8^S[(d^b[a+3])&255],d=d>>>8^S[(d^b[a+4])&255],d=d>>>8^S[(d^b[a+5])&255],d=d>>>8^S[(d^b[a+6])&255],d=d>>>8^S[(d^b[a+7])&255];return(d^4294967295)>>>0}
var ia=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,
2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,
2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,
2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,
3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,
936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117],S=B?new Uint32Array(ia):ia;function ja(){};function ka(b){this.buffer=new (B?Uint16Array:Array)(2*b);this.length=0}ka.prototype.getParent=function(b){return 2*((b-2)/4|0)};ka.prototype.push=function(b,a){var c,d,e=this.buffer,f;c=this.length;e[this.length++]=a;for(e[this.length++]=b;0<c;)if(d=this.getParent(c),e[c]>e[d])f=e[c],e[c]=e[d],e[d]=f,f=e[c+1],e[c+1]=e[d+1],e[d+1]=f,c=d;else break;return this.length};
ka.prototype.pop=function(){var b,a,c=this.buffer,d,e,f;a=c[0];b=c[1];this.length-=2;c[0]=c[this.length];c[1]=c[this.length+1];for(f=0;;){e=2*f+2;if(e>=this.length)break;e+2<this.length&&c[e+2]>c[e]&&(e+=2);if(c[e]>c[f])d=c[f],c[f]=c[e],c[e]=d,d=c[f+1],c[f+1]=c[e+1],c[e+1]=d;else break;f=e}return{index:b,value:a,length:this.length}};function T(b){var a=b.length,c=0,d=Number.POSITIVE_INFINITY,e,f,g,k,h,m,r,p,l,n;for(p=0;p<a;++p)b[p]>c&&(c=b[p]),b[p]<d&&(d=b[p]);e=1<<c;f=new (B?Uint32Array:Array)(e);g=1;k=0;for(h=2;g<=c;){for(p=0;p<a;++p)if(b[p]===g){m=0;r=k;for(l=0;l<g;++l)m=m<<1|r&1,r>>=1;n=g<<16|p;for(l=m;l<e;l+=h)f[l]=n;++k}++g;k<<=1;h<<=1}return[f,c,d]};function na(b,a){this.k=oa;this.F=0;this.input=B&&b instanceof Array?new Uint8Array(b):b;this.b=0;a&&(a.lazy&&(this.F=a.lazy),"number"===typeof a.compressionType&&(this.k=a.compressionType),a.outputBuffer&&(this.a=B&&a.outputBuffer instanceof Array?new Uint8Array(a.outputBuffer):a.outputBuffer),"number"===typeof a.outputIndex&&(this.b=a.outputIndex));this.a||(this.a=new (B?Uint8Array:Array)(32768))}var oa=2,pa={NONE:0,L:1,t:oa,X:3},qa=[],U;
for(U=0;288>U;U++)switch(v){case 143>=U:qa.push([U+48,8]);break;case 255>=U:qa.push([U-144+400,9]);break;case 279>=U:qa.push([U-256+0,7]);break;case 287>=U:qa.push([U-280+192,8]);break;default:q("invalid literal: "+U)}
na.prototype.h=function(){var b,a,c,d,e=this.input;switch(this.k){case 0:c=0;for(d=e.length;c<d;){a=B?e.subarray(c,c+65535):e.slice(c,c+65535);c+=a.length;var f=a,g=c===d,k=t,h=t,m=t,r=t,p=t,l=this.a,n=this.b;if(B){for(l=new Uint8Array(this.a.buffer);l.length<=n+f.length+5;)l=new Uint8Array(l.length<<1);l.set(this.a)}k=g?1:0;l[n++]=k|0;h=f.length;m=~h+65536&65535;l[n++]=h&255;l[n++]=h>>>8&255;l[n++]=m&255;l[n++]=m>>>8&255;if(B)l.set(f,n),n+=f.length,l=l.subarray(0,n);else{r=0;for(p=f.length;r<p;++r)l[n++]=
f[r];l.length=n}this.b=n;this.a=l}break;case 1:var s=new G(B?new Uint8Array(this.a.buffer):this.a,this.b);s.d(1,1,v);s.d(1,2,v);var u=ra(this,e),w,C,x;w=0;for(C=u.length;w<C;w++)if(x=u[w],G.prototype.d.apply(s,qa[x]),256<x)s.d(u[++w],u[++w],v),s.d(u[++w],5),s.d(u[++w],u[++w],v);else if(256===x)break;this.a=s.finish();this.b=this.a.length;break;case oa:var D=new G(B?new Uint8Array(this.a.buffer):this.a,this.b),M,z,N,X,Y,qb=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],da,Fa,ea,Ga,la,ta=Array(19),
Ha,Z,ma,E,Ia;M=oa;D.d(1,1,v);D.d(M,2,v);z=ra(this,e);da=sa(this.U,15);Fa=ua(da);ea=sa(this.T,7);Ga=ua(ea);for(N=286;257<N&&0===da[N-1];N--);for(X=30;1<X&&0===ea[X-1];X--);var Ja=N,Ka=X,K=new (B?Uint32Array:Array)(Ja+Ka),y,O,A,fa,J=new (B?Uint32Array:Array)(316),H,F,P=new (B?Uint8Array:Array)(19);for(y=O=0;y<Ja;y++)K[O++]=da[y];for(y=0;y<Ka;y++)K[O++]=ea[y];if(!B){y=0;for(fa=P.length;y<fa;++y)P[y]=0}y=H=0;for(fa=K.length;y<fa;y+=O){for(O=1;y+O<fa&&K[y+O]===K[y];++O);A=O;if(0===K[y])if(3>A)for(;0<A--;)J[H++]=
0,P[0]++;else for(;0<A;)F=138>A?A:138,F>A-3&&F<A&&(F=A-3),10>=F?(J[H++]=17,J[H++]=F-3,P[17]++):(J[H++]=18,J[H++]=F-11,P[18]++),A-=F;else if(J[H++]=K[y],P[K[y]]++,A--,3>A)for(;0<A--;)J[H++]=K[y],P[K[y]]++;else for(;0<A;)F=6>A?A:6,F>A-3&&F<A&&(F=A-3),J[H++]=16,J[H++]=F-3,P[16]++,A-=F}b=B?J.subarray(0,H):J.slice(0,H);la=sa(P,7);for(E=0;19>E;E++)ta[E]=la[qb[E]];for(Y=19;4<Y&&0===ta[Y-1];Y--);Ha=ua(la);D.d(N-257,5,v);D.d(X-1,5,v);D.d(Y-4,4,v);for(E=0;E<Y;E++)D.d(ta[E],3,v);E=0;for(Ia=b.length;E<Ia;E++)if(Z=
b[E],D.d(Ha[Z],la[Z],v),16<=Z){E++;switch(Z){case 16:ma=2;break;case 17:ma=3;break;case 18:ma=7;break;default:q("invalid code: "+Z)}D.d(b[E],ma,v)}var La=[Fa,da],Ma=[Ga,ea],Q,Na,ga,wa,Oa,Pa,Qa,Ra;Oa=La[0];Pa=La[1];Qa=Ma[0];Ra=Ma[1];Q=0;for(Na=z.length;Q<Na;++Q)if(ga=z[Q],D.d(Oa[ga],Pa[ga],v),256<ga)D.d(z[++Q],z[++Q],v),wa=z[++Q],D.d(Qa[wa],Ra[wa],v),D.d(z[++Q],z[++Q],v);else if(256===ga)break;this.a=D.finish();this.b=this.a.length;break;default:q("invalid compression type")}return this.a};
function va(b,a){this.length=b;this.N=a}
var xa=function(){function b(a){switch(v){case 3===a:return[257,a-3,0];case 4===a:return[258,a-4,0];case 5===a:return[259,a-5,0];case 6===a:return[260,a-6,0];case 7===a:return[261,a-7,0];case 8===a:return[262,a-8,0];case 9===a:return[263,a-9,0];case 10===a:return[264,a-10,0];case 12>=a:return[265,a-11,1];case 14>=a:return[266,a-13,1];case 16>=a:return[267,a-15,1];case 18>=a:return[268,a-17,1];case 22>=a:return[269,a-19,2];case 26>=a:return[270,a-23,2];case 30>=a:return[271,a-27,2];case 34>=a:return[272,
a-31,2];case 42>=a:return[273,a-35,3];case 50>=a:return[274,a-43,3];case 58>=a:return[275,a-51,3];case 66>=a:return[276,a-59,3];case 82>=a:return[277,a-67,4];case 98>=a:return[278,a-83,4];case 114>=a:return[279,a-99,4];case 130>=a:return[280,a-115,4];case 162>=a:return[281,a-131,5];case 194>=a:return[282,a-163,5];case 226>=a:return[283,a-195,5];case 257>=a:return[284,a-227,5];case 258===a:return[285,a-258,0];default:q("invalid length: "+a)}}var a=[],c,d;for(c=3;258>=c;c++)d=b(c),a[c]=d[2]<<24|d[1]<<
16|d[0];return a}(),ya=B?new Uint32Array(xa):xa;
function ra(b,a){function c(a,c){var b=a.N,d=[],f=0,e;e=ya[a.length];d[f++]=e&65535;d[f++]=e>>16&255;d[f++]=e>>24;var g;switch(v){case 1===b:g=[0,b-1,0];break;case 2===b:g=[1,b-2,0];break;case 3===b:g=[2,b-3,0];break;case 4===b:g=[3,b-4,0];break;case 6>=b:g=[4,b-5,1];break;case 8>=b:g=[5,b-7,1];break;case 12>=b:g=[6,b-9,2];break;case 16>=b:g=[7,b-13,2];break;case 24>=b:g=[8,b-17,3];break;case 32>=b:g=[9,b-25,3];break;case 48>=b:g=[10,b-33,4];break;case 64>=b:g=[11,b-49,4];break;case 96>=b:g=[12,b-
65,5];break;case 128>=b:g=[13,b-97,5];break;case 192>=b:g=[14,b-129,6];break;case 256>=b:g=[15,b-193,6];break;case 384>=b:g=[16,b-257,7];break;case 512>=b:g=[17,b-385,7];break;case 768>=b:g=[18,b-513,8];break;case 1024>=b:g=[19,b-769,8];break;case 1536>=b:g=[20,b-1025,9];break;case 2048>=b:g=[21,b-1537,9];break;case 3072>=b:g=[22,b-2049,10];break;case 4096>=b:g=[23,b-3073,10];break;case 6144>=b:g=[24,b-4097,11];break;case 8192>=b:g=[25,b-6145,11];break;case 12288>=b:g=[26,b-8193,12];break;case 16384>=
b:g=[27,b-12289,12];break;case 24576>=b:g=[28,b-16385,13];break;case 32768>=b:g=[29,b-24577,13];break;default:q("invalid distance")}e=g;d[f++]=e[0];d[f++]=e[1];d[f++]=e[2];var h,k;h=0;for(k=d.length;h<k;++h)l[n++]=d[h];u[d[0]]++;w[d[3]]++;s=a.length+c-1;p=null}var d,e,f,g,k,h={},m,r,p,l=B?new Uint16Array(2*a.length):[],n=0,s=0,u=new (B?Uint32Array:Array)(286),w=new (B?Uint32Array:Array)(30),C=b.F,x;if(!B){for(f=0;285>=f;)u[f++]=0;for(f=0;29>=f;)w[f++]=0}u[256]=1;d=0;for(e=a.length;d<e;++d){f=k=0;
for(g=3;f<g&&d+f!==e;++f)k=k<<8|a[d+f];h[k]===t&&(h[k]=[]);m=h[k];if(!(0<s--)){for(;0<m.length&&32768<d-m[0];)m.shift();if(d+3>=e){p&&c(p,-1);f=0;for(g=e-d;f<g;++f)x=a[d+f],l[n++]=x,++u[x];break}0<m.length?(r=za(a,d,m),p?p.length<r.length?(x=a[d-1],l[n++]=x,++u[x],c(r,0)):c(p,-1):r.length<C?p=r:c(r,0)):p?c(p,-1):(x=a[d],l[n++]=x,++u[x])}m.push(d)}l[n++]=256;u[256]++;b.U=u;b.T=w;return B?l.subarray(0,n):l}
function za(b,a,c){var d,e,f=0,g,k,h,m,r=b.length;k=0;m=c.length;a:for(;k<m;k++){d=c[m-k-1];g=3;if(3<f){for(h=f;3<h;h--)if(b[d+h-1]!==b[a+h-1])continue a;g=f}for(;258>g&&a+g<r&&b[d+g]===b[a+g];)++g;g>f&&(e=d,f=g);if(258===g)break}return new va(f,a-e)}
function sa(b,a){var c=b.length,d=new ka(572),e=new (B?Uint8Array:Array)(c),f,g,k,h,m;if(!B)for(h=0;h<c;h++)e[h]=0;for(h=0;h<c;++h)0<b[h]&&d.push(h,b[h]);f=Array(d.length/2);g=new (B?Uint32Array:Array)(d.length/2);if(1===f.length)return e[d.pop().index]=1,e;h=0;for(m=d.length/2;h<m;++h)f[h]=d.pop(),g[h]=f[h].value;k=Aa(g,g.length,a);h=0;for(m=f.length;h<m;++h)e[f[h].index]=k[h];return e}
function Aa(b,a,c){function d(b){var c=h[b][m[b]];c===a?(d(b+1),d(b+1)):--g[c];++m[b]}var e=new (B?Uint16Array:Array)(c),f=new (B?Uint8Array:Array)(c),g=new (B?Uint8Array:Array)(a),k=Array(c),h=Array(c),m=Array(c),r=(1<<c)-a,p=1<<c-1,l,n,s,u,w;e[c-1]=a;for(n=0;n<c;++n)r<p?f[n]=0:(f[n]=1,r-=p),r<<=1,e[c-2-n]=(e[c-1-n]/2|0)+a;e[0]=f[0];k[0]=Array(e[0]);h[0]=Array(e[0]);for(n=1;n<c;++n)e[n]>2*e[n-1]+f[n]&&(e[n]=2*e[n-1]+f[n]),k[n]=Array(e[n]),h[n]=Array(e[n]);for(l=0;l<a;++l)g[l]=c;for(s=0;s<e[c-1];++s)k[c-
1][s]=b[s],h[c-1][s]=s;for(l=0;l<c;++l)m[l]=0;1===f[c-1]&&(--g[0],++m[c-1]);for(n=c-2;0<=n;--n){u=l=0;w=m[n+1];for(s=0;s<e[n];s++)u=k[n+1][w]+k[n+1][w+1],u>b[l]?(k[n][s]=u,h[n][s]=a,w+=2):(k[n][s]=b[l],h[n][s]=l,++l);m[n]=0;1===f[n]&&d(n)}return g}
function ua(b){var a=new (B?Uint16Array:Array)(b.length),c=[],d=[],e=0,f,g,k,h;f=0;for(g=b.length;f<g;f++)c[b[f]]=(c[b[f]]|0)+1;f=1;for(g=16;f<=g;f++)d[f]=e,e+=c[f]|0,e<<=1;f=0;for(g=b.length;f<g;f++){e=d[b[f]];d[b[f]]+=1;k=a[f]=0;for(h=b[f];k<h;k++)a[f]=a[f]<<1|e&1,e>>>=1}return a};function Ba(b,a){this.input=b;this.b=this.c=0;this.g={};a&&(a.flags&&(this.g=a.flags),"string"===typeof a.filename&&(this.filename=a.filename),"string"===typeof a.comment&&(this.w=a.comment),a.deflateOptions&&(this.l=a.deflateOptions));this.l||(this.l={})}
Ba.prototype.h=function(){var b,a,c,d,e,f,g,k,h=new (B?Uint8Array:Array)(32768),m=0,r=this.input,p=this.c,l=this.filename,n=this.w;h[m++]=31;h[m++]=139;h[m++]=8;b=0;this.g.fname&&(b|=Ca);this.g.fcomment&&(b|=Da);this.g.fhcrc&&(b|=Ea);h[m++]=b;a=(Date.now?Date.now():+new Date)/1E3|0;h[m++]=a&255;h[m++]=a>>>8&255;h[m++]=a>>>16&255;h[m++]=a>>>24&255;h[m++]=0;h[m++]=Sa;if(this.g.fname!==t){g=0;for(k=l.length;g<k;++g)f=l.charCodeAt(g),255<f&&(h[m++]=f>>>8&255),h[m++]=f&255;h[m++]=0}if(this.g.comment){g=
0;for(k=n.length;g<k;++g)f=n.charCodeAt(g),255<f&&(h[m++]=f>>>8&255),h[m++]=f&255;h[m++]=0}this.g.fhcrc&&(c=ha(h,0,m)&65535,h[m++]=c&255,h[m++]=c>>>8&255);this.l.outputBuffer=h;this.l.outputIndex=m;e=new na(r,this.l);h=e.h();m=e.b;B&&(m+8>h.buffer.byteLength?(this.a=new Uint8Array(m+8),this.a.set(new Uint8Array(h.buffer)),h=this.a):h=new Uint8Array(h.buffer));d=ha(r,t,t);h[m++]=d&255;h[m++]=d>>>8&255;h[m++]=d>>>16&255;h[m++]=d>>>24&255;k=r.length;h[m++]=k&255;h[m++]=k>>>8&255;h[m++]=k>>>16&255;h[m++]=
k>>>24&255;this.c=p;B&&m<h.length&&(this.a=h=h.subarray(0,m));return h};var Sa=255,Ea=2,Ca=8,Da=16;function V(b,a){this.o=[];this.p=32768;this.e=this.j=this.c=this.s=0;this.input=B?new Uint8Array(b):b;this.u=!1;this.q=Ta;this.K=!1;if(a||!(a={}))a.index&&(this.c=a.index),a.bufferSize&&(this.p=a.bufferSize),a.bufferType&&(this.q=a.bufferType),a.resize&&(this.K=a.resize);switch(this.q){case Ua:this.b=32768;this.a=new (B?Uint8Array:Array)(32768+this.p+258);break;case Ta:this.b=0;this.a=new (B?Uint8Array:Array)(this.p);this.f=this.S;this.z=this.O;this.r=this.Q;break;default:q(Error("invalid inflate mode"))}}
var Ua=0,Ta=1;
V.prototype.i=function(){for(;!this.u;){var b=W(this,3);b&1&&(this.u=v);b>>>=1;switch(b){case 0:var a=this.input,c=this.c,d=this.a,e=this.b,f=a.length,g=t,k=t,h=d.length,m=t;this.e=this.j=0;c+1>=f&&q(Error("invalid uncompressed block header: LEN"));g=a[c++]|a[c++]<<8;c+1>=f&&q(Error("invalid uncompressed block header: NLEN"));k=a[c++]|a[c++]<<8;g===~k&&q(Error("invalid uncompressed block header: length verify"));c+g>a.length&&q(Error("input buffer is broken"));switch(this.q){case Ua:for(;e+g>d.length;){m=
h-e;g-=m;if(B)d.set(a.subarray(c,c+m),e),e+=m,c+=m;else for(;m--;)d[e++]=a[c++];this.b=e;d=this.f();e=this.b}break;case Ta:for(;e+g>d.length;)d=this.f({B:2});break;default:q(Error("invalid inflate mode"))}if(B)d.set(a.subarray(c,c+g),e),e+=g,c+=g;else for(;g--;)d[e++]=a[c++];this.c=c;this.b=e;this.a=d;break;case 1:this.r(Va,Wa);break;case 2:for(var r=W(this,5)+257,p=W(this,5)+1,l=W(this,4)+4,n=new (B?Uint8Array:Array)(Xa.length),s=t,u=t,w=t,C=t,x=t,D=t,M=t,z=t,N=t,z=0;z<l;++z)n[Xa[z]]=W(this,3);if(!B){z=
l;for(l=n.length;z<l;++z)n[Xa[z]]=0}s=T(n);C=new (B?Uint8Array:Array)(r+p);z=0;for(N=r+p;z<N;)switch(x=Ya(this,s),x){case 16:for(M=3+W(this,2);M--;)C[z++]=D;break;case 17:for(M=3+W(this,3);M--;)C[z++]=0;D=0;break;case 18:for(M=11+W(this,7);M--;)C[z++]=0;D=0;break;default:D=C[z++]=x}u=B?T(C.subarray(0,r)):T(C.slice(0,r));w=B?T(C.subarray(r)):T(C.slice(r));this.r(u,w);break;default:q(Error("unknown BTYPE: "+b))}}return this.z()};
var Za=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Xa=B?new Uint16Array(Za):Za,$a=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],ab=B?new Uint16Array($a):$a,bb=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],cb=B?new Uint8Array(bb):bb,db=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],eb=B?new Uint16Array(db):db,fb=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,
10,11,11,12,12,13,13],gb=B?new Uint8Array(fb):fb,hb=new (B?Uint8Array:Array)(288),$,ib;$=0;for(ib=hb.length;$<ib;++$)hb[$]=143>=$?8:255>=$?9:279>=$?7:8;var Va=T(hb),jb=new (B?Uint8Array:Array)(30),kb,lb;kb=0;for(lb=jb.length;kb<lb;++kb)jb[kb]=5;var Wa=T(jb);function W(b,a){for(var c=b.j,d=b.e,e=b.input,f=b.c,g=e.length,k;d<a;)f>=g&&q(Error("input buffer is broken")),c|=e[f++]<<d,d+=8;k=c&(1<<a)-1;b.j=c>>>a;b.e=d-a;b.c=f;return k}
function Ya(b,a){for(var c=b.j,d=b.e,e=b.input,f=b.c,g=e.length,k=a[0],h=a[1],m,r;d<h&&!(f>=g);)c|=e[f++]<<d,d+=8;m=k[c&(1<<h)-1];r=m>>>16;r>d&&q(Error("invalid code length: "+r));b.j=c>>r;b.e=d-r;b.c=f;return m&65535}
V.prototype.r=function(b,a){var c=this.a,d=this.b;this.A=b;for(var e=c.length-258,f,g,k,h;256!==(f=Ya(this,b));)if(256>f)d>=e&&(this.b=d,c=this.f(),d=this.b),c[d++]=f;else{g=f-257;h=ab[g];0<cb[g]&&(h+=W(this,cb[g]));f=Ya(this,a);k=eb[f];0<gb[f]&&(k+=W(this,gb[f]));d>=e&&(this.b=d,c=this.f(),d=this.b);for(;h--;)c[d]=c[d++-k]}for(;8<=this.e;)this.e-=8,this.c--;this.b=d};
V.prototype.Q=function(b,a){var c=this.a,d=this.b;this.A=b;for(var e=c.length,f,g,k,h;256!==(f=Ya(this,b));)if(256>f)d>=e&&(c=this.f(),e=c.length),c[d++]=f;else{g=f-257;h=ab[g];0<cb[g]&&(h+=W(this,cb[g]));f=Ya(this,a);k=eb[f];0<gb[f]&&(k+=W(this,gb[f]));d+h>e&&(c=this.f(),e=c.length);for(;h--;)c[d]=c[d++-k]}for(;8<=this.e;)this.e-=8,this.c--;this.b=d};
V.prototype.f=function(){var b=new (B?Uint8Array:Array)(this.b-32768),a=this.b-32768,c,d,e=this.a;if(B)b.set(e.subarray(32768,b.length));else{c=0;for(d=b.length;c<d;++c)b[c]=e[c+32768]}this.o.push(b);this.s+=b.length;if(B)e.set(e.subarray(a,a+32768));else for(c=0;32768>c;++c)e[c]=e[a+c];this.b=32768;return e};
V.prototype.S=function(b){var a,c=this.input.length/this.c+1|0,d,e,f,g=this.input,k=this.a;b&&("number"===typeof b.B&&(c=b.B),"number"===typeof b.M&&(c+=b.M));2>c?(d=(g.length-this.c)/this.A[2],f=258*(d/2)|0,e=f<k.length?k.length+f:k.length<<1):e=k.length*c;B?(a=new Uint8Array(e),a.set(k)):a=k;return this.a=a};
V.prototype.z=function(){var b=0,a=this.a,c=this.o,d,e=new (B?Uint8Array:Array)(this.s+(this.b-32768)),f,g,k,h;if(0===c.length)return B?this.a.subarray(32768,this.b):this.a.slice(32768,this.b);f=0;for(g=c.length;f<g;++f){d=c[f];k=0;for(h=d.length;k<h;++k)e[b++]=d[k]}f=32768;for(g=this.b;f<g;++f)e[b++]=a[f];this.o=[];return this.buffer=e};
V.prototype.O=function(){var b,a=this.b;B?this.K?(b=new Uint8Array(a),b.set(this.a.subarray(0,a))):b=this.a.subarray(0,a):(this.a.length>a&&(this.a.length=a),b=this.a);return this.buffer=b};function mb(b){this.input=b;this.c=0;this.G=[];this.R=!1}
mb.prototype.i=function(){for(var b=this.input.length;this.c<b;){var a=new ja,c=t,d=t,e=t,f=t,g=t,k=t,h=t,m=t,r=t,p=this.input,l=this.c;a.C=p[l++];a.D=p[l++];(31!==a.C||139!==a.D)&&q(Error("invalid file signature:"+a.C+","+a.D));a.v=p[l++];switch(a.v){case 8:break;default:q(Error("unknown compression method: "+a.v))}a.n=p[l++];m=p[l++]|p[l++]<<8|p[l++]<<16|p[l++]<<24;a.$=new Date(1E3*m);a.ba=p[l++];a.aa=p[l++];0<(a.n&4)&&(a.W=p[l++]|p[l++]<<8,l+=a.W);if(0<(a.n&Ca)){h=[];for(k=0;0<(g=p[l++]);)h[k++]=
String.fromCharCode(g);a.name=h.join("")}if(0<(a.n&Da)){h=[];for(k=0;0<(g=p[l++]);)h[k++]=String.fromCharCode(g);a.w=h.join("")}0<(a.n&Ea)&&(a.P=ha(p,0,l)&65535,a.P!==(p[l++]|p[l++]<<8)&&q(Error("invalid header crc16")));c=p[p.length-4]|p[p.length-3]<<8|p[p.length-2]<<16|p[p.length-1]<<24;p.length-l-4-4<512*c&&(f=c);d=new V(p,{index:l,bufferSize:f});a.data=e=d.i();l=d.c;a.Y=r=(p[l++]|p[l++]<<8|p[l++]<<16|p[l++]<<24)>>>0;ha(e,t,t)!==r&&q(Error("invalid CRC-32 checksum: 0x"+ha(e,t,t).toString(16)+" / 0x"+
r.toString(16)));a.Z=c=(p[l++]|p[l++]<<8|p[l++]<<16|p[l++]<<24)>>>0;(e.length&4294967295)!==c&&q(Error("invalid input size: "+(e.length&4294967295)+" / "+c));this.G.push(a);this.c=l}this.R=v;var n=this.G,s,u,w=0,C=0,x;s=0;for(u=n.length;s<u;++s)C+=n[s].data.length;if(B){x=new Uint8Array(C);for(s=0;s<u;++s)x.set(n[s].data,w),w+=n[s].data.length}else{x=[];for(s=0;s<u;++s)x[s]=n[s].data;x=Array.prototype.concat.apply([],x)}return x};function nb(b){if("string"===typeof b){var a=b.split(""),c,d;c=0;for(d=a.length;c<d;c++)a[c]=(a[c].charCodeAt(0)&255)>>>0;b=a}for(var e=1,f=0,g=b.length,k,h=0;0<g;){k=1024<g?1024:g;g-=k;do e+=b[h++],f+=e;while(--k);e%=65521;f%=65521}return(f<<16|e)>>>0};function ob(b,a){var c,d;this.input=b;this.c=0;if(a||!(a={}))a.index&&(this.c=a.index),a.verify&&(this.V=a.verify);c=b[this.c++];d=b[this.c++];switch(c&15){case pb:this.method=pb;break;default:q(Error("unsupported compression method"))}0!==((c<<8)+d)%31&&q(Error("invalid fcheck flag:"+((c<<8)+d)%31));d&32&&q(Error("fdict flag is not supported"));this.J=new V(b,{index:this.c,bufferSize:a.bufferSize,bufferType:a.bufferType,resize:a.resize})}
ob.prototype.i=function(){var b=this.input,a,c;a=this.J.i();this.c=this.J.c;this.V&&(c=(b[this.c++]<<24|b[this.c++]<<16|b[this.c++]<<8|b[this.c++])>>>0,c!==nb(a)&&q(Error("invalid adler-32 checksum")));return a};var pb=8;function rb(b,a){this.input=b;this.a=new (B?Uint8Array:Array)(32768);this.k=sb.t;var c={},d;if((a||!(a={}))&&"number"===typeof a.compressionType)this.k=a.compressionType;for(d in a)c[d]=a[d];c.outputBuffer=this.a;this.I=new na(this.input,c)}var sb=pa;
rb.prototype.h=function(){var b,a,c,d,e,f,g,k=0;g=this.a;b=pb;switch(b){case pb:a=Math.LOG2E*Math.log(32768)-8;break;default:q(Error("invalid compression method"))}c=a<<4|b;g[k++]=c;switch(b){case pb:switch(this.k){case sb.NONE:e=0;break;case sb.L:e=1;break;case sb.t:e=2;break;default:q(Error("unsupported compression type"))}break;default:q(Error("invalid compression method"))}d=e<<6|0;g[k++]=d|31-(256*c+d)%31;f=nb(this.input);this.I.b=k;g=this.I.h();k=g.length;B&&(g=new Uint8Array(g.buffer),g.length<=
k+4&&(this.a=new Uint8Array(g.length+4),this.a.set(g),g=this.a),g=g.subarray(0,k+4));g[k++]=f>>24&255;g[k++]=f>>16&255;g[k++]=f>>8&255;g[k++]=f&255;return g};exports.deflate=tb;exports.deflateSync=ub;exports.inflate=vb;exports.inflateSync=wb;exports.gzip=xb;exports.gzipSync=yb;exports.gunzip=zb;exports.gunzipSync=Ab;function tb(b,a,c){process.nextTick(function(){var d,e;try{e=ub(b,c)}catch(f){d=f}a(d,e)})}function ub(b,a){var c;c=(new rb(b)).h();a||(a={});return a.H?c:Bb(c)}function vb(b,a,c){process.nextTick(function(){var d,e;try{e=wb(b,c)}catch(f){d=f}a(d,e)})}
function wb(b,a){var c;b.subarray=b.slice;c=(new ob(b)).i();a||(a={});return a.noBuffer?c:Bb(c)}function xb(b,a,c){process.nextTick(function(){var d,e;try{e=yb(b,c)}catch(f){d=f}a(d,e)})}function yb(b,a){var c;b.subarray=b.slice;c=(new Ba(b)).h();a||(a={});return a.H?c:Bb(c)}function zb(b,a,c){process.nextTick(function(){var d,e;try{e=Ab(b,c)}catch(f){d=f}a(d,e)})}function Ab(b,a){var c;b.subarray=b.slice;c=(new mb(b)).i();a||(a={});return a.H?c:Bb(c)}
function Bb(b){var a=new Buffer(b.length),c,d;c=0;for(d=b.length;c<d;++c)a[c]=b[c];return a};}).call(this);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QSxDQUFZdVIsQ0FBQSxDQUFNdlIsQ0FBTixDQUdkLE9BQU9iLEVBVmdCOyIsInNvdXJjZXMiOlsiY2xvc3VyZS1wcmltaXRpdmVzL2Jhc2UuanMiLCJkZWZpbmUvdHlwZWRhcnJheS9oeWJyaWQuanMiLCJzcmMvYml0c3RyZWFtLmpzIiwic3JjL2NyYzMyLmpzIiwic3JjL2d1bnppcF9tZW1iZXIuanMiLCJzcmMvaGVhcC5qcyIsInNyYy9odWZmbWFuLmpzIiwic3JjL3Jhd2RlZmxhdGUuanMiLCJzcmMvZ3ppcC5qcyIsInNyYy9yYXdpbmZsYXRlLmpzIiwic3JjL2d1bnppcC5qcyIsInNyYy9hZGxlcjMyLmpzIiwic3JjL3V0aWwuanMiLCJzcmMvaW5mbGF0ZS5qcyIsInNyYy96bGliLmpzIiwic3JjL2RlZmxhdGUuanMiLCJub2RlL2V4cG9ydHMuanMiXSwibmFtZXMiOlsiVVNFX1RZUEVEQVJSQVkiLCJVaW50OEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIkRhdGFWaWV3IiwiWmxpYi5CaXRTdHJlYW0iLCJidWZmZXIiLCJidWZmZXJQb3NpdGlvbiIsImluZGV4IiwiYml0aW5kZXgiLCJBcnJheSIsIlpsaWIuQml0U3RyZWFtLkRlZmF1bHRCbG9ja1NpemUiLCJsZW5ndGgiLCJKU0NvbXBpbGVyX2FsaWFzX1RIUk9XIiwiRXJyb3IiLCJleHBhbmRCdWZmZXIiLCJwcm90b3R5cGUiLCJabGliLkJpdFN0cmVhbS5wcm90b3R5cGUuZXhwYW5kQnVmZmVyIiwib2xkYnVmIiwiaSIsImlsIiwic2V0Iiwid3JpdGVCaXRzIiwiWmxpYi5CaXRTdHJlYW0ucHJvdG90eXBlLndyaXRlQml0cyIsIm51bWJlciIsIm4iLCJyZXZlcnNlIiwiY3VycmVudCIsIlpsaWIuQml0U3RyZWFtLlJldmVyc2VUYWJsZSIsImZpbmlzaCIsIlpsaWIuQml0U3RyZWFtLnByb3RvdHlwZS5maW5pc2giLCJvdXRwdXQiLCJzdWJhcnJheSIsInRhYmxlIiwiciIsInMiLCJabGliLkNSQzMyLnVwZGF0ZSIsImRhdGEiLCJwb3MiLCJjcmMiLCJabGliLkNSQzMyLlRhYmxlIiwiWmxpYi5DUkMzMi5UYWJsZV8iLCJabGliLkd1bnppcE1lbWJlciIsIlpsaWIuSGVhcCIsImdldFBhcmVudCIsIlpsaWIuSGVhcC5wcm90b3R5cGUuZ2V0UGFyZW50IiwicHVzaCIsIlpsaWIuSGVhcC5wcm90b3R5cGUucHVzaCIsInZhbHVlIiwicGFyZW50IiwiaGVhcCIsInN3YXAiLCJwb3AiLCJabGliLkhlYXAucHJvdG90eXBlLnBvcCIsIlpsaWIuSHVmZm1hbi5idWlsZEh1ZmZtYW5UYWJsZSIsImxlbmd0aHMiLCJsaXN0U2l6ZSIsIm1heENvZGVMZW5ndGgiLCJtaW5Db2RlTGVuZ3RoIiwiTnVtYmVyIiwiUE9TSVRJVkVfSU5GSU5JVFkiLCJzaXplIiwiYml0TGVuZ3RoIiwiY29kZSIsInNraXAiLCJyZXZlcnNlZCIsInJ0ZW1wIiwiaiIsIlpsaWIuUmF3RGVmbGF0ZSIsImlucHV0Iiwib3B0X3BhcmFtcyIsImNvbXByZXNzaW9uVHlwZSIsIlpsaWIuUmF3RGVmbGF0ZS5Db21wcmVzc2lvblR5cGUuRFlOQU1JQyIsImxhenkiLCJvcCIsIkRZTkFNSUMiLCJabGliLlJhd0RlZmxhdGUuQ29tcHJlc3Npb25UeXBlIiwiTk9ORSIsIkZJWEVEIiwiUkVTRVJWRUQiLCJKU0NvbXBpbGVyX2FsaWFzX1RSVUUiLCJjb21wcmVzcyIsIlpsaWIuUmF3RGVmbGF0ZS5wcm90b3R5cGUuY29tcHJlc3MiLCJibG9ja0FycmF5IiwicG9zaXRpb24iLCJzbGljZSIsImJmaW5hbCIsIkpTQ29tcGlsZXJfYWxpYXNfVk9JRCIsImxlbiIsIm5sZW4iLCJtYWtlTm9jb21wcmVzc0Jsb2NrIiwiaXNGaW5hbEJsb2NrIiwic3RyZWFtIiwibWFrZUZpeGVkSHVmZm1hbkJsb2NrIiwibHo3NyIsImxpdGVyYWwiLCJkYXRhQXJyYXkiLCJhcHBseSIsIm1ha2VEeW5hbWljSHVmZm1hbkJsb2NrIiwiYnR5cGUiLCJobGl0IiwiaGRpc3QiLCJoY2xlbiIsImhjbGVuT3JkZXIiLCJsaXRMZW5MZW5ndGhzIiwibGl0TGVuQ29kZXMiLCJkaXN0TGVuZ3RocyIsImRpc3RDb2RlcyIsInRyZWVMZW5ndGhzIiwidHJhbnNMZW5ndGhzIiwidHJlZUNvZGVzIiwiYml0bGVuIiwiZ2V0TGVuZ3Roc18iLCJmcmVxc0xpdExlbiIsImdldENvZGVzRnJvbUxlbmd0aHNfIiwiZnJlcXNEaXN0Iiwic3JjIiwicnVuTGVuZ3RoIiwibCIsInJlc3VsdCIsIm5SZXN1bHQiLCJycHQiLCJmcmVxcyIsImNvZGVzIiwibGl0TGVuIiwiZGlzdCIsIlpsaWIuUmF3RGVmbGF0ZS5Mejc3TWF0Y2giLCJiYWNrd2FyZERpc3RhbmNlIiwiYyIsIlpsaWIuUmF3RGVmbGF0ZS5Mejc3TWF0Y2guTGVuZ3RoQ29kZVRhYmxlIiwiWmxpYi5SYXdEZWZsYXRlLnByb3RvdHlwZS5sejc3Iiwid3JpdGVNYXRjaCIsIm1hdGNoIiwib2Zmc2V0IiwiY29kZUFycmF5IiwibHo3N2J1ZiIsInNraXBMZW5ndGgiLCJwcmV2TWF0Y2giLCJtYXRjaEtleSIsIm1hdGNoTGlzdCIsImxvbmdlc3RNYXRjaCIsInRtcCIsIlpsaWIuUmF3RGVmbGF0ZS5Mejc3TWluTGVuZ3RoIiwiWmxpYi5SYXdEZWZsYXRlLldpbmRvd1NpemUiLCJzaGlmdCIsInNlYXJjaExvbmdlc3RNYXRjaF8iLCJabGliLlJhd0RlZmxhdGUucHJvdG90eXBlLnNlYXJjaExvbmdlc3RNYXRjaF8iLCJjdXJyZW50TWF0Y2giLCJtYXRjaE1heCIsIm1hdGNoTGVuZ3RoIiwiZGwiLCJabGliLlJhd0RlZmxhdGUuTHo3N01heExlbmd0aCIsIlpsaWIuUmF3RGVmbGF0ZS5wcm90b3R5cGUuZ2V0TGVuZ3Roc18iLCJsaW1pdCIsIm5TeW1ib2xzIiwibm9kZXMiLCJ2YWx1ZXMiLCJjb2RlTGVuZ3RoIiwicmV2ZXJzZVBhY2thZ2VNZXJnZV8iLCJabGliLlJhd0RlZmxhdGUucHJvdG90eXBlLnJldmVyc2VQYWNrYWdlTWVyZ2VfIiwic3ltYm9scyIsInRha2VQYWNrYWdlIiwieCIsInR5cGUiLCJjdXJyZW50UG9zaXRpb24iLCJtaW5pbXVtQ29zdCIsImZsYWciLCJleGNlc3MiLCJoYWxmIiwidCIsIndlaWdodCIsIm5leHQiLCJabGliLlJhd0RlZmxhdGUucHJvdG90eXBlLmdldENvZGVzRnJvbUxlbmd0aHNfIiwiY291bnQiLCJzdGFydENvZGUiLCJtIiwiWmxpYi5SYXdEZWZsYXRlLk1heENvZGVMZW5ndGgiLCJabGliLkd6aXAiLCJpcCIsImZsYWdzIiwiZmlsZW5hbWUiLCJjb21tZW50IiwiZGVmbGF0ZU9wdGlvbnMiLCJabGliLkd6aXAucHJvdG90eXBlLmNvbXByZXNzIiwiZmxnIiwibXRpbWUiLCJjcmMxNiIsImNyYzMyIiwicmF3ZGVmbGF0ZSIsIlpsaWIuR3ppcC5EZWZhdWx0QnVmZmVyU2l6ZSIsIlpsaWIuR3ppcC5GbGFnc01hc2suRk5BTUUiLCJabGliLkd6aXAuRmxhZ3NNYXNrLkZDT01NRU5UIiwiWmxpYi5HemlwLkZsYWdzTWFzay5GSENSQyIsIkRhdGUiLCJub3ciLCJabGliLkd6aXAuT3BlcmF0aW5nU3lzdGVtLlVOS05PV04iLCJjaGFyQ29kZUF0IiwiYnl0ZUxlbmd0aCIsIlVOS05PV04iLCJGSENSQyIsIkZOQU1FIiwiRkNPTU1FTlQiLCJabGliLlJhd0luZmxhdGUiLCJibG9ja3MiLCJidWZmZXJTaXplIiwiWkxJQl9SQVdfSU5GTEFURV9CVUZGRVJfU0laRSIsImJpdHNidWZsZW4iLCJiaXRzYnVmIiwidG90YWxwb3MiLCJidWZmZXJUeXBlIiwiWmxpYi5SYXdJbmZsYXRlLkJ1ZmZlclR5cGUuQURBUFRJVkUiLCJyZXNpemUiLCJabGliLlJhd0luZmxhdGUuQnVmZmVyVHlwZS5CTE9DSyIsIlpsaWIuUmF3SW5mbGF0ZS5NYXhCYWNrd2FyZExlbmd0aCIsIlpsaWIuUmF3SW5mbGF0ZS5NYXhDb3B5TGVuZ3RoIiwiZXhwYW5kQnVmZmVyQWRhcHRpdmUiLCJjb25jYXRCdWZmZXIiLCJjb25jYXRCdWZmZXJEeW5hbWljIiwiZGVjb2RlSHVmZm1hbiIsImRlY29kZUh1ZmZtYW5BZGFwdGl2ZSIsIkJMT0NLIiwiQURBUFRJVkUiLCJkZWNvbXByZXNzIiwiWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5kZWNvbXByZXNzIiwiaGRyIiwicmVhZEJpdHMiLCJwYXJzZUJsb2NrIiwiaW5wdXRMZW5ndGgiLCJvbGVuZ3RoIiwicHJlQ29weSIsIlpsaWIuUmF3SW5mbGF0ZS5GaXhlZExpdGVyYWxMZW5ndGhUYWJsZSIsIlpsaWIuUmF3SW5mbGF0ZS5GaXhlZERpc3RhbmNlVGFibGUiLCJjb2RlTGVuZ3RocyIsIlpsaWIuUmF3SW5mbGF0ZS5PcmRlci5sZW5ndGgiLCJjb2RlTGVuZ3Roc1RhYmxlIiwibGl0bGVuVGFibGUiLCJkaXN0VGFibGUiLCJsZW5ndGhUYWJsZSIsInByZXYiLCJyZXBlYXQiLCJabGliLlJhd0luZmxhdGUuT3JkZXIiLCJyZWFkQ29kZUJ5VGFibGUiLCJabGliLlJhd0luZmxhdGUuTGVuZ3RoQ29kZVRhYmxlIiwiWmxpYi5SYXdJbmZsYXRlLkxlbmd0aEV4dHJhVGFibGUiLCJabGliLlJhd0luZmxhdGUuRGlzdENvZGVUYWJsZSIsIlpsaWIuUmF3SW5mbGF0ZS5EaXN0RXh0cmFUYWJsZSIsIlpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUucmVhZEJpdHMiLCJvY3RldCIsIlpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUucmVhZENvZGVCeVRhYmxlIiwiY29kZVRhYmxlIiwiY29kZVdpdGhMZW5ndGgiLCJabGliLlJhd0luZmxhdGUucHJvdG90eXBlLmRlY29kZUh1ZmZtYW4iLCJsaXRsZW4iLCJjdXJyZW50TGl0bGVuVGFibGUiLCJ0aSIsImNvZGVEaXN0IiwiWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5kZWNvZGVIdWZmbWFuQWRhcHRpdmUiLCJabGliLlJhd0luZmxhdGUucHJvdG90eXBlLmV4cGFuZEJ1ZmZlciIsImJhY2t3YXJkIiwiWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5leHBhbmRCdWZmZXJBZGFwdGl2ZSIsIm9wdF9wYXJhbSIsInJhdGlvIiwibWF4SHVmZkNvZGUiLCJuZXdTaXplIiwibWF4SW5mbGF0ZVNpemUiLCJmaXhSYXRpbyIsImFkZFJhdGlvIiwiWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5jb25jYXRCdWZmZXIiLCJibG9jayIsImpsIiwiWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5jb25jYXRCdWZmZXJEeW5hbWljIiwiWmxpYi5HdW56aXAiLCJtZW1iZXIiLCJkZWNvbXByZXNzZWQiLCJabGliLkd1bnppcC5wcm90b3R5cGUuZGVjb21wcmVzcyIsImlzaXplIiwicmF3aW5mbGF0ZSIsImluZmxhdGVkIiwiaW5mbGVuIiwiY2kiLCJzdHIiLCJkZWNvZGVNZW1iZXIiLCJpZDEiLCJpZDIiLCJjbSIsInhmbCIsIm9zIiwiRkVYVFJBIiwieGxlbiIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsIm5hbWUiLCJqb2luIiwidG9TdHJpbmciLCJjb25jYXRNZW1iZXIiLCJwIiwiY29uY2F0IiwiWmxpYi5BZGxlcjMyIiwiYXJyYXkiLCJzcGxpdCIsInMxIiwiczIiLCJ0bGVuIiwiWmxpYi5BZGxlcjMyLk9wdGltaXphdGlvblBhcmFtZXRlciIsIlpsaWIuSW5mbGF0ZSIsImNtZiIsInZlcmlmeSIsIlpsaWIuQ29tcHJlc3Npb25NZXRob2QuREVGTEFURSIsIm1ldGhvZCIsIlpsaWIuSW5mbGF0ZS5wcm90b3R5cGUuZGVjb21wcmVzcyIsImFkbGVyMzIiLCJERUZMQVRFIiwiWmxpYi5EZWZsYXRlIiwiWmxpYi5EZWZsYXRlLkRlZmF1bHRCdWZmZXJTaXplIiwiWmxpYi5EZWZsYXRlLkNvbXByZXNzaW9uVHlwZS5EWU5BTUlDIiwicmF3RGVmbGF0ZU9wdGlvbiIsInByb3AiLCJyYXdEZWZsYXRlIiwiWmxpYi5EZWZsYXRlLkNvbXByZXNzaW9uVHlwZSIsIlpsaWIuRGVmbGF0ZS5wcm90b3R5cGUuY29tcHJlc3MiLCJjaW5mbyIsImZsZXZlbCIsImFkbGVyIiwiTWF0aCIsIkxPRzJFIiwibG9nIiwiWmxpYi5EZWZsYXRlLkNvbXByZXNzaW9uVHlwZS5OT05FIiwiWmxpYi5EZWZsYXRlLkNvbXByZXNzaW9uVHlwZS5GSVhFRCIsImV4cG9ydHMiLCJkZWZsYXRlIiwiZGVmbGF0ZVN5bmMiLCJpbmZsYXRlIiwiaW5mbGF0ZVN5bmMiLCJnemlwIiwiZ3ppcFN5bmMiLCJndW56aXAiLCJndW56aXBTeW5jIiwiY2FsbGJhY2siLCJwcm9jZXNzIiwibmV4dFRpY2siLCJlcnJvciIsImRlZmxhdGVkIiwiZSIsIm5vQnVmZmVyIiwidG9CdWZmZXIiLCJCdWZmZXIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMDYgVGhlIENsb3N1cmUgTGlicmFyeSBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMtSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBCb290c3RyYXAgZm9yIHRoZSBHb29nbGUgSlMgTGlicmFyeSAoQ2xvc3VyZSkuXG4gKlxuICogSW4gdW5jb21waWxlZCBtb2RlIGJhc2UuanMgd2lsbCB3cml0ZSBvdXQgQ2xvc3VyZSdzIGRlcHMgZmlsZSwgdW5sZXNzIHRoZVxuICogZ2xvYmFsIDxjb2RlPkNMT1NVUkVfTk9fREVQUzwvY29kZT4gaXMgc2V0IHRvIHRydWUuICBUaGlzIGFsbG93cyBwcm9qZWN0cyB0b1xuICogaW5jbHVkZSB0aGVpciBvd24gZGVwcyBmaWxlKHMpIGZyb20gZGlmZmVyZW50IGxvY2F0aW9ucy5cbiAqXG4gKi9cblxuXG4vKipcbiAqIEBkZWZpbmUge2Jvb2xlYW59IE92ZXJyaWRkZW4gdG8gdHJ1ZSBieSB0aGUgY29tcGlsZXIgd2hlbiAtLWNsb3N1cmVfcGFzc1xuICogICAgIG9yIC0tbWFya19hc19jb21waWxlZCBpcyBzcGVjaWZpZWQuXG4gKi9cbnZhciBDT01QSUxFRCA9IGZhbHNlO1xuXG5cbi8qKlxuICogQmFzZSBuYW1lc3BhY2UgZm9yIHRoZSBDbG9zdXJlIGxpYnJhcnkuICBDaGVja3MgdG8gc2VlIGdvb2cgaXNcbiAqIGFscmVhZHkgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBzY29wZSBiZWZvcmUgYXNzaWduaW5nIHRvIHByZXZlbnRcbiAqIGNsb2JiZXJpbmcgaWYgYmFzZS5qcyBpcyBsb2FkZWQgbW9yZSB0aGFuIG9uY2UuXG4gKlxuICogQGNvbnN0XG4gKi9cbnZhciBnb29nID0gZ29vZyB8fCB7fTsgLy8gSWRlbnRpZmllcyB0aGlzIGZpbGUgYXMgdGhlIENsb3N1cmUgYmFzZS5cblxuXG4vKipcbiAqIFJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIGNvbnRleHQuICBJbiBtb3N0IGNhc2VzIHRoaXMgd2lsbCBiZSAnd2luZG93Jy5cbiAqL1xuZ29vZy5nbG9iYWwgPSB0aGlzO1xuXG5cbi8qKlxuICogQGRlZmluZSB7Ym9vbGVhbn0gREVCVUcgaXMgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IGRlYnVnZ2luZyBjb2RlXG4gKiB0aGF0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaW4gYSBwcm9kdWN0aW9uIGpzX2JpbmFyeSBjYW4gYmUgZWFzaWx5IHN0cmlwcGVkXG4gKiBieSBzcGVjaWZ5aW5nIC0tZGVmaW5lIGdvb2cuREVCVUc9ZmFsc2UgdG8gdGhlIEpTQ29tcGlsZXIuIEZvciBleGFtcGxlLCBtb3N0XG4gKiB0b1N0cmluZygpIG1ldGhvZHMgc2hvdWxkIGJlIGRlY2xhcmVkIGluc2lkZSBhbiBcImlmIChnb29nLkRFQlVHKVwiIGNvbmRpdGlvbmFsXG4gKiBiZWNhdXNlIHRoZXkgYXJlIGdlbmVyYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgYW5kIGl0IGlzIGRpZmZpY3VsdFxuICogZm9yIHRoZSBKU0NvbXBpbGVyIHRvIHN0YXRpY2FsbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSBhcmUgdXNlZC5cbiAqL1xuZ29vZy5ERUJVRyA9IHRydWU7XG5cblxuLyoqXG4gKiBAZGVmaW5lIHtzdHJpbmd9IExPQ0FMRSBkZWZpbmVzIHRoZSBsb2NhbGUgYmVpbmcgdXNlZCBmb3IgY29tcGlsYXRpb24uIEl0IGlzXG4gKiB1c2VkIHRvIHNlbGVjdCBsb2NhbGUgc3BlY2lmaWMgZGF0YSB0byBiZSBjb21waWxlZCBpbiBqcyBiaW5hcnkuIEJVSUxEIHJ1bGVcbiAqIGNhbiBzcGVjaWZ5IHRoaXMgdmFsdWUgYnkgXCItLWRlZmluZSBnb29nLkxPQ0FMRT08bG9jYWxlX25hbWU+XCIgYXMgSlNDb21waWxlclxuICogb3B0aW9uLlxuICpcbiAqIFRha2UgaW50byBhY2NvdW50IHRoYXQgdGhlIGxvY2FsZSBjb2RlIGZvcm1hdCBpcyBpbXBvcnRhbnQuIFlvdSBzaG91bGQgdXNlXG4gKiB0aGUgY2Fub25pY2FsIFVuaWNvZGUgZm9ybWF0IHdpdGggaHlwaGVuIGFzIGEgZGVsaW1pdGVyLiBMYW5ndWFnZSBtdXN0IGJlXG4gKiBsb3dlcmNhc2UsIExhbmd1YWdlIFNjcmlwdCAtIENhcGl0YWxpemVkLCBSZWdpb24gLSBVUFBFUkNBU0UuXG4gKiBUaGVyZSBhcmUgZmV3IGV4YW1wbGVzOiBwdC1CUiwgZW4sIGVuLVVTLCBzci1MYXRpbi1CTywgemgtSGFucy1DTi5cbiAqXG4gKiBTZWUgbW9yZSBpbmZvIGFib3V0IGxvY2FsZSBjb2RlcyBoZXJlOlxuICogaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvI1VuaWNvZGVfTGFuZ3VhZ2VfYW5kX0xvY2FsZV9JZGVudGlmaWVyc1xuICpcbiAqIEZvciBsYW5ndWFnZSBjb2RlcyB5b3Ugc2hvdWxkIHVzZSB2YWx1ZXMgZGVmaW5lZCBieSBJU08gNjkzLTEuIFNlZSBpdCBoZXJlXG4gKiBodHRwOi8vd3d3LnczLm9yZy9XQUkvRVIvSUcvZXJ0L2lzbzYzOS5odG0uIFRoZXJlIGlzIG9ubHkgb25lIGV4Y2VwdGlvbiBmcm9tXG4gKiB0aGlzIHJ1bGU6IHRoZSBIZWJyZXcgbGFuZ3VhZ2UuIEZvciBsZWdhY3kgcmVhc29ucyB0aGUgb2xkIGNvZGUgKGl3KSBzaG91bGRcbiAqIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgbmV3IGNvZGUgKGhlKSwgc2VlIGh0dHA6Ly93aWtpL01haW4vSUlJU3lub255bXMuXG4gKi9cbmdvb2cuTE9DQUxFID0gJ2VuJzsgIC8vIGRlZmF1bHQgdG8gZW5cblxuXG4vKipcbiAqIENyZWF0ZXMgb2JqZWN0IHN0dWJzIGZvciBhIG5hbWVzcGFjZS4gIFRoZSBwcmVzZW5jZSBvZiBvbmUgb3IgbW9yZVxuICogZ29vZy5wcm92aWRlKCkgY2FsbHMgaW5kaWNhdGUgdGhhdCB0aGUgZmlsZSBkZWZpbmVzIHRoZSBnaXZlblxuICogb2JqZWN0cy9uYW1lc3BhY2VzLiAgQnVpbGQgdG9vbHMgYWxzbyBzY2FuIGZvciBwcm92aWRlL3JlcXVpcmUgc3RhdGVtZW50c1xuICogdG8gZGlzY2VybiBkZXBlbmRlbmNpZXMsIGJ1aWxkIGRlcGVuZGVuY3kgZmlsZXMgKHNlZSBkZXBzLmpzKSwgZXRjLlxuICogQHNlZSBnb29nLnJlcXVpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWVzcGFjZSBwcm92aWRlZCBieSB0aGlzIGZpbGUgaW4gdGhlIGZvcm1cbiAqICAgICBcImdvb2cucGFja2FnZS5wYXJ0XCIuXG4gKi9cbmdvb2cucHJvdmlkZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYgKCFDT01QSUxFRCkge1xuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBzYW1lIG5hbWVzcGFjZSBpc24ndCBwcm92aWRlZCB0d2ljZS4gVGhpcyBpcyBpbnRlbmRlZFxuICAgIC8vIHRvIHRlYWNoIG5ldyBkZXZlbG9wZXJzIHRoYXQgJ2dvb2cucHJvdmlkZScgaXMgZWZmZWN0aXZlbHkgYSB2YXJpYWJsZVxuICAgIC8vIGRlY2xhcmF0aW9uLiBBbmQgd2hlbiBKU0NvbXBpbGVyIHRyYW5zZm9ybXMgZ29vZy5wcm92aWRlIGludG8gYSByZWFsXG4gICAgLy8gdmFyaWFibGUgZGVjbGFyYXRpb24sIHRoZSBjb21waWxlZCBKUyBzaG91bGQgd29yayB0aGUgc2FtZSBhcyB0aGUgcmF3XG4gICAgLy8gSlMtLWV2ZW4gd2hlbiB0aGUgcmF3IEpTIHVzZXMgZ29vZy5wcm92aWRlIGluY29ycmVjdGx5LlxuICAgIGlmIChnb29nLmlzUHJvdmlkZWRfKG5hbWUpKSB7XG4gICAgICB0aHJvdyBFcnJvcignTmFtZXNwYWNlIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBkZWNsYXJlZC4nKTtcbiAgICB9XG4gICAgZGVsZXRlIGdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tuYW1lXTtcblxuICAgIHZhciBuYW1lc3BhY2UgPSBuYW1lO1xuICAgIHdoaWxlICgobmFtZXNwYWNlID0gbmFtZXNwYWNlLnN1YnN0cmluZygwLCBuYW1lc3BhY2UubGFzdEluZGV4T2YoJy4nKSkpKSB7XG4gICAgICBpZiAoZ29vZy5nZXRPYmplY3RCeU5hbWUobmFtZXNwYWNlKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tuYW1lc3BhY2VdID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBnb29nLmV4cG9ydFBhdGhfKG5hbWUpO1xufTtcblxuXG4vKipcbiAqIE1hcmtzIHRoYXQgdGhlIGN1cnJlbnQgZmlsZSBzaG91bGQgb25seSBiZSB1c2VkIGZvciB0ZXN0aW5nLCBhbmQgbmV2ZXIgZm9yXG4gKiBsaXZlIGNvZGUgaW4gcHJvZHVjdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X21lc3NhZ2UgT3B0aW9uYWwgbWVzc2FnZSB0byBhZGQgdG8gdGhlIGVycm9yIHRoYXQnc1xuICogICAgIHJhaXNlZCB3aGVuIHVzZWQgaW4gcHJvZHVjdGlvbiBjb2RlLlxuICovXG5nb29nLnNldFRlc3RPbmx5ID0gZnVuY3Rpb24ob3B0X21lc3NhZ2UpIHtcbiAgaWYgKENPTVBJTEVEICYmICFnb29nLkRFQlVHKSB7XG4gICAgb3B0X21lc3NhZ2UgPSBvcHRfbWVzc2FnZSB8fCAnJztcbiAgICB0aHJvdyBFcnJvcignSW1wb3J0aW5nIHRlc3Qtb25seSBjb2RlIGludG8gbm9uLWRlYnVnIGVudmlyb25tZW50JyArXG4gICAgICAgICAgICAgICAgb3B0X21lc3NhZ2UgPyAnOiAnICsgb3B0X21lc3NhZ2UgOiAnLicpO1xuICB9XG59O1xuXG5cbmlmICghQ09NUElMRUQpIHtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIG5hbWUgaGFzIGJlZW4gZ29vZy5wcm92aWRlZC4gVGhpcyB3aWxsIHJldHVybiBmYWxzZSBmb3JcbiAgICogbmFtZXMgdGhhdCBhcmUgYXZhaWxhYmxlIG9ubHkgYXMgaW1wbGljaXQgbmFtZXNwYWNlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgbmFtZSBvZiB0aGUgb2JqZWN0IHRvIGxvb2sgZm9yLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBuYW1lIGhhcyBiZWVuIHByb3ZpZGVkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5pc1Byb3ZpZGVkXyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gIWdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tuYW1lXSAmJiAhIWdvb2cuZ2V0T2JqZWN0QnlOYW1lKG5hbWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBOYW1lc3BhY2VzIGltcGxpY2l0bHkgZGVmaW5lZCBieSBnb29nLnByb3ZpZGUuIEZvciBleGFtcGxlLFxuICAgKiBnb29nLnByb3ZpZGUoJ2dvb2cuZXZlbnRzLkV2ZW50JykgaW1wbGljaXRseSBkZWNsYXJlc1xuICAgKiB0aGF0ICdnb29nJyBhbmQgJ2dvb2cuZXZlbnRzJyBtdXN0IGJlIG5hbWVzcGFjZXMuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLmltcGxpY2l0TmFtZXNwYWNlc18gPSB7fTtcbn1cblxuXG4vKipcbiAqIEJ1aWxkcyBhbiBvYmplY3Qgc3RydWN0dXJlIGZvciB0aGUgcHJvdmlkZWQgbmFtZXNwYWNlIHBhdGgsXG4gKiBlbnN1cmluZyB0aGF0IG5hbWVzIHRoYXQgYWxyZWFkeSBleGlzdCBhcmUgbm90IG92ZXJ3cml0dGVuLiBGb3JcbiAqIGV4YW1wbGU6XG4gKiBcImEuYi5jXCIgLT4gYSA9IHt9O2EuYj17fTthLmIuYz17fTtcbiAqIFVzZWQgYnkgZ29vZy5wcm92aWRlIGFuZCBnb29nLmV4cG9ydFN5bWJvbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIG9iamVjdCB0aGF0IHRoaXMgZmlsZSBkZWZpbmVzLlxuICogQHBhcmFtIHsqPX0gb3B0X29iamVjdCB0aGUgb2JqZWN0IHRvIGV4cG9zZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoLlxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfb2JqZWN0VG9FeHBvcnRUbyBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgcGF0aCB0bzsgZGVmYXVsdFxuICogICAgIGlzIHxnb29nLmdsb2JhbHwuXG4gKiBAcHJpdmF0ZVxuICovXG5nb29nLmV4cG9ydFBhdGhfID0gZnVuY3Rpb24obmFtZSwgb3B0X29iamVjdCwgb3B0X29iamVjdFRvRXhwb3J0VG8pIHtcbiAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpO1xuICB2YXIgY3VyID0gb3B0X29iamVjdFRvRXhwb3J0VG8gfHwgZ29vZy5nbG9iYWw7XG5cbiAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgZXhoaWJpdHMgc3RyYW5nZSBiZWhhdmlvciB3aGVuIHRocm93aW5nIGVycm9ycyBmcm9tXG4gIC8vIG1ldGhvZHMgZXh0ZXJuZWQgaW4gdGhpcyBtYW5uZXIuICBTZWUgdGhlIHRlc3RFeHBvcnRTeW1ib2xFeGNlcHRpb25zIGluXG4gIC8vIGJhc2VfdGVzdC5odG1sIGZvciBhbiBleGFtcGxlLlxuICBpZiAoIShwYXJ0c1swXSBpbiBjdXIpICYmIGN1ci5leGVjU2NyaXB0KSB7XG4gICAgY3VyLmV4ZWNTY3JpcHQoJ3ZhciAnICsgcGFydHNbMF0pO1xuICB9XG5cbiAgLy8gQ2VydGFpbiBicm93c2VycyBjYW5ub3QgcGFyc2UgY29kZSBpbiB0aGUgZm9ybSBmb3IoKGEgaW4gYik7IGM7KTtcbiAgLy8gVGhpcyBwYXR0ZXJuIGlzIHByb2R1Y2VkIGJ5IHRoZSBKU0NvbXBpbGVyIHdoZW4gaXQgY29sbGFwc2VzIHRoZVxuICAvLyBzdGF0ZW1lbnQgYWJvdmUgaW50byB0aGUgY29uZGl0aW9uYWwgbG9vcCBiZWxvdy4gVG8gcHJldmVudCB0aGlzIGZyb21cbiAgLy8gaGFwcGVuaW5nLCB1c2UgYSBmb3ItbG9vcCBhbmQgcmVzZXJ2ZSB0aGUgaW5pdCBsb2dpYyBhcyBiZWxvdy5cblxuICAvLyBQYXJlbnRoZXNlcyBhZGRlZCB0byBlbGltaW5hdGUgc3RyaWN0IEpTIHdhcm5pbmcgaW4gRmlyZWZveC5cbiAgZm9yICh2YXIgcGFydDsgcGFydHMubGVuZ3RoICYmIChwYXJ0ID0gcGFydHMuc2hpZnQoKSk7KSB7XG4gICAgaWYgKCFwYXJ0cy5sZW5ndGggJiYgZ29vZy5pc0RlZihvcHRfb2JqZWN0KSkge1xuICAgICAgLy8gbGFzdCBwYXJ0IGFuZCB3ZSBoYXZlIGFuIG9iamVjdDsgdXNlIGl0XG4gICAgICBjdXJbcGFydF0gPSBvcHRfb2JqZWN0O1xuICAgIH0gZWxzZSBpZiAoY3VyW3BhcnRdKSB7XG4gICAgICBjdXIgPSBjdXJbcGFydF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1ciA9IGN1cltwYXJ0XSA9IHt9O1xuICAgIH1cbiAgfVxufTtcblxuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IGJhc2VkIG9uIGl0cyBmdWxseSBxdWFsaWZpZWQgZXh0ZXJuYWwgbmFtZS4gIElmIHlvdSBhcmVcbiAqIHVzaW5nIGEgY29tcGlsYXRpb24gcGFzcyB0aGF0IHJlbmFtZXMgcHJvcGVydHkgbmFtZXMgYmV3YXJlIHRoYXQgdXNpbmcgdGhpc1xuICogZnVuY3Rpb24gd2lsbCBub3QgZmluZCByZW5hbWVkIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lLlxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfb2JqIFRoZSBvYmplY3Qgd2l0aGluIHdoaWNoIHRvIGxvb2s7IGRlZmF1bHQgaXNcbiAqICAgICB8Z29vZy5nbG9iYWx8LlxuICogQHJldHVybiB7P30gVGhlIHZhbHVlIChvYmplY3Qgb3IgcHJpbWl0aXZlKSBvciwgaWYgbm90IGZvdW5kLCBudWxsLlxuICovXG5nb29nLmdldE9iamVjdEJ5TmFtZSA9IGZ1bmN0aW9uKG5hbWUsIG9wdF9vYmopIHtcbiAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpO1xuICB2YXIgY3VyID0gb3B0X29iaiB8fCBnb29nLmdsb2JhbDtcbiAgZm9yICh2YXIgcGFydDsgcGFydCA9IHBhcnRzLnNoaWZ0KCk7ICkge1xuICAgIGlmIChnb29nLmlzRGVmQW5kTm90TnVsbChjdXJbcGFydF0pKSB7XG4gICAgICBjdXIgPSBjdXJbcGFydF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3VyO1xufTtcblxuXG4vKipcbiAqIEdsb2JhbGl6ZXMgYSB3aG9sZSBuYW1lc3BhY2UsIHN1Y2ggYXMgZ29vZyBvciBnb29nLmxhbmcuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgbmFtZXNwYWNlIHRvIGdsb2JhbGl6ZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X2dsb2JhbCBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgcHJvcGVydGllcyB0by5cbiAqIEBkZXByZWNhdGVkIFByb3BlcnRpZXMgbWF5IGJlIGV4cGxpY2l0bHkgZXhwb3J0ZWQgdG8gdGhlIGdsb2JhbCBzY29wZSwgYnV0XG4gKiAgICAgdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIGRvbmUgaW4gYnVsay5cbiAqL1xuZ29vZy5nbG9iYWxpemUgPSBmdW5jdGlvbihvYmosIG9wdF9nbG9iYWwpIHtcbiAgdmFyIGdsb2JhbCA9IG9wdF9nbG9iYWwgfHwgZ29vZy5nbG9iYWw7XG4gIGZvciAodmFyIHggaW4gb2JqKSB7XG4gICAgZ2xvYmFsW3hdID0gb2JqW3hdO1xuICB9XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIGRlcGVuZGVuY3kgZnJvbSBhIGZpbGUgdG8gdGhlIGZpbGVzIGl0IHJlcXVpcmVzLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbFBhdGggVGhlIHBhdGggdG8gdGhlIGpzIGZpbGUuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm92aWRlcyBBbiBhcnJheSBvZiBzdHJpbmdzIHdpdGggdGhlIG5hbWVzIG9mIHRoZSBvYmplY3RzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGZpbGUgcHJvdmlkZXMuXG4gKiBAcGFyYW0ge0FycmF5fSByZXF1aXJlcyBBbiBhcnJheSBvZiBzdHJpbmdzIHdpdGggdGhlIG5hbWVzIG9mIHRoZSBvYmplY3RzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGZpbGUgcmVxdWlyZXMuXG4gKi9cbmdvb2cuYWRkRGVwZW5kZW5jeSA9IGZ1bmN0aW9uKHJlbFBhdGgsIHByb3ZpZGVzLCByZXF1aXJlcykge1xuICBpZiAoIUNPTVBJTEVEKSB7XG4gICAgdmFyIHByb3ZpZGUsIHJlcXVpcmU7XG4gICAgdmFyIHBhdGggPSByZWxQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICB2YXIgZGVwcyA9IGdvb2cuZGVwZW5kZW5jaWVzXztcbiAgICBmb3IgKHZhciBpID0gMDsgcHJvdmlkZSA9IHByb3ZpZGVzW2ldOyBpKyspIHtcbiAgICAgIGRlcHMubmFtZVRvUGF0aFtwcm92aWRlXSA9IHBhdGg7XG4gICAgICBpZiAoIShwYXRoIGluIGRlcHMucGF0aFRvTmFtZXMpKSB7XG4gICAgICAgIGRlcHMucGF0aFRvTmFtZXNbcGF0aF0gPSB7fTtcbiAgICAgIH1cbiAgICAgIGRlcHMucGF0aFRvTmFtZXNbcGF0aF1bcHJvdmlkZV0gPSB0cnVlO1xuICAgIH1cbiAgICBmb3IgKHZhciBqID0gMDsgcmVxdWlyZSA9IHJlcXVpcmVzW2pdOyBqKyspIHtcbiAgICAgIGlmICghKHBhdGggaW4gZGVwcy5yZXF1aXJlcykpIHtcbiAgICAgICAgZGVwcy5yZXF1aXJlc1twYXRoXSA9IHt9O1xuICAgICAgfVxuICAgICAgZGVwcy5yZXF1aXJlc1twYXRoXVtyZXF1aXJlXSA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG5cblxuXG4vLyBOT1RFKG5uYXplKTogVGhlIGRlYnVnIERPTSBsb2FkZXIgd2FzIGluY2x1ZGVkIGluIGJhc2UuanMgYXMgYW4gb3JpZ25hbFxuLy8gd2F5IHRvIGRvIFwiZGVidWctbW9kZVwiIGRldmVsb3BtZW50LiAgVGhlIGRlcGVuZGVuY3kgc3lzdGVtIGNhbiBzb21ldGltZXNcbi8vIGJlIGNvbmZ1c2luZywgYXMgY2FuIHRoZSBkZWJ1ZyBET00gbG9hZGVyJ3MgYXN5bmNyb25vdXMgbmF0dXJlLlxuLy9cbi8vIFdpdGggdGhlIERPTSBsb2FkZXIsIGEgY2FsbCB0byBnb29nLnJlcXVpcmUoKSBpcyBub3QgYmxvY2tpbmcgLS0gdGhlXG4vLyBzY3JpcHQgd2lsbCBub3QgbG9hZCB1bnRpbCBzb21lIHBvaW50IGFmdGVyIHRoZSBjdXJyZW50IHNjcmlwdC4gIElmIGFcbi8vIG5hbWVzcGFjZSBpcyBuZWVkZWQgYXQgcnVudGltZSwgaXQgbmVlZHMgdG8gYmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzXG4vLyBzY3JpcHQsIG9yIGxvYWRlZCB2aWEgcmVxdWlyZSgpIHdpdGggaXRzIHJlZ2lzdGVyZWQgZGVwZW5kZW5jaWVzLlxuLy8gVXNlci1kZWZpbmVkIG5hbWVzcGFjZXMgbWF5IG5lZWQgdGhlaXIgb3duIGRlcHMgZmlsZS4gIFNlZSBodHRwOi8vZ28vanNfZGVwcyxcbi8vIGh0dHA6Ly9nby9nZW5qc2RlcHMsIG9yLCBleHRlcm5hbGx5LCBEZXBzV3JpdGVyLlxuLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9jbG9zdXJlL2xpYnJhcnkvZG9jcy9kZXBzd3JpdGVyLmh0bWxcbi8vXG4vLyBCZWNhdXNlIG9mIGxlZ2FjeSBjbGllbnRzLCB0aGUgRE9NIGxvYWRlciBjYW4ndCBiZSBlYXNpbHkgcmVtb3ZlZCBmcm9tXG4vLyBiYXNlLmpzLiAgV29yayBpcyBiZWluZyBkb25lIHRvIG1ha2UgaXQgZGlzYWJsZWFibGUgb3IgcmVwbGFjZWFibGUgZm9yXG4vLyBkaWZmZXJlbnQgZW52aXJvbm1lbnRzIChET00tbGVzcyBKYXZhU2NyaXB0IGludGVycHJldGVycyBsaWtlIFJoaW5vIG9yIFY4LFxuLy8gZm9yIGV4YW1wbGUpLiBTZWUgYm9vdHN0cmFwLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuXG4vKipcbiAqIEBkZWZpbmUge2Jvb2xlYW59IFdoZXRoZXIgdG8gZW5hYmxlIHRoZSBkZWJ1ZyBsb2FkZXIuXG4gKlxuICogSWYgZW5hYmxlZCwgYSBjYWxsIHRvIGdvb2cucmVxdWlyZSgpIHdpbGwgYXR0ZW1wdCB0byBsb2FkIHRoZSBuYW1lc3BhY2UgYnlcbiAqIGFwcGVuZGluZyBhIHNjcmlwdCB0YWcgdG8gdGhlIERPTSAoaWYgdGhlIG5hbWVzcGFjZSBoYXMgYmVlbiByZWdpc3RlcmVkKS5cbiAqXG4gKiBJZiBkaXNhYmxlZCwgZ29vZy5yZXF1aXJlKCkgd2lsbCBzaW1wbHkgYXNzZXJ0IHRoYXQgdGhlIG5hbWVzcGFjZSBoYXMgYmVlblxuICogcHJvdmlkZWQgKGFuZCBkZXBlbmQgb24gdGhlIGZhY3QgdGhhdCBzb21lIG91dHNpZGUgdG9vbCBjb3JyZWN0bHkgb3JkZXJlZFxuICogdGhlIHNjcmlwdCkuXG4gKi9cbmdvb2cuRU5BQkxFX0RFQlVHX0xPQURFUiA9IHRydWU7XG5cblxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgc3lzdGVtIGZvciB0aGUgZHluYW1pYyByZXNvbHV0aW9uIG9mIGRlcGVuZGVuY2llc1xuICogdGhhdCB3b3JrcyBpbiBwYXJhbGxlbCB3aXRoIHRoZSBCVUlMRCBzeXN0ZW0uIE5vdGUgdGhhdCBhbGwgY2FsbHNcbiAqIHRvIGdvb2cucmVxdWlyZSB3aWxsIGJlIHN0cmlwcGVkIGJ5IHRoZSBKU0NvbXBpbGVyIHdoZW4gdGhlXG4gKiAtLWNsb3N1cmVfcGFzcyBvcHRpb24gaXMgdXNlZC5cbiAqIEBzZWUgZ29vZy5wcm92aWRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lc3BhY2UgdG8gaW5jbHVkZSAoYXMgd2FzIGdpdmVuIGluIGdvb2cucHJvdmlkZSgpKVxuICogICAgIGluIHRoZSBmb3JtIFwiZ29vZy5wYWNrYWdlLnBhcnRcIi5cbiAqL1xuZ29vZy5yZXF1aXJlID0gZnVuY3Rpb24obmFtZSkge1xuXG4gIC8vIGlmIHRoZSBvYmplY3QgYWxyZWFkeSBleGlzdHMgd2UgZG8gbm90IG5lZWQgZG8gZG8gYW55dGhpbmdcbiAgLy8gVE9ETyhhcnYpOiBJZiB3ZSBzdGFydCB0byBzdXBwb3J0IHJlcXVpcmUgYmFzZWQgb24gZmlsZSBuYW1lIHRoaXMgaGFzXG4gIC8vICAgICAgICAgICAgdG8gY2hhbmdlXG4gIC8vIFRPRE8oYXJ2KTogSWYgd2UgYWxsb3cgZ29vZy5mb28uKiB0aGlzIGhhcyB0byBjaGFuZ2VcbiAgLy8gVE9ETyhhcnYpOiBJZiB3ZSBpbXBsZW1lbnQgZHluYW1pYyBsb2FkIGFmdGVyIHBhZ2UgbG9hZCB3ZSBzaG91bGQgcHJvYmFibHlcbiAgLy8gICAgICAgICAgICBub3QgcmVtb3ZlIHRoaXMgY29kZSBmb3IgdGhlIGNvbXBpbGVkIG91dHB1dFxuICBpZiAoIUNPTVBJTEVEKSB7XG4gICAgaWYgKGdvb2cuaXNQcm92aWRlZF8obmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZ29vZy5FTkFCTEVfREVCVUdfTE9BREVSKSB7XG4gICAgICB2YXIgcGF0aCA9IGdvb2cuZ2V0UGF0aEZyb21EZXBzXyhuYW1lKTtcbiAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgIGdvb2cuaW5jbHVkZWRfW3BhdGhdID0gdHJ1ZTtcbiAgICAgICAgZ29vZy53cml0ZVNjcmlwdHNfKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZXJyb3JNZXNzYWdlID0gJ2dvb2cucmVxdWlyZSBjb3VsZCBub3QgZmluZDogJyArIG5hbWU7XG4gICAgaWYgKGdvb2cuZ2xvYmFsLmNvbnNvbGUpIHtcbiAgICAgIGdvb2cuZ2xvYmFsLmNvbnNvbGVbJ2Vycm9yJ10oZXJyb3JNZXNzYWdlKTtcbiAgICB9XG5cblxuICAgICAgdGhyb3cgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblxuICB9XG59O1xuXG5cbi8qKlxuICogUGF0aCBmb3IgaW5jbHVkZWQgc2NyaXB0c1xuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZ29vZy5iYXNlUGF0aCA9ICcnO1xuXG5cbi8qKlxuICogQSBob29rIGZvciBvdmVycmlkaW5nIHRoZSBiYXNlIHBhdGguXG4gKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqL1xuZ29vZy5nbG9iYWwuQ0xPU1VSRV9CQVNFX1BBVEg7XG5cblxuLyoqXG4gKiBXaGV0aGVyIHRvIHdyaXRlIG91dCBDbG9zdXJlJ3MgZGVwcyBmaWxlLiBCeSBkZWZhdWx0LFxuICogdGhlIGRlcHMgYXJlIHdyaXR0ZW4uXG4gKiBAdHlwZSB7Ym9vbGVhbnx1bmRlZmluZWR9XG4gKi9cbmdvb2cuZ2xvYmFsLkNMT1NVUkVfTk9fREVQUztcblxuXG4vKipcbiAqIEEgZnVuY3Rpb24gdG8gaW1wb3J0IGEgc2luZ2xlIHNjcmlwdC4gVGhpcyBpcyBtZWFudCB0byBiZSBvdmVycmlkZGVuIHdoZW5cbiAqIENsb3N1cmUgaXMgYmVpbmcgcnVuIGluIG5vbi1IVE1MIGNvbnRleHRzLCBzdWNoIGFzIHdlYiB3b3JrZXJzLiBJdCdzIGRlZmluZWRcbiAqIGluIHRoZSBnbG9iYWwgc2NvcGUgc28gdGhhdCBpdCBjYW4gYmUgc2V0IGJlZm9yZSBiYXNlLmpzIGlzIGxvYWRlZCwgd2hpY2hcbiAqIGFsbG93cyBkZXBzLmpzIHRvIGJlIGltcG9ydGVkIHByb3Blcmx5LlxuICpcbiAqIFRoZSBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIHNjcmlwdCBzb3VyY2UsIHdoaWNoIGlzIGEgcmVsYXRpdmUgVVJJLiBJdCBzaG91bGRcbiAqIHJldHVybiB0cnVlIGlmIHRoZSBzY3JpcHQgd2FzIGltcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmdvb2cuZ2xvYmFsLkNMT1NVUkVfSU1QT1JUX1NDUklQVDtcblxuXG4vKipcbiAqIE51bGwgZnVuY3Rpb24gdXNlZCBmb3IgZGVmYXVsdCB2YWx1ZXMgb2YgY2FsbGJhY2tzLCBldGMuXG4gKiBAcmV0dXJuIHt2b2lkfSBOb3RoaW5nLlxuICovXG5nb29nLm51bGxGdW5jdGlvbiA9IGZ1bmN0aW9uKCkge307XG5cblxuLyoqXG4gKiBUaGUgaWRlbnRpdHkgZnVuY3Rpb24uIFJldHVybnMgaXRzIGZpcnN0IGFyZ3VtZW50LlxuICpcbiAqIEBwYXJhbSB7Kj19IG9wdF9yZXR1cm5WYWx1ZSBUaGUgc2luZ2xlIHZhbHVlIHRoYXQgd2lsbCBiZSByZXR1cm5lZC5cbiAqIEBwYXJhbSB7Li4uKn0gdmFyX2FyZ3MgT3B0aW9uYWwgdHJhaWxpbmcgYXJndW1lbnRzLiBUaGVzZSBhcmUgaWdub3JlZC5cbiAqIEByZXR1cm4gez99IFRoZSBmaXJzdCBhcmd1bWVudC4gV2UgY2FuJ3Qga25vdyB0aGUgdHlwZSAtLSBqdXN0IHBhc3MgaXQgYWxvbmdcbiAqICAgICAgd2l0aG91dCB0eXBlLlxuICogQGRlcHJlY2F0ZWQgVXNlIGdvb2cuZnVuY3Rpb25zLmlkZW50aXR5IGluc3RlYWQuXG4gKi9cbmdvb2cuaWRlbnRpdHlGdW5jdGlvbiA9IGZ1bmN0aW9uKG9wdF9yZXR1cm5WYWx1ZSwgdmFyX2FyZ3MpIHtcbiAgcmV0dXJuIG9wdF9yZXR1cm5WYWx1ZTtcbn07XG5cblxuLyoqXG4gKiBXaGVuIGRlZmluaW5nIGEgY2xhc3MgRm9vIHdpdGggYW4gYWJzdHJhY3QgbWV0aG9kIGJhcigpLCB5b3UgY2FuIGRvOlxuICpcbiAqIEZvby5wcm90b3R5cGUuYmFyID0gZ29vZy5hYnN0cmFjdE1ldGhvZFxuICpcbiAqIE5vdyBpZiBhIHN1YmNsYXNzIG9mIEZvbyBmYWlscyB0byBvdmVycmlkZSBiYXIoKSwgYW4gZXJyb3JcbiAqIHdpbGwgYmUgdGhyb3duIHdoZW4gYmFyKCkgaXMgaW52b2tlZC5cbiAqXG4gKiBOb3RlOiBUaGlzIGRvZXMgbm90IHRha2UgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIG92ZXJyaWRlIGFzXG4gKiBhbiBhcmd1bWVudCBiZWNhdXNlIHRoYXQgd291bGQgbWFrZSBpdCBtb3JlIGRpZmZpY3VsdCB0byBvYmZ1c2NhdGVcbiAqIG91ciBKYXZhU2NyaXB0IGNvZGUuXG4gKlxuICogQHR5cGUgeyFGdW5jdGlvbn1cbiAqIEB0aHJvd3Mge0Vycm9yfSB3aGVuIGludm9rZWQgdG8gaW5kaWNhdGUgdGhlIG1ldGhvZCBzaG91bGQgYmVcbiAqICAgb3ZlcnJpZGRlbi5cbiAqL1xuZ29vZy5hYnN0cmFjdE1ldGhvZCA9IGZ1bmN0aW9uKCkge1xuICB0aHJvdyBFcnJvcigndW5pbXBsZW1lbnRlZCBhYnN0cmFjdCBtZXRob2QnKTtcbn07XG5cblxuLyoqXG4gKiBBZGRzIGEge0Bjb2RlIGdldEluc3RhbmNlfSBzdGF0aWMgbWV0aG9kIHRoYXQgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBpbnN0YW5jZVxuICogb2JqZWN0LlxuICogQHBhcmFtIHshRnVuY3Rpb259IGN0b3IgVGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgY2xhc3MgdG8gYWRkIHRoZSBzdGF0aWNcbiAqICAgICBtZXRob2QgdG8uXG4gKi9cbmdvb2cuYWRkU2luZ2xldG9uR2V0dGVyID0gZnVuY3Rpb24oY3Rvcikge1xuICBjdG9yLmdldEluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGN0b3IuaW5zdGFuY2VfKSB7XG4gICAgICByZXR1cm4gY3Rvci5pbnN0YW5jZV87XG4gICAgfVxuICAgIGlmIChnb29nLkRFQlVHKSB7XG4gICAgICAvLyBOT1RFOiBKU0NvbXBpbGVyIGNhbid0IG9wdGltaXplIGF3YXkgQXJyYXkjcHVzaC5cbiAgICAgIGdvb2cuaW5zdGFudGlhdGVkU2luZ2xldG9uc19bZ29vZy5pbnN0YW50aWF0ZWRTaW5nbGV0b25zXy5sZW5ndGhdID0gY3RvcjtcbiAgICB9XG4gICAgcmV0dXJuIGN0b3IuaW5zdGFuY2VfID0gbmV3IGN0b3I7XG4gIH07XG59O1xuXG5cbi8qKlxuICogQWxsIHNpbmdsZXRvbiBjbGFzc2VzIHRoYXQgaGF2ZSBiZWVuIGluc3RhbnRpYXRlZCwgZm9yIHRlc3RpbmcuIERvbid0IHJlYWRcbiAqIGl0IGRpcmVjdGx5LCB1c2UgdGhlIHtAY29kZSBnb29nLnRlc3Rpbmcuc2luZ2xldG9ufSBtb2R1bGUuIFRoZSBjb21waWxlclxuICogcmVtb3ZlcyB0aGlzIHZhcmlhYmxlIGlmIHVudXNlZC5cbiAqIEB0eXBlIHshQXJyYXkuPCFGdW5jdGlvbj59XG4gKiBAcHJpdmF0ZVxuICovXG5nb29nLmluc3RhbnRpYXRlZFNpbmdsZXRvbnNfID0gW107XG5cblxuaWYgKCFDT01QSUxFRCAmJiBnb29nLkVOQUJMRV9ERUJVR19MT0FERVIpIHtcbiAgLyoqXG4gICAqIE9iamVjdCB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdXJscyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkLiBUaGlzXG4gICAqIHJlY29yZCBhbGxvd3MgdGhlIHByZXZlbnRpb24gb2YgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5pbmNsdWRlZF8gPSB7fTtcblxuXG4gIC8qKlxuICAgKiBUaGlzIG9iamVjdCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgZGVwZW5kZW5jaWVzIGFuZCBvdGhlciBkYXRhIHRoYXQgaXNcbiAgICogdXNlZCBmb3IgbG9hZGluZyBzY3JpcHRzXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBnb29nLmRlcGVuZGVuY2llc18gPSB7XG4gICAgcGF0aFRvTmFtZXM6IHt9LCAvLyAxIHRvIG1hbnlcbiAgICBuYW1lVG9QYXRoOiB7fSwgLy8gMSB0byAxXG4gICAgcmVxdWlyZXM6IHt9LCAvLyAxIHRvIG1hbnlcbiAgICAvLyB1c2VkIHdoZW4gcmVzb2x2aW5nIGRlcGVuZGVuY2llcyB0byBwcmV2ZW50IHVzIGZyb21cbiAgICAvLyB2aXNpdGluZyB0aGUgZmlsZSB0d2ljZVxuICAgIHZpc2l0ZWQ6IHt9LFxuICAgIHdyaXR0ZW46IHt9IC8vIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBzY3JpcHQgZmlsZXMgd2UgaGF2ZSB3cml0dGVuXG4gIH07XG5cblxuICAvKipcbiAgICogVHJpZXMgdG8gZGV0ZWN0IHdoZXRoZXIgaXMgaW4gdGhlIGNvbnRleHQgb2YgYW4gSFRNTCBkb2N1bWVudC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBpdCBsb29rcyBsaWtlIEhUTUwgZG9jdW1lbnQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLmluSHRtbERvY3VtZW50XyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBkb2MgPSBnb29nLmdsb2JhbC5kb2N1bWVudDtcbiAgICByZXR1cm4gdHlwZW9mIGRvYyAhPSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAnd3JpdGUnIGluIGRvYzsgIC8vIFhVTERvY3VtZW50IG1pc3NlcyB3cml0ZS5cbiAgfTtcblxuXG4gIC8qKlxuICAgKiBUcmllcyB0byBkZXRlY3QgdGhlIGJhc2UgcGF0aCBvZiB0aGUgYmFzZS5qcyBzY3JpcHQgdGhhdCBib290c3RyYXBzIENsb3N1cmVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdvb2cuZmluZEJhc2VQYXRoXyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChnb29nLmdsb2JhbC5DTE9TVVJFX0JBU0VfUEFUSCkge1xuICAgICAgZ29vZy5iYXNlUGF0aCA9IGdvb2cuZ2xvYmFsLkNMT1NVUkVfQkFTRV9QQVRIO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoIWdvb2cuaW5IdG1sRG9jdW1lbnRfKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGRvYyA9IGdvb2cuZ2xvYmFsLmRvY3VtZW50O1xuICAgIHZhciBzY3JpcHRzID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTtcbiAgICAvLyBTZWFyY2ggYmFja3dhcmRzIHNpbmNlIHRoZSBjdXJyZW50IHNjcmlwdCBpcyBpbiBhbG1vc3QgYWxsIGNhc2VzIHRoZSBvbmVcbiAgICAvLyB0aGF0IGhhcyBiYXNlLmpzLlxuICAgIGZvciAodmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB2YXIgc3JjID0gc2NyaXB0c1tpXS5zcmM7XG4gICAgICB2YXIgcW1hcmsgPSBzcmMubGFzdEluZGV4T2YoJz8nKTtcbiAgICAgIHZhciBsID0gcW1hcmsgPT0gLTEgPyBzcmMubGVuZ3RoIDogcW1hcms7XG4gICAgICBpZiAoc3JjLnN1YnN0cihsIC0gNywgNykgPT0gJ2Jhc2UuanMnKSB7XG4gICAgICAgIGdvb2cuYmFzZVBhdGggPSBzcmMuc3Vic3RyKDAsIGwgLSA3KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuXG4gIC8qKlxuICAgKiBJbXBvcnRzIGEgc2NyaXB0IGlmLCBhbmQgb25seSBpZiwgdGhhdCBzY3JpcHQgaGFzbid0IGFscmVhZHkgYmVlbiBpbXBvcnRlZC5cbiAgICogKE11c3QgYmUgY2FsbGVkIGF0IGV4ZWN1dGlvbiB0aW1lKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjIFNjcmlwdCBzb3VyY2UuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLmltcG9ydFNjcmlwdF8gPSBmdW5jdGlvbihzcmMpIHtcbiAgICB2YXIgaW1wb3J0U2NyaXB0ID0gZ29vZy5nbG9iYWwuQ0xPU1VSRV9JTVBPUlRfU0NSSVBUIHx8XG4gICAgICAgIGdvb2cud3JpdGVTY3JpcHRUYWdfO1xuICAgIGlmICghZ29vZy5kZXBlbmRlbmNpZXNfLndyaXR0ZW5bc3JjXSAmJiBpbXBvcnRTY3JpcHQoc3JjKSkge1xuICAgICAgZ29vZy5kZXBlbmRlbmNpZXNfLndyaXR0ZW5bc3JjXSA9IHRydWU7XG4gICAgfVxuICB9O1xuXG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBpbXBvcnQgZnVuY3Rpb24uIFdyaXRlcyBhIHNjcmlwdCB0YWcgdG9cbiAgICogaW1wb3J0IHRoZSBzY3JpcHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgVGhlIHNjcmlwdCBzb3VyY2UuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNjcmlwdCB3YXMgaW1wb3J0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdvb2cud3JpdGVTY3JpcHRUYWdfID0gZnVuY3Rpb24oc3JjKSB7XG4gICAgaWYgKGdvb2cuaW5IdG1sRG9jdW1lbnRfKCkpIHtcbiAgICAgIHZhciBkb2MgPSBnb29nLmdsb2JhbC5kb2N1bWVudDtcbiAgICAgIGRvYy53cml0ZShcbiAgICAgICAgICAnPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgc3JjPVwiJyArIHNyYyArICdcIj48LycgKyAnc2NyaXB0PicpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG5cblxuICAvKipcbiAgICogUmVzb2x2ZXMgZGVwZW5kZW5jaWVzIGJhc2VkIG9uIHRoZSBkZXBlbmRlbmNpZXMgYWRkZWQgdXNpbmcgYWRkRGVwZW5kZW5jeVxuICAgKiBhbmQgY2FsbHMgaW1wb3J0U2NyaXB0XyBpbiB0aGUgY29ycmVjdCBvcmRlci5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdvb2cud3JpdGVTY3JpcHRzXyA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIHRoZSBzY3JpcHRzIHdlIG5lZWQgdG8gd3JpdGUgdGhpcyB0aW1lXG4gICAgdmFyIHNjcmlwdHMgPSBbXTtcbiAgICB2YXIgc2VlblNjcmlwdCA9IHt9O1xuICAgIHZhciBkZXBzID0gZ29vZy5kZXBlbmRlbmNpZXNfO1xuXG4gICAgZnVuY3Rpb24gdmlzaXROb2RlKHBhdGgpIHtcbiAgICAgIGlmIChwYXRoIGluIGRlcHMud3JpdHRlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHdlIGhhdmUgYWxyZWFkeSB2aXNpdGVkIHRoaXMgb25lLiBXZSBjYW4gZ2V0IGhlcmUgaWYgd2UgaGF2ZSBjeWNsaWNcbiAgICAgIC8vIGRlcGVuZGVuY2llc1xuICAgICAgaWYgKHBhdGggaW4gZGVwcy52aXNpdGVkKSB7XG4gICAgICAgIGlmICghKHBhdGggaW4gc2VlblNjcmlwdCkpIHtcbiAgICAgICAgICBzZWVuU2NyaXB0W3BhdGhdID0gdHJ1ZTtcbiAgICAgICAgICBzY3JpcHRzLnB1c2gocGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZXBzLnZpc2l0ZWRbcGF0aF0gPSB0cnVlO1xuXG4gICAgICBpZiAocGF0aCBpbiBkZXBzLnJlcXVpcmVzKSB7XG4gICAgICAgIGZvciAodmFyIHJlcXVpcmVOYW1lIGluIGRlcHMucmVxdWlyZXNbcGF0aF0pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgcmVxdWlyZWQgbmFtZSBpcyBkZWZpbmVkLCB3ZSBhc3N1bWUgdGhhdCBpdCB3YXMgYWxyZWFkeVxuICAgICAgICAgIC8vIGJvb3RzdHJhcHBlZCBieSBvdGhlciBtZWFucy5cbiAgICAgICAgICBpZiAoIWdvb2cuaXNQcm92aWRlZF8ocmVxdWlyZU5hbWUpKSB7XG4gICAgICAgICAgICBpZiAocmVxdWlyZU5hbWUgaW4gZGVwcy5uYW1lVG9QYXRoKSB7XG4gICAgICAgICAgICAgIHZpc2l0Tm9kZShkZXBzLm5hbWVUb1BhdGhbcmVxdWlyZU5hbWVdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCdVbmRlZmluZWQgbmFtZVRvUGF0aCBmb3IgJyArIHJlcXVpcmVOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCEocGF0aCBpbiBzZWVuU2NyaXB0KSkge1xuICAgICAgICBzZWVuU2NyaXB0W3BhdGhdID0gdHJ1ZTtcbiAgICAgICAgc2NyaXB0cy5wdXNoKHBhdGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIHBhdGggaW4gZ29vZy5pbmNsdWRlZF8pIHtcbiAgICAgIGlmICghZGVwcy53cml0dGVuW3BhdGhdKSB7XG4gICAgICAgIHZpc2l0Tm9kZShwYXRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChzY3JpcHRzW2ldKSB7XG4gICAgICAgIGdvb2cuaW1wb3J0U2NyaXB0Xyhnb29nLmJhc2VQYXRoICsgc2NyaXB0c1tpXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcignVW5kZWZpbmVkIHNjcmlwdCBpbnB1dCcpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuXG4gIC8qKlxuICAgKiBMb29rcyBhdCB0aGUgZGVwZW5kZW5jeSBydWxlcyBhbmQgdHJpZXMgdG8gZGV0ZXJtaW5lIHRoZSBzY3JpcHQgZmlsZSB0aGF0XG4gICAqIGZ1bGZpbGxzIGEgcGFydGljdWxhciBydWxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcnVsZSBJbiB0aGUgZm9ybSBnb29nLm5hbWVzcGFjZS5DbGFzcyBvciBwcm9qZWN0LnNjcmlwdC5cbiAgICogQHJldHVybiB7P3N0cmluZ30gVXJsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJ1bGUsIG9yIG51bGwuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLmdldFBhdGhGcm9tRGVwc18gPSBmdW5jdGlvbihydWxlKSB7XG4gICAgaWYgKHJ1bGUgaW4gZ29vZy5kZXBlbmRlbmNpZXNfLm5hbWVUb1BhdGgpIHtcbiAgICAgIHJldHVybiBnb29nLmRlcGVuZGVuY2llc18ubmFtZVRvUGF0aFtydWxlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIGdvb2cuZmluZEJhc2VQYXRoXygpO1xuXG4gIC8vIEFsbG93IHByb2plY3RzIHRvIG1hbmFnZSB0aGUgZGVwcyBmaWxlcyB0aGVtc2VsdmVzLlxuICBpZiAoIWdvb2cuZ2xvYmFsLkNMT1NVUkVfTk9fREVQUykge1xuICAgIGdvb2cuaW1wb3J0U2NyaXB0Xyhnb29nLmJhc2VQYXRoICsgJ2RlcHMuanMnKTtcbiAgfVxufVxuXG5cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIExhbmd1YWdlIEVuaGFuY2VtZW50c1xuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuXG4vKipcbiAqIFRoaXMgaXMgYSBcImZpeGVkXCIgdmVyc2lvbiBvZiB0aGUgdHlwZW9mIG9wZXJhdG9yLiAgSXQgZGlmZmVycyBmcm9tIHRoZSB0eXBlb2ZcbiAqIG9wZXJhdG9yIGluIHN1Y2ggYSB3YXkgdGhhdCBudWxsIHJldHVybnMgJ251bGwnIGFuZCBhcnJheXMgcmV0dXJuICdhcnJheScuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBnZXQgdGhlIHR5cGUgb2YuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSB0eXBlLlxuICovXG5nb29nLnR5cGVPZiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBzID0gdHlwZW9mIHZhbHVlO1xuICBpZiAocyA9PSAnb2JqZWN0Jykge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgLy8gQ2hlY2sgdGhlc2UgZmlyc3QsIHNvIHdlIGNhbiBhdm9pZCBjYWxsaW5nIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgaWZcbiAgICAgIC8vIHBvc3NpYmxlLlxuICAgICAgLy9cbiAgICAgIC8vIElFIGltcHJvcGVybHkgbWFyc2hhbHMgdHllcG9mIGFjcm9zcyBleGVjdXRpb24gY29udGV4dHMsIGJ1dCBhXG4gICAgICAvLyBjcm9zcy1jb250ZXh0IG9iamVjdCB3aWxsIHN0aWxsIHJldHVybiBmYWxzZSBmb3IgXCJpbnN0YW5jZW9mIE9iamVjdFwiLlxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBzO1xuICAgICAgfVxuXG4gICAgICAvLyBIQUNLOiBJbiBvcmRlciB0byB1c2UgYW4gT2JqZWN0IHByb3RvdHlwZSBtZXRob2Qgb24gdGhlIGFyYml0cmFyeVxuICAgICAgLy8gICB2YWx1ZSwgdGhlIGNvbXBpbGVyIHJlcXVpcmVzIHRoZSB2YWx1ZSBiZSBjYXN0IHRvIHR5cGUgT2JqZWN0LFxuICAgICAgLy8gICBldmVuIHRob3VnaCB0aGUgRUNNQSBzcGVjIGV4cGxpY2l0bHkgYWxsb3dzIGl0LlxuICAgICAgdmFyIGNsYXNzTmFtZSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChcbiAgICAgICAgICAvKiogQHR5cGUge09iamVjdH0gKi8gKHZhbHVlKSk7XG4gICAgICAvLyBJbiBGaXJlZm94IDMuNiwgYXR0ZW1wdGluZyB0byBhY2Nlc3MgaWZyYW1lIHdpbmRvdyBvYmplY3RzJyBsZW5ndGhcbiAgICAgIC8vIHByb3BlcnR5IHRocm93cyBhbiBOU19FUlJPUl9GQUlMVVJFLCBzbyB3ZSBuZWVkIHRvIHNwZWNpYWwtY2FzZSBpdFxuICAgICAgLy8gaGVyZS5cbiAgICAgIGlmIChjbGFzc05hbWUgPT0gJ1tvYmplY3QgV2luZG93XScpIHtcbiAgICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBjYW5ub3QgYWx3YXlzIHVzZSBjb25zdHJ1Y3RvciA9PSBBcnJheSBvciBpbnN0YW5jZW9mIEFycmF5IGJlY2F1c2VcbiAgICAgIC8vIGRpZmZlcmVudCBmcmFtZXMgaGF2ZSBkaWZmZXJlbnQgQXJyYXkgb2JqZWN0cy4gSW4gSUU2LCBpZiB0aGUgaWZyYW1lXG4gICAgICAvLyB3aGVyZSB0aGUgYXJyYXkgd2FzIGNyZWF0ZWQgaXMgZGVzdHJveWVkLCB0aGUgYXJyYXkgbG9zZXMgaXRzXG4gICAgICAvLyBwcm90b3R5cGUuIFRoZW4gZGVyZWZlcmVuY2luZyB2YWwuc3BsaWNlIGhlcmUgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgc29cbiAgICAgIC8vIHdlIGNhbid0IHVzZSBnb29nLmlzRnVuY3Rpb24uIENhbGxpbmcgdHlwZW9mIGRpcmVjdGx5IHJldHVybnMgJ3Vua25vd24nXG4gICAgICAvLyBzbyB0aGF0IHdpbGwgd29yay4gSW4gdGhpcyBjYXNlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGZhbHNlIGFuZFxuICAgICAgLy8gbW9zdCBhcnJheSBmdW5jdGlvbnMgd2lsbCBzdGlsbCB3b3JrIGJlY2F1c2UgdGhlIGFycmF5IGlzIHN0aWxsXG4gICAgICAvLyBhcnJheS1saWtlIChzdXBwb3J0cyBsZW5ndGggYW5kIFtdKSBldmVuIHRob3VnaCBpdCBoYXMgbG9zdCBpdHNcbiAgICAgIC8vIHByb3RvdHlwZS5cbiAgICAgIC8vIE1hcmsgTWlsbGVyIG5vdGljZWQgdGhhdCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG4gICAgICAvLyBhbGxvd3MgYWNjZXNzIHRvIHRoZSB1bmZvcmdlYWJsZSBbW0NsYXNzXV0gcHJvcGVydHkuXG4gICAgICAvLyAgMTUuMi40LjIgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAoIClcbiAgICAgIC8vICBXaGVuIHRoZSB0b1N0cmluZyBtZXRob2QgaXMgY2FsbGVkLCB0aGUgZm9sbG93aW5nIHN0ZXBzIGFyZSB0YWtlbjpcbiAgICAgIC8vICAgICAgMS4gR2V0IHRoZSBbW0NsYXNzXV0gcHJvcGVydHkgb2YgdGhpcyBvYmplY3QuXG4gICAgICAvLyAgICAgIDIuIENvbXB1dGUgYSBzdHJpbmcgdmFsdWUgYnkgY29uY2F0ZW5hdGluZyB0aGUgdGhyZWUgc3RyaW5nc1xuICAgICAgLy8gICAgICAgICBcIltvYmplY3QgXCIsIFJlc3VsdCgxKSwgYW5kIFwiXVwiLlxuICAgICAgLy8gICAgICAzLiBSZXR1cm4gUmVzdWx0KDIpLlxuICAgICAgLy8gYW5kIHRoaXMgYmVoYXZpb3Igc3Vydml2ZXMgdGhlIGRlc3RydWN0aW9uIG9mIHRoZSBleGVjdXRpb24gY29udGV4dC5cbiAgICAgIGlmICgoY2xhc3NOYW1lID09ICdbb2JqZWN0IEFycmF5XScgfHxcbiAgICAgICAgICAgLy8gSW4gSUUgYWxsIG5vbiB2YWx1ZSB0eXBlcyBhcmUgd3JhcHBlZCBhcyBvYmplY3RzIGFjcm9zcyB3aW5kb3dcbiAgICAgICAgICAgLy8gYm91bmRhcmllcyAobm90IGlmcmFtZSB0aG91Z2gpIHNvIHdlIGhhdmUgdG8gZG8gb2JqZWN0IGRldGVjdGlvblxuICAgICAgICAgICAvLyBmb3IgdGhpcyBlZGdlIGNhc2VcbiAgICAgICAgICAgdHlwZW9mIHZhbHVlLmxlbmd0aCA9PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICB0eXBlb2YgdmFsdWUuc3BsaWNlICE9ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgIHR5cGVvZiB2YWx1ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSAhPSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAhdmFsdWUucHJvcGVydHlJc0VudW1lcmFibGUoJ3NwbGljZScpXG5cbiAgICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgICAgfVxuICAgICAgLy8gSEFDSzogVGhlcmUgaXMgc3RpbGwgYW4gYXJyYXkgY2FzZSB0aGF0IGZhaWxzLlxuICAgICAgLy8gICAgIGZ1bmN0aW9uIEFycmF5SW1wb3N0b3IoKSB7fVxuICAgICAgLy8gICAgIEFycmF5SW1wb3N0b3IucHJvdG90eXBlID0gW107XG4gICAgICAvLyAgICAgdmFyIGltcG9zdG9yID0gbmV3IEFycmF5SW1wb3N0b3I7XG4gICAgICAvLyB0aGlzIGNhbiBiZSBmaXhlZCBieSBnZXR0aW5nIHJpZCBvZiB0aGUgZmFzdCBwYXRoXG4gICAgICAvLyAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkgYW5kIHNvbGVseSByZWx5aW5nIG9uXG4gICAgICAvLyAodmFsdWUgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy52YWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJylcbiAgICAgIC8vIGJ1dCB0aGF0IHdvdWxkIHJlcXVpcmUgbWFueSBtb3JlIGZ1bmN0aW9uIGNhbGxzIGFuZCBpcyBub3Qgd2FycmFudGVkXG4gICAgICAvLyB1bmxlc3MgY2xvc3VyZSBjb2RlIGlzIHJlY2VpdmluZyBvYmplY3RzIGZyb20gdW50cnVzdGVkIHNvdXJjZXMuXG5cbiAgICAgIC8vIElFIGluIGNyb3NzLXdpbmRvdyBjYWxscyBkb2VzIG5vdCBjb3JyZWN0bHkgbWFyc2hhbCB0aGUgZnVuY3Rpb24gdHlwZVxuICAgICAgLy8gKGl0IGFwcGVhcnMganVzdCBhcyBhbiBvYmplY3QpIHNvIHdlIGNhbm5vdCB1c2UganVzdCB0eXBlb2YgdmFsID09XG4gICAgICAvLyAnZnVuY3Rpb24nLiBIb3dldmVyLCBpZiB0aGUgb2JqZWN0IGhhcyBhIGNhbGwgcHJvcGVydHksIGl0IGlzIGFcbiAgICAgIC8vIGZ1bmN0aW9uLlxuICAgICAgaWYgKChjbGFzc05hbWUgPT0gJ1tvYmplY3QgRnVuY3Rpb25dJyB8fFxuICAgICAgICAgIHR5cGVvZiB2YWx1ZS5jYWxsICE9ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgdHlwZW9mIHZhbHVlLnByb3BlcnR5SXNFbnVtZXJhYmxlICE9ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgIXZhbHVlLnByb3BlcnR5SXNFbnVtZXJhYmxlKCdjYWxsJykpKSB7XG4gICAgICAgIHJldHVybiAnZnVuY3Rpb24nO1xuICAgICAgfVxuXG5cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9XG5cbiAgfSBlbHNlIGlmIChzID09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlLmNhbGwgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBJbiBTYWZhcmkgdHlwZW9mIG5vZGVMaXN0IHJldHVybnMgJ2Z1bmN0aW9uJywgYW5kIG9uIEZpcmVmb3hcbiAgICAvLyB0eXBlb2YgYmVoYXZlcyBzaW1pbGFybHkgZm9yIEhUTUx7QXBwbGV0LEVtYmVkLE9iamVjdH1FbGVtZW50c1xuICAgIC8vIGFuZCBSZWdFeHBzLiAgV2Ugd291bGQgbGlrZSB0byByZXR1cm4gb2JqZWN0IGZvciB0aG9zZSBhbmQgd2UgY2FuXG4gICAgLy8gZGV0ZWN0IGFuIGludmFsaWQgZnVuY3Rpb24gYnkgbWFraW5nIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb25cbiAgICAvLyBvYmplY3QgaGFzIGEgY2FsbCBtZXRob2QuXG4gICAgcmV0dXJuICdvYmplY3QnO1xuICB9XG4gIHJldHVybiBzO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIG5vdCB8dW5kZWZpbmVkfC5cbiAqIFdBUk5JTkc6IERvIG5vdCB1c2UgdGhpcyB0byB0ZXN0IGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gVXNlIHRoZSBpblxuICogb3BlcmF0b3IgaW5zdGVhZC4gIEFkZGl0aW9uYWxseSwgdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGdsb2JhbFxuICogdW5kZWZpbmVkIHZhcmlhYmxlIGhhcyBub3QgYmVlbiByZWRlZmluZWQuXG4gKiBAcGFyYW0geyp9IHZhbCBWYXJpYWJsZSB0byB0ZXN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YXJpYWJsZSBpcyBkZWZpbmVkLlxuICovXG5nb29nLmlzRGVmID0gZnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB2YWwgIT09IHVuZGVmaW5lZDtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyB8bnVsbHxcbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIG51bGwuXG4gKi9cbmdvb2cuaXNOdWxsID0gZnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB2YWwgPT09IG51bGw7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgZGVmaW5lZCBhbmQgbm90IG51bGxcbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIGRlZmluZWQgYW5kIG5vdCBudWxsLlxuICovXG5nb29nLmlzRGVmQW5kTm90TnVsbCA9IGZ1bmN0aW9uKHZhbCkge1xuICAvLyBOb3RlIHRoYXQgdW5kZWZpbmVkID09IG51bGwuXG4gIHJldHVybiB2YWwgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhbiBhcnJheVxuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgYW4gYXJyYXkuXG4gKi9cbmdvb2cuaXNBcnJheSA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gZ29vZy50eXBlT2YodmFsKSA9PSAnYXJyYXknO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IGxvb2tzIGxpa2UgYW4gYXJyYXkuIFRvIHF1YWxpZnkgYXMgYXJyYXkgbGlrZVxuICogdGhlIHZhbHVlIG5lZWRzIHRvIGJlIGVpdGhlciBhIE5vZGVMaXN0IG9yIGFuIG9iamVjdCB3aXRoIGEgTnVtYmVyIGxlbmd0aFxuICogcHJvcGVydHkuXG4gKiBAcGFyYW0geyp9IHZhbCBWYXJpYWJsZSB0byB0ZXN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YXJpYWJsZSBpcyBhbiBhcnJheS5cbiAqL1xuZ29vZy5pc0FycmF5TGlrZSA9IGZ1bmN0aW9uKHZhbCkge1xuICB2YXIgdHlwZSA9IGdvb2cudHlwZU9mKHZhbCk7XG4gIHJldHVybiB0eXBlID09ICdhcnJheScgfHwgdHlwZSA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsLmxlbmd0aCA9PSAnbnVtYmVyJztcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBsb29rcyBsaWtlIGEgRGF0ZS4gVG8gcXVhbGlmeSBhcyBEYXRlLWxpa2VcbiAqIHRoZSB2YWx1ZSBuZWVkcyB0byBiZSBhbiBvYmplY3QgYW5kIGhhdmUgYSBnZXRGdWxsWWVhcigpIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgYSBsaWtlIGEgRGF0ZS5cbiAqL1xuZ29vZy5pc0RhdGVMaWtlID0gZnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiBnb29nLmlzT2JqZWN0KHZhbCkgJiYgdHlwZW9mIHZhbC5nZXRGdWxsWWVhciA9PSAnZnVuY3Rpb24nO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGEgc3RyaW5nXG4gKiBAcGFyYW0geyp9IHZhbCBWYXJpYWJsZSB0byB0ZXN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YXJpYWJsZSBpcyBhIHN0cmluZy5cbiAqL1xuZ29vZy5pc1N0cmluZyA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PSAnc3RyaW5nJztcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIGJvb2xlYW5cbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIGJvb2xlYW4uXG4gKi9cbmdvb2cuaXNCb29sZWFuID0gZnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09ICdib29sZWFuJztcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIG51bWJlclxuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgYSBudW1iZXIuXG4gKi9cbmdvb2cuaXNOdW1iZXIgPSBmdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gJ251bWJlcic7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYSBmdW5jdGlvblxuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgYSBmdW5jdGlvbi5cbiAqL1xuZ29vZy5pc0Z1bmN0aW9uID0gZnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiBnb29nLnR5cGVPZih2YWwpID09ICdmdW5jdGlvbic7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYW4gb2JqZWN0LiAgVGhpcyBpbmNsdWRlcyBhcnJheXNcbiAqIGFuZCBmdW5jdGlvbnMuXG4gKiBAcGFyYW0geyp9IHZhbCBWYXJpYWJsZSB0byB0ZXN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YXJpYWJsZSBpcyBhbiBvYmplY3QuXG4gKi9cbmdvb2cuaXNPYmplY3QgPSBmdW5jdGlvbih2YWwpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICByZXR1cm4gdHlwZSA9PSAnb2JqZWN0JyAmJiB2YWwgIT0gbnVsbCB8fCB0eXBlID09ICdmdW5jdGlvbic7XG4gIC8vIHJldHVybiBPYmplY3QodmFsKSA9PT0gdmFsIGFsc28gd29ya3MsIGJ1dCBpcyBzbG93ZXIsIGVzcGVjaWFsbHkgaWYgdmFsIGlzXG4gIC8vIG5vdCBhbiBvYmplY3QuXG59O1xuXG5cbi8qKlxuICogR2V0cyBhIHVuaXF1ZSBJRCBmb3IgYW4gb2JqZWN0LiBUaGlzIG11dGF0ZXMgdGhlIG9iamVjdCBzbyB0aGF0IGZ1cnRoZXJcbiAqIGNhbGxzIHdpdGggdGhlIHNhbWUgb2JqZWN0IGFzIGEgcGFyYW1ldGVyIHJldHVybnMgdGhlIHNhbWUgdmFsdWUuIFRoZSB1bmlxdWVcbiAqIElEIGlzIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlIGFjcm9zcyB0aGUgY3VycmVudCBzZXNzaW9uIGFtb25nc3Qgb2JqZWN0cyB0aGF0XG4gKiBhcmUgcGFzc2VkIGludG8ge0Bjb2RlIGdldFVpZH0uIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBJRCBpcyB1bmlxdWVcbiAqIG9yIGNvbnNpc3RlbnQgYWNyb3NzIHNlc3Npb25zLiBJdCBpcyB1bnNhZmUgdG8gZ2VuZXJhdGUgdW5pcXVlIElEIGZvclxuICogZnVuY3Rpb24gcHJvdG90eXBlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gZ2V0IHRoZSB1bmlxdWUgSUQgZm9yLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdW5pcXVlIElEIGZvciB0aGUgb2JqZWN0LlxuICovXG5nb29nLmdldFVpZCA9IGZ1bmN0aW9uKG9iaikge1xuICAvLyBUT0RPKGFydik6IE1ha2UgdGhlIHR5cGUgc3RyaWN0ZXIsIGRvIG5vdCBhY2NlcHQgbnVsbC5cblxuICAvLyBJbiBPcGVyYSB3aW5kb3cuaGFzT3duUHJvcGVydHkgZXhpc3RzIGJ1dCBhbHdheXMgcmV0dXJucyBmYWxzZSBzbyB3ZSBhdm9pZFxuICAvLyB1c2luZyBpdC4gQXMgYSBjb25zZXF1ZW5jZSB0aGUgdW5pcXVlIElEIGdlbmVyYXRlZCBmb3IgQmFzZUNsYXNzLnByb3RvdHlwZVxuICAvLyBhbmQgU3ViQ2xhc3MucHJvdG90eXBlIHdpbGwgYmUgdGhlIHNhbWUuXG4gIHJldHVybiBvYmpbZ29vZy5VSURfUFJPUEVSVFlfXSB8fFxuICAgICAgKG9ialtnb29nLlVJRF9QUk9QRVJUWV9dID0gKytnb29nLnVpZENvdW50ZXJfKTtcbn07XG5cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSB1bmlxdWUgSUQgZnJvbSBhbiBvYmplY3QuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSBvYmplY3Qgd2FzXG4gKiBwcmV2aW91c2x5IG11dGF0ZWQgdXNpbmcge0Bjb2RlIGdvb2cuZ2V0VWlkfSBpbiB3aGljaCBjYXNlIHRoZSBtdXRhdGlvbiBpc1xuICogdW5kb25lLlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHJlbW92ZSB0aGUgdW5pcXVlIElEIGZpZWxkIGZyb20uXG4gKi9cbmdvb2cucmVtb3ZlVWlkID0gZnVuY3Rpb24ob2JqKSB7XG4gIC8vIFRPRE8oYXJ2KTogTWFrZSB0aGUgdHlwZSBzdHJpY3RlciwgZG8gbm90IGFjY2VwdCBudWxsLlxuXG4gIC8vIERPTSBub2RlcyBpbiBJRSBhcmUgbm90IGluc3RhbmNlIG9mIE9iamVjdCBhbmQgdGhyb3dzIGV4Y2VwdGlvblxuICAvLyBmb3IgZGVsZXRlLiBJbnN0ZWFkIHdlIHRyeSB0byB1c2UgcmVtb3ZlQXR0cmlidXRlXG4gIGlmICgncmVtb3ZlQXR0cmlidXRlJyBpbiBvYmopIHtcbiAgICBvYmoucmVtb3ZlQXR0cmlidXRlKGdvb2cuVUlEX1BST1BFUlRZXyk7XG4gIH1cbiAgLyoqIEBwcmVzZXJ2ZVRyeSAqL1xuICB0cnkge1xuICAgIGRlbGV0ZSBvYmpbZ29vZy5VSURfUFJPUEVSVFlfXTtcbiAgfSBjYXRjaCAoZXgpIHtcbiAgfVxufTtcblxuXG4vKipcbiAqIE5hbWUgZm9yIHVuaXF1ZSBJRCBwcm9wZXJ0eS4gSW5pdGlhbGl6ZWQgaW4gYSB3YXkgdG8gaGVscCBhdm9pZCBjb2xsaXNpb25zXG4gKiB3aXRoIG90aGVyIGNsb3N1cmUgamF2YXNjcmlwdCBvbiB0aGUgc2FtZSBwYWdlLlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cbmdvb2cuVUlEX1BST1BFUlRZXyA9ICdjbG9zdXJlX3VpZF8nICtcbiAgICBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyMTQ3NDgzNjQ4KS50b1N0cmluZygzNik7XG5cblxuLyoqXG4gKiBDb3VudGVyIGZvciBVSUQuXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQHByaXZhdGVcbiAqL1xuZ29vZy51aWRDb3VudGVyXyA9IDA7XG5cblxuLyoqXG4gKiBBZGRzIGEgaGFzaCBjb2RlIGZpZWxkIHRvIGFuIG9iamVjdC4gVGhlIGhhc2ggY29kZSBpcyB1bmlxdWUgZm9yIHRoZVxuICogZ2l2ZW4gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIGdldCB0aGUgaGFzaCBjb2RlIGZvci5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGhhc2ggY29kZSBmb3IgdGhlIG9iamVjdC5cbiAqIEBkZXByZWNhdGVkIFVzZSBnb29nLmdldFVpZCBpbnN0ZWFkLlxuICovXG5nb29nLmdldEhhc2hDb2RlID0gZ29vZy5nZXRVaWQ7XG5cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBoYXNoIGNvZGUgZmllbGQgZnJvbSBhbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcmVtb3ZlIHRoZSBmaWVsZCBmcm9tLlxuICogQGRlcHJlY2F0ZWQgVXNlIGdvb2cucmVtb3ZlVWlkIGluc3RlYWQuXG4gKi9cbmdvb2cucmVtb3ZlSGFzaENvZGUgPSBnb29nLnJlbW92ZVVpZDtcblxuXG4vKipcbiAqIENsb25lcyBhIHZhbHVlLiBUaGUgaW5wdXQgbWF5IGJlIGFuIE9iamVjdCwgQXJyYXksIG9yIGJhc2ljIHR5cGUuIE9iamVjdHMgYW5kXG4gKiBhcnJheXMgd2lsbCBiZSBjbG9uZWQgcmVjdXJzaXZlbHkuXG4gKlxuICogV0FSTklOR1M6XG4gKiA8Y29kZT5nb29nLmNsb25lT2JqZWN0PC9jb2RlPiBkb2VzIG5vdCBkZXRlY3QgcmVmZXJlbmNlIGxvb3BzLiBPYmplY3RzIHRoYXRcbiAqIHJlZmVyIHRvIHRoZW1zZWx2ZXMgd2lsbCBjYXVzZSBpbmZpbml0ZSByZWN1cnNpb24uXG4gKlxuICogPGNvZGU+Z29vZy5jbG9uZU9iamVjdDwvY29kZT4gaXMgdW5hd2FyZSBvZiB1bmlxdWUgaWRlbnRpZmllcnMsIGFuZCBjb3BpZXNcbiAqIFVJRHMgY3JlYXRlZCBieSA8Y29kZT5nZXRVaWQ8L2NvZGU+IGludG8gY2xvbmVkIHJlc3VsdHMuXG4gKlxuICogQHBhcmFtIHsqfSBvYmogVGhlIHZhbHVlIHRvIGNsb25lLlxuICogQHJldHVybiB7Kn0gQSBjbG9uZSBvZiB0aGUgaW5wdXQgdmFsdWUuXG4gKiBAZGVwcmVjYXRlZCBnb29nLmNsb25lT2JqZWN0IGlzIHVuc2FmZS4gUHJlZmVyIHRoZSBnb29nLm9iamVjdCBtZXRob2RzLlxuICovXG5nb29nLmNsb25lT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gIHZhciB0eXBlID0gZ29vZy50eXBlT2Yob2JqKTtcbiAgaWYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnYXJyYXknKSB7XG4gICAgaWYgKG9iai5jbG9uZSkge1xuICAgICAgcmV0dXJuIG9iai5jbG9uZSgpO1xuICAgIH1cbiAgICB2YXIgY2xvbmUgPSB0eXBlID09ICdhcnJheScgPyBbXSA6IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGNsb25lW2tleV0gPSBnb29nLmNsb25lT2JqZWN0KG9ialtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cblxuLyoqXG4gKiBGb3J3YXJkIGRlY2xhcmF0aW9uIGZvciB0aGUgY2xvbmUgbWV0aG9kLiBUaGlzIGlzIG5lY2Vzc2FyeSB1bnRpbCB0aGVcbiAqIGNvbXBpbGVyIGNhbiBiZXR0ZXIgc3VwcG9ydCBkdWNrLXR5cGluZyBjb25zdHJ1Y3RzIGFzIHVzZWQgaW5cbiAqIGdvb2cuY2xvbmVPYmplY3QuXG4gKlxuICogVE9ETyhicmVubmVtYW4pOiBSZW1vdmUgb25jZSB0aGUgSlNDb21waWxlciBjYW4gaW5mZXIgdGhhdCB0aGUgY2hlY2sgZm9yXG4gKiBwcm90by5jbG9uZSBpcyBzYWZlIGluIGdvb2cuY2xvbmVPYmplY3QuXG4gKlxuICogQHR5cGUge0Z1bmN0aW9ufVxuICovXG5PYmplY3QucHJvdG90eXBlLmNsb25lO1xuXG5cbi8qKlxuICogQSBuYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgZ29vZy5iaW5kLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkuXG4gKiBAcGFyYW0ge09iamVjdHx1bmRlZmluZWR9IHNlbGZPYmogU3BlY2lmaWVzIHRoZSBvYmplY3Qgd2hpY2ggfHRoaXN8IHNob3VsZFxuICogICAgIHBvaW50IHRvIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIHJ1bi5cbiAqIEBwYXJhbSB7Li4uKn0gdmFyX2FyZ3MgQWRkaXRpb25hbCBhcmd1bWVudHMgdGhhdCBhcmUgcGFydGlhbGx5XG4gKiAgICAgYXBwbGllZCB0byB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHshRnVuY3Rpb259IEEgcGFydGlhbGx5LWFwcGxpZWQgZm9ybSBvZiB0aGUgZnVuY3Rpb24gYmluZCgpIHdhc1xuICogICAgIGludm9rZWQgYXMgYSBtZXRob2Qgb2YuXG4gKiBAcHJpdmF0ZVxuICogQHN1cHByZXNzIHtkZXByZWNhdGVkfSBUaGUgY29tcGlsZXIgdGhpbmtzIHRoYXQgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbiAqICAgICBpcyBkZXByZWNhdGVkIGJlY2F1c2Ugc29tZSBwZW9wbGUgaGF2ZSBkZWNsYXJlZCBhIHB1cmUtSlMgdmVyc2lvbi5cbiAqICAgICBPbmx5IHRoZSBwdXJlLUpTIHZlcnNpb24gaXMgdHJ1bHkgZGVwcmVjYXRlZC5cbiAqL1xuZ29vZy5iaW5kTmF0aXZlXyA9IGZ1bmN0aW9uKGZuLCBzZWxmT2JqLCB2YXJfYXJncykge1xuICByZXR1cm4gLyoqIEB0eXBlIHshRnVuY3Rpb259ICovIChmbi5jYWxsLmFwcGx5KGZuLmJpbmQsIGFyZ3VtZW50cykpO1xufTtcblxuXG4vKipcbiAqIEEgcHVyZS1KUyBpbXBsZW1lbnRhdGlvbiBvZiBnb29nLmJpbmQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBBIGZ1bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseS5cbiAqIEBwYXJhbSB7T2JqZWN0fHVuZGVmaW5lZH0gc2VsZk9iaiBTcGVjaWZpZXMgdGhlIG9iamVjdCB3aGljaCB8dGhpc3wgc2hvdWxkXG4gKiAgICAgcG9pbnQgdG8gd2hlbiB0aGUgZnVuY3Rpb24gaXMgcnVuLlxuICogQHBhcmFtIHsuLi4qfSB2YXJfYXJncyBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IGFyZSBwYXJ0aWFsbHlcbiAqICAgICBhcHBsaWVkIHRvIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm4geyFGdW5jdGlvbn0gQSBwYXJ0aWFsbHktYXBwbGllZCBmb3JtIG9mIHRoZSBmdW5jdGlvbiBiaW5kKCkgd2FzXG4gKiAgICAgaW52b2tlZCBhcyBhIG1ldGhvZCBvZi5cbiAqIEBwcml2YXRlXG4gKi9cbmdvb2cuYmluZEpzXyA9IGZ1bmN0aW9uKGZuLCBzZWxmT2JqLCB2YXJfYXJncykge1xuICBpZiAoIWZuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gIH1cblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICB2YXIgYm91bmRBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAvLyBQcmVwZW5kIHRoZSBib3VuZCBhcmd1bWVudHMgdG8gdGhlIGN1cnJlbnQgYXJndW1lbnRzLlxuICAgICAgdmFyIG5ld0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkobmV3QXJncywgYm91bmRBcmdzKTtcbiAgICAgIHJldHVybiBmbi5hcHBseShzZWxmT2JqLCBuZXdBcmdzKTtcbiAgICB9O1xuXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZuLmFwcGx5KHNlbGZPYmosIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFBhcnRpYWxseSBhcHBsaWVzIHRoaXMgZnVuY3Rpb24gdG8gYSBwYXJ0aWN1bGFyICd0aGlzIG9iamVjdCcgYW5kIHplcm8gb3JcbiAqIG1vcmUgYXJndW1lbnRzLiBUaGUgcmVzdWx0IGlzIGEgbmV3IGZ1bmN0aW9uIHdpdGggc29tZSBhcmd1bWVudHMgb2YgdGhlIGZpcnN0XG4gKiBmdW5jdGlvbiBwcmUtZmlsbGVkIGFuZCB0aGUgdmFsdWUgb2YgfHRoaXN8ICdwcmUtc3BlY2lmaWVkJy48YnI+PGJyPlxuICpcbiAqIFJlbWFpbmluZyBhcmd1bWVudHMgc3BlY2lmaWVkIGF0IGNhbGwtdGltZSBhcmUgYXBwZW5kZWQgdG8gdGhlIHByZS1cbiAqIHNwZWNpZmllZCBvbmVzLjxicj48YnI+XG4gKlxuICogQWxzbyBzZWU6IHtAbGluayAjcGFydGlhbH0uPGJyPjxicj5cbiAqXG4gKiBVc2FnZTpcbiAqIDxwcmU+dmFyIGJhck1ldGhCb3VuZCA9IGJpbmQobXlGdW5jdGlvbiwgbXlPYmosICdhcmcxJywgJ2FyZzInKTtcbiAqIGJhck1ldGhCb3VuZCgnYXJnMycsICdhcmc0Jyk7PC9wcmU+XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkuXG4gKiBAcGFyYW0ge09iamVjdHx1bmRlZmluZWR9IHNlbGZPYmogU3BlY2lmaWVzIHRoZSBvYmplY3Qgd2hpY2ggfHRoaXN8IHNob3VsZFxuICogICAgIHBvaW50IHRvIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIHJ1bi5cbiAqIEBwYXJhbSB7Li4uKn0gdmFyX2FyZ3MgQWRkaXRpb25hbCBhcmd1bWVudHMgdGhhdCBhcmUgcGFydGlhbGx5XG4gKiAgICAgYXBwbGllZCB0byB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHshRnVuY3Rpb259IEEgcGFydGlhbGx5LWFwcGxpZWQgZm9ybSBvZiB0aGUgZnVuY3Rpb24gYmluZCgpIHdhc1xuICogICAgIGludm9rZWQgYXMgYSBtZXRob2Qgb2YuXG4gKiBAc3VwcHJlc3Mge2RlcHJlY2F0ZWR9IFNlZSBhYm92ZS5cbiAqL1xuZ29vZy5iaW5kID0gZnVuY3Rpb24oZm4sIHNlbGZPYmosIHZhcl9hcmdzKSB7XG4gIC8vIFRPRE8obmlja3NhbnRvcyk6IG5hcnJvdyB0aGUgdHlwZSBzaWduYXR1cmUuXG4gIGlmIChGdW5jdGlvbi5wcm90b3R5cGUuYmluZCAmJlxuICAgICAgLy8gTk9URShuaWNrc2FudG9zKTogU29tZWJvZHkgcHVsbGVkIGJhc2UuanMgaW50byB0aGUgZGVmYXVsdFxuICAgICAgLy8gQ2hyb21lIGV4dGVuc2lvbiBlbnZpcm9ubWVudC4gVGhpcyBtZWFucyB0aGF0IGZvciBDaHJvbWUgZXh0ZW5zaW9ucyxcbiAgICAgIC8vIHRoZXkgZ2V0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB0aGF0XG4gICAgICAvLyBjYWxscyBnb29nLmJpbmQgaW5zdGVhZCBvZiB0aGUgbmF0aXZlIG9uZS4gRXZlbiB3b3JzZSwgd2UgZG9uJ3Qgd2FudFxuICAgICAgLy8gdG8gaW50cm9kdWNlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIGdvb2cuYmluZCBhbmRcbiAgICAgIC8vIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLCBzbyB3ZSBoYXZlIHRvIGhhY2sgdGhpcyB0byBtYWtlIHN1cmUgaXRcbiAgICAgIC8vIHdvcmtzIGNvcnJlY3RseS5cbiAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLnRvU3RyaW5nKCkuaW5kZXhPZignbmF0aXZlIGNvZGUnKSAhPSAtMSkge1xuICAgIGdvb2cuYmluZCA9IGdvb2cuYmluZE5hdGl2ZV87XG4gIH0gZWxzZSB7XG4gICAgZ29vZy5iaW5kID0gZ29vZy5iaW5kSnNfO1xuICB9XG4gIHJldHVybiBnb29nLmJpbmQuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn07XG5cblxuLyoqXG4gKiBMaWtlIGJpbmQoKSwgZXhjZXB0IHRoYXQgYSAndGhpcyBvYmplY3QnIGlzIG5vdCByZXF1aXJlZC4gVXNlZnVsIHdoZW4gdGhlXG4gKiB0YXJnZXQgZnVuY3Rpb24gaXMgYWxyZWFkeSBib3VuZC5cbiAqXG4gKiBVc2FnZTpcbiAqIHZhciBnID0gcGFydGlhbChmLCBhcmcxLCBhcmcyKTtcbiAqIGcoYXJnMywgYXJnNCk7XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkuXG4gKiBAcGFyYW0gey4uLip9IHZhcl9hcmdzIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRoYXQgYXJlIHBhcnRpYWxseVxuICogICAgIGFwcGxpZWQgdG8gZm4uXG4gKiBAcmV0dXJuIHshRnVuY3Rpb259IEEgcGFydGlhbGx5LWFwcGxpZWQgZm9ybSBvZiB0aGUgZnVuY3Rpb24gYmluZCgpIHdhc1xuICogICAgIGludm9rZWQgYXMgYSBtZXRob2Qgb2YuXG4gKi9cbmdvb2cucGFydGlhbCA9IGZ1bmN0aW9uKGZuLCB2YXJfYXJncykge1xuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAvLyBQcmVwZW5kIHRoZSBib3VuZCBhcmd1bWVudHMgdG8gdGhlIGN1cnJlbnQgYXJndW1lbnRzLlxuICAgIHZhciBuZXdBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICBuZXdBcmdzLnVuc2hpZnQuYXBwbHkobmV3QXJncywgYXJncyk7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpO1xuICB9O1xufTtcblxuXG4vKipcbiAqIENvcGllcyBhbGwgdGhlIG1lbWJlcnMgb2YgYSBzb3VyY2Ugb2JqZWN0IHRvIGEgdGFyZ2V0IG9iamVjdC4gVGhpcyBtZXRob2RcbiAqIGRvZXMgbm90IHdvcmsgb24gYWxsIGJyb3dzZXJzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGNvbnRhaW4ga2V5cyBzdWNoIGFzXG4gKiB0b1N0cmluZyBvciBoYXNPd25Qcm9wZXJ0eS4gVXNlIGdvb2cub2JqZWN0LmV4dGVuZCBmb3IgdGhpcyBwdXJwb3NlLlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldCBUYXJnZXQuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFNvdXJjZS5cbiAqL1xuZ29vZy5taXhpbiA9IGZ1bmN0aW9uKHRhcmdldCwgc291cmNlKSB7XG4gIGZvciAodmFyIHggaW4gc291cmNlKSB7XG4gICAgdGFyZ2V0W3hdID0gc291cmNlW3hdO1xuICB9XG5cbiAgLy8gRm9yIElFNyBvciBsb3dlciwgdGhlIGZvci1pbi1sb29wIGRvZXMgbm90IGNvbnRhaW4gYW55IHByb3BlcnRpZXMgdGhhdCBhcmVcbiAgLy8gbm90IGVudW1lcmFibGUgb24gdGhlIHByb3RvdHlwZSBvYmplY3QgKGZvciBleGFtcGxlLCBpc1Byb3RvdHlwZU9mIGZyb21cbiAgLy8gT2JqZWN0LnByb3RvdHlwZSkgYnV0IGFsc28gaXQgd2lsbCBub3QgaW5jbHVkZSAncmVwbGFjZScgb24gb2JqZWN0cyB0aGF0XG4gIC8vIGV4dGVuZCBTdHJpbmcgYW5kIGNoYW5nZSAncmVwbGFjZScgKG5vdCB0aGF0IGl0IGlzIGNvbW1vbiBmb3IgYW55b25lIHRvXG4gIC8vIGV4dGVuZCBhbnl0aGluZyBleGNlcHQgT2JqZWN0KS5cbn07XG5cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEFuIGludGVnZXIgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXG4gKiAgICAgYmV0d2VlbiBtaWRuaWdodCwgSmFudWFyeSAxLCAxOTcwIGFuZCB0aGUgY3VycmVudCB0aW1lLlxuICovXG5nb29nLm5vdyA9IERhdGUubm93IHx8IChmdW5jdGlvbigpIHtcbiAgLy8gVW5hcnkgcGx1cyBvcGVyYXRvciBjb252ZXJ0cyBpdHMgb3BlcmFuZCB0byBhIG51bWJlciB3aGljaCBpbiB0aGUgY2FzZSBvZlxuICAvLyBhIGRhdGUgaXMgZG9uZSBieSBjYWxsaW5nIGdldFRpbWUoKS5cbiAgcmV0dXJuICtuZXcgRGF0ZSgpO1xufSk7XG5cblxuLyoqXG4gKiBFdmFscyBqYXZhc2NyaXB0IGluIHRoZSBnbG9iYWwgc2NvcGUuICBJbiBJRSB0aGlzIHVzZXMgZXhlY1NjcmlwdCwgb3RoZXJcbiAqIGJyb3dzZXJzIHVzZSBnb29nLmdsb2JhbC5ldmFsLiBJZiBnb29nLmdsb2JhbC5ldmFsIGRvZXMgbm90IGV2YWx1YXRlIGluIHRoZVxuICogZ2xvYmFsIHNjb3BlIChmb3IgZXhhbXBsZSwgaW4gU2FmYXJpKSwgYXBwZW5kcyBhIHNjcmlwdCB0YWcgaW5zdGVhZC5cbiAqIFRocm93cyBhbiBleGNlcHRpb24gaWYgbmVpdGhlciBleGVjU2NyaXB0IG9yIGV2YWwgaXMgZGVmaW5lZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzY3JpcHQgSmF2YVNjcmlwdCBzdHJpbmcuXG4gKi9cbmdvb2cuZ2xvYmFsRXZhbCA9IGZ1bmN0aW9uKHNjcmlwdCkge1xuICBpZiAoZ29vZy5nbG9iYWwuZXhlY1NjcmlwdCkge1xuICAgIGdvb2cuZ2xvYmFsLmV4ZWNTY3JpcHQoc2NyaXB0LCAnSmF2YVNjcmlwdCcpO1xuICB9IGVsc2UgaWYgKGdvb2cuZ2xvYmFsLmV2YWwpIHtcbiAgICAvLyBUZXN0IHRvIHNlZSBpZiBldmFsIHdvcmtzXG4gICAgaWYgKGdvb2cuZXZhbFdvcmtzRm9yR2xvYmFsc18gPT0gbnVsbCkge1xuICAgICAgZ29vZy5nbG9iYWwuZXZhbCgndmFyIF9ldF8gPSAxOycpO1xuICAgICAgaWYgKHR5cGVvZiBnb29nLmdsb2JhbFsnX2V0XyddICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGRlbGV0ZSBnb29nLmdsb2JhbFsnX2V0XyddO1xuICAgICAgICBnb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdvb2cuZXZhbFdvcmtzRm9yR2xvYmFsc18gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ29vZy5ldmFsV29ya3NGb3JHbG9iYWxzXykge1xuICAgICAgZ29vZy5nbG9iYWwuZXZhbChzY3JpcHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZG9jID0gZ29vZy5nbG9iYWwuZG9jdW1lbnQ7XG4gICAgICB2YXIgc2NyaXB0RWx0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgc2NyaXB0RWx0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICAgIHNjcmlwdEVsdC5kZWZlciA9IGZhbHNlO1xuICAgICAgLy8gTm90ZSh1c2VyKTogY2FuJ3QgdXNlIC5pbm5lckhUTUwgc2luY2UgXCJ0KCc8dGVzdD4nKVwiIHdpbGwgZmFpbCBhbmRcbiAgICAgIC8vIC50ZXh0IGRvZXNuJ3Qgd29yayBpbiBTYWZhcmkgMi4gIFRoZXJlZm9yZSB3ZSBhcHBlbmQgYSB0ZXh0IG5vZGUuXG4gICAgICBzY3JpcHRFbHQuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKHNjcmlwdCkpO1xuICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0RWx0KTtcbiAgICAgIGRvYy5ib2R5LnJlbW92ZUNoaWxkKHNjcmlwdEVsdCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IEVycm9yKCdnb29nLmdsb2JhbEV2YWwgbm90IGF2YWlsYWJsZScpO1xuICB9XG59O1xuXG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHdlIGNhbiBjYWxsICdldmFsJyBkaXJlY3RseSB0byBldmFsIGNvZGUgaW4gdGhlXG4gKiBnbG9iYWwgc2NvcGUuIFNldCB0byBhIEJvb2xlYW4gYnkgdGhlIGZpcnN0IGNhbGwgdG8gZ29vZy5nbG9iYWxFdmFsICh3aGljaFxuICogZW1waXJpY2FsbHkgdGVzdHMgd2hldGhlciBldmFsIHdvcmtzIGZvciBnbG9iYWxzKS4gQHNlZSBnb29nLmdsb2JhbEV2YWxcbiAqIEB0eXBlIHs/Ym9vbGVhbn1cbiAqIEBwcml2YXRlXG4gKi9cbmdvb2cuZXZhbFdvcmtzRm9yR2xvYmFsc18gPSBudWxsO1xuXG5cbi8qKlxuICogT3B0aW9uYWwgbWFwIG9mIENTUyBjbGFzcyBuYW1lcyB0byBvYmZ1c2NhdGVkIG5hbWVzIHVzZWQgd2l0aFxuICogZ29vZy5nZXRDc3NOYW1lKCkuXG4gKiBAdHlwZSB7T2JqZWN0fHVuZGVmaW5lZH1cbiAqIEBwcml2YXRlXG4gKiBAc2VlIGdvb2cuc2V0Q3NzTmFtZU1hcHBpbmdcbiAqL1xuZ29vZy5jc3NOYW1lTWFwcGluZ187XG5cblxuLyoqXG4gKiBPcHRpb25hbCBvYmZ1c2NhdGlvbiBzdHlsZSBmb3IgQ1NTIGNsYXNzIG5hbWVzLiBTaG91bGQgYmUgc2V0IHRvIGVpdGhlclxuICogJ0JZX1dIT0xFJyBvciAnQllfUEFSVCcgaWYgZGVmaW5lZC5cbiAqIEB0eXBlIHtzdHJpbmd8dW5kZWZpbmVkfVxuICogQHByaXZhdGVcbiAqIEBzZWUgZ29vZy5zZXRDc3NOYW1lTWFwcGluZ1xuICovXG5nb29nLmNzc05hbWVNYXBwaW5nU3R5bGVfO1xuXG5cbi8qKlxuICogSGFuZGxlcyBzdHJpbmdzIHRoYXQgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgQ1NTIGNsYXNzIG5hbWVzLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gd29ya3MgaW4gdGFuZGVtIHdpdGggQHNlZSBnb29nLnNldENzc05hbWVNYXBwaW5nLlxuICpcbiAqIFdpdGhvdXQgYW55IG1hcHBpbmcgc2V0LCB0aGUgYXJndW1lbnRzIGFyZSBzaW1wbGUgam9pbmVkIHdpdGggYVxuICogaHlwaGVuIGFuZCBwYXNzZWQgdGhyb3VnaCB1bmFsdGVyZWQuXG4gKlxuICogV2hlbiB0aGVyZSBpcyBhIG1hcHBpbmcsIHRoZXJlIGFyZSB0d28gcG9zc2libGUgc3R5bGVzIGluIHdoaWNoXG4gKiB0aGVzZSBtYXBwaW5ncyBhcmUgdXNlZC4gSW4gdGhlIEJZX1BBUlQgc3R5bGUsIGVhY2ggcGFydCAoaS5lLiBpblxuICogYmV0d2VlbiBoeXBoZW5zKSBvZiB0aGUgcGFzc2VkIGluIGNzcyBuYW1lIGlzIHJld3JpdHRlbiBhY2NvcmRpbmdcbiAqIHRvIHRoZSBtYXAuIEluIHRoZSBCWV9XSE9MRSBzdHlsZSwgdGhlIGZ1bGwgY3NzIG5hbWUgaXMgbG9va2VkIHVwIGluXG4gKiB0aGUgbWFwIGRpcmVjdGx5LiBJZiBhIHJld3JpdGUgaXMgbm90IHNwZWNpZmllZCBieSB0aGUgbWFwLCB0aGVcbiAqIGNvbXBpbGVyIHdpbGwgb3V0cHV0IGEgd2FybmluZy5cbiAqXG4gKiBXaGVuIHRoZSBtYXBwaW5nIGlzIHBhc3NlZCB0byB0aGUgY29tcGlsZXIsIGl0IHdpbGwgcmVwbGFjZSBjYWxsc1xuICogdG8gZ29vZy5nZXRDc3NOYW1lIHdpdGggdGhlIHN0cmluZ3MgZnJvbSB0aGUgbWFwcGluZywgZS5nLlxuICogICAgIHZhciB4ID0gZ29vZy5nZXRDc3NOYW1lKCdmb28nKTtcbiAqICAgICB2YXIgeSA9IGdvb2cuZ2V0Q3NzTmFtZSh0aGlzLmJhc2VDbGFzcywgJ2FjdGl2ZScpO1xuICogIGJlY29tZXM6XG4gKiAgICAgdmFyIHg9ICdmb28nO1xuICogICAgIHZhciB5ID0gdGhpcy5iYXNlQ2xhc3MgKyAnLWFjdGl2ZSc7XG4gKlxuICogSWYgb25lIGFyZ3VtZW50IGlzIHBhc3NlZCBpdCB3aWxsIGJlIHByb2Nlc3NlZCwgaWYgdHdvIGFyZSBwYXNzZWRcbiAqIG9ubHkgdGhlIG1vZGlmaWVyIHdpbGwgYmUgcHJvY2Vzc2VkLCBhcyBpdCBpcyBhc3N1bWVkIHRoZSBmaXJzdFxuICogYXJndW1lbnQgd2FzIGdlbmVyYXRlZCBhcyBhIHJlc3VsdCBvZiBjYWxsaW5nIGdvb2cuZ2V0Q3NzTmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIFRoZSBjbGFzcyBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmc9fSBvcHRfbW9kaWZpZXIgQSBtb2RpZmllciB0byBiZSBhcHBlbmRlZCB0byB0aGUgY2xhc3MgbmFtZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNsYXNzIG5hbWUgb3IgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGNsYXNzIG5hbWUgYW5kXG4gKiAgICAgdGhlIG1vZGlmaWVyLlxuICovXG5nb29nLmdldENzc05hbWUgPSBmdW5jdGlvbihjbGFzc05hbWUsIG9wdF9tb2RpZmllcikge1xuICB2YXIgZ2V0TWFwcGluZyA9IGZ1bmN0aW9uKGNzc05hbWUpIHtcbiAgICByZXR1cm4gZ29vZy5jc3NOYW1lTWFwcGluZ19bY3NzTmFtZV0gfHwgY3NzTmFtZTtcbiAgfTtcblxuICB2YXIgcmVuYW1lQnlQYXJ0cyA9IGZ1bmN0aW9uKGNzc05hbWUpIHtcbiAgICAvLyBSZW1hcCBhbGwgdGhlIHBhcnRzIGluZGl2aWR1YWxseS5cbiAgICB2YXIgcGFydHMgPSBjc3NOYW1lLnNwbGl0KCctJyk7XG4gICAgdmFyIG1hcHBlZCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hcHBlZC5wdXNoKGdldE1hcHBpbmcocGFydHNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcHBlZC5qb2luKCctJyk7XG4gIH07XG5cbiAgdmFyIHJlbmFtZTtcbiAgaWYgKGdvb2cuY3NzTmFtZU1hcHBpbmdfKSB7XG4gICAgcmVuYW1lID0gZ29vZy5jc3NOYW1lTWFwcGluZ1N0eWxlXyA9PSAnQllfV0hPTEUnID9cbiAgICAgICAgZ2V0TWFwcGluZyA6IHJlbmFtZUJ5UGFydHM7XG4gIH0gZWxzZSB7XG4gICAgcmVuYW1lID0gZnVuY3Rpb24oYSkge1xuICAgICAgcmV0dXJuIGE7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChvcHRfbW9kaWZpZXIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lICsgJy0nICsgcmVuYW1lKG9wdF9tb2RpZmllcik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlbmFtZShjbGFzc05hbWUpO1xuICB9XG59O1xuXG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIHRvIGNoZWNrIHdoZW4gcmV0dXJuaW5nIGEgdmFsdWUgZnJvbSBnb29nLmdldENzc05hbWUoKS4gRXhhbXBsZTpcbiAqIDxwcmU+XG4gKiBnb29nLnNldENzc05hbWVNYXBwaW5nKHtcbiAqICAgXCJnb29nXCI6IFwiYVwiLFxuICogICBcImRpc2FibGVkXCI6IFwiYlwiLFxuICogfSk7XG4gKlxuICogdmFyIHggPSBnb29nLmdldENzc05hbWUoJ2dvb2cnKTtcbiAqIC8vIFRoZSBmb2xsb3dpbmcgZXZhbHVhdGVzIHRvOiBcImEgYS1iXCIuXG4gKiBnb29nLmdldENzc05hbWUoJ2dvb2cnKSArICcgJyArIGdvb2cuZ2V0Q3NzTmFtZSh4LCAnZGlzYWJsZWQnKVxuICogPC9wcmU+XG4gKiBXaGVuIGRlY2xhcmVkIGFzIGEgbWFwIG9mIHN0cmluZyBsaXRlcmFscyB0byBzdHJpbmcgbGl0ZXJhbHMsIHRoZSBKU0NvbXBpbGVyXG4gKiB3aWxsIHJlcGxhY2UgYWxsIGNhbGxzIHRvIGdvb2cuZ2V0Q3NzTmFtZSgpIHVzaW5nIHRoZSBzdXBwbGllZCBtYXAgaWYgdGhlXG4gKiAtLWNsb3N1cmVfcGFzcyBmbGFnIGlzIHNldC5cbiAqXG4gKiBAcGFyYW0geyFPYmplY3R9IG1hcHBpbmcgQSBtYXAgb2Ygc3RyaW5ncyB0byBzdHJpbmdzIHdoZXJlIGtleXMgYXJlIHBvc3NpYmxlXG4gKiAgICAgYXJndW1lbnRzIHRvIGdvb2cuZ2V0Q3NzTmFtZSgpIGFuZCB2YWx1ZXMgYXJlIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlc1xuICogICAgIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLlxuICogQHBhcmFtIHtzdHJpbmc9fSBvcHRfc3R5bGUgVGhlIHN0eWxlIG9mIGNzcyBuYW1lIG1hcHBpbmcuIFRoZXJlIGFyZSB0d28gdmFsaWRcbiAqICAgICBvcHRpb25zOiAnQllfUEFSVCcsIGFuZCAnQllfV0hPTEUnLlxuICogQHNlZSBnb29nLmdldENzc05hbWUgZm9yIGEgZGVzY3JpcHRpb24uXG4gKi9cbmdvb2cuc2V0Q3NzTmFtZU1hcHBpbmcgPSBmdW5jdGlvbihtYXBwaW5nLCBvcHRfc3R5bGUpIHtcbiAgZ29vZy5jc3NOYW1lTWFwcGluZ18gPSBtYXBwaW5nO1xuICBnb29nLmNzc05hbWVNYXBwaW5nU3R5bGVfID0gb3B0X3N0eWxlO1xufTtcblxuXG4vKipcbiAqIFRvIHVzZSBDU1MgcmVuYW1pbmcgaW4gY29tcGlsZWQgbW9kZSwgb25lIG9mIHRoZSBpbnB1dCBmaWxlcyBzaG91bGQgaGF2ZSBhXG4gKiBjYWxsIHRvIGdvb2cuc2V0Q3NzTmFtZU1hcHBpbmcoKSB3aXRoIGFuIG9iamVjdCBsaXRlcmFsIHRoYXQgdGhlIEpTQ29tcGlsZXJcbiAqIGNhbiBleHRyYWN0IGFuZCB1c2UgdG8gcmVwbGFjZSBhbGwgY2FsbHMgdG8gZ29vZy5nZXRDc3NOYW1lKCkuIEluIHVuY29tcGlsZWRcbiAqIG1vZGUsIEphdmFTY3JpcHQgY29kZSBzaG91bGQgYmUgbG9hZGVkIGJlZm9yZSB0aGlzIGJhc2UuanMgZmlsZSB0aGF0IGRlY2xhcmVzXG4gKiBhIGdsb2JhbCB2YXJpYWJsZSwgQ0xPU1VSRV9DU1NfTkFNRV9NQVBQSU5HLCB3aGljaCBpcyB1c2VkIGJlbG93LiBUaGlzIGlzXG4gKiB0byBlbnN1cmUgdGhhdCB0aGUgbWFwcGluZyBpcyBsb2FkZWQgYmVmb3JlIGFueSBjYWxscyB0byBnb29nLmdldENzc05hbWUoKVxuICogYXJlIG1hZGUgaW4gdW5jb21waWxlZCBtb2RlLlxuICpcbiAqIEEgaG9vayBmb3Igb3ZlcnJpZGluZyB0aGUgQ1NTIG5hbWUgbWFwcGluZy5cbiAqIEB0eXBlIHtPYmplY3R8dW5kZWZpbmVkfVxuICovXG5nb29nLmdsb2JhbC5DTE9TVVJFX0NTU19OQU1FX01BUFBJTkc7XG5cblxuaWYgKCFDT01QSUxFRCAmJiBnb29nLmdsb2JhbC5DTE9TVVJFX0NTU19OQU1FX01BUFBJTkcpIHtcbiAgLy8gVGhpcyBkb2VzIG5vdCBjYWxsIGdvb2cuc2V0Q3NzTmFtZU1hcHBpbmcoKSBiZWNhdXNlIHRoZSBKU0NvbXBpbGVyXG4gIC8vIHJlcXVpcmVzIHRoYXQgZ29vZy5zZXRDc3NOYW1lTWFwcGluZygpIGJlIGNhbGxlZCB3aXRoIGFuIG9iamVjdCBsaXRlcmFsLlxuICBnb29nLmNzc05hbWVNYXBwaW5nXyA9IGdvb2cuZ2xvYmFsLkNMT1NVUkVfQ1NTX05BTUVfTUFQUElORztcbn1cblxuXG4vKipcbiAqIEFic3RyYWN0IGltcGxlbWVudGF0aW9uIG9mIGdvb2cuZ2V0TXNnIGZvciB1c2Ugd2l0aCBsb2NhbGl6ZWQgbWVzc2FnZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIFRyYW5zbGF0YWJsZSBzdHJpbmcsIHBsYWNlcyBob2xkZXJzIGluIHRoZSBmb3JtIHskZm9vfS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X3ZhbHVlcyBNYXAgb2YgcGxhY2UgaG9sZGVyIG5hbWUgdG8gdmFsdWUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IG1lc3NhZ2Ugd2l0aCBwbGFjZWhvbGRlcnMgZmlsbGVkLlxuICovXG5nb29nLmdldE1zZyA9IGZ1bmN0aW9uKHN0ciwgb3B0X3ZhbHVlcykge1xuICB2YXIgdmFsdWVzID0gb3B0X3ZhbHVlcyB8fCB7fTtcbiAgZm9yICh2YXIga2V5IGluIHZhbHVlcykge1xuICAgIHZhciB2YWx1ZSA9ICgnJyArIHZhbHVlc1trZXldKS5yZXBsYWNlKC9cXCQvZywgJyQkJCQnKTtcbiAgICBzdHIgPSBzdHIucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxce1xcXFwkJyArIGtleSArICdcXFxcfScsICdnaScpLCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn07XG5cblxuLyoqXG4gKiBFeHBvc2VzIGFuIHVub2JmdXNjYXRlZCBnbG9iYWwgbmFtZXNwYWNlIHBhdGggZm9yIHRoZSBnaXZlbiBvYmplY3QuXG4gKiBOb3RlIHRoYXQgZmllbGRzIG9mIHRoZSBleHBvcnRlZCBvYmplY3QgKndpbGwqIGJlIG9iZnVzY2F0ZWQsXG4gKiB1bmxlc3MgdGhleSBhcmUgZXhwb3J0ZWQgaW4gdHVybiB2aWEgdGhpcyBmdW5jdGlvbiBvclxuICogZ29vZy5leHBvcnRQcm9wZXJ0eVxuICpcbiAqIDxwPkFsc28gaGFuZHkgZm9yIG1ha2luZyBwdWJsaWMgaXRlbXMgdGhhdCBhcmUgZGVmaW5lZCBpbiBhbm9ueW1vdXNcbiAqIGNsb3N1cmVzLlxuICpcbiAqIGV4LiBnb29nLmV4cG9ydFN5bWJvbCgncHVibGljLnBhdGguRm9vJywgRm9vKTtcbiAqXG4gKiBleC4gZ29vZy5leHBvcnRTeW1ib2woJ3B1YmxpYy5wYXRoLkZvby5zdGF0aWNGdW5jdGlvbicsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgRm9vLnN0YXRpY0Z1bmN0aW9uKTtcbiAqICAgICBwdWJsaWMucGF0aC5Gb28uc3RhdGljRnVuY3Rpb24oKTtcbiAqXG4gKiBleC4gZ29vZy5leHBvcnRTeW1ib2woJ3B1YmxpYy5wYXRoLkZvby5wcm90b3R5cGUubXlNZXRob2QnLFxuICogICAgICAgICAgICAgICAgICAgICAgIEZvby5wcm90b3R5cGUubXlNZXRob2QpO1xuICogICAgIG5ldyBwdWJsaWMucGF0aC5Gb28oKS5teU1ldGhvZCgpO1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwdWJsaWNQYXRoIFVub2JmdXNjYXRlZCBuYW1lIHRvIGV4cG9ydC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IE9iamVjdCB0aGUgbmFtZSBzaG91bGQgcG9pbnQgdG8uXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF9vYmplY3RUb0V4cG9ydFRvIFRoZSBvYmplY3QgdG8gYWRkIHRoZSBwYXRoIHRvOyBkZWZhdWx0XG4gKiAgICAgaXMgfGdvb2cuZ2xvYmFsfC5cbiAqL1xuZ29vZy5leHBvcnRTeW1ib2wgPSBmdW5jdGlvbihwdWJsaWNQYXRoLCBvYmplY3QsIG9wdF9vYmplY3RUb0V4cG9ydFRvKSB7XG4gIGdvb2cuZXhwb3J0UGF0aF8ocHVibGljUGF0aCwgb2JqZWN0LCBvcHRfb2JqZWN0VG9FeHBvcnRUbyk7XG59O1xuXG5cbi8qKlxuICogRXhwb3J0cyBhIHByb3BlcnR5IHVub2JmdXNjYXRlZCBpbnRvIHRoZSBvYmplY3QncyBuYW1lc3BhY2UuXG4gKiBleC4gZ29vZy5leHBvcnRQcm9wZXJ0eShGb28sICdzdGF0aWNGdW5jdGlvbicsIEZvby5zdGF0aWNGdW5jdGlvbik7XG4gKiBleC4gZ29vZy5leHBvcnRQcm9wZXJ0eShGb28ucHJvdG90eXBlLCAnbXlNZXRob2QnLCBGb28ucHJvdG90eXBlLm15TWV0aG9kKTtcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgT2JqZWN0IHdob3NlIHN0YXRpYyBwcm9wZXJ0eSBpcyBiZWluZyBleHBvcnRlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwdWJsaWNOYW1lIFVub2JmdXNjYXRlZCBuYW1lIHRvIGV4cG9ydC5cbiAqIEBwYXJhbSB7Kn0gc3ltYm9sIE9iamVjdCB0aGUgbmFtZSBzaG91bGQgcG9pbnQgdG8uXG4gKi9cbmdvb2cuZXhwb3J0UHJvcGVydHkgPSBmdW5jdGlvbihvYmplY3QsIHB1YmxpY05hbWUsIHN5bWJvbCkge1xuICBvYmplY3RbcHVibGljTmFtZV0gPSBzeW1ib2w7XG59O1xuXG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyLlxuICpcbiAqIFVzYWdlOlxuICogPHByZT5cbiAqIGZ1bmN0aW9uIFBhcmVudENsYXNzKGEsIGIpIHsgfVxuICogUGFyZW50Q2xhc3MucHJvdG90eXBlLmZvbyA9IGZ1bmN0aW9uKGEpIHsgfVxuICpcbiAqIGZ1bmN0aW9uIENoaWxkQ2xhc3MoYSwgYiwgYykge1xuICogICBnb29nLmJhc2UodGhpcywgYSwgYik7XG4gKiB9XG4gKiBnb29nLmluaGVyaXRzKENoaWxkQ2xhc3MsIFBhcmVudENsYXNzKTtcbiAqXG4gKiB2YXIgY2hpbGQgPSBuZXcgQ2hpbGRDbGFzcygnYScsICdiJywgJ3NlZScpO1xuICogY2hpbGQuZm9vKCk7IC8vIHdvcmtzXG4gKiA8L3ByZT5cbiAqXG4gKiBJbiBhZGRpdGlvbiwgYSBzdXBlcmNsYXNzJyBpbXBsZW1lbnRhdGlvbiBvZiBhIG1ldGhvZCBjYW4gYmUgaW52b2tlZFxuICogYXMgZm9sbG93czpcbiAqXG4gKiA8cHJlPlxuICogQ2hpbGRDbGFzcy5wcm90b3R5cGUuZm9vID0gZnVuY3Rpb24oYSkge1xuICogICBDaGlsZENsYXNzLnN1cGVyQ2xhc3NfLmZvby5jYWxsKHRoaXMsIGEpO1xuICogICAvLyBvdGhlciBjb2RlXG4gKiB9O1xuICogPC9wcmU+XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2hpbGRDdG9yIENoaWxkIGNsYXNzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyZW50Q3RvciBQYXJlbnQgY2xhc3MuXG4gKi9cbmdvb2cuaW5oZXJpdHMgPSBmdW5jdGlvbihjaGlsZEN0b3IsIHBhcmVudEN0b3IpIHtcbiAgLyoqIEBjb25zdHJ1Y3RvciAqL1xuICBmdW5jdGlvbiB0ZW1wQ3RvcigpIHt9O1xuICB0ZW1wQ3Rvci5wcm90b3R5cGUgPSBwYXJlbnRDdG9yLnByb3RvdHlwZTtcbiAgY2hpbGRDdG9yLnN1cGVyQ2xhc3NfID0gcGFyZW50Q3Rvci5wcm90b3R5cGU7XG4gIGNoaWxkQ3Rvci5wcm90b3R5cGUgPSBuZXcgdGVtcEN0b3IoKTtcbiAgY2hpbGRDdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNoaWxkQ3Rvcjtcbn07XG5cblxuLyoqXG4gKiBDYWxsIHVwIHRvIHRoZSBzdXBlcmNsYXNzLlxuICpcbiAqIElmIHRoaXMgaXMgY2FsbGVkIGZyb20gYSBjb25zdHJ1Y3RvciwgdGhlbiB0aGlzIGNhbGxzIHRoZSBzdXBlcmNsYXNzXG4gKiBjb250cnVjdG9yIHdpdGggYXJndW1lbnRzIDEtTi5cbiAqXG4gKiBJZiB0aGlzIGlzIGNhbGxlZCBmcm9tIGEgcHJvdG90eXBlIG1ldGhvZCwgdGhlbiB5b3UgbXVzdCBwYXNzXG4gKiB0aGUgbmFtZSBvZiB0aGUgbWV0aG9kIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdGhpcyBmdW5jdGlvbi4gSWZcbiAqIHlvdSBkbyBub3QsIHlvdSB3aWxsIGdldCBhIHJ1bnRpbWUgZXJyb3IuIFRoaXMgY2FsbHMgdGhlIHN1cGVyY2xhc3MnXG4gKiBtZXRob2Qgd2l0aCBhcmd1bWVudHMgMi1OLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyBpZiB5b3UgdXNlIGdvb2cuaW5oZXJpdHMgdG8gZXhwcmVzc1xuICogaW5oZXJpdGFuY2UgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHlvdXIgY2xhc3Nlcy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGEgY29tcGlsZXIgcHJpbWl0aXZlLiBBdCBjb21waWxlLXRpbWUsIHRoZVxuICogY29tcGlsZXIgd2lsbCBkbyBtYWNybyBleHBhbnNpb24gdG8gcmVtb3ZlIGEgbG90IG9mXG4gKiB0aGUgZXh0cmEgb3ZlcmhlYWQgdGhhdCB0aGlzIGZ1bmN0aW9uIGludHJvZHVjZXMuIFRoZSBjb21waWxlclxuICogd2lsbCBhbHNvIGVuZm9yY2UgYSBsb3Qgb2YgdGhlIGFzc3VtcHRpb25zIHRoYXQgdGhpcyBmdW5jdGlvblxuICogbWFrZXMsIGFuZCB0cmVhdCBpdCBhcyBhIGNvbXBpbGVyIGVycm9yIGlmIHlvdSBicmVhayB0aGVtLlxuICpcbiAqIEBwYXJhbSB7IU9iamVjdH0gbWUgU2hvdWxkIGFsd2F5cyBiZSBcInRoaXNcIi5cbiAqIEBwYXJhbSB7Kj19IG9wdF9tZXRob2ROYW1lIFRoZSBtZXRob2QgbmFtZSBpZiBjYWxsaW5nIGEgc3VwZXIgbWV0aG9kLlxuICogQHBhcmFtIHsuLi4qfSB2YXJfYXJncyBUaGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzLlxuICogQHJldHVybiB7Kn0gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgc3VwZXJjbGFzcyBtZXRob2QuXG4gKi9cbmdvb2cuYmFzZSA9IGZ1bmN0aW9uKG1lLCBvcHRfbWV0aG9kTmFtZSwgdmFyX2FyZ3MpIHtcbiAgdmFyIGNhbGxlciA9IGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyO1xuICBpZiAoY2FsbGVyLnN1cGVyQ2xhc3NfKSB7XG4gICAgLy8gVGhpcyBpcyBhIGNvbnN0cnVjdG9yLiBDYWxsIHRoZSBzdXBlcmNsYXNzIGNvbnN0cnVjdG9yLlxuICAgIHJldHVybiBjYWxsZXIuc3VwZXJDbGFzc18uY29uc3RydWN0b3IuYXBwbHkoXG4gICAgICAgIG1lLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgfVxuXG4gIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgdmFyIGZvdW5kQ2FsbGVyID0gZmFsc2U7XG4gIGZvciAodmFyIGN0b3IgPSBtZS5jb25zdHJ1Y3RvcjtcbiAgICAgICBjdG9yOyBjdG9yID0gY3Rvci5zdXBlckNsYXNzXyAmJiBjdG9yLnN1cGVyQ2xhc3NfLmNvbnN0cnVjdG9yKSB7XG4gICAgaWYgKGN0b3IucHJvdG90eXBlW29wdF9tZXRob2ROYW1lXSA9PT0gY2FsbGVyKSB7XG4gICAgICBmb3VuZENhbGxlciA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChmb3VuZENhbGxlcikge1xuICAgICAgcmV0dXJuIGN0b3IucHJvdG90eXBlW29wdF9tZXRob2ROYW1lXS5hcHBseShtZSwgYXJncyk7XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgd2UgZGlkIG5vdCBmaW5kIHRoZSBjYWxsZXIgaW4gdGhlIHByb3RvdHlwZSBjaGFpbixcbiAgLy8gdGhlbiBvbmUgb2YgdHdvIHRoaW5ncyBoYXBwZW5lZDpcbiAgLy8gMSkgVGhlIGNhbGxlciBpcyBhbiBpbnN0YW5jZSBtZXRob2QuXG4gIC8vIDIpIFRoaXMgbWV0aG9kIHdhcyBub3QgY2FsbGVkIGJ5IHRoZSByaWdodCBjYWxsZXIuXG4gIGlmIChtZVtvcHRfbWV0aG9kTmFtZV0gPT09IGNhbGxlcikge1xuICAgIHJldHVybiBtZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbb3B0X21ldGhvZE5hbWVdLmFwcGx5KG1lLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ2dvb2cuYmFzZSBjYWxsZWQgZnJvbSBhIG1ldGhvZCBvZiBvbmUgbmFtZSAnICtcbiAgICAgICAgJ3RvIGEgbWV0aG9kIG9mIGEgZGlmZmVyZW50IG5hbWUnKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIEFsbG93IGZvciBhbGlhc2luZyB3aXRoaW4gc2NvcGUgZnVuY3Rpb25zLiAgVGhpcyBmdW5jdGlvbiBleGlzdHMgZm9yXG4gKiB1bmNvbXBpbGVkIGNvZGUgLSBpbiBjb21waWxlZCBjb2RlIHRoZSBjYWxscyB3aWxsIGJlIGlubGluZWQgYW5kIHRoZVxuICogYWxpYXNlcyBhcHBsaWVkLiAgSW4gdW5jb21waWxlZCBjb2RlIHRoZSBmdW5jdGlvbiBpcyBzaW1wbHkgcnVuIHNpbmNlIHRoZVxuICogYWxpYXNlcyBhcyB3cml0dGVuIGFyZSB2YWxpZCBKYXZhU2NyaXB0LlxuICogQHBhcmFtIHtmdW5jdGlvbigpfSBmbiBGdW5jdGlvbiB0byBjYWxsLiAgVGhpcyBmdW5jdGlvbiBjYW4gY29udGFpbiBhbGlhc2VzXG4gKiAgICAgdG8gbmFtZXNwYWNlcyAoZS5nLiBcInZhciBkb20gPSBnb29nLmRvbVwiKSBvciBjbGFzc2VzXG4gKiAgICAoZS5nLiBcInZhciBUaW1lciA9IGdvb2cuVGltZXJcIikuXG4gKi9cbmdvb2cuc2NvcGUgPSBmdW5jdGlvbihmbikge1xuICBmbi5jYWxsKGdvb2cuZ2xvYmFsKTtcbn07XG5cblxuIiwiLyoqXG4gKiBkZWZpbmVzXG4gKi9cblxuZ29vZy5wcm92aWRlKCdVU0VfVFlQRURBUlJBWScpO1xuXG4vLyBTYWZhcmkg44GMIHR5cGVvZiBVaW50OEFycmF5ID09PSAnb2JqZWN0JyDjgavjgarjgovjgZ/jgoHjgIFcbi8vIOacquWumue+qeOBi+WQpuOBi+OBpyBUeXBlZCBBcnJheSDjga7kvb/nlKjjgpLmsbrlrprjgZnjgotcblxuLyoqIEBjb25zdCB7Ym9vbGVhbn0gdXNlIHR5cGVkIGFycmF5IGZsYWcuICovXG52YXIgVVNFX1RZUEVEQVJSQVkgPVxuICAodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnKSAmJlxuICAodHlwZW9mIFVpbnQxNkFycmF5ICE9PSAndW5kZWZpbmVkJykgJiZcbiAgKHR5cGVvZiBVaW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcpICYmXG4gICh0eXBlb2YgRGF0YVZpZXcgIT09ICd1bmRlZmluZWQnKTtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBiaXQg5Y2Y5L2N44Gn44Gu5pu444GN6L6844G/5a6f6KOFLlxuICovXG5nb29nLnByb3ZpZGUoJ1psaWIuQml0U3RyZWFtJyk7XG5cbmdvb2cucmVxdWlyZSgnVVNFX1RZUEVEQVJSQVknKTtcblxuZ29vZy5zY29wZShmdW5jdGlvbigpIHtcblxuLyoqXG4gKiDjg5Pjg4Pjg4jjgrnjg4jjg6rjg7zjg6BcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHshKEFycmF5fFVpbnQ4QXJyYXkpPX0gYnVmZmVyIG91dHB1dCBidWZmZXIuXG4gKiBAcGFyYW0ge251bWJlcj19IGJ1ZmZlclBvc2l0aW9uIHN0YXJ0IGJ1ZmZlciBwb2ludGVyLlxuICovXG5abGliLkJpdFN0cmVhbSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYnVmZmVyUG9zaXRpb24pIHtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGJ1ZmZlciBpbmRleC4gKi9cbiAgdGhpcy5pbmRleCA9IHR5cGVvZiBidWZmZXJQb3NpdGlvbiA9PT0gJ251bWJlcicgPyBidWZmZXJQb3NpdGlvbiA6IDA7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBiaXQgaW5kZXguICovXG4gIHRoaXMuYml0aW5kZXggPSAwO1xuICAvKiogQHR5cGUgeyEoQXJyYXl8VWludDhBcnJheSl9IGJpdC1zdHJlYW0gb3V0cHV0IGJ1ZmZlci4gKi9cbiAgdGhpcy5idWZmZXIgPSBidWZmZXIgaW5zdGFuY2VvZiAoVVNFX1RZUEVEQVJSQVkgPyBVaW50OEFycmF5IDogQXJyYXkpID9cbiAgICBidWZmZXIgOlxuICAgIG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50OEFycmF5IDogQXJyYXkpKFpsaWIuQml0U3RyZWFtLkRlZmF1bHRCbG9ja1NpemUpO1xuXG4gIC8vIOWFpeWKm+OBleOCjOOBnyBpbmRleCDjgYzotrPjgorjgarjgYvjgaPjgZ/jgonmi6HlvLXjgZnjgovjgYzjgIHlgI3jgavjgZfjgabjgoLjg4Djg6HjgarjgonkuI3mraPjgajjgZnjgotcbiAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCAqIDIgPD0gdGhpcy5pbmRleCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgaW5kZXhcIik7XG4gIH0gZWxzZSBpZiAodGhpcy5idWZmZXIubGVuZ3RoIDw9IHRoaXMuaW5kZXgpIHtcbiAgICB0aGlzLmV4cGFuZEJ1ZmZlcigpO1xuICB9XG59O1xuXG4vKipcbiAqIOODh+ODleOCqeODq+ODiOODluODreODg+OCr+OCteOCpOOCui5cbiAqIEBjb25zdFxuICogQHR5cGUge251bWJlcn1cbiAqL1xuWmxpYi5CaXRTdHJlYW0uRGVmYXVsdEJsb2NrU2l6ZSA9IDB4ODAwMDtcblxuLyoqXG4gKiBleHBhbmQgYnVmZmVyLlxuICogQHJldHVybiB7IShBcnJheXxVaW50OEFycmF5KX0gbmV3IGJ1ZmZlci5cbiAqL1xuWmxpYi5CaXRTdHJlYW0ucHJvdG90eXBlLmV4cGFuZEJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAvKiogQHR5cGUgeyEoQXJyYXl8VWludDhBcnJheSl9IG9sZCBidWZmZXIuICovXG4gIHZhciBvbGRidWYgPSB0aGlzLmJ1ZmZlcjtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgY291bnRlci4gKi9cbiAgdmFyIGk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsb29wIGxpbWl0ZXIuICovXG4gIHZhciBpbCA9IG9sZGJ1Zi5sZW5ndGg7XG4gIC8qKiBAdHlwZSB7IShBcnJheXxVaW50OEFycmF5KX0gbmV3IGJ1ZmZlci4gKi9cbiAgdmFyIGJ1ZmZlciA9XG4gICAgbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkoaWwgPDwgMSk7XG5cbiAgLy8gY29weSBidWZmZXJcbiAgaWYgKFVTRV9UWVBFREFSUkFZKSB7XG4gICAgYnVmZmVyLnNldChvbGRidWYpO1xuICB9IGVsc2Uge1xuICAgIC8vIFhYWDogbG9vcCB1bnJvbGxpbmdcbiAgICBmb3IgKGkgPSAwOyBpIDwgaWw7ICsraSkge1xuICAgICAgYnVmZmVyW2ldID0gb2xkYnVmW2ldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAodGhpcy5idWZmZXIgPSBidWZmZXIpO1xufTtcblxuXG4vKipcbiAqIOaVsOWApOOCkuODk+ODg+ODiOOBp+aMh+WumuOBl+OBn+aVsOOBoOOBkeabuOOBjei+vOOCgC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIg5pu444GN6L6844KA5pWw5YCkLlxuICogQHBhcmFtIHtudW1iZXJ9IG4g5pu444GN6L6844KA44OT44OD44OI5pWwLlxuICogQHBhcmFtIHtib29sZWFuPX0gcmV2ZXJzZSDpgIbpoIbjgavmm7jjgY3ovrzjgoDjgarjgonjgbAgdHJ1ZS5cbiAqL1xuWmxpYi5CaXRTdHJlYW0ucHJvdG90eXBlLndyaXRlQml0cyA9IGZ1bmN0aW9uKG51bWJlciwgbiwgcmV2ZXJzZSkge1xuICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXI7XG4gIHZhciBpbmRleCA9IHRoaXMuaW5kZXg7XG4gIHZhciBiaXRpbmRleCA9IHRoaXMuYml0aW5kZXg7XG5cbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGN1cnJlbnQgb2N0ZXQuICovXG4gIHZhciBjdXJyZW50ID0gYnVmZmVyW2luZGV4XTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgY291bnRlci4gKi9cbiAgdmFyIGk7XG5cbiAgLyoqXG4gICAqIDMyLWJpdCDmlbTmlbDjga7jg5Pjg4Pjg4jpoIbjgpLpgIbjgavjgZnjgotcbiAgICogQHBhcmFtIHtudW1iZXJ9IG4gMzItYml0IGludGVnZXIuXG4gICAqIEByZXR1cm4ge251bWJlcn0gcmV2ZXJzZWQgMzItYml0IGludGVnZXIuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBmdW5jdGlvbiByZXYzMl8obikge1xuICAgIHJldHVybiAoWmxpYi5CaXRTdHJlYW0uUmV2ZXJzZVRhYmxlW24gJiAweEZGXSA8PCAyNCkgfFxuICAgICAgKFpsaWIuQml0U3RyZWFtLlJldmVyc2VUYWJsZVtuID4+PiA4ICYgMHhGRl0gPDwgMTYpIHxcbiAgICAgIChabGliLkJpdFN0cmVhbS5SZXZlcnNlVGFibGVbbiA+Pj4gMTYgJiAweEZGXSA8PCA4KSB8XG4gICAgICBabGliLkJpdFN0cmVhbS5SZXZlcnNlVGFibGVbbiA+Pj4gMjQgJiAweEZGXTtcbiAgfVxuXG4gIGlmIChyZXZlcnNlICYmIG4gPiAxKSB7XG4gICAgbnVtYmVyID0gbiA+IDggP1xuICAgICAgcmV2MzJfKG51bWJlcikgPj4gKDMyIC0gbikgOlxuICAgICAgWmxpYi5CaXRTdHJlYW0uUmV2ZXJzZVRhYmxlW251bWJlcl0gPj4gKDggLSBuKTtcbiAgfVxuXG4gIC8vIEJ5dGUg5aKD55WM44KS6LaF44GI44Gq44GE44Go44GNXG4gIGlmIChuICsgYml0aW5kZXggPCA4KSB7XG4gICAgY3VycmVudCA9IChjdXJyZW50IDw8IG4pIHwgbnVtYmVyO1xuICAgIGJpdGluZGV4ICs9IG47XG4gIC8vIEJ5dGUg5aKD55WM44KS6LaF44GI44KL44Go44GNXG4gIH0gZWxzZSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgY3VycmVudCA9IChjdXJyZW50IDw8IDEpIHwgKChudW1iZXIgPj4gbiAtIGkgLSAxKSAmIDEpO1xuXG4gICAgICAvLyBuZXh0IGJ5dGVcbiAgICAgIGlmICgrK2JpdGluZGV4ID09PSA4KSB7XG4gICAgICAgIGJpdGluZGV4ID0gMDtcbiAgICAgICAgYnVmZmVyW2luZGV4KytdID0gWmxpYi5CaXRTdHJlYW0uUmV2ZXJzZVRhYmxlW2N1cnJlbnRdO1xuICAgICAgICBjdXJyZW50ID0gMDtcblxuICAgICAgICAvLyBleHBhbmRcbiAgICAgICAgaWYgKGluZGV4ID09PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgYnVmZmVyID0gdGhpcy5leHBhbmRCdWZmZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBidWZmZXJbaW5kZXhdID0gY3VycmVudDtcblxuICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgdGhpcy5iaXRpbmRleCA9IGJpdGluZGV4O1xuICB0aGlzLmluZGV4ID0gaW5kZXg7XG59O1xuXG5cbi8qKlxuICog44K544OI44Oq44O844Og44Gu57WC56uv5Yem55CG44KS6KGM44GGXG4gKiBAcmV0dXJuIHshKEFycmF5fFVpbnQ4QXJyYXkpfSDntYLnq6/lh6bnkIblvozjga7jg5Djg4Pjg5XjgqHjgpIgYnl0ZSBhcnJheSDjgafov5TjgZkuXG4gKi9cblpsaWIuQml0U3RyZWFtLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbigpIHtcbiAgdmFyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICB2YXIgaW5kZXggPSB0aGlzLmluZGV4O1xuXG4gIC8qKiBAdHlwZSB7IShBcnJheXxVaW50OEFycmF5KX0gb3V0cHV0IGJ1ZmZlci4gKi9cbiAgdmFyIG91dHB1dDtcblxuICAvLyBiaXRpbmRleCDjgYwgMCDjga7mmYLjga/kvZnliIbjgasgaW5kZXgg44GM6YCy44KT44Gn44GE44KL54q25oWLXG4gIGlmICh0aGlzLmJpdGluZGV4ID4gMCkge1xuICAgIGJ1ZmZlcltpbmRleF0gPDw9IDggLSB0aGlzLmJpdGluZGV4O1xuICAgIGJ1ZmZlcltpbmRleF0gPSBabGliLkJpdFN0cmVhbS5SZXZlcnNlVGFibGVbYnVmZmVyW2luZGV4XV07XG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIC8vIGFycmF5IHRydW5jYXRpb25cbiAgaWYgKFVTRV9UWVBFREFSUkFZKSB7XG4gICAgb3V0cHV0ID0gYnVmZmVyLnN1YmFycmF5KDAsIGluZGV4KTtcbiAgfSBlbHNlIHtcbiAgICBidWZmZXIubGVuZ3RoID0gaW5kZXg7XG4gICAgb3V0cHV0ID0gYnVmZmVyO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn07XG5cbi8qKlxuICogMC0yNTUg44Gu44OT44OD44OI6aCG44KS5Y+N6Lui44GX44Gf44OG44O844OW44OrXG4gKiBAY29uc3RcbiAqIEB0eXBlIHshKFVpbnQ4QXJyYXl8QXJyYXkuPG51bWJlcj4pfVxuICovXG5abGliLkJpdFN0cmVhbS5SZXZlcnNlVGFibGUgPSAoZnVuY3Rpb24odGFibGUpIHtcbiAgcmV0dXJuIHRhYmxlO1xufSkoKGZ1bmN0aW9uKCkge1xuICAvKiogQHR5cGUgeyEoQXJyYXl8VWludDhBcnJheSl9IHJldmVyc2UgdGFibGUuICovXG4gIHZhciB0YWJsZSA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50OEFycmF5IDogQXJyYXkpKDI1Nik7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsb29wIGNvdW50ZXIuICovXG4gIHZhciBpO1xuXG4gIC8vIGdlbmVyYXRlXG4gIGZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgIHRhYmxlW2ldID0gKGZ1bmN0aW9uKG4pIHtcbiAgICAgIHZhciByID0gbjtcbiAgICAgIHZhciBzID0gNztcblxuICAgICAgZm9yIChuID4+Pj0gMTsgbjsgbiA+Pj49IDEpIHtcbiAgICAgICAgciA8PD0gMTtcbiAgICAgICAgciB8PSBuICYgMTtcbiAgICAgICAgLS1zO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKHIgPDwgcyAmIDB4ZmYpID4+PiAwO1xuICAgIH0pKGkpO1xuICB9XG5cbiAgcmV0dXJuIHRhYmxlO1xufSkoKSk7XG5cblxuLy8gZW5kIG9mIHNjb3BlXG59KTtcblxuLyogdmltOnNldCBleHBhbmR0YWIgdHM9MiBzdz0yIHR3PTgwOiAqL1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IENSQzMyIOWun+ijhS5cbiAqL1xuZ29vZy5wcm92aWRlKCdabGliLkNSQzMyJyk7XG5cbmdvb2cucmVxdWlyZSgnVVNFX1RZUEVEQVJSQVknKTtcblxuLyoqIEBkZWZpbmUge2Jvb2xlYW59ICovXG52YXIgWkxJQl9DUkMzMl9DT01QQUNUID0gZmFsc2U7XG5cbmdvb2cuc2NvcGUoZnVuY3Rpb24oKSB7XG5cbi8qKlxuICogQ1JDMzIg44OP44OD44K344Ol5YCk44KS5Y+W5b6XXG4gKiBAcGFyYW0geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGRhdGEgZGF0YSBieXRlIGFycmF5LlxuICogQHBhcmFtIHtudW1iZXI9fSBwb3MgZGF0YSBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyPX0gbGVuZ3RoIGRhdGEgbGVuZ3RoLlxuICogQHJldHVybiB7bnVtYmVyfSBDUkMzMi5cbiAqL1xuWmxpYi5DUkMzMi5jYWxjID0gZnVuY3Rpb24oZGF0YSwgcG9zLCBsZW5ndGgpIHtcbiAgcmV0dXJuIFpsaWIuQ1JDMzIudXBkYXRlKGRhdGEsIDAsIHBvcywgbGVuZ3RoKTtcbn07XG5cbi8qKlxuICogQ1JDMzLjg4/jg4Pjgrfjg6XlgKTjgpLmm7TmlrBcbiAqIEBwYXJhbSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gZGF0YSBkYXRhIGJ5dGUgYXJyYXkuXG4gKiBAcGFyYW0ge251bWJlcn0gY3JjIENSQzMyLlxuICogQHBhcmFtIHtudW1iZXI9fSBwb3MgZGF0YSBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyPX0gbGVuZ3RoIGRhdGEgbGVuZ3RoLlxuICogQHJldHVybiB7bnVtYmVyfSBDUkMzMi5cbiAqL1xuWmxpYi5DUkMzMi51cGRhdGUgPSBmdW5jdGlvbihkYXRhLCBjcmMsIHBvcywgbGVuZ3RoKSB7XG4gIHZhciB0YWJsZSA9IFpsaWIuQ1JDMzIuVGFibGU7XG4gIHZhciBpID0gKHR5cGVvZiBwb3MgPT09ICdudW1iZXInKSA/IHBvcyA6IChwb3MgPSAwKTtcbiAgdmFyIGlsID0gKHR5cGVvZiBsZW5ndGggPT09ICdudW1iZXInKSA/IGxlbmd0aCA6IGRhdGEubGVuZ3RoO1xuXG4gIGNyYyBePSAweGZmZmZmZmZmO1xuXG4gIC8vIGxvb3AgdW5yb2xsaW5nIGZvciBwZXJmb3JtYW5jZVxuICBmb3IgKGkgPSBpbCAmIDc7IGktLTsgKytwb3MpIHtcbiAgICBjcmMgPSAoY3JjID4+PiA4KSBeIHRhYmxlWyhjcmMgXiBkYXRhW3Bvc10pICYgMHhmZl07XG4gIH1cbiAgZm9yIChpID0gaWwgPj4gMzsgaS0tOyBwb3MgKz0gOCkge1xuICAgIGNyYyA9IChjcmMgPj4+IDgpIF4gdGFibGVbKGNyYyBeIGRhdGFbcG9zICAgIF0pICYgMHhmZl07XG4gICAgY3JjID0gKGNyYyA+Pj4gOCkgXiB0YWJsZVsoY3JjIF4gZGF0YVtwb3MgKyAxXSkgJiAweGZmXTtcbiAgICBjcmMgPSAoY3JjID4+PiA4KSBeIHRhYmxlWyhjcmMgXiBkYXRhW3BvcyArIDJdKSAmIDB4ZmZdO1xuICAgIGNyYyA9IChjcmMgPj4+IDgpIF4gdGFibGVbKGNyYyBeIGRhdGFbcG9zICsgM10pICYgMHhmZl07XG4gICAgY3JjID0gKGNyYyA+Pj4gOCkgXiB0YWJsZVsoY3JjIF4gZGF0YVtwb3MgKyA0XSkgJiAweGZmXTtcbiAgICBjcmMgPSAoY3JjID4+PiA4KSBeIHRhYmxlWyhjcmMgXiBkYXRhW3BvcyArIDVdKSAmIDB4ZmZdO1xuICAgIGNyYyA9IChjcmMgPj4+IDgpIF4gdGFibGVbKGNyYyBeIGRhdGFbcG9zICsgNl0pICYgMHhmZl07XG4gICAgY3JjID0gKGNyYyA+Pj4gOCkgXiB0YWJsZVsoY3JjIF4gZGF0YVtwb3MgKyA3XSkgJiAweGZmXTtcbiAgfVxuXG4gIHJldHVybiAoY3JjIF4gMHhmZmZmZmZmZikgPj4+IDA7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW1cbiAqIEBwYXJhbSB7bnVtYmVyfSBjcmNcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblpsaWIuQ1JDMzIuc2luZ2xlID0gZnVuY3Rpb24obnVtLCBjcmMpIHtcbiAgcmV0dXJuIChabGliLkNSQzMyLlRhYmxlWyhudW0gXiBjcmMpICYgMHhmZl0gXiAobnVtID4+PiA4KSkgPj4+IDA7XG59O1xuXG4vKipcbiAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cbiAqIEBjb25zdFxuICogQHByaXZhdGVcbiAqL1xuWmxpYi5DUkMzMi5UYWJsZV8gPSBbXG4gIDB4MDAwMDAwMDAsIDB4NzcwNzMwOTYsIDB4ZWUwZTYxMmMsIDB4OTkwOTUxYmEsIDB4MDc2ZGM0MTksIDB4NzA2YWY0OGYsXG4gIDB4ZTk2M2E1MzUsIDB4OWU2NDk1YTMsIDB4MGVkYjg4MzIsIDB4NzlkY2I4YTQsIDB4ZTBkNWU5MWUsIDB4OTdkMmQ5ODgsXG4gIDB4MDliNjRjMmIsIDB4N2ViMTdjYmQsIDB4ZTdiODJkMDcsIDB4OTBiZjFkOTEsIDB4MWRiNzEwNjQsIDB4NmFiMDIwZjIsXG4gIDB4ZjNiOTcxNDgsIDB4ODRiZTQxZGUsIDB4MWFkYWQ0N2QsIDB4NmRkZGU0ZWIsIDB4ZjRkNGI1NTEsIDB4ODNkMzg1YzcsXG4gIDB4MTM2Yzk4NTYsIDB4NjQ2YmE4YzAsIDB4ZmQ2MmY5N2EsIDB4OGE2NWM5ZWMsIDB4MTQwMTVjNGYsIDB4NjMwNjZjZDksXG4gIDB4ZmEwZjNkNjMsIDB4OGQwODBkZjUsIDB4M2I2ZTIwYzgsIDB4NGM2OTEwNWUsIDB4ZDU2MDQxZTQsIDB4YTI2NzcxNzIsXG4gIDB4M2MwM2U0ZDEsIDB4NGIwNGQ0NDcsIDB4ZDIwZDg1ZmQsIDB4YTUwYWI1NmIsIDB4MzViNWE4ZmEsIDB4NDJiMjk4NmMsXG4gIDB4ZGJiYmM5ZDYsIDB4YWNiY2Y5NDAsIDB4MzJkODZjZTMsIDB4NDVkZjVjNzUsIDB4ZGNkNjBkY2YsIDB4YWJkMTNkNTksXG4gIDB4MjZkOTMwYWMsIDB4NTFkZTAwM2EsIDB4YzhkNzUxODAsIDB4YmZkMDYxMTYsIDB4MjFiNGY0YjUsIDB4NTZiM2M0MjMsXG4gIDB4Y2ZiYTk1OTksIDB4YjhiZGE1MGYsIDB4MjgwMmI4OWUsIDB4NWYwNTg4MDgsIDB4YzYwY2Q5YjIsIDB4YjEwYmU5MjQsXG4gIDB4MmY2ZjdjODcsIDB4NTg2ODRjMTEsIDB4YzE2MTFkYWIsIDB4YjY2NjJkM2QsIDB4NzZkYzQxOTAsIDB4MDFkYjcxMDYsXG4gIDB4OThkMjIwYmMsIDB4ZWZkNTEwMmEsIDB4NzFiMTg1ODksIDB4MDZiNmI1MWYsIDB4OWZiZmU0YTUsIDB4ZThiOGQ0MzMsXG4gIDB4NzgwN2M5YTIsIDB4MGYwMGY5MzQsIDB4OTYwOWE4OGUsIDB4ZTEwZTk4MTgsIDB4N2Y2YTBkYmIsIDB4MDg2ZDNkMmQsXG4gIDB4OTE2NDZjOTcsIDB4ZTY2MzVjMDEsIDB4NmI2YjUxZjQsIDB4MWM2YzYxNjIsIDB4ODU2NTMwZDgsIDB4ZjI2MjAwNGUsXG4gIDB4NmMwNjk1ZWQsIDB4MWIwMWE1N2IsIDB4ODIwOGY0YzEsIDB4ZjUwZmM0NTcsIDB4NjViMGQ5YzYsIDB4MTJiN2U5NTAsXG4gIDB4OGJiZWI4ZWEsIDB4ZmNiOTg4N2MsIDB4NjJkZDFkZGYsIDB4MTVkYTJkNDksIDB4OGNkMzdjZjMsIDB4ZmJkNDRjNjUsXG4gIDB4NGRiMjYxNTgsIDB4M2FiNTUxY2UsIDB4YTNiYzAwNzQsIDB4ZDRiYjMwZTIsIDB4NGFkZmE1NDEsIDB4M2RkODk1ZDcsXG4gIDB4YTRkMWM0NmQsIDB4ZDNkNmY0ZmIsIDB4NDM2OWU5NmEsIDB4MzQ2ZWQ5ZmMsIDB4YWQ2Nzg4NDYsIDB4ZGE2MGI4ZDAsXG4gIDB4NDQwNDJkNzMsIDB4MzMwMzFkZTUsIDB4YWEwYTRjNWYsIDB4ZGQwZDdjYzksIDB4NTAwNTcxM2MsIDB4MjcwMjQxYWEsXG4gIDB4YmUwYjEwMTAsIDB4YzkwYzIwODYsIDB4NTc2OGI1MjUsIDB4MjA2Zjg1YjMsIDB4Yjk2NmQ0MDksIDB4Y2U2MWU0OWYsXG4gIDB4NWVkZWY5MGUsIDB4MjlkOWM5OTgsIDB4YjBkMDk4MjIsIDB4YzdkN2E4YjQsIDB4NTliMzNkMTcsIDB4MmViNDBkODEsXG4gIDB4YjdiZDVjM2IsIDB4YzBiYTZjYWQsIDB4ZWRiODgzMjAsIDB4OWFiZmIzYjYsIDB4MDNiNmUyMGMsIDB4NzRiMWQyOWEsXG4gIDB4ZWFkNTQ3MzksIDB4OWRkMjc3YWYsIDB4MDRkYjI2MTUsIDB4NzNkYzE2ODMsIDB4ZTM2MzBiMTIsIDB4OTQ2NDNiODQsXG4gIDB4MGQ2ZDZhM2UsIDB4N2E2YTVhYTgsIDB4ZTQwZWNmMGIsIDB4OTMwOWZmOWQsIDB4MGEwMGFlMjcsIDB4N2QwNzllYjEsXG4gIDB4ZjAwZjkzNDQsIDB4ODcwOGEzZDIsIDB4MWUwMWYyNjgsIDB4NjkwNmMyZmUsIDB4Zjc2MjU3NWQsIDB4ODA2NTY3Y2IsXG4gIDB4MTk2YzM2NzEsIDB4NmU2YjA2ZTcsIDB4ZmVkNDFiNzYsIDB4ODlkMzJiZTAsIDB4MTBkYTdhNWEsIDB4NjdkZDRhY2MsXG4gIDB4ZjliOWRmNmYsIDB4OGViZWVmZjksIDB4MTdiN2JlNDMsIDB4NjBiMDhlZDUsIDB4ZDZkNmEzZTgsIDB4YTFkMTkzN2UsXG4gIDB4MzhkOGMyYzQsIDB4NGZkZmYyNTIsIDB4ZDFiYjY3ZjEsIDB4YTZiYzU3NjcsIDB4M2ZiNTA2ZGQsIDB4NDhiMjM2NGIsXG4gIDB4ZDgwZDJiZGEsIDB4YWYwYTFiNGMsIDB4MzYwMzRhZjYsIDB4NDEwNDdhNjAsIDB4ZGY2MGVmYzMsIDB4YTg2N2RmNTUsXG4gIDB4MzE2ZThlZWYsIDB4NDY2OWJlNzksIDB4Y2I2MWIzOGMsIDB4YmM2NjgzMWEsIDB4MjU2ZmQyYTAsIDB4NTI2OGUyMzYsXG4gIDB4Y2MwYzc3OTUsIDB4YmIwYjQ3MDMsIDB4MjIwMjE2YjksIDB4NTUwNTI2MmYsIDB4YzViYTNiYmUsIDB4YjJiZDBiMjgsXG4gIDB4MmJiNDVhOTIsIDB4NWNiMzZhMDQsIDB4YzJkN2ZmYTcsIDB4YjVkMGNmMzEsIDB4MmNkOTllOGIsIDB4NWJkZWFlMWQsXG4gIDB4OWI2NGMyYjAsIDB4ZWM2M2YyMjYsIDB4NzU2YWEzOWMsIDB4MDI2ZDkzMGEsIDB4OWMwOTA2YTksIDB4ZWIwZTM2M2YsXG4gIDB4NzIwNzY3ODUsIDB4MDUwMDU3MTMsIDB4OTViZjRhODIsIDB4ZTJiODdhMTQsIDB4N2JiMTJiYWUsIDB4MGNiNjFiMzgsXG4gIDB4OTJkMjhlOWIsIDB4ZTVkNWJlMGQsIDB4N2NkY2VmYjcsIDB4MGJkYmRmMjEsIDB4ODZkM2QyZDQsIDB4ZjFkNGUyNDIsXG4gIDB4NjhkZGIzZjgsIDB4MWZkYTgzNmUsIDB4ODFiZTE2Y2QsIDB4ZjZiOTI2NWIsIDB4NmZiMDc3ZTEsIDB4MThiNzQ3NzcsXG4gIDB4ODgwODVhZTYsIDB4ZmYwZjZhNzAsIDB4NjYwNjNiY2EsIDB4MTEwMTBiNWMsIDB4OGY2NTllZmYsIDB4Zjg2MmFlNjksXG4gIDB4NjE2YmZmZDMsIDB4MTY2Y2NmNDUsIDB4YTAwYWUyNzgsIDB4ZDcwZGQyZWUsIDB4NGUwNDgzNTQsIDB4MzkwM2IzYzIsXG4gIDB4YTc2NzI2NjEsIDB4ZDA2MDE2ZjcsIDB4NDk2OTQ3NGQsIDB4M2U2ZTc3ZGIsIDB4YWVkMTZhNGEsIDB4ZDlkNjVhZGMsXG4gIDB4NDBkZjBiNjYsIDB4MzdkODNiZjAsIDB4YTliY2FlNTMsIDB4ZGViYjllYzUsIDB4NDdiMmNmN2YsIDB4MzBiNWZmZTksXG4gIDB4YmRiZGYyMWMsIDB4Y2FiYWMyOGEsIDB4NTNiMzkzMzAsIDB4MjRiNGEzYTYsIDB4YmFkMDM2MDUsIDB4Y2RkNzA2OTMsXG4gIDB4NTRkZTU3MjksIDB4MjNkOTY3YmYsIDB4YjM2NjdhMmUsIDB4YzQ2MTRhYjgsIDB4NWQ2ODFiMDIsIDB4MmE2ZjJiOTQsXG4gIDB4YjQwYmJlMzcsIDB4YzMwYzhlYTEsIDB4NWEwNWRmMWIsIDB4MmQwMmVmOGRcbl07XG5cbi8qKlxuICogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDMyQXJyYXkpfSBDUkMtMzIgVGFibGUuXG4gKiBAY29uc3RcbiAqL1xuWmxpYi5DUkMzMi5UYWJsZSA9IFpMSUJfQ1JDMzJfQ09NUEFDVCA/IChmdW5jdGlvbigpIHtcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQzMkFycmF5KX0gKi9cbiAgdmFyIHRhYmxlID0gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQzMkFycmF5IDogQXJyYXkpKDI1Nik7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgYztcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBpO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGo7XG5cbiAgZm9yIChpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gICAgYyA9IGk7XG4gICAgZm9yIChqID0gMDsgaiA8IDg7ICsraikge1xuICAgICAgYyA9IChjICYgMSkgPyAoMHhlZEI4ODMyMCBeIChjID4+PiAxKSkgOiAoYyA+Pj4gMSk7XG4gICAgfVxuICAgIHRhYmxlW2ldID0gYyA+Pj4gMDtcbiAgfVxuXG4gIHJldHVybiB0YWJsZTtcbn0pKCkgOiBVU0VfVFlQRURBUlJBWSA/IG5ldyBVaW50MzJBcnJheShabGliLkNSQzMyLlRhYmxlXykgOiBabGliLkNSQzMyLlRhYmxlXztcblxufSk7XG4iLCJnb29nLnByb3ZpZGUoJ1psaWIuR3VuemlwTWVtYmVyJyk7XG5cbmdvb2cuc2NvcGUoZnVuY3Rpb24oKSB7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKi9cblpsaWIuR3VuemlwTWVtYmVyID0gZnVuY3Rpb24oKSB7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBzaWduYXR1cmUgZmlyc3QgYnl0ZS4gKi9cbiAgdGhpcy5pZDE7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBzaWduYXR1cmUgc2Vjb25kIGJ5dGUuICovXG4gIHRoaXMuaWQyO1xuICAvKiogQHR5cGUge251bWJlcn0gY29tcHJlc3Npb24gbWV0aG9kLiAqL1xuICB0aGlzLmNtO1xuICAvKiogQHR5cGUge251bWJlcn0gZmxhZ3MuICovXG4gIHRoaXMuZmxnO1xuICAvKiogQHR5cGUge0RhdGV9IG1vZGlmaWNhdGlvbiB0aW1lLiAqL1xuICB0aGlzLm10aW1lO1xuICAvKiogQHR5cGUge251bWJlcn0gZXh0cmEgZmxhZ3MuICovXG4gIHRoaXMueGZsO1xuICAvKiogQHR5cGUge251bWJlcn0gb3BlcmF0aW5nIHN5c3RlbSBudW1iZXIuICovXG4gIHRoaXMub3M7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBDUkMtMTYgdmFsdWUgZm9yIEZIQ1JDIGZsYWcuICovXG4gIHRoaXMuY3JjMTY7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBleHRyYSBsZW5ndGguICovXG4gIHRoaXMueGxlbjtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IENSQy0zMiB2YWx1ZSBmb3IgdmVyaWZpY2F0aW9uLiAqL1xuICB0aGlzLmNyYzMyO1xuICAvKiogQHR5cGUge251bWJlcn0gaW5wdXQgc2l6ZSBtb2R1bG8gMzIgdmFsdWUuICovXG4gIHRoaXMuaXNpemU7XG4gIC8qKiBAdHlwZSB7c3RyaW5nfSBmaWxlbmFtZS4gKi9cbiAgdGhpcy5uYW1lO1xuICAvKiogQHR5cGUge3N0cmluZ30gY29tbWVudC4gKi9cbiAgdGhpcy5jb21tZW50O1xuICAvKiogQHR5cGUgeyEoVWludDhBcnJheXxBcnJheS48bnVtYmVyPil9ICovXG4gIHRoaXMuZGF0YTtcbn07XG5cblpsaWIuR3VuemlwTWVtYmVyLnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLm5hbWU7XG59O1xuXG5abGliLkd1bnppcE1lbWJlci5wcm90b3R5cGUuZ2V0RGF0YSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5kYXRhO1xufTtcblxuWmxpYi5HdW56aXBNZW1iZXIucHJvdG90eXBlLmdldE10aW1lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLm10aW1lO1xufVxuXG59KTsiLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgSGVhcCBTb3J0IOWun+ijhS4g44OP44OV44Oe44Oz56ym5Y+35YyW44Gn5L2/55So44GZ44KLLlxuICovXG5cbmdvb2cucHJvdmlkZSgnWmxpYi5IZWFwJyk7XG5cbmdvb2cucmVxdWlyZSgnVVNFX1RZUEVEQVJSQVknKTtcblxuZ29vZy5zY29wZShmdW5jdGlvbigpIHtcblxuLyoqXG4gKiDjgqvjgrnjgr/jg6Djg4/jg5Xjg57jg7PnrKblj7fjgafkvb/nlKjjgZnjgovjg5Ljg7zjg5flrp/oo4VcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGgg44OS44O844OX44K144Kk44K6LlxuICogQGNvbnN0cnVjdG9yXG4gKi9cblpsaWIuSGVhcCA9IGZ1bmN0aW9uKGxlbmd0aCkge1xuICB0aGlzLmJ1ZmZlciA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50MTZBcnJheSA6IEFycmF5KShsZW5ndGggKiAyKTtcbiAgdGhpcy5sZW5ndGggPSAwO1xufTtcblxuLyoqXG4gKiDopqrjg47jg7zjg4njga4gaW5kZXgg5Y+W5b6XXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXgg5a2Q44OO44O844OJ44GuIGluZGV4LlxuICogQHJldHVybiB7bnVtYmVyfSDopqrjg47jg7zjg4njga4gaW5kZXguXG4gKlxuICovXG5abGliLkhlYXAucHJvdG90eXBlLmdldFBhcmVudCA9IGZ1bmN0aW9uKGluZGV4KSB7XG4gIHJldHVybiAoKGluZGV4IC0gMikgLyA0IHwgMCkgKiAyO1xufTtcblxuLyoqXG4gKiDlrZDjg47jg7zjg4njga4gaW5kZXgg5Y+W5b6XXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXgg6Kaq44OO44O844OJ44GuIGluZGV4LlxuICogQHJldHVybiB7bnVtYmVyfSDlrZDjg47jg7zjg4njga4gaW5kZXguXG4gKi9cblpsaWIuSGVhcC5wcm90b3R5cGUuZ2V0Q2hpbGQgPSBmdW5jdGlvbihpbmRleCkge1xuICByZXR1cm4gMiAqIGluZGV4ICsgMjtcbn07XG5cbi8qKlxuICogSGVhcCDjgavlgKTjgpLov73liqDjgZnjgotcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCDjgq3jg7wgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUg5YCkLlxuICogQHJldHVybiB7bnVtYmVyfSDnj77lnKjjga7jg5Ljg7zjg5fplbcuXG4gKi9cblpsaWIuSGVhcC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKGluZGV4LCB2YWx1ZSkge1xuICB2YXIgY3VycmVudCwgcGFyZW50LFxuICAgICAgaGVhcCA9IHRoaXMuYnVmZmVyLFxuICAgICAgc3dhcDtcblxuICBjdXJyZW50ID0gdGhpcy5sZW5ndGg7XG4gIGhlYXBbdGhpcy5sZW5ndGgrK10gPSB2YWx1ZTtcbiAgaGVhcFt0aGlzLmxlbmd0aCsrXSA9IGluZGV4O1xuXG4gIC8vIOODq+ODvOODiOODjuODvOODieOBq+OBn+OBqeOCiuedgOOBj+OBvuOBp+WFpeOCjOabv+OBiOOCkuippuOBv+OCi1xuICB3aGlsZSAoY3VycmVudCA+IDApIHtcbiAgICBwYXJlbnQgPSB0aGlzLmdldFBhcmVudChjdXJyZW50KTtcblxuICAgIC8vIOimquODjuODvOODieOBqOavlOi8g+OBl+OBpuimquOBruaWueOBjOWwj+OBleOBkeOCjOOBsOWFpeOCjOabv+OBiOOCi1xuICAgIGlmIChoZWFwW2N1cnJlbnRdID4gaGVhcFtwYXJlbnRdKSB7XG4gICAgICBzd2FwID0gaGVhcFtjdXJyZW50XTtcbiAgICAgIGhlYXBbY3VycmVudF0gPSBoZWFwW3BhcmVudF07XG4gICAgICBoZWFwW3BhcmVudF0gPSBzd2FwO1xuXG4gICAgICBzd2FwID0gaGVhcFtjdXJyZW50ICsgMV07XG4gICAgICBoZWFwW2N1cnJlbnQgKyAxXSA9IGhlYXBbcGFyZW50ICsgMV07XG4gICAgICBoZWFwW3BhcmVudCArIDFdID0gc3dhcDtcblxuICAgICAgY3VycmVudCA9IHBhcmVudDtcbiAgICAvLyDlhaXjgozmm7/jgYjjgYzlv4XopoHjgarjgY/jgarjgaPjgZ/jgonjgZ3jgZPjgafmipzjgZHjgotcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXMubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBIZWFw44GL44KJ5LiA55Wq5aSn44GN44GE5YCk44KS6L+U44GZXG4gKiBAcmV0dXJuIHt7aW5kZXg6IG51bWJlciwgdmFsdWU6IG51bWJlciwgbGVuZ3RoOiBudW1iZXJ9fSB7aW5kZXg6IOOCreODvGluZGV4LFxuICogICAgIHZhbHVlOiDlgKQsIGxlbmd0aDog44OS44O844OX6ZW3fSDjga4gT2JqZWN0LlxuICovXG5abGliLkhlYXAucHJvdG90eXBlLnBvcCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaW5kZXgsIHZhbHVlLFxuICAgICAgaGVhcCA9IHRoaXMuYnVmZmVyLCBzd2FwLFxuICAgICAgY3VycmVudCwgcGFyZW50O1xuXG4gIHZhbHVlID0gaGVhcFswXTtcbiAgaW5kZXggPSBoZWFwWzFdO1xuXG4gIC8vIOW+jOOCjeOBi+OCieWApOOCkuWPluOCi1xuICB0aGlzLmxlbmd0aCAtPSAyO1xuICBoZWFwWzBdID0gaGVhcFt0aGlzLmxlbmd0aF07XG4gIGhlYXBbMV0gPSBoZWFwW3RoaXMubGVuZ3RoICsgMV07XG5cbiAgcGFyZW50ID0gMDtcbiAgLy8g44Or44O844OI44OO44O844OJ44GL44KJ5LiL44GM44Gj44Gm44GE44GPXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY3VycmVudCA9IHRoaXMuZ2V0Q2hpbGQocGFyZW50KTtcblxuICAgIC8vIOevhOWbsuODgeOCp+ODg+OCr1xuICAgIGlmIChjdXJyZW50ID49IHRoaXMubGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyDpmqPjga7jg47jg7zjg4njgajmr5TovIPjgZfjgabjgIHpmqPjga7mlrnjgYzlgKTjgYzlpKfjgY3jgZHjgozjgbDpmqPjgpLnj77lnKjjg47jg7zjg4njgajjgZfjgabpgbjmip5cbiAgICBpZiAoY3VycmVudCArIDIgPCB0aGlzLmxlbmd0aCAmJiBoZWFwW2N1cnJlbnQgKyAyXSA+IGhlYXBbY3VycmVudF0pIHtcbiAgICAgIGN1cnJlbnQgKz0gMjtcbiAgICB9XG5cbiAgICAvLyDopqrjg47jg7zjg4njgajmr5TovIPjgZfjgabopqrjga7mlrnjgYzlsI/jgZXjgYTloLTlkIjjga/lhaXjgozmm7/jgYjjgotcbiAgICBpZiAoaGVhcFtjdXJyZW50XSA+IGhlYXBbcGFyZW50XSkge1xuICAgICAgc3dhcCA9IGhlYXBbcGFyZW50XTtcbiAgICAgIGhlYXBbcGFyZW50XSA9IGhlYXBbY3VycmVudF07XG4gICAgICBoZWFwW2N1cnJlbnRdID0gc3dhcDtcblxuICAgICAgc3dhcCA9IGhlYXBbcGFyZW50ICsgMV07XG4gICAgICBoZWFwW3BhcmVudCArIDFdID0gaGVhcFtjdXJyZW50ICsgMV07XG4gICAgICBoZWFwW2N1cnJlbnQgKyAxXSA9IHN3YXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHBhcmVudCA9IGN1cnJlbnQ7XG4gIH1cblxuICByZXR1cm4ge2luZGV4OiBpbmRleCwgdmFsdWU6IHZhbHVlLCBsZW5ndGg6IHRoaXMubGVuZ3RofTtcbn07XG5cblxuLy8gZW5kIG9mIHNjb3BlXG59KTtcblxuLyogdmltOnNldCBleHBhbmR0YWIgdHM9MiBzdz0yIHR3PTgwOiAqL1xuIiwiZ29vZy5wcm92aWRlKCdabGliLkh1ZmZtYW4nKTtcblxuZ29vZy5yZXF1aXJlKCdVU0VfVFlQRURBUlJBWScpO1xuXG5nb29nLnNjb3BlKGZ1bmN0aW9uKCkge1xuXG4vKipcbiAqIGJ1aWxkIGh1ZmZtYW4gdGFibGUgZnJvbSBsZW5ndGggbGlzdC5cbiAqIEBwYXJhbSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gbGVuZ3RocyBsZW5ndGggbGlzdC5cbiAqIEByZXR1cm4geyFBcnJheX0gaHVmZm1hbiB0YWJsZS5cbiAqL1xuWmxpYi5IdWZmbWFuLmJ1aWxkSHVmZm1hblRhYmxlID0gZnVuY3Rpb24obGVuZ3Rocykge1xuICAvKiogQHR5cGUge251bWJlcn0gbGVuZ3RoIGxpc3Qgc2l6ZS4gKi9cbiAgdmFyIGxpc3RTaXplID0gbGVuZ3Rocy5sZW5ndGg7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBtYXggY29kZSBsZW5ndGggZm9yIHRhYmxlIHNpemUuICovXG4gIHZhciBtYXhDb2RlTGVuZ3RoID0gMDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG1pbiBjb2RlIGxlbmd0aCBmb3IgdGFibGUgc2l6ZS4gKi9cbiAgdmFyIG1pbkNvZGVMZW5ndGggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSB0YWJsZSBzaXplLiAqL1xuICB2YXIgc2l6ZTtcbiAgLyoqIEB0eXBlIHshKEFycmF5fFVpbnQ4QXJyYXkpfSBodWZmbWFuIGNvZGUgdGFibGUuICovXG4gIHZhciB0YWJsZTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGJpdCBsZW5ndGguICovXG4gIHZhciBiaXRMZW5ndGg7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBodWZmbWFuIGNvZGUuICovXG4gIHZhciBjb2RlO1xuICAvKipcbiAgICog44K144Kk44K644GMIDJebWF4bGVuZ3RoIOWAi+OBruODhuODvOODluODq+OCkuWfi+OCgeOCi+OBn+OCgeOBruOCueOCreODg+ODl+mVty5cbiAgICogQHR5cGUge251bWJlcn0gc2tpcCBsZW5ndGggZm9yIHRhYmxlIGZpbGxpbmcuXG4gICAqL1xuICB2YXIgc2tpcDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IHJldmVyc2VkIGNvZGUuICovXG4gIHZhciByZXZlcnNlZDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IHJldmVyc2UgdGVtcC4gKi9cbiAgdmFyIHJ0ZW1wO1xuICAvKiogQHR5cGUge251bWJlcn0gbG9vcCBjb3VudGVyLiAqL1xuICB2YXIgaTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgbGltaXQuICovXG4gIHZhciBpbDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgY291bnRlci4gKi9cbiAgdmFyIGo7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSB0YWJsZSB2YWx1ZS4gKi9cbiAgdmFyIHZhbHVlO1xuXG4gIC8vIE1hdGgubWF4IOOBr+mBheOBhOOBruOBp+acgOmVt+OBruWApOOBryBmb3ItbG9vcCDjgaflj5blvpfjgZnjgotcbiAgZm9yIChpID0gMCwgaWwgPSBsaXN0U2l6ZTsgaSA8IGlsOyArK2kpIHtcbiAgICBpZiAobGVuZ3Roc1tpXSA+IG1heENvZGVMZW5ndGgpIHtcbiAgICAgIG1heENvZGVMZW5ndGggPSBsZW5ndGhzW2ldO1xuICAgIH1cbiAgICBpZiAobGVuZ3Roc1tpXSA8IG1pbkNvZGVMZW5ndGgpIHtcbiAgICAgIG1pbkNvZGVMZW5ndGggPSBsZW5ndGhzW2ldO1xuICAgIH1cbiAgfVxuXG4gIHNpemUgPSAxIDw8IG1heENvZGVMZW5ndGg7XG4gIHRhYmxlID0gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQzMkFycmF5IDogQXJyYXkpKHNpemUpO1xuXG4gIC8vIOODk+ODg+ODiOmVt+OBruefreOBhOmghuOBi+OCieODj+ODleODnuODs+espuWPt+OCkuWJsuOCiuW9k+OBpuOCi1xuICBmb3IgKGJpdExlbmd0aCA9IDEsIGNvZGUgPSAwLCBza2lwID0gMjsgYml0TGVuZ3RoIDw9IG1heENvZGVMZW5ndGg7KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHtcbiAgICAgIGlmIChsZW5ndGhzW2ldID09PSBiaXRMZW5ndGgpIHtcbiAgICAgICAgLy8g44OT44OD44OI44Kq44O844OA44O844GM6YCG44Gr44Gq44KL44Gf44KB44OT44OD44OI6ZW35YiG5Lim44Gz44KS5Y+N6Lui44GZ44KLXG4gICAgICAgIGZvciAocmV2ZXJzZWQgPSAwLCBydGVtcCA9IGNvZGUsIGogPSAwOyBqIDwgYml0TGVuZ3RoOyArK2opIHtcbiAgICAgICAgICByZXZlcnNlZCA9IChyZXZlcnNlZCA8PCAxKSB8IChydGVtcCAmIDEpO1xuICAgICAgICAgIHJ0ZW1wID4+PSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g5pyA5aSn44OT44OD44OI6ZW344KS44KC44Go44Gr44OG44O844OW44Or44KS5L2c44KL44Gf44KB44CBXG4gICAgICAgIC8vIOacgOWkp+ODk+ODg+ODiOmVt+S7peWkluOBp+OBryAwIC8gMSDjganjgaHjgonjgafjgoLoia/jgYTnrofmiYDjgYzjgafjgY3jgotcbiAgICAgICAgLy8g44Gd44Gu44Gp44Gh44KJ44Gn44KC6Imv44GE5aC05omA44Gv5ZCM44GY5YCk44Gn5Z+L44KB44KL44GT44Go44GnXG4gICAgICAgIC8vIOacrOadpeOBruODk+ODg+ODiOmVt+S7peS4iuOBruODk+ODg+ODiOaVsOWPluW+l+OBl+OBpuOCguWVj+mhjOOBjOi1t+OBk+OCieOBquOBhOOCiOOBhuOBq+OBmeOCi1xuICAgICAgICB2YWx1ZSA9IChiaXRMZW5ndGggPDwgMTYpIHwgaTtcbiAgICAgICAgZm9yIChqID0gcmV2ZXJzZWQ7IGogPCBzaXplOyBqICs9IHNraXApIHtcbiAgICAgICAgICB0YWJsZVtqXSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgKytjb2RlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOasoeOBruODk+ODg+ODiOmVt+OBuFxuICAgICsrYml0TGVuZ3RoO1xuICAgIGNvZGUgPDw9IDE7XG4gICAgc2tpcCA8PD0gMTtcbiAgfVxuXG4gIHJldHVybiBbdGFibGUsIG1heENvZGVMZW5ndGgsIG1pbkNvZGVMZW5ndGhdO1xufTtcblxuXG4vLyBlbmQgb2Ygc2NvcGVcbn0pO1xuXG4vKiB2aW06c2V0IGV4cGFuZHRhYiB0cz0yIHN3PTIgdHc9ODA6ICovXG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgRGVmbGF0ZSAoUkZDMTk1MSkg56ym5Y+35YyW44Ki44Or44K044Oq44K644Og5a6f6KOFLlxuICovXG5cbmdvb2cucHJvdmlkZSgnWmxpYi5SYXdEZWZsYXRlJyk7XG5cbmdvb2cucmVxdWlyZSgnVVNFX1RZUEVEQVJSQVknKTtcbmdvb2cucmVxdWlyZSgnWmxpYi5CaXRTdHJlYW0nKTtcbmdvb2cucmVxdWlyZSgnWmxpYi5IZWFwJyk7XG5cbmdvb2cuc2NvcGUoZnVuY3Rpb24oKSB7XG5cbi8qKlxuICogUmF3IERlZmxhdGUg5a6f6KOFXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGlucHV0IOespuWPt+WMluOBmeOCi+WvvuixoeOBruODkOODg+ODleOCoS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X3BhcmFtcyBvcHRpb24gcGFyYW1ldGVycy5cbiAqXG4gKiB0eXBlZCBhcnJheSDjgYzkvb/nlKjlj6/og73jgarjgajjgY3jgIFvdXRwdXRCdWZmZXIg44GMIEFycmF5IOOBr+iHquWLleeahOOBqyBVaW50OEFycmF5IOOBq1xuICog5aSJ5o+b44GV44KM44G+44GZLlxuICog5Yil44Gu44Kq44OW44K444Kn44Kv44OI44Gr44Gq44KL44Gf44KB5Ye65Yqb44OQ44OD44OV44Kh44KS5Y+C54Wn44GX44Gm44GE44KL5aSJ5pWw44Gq44Gp44GvXG4gKiDmm7TmlrDjgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZkuXG4gKi9cblpsaWIuUmF3RGVmbGF0ZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRfcGFyYW1zKSB7XG4gIC8qKiBAdHlwZSB7WmxpYi5SYXdEZWZsYXRlLkNvbXByZXNzaW9uVHlwZX0gKi9cbiAgdGhpcy5jb21wcmVzc2lvblR5cGUgPSBabGliLlJhd0RlZmxhdGUuQ29tcHJlc3Npb25UeXBlLkRZTkFNSUM7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB0aGlzLmxhenkgPSAwO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDMyQXJyYXkpfSAqL1xuICB0aGlzLmZyZXFzTGl0TGVuO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDMyQXJyYXkpfSAqL1xuICB0aGlzLmZyZXFzRGlzdDtcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSAqL1xuICB0aGlzLmlucHV0ID1cbiAgICAoVVNFX1RZUEVEQVJSQVkgJiYgaW5wdXQgaW5zdGFuY2VvZiBBcnJheSkgPyBuZXcgVWludDhBcnJheShpbnB1dCkgOiBpbnB1dDtcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBvdXRwdXQgb3V0cHV0IGJ1ZmZlci4gKi9cbiAgdGhpcy5vdXRwdXQ7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBwb3Mgb3V0cHV0IGJ1ZmZlciBwb3NpdGlvbi4gKi9cbiAgdGhpcy5vcCA9IDA7XG5cbiAgLy8gb3B0aW9uIHBhcmFtZXRlcnNcbiAgaWYgKG9wdF9wYXJhbXMpIHtcbiAgICBpZiAob3B0X3BhcmFtc1snbGF6eSddKSB7XG4gICAgICB0aGlzLmxhenkgPSBvcHRfcGFyYW1zWydsYXp5J107XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0X3BhcmFtc1snY29tcHJlc3Npb25UeXBlJ10gPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLmNvbXByZXNzaW9uVHlwZSA9IG9wdF9wYXJhbXNbJ2NvbXByZXNzaW9uVHlwZSddO1xuICAgIH1cbiAgICBpZiAob3B0X3BhcmFtc1snb3V0cHV0QnVmZmVyJ10pIHtcbiAgICAgIHRoaXMub3V0cHV0ID1cbiAgICAgICAgKFVTRV9UWVBFREFSUkFZICYmIG9wdF9wYXJhbXNbJ291dHB1dEJ1ZmZlciddIGluc3RhbmNlb2YgQXJyYXkpID9cbiAgICAgICAgbmV3IFVpbnQ4QXJyYXkob3B0X3BhcmFtc1snb3V0cHV0QnVmZmVyJ10pIDogb3B0X3BhcmFtc1snb3V0cHV0QnVmZmVyJ107XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0X3BhcmFtc1snb3V0cHV0SW5kZXgnXSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMub3AgPSBvcHRfcGFyYW1zWydvdXRwdXRJbmRleCddO1xuICAgIH1cbiAgfVxuXG4gIGlmICghdGhpcy5vdXRwdXQpIHtcbiAgICB0aGlzLm91dHB1dCA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50OEFycmF5IDogQXJyYXkpKDB4ODAwMCk7XG4gIH1cbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuWmxpYi5SYXdEZWZsYXRlLkNvbXByZXNzaW9uVHlwZSA9IHtcbiAgTk9ORTogMCxcbiAgRklYRUQ6IDEsXG4gIERZTkFNSUM6IDIsXG4gIFJFU0VSVkVEOiAzXG59O1xuXG5cbi8qKlxuICogTFo3NyDjga7mnIDlsI/jg57jg4Pjg4HplbdcbiAqIEBjb25zdFxuICogQHR5cGUge251bWJlcn1cbiAqL1xuWmxpYi5SYXdEZWZsYXRlLkx6NzdNaW5MZW5ndGggPSAzO1xuXG4vKipcbiAqIExaNzcg44Gu5pyA5aSn44Oe44OD44OB6ZW3XG4gKiBAY29uc3RcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblpsaWIuUmF3RGVmbGF0ZS5Mejc3TWF4TGVuZ3RoID0gMjU4O1xuXG4vKipcbiAqIExaNzcg44Gu44Km44Kj44Oz44OJ44Km44K144Kk44K6XG4gKiBAY29uc3RcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblpsaWIuUmF3RGVmbGF0ZS5XaW5kb3dTaXplID0gMHg4MDAwO1xuXG4vKipcbiAqIOacgOmVt+OBruespuWPt+mVt1xuICogQGNvbnN0XG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5abGliLlJhd0RlZmxhdGUuTWF4Q29kZUxlbmd0aCA9IDE2O1xuXG4vKipcbiAqIOODj+ODleODnuODs+espuWPt+OBruacgOWkp+aVsOWApFxuICogQGNvbnN0XG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5abGliLlJhd0RlZmxhdGUuSFVGTUFYID0gMjg2O1xuXG4vKipcbiAqIOWbuuWumuODj+ODleODnuODs+espuWPt+OBruespuWPt+WMluODhuODvOODluODq1xuICogQGNvbnN0XG4gKiBAdHlwZSB7QXJyYXkuPEFycmF5LjxudW1iZXIsIG51bWJlcj4+fVxuICovXG5abGliLlJhd0RlZmxhdGUuRml4ZWRIdWZmbWFuVGFibGUgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB0YWJsZSA9IFtdLCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCAyODg7IGkrKykge1xuICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgY2FzZSAoaSA8PSAxNDMpOiB0YWJsZS5wdXNoKFtpICAgICAgICsgMHgwMzAsIDhdKTsgYnJlYWs7XG4gICAgICBjYXNlIChpIDw9IDI1NSk6IHRhYmxlLnB1c2goW2kgLSAxNDQgKyAweDE5MCwgOV0pOyBicmVhaztcbiAgICAgIGNhc2UgKGkgPD0gMjc5KTogdGFibGUucHVzaChbaSAtIDI1NiArIDB4MDAwLCA3XSk7IGJyZWFrO1xuICAgICAgY2FzZSAoaSA8PSAyODcpOiB0YWJsZS5wdXNoKFtpIC0gMjgwICsgMHgwQzAsIDhdKTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyAnaW52YWxpZCBsaXRlcmFsOiAnICsgaTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFibGU7XG59KSgpO1xuXG4vKipcbiAqIERFRkxBVEUg44OW44Ot44OD44Kv44Gu5L2c5oiQXG4gKiBAcmV0dXJuIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSDlnKfnuK7muIjjgb8gYnl0ZSBhcnJheS5cbiAqL1xuWmxpYi5SYXdEZWZsYXRlLnByb3RvdHlwZS5jb21wcmVzcyA9IGZ1bmN0aW9uKCkge1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9ICovXG4gIHZhciBibG9ja0FycmF5O1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIHBvc2l0aW9uO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGxlbmd0aDtcblxuICB2YXIgaW5wdXQgPSB0aGlzLmlucHV0O1xuXG4gIC8vIGNvbXByZXNzaW9uXG4gIHN3aXRjaCAodGhpcy5jb21wcmVzc2lvblR5cGUpIHtcbiAgICBjYXNlIFpsaWIuUmF3RGVmbGF0ZS5Db21wcmVzc2lvblR5cGUuTk9ORTpcbiAgICAgIC8vIGVhY2ggNjU1MzUtQnl0ZSAobGVuZ3RoIGhlYWRlcjogMTYtYml0KVxuICAgICAgZm9yIChwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGlucHV0Lmxlbmd0aDsgcG9zaXRpb24gPCBsZW5ndGg7KSB7XG4gICAgICAgIGJsb2NrQXJyYXkgPSBVU0VfVFlQRURBUlJBWSA/XG4gICAgICAgICAgaW5wdXQuc3ViYXJyYXkocG9zaXRpb24sIHBvc2l0aW9uICsgMHhmZmZmKSA6XG4gICAgICAgICAgaW5wdXQuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgMHhmZmZmKTtcbiAgICAgICAgcG9zaXRpb24gKz0gYmxvY2tBcnJheS5sZW5ndGg7XG4gICAgICAgIHRoaXMubWFrZU5vY29tcHJlc3NCbG9jayhibG9ja0FycmF5LCAocG9zaXRpb24gPT09IGxlbmd0aCkpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBabGliLlJhd0RlZmxhdGUuQ29tcHJlc3Npb25UeXBlLkZJWEVEOlxuICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLm1ha2VGaXhlZEh1ZmZtYW5CbG9jayhpbnB1dCwgdHJ1ZSk7XG4gICAgICB0aGlzLm9wID0gdGhpcy5vdXRwdXQubGVuZ3RoO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBabGliLlJhd0RlZmxhdGUuQ29tcHJlc3Npb25UeXBlLkRZTkFNSUM6XG4gICAgICB0aGlzLm91dHB1dCA9IHRoaXMubWFrZUR5bmFtaWNIdWZmbWFuQmxvY2soaW5wdXQsIHRydWUpO1xuICAgICAgdGhpcy5vcCA9IHRoaXMub3V0cHV0Lmxlbmd0aDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyAnaW52YWxpZCBjb21wcmVzc2lvbiB0eXBlJztcbiAgfVxuXG4gIHJldHVybiB0aGlzLm91dHB1dDtcbn07XG5cbi8qKlxuICog6Z2e5Zyn57iu44OW44Ot44OD44Kv44Gu5L2c5oiQXG4gKiBAcGFyYW0geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGJsb2NrQXJyYXkg44OW44Ot44OD44Kv44OH44O844K/IGJ5dGUgYXJyYXkuXG4gKiBAcGFyYW0geyFib29sZWFufSBpc0ZpbmFsQmxvY2sg5pyA5b6M44Gu44OW44Ot44OD44Kv44Gq44KJ44GwdHJ1ZS5cbiAqIEByZXR1cm4geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IOmdnuWcp+e4ruODluODreODg+OCryBieXRlIGFycmF5LlxuICovXG5abGliLlJhd0RlZmxhdGUucHJvdG90eXBlLm1ha2VOb2NvbXByZXNzQmxvY2sgPVxuZnVuY3Rpb24oYmxvY2tBcnJheSwgaXNGaW5hbEJsb2NrKSB7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgYmZpbmFsO1xuICAvKiogQHR5cGUge1psaWIuUmF3RGVmbGF0ZS5Db21wcmVzc2lvblR5cGV9ICovXG4gIHZhciBidHlwZTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBsZW47XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgbmxlbjtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBpO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGlsO1xuXG4gIHZhciBvdXRwdXQgPSB0aGlzLm91dHB1dDtcbiAgdmFyIG9wID0gdGhpcy5vcDtcblxuICAvLyBleHBhbmQgYnVmZmVyXG4gIGlmIChVU0VfVFlQRURBUlJBWSkge1xuICAgIG91dHB1dCA9IG5ldyBVaW50OEFycmF5KHRoaXMub3V0cHV0LmJ1ZmZlcik7XG4gICAgd2hpbGUgKG91dHB1dC5sZW5ndGggPD0gb3AgKyBibG9ja0FycmF5Lmxlbmd0aCArIDUpIHtcbiAgICAgIG91dHB1dCA9IG5ldyBVaW50OEFycmF5KG91dHB1dC5sZW5ndGggPDwgMSk7XG4gICAgfVxuICAgIG91dHB1dC5zZXQodGhpcy5vdXRwdXQpO1xuICB9XG5cbiAgLy8gaGVhZGVyXG4gIGJmaW5hbCA9IGlzRmluYWxCbG9jayA/IDEgOiAwO1xuICBidHlwZSA9IFpsaWIuUmF3RGVmbGF0ZS5Db21wcmVzc2lvblR5cGUuTk9ORTtcbiAgb3V0cHV0W29wKytdID0gKGJmaW5hbCkgfCAoYnR5cGUgPDwgMSk7XG5cbiAgLy8gbGVuZ3RoXG4gIGxlbiA9IGJsb2NrQXJyYXkubGVuZ3RoO1xuICBubGVuID0gKH5sZW4gKyAweDEwMDAwKSAmIDB4ZmZmZjtcbiAgb3V0cHV0W29wKytdID0gICAgICAgICAgbGVuICYgMHhmZjtcbiAgb3V0cHV0W29wKytdID0gIChsZW4gPj4+IDgpICYgMHhmZjtcbiAgb3V0cHV0W29wKytdID0gICAgICAgICBubGVuICYgMHhmZjtcbiAgb3V0cHV0W29wKytdID0gKG5sZW4gPj4+IDgpICYgMHhmZjtcblxuICAvLyBjb3B5IGJ1ZmZlclxuICBpZiAoVVNFX1RZUEVEQVJSQVkpIHtcbiAgICAgb3V0cHV0LnNldChibG9ja0FycmF5LCBvcCk7XG4gICAgIG9wICs9IGJsb2NrQXJyYXkubGVuZ3RoO1xuICAgICBvdXRwdXQgPSBvdXRwdXQuc3ViYXJyYXkoMCwgb3ApO1xuICB9IGVsc2Uge1xuICAgIGZvciAoaSA9IDAsIGlsID0gYmxvY2tBcnJheS5sZW5ndGg7IGkgPCBpbDsgKytpKSB7XG4gICAgICBvdXRwdXRbb3ArK10gPSBibG9ja0FycmF5W2ldO1xuICAgIH1cbiAgICBvdXRwdXQubGVuZ3RoID0gb3A7XG4gIH1cblxuICB0aGlzLm9wID0gb3A7XG4gIHRoaXMub3V0cHV0ID0gb3V0cHV0O1xuXG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG4vKipcbiAqIOWbuuWumuODj+ODleODnuODs+ODluODreODg+OCr+OBruS9nOaIkFxuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBibG9ja0FycmF5IOODluODreODg+OCr+ODh+ODvOOCvyBieXRlIGFycmF5LlxuICogQHBhcmFtIHshYm9vbGVhbn0gaXNGaW5hbEJsb2NrIOacgOW+jOOBruODluODreODg+OCr+OBquOCieOBsHRydWUuXG4gKiBAcmV0dXJuIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSDlm7rlrprjg4/jg5Xjg57jg7PnrKblj7fljJbjg5bjg63jg4Pjgq8gYnl0ZSBhcnJheS5cbiAqL1xuWmxpYi5SYXdEZWZsYXRlLnByb3RvdHlwZS5tYWtlRml4ZWRIdWZmbWFuQmxvY2sgPVxuZnVuY3Rpb24oYmxvY2tBcnJheSwgaXNGaW5hbEJsb2NrKSB7XG4gIC8qKiBAdHlwZSB7WmxpYi5CaXRTdHJlYW19ICovXG4gIHZhciBzdHJlYW0gPSBuZXcgWmxpYi5CaXRTdHJlYW0oVVNFX1RZUEVEQVJSQVkgP1xuICAgIG5ldyBVaW50OEFycmF5KHRoaXMub3V0cHV0LmJ1ZmZlcikgOiB0aGlzLm91dHB1dCwgdGhpcy5vcCk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgYmZpbmFsO1xuICAvKiogQHR5cGUge1psaWIuUmF3RGVmbGF0ZS5Db21wcmVzc2lvblR5cGV9ICovXG4gIHZhciBidHlwZTtcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQxNkFycmF5KX0gKi9cbiAgdmFyIGRhdGE7XG5cbiAgLy8gaGVhZGVyXG4gIGJmaW5hbCA9IGlzRmluYWxCbG9jayA/IDEgOiAwO1xuICBidHlwZSA9IFpsaWIuUmF3RGVmbGF0ZS5Db21wcmVzc2lvblR5cGUuRklYRUQ7XG5cbiAgc3RyZWFtLndyaXRlQml0cyhiZmluYWwsIDEsIHRydWUpO1xuICBzdHJlYW0ud3JpdGVCaXRzKGJ0eXBlLCAyLCB0cnVlKTtcblxuICBkYXRhID0gdGhpcy5sejc3KGJsb2NrQXJyYXkpO1xuICB0aGlzLmZpeGVkSHVmZm1hbihkYXRhLCBzdHJlYW0pO1xuXG4gIHJldHVybiBzdHJlYW0uZmluaXNoKCk7XG59O1xuXG4vKipcbiAqIOWLleeahOODj+ODleODnuODs+ODluODreODg+OCr+OBruS9nOaIkFxuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBibG9ja0FycmF5IOODluODreODg+OCr+ODh+ODvOOCvyBieXRlIGFycmF5LlxuICogQHBhcmFtIHshYm9vbGVhbn0gaXNGaW5hbEJsb2NrIOacgOW+jOOBruODluODreODg+OCr+OBquOCieOBsHRydWUuXG4gKiBAcmV0dXJuIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSDli5XnmoTjg4/jg5Xjg57jg7PnrKblj7fjg5bjg63jg4Pjgq8gYnl0ZSBhcnJheS5cbiAqL1xuWmxpYi5SYXdEZWZsYXRlLnByb3RvdHlwZS5tYWtlRHluYW1pY0h1ZmZtYW5CbG9jayA9XG5mdW5jdGlvbihibG9ja0FycmF5LCBpc0ZpbmFsQmxvY2spIHtcbiAgLyoqIEB0eXBlIHtabGliLkJpdFN0cmVhbX0gKi9cbiAgdmFyIHN0cmVhbSA9IG5ldyBabGliLkJpdFN0cmVhbShVU0VfVFlQRURBUlJBWSA/XG4gICAgbmV3IFVpbnQ4QXJyYXkodGhpcy5vdXRwdXQuYnVmZmVyKSA6IHRoaXMub3V0cHV0LCB0aGlzLm9wKTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBiZmluYWw7XG4gIC8qKiBAdHlwZSB7WmxpYi5SYXdEZWZsYXRlLkNvbXByZXNzaW9uVHlwZX0gKi9cbiAgdmFyIGJ0eXBlO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDE2QXJyYXkpfSAqL1xuICB2YXIgZGF0YTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBobGl0O1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGhkaXN0O1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGhjbGVuO1xuICAvKiogQGNvbnN0IEB0eXBlIHtBcnJheS48bnVtYmVyPn0gKi9cbiAgdmFyIGhjbGVuT3JkZXIgPVxuICAgICAgICBbMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNV07XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cbiAgdmFyIGxpdExlbkxlbmd0aHM7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50MTZBcnJheSl9ICovXG4gIHZhciBsaXRMZW5Db2RlcztcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSAqL1xuICB2YXIgZGlzdExlbmd0aHM7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50MTZBcnJheSl9ICovXG4gIHZhciBkaXN0Q29kZXM7XG4gIC8qKiBAdHlwZSB7e1xuICAgKiAgIGNvZGVzOiAhKEFycmF5LjxudW1iZXI+fFVpbnQzMkFycmF5KSxcbiAgICogICBmcmVxczogIShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KVxuICAgKiB9fSAqL1xuICB2YXIgdHJlZVN5bWJvbHM7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cbiAgdmFyIHRyZWVMZW5ndGhzO1xuICAvKiogQHR5cGUge0FycmF5fSAqL1xuICB2YXIgdHJhbnNMZW5ndGhzID0gbmV3IEFycmF5KDE5KTtcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQxNkFycmF5KX0gKi9cbiAgdmFyIHRyZWVDb2RlcztcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBjb2RlO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGJpdGxlbjtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBpO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGlsO1xuXG4gIC8vIGhlYWRlclxuICBiZmluYWwgPSBpc0ZpbmFsQmxvY2sgPyAxIDogMDtcbiAgYnR5cGUgPSBabGliLlJhd0RlZmxhdGUuQ29tcHJlc3Npb25UeXBlLkRZTkFNSUM7XG5cbiAgc3RyZWFtLndyaXRlQml0cyhiZmluYWwsIDEsIHRydWUpO1xuICBzdHJlYW0ud3JpdGVCaXRzKGJ0eXBlLCAyLCB0cnVlKTtcblxuICBkYXRhID0gdGhpcy5sejc3KGJsb2NrQXJyYXkpO1xuXG4gIC8vIOODquODhuODqeODq+ODu+mVt+OBlSwg6Led6Zui44Gu44OP44OV44Oe44Oz56ym5Y+344Go56ym5Y+36ZW344Gu566X5Ye6XG4gIGxpdExlbkxlbmd0aHMgPSB0aGlzLmdldExlbmd0aHNfKHRoaXMuZnJlcXNMaXRMZW4sIDE1KTtcbiAgbGl0TGVuQ29kZXMgPSB0aGlzLmdldENvZGVzRnJvbUxlbmd0aHNfKGxpdExlbkxlbmd0aHMpO1xuICBkaXN0TGVuZ3RocyA9IHRoaXMuZ2V0TGVuZ3Roc18odGhpcy5mcmVxc0Rpc3QsIDcpO1xuICBkaXN0Q29kZXMgPSB0aGlzLmdldENvZGVzRnJvbUxlbmd0aHNfKGRpc3RMZW5ndGhzKTtcblxuICAvLyBITElULCBIRElTVCDjga7msbrlrppcbiAgZm9yIChobGl0ID0gMjg2OyBobGl0ID4gMjU3ICYmIGxpdExlbkxlbmd0aHNbaGxpdCAtIDFdID09PSAwOyBobGl0LS0pIHt9XG4gIGZvciAoaGRpc3QgPSAzMDsgaGRpc3QgPiAxICYmIGRpc3RMZW5ndGhzW2hkaXN0IC0gMV0gPT09IDA7IGhkaXN0LS0pIHt9XG5cbiAgLy8gSENMRU5cbiAgdHJlZVN5bWJvbHMgPVxuICAgIHRoaXMuZ2V0VHJlZVN5bWJvbHNfKGhsaXQsIGxpdExlbkxlbmd0aHMsIGhkaXN0LCBkaXN0TGVuZ3Rocyk7XG4gIHRyZWVMZW5ndGhzID0gdGhpcy5nZXRMZW5ndGhzXyh0cmVlU3ltYm9scy5mcmVxcywgNyk7XG4gIGZvciAoaSA9IDA7IGkgPCAxOTsgaSsrKSB7XG4gICAgdHJhbnNMZW5ndGhzW2ldID0gdHJlZUxlbmd0aHNbaGNsZW5PcmRlcltpXV07XG4gIH1cbiAgZm9yIChoY2xlbiA9IDE5OyBoY2xlbiA+IDQgJiYgdHJhbnNMZW5ndGhzW2hjbGVuIC0gMV0gPT09IDA7IGhjbGVuLS0pIHt9XG5cbiAgdHJlZUNvZGVzID0gdGhpcy5nZXRDb2Rlc0Zyb21MZW5ndGhzXyh0cmVlTGVuZ3Rocyk7XG5cbiAgLy8g5Ye65YqbXG4gIHN0cmVhbS53cml0ZUJpdHMoaGxpdCAtIDI1NywgNSwgdHJ1ZSk7XG4gIHN0cmVhbS53cml0ZUJpdHMoaGRpc3QgLSAxLCA1LCB0cnVlKTtcbiAgc3RyZWFtLndyaXRlQml0cyhoY2xlbiAtIDQsIDQsIHRydWUpO1xuICBmb3IgKGkgPSAwOyBpIDwgaGNsZW47IGkrKykge1xuICAgIHN0cmVhbS53cml0ZUJpdHModHJhbnNMZW5ndGhzW2ldLCAzLCB0cnVlKTtcbiAgfVxuXG4gIC8vIOODhOODquODvOOBruWHuuWKm1xuICBmb3IgKGkgPSAwLCBpbCA9IHRyZWVTeW1ib2xzLmNvZGVzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcbiAgICBjb2RlID0gdHJlZVN5bWJvbHMuY29kZXNbaV07XG5cbiAgICBzdHJlYW0ud3JpdGVCaXRzKHRyZWVDb2Rlc1tjb2RlXSwgdHJlZUxlbmd0aHNbY29kZV0sIHRydWUpO1xuXG4gICAgLy8gZXh0cmEgYml0c1xuICAgIGlmIChjb2RlID49IDE2KSB7XG4gICAgICBpKys7XG4gICAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgY2FzZSAxNjogYml0bGVuID0gMjsgYnJlYWs7XG4gICAgICAgIGNhc2UgMTc6IGJpdGxlbiA9IDM7IGJyZWFrO1xuICAgICAgICBjYXNlIDE4OiBiaXRsZW4gPSA3OyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyAnaW52YWxpZCBjb2RlOiAnICsgY29kZTtcbiAgICAgIH1cblxuICAgICAgc3RyZWFtLndyaXRlQml0cyh0cmVlU3ltYm9scy5jb2Rlc1tpXSwgYml0bGVuLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLmR5bmFtaWNIdWZmbWFuKFxuICAgIGRhdGEsXG4gICAgW2xpdExlbkNvZGVzLCBsaXRMZW5MZW5ndGhzXSxcbiAgICBbZGlzdENvZGVzLCBkaXN0TGVuZ3Roc10sXG4gICAgc3RyZWFtXG4gICk7XG5cbiAgcmV0dXJuIHN0cmVhbS5maW5pc2goKTtcbn07XG5cblxuLyoqXG4gKiDli5XnmoTjg4/jg5Xjg57jg7PnrKblj7fljJYo44Kr44K544K/44Og44OP44OV44Oe44Oz44OG44O844OW44OrKVxuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQxNkFycmF5KX0gZGF0YUFycmF5IExaNzcg56ym5Y+35YyW5riI44G/IGJ5dGUgYXJyYXkuXG4gKiBAcGFyYW0geyFabGliLkJpdFN0cmVhbX0gc3RyZWFtIOabuOOBjei+vOOBv+eUqOODk+ODg+ODiOOCueODiOODquODvOODoC5cbiAqIEByZXR1cm4geyFabGliLkJpdFN0cmVhbX0g44OP44OV44Oe44Oz56ym5Y+35YyW5riI44G/44OT44OD44OI44K544OI44Oq44O844Og44Kq44OW44K444Kn44Kv44OILlxuICovXG5abGliLlJhd0RlZmxhdGUucHJvdG90eXBlLmR5bmFtaWNIdWZmbWFuID1cbmZ1bmN0aW9uKGRhdGFBcnJheSwgbGl0TGVuLCBkaXN0LCBzdHJlYW0pIHtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBpbmRleDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBsZW5ndGg7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgbGl0ZXJhbDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBjb2RlO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGxpdExlbkNvZGVzO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGxpdExlbkxlbmd0aHM7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgZGlzdENvZGVzO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGRpc3RMZW5ndGhzO1xuXG4gIGxpdExlbkNvZGVzID0gbGl0TGVuWzBdO1xuICBsaXRMZW5MZW5ndGhzID0gbGl0TGVuWzFdO1xuICBkaXN0Q29kZXMgPSBkaXN0WzBdO1xuICBkaXN0TGVuZ3RocyA9IGRpc3RbMV07XG5cbiAgLy8g56ym5Y+344KSIEJpdFN0cmVhbSDjgavmm7jjgY3ovrzjgpPjgafjgYTjgY9cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGRhdGFBcnJheS5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4KSB7XG4gICAgbGl0ZXJhbCA9IGRhdGFBcnJheVtpbmRleF07XG5cbiAgICAvLyBsaXRlcmFsIG9yIGxlbmd0aFxuICAgIHN0cmVhbS53cml0ZUJpdHMobGl0TGVuQ29kZXNbbGl0ZXJhbF0sIGxpdExlbkxlbmd0aHNbbGl0ZXJhbF0sIHRydWUpO1xuXG4gICAgLy8g6ZW344GV44O76Led6Zui56ym5Y+3XG4gICAgaWYgKGxpdGVyYWwgPiAyNTYpIHtcbiAgICAgIC8vIGxlbmd0aCBleHRyYVxuICAgICAgc3RyZWFtLndyaXRlQml0cyhkYXRhQXJyYXlbKytpbmRleF0sIGRhdGFBcnJheVsrK2luZGV4XSwgdHJ1ZSk7XG4gICAgICAvLyBkaXN0YW5jZVxuICAgICAgY29kZSA9IGRhdGFBcnJheVsrK2luZGV4XTtcbiAgICAgIHN0cmVhbS53cml0ZUJpdHMoZGlzdENvZGVzW2NvZGVdLCBkaXN0TGVuZ3Roc1tjb2RlXSwgdHJ1ZSk7XG4gICAgICAvLyBkaXN0YW5jZSBleHRyYVxuICAgICAgc3RyZWFtLndyaXRlQml0cyhkYXRhQXJyYXlbKytpbmRleF0sIGRhdGFBcnJheVsrK2luZGV4XSwgdHJ1ZSk7XG4gICAgLy8g57WC56uvXG4gICAgfSBlbHNlIGlmIChsaXRlcmFsID09PSAyNTYpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHJlYW07XG59O1xuXG4vKipcbiAqIOWbuuWumuODj+ODleODnuODs+espuWPt+WMllxuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQxNkFycmF5KX0gZGF0YUFycmF5IExaNzcg56ym5Y+35YyW5riI44G/IGJ5dGUgYXJyYXkuXG4gKiBAcGFyYW0geyFabGliLkJpdFN0cmVhbX0gc3RyZWFtIOabuOOBjei+vOOBv+eUqOODk+ODg+ODiOOCueODiOODquODvOODoC5cbiAqIEByZXR1cm4geyFabGliLkJpdFN0cmVhbX0g44OP44OV44Oe44Oz56ym5Y+35YyW5riI44G/44OT44OD44OI44K544OI44Oq44O844Og44Kq44OW44K444Kn44Kv44OILlxuICovXG5abGliLlJhd0RlZmxhdGUucHJvdG90eXBlLmZpeGVkSHVmZm1hbiA9IGZ1bmN0aW9uKGRhdGFBcnJheSwgc3RyZWFtKSB7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgaW5kZXg7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgbGVuZ3RoO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGxpdGVyYWw7XG5cbiAgLy8g56ym5Y+344KSIEJpdFN0cmVhbSDjgavmm7jjgY3ovrzjgpPjgafjgYTjgY9cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGRhdGFBcnJheS5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgbGl0ZXJhbCA9IGRhdGFBcnJheVtpbmRleF07XG5cbiAgICAvLyDnrKblj7fjga7mm7jjgY3ovrzjgb9cbiAgICBabGliLkJpdFN0cmVhbS5wcm90b3R5cGUud3JpdGVCaXRzLmFwcGx5KFxuICAgICAgc3RyZWFtLFxuICAgICAgWmxpYi5SYXdEZWZsYXRlLkZpeGVkSHVmZm1hblRhYmxlW2xpdGVyYWxdXG4gICAgKTtcblxuICAgIC8vIOmVt+OBleODu+i3nembouespuWPt1xuICAgIGlmIChsaXRlcmFsID4gMHgxMDApIHtcbiAgICAgIC8vIGxlbmd0aCBleHRyYVxuICAgICAgc3RyZWFtLndyaXRlQml0cyhkYXRhQXJyYXlbKytpbmRleF0sIGRhdGFBcnJheVsrK2luZGV4XSwgdHJ1ZSk7XG4gICAgICAvLyBkaXN0YW5jZVxuICAgICAgc3RyZWFtLndyaXRlQml0cyhkYXRhQXJyYXlbKytpbmRleF0sIDUpO1xuICAgICAgLy8gZGlzdGFuY2UgZXh0cmFcbiAgICAgIHN0cmVhbS53cml0ZUJpdHMoZGF0YUFycmF5WysraW5kZXhdLCBkYXRhQXJyYXlbKytpbmRleF0sIHRydWUpO1xuICAgIC8vIOe1guerr1xuICAgIH0gZWxzZSBpZiAobGl0ZXJhbCA9PT0gMHgxMDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHJlYW07XG59O1xuXG4vKipcbiAqIOODnuODg+ODgeaDheWgsVxuICogQHBhcmFtIHshbnVtYmVyfSBsZW5ndGgg44Oe44OD44OB44GX44Gf6ZW344GVLlxuICogQHBhcmFtIHshbnVtYmVyfSBiYWNrd2FyZERpc3RhbmNlIOODnuODg+ODgeS9jee9ruOBqOOBrui3nemboi5cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5abGliLlJhd0RlZmxhdGUuTHo3N01hdGNoID0gZnVuY3Rpb24obGVuZ3RoLCBiYWNrd2FyZERpc3RhbmNlKSB7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBtYXRjaCBsZW5ndGguICovXG4gIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xuICAvKiogQHR5cGUge251bWJlcn0gYmFja3dhcmQgZGlzdGFuY2UuICovXG4gIHRoaXMuYmFja3dhcmREaXN0YW5jZSA9IGJhY2t3YXJkRGlzdGFuY2U7XG59O1xuXG4vKipcbiAqIOmVt+OBleespuWPt+ODhuODvOODluODqy5cbiAqIFvjgrPjg7zjg4ksIOaLoeW8teODk+ODg+ODiCwg5ouh5by144OT44OD44OI6ZW3XSDjga7phY3liJfjgajjgarjgaPjgabjgYTjgosuXG4gKiBAY29uc3RcbiAqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQzMkFycmF5KX1cbiAqL1xuWmxpYi5SYXdEZWZsYXRlLkx6NzdNYXRjaC5MZW5ndGhDb2RlVGFibGUgPSAoZnVuY3Rpb24odGFibGUpIHtcbiAgcmV0dXJuIFVTRV9UWVBFREFSUkFZID8gbmV3IFVpbnQzMkFycmF5KHRhYmxlKSA6IHRhYmxlO1xufSkoKGZ1bmN0aW9uKCkge1xuICAvKiogQHR5cGUgeyFBcnJheX0gKi9cbiAgdmFyIHRhYmxlID0gW107XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgaTtcbiAgLyoqIEB0eXBlIHshQXJyYXkuPG51bWJlcj59ICovXG4gIHZhciBjO1xuXG4gIGZvciAoaSA9IDM7IGkgPD0gMjU4OyBpKyspIHtcbiAgICBjID0gY29kZShpKTtcbiAgICB0YWJsZVtpXSA9IChjWzJdIDw8IDI0KSB8IChjWzFdIDw8IDE2KSB8IGNbMF07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCBsejc3IGxlbmd0aC5cbiAgICogQHJldHVybiB7IUFycmF5LjxudW1iZXI+fSBsejc3IGNvZGVzLlxuICAgKi9cbiAgZnVuY3Rpb24gY29kZShsZW5ndGgpIHtcbiAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgKGxlbmd0aCA9PT0gMyk6IHJldHVybiBbMjU3LCBsZW5ndGggLSAzLCAwXTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPT09IDQpOiByZXR1cm4gWzI1OCwgbGVuZ3RoIC0gNCwgMF07IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoID09PSA1KTogcmV0dXJuIFsyNTksIGxlbmd0aCAtIDUsIDBdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA9PT0gNik6IHJldHVybiBbMjYwLCBsZW5ndGggLSA2LCAwXTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPT09IDcpOiByZXR1cm4gWzI2MSwgbGVuZ3RoIC0gNywgMF07IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoID09PSA4KTogcmV0dXJuIFsyNjIsIGxlbmd0aCAtIDgsIDBdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA9PT0gOSk6IHJldHVybiBbMjYzLCBsZW5ndGggLSA5LCAwXTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPT09IDEwKTogcmV0dXJuIFsyNjQsIGxlbmd0aCAtIDEwLCAwXTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPD0gMTIpOiByZXR1cm4gWzI2NSwgbGVuZ3RoIC0gMTEsIDFdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA8PSAxNCk6IHJldHVybiBbMjY2LCBsZW5ndGggLSAxMywgMV07IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoIDw9IDE2KTogcmV0dXJuIFsyNjcsIGxlbmd0aCAtIDE1LCAxXTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPD0gMTgpOiByZXR1cm4gWzI2OCwgbGVuZ3RoIC0gMTcsIDFdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA8PSAyMik6IHJldHVybiBbMjY5LCBsZW5ndGggLSAxOSwgMl07IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoIDw9IDI2KTogcmV0dXJuIFsyNzAsIGxlbmd0aCAtIDIzLCAyXTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPD0gMzApOiByZXR1cm4gWzI3MSwgbGVuZ3RoIC0gMjcsIDJdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA8PSAzNCk6IHJldHVybiBbMjcyLCBsZW5ndGggLSAzMSwgMl07IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoIDw9IDQyKTogcmV0dXJuIFsyNzMsIGxlbmd0aCAtIDM1LCAzXTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPD0gNTApOiByZXR1cm4gWzI3NCwgbGVuZ3RoIC0gNDMsIDNdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA8PSA1OCk6IHJldHVybiBbMjc1LCBsZW5ndGggLSA1MSwgM107IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoIDw9IDY2KTogcmV0dXJuIFsyNzYsIGxlbmd0aCAtIDU5LCAzXTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPD0gODIpOiByZXR1cm4gWzI3NywgbGVuZ3RoIC0gNjcsIDRdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA8PSA5OCk6IHJldHVybiBbMjc4LCBsZW5ndGggLSA4MywgNF07IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoIDw9IDExNCk6IHJldHVybiBbMjc5LCBsZW5ndGggLSA5OSwgNF07IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoIDw9IDEzMCk6IHJldHVybiBbMjgwLCBsZW5ndGggLSAxMTUsIDRdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA8PSAxNjIpOiByZXR1cm4gWzI4MSwgbGVuZ3RoIC0gMTMxLCA1XTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPD0gMTk0KTogcmV0dXJuIFsyODIsIGxlbmd0aCAtIDE2MywgNV07IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoIDw9IDIyNik6IHJldHVybiBbMjgzLCBsZW5ndGggLSAxOTUsIDVdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA8PSAyNTcpOiByZXR1cm4gWzI4NCwgbGVuZ3RoIC0gMjI3LCA1XTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPT09IDI1OCk6IHJldHVybiBbMjg1LCBsZW5ndGggLSAyNTgsIDBdOyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHRocm93ICdpbnZhbGlkIGxlbmd0aDogJyArIGxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFibGU7XG59KSgpKTtcblxuLyoqXG4gKiDot53pm6LnrKblj7fjg4bjg7zjg5bjg6tcbiAqIEBwYXJhbSB7IW51bWJlcn0gZGlzdCDot53pm6IuXG4gKiBAcmV0dXJuIHshQXJyYXkuPG51bWJlcj59IOOCs+ODvOODieOAgeaLoeW8teODk+ODg+ODiOOAgeaLoeW8teODk+ODg+ODiOmVt+OBrumFjeWIly5cbiAqIEBwcml2YXRlXG4gKi9cblpsaWIuUmF3RGVmbGF0ZS5Mejc3TWF0Y2gucHJvdG90eXBlLmdldERpc3RhbmNlQ29kZV8gPSBmdW5jdGlvbihkaXN0KSB7XG4gIC8qKiBAdHlwZSB7IUFycmF5LjxudW1iZXI+fSBkaXN0YW5jZSBjb2RlIHRhYmxlLiAqL1xuICB2YXIgcjtcblxuICBzd2l0Y2ggKHRydWUpIHtcbiAgICBjYXNlIChkaXN0ID09PSAxKTogciA9IFswLCBkaXN0IC0gMSwgMF07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPT09IDIpOiByID0gWzEsIGRpc3QgLSAyLCAwXTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA9PT0gMyk6IHIgPSBbMiwgZGlzdCAtIDMsIDBdOyBicmVhaztcbiAgICBjYXNlIChkaXN0ID09PSA0KTogciA9IFszLCBkaXN0IC0gNCwgMF07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gNik6IHIgPSBbNCwgZGlzdCAtIDUsIDFdOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDgpOiByID0gWzUsIGRpc3QgLSA3LCAxXTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA8PSAxMik6IHIgPSBbNiwgZGlzdCAtIDksIDJdOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDE2KTogciA9IFs3LCBkaXN0IC0gMTMsIDJdOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDI0KTogciA9IFs4LCBkaXN0IC0gMTcsIDNdOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDMyKTogciA9IFs5LCBkaXN0IC0gMjUsIDNdOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDQ4KTogciA9IFsxMCwgZGlzdCAtIDMzLCA0XTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA8PSA2NCk6IHIgPSBbMTEsIGRpc3QgLSA0OSwgNF07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gOTYpOiByID0gWzEyLCBkaXN0IC0gNjUsIDVdOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDEyOCk6IHIgPSBbMTMsIGRpc3QgLSA5NywgNV07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gMTkyKTogciA9IFsxNCwgZGlzdCAtIDEyOSwgNl07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gMjU2KTogciA9IFsxNSwgZGlzdCAtIDE5MywgNl07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gMzg0KTogciA9IFsxNiwgZGlzdCAtIDI1NywgN107IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gNTEyKTogciA9IFsxNywgZGlzdCAtIDM4NSwgN107IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gNzY4KTogciA9IFsxOCwgZGlzdCAtIDUxMywgOF07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gMTAyNCk6IHIgPSBbMTksIGRpc3QgLSA3NjksIDhdOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDE1MzYpOiByID0gWzIwLCBkaXN0IC0gMTAyNSwgOV07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gMjA0OCk6IHIgPSBbMjEsIGRpc3QgLSAxNTM3LCA5XTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA8PSAzMDcyKTogciA9IFsyMiwgZGlzdCAtIDIwNDksIDEwXTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA8PSA0MDk2KTogciA9IFsyMywgZGlzdCAtIDMwNzMsIDEwXTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA8PSA2MTQ0KTogciA9IFsyNCwgZGlzdCAtIDQwOTcsIDExXTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA8PSA4MTkyKTogciA9IFsyNSwgZGlzdCAtIDYxNDUsIDExXTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA8PSAxMjI4OCk6IHIgPSBbMjYsIGRpc3QgLSA4MTkzLCAxMl07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gMTYzODQpOiByID0gWzI3LCBkaXN0IC0gMTIyODksIDEyXTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA8PSAyNDU3Nik6IHIgPSBbMjgsIGRpc3QgLSAxNjM4NSwgMTNdOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDMyNzY4KTogciA9IFsyOSwgZGlzdCAtIDI0NTc3LCAxM107IGJyZWFrO1xuICAgIGRlZmF1bHQ6IHRocm93ICdpbnZhbGlkIGRpc3RhbmNlJztcbiAgfVxuXG4gIHJldHVybiByO1xufTtcblxuLyoqXG4gKiDjg57jg4Pjg4Hmg4XloLHjgpIgTFo3NyDnrKblj7fljJbphY3liJfjgafov5TjgZkuXG4gKiDjgarjgYrjgIHjgZPjgZPjgafjga/ku6XkuIvjga7lhoXpg6jku5Xmp5jjgafnrKblj7fljJbjgZfjgabjgYTjgotcbiAqIFsgQ09ERSwgRVhUUkEtQklULUxFTiwgRVhUUkEsIENPREUsIEVYVFJBLUJJVC1MRU4sIEVYVFJBIF1cbiAqIEByZXR1cm4geyFBcnJheS48bnVtYmVyPn0gTFo3NyDnrKblj7fljJYgYnl0ZSBhcnJheS5cbiAqL1xuWmxpYi5SYXdEZWZsYXRlLkx6NzdNYXRjaC5wcm90b3R5cGUudG9Mejc3QXJyYXkgPSBmdW5jdGlvbigpIHtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBkaXN0ID0gdGhpcy5iYWNrd2FyZERpc3RhbmNlO1xuICAvKiogQHR5cGUge0FycmF5fSAqL1xuICB2YXIgY29kZUFycmF5ID0gW107XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgcG9zID0gMDtcbiAgLyoqIEB0eXBlIHshQXJyYXkuPG51bWJlcj59ICovXG4gIHZhciBjb2RlO1xuXG4gIC8vIGxlbmd0aFxuICBjb2RlID0gWmxpYi5SYXdEZWZsYXRlLkx6NzdNYXRjaC5MZW5ndGhDb2RlVGFibGVbbGVuZ3RoXTtcbiAgY29kZUFycmF5W3BvcysrXSA9IGNvZGUgJiAweGZmZmY7XG4gIGNvZGVBcnJheVtwb3MrK10gPSAoY29kZSA+PiAxNikgJiAweGZmO1xuICBjb2RlQXJyYXlbcG9zKytdID0gY29kZSA+PiAyNDtcblxuICAvLyBkaXN0YW5jZVxuICBjb2RlID0gdGhpcy5nZXREaXN0YW5jZUNvZGVfKGRpc3QpO1xuICBjb2RlQXJyYXlbcG9zKytdID0gY29kZVswXTtcbiAgY29kZUFycmF5W3BvcysrXSA9IGNvZGVbMV07XG4gIGNvZGVBcnJheVtwb3MrK10gPSBjb2RlWzJdO1xuXG4gIHJldHVybiBjb2RlQXJyYXk7XG59O1xuXG4vKipcbiAqIExaNzcg5a6f6KOFXG4gKiBAcGFyYW0geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGRhdGFBcnJheSBMWjc3IOespuWPt+WMluOBmeOCi+ODkOOCpOODiOmFjeWIly5cbiAqIEByZXR1cm4geyEoQXJyYXkuPG51bWJlcj58VWludDE2QXJyYXkpfSBMWjc3IOespuWPt+WMluOBl+OBn+mFjeWIly5cbiAqL1xuWmxpYi5SYXdEZWZsYXRlLnByb3RvdHlwZS5sejc3ID0gZnVuY3Rpb24oZGF0YUFycmF5KSB7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBpbnB1dCBwb3NpdGlvbiAqL1xuICB2YXIgcG9zaXRpb247XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBpbnB1dCBsZW5ndGggKi9cbiAgdmFyIGxlbmd0aDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgY291bnRlciAqL1xuICB2YXIgaTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgbGltaXRlciAqL1xuICB2YXIgaWw7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBjaGFpbmVkLWhhc2gtdGFibGUga2V5ICovXG4gIHZhciBtYXRjaEtleTtcbiAgLyoqIEB0eXBlIHtPYmplY3QuPG51bWJlciwgQXJyYXkuPG51bWJlcj4+fSBjaGFpbmVkLWhhc2gtdGFibGUgKi9cbiAgdmFyIHRhYmxlID0ge307XG4gIC8qKiBAY29uc3QgQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIHdpbmRvd1NpemUgPSBabGliLlJhd0RlZmxhdGUuV2luZG93U2l6ZTtcbiAgLyoqIEB0eXBlIHtBcnJheS48bnVtYmVyPn0gbWF0Y2ggbGlzdCAqL1xuICB2YXIgbWF0Y2hMaXN0O1xuICAvKiogQHR5cGUge1psaWIuUmF3RGVmbGF0ZS5Mejc3TWF0Y2h9IGxvbmdlc3QgbWF0Y2ggKi9cbiAgdmFyIGxvbmdlc3RNYXRjaDtcbiAgLyoqIEB0eXBlIHtabGliLlJhd0RlZmxhdGUuTHo3N01hdGNofSBwcmV2aW91cyBsb25nZXN0IG1hdGNoICovXG4gIHZhciBwcmV2TWF0Y2g7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50MTZBcnJheSl9IGx6NzcgYnVmZmVyICovXG4gIHZhciBsejc3YnVmID0gVVNFX1RZUEVEQVJSQVkgP1xuICAgIG5ldyBVaW50MTZBcnJheShkYXRhQXJyYXkubGVuZ3RoICogMikgOiBbXTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGx6Nzcgb3V0cHV0IGJ1ZmZlciBwb2ludGVyICovXG4gIHZhciBwb3MgPSAwO1xuICAvKiogQHR5cGUge251bWJlcn0gbHo3NyBza2lwIGxlbmd0aCAqL1xuICB2YXIgc2tpcExlbmd0aCA9IDA7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50MzJBcnJheSl9ICovXG4gIHZhciBmcmVxc0xpdExlbiA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50MzJBcnJheSA6IEFycmF5KSgyODYpO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDMyQXJyYXkpfSAqL1xuICB2YXIgZnJlcXNEaXN0ID0gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQzMkFycmF5IDogQXJyYXkpKDMwKTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBsYXp5ID0gdGhpcy5sYXp5O1xuICAvKiogQHR5cGUgeyp9IHRlbXBvcmFyeSB2YXJpYWJsZSAqL1xuICB2YXIgdG1wO1xuXG4gIC8vIOWIneacn+WMllxuICBpZiAoIVVTRV9UWVBFREFSUkFZKSB7XG4gICAgZm9yIChpID0gMDsgaSA8PSAyODU7KSB7IGZyZXFzTGl0TGVuW2krK10gPSAwOyB9XG4gICAgZm9yIChpID0gMDsgaSA8PSAyOTspIHsgZnJlcXNEaXN0W2krK10gPSAwOyB9XG4gIH1cbiAgZnJlcXNMaXRMZW5bMjU2XSA9IDE7IC8vIEVPQiDjga7mnIDkvY7lh7rnj77lm57mlbDjga8gMVxuXG4gIC8qKlxuICAgKiDjg57jg4Pjg4Hjg4fjg7zjgr/jga7mm7jjgY3ovrzjgb9cbiAgICogQHBhcmFtIHtabGliLlJhd0RlZmxhdGUuTHo3N01hdGNofSBtYXRjaCBMWjc3IE1hdGNoIGRhdGEuXG4gICAqIEBwYXJhbSB7IW51bWJlcn0gb2Zmc2V0IOOCueOCreODg+ODl+mWi+Wni+S9jee9rijnm7jlr77mjIflrpopLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gd3JpdGVNYXRjaChtYXRjaCwgb2Zmc2V0KSB7XG4gICAgLyoqIEB0eXBlIHtBcnJheS48bnVtYmVyPn0gKi9cbiAgICB2YXIgbHo3N0FycmF5ID0gbWF0Y2gudG9Mejc3QXJyYXkoKTtcbiAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICB2YXIgaTtcbiAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICB2YXIgaWw7XG5cbiAgICBmb3IgKGkgPSAwLCBpbCA9IGx6NzdBcnJheS5sZW5ndGg7IGkgPCBpbDsgKytpKSB7XG4gICAgICBsejc3YnVmW3BvcysrXSA9IGx6NzdBcnJheVtpXTtcbiAgICB9XG4gICAgZnJlcXNMaXRMZW5bbHo3N0FycmF5WzBdXSsrO1xuICAgIGZyZXFzRGlzdFtsejc3QXJyYXlbM11dKys7XG4gICAgc2tpcExlbmd0aCA9IG1hdGNoLmxlbmd0aCArIG9mZnNldCAtIDE7XG4gICAgcHJldk1hdGNoID0gbnVsbDtcbiAgfVxuXG4gIC8vIExaNzcg56ym5Y+35YyWXG4gIGZvciAocG9zaXRpb24gPSAwLCBsZW5ndGggPSBkYXRhQXJyYXkubGVuZ3RoOyBwb3NpdGlvbiA8IGxlbmd0aDsgKytwb3NpdGlvbikge1xuICAgIC8vIOODj+ODg+OCt+ODpeOCreODvOOBruS9nOaIkFxuICAgIGZvciAobWF0Y2hLZXkgPSAwLCBpID0gMCwgaWwgPSBabGliLlJhd0RlZmxhdGUuTHo3N01pbkxlbmd0aDsgaSA8IGlsOyArK2kpIHtcbiAgICAgIGlmIChwb3NpdGlvbiArIGkgPT09IGxlbmd0aCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG1hdGNoS2V5ID0gKG1hdGNoS2V5IDw8IDgpIHwgZGF0YUFycmF5W3Bvc2l0aW9uICsgaV07XG4gICAgfVxuXG4gICAgLy8g44OG44O844OW44Or44GM5pyq5a6a576p44Gg44Gj44Gf44KJ5L2c5oiQ44GZ44KLXG4gICAgaWYgKHRhYmxlW21hdGNoS2V5XSA9PT0gdm9pZCAwKSB7IHRhYmxlW21hdGNoS2V5XSA9IFtdOyB9XG4gICAgbWF0Y2hMaXN0ID0gdGFibGVbbWF0Y2hLZXldO1xuXG4gICAgLy8gc2tpcFxuICAgIGlmIChza2lwTGVuZ3RoLS0gPiAwKSB7XG4gICAgICBtYXRjaExpc3QucHVzaChwb3NpdGlvbik7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDjg57jg4Pjg4Hjg4bjg7zjg5bjg6vjga7mm7TmlrAgKOacgOWkp+aIu+OCiui3nembouOCkui2heOBiOOBpuOBhOOCi+OCguOBruOCkuWJiumZpOOBmeOCiylcbiAgICB3aGlsZSAobWF0Y2hMaXN0Lmxlbmd0aCA+IDAgJiYgcG9zaXRpb24gLSBtYXRjaExpc3RbMF0gPiB3aW5kb3dTaXplKSB7XG4gICAgICBtYXRjaExpc3Quc2hpZnQoKTtcbiAgICB9XG5cbiAgICAvLyDjg4fjg7zjgr/mnKvlsL7jgafjg57jg4Pjg4HjgZfjgojjgYbjgYzjgarjgYTloLTlkIjjga/jgZ3jga7jgb7jgb7mtYHjgZfjgZPjgoBcbiAgICBpZiAocG9zaXRpb24gKyBabGliLlJhd0RlZmxhdGUuTHo3N01pbkxlbmd0aCA+PSBsZW5ndGgpIHtcbiAgICAgIGlmIChwcmV2TWF0Y2gpIHtcbiAgICAgICAgd3JpdGVNYXRjaChwcmV2TWF0Y2gsIC0xKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMCwgaWwgPSBsZW5ndGggLSBwb3NpdGlvbjsgaSA8IGlsOyArK2kpIHtcbiAgICAgICAgdG1wID0gZGF0YUFycmF5W3Bvc2l0aW9uICsgaV07XG4gICAgICAgIGx6NzdidWZbcG9zKytdID0gdG1wO1xuICAgICAgICArK2ZyZXFzTGl0TGVuW3RtcF07XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyDjg57jg4Pjg4HlgJnoo5zjgYvjgonmnIDplbfjga7jgoLjga7jgpLmjqLjgZlcbiAgICBpZiAobWF0Y2hMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGxvbmdlc3RNYXRjaCA9IHRoaXMuc2VhcmNoTG9uZ2VzdE1hdGNoXyhkYXRhQXJyYXksIHBvc2l0aW9uLCBtYXRjaExpc3QpO1xuXG4gICAgICBpZiAocHJldk1hdGNoKSB7XG4gICAgICAgIC8vIOePvuWcqOOBruODnuODg+ODgeOBruaWueOBjOWJjeWbnuOBruODnuODg+ODgeOCiOOCiuOCgumVt+OBhFxuICAgICAgICBpZiAocHJldk1hdGNoLmxlbmd0aCA8IGxvbmdlc3RNYXRjaC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyB3cml0ZSBwcmV2aW91cyBsaXRlcmFsXG4gICAgICAgICAgdG1wID0gZGF0YUFycmF5W3Bvc2l0aW9uIC0gMV07XG4gICAgICAgICAgbHo3N2J1Zltwb3MrK10gPSB0bXA7XG4gICAgICAgICAgKytmcmVxc0xpdExlblt0bXBdO1xuXG4gICAgICAgICAgLy8gd3JpdGUgY3VycmVudCBtYXRjaFxuICAgICAgICAgIHdyaXRlTWF0Y2gobG9uZ2VzdE1hdGNoLCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB3cml0ZSBwcmV2aW91cyBtYXRjaFxuICAgICAgICAgIHdyaXRlTWF0Y2gocHJldk1hdGNoLCAtMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobG9uZ2VzdE1hdGNoLmxlbmd0aCA8IGxhenkpIHtcbiAgICAgICAgcHJldk1hdGNoID0gbG9uZ2VzdE1hdGNoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JpdGVNYXRjaChsb25nZXN0TWF0Y2gsIDApO1xuICAgICAgfVxuICAgIC8vIOWJjeWbnuODnuODg+ODgeOBl+OBpuOBhOOBpuS7iuWbnuODnuODg+ODgeOBjOOBquOBi+OBo+OBn+OCieWJjeWbnuOBruOCkuaOoeeUqFxuICAgIH0gZWxzZSBpZiAocHJldk1hdGNoKSB7XG4gICAgICB3cml0ZU1hdGNoKHByZXZNYXRjaCwgLTEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0bXAgPSBkYXRhQXJyYXlbcG9zaXRpb25dO1xuICAgICAgbHo3N2J1Zltwb3MrK10gPSB0bXA7XG4gICAgICArK2ZyZXFzTGl0TGVuW3RtcF07XG4gICAgfVxuXG4gICAgbWF0Y2hMaXN0LnB1c2gocG9zaXRpb24pOyAvLyDjg57jg4Pjg4Hjg4bjg7zjg5bjg6vjgavnj77lnKjjga7kvY3nva7jgpLkv53lrZhcbiAgfVxuXG4gIC8vIOe1guerr+WHpueQhlxuICBsejc3YnVmW3BvcysrXSA9IDI1NjtcbiAgZnJlcXNMaXRMZW5bMjU2XSsrO1xuICB0aGlzLmZyZXFzTGl0TGVuID0gZnJlcXNMaXRMZW47XG4gIHRoaXMuZnJlcXNEaXN0ID0gZnJlcXNEaXN0O1xuXG4gIHJldHVybiAvKiogQHR5cGUgeyEoVWludDE2QXJyYXl8QXJyYXkuPG51bWJlcj4pfSAqLyAoXG4gICAgVVNFX1RZUEVEQVJSQVkgPyAgbHo3N2J1Zi5zdWJhcnJheSgwLCBwb3MpIDogbHo3N2J1ZlxuICApO1xufTtcblxuLyoqXG4gKiDjg57jg4Pjg4HjgZfjgZ/lgJnoo5zjga7kuK3jgYvjgonmnIDplbfkuIDoh7TjgpLmjqLjgZlcbiAqIEBwYXJhbSB7IU9iamVjdH0gZGF0YSBwbGFpbiBkYXRhIGJ5dGUgYXJyYXkuXG4gKiBAcGFyYW0geyFudW1iZXJ9IHBvc2l0aW9uIHBsYWluIGRhdGEgYnl0ZSBhcnJheSBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBtYXRjaExpc3Qg5YCZ6KOc44Go44Gq44KL5L2N572u44Gu6YWN5YiXLlxuICogQHJldHVybiB7IVpsaWIuUmF3RGVmbGF0ZS5Mejc3TWF0Y2h9IOacgOmVt+OBi+OBpOacgOefrei3nembouOBruODnuODg+ODgeOCquODluOCuOOCp+OCr+ODiC5cbiAqIEBwcml2YXRlXG4gKi9cblpsaWIuUmF3RGVmbGF0ZS5wcm90b3R5cGUuc2VhcmNoTG9uZ2VzdE1hdGNoXyA9XG5mdW5jdGlvbihkYXRhLCBwb3NpdGlvbiwgbWF0Y2hMaXN0KSB7XG4gIHZhciBtYXRjaCxcbiAgICAgIGN1cnJlbnRNYXRjaCxcbiAgICAgIG1hdGNoTWF4ID0gMCwgbWF0Y2hMZW5ndGgsXG4gICAgICBpLCBqLCBsLCBkbCA9IGRhdGEubGVuZ3RoO1xuXG4gIC8vIOWAmeijnOOCkuW+jOOCjeOBi+OCiSAxIOOBpOOBmuOBpOe1nuOCiui+vOOCk+OBp+OChuOBj1xuICBwZXJtYXRjaDpcbiAgZm9yIChpID0gMCwgbCA9IG1hdGNoTGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBtYXRjaCA9IG1hdGNoTGlzdFtsIC0gaSAtIDFdO1xuICAgIG1hdGNoTGVuZ3RoID0gWmxpYi5SYXdEZWZsYXRlLkx6NzdNaW5MZW5ndGg7XG5cbiAgICAvLyDliY3lm57jgb7jgafjga7mnIDplbfkuIDoh7TjgpLmnKvlsL7jgYvjgonkuIDoh7TmpJzntKLjgZnjgotcbiAgICBpZiAobWF0Y2hNYXggPiBabGliLlJhd0RlZmxhdGUuTHo3N01pbkxlbmd0aCkge1xuICAgICAgZm9yIChqID0gbWF0Y2hNYXg7IGogPiBabGliLlJhd0RlZmxhdGUuTHo3N01pbkxlbmd0aDsgai0tKSB7XG4gICAgICAgIGlmIChkYXRhW21hdGNoICsgaiAtIDFdICE9PSBkYXRhW3Bvc2l0aW9uICsgaiAtIDFdKSB7XG4gICAgICAgICAgY29udGludWUgcGVybWF0Y2g7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG1hdGNoTGVuZ3RoID0gbWF0Y2hNYXg7XG4gICAgfVxuXG4gICAgLy8g5pyA6ZW35LiA6Ie05o6i57SiXG4gICAgd2hpbGUgKG1hdGNoTGVuZ3RoIDwgWmxpYi5SYXdEZWZsYXRlLkx6NzdNYXhMZW5ndGggJiZcbiAgICAgICAgICAgcG9zaXRpb24gKyBtYXRjaExlbmd0aCA8IGRsICYmXG4gICAgICAgICAgIGRhdGFbbWF0Y2ggKyBtYXRjaExlbmd0aF0gPT09IGRhdGFbcG9zaXRpb24gKyBtYXRjaExlbmd0aF0pIHtcbiAgICAgICsrbWF0Y2hMZW5ndGg7XG4gICAgfVxuXG4gICAgLy8g44Oe44OD44OB6ZW344GM5ZCM44GY5aC05ZCI44Gv5b6M5pa544KS5YSq5YWIXG4gICAgaWYgKG1hdGNoTGVuZ3RoID4gbWF0Y2hNYXgpIHtcbiAgICAgIGN1cnJlbnRNYXRjaCA9IG1hdGNoO1xuICAgICAgbWF0Y2hNYXggPSBtYXRjaExlbmd0aDtcbiAgICB9XG5cbiAgICAvLyDmnIDplbfjgYznorrlrprjgZfjgZ/jgonlvozjga7lh6bnkIbjga/nnIHnlaVcbiAgICBpZiAobWF0Y2hMZW5ndGggPT09IFpsaWIuUmF3RGVmbGF0ZS5Mejc3TWF4TGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFpsaWIuUmF3RGVmbGF0ZS5Mejc3TWF0Y2gobWF0Y2hNYXgsIHBvc2l0aW9uIC0gY3VycmVudE1hdGNoKTtcbn07XG5cbi8qKlxuICogVHJlZS1UcmFuc21pdCBTeW1ib2xzIOOBrueul+WHulxuICogcmVmZXJlbmNlOiBQdVRUWSBEZWZsYXRlIGltcGxlbWVudGF0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gaGxpdCBITElULlxuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBsaXRsZW5MZW5ndGhzIOODquODhuODqeODq+OBqOmVt+OBleespuWPt+OBruespuWPt+mVt+mFjeWIly5cbiAqIEBwYXJhbSB7bnVtYmVyfSBoZGlzdCBIRElTVC5cbiAqIEBwYXJhbSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gZGlzdExlbmd0aHMg6Led6Zui56ym5Y+344Gu56ym5Y+36ZW36YWN5YiXLlxuICogQHJldHVybiB7e1xuICogICBjb2RlczogIShBcnJheS48bnVtYmVyPnxVaW50MzJBcnJheSksXG4gKiAgIGZyZXFzOiAhKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpXG4gKiB9fSBUcmVlLVRyYW5zbWl0IFN5bWJvbHMuXG4gKi9cblpsaWIuUmF3RGVmbGF0ZS5wcm90b3R5cGUuZ2V0VHJlZVN5bWJvbHNfID1cbmZ1bmN0aW9uKGhsaXQsIGxpdGxlbkxlbmd0aHMsIGhkaXN0LCBkaXN0TGVuZ3Rocykge1xuICB2YXIgc3JjID0gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQzMkFycmF5IDogQXJyYXkpKGhsaXQgKyBoZGlzdCksXG4gICAgICBpLCBqLCBydW5MZW5ndGgsIGwsXG4gICAgICByZXN1bHQgPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDMyQXJyYXkgOiBBcnJheSkoMjg2ICsgMzApLFxuICAgICAgblJlc3VsdCxcbiAgICAgIHJwdCxcbiAgICAgIGZyZXFzID0gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkoMTkpO1xuXG4gIGogPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgaGxpdDsgaSsrKSB7XG4gICAgc3JjW2orK10gPSBsaXRsZW5MZW5ndGhzW2ldO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCBoZGlzdDsgaSsrKSB7XG4gICAgc3JjW2orK10gPSBkaXN0TGVuZ3Roc1tpXTtcbiAgfVxuXG4gIC8vIOWIneacn+WMllxuICBpZiAoIVVTRV9UWVBFREFSUkFZKSB7XG4gICAgZm9yIChpID0gMCwgbCA9IGZyZXFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgZnJlcXNbaV0gPSAwO1xuICAgIH1cbiAgfVxuXG4gIC8vIOespuWPt+WMllxuICBuUmVzdWx0ID0gMDtcbiAgZm9yIChpID0gMCwgbCA9IHNyYy5sZW5ndGg7IGkgPCBsOyBpICs9IGopIHtcbiAgICAvLyBSdW4gTGVuZ3RoIEVuY29kaW5nXG4gICAgZm9yIChqID0gMTsgaSArIGogPCBsICYmIHNyY1tpICsgal0gPT09IHNyY1tpXTsgKytqKSB7fVxuXG4gICAgcnVuTGVuZ3RoID0gajtcblxuICAgIGlmIChzcmNbaV0gPT09IDApIHtcbiAgICAgIC8vIDAg44Gu57mw44KK6L+U44GX44GMIDMg5Zue5pyq5rqA44Gq44KJ44Gw44Gd44Gu44G+44G+XG4gICAgICBpZiAocnVuTGVuZ3RoIDwgMykge1xuICAgICAgICB3aGlsZSAocnVuTGVuZ3RoLS0gPiAwKSB7XG4gICAgICAgICAgcmVzdWx0W25SZXN1bHQrK10gPSAwO1xuICAgICAgICAgIGZyZXFzWzBdKys7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdoaWxlIChydW5MZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8g57mw44KK6L+U44GX44Gv5pyA5aSnIDEzOCDjgb7jgafjgarjga7jgafliIfjgoroqbDjgoHjgotcbiAgICAgICAgICBycHQgPSAocnVuTGVuZ3RoIDwgMTM4ID8gcnVuTGVuZ3RoIDogMTM4KTtcblxuICAgICAgICAgIGlmIChycHQgPiBydW5MZW5ndGggLSAzICYmIHJwdCA8IHJ1bkxlbmd0aCkge1xuICAgICAgICAgICAgcnB0ID0gcnVuTGVuZ3RoIC0gMztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyAzLTEwIOWbniAtPiAxN1xuICAgICAgICAgIGlmIChycHQgPD0gMTApIHtcbiAgICAgICAgICAgIHJlc3VsdFtuUmVzdWx0KytdID0gMTc7XG4gICAgICAgICAgICByZXN1bHRbblJlc3VsdCsrXSA9IHJwdCAtIDM7XG4gICAgICAgICAgICBmcmVxc1sxN10rKztcbiAgICAgICAgICAvLyAxMS0xMzgg5ZueIC0+IDE4XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdFtuUmVzdWx0KytdID0gMTg7XG4gICAgICAgICAgICByZXN1bHRbblJlc3VsdCsrXSA9IHJwdCAtIDExO1xuICAgICAgICAgICAgZnJlcXNbMThdKys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcnVuTGVuZ3RoIC09IHJwdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbblJlc3VsdCsrXSA9IHNyY1tpXTtcbiAgICAgIGZyZXFzW3NyY1tpXV0rKztcbiAgICAgIHJ1bkxlbmd0aC0tO1xuXG4gICAgICAvLyDnubDjgorov5TjgZflm57mlbDjgYwz5Zue5pyq5rqA44Gq44KJ44Gw44Op44Oz44Os44Oz44Kw44K556ym5Y+344Gv6KaB44KJ44Gq44GEXG4gICAgICBpZiAocnVuTGVuZ3RoIDwgMykge1xuICAgICAgICB3aGlsZSAocnVuTGVuZ3RoLS0gPiAwKSB7XG4gICAgICAgICAgcmVzdWx0W25SZXN1bHQrK10gPSBzcmNbaV07XG4gICAgICAgICAgZnJlcXNbc3JjW2ldXSsrO1xuICAgICAgICB9XG4gICAgICAvLyAzIOWbnuS7peS4iuOBquOCieOBsOODqeODs+ODrOODs+OCsOOCueespuWPt+WMllxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2hpbGUgKHJ1bkxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyBydW5MZW5ndGjjgpIgMy02IOOBp+WIhuWJslxuICAgICAgICAgIHJwdCA9IChydW5MZW5ndGggPCA2ID8gcnVuTGVuZ3RoIDogNik7XG5cbiAgICAgICAgICBpZiAocnB0ID4gcnVuTGVuZ3RoIC0gMyAmJiBycHQgPCBydW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHJwdCA9IHJ1bkxlbmd0aCAtIDM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0W25SZXN1bHQrK10gPSAxNjtcbiAgICAgICAgICByZXN1bHRbblJlc3VsdCsrXSA9IHJwdCAtIDM7XG4gICAgICAgICAgZnJlcXNbMTZdKys7XG5cbiAgICAgICAgICBydW5MZW5ndGggLT0gcnB0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjb2RlczpcbiAgICAgIFVTRV9UWVBFREFSUkFZID8gcmVzdWx0LnN1YmFycmF5KDAsIG5SZXN1bHQpIDogcmVzdWx0LnNsaWNlKDAsIG5SZXN1bHQpLFxuICAgIGZyZXFzOiBmcmVxc1xuICB9O1xufTtcblxuLyoqXG4gKiDjg4/jg5Xjg57jg7PnrKblj7fjga7plbfjgZXjgpLlj5blvpfjgZnjgotcbiAqIEBwYXJhbSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5fFVpbnQzMkFycmF5KX0gZnJlcXMg5Ye654++44Kr44Km44Oz44OILlxuICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IOespuWPt+mVt+OBruWItumZkC5cbiAqIEByZXR1cm4geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IOespuWPt+mVt+mFjeWIly5cbiAqIEBwcml2YXRlXG4gKi9cblpsaWIuUmF3RGVmbGF0ZS5wcm90b3R5cGUuZ2V0TGVuZ3Roc18gPSBmdW5jdGlvbihmcmVxcywgbGltaXQpIHtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBuU3ltYm9scyA9IGZyZXFzLmxlbmd0aDtcbiAgLyoqIEB0eXBlIHtabGliLkhlYXB9ICovXG4gIHZhciBoZWFwID0gbmV3IFpsaWIuSGVhcCgyICogWmxpYi5SYXdEZWZsYXRlLkhVRk1BWCk7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cbiAgdmFyIGxlbmd0aCA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50OEFycmF5IDogQXJyYXkpKG5TeW1ib2xzKTtcbiAgLyoqIEB0eXBlIHtBcnJheX0gKi9cbiAgdmFyIG5vZGVzO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDMyQXJyYXkpfSAqL1xuICB2YXIgdmFsdWVzO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9ICovXG4gIHZhciBjb2RlTGVuZ3RoO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgaWw7XG5cbiAgLy8g6YWN5YiX44Gu5Yid5pyf5YyWXG4gIGlmICghVVNFX1RZUEVEQVJSQVkpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgblN5bWJvbHM7IGkrKykge1xuICAgICAgbGVuZ3RoW2ldID0gMDtcbiAgICB9XG4gIH1cblxuICAvLyDjg5Ljg7zjg5fjga7mp4vnr4lcbiAgZm9yIChpID0gMDsgaSA8IG5TeW1ib2xzOyArK2kpIHtcbiAgICBpZiAoZnJlcXNbaV0gPiAwKSB7XG4gICAgICBoZWFwLnB1c2goaSwgZnJlcXNbaV0pO1xuICAgIH1cbiAgfVxuICBub2RlcyA9IG5ldyBBcnJheShoZWFwLmxlbmd0aCAvIDIpO1xuICB2YWx1ZXMgPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDMyQXJyYXkgOiBBcnJheSkoaGVhcC5sZW5ndGggLyAyKTtcblxuICAvLyDpnZ4gMCDjga7opoHntKDjgYzkuIDjgaTjgaDjgZHjgaDjgaPjgZ/loLTlkIjjga/jgIHjgZ3jga7jgrfjg7Pjg5zjg6vjgavnrKblj7fplbcgMSDjgpLlibLjgorlvZPjgabjgabntYLkuoZcbiAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgIGxlbmd0aFtoZWFwLnBvcCgpLmluZGV4XSA9IDE7XG4gICAgcmV0dXJuIGxlbmd0aDtcbiAgfVxuXG4gIC8vIFJldmVyc2UgUGFja2FnZSBNZXJnZSBBbGdvcml0aG0g44Gr44KI44KLIENhbm9uaWNhbCBIdWZmbWFuIENvZGUg44Gu56ym5Y+36ZW35rG65a6aXG4gIGZvciAoaSA9IDAsIGlsID0gaGVhcC5sZW5ndGggLyAyOyBpIDwgaWw7ICsraSkge1xuICAgIG5vZGVzW2ldID0gaGVhcC5wb3AoKTtcbiAgICB2YWx1ZXNbaV0gPSBub2Rlc1tpXS52YWx1ZTtcbiAgfVxuICBjb2RlTGVuZ3RoID0gdGhpcy5yZXZlcnNlUGFja2FnZU1lcmdlXyh2YWx1ZXMsIHZhbHVlcy5sZW5ndGgsIGxpbWl0KTtcblxuICBmb3IgKGkgPSAwLCBpbCA9IG5vZGVzLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcbiAgICBsZW5ndGhbbm9kZXNbaV0uaW5kZXhdID0gY29kZUxlbmd0aFtpXTtcbiAgfVxuXG4gIHJldHVybiBsZW5ndGg7XG59O1xuXG4vKipcbiAqIFJldmVyc2UgUGFja2FnZSBNZXJnZSBBbGdvcml0aG0uXG4gKiBAcGFyYW0geyEoQXJyYXkuPG51bWJlcj58VWludDMyQXJyYXkpfSBmcmVxcyBzb3J0ZWQgcHJvYmFiaWxpdHkuXG4gKiBAcGFyYW0ge251bWJlcn0gc3ltYm9scyBudW1iZXIgb2Ygc3ltYm9scy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCBjb2RlIGxlbmd0aCBsaW1pdC5cbiAqIEByZXR1cm4geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGNvZGUgbGVuZ3Rocy5cbiAqL1xuWmxpYi5SYXdEZWZsYXRlLnByb3RvdHlwZS5yZXZlcnNlUGFja2FnZU1lcmdlXyA9IGZ1bmN0aW9uKGZyZXFzLCBzeW1ib2xzLCBsaW1pdCkge1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDE2QXJyYXkpfSAqL1xuICB2YXIgbWluaW11bUNvc3QgPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDE2QXJyYXkgOiBBcnJheSkobGltaXQpO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9ICovXG4gIHZhciBmbGFnID0gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkobGltaXQpO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9ICovXG4gIHZhciBjb2RlTGVuZ3RoID0gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkoc3ltYm9scyk7XG4gIC8qKiBAdHlwZSB7QXJyYXl9ICovXG4gIHZhciB2YWx1ZSA9IG5ldyBBcnJheShsaW1pdCk7XG4gIC8qKiBAdHlwZSB7QXJyYXl9ICovXG4gIHZhciB0eXBlICA9IG5ldyBBcnJheShsaW1pdCk7XG4gIC8qKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59ICovXG4gIHZhciBjdXJyZW50UG9zaXRpb24gPSBuZXcgQXJyYXkobGltaXQpO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGV4Y2VzcyA9ICgxIDw8IGxpbWl0KSAtIHN5bWJvbHM7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgaGFsZiA9ICgxIDw8IChsaW1pdCAtIDEpKTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBpO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGo7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgdDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciB3ZWlnaHQ7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgbmV4dDtcblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGpcbiAgICovXG4gIGZ1bmN0aW9uIHRha2VQYWNrYWdlKGopIHtcbiAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICB2YXIgeCA9IHR5cGVbal1bY3VycmVudFBvc2l0aW9uW2pdXTtcblxuICAgIGlmICh4ID09PSBzeW1ib2xzKSB7XG4gICAgICB0YWtlUGFja2FnZShqKzEpO1xuICAgICAgdGFrZVBhY2thZ2UoaisxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLS1jb2RlTGVuZ3RoW3hdO1xuICAgIH1cblxuICAgICsrY3VycmVudFBvc2l0aW9uW2pdO1xuICB9XG5cbiAgbWluaW11bUNvc3RbbGltaXQtMV0gPSBzeW1ib2xzO1xuXG4gIGZvciAoaiA9IDA7IGogPCBsaW1pdDsgKytqKSB7XG4gICAgaWYgKGV4Y2VzcyA8IGhhbGYpIHtcbiAgICAgIGZsYWdbal0gPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBmbGFnW2pdID0gMTtcbiAgICAgIGV4Y2VzcyAtPSBoYWxmO1xuICAgIH1cbiAgICBleGNlc3MgPDw9IDE7XG4gICAgbWluaW11bUNvc3RbbGltaXQtMi1qXSA9IChtaW5pbXVtQ29zdFtsaW1pdC0xLWpdIC8gMiB8IDApICsgc3ltYm9scztcbiAgfVxuICBtaW5pbXVtQ29zdFswXSA9IGZsYWdbMF07XG5cbiAgdmFsdWVbMF0gPSBuZXcgQXJyYXkobWluaW11bUNvc3RbMF0pO1xuICB0eXBlWzBdICA9IG5ldyBBcnJheShtaW5pbXVtQ29zdFswXSk7XG4gIGZvciAoaiA9IDE7IGogPCBsaW1pdDsgKytqKSB7XG4gICAgaWYgKG1pbmltdW1Db3N0W2pdID4gMiAqIG1pbmltdW1Db3N0W2otMV0gKyBmbGFnW2pdKSB7XG4gICAgICBtaW5pbXVtQ29zdFtqXSA9IDIgKiBtaW5pbXVtQ29zdFtqLTFdICsgZmxhZ1tqXTtcbiAgICB9XG4gICAgdmFsdWVbal0gPSBuZXcgQXJyYXkobWluaW11bUNvc3Rbal0pO1xuICAgIHR5cGVbal0gID0gbmV3IEFycmF5KG1pbmltdW1Db3N0W2pdKTtcbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBzeW1ib2xzOyArK2kpIHtcbiAgICBjb2RlTGVuZ3RoW2ldID0gbGltaXQ7XG4gIH1cblxuICBmb3IgKHQgPSAwOyB0IDwgbWluaW11bUNvc3RbbGltaXQtMV07ICsrdCkge1xuICAgIHZhbHVlW2xpbWl0LTFdW3RdID0gZnJlcXNbdF07XG4gICAgdHlwZVtsaW1pdC0xXVt0XSAgPSB0O1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IGxpbWl0OyArK2kpIHtcbiAgICBjdXJyZW50UG9zaXRpb25baV0gPSAwO1xuICB9XG4gIGlmIChmbGFnW2xpbWl0LTFdID09PSAxKSB7XG4gICAgLS1jb2RlTGVuZ3RoWzBdO1xuICAgICsrY3VycmVudFBvc2l0aW9uW2xpbWl0LTFdO1xuICB9XG5cbiAgZm9yIChqID0gbGltaXQtMjsgaiA+PSAwOyAtLWopIHtcbiAgICBpID0gMDtcbiAgICB3ZWlnaHQgPSAwO1xuICAgIG5leHQgPSBjdXJyZW50UG9zaXRpb25baisxXTtcblxuICAgIGZvciAodCA9IDA7IHQgPCBtaW5pbXVtQ29zdFtqXTsgdCsrKSB7XG4gICAgICB3ZWlnaHQgPSB2YWx1ZVtqKzFdW25leHRdICsgdmFsdWVbaisxXVtuZXh0KzFdO1xuXG4gICAgICBpZiAod2VpZ2h0ID4gZnJlcXNbaV0pIHtcbiAgICAgICAgdmFsdWVbal1bdF0gPSB3ZWlnaHQ7XG4gICAgICAgIHR5cGVbal1bdF0gPSBzeW1ib2xzO1xuICAgICAgICBuZXh0ICs9IDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZVtqXVt0XSA9IGZyZXFzW2ldO1xuICAgICAgICB0eXBlW2pdW3RdID0gaTtcbiAgICAgICAgKytpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN1cnJlbnRQb3NpdGlvbltqXSA9IDA7XG4gICAgaWYgKGZsYWdbal0gPT09IDEpIHtcbiAgICAgIHRha2VQYWNrYWdlKGopO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb2RlTGVuZ3RoO1xufTtcblxuLyoqXG4gKiDnrKblj7fplbfphY3liJfjgYvjgonjg4/jg5Xjg57jg7PnrKblj7fjgpLlj5blvpfjgZnjgotcbiAqIHJlZmVyZW5jZTogUHVUVFkgRGVmbGF0ZSBpbXBsZW1lbnRhdGlvblxuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBsZW5ndGhzIOespuWPt+mVt+mFjeWIly5cbiAqIEByZXR1cm4geyEoQXJyYXkuPG51bWJlcj58VWludDE2QXJyYXkpfSDjg4/jg5Xjg57jg7PnrKblj7fphY3liJcuXG4gKiBAcHJpdmF0ZVxuICovXG5abGliLlJhd0RlZmxhdGUucHJvdG90eXBlLmdldENvZGVzRnJvbUxlbmd0aHNfID0gZnVuY3Rpb24obGVuZ3Rocykge1xuICB2YXIgY29kZXMgPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDE2QXJyYXkgOiBBcnJheSkobGVuZ3Rocy5sZW5ndGgpLFxuICAgICAgY291bnQgPSBbXSxcbiAgICAgIHN0YXJ0Q29kZSA9IFtdLFxuICAgICAgY29kZSA9IDAsIGksIGlsLCBqLCBtO1xuXG4gIC8vIENvdW50IHRoZSBjb2RlcyBvZiBlYWNoIGxlbmd0aC5cbiAgZm9yIChpID0gMCwgaWwgPSBsZW5ndGhzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcbiAgICBjb3VudFtsZW5ndGhzW2ldXSA9IChjb3VudFtsZW5ndGhzW2ldXSB8IDApICsgMTtcbiAgfVxuXG4gIC8vIERldGVybWluZSB0aGUgc3RhcnRpbmcgY29kZSBmb3IgZWFjaCBsZW5ndGggYmxvY2suXG4gIGZvciAoaSA9IDEsIGlsID0gWmxpYi5SYXdEZWZsYXRlLk1heENvZGVMZW5ndGg7IGkgPD0gaWw7IGkrKykge1xuICAgIHN0YXJ0Q29kZVtpXSA9IGNvZGU7XG4gICAgY29kZSArPSBjb3VudFtpXSB8IDA7XG4gICAgY29kZSA8PD0gMTtcbiAgfVxuXG4gIC8vIERldGVybWluZSB0aGUgY29kZSBmb3IgZWFjaCBzeW1ib2wuIE1pcnJvcmVkLCBvZiBjb3Vyc2UuXG4gIGZvciAoaSA9IDAsIGlsID0gbGVuZ3Rocy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG4gICAgY29kZSA9IHN0YXJ0Q29kZVtsZW5ndGhzW2ldXTtcbiAgICBzdGFydENvZGVbbGVuZ3Roc1tpXV0gKz0gMTtcbiAgICBjb2Rlc1tpXSA9IDA7XG5cbiAgICBmb3IgKGogPSAwLCBtID0gbGVuZ3Roc1tpXTsgaiA8IG07IGorKykge1xuICAgICAgY29kZXNbaV0gPSAoY29kZXNbaV0gPDwgMSkgfCAoY29kZSAmIDEpO1xuICAgICAgY29kZSA+Pj49IDE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvZGVzO1xufTtcblxuLy8gZW5kIG9mIHNjb3BlXG59KTtcblxuLyogdmltOnNldCBleHBhbmR0YWIgdHM9MiBzdz0yIHR3PTgwOiAqL1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEdaSVAgKFJGQzE5NTIpIOWun+ijhS5cbiAqL1xuZ29vZy5wcm92aWRlKCdabGliLkd6aXAnKTtcblxuZ29vZy5yZXF1aXJlKCdVU0VfVFlQRURBUlJBWScpO1xuZ29vZy5yZXF1aXJlKCdabGliLkNSQzMyJyk7XG5nb29nLnJlcXVpcmUoJ1psaWIuUmF3RGVmbGF0ZScpO1xuXG5nb29nLnNjb3BlKGZ1bmN0aW9uKCkge1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHshKEFycmF5fFVpbnQ4QXJyYXkpfSBpbnB1dCBpbnB1dCBidWZmZXIuXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF9wYXJhbXMgb3B0aW9uIHBhcmFtZXRlcnMuXG4gKi9cblpsaWIuR3ppcCA9IGZ1bmN0aW9uKGlucHV0LCBvcHRfcGFyYW1zKSB7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gaW5wdXQgYnVmZmVyLiAqL1xuICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBpbnB1dCBidWZmZXIgcG9pbnRlci4gKi9cbiAgdGhpcy5pcCA9IDA7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gb3V0cHV0IGJ1ZmZlci4gKi9cbiAgdGhpcy5vdXRwdXQ7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBvdXRwdXQgYnVmZmVyLiAqL1xuICB0aGlzLm9wID0gMDtcbiAgLyoqIEB0eXBlIHshT2JqZWN0fSBmbGFncyBvcHRpb24gZmxhZ3MuICovXG4gIHRoaXMuZmxhZ3MgPSB7fTtcbiAgLyoqIEB0eXBlIHshc3RyaW5nfSBmaWxlbmFtZS4gKi9cbiAgdGhpcy5maWxlbmFtZTtcbiAgLyoqIEB0eXBlIHshc3RyaW5nfSBjb21tZW50LiAqL1xuICB0aGlzLmNvbW1lbnQ7XG4gIC8qKiBAdHlwZSB7IU9iamVjdH0gZGVmbGF0ZSBvcHRpb25zLiAqL1xuICB0aGlzLmRlZmxhdGVPcHRpb25zO1xuXG4gIC8vIG9wdGlvbiBwYXJhbWV0ZXJzXG4gIGlmIChvcHRfcGFyYW1zKSB7XG4gICAgaWYgKG9wdF9wYXJhbXNbJ2ZsYWdzJ10pIHtcbiAgICAgIHRoaXMuZmxhZ3MgPSBvcHRfcGFyYW1zWydmbGFncyddO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdF9wYXJhbXNbJ2ZpbGVuYW1lJ10gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmZpbGVuYW1lID0gb3B0X3BhcmFtc1snZmlsZW5hbWUnXTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRfcGFyYW1zWydjb21tZW50J10gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmNvbW1lbnQgPSBvcHRfcGFyYW1zWydjb21tZW50J107XG4gICAgfVxuICAgIGlmIChvcHRfcGFyYW1zWydkZWZsYXRlT3B0aW9ucyddKSB7XG4gICAgICB0aGlzLmRlZmxhdGVPcHRpb25zID0gb3B0X3BhcmFtc1snZGVmbGF0ZU9wdGlvbnMnXTtcbiAgICB9XG4gIH1cblxuICBpZiAoIXRoaXMuZGVmbGF0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZmxhdGVPcHRpb25zID0ge307XG4gIH1cbn07XG5cbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqIEBjb25zdFxuICovXG5abGliLkd6aXAuRGVmYXVsdEJ1ZmZlclNpemUgPSAweDgwMDA7XG5cbi8qKlxuICogZW5jb2RlIGd6aXAgbWVtYmVycy5cbiAqIEByZXR1cm4geyEoQXJyYXl8VWludDhBcnJheSl9IGd6aXAgYmluYXJ5IGFycmF5LlxuICovXG5abGliLkd6aXAucHJvdG90eXBlLmNvbXByZXNzID0gZnVuY3Rpb24oKSB7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBmbGFncy4gKi9cbiAgdmFyIGZsZztcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG1vZGlmaWNhdGlvbiB0aW1lLiAqL1xuICB2YXIgbXRpbWU7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBDUkMtMTYgdmFsdWUgZm9yIEZIQ1JDIGZsYWcuICovXG4gIHZhciBjcmMxNjtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IENSQy0zMiB2YWx1ZSBmb3IgdmVyaWZpY2F0aW9uLiAqL1xuICB2YXIgY3JjMzI7XG4gIC8qKiBAdHlwZSB7IVpsaWIuUmF3RGVmbGF0ZX0gcmF3IGRlZmxhdGUgb2JqZWN0LiAqL1xuICB2YXIgcmF3ZGVmbGF0ZTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGNoYXJhY3RlciBjb2RlICovXG4gIHZhciBjO1xuICAvKiogQHR5cGUge251bWJlcn0gbG9vcCBjb3VudGVyLiAqL1xuICB2YXIgaTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgbGltaXRlci4gKi9cbiAgdmFyIGlsO1xuICAvKiogQHR5cGUgeyEoQXJyYXl8VWludDhBcnJheSl9IG91dHB1dCBidWZmZXIuICovXG4gIHZhciBvdXRwdXQgPVxuICAgIG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50OEFycmF5IDogQXJyYXkpKFpsaWIuR3ppcC5EZWZhdWx0QnVmZmVyU2l6ZSk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBvdXRwdXQgYnVmZmVyIHBvaW50ZXIuICovXG4gIHZhciBvcCA9IDA7XG5cbiAgdmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcbiAgdmFyIGlwID0gdGhpcy5pcDtcbiAgdmFyIGZpbGVuYW1lID0gdGhpcy5maWxlbmFtZTtcbiAgdmFyIGNvbW1lbnQgPSB0aGlzLmNvbW1lbnQ7XG5cbiAgLy8gY2hlY2sgc2lnbmF0dXJlXG4gIG91dHB1dFtvcCsrXSA9IDB4MWY7XG4gIG91dHB1dFtvcCsrXSA9IDB4OGI7XG5cbiAgLy8gY2hlY2sgY29tcHJlc3Npb24gbWV0aG9kXG4gIG91dHB1dFtvcCsrXSA9IDg7IC8qIFhYWDogdXNlIFpsaWIgY29uc3QgKi9cblxuICAvLyBmbGFnc1xuICBmbGcgPSAwO1xuICBpZiAodGhpcy5mbGFnc1snZm5hbWUnXSkgICAgZmxnIHw9IFpsaWIuR3ppcC5GbGFnc01hc2suRk5BTUU7XG4gIGlmICh0aGlzLmZsYWdzWydmY29tbWVudCddKSBmbGcgfD0gWmxpYi5HemlwLkZsYWdzTWFzay5GQ09NTUVOVDtcbiAgaWYgKHRoaXMuZmxhZ3NbJ2ZoY3JjJ10pICAgIGZsZyB8PSBabGliLkd6aXAuRmxhZ3NNYXNrLkZIQ1JDO1xuICAvLyBYWFg6IEZURVhUXG4gIC8vIFhYWDogRkVYVFJBXG4gIG91dHB1dFtvcCsrXSA9IGZsZztcblxuICAvLyBtb2RpZmljYXRpb24gdGltZVxuICBtdGltZSA9IChEYXRlLm5vdyA/IERhdGUubm93KCkgOiArbmV3IERhdGUoKSkgLyAxMDAwIHwgMDtcbiAgb3V0cHV0W29wKytdID0gbXRpbWUgICAgICAgICYgMHhmZjtcbiAgb3V0cHV0W29wKytdID0gbXRpbWUgPj4+ICA4ICYgMHhmZjtcbiAgb3V0cHV0W29wKytdID0gbXRpbWUgPj4+IDE2ICYgMHhmZjtcbiAgb3V0cHV0W29wKytdID0gbXRpbWUgPj4+IDI0ICYgMHhmZjtcblxuICAvLyBleHRyYSBmbGFnc1xuICBvdXRwdXRbb3ArK10gPSAwO1xuXG4gIC8vIG9wZXJhdGluZyBzeXN0ZW1cbiAgb3V0cHV0W29wKytdID0gWmxpYi5HemlwLk9wZXJhdGluZ1N5c3RlbS5VTktOT1dOO1xuXG4gIC8vIGV4dHJhXG4gIC8qIE5PUCAqL1xuXG4gIC8vIGZuYW1lXG4gIGlmICh0aGlzLmZsYWdzWydmbmFtZSddICE9PSB2b2lkIDApIHtcbiAgICBmb3IgKGkgPSAwLCBpbCA9IGZpbGVuYW1lLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcbiAgICAgIGMgPSBmaWxlbmFtZS5jaGFyQ29kZUF0KGkpO1xuICAgICAgaWYgKGMgPiAweGZmKSB7IG91dHB1dFtvcCsrXSA9IChjID4+PiA4KSAmIDB4ZmY7IH1cbiAgICAgIG91dHB1dFtvcCsrXSA9IGMgJiAweGZmO1xuICAgIH1cbiAgICBvdXRwdXRbb3ArK10gPSAwOyAvLyBudWxsIHRlcm1pbmF0aW9uXG4gIH1cblxuICAvLyBmY29tbWVudFxuICBpZiAodGhpcy5mbGFnc1snY29tbWVudCddKSB7XG4gICAgZm9yIChpID0gMCwgaWwgPSBjb21tZW50Lmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcbiAgICAgIGMgPSBjb21tZW50LmNoYXJDb2RlQXQoaSk7XG4gICAgICBpZiAoYyA+IDB4ZmYpIHsgb3V0cHV0W29wKytdID0gKGMgPj4+IDgpICYgMHhmZjsgfVxuICAgICAgb3V0cHV0W29wKytdID0gYyAmIDB4ZmY7XG4gICAgfVxuICAgIG91dHB1dFtvcCsrXSA9IDA7IC8vIG51bGwgdGVybWluYXRpb25cbiAgfVxuXG4gIC8vIGZoY3JjXG4gIGlmICh0aGlzLmZsYWdzWydmaGNyYyddKSB7XG4gICAgY3JjMTYgPSBabGliLkNSQzMyLmNhbGMob3V0cHV0LCAwLCBvcCkgJiAweGZmZmY7XG4gICAgb3V0cHV0W29wKytdID0gKGNyYzE2ICAgICAgKSAmIDB4ZmY7XG4gICAgb3V0cHV0W29wKytdID0gKGNyYzE2ID4+PiA4KSAmIDB4ZmY7XG4gIH1cblxuICAvLyBhZGQgY29tcHJlc3Mgb3B0aW9uXG4gIHRoaXMuZGVmbGF0ZU9wdGlvbnNbJ291dHB1dEJ1ZmZlciddID0gb3V0cHV0O1xuICB0aGlzLmRlZmxhdGVPcHRpb25zWydvdXRwdXRJbmRleCddID0gb3A7XG5cbiAgLy8gY29tcHJlc3NcbiAgcmF3ZGVmbGF0ZSA9IG5ldyBabGliLlJhd0RlZmxhdGUoaW5wdXQsIHRoaXMuZGVmbGF0ZU9wdGlvbnMpO1xuICBvdXRwdXQgPSByYXdkZWZsYXRlLmNvbXByZXNzKCk7XG4gIG9wID0gcmF3ZGVmbGF0ZS5vcDtcblxuICAvLyBleHBhbmQgYnVmZmVyXG4gIGlmIChVU0VfVFlQRURBUlJBWSkge1xuICAgIGlmIChvcCArIDggPiBvdXRwdXQuYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgIHRoaXMub3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkob3AgKyA4KTtcbiAgICAgIHRoaXMub3V0cHV0LnNldChuZXcgVWludDhBcnJheShvdXRwdXQuYnVmZmVyKSk7XG4gICAgICBvdXRwdXQgPSB0aGlzLm91dHB1dDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkob3V0cHV0LmJ1ZmZlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gY3JjMzJcbiAgY3JjMzIgPSBabGliLkNSQzMyLmNhbGMoaW5wdXQpO1xuICBvdXRwdXRbb3ArK10gPSAoY3JjMzIgICAgICAgKSAmIDB4ZmY7XG4gIG91dHB1dFtvcCsrXSA9IChjcmMzMiA+Pj4gIDgpICYgMHhmZjtcbiAgb3V0cHV0W29wKytdID0gKGNyYzMyID4+PiAxNikgJiAweGZmO1xuICBvdXRwdXRbb3ArK10gPSAoY3JjMzIgPj4+IDI0KSAmIDB4ZmY7XG5cbiAgLy8gaW5wdXQgc2l6ZVxuICBpbCA9IGlucHV0Lmxlbmd0aDtcbiAgb3V0cHV0W29wKytdID0gKGlsICAgICAgICkgJiAweGZmO1xuICBvdXRwdXRbb3ArK10gPSAoaWwgPj4+ICA4KSAmIDB4ZmY7XG4gIG91dHB1dFtvcCsrXSA9IChpbCA+Pj4gMTYpICYgMHhmZjtcbiAgb3V0cHV0W29wKytdID0gKGlsID4+PiAyNCkgJiAweGZmO1xuXG4gIHRoaXMuaXAgPSBpcDtcblxuICBpZiAoVVNFX1RZUEVEQVJSQVkgJiYgb3AgPCBvdXRwdXQubGVuZ3RoKSB7XG4gICAgdGhpcy5vdXRwdXQgPSBvdXRwdXQgPSBvdXRwdXQuc3ViYXJyYXkoMCwgb3ApO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn07XG5cbi8qKiBAZW51bSB7bnVtYmVyfSAqL1xuWmxpYi5HemlwLk9wZXJhdGluZ1N5c3RlbSA9IHtcbiAgRkFUOiAwLFxuICBBTUlHQTogMSxcbiAgVk1TOiAyLFxuICBVTklYOiAzLFxuICBWTV9DTVM6IDQsXG4gIEFUQVJJX1RPUzogNSxcbiAgSFBGUzogNixcbiAgTUFDSU5UT1NIOiA3LFxuICBaX1NZU1RFTTogOCxcbiAgQ1BfTTogOSxcbiAgVE9QU18yMDogMTAsXG4gIE5URlM6IDExLFxuICBRRE9TOiAxMixcbiAgQUNPUk5fUklTQ09TOiAxMyxcbiAgVU5LTk9XTjogMjU1XG59O1xuXG4vKiogQGVudW0ge251bWJlcn0gKi9cblpsaWIuR3ppcC5GbGFnc01hc2sgPSB7XG4gIEZURVhUOiAweDAxLFxuICBGSENSQzogMHgwMixcbiAgRkVYVFJBOiAweDA0LFxuICBGTkFNRTogMHgwOCxcbiAgRkNPTU1FTlQ6IDB4MTBcbn07XG5cbn0pO1xuLyogdmltOnNldCBleHBhbmR0YWIgdHM9MiBzdz0yIHR3PTgwOiAqL1xuIiwiZ29vZy5wcm92aWRlKCdabGliLlJhd0luZmxhdGUnKTtcblxuZ29vZy5yZXF1aXJlKCdVU0VfVFlQRURBUlJBWScpO1xuZ29vZy5yZXF1aXJlKCdabGliLkh1ZmZtYW4nKTtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQGRlZmluZSB7bnVtYmVyfSBidWZmZXIgYmxvY2sgc2l6ZS4gKi9cbnZhciBaTElCX1JBV19JTkZMQVRFX0JVRkZFUl9TSVpFID0gMHg4MDAwOyAvLyBbIDB4ODAwMCA+PSBaTElCX0JVRkZFUl9CTE9DS19TSVpFIF1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5nb29nLnNjb3BlKGZ1bmN0aW9uKCkge1xuXG52YXIgYnVpbGRIdWZmbWFuVGFibGUgPSBabGliLkh1ZmZtYW4uYnVpbGRIdWZmbWFuVGFibGU7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0geyEoVWludDhBcnJheXxBcnJheS48bnVtYmVyPil9IGlucHV0IGlucHV0IGJ1ZmZlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRfcGFyYW1zIG9wdGlvbiBwYXJhbWV0ZXIuXG4gKlxuICogb3B0X3BhcmFtcyDjga/ku6XkuIvjga7jg5fjg63jg5Hjg4bjgqPjgpLmjIflrprjgZnjgovkuovjgYzjgafjgY3jgb7jgZnjgIJcbiAqICAgLSBpbmRleDogaW5wdXQgYnVmZmVyIOOBriBkZWZsYXRlIOOCs+ODs+ODhuODiuOBrumWi+Wni+S9jee9ri5cbiAqICAgLSBibG9ja1NpemU6IOODkOODg+ODleOCoeOBruODluODreODg+OCr+OCteOCpOOCui5cbiAqICAgLSBidWZmZXJUeXBlOiBabGliLlJhd0luZmxhdGUuQnVmZmVyVHlwZSDjga7lgKTjgavjgojjgaPjgabjg5Djg4Pjg5XjgqHjga7nrqHnkIbmlrnms5XjgpLmjIflrprjgZnjgosuXG4gKiAgIC0gcmVzaXplOiDnorrkv53jgZfjgZ/jg5Djg4Pjg5XjgqHjgYzlrp/pmpvjga7lpKfjgY3jgZXjgojjgorlpKfjgY3jgYvjgaPjgZ/loLTlkIjjgavliIfjgoroqbDjgoHjgosuXG4gKi9cblpsaWIuUmF3SW5mbGF0ZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRfcGFyYW1zKSB7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gaW5mbGF0ZWQgYnVmZmVyICovXG4gIHRoaXMuYnVmZmVyO1xuICAvKiogQHR5cGUgeyFBcnJheS48KEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpPn0gKi9cbiAgdGhpcy5ibG9ja3MgPSBbXTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGJsb2NrIHNpemUuICovXG4gIHRoaXMuYnVmZmVyU2l6ZSA9IFpMSUJfUkFXX0lORkxBVEVfQlVGRkVSX1NJWkU7XG4gIC8qKiBAdHlwZSB7IW51bWJlcn0gdG90YWwgb3V0cHV0IGJ1ZmZlciBwb2ludGVyLiAqL1xuICB0aGlzLnRvdGFscG9zID0gMDtcbiAgLyoqIEB0eXBlIHshbnVtYmVyfSBpbnB1dCBidWZmZXIgcG9pbnRlci4gKi9cbiAgdGhpcy5pcCA9IDA7XG4gIC8qKiBAdHlwZSB7IW51bWJlcn0gYml0IHN0cmVhbSByZWFkZXIgYnVmZmVyLiAqL1xuICB0aGlzLmJpdHNidWYgPSAwO1xuICAvKiogQHR5cGUgeyFudW1iZXJ9IGJpdCBzdHJlYW0gcmVhZGVyIGJ1ZmZlciBzaXplLiAqL1xuICB0aGlzLmJpdHNidWZsZW4gPSAwO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGlucHV0IGJ1ZmZlci4gKi9cbiAgdGhpcy5pbnB1dCA9IFVTRV9UWVBFREFSUkFZID8gbmV3IFVpbnQ4QXJyYXkoaW5wdXQpIDogaW5wdXQ7XG4gIC8qKiBAdHlwZSB7IShVaW50OEFycmF5fEFycmF5LjxudW1iZXI+KX0gb3V0cHV0IGJ1ZmZlci4gKi9cbiAgdGhpcy5vdXRwdXQ7XG4gIC8qKiBAdHlwZSB7IW51bWJlcn0gb3V0cHV0IGJ1ZmZlciBwb2ludGVyLiAqL1xuICB0aGlzLm9wO1xuICAvKiogQHR5cGUge2Jvb2xlYW59IGlzIGZpbmFsIGJsb2NrIGZsYWcuICovXG4gIHRoaXMuYmZpbmFsID0gZmFsc2U7XG4gIC8qKiBAdHlwZSB7WmxpYi5SYXdJbmZsYXRlLkJ1ZmZlclR5cGV9IGJ1ZmZlciBtYW5hZ2VtZW50LiAqL1xuICB0aGlzLmJ1ZmZlclR5cGUgPSBabGliLlJhd0luZmxhdGUuQnVmZmVyVHlwZS5BREFQVElWRTtcbiAgLyoqIEB0eXBlIHtib29sZWFufSByZXNpemUgZmxhZyBmb3IgbWVtb3J5IHNpemUgb3B0aW1pemF0aW9uLiAqL1xuICB0aGlzLnJlc2l6ZSA9IGZhbHNlO1xuXG4gIC8vIG9wdGlvbiBwYXJhbWV0ZXJzXG4gIGlmIChvcHRfcGFyYW1zIHx8ICEob3B0X3BhcmFtcyA9IHt9KSkge1xuICAgIGlmIChvcHRfcGFyYW1zWydpbmRleCddKSB7XG4gICAgICB0aGlzLmlwID0gb3B0X3BhcmFtc1snaW5kZXgnXTtcbiAgICB9XG4gICAgaWYgKG9wdF9wYXJhbXNbJ2J1ZmZlclNpemUnXSkge1xuICAgICAgdGhpcy5idWZmZXJTaXplID0gb3B0X3BhcmFtc1snYnVmZmVyU2l6ZSddO1xuICAgIH1cbiAgICBpZiAob3B0X3BhcmFtc1snYnVmZmVyVHlwZSddKSB7XG4gICAgICB0aGlzLmJ1ZmZlclR5cGUgPSBvcHRfcGFyYW1zWydidWZmZXJUeXBlJ107XG4gICAgfVxuICAgIGlmIChvcHRfcGFyYW1zWydyZXNpemUnXSkge1xuICAgICAgdGhpcy5yZXNpemUgPSBvcHRfcGFyYW1zWydyZXNpemUnXTtcbiAgICB9XG4gIH1cblxuICAvLyBpbml0aWFsaXplXG4gIHN3aXRjaCAodGhpcy5idWZmZXJUeXBlKSB7XG4gICAgY2FzZSBabGliLlJhd0luZmxhdGUuQnVmZmVyVHlwZS5CTE9DSzpcbiAgICAgIHRoaXMub3AgPSBabGliLlJhd0luZmxhdGUuTWF4QmFja3dhcmRMZW5ndGg7XG4gICAgICB0aGlzLm91dHB1dCA9XG4gICAgICAgIG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50OEFycmF5IDogQXJyYXkpKFxuICAgICAgICAgIFpsaWIuUmF3SW5mbGF0ZS5NYXhCYWNrd2FyZExlbmd0aCArXG4gICAgICAgICAgdGhpcy5idWZmZXJTaXplICtcbiAgICAgICAgICBabGliLlJhd0luZmxhdGUuTWF4Q29weUxlbmd0aFxuICAgICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBabGliLlJhd0luZmxhdGUuQnVmZmVyVHlwZS5BREFQVElWRTpcbiAgICAgIHRoaXMub3AgPSAwO1xuICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KSh0aGlzLmJ1ZmZlclNpemUpO1xuICAgICAgdGhpcy5leHBhbmRCdWZmZXIgPSB0aGlzLmV4cGFuZEJ1ZmZlckFkYXB0aXZlO1xuICAgICAgdGhpcy5jb25jYXRCdWZmZXIgPSB0aGlzLmNvbmNhdEJ1ZmZlckR5bmFtaWM7XG4gICAgICB0aGlzLmRlY29kZUh1ZmZtYW4gPSB0aGlzLmRlY29kZUh1ZmZtYW5BZGFwdGl2ZTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5mbGF0ZSBtb2RlJyk7XG4gIH1cbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLkJ1ZmZlclR5cGUgPSB7XG4gIEJMT0NLOiAwLFxuICBBREFQVElWRTogMVxufTtcblxuLyoqXG4gKiBkZWNvbXByZXNzLlxuICogQHJldHVybiB7IShVaW50OEFycmF5fEFycmF5LjxudW1iZXI+KX0gaW5mbGF0ZWQgYnVmZmVyLlxuICovXG5abGliLlJhd0luZmxhdGUucHJvdG90eXBlLmRlY29tcHJlc3MgPSBmdW5jdGlvbigpIHtcbiAgd2hpbGUgKCF0aGlzLmJmaW5hbCkge1xuICAgIHRoaXMucGFyc2VCbG9jaygpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY29uY2F0QnVmZmVyKCk7XG59O1xuXG4vKipcbiAqIEBjb25zdFxuICogQHR5cGUge251bWJlcn0gbWF4IGJhY2t3YXJkIGxlbmd0aCBmb3IgTFo3Ny5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLk1heEJhY2t3YXJkTGVuZ3RoID0gMzI3Njg7XG5cbi8qKlxuICogQGNvbnN0XG4gKiBAdHlwZSB7bnVtYmVyfSBtYXggY29weSBsZW5ndGggZm9yIExaNzcuXG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5NYXhDb3B5TGVuZ3RoID0gMjU4O1xuXG4vKipcbiAqIGh1ZmZtYW4gb3JkZXJcbiAqIEBjb25zdFxuICogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9XG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5PcmRlciA9IChmdW5jdGlvbih0YWJsZSkge1xuICByZXR1cm4gVVNFX1RZUEVEQVJSQVkgPyBuZXcgVWludDE2QXJyYXkodGFibGUpIDogdGFibGU7XG59KShbMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNV0pO1xuXG4vKipcbiAqIGh1ZmZtYW4gbGVuZ3RoIGNvZGUgdGFibGUuXG4gKiBAY29uc3RcbiAqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQxNkFycmF5KX1cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLkxlbmd0aENvZGVUYWJsZSA9IChmdW5jdGlvbih0YWJsZSkge1xuICByZXR1cm4gVVNFX1RZUEVEQVJSQVkgPyBuZXcgVWludDE2QXJyYXkodGFibGUpIDogdGFibGU7XG59KShbXG4gIDB4MDAwMywgMHgwMDA0LCAweDAwMDUsIDB4MDAwNiwgMHgwMDA3LCAweDAwMDgsIDB4MDAwOSwgMHgwMDBhLCAweDAwMGIsXG4gIDB4MDAwZCwgMHgwMDBmLCAweDAwMTEsIDB4MDAxMywgMHgwMDE3LCAweDAwMWIsIDB4MDAxZiwgMHgwMDIzLCAweDAwMmIsXG4gIDB4MDAzMywgMHgwMDNiLCAweDAwNDMsIDB4MDA1MywgMHgwMDYzLCAweDAwNzMsIDB4MDA4MywgMHgwMGEzLCAweDAwYzMsXG4gIDB4MDBlMywgMHgwMTAyLCAweDAxMDIsIDB4MDEwMlxuXSk7XG5cbi8qKlxuICogaHVmZm1hbiBsZW5ndGggZXh0cmEtYml0cyB0YWJsZS5cbiAqIEBjb25zdFxuICogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9XG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5MZW5ndGhFeHRyYVRhYmxlID0gKGZ1bmN0aW9uKHRhYmxlKSB7XG4gIHJldHVybiBVU0VfVFlQRURBUlJBWSA/IG5ldyBVaW50OEFycmF5KHRhYmxlKSA6IHRhYmxlO1xufSkoW1xuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCA0LCA1LCA1LFxuICA1LCA1LCAwLCAwLCAwXG5dKTtcblxuLyoqXG4gKiBodWZmbWFuIGRpc3QgY29kZSB0YWJsZS5cbiAqIEBjb25zdFxuICogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDE2QXJyYXkpfVxuICovXG5abGliLlJhd0luZmxhdGUuRGlzdENvZGVUYWJsZSA9IChmdW5jdGlvbih0YWJsZSkge1xuICByZXR1cm4gVVNFX1RZUEVEQVJSQVkgPyBuZXcgVWludDE2QXJyYXkodGFibGUpIDogdGFibGU7XG59KShbXG4gIDB4MDAwMSwgMHgwMDAyLCAweDAwMDMsIDB4MDAwNCwgMHgwMDA1LCAweDAwMDcsIDB4MDAwOSwgMHgwMDBkLCAweDAwMTEsXG4gIDB4MDAxOSwgMHgwMDIxLCAweDAwMzEsIDB4MDA0MSwgMHgwMDYxLCAweDAwODEsIDB4MDBjMSwgMHgwMTAxLCAweDAxODEsXG4gIDB4MDIwMSwgMHgwMzAxLCAweDA0MDEsIDB4MDYwMSwgMHgwODAxLCAweDBjMDEsIDB4MTAwMSwgMHgxODAxLCAweDIwMDEsXG4gIDB4MzAwMSwgMHg0MDAxLCAweDYwMDFcbl0pO1xuXG4vKipcbiAqIGh1ZmZtYW4gZGlzdCBleHRyYS1iaXRzIHRhYmxlLlxuICogQGNvbnN0XG4gKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX1cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLkRpc3RFeHRyYVRhYmxlID0gKGZ1bmN0aW9uKHRhYmxlKSB7XG4gIHJldHVybiBVU0VfVFlQRURBUlJBWSA/IG5ldyBVaW50OEFycmF5KHRhYmxlKSA6IHRhYmxlO1xufSkoW1xuICAwLCAwLCAwLCAwLCAxLCAxLCAyLCAyLCAzLCAzLCA0LCA0LCA1LCA1LCA2LCA2LCA3LCA3LCA4LCA4LCA5LCA5LCAxMCwgMTAsIDExLFxuICAxMSwgMTIsIDEyLCAxMywgMTNcbl0pO1xuXG4vKipcbiAqIGZpeGVkIGh1ZmZtYW4gbGVuZ3RoIGNvZGUgdGFibGVcbiAqIEBjb25zdFxuICogQHR5cGUgeyFBcnJheX1cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLkZpeGVkTGl0ZXJhbExlbmd0aFRhYmxlID0gKGZ1bmN0aW9uKHRhYmxlKSB7XG4gIHJldHVybiB0YWJsZTtcbn0pKChmdW5jdGlvbigpIHtcbiAgdmFyIGxlbmd0aHMgPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KSgyODgpO1xuICB2YXIgaSwgaWw7XG5cbiAgZm9yIChpID0gMCwgaWwgPSBsZW5ndGhzLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcbiAgICBsZW5ndGhzW2ldID1cbiAgICAgIChpIDw9IDE0MykgPyA4IDpcbiAgICAgIChpIDw9IDI1NSkgPyA5IDpcbiAgICAgIChpIDw9IDI3OSkgPyA3IDpcbiAgICAgIDg7XG4gIH1cblxuICByZXR1cm4gYnVpbGRIdWZmbWFuVGFibGUobGVuZ3Rocyk7XG59KSgpKTtcblxuLyoqXG4gKiBmaXhlZCBodWZmbWFuIGRpc3RhbmNlIGNvZGUgdGFibGVcbiAqIEBjb25zdFxuICogQHR5cGUgeyFBcnJheX1cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLkZpeGVkRGlzdGFuY2VUYWJsZSA9IChmdW5jdGlvbih0YWJsZSkge1xuICByZXR1cm4gdGFibGU7XG59KSgoZnVuY3Rpb24oKSB7XG4gIHZhciBsZW5ndGhzID0gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkoMzApO1xuICB2YXIgaSwgaWw7XG5cbiAgZm9yIChpID0gMCwgaWwgPSBsZW5ndGhzLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcbiAgICBsZW5ndGhzW2ldID0gNTtcbiAgfVxuXG4gIHJldHVybiBidWlsZEh1ZmZtYW5UYWJsZShsZW5ndGhzKTtcbn0pKCkpO1xuXG4vKipcbiAqIHBhcnNlIGRlZmxhdGVkIGJsb2NrLlxuICovXG5abGliLlJhd0luZmxhdGUucHJvdG90eXBlLnBhcnNlQmxvY2sgPSBmdW5jdGlvbigpIHtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGhlYWRlciAqL1xuICB2YXIgaGRyID0gdGhpcy5yZWFkQml0cygzKTtcblxuICAvLyBCRklOQUxcbiAgaWYgKGhkciAmIDB4MSkge1xuICAgIHRoaXMuYmZpbmFsID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIEJUWVBFXG4gIGhkciA+Pj49IDE7XG4gIHN3aXRjaCAoaGRyKSB7XG4gICAgLy8gdW5jb21wcmVzc2VkXG4gICAgY2FzZSAwOlxuICAgICAgdGhpcy5wYXJzZVVuY29tcHJlc3NlZEJsb2NrKCk7XG4gICAgICBicmVhaztcbiAgICAvLyBmaXhlZCBodWZmbWFuXG4gICAgY2FzZSAxOlxuICAgICAgdGhpcy5wYXJzZUZpeGVkSHVmZm1hbkJsb2NrKCk7XG4gICAgICBicmVhaztcbiAgICAvLyBkeW5hbWljIGh1ZmZtYW5cbiAgICBjYXNlIDI6XG4gICAgICB0aGlzLnBhcnNlRHluYW1pY0h1ZmZtYW5CbG9jaygpO1xuICAgICAgYnJlYWs7XG4gICAgLy8gcmVzZXJ2ZWQgb3Igb3RoZXJcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIEJUWVBFOiAnICsgaGRyKTtcbiAgfVxufTtcblxuLyoqXG4gKiByZWFkIGluZmxhdGUgYml0c1xuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCBiaXRzIGxlbmd0aC5cbiAqIEByZXR1cm4ge251bWJlcn0gcmVhZCBiaXRzLlxuICovXG5abGliLlJhd0luZmxhdGUucHJvdG90eXBlLnJlYWRCaXRzID0gZnVuY3Rpb24obGVuZ3RoKSB7XG4gIHZhciBiaXRzYnVmID0gdGhpcy5iaXRzYnVmO1xuICB2YXIgYml0c2J1ZmxlbiA9IHRoaXMuYml0c2J1ZmxlbjtcbiAgdmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcbiAgdmFyIGlwID0gdGhpcy5pcDtcblxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAvKiogQHR5cGUge251bWJlcn0gaW5wdXQgYW5kIG91dHB1dCBieXRlLiAqL1xuICB2YXIgb2N0ZXQ7XG5cbiAgLy8gbm90IGVub3VnaCBidWZmZXJcbiAgd2hpbGUgKGJpdHNidWZsZW4gPCBsZW5ndGgpIHtcbiAgICAvLyBpbnB1dCBieXRlXG4gICAgaWYgKGlwID49IGlucHV0TGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lucHV0IGJ1ZmZlciBpcyBicm9rZW4nKTtcbiAgICB9XG5cbiAgICAvLyBjb25jYXQgb2N0ZXRcbiAgICBiaXRzYnVmIHw9IGlucHV0W2lwKytdIDw8IGJpdHNidWZsZW47XG4gICAgYml0c2J1ZmxlbiArPSA4O1xuICB9XG5cbiAgLy8gb3V0cHV0IGJ5dGVcbiAgb2N0ZXQgPSBiaXRzYnVmICYgLyogTUFTSyAqLyAoKDEgPDwgbGVuZ3RoKSAtIDEpO1xuICBiaXRzYnVmID4+Pj0gbGVuZ3RoO1xuICBiaXRzYnVmbGVuIC09IGxlbmd0aDtcblxuICB0aGlzLmJpdHNidWYgPSBiaXRzYnVmO1xuICB0aGlzLmJpdHNidWZsZW4gPSBiaXRzYnVmbGVuO1xuICB0aGlzLmlwID0gaXA7XG5cbiAgcmV0dXJuIG9jdGV0O1xufTtcblxuLyoqXG4gKiByZWFkIGh1ZmZtYW4gY29kZSB1c2luZyB0YWJsZVxuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXl8VWludDE2QXJyYXkpfSB0YWJsZSBodWZmbWFuIGNvZGUgdGFibGUuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IGh1ZmZtYW4gY29kZS5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5yZWFkQ29kZUJ5VGFibGUgPSBmdW5jdGlvbih0YWJsZSkge1xuICB2YXIgYml0c2J1ZiA9IHRoaXMuYml0c2J1ZjtcbiAgdmFyIGJpdHNidWZsZW4gPSB0aGlzLmJpdHNidWZsZW47XG4gIHZhciBpbnB1dCA9IHRoaXMuaW5wdXQ7XG4gIHZhciBpcCA9IHRoaXMuaXA7XG5cbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBodWZmbWFuIGNvZGUgdGFibGUgKi9cbiAgdmFyIGNvZGVUYWJsZSA9IHRhYmxlWzBdO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIG1heENvZGVMZW5ndGggPSB0YWJsZVsxXTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGNvZGUgbGVuZ3RoICYgY29kZSAoMTZiaXQsIDE2Yml0KSAqL1xuICB2YXIgY29kZVdpdGhMZW5ndGg7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBjb2RlIGJpdHMgbGVuZ3RoICovXG4gIHZhciBjb2RlTGVuZ3RoO1xuXG4gIC8vIG5vdCBlbm91Z2ggYnVmZmVyXG4gIHdoaWxlIChiaXRzYnVmbGVuIDwgbWF4Q29kZUxlbmd0aCkge1xuICAgIGlmIChpcCA+PSBpbnB1dExlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGJpdHNidWYgfD0gaW5wdXRbaXArK10gPDwgYml0c2J1ZmxlbjtcbiAgICBiaXRzYnVmbGVuICs9IDg7XG4gIH1cblxuICAvLyByZWFkIG1heCBsZW5ndGhcbiAgY29kZVdpdGhMZW5ndGggPSBjb2RlVGFibGVbYml0c2J1ZiAmICgoMSA8PCBtYXhDb2RlTGVuZ3RoKSAtIDEpXTtcbiAgY29kZUxlbmd0aCA9IGNvZGVXaXRoTGVuZ3RoID4+PiAxNjtcblxuICBpZiAoY29kZUxlbmd0aCA+IGJpdHNidWZsZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY29kZSBsZW5ndGg6ICcgKyBjb2RlTGVuZ3RoKTtcbiAgfVxuXG4gIHRoaXMuYml0c2J1ZiA9IGJpdHNidWYgPj4gY29kZUxlbmd0aDtcbiAgdGhpcy5iaXRzYnVmbGVuID0gYml0c2J1ZmxlbiAtIGNvZGVMZW5ndGg7XG4gIHRoaXMuaXAgPSBpcDtcblxuICByZXR1cm4gY29kZVdpdGhMZW5ndGggJiAweGZmZmY7XG59O1xuXG4vKipcbiAqIHBhcnNlIHVuY29tcHJlc3NlZCBibG9jay5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5wYXJzZVVuY29tcHJlc3NlZEJsb2NrID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpbnB1dCA9IHRoaXMuaW5wdXQ7XG4gIHZhciBpcCA9IHRoaXMuaXA7XG4gIHZhciBvdXRwdXQgPSB0aGlzLm91dHB1dDtcbiAgdmFyIG9wID0gdGhpcy5vcDtcblxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAvKiogQHR5cGUge251bWJlcn0gYmxvY2sgbGVuZ3RoICovXG4gIHZhciBsZW47XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBudW1iZXIgZm9yIGNoZWNrIGJsb2NrIGxlbmd0aCAqL1xuICB2YXIgbmxlbjtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG91dHB1dCBidWZmZXIgbGVuZ3RoICovXG4gIHZhciBvbGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGNvcHkgY291bnRlciAqL1xuICB2YXIgcHJlQ29weTtcblxuICAvLyBza2lwIGJ1ZmZlcmVkIGhlYWRlciBiaXRzXG4gIHRoaXMuYml0c2J1ZiA9IDA7XG4gIHRoaXMuYml0c2J1ZmxlbiA9IDA7XG5cbiAgLy8gbGVuXG4gIGlmIChpcCArIDEgPj0gaW5wdXRMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdW5jb21wcmVzc2VkIGJsb2NrIGhlYWRlcjogTEVOJyk7XG4gIH1cbiAgbGVuID0gaW5wdXRbaXArK10gfCAoaW5wdXRbaXArK10gPDwgOCk7XG5cbiAgLy8gbmxlblxuICBpZiAoaXAgKyAxID49IGlucHV0TGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHVuY29tcHJlc3NlZCBibG9jayBoZWFkZXI6IE5MRU4nKTtcbiAgfVxuICBubGVuID0gaW5wdXRbaXArK10gfCAoaW5wdXRbaXArK10gPDwgOCk7XG5cbiAgLy8gY2hlY2sgbGVuICYgbmxlblxuICBpZiAobGVuID09PSB+bmxlbikge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB1bmNvbXByZXNzZWQgYmxvY2sgaGVhZGVyOiBsZW5ndGggdmVyaWZ5Jyk7XG4gIH1cblxuICAvLyBjaGVjayBzaXplXG4gIGlmIChpcCArIGxlbiA+IGlucHV0Lmxlbmd0aCkgeyB0aHJvdyBuZXcgRXJyb3IoJ2lucHV0IGJ1ZmZlciBpcyBicm9rZW4nKTsgfVxuXG4gIC8vIGV4cGFuZCBidWZmZXJcbiAgc3dpdGNoICh0aGlzLmJ1ZmZlclR5cGUpIHtcbiAgICBjYXNlIFpsaWIuUmF3SW5mbGF0ZS5CdWZmZXJUeXBlLkJMT0NLOlxuICAgICAgLy8gcHJlIGNvcHlcbiAgICAgIHdoaWxlIChvcCArIGxlbiA+IG91dHB1dC5sZW5ndGgpIHtcbiAgICAgICAgcHJlQ29weSA9IG9sZW5ndGggLSBvcDtcbiAgICAgICAgbGVuIC09IHByZUNvcHk7XG4gICAgICAgIGlmIChVU0VfVFlQRURBUlJBWSkge1xuICAgICAgICAgIG91dHB1dC5zZXQoaW5wdXQuc3ViYXJyYXkoaXAsIGlwICsgcHJlQ29weSksIG9wKTtcbiAgICAgICAgICBvcCArPSBwcmVDb3B5O1xuICAgICAgICAgIGlwICs9IHByZUNvcHk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2hpbGUgKHByZUNvcHktLSkge1xuICAgICAgICAgICAgb3V0cHV0W29wKytdID0gaW5wdXRbaXArK107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub3AgPSBvcDtcbiAgICAgICAgb3V0cHV0ID0gdGhpcy5leHBhbmRCdWZmZXIoKTtcbiAgICAgICAgb3AgPSB0aGlzLm9wO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBabGliLlJhd0luZmxhdGUuQnVmZmVyVHlwZS5BREFQVElWRTpcbiAgICAgIHdoaWxlIChvcCArIGxlbiA+IG91dHB1dC5sZW5ndGgpIHtcbiAgICAgICAgb3V0cHV0ID0gdGhpcy5leHBhbmRCdWZmZXIoe2ZpeFJhdGlvOiAyfSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGluZmxhdGUgbW9kZScpO1xuICB9XG5cbiAgLy8gY29weVxuICBpZiAoVVNFX1RZUEVEQVJSQVkpIHtcbiAgICBvdXRwdXQuc2V0KGlucHV0LnN1YmFycmF5KGlwLCBpcCArIGxlbiksIG9wKTtcbiAgICBvcCArPSBsZW47XG4gICAgaXAgKz0gbGVuO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgb3V0cHV0W29wKytdID0gaW5wdXRbaXArK107XG4gICAgfVxuICB9XG5cbiAgdGhpcy5pcCA9IGlwO1xuICB0aGlzLm9wID0gb3A7XG4gIHRoaXMub3V0cHV0ID0gb3V0cHV0O1xufTtcblxuLyoqXG4gKiBwYXJzZSBmaXhlZCBodWZmbWFuIGJsb2NrLlxuICovXG5abGliLlJhd0luZmxhdGUucHJvdG90eXBlLnBhcnNlRml4ZWRIdWZmbWFuQmxvY2sgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5kZWNvZGVIdWZmbWFuKFxuICAgIFpsaWIuUmF3SW5mbGF0ZS5GaXhlZExpdGVyYWxMZW5ndGhUYWJsZSxcbiAgICBabGliLlJhd0luZmxhdGUuRml4ZWREaXN0YW5jZVRhYmxlXG4gICk7XG59O1xuXG4vKipcbiAqIHBhcnNlIGR5bmFtaWMgaHVmZm1hbiBibG9jay5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5wYXJzZUR5bmFtaWNIdWZmbWFuQmxvY2sgPSBmdW5jdGlvbigpIHtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG51bWJlciBvZiBsaXRlcmFsIGFuZCBsZW5ndGggY29kZXMuICovXG4gIHZhciBobGl0ID0gdGhpcy5yZWFkQml0cyg1KSArIDI1NztcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG51bWJlciBvZiBkaXN0YW5jZSBjb2Rlcy4gKi9cbiAgdmFyIGhkaXN0ID0gdGhpcy5yZWFkQml0cyg1KSArIDE7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBudW1iZXIgb2YgY29kZSBsZW5ndGhzLiAqL1xuICB2YXIgaGNsZW4gPSB0aGlzLnJlYWRCaXRzKDQpICsgNDtcbiAgLyoqIEB0eXBlIHshKFVpbnQ4QXJyYXl8QXJyYXkuPG51bWJlcj4pfSBjb2RlIGxlbmd0aHMuICovXG4gIHZhciBjb2RlTGVuZ3RocyA9XG4gICAgbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkoWmxpYi5SYXdJbmZsYXRlLk9yZGVyLmxlbmd0aCk7XG4gIC8qKiBAdHlwZSB7IUFycmF5fSBjb2RlIGxlbmd0aHMgdGFibGUuICovXG4gIHZhciBjb2RlTGVuZ3Roc1RhYmxlO1xuICAvKiogQHR5cGUgeyEoVWludDhBcnJheXxBcnJheS48bnVtYmVyPil9IGxpdGVyYWwgYW5kIGxlbmd0aCBjb2RlIHRhYmxlLiAqL1xuICB2YXIgbGl0bGVuVGFibGU7XG4gIC8qKiBAdHlwZSB7IShVaW50OEFycmF5fEFycmF5LjxudW1iZXI+KX0gZGlzdGFuY2UgY29kZSB0YWJsZS4gKi9cbiAgdmFyIGRpc3RUYWJsZTtcbiAgLyoqIEB0eXBlIHshKFVpbnQ4QXJyYXl8QXJyYXkuPG51bWJlcj4pfSBjb2RlIGxlbmd0aCB0YWJsZS4gKi9cbiAgdmFyIGxlbmd0aFRhYmxlO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGNvZGU7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgcHJldjtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciByZXBlYXQ7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsb29wIGNvdW50ZXIuICovXG4gIHZhciBpO1xuICAvKiogQHR5cGUge251bWJlcn0gbG9vcCBsaW1pdC4gKi9cbiAgdmFyIGlsO1xuXG4gIC8vIGRlY29kZSBjb2RlIGxlbmd0aHNcbiAgZm9yIChpID0gMDsgaSA8IGhjbGVuOyArK2kpIHtcbiAgICBjb2RlTGVuZ3Roc1tabGliLlJhd0luZmxhdGUuT3JkZXJbaV1dID0gdGhpcy5yZWFkQml0cygzKTtcbiAgfVxuICBpZiAoIVVTRV9UWVBFREFSUkFZKSB7XG4gICAgZm9yIChpID0gaGNsZW4sIGhjbGVuID0gY29kZUxlbmd0aHMubGVuZ3RoOyBpIDwgaGNsZW47ICsraSkge1xuICAgICAgY29kZUxlbmd0aHNbWmxpYi5SYXdJbmZsYXRlLk9yZGVyW2ldXSA9IDA7XG4gICAgfVxuICB9XG5cbiAgLy8gZGVjb2RlIGxlbmd0aCB0YWJsZVxuICBjb2RlTGVuZ3Roc1RhYmxlID0gYnVpbGRIdWZmbWFuVGFibGUoY29kZUxlbmd0aHMpO1xuICBsZW5ndGhUYWJsZSA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50OEFycmF5IDogQXJyYXkpKGhsaXQgKyBoZGlzdCk7XG4gIGZvciAoaSA9IDAsIGlsID0gaGxpdCArIGhkaXN0OyBpIDwgaWw7KSB7XG4gICAgY29kZSA9IHRoaXMucmVhZENvZGVCeVRhYmxlKGNvZGVMZW5ndGhzVGFibGUpO1xuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSAxNjpcbiAgICAgICAgcmVwZWF0ID0gMyArIHRoaXMucmVhZEJpdHMoMik7XG4gICAgICAgIHdoaWxlIChyZXBlYXQtLSkgeyBsZW5ndGhUYWJsZVtpKytdID0gcHJldjsgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTc6XG4gICAgICAgIHJlcGVhdCA9IDMgKyB0aGlzLnJlYWRCaXRzKDMpO1xuICAgICAgICB3aGlsZSAocmVwZWF0LS0pIHsgbGVuZ3RoVGFibGVbaSsrXSA9IDA7IH1cbiAgICAgICAgcHJldiA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxODpcbiAgICAgICAgcmVwZWF0ID0gMTEgKyB0aGlzLnJlYWRCaXRzKDcpO1xuICAgICAgICB3aGlsZSAocmVwZWF0LS0pIHsgbGVuZ3RoVGFibGVbaSsrXSA9IDA7IH1cbiAgICAgICAgcHJldiA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbGVuZ3RoVGFibGVbaSsrXSA9IGNvZGU7XG4gICAgICAgIHByZXYgPSBjb2RlO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBsaXRsZW5UYWJsZSA9IFVTRV9UWVBFREFSUkFZXG4gICAgPyBidWlsZEh1ZmZtYW5UYWJsZShsZW5ndGhUYWJsZS5zdWJhcnJheSgwLCBobGl0KSlcbiAgICA6IGJ1aWxkSHVmZm1hblRhYmxlKGxlbmd0aFRhYmxlLnNsaWNlKDAsIGhsaXQpKTtcbiAgZGlzdFRhYmxlID0gVVNFX1RZUEVEQVJSQVlcbiAgICA/IGJ1aWxkSHVmZm1hblRhYmxlKGxlbmd0aFRhYmxlLnN1YmFycmF5KGhsaXQpKVxuICAgIDogYnVpbGRIdWZmbWFuVGFibGUobGVuZ3RoVGFibGUuc2xpY2UoaGxpdCkpO1xuXG4gIHRoaXMuZGVjb2RlSHVmZm1hbihsaXRsZW5UYWJsZSwgZGlzdFRhYmxlKTtcbn07XG5cbi8qKlxuICogZGVjb2RlIGh1ZmZtYW4gY29kZVxuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQxNkFycmF5KX0gbGl0bGVuIGxpdGVyYWwgYW5kIGxlbmd0aCBjb2RlIHRhYmxlLlxuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBkaXN0IGRpc3RpbmF0aW9uIGNvZGUgdGFibGUuXG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUuZGVjb2RlSHVmZm1hbiA9IGZ1bmN0aW9uKGxpdGxlbiwgZGlzdCkge1xuICB2YXIgb3V0cHV0ID0gdGhpcy5vdXRwdXQ7XG4gIHZhciBvcCA9IHRoaXMub3A7XG5cbiAgdGhpcy5jdXJyZW50TGl0bGVuVGFibGUgPSBsaXRsZW47XG5cbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG91dHB1dCBwb3NpdGlvbiBsaW1pdC4gKi9cbiAgdmFyIG9sZW5ndGggPSBvdXRwdXQubGVuZ3RoIC0gWmxpYi5SYXdJbmZsYXRlLk1heENvcHlMZW5ndGg7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBodWZmbWFuIGNvZGUuICovXG4gIHZhciBjb2RlO1xuICAvKiogQHR5cGUge251bWJlcn0gdGFibGUgaW5kZXguICovXG4gIHZhciB0aTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGh1ZmZtYW4gY29kZSBkaXN0aW5hdGlvbi4gKi9cbiAgdmFyIGNvZGVEaXN0O1xuICAvKiogQHR5cGUge251bWJlcn0gaHVmZm1hbiBjb2RlIGxlbmd0aC4gKi9cbiAgdmFyIGNvZGVMZW5ndGg7XG5cbiAgd2hpbGUgKChjb2RlID0gdGhpcy5yZWFkQ29kZUJ5VGFibGUobGl0bGVuKSkgIT09IDI1Nikge1xuICAgIC8vIGxpdGVyYWxcbiAgICBpZiAoY29kZSA8IDI1Nikge1xuICAgICAgaWYgKG9wID49IG9sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5vcCA9IG9wO1xuICAgICAgICBvdXRwdXQgPSB0aGlzLmV4cGFuZEJ1ZmZlcigpO1xuICAgICAgICBvcCA9IHRoaXMub3A7XG4gICAgICB9XG4gICAgICBvdXRwdXRbb3ArK10gPSBjb2RlO1xuXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBsZW5ndGggY29kZVxuICAgIHRpID0gY29kZSAtIDI1NztcbiAgICBjb2RlTGVuZ3RoID0gWmxpYi5SYXdJbmZsYXRlLkxlbmd0aENvZGVUYWJsZVt0aV07XG4gICAgaWYgKFpsaWIuUmF3SW5mbGF0ZS5MZW5ndGhFeHRyYVRhYmxlW3RpXSA+IDApIHtcbiAgICAgIGNvZGVMZW5ndGggKz0gdGhpcy5yZWFkQml0cyhabGliLlJhd0luZmxhdGUuTGVuZ3RoRXh0cmFUYWJsZVt0aV0pO1xuICAgIH1cblxuICAgIC8vIGRpc3QgY29kZVxuICAgIGNvZGUgPSB0aGlzLnJlYWRDb2RlQnlUYWJsZShkaXN0KTtcbiAgICBjb2RlRGlzdCA9IFpsaWIuUmF3SW5mbGF0ZS5EaXN0Q29kZVRhYmxlW2NvZGVdO1xuICAgIGlmIChabGliLlJhd0luZmxhdGUuRGlzdEV4dHJhVGFibGVbY29kZV0gPiAwKSB7XG4gICAgICBjb2RlRGlzdCArPSB0aGlzLnJlYWRCaXRzKFpsaWIuUmF3SW5mbGF0ZS5EaXN0RXh0cmFUYWJsZVtjb2RlXSk7XG4gICAgfVxuXG4gICAgLy8gbHo3NyBkZWNvZGVcbiAgICBpZiAob3AgPj0gb2xlbmd0aCkge1xuICAgICAgdGhpcy5vcCA9IG9wO1xuICAgICAgb3V0cHV0ID0gdGhpcy5leHBhbmRCdWZmZXIoKTtcbiAgICAgIG9wID0gdGhpcy5vcDtcbiAgICB9XG4gICAgd2hpbGUgKGNvZGVMZW5ndGgtLSkge1xuICAgICAgb3V0cHV0W29wXSA9IG91dHB1dFsob3ArKykgLSBjb2RlRGlzdF07XG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKHRoaXMuYml0c2J1ZmxlbiA+PSA4KSB7XG4gICAgdGhpcy5iaXRzYnVmbGVuIC09IDg7XG4gICAgdGhpcy5pcC0tO1xuICB9XG4gIHRoaXMub3AgPSBvcDtcbn07XG5cbi8qKlxuICogZGVjb2RlIGh1ZmZtYW4gY29kZSAoYWRhcHRpdmUpXG4gKiBAcGFyYW0geyEoQXJyYXkuPG51bWJlcj58VWludDE2QXJyYXkpfSBsaXRsZW4gbGl0ZXJhbCBhbmQgbGVuZ3RoIGNvZGUgdGFibGUuXG4gKiBAcGFyYW0geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGRpc3QgZGlzdGluYXRpb24gY29kZSB0YWJsZS5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5kZWNvZGVIdWZmbWFuQWRhcHRpdmUgPSBmdW5jdGlvbihsaXRsZW4sIGRpc3QpIHtcbiAgdmFyIG91dHB1dCA9IHRoaXMub3V0cHV0O1xuICB2YXIgb3AgPSB0aGlzLm9wO1xuXG4gIHRoaXMuY3VycmVudExpdGxlblRhYmxlID0gbGl0bGVuO1xuXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBvdXRwdXQgcG9zaXRpb24gbGltaXQuICovXG4gIHZhciBvbGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGh1ZmZtYW4gY29kZS4gKi9cbiAgdmFyIGNvZGU7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSB0YWJsZSBpbmRleC4gKi9cbiAgdmFyIHRpO1xuICAvKiogQHR5cGUge251bWJlcn0gaHVmZm1hbiBjb2RlIGRpc3RpbmF0aW9uLiAqL1xuICB2YXIgY29kZURpc3Q7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBodWZmbWFuIGNvZGUgbGVuZ3RoLiAqL1xuICB2YXIgY29kZUxlbmd0aDtcblxuICB3aGlsZSAoKGNvZGUgPSB0aGlzLnJlYWRDb2RlQnlUYWJsZShsaXRsZW4pKSAhPT0gMjU2KSB7XG4gICAgLy8gbGl0ZXJhbFxuICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICBpZiAob3AgPj0gb2xlbmd0aCkge1xuICAgICAgICBvdXRwdXQgPSB0aGlzLmV4cGFuZEJ1ZmZlcigpO1xuICAgICAgICBvbGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIG91dHB1dFtvcCsrXSA9IGNvZGU7XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGxlbmd0aCBjb2RlXG4gICAgdGkgPSBjb2RlIC0gMjU3O1xuICAgIGNvZGVMZW5ndGggPSBabGliLlJhd0luZmxhdGUuTGVuZ3RoQ29kZVRhYmxlW3RpXTtcbiAgICBpZiAoWmxpYi5SYXdJbmZsYXRlLkxlbmd0aEV4dHJhVGFibGVbdGldID4gMCkge1xuICAgICAgY29kZUxlbmd0aCArPSB0aGlzLnJlYWRCaXRzKFpsaWIuUmF3SW5mbGF0ZS5MZW5ndGhFeHRyYVRhYmxlW3RpXSk7XG4gICAgfVxuXG4gICAgLy8gZGlzdCBjb2RlXG4gICAgY29kZSA9IHRoaXMucmVhZENvZGVCeVRhYmxlKGRpc3QpO1xuICAgIGNvZGVEaXN0ID0gWmxpYi5SYXdJbmZsYXRlLkRpc3RDb2RlVGFibGVbY29kZV07XG4gICAgaWYgKFpsaWIuUmF3SW5mbGF0ZS5EaXN0RXh0cmFUYWJsZVtjb2RlXSA+IDApIHtcbiAgICAgIGNvZGVEaXN0ICs9IHRoaXMucmVhZEJpdHMoWmxpYi5SYXdJbmZsYXRlLkRpc3RFeHRyYVRhYmxlW2NvZGVdKTtcbiAgICB9XG5cbiAgICAvLyBsejc3IGRlY29kZVxuICAgIGlmIChvcCArIGNvZGVMZW5ndGggPiBvbGVuZ3RoKSB7XG4gICAgICBvdXRwdXQgPSB0aGlzLmV4cGFuZEJ1ZmZlcigpO1xuICAgICAgb2xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG4gICAgfVxuICAgIHdoaWxlIChjb2RlTGVuZ3RoLS0pIHtcbiAgICAgIG91dHB1dFtvcF0gPSBvdXRwdXRbKG9wKyspIC0gY29kZURpc3RdO1xuICAgIH1cbiAgfVxuXG4gIHdoaWxlICh0aGlzLmJpdHNidWZsZW4gPj0gOCkge1xuICAgIHRoaXMuYml0c2J1ZmxlbiAtPSA4O1xuICAgIHRoaXMuaXAtLTtcbiAgfVxuICB0aGlzLm9wID0gb3A7XG59O1xuXG4vKipcbiAqIGV4cGFuZCBvdXRwdXQgYnVmZmVyLlxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfcGFyYW0gb3B0aW9uIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJuIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBvdXRwdXQgYnVmZmVyLlxuICovXG5abGliLlJhd0luZmxhdGUucHJvdG90eXBlLmV4cGFuZEJ1ZmZlciA9IGZ1bmN0aW9uKG9wdF9wYXJhbSkge1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IHN0b3JlIGJ1ZmZlci4gKi9cbiAgdmFyIGJ1ZmZlciA9XG4gICAgbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkoXG4gICAgICAgIHRoaXMub3AgLSBabGliLlJhd0luZmxhdGUuTWF4QmFja3dhcmRMZW5ndGhcbiAgICApO1xuICAvKiogQHR5cGUge251bWJlcn0gYmFja3dhcmQgYmFzZSBwb2ludCAqL1xuICB2YXIgYmFja3dhcmQgPSB0aGlzLm9wIC0gWmxpYi5SYXdJbmZsYXRlLk1heEJhY2t3YXJkTGVuZ3RoO1xuICAvKiogQHR5cGUge251bWJlcn0gY29weSBpbmRleC4gKi9cbiAgdmFyIGk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBjb3B5IGxpbWl0ICovXG4gIHZhciBpbDtcblxuICB2YXIgb3V0cHV0ID0gdGhpcy5vdXRwdXQ7XG5cbiAgLy8gY29weSB0byBvdXRwdXQgYnVmZmVyXG4gIGlmIChVU0VfVFlQRURBUlJBWSkge1xuICAgIGJ1ZmZlci5zZXQob3V0cHV0LnN1YmFycmF5KFpsaWIuUmF3SW5mbGF0ZS5NYXhCYWNrd2FyZExlbmd0aCwgYnVmZmVyLmxlbmd0aCkpO1xuICB9IGVsc2Uge1xuICAgIGZvciAoaSA9IDAsIGlsID0gYnVmZmVyLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcbiAgICAgIGJ1ZmZlcltpXSA9IG91dHB1dFtpICsgWmxpYi5SYXdJbmZsYXRlLk1heEJhY2t3YXJkTGVuZ3RoXTtcbiAgICB9XG4gIH1cblxuICB0aGlzLmJsb2Nrcy5wdXNoKGJ1ZmZlcik7XG4gIHRoaXMudG90YWxwb3MgKz0gYnVmZmVyLmxlbmd0aDtcblxuICAvLyBjb3B5IHRvIGJhY2t3YXJkIGJ1ZmZlclxuICBpZiAoVVNFX1RZUEVEQVJSQVkpIHtcbiAgICBvdXRwdXQuc2V0KFxuICAgICAgb3V0cHV0LnN1YmFycmF5KGJhY2t3YXJkLCBiYWNrd2FyZCArIFpsaWIuUmF3SW5mbGF0ZS5NYXhCYWNrd2FyZExlbmd0aClcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGZvciAoaSA9IDA7IGkgPCBabGliLlJhd0luZmxhdGUuTWF4QmFja3dhcmRMZW5ndGg7ICsraSkge1xuICAgICAgb3V0cHV0W2ldID0gb3V0cHV0W2JhY2t3YXJkICsgaV07XG4gICAgfVxuICB9XG5cbiAgdGhpcy5vcCA9IFpsaWIuUmF3SW5mbGF0ZS5NYXhCYWNrd2FyZExlbmd0aDtcblxuICByZXR1cm4gb3V0cHV0O1xufTtcblxuLyoqXG4gKiBleHBhbmQgb3V0cHV0IGJ1ZmZlci4gKGFkYXB0aXZlKVxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfcGFyYW0gb3B0aW9uIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJuIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBvdXRwdXQgYnVmZmVyIHBvaW50ZXIuXG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUuZXhwYW5kQnVmZmVyQWRhcHRpdmUgPSBmdW5jdGlvbihvcHRfcGFyYW0pIHtcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBzdG9yZSBidWZmZXIuICovXG4gIHZhciBidWZmZXI7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBleHBhbnRpb24gcmF0aW8uICovXG4gIHZhciByYXRpbyA9ICh0aGlzLmlucHV0Lmxlbmd0aCAvIHRoaXMuaXAgKyAxKSB8IDA7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBtYXhpbXVtIG51bWJlciBvZiBodWZmbWFuIGNvZGUuICovXG4gIHZhciBtYXhIdWZmQ29kZTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG5ldyBvdXRwdXQgYnVmZmVyIHNpemUuICovXG4gIHZhciBuZXdTaXplO1xuICAvKiogQHR5cGUge251bWJlcn0gbWF4IGluZmxhdGUgc2l6ZS4gKi9cbiAgdmFyIG1heEluZmxhdGVTaXplO1xuXG4gIHZhciBpbnB1dCA9IHRoaXMuaW5wdXQ7XG4gIHZhciBvdXRwdXQgPSB0aGlzLm91dHB1dDtcblxuICBpZiAob3B0X3BhcmFtKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRfcGFyYW0uZml4UmF0aW8gPT09ICdudW1iZXInKSB7XG4gICAgICByYXRpbyA9IG9wdF9wYXJhbS5maXhSYXRpbztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRfcGFyYW0uYWRkUmF0aW8gPT09ICdudW1iZXInKSB7XG4gICAgICByYXRpbyArPSBvcHRfcGFyYW0uYWRkUmF0aW87XG4gICAgfVxuICB9XG5cbiAgLy8gY2FsY3VsYXRlIG5ldyBidWZmZXIgc2l6ZVxuICBpZiAocmF0aW8gPCAyKSB7XG4gICAgbWF4SHVmZkNvZGUgPVxuICAgICAgKGlucHV0Lmxlbmd0aCAtIHRoaXMuaXApIC8gdGhpcy5jdXJyZW50TGl0bGVuVGFibGVbMl07XG4gICAgbWF4SW5mbGF0ZVNpemUgPSAobWF4SHVmZkNvZGUgLyAyICogMjU4KSB8IDA7XG4gICAgbmV3U2l6ZSA9IG1heEluZmxhdGVTaXplIDwgb3V0cHV0Lmxlbmd0aCA/XG4gICAgICBvdXRwdXQubGVuZ3RoICsgbWF4SW5mbGF0ZVNpemUgOlxuICAgICAgb3V0cHV0Lmxlbmd0aCA8PCAxO1xuICB9IGVsc2Uge1xuICAgIG5ld1NpemUgPSBvdXRwdXQubGVuZ3RoICogcmF0aW87XG4gIH1cblxuICAvLyBidWZmZXIgZXhwYW50aW9uXG4gIGlmIChVU0VfVFlQRURBUlJBWSkge1xuICAgIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KG5ld1NpemUpO1xuICAgIGJ1ZmZlci5zZXQob3V0cHV0KTtcbiAgfSBlbHNlIHtcbiAgICBidWZmZXIgPSBvdXRwdXQ7XG4gIH1cblxuICB0aGlzLm91dHB1dCA9IGJ1ZmZlcjtcblxuICByZXR1cm4gdGhpcy5vdXRwdXQ7XG59O1xuXG4vKipcbiAqIGNvbmNhdCBvdXRwdXQgYnVmZmVyLlxuICogQHJldHVybiB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gb3V0cHV0IGJ1ZmZlci5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5jb25jYXRCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGJ1ZmZlciBwb2ludGVyLiAqL1xuICB2YXIgcG9zID0gMDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGJ1ZmZlciBwb2ludGVyLiAqL1xuICB2YXIgbGltaXQgPSB0aGlzLnRvdGFscG9zICsgKHRoaXMub3AgLSBabGliLlJhd0luZmxhdGUuTWF4QmFja3dhcmRMZW5ndGgpO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IG91dHB1dCBibG9jayBhcnJheS4gKi9cbiAgdmFyIG91dHB1dCA9IHRoaXMub3V0cHV0O1xuICAvKiogQHR5cGUgeyFBcnJheX0gYmxvY2tzIGFycmF5LiAqL1xuICB2YXIgYmxvY2tzID0gdGhpcy5ibG9ja3M7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gb3V0cHV0IGJsb2NrIGFycmF5LiAqL1xuICB2YXIgYmxvY2s7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gb3V0cHV0IGJ1ZmZlci4gKi9cbiAgdmFyIGJ1ZmZlciA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50OEFycmF5IDogQXJyYXkpKGxpbWl0KTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgY291bnRlci4gKi9cbiAgdmFyIGk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsb29wIGxpbWl0ZXIuICovXG4gIHZhciBpbDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgY291bnRlci4gKi9cbiAgdmFyIGo7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsb29wIGxpbWl0ZXIuICovXG4gIHZhciBqbDtcblxuICAvLyBzaW5nbGUgYnVmZmVyXG4gIGlmIChibG9ja3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFVTRV9UWVBFREFSUkFZID9cbiAgICAgIHRoaXMub3V0cHV0LnN1YmFycmF5KFpsaWIuUmF3SW5mbGF0ZS5NYXhCYWNrd2FyZExlbmd0aCwgdGhpcy5vcCkgOlxuICAgICAgdGhpcy5vdXRwdXQuc2xpY2UoWmxpYi5SYXdJbmZsYXRlLk1heEJhY2t3YXJkTGVuZ3RoLCB0aGlzLm9wKTtcbiAgfVxuXG4gIC8vIGNvcHkgdG8gYnVmZmVyXG4gIGZvciAoaSA9IDAsIGlsID0gYmxvY2tzLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcbiAgICBibG9jayA9IGJsb2Nrc1tpXTtcbiAgICBmb3IgKGogPSAwLCBqbCA9IGJsb2NrLmxlbmd0aDsgaiA8IGpsOyArK2opIHtcbiAgICAgIGJ1ZmZlcltwb3MrK10gPSBibG9ja1tqXTtcbiAgICB9XG4gIH1cblxuICAvLyBjdXJyZW50IGJ1ZmZlclxuICBmb3IgKGkgPSBabGliLlJhd0luZmxhdGUuTWF4QmFja3dhcmRMZW5ndGgsIGlsID0gdGhpcy5vcDsgaSA8IGlsOyArK2kpIHtcbiAgICBidWZmZXJbcG9zKytdID0gb3V0cHV0W2ldO1xuICB9XG5cbiAgdGhpcy5ibG9ja3MgPSBbXTtcbiAgdGhpcy5idWZmZXIgPSBidWZmZXI7XG5cbiAgcmV0dXJuIHRoaXMuYnVmZmVyO1xufTtcblxuLyoqXG4gKiBjb25jYXQgb3V0cHV0IGJ1ZmZlci4gKGR5bmFtaWMpXG4gKiBAcmV0dXJuIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBvdXRwdXQgYnVmZmVyLlxuICovXG5abGliLlJhd0luZmxhdGUucHJvdG90eXBlLmNvbmNhdEJ1ZmZlckR5bmFtaWMgPSBmdW5jdGlvbigpIHtcbiAgLyoqIEB0eXBlIHtBcnJheS48bnVtYmVyPnxVaW50OEFycmF5fSBvdXRwdXQgYnVmZmVyLiAqL1xuICB2YXIgYnVmZmVyO1xuICB2YXIgb3AgPSB0aGlzLm9wO1xuXG4gIGlmIChVU0VfVFlQRURBUlJBWSkge1xuICAgIGlmICh0aGlzLnJlc2l6ZSkge1xuICAgICAgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkob3ApO1xuICAgICAgYnVmZmVyLnNldCh0aGlzLm91dHB1dC5zdWJhcnJheSgwLCBvcCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWZmZXIgPSB0aGlzLm91dHB1dC5zdWJhcnJheSgwLCBvcCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh0aGlzLm91dHB1dC5sZW5ndGggPiBvcCkge1xuICAgICAgdGhpcy5vdXRwdXQubGVuZ3RoID0gb3A7XG4gICAgfVxuICAgIGJ1ZmZlciA9IHRoaXMub3V0cHV0O1xuICB9XG5cbiAgdGhpcy5idWZmZXIgPSBidWZmZXI7XG5cbiAgcmV0dXJuIHRoaXMuYnVmZmVyO1xufTtcblxuLy8gZW5kIG9mIHNjb3BlXG59KTtcblxuLyogdmltOnNldCBleHBhbmR0YWIgdHM9MiBzdz0yIHR3PTgwOiAqL1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEdaSVAgKFJGQzE5NTIpIOWxlemWi+OCs+ODs+ODhuODiuWun+ijhS5cbiAqL1xuZ29vZy5wcm92aWRlKCdabGliLkd1bnppcCcpO1xuXG5nb29nLnJlcXVpcmUoJ1VTRV9UWVBFREFSUkFZJyk7XG5nb29nLnJlcXVpcmUoJ1psaWIuQ1JDMzInKTtcbmdvb2cucmVxdWlyZSgnWmxpYi5HemlwJyk7XG5nb29nLnJlcXVpcmUoJ1psaWIuUmF3SW5mbGF0ZScpO1xuZ29vZy5yZXF1aXJlKCdabGliLkd1bnppcE1lbWJlcicpO1xuXG5nb29nLnNjb3BlKGZ1bmN0aW9uKCkge1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHshKEFycmF5fFVpbnQ4QXJyYXkpfSBpbnB1dCBpbnB1dCBidWZmZXIuXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF9wYXJhbXMgb3B0aW9uIHBhcmFtZXRlcnMuXG4gKi9cblpsaWIuR3VuemlwID0gZnVuY3Rpb24oaW5wdXQsIG9wdF9wYXJhbXMpIHtcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBpbnB1dCBidWZmZXIuICovXG4gIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGlucHV0IGJ1ZmZlciBwb2ludGVyLiAqL1xuICB0aGlzLmlwID0gMDtcbiAgLyoqIEB0eXBlIHtBcnJheS48WmxpYi5HdW56aXBNZW1iZXI+fSAqL1xuICB0aGlzLm1lbWJlciA9IFtdO1xuICAvKiogQHR5cGUge2Jvb2xlYW59ICovXG4gIHRoaXMuZGVjb21wcmVzc2VkID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIEByZXR1cm4ge0FycmF5LjxabGliLkd1bnppcE1lbWJlcj59XG4gKi9cblpsaWIuR3VuemlwLnByb3RvdHlwZS5nZXRNZW1iZXJzID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5kZWNvbXByZXNzZWQpIHtcbiAgICB0aGlzLmRlY29tcHJlc3MoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLm1lbWJlci5zbGljZSgpO1xufTtcblxuLyoqXG4gKiBpbmZsYXRlIGd6aXAgZGF0YS5cbiAqIEByZXR1cm4geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGluZmxhdGVkIGJ1ZmZlci5cbiAqL1xuWmxpYi5HdW56aXAucHJvdG90eXBlLmRlY29tcHJlc3MgPSBmdW5jdGlvbigpIHtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGlucHV0IGxlbmd0aC4gKi9cbiAgdmFyIGlsID0gdGhpcy5pbnB1dC5sZW5ndGg7XG5cbiAgd2hpbGUgKHRoaXMuaXAgPCBpbCkge1xuICAgIHRoaXMuZGVjb2RlTWVtYmVyKCk7XG4gIH1cblxuICB0aGlzLmRlY29tcHJlc3NlZCA9IHRydWU7XG5cbiAgcmV0dXJuIHRoaXMuY29uY2F0TWVtYmVyKCk7XG59O1xuXG4vKipcbiAqIGRlY29kZSBnemlwIG1lbWJlci5cbiAqL1xuWmxpYi5HdW56aXAucHJvdG90eXBlLmRlY29kZU1lbWJlciA9IGZ1bmN0aW9uKCkge1xuICAvKiogQHR5cGUge1psaWIuR3VuemlwTWVtYmVyfSAqL1xuICB2YXIgbWVtYmVyID0gbmV3IFpsaWIuR3VuemlwTWVtYmVyKCk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgaXNpemU7XG4gIC8qKiBAdHlwZSB7WmxpYi5SYXdJbmZsYXRlfSBSYXdJbmZsYXRlIGltcGxlbWVudGF0aW9uLiAqL1xuICB2YXIgcmF3aW5mbGF0ZTtcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBpbmZsYXRlZCBkYXRhLiAqL1xuICB2YXIgaW5mbGF0ZWQ7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBpbmZsYXRlIHNpemUgKi9cbiAgdmFyIGluZmxlbjtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGNoYXJhY3RlciBjb2RlICovXG4gIHZhciBjO1xuICAvKiogQHR5cGUge251bWJlcn0gY2hhcmFjdGVyIGluZGV4IGluIHN0cmluZy4gKi9cbiAgdmFyIGNpO1xuICAvKiogQHR5cGUge0FycmF5LjxzdHJpbmc+fSBjaGFyYWN0ZXIgYXJyYXkuICovXG4gIHZhciBzdHI7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBtb2RpZmljYXRpb24gdGltZS4gKi9cbiAgdmFyIG10aW1lO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGNyYzMyO1xuXG4gIHZhciBpbnB1dCA9IHRoaXMuaW5wdXQ7XG4gIHZhciBpcCA9IHRoaXMuaXA7XG5cbiAgbWVtYmVyLmlkMSA9IGlucHV0W2lwKytdO1xuICBtZW1iZXIuaWQyID0gaW5wdXRbaXArK107XG5cbiAgLy8gY2hlY2sgc2lnbmF0dXJlXG4gIGlmIChtZW1iZXIuaWQxICE9PSAweDFmIHx8IG1lbWJlci5pZDIgIT09IDB4OGIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZmlsZSBzaWduYXR1cmU6JyArIG1lbWJlci5pZDEgKyAnLCcgKyBtZW1iZXIuaWQyKTtcbiAgfVxuXG4gIC8vIGNoZWNrIGNvbXByZXNzaW9uIG1ldGhvZFxuICBtZW1iZXIuY20gPSBpbnB1dFtpcCsrXTtcbiAgc3dpdGNoIChtZW1iZXIuY20pIHtcbiAgICBjYXNlIDg6IC8qIFhYWDogdXNlIFpsaWIgY29uc3QgKi9cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gY29tcHJlc3Npb24gbWV0aG9kOiAnICsgbWVtYmVyLmNtKTtcbiAgfVxuXG4gIC8vIGZsYWdzXG4gIG1lbWJlci5mbGcgPSBpbnB1dFtpcCsrXTtcblxuICAvLyBtb2RpZmljYXRpb24gdGltZVxuICBtdGltZSA9IChpbnB1dFtpcCsrXSkgICAgICAgfFxuICAgICAgICAgIChpbnB1dFtpcCsrXSA8PCA4KSAgfFxuICAgICAgICAgIChpbnB1dFtpcCsrXSA8PCAxNikgfFxuICAgICAgICAgIChpbnB1dFtpcCsrXSA8PCAyNCk7XG4gIG1lbWJlci5tdGltZSA9IG5ldyBEYXRlKG10aW1lICogMTAwMCk7XG5cbiAgLy8gZXh0cmEgZmxhZ3NcbiAgbWVtYmVyLnhmbCA9IGlucHV0W2lwKytdO1xuXG4gIC8vIG9wZXJhdGluZyBzeXN0ZW1cbiAgbWVtYmVyLm9zID0gaW5wdXRbaXArK107XG5cbiAgLy8gZXh0cmFcbiAgaWYgKChtZW1iZXIuZmxnICYgWmxpYi5HemlwLkZsYWdzTWFzay5GRVhUUkEpID4gMCkge1xuICAgIG1lbWJlci54bGVuID0gaW5wdXRbaXArK10gfCAoaW5wdXRbaXArK10gPDwgOCk7XG4gICAgaXAgPSB0aGlzLmRlY29kZVN1YkZpZWxkKGlwLCBtZW1iZXIueGxlbik7XG4gIH1cblxuICAvLyBmbmFtZVxuICBpZiAoKG1lbWJlci5mbGcgJiBabGliLkd6aXAuRmxhZ3NNYXNrLkZOQU1FKSA+IDApIHtcbiAgICBmb3Ioc3RyID0gW10sIGNpID0gMDsgKGMgPSBpbnB1dFtpcCsrXSkgPiAwOykge1xuICAgICAgc3RyW2NpKytdID0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICB9XG4gICAgbWVtYmVyLm5hbWUgPSBzdHIuam9pbignJyk7XG4gIH1cblxuICAvLyBmY29tbWVudFxuICBpZiAoKG1lbWJlci5mbGcgJiBabGliLkd6aXAuRmxhZ3NNYXNrLkZDT01NRU5UKSA+IDApIHtcbiAgICBmb3Ioc3RyID0gW10sIGNpID0gMDsgKGMgPSBpbnB1dFtpcCsrXSkgPiAwOykge1xuICAgICAgc3RyW2NpKytdID0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICB9XG4gICAgbWVtYmVyLmNvbW1lbnQgPSBzdHIuam9pbignJyk7XG4gIH1cblxuICAvLyBmaGNyY1xuICBpZiAoKG1lbWJlci5mbGcgJiBabGliLkd6aXAuRmxhZ3NNYXNrLkZIQ1JDKSA+IDApIHtcbiAgICBtZW1iZXIuY3JjMTYgPSBabGliLkNSQzMyLmNhbGMoaW5wdXQsIDAsIGlwKSAmIDB4ZmZmZjtcbiAgICBpZiAobWVtYmVyLmNyYzE2ICE9PSAoaW5wdXRbaXArK10gfCAoaW5wdXRbaXArK10gPDwgOCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaGVhZGVyIGNyYzE2Jyk7XG4gICAgfVxuICB9XG5cbiAgLy8gaXNpemUg44KS5LqL5YmN44Gr5Y+W5b6X44GZ44KL44Go5bGV6ZaL5b6M44Gu44K144Kk44K644GM5YiG44GL44KL44Gf44KB44CBXG4gIC8vIGluZmxhdGXlh6bnkIbjga7jg5Djg4Pjg5XjgqHjgrXjgqTjgrrjgYzkuovliY3jgavliIbjgYvjgorjgIHpq5jpgJ/jgavjgarjgotcbiAgaXNpemUgPSAoaW5wdXRbaW5wdXQubGVuZ3RoIC0gNF0pICAgICAgIHwgKGlucHV0W2lucHV0Lmxlbmd0aCAtIDNdIDw8IDgpIHxcbiAgICAgICAgICAoaW5wdXRbaW5wdXQubGVuZ3RoIC0gMl0gPDwgMTYpIHwgKGlucHV0W2lucHV0Lmxlbmd0aCAtIDFdIDw8IDI0KTtcblxuICAvLyBpc2l6ZSDjga7lpqXlvZPmgKfjg4Hjgqfjg4Pjgq9cbiAgLy8g44OP44OV44Oe44Oz56ym5Y+344Gn44Gv5pyA5bCPIDItYml0IOOBruOBn+OCgeOAgeacgOWkp+OBpyAxLzQg44Gr44Gq44KLXG4gIC8vIExaNzcg56ym5Y+344Gn44GvIOmVt+OBleOBqOi3nemboiAyLUJ5dGUg44Gn5pyA5aSnIDI1OC1CeXRlIOOCkuihqOePvuOBp+OBjeOCi+OBn+OCgeOAgVxuICAvLyAxLzEyOCDjgavjgarjgovjgajjgZnjgotcbiAgLy8g44GT44GT44GL44KJ5YWl5Yqb44OQ44OD44OV44Kh44Gu5q6L44KK44GMIGlzaXplIOOBriA1MTIg5YCN5Lul5LiK44Gg44Gj44Gf44KJXG4gIC8vIOOCteOCpOOCuuaMh+WumuOBruODkOODg+ODleOCoeeiuuS/neOBr+ihjOOCj+OBquOBhOS6i+OBqOOBmeOCi1xuICBpZiAoaW5wdXQubGVuZ3RoIC0gaXAgLSAvKiBDUkMtMzIgKi80IC0gLyogSVNJWkUgKi80IDwgaXNpemUgKiA1MTIpIHtcbiAgICBpbmZsZW4gPSBpc2l6ZTtcbiAgfVxuXG4gIC8vIGNvbXByZXNzZWQgYmxvY2tcbiAgcmF3aW5mbGF0ZSA9IG5ldyBabGliLlJhd0luZmxhdGUoaW5wdXQsIHsnaW5kZXgnOiBpcCwgJ2J1ZmZlclNpemUnOiBpbmZsZW59KTtcbiAgbWVtYmVyLmRhdGEgPSBpbmZsYXRlZCA9IHJhd2luZmxhdGUuZGVjb21wcmVzcygpO1xuICBpcCA9IHJhd2luZmxhdGUuaXA7XG5cbiAgLy8gY3JjMzJcbiAgbWVtYmVyLmNyYzMyID0gY3JjMzIgPVxuICAgICgoaW5wdXRbaXArK10pICAgICAgIHwgKGlucHV0W2lwKytdIDw8IDgpIHxcbiAgICAgKGlucHV0W2lwKytdIDw8IDE2KSB8IChpbnB1dFtpcCsrXSA8PCAyNCkpID4+PiAwO1xuICBpZiAoWmxpYi5DUkMzMi5jYWxjKGluZmxhdGVkKSAhPT0gY3JjMzIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgQ1JDLTMyIGNoZWNrc3VtOiAweCcgK1xuICAgICAgICBabGliLkNSQzMyLmNhbGMoaW5mbGF0ZWQpLnRvU3RyaW5nKDE2KSArICcgLyAweCcgKyBjcmMzMi50b1N0cmluZygxNikpO1xuICB9XG5cbiAgLy8gaW5wdXQgc2l6ZVxuICBtZW1iZXIuaXNpemUgPSBpc2l6ZSA9XG4gICAgKChpbnB1dFtpcCsrXSkgICAgICAgfCAoaW5wdXRbaXArK10gPDwgOCkgfFxuICAgICAoaW5wdXRbaXArK10gPDwgMTYpIHwgKGlucHV0W2lwKytdIDw8IDI0KSkgPj4+IDA7XG4gIGlmICgoaW5mbGF0ZWQubGVuZ3RoICYgMHhmZmZmZmZmZikgIT09IGlzaXplKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGlucHV0IHNpemU6ICcgK1xuICAgICAgICAoaW5mbGF0ZWQubGVuZ3RoICYgMHhmZmZmZmZmZikgKyAnIC8gJyArIGlzaXplKTtcbiAgfVxuXG4gIHRoaXMubWVtYmVyLnB1c2gobWVtYmVyKTtcbiAgdGhpcy5pcCA9IGlwO1xufTtcblxuLyoqXG4gKiDjgrXjg5bjg5XjgqPjg7zjg6vjg4njga7jg4fjgrPjg7zjg4lcbiAqIFhYWDog54++5Zyo44Gv5L2V44KC44Gb44Ga44K544Kt44OD44OX44GZ44KLXG4gKi9cblpsaWIuR3VuemlwLnByb3RvdHlwZS5kZWNvZGVTdWJGaWVsZCA9IGZ1bmN0aW9uKGlwLCBsZW5ndGgpIHtcbiAgcmV0dXJuIGlwICsgbGVuZ3RoO1xufTtcblxuLyoqXG4gKiBAcmV0dXJuIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfVxuICovXG5abGliLkd1bnppcC5wcm90b3R5cGUuY29uY2F0TWVtYmVyID0gZnVuY3Rpb24oKSB7XG4gIC8qKiBAdHlwZSB7QXJyYXkuPFpsaWIuR3VuemlwTWVtYmVyPn0gKi9cbiAgdmFyIG1lbWJlciA9IHRoaXMubWVtYmVyO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgaWw7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgcCA9IDA7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgc2l6ZSA9IDA7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cbiAgdmFyIGJ1ZmZlcjtcblxuICBmb3IgKGkgPSAwLCBpbCA9IG1lbWJlci5sZW5ndGg7IGkgPCBpbDsgKytpKSB7XG4gICAgc2l6ZSArPSBtZW1iZXJbaV0uZGF0YS5sZW5ndGg7XG4gIH1cblxuICBpZiAoVVNFX1RZUEVEQVJSQVkpIHtcbiAgICBidWZmZXIgPSBuZXcgVWludDhBcnJheShzaXplKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgaWw7ICsraSkge1xuICAgICAgYnVmZmVyLnNldChtZW1iZXJbaV0uZGF0YSwgcCk7XG4gICAgICBwICs9IG1lbWJlcltpXS5kYXRhLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYnVmZmVyID0gW107XG4gICAgZm9yIChpID0gMDsgaSA8IGlsOyArK2kpIHtcbiAgICAgIGJ1ZmZlcltpXSA9IG1lbWJlcltpXS5kYXRhO1xuICAgIH1cbiAgICBidWZmZXIgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBidWZmZXIpO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZmZlcjtcbn07XG5cbn0pO1xuLyogdmltOnNldCBleHBhbmR0YWIgdHM9MiBzdz0yIHR3PTgwOiAqL1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEFkbGVyMzIgY2hlY2tzdW0g5a6f6KOFLlxuICovXG5nb29nLnByb3ZpZGUoJ1psaWIuQWRsZXIzMicpO1xuXG5nb29nLnJlcXVpcmUoJ1VTRV9UWVBFREFSUkFZJyk7XG5nb29nLnJlcXVpcmUoJ1psaWIuVXRpbCcpO1xuXG5nb29nLnNjb3BlKGZ1bmN0aW9uKCkge1xuXG4vKipcbiAqIEFkbGVyMzIg44OP44OD44K344Ol5YCk44Gu5L2c5oiQXG4gKiBAcGFyYW0geyEoQXJyYXl8VWludDhBcnJheXxzdHJpbmcpfSBhcnJheSDnrpflh7rjgavkvb/nlKjjgZnjgosgYnl0ZSBhcnJheS5cbiAqIEByZXR1cm4ge251bWJlcn0gQWRsZXIzMiDjg4/jg4Pjgrfjg6XlgKQuXG4gKi9cblpsaWIuQWRsZXIzMiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gIGlmICh0eXBlb2YoYXJyYXkpID09PSAnc3RyaW5nJykge1xuICAgIGFycmF5ID0gWmxpYi5VdGlsLnN0cmluZ1RvQnl0ZUFycmF5KGFycmF5KTtcbiAgfVxuICByZXR1cm4gWmxpYi5BZGxlcjMyLnVwZGF0ZSgxLCBhcnJheSk7XG59O1xuXG4vKipcbiAqIEFkbGVyMzIg44OP44OD44K344Ol5YCk44Gu5pu05pawXG4gKiBAcGFyYW0ge251bWJlcn0gYWRsZXIg54++5Zyo44Gu44OP44OD44K344Ol5YCkLlxuICogQHBhcmFtIHshKEFycmF5fFVpbnQ4QXJyYXkpfSBhcnJheSDmm7TmlrDjgavkvb/nlKjjgZnjgosgYnl0ZSBhcnJheS5cbiAqIEByZXR1cm4ge251bWJlcn0gQWRsZXIzMiDjg4/jg4Pjgrfjg6XlgKQuXG4gKi9cblpsaWIuQWRsZXIzMi51cGRhdGUgPSBmdW5jdGlvbihhZGxlciwgYXJyYXkpIHtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBzMSA9IGFkbGVyICYgMHhmZmZmO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIHMyID0gKGFkbGVyID4+PiAxNikgJiAweGZmZmY7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBhcnJheSBsZW5ndGggKi9cbiAgdmFyIGxlbiA9IGFycmF5Lmxlbmd0aDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgbGVuZ3RoIChkb24ndCBvdmVyZmxvdykgKi9cbiAgdmFyIHRsZW47XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBhcnJheSBpbmRleCAqL1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGxlbiA+IDApIHtcbiAgICB0bGVuID0gbGVuID4gWmxpYi5BZGxlcjMyLk9wdGltaXphdGlvblBhcmFtZXRlciA/XG4gICAgICBabGliLkFkbGVyMzIuT3B0aW1pemF0aW9uUGFyYW1ldGVyIDogbGVuO1xuICAgIGxlbiAtPSB0bGVuO1xuICAgIGRvIHtcbiAgICAgIHMxICs9IGFycmF5W2krK107XG4gICAgICBzMiArPSBzMTtcbiAgICB9IHdoaWxlICgtLXRsZW4pO1xuXG4gICAgczEgJT0gNjU1MjE7XG4gICAgczIgJT0gNjU1MjE7XG4gIH1cblxuICByZXR1cm4gKChzMiA8PCAxNikgfCBzMSkgPj4+IDA7XG59O1xuXG4vKipcbiAqIEFkbGVyMzIg5pyA6YGp5YyW44OR44Op44Oh44O844K/XG4gKiDnj77nirbjgafjga8gMTAyNCDnqIvluqbjgYzmnIDpgakuXG4gKiBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL2FkbGVyLTMyLXNpbXBsZS12cy1vcHRpbWl6ZWQvM1xuICogQGRlZmluZSB7bnVtYmVyfVxuICovXG5abGliLkFkbGVyMzIuT3B0aW1pemF0aW9uUGFyYW1ldGVyID0gMTAyNDtcblxuLy8gZW5kIG9mIHNjb3BlXG59KTtcblxuLyogdmltOnNldCBleHBhbmR0YWIgdHM9MiBzdz0yIHR3PTgwOiAqL1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IOmbkeWkmuOBqumWouaVsOe+pOOCkuOBvuOBqOOCgeOBn+ODouOCuOODpeODvOODq+Wun+ijhS5cbiAqL1xuZ29vZy5wcm92aWRlKCdabGliLlV0aWwnKTtcblxuZ29vZy5zY29wZShmdW5jdGlvbigpIHtcblxuLyoqXG4gKiBCeXRlIFN0cmluZyDjgYvjgokgQnl0ZSBBcnJheSDjgavlpInmj5suXG4gKiBAcGFyYW0geyFzdHJpbmd9IHN0ciBieXRlIHN0cmluZy5cbiAqIEByZXR1cm4geyFBcnJheS48bnVtYmVyPn0gYnl0ZSBhcnJheS5cbiAqL1xuWmxpYi5VdGlsLnN0cmluZ1RvQnl0ZUFycmF5ID0gZnVuY3Rpb24oc3RyKSB7XG4gIC8qKiBAdHlwZSB7IUFycmF5Ljwoc3RyaW5nfG51bWJlcik+fSAqL1xuICB2YXIgdG1wID0gc3RyLnNwbGl0KCcnKTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBpO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGlsO1xuXG4gIGZvciAoaSA9IDAsIGlsID0gdG1wLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcbiAgICB0bXBbaV0gPSAodG1wW2ldLmNoYXJDb2RlQXQoMCkgJiAweGZmKSA+Pj4gMDtcbiAgfVxuXG4gIHJldHVybiB0bXA7XG59O1xuXG4vLyBlbmQgb2Ygc2NvcGVcbn0pO1xuXG4vKiB2aW06c2V0IGV4cGFuZHRhYiB0cz0yIHN3PTIgdHc9ODA6ICovXG4iLCJnb29nLnByb3ZpZGUoJ1psaWIuSW5mbGF0ZScpO1xuXG5nb29nLnJlcXVpcmUoJ1VTRV9UWVBFREFSUkFZJyk7XG5nb29nLnJlcXVpcmUoJ1psaWIuQWRsZXIzMicpO1xuZ29vZy5yZXF1aXJlKCdabGliLlJhd0luZmxhdGUnKTtcblxuZ29vZy5zY29wZShmdW5jdGlvbigpIHtcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7IShVaW50OEFycmF5fEFycmF5KX0gaW5wdXQgZGVmbGF0ZWQgYnVmZmVyLlxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfcGFyYW1zIG9wdGlvbiBwYXJhbWV0ZXJzLlxuICpcbiAqIG9wdF9wYXJhbXMg44Gv5Lul5LiL44Gu44OX44Ot44OR44OG44Kj44KS5oyH5a6a44GZ44KL5LqL44GM44Gn44GN44G+44GZ44CCXG4gKiAgIC0gaW5kZXg6IGlucHV0IGJ1ZmZlciDjga4gZGVmbGF0ZSDjgrPjg7Pjg4bjg4rjga7plovlp4vkvY3nva4uXG4gKiAgIC0gYmxvY2tTaXplOiDjg5Djg4Pjg5XjgqHjga7jg5bjg63jg4Pjgq/jgrXjgqTjgrouXG4gKiAgIC0gdmVyaWZ5OiDkvLjlvLXjgYzntYLjgo/jgaPjgZ/lvowgYWRsZXItMzIgY2hlY2tzdW0g44Gu5qSc6Ki844KS6KGM44GG44GLLlxuICogICAtIGJ1ZmZlclR5cGU6IFpsaWIuSW5mbGF0ZS5CdWZmZXJUeXBlIOOBruWApOOBq+OCiOOBo+OBpuODkOODg+ODleOCoeOBrueuoeeQhuaWueazleOCkuaMh+WumuOBmeOCiy5cbiAqICAgICAgIFpsaWIuSW5mbGF0ZS5CdWZmZXJUeXBlIOOBryBabGliLlJhd0luZmxhdGUuQnVmZmVyVHlwZSDjga7jgqjjgqTjg6rjgqLjgrkuXG4gKi9cblpsaWIuSW5mbGF0ZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRfcGFyYW1zKSB7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgYnVmZmVyU2l6ZTtcbiAgLyoqIEB0eXBlIHtabGliLkluZmxhdGUuQnVmZmVyVHlwZX0gKi9cbiAgdmFyIGJ1ZmZlclR5cGU7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgY21mO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGZsZztcblxuICAvKiogQHR5cGUgeyEoVWludDhBcnJheXxBcnJheSl9ICovXG4gIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHRoaXMuaXAgPSAwO1xuICAvKiogQHR5cGUge1psaWIuUmF3SW5mbGF0ZX0gKi9cbiAgdGhpcy5yYXdpbmZsYXRlO1xuICAvKiogQHR5cGUgeyhib29sZWFufHVuZGVmaW5lZCl9IHZlcmlmeSBmbGFnLiAqL1xuICB0aGlzLnZlcmlmeTtcblxuICAvLyBvcHRpb24gcGFyYW1ldGVyc1xuICBpZiAob3B0X3BhcmFtcyB8fCAhKG9wdF9wYXJhbXMgPSB7fSkpIHtcbiAgICBpZiAob3B0X3BhcmFtc1snaW5kZXgnXSkge1xuICAgICAgdGhpcy5pcCA9IG9wdF9wYXJhbXNbJ2luZGV4J107XG4gICAgfVxuICAgIGlmIChvcHRfcGFyYW1zWyd2ZXJpZnknXSkge1xuICAgICAgdGhpcy52ZXJpZnkgPSBvcHRfcGFyYW1zWyd2ZXJpZnknXTtcbiAgICB9XG4gIH1cblxuICAvLyBDb21wcmVzc2lvbiBNZXRob2QgYW5kIEZsYWdzXG4gIGNtZiA9IGlucHV0W3RoaXMuaXArK107XG4gIGZsZyA9IGlucHV0W3RoaXMuaXArK107XG5cbiAgLy8gY29tcHJlc3Npb24gbWV0aG9kXG4gIHN3aXRjaCAoY21mICYgMHgwZikge1xuICAgIGNhc2UgWmxpYi5Db21wcmVzc2lvbk1ldGhvZC5ERUZMQVRFOlxuICAgICAgdGhpcy5tZXRob2QgPSBabGliLkNvbXByZXNzaW9uTWV0aG9kLkRFRkxBVEU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCBjb21wcmVzc2lvbiBtZXRob2QnKTtcbiAgfVxuXG4gIC8vIGZjaGVja1xuICBpZiAoKChjbWYgPDwgOCkgKyBmbGcpICUgMzEgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZmNoZWNrIGZsYWc6JyArICgoY21mIDw8IDgpICsgZmxnKSAlIDMxKTtcbiAgfVxuXG4gIC8vIGZkaWN0IChub3Qgc3VwcG9ydGVkKVxuICBpZiAoZmxnICYgMHgyMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZmRpY3QgZmxhZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gIH1cblxuICAvLyBSYXdJbmZsYXRlXG4gIHRoaXMucmF3aW5mbGF0ZSA9IG5ldyBabGliLlJhd0luZmxhdGUoaW5wdXQsIHtcbiAgICAnaW5kZXgnOiB0aGlzLmlwLFxuICAgICdidWZmZXJTaXplJzogb3B0X3BhcmFtc1snYnVmZmVyU2l6ZSddLFxuICAgICdidWZmZXJUeXBlJzogb3B0X3BhcmFtc1snYnVmZmVyVHlwZSddLFxuICAgICdyZXNpemUnOiBvcHRfcGFyYW1zWydyZXNpemUnXVxuICB9KTtcbn1cblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5abGliLkluZmxhdGUuQnVmZmVyVHlwZSA9IFpsaWIuUmF3SW5mbGF0ZS5CdWZmZXJUeXBlO1xuXG4vKipcbiAqIGRlY29tcHJlc3MuXG4gKiBAcmV0dXJuIHshKFVpbnQ4QXJyYXl8QXJyYXkpfSBpbmZsYXRlZCBidWZmZXIuXG4gKi9cblpsaWIuSW5mbGF0ZS5wcm90b3R5cGUuZGVjb21wcmVzcyA9IGZ1bmN0aW9uKCkge1xuICAvKiogQHR5cGUgeyEoQXJyYXl8VWludDhBcnJheSl9IGlucHV0IGJ1ZmZlci4gKi9cbiAgdmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcbiAgLyoqIEB0eXBlIHshKFVpbnQ4QXJyYXl8QXJyYXkpfSBpbmZsYXRlZCBidWZmZXIuICovXG4gIHZhciBidWZmZXI7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBhZGxlci0zMiBjaGVja3N1bSAqL1xuICB2YXIgYWRsZXIzMjtcblxuICBidWZmZXIgPSB0aGlzLnJhd2luZmxhdGUuZGVjb21wcmVzcygpO1xuICB0aGlzLmlwID0gdGhpcy5yYXdpbmZsYXRlLmlwO1xuXG4gIC8vIHZlcmlmeSBhZGxlci0zMlxuICBpZiAodGhpcy52ZXJpZnkpIHtcbiAgICBhZGxlcjMyID0gKFxuICAgICAgaW5wdXRbdGhpcy5pcCsrXSA8PCAyNCB8IGlucHV0W3RoaXMuaXArK10gPDwgMTYgfFxuICAgICAgaW5wdXRbdGhpcy5pcCsrXSA8PCA4IHwgaW5wdXRbdGhpcy5pcCsrXVxuICAgICkgPj4+IDA7XG5cbiAgICBpZiAoYWRsZXIzMiAhPT0gWmxpYi5BZGxlcjMyKGJ1ZmZlcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBhZGxlci0zMiBjaGVja3N1bScpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWZmZXI7XG59O1xuXG4vLyBlbmQgb2Ygc2NvcGVcbn0pO1xuXG4vKiB2aW06c2V0IGV4cGFuZHRhYiB0cz0yIHN3PTIgdHc9ODA6ICovXG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgWmxpYiBuYW1lc3BhY2UuIFpsaWIg44Gu5LuV5qeY44Gr5rqW5oug44GX44Gf5Zyn57iu44GvIFpsaWIuRGVmbGF0ZSDjgaflrp/oo4VcbiAqIOOBleOCjOOBpuOBhOOCiy4g44GT44KM44GvIEluZmxhdGUg44Go44Gu5YWx5a2Y44KS6ICD5oWu44GX44Gm44GE44KL54K6LlxuICovXG5cbmdvb2cucHJvdmlkZSgnWmxpYicpO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmdvb2cuc2NvcGUoZnVuY3Rpb24oKSB7XG5cbi8qKlxuICogQ29tcHJlc3Npb24gTWV0aG9kXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5abGliLkNvbXByZXNzaW9uTWV0aG9kID0ge1xuICBERUZMQVRFOiA4LFxuICBSRVNFUlZFRDogMTVcbn07XG5cbi8vIGVuZCBvZiBzY29wZVxufSk7XG5cbi8qIHZpbTpzZXQgZXhwYW5kdGFiIHRzPTIgc3c9MiB0dz04MDogKi9cbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBEZWZsYXRlIChSRkMxOTUxKSDlrp/oo4UuXG4gKiBEZWZsYXRl44Ki44Or44K044Oq44K644Og5pys5L2T44GvIFpsaWIuUmF3RGVmbGF0ZSDjgaflrp/oo4XjgZXjgozjgabjgYTjgosuXG4gKi9cbmdvb2cucHJvdmlkZSgnWmxpYi5EZWZsYXRlJyk7XG5cbmdvb2cucmVxdWlyZSgnVVNFX1RZUEVEQVJSQVknKTtcbmdvb2cucmVxdWlyZSgnWmxpYicpO1xuZ29vZy5yZXF1aXJlKCdabGliLkFkbGVyMzInKTtcbmdvb2cucmVxdWlyZSgnWmxpYi5SYXdEZWZsYXRlJyk7XG5cbmdvb2cuc2NvcGUoZnVuY3Rpb24oKSB7XG5cbi8qKlxuICogWmxpYiBEZWZsYXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7IShBcnJheXxVaW50OEFycmF5KX0gaW5wdXQg56ym5Y+35YyW44GZ44KL5a++6LGh44GuIGJ5dGUgYXJyYXkuXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF9wYXJhbXMgb3B0aW9uIHBhcmFtZXRlcnMuXG4gKi9cblpsaWIuRGVmbGF0ZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRfcGFyYW1zKSB7XG4gIC8qKiBAdHlwZSB7IShBcnJheXxVaW50OEFycmF5KX0gKi9cbiAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAvKiogQHR5cGUgeyEoQXJyYXl8VWludDhBcnJheSl9ICovXG4gIHRoaXMub3V0cHV0ID1cbiAgICBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KShabGliLkRlZmxhdGUuRGVmYXVsdEJ1ZmZlclNpemUpO1xuICAvKiogQHR5cGUge1psaWIuRGVmbGF0ZS5Db21wcmVzc2lvblR5cGV9ICovXG4gIHRoaXMuY29tcHJlc3Npb25UeXBlID0gWmxpYi5EZWZsYXRlLkNvbXByZXNzaW9uVHlwZS5EWU5BTUlDO1xuICAvKiogQHR5cGUge1psaWIuUmF3RGVmbGF0ZX0gKi9cbiAgdGhpcy5yYXdEZWZsYXRlO1xuICAvKiogQHR5cGUge09iamVjdH0gKi9cbiAgdmFyIHJhd0RlZmxhdGVPcHRpb24gPSB7fTtcbiAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gIHZhciBwcm9wO1xuXG4gIC8vIG9wdGlvbiBwYXJhbWV0ZXJzXG4gIGlmIChvcHRfcGFyYW1zIHx8ICEob3B0X3BhcmFtcyA9IHt9KSkge1xuICAgIGlmICh0eXBlb2Ygb3B0X3BhcmFtc1snY29tcHJlc3Npb25UeXBlJ10gPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLmNvbXByZXNzaW9uVHlwZSA9IG9wdF9wYXJhbXNbJ2NvbXByZXNzaW9uVHlwZSddO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNvcHkgb3B0aW9uc1xuICBmb3IgKHByb3AgaW4gb3B0X3BhcmFtcykge1xuICAgIHJhd0RlZmxhdGVPcHRpb25bcHJvcF0gPSBvcHRfcGFyYW1zW3Byb3BdO1xuICB9XG5cbiAgLy8gc2V0IHJhdy1kZWZsYXRlIG91dHB1dCBidWZmZXJcbiAgcmF3RGVmbGF0ZU9wdGlvblsnb3V0cHV0QnVmZmVyJ10gPSB0aGlzLm91dHB1dDtcblxuICB0aGlzLnJhd0RlZmxhdGUgPSBuZXcgWmxpYi5SYXdEZWZsYXRlKHRoaXMuaW5wdXQsIHJhd0RlZmxhdGVPcHRpb24pO1xufTtcblxuLyoqXG4gKiBAY29uc3RcbiAqIEB0eXBlIHtudW1iZXJ9IOODh+ODleOCqeODq+ODiOODkOODg+ODleOCoeOCteOCpOOCui5cbiAqL1xuWmxpYi5EZWZsYXRlLkRlZmF1bHRCdWZmZXJTaXplID0gMHg4MDAwO1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cblpsaWIuRGVmbGF0ZS5Db21wcmVzc2lvblR5cGUgPSBabGliLlJhd0RlZmxhdGUuQ29tcHJlc3Npb25UeXBlO1xuXG4vKipcbiAqIOebtOaOpeWcp+e4ruOBq+aOm+OBkeOCiy5cbiAqIEBwYXJhbSB7IShBcnJheXxVaW50OEFycmF5KX0gaW5wdXQgdGFyZ2V0IGJ1ZmZlci5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X3BhcmFtcyBvcHRpb24gcGFyYW1ldGVycy5cbiAqIEByZXR1cm4geyEoQXJyYXl8VWludDhBcnJheSl9IGNvbXByZXNzZWQgZGF0YSBieXRlIGFycmF5LlxuICovXG5abGliLkRlZmxhdGUuY29tcHJlc3MgPSBmdW5jdGlvbihpbnB1dCwgb3B0X3BhcmFtcykge1xuICByZXR1cm4gKG5ldyBabGliLkRlZmxhdGUoaW5wdXQsIG9wdF9wYXJhbXMpKS5jb21wcmVzcygpO1xufTtcblxuLyoqXG4gKiBEZWZsYXRlIENvbXByZXNzaW9uLlxuICogQHJldHVybiB7IShBcnJheXxVaW50OEFycmF5KX0gY29tcHJlc3NlZCBkYXRhIGJ5dGUgYXJyYXkuXG4gKi9cblpsaWIuRGVmbGF0ZS5wcm90b3R5cGUuY29tcHJlc3MgPSBmdW5jdGlvbigpIHtcbiAgLyoqIEB0eXBlIHtabGliLkNvbXByZXNzaW9uTWV0aG9kfSAqL1xuICB2YXIgY207XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgY2luZm87XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgY21mO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGZsZztcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBmY2hlY2s7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgZmRpY3Q7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgZmxldmVsO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGNsZXZlbDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBhZGxlcjtcbiAgLyoqIEB0eXBlIHtib29sZWFufSAqL1xuICB2YXIgZXJyb3IgPSBmYWxzZTtcbiAgLyoqIEB0eXBlIHshKEFycmF5fFVpbnQ4QXJyYXkpfSAqL1xuICB2YXIgb3V0cHV0O1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIHBvcyA9IDA7XG5cbiAgb3V0cHV0ID0gdGhpcy5vdXRwdXQ7XG5cbiAgLy8gQ29tcHJlc3Npb24gTWV0aG9kIGFuZCBGbGFnc1xuICBjbSA9IFpsaWIuQ29tcHJlc3Npb25NZXRob2QuREVGTEFURTtcbiAgc3dpdGNoIChjbSkge1xuICAgIGNhc2UgWmxpYi5Db21wcmVzc2lvbk1ldGhvZC5ERUZMQVRFOlxuICAgICAgY2luZm8gPSBNYXRoLkxPRzJFICogTWF0aC5sb2coWmxpYi5SYXdEZWZsYXRlLldpbmRvd1NpemUpIC0gODtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kJyk7XG4gIH1cbiAgY21mID0gKGNpbmZvIDw8IDQpIHwgY207XG4gIG91dHB1dFtwb3MrK10gPSBjbWY7XG5cbiAgLy8gRmxhZ3NcbiAgZmRpY3QgPSAwO1xuICBzd2l0Y2ggKGNtKSB7XG4gICAgY2FzZSBabGliLkNvbXByZXNzaW9uTWV0aG9kLkRFRkxBVEU6XG4gICAgICBzd2l0Y2ggKHRoaXMuY29tcHJlc3Npb25UeXBlKSB7XG4gICAgICAgIGNhc2UgWmxpYi5EZWZsYXRlLkNvbXByZXNzaW9uVHlwZS5OT05FOiBmbGV2ZWwgPSAwOyBicmVhaztcbiAgICAgICAgY2FzZSBabGliLkRlZmxhdGUuQ29tcHJlc3Npb25UeXBlLkZJWEVEOiBmbGV2ZWwgPSAxOyBicmVhaztcbiAgICAgICAgY2FzZSBabGliLkRlZmxhdGUuQ29tcHJlc3Npb25UeXBlLkRZTkFNSUM6IGZsZXZlbCA9IDI7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9ydGVkIGNvbXByZXNzaW9uIHR5cGUnKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kJyk7XG4gIH1cbiAgZmxnID0gKGZsZXZlbCA8PCA2KSB8IChmZGljdCA8PCA1KTtcbiAgZmNoZWNrID0gMzEgLSAoY21mICogMjU2ICsgZmxnKSAlIDMxO1xuICBmbGcgfD0gZmNoZWNrO1xuICBvdXRwdXRbcG9zKytdID0gZmxnO1xuXG4gIC8vIEFkbGVyLTMyIGNoZWNrc3VtXG4gIGFkbGVyID0gWmxpYi5BZGxlcjMyKHRoaXMuaW5wdXQpO1xuXG4gIHRoaXMucmF3RGVmbGF0ZS5vcCA9IHBvcztcbiAgb3V0cHV0ID0gdGhpcy5yYXdEZWZsYXRlLmNvbXByZXNzKCk7XG4gIHBvcyA9IG91dHB1dC5sZW5ndGg7XG5cbiAgaWYgKFVTRV9UWVBFREFSUkFZKSB7XG4gICAgLy8gc3ViYXJyYXkg5YiG44KS5YWD44Gr44KC44Gp44GZXG4gICAgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkob3V0cHV0LmJ1ZmZlcik7XG4gICAgLy8gZXhwYW5kIGJ1ZmZlclxuICAgIGlmIChvdXRwdXQubGVuZ3RoIDw9IHBvcyArIDQpIHtcbiAgICAgIHRoaXMub3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkob3V0cHV0Lmxlbmd0aCArIDQpO1xuICAgICAgdGhpcy5vdXRwdXQuc2V0KG91dHB1dCk7XG4gICAgICBvdXRwdXQgPSB0aGlzLm91dHB1dDtcbiAgICB9XG4gICAgb3V0cHV0ID0gb3V0cHV0LnN1YmFycmF5KDAsIHBvcyArIDQpO1xuICB9XG5cbiAgLy8gYWRsZXIzMlxuICBvdXRwdXRbcG9zKytdID0gKGFkbGVyID4+IDI0KSAmIDB4ZmY7XG4gIG91dHB1dFtwb3MrK10gPSAoYWRsZXIgPj4gMTYpICYgMHhmZjtcbiAgb3V0cHV0W3BvcysrXSA9IChhZGxlciA+PiAgOCkgJiAweGZmO1xuICBvdXRwdXRbcG9zKytdID0gKGFkbGVyICAgICAgKSAmIDB4ZmY7XG5cbiAgcmV0dXJuIG91dHB1dDtcbn07XG5cbi8vIGVuZCBvZiBzY29wZVxufSk7XG5cbi8qIHZpbTpzZXQgZXhwYW5kdGFiIHRzPTIgc3c9MiB0dz04MDogKi9cbiIsIi8qKlxuICogemxpYi5qcyB3cmFwcGVyIGZvciBub2RlLmpzXG4gKi9cbmdvb2cucmVxdWlyZSgnWmxpYi5JbmZsYXRlJyk7XG5nb29nLnJlcXVpcmUoJ1psaWIuRGVmbGF0ZScpO1xuZ29vZy5yZXF1aXJlKCdabGliLkd1bnppcCcpO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBleHBvcnRzIG1ldGhvZHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydHNbJ2RlZmxhdGUnXSA9IGRlZmxhdGU7XG5leHBvcnRzWydkZWZsYXRlU3luYyddID0gZGVmbGF0ZVN5bmM7XG5leHBvcnRzWydpbmZsYXRlJ10gPSBpbmZsYXRlO1xuZXhwb3J0c1snaW5mbGF0ZVN5bmMnXSA9IGluZmxhdGVTeW5jO1xuZXhwb3J0c1snZ3ppcCddID0gZ3ppcDtcbmV4cG9ydHNbJ2d6aXBTeW5jJ10gPSBnemlwU3luYztcbmV4cG9ydHNbJ2d1bnppcCddID0gZ3VuemlwO1xuZXhwb3J0c1snZ3VuemlwU3luYyddID0gZ3VuemlwU3luYztcblxuXG4vKipcbiAqIGRlZmxhdGUgYXN5bmMuXG4gKiBAcGFyYW0geyEoQnVmZmVyfEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBidWZmZXIgcGxhaW4gZGF0YSBidWZmZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKEVycm9yLCAhKEJ1ZmZlcnxBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KSl9IGNhbGxiYWNrXG4gKiAgICAgZXJyb3IgY2FsbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfcGFyYW1zIG9wdGlvbiBwYXJhbWV0ZXJzLlxuICovXG5mdW5jdGlvbiBkZWZsYXRlKGJ1ZmZlciwgY2FsbGJhY2ssIG9wdF9wYXJhbXMpIHtcbiAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe1xuICAgIC8qKiBAdHlwZSB7RXJyb3J9IGVycm9yICovXG4gICAgdmFyIGVycm9yO1xuICAgIC8qKiBAdHlwZSB7IShCdWZmZXJ8QXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGRlZmxhdGVkIGJ1ZmZlci4gKi9cbiAgICB2YXIgZGVmbGF0ZWQ7XG5cbiAgICB0cnkge1xuICAgICAgZGVmbGF0ZWQgPSBkZWZsYXRlU3luYyhidWZmZXIsIG9wdF9wYXJhbXMpO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICBlcnJvciA9IGU7XG4gICAgfVxuXG4gICAgY2FsbGJhY2soZXJyb3IsIGRlZmxhdGVkKTtcbiAgfSk7XG59XG5cblxuLyoqXG4gKiBkZWZsYXRlIHN5bmMuXG4gKiBAcGFyYW0geyEoQnVmZmVyfEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBidWZmZXIgcGxhaW4gZGF0YSBidWZmZXIuXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF9wYXJhbXMgb3B0aW9uIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJuIHshKEJ1ZmZlcnxBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gZGVmbGF0ZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBkZWZsYXRlU3luYyhidWZmZXIsIG9wdF9wYXJhbXMpIHtcbiAgLyoqIEB0eXBlIHtabGliLkRlZmxhdGV9IGRlZmxhdGUgZW5jb2Rlci4gKi9cbiAgdmFyIGRlZmxhdGUgPSBuZXcgWmxpYi5EZWZsYXRlKFxuICAgIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi8oYnVmZmVyKVxuICApO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGRlZmxhdGVkIGJ1ZmZlci4gKi9cbiAgdmFyIGRlZmxhdGVkO1xuXG4gIGRlZmxhdGVkID0gZGVmbGF0ZS5jb21wcmVzcygpO1xuXG4gIGlmICghb3B0X3BhcmFtcykge1xuICAgIG9wdF9wYXJhbXMgPSB7fTtcbiAgfVxuXG4gIHJldHVybiBvcHRfcGFyYW1zLm5vQnVmZmVyID8gZGVmbGF0ZWQgOiB0b0J1ZmZlcihkZWZsYXRlZCk7XG59XG5cblxuLyoqXG4gKiBpbmZsYXRlIGFzeW5jLlxuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBidWZmZXIgZGVmbGF0ZWQgYnVmZmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbihFcnJvciwgIShCdWZmZXJ8QXJyYXkuPG51bWJlcj58VWludDhBcnJheSkpfSBjYWxsYmFja1xuICogICAgIGVycm9yIGNhbGxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X3BhcmFtcyBvcHRpb24gcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gaW5mbGF0ZShidWZmZXIsIGNhbGxiYWNrLCBvcHRfcGFyYW1zKSB7XG4gIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtcbiAgICAvKiogQHR5cGUge0Vycm9yfSBlcnJvciAqL1xuICAgIHZhciBlcnJvcjtcbiAgICAvKiogQHR5cGUgeyEoQnVmZmVyfEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBpbmZsYXRlZCBwbGFpbiBidWZmZXIuICovXG4gICAgdmFyIGluZmxhdGVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGluZmxhdGVkID0gaW5mbGF0ZVN5bmMoYnVmZmVyLCBvcHRfcGFyYW1zKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgZXJyb3IgPSBlO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKGVycm9yLCBpbmZsYXRlZCk7XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIGluZmxhdGUgc3luYy5cbiAqIEBwYXJhbSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gYnVmZmVyIGRlZmxhdGVkIGJ1ZmZlci5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X3BhcmFtcyBvcHRpb24gcGFyYW1ldGVycy5cbiAqIEByZXR1cm4geyEoQnVmZmVyfEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBpbmZsYXRlZCBwbGFpbiBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGluZmxhdGVTeW5jKGJ1ZmZlciwgb3B0X3BhcmFtcykge1xuICAvKiogQHR5cGUge1psaWIuSW5mbGF0ZX0gZGVmbGF0ZSBkZWNvZGVyLiAqL1xuICB2YXIgaW5mbGF0ZTtcbiAgLyoqIEB0eXBlIHshKEJ1ZmZlcnxBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gaW5mbGF0ZWQgcGxhaW4gYnVmZmVyLiAqL1xuICB2YXIgaW5mbGF0ZWQ7XG5cbiAgYnVmZmVyLnN1YmFycmF5ID0gYnVmZmVyLnNsaWNlO1xuICBpbmZsYXRlID0gbmV3IFpsaWIuSW5mbGF0ZShidWZmZXIpO1xuICBpbmZsYXRlZCA9IGluZmxhdGUuZGVjb21wcmVzcygpO1xuXG4gIGlmICghb3B0X3BhcmFtcykge1xuICAgIG9wdF9wYXJhbXMgPSB7fTtcbiAgfVxuXG4gIHJldHVybiBvcHRfcGFyYW1zWydub0J1ZmZlciddID8gaW5mbGF0ZWQgOiB0b0J1ZmZlcihpbmZsYXRlZCk7XG59XG5cbi8qKlxuICogZ3VuemlwIGFzeW5jLlxuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBidWZmZXIgaW5mbGF0ZWQgYnVmZmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbihFcnJvciwgIShCdWZmZXJ8QXJyYXkuPG51bWJlcj58VWludDhBcnJheSkpfSBjYWxsYmFja1xuICogICAgIGVycm9yIGNhbGxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X3BhcmFtcyBvcHRpb24gcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gZ3ppcChidWZmZXIsIGNhbGxiYWNrLCBvcHRfcGFyYW1zKSB7XG4gIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtcbiAgICAvKiogQHR5cGUge0Vycm9yfSBlcnJvciAqL1xuICAgIHZhciBlcnJvcjtcbiAgICAvKiogQHR5cGUgeyEoQnVmZmVyfEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBkZWZsYXRlZCBidWZmZXIuICovXG4gICAgdmFyIGRlZmxhdGVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGRlZmxhdGVkID0gZ3ppcFN5bmMoYnVmZmVyLCBvcHRfcGFyYW1zKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgZXJyb3IgPSBlO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKGVycm9yLCBkZWZsYXRlZCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIGRlZmxhdGUgc3luYy5cbiAqIEBwYXJhbSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gYnVmZmVyIGluZmxhdGVkIGJ1ZmZlci5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X3BhcmFtcyBvcHRpb24gcGFyYW1ldGVycy5cbiAqIEByZXR1cm4geyEoQnVmZmVyfEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBkZWZsYXRlZCBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGd6aXBTeW5jKGJ1ZmZlciwgb3B0X3BhcmFtcykge1xuICAvKiogQHR5cGUge1psaWIuR3ppcH0gZGVmbGF0ZSBjb21wcmVzc29yLiAqL1xuICB2YXIgZGVmbGF0ZTtcbiAgLyoqIEB0eXBlIHshKEJ1ZmZlcnxBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gZGVmbGF0ZWQgYnVmZmVyLiAqL1xuICB2YXIgZGVmbGF0ZWQ7XG5cbiAgYnVmZmVyLnN1YmFycmF5ID0gYnVmZmVyLnNsaWNlO1xuICBkZWZsYXRlID0gbmV3IFpsaWIuR3ppcChidWZmZXIpO1xuICBkZWZsYXRlZCA9IGRlZmxhdGUuY29tcHJlc3MoKTtcblxuICBpZiAoIW9wdF9wYXJhbXMpIHtcbiAgICBvcHRfcGFyYW1zID0ge307XG4gIH1cblxuICByZXR1cm4gb3B0X3BhcmFtcy5ub0J1ZmZlciA/IGRlZmxhdGVkIDogdG9CdWZmZXIoZGVmbGF0ZWQpO1xufVxuXG4vKipcbiAqIGd1bnppcCBhc3luYy5cbiAqIEBwYXJhbSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gYnVmZmVyIGRlZmxhdGVkIGJ1ZmZlci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oRXJyb3IsICEoQnVmZmVyfEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpKX0gY2FsbGJhY2tcbiAqICAgICBlcnJvciBjYWxsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF9wYXJhbXMgb3B0aW9uIHBhcmFtZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIGd1bnppcChidWZmZXIsIGNhbGxiYWNrLCBvcHRfcGFyYW1zKSB7XG4gIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtcbiAgICAvKiogQHR5cGUge0Vycm9yfSBlcnJvciAqL1xuICAgIHZhciBlcnJvcjtcbiAgICAvKiogQHR5cGUgeyEoQnVmZmVyfEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBpbmZsYXRlZCBwbGFpbiBidWZmZXIuICovXG4gICAgdmFyIGluZmxhdGVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGluZmxhdGVkID0gZ3VuemlwU3luYyhidWZmZXIsIG9wdF9wYXJhbXMpO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICBlcnJvciA9IGU7XG4gICAgfVxuXG4gICAgY2FsbGJhY2soZXJyb3IsIGluZmxhdGVkKTtcbiAgfSk7XG59XG5cbi8qKlxuICogaW5mbGF0ZSBzeW5jLlxuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBidWZmZXIgZGVmbGF0ZWQgYnVmZmVyLlxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfcGFyYW1zIG9wdGlvbiBwYXJhbWV0ZXJzLlxuICogQHJldHVybiB7IShCdWZmZXJ8QXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGluZmxhdGVkIHBsYWluIGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gZ3VuemlwU3luYyhidWZmZXIsIG9wdF9wYXJhbXMpIHtcbiAgLyoqIEB0eXBlIHtabGliLkd1bnppcH0gZGVmbGF0ZSBkZWNvbXByZXNzb3IuICovXG4gIHZhciBpbmZsYXRlO1xuICAvKiogQHR5cGUgeyEoQnVmZmVyfEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBpbmZsYXRlZCBwbGFpbiBidWZmZXIuICovXG4gIHZhciBpbmZsYXRlZDtcblxuICBidWZmZXIuc3ViYXJyYXkgPSBidWZmZXIuc2xpY2U7XG4gIGluZmxhdGUgPSBuZXcgWmxpYi5HdW56aXAoYnVmZmVyKTtcbiAgaW5mbGF0ZWQgPSBpbmZsYXRlLmRlY29tcHJlc3MoKTtcblxuICBpZiAoIW9wdF9wYXJhbXMpIHtcbiAgICBvcHRfcGFyYW1zID0ge307XG4gIH1cblxuICByZXR1cm4gb3B0X3BhcmFtcy5ub0J1ZmZlciA/IGluZmxhdGVkIDogdG9CdWZmZXIoaW5mbGF0ZWQpO1xufVxuXG5cbi8qKlxuICogY29udmVydCB0byBCdWZmZXIuXG4gKiBAcGFyYW0geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGFycmF5IGFycmF5bGlrZSBvYmplY3QuXG4gKiBAcmV0dXJuIHshQnVmZmVyfSBCdWZmZXIgb2JqZWN0LlxuICovXG5mdW5jdGlvbiB0b0J1ZmZlcihhcnJheSkge1xuICB2YXIgYnVmZmVyID0gbmV3IEJ1ZmZlcihhcnJheS5sZW5ndGgpO1xuICB2YXIgaTtcbiAgdmFyIGlsO1xuXG4gIC8vIFRPRE86IGxvb3AgdW5yb2xsaW5nIGZvciBwZXJmb3JtYW5jZVxuICBmb3IgKGkgPSAwLCBpbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcbiAgICBidWZmZXJbaV0gPSBhcnJheVtpXTtcbiAgfVxuXG4gIHJldHVybiBidWZmZXI7XG59XG5cbiJdfQ==