2 lines
324 KiB
JavaScript
2 lines
324 KiB
JavaScript
(()=>{"use strict";var t={729:t=>{var e=Object.prototype.hasOwnProperty,s="~";function i(){}function n(t,e,s){this.fn=t,this.context=e,this.once=s||!1}function a(t,e,i,a,h){if("function"!=typeof i)throw new TypeError("The listener must be a function");var r=new n(i,a||t,h),u=s?s+e:e;return t._events[u]?t._events[u].fn?t._events[u]=[t._events[u],r]:t._events[u].push(r):(t._events[u]=r,t._eventsCount++),t}function h(t,e){0==--t._eventsCount?t._events=new i:delete t._events[e]}function r(){this._events=new i,this._eventsCount=0}Object.create&&(i.prototype=Object.create(null),(new i).__proto__||(s=!1)),r.prototype.eventNames=function(){var t,i,n=[];if(0===this._eventsCount)return n;for(i in t=this._events)e.call(t,i)&&n.push(s?i.slice(1):i);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(t)):n},r.prototype.listeners=function(t){var e=s?s+t:t,i=this._events[e];if(!i)return[];if(i.fn)return[i.fn];for(var n=0,a=i.length,h=new Array(a);n<a;n++)h[n]=i[n].fn;return h},r.prototype.listenerCount=function(t){var e=s?s+t:t,i=this._events[e];return i?i.fn?1:i.length:0},r.prototype.emit=function(t,e,i,n,a,h){var r=s?s+t:t;if(!this._events[r])return!1;var u,l,o=this._events[r],c=arguments.length;if(o.fn){switch(o.once&&this.removeListener(t,o.fn,void 0,!0),c){case 1:return o.fn.call(o.context),!0;case 2:return o.fn.call(o.context,e),!0;case 3:return o.fn.call(o.context,e,i),!0;case 4:return o.fn.call(o.context,e,i,n),!0;case 5:return o.fn.call(o.context,e,i,n,a),!0;case 6:return o.fn.call(o.context,e,i,n,a,h),!0}for(l=1,u=new Array(c-1);l<c;l++)u[l-1]=arguments[l];o.fn.apply(o.context,u)}else{var v,y=o.length;for(l=0;l<y;l++)switch(o[l].once&&this.removeListener(t,o[l].fn,void 0,!0),c){case 1:o[l].fn.call(o[l].context);break;case 2:o[l].fn.call(o[l].context,e);break;case 3:o[l].fn.call(o[l].context,e,i);break;case 4:o[l].fn.call(o[l].context,e,i,n);break;default:if(!u)for(v=1,u=new Array(c-1);v<c;v++)u[v-1]=arguments[v];o[l].fn.apply(o[l].context,u)}}return!0},r.prototype.on=function(t,e,s){return a(this,t,e,s,!1)},r.prototype.once=function(t,e,s){return a(this,t,e,s,!0)},r.prototype.removeListener=function(t,e,i,n){var a=s?s+t:t;if(!this._events[a])return this;if(!e)return h(this,a),this;var r=this._events[a];if(r.fn)r.fn!==e||n&&!r.once||i&&r.context!==i||h(this,a);else{for(var u=0,l=[],o=r.length;u<o;u++)(r[u].fn!==e||n&&!r[u].once||i&&r[u].context!==i)&&l.push(r[u]);l.length?this._events[a]=1===l.length?l[0]:l:h(this,a)}return this},r.prototype.removeAllListeners=function(t){var e;return t?(e=s?s+t:t,this._events[e]&&h(this,e)):(this._events=new i,this._eventsCount=0),this},r.prototype.off=r.prototype.removeListener,r.prototype.addListener=r.prototype.on,r.prefixed=s,r.EventEmitter=r,t.exports=r}},e={};function s(i){var n=e[i];if(void 0!==n)return n.exports;var a=e[i]={exports:{}};return t[i](a,a.exports,s),a.exports}s.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},s.d=(t,e)=>{for(var i in e)s.o(e,i)&&!s.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{const t=new class{constructor(){this.states=new Map}get(t){return this.states.has(t)?this.states.get(t):null}set(t,e){return this.states.set(t,e)}};class e{constructor(){this.inventory=[],this.currentRoom="start",this.context=null}addItem(t){this.inventory.push(t)}removeItem(t){this.inventory=this.inventory.filter((e=>e!=t))}getInventory(){return this.inventory.map((t=>this.context.getItem(t)))}}class i{speak(t){}stop(){}setOptions(t){}}class n extends i{constructor(t={}){super(),this.timeout=100,this.timeout=t.timeout||100,this.init()}init(){this.container=document.createElement("div"),this.container.setAttribute("aria-live","polite"),this.speechDisplay=document.createElement("div"),this.speechDisplay.setAttribute("aria-live","polite"),this.container.append(this.speechDisplay),document.body.appendChild(this.container),document.body.insertBefore(this.container,document.body.firstChild)}speak(t){this.clearDisplay();const e=document.createTextNode(t),s=document.createElement("p");s.appendChild(e),this.speechDisplay.appendChild(s),setTimeout(this.clearDisplay.bind(this),this.timeout)}stop(){this.clearDisplay()}clearDisplay(){this.speechDisplay.innerHTML=""}}class a extends i{}class h{constructor(t=function(t="aria"){return"webtts"===t?a:n}()){this.output=t}speak(t){this.output.speak(t)}stop(){this.output.stop()}}var r=function(t,e,s,i){return new(s||(s=Promise))((function(n,a){function h(t){try{u(i.next(t))}catch(t){a(t)}}function r(t){try{u(i.throw(t))}catch(t){a(t)}}function u(t){var e;t.done?n(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(h,r)}u((i=i.apply(t,e||[])).next())}))};class u{constructor(){this.context=new AudioContext}getContext(){return this.context}createGain(){return this.context.createGain()}getOutputDestination(){return this.context.destination}createBufferSource(){return this.context.createBufferSource()}decodeAudioData(t){return r(this,void 0,void 0,(function*(){return yield this.context.decodeAudioData(t)}))}createPanner(){return this.context.createPanner()}createMediaElementSource(t){return this.context.createMediaElementSource(t)}}var l=s(729),o=s.n(l);class c{constructor(t){this.values=new Float32Array(4),void 0!==t&&(this.xyzw=t)}get x(){return this.values[0]}get y(){return this.values[1]}get z(){return this.values[2]}get w(){return this.values[3]}get xy(){return[this.values[0],this.values[1]]}get xyz(){return[this.values[0],this.values[1],this.values[2]]}get xyzw(){return[this.values[0],this.values[1],this.values[2],this.values[3]]}set x(t){this.values[0]=t}set y(t){this.values[1]=t}set z(t){this.values[2]=t}set w(t){this.values[3]=t}set xy(t){this.values[0]=t[0],this.values[1]=t[1]}set xyz(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]}set xyzw(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2],this.values[3]=t[3]}get r(){return this.values[0]}get g(){return this.values[1]}get b(){return this.values[2]}get a(){return this.values[3]}get rg(){return[this.values[0],this.values[1]]}get rgb(){return[this.values[0],this.values[1],this.values[2]]}get rgba(){return[this.values[0],this.values[1],this.values[2],this.values[3]]}set r(t){this.values[0]=t}set g(t){this.values[1]=t}set b(t){this.values[2]=t}set a(t){this.values[3]=t}set rg(t){this.values[0]=t[0],this.values[1]=t[1]}set rgb(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]}set rgba(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2],this.values[3]=t[3]}at(t){return this.values[t]}reset(){this.x=0,this.y=0,this.z=0,this.w=0}copy(t){return t||(t=new c),t.x=this.x,t.y=this.y,t.z=this.z,t.w=this.w,t}negate(t){return t||(t=this),t.x=-this.x,t.y=-this.y,t.z=-this.z,t.w=-this.w,t}equals(t,e=1e-5){return!(Math.abs(this.x-t.x)>e)&&(!(Math.abs(this.y-t.y)>e)&&(!(Math.abs(this.z-t.z)>e)&&!(Math.abs(this.w-t.w)>e)))}length(){return Math.sqrt(this.squaredLength())}squaredLength(){const t=this.x,e=this.y,s=this.z,i=this.w;return t*t+e*e+s*s+i*i}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}subtract(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}scale(t,e){return e||(e=this),e.x*=t,e.y*=t,e.z*=t,e.w*=t,e}normalize(t){t||(t=this);let e=this.length();return 1===e?this:0===e?(t.x*=0,t.y*=0,t.z*=0,t.w*=0,t):(e=1/e,t.x*=e,t.y*=e,t.z*=e,t.w*=e,t)}multiplyMat4(t,e){return e||(e=this),t.multiplyVec4(this,e)}static mix(t,e,s,i){return i||(i=new c),i.x=t.x+s*(e.x-t.x),i.y=t.y+s*(e.y-t.y),i.z=t.z+s*(e.z-t.z),i.w=t.w+s*(e.w-t.w),i}static sum(t,e,s){return s||(s=new c),s.x=t.x+e.x,s.y=t.y+e.y,s.z=t.z+e.z,s.w=t.w+e.w,s}static difference(t,e,s){return s||(s=new c),s.x=t.x-e.x,s.y=t.y-e.y,s.z=t.z-e.z,s.w=t.w-e.w,s}static product(t,e,s){return s||(s=new c),s.x=t.x*e.x,s.y=t.y*e.y,s.z=t.z*e.z,s.w=t.w*e.w,s}static quotient(t,e,s){return s||(s=new c),s.x=t.x/e.x,s.y=t.y/e.y,s.z=t.z/e.z,s.w=t.w/e.w,s}}c.zero=new c([0,0,0,1]),c.one=new c([1,1,1,1]);class v{constructor(t){this.values=new Float32Array(16),void 0!==t&&this.init(t)}at(t){return this.values[t]}init(t){for(let e=0;e<16;e++)this.values[e]=t[e];return this}reset(){for(let t=0;t<16;t++)this.values[t]=0}copy(t){t||(t=new v);for(let e=0;e<16;e++)t.values[e]=this.values[e];return t}all(){const t=[];for(let e=0;e<16;e++)t[e]=this.values[e];return t}row(t){return[this.values[4*t+0],this.values[4*t+1],this.values[4*t+2],this.values[4*t+3]]}col(t){return[this.values[t],this.values[t+4],this.values[t+8],this.values[t+12]]}equals(t,e=1e-5){for(let s=0;s<16;s++)if(Math.abs(this.values[s]-t.at(s))>e)return!1;return!0}determinant(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],n=this.values[4],a=this.values[5],h=this.values[6],r=this.values[7],u=this.values[8],l=this.values[9],o=this.values[10],c=this.values[11],v=this.values[12],y=this.values[13],d=this.values[14],p=this.values[15];return(t*a-e*n)*(o*p-c*d)-(t*h-s*n)*(l*p-c*y)+(t*r-i*n)*(l*d-o*y)+(e*h-s*a)*(u*p-c*v)-(e*r-i*a)*(u*d-o*v)+(s*r-i*h)*(u*y-l*v)}setIdentity(){return this.values[0]=1,this.values[1]=0,this.values[2]=0,this.values[3]=0,this.values[4]=0,this.values[5]=1,this.values[6]=0,this.values[7]=0,this.values[8]=0,this.values[9]=0,this.values[10]=1,this.values[11]=0,this.values[12]=0,this.values[13]=0,this.values[14]=0,this.values[15]=1,this}transpose(){const t=this.values[1],e=this.values[2],s=this.values[3],i=this.values[6],n=this.values[7],a=this.values[11];return this.values[1]=this.values[4],this.values[2]=this.values[8],this.values[3]=this.values[12],this.values[4]=t,this.values[6]=this.values[9],this.values[7]=this.values[13],this.values[8]=e,this.values[9]=i,this.values[11]=this.values[14],this.values[12]=s,this.values[13]=n,this.values[14]=a,this}inverse(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],n=this.values[4],a=this.values[5],h=this.values[6],r=this.values[7],u=this.values[8],l=this.values[9],o=this.values[10],c=this.values[11],v=this.values[12],y=this.values[13],d=this.values[14],p=this.values[15],x=t*a-e*n,m=t*h-s*n,w=t*r-i*n,f=e*h-s*a,g=e*r-i*a,z=s*r-i*h,b=u*y-l*v,k=u*d-o*v,C=u*p-c*v,M=l*d-o*y,E=l*p-c*y,I=o*p-c*d;let D=x*I-m*E+w*M+f*C-g*k+z*b;return D?(D=1/D,this.values[0]=(a*I-h*E+r*M)*D,this.values[1]=(-e*I+s*E-i*M)*D,this.values[2]=(y*z-d*g+p*f)*D,this.values[3]=(-l*z+o*g-c*f)*D,this.values[4]=(-n*I+h*C-r*k)*D,this.values[5]=(t*I-s*C+i*k)*D,this.values[6]=(-v*z+d*w-p*m)*D,this.values[7]=(u*z-o*w+c*m)*D,this.values[8]=(n*E-a*C+r*b)*D,this.values[9]=(-t*E+e*C-i*b)*D,this.values[10]=(v*g-y*w+p*x)*D,this.values[11]=(-u*g+l*w-c*x)*D,this.values[12]=(-n*M+a*k-h*b)*D,this.values[13]=(t*M-e*k+s*b)*D,this.values[14]=(-v*f+y*m-d*x)*D,this.values[15]=(u*f-l*m+o*x)*D,this):null}multiply(t){const e=this.values[0],s=this.values[1],i=this.values[2],n=this.values[3],a=this.values[4],h=this.values[5],r=this.values[6],u=this.values[7],l=this.values[8],o=this.values[9],c=this.values[10],v=this.values[11],y=this.values[12],d=this.values[13],p=this.values[14],x=this.values[15];let m=t.at(0),w=t.at(1),f=t.at(2),g=t.at(3);return this.values[0]=m*e+w*a+f*l+g*y,this.values[1]=m*s+w*h+f*o+g*d,this.values[2]=m*i+w*r+f*c+g*p,this.values[3]=m*n+w*u+f*v+g*x,m=t.at(4),w=t.at(5),f=t.at(6),g=t.at(7),this.values[4]=m*e+w*a+f*l+g*y,this.values[5]=m*s+w*h+f*o+g*d,this.values[6]=m*i+w*r+f*c+g*p,this.values[7]=m*n+w*u+f*v+g*x,m=t.at(8),w=t.at(9),f=t.at(10),g=t.at(11),this.values[8]=m*e+w*a+f*l+g*y,this.values[9]=m*s+w*h+f*o+g*d,this.values[10]=m*i+w*r+f*c+g*p,this.values[11]=m*n+w*u+f*v+g*x,m=t.at(12),w=t.at(13),f=t.at(14),g=t.at(15),this.values[12]=m*e+w*a+f*l+g*y,this.values[13]=m*s+w*h+f*o+g*d,this.values[14]=m*i+w*r+f*c+g*p,this.values[15]=m*n+w*u+f*v+g*x,this}multiplyVec3(t){const e=t.x,s=t.y,i=t.z;return new x([this.values[0]*e+this.values[4]*s+this.values[8]*i+this.values[12],this.values[1]*e+this.values[5]*s+this.values[9]*i+this.values[13],this.values[2]*e+this.values[6]*s+this.values[10]*i+this.values[14]])}multiplyVec4(t,e){e||(e=new c);const s=t.x,i=t.y,n=t.z,a=t.w;return e.x=this.values[0]*s+this.values[4]*i+this.values[8]*n+this.values[12]*a,e.y=this.values[1]*s+this.values[5]*i+this.values[9]*n+this.values[13]*a,e.z=this.values[2]*s+this.values[6]*i+this.values[10]*n+this.values[14]*a,e.w=this.values[3]*s+this.values[7]*i+this.values[11]*n+this.values[15]*a,e}toMat3(){return new d([this.values[0],this.values[1],this.values[2],this.values[4],this.values[5],this.values[6],this.values[8],this.values[9],this.values[10]])}toInverseMat3(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[4],n=this.values[5],a=this.values[6],h=this.values[8],r=this.values[9],u=this.values[10],l=u*n-a*r,o=-u*i+a*h,c=r*i-n*h;let v=t*l+e*o+s*c;return v?(v=1/v,new d([l*v,(-u*e+s*r)*v,(a*e-s*n)*v,o*v,(u*t-s*h)*v,(-a*t+s*i)*v,c*v,(-r*t+e*h)*v,(n*t-e*i)*v])):null}translate(t){const e=t.x,s=t.y,i=t.z;return this.values[12]+=this.values[0]*e+this.values[4]*s+this.values[8]*i,this.values[13]+=this.values[1]*e+this.values[5]*s+this.values[9]*i,this.values[14]+=this.values[2]*e+this.values[6]*s+this.values[10]*i,this.values[15]+=this.values[3]*e+this.values[7]*s+this.values[11]*i,this}scale(t){const e=t.x,s=t.y,i=t.z;return this.values[0]*=e,this.values[1]*=e,this.values[2]*=e,this.values[3]*=e,this.values[4]*=s,this.values[5]*=s,this.values[6]*=s,this.values[7]*=s,this.values[8]*=i,this.values[9]*=i,this.values[10]*=i,this.values[11]*=i,this}rotate(t,e){let s=e.x,i=e.y,n=e.z,a=Math.sqrt(s*s+i*i+n*n);if(!a)return null;1!==a&&(a=1/a,s*=a,i*=a,n*=a);const h=Math.sin(t),r=Math.cos(t),u=1-r,l=this.values[0],o=this.values[1],c=this.values[2],v=this.values[3],y=this.values[4],d=this.values[5],p=this.values[6],x=this.values[7],m=this.values[8],w=this.values[9],f=this.values[10],g=this.values[11],z=s*s*u+r,b=i*s*u+n*h,k=n*s*u-i*h,C=s*i*u-n*h,M=i*i*u+r,E=n*i*u+s*h,I=s*n*u+i*h,D=i*n*u-s*h,T=n*n*u+r;return this.values[0]=l*z+y*b+m*k,this.values[1]=o*z+d*b+w*k,this.values[2]=c*z+p*b+f*k,this.values[3]=v*z+x*b+g*k,this.values[4]=l*C+y*M+m*E,this.values[5]=o*C+d*M+w*E,this.values[6]=c*C+p*M+f*E,this.values[7]=v*C+x*M+g*E,this.values[8]=l*I+y*D+m*T,this.values[9]=o*I+d*D+w*T,this.values[10]=c*I+p*D+f*T,this.values[11]=v*I+x*D+g*T,this}static frustum(t,e,s,i,n,a){const h=e-t,r=i-s,u=a-n;return new v([2*n/h,0,0,0,0,2*n/r,0,0,(e+t)/h,(i+s)/r,-(a+n)/u,-1,0,0,-a*n*2/u,0])}static perspective(t,e,s,i){const n=s*Math.tan(t*Math.PI/360),a=n*e;return v.frustum(-a,a,-n,n,s,i)}static orthographic(t,e,s,i,n,a){const h=e-t,r=i-s,u=a-n;return new v([2/h,0,0,0,0,2/r,0,0,0,0,-2/u,0,-(t+e)/h,-(i+s)/r,-(a+n)/u,1])}static lookAt(t,e,s=x.up){if(t.equals(e))return this.identity;const i=x.difference(t,e).normalize(),n=x.cross(s,i).normalize(),a=x.cross(i,n).normalize();return new v([n.x,a.x,i.x,0,n.y,a.y,i.y,0,n.z,a.z,i.z,0,-x.dot(n,t),-x.dot(a,t),-x.dot(i,t),1])}static product(t,e,s){const i=t.at(0),n=t.at(1),a=t.at(2),h=t.at(3),r=t.at(4),u=t.at(5),l=t.at(6),o=t.at(7),c=t.at(8),y=t.at(9),d=t.at(10),p=t.at(11),x=t.at(12),m=t.at(13),w=t.at(14),f=t.at(15),g=e.at(0),z=e.at(1),b=e.at(2),k=e.at(3),C=e.at(4),M=e.at(5),E=e.at(6),I=e.at(7),D=e.at(8),T=e.at(9),N=e.at(10),R=e.at(11),L=e.at(12),S=e.at(13),P=e.at(14),q=e.at(15);return s?(s.init([g*i+z*r+b*c+k*x,g*n+z*u+b*y+k*m,g*a+z*l+b*d+k*w,g*h+z*o+b*p+k*f,C*i+M*r+E*c+I*x,C*n+M*u+E*y+I*m,C*a+M*l+E*d+I*w,C*h+M*o+E*p+I*f,D*i+T*r+N*c+R*x,D*n+T*u+N*y+R*m,D*a+T*l+N*d+R*w,D*h+T*o+N*p+R*f,L*i+S*r+P*c+q*x,L*n+S*u+P*y+q*m,L*a+S*l+P*d+q*w,L*h+S*o+P*p+q*f]),s):new v([g*i+z*r+b*c+k*x,g*n+z*u+b*y+k*m,g*a+z*l+b*d+k*w,g*h+z*o+b*p+k*f,C*i+M*r+E*c+I*x,C*n+M*u+E*y+I*m,C*a+M*l+E*d+I*w,C*h+M*o+E*p+I*f,D*i+T*r+N*c+R*x,D*n+T*u+N*y+R*m,D*a+T*l+N*d+R*w,D*h+T*o+N*p+R*f,L*i+S*r+P*c+q*x,L*n+S*u+P*y+q*m,L*a+S*l+P*d+q*w,L*h+S*o+P*p+q*f])}}v.identity=(new v).setIdentity();class y{constructor(t){this.values=new Float32Array(2),void 0!==t&&(this.xy=t)}get x(){return this.values[0]}get y(){return this.values[1]}get xy(){return[this.values[0],this.values[1]]}set x(t){this.values[0]=t}set y(t){this.values[1]=t}set xy(t){this.values[0]=t[0],this.values[1]=t[1]}at(t){return this.values[t]}reset(){this.x=0,this.y=0}copy(t){return t||(t=new y),t.x=this.x,t.y=this.y,t}negate(t){return t||(t=this),t.x=-this.x,t.y=-this.y,t}equals(t,e=1e-5){return!(Math.abs(this.x-t.x)>e)&&!(Math.abs(this.y-t.y)>e)}length(){return Math.sqrt(this.squaredLength())}squaredLength(){const t=this.x,e=this.y;return t*t+e*e}add(t){return this.x+=t.x,this.y+=t.y,this}subtract(t){return this.x-=t.x,this.y-=t.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}divide(t){return this.x/=t.x,this.y/=t.y,this}scale(t,e){return e||(e=this),e.x*=t,e.y*=t,e}normalize(t){t||(t=this);let e=this.length();return 1===e?this:0===e?(t.x=0,t.y=0,t):(e=1/e,t.x*=e,t.y*=e,t)}multiplyMat2(t,e){return e||(e=this),t.multiplyVec2(this,e)}multiplyMat3(t,e){return e||(e=this),t.multiplyVec2(this,e)}static cross(t,e,s){s||(s=new x);const i=t.x,n=t.y,a=e.x,h=i*e.y-n*a;return s.x=0,s.y=0,s.z=h,s}static dot(t,e){return t.x*e.x+t.y*e.y}static distance(t,e){return Math.sqrt(this.squaredDistance(t,e))}static squaredDistance(t,e){const s=e.x-t.x,i=e.y-t.y;return s*s+i*i}static direction(t,e,s){s||(s=new y);const i=t.x-e.x,n=t.y-e.y;let a=Math.sqrt(i*i+n*n);return 0===a?(s.x=0,s.y=0,s):(a=1/a,s.x=i*a,s.y=n*a,s)}static mix(t,e,s,i){i||(i=new y);const n=t.x,a=t.y,h=e.x,r=e.y;return i.x=n+s*(h-n),i.y=a+s*(r-a),i}static sum(t,e,s){return s||(s=new y),s.x=t.x+e.x,s.y=t.y+e.y,s}static difference(t,e,s){return s||(s=new y),s.x=t.x-e.x,s.y=t.y-e.y,s}static product(t,e,s){return s||(s=new y),s.x=t.x*e.x,s.y=t.y*e.y,s}static quotient(t,e,s){return s||(s=new y),s.x=t.x/e.x,s.y=t.y/e.y,s}}y.zero=new y([0,0]),y.one=new y([1,1]);class d{constructor(t){this.values=new Float32Array(9),void 0!==t&&this.init(t)}at(t){return this.values[t]}init(t){for(let e=0;e<9;e++)this.values[e]=t[e];return this}reset(){for(let t=0;t<9;t++)this.values[t]=0}copy(t){t||(t=new d);for(let e=0;e<9;e++)t.values[e]=this.values[e];return t}all(){const t=[];for(let e=0;e<9;e++)t[e]=this.values[e];return t}row(t){return[this.values[3*t+0],this.values[3*t+1],this.values[3*t+2]]}col(t){return[this.values[t],this.values[t+3],this.values[t+6]]}equals(t,e=1e-5){for(let s=0;s<9;s++)if(Math.abs(this.values[s]-t.at(s))>e)return!1;return!0}determinant(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],n=this.values[4],a=this.values[5],h=this.values[6],r=this.values[7],u=this.values[8];return t*(u*n-a*r)+e*(-u*i+a*h)+s*(r*i-n*h)}setIdentity(){return this.values[0]=1,this.values[1]=0,this.values[2]=0,this.values[3]=0,this.values[4]=1,this.values[5]=0,this.values[6]=0,this.values[7]=0,this.values[8]=1,this}transpose(){const t=this.values[1],e=this.values[2],s=this.values[5];return this.values[1]=this.values[3],this.values[2]=this.values[6],this.values[3]=t,this.values[5]=this.values[7],this.values[6]=e,this.values[7]=s,this}inverse(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],n=this.values[4],a=this.values[5],h=this.values[6],r=this.values[7],u=this.values[8],l=u*n-a*r,o=-u*i+a*h,c=r*i-n*h;let v=t*l+e*o+s*c;return v?(v=1/v,this.values[0]=l*v,this.values[1]=(-u*e+s*r)*v,this.values[2]=(a*e-s*n)*v,this.values[3]=o*v,this.values[4]=(u*t-s*h)*v,this.values[5]=(-a*t+s*i)*v,this.values[6]=c*v,this.values[7]=(-r*t+e*h)*v,this.values[8]=(n*t-e*i)*v,this):null}multiply(t){const e=this.values[0],s=this.values[1],i=this.values[2],n=this.values[3],a=this.values[4],h=this.values[5],r=this.values[6],u=this.values[7],l=this.values[8],o=t.at(0),c=t.at(1),v=t.at(2),y=t.at(3),d=t.at(4),p=t.at(5),x=t.at(6),m=t.at(7),w=t.at(8);return this.values[0]=o*e+c*n+v*r,this.values[1]=o*s+c*a+v*u,this.values[2]=o*i+c*h+v*l,this.values[3]=y*e+d*n+p*r,this.values[4]=y*s+d*a+p*u,this.values[5]=y*i+d*h+p*l,this.values[6]=x*e+m*n+w*r,this.values[7]=x*s+m*a+w*u,this.values[8]=x*i+m*h+w*l,this}multiplyVec2(t,e){const s=t.x,i=t.y;return e?(e.xy=[s*this.values[0]+i*this.values[3]+this.values[6],s*this.values[1]+i*this.values[4]+this.values[7]],e):new y([s*this.values[0]+i*this.values[3]+this.values[6],s*this.values[1]+i*this.values[4]+this.values[7]])}multiplyVec3(t,e){const s=t.x,i=t.y,n=t.z;return e?(e.xyz=[s*this.values[0]+i*this.values[3]+n*this.values[6],s*this.values[1]+i*this.values[4]+n*this.values[7],s*this.values[2]+i*this.values[5]+n*this.values[8]],e):new x([s*this.values[0]+i*this.values[3]+n*this.values[6],s*this.values[1]+i*this.values[4]+n*this.values[7],s*this.values[2]+i*this.values[5]+n*this.values[8]])}toMat4(t){return t?(t.init([this.values[0],this.values[1],this.values[2],0,this.values[3],this.values[4],this.values[5],0,this.values[6],this.values[7],this.values[8],0,0,0,0,1]),t):new v([this.values[0],this.values[1],this.values[2],0,this.values[3],this.values[4],this.values[5],0,this.values[6],this.values[7],this.values[8],0,0,0,0,1])}toQuat(){const t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],n=this.values[4],a=this.values[5],h=this.values[6],r=this.values[7],u=this.values[8],l=t-n-u,o=n-t-u,c=u-t-n;let v=0,y=t+n+u;l>y&&(y=l,v=1),o>y&&(y=o,v=2),c>y&&(y=c,v=3);const d=.5*Math.sqrt(y+1),x=.25/d,m=new p;switch(v){case 0:m.w=d,m.x=(a-r)*x,m.y=(h-s)*x,m.z=(e-i)*x;break;case 1:m.w=(a-r)*x,m.x=d,m.y=(e+i)*x,m.z=(h+s)*x;break;case 2:m.w=(h-s)*x,m.x=(e+i)*x,m.y=d,m.z=(a+r)*x;break;case 3:m.w=(e-i)*x,m.x=(h+s)*x,m.y=(a+r)*x,m.z=d}return m}rotate(t,e){let s=e.x,i=e.y,n=e.z,a=Math.sqrt(s*s+i*i+n*n);if(!a)return null;1!==a&&(a=1/a,s*=a,i*=a,n*=a);const h=Math.sin(t),r=Math.cos(t),u=1-r,l=this.values[0],o=this.values[1],c=this.values[2],v=this.values[4],y=this.values[5],d=this.values[6],p=this.values[8],x=this.values[9],m=this.values[10],w=s*s*u+r,f=i*s*u+n*h,g=n*s*u-i*h,z=s*i*u-n*h,b=i*i*u+r,k=n*i*u+s*h,C=s*n*u+i*h,M=i*n*u-s*h,E=n*n*u+r;return this.values[0]=l*w+v*f+p*g,this.values[1]=o*w+y*f+x*g,this.values[2]=c*w+d*f+m*g,this.values[3]=l*z+v*b+p*k,this.values[4]=o*z+y*b+x*k,this.values[5]=c*z+d*b+m*k,this.values[6]=l*C+v*M+p*E,this.values[7]=o*C+y*M+x*E,this.values[8]=c*C+d*M+m*E,this}static product(t,e,s){const i=t.at(0),n=t.at(1),a=t.at(2),h=t.at(3),r=t.at(4),u=t.at(5),l=t.at(6),o=t.at(7),c=t.at(8),v=e.at(0),y=e.at(1),p=e.at(2),x=e.at(3),m=e.at(4),w=e.at(5),f=e.at(6),g=e.at(7),z=e.at(8);return s?(s.init([v*i+y*h+p*l,v*n+y*r+p*o,v*a+y*u+p*c,x*i+m*h+w*l,x*n+m*r+w*o,x*a+m*u+w*c,f*i+g*h+z*l,f*n+g*r+z*o,f*a+g*u+z*c]),s):new d([v*i+y*h+p*l,v*n+y*r+p*o,v*a+y*u+p*c,x*i+m*h+w*l,x*n+m*r+w*o,x*a+m*u+w*c,f*i+g*h+z*l,f*n+g*r+z*o,f*a+g*u+z*c])}}d.identity=(new d).setIdentity();class p{constructor(t){this.values=new Float32Array(4),void 0!==t&&(this.xyzw=t)}get x(){return this.values[0]}get y(){return this.values[1]}get z(){return this.values[2]}get w(){return this.values[3]}get xy(){return[this.values[0],this.values[1]]}get xyz(){return[this.values[0],this.values[1],this.values[2]]}get xyzw(){return[this.values[0],this.values[1],this.values[2],this.values[3]]}set x(t){this.values[0]=t}set y(t){this.values[1]=t}set z(t){this.values[2]=t}set w(t){this.values[3]=t}set xy(t){this.values[0]=t[0],this.values[1]=t[1]}set xyz(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]}set xyzw(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2],this.values[3]=t[3]}at(t){return this.values[t]}reset(){for(let t=0;t<4;t++)this.values[t]=0}copy(t){t||(t=new p);for(let e=0;e<4;e++)t.values[e]=this.values[e];return t}roll(){const t=this.x,e=this.y,s=this.z,i=this.w;return Math.atan2(2*(t*e+i*s),i*i+t*t-e*e-s*s)}pitch(){const t=this.x,e=this.y,s=this.z,i=this.w;return Math.atan2(2*(e*s+i*t),i*i-t*t-e*e+s*s)}yaw(){return Math.asin(2*(this.x*this.z-this.w*this.y))}equals(t,e=1e-5){for(let s=0;s<4;s++)if(Math.abs(this.values[s]-t.at(s))>e)return!1;return!0}setIdentity(){return this.x=0,this.y=0,this.z=0,this.w=1,this}calculateW(){const t=this.x,e=this.y,s=this.z;return this.w=-Math.sqrt(Math.abs(1-t*t-e*e-s*s)),this}inverse(){const t=p.dot(this,this);if(!t)return this.xyzw=[0,0,0,0],this;const e=t?1/t:0;return this.x*=-e,this.y*=-e,this.z*=-e,this.w*=e,this}conjugate(){return this.values[0]*=-1,this.values[1]*=-1,this.values[2]*=-1,this}length(){const t=this.x,e=this.y,s=this.z,i=this.w;return Math.sqrt(t*t+e*e+s*s+i*i)}normalize(t){t||(t=this);const e=this.x,s=this.y,i=this.z,n=this.w;let a=Math.sqrt(e*e+s*s+i*i+n*n);return a?(a=1/a,t.x=e*a,t.y=s*a,t.z=i*a,t.w=n*a,t):(t.x=0,t.y=0,t.z=0,t.w=0,t)}add(t){for(let e=0;e<4;e++)this.values[e]+=t.at(e);return this}multiply(t){const e=this.values[0],s=this.values[1],i=this.values[2],n=this.values[3],a=t.x,h=t.y,r=t.z,u=t.w;return this.x=e*u+n*a+s*r-i*h,this.y=s*u+n*h+i*a-e*r,this.z=i*u+n*r+e*h-s*a,this.w=n*u-e*a-s*h-i*r,this}multiplyVec3(t,e){e||(e=new x);const s=t.x,i=t.y,n=t.z,a=this.x,h=this.y,r=this.z,u=this.w,l=u*s+h*n-r*i,o=u*i+r*s-a*n,c=u*n+a*i-h*s,v=-a*s-h*i-r*n;return e.x=l*u+v*-a+o*-r-c*-h,e.y=o*u+v*-h+c*-a-l*-r,e.z=c*u+v*-r+l*-h-o*-a,e}toMat3(t){t||(t=new d);const e=this.x,s=this.y,i=this.z,n=this.w,a=e+e,h=s+s,r=i+i,u=e*a,l=e*h,o=e*r,c=s*h,v=s*r,y=i*r,p=n*a,x=n*h,m=n*r;return t.init([1-(c+y),l+m,o-x,l-m,1-(u+y),v+p,o+x,v-p,1-(u+c)]),t}toMat4(t){t||(t=new v);const e=this.x,s=this.y,i=this.z,n=this.w,a=e+e,h=s+s,r=i+i,u=e*a,l=e*h,o=e*r,c=s*h,y=s*r,d=i*r,p=n*a,x=n*h,m=n*r;return t.init([1-(c+d),l+m,o-x,0,l-m,1-(u+d),y+p,0,o+x,y-p,1-(u+c),0,0,0,0,1]),t}static dot(t,e){return t.x*e.x+t.y*e.y+t.z*e.z+t.w*e.w}static sum(t,e,s){return s||(s=new p),s.x=t.x+e.x,s.y=t.y+e.y,s.z=t.z+e.z,s.w=t.w+e.w,s}static product(t,e,s){s||(s=new p);const i=t.x,n=t.y,a=t.z,h=t.w,r=e.x,u=e.y,l=e.z,o=e.w;return s.x=i*o+h*r+n*l-a*u,s.y=n*o+h*u+a*r-i*l,s.z=a*o+h*l+i*u-n*r,s.w=h*o-i*r-n*u-a*l,s}static cross(t,e,s){s||(s=new p);const i=t.x,n=t.y,a=t.z,h=t.w,r=e.x,u=e.y,l=e.z,o=e.w;return s.x=h*l+a*o+i*u-n*r,s.y=h*o-i*r-n*u-a*l,s.z=h*r+i*o+n*l-a*u,s.w=h*u+n*o+a*r-i*l,s}static shortMix(t,e,s,i){if(i||(i=new p),s<=0)return i.xyzw=t.xyzw,i;if(s>=1)return i.xyzw=e.xyzw,i;let n=p.dot(t,e);const a=e.copy();let h,r;if(n<0&&(a.inverse(),n=-n),n>.9999)h=1-s,r=0+s;else{const t=Math.sqrt(1-n*n),e=Math.atan2(t,n),i=1/t;h=Math.sin((1-s)*e)*i,r=Math.sin((0+s)*e)*i}return i.x=h*t.x+r*a.x,i.y=h*t.y+r*a.y,i.z=h*t.z+r*a.z,i.w=h*t.w+r*a.w,i}static mix(t,e,s,i){i||(i=new p);const n=t.x*e.x+t.y*e.y+t.z*e.z+t.w*e.w;if(Math.abs(n)>=1)return i.xyzw=t.xyzw,i;const a=Math.acos(n),h=Math.sqrt(1-n*n);if(Math.abs(h)<.001)return i.x=.5*t.x+.5*e.x,i.y=.5*t.y+.5*e.y,i.z=.5*t.z+.5*e.z,i.w=.5*t.w+.5*e.w,i;const r=Math.sin((1-s)*a)/h,u=Math.sin(s*a)/h;return i.x=t.x*r+e.x*u,i.y=t.y*r+e.y*u,i.z=t.z*r+e.z*u,i.w=t.w*r+e.w*u,i}static fromAxisAngle(t,e,s){s||(s=new p),e*=.5;const i=Math.sin(e);return s.x=t.x*i,s.y=t.y*i,s.z=t.z*i,s.w=Math.cos(e),s}}p.identity=(new p).setIdentity();class x{constructor(t){this.values=new Float32Array(3),void 0!==t&&(this.xyz=t)}get x(){return this.values[0]}get y(){return this.values[1]}get z(){return this.values[2]}get xy(){return[this.values[0],this.values[1]]}get xyz(){return[this.values[0],this.values[1],this.values[2]]}set x(t){this.values[0]=t}set y(t){this.values[1]=t}set z(t){this.values[2]=t}set xy(t){this.values[0]=t[0],this.values[1]=t[1]}set xyz(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]}at(t){return this.values[t]}reset(){this.x=0,this.y=0,this.z=0}copy(t){return t||(t=new x),t.x=this.x,t.y=this.y,t.z=this.z,t}negate(t){return t||(t=this),t.x=-this.x,t.y=-this.y,t.z=-this.z,t}equals(t,e=1e-5){return!(Math.abs(this.x-t.x)>e)&&(!(Math.abs(this.y-t.y)>e)&&!(Math.abs(this.z-t.z)>e))}length(){return Math.sqrt(this.squaredLength())}squaredLength(){const t=this.x,e=this.y,s=this.z;return t*t+e*e+s*s}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}subtract(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}scale(t,e){return e||(e=this),e.x*=t,e.y*=t,e.z*=t,e}normalize(t){t||(t=this);let e=this.length();return 1===e?this:0===e?(t.x=0,t.y=0,t.z=0,t):(e=1/e,t.x*=e,t.y*=e,t.z*=e,t)}multiplyByMat3(t,e){return e||(e=this),t.multiplyVec3(this,e)}multiplyByQuat(t,e){return e||(e=this),t.multiplyVec3(this,e)}toQuat(t){t||(t=new p);const e=new x,s=new x;return e.x=Math.cos(.5*this.x),s.x=Math.sin(.5*this.x),e.y=Math.cos(.5*this.y),s.y=Math.sin(.5*this.y),e.z=Math.cos(.5*this.z),s.z=Math.sin(.5*this.z),t.x=s.x*e.y*e.z-e.x*s.y*s.z,t.y=e.x*s.y*e.z+s.x*e.y*s.z,t.z=e.x*e.y*s.z-s.x*s.y*e.z,t.w=e.x*e.y*e.z+s.x*s.y*s.z,t}static cross(t,e,s){s||(s=new x);const i=t.x,n=t.y,a=t.z,h=e.x,r=e.y,u=e.z;return s.x=n*u-a*r,s.y=a*h-i*u,s.z=i*r-n*h,s}static dot(t,e){const s=t.x,i=t.y,n=t.z;return s*e.x+i*e.y+n*e.z}static distance(t,e){e.x,t.x,e.y,t.y,e.z,t.z;return Math.sqrt(this.squaredDistance(t,e))}static squaredDistance(t,e){const s=e.x-t.x,i=e.y-t.y,n=e.z-t.z;return s*s+i*i+n*n}static direction(t,e,s){s||(s=new x);const i=t.x-e.x,n=t.y-e.y,a=t.z-e.z;let h=Math.sqrt(i*i+n*n+a*a);return 0===h?(s.x=0,s.y=0,s.z=0,s):(h=1/h,s.x=i*h,s.y=n*h,s.z=a*h,s)}static mix(t,e,s,i){return i||(i=new x),i.x=t.x+s*(e.x-t.x),i.y=t.y+s*(e.y-t.y),i.z=t.z+s*(e.z-t.z),i}static sum(t,e,s){return s||(s=new x),s.x=t.x+e.x,s.y=t.y+e.y,s.z=t.z+e.z,s}static difference(t,e,s){return s||(s=new x),s.x=t.x-e.x,s.y=t.y-e.y,s.z=t.z-e.z,s}static product(t,e,s){return s||(s=new x),s.x=t.x*e.x,s.y=t.y*e.y,s.z=t.z*e.z,s}static quotient(t,e,s){return s||(s=new x),s.x=t.x/e.x,s.y=t.y/e.y,s.z=t.z/e.z,s}}x.zero=new x([0,0,0]),x.one=new x([1,1,1]),x.up=new x([0,1,0]),x.right=new x([1,0,0]),x.forward=new x([0,0,1]);class m extends(o()){constructor(t){super(),this.context=t,this.scene=this.context.getContext().createGain(),this.listener=this.context.getContext().listener,this.init()}init(){}createSource(){const t=this.context.getContext().createPanner();return t.panningModel="HRTF",t.distanceModel="linear",t.maxDistance=20,t.refDistance=2,t.connect(this.scene),t}getOutput(){return this.scene}getInput(){return this.scene}setListenerPosition(t,e,s){this.listener.setPosition(t,e,s)}setListenerOrientation(t,e){let s=new x([t.x,t.y,t.z]),i=s.copy();x.cross(i,new x([e.x,e.y,e.z]),i),x.cross(i,s,i),s.normalize(),i.normalize(),this.listener.setOrientation(s.x,s.y,s.z,i.x,i.y,i.z)}}class w{constructor(t,e,s,i){this.effects=[],this.context=t,this.graph=e,this.inputNode=s,this.outputNode=i,this.updateConnections()}applyEffect(t){this.effects.push(t),this.updateConnections()}removeEffect(t){this.effects.forEach((e=>{t===e&&e.disconnect()})),this.effects=this.effects.filter((e=>t!==e)),this.updateConnections()}updateConnections(){if(0==this.effects.length)return void this.inputNode.connect(this.outputNode);let t=null,e=null;this.effects.forEach((s=>{t=s,e?t.connectInput(e.getOutput()):t.connectInput(this.inputNode),e=t})),t&&t.connectOutput(this.outputNode)}}class f{constructor(t,e,s=!1){this.scene=t,this.context=e,this.swapChannels=s,this.init()}init(){this.effectsBus=this.context.createGain(),this.worldBus=this.context.createGain(),this.secondaryBus=this.context.createGain(),this.master=this.context.createGain(),this.scene.getOutput().connect(this.worldBus),this.worldBus.connect(this.effectsBus),this.effects=new w(this.context,this,this.effectsBus,this.master),this.secondaryBus.connect(this.master),this.swapChannels?(this.channelSplitter=this.context.getContext().createChannelSplitter(2),this.channelMerger=this.context.getContext().createChannelMerger(2),this.master.connect(this.channelSplitter),this.channelSplitter.connect(this.channelMerger,0,1),this.channelSplitter.connect(this.channelMerger,1,0),this.channelMerger.connect(this.context.getOutputDestination())):this.master.connect(this.context.getOutputDestination())}connectToMaster(t){t.connect(this.master)}connectToUI(t){t.connect(this.secondaryBus)}applyEffect(t){this.effects.applyEffect(t)}removeEffect(t){this.effects.removeEffect(t)}}var g;!function(t){t[t.WorldSource=0]="WorldSource",t[t.UISource=1]="UISource",t[t.MasterSource=2]="MasterSource"}(g||(g={}));class z{constructor(t,e,s,i=null,n=g.WorldSource){this.position={x:0,y:0,z:0},this.buffer=i,this.context=s,this.scene=e,this.graph=t,this.type=n,this.playbackRate=1,this.init()}init(){this.gain=this.context.createGain(),this.stop=this.stop.bind(this)}getBuffer(){return this.buffer}setBuffer(t){this.buffer=t,this.playOnLoad&&(this.play(),this.playOnLoad=!1)}play(t=0,e=0,s=(this.buffer?this.buffer.duration:0)){this.playing&&this.node&&this.stop(),this.buffer?(this.node||(this.node=this.context.createBufferSource(),this.node.buffer=this.buffer,this.createConnections()),this.node&&(this.node.playbackRate.value=this.playbackRate,this.node.start(t,e,s),this.node.loop=this.looping,this.playing=!0,this.sceneNode&&this.sceneNode.setPosition(this.position.x,this.position.y,this.position.z),this.node.addEventListener("ended",this.stop))):this.playOnLoad=!0}setPosition(t,e,s){this.position={x:t,y:e,z:s},this.sceneNode&&this.sceneNode.setPosition(t,e,s)}setPlaybackRate(t){this.playbackRate=t,this.node&&(this.node.playbackRate.value=t)}getPlaybackRate(){return this.playbackRate}setVolume(t){this.volume=t,this.gain&&(this.gain.gain.value=t)}getVolume(){return this.volume}createConnections(){switch(this.type){case g.WorldSource:this.sceneNode||(this.sceneNode=this.scene.createSource()),this.node.connect(this.gain),this.gain.connect(this.sceneNode);break;case g.UISource:this.node.connect(this.gain),this.graph.connectToUI(this.gain);break;default:this.node.connect(this.gain),this.graph.connectToMaster(this.gain)}}stop(){this.playing=!1,this.node&&(this.node.removeEventListener("ended",this.stop),this.node.stop(),this.node.disconnect(),this.node=null,this.playing=!1,this.sceneNode&&(this.sceneNode.disconnect(),this.sceneNode=null))}destroy(){this.stop(),this.node=null,this.sceneNode=null,this.buffer=null,this.context=null,this.graph=null,this.scene=null}loop(t){this.looping=t,this.node&&(this.node.loop=t)}}class b{constructor(t,e=null,s=null){this.name=t,this.data=e,this.decodedData=s}getData(){return this.data}setData(t){this.data=t}getDecodedData(){return this.decodedData}setDecodedData(t){this.decodedData=this.decodedData}getName(){return this.name}setName(t){this.name=t}}var k=function(t,e,s,i){return new(s||(s=Promise))((function(n,a){function h(t){try{u(i.next(t))}catch(t){a(t)}}function r(t){try{u(i.throw(t))}catch(t){a(t)}}function u(t){var e;t.done?n(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(h,r)}u((i=i.apply(t,e||[])).next())}))};class C{get(t){return k(this,void 0,void 0,(function*(){const e=yield fetch(t);return yield e.arrayBuffer()}))}}var M=function(t,e,s,i){return new(s||(s=Promise))((function(n,a){function h(t){try{u(i.next(t))}catch(t){a(t)}}function r(t){try{u(i.throw(t))}catch(t){a(t)}}function u(t){var e;t.done?n(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(h,r)}u((i=i.apply(t,e||[])).next())}))};class E extends(o()){constructor(t,e=new C,s=512){super(),this.loader=e,this.data={},this.maxData=s,this.context=t}get(t){return M(this,void 0,void 0,(function*(){if(this.data[t])return this.data[t].getDecodedData();{const e=yield this.loader.get(t),s=yield this.context.decodeAudioData(e),i=new b(t,e,s);Object.keys(this.data).length;return this.maxData,this.data[t]=i,i.getDecodedData()}}))}clear(){this.data={}}}class I extends class{constructor(t,e,s){this.graph=e,this.context=t,this.effectParams=s}connectOutput(t){this.effectNode.connect(t)}connectInput(t){this.inputNode=t,this.effectNode&&this.inputNode.connect(this.effectNode)}getOutput(){return this.effectNode}disconnect(){this.inputNode.disconnect(),this.effectNode.disconnect()}}{constructor(t,e,s){super(t,e,s),console.log("Creating convolver"),this.effectNode=this.context.getContext().createConvolver(),this.effectNode.buffer=this.effectParams.buffer}connectInput(t){this.channelSplitter=this.context.getContext().createChannelSplitter(2),this.channelMerger=this.context.getContext().createChannelMerger(2),this.channelSplitter.connect(this.channelMerger,0,0),this.channelSplitter.connect(this.channelMerger,1,0),this.channelSplitter.connect(this.channelMerger,0,1),this.channelSplitter.connect(this.channelMerger,1,1),t.connect(this.channelSplitter),this.channelMerger.connect(this.effectNode)}}class D{constructor(t,e,s,i,n=g.MasterSource){this.graph=t,this.scene=e,this.context=s,this.element=i,this.type=n,this.position={x:0,y:0,z:0},this.init()}init(){this.node=this.context.createMediaElementSource(this.element),this.createConnections(),this.element.addEventListener("canplay",(t=>{this.canPlay=!0,this.playOnAvailable&&this.play()}))}play(t=0,e=0,s=0){this.canPlay&&this.element.play(),this.playOnAvailable=!0}stop(){this.element.pause()}getVolume(){return this.element.volume}setVolume(t){this.element.volume=t}getPlaybackRate(){return this.element.playbackRate}setPlaybackRate(t){this.element.playbackRate=t}createConnections(){if(this.type===g.WorldSource)this.sceneNode||(this.sceneNode=this.scene.createSource()),this.node.connect(this.sceneNode);else this.graph.connectToMaster(this.node)}setPosition(t,e,s){this.position={x:t,y:e,z:s},this.sceneNode&&this.sceneNode.setPosition(t,e,s)}destroy(){this.stop(),this.element=null,this.graph=null,this.context=null,this.node=null,this.sceneNode=null,this.scene=null}loop(t){this.element.loop=!0}}var T=function(t,e,s,i){return new(s||(s=Promise))((function(n,a){function h(t){try{u(i.next(t))}catch(t){a(t)}}function r(t){try{u(i.throw(t))}catch(t){a(t)}}function u(t){var e;t.done?n(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(h,r)}u((i=i.apply(t,e||[])).next())}))};class N{constructor(t=new C){this.loader=t,this.environmentImpulse=null,this.context=new u,this.scene=new m(this.context),this.graph=new f(this.scene,this.context,!1),this.dataPool=new E(this.context,this.loader)}load(t,e=g.WorldSource){return T(this,void 0,void 0,(function*(){const s=yield this.dataPool.get(t);return this.createSource(e,s)}))}loadImmediate(t,e=g.WorldSource){const s=new z(this.graph,this.scene,this.context,null,e);return this.dataPool.get(t).then((t=>{s.setBuffer(t)})),s}stream(t,e=g.MasterSource){const s=new Audio(t);s.crossOrigin="anonymous";return new D(this.graph,this.scene,this.context,s,e)}createSource(t,e){return new z(this.graph,this.scene,this.context,e)}setEnvironmentImpulse(t){return T(this,void 0,void 0,(function*(){if(this.environmentImpulse&&this.graph.removeEffect(this.environmentImpulse),null===t)return;const e=yield this.dataPool.get(t);this.environmentImpulse=new I(this.context,this.graph,{buffer:e}),this.graph.applyEffect(this.environmentImpulse)}))}setListenerPosition(t,e,s){this.scene.setListenerPosition(t,e,s)}setListenerOrientation(t,e){this.scene.setListenerOrientation(t,e)}clearDataPool(){this.dataPool.clear()}}class R{constructor(){this.res=new N,this.res.setEnvironmentImpulse("assets/Greek7EchoHall.wav")}play(t){this.res.loadImmediate(t).play()}}class L{constructor(){this.tts=new h(new n),this.history=document.getElementById("output-area"),this.sound=new R}say(t){this.sound.play("assets/scroll.wav");const e=document.createElement("p");t.split("\n").forEach((t=>{e.appendChild(document.createTextNode(t)),e.appendChild(document.createElement("br"))})),this.history.appendChild(e)}play(t){this.sound.play(t)}}class S{constructor(t,e){this.handler=t,this.output=e,this.echoInput=!0,this.inputField=document.getElementById("input-area"),this.init()}setEcho(t){this.echoInput=t}init(){this.inputField.addEventListener("keydown",(t=>{if(13==t.which){const t=this.inputField.value;this.inputField.value="",this.echoInput&&this.output.say(`> ${t}`),this.handler.doCommand(t)}}))}}const P=[[["look","l"],function(t,e){if(1==t.length)e.examineRoom();else{const s=e.getRoom(e.player.currentRoom).getItems();let i=null;for(let e of s)if(e.name.includes(t[1])){i=e;break}i?(e.output.say(i.name),e.output.say(i.description)):e.output.say(`I could not find a ${t[1]}.`)}}],[["use","interact"],async function(t,e){const s=e.getRoom(e.player.currentRoom).getItems();let i=null;for(let e of s)if(e.name.includes(t[1])){i=e;break}if(!i){const s=e.player.getInventory();for(let e of s)if(e.name.includes(t[1])){i=e;break}}i?await i.onUse():e.output.say(`I could not find a ${t[1]}.`)}],[["take","get"],function(t,e){const s=e.getRoom(e.player.currentRoom),i=s.getItems();let n=null;for(let e of i)if(e.name.includes(t[1])){n=e;break}n?n.takeable?(s.removeItem(n.id),e.player.addItem(n.id),e.print(`You take ${n.name}.`),n.onTake()):e.print(`You can't take ${n.name}.`):e.print(`You can't find any ${t[1]}.`)}],[["drop","put"],function(t,e){const s=e.getRoom(e.player.currentRoom),i=e.player.getInventory();let n=null;for(let e of i)if(e.name.includes(t[1])){n=e;break}n?(e.player.removeItem(n.id),s.addItem(n.id),e.print(`You set ${n.name} down on the floor.`),n.onDrop()):e.print(`You're not carrying a ${t[1]}`)}],["echo",function(t,e){"on"!=t[1]&&"off"!=t[1]?e.print("Usage: echo <on/off>"):(e.setInputEcho("on"==t[1]),e.print(`Command echo is now ${t[1]}.`))}]],q=[["n","north"],["ne","northeast"],["e","east"],["se","southeast"],["s","south"],["sw","southwest"],["w","west"],["nw","northwest"],["u","up"],["d","down"]];class _{constructor(t,e){this.context=t,this.commands=e||new Map,this.enabled=!0,this.addDefaultCommands()}doCommand(t){if(!this.enabled)return void this.context.print("You can't seem to do anything at the moment.");const e=this.context.getRoom(this.context.player.currentRoom),s=t.split(" ");this.commands.get(s[0])&&this.commands.get(s[0])(s,this.context);const i=this.matchDirection(s[0]);e.getExit(i)&&this.context.move(e.getExit(i))}addCommand(t,e){Array.isArray(t)?t.forEach((t=>this.commands.set(t,e))):this.commands.set(t,e)}addCommands(t){t.forEach((t=>{this.addCommand(t[0],t[1])}))}addDefaultCommands(){this.addCommands(P)}matchDirection(t){for(let e of q)if(e[0]==t)return e[1]}}class A{constructor(){this.id="room",this.title="A room",this.description="You see nothing special",this.firstDescription="As you walk into the room, you notice nothing special",this.objects=[],this.exits=new Map,this.enterCallback=null,this.exitCallback=null,this.canEnterLogic=null,this.canExitLogic=null,this.tickCallback=null,this.context=null}async onEnter(){if(this.enterCallback)return this.enterCallback(this.context)}async onExit(){if(this.exitCallback)return this.exitCallback(this.context)}canEnter(){return!this.canEnterLogic||this.canEnterLogic(this.context)}canExit(){return!this.canExitLogic||this.canExitLogic(this.context)}addExit(t,e){return this.exits.set(t,e),this}getExit(t){return this.exits.get(t)}addItem(t){this.objects.push(t)}removeItem(t){this.objects=this.objects.filter((e=>e!=t))}addEnterCallback(t){this.enterCallback=t.bind(this)}addExitCallback(t){this.exitCallback=t.bind(this)}addEnterLogic(t){this.canEnterLogic=t.bind(this)}addExitLogic(t){this.canExitLogic=t.bind(this)}addTickCallback(t){this.tickCallback=t.bind(this)}getItems(){return this.objects.map((t=>this.context.getItem(t)))}async onTick(){if(this.tickCallback)return this.tickCallback(this.context)}}class O{constructor(){this.room=new A}withID(t){return this.room.id=t,this}withTitle(t){return this.room.title=t,this}withFirstDescription(t){return this.room.firstDescription=t,this}withDescription(t){return this.room.description=t,this}withExit(t,e){return this.room.addExit(t,e),this}withItem(t){return this.room.addItem(t),this}withEnterCallback(t){return this.room.addEnterCallback(t),this}withExitCallback(t){return this.room.addExitCallback(t),this}withEnterLogic(t){return this.room.addEnterLogic(t),this}withExitLogic(t){return this.room.addExitLogic(t),this}withTick(t){return this.room.addTickCallback(t),this}create(){return this.room}}const B=[(new O).withID("start").withTitle("The starting room").withFirstDescription("You set foot in your very first ever room.\nYou're not quite sure what you were supposed to expect, but it definitely wasn't this.\nI mean who would expect a boring old room like this one? Ugh.\nJust... make it stop. Please.").withDescription("The first room. Nothing special about it.").withExit("north","tunnel_1").withExit("northwest","tunnel_2").withEnterCallback((async function(t){if(t.state.get("start.awoken"))return;const{output:e,wait:s}=t;t.enableCommandInput(!1),e.say("You slowly wake up"),await s(5e3),e.say("It's strange. You never used to be able to be conscious about the fact that you were waking up."),await s(5e3),e.say("Yet here we are."),t.enableCommandInput(!0),t.state.set("start.awoken",!0)})).withItem("stone").withItem("cup").withItem("torch").create(),(new O).withID("tunnel_1").withTitle("A long dark tunnel").withFirstDescription("You first step foot in this dark loomy tunnel.").withDescription("The walls are wet. Everything is wet. Ugh. Why do you even.").withExit("south","start").create(),(new O).withID("tunnel_2").withTitle("A long, winding tunnel").withFirstDescription("You step out from your hidy hole into a thin, winding tunnel. The walls and ceiling appear to get thinner and thinner, space slowly dwindling away to nothing.").withDescription("A tunnel that ends in a bowl shape.").withExit("southeast","start").create()];class Y{constructor(){this.id="item",this.name="An item",this.description="You see nothing special about this item",this.usable=!0,this.takeable=!0,this.useCallback=null,this.takeCallback=null,this.dropCallback=null,this.tickCallback=null,this.context=null}async onUse(){if(this.useCallback)return this.useCallback(this.context)}async onTake(){if(this.takeCallback)return this.takeCallback(this.context)}async onDrop(){if(this.dropCallback)return this.dropCallback(this.context)}async onTick(){if(this.tickCallback)return this.tickCallback(this.context)}addUseCallback(t){this.useCallback=t.bind(this)}addTakeCallback(t){this.takeCallback=t.bind(this)}addDropCallback(t){this.dropCallback=t.bind(this)}addTickCallback(t){this.tickCallback=t.bind(this)}}class U{constructor(){this.item=new Y}withID(t){return this.item.id=t,this}withName(t){return this.item.name=t,this}withDescription(t){return this.item.description=t,this}isUsable(t){return this.item.usable=t,this}isTakeable(t){return this.item.takeable=t,this}withUseCallback(t){return this.item.addUseCallback(t),this}withTakeCallback(t){return this.item.addTakeCallback(t),this}withDropCallback(t){return this.item.addDropCallback(t),this}withTickCallback(t){return this.item.addTickCallback(t),this}create(){return this.item}}const F=[(new U).withID("stone").withName("a dull stone").withDescription("There is nothing remarkable about this rough, bland stone.").isTakeable(!0).isUsable(!0).withTakeCallback((async function(t){t.print(`The ${this.id} feels heavy in your hands.`)})).withDropCallback((async function(t){t.print("It bounces back and forth a little.")})).withUseCallback((async function(t){t.print(`You can't really figure out what to do with ${this.name} yet`)})).create(),(new U).withID("torch").withName("a torch").withDescription("A standard torch that provides light.").isUsable(!0).isTakeable(!0).withUseCallback((async function(t){t.print("You try to light the torch but fail.")})).create(),(new U).withID("cup").withName("a cup").withDescription("A standard coffee cup").isTakeable(!0).isUsable(!1).create()];const $=new class{constructor(){this.player=new e,this.state=t,this.rooms=[],this.items=[],this.output=new L,this.commandHandler=new _(this),this.input=new S(this.commandHandler,this.output),this.visitedRooms=new Map,this.interval=null}print(t){this.output.say(t)}init(s){this.rooms=s.rooms.map((t=>(t.context=this,t))),this.items=s.items.map((t=>(t.context=this,t))),this.state=s.state||t,this.commandHandler.addCommands(s.commands),this.player=new e,this.player.context=this,this.move(this.player.currentRoom),this.start()}advanceTick(){this.items.forEach((t=>t.onTick())),this.rooms.forEach((t=>t.onTick()))}start(){this.interval=setInterval((()=>this.advanceTick()),1e3)}stop(){clearInterval(this.interval),this.interval=null}examineRoom(){const t=this.getRoom(this.player.currentRoom);this.output.say(t.title),this.visitedRooms.get(this.player.currentRoom)||""==t.firstDescription?this.output.say(t.description):this.output.say(t.firstDescription),this.examineItems(),this.examineExits()}examineItems(){const t=this.getRoom(this.player.currentRoom).getItems();if(t.length<1)return;let e="You see ";t.forEach(((s,i)=>{i<t.length-2?e+=`${s.name}, `:i<t.length-1?e+=`${s.name} and `:e+=s.name})),this.output.say(e+".")}examineExits(){const t=this.getRoom(this.player.currentRoom);let e=[],s="You can go ";const i=t.exits.keys();for(let t of i)e.push(t);e.forEach(((t,i)=>{i<e.length-2?s+=`${t}, `:i<e.length-1?s+=`${t} and `:s+=t})),this.output.say(s+".")}getRoom(t){return this.rooms.find((e=>e.id==t))}getItem(t){return this.items.find((e=>e.id==t))}wait(t){return new Promise(((e,s)=>{setTimeout(e,t)}))}async move(t){const e=this.getRoom(this.player.currentRoom),s=this.getRoom(t);e.canExit()&&s.canEnter()&&(await e.onExit(),await s.onEnter(),this.player.currentRoom=t,this.examineRoom(),this.visitedRooms.set(t,!0))}enableCommandInput(t){this.commandHandler.enabled=t}setInputEcho(t){this.input.setEcho(t)}};$.init({rooms:B,commands:[[["meow","mew"],async function(t,e){e.print("You meow.")}]],items:F})})()})();
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFRLE9FVkhWLGVBQTJCeGQsRUFBTXRDLEdBQzVDQSxFQUFRa2dCLE1BQU0sZ0JGV2RWLE1BQU8sSyIsInNvdXJjZXMiOlsid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL25vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL3N0YXRlLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvcGxheWVyLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvdHRzL291dHB1dHMvYmFzZS1vdXRwdXQuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay90dHMvb3V0cHV0cy9hcmlhLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvdHRzL291dHB1dHMvd2VidHRzLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvdHRzL2luZGV4LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvdHRzL291dHB1dC1mYWN0b3J5LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL2F1ZGlvLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay90c20vdmVjNC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3RzbS9tYXQ0LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvdHNtL3ZlYzIuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay90c20vbWF0My5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3RzbS9xdWF0LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvdHNtL3ZlYzMuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3Ivc2NlbmVzL3dlYmF1ZGlvLXNjZW5lLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL2VmZmVjdC1jaGFpbi5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3Jlc29uYXRvci9hdWRpby1ncmFwaC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZnJhbWV3b3JrL3Jlc29uYXRvci9zb3VyY2VzL3NvdXJjZS10eXBlLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL3NvdXJjZXMvYXVkaW8tc291cmNlLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL2RhdGEtcG9vbC1pdGVtLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL2xvYWRlcnMvaHR0cC1sb2FkZXIuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3IvZGF0YS1wb29sLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL2VmZmVjdHMvY29udm9sdmVyLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL2VmZmVjdHMvYmFzZS1lZmZlY3QuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2ZyYW1ld29yay9yZXNvbmF0b3Ivc291cmNlcy9zdHJlYW1pbmctc291cmNlLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9mcmFtZXdvcmsvcmVzb25hdG9yL2luZGV4LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvc291bmQuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9vdXRwdXQuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9pbnB1dC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2NvbW1hbmRzLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvY29tbWFuZHMvbG9vay5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2NvbW1hbmRzL3VzZS5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2NvbW1hbmRzL3Rha2UuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9jb21tYW5kcy9kcm9wLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9lbmdpbmUvY29tbWFuZHMvZWNoby5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL3Jvb20uanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9idWlsZGVycy9yb29tLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL3Jvb21zL3N0YXJ0LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL3Jvb21zL2luZGV4LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL3Jvb21zL3R1bm5lbDEuanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2dhbWUvcm9vbXMvdHVubmVsMi5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2l0ZW0uanMiLCJ3ZWJwYWNrOi8vYXNzYXNzaW4tYnVnLy4vc3JjL2VuZ2luZS9idWlsZGVycy9pdGVtLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL3N0b25lLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL2luZGV4LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL3RvcmNoLmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2l0ZW1zL2N1cC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZ2FtZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9hc3Nhc3Npbi1idWcvLi9zcmMvZW5naW5lL2luZGV4LmpzIiwid2VicGFjazovL2Fzc2Fzc2luLWJ1Zy8uL3NyYy9nYW1lL2NvbW1hbmRzL21lb3cuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAsIHByZWZpeCA9ICd+JztcblxuLyoqXG4gKiBDb25zdHJ1Y3RvciB0byBjcmVhdGUgYSBzdG9yYWdlIGZvciBvdXIgYEVFYCBvYmplY3RzLlxuICogQW4gYEV2ZW50c2AgaW5zdGFuY2UgaXMgYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFdmVudHMoKSB7fVxuXG4vL1xuLy8gV2UgdHJ5IHRvIG5vdCBpbmhlcml0IGZyb20gYE9iamVjdC5wcm90b3R5cGVgLiBJbiBzb21lIGVuZ2luZXMgY3JlYXRpbmcgYW5cbi8vIGluc3RhbmNlIGluIHRoaXMgd2F5IGlzIGZhc3RlciB0aGFuIGNhbGxpbmcgYE9iamVjdC5jcmVhdGUobnVsbClgIGRpcmVjdGx5LlxuLy8gSWYgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIG5vdCBzdXBwb3J0ZWQgd2UgcHJlZml4IHRoZSBldmVudCBuYW1lcyB3aXRoIGFcbi8vIGNoYXJhY3RlciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbHQtaW4gb2JqZWN0IHByb3BlcnRpZXMgYXJlIG5vdFxuLy8gb3ZlcnJpZGRlbiBvciB1c2VkIGFzIGFuIGF0dGFjayB2ZWN0b3IuXG4vL1xuaWYgKE9iamVjdC5jcmVhdGUpIHtcbiAgRXZlbnRzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLy9cbiAgLy8gVGhpcyBoYWNrIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBgX19wcm90b19fYCBwcm9wZXJ0eSBpcyBzdGlsbCBpbmhlcml0ZWQgaW5cbiAgLy8gc29tZSBvbGQgYnJvd3NlcnMgbGlrZSBBbmRyb2lkIDQsIGlQaG9uZSA1LjEsIE9wZXJhIDExIGFuZCBTYWZhcmkgNS5cbiAgLy9cbiAgaWYgKCFuZXcgRXZlbnRzKCkuX19wcm90b19fKSBwcmVmaXggPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSBldmVudCBsaXN0ZW5lci5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBbb25jZT1mYWxzZV0gU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgZW1pdHRlciwgb25jZSlcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XSkgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lciwgZW1pdHRlci5fZXZlbnRzQ291bnQrKztcbiAgZWxzZSBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdLmZuKSBlbWl0dGVyLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IFtlbWl0dGVyLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJdO1xuXG4gIHJldHVybiBlbWl0dGVyO1xufVxuXG4vKipcbiAqIENsZWFyIGV2ZW50IGJ5IG5hbWUuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldnQgVGhlIEV2ZW50IG5hbWUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbGVhckV2ZW50KGVtaXR0ZXIsIGV2dCkge1xuICBpZiAoLS1lbWl0dGVyLl9ldmVudHNDb3VudCA9PT0gMCkgZW1pdHRlci5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICBlbHNlIGRlbGV0ZSBlbWl0dGVyLl9ldmVudHNbZXZ0XTtcbn1cblxuLyoqXG4gKiBNaW5pbWFsIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IGxpc3RpbmcgdGhlIGV2ZW50cyBmb3Igd2hpY2ggdGhlIGVtaXR0ZXIgaGFzIHJlZ2lzdGVyZWRcbiAqIGxpc3RlbmVycy5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHZhciBuYW1lcyA9IFtdXG4gICAgLCBldmVudHNcbiAgICAsIG5hbWU7XG5cbiAgaWYgKHRoaXMuX2V2ZW50c0NvdW50ID09PSAwKSByZXR1cm4gbmFtZXM7XG5cbiAgZm9yIChuYW1lIGluIChldmVudHMgPSB0aGlzLl9ldmVudHMpKSB7XG4gICAgaWYgKGhhcy5jYWxsKGV2ZW50cywgbmFtZSkpIG5hbWVzLnB1c2gocHJlZml4ID8gbmFtZS5zbGljZSgxKSA6IG5hbWUpO1xuICB9XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICByZXR1cm4gbmFtZXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZXZlbnRzKSk7XG4gIH1cblxuICByZXR1cm4gbmFtZXM7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0FycmF5fSBUaGUgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBoYW5kbGVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghaGFuZGxlcnMpIHJldHVybiBbXTtcbiAgaWYgKGhhbmRsZXJzLmZuKSByZXR1cm4gW2hhbmRsZXJzLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGhhbmRsZXJzLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGhhbmRsZXJzW2ldLmZuO1xuICB9XG5cbiAgcmV0dXJuIGVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsaXN0ZW5lcnMgbGlzdGVuaW5nIHRvIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWJlciBvZiBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uIGxpc3RlbmVyQ291bnQoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghbGlzdGVuZXJzKSByZXR1cm4gMDtcbiAgaWYgKGxpc3RlbmVycy5mbikgcmV0dXJuIDE7XG4gIHJldHVybiBsaXN0ZW5lcnMubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBDYWxscyBlYWNoIG9mIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBldmVudCBoYWQgbGlzdGVuZXJzLCBlbHNlIGBmYWxzZWAuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQsIGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVycy5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCksIHRydWU7XG4gICAgICBjYXNlIDI6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEpLCB0cnVlO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiksIHRydWU7XG4gICAgICBjYXNlIDQ6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMyksIHRydWU7XG4gICAgICBjYXNlIDU6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQpLCB0cnVlO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0LCBhNSksIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cblxuICAgIGxpc3RlbmVycy5mbi5hcHBseShsaXN0ZW5lcnMuY29udGV4dCwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGhcbiAgICAgICwgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxpc3RlbmVyc1tpXS5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnNbaV0uZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICAgIGNhc2UgMTogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQpOyBicmVhaztcbiAgICAgICAgY2FzZSAyOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEpOyBicmVhaztcbiAgICAgICAgY2FzZSAzOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgNDogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMiwgYTMpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG9uZS10aW1lIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCB0cnVlKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb2YgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgbWF0Y2ggdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgaGF2ZSB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25lLXRpbWUgbGlzdGVuZXJzLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiB0aGlzO1xuICBpZiAoIWZuKSB7XG4gICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAoXG4gICAgICBsaXN0ZW5lcnMuZm4gPT09IGZuICYmXG4gICAgICAoIW9uY2UgfHwgbGlzdGVuZXJzLm9uY2UpICYmXG4gICAgICAoIWNvbnRleHQgfHwgbGlzdGVuZXJzLmNvbnRleHQgPT09IGNvbnRleHQpXG4gICAgKSB7XG4gICAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwLCBldmVudHMgPSBbXSwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm4gfHxcbiAgICAgICAgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKSB8fFxuICAgICAgICAoY29udGV4dCAmJiBsaXN0ZW5lcnNbaV0uY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAgIC8vXG4gICAgaWYgKGV2ZW50cy5sZW5ndGgpIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgICBlbHNlIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycywgb3IgdGhvc2Ugb2YgdGhlIHNwZWNpZmllZCBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gW2V2ZW50XSBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dDtcblxuICBpZiAoZXZlbnQpIHtcbiAgICBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuICAgIGlmICh0aGlzLl9ldmVudHNbZXZ0XSkgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gQWxsb3cgYEV2ZW50RW1pdHRlcmAgdG8gYmUgaW1wb3J0ZWQgYXMgbW9kdWxlIG5hbWVzcGFjZS5cbi8vXG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsImNsYXNzIFN0YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGVzID0gbmV3IE1hcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldChrZXkpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGVzLmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZXMuZ2V0KGtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0KGtleSwgdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZXMuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgU3RhdGUoKTsiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBQbGF5ZXIge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pbnZlbnRvcnkgPSBbXTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSb29tID0gXCJzdGFydFwiO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkSXRlbShpZCkge1xyXG4gICAgICAgIHRoaXMuaW52ZW50b3J5LnB1c2goaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUl0ZW0oaWQpIHtcclxuICAgICAgICB0aGlzLmludmVudG9yeSA9IHRoaXMuaW52ZW50b3J5LmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SW52ZW50b3J5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludmVudG9yeS5tYXAoKGl0ZW0pID0+IHRoaXMuY29udGV4dC5nZXRJdGVtKGl0ZW0pKTtcclxuICAgIH1cclxufSIsImV4cG9ydCBjbGFzcyBCYXNlT3V0cHV0IHtcclxuICAgIHNwZWFrKHRleHQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHNldE9wdGlvbnMob3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBCYXNlT3V0cHV0IH0gZnJvbSAnLi9iYXNlLW91dHB1dCc7XHJcbmV4cG9ydCBjbGFzcyBBcmlhT3V0cHV0IGV4dGVuZHMgQmFzZU91dHB1dCB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMudGltZW91dCA9IDEwMDtcclxuICAgICAgICB0aGlzLnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgfHwgMTAwO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywgJ3BvbGl0ZScpO1xyXG4gICAgICAgIHRoaXMuc3BlZWNoRGlzcGxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHRoaXMuc3BlZWNoRGlzcGxheS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGl2ZScsICdwb2xpdGUnKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQodGhpcy5zcGVlY2hEaXNwbGF5KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZSh0aGlzLmNvbnRhaW5lciwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTtcclxuICAgIH1cclxuICAgIHNwZWFrKHRleHQpIHtcclxuICAgICAgICB0aGlzLmNsZWFyRGlzcGxheSgpO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcclxuICAgICAgICBjb25zdCBwYXJhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xyXG4gICAgICAgIHBhcmEuYXBwZW5kQ2hpbGQobm9kZSk7XHJcbiAgICAgICAgdGhpcy5zcGVlY2hEaXNwbGF5LmFwcGVuZENoaWxkKHBhcmEpO1xyXG4gICAgICAgIHNldFRpbWVvdXQodGhpcy5jbGVhckRpc3BsYXkuYmluZCh0aGlzKSwgdGhpcy50aW1lb3V0KTtcclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhckRpc3BsYXkoKTtcclxuICAgIH1cclxuICAgIGNsZWFyRGlzcGxheSgpIHtcclxuICAgICAgICB0aGlzLnNwZWVjaERpc3BsYXkuaW5uZXJIVE1MID0gJyc7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQmFzZU91dHB1dCB9IGZyb20gJy4vYmFzZS1vdXRwdXQnO1xyXG5leHBvcnQgY2xhc3MgV2ViVFRTT3V0cHV0IGV4dGVuZHMgQmFzZU91dHB1dCB7XHJcbn1cclxuIiwiaW1wb3J0IHsgY3JlYXRlT3V0cHV0IH0gZnJvbSAnLi9vdXRwdXQtZmFjdG9yeSc7XHJcbmV4cG9ydCBjbGFzcyBUVFMge1xyXG4gICAgY29uc3RydWN0b3Iob3V0cHV0ID0gY3JlYXRlT3V0cHV0KCkpIHtcclxuICAgICAgICB0aGlzLm91dHB1dCA9IG91dHB1dDtcclxuICAgIH1cclxuICAgIHNwZWFrKHRleHQpIHtcclxuICAgICAgICB0aGlzLm91dHB1dC5zcGVhayh0ZXh0KTtcclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQuc3RvcCgpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEJhc2VPdXRwdXQgfSBmcm9tICcuL291dHB1dHMvYmFzZS1vdXRwdXQnO1xyXG5pbXBvcnQgeyBBcmlhT3V0cHV0IH0gZnJvbSAnLi9vdXRwdXRzL2FyaWEnO1xyXG5pbXBvcnQgeyBXZWJUVFNPdXRwdXQgfSBmcm9tICcuL291dHB1dHMvd2VidHRzJztcclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU91dHB1dChrZXkgPSAnYXJpYScpIHtcclxuICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgICAgY2FzZSAnYXJpYSc6XHJcbiAgICAgICAgICAgIHJldHVybiBBcmlhT3V0cHV0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICd3ZWJ0dHMnOlxyXG4gICAgICAgICAgICByZXR1cm4gV2ViVFRTT3V0cHV0O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gQXJpYU91dHB1dDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IHsgV2ViVFRTT3V0cHV0LCBBcmlhT3V0cHV0LCBCYXNlT3V0cHV0IH07XHJcbiIsIi8vIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCB0aGUgQXVkaW9Db250ZXh0XHJcbi8vIGV2ZW50dWFsbHkgd2lsbCBiZSB1c2VkIHRvIGRlYWwgd2l0aCBjcm9zcyBicm93c2VyIGlzc3Vlc1xyXG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlc29uYXRvckF1ZGlvQ29udGV4dCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBuZXcgQXVkaW9Db250ZXh0KCk7XHJcbiAgICB9XHJcbiAgICBnZXRDb250ZXh0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQ7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVHYWluKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xyXG4gICAgfVxyXG4gICAgZ2V0T3V0cHV0RGVzdGluYXRpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbjtcclxuICAgIH1cclxuICAgIGNyZWF0ZUJ1ZmZlclNvdXJjZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xyXG4gICAgfVxyXG4gICAgZGVjb2RlQXVkaW9EYXRhKGRhdGEpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICByZXR1cm4geWllbGQgdGhpcy5jb250ZXh0LmRlY29kZUF1ZGlvRGF0YShkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGNyZWF0ZVBhbm5lcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmNyZWF0ZVBhbm5lcigpO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShlbGVtZW50KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBlcHNpbG9uIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB2ZWM0IHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheSg0KTtcclxuICAgICAgICBpZiAodmFsdWVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy54eXp3ID0gdmFsdWVzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCB4KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXTtcclxuICAgIH1cclxuICAgIGdldCB5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIGdldCB6KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1syXTtcclxuICAgIH1cclxuICAgIGdldCB3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1szXTtcclxuICAgIH1cclxuICAgIGdldCB4eSgpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXV07XHJcbiAgICB9XHJcbiAgICBnZXQgeHl6KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdLCB0aGlzLnZhbHVlc1syXV07XHJcbiAgICB9XHJcbiAgICBnZXQgeHl6dygpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXSwgdGhpcy52YWx1ZXNbMl0sIHRoaXMudmFsdWVzWzNdXTtcclxuICAgIH1cclxuICAgIHNldCB4KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB5KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB6KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB3KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCB4eSh2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIHNldCB4eXoodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZXNbMl07XHJcbiAgICB9XHJcbiAgICBzZXQgeHl6dyh2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlc1syXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHZhbHVlc1szXTtcclxuICAgIH1cclxuICAgIGdldCByKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXTtcclxuICAgIH1cclxuICAgIGdldCBnKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIGdldCBiKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1syXTtcclxuICAgIH1cclxuICAgIGdldCBhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1szXTtcclxuICAgIH1cclxuICAgIGdldCByZygpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXV07XHJcbiAgICB9XHJcbiAgICBnZXQgcmdiKCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdLCB0aGlzLnZhbHVlc1syXV07XHJcbiAgICB9XHJcbiAgICBnZXQgcmdiYSgpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXSwgdGhpcy52YWx1ZXNbMl0sIHRoaXMudmFsdWVzWzNdXTtcclxuICAgIH1cclxuICAgIHNldCByKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCBnKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCBiKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCBhKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCByZyh2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIHNldCByZ2IodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZXNbMl07XHJcbiAgICB9XHJcbiAgICBzZXQgcmdiYSh2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlc1syXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHZhbHVlc1szXTtcclxuICAgIH1cclxuICAgIGF0KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XTtcclxuICAgIH1cclxuICAgIHJlc2V0KCkge1xyXG4gICAgICAgIHRoaXMueCA9IDA7XHJcbiAgICAgICAgdGhpcy55ID0gMDtcclxuICAgICAgICB0aGlzLnogPSAwO1xyXG4gICAgICAgIHRoaXMudyA9IDA7XHJcbiAgICB9XHJcbiAgICBjb3B5KGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWM0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHRoaXMueDtcclxuICAgICAgICBkZXN0LnkgPSB0aGlzLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdGhpcy56O1xyXG4gICAgICAgIGRlc3QudyA9IHRoaXMudztcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIG5lZ2F0ZShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSAtdGhpcy54O1xyXG4gICAgICAgIGRlc3QueSA9IC10aGlzLnk7XHJcbiAgICAgICAgZGVzdC56ID0gLXRoaXMuejtcclxuICAgICAgICBkZXN0LncgPSAtdGhpcy53O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgZXF1YWxzKHZlY3RvciwgdGhyZXNob2xkID0gZXBzaWxvbikge1xyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnggLSB2ZWN0b3IueCkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy55IC0gdmVjdG9yLnkpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMueiAtIHZlY3Rvci56KSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLncgLSB2ZWN0b3IudykgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGxlbmd0aCgpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMuc3F1YXJlZExlbmd0aCgpKTtcclxuICAgIH1cclxuICAgIHNxdWFyZWRMZW5ndGgoKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy55O1xyXG4gICAgICAgIGNvbnN0IHogPSB0aGlzLno7XHJcbiAgICAgICAgY29uc3QgdyA9IHRoaXMudztcclxuICAgICAgICByZXR1cm4geCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHc7XHJcbiAgICB9XHJcbiAgICBhZGQodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54ICs9IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSArPSB2ZWN0b3IueTtcclxuICAgICAgICB0aGlzLnogKz0gdmVjdG9yLno7XHJcbiAgICAgICAgdGhpcy53ICs9IHZlY3Rvci53O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc3VidHJhY3QodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54IC09IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSAtPSB2ZWN0b3IueTtcclxuICAgICAgICB0aGlzLnogLT0gdmVjdG9yLno7XHJcbiAgICAgICAgdGhpcy53IC09IHZlY3Rvci53O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHkodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54ICo9IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSAqPSB2ZWN0b3IueTtcclxuICAgICAgICB0aGlzLnogKj0gdmVjdG9yLno7XHJcbiAgICAgICAgdGhpcy53ICo9IHZlY3Rvci53O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgZGl2aWRlKHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCAvPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgLz0gdmVjdG9yLnk7XHJcbiAgICAgICAgdGhpcy56IC89IHZlY3Rvci56O1xyXG4gICAgICAgIHRoaXMudyAvPSB2ZWN0b3IudztcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHNjYWxlKHZhbHVlLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggKj0gdmFsdWU7XHJcbiAgICAgICAgZGVzdC55ICo9IHZhbHVlO1xyXG4gICAgICAgIGRlc3QueiAqPSB2YWx1ZTtcclxuICAgICAgICBkZXN0LncgKj0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBub3JtYWxpemUoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IHRoaXMubGVuZ3RoKCk7XHJcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBkZXN0LnggKj0gMDtcclxuICAgICAgICAgICAgZGVzdC55ICo9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueiAqPSAwO1xyXG4gICAgICAgICAgICBkZXN0LncgKj0gMDtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbmd0aCA9IDEuMCAvIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnggKj0gbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueSAqPSBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC56ICo9IGxlbmd0aDtcclxuICAgICAgICBkZXN0LncgKj0gbGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlNYXQ0KG1hdHJpeCwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hdHJpeC5tdWx0aXBseVZlYzQodGhpcywgZGVzdCk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgbWl4KHZlY3RvciwgdmVjdG9yMiwgdGltZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKyB0aW1lICogKHZlY3RvcjIueCAtIHZlY3Rvci54KTtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSArIHRpbWUgKiAodmVjdG9yMi55IC0gdmVjdG9yLnkpO1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56ICsgdGltZSAqICh2ZWN0b3IyLnogLSB2ZWN0b3Iueik7XHJcbiAgICAgICAgZGVzdC53ID0gdmVjdG9yLncgKyB0aW1lICogKHZlY3RvcjIudyAtIHZlY3Rvci53KTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzdW0odmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjNCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCArIHZlY3RvcjIueDtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSArIHZlY3RvcjIueTtcclxuICAgICAgICBkZXN0LnogPSB2ZWN0b3IueiArIHZlY3RvcjIuejtcclxuICAgICAgICBkZXN0LncgPSB2ZWN0b3IudyArIHZlY3RvcjIudztcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBkaWZmZXJlbmNlKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggLSB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgLSB2ZWN0b3IyLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogLSB2ZWN0b3IyLno7XHJcbiAgICAgICAgZGVzdC53ID0gdmVjdG9yLncgLSB2ZWN0b3IyLnc7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgcHJvZHVjdCh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWM0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54ICogdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55ICogdmVjdG9yMi55O1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56ICogdmVjdG9yMi56O1xyXG4gICAgICAgIGRlc3QudyA9IHZlY3Rvci53ICogdmVjdG9yMi53O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHF1b3RpZW50KHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggLyB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgLyB2ZWN0b3IyLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogLyB2ZWN0b3IyLno7XHJcbiAgICAgICAgZGVzdC53ID0gdmVjdG9yLncgLyB2ZWN0b3IyLnc7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbn1cclxudmVjNC56ZXJvID0gbmV3IHZlYzQoWzAsIDAsIDAsIDFdKTtcclxudmVjNC5vbmUgPSBuZXcgdmVjNChbMSwgMSwgMSwgMV0pO1xyXG4iLCJpbXBvcnQgbWF0MyBmcm9tICcuL21hdDMnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuL3ZlYzMnO1xyXG5pbXBvcnQgdmVjNCBmcm9tICcuL3ZlYzQnO1xyXG5pbXBvcnQgeyBlcHNpbG9uIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBtYXQ0IHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheSgxNik7XHJcbiAgICAgICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCh2YWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGF0KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XTtcclxuICAgIH1cclxuICAgIGluaXQodmFsdWVzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2ldID0gdmFsdWVzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHJlc2V0KCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29weShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgbWF0NCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcclxuICAgICAgICAgICAgZGVzdC52YWx1ZXNbaV0gPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBhbGwoKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xyXG4gICAgICAgICAgICBkYXRhW2ldID0gdGhpcy52YWx1ZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG4gICAgcm93KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKiA0ICsgMF0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICogNCArIDFdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCAqIDQgKyAyXSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKiA0ICsgM11cclxuICAgICAgICBdO1xyXG4gICAgfVxyXG4gICAgY29sKGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXhdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCArIDRdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCArIDhdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCArIDEyXVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcbiAgICBlcXVhbHMobWF0cml4LCB0aHJlc2hvbGQgPSBlcHNpbG9uKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnZhbHVlc1tpXSAtIG1hdHJpeC5hdChpKSkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGRldGVybWluYW50KCkge1xyXG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IGEwMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IGEwMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IGEwMyA9IHRoaXMudmFsdWVzWzNdO1xyXG4gICAgICAgIGNvbnN0IGExMCA9IHRoaXMudmFsdWVzWzRdO1xyXG4gICAgICAgIGNvbnN0IGExMSA9IHRoaXMudmFsdWVzWzVdO1xyXG4gICAgICAgIGNvbnN0IGExMiA9IHRoaXMudmFsdWVzWzZdO1xyXG4gICAgICAgIGNvbnN0IGExMyA9IHRoaXMudmFsdWVzWzddO1xyXG4gICAgICAgIGNvbnN0IGEyMCA9IHRoaXMudmFsdWVzWzhdO1xyXG4gICAgICAgIGNvbnN0IGEyMSA9IHRoaXMudmFsdWVzWzldO1xyXG4gICAgICAgIGNvbnN0IGEyMiA9IHRoaXMudmFsdWVzWzEwXTtcclxuICAgICAgICBjb25zdCBhMjMgPSB0aGlzLnZhbHVlc1sxMV07XHJcbiAgICAgICAgY29uc3QgYTMwID0gdGhpcy52YWx1ZXNbMTJdO1xyXG4gICAgICAgIGNvbnN0IGEzMSA9IHRoaXMudmFsdWVzWzEzXTtcclxuICAgICAgICBjb25zdCBhMzIgPSB0aGlzLnZhbHVlc1sxNF07XHJcbiAgICAgICAgY29uc3QgYTMzID0gdGhpcy52YWx1ZXNbMTVdO1xyXG4gICAgICAgIGNvbnN0IGRldDAwID0gYTAwICogYTExIC0gYTAxICogYTEwO1xyXG4gICAgICAgIGNvbnN0IGRldDAxID0gYTAwICogYTEyIC0gYTAyICogYTEwO1xyXG4gICAgICAgIGNvbnN0IGRldDAyID0gYTAwICogYTEzIC0gYTAzICogYTEwO1xyXG4gICAgICAgIGNvbnN0IGRldDAzID0gYTAxICogYTEyIC0gYTAyICogYTExO1xyXG4gICAgICAgIGNvbnN0IGRldDA0ID0gYTAxICogYTEzIC0gYTAzICogYTExO1xyXG4gICAgICAgIGNvbnN0IGRldDA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyO1xyXG4gICAgICAgIGNvbnN0IGRldDA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwO1xyXG4gICAgICAgIGNvbnN0IGRldDA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwO1xyXG4gICAgICAgIGNvbnN0IGRldDA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwO1xyXG4gICAgICAgIGNvbnN0IGRldDA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxO1xyXG4gICAgICAgIGNvbnN0IGRldDEwID0gYTIxICogYTMzIC0gYTIzICogYTMxO1xyXG4gICAgICAgIGNvbnN0IGRldDExID0gYTIyICogYTMzIC0gYTIzICogYTMyO1xyXG4gICAgICAgIHJldHVybiAoZGV0MDAgKiBkZXQxMSAtXHJcbiAgICAgICAgICAgIGRldDAxICogZGV0MTAgK1xyXG4gICAgICAgICAgICBkZXQwMiAqIGRldDA5ICtcclxuICAgICAgICAgICAgZGV0MDMgKiBkZXQwOCAtXHJcbiAgICAgICAgICAgIGRldDA0ICogZGV0MDcgK1xyXG4gICAgICAgICAgICBkZXQwNSAqIGRldDA2KTtcclxuICAgIH1cclxuICAgIHNldElkZW50aXR5KCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s0XSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzldID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMF0gPSAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzExXSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTJdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxM10gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzE0XSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTVdID0gMTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHRyYW5zcG9zZSgpIHtcclxuICAgICAgICBjb25zdCB0ZW1wMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCB0ZW1wMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCB0ZW1wMDMgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCB0ZW1wMTIgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCB0ZW1wMTMgPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICBjb25zdCB0ZW1wMjMgPSB0aGlzLnZhbHVlc1sxMV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHRoaXMudmFsdWVzWzhdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gdGhpcy52YWx1ZXNbMTJdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gdGVtcDAxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gdGhpcy52YWx1ZXNbOV07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSB0aGlzLnZhbHVlc1sxM107XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSB0ZW1wMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOV0gPSB0ZW1wMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTFdID0gdGhpcy52YWx1ZXNbMTRdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEyXSA9IHRlbXAwMztcclxuICAgICAgICB0aGlzLnZhbHVlc1sxM10gPSB0ZW1wMTM7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTRdID0gdGVtcDIzO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgaW52ZXJzZSgpIHtcclxuICAgICAgICBjb25zdCBhMDAgPSB0aGlzLnZhbHVlc1swXTtcclxuICAgICAgICBjb25zdCBhMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCBhMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCBhMDMgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCBhMTAgPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLnZhbHVlc1s1XTtcclxuICAgICAgICBjb25zdCBhMTIgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCBhMTMgPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICBjb25zdCBhMjAgPSB0aGlzLnZhbHVlc1s4XTtcclxuICAgICAgICBjb25zdCBhMjEgPSB0aGlzLnZhbHVlc1s5XTtcclxuICAgICAgICBjb25zdCBhMjIgPSB0aGlzLnZhbHVlc1sxMF07XHJcbiAgICAgICAgY29uc3QgYTIzID0gdGhpcy52YWx1ZXNbMTFdO1xyXG4gICAgICAgIGNvbnN0IGEzMCA9IHRoaXMudmFsdWVzWzEyXTtcclxuICAgICAgICBjb25zdCBhMzEgPSB0aGlzLnZhbHVlc1sxM107XHJcbiAgICAgICAgY29uc3QgYTMyID0gdGhpcy52YWx1ZXNbMTRdO1xyXG4gICAgICAgIGNvbnN0IGEzMyA9IHRoaXMudmFsdWVzWzE1XTtcclxuICAgICAgICBjb25zdCBkZXQwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMDtcclxuICAgICAgICBjb25zdCBkZXQwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMDtcclxuICAgICAgICBjb25zdCBkZXQwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMDtcclxuICAgICAgICBjb25zdCBkZXQwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMTtcclxuICAgICAgICBjb25zdCBkZXQwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMTtcclxuICAgICAgICBjb25zdCBkZXQwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMjtcclxuICAgICAgICBjb25zdCBkZXQwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMDtcclxuICAgICAgICBjb25zdCBkZXQwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMDtcclxuICAgICAgICBjb25zdCBkZXQwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMDtcclxuICAgICAgICBjb25zdCBkZXQwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMTtcclxuICAgICAgICBjb25zdCBkZXQxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMTtcclxuICAgICAgICBjb25zdCBkZXQxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMjtcclxuICAgICAgICBsZXQgZGV0ID0gZGV0MDAgKiBkZXQxMSAtXHJcbiAgICAgICAgICAgIGRldDAxICogZGV0MTAgK1xyXG4gICAgICAgICAgICBkZXQwMiAqIGRldDA5ICtcclxuICAgICAgICAgICAgZGV0MDMgKiBkZXQwOCAtXHJcbiAgICAgICAgICAgIGRldDA0ICogZGV0MDcgK1xyXG4gICAgICAgICAgICBkZXQwNSAqIGRldDA2O1xyXG4gICAgICAgIGlmICghZGV0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXQgPSAxLjAgLyBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSAoYTExICogZGV0MTEgLSBhMTIgKiBkZXQxMCArIGExMyAqIGRldDA5KSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9ICgtYTAxICogZGV0MTEgKyBhMDIgKiBkZXQxMCAtIGEwMyAqIGRldDA5KSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IChhMzEgKiBkZXQwNSAtIGEzMiAqIGRldDA0ICsgYTMzICogZGV0MDMpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gKC1hMjEgKiBkZXQwNSArIGEyMiAqIGRldDA0IC0gYTIzICogZGV0MDMpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gKC1hMTAgKiBkZXQxMSArIGExMiAqIGRldDA4IC0gYTEzICogZGV0MDcpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzVdID0gKGEwMCAqIGRldDExIC0gYTAyICogZGV0MDggKyBhMDMgKiBkZXQwNykgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSAoLWEzMCAqIGRldDA1ICsgYTMyICogZGV0MDIgLSBhMzMgKiBkZXQwMSkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSAoYTIwICogZGV0MDUgLSBhMjIgKiBkZXQwMiArIGEyMyAqIGRldDAxKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IChhMTAgKiBkZXQxMCAtIGExMSAqIGRldDA4ICsgYTEzICogZGV0MDYpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzldID0gKC1hMDAgKiBkZXQxMCArIGEwMSAqIGRldDA4IC0gYTAzICogZGV0MDYpICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEwXSA9IChhMzAgKiBkZXQwNCAtIGEzMSAqIGRldDAyICsgYTMzICogZGV0MDApICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzExXSA9ICgtYTIwICogZGV0MDQgKyBhMjEgKiBkZXQwMiAtIGEyMyAqIGRldDAwKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMl0gPSAoLWExMCAqIGRldDA5ICsgYTExICogZGV0MDcgLSBhMTIgKiBkZXQwNikgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTNdID0gKGEwMCAqIGRldDA5IC0gYTAxICogZGV0MDcgKyBhMDIgKiBkZXQwNikgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTRdID0gKC1hMzAgKiBkZXQwMyArIGEzMSAqIGRldDAxIC0gYTMyICogZGV0MDApICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzE1XSA9IChhMjAgKiBkZXQwMyAtIGEyMSAqIGRldDAxICsgYTIyICogZGV0MDApICogZGV0O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHkobWF0cml4KSB7XHJcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgYTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgYTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgYTAzID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgYTEwID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgYTExID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgYTEyID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgYTEzID0gdGhpcy52YWx1ZXNbN107XHJcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy52YWx1ZXNbOV07XHJcbiAgICAgICAgY29uc3QgYTIyID0gdGhpcy52YWx1ZXNbMTBdO1xyXG4gICAgICAgIGNvbnN0IGEyMyA9IHRoaXMudmFsdWVzWzExXTtcclxuICAgICAgICBjb25zdCBhMzAgPSB0aGlzLnZhbHVlc1sxMl07XHJcbiAgICAgICAgY29uc3QgYTMxID0gdGhpcy52YWx1ZXNbMTNdO1xyXG4gICAgICAgIGNvbnN0IGEzMiA9IHRoaXMudmFsdWVzWzE0XTtcclxuICAgICAgICBjb25zdCBhMzMgPSB0aGlzLnZhbHVlc1sxNV07XHJcbiAgICAgICAgbGV0IGIwID0gbWF0cml4LmF0KDApO1xyXG4gICAgICAgIGxldCBiMSA9IG1hdHJpeC5hdCgxKTtcclxuICAgICAgICBsZXQgYjIgPSBtYXRyaXguYXQoMik7XHJcbiAgICAgICAgbGV0IGIzID0gbWF0cml4LmF0KDMpO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XHJcbiAgICAgICAgYjAgPSBtYXRyaXguYXQoNCk7XHJcbiAgICAgICAgYjEgPSBtYXRyaXguYXQoNSk7XHJcbiAgICAgICAgYjIgPSBtYXRyaXguYXQoNik7XHJcbiAgICAgICAgYjMgPSBtYXRyaXguYXQoNyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s1XSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcclxuICAgICAgICBiMCA9IG1hdHJpeC5hdCg4KTtcclxuICAgICAgICBiMSA9IG1hdHJpeC5hdCg5KTtcclxuICAgICAgICBiMiA9IG1hdHJpeC5hdCgxMCk7XHJcbiAgICAgICAgYjMgPSBtYXRyaXguYXQoMTEpO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzhdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOV0gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMF0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxMV0gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcclxuICAgICAgICBiMCA9IG1hdHJpeC5hdCgxMik7XHJcbiAgICAgICAgYjEgPSBtYXRyaXguYXQoMTMpO1xyXG4gICAgICAgIGIyID0gbWF0cml4LmF0KDE0KTtcclxuICAgICAgICBiMyA9IG1hdHJpeC5hdCgxNSk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTJdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTNdID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTRdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTVdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseVZlYzModmVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueTtcclxuICAgICAgICBjb25zdCB6ID0gdmVjdG9yLno7XHJcbiAgICAgICAgcmV0dXJuIG5ldyB2ZWMzKFtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMF0gKiB4ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzRdICogeSArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s4XSAqIHogK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMTJdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1sxXSAqIHggK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNV0gKiB5ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzldICogeiArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxM10sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzJdICogeCArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s2XSAqIHkgK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMTBdICogeiArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxNF1cclxuICAgICAgICBdKTtcclxuICAgIH1cclxuICAgIG11bHRpcGx5VmVjNCh2ZWN0b3IsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWM0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3Rvci56O1xyXG4gICAgICAgIGNvbnN0IHcgPSB2ZWN0b3IudztcclxuICAgICAgICBkZXN0LnggPVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1swXSAqIHggK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNF0gKiB5ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzhdICogeiArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxMl0gKiB3O1xyXG4gICAgICAgIGRlc3QueSA9XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzFdICogeCArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s1XSAqIHkgK1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbOV0gKiB6ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzEzXSAqIHc7XHJcbiAgICAgICAgZGVzdC56ID1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMl0gKiB4ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzZdICogeSArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxMF0gKiB6ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzE0XSAqIHc7XHJcbiAgICAgICAgZGVzdC53ID1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbM10gKiB4ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzddICogeSArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxMV0gKiB6ICtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzE1XSAqIHc7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICB0b01hdDMoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBtYXQzKFtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMF0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzFdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1syXSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbNF0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzVdLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1s2XSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbOF0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzldLFxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1sxMF1cclxuICAgICAgICBdKTtcclxuICAgIH1cclxuICAgIHRvSW52ZXJzZU1hdDMoKSB7XHJcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgYTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgYTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgYTEwID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgYTExID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgYTEyID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy52YWx1ZXNbOV07XHJcbiAgICAgICAgY29uc3QgYTIyID0gdGhpcy52YWx1ZXNbMTBdO1xyXG4gICAgICAgIGNvbnN0IGRldDAxID0gYTIyICogYTExIC0gYTEyICogYTIxO1xyXG4gICAgICAgIGNvbnN0IGRldDExID0gLWEyMiAqIGExMCArIGExMiAqIGEyMDtcclxuICAgICAgICBjb25zdCBkZXQyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMDtcclxuICAgICAgICBsZXQgZGV0ID0gYTAwICogZGV0MDEgKyBhMDEgKiBkZXQxMSArIGEwMiAqIGRldDIxO1xyXG4gICAgICAgIGlmICghZGV0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXQgPSAxLjAgLyBkZXQ7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBtYXQzKFtcclxuICAgICAgICAgICAgZGV0MDEgKiBkZXQsXHJcbiAgICAgICAgICAgICgtYTIyICogYTAxICsgYTAyICogYTIxKSAqIGRldCxcclxuICAgICAgICAgICAgKGExMiAqIGEwMSAtIGEwMiAqIGExMSkgKiBkZXQsXHJcbiAgICAgICAgICAgIGRldDExICogZGV0LFxyXG4gICAgICAgICAgICAoYTIyICogYTAwIC0gYTAyICogYTIwKSAqIGRldCxcclxuICAgICAgICAgICAgKC1hMTIgKiBhMDAgKyBhMDIgKiBhMTApICogZGV0LFxyXG4gICAgICAgICAgICBkZXQyMSAqIGRldCxcclxuICAgICAgICAgICAgKC1hMjEgKiBhMDAgKyBhMDEgKiBhMjApICogZGV0LFxyXG4gICAgICAgICAgICAoYTExICogYTAwIC0gYTAxICogYTEwKSAqIGRldFxyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG4gICAgdHJhbnNsYXRlKHZlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3Rvci56O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzEyXSArPVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1swXSAqIHggKyB0aGlzLnZhbHVlc1s0XSAqIHkgKyB0aGlzLnZhbHVlc1s4XSAqIHo7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTNdICs9XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzFdICogeCArIHRoaXMudmFsdWVzWzVdICogeSArIHRoaXMudmFsdWVzWzldICogejtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxNF0gKz1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMl0gKiB4ICsgdGhpcy52YWx1ZXNbNl0gKiB5ICsgdGhpcy52YWx1ZXNbMTBdICogejtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxNV0gKz1cclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbM10gKiB4ICsgdGhpcy52YWx1ZXNbN10gKiB5ICsgdGhpcy52YWx1ZXNbMTFdICogejtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHNjYWxlKHZlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3Rvci56O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdICo9IHg7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gKj0geDtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSAqPSB4O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdICo9IHg7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gKj0geTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s1XSAqPSB5O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdICo9IHk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gKj0geTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s4XSAqPSB6O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzldICo9IHo7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTBdICo9IHo7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTFdICo9IHo7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICByb3RhdGUoYW5nbGUsIGF4aXMpIHtcclxuICAgICAgICBsZXQgeCA9IGF4aXMueDtcclxuICAgICAgICBsZXQgeSA9IGF4aXMueTtcclxuICAgICAgICBsZXQgeiA9IGF4aXMuejtcclxuICAgICAgICBsZXQgbGVuZ3RoID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeik7XHJcbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsZW5ndGggIT09IDEpIHtcclxuICAgICAgICAgICAgbGVuZ3RoID0gMSAvIGxlbmd0aDtcclxuICAgICAgICAgICAgeCAqPSBsZW5ndGg7XHJcbiAgICAgICAgICAgIHkgKj0gbGVuZ3RoO1xyXG4gICAgICAgICAgICB6ICo9IGxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcyA9IE1hdGguc2luKGFuZ2xlKTtcclxuICAgICAgICBjb25zdCBjID0gTWF0aC5jb3MoYW5nbGUpO1xyXG4gICAgICAgIGNvbnN0IHQgPSAxLjAgLSBjO1xyXG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IGEwMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IGEwMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IGEwMyA9IHRoaXMudmFsdWVzWzNdO1xyXG4gICAgICAgIGNvbnN0IGExMCA9IHRoaXMudmFsdWVzWzRdO1xyXG4gICAgICAgIGNvbnN0IGExMSA9IHRoaXMudmFsdWVzWzVdO1xyXG4gICAgICAgIGNvbnN0IGExMiA9IHRoaXMudmFsdWVzWzZdO1xyXG4gICAgICAgIGNvbnN0IGExMyA9IHRoaXMudmFsdWVzWzddO1xyXG4gICAgICAgIGNvbnN0IGEyMCA9IHRoaXMudmFsdWVzWzhdO1xyXG4gICAgICAgIGNvbnN0IGEyMSA9IHRoaXMudmFsdWVzWzldO1xyXG4gICAgICAgIGNvbnN0IGEyMiA9IHRoaXMudmFsdWVzWzEwXTtcclxuICAgICAgICBjb25zdCBhMjMgPSB0aGlzLnZhbHVlc1sxMV07XHJcbiAgICAgICAgY29uc3QgYjAwID0geCAqIHggKiB0ICsgYztcclxuICAgICAgICBjb25zdCBiMDEgPSB5ICogeCAqIHQgKyB6ICogcztcclxuICAgICAgICBjb25zdCBiMDIgPSB6ICogeCAqIHQgLSB5ICogcztcclxuICAgICAgICBjb25zdCBiMTAgPSB4ICogeSAqIHQgLSB6ICogcztcclxuICAgICAgICBjb25zdCBiMTEgPSB5ICogeSAqIHQgKyBjO1xyXG4gICAgICAgIGNvbnN0IGIxMiA9IHogKiB5ICogdCArIHggKiBzO1xyXG4gICAgICAgIGNvbnN0IGIyMCA9IHggKiB6ICogdCArIHkgKiBzO1xyXG4gICAgICAgIGNvbnN0IGIyMSA9IHkgKiB6ICogdCAtIHggKiBzO1xyXG4gICAgICAgIGNvbnN0IGIyMiA9IHogKiB6ICogdCArIGM7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSBhMDAgKiBiMDAgKyBhMTAgKiBiMDEgKyBhMjAgKiBiMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSBhMDEgKiBiMDAgKyBhMTEgKiBiMDEgKyBhMjEgKiBiMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSBhMDIgKiBiMDAgKyBhMTIgKiBiMDEgKyBhMjIgKiBiMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSBhMDMgKiBiMDAgKyBhMTMgKiBiMDEgKyBhMjMgKiBiMDI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSBhMDAgKiBiMTAgKyBhMTAgKiBiMTEgKyBhMjAgKiBiMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSBhMDEgKiBiMTAgKyBhMTEgKiBiMTEgKyBhMjEgKiBiMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSBhMDIgKiBiMTAgKyBhMTIgKiBiMTEgKyBhMjIgKiBiMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSBhMDMgKiBiMTAgKyBhMTMgKiBiMTEgKyBhMjMgKiBiMTI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSBhMDAgKiBiMjAgKyBhMTAgKiBiMjEgKyBhMjAgKiBiMjI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOV0gPSBhMDEgKiBiMjAgKyBhMTEgKiBiMjEgKyBhMjEgKiBiMjI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMTBdID0gYTAyICogYjIwICsgYTEyICogYjIxICsgYTIyICogYjIyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzExXSA9IGEwMyAqIGIyMCArIGExMyAqIGIyMSArIGEyMyAqIGIyMjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcnVzdHVtKGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XHJcbiAgICAgICAgY29uc3QgcmwgPSByaWdodCAtIGxlZnQ7XHJcbiAgICAgICAgY29uc3QgdGIgPSB0b3AgLSBib3R0b207XHJcbiAgICAgICAgY29uc3QgZm4gPSBmYXIgLSBuZWFyO1xyXG4gICAgICAgIHJldHVybiBuZXcgbWF0NChbXHJcbiAgICAgICAgICAgIChuZWFyICogMikgLyBybCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgKG5lYXIgKiAyKSAvIHRiLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAocmlnaHQgKyBsZWZ0KSAvIHJsLFxyXG4gICAgICAgICAgICAodG9wICsgYm90dG9tKSAvIHRiLFxyXG4gICAgICAgICAgICAtKGZhciArIG5lYXIpIC8gZm4sXHJcbiAgICAgICAgICAgIC0xLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAtKGZhciAqIG5lYXIgKiAyKSAvIGZuLFxyXG4gICAgICAgICAgICAwXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgcGVyc3BlY3RpdmUoZm92LCBhc3BlY3QsIG5lYXIsIGZhcikge1xyXG4gICAgICAgIGNvbnN0IHRvcCA9IG5lYXIgKiBNYXRoLnRhbigoZm92ICogTWF0aC5QSSkgLyAzNjAuMCk7XHJcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0b3AgKiBhc3BlY3Q7XHJcbiAgICAgICAgcmV0dXJuIG1hdDQuZnJ1c3R1bSgtcmlnaHQsIHJpZ2h0LCAtdG9wLCB0b3AsIG5lYXIsIGZhcik7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgb3J0aG9ncmFwaGljKGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XHJcbiAgICAgICAgY29uc3QgcmwgPSByaWdodCAtIGxlZnQ7XHJcbiAgICAgICAgY29uc3QgdGIgPSB0b3AgLSBib3R0b207XHJcbiAgICAgICAgY29uc3QgZm4gPSBmYXIgLSBuZWFyO1xyXG4gICAgICAgIHJldHVybiBuZXcgbWF0NChbXHJcbiAgICAgICAgICAgIDIgLyBybCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgMiAvIHRiLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAtMiAvIGZuLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAtKGxlZnQgKyByaWdodCkgLyBybCxcclxuICAgICAgICAgICAgLSh0b3AgKyBib3R0b20pIC8gdGIsXHJcbiAgICAgICAgICAgIC0oZmFyICsgbmVhcikgLyBmbixcclxuICAgICAgICAgICAgMVxyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGxvb2tBdChwb3NpdGlvbiwgdGFyZ2V0LCB1cCA9IHZlYzMudXApIHtcclxuICAgICAgICBpZiAocG9zaXRpb24uZXF1YWxzKHRhcmdldCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWRlbnRpdHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHogPSB2ZWMzLmRpZmZlcmVuY2UocG9zaXRpb24sIHRhcmdldCkubm9ybWFsaXplKCk7XHJcbiAgICAgICAgY29uc3QgeCA9IHZlYzMuY3Jvc3ModXAsIHopLm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWMzLmNyb3NzKHosIHgpLm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIHJldHVybiBuZXcgbWF0NChbXHJcbiAgICAgICAgICAgIHgueCxcclxuICAgICAgICAgICAgeS54LFxyXG4gICAgICAgICAgICB6LngsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHgueSxcclxuICAgICAgICAgICAgeS55LFxyXG4gICAgICAgICAgICB6LnksXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHgueixcclxuICAgICAgICAgICAgeS56LFxyXG4gICAgICAgICAgICB6LnosXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIC12ZWMzLmRvdCh4LCBwb3NpdGlvbiksXHJcbiAgICAgICAgICAgIC12ZWMzLmRvdCh5LCBwb3NpdGlvbiksXHJcbiAgICAgICAgICAgIC12ZWMzLmRvdCh6LCBwb3NpdGlvbiksXHJcbiAgICAgICAgICAgIDFcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBwcm9kdWN0KG0xLCBtMiwgcmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3QgYTAwID0gbTEuYXQoMCk7XHJcbiAgICAgICAgY29uc3QgYTAxID0gbTEuYXQoMSk7XHJcbiAgICAgICAgY29uc3QgYTAyID0gbTEuYXQoMik7XHJcbiAgICAgICAgY29uc3QgYTAzID0gbTEuYXQoMyk7XHJcbiAgICAgICAgY29uc3QgYTEwID0gbTEuYXQoNCk7XHJcbiAgICAgICAgY29uc3QgYTExID0gbTEuYXQoNSk7XHJcbiAgICAgICAgY29uc3QgYTEyID0gbTEuYXQoNik7XHJcbiAgICAgICAgY29uc3QgYTEzID0gbTEuYXQoNyk7XHJcbiAgICAgICAgY29uc3QgYTIwID0gbTEuYXQoOCk7XHJcbiAgICAgICAgY29uc3QgYTIxID0gbTEuYXQoOSk7XHJcbiAgICAgICAgY29uc3QgYTIyID0gbTEuYXQoMTApO1xyXG4gICAgICAgIGNvbnN0IGEyMyA9IG0xLmF0KDExKTtcclxuICAgICAgICBjb25zdCBhMzAgPSBtMS5hdCgxMik7XHJcbiAgICAgICAgY29uc3QgYTMxID0gbTEuYXQoMTMpO1xyXG4gICAgICAgIGNvbnN0IGEzMiA9IG0xLmF0KDE0KTtcclxuICAgICAgICBjb25zdCBhMzMgPSBtMS5hdCgxNSk7XHJcbiAgICAgICAgY29uc3QgYjAwID0gbTIuYXQoMCk7XHJcbiAgICAgICAgY29uc3QgYjAxID0gbTIuYXQoMSk7XHJcbiAgICAgICAgY29uc3QgYjAyID0gbTIuYXQoMik7XHJcbiAgICAgICAgY29uc3QgYjAzID0gbTIuYXQoMyk7XHJcbiAgICAgICAgY29uc3QgYjEwID0gbTIuYXQoNCk7XHJcbiAgICAgICAgY29uc3QgYjExID0gbTIuYXQoNSk7XHJcbiAgICAgICAgY29uc3QgYjEyID0gbTIuYXQoNik7XHJcbiAgICAgICAgY29uc3QgYjEzID0gbTIuYXQoNyk7XHJcbiAgICAgICAgY29uc3QgYjIwID0gbTIuYXQoOCk7XHJcbiAgICAgICAgY29uc3QgYjIxID0gbTIuYXQoOSk7XHJcbiAgICAgICAgY29uc3QgYjIyID0gbTIuYXQoMTApO1xyXG4gICAgICAgIGNvbnN0IGIyMyA9IG0yLmF0KDExKTtcclxuICAgICAgICBjb25zdCBiMzAgPSBtMi5hdCgxMik7XHJcbiAgICAgICAgY29uc3QgYjMxID0gbTIuYXQoMTMpO1xyXG4gICAgICAgIGNvbnN0IGIzMiA9IG0yLmF0KDE0KTtcclxuICAgICAgICBjb25zdCBiMzMgPSBtMi5hdCgxNSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXN1bHQuaW5pdChbXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDAgKyBiMDEgKiBhMTAgKyBiMDIgKiBhMjAgKyBiMDMgKiBhMzAsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDEgKyBiMDEgKiBhMTEgKyBiMDIgKiBhMjEgKyBiMDMgKiBhMzEsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjIgKyBiMDMgKiBhMzIsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDMgKyBiMDEgKiBhMTMgKyBiMDIgKiBhMjMgKyBiMDMgKiBhMzMsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjAgKyBiMTMgKiBhMzAsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjEgKyBiMTMgKiBhMzEsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjIgKyBiMTMgKiBhMzIsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDMgKyBiMTEgKiBhMTMgKyBiMTIgKiBhMjMgKyBiMTMgKiBhMzMsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDAgKyBiMjEgKiBhMTAgKyBiMjIgKiBhMjAgKyBiMjMgKiBhMzAsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjEgKyBiMjMgKiBhMzEsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDIgKyBiMjEgKiBhMTIgKyBiMjIgKiBhMjIgKyBiMjMgKiBhMzIsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDMgKyBiMjEgKiBhMTMgKyBiMjIgKiBhMjMgKyBiMjMgKiBhMzMsXHJcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDAgKyBiMzEgKiBhMTAgKyBiMzIgKiBhMjAgKyBiMzMgKiBhMzAsXHJcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDEgKyBiMzEgKiBhMTEgKyBiMzIgKiBhMjEgKyBiMzMgKiBhMzEsXHJcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDIgKyBiMzEgKiBhMTIgKyBiMzIgKiBhMjIgKyBiMzMgKiBhMzIsXHJcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDMgKyBiMzEgKiBhMTMgKyBiMzIgKiBhMjMgKyBiMzMgKiBhMzNcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IG1hdDQoW1xyXG4gICAgICAgICAgICAgICAgYjAwICogYTAwICsgYjAxICogYTEwICsgYjAyICogYTIwICsgYjAzICogYTMwLFxyXG4gICAgICAgICAgICAgICAgYjAwICogYTAxICsgYjAxICogYTExICsgYjAyICogYTIxICsgYjAzICogYTMxLFxyXG4gICAgICAgICAgICAgICAgYjAwICogYTAyICsgYjAxICogYTEyICsgYjAyICogYTIyICsgYjAzICogYTMyLFxyXG4gICAgICAgICAgICAgICAgYjAwICogYTAzICsgYjAxICogYTEzICsgYjAyICogYTIzICsgYjAzICogYTMzLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAwICsgYjExICogYTEwICsgYjEyICogYTIwICsgYjEzICogYTMwLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAxICsgYjExICogYTExICsgYjEyICogYTIxICsgYjEzICogYTMxLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAyICsgYjExICogYTEyICsgYjEyICogYTIyICsgYjEzICogYTMyLFxyXG4gICAgICAgICAgICAgICAgYjEwICogYTAzICsgYjExICogYTEzICsgYjEyICogYTIzICsgYjEzICogYTMzLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwICsgYjIzICogYTMwLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxICsgYjIzICogYTMxLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyICsgYjIzICogYTMyLFxyXG4gICAgICAgICAgICAgICAgYjIwICogYTAzICsgYjIxICogYTEzICsgYjIyICogYTIzICsgYjIzICogYTMzLFxyXG4gICAgICAgICAgICAgICAgYjMwICogYTAwICsgYjMxICogYTEwICsgYjMyICogYTIwICsgYjMzICogYTMwLFxyXG4gICAgICAgICAgICAgICAgYjMwICogYTAxICsgYjMxICogYTExICsgYjMyICogYTIxICsgYjMzICogYTMxLFxyXG4gICAgICAgICAgICAgICAgYjMwICogYTAyICsgYjMxICogYTEyICsgYjMyICogYTIyICsgYjMzICogYTMyLFxyXG4gICAgICAgICAgICAgICAgYjMwICogYTAzICsgYjMxICogYTEzICsgYjMyICogYTIzICsgYjMzICogYTMzXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5tYXQ0LmlkZW50aXR5ID0gbmV3IG1hdDQoKS5zZXRJZGVudGl0eSgpO1xyXG4iLCJpbXBvcnQgdmVjMyBmcm9tICcuL3ZlYzMnO1xyXG5pbXBvcnQgeyBlcHNpbG9uIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB2ZWMyIHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheSgyKTtcclxuICAgICAgICBpZiAodmFsdWVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy54eSA9IHZhbHVlcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgeCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMF07XHJcbiAgICB9XHJcbiAgICBnZXQgeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMV07XHJcbiAgICB9XHJcbiAgICBnZXQgeHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLnZhbHVlc1swXSwgdGhpcy52YWx1ZXNbMV1dO1xyXG4gICAgfVxyXG4gICAgc2V0IHgodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHkodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHh5KHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgfVxyXG4gICAgYXQoaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy54ID0gMDtcclxuICAgICAgICB0aGlzLnkgPSAwO1xyXG4gICAgfVxyXG4gICAgY29weShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB0aGlzLng7XHJcbiAgICAgICAgZGVzdC55ID0gdGhpcy55O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgbmVnYXRlKGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IC10aGlzLng7XHJcbiAgICAgICAgZGVzdC55ID0gLXRoaXMueTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIGVxdWFscyh2ZWN0b3IsIHRocmVzaG9sZCA9IGVwc2lsb24pIHtcclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy54IC0gdmVjdG9yLngpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMueSAtIHZlY3Rvci55KSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgbGVuZ3RoKCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy5zcXVhcmVkTGVuZ3RoKCkpO1xyXG4gICAgfVxyXG4gICAgc3F1YXJlZExlbmd0aCgpIHtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgcmV0dXJuIHggKiB4ICsgeSAqIHk7XHJcbiAgICB9XHJcbiAgICBhZGQodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54ICs9IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSArPSB2ZWN0b3IueTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHN1YnRyYWN0KHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCAtPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgLT0gdmVjdG9yLnk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseSh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggKj0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55ICo9IHZlY3Rvci55O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgZGl2aWRlKHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCAvPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgLz0gdmVjdG9yLnk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBzY2FsZSh2YWx1ZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ICo9IHZhbHVlO1xyXG4gICAgICAgIGRlc3QueSAqPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIG5vcm1hbGl6ZShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKTtcclxuICAgICAgICBpZiAobGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGRlc3QueCA9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueSA9IDA7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZW5ndGggPSAxLjAgLyBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC54ICo9IGxlbmd0aDtcclxuICAgICAgICBkZXN0LnkgKj0gbGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlNYXQyKG1hdHJpeCwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hdHJpeC5tdWx0aXBseVZlYzIodGhpcywgZGVzdCk7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseU1hdDMobWF0cml4LCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWF0cml4Lm11bHRpcGx5VmVjMih0aGlzLCBkZXN0KTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjcm9zcyh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeDIgPSB2ZWN0b3IyLng7XHJcbiAgICAgICAgY29uc3QgeTIgPSB2ZWN0b3IyLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHggKiB5MiAtIHkgKiB4MjtcclxuICAgICAgICBkZXN0LnggPSAwO1xyXG4gICAgICAgIGRlc3QueSA9IDA7XHJcbiAgICAgICAgZGVzdC56ID0gejtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBkb3QodmVjdG9yLCB2ZWN0b3IyKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlY3Rvci54ICogdmVjdG9yMi54ICsgdmVjdG9yLnkgKiB2ZWN0b3IyLnk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZGlzdGFuY2UodmVjdG9yLCB2ZWN0b3IyKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnNxdWFyZWREaXN0YW5jZSh2ZWN0b3IsIHZlY3RvcjIpKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzcXVhcmVkRGlzdGFuY2UodmVjdG9yLCB2ZWN0b3IyKSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3RvcjIueCAtIHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IyLnkgLSB2ZWN0b3IueTtcclxuICAgICAgICByZXR1cm4geCAqIHggKyB5ICogeTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBkaXJlY3Rpb24odmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLnggLSB2ZWN0b3IyLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55IC0gdmVjdG9yMi55O1xyXG4gICAgICAgIGxldCBsZW5ndGggPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XHJcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBkZXN0LnggPSAwO1xyXG4gICAgICAgICAgICBkZXN0LnkgPSAwO1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGVuZ3RoID0gMSAvIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnggPSB4ICogbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueSA9IHkgKiBsZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgbWl4KHZlY3RvciwgdmVjdG9yMiwgdGltZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueTtcclxuICAgICAgICBjb25zdCB4MiA9IHZlY3RvcjIueDtcclxuICAgICAgICBjb25zdCB5MiA9IHZlY3RvcjIueTtcclxuICAgICAgICBkZXN0LnggPSB4ICsgdGltZSAqICh4MiAtIHgpO1xyXG4gICAgICAgIGRlc3QueSA9IHkgKyB0aW1lICogKHkyIC0geSk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc3VtKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKyB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgKyB2ZWN0b3IyLnk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZGlmZmVyZW5jZSh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC0gdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC0gdmVjdG9yMi55O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHByb2R1Y3QodmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCAqIHZlY3RvcjIueDtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSAqIHZlY3RvcjIueTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBxdW90aWVudCh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC8gdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC8gdmVjdG9yMi55O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG59XHJcbnZlYzIuemVybyA9IG5ldyB2ZWMyKFswLCAwXSk7XHJcbnZlYzIub25lID0gbmV3IHZlYzIoWzEsIDFdKTtcclxuIiwiaW1wb3J0IG1hdDQgZnJvbSAnLi9tYXQ0JztcclxuaW1wb3J0IHF1YXQgZnJvbSAnLi9xdWF0JztcclxuaW1wb3J0IHZlYzIgZnJvbSAnLi92ZWMyJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi92ZWMzJztcclxuaW1wb3J0IHsgZXBzaWxvbiB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgbWF0MyB7XHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XHJcbiAgICAgICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCh2YWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGF0KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XTtcclxuICAgIH1cclxuICAgIGluaXQodmFsdWVzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSB2YWx1ZXNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgcmVzZXQoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvcHkoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IG1hdDMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcclxuICAgICAgICAgICAgZGVzdC52YWx1ZXNbaV0gPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBhbGwoKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRhdGFbaV0gPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcbiAgICByb3coaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCAqIDMgKyAwXSxcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKiAzICsgMV0sXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICogMyArIDJdXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuICAgIGNvbChpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbaW5kZXhdLCB0aGlzLnZhbHVlc1tpbmRleCArIDNdLCB0aGlzLnZhbHVlc1tpbmRleCArIDZdXTtcclxuICAgIH1cclxuICAgIGVxdWFscyhtYXRyaXgsIHRocmVzaG9sZCA9IGVwc2lsb24pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpcy52YWx1ZXNbaV0gLSBtYXRyaXguYXQoaSkpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBkZXRlcm1pbmFudCgpIHtcclxuICAgICAgICBjb25zdCBhMDAgPSB0aGlzLnZhbHVlc1swXTtcclxuICAgICAgICBjb25zdCBhMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCBhMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCBhMTAgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICBjb25zdCBhMTIgPSB0aGlzLnZhbHVlc1s1XTtcclxuICAgICAgICBjb25zdCBhMjAgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCBhMjEgPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICBjb25zdCBhMjIgPSB0aGlzLnZhbHVlc1s4XTtcclxuICAgICAgICBjb25zdCBkZXQwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMTtcclxuICAgICAgICBjb25zdCBkZXQxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjA7XHJcbiAgICAgICAgY29uc3QgZGV0MjEgPSBhMjEgKiBhMTAgLSBhMTEgKiBhMjA7XHJcbiAgICAgICAgcmV0dXJuIGEwMCAqIGRldDAxICsgYTAxICogZGV0MTEgKyBhMDIgKiBkZXQyMTtcclxuICAgIH1cclxuICAgIHNldElkZW50aXR5KCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s0XSA9IDE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSAwO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gMDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9IDA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSAxO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgdHJhbnNwb3NlKCkge1xyXG4gICAgICAgIGNvbnN0IHRlbXAwMSA9IHRoaXMudmFsdWVzWzFdO1xyXG4gICAgICAgIGNvbnN0IHRlbXAwMiA9IHRoaXMudmFsdWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IHRlbXAxMiA9IHRoaXMudmFsdWVzWzVdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHRlbXAwMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1s1XSA9IHRoaXMudmFsdWVzWzddO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gdGVtcDAyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzddID0gdGVtcDEyO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgaW52ZXJzZSgpIHtcclxuICAgICAgICBjb25zdCBhMDAgPSB0aGlzLnZhbHVlc1swXTtcclxuICAgICAgICBjb25zdCBhMDEgPSB0aGlzLnZhbHVlc1sxXTtcclxuICAgICAgICBjb25zdCBhMDIgPSB0aGlzLnZhbHVlc1syXTtcclxuICAgICAgICBjb25zdCBhMTAgPSB0aGlzLnZhbHVlc1szXTtcclxuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLnZhbHVlc1s0XTtcclxuICAgICAgICBjb25zdCBhMTIgPSB0aGlzLnZhbHVlc1s1XTtcclxuICAgICAgICBjb25zdCBhMjAgPSB0aGlzLnZhbHVlc1s2XTtcclxuICAgICAgICBjb25zdCBhMjEgPSB0aGlzLnZhbHVlc1s3XTtcclxuICAgICAgICBjb25zdCBhMjIgPSB0aGlzLnZhbHVlc1s4XTtcclxuICAgICAgICBjb25zdCBkZXQwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMTtcclxuICAgICAgICBjb25zdCBkZXQxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjA7XHJcbiAgICAgICAgY29uc3QgZGV0MjEgPSBhMjEgKiBhMTAgLSBhMTEgKiBhMjA7XHJcbiAgICAgICAgbGV0IGRldCA9IGEwMCAqIGRldDAxICsgYTAxICogZGV0MTEgKyBhMDIgKiBkZXQyMTtcclxuICAgICAgICBpZiAoIWRldCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGV0ID0gMS4wIC8gZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gZGV0MDEgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSAoLWEyMiAqIGEwMSArIGEwMiAqIGEyMSkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSAoYTEyICogYTAxIC0gYTAyICogYTExKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IGRldDExICogZGV0O1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gKGEyMiAqIGEwMCAtIGEwMiAqIGEyMCkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSAoLWExMiAqIGEwMCArIGEwMiAqIGExMCkgKiBkZXQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSBkZXQyMSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9ICgtYTIxICogYTAwICsgYTAxICogYTIwKSAqIGRldDtcclxuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IChhMTEgKiBhMDAgLSBhMDEgKiBhMTApICogZGV0O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHkobWF0cml4KSB7XHJcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgYTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgYTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgYTEwID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgYTExID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgYTEyID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy52YWx1ZXNbN107XHJcbiAgICAgICAgY29uc3QgYTIyID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgYjAwID0gbWF0cml4LmF0KDApO1xyXG4gICAgICAgIGNvbnN0IGIwMSA9IG1hdHJpeC5hdCgxKTtcclxuICAgICAgICBjb25zdCBiMDIgPSBtYXRyaXguYXQoMik7XHJcbiAgICAgICAgY29uc3QgYjEwID0gbWF0cml4LmF0KDMpO1xyXG4gICAgICAgIGNvbnN0IGIxMSA9IG1hdHJpeC5hdCg0KTtcclxuICAgICAgICBjb25zdCBiMTIgPSBtYXRyaXguYXQoNSk7XHJcbiAgICAgICAgY29uc3QgYjIwID0gbWF0cml4LmF0KDYpO1xyXG4gICAgICAgIGNvbnN0IGIyMSA9IG1hdHJpeC5hdCg3KTtcclxuICAgICAgICBjb25zdCBiMjIgPSBtYXRyaXguYXQoOCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSBiMDAgKiBhMDAgKyBiMDEgKiBhMTAgKyBiMDIgKiBhMjA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSBiMDAgKiBhMDEgKyBiMDEgKiBhMTEgKyBiMDIgKiBhMjE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjI7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSBiMjAgKiBhMDAgKyBiMjEgKiBhMTAgKyBiMjIgKiBhMjA7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjE7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSBiMjAgKiBhMDIgKyBiMjEgKiBhMTIgKyBiMjIgKiBhMjI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseVZlYzIodmVjdG9yLCByZXN1bHQpIHtcclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55O1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgcmVzdWx0Lnh5ID0gW1xyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzBdICsgeSAqIHRoaXMudmFsdWVzWzNdICsgdGhpcy52YWx1ZXNbNl0sXHJcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMV0gKyB5ICogdGhpcy52YWx1ZXNbNF0gKyB0aGlzLnZhbHVlc1s3XVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyB2ZWMyKFtcclxuICAgICAgICAgICAgICAgIHggKiB0aGlzLnZhbHVlc1swXSArIHkgKiB0aGlzLnZhbHVlc1szXSArIHRoaXMudmFsdWVzWzZdLFxyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzFdICsgeSAqIHRoaXMudmFsdWVzWzRdICsgdGhpcy52YWx1ZXNbN11cclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlWZWMzKHZlY3RvciwgcmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueTtcclxuICAgICAgICBjb25zdCB6ID0gdmVjdG9yLno7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXN1bHQueHl6ID0gW1xyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzBdICsgeSAqIHRoaXMudmFsdWVzWzNdICsgeiAqIHRoaXMudmFsdWVzWzZdLFxyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzFdICsgeSAqIHRoaXMudmFsdWVzWzRdICsgeiAqIHRoaXMudmFsdWVzWzddLFxyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzJdICsgeSAqIHRoaXMudmFsdWVzWzVdICsgeiAqIHRoaXMudmFsdWVzWzhdXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IHZlYzMoW1xyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzBdICsgeSAqIHRoaXMudmFsdWVzWzNdICsgeiAqIHRoaXMudmFsdWVzWzZdLFxyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzFdICsgeSAqIHRoaXMudmFsdWVzWzRdICsgeiAqIHRoaXMudmFsdWVzWzddLFxyXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzJdICsgeSAqIHRoaXMudmFsdWVzWzVdICsgeiAqIHRoaXMudmFsdWVzWzhdXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRvTWF0NChyZXN1bHQpIHtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5pbml0KFtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzBdLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMV0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1syXSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1szXSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzRdLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNV0sXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNl0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s3XSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzhdLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIDFcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IG1hdDQoW1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMF0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1sxXSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzJdLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzNdLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNF0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s1XSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s2XSxcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzddLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbOF0sXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgMVxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0b1F1YXQoKSB7XHJcbiAgICAgICAgY29uc3QgbTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgbTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgbTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgbTEwID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgbTExID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgbTEyID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgbTIwID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgbTIxID0gdGhpcy52YWx1ZXNbN107XHJcbiAgICAgICAgY29uc3QgbTIyID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgZm91clhTcXVhcmVkTWludXMxID0gbTAwIC0gbTExIC0gbTIyO1xyXG4gICAgICAgIGNvbnN0IGZvdXJZU3F1YXJlZE1pbnVzMSA9IG0xMSAtIG0wMCAtIG0yMjtcclxuICAgICAgICBjb25zdCBmb3VyWlNxdWFyZWRNaW51czEgPSBtMjIgLSBtMDAgLSBtMTE7XHJcbiAgICAgICAgY29uc3QgZm91cldTcXVhcmVkTWludXMxID0gbTAwICsgbTExICsgbTIyO1xyXG4gICAgICAgIGxldCBiaWdnZXN0SW5kZXggPSAwO1xyXG4gICAgICAgIGxldCBmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEgPSBmb3VyV1NxdWFyZWRNaW51czE7XHJcbiAgICAgICAgaWYgKGZvdXJYU3F1YXJlZE1pbnVzMSA+IGZvdXJCaWdnZXN0U3F1YXJlZE1pbnVzMSkge1xyXG4gICAgICAgICAgICBmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEgPSBmb3VyWFNxdWFyZWRNaW51czE7XHJcbiAgICAgICAgICAgIGJpZ2dlc3RJbmRleCA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmb3VyWVNxdWFyZWRNaW51czEgPiBmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEpIHtcclxuICAgICAgICAgICAgZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxID0gZm91cllTcXVhcmVkTWludXMxO1xyXG4gICAgICAgICAgICBiaWdnZXN0SW5kZXggPSAyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm91clpTcXVhcmVkTWludXMxID4gZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxKSB7XHJcbiAgICAgICAgICAgIGZvdXJCaWdnZXN0U3F1YXJlZE1pbnVzMSA9IGZvdXJaU3F1YXJlZE1pbnVzMTtcclxuICAgICAgICAgICAgYmlnZ2VzdEluZGV4ID0gMztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYmlnZ2VzdFZhbCA9IE1hdGguc3FydChmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEgKyAxKSAqIDAuNTtcclxuICAgICAgICBjb25zdCBtdWx0ID0gMC4yNSAvIGJpZ2dlc3RWYWw7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICBzd2l0Y2ggKGJpZ2dlc3RJbmRleCkge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICByZXN1bHQudyA9IGJpZ2dlc3RWYWw7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueCA9IChtMTIgLSBtMjEpICogbXVsdDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC55ID0gKG0yMCAtIG0wMikgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnogPSAobTAxIC0gbTEwKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LncgPSAobTEyIC0gbTIxKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueCA9IGJpZ2dlc3RWYWw7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueSA9IChtMDEgKyBtMTApICogbXVsdDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC56ID0gKG0yMCArIG0wMikgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIHJlc3VsdC53ID0gKG0yMCAtIG0wMikgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnggPSAobTAxICsgbTEwKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueSA9IGJpZ2dlc3RWYWw7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueiA9IChtMTIgKyBtMjEpICogbXVsdDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICByZXN1bHQudyA9IChtMDEgLSBtMTApICogbXVsdDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC54ID0gKG0yMCArIG0wMikgKiBtdWx0O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnkgPSAobTEyICsgbTIxKSAqIG11bHQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQueiA9IGJpZ2dlc3RWYWw7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHJvdGF0ZShhbmdsZSwgYXhpcykge1xyXG4gICAgICAgIGxldCB4ID0gYXhpcy54O1xyXG4gICAgICAgIGxldCB5ID0gYXhpcy55O1xyXG4gICAgICAgIGxldCB6ID0gYXhpcy56O1xyXG4gICAgICAgIGxldCBsZW5ndGggPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTtcclxuICAgICAgICBpZiAoIWxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxlbmd0aCAhPT0gMSkge1xyXG4gICAgICAgICAgICBsZW5ndGggPSAxIC8gbGVuZ3RoO1xyXG4gICAgICAgICAgICB4ICo9IGxlbmd0aDtcclxuICAgICAgICAgICAgeSAqPSBsZW5ndGg7XHJcbiAgICAgICAgICAgIHogKj0gbGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzID0gTWF0aC5zaW4oYW5nbGUpO1xyXG4gICAgICAgIGNvbnN0IGMgPSBNYXRoLmNvcyhhbmdsZSk7XHJcbiAgICAgICAgY29uc3QgdCA9IDEuMCAtIGM7XHJcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgYTAxID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgYTAyID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgYTEwID0gdGhpcy52YWx1ZXNbNF07XHJcbiAgICAgICAgY29uc3QgYTExID0gdGhpcy52YWx1ZXNbNV07XHJcbiAgICAgICAgY29uc3QgYTEyID0gdGhpcy52YWx1ZXNbNl07XHJcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbOF07XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy52YWx1ZXNbOV07XHJcbiAgICAgICAgY29uc3QgYTIyID0gdGhpcy52YWx1ZXNbMTBdO1xyXG4gICAgICAgIGNvbnN0IGIwMCA9IHggKiB4ICogdCArIGM7XHJcbiAgICAgICAgY29uc3QgYjAxID0geSAqIHggKiB0ICsgeiAqIHM7XHJcbiAgICAgICAgY29uc3QgYjAyID0geiAqIHggKiB0IC0geSAqIHM7XHJcbiAgICAgICAgY29uc3QgYjEwID0geCAqIHkgKiB0IC0geiAqIHM7XHJcbiAgICAgICAgY29uc3QgYjExID0geSAqIHkgKiB0ICsgYztcclxuICAgICAgICBjb25zdCBiMTIgPSB6ICogeSAqIHQgKyB4ICogcztcclxuICAgICAgICBjb25zdCBiMjAgPSB4ICogeiAqIHQgKyB5ICogcztcclxuICAgICAgICBjb25zdCBiMjEgPSB5ICogeiAqIHQgLSB4ICogcztcclxuICAgICAgICBjb25zdCBiMjIgPSB6ICogeiAqIHQgKyBjO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gYTAwICogYjAwICsgYTEwICogYjAxICsgYTIwICogYjAyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gYTAxICogYjAwICsgYTExICogYjAxICsgYTIxICogYjAyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gYTAyICogYjAwICsgYTEyICogYjAxICsgYTIyICogYjAyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gYTAwICogYjEwICsgYTEwICogYjExICsgYTIwICogYjEyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gYTAxICogYjEwICsgYTExICogYjExICsgYTIxICogYjEyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzVdID0gYTAyICogYjEwICsgYTEyICogYjExICsgYTIyICogYjEyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gYTAwICogYjIwICsgYTEwICogYjIxICsgYTIwICogYjIyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzddID0gYTAxICogYjIwICsgYTExICogYjIxICsgYTIxICogYjIyO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzhdID0gYTAyICogYjIwICsgYTEyICogYjIxICsgYTIyICogYjIyO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHByb2R1Y3QobTEsIG0yLCByZXN1bHQpIHtcclxuICAgICAgICBjb25zdCBhMDAgPSBtMS5hdCgwKTtcclxuICAgICAgICBjb25zdCBhMDEgPSBtMS5hdCgxKTtcclxuICAgICAgICBjb25zdCBhMDIgPSBtMS5hdCgyKTtcclxuICAgICAgICBjb25zdCBhMTAgPSBtMS5hdCgzKTtcclxuICAgICAgICBjb25zdCBhMTEgPSBtMS5hdCg0KTtcclxuICAgICAgICBjb25zdCBhMTIgPSBtMS5hdCg1KTtcclxuICAgICAgICBjb25zdCBhMjAgPSBtMS5hdCg2KTtcclxuICAgICAgICBjb25zdCBhMjEgPSBtMS5hdCg3KTtcclxuICAgICAgICBjb25zdCBhMjIgPSBtMS5hdCg4KTtcclxuICAgICAgICBjb25zdCBiMDAgPSBtMi5hdCgwKTtcclxuICAgICAgICBjb25zdCBiMDEgPSBtMi5hdCgxKTtcclxuICAgICAgICBjb25zdCBiMDIgPSBtMi5hdCgyKTtcclxuICAgICAgICBjb25zdCBiMTAgPSBtMi5hdCgzKTtcclxuICAgICAgICBjb25zdCBiMTEgPSBtMi5hdCg0KTtcclxuICAgICAgICBjb25zdCBiMTIgPSBtMi5hdCg1KTtcclxuICAgICAgICBjb25zdCBiMjAgPSBtMi5hdCg2KTtcclxuICAgICAgICBjb25zdCBiMjEgPSBtMi5hdCg3KTtcclxuICAgICAgICBjb25zdCBiMjIgPSBtMi5hdCg4KTtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5pbml0KFtcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMCArIGIwMSAqIGExMCArIGIwMiAqIGEyMCxcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMSxcclxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMixcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMCArIGIxMSAqIGExMCArIGIxMiAqIGEyMCxcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMSArIGIxMSAqIGExMSArIGIxMiAqIGEyMSxcclxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMiArIGIxMSAqIGExMiArIGIxMiAqIGEyMixcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMCArIGIyMSAqIGExMCArIGIyMiAqIGEyMCxcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMSArIGIyMSAqIGExMSArIGIyMiAqIGEyMSxcclxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMiArIGIyMSAqIGExMiArIGIyMiAqIGEyMlxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgbWF0MyhbXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDAgKyBiMDEgKiBhMTAgKyBiMDIgKiBhMjAsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDEgKyBiMDEgKiBhMTEgKyBiMDIgKiBhMjEsXHJcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjIsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjAsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjEsXHJcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjIsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDAgKyBiMjEgKiBhMTAgKyBiMjIgKiBhMjAsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjEsXHJcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDIgKyBiMjEgKiBhMTIgKyBiMjIgKiBhMjJcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbm1hdDMuaWRlbnRpdHkgPSBuZXcgbWF0MygpLnNldElkZW50aXR5KCk7XHJcbiIsImltcG9ydCBtYXQzIGZyb20gJy4vbWF0Myc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vbWF0NCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB7IGVwc2lsb24gfSBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIHF1YXQge1xyXG4gICAgY29uc3RydWN0b3IodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KDQpO1xyXG4gICAgICAgIGlmICh2YWx1ZXMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnh5encgPSB2YWx1ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IHgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzFdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHooKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzJdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzNdO1xyXG4gICAgfVxyXG4gICAgZ2V0IHh5KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdXTtcclxuICAgIH1cclxuICAgIGdldCB4eXooKSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLnZhbHVlc1swXSwgdGhpcy52YWx1ZXNbMV0sIHRoaXMudmFsdWVzWzJdXTtcclxuICAgIH1cclxuICAgIGdldCB4eXp3KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdLCB0aGlzLnZhbHVlc1syXSwgdGhpcy52YWx1ZXNbM11dO1xyXG4gICAgfVxyXG4gICAgc2V0IHgodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHkodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHoodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHcodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHh5KHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgfVxyXG4gICAgc2V0IHh5eih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlc1syXTtcclxuICAgIH1cclxuICAgIHNldCB4eXp3KHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWVzWzJdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gdmFsdWVzWzNdO1xyXG4gICAgfVxyXG4gICAgYXQoaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgcmVzZXQoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvcHkoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgZGVzdC52YWx1ZXNbaV0gPSB0aGlzLnZhbHVlc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICByb2xsKCkge1xyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCB6ID0gdGhpcy56O1xyXG4gICAgICAgIGNvbnN0IHcgPSB0aGlzLnc7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIoMi4wICogKHggKiB5ICsgdyAqIHopLCB3ICogdyArIHggKiB4IC0geSAqIHkgLSB6ICogeik7XHJcbiAgICB9XHJcbiAgICBwaXRjaCgpIHtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuejtcclxuICAgICAgICBjb25zdCB3ID0gdGhpcy53O1xyXG4gICAgICAgIHJldHVybiBNYXRoLmF0YW4yKDIuMCAqICh5ICogeiArIHcgKiB4KSwgdyAqIHcgLSB4ICogeCAtIHkgKiB5ICsgeiAqIHopO1xyXG4gICAgfVxyXG4gICAgeWF3KCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmFzaW4oMi4wICogKHRoaXMueCAqIHRoaXMueiAtIHRoaXMudyAqIHRoaXMueSkpO1xyXG4gICAgfVxyXG4gICAgZXF1YWxzKHZlY3RvciwgdGhyZXNob2xkID0gZXBzaWxvbikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnZhbHVlc1tpXSAtIHZlY3Rvci5hdChpKSkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHNldElkZW50aXR5KCkge1xyXG4gICAgICAgIHRoaXMueCA9IDA7XHJcbiAgICAgICAgdGhpcy55ID0gMDtcclxuICAgICAgICB0aGlzLnogPSAwO1xyXG4gICAgICAgIHRoaXMudyA9IDE7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBjYWxjdWxhdGVXKCkge1xyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCB6ID0gdGhpcy56O1xyXG4gICAgICAgIHRoaXMudyA9IC1NYXRoLnNxcnQoTWF0aC5hYnMoMS4wIC0geCAqIHggLSB5ICogeSAtIHogKiB6KSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBpbnZlcnNlKCkge1xyXG4gICAgICAgIGNvbnN0IGRvdCA9IHF1YXQuZG90KHRoaXMsIHRoaXMpO1xyXG4gICAgICAgIGlmICghZG90KSB7XHJcbiAgICAgICAgICAgIHRoaXMueHl6dyA9IFswLCAwLCAwLCAwXTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludkRvdCA9IGRvdCA/IDEuMCAvIGRvdCA6IDA7XHJcbiAgICAgICAgdGhpcy54ICo9IC1pbnZEb3Q7XHJcbiAgICAgICAgdGhpcy55ICo9IC1pbnZEb3Q7XHJcbiAgICAgICAgdGhpcy56ICo9IC1pbnZEb3Q7XHJcbiAgICAgICAgdGhpcy53ICo9IGludkRvdDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGNvbmp1Z2F0ZSgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlc1swXSAqPSAtMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1sxXSAqPSAtMTtcclxuICAgICAgICB0aGlzLnZhbHVlc1syXSAqPSAtMTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGxlbmd0aCgpIHtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuejtcclxuICAgICAgICBjb25zdCB3ID0gdGhpcy53O1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHcpO1xyXG4gICAgfVxyXG4gICAgbm9ybWFsaXplKGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCB6ID0gdGhpcy56O1xyXG4gICAgICAgIGNvbnN0IHcgPSB0aGlzLnc7XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdyk7XHJcbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcclxuICAgICAgICAgICAgZGVzdC54ID0gMDtcclxuICAgICAgICAgICAgZGVzdC55ID0gMDtcclxuICAgICAgICAgICAgZGVzdC56ID0gMDtcclxuICAgICAgICAgICAgZGVzdC53ID0gMDtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbmd0aCA9IDEgLyBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC54ID0geCAqIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnkgPSB5ICogbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueiA9IHogKiBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC53ID0gdyAqIGxlbmd0aDtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIGFkZChvdGhlcikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2ldICs9IG90aGVyLmF0KGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIG11bHRpcGx5KG90aGVyKSB7XHJcbiAgICAgICAgY29uc3QgcTF4ID0gdGhpcy52YWx1ZXNbMF07XHJcbiAgICAgICAgY29uc3QgcTF5ID0gdGhpcy52YWx1ZXNbMV07XHJcbiAgICAgICAgY29uc3QgcTF6ID0gdGhpcy52YWx1ZXNbMl07XHJcbiAgICAgICAgY29uc3QgcTF3ID0gdGhpcy52YWx1ZXNbM107XHJcbiAgICAgICAgY29uc3QgcTJ4ID0gb3RoZXIueDtcclxuICAgICAgICBjb25zdCBxMnkgPSBvdGhlci55O1xyXG4gICAgICAgIGNvbnN0IHEyeiA9IG90aGVyLno7XHJcbiAgICAgICAgY29uc3QgcTJ3ID0gb3RoZXIudztcclxuICAgICAgICB0aGlzLnggPSBxMXggKiBxMncgKyBxMXcgKiBxMnggKyBxMXkgKiBxMnogLSBxMXogKiBxMnk7XHJcbiAgICAgICAgdGhpcy55ID0gcTF5ICogcTJ3ICsgcTF3ICogcTJ5ICsgcTF6ICogcTJ4IC0gcTF4ICogcTJ6O1xyXG4gICAgICAgIHRoaXMueiA9IHExeiAqIHEydyArIHExdyAqIHEyeiArIHExeCAqIHEyeSAtIHExeSAqIHEyeDtcclxuICAgICAgICB0aGlzLncgPSBxMXcgKiBxMncgLSBxMXggKiBxMnggLSBxMXkgKiBxMnkgLSBxMXogKiBxMno7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseVZlYzModmVjdG9yLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55O1xyXG4gICAgICAgIGNvbnN0IHogPSB2ZWN0b3IuejtcclxuICAgICAgICBjb25zdCBxeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCBxeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCBxeiA9IHRoaXMuejtcclxuICAgICAgICBjb25zdCBxdyA9IHRoaXMudztcclxuICAgICAgICBjb25zdCBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeTtcclxuICAgICAgICBjb25zdCBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogejtcclxuICAgICAgICBjb25zdCBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeDtcclxuICAgICAgICBjb25zdCBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XHJcbiAgICAgICAgZGVzdC54ID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcclxuICAgICAgICBkZXN0LnkgPSBpeSAqIHF3ICsgaXcgKiAtcXkgKyBpeiAqIC1xeCAtIGl4ICogLXF6O1xyXG4gICAgICAgIGRlc3QueiA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICB0b01hdDMoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IG1hdDMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy55O1xyXG4gICAgICAgIGNvbnN0IHogPSB0aGlzLno7XHJcbiAgICAgICAgY29uc3QgdyA9IHRoaXMudztcclxuICAgICAgICBjb25zdCB4MiA9IHggKyB4O1xyXG4gICAgICAgIGNvbnN0IHkyID0geSArIHk7XHJcbiAgICAgICAgY29uc3QgejIgPSB6ICsgejtcclxuICAgICAgICBjb25zdCB4eCA9IHggKiB4MjtcclxuICAgICAgICBjb25zdCB4eSA9IHggKiB5MjtcclxuICAgICAgICBjb25zdCB4eiA9IHggKiB6MjtcclxuICAgICAgICBjb25zdCB5eSA9IHkgKiB5MjtcclxuICAgICAgICBjb25zdCB5eiA9IHkgKiB6MjtcclxuICAgICAgICBjb25zdCB6eiA9IHogKiB6MjtcclxuICAgICAgICBjb25zdCB3eCA9IHcgKiB4MjtcclxuICAgICAgICBjb25zdCB3eSA9IHcgKiB5MjtcclxuICAgICAgICBjb25zdCB3eiA9IHcgKiB6MjtcclxuICAgICAgICBkZXN0LmluaXQoW1xyXG4gICAgICAgICAgICAxIC0gKHl5ICsgenopLFxyXG4gICAgICAgICAgICB4eSArIHd6LFxyXG4gICAgICAgICAgICB4eiAtIHd5LFxyXG4gICAgICAgICAgICB4eSAtIHd6LFxyXG4gICAgICAgICAgICAxIC0gKHh4ICsgenopLFxyXG4gICAgICAgICAgICB5eiArIHd4LFxyXG4gICAgICAgICAgICB4eiArIHd5LFxyXG4gICAgICAgICAgICB5eiAtIHd4LFxyXG4gICAgICAgICAgICAxIC0gKHh4ICsgeXkpXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICB0b01hdDQoZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IG1hdDQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy55O1xyXG4gICAgICAgIGNvbnN0IHogPSB0aGlzLno7XHJcbiAgICAgICAgY29uc3QgdyA9IHRoaXMudztcclxuICAgICAgICBjb25zdCB4MiA9IHggKyB4O1xyXG4gICAgICAgIGNvbnN0IHkyID0geSArIHk7XHJcbiAgICAgICAgY29uc3QgejIgPSB6ICsgejtcclxuICAgICAgICBjb25zdCB4eCA9IHggKiB4MjtcclxuICAgICAgICBjb25zdCB4eSA9IHggKiB5MjtcclxuICAgICAgICBjb25zdCB4eiA9IHggKiB6MjtcclxuICAgICAgICBjb25zdCB5eSA9IHkgKiB5MjtcclxuICAgICAgICBjb25zdCB5eiA9IHkgKiB6MjtcclxuICAgICAgICBjb25zdCB6eiA9IHogKiB6MjtcclxuICAgICAgICBjb25zdCB3eCA9IHcgKiB4MjtcclxuICAgICAgICBjb25zdCB3eSA9IHcgKiB5MjtcclxuICAgICAgICBjb25zdCB3eiA9IHcgKiB6MjtcclxuICAgICAgICBkZXN0LmluaXQoW1xyXG4gICAgICAgICAgICAxIC0gKHl5ICsgenopLFxyXG4gICAgICAgICAgICB4eSArIHd6LFxyXG4gICAgICAgICAgICB4eiAtIHd5LFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB4eSAtIHd6LFxyXG4gICAgICAgICAgICAxIC0gKHh4ICsgenopLFxyXG4gICAgICAgICAgICB5eiArIHd4LFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB4eiArIHd5LFxyXG4gICAgICAgICAgICB5eiAtIHd4LFxyXG4gICAgICAgICAgICAxIC0gKHh4ICsgeXkpLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAxXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZG90KHExLCBxMikge1xyXG4gICAgICAgIHJldHVybiBxMS54ICogcTIueCArIHExLnkgKiBxMi55ICsgcTEueiAqIHEyLnogKyBxMS53ICogcTIudztcclxuICAgIH1cclxuICAgIHN0YXRpYyBzdW0ocTEsIHEyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgcXVhdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSBxMS54ICsgcTIueDtcclxuICAgICAgICBkZXN0LnkgPSBxMS55ICsgcTIueTtcclxuICAgICAgICBkZXN0LnogPSBxMS56ICsgcTIuejtcclxuICAgICAgICBkZXN0LncgPSBxMS53ICsgcTIudztcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBwcm9kdWN0KHExLCBxMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcTF4ID0gcTEueDtcclxuICAgICAgICBjb25zdCBxMXkgPSBxMS55O1xyXG4gICAgICAgIGNvbnN0IHExeiA9IHExLno7XHJcbiAgICAgICAgY29uc3QgcTF3ID0gcTEudztcclxuICAgICAgICBjb25zdCBxMnggPSBxMi54O1xyXG4gICAgICAgIGNvbnN0IHEyeSA9IHEyLnk7XHJcbiAgICAgICAgY29uc3QgcTJ6ID0gcTIuejtcclxuICAgICAgICBjb25zdCBxMncgPSBxMi53O1xyXG4gICAgICAgIGRlc3QueCA9IHExeCAqIHEydyArIHExdyAqIHEyeCArIHExeSAqIHEyeiAtIHExeiAqIHEyeTtcclxuICAgICAgICBkZXN0LnkgPSBxMXkgKiBxMncgKyBxMXcgKiBxMnkgKyBxMXogKiBxMnggLSBxMXggKiBxMno7XHJcbiAgICAgICAgZGVzdC56ID0gcTF6ICogcTJ3ICsgcTF3ICogcTJ6ICsgcTF4ICogcTJ5IC0gcTF5ICogcTJ4O1xyXG4gICAgICAgIGRlc3QudyA9IHExdyAqIHEydyAtIHExeCAqIHEyeCAtIHExeSAqIHEyeSAtIHExeiAqIHEyejtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjcm9zcyhxMSwgcTIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBxdWF0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHExeCA9IHExLng7XHJcbiAgICAgICAgY29uc3QgcTF5ID0gcTEueTtcclxuICAgICAgICBjb25zdCBxMXogPSBxMS56O1xyXG4gICAgICAgIGNvbnN0IHExdyA9IHExLnc7XHJcbiAgICAgICAgY29uc3QgcTJ4ID0gcTIueDtcclxuICAgICAgICBjb25zdCBxMnkgPSBxMi55O1xyXG4gICAgICAgIGNvbnN0IHEyeiA9IHEyLno7XHJcbiAgICAgICAgY29uc3QgcTJ3ID0gcTIudztcclxuICAgICAgICBkZXN0LnggPSBxMXcgKiBxMnogKyBxMXogKiBxMncgKyBxMXggKiBxMnkgLSBxMXkgKiBxMng7XHJcbiAgICAgICAgZGVzdC55ID0gcTF3ICogcTJ3IC0gcTF4ICogcTJ4IC0gcTF5ICogcTJ5IC0gcTF6ICogcTJ6O1xyXG4gICAgICAgIGRlc3QueiA9IHExdyAqIHEyeCArIHExeCAqIHEydyArIHExeSAqIHEyeiAtIHExeiAqIHEyeTtcclxuICAgICAgICBkZXN0LncgPSBxMXcgKiBxMnkgKyBxMXkgKiBxMncgKyBxMXogKiBxMnggLSBxMXggKiBxMno7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc2hvcnRNaXgocTEsIHEyLCB0aW1lLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgcXVhdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGltZSA8PSAwLjApIHtcclxuICAgICAgICAgICAgZGVzdC54eXp3ID0gcTEueHl6dztcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRpbWUgPj0gMS4wKSB7XHJcbiAgICAgICAgICAgIGRlc3QueHl6dyA9IHEyLnh5enc7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY29zID0gcXVhdC5kb3QocTEsIHEyKTtcclxuICAgICAgICBjb25zdCBxMmEgPSBxMi5jb3B5KCk7XHJcbiAgICAgICAgaWYgKGNvcyA8IDAuMCkge1xyXG4gICAgICAgICAgICBxMmEuaW52ZXJzZSgpO1xyXG4gICAgICAgICAgICBjb3MgPSAtY29zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgazA7XHJcbiAgICAgICAgbGV0IGsxO1xyXG4gICAgICAgIGlmIChjb3MgPiAwLjk5OTkpIHtcclxuICAgICAgICAgICAgazAgPSAxIC0gdGltZTtcclxuICAgICAgICAgICAgazEgPSAwICsgdGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpbiA9IE1hdGguc3FydCgxIC0gY29zICogY29zKTtcclxuICAgICAgICAgICAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKHNpbiwgY29zKTtcclxuICAgICAgICAgICAgY29uc3Qgb25lT3ZlclNpbiA9IDEgLyBzaW47XHJcbiAgICAgICAgICAgIGswID0gTWF0aC5zaW4oKDEgLSB0aW1lKSAqIGFuZ2xlKSAqIG9uZU92ZXJTaW47XHJcbiAgICAgICAgICAgIGsxID0gTWF0aC5zaW4oKDAgKyB0aW1lKSAqIGFuZ2xlKSAqIG9uZU92ZXJTaW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IGswICogcTEueCArIGsxICogcTJhLng7XHJcbiAgICAgICAgZGVzdC55ID0gazAgKiBxMS55ICsgazEgKiBxMmEueTtcclxuICAgICAgICBkZXN0LnogPSBrMCAqIHExLnogKyBrMSAqIHEyYS56O1xyXG4gICAgICAgIGRlc3QudyA9IGswICogcTEudyArIGsxICogcTJhLnc7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgbWl4KHExLCBxMiwgdGltZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29zSGFsZlRoZXRhID0gcTEueCAqIHEyLnggKyBxMS55ICogcTIueSArIHExLnogKiBxMi56ICsgcTEudyAqIHEyLnc7XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKGNvc0hhbGZUaGV0YSkgPj0gMS4wKSB7XHJcbiAgICAgICAgICAgIGRlc3QueHl6dyA9IHExLnh5enc7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBoYWxmVGhldGEgPSBNYXRoLmFjb3MoY29zSGFsZlRoZXRhKTtcclxuICAgICAgICBjb25zdCBzaW5IYWxmVGhldGEgPSBNYXRoLnNxcnQoMS4wIC0gY29zSGFsZlRoZXRhICogY29zSGFsZlRoZXRhKTtcclxuICAgICAgICBpZiAoTWF0aC5hYnMoc2luSGFsZlRoZXRhKSA8IDAuMDAxKSB7XHJcbiAgICAgICAgICAgIGRlc3QueCA9IHExLnggKiAwLjUgKyBxMi54ICogMC41O1xyXG4gICAgICAgICAgICBkZXN0LnkgPSBxMS55ICogMC41ICsgcTIueSAqIDAuNTtcclxuICAgICAgICAgICAgZGVzdC56ID0gcTEueiAqIDAuNSArIHEyLnogKiAwLjU7XHJcbiAgICAgICAgICAgIGRlc3QudyA9IHExLncgKiAwLjUgKyBxMi53ICogMC41O1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmF0aW9BID0gTWF0aC5zaW4oKDEgLSB0aW1lKSAqIGhhbGZUaGV0YSkgLyBzaW5IYWxmVGhldGE7XHJcbiAgICAgICAgY29uc3QgcmF0aW9CID0gTWF0aC5zaW4odGltZSAqIGhhbGZUaGV0YSkgLyBzaW5IYWxmVGhldGE7XHJcbiAgICAgICAgZGVzdC54ID0gcTEueCAqIHJhdGlvQSArIHEyLnggKiByYXRpb0I7XHJcbiAgICAgICAgZGVzdC55ID0gcTEueSAqIHJhdGlvQSArIHEyLnkgKiByYXRpb0I7XHJcbiAgICAgICAgZGVzdC56ID0gcTEueiAqIHJhdGlvQSArIHEyLnogKiByYXRpb0I7XHJcbiAgICAgICAgZGVzdC53ID0gcTEudyAqIHJhdGlvQSArIHEyLncgKiByYXRpb0I7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbUF4aXNBbmdsZShheGlzLCBhbmdsZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHF1YXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYW5nbGUgKj0gMC41O1xyXG4gICAgICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKGFuZ2xlKTtcclxuICAgICAgICBkZXN0LnggPSBheGlzLnggKiBzaW47XHJcbiAgICAgICAgZGVzdC55ID0gYXhpcy55ICogc2luO1xyXG4gICAgICAgIGRlc3QueiA9IGF4aXMueiAqIHNpbjtcclxuICAgICAgICBkZXN0LncgPSBNYXRoLmNvcyhhbmdsZSk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbn1cclxucXVhdC5pZGVudGl0eSA9IG5ldyBxdWF0KCkuc2V0SWRlbnRpdHkoKTtcclxuIiwiaW1wb3J0IHF1YXQgZnJvbSAnLi9xdWF0JztcclxuaW1wb3J0IHsgZXBzaWxvbiB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgdmVjMyB7XHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7XHJcbiAgICAgICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMueHl6ID0gdmFsdWVzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCB4KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXTtcclxuICAgIH1cclxuICAgIGdldCB5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXTtcclxuICAgIH1cclxuICAgIGdldCB6KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1syXTtcclxuICAgIH1cclxuICAgIGdldCB4eSgpIHtcclxuICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVzWzBdLCB0aGlzLnZhbHVlc1sxXV07XHJcbiAgICB9XHJcbiAgICBnZXQgeHl6KCkge1xyXG4gICAgICAgIHJldHVybiBbdGhpcy52YWx1ZXNbMF0sIHRoaXMudmFsdWVzWzFdLCB0aGlzLnZhbHVlc1syXV07XHJcbiAgICB9XHJcbiAgICBzZXQgeCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeih2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXQgeHkodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XHJcbiAgICB9XHJcbiAgICBzZXQgeHl6KHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xyXG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWVzWzJdO1xyXG4gICAgfVxyXG4gICAgYXQoaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy54ID0gMDtcclxuICAgICAgICB0aGlzLnkgPSAwO1xyXG4gICAgICAgIHRoaXMueiA9IDA7XHJcbiAgICB9XHJcbiAgICBjb3B5KGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHRoaXMueDtcclxuICAgICAgICBkZXN0LnkgPSB0aGlzLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdGhpcy56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgbmVnYXRlKGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IC10aGlzLng7XHJcbiAgICAgICAgZGVzdC55ID0gLXRoaXMueTtcclxuICAgICAgICBkZXN0LnogPSAtdGhpcy56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgZXF1YWxzKHZlY3RvciwgdGhyZXNob2xkID0gZXBzaWxvbikge1xyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnggLSB2ZWN0b3IueCkgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy55IC0gdmVjdG9yLnkpID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMueiAtIHZlY3Rvci56KSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgbGVuZ3RoKCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy5zcXVhcmVkTGVuZ3RoKCkpO1xyXG4gICAgfVxyXG4gICAgc3F1YXJlZExlbmd0aCgpIHtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuejtcclxuICAgICAgICByZXR1cm4geCAqIHggKyB5ICogeSArIHogKiB6O1xyXG4gICAgfVxyXG4gICAgYWRkKHZlY3Rvcikge1xyXG4gICAgICAgIHRoaXMueCArPSB2ZWN0b3IueDtcclxuICAgICAgICB0aGlzLnkgKz0gdmVjdG9yLnk7XHJcbiAgICAgICAgdGhpcy56ICs9IHZlY3Rvci56O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc3VidHJhY3QodmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy54IC09IHZlY3Rvci54O1xyXG4gICAgICAgIHRoaXMueSAtPSB2ZWN0b3IueTtcclxuICAgICAgICB0aGlzLnogLT0gdmVjdG9yLno7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseSh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggKj0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55ICo9IHZlY3Rvci55O1xyXG4gICAgICAgIHRoaXMueiAqPSB2ZWN0b3IuejtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGRpdmlkZSh2ZWN0b3IpIHtcclxuICAgICAgICB0aGlzLnggLz0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55IC89IHZlY3Rvci55O1xyXG4gICAgICAgIHRoaXMueiAvPSB2ZWN0b3IuejtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHNjYWxlKHZhbHVlLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggKj0gdmFsdWU7XHJcbiAgICAgICAgZGVzdC55ICo9IHZhbHVlO1xyXG4gICAgICAgIGRlc3QueiAqPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIG5vcm1hbGl6ZShkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKTtcclxuICAgICAgICBpZiAobGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGRlc3QueCA9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueSA9IDA7XHJcbiAgICAgICAgICAgIGRlc3QueiA9IDA7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZW5ndGggPSAxLjAgLyBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC54ICo9IGxlbmd0aDtcclxuICAgICAgICBkZXN0LnkgKj0gbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueiAqPSBsZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBtdWx0aXBseUJ5TWF0MyhtYXRyaXgsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXRyaXgubXVsdGlwbHlWZWMzKHRoaXMsIGRlc3QpO1xyXG4gICAgfVxyXG4gICAgbXVsdGlwbHlCeVF1YXQocXVhdGVybmlvbiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHF1YXRlcm5pb24ubXVsdGlwbHlWZWMzKHRoaXMsIGRlc3QpO1xyXG4gICAgfVxyXG4gICAgdG9RdWF0KGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyBxdWF0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGMgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIGNvbnN0IHMgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIGMueCA9IE1hdGguY29zKHRoaXMueCAqIDAuNSk7XHJcbiAgICAgICAgcy54ID0gTWF0aC5zaW4odGhpcy54ICogMC41KTtcclxuICAgICAgICBjLnkgPSBNYXRoLmNvcyh0aGlzLnkgKiAwLjUpO1xyXG4gICAgICAgIHMueSA9IE1hdGguc2luKHRoaXMueSAqIDAuNSk7XHJcbiAgICAgICAgYy56ID0gTWF0aC5jb3ModGhpcy56ICogMC41KTtcclxuICAgICAgICBzLnogPSBNYXRoLnNpbih0aGlzLnogKiAwLjUpO1xyXG4gICAgICAgIGRlc3QueCA9IHMueCAqIGMueSAqIGMueiAtIGMueCAqIHMueSAqIHMuejtcclxuICAgICAgICBkZXN0LnkgPSBjLnggKiBzLnkgKiBjLnogKyBzLnggKiBjLnkgKiBzLno7XHJcbiAgICAgICAgZGVzdC56ID0gYy54ICogYy55ICogcy56IC0gcy54ICogcy55ICogYy56O1xyXG4gICAgICAgIGRlc3QudyA9IGMueCAqIGMueSAqIGMueiArIHMueCAqIHMueSAqIHMuejtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjcm9zcyh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3Rvci56O1xyXG4gICAgICAgIGNvbnN0IHgyID0gdmVjdG9yMi54O1xyXG4gICAgICAgIGNvbnN0IHkyID0gdmVjdG9yMi55O1xyXG4gICAgICAgIGNvbnN0IHoyID0gdmVjdG9yMi56O1xyXG4gICAgICAgIGRlc3QueCA9IHkgKiB6MiAtIHogKiB5MjtcclxuICAgICAgICBkZXN0LnkgPSB6ICogeDIgLSB4ICogejI7XHJcbiAgICAgICAgZGVzdC56ID0geCAqIHkyIC0geSAqIHgyO1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGRvdCh2ZWN0b3IsIHZlY3RvcjIpIHtcclxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHZlY3Rvci55O1xyXG4gICAgICAgIGNvbnN0IHogPSB2ZWN0b3IuejtcclxuICAgICAgICBjb25zdCB4MiA9IHZlY3RvcjIueDtcclxuICAgICAgICBjb25zdCB5MiA9IHZlY3RvcjIueTtcclxuICAgICAgICBjb25zdCB6MiA9IHZlY3RvcjIuejtcclxuICAgICAgICByZXR1cm4geCAqIHgyICsgeSAqIHkyICsgeiAqIHoyO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGRpc3RhbmNlKHZlY3RvciwgdmVjdG9yMikge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IyLnggLSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yMi55IC0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3RvcjIueiAtIHZlY3Rvci56O1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy5zcXVhcmVkRGlzdGFuY2UodmVjdG9yLCB2ZWN0b3IyKSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc3F1YXJlZERpc3RhbmNlKHZlY3RvciwgdmVjdG9yMikge1xyXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IyLnggLSB2ZWN0b3IueDtcclxuICAgICAgICBjb25zdCB5ID0gdmVjdG9yMi55IC0gdmVjdG9yLnk7XHJcbiAgICAgICAgY29uc3QgeiA9IHZlY3RvcjIueiAtIHZlY3Rvci56O1xyXG4gICAgICAgIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHo7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZGlyZWN0aW9uKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54IC0gdmVjdG9yMi54O1xyXG4gICAgICAgIGNvbnN0IHkgPSB2ZWN0b3IueSAtIHZlY3RvcjIueTtcclxuICAgICAgICBjb25zdCB6ID0gdmVjdG9yLnogLSB2ZWN0b3IyLno7XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xyXG4gICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgZGVzdC54ID0gMDtcclxuICAgICAgICAgICAgZGVzdC55ID0gMDtcclxuICAgICAgICAgICAgZGVzdC56ID0gMDtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbmd0aCA9IDEgLyBsZW5ndGg7XHJcbiAgICAgICAgZGVzdC54ID0geCAqIGxlbmd0aDtcclxuICAgICAgICBkZXN0LnkgPSB5ICogbGVuZ3RoO1xyXG4gICAgICAgIGRlc3QueiA9IHogKiBsZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgbWl4KHZlY3RvciwgdmVjdG9yMiwgdGltZSwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKyB0aW1lICogKHZlY3RvcjIueCAtIHZlY3Rvci54KTtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSArIHRpbWUgKiAodmVjdG9yMi55IC0gdmVjdG9yLnkpO1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56ICsgdGltZSAqICh2ZWN0b3IyLnogLSB2ZWN0b3Iueik7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc3VtKHZlY3RvciwgdmVjdG9yMiwgZGVzdCkge1xyXG4gICAgICAgIGlmICghZGVzdCkge1xyXG4gICAgICAgICAgICBkZXN0ID0gbmV3IHZlYzMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKyB2ZWN0b3IyLng7XHJcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgKyB2ZWN0b3IyLnk7XHJcbiAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogKyB2ZWN0b3IyLno7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZGlmZmVyZW5jZSh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC0gdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC0gdmVjdG9yMi55O1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56IC0gdmVjdG9yMi56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHByb2R1Y3QodmVjdG9yLCB2ZWN0b3IyLCBkZXN0KSB7XHJcbiAgICAgICAgaWYgKCFkZXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3QgPSBuZXcgdmVjMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCAqIHZlY3RvcjIueDtcclxuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSAqIHZlY3RvcjIueTtcclxuICAgICAgICBkZXN0LnogPSB2ZWN0b3IueiAqIHZlY3RvcjIuejtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBxdW90aWVudCh2ZWN0b3IsIHZlY3RvcjIsIGRlc3QpIHtcclxuICAgICAgICBpZiAoIWRlc3QpIHtcclxuICAgICAgICAgICAgZGVzdCA9IG5ldyB2ZWMzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC8gdmVjdG9yMi54O1xyXG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC8gdmVjdG9yMi55O1xyXG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56IC8gdmVjdG9yMi56O1xyXG4gICAgICAgIHJldHVybiBkZXN0O1xyXG4gICAgfVxyXG59XHJcbnZlYzMuemVybyA9IG5ldyB2ZWMzKFswLCAwLCAwXSk7XHJcbnZlYzMub25lID0gbmV3IHZlYzMoWzEsIDEsIDFdKTtcclxudmVjMy51cCA9IG5ldyB2ZWMzKFswLCAxLCAwXSk7XHJcbnZlYzMucmlnaHQgPSBuZXcgdmVjMyhbMSwgMCwgMF0pO1xyXG52ZWMzLmZvcndhcmQgPSBuZXcgdmVjMyhbMCwgMCwgMV0pO1xyXG4iLCIvLyBUaGUgY29kZSB0aGF0IGRlYWxzIHdpdGggM2QgYXVkaW9cclxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICdldmVudGVtaXR0ZXIzJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vLi4vdHNtL3ZlYzMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXNvbmF0b3JTY2VuZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0KSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dCgpLmNyZWF0ZUdhaW4oKTtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyID0gdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5saXN0ZW5lcjtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgLy8gdGhpcy5zY2VuZS5vdXRwdXQuY29ubmVjdCh0aGlzLmNvbnRleHQuZ2V0T3V0cHV0RGVzdGluYXRpb24oKSk7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVTb3VyY2UoKSB7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY29udGV4dC5nZXRDb250ZXh0KCkuY3JlYXRlUGFubmVyKCk7XHJcbiAgICAgICAgbm9kZS5wYW5uaW5nTW9kZWwgPSAnSFJURic7XHJcbiAgICAgICAgbm9kZS5kaXN0YW5jZU1vZGVsID0gJ2xpbmVhcic7XHJcbiAgICAgICAgbm9kZS5tYXhEaXN0YW5jZSA9IDIwO1xyXG4gICAgICAgIG5vZGUucmVmRGlzdGFuY2UgPSAyO1xyXG4gICAgICAgIG5vZGUuY29ubmVjdCh0aGlzLnNjZW5lKTtcclxuICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgIH1cclxuICAgIGdldE91dHB1dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zY2VuZTtcclxuICAgIH1cclxuICAgIGdldElucHV0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNjZW5lO1xyXG4gICAgfVxyXG4gICAgc2V0TGlzdGVuZXJQb3NpdGlvbih4LCB5LCB6KSB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lci5zZXRQb3NpdGlvbih4LCB5LCB6KTtcclxuICAgIH1cclxuICAgIHNldExpc3RlbmVyT3JpZW50YXRpb24oZm9yd2FyZCwgcmF3dXApIHtcclxuICAgICAgICBsZXQgZndkID0gbmV3IHZlYzMoW2ZvcndhcmQueCwgZm9yd2FyZC55LCBmb3J3YXJkLnpdKTtcclxuICAgICAgICBsZXQgdXAgPSBmd2QuY29weSgpO1xyXG4gICAgICAgIHZlYzMuY3Jvc3ModXAsIG5ldyB2ZWMzKFtyYXd1cC54LCByYXd1cC55LCByYXd1cC56XSksIHVwKTtcclxuICAgICAgICB2ZWMzLmNyb3NzKHVwLCBmd2QsIHVwKTtcclxuICAgICAgICBmd2Qubm9ybWFsaXplKCk7XHJcbiAgICAgICAgdXAubm9ybWFsaXplKCk7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lci5zZXRPcmllbnRhdGlvbihmd2QueCwgZndkLnksIGZ3ZC56LCB1cC54LCB1cC55LCB1cC56KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBBIGNoYWluIG9mIGVmZmVjdHMgdGhhdCBjb25uZWN0IHRvIHRoZSBlZmZlY3QgYnVzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVmZmVjdENoYWluIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIGdyYXBoLCBpbnB1dCwgb3V0cHV0KSB7XHJcbiAgICAgICAgdGhpcy5lZmZlY3RzID0gW107XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICAgICAgICB0aGlzLmdyYXBoID0gZ3JhcGg7XHJcbiAgICAgICAgdGhpcy5pbnB1dE5vZGUgPSBpbnB1dDtcclxuICAgICAgICB0aGlzLm91dHB1dE5vZGUgPSBvdXRwdXQ7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDb25uZWN0aW9ucygpO1xyXG4gICAgfVxyXG4gICAgYXBwbHlFZmZlY3QoZWZmZWN0KSB7XHJcbiAgICAgICAgdGhpcy5lZmZlY3RzLnB1c2goZWZmZWN0KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbm5lY3Rpb25zKCk7XHJcbiAgICB9XHJcbiAgICByZW1vdmVFZmZlY3QoZWZmZWN0KSB7XHJcbiAgICAgICAgdGhpcy5lZmZlY3RzLmZvckVhY2goKGN1cnJFZmZlY3QpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVmZmVjdCA9PT0gY3VyckVmZmVjdCkge1xyXG4gICAgICAgICAgICAgICAgY3VyckVmZmVjdC5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmVmZmVjdHMgPSB0aGlzLmVmZmVjdHMuZmlsdGVyKChjdXJyRWZmZWN0KSA9PiBlZmZlY3QgIT09IGN1cnJFZmZlY3QpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ29ubmVjdGlvbnMoKTtcclxuICAgIH1cclxuICAgIHVwZGF0ZUNvbm5lY3Rpb25zKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVmZmVjdHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dE5vZGUuY29ubmVjdCh0aGlzLm91dHB1dE5vZGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjdXJyZW50ID0gbnVsbDtcclxuICAgICAgICBsZXQgcHJldmlvdXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZWZmZWN0cy5mb3JFYWNoKChlZmZlY3QpID0+IHtcclxuICAgICAgICAgICAgY3VycmVudCA9IGVmZmVjdDtcclxuICAgICAgICAgICAgaWYgKHByZXZpb3VzKSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50LmNvbm5lY3RJbnB1dChwcmV2aW91cy5nZXRPdXRwdXQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50LmNvbm5lY3RJbnB1dCh0aGlzLmlucHV0Tm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldmlvdXMgPSBjdXJyZW50O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnQuY29ubmVjdE91dHB1dCh0aGlzLm91dHB1dE5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyB0aGlzIGlzIHRoZSBtaXhlciB0aGF0IHRha2VzIGFsbCB0aGUgZGlmZmVyZW50IG91dHB1dHMgYW5kIG1peGVzIHRoZW0gaW50byB0aGUgMiBidXNzZXM6XHJcbi8vIFdvcmxkQnVzOiBUaGUgZGlyZWN0aW9uYWwgYXVkaW9cclxuLy8gU2Vjb25kYXJ5QnVzOiBBbGwgdGhlIFVJIGFuZCB0aGluZ3MgdGhhdCBhcmUgbm9uIGRpcmVjdGlvbmFsXHJcbmltcG9ydCBFZmZlY3RDaGFpbiBmcm9tICcuL2VmZmVjdC1jaGFpbic7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1ZGlvR3JhcGgge1xyXG4gICAgY29uc3RydWN0b3Ioc2NlbmUsIGNvbnRleHQsIHN3YXBDaGFubmVscyA9IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5zd2FwQ2hhbm5lbHMgPSBzd2FwQ2hhbm5lbHM7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHRoaXMuZWZmZWN0c0J1cyA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XHJcbiAgICAgICAgdGhpcy53b3JsZEJ1cyA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XHJcbiAgICAgICAgdGhpcy5zZWNvbmRhcnlCdXMgPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xyXG4gICAgICAgIHRoaXMubWFzdGVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcclxuICAgICAgICB0aGlzLnNjZW5lLmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy53b3JsZEJ1cyk7XHJcbiAgICAgICAgLy8gdGhpcy53b3JsZEJ1cy5jb25uZWN0KHRoaXMubWFzdGVyKTtcclxuICAgICAgICB0aGlzLndvcmxkQnVzLmNvbm5lY3QodGhpcy5lZmZlY3RzQnVzKTtcclxuICAgICAgICB0aGlzLmVmZmVjdHMgPSBuZXcgRWZmZWN0Q2hhaW4odGhpcy5jb250ZXh0LCB0aGlzLCB0aGlzLmVmZmVjdHNCdXMsIHRoaXMubWFzdGVyKTtcclxuICAgICAgICB0aGlzLnNlY29uZGFyeUJ1cy5jb25uZWN0KHRoaXMubWFzdGVyKTtcclxuICAgICAgICBpZiAodGhpcy5zd2FwQ2hhbm5lbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGFubmVsU3BsaXR0ZXIgPSB0aGlzLmNvbnRleHQuZ2V0Q29udGV4dCgpLmNyZWF0ZUNoYW5uZWxTcGxpdHRlcigyKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFubmVsTWVyZ2VyID0gdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5jcmVhdGVDaGFubmVsTWVyZ2VyKDIpO1xyXG4gICAgICAgICAgICB0aGlzLm1hc3Rlci5jb25uZWN0KHRoaXMuY2hhbm5lbFNwbGl0dGVyKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFubmVsU3BsaXR0ZXIuY29ubmVjdCh0aGlzLmNoYW5uZWxNZXJnZXIsIDAsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxTcGxpdHRlci5jb25uZWN0KHRoaXMuY2hhbm5lbE1lcmdlciwgMSwgMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbE1lcmdlci5jb25uZWN0KHRoaXMuY29udGV4dC5nZXRPdXRwdXREZXN0aW5hdGlvbigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFzdGVyLmNvbm5lY3QodGhpcy5jb250ZXh0LmdldE91dHB1dERlc3RpbmF0aW9uKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbm5lY3RUb01hc3RlcihpbnB1dCkge1xyXG4gICAgICAgIGlucHV0LmNvbm5lY3QodGhpcy5tYXN0ZXIpO1xyXG4gICAgfVxyXG4gICAgY29ubmVjdFRvVUkoaW5wdXQpIHtcclxuICAgICAgICBpbnB1dC5jb25uZWN0KHRoaXMuc2Vjb25kYXJ5QnVzKTtcclxuICAgIH1cclxuICAgIGFwcGx5RWZmZWN0KGVmZmVjdCkge1xyXG4gICAgICAgIHRoaXMuZWZmZWN0cy5hcHBseUVmZmVjdChlZmZlY3QpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlRWZmZWN0KGVmZmVjdCkge1xyXG4gICAgICAgIHRoaXMuZWZmZWN0cy5yZW1vdmVFZmZlY3QoZWZmZWN0KTtcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgdmFyIFNvdXJjZVR5cGU7XHJcbihmdW5jdGlvbiAoU291cmNlVHlwZSkge1xyXG4gICAgU291cmNlVHlwZVtTb3VyY2VUeXBlW1wiV29ybGRTb3VyY2VcIl0gPSAwXSA9IFwiV29ybGRTb3VyY2VcIjtcclxuICAgIFNvdXJjZVR5cGVbU291cmNlVHlwZVtcIlVJU291cmNlXCJdID0gMV0gPSBcIlVJU291cmNlXCI7XHJcbiAgICBTb3VyY2VUeXBlW1NvdXJjZVR5cGVbXCJNYXN0ZXJTb3VyY2VcIl0gPSAyXSA9IFwiTWFzdGVyU291cmNlXCI7XHJcbn0pKFNvdXJjZVR5cGUgfHwgKFNvdXJjZVR5cGUgPSB7fSkpO1xyXG4iLCIvLyBhbiBhdWRpbyBzb3VyY2VcclxuLy8gVGhpcyBpcyB0aGUgYWN0dWFsIHNvdW5kXHJcbmltcG9ydCB7IFNvdXJjZVR5cGUgfSBmcm9tICcuL3NvdXJjZS10eXBlJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXVkaW9Tb3VyY2Uge1xyXG4gICAgY29uc3RydWN0b3IoZ3JhcGgsIHNjZW5lLCBjb250ZXh0LCBidWZmZXIgPSBudWxsLCB0eXBlID0gU291cmNlVHlwZS5Xb3JsZFNvdXJjZSkge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICAgIHo6IDBcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyO1xyXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG4gICAgICAgIHRoaXMuZ3JhcGggPSBncmFwaDtcclxuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgICAgIHRoaXMucGxheWJhY2tSYXRlID0gMTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5nYWluID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcclxuICAgICAgICAvLyBiaW5kIG1ldGhvZHMgc28gd2UgY2FuIGFkZCBhbmQgcmVtb3Z2ZSB0aGVtIGZyb20gZXZlbnQgbGlzdGVuZXJzXHJcbiAgICAgICAgdGhpcy5zdG9wID0gdGhpcy5zdG9wLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBnZXRCdWZmZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgc2V0QnVmZmVyKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IGRhdGE7XHJcbiAgICAgICAgaWYgKHRoaXMucGxheU9uTG9hZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYXkoKTtcclxuICAgICAgICAgICAgdGhpcy5wbGF5T25Mb2FkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcGxheSh3aGVuID0gMCwgb2Zmc2V0ID0gMCwgZHVyYXRpb24gPSB0aGlzLmJ1ZmZlciA/IHRoaXMuYnVmZmVyLmR1cmF0aW9uIDogMCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBsYXlpbmcgJiYgdGhpcy5ub2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuYnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheU9uTG9hZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLm5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5ub2RlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuYnVmZmVyID0gdGhpcy5idWZmZXI7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ29ubmVjdGlvbnMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubm9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUucGxheWJhY2tSYXRlLnZhbHVlID0gdGhpcy5wbGF5YmFja1JhdGU7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5zdGFydCh3aGVuLCBvZmZzZXQsIGR1cmF0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmxvb3AgPSB0aGlzLmxvb3Bpbmc7XHJcbiAgICAgICAgICAgIHRoaXMucGxheWluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZU5vZGUuc2V0UG9zaXRpb24odGhpcy5wb3NpdGlvbi54LCB0aGlzLnBvc2l0aW9uLnksIHRoaXMucG9zaXRpb24ueik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgdGhpcy5zdG9wKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzZXRQb3NpdGlvbih4LCB5LCB6KSB7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHtcclxuICAgICAgICAgICAgeCxcclxuICAgICAgICAgICAgeSxcclxuICAgICAgICAgICAgelxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmVOb2RlKVxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lTm9kZS5zZXRQb3NpdGlvbih4LCB5LCB6KTtcclxuICAgIH1cclxuICAgIHNldFBsYXliYWNrUmF0ZShyYXRlKSB7XHJcbiAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSByYXRlO1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpXHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5wbGF5YmFja1JhdGUudmFsdWUgPSByYXRlO1xyXG4gICAgfVxyXG4gICAgZ2V0UGxheWJhY2tSYXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBsYXliYWNrUmF0ZTtcclxuICAgIH1cclxuICAgIHNldFZvbHVtZSh2b2x1bWUpIHtcclxuICAgICAgICB0aGlzLnZvbHVtZSA9IHZvbHVtZTtcclxuICAgICAgICBpZiAodGhpcy5nYWluKVxyXG4gICAgICAgICAgICB0aGlzLmdhaW4uZ2Fpbi52YWx1ZSA9IHZvbHVtZTtcclxuICAgIH1cclxuICAgIGdldFZvbHVtZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52b2x1bWU7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVDb25uZWN0aW9ucygpIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFNvdXJjZVR5cGUuV29ybGRTb3VyY2U6XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2NlbmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZU5vZGUgPSB0aGlzLnNjZW5lLmNyZWF0ZVNvdXJjZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLmNvbm5lY3QodGhpcy5nYWluKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuc2NlbmVOb2RlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFNvdXJjZVR5cGUuVUlTb3VyY2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuY29ubmVjdCh0aGlzLmdhaW4pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaC5jb25uZWN0VG9VSSh0aGlzLmdhaW4pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuY29ubmVjdCh0aGlzLmdhaW4pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaC5jb25uZWN0VG9NYXN0ZXIodGhpcy5nYWluKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMubm9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignZW5kZWQnLCB0aGlzLnN0b3ApO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuc3RvcCgpO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2NlbmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lTm9kZS5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgIC8vIHNldCBhbGwgcmVmcyB0byBudWxsIHRvIGVuY291cmFnZSBnY1xyXG4gICAgICAgIHRoaXMubm9kZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zY2VuZU5vZGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZ3JhcGggPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgbG9vcCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMubG9vcGluZyA9IHZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLm5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmxvb3AgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQW4gaXRlbSBpbiB0aGUgZGF0YSBwb29sXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFQb29sSXRlbSB7XHJcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBkYXRhID0gbnVsbCwgZGVjb2RlZERhdGEgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuZGVjb2RlZERhdGEgPSBkZWNvZGVkRGF0YTtcclxuICAgIH1cclxuICAgIGdldERhdGEoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcclxuICAgIH1cclxuICAgIHNldERhdGEoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICB9XHJcbiAgICBnZXREZWNvZGVkRGF0YSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGVkRGF0YTtcclxuICAgIH1cclxuICAgIHNldERlY29kZWREYXRhKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmRlY29kZWREYXRhID0gdGhpcy5kZWNvZGVkRGF0YTtcclxuICAgIH1cclxuICAgIGdldE5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICAgIH1cclxuICAgIHNldE5hbWUobmFtZSkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICB9XHJcbn1cclxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59O1xyXG5leHBvcnQgY2xhc3MgSFRUUExvYWRlciB7XHJcbiAgICBnZXQocGF0aCkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIGZldGNoKHBhdGgpO1xyXG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSB5aWVsZCByZXN1bHQuYXJyYXlCdWZmZXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBhIGRhdGEgcG9vbCBob2xkcyBmcmVxdWVudGx5IHBsYXllZCBzb3VuZHMgaW4gbWVtb3J5IHRvZ2V0aGVyIHdpdGggZGVjb2RlZCBhdWRpbyBkYXRhIHRvIG5vIGxvbmdlciBoYXZlIHRvIGRlY29kZSB0aGVtIGZyb20gdGhlIGNhY2hlIHdoZW4gbG9hZGVkIGFnYWluXHJcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufTtcclxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICdldmVudGVtaXR0ZXIzJztcclxuaW1wb3J0IERhdGFQb29sSXRlbSBmcm9tICcuL2RhdGEtcG9vbC1pdGVtJztcclxuaW1wb3J0IHsgSFRUUExvYWRlciB9IGZyb20gJy4vbG9hZGVycy9odHRwLWxvYWRlcic7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFQb29sIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIGxvYWRlciA9IG5ldyBIVFRQTG9hZGVyKCksIG1heERhdGEgPSA1MTIpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gbG9hZGVyO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IHt9O1xyXG4gICAgICAgIHRoaXMubWF4RGF0YSA9IG1heERhdGE7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICAgIH1cclxuICAgIGdldChwYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtwYXRoXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtwYXRoXS5nZXREZWNvZGVkRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYnVmZmVyID0geWllbGQgdGhpcy5sb2FkZXIuZ2V0KHBhdGgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVjb2RlZCA9IHlpZWxkIHRoaXMuY29udGV4dC5kZWNvZGVBdWRpb0RhdGEoYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBuZXcgRGF0YVBvb2xJdGVtKHBhdGgsIGJ1ZmZlciwgZGVjb2RlZCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPCB0aGlzLm1heERhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbcGF0aF0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogZmlndXJlIG91dCBhIG1vcmUgY2xldmVyIHNvbHV0aW9uIHRoYW4ganVzdCByZW1vdmluZyB0aGUgZmlyc3QgbG9hZGVkIGRhdGEuIExpa2UgdHJhY2tpbmcgaG93IG11Y2ggY2VydGFpbiBkYXRhIGlzIG5lZWRlZCBhbmQgcHJpb3JpdGl6ZSB0aGVtLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IHBhdGhzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHRoaXMuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlIHRoaXMuZGF0YVtwYXRoc1swXV07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW3BhdGhdID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmdldERlY29kZWREYXRhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IHt9O1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCBCYXNlRWZmZWN0IGZyb20gJy4vYmFzZS1lZmZlY3QnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb252b2x2ZXIgZXh0ZW5kcyBCYXNlRWZmZWN0IHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIGdyYXBoLCBwYXJhbXMpIHtcclxuICAgICAgICBzdXBlcihjb250ZXh0LCBncmFwaCwgcGFyYW1zKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgQ3JlYXRpbmcgY29udm9sdmVyYCk7XHJcbiAgICAgICAgdGhpcy5lZmZlY3ROb2RlID0gdGhpcy5jb250ZXh0LmdldENvbnRleHQoKS5jcmVhdGVDb252b2x2ZXIoKTtcclxuICAgICAgICB0aGlzLmVmZmVjdE5vZGUuYnVmZmVyID0gdGhpcy5lZmZlY3RQYXJhbXMuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgY29ubmVjdElucHV0KG5vZGUpIHtcclxuICAgICAgICB0aGlzLmNoYW5uZWxTcGxpdHRlciA9IHRoaXMuY29udGV4dC5nZXRDb250ZXh0KCkuY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKDIpO1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbE1lcmdlciA9IHRoaXMuY29udGV4dC5nZXRDb250ZXh0KCkuY3JlYXRlQ2hhbm5lbE1lcmdlcigyKTtcclxuICAgICAgICB0aGlzLmNoYW5uZWxTcGxpdHRlci5jb25uZWN0KHRoaXMuY2hhbm5lbE1lcmdlciwgMCwgMCk7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsU3BsaXR0ZXIuY29ubmVjdCh0aGlzLmNoYW5uZWxNZXJnZXIsIDEsIDApO1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbFNwbGl0dGVyLmNvbm5lY3QodGhpcy5jaGFubmVsTWVyZ2VyLCAwLCAxKTtcclxuICAgICAgICB0aGlzLmNoYW5uZWxTcGxpdHRlci5jb25uZWN0KHRoaXMuY2hhbm5lbE1lcmdlciwgMSwgMSk7XHJcbiAgICAgICAgbm9kZS5jb25uZWN0KHRoaXMuY2hhbm5lbFNwbGl0dGVyKTtcclxuICAgICAgICB0aGlzLmNoYW5uZWxNZXJnZXIuY29ubmVjdCh0aGlzLmVmZmVjdE5vZGUpO1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2VFZmZlY3Qge1xyXG4gICAgY29uc3RydWN0b3IoY29udGV4dCwgZ3JhcGgsIHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuZ3JhcGggPSBncmFwaDtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgIHRoaXMuZWZmZWN0UGFyYW1zID0gcGFyYW1zO1xyXG4gICAgfVxyXG4gICAgY29ubmVjdE91dHB1dChub2RlKSB7XHJcbiAgICAgICAgdGhpcy5lZmZlY3ROb2RlLmNvbm5lY3Qobm9kZSk7XHJcbiAgICB9XHJcbiAgICBjb25uZWN0SW5wdXQobm9kZSkge1xyXG4gICAgICAgIHRoaXMuaW5wdXROb2RlID0gbm9kZTtcclxuICAgICAgICBpZiAodGhpcy5lZmZlY3ROb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXROb2RlLmNvbm5lY3QodGhpcy5lZmZlY3ROb2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXRPdXRwdXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWZmZWN0Tm9kZTtcclxuICAgIH1cclxuICAgIGRpc2Nvbm5lY3QoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dE5vZGUuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIHRoaXMuZWZmZWN0Tm9kZS5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgU291cmNlVHlwZSB9IGZyb20gJy4vc291cmNlLXR5cGUnO1xyXG5leHBvcnQgY2xhc3MgU3RyZWFtaW5nU291cmNlIHtcclxuICAgIGNvbnN0cnVjdG9yKGdyYXBoLCBzY2VuZSwgY29udGV4dCwgZWxlbWVudCwgdHlwZSA9IFNvdXJjZVR5cGUuTWFzdGVyU291cmNlKSB7XHJcbiAgICAgICAgdGhpcy5ncmFwaCA9IGdyYXBoO1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uID0ge1xyXG4gICAgICAgICAgICB4OiAwLFxyXG4gICAgICAgICAgICB5OiAwLFxyXG4gICAgICAgICAgICB6OiAwXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlID0gdGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSh0aGlzLmVsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlQ29ubmVjdGlvbnMoKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheScsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNhblBsYXkgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wbGF5T25BdmFpbGFibGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGxheSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwbGF5KHdoZW4gPSAwLCBvZmZzZXQgPSAwLCBkdXJhdGlvbiA9IDApIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5QbGF5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGxheU9uQXZhaWxhYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnBhdXNlKCk7XHJcbiAgICB9XHJcbiAgICBnZXRWb2x1bWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC52b2x1bWU7XHJcbiAgICB9XHJcbiAgICBzZXRWb2x1bWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQudm9sdW1lID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBnZXRQbGF5YmFja1JhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5wbGF5YmFja1JhdGU7XHJcbiAgICB9XHJcbiAgICBzZXRQbGF5YmFja1JhdGUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQucGxheWJhY2tSYXRlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVDb25uZWN0aW9ucygpIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFNvdXJjZVR5cGUuV29ybGRTb3VyY2U6XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2NlbmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZU5vZGUgPSB0aGlzLnNjZW5lLmNyZWF0ZVNvdXJjZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLmNvbm5lY3QodGhpcy5zY2VuZU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyYXBoLmNvbm5lY3RUb01hc3Rlcih0aGlzLm5vZGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc2V0UG9zaXRpb24oeCwgeSwgeikge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgIHpcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lTm9kZSlcclxuICAgICAgICAgICAgdGhpcy5zY2VuZU5vZGUuc2V0UG9zaXRpb24oeCwgeSwgeik7XHJcbiAgICB9XHJcbiAgICBkZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5ncmFwaCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5vZGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2NlbmVOb2RlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgIH1cclxuICAgIGxvb3AodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQubG9vcCA9IHRydWU7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gdGhlIG1haW4gbW9kdWxlIGZvciBSZXNvbmF0b3JcclxuLy8gQVBJLCBldGMuXHJcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufTtcclxuaW1wb3J0IFJlc29uYXRvckF1ZGlvQ29udGV4dCBmcm9tICcuL2F1ZGlvLWNvbnRleHQnO1xyXG5pbXBvcnQgUmVzb25hdG9yU2NlbmUgZnJvbSAnLi9zY2VuZXMvd2ViYXVkaW8tc2NlbmUnO1xyXG5pbXBvcnQgQXVkaW9HcmFwaCBmcm9tICcuL2F1ZGlvLWdyYXBoJztcclxuaW1wb3J0IEF1ZGlvU291cmNlIGZyb20gJy4vc291cmNlcy9hdWRpby1zb3VyY2UnO1xyXG5pbXBvcnQgRGF0YVBvb2wgZnJvbSAnLi9kYXRhLXBvb2wnO1xyXG5pbXBvcnQgQ29udm9sdmVyIGZyb20gJy4vZWZmZWN0cy9jb252b2x2ZXInO1xyXG5pbXBvcnQgeyBIVFRQTG9hZGVyIH0gZnJvbSAnLi9sb2FkZXJzL2h0dHAtbG9hZGVyJztcclxuaW1wb3J0IHsgU291cmNlVHlwZSB9IGZyb20gJy4vc291cmNlcy9zb3VyY2UtdHlwZSc7XHJcbmltcG9ydCB7IFN0cmVhbWluZ1NvdXJjZSB9IGZyb20gJy4vc291cmNlcy9zdHJlYW1pbmctc291cmNlJztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVzb25hdG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKGxvYWRlciA9IG5ldyBIVFRQTG9hZGVyKCkpIHtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGxvYWRlcjtcclxuICAgICAgICB0aGlzLmVudmlyb25tZW50SW1wdWxzZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gbmV3IFJlc29uYXRvckF1ZGlvQ29udGV4dCgpO1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBuZXcgUmVzb25hdG9yU2NlbmUodGhpcy5jb250ZXh0KTtcclxuICAgICAgICB0aGlzLmdyYXBoID0gbmV3IEF1ZGlvR3JhcGgodGhpcy5zY2VuZSwgdGhpcy5jb250ZXh0LCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5kYXRhUG9vbCA9IG5ldyBEYXRhUG9vbCh0aGlzLmNvbnRleHQsIHRoaXMubG9hZGVyKTtcclxuICAgIH1cclxuICAgIGxvYWQocGF0aCwgdHlwZSA9IFNvdXJjZVR5cGUuV29ybGRTb3VyY2UpIHtcclxuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0geWllbGQgdGhpcy5kYXRhUG9vbC5nZXQocGF0aCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuY3JlYXRlU291cmNlKHR5cGUsIGRhdGEpO1xyXG4gICAgICAgICAgICByZXR1cm4gc291cmNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgbG9hZEltbWVkaWF0ZShwYXRoLCB0eXBlID0gU291cmNlVHlwZS5Xb3JsZFNvdXJjZSkge1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBBdWRpb1NvdXJjZSh0aGlzLmdyYXBoLCB0aGlzLnNjZW5lLCB0aGlzLmNvbnRleHQsIG51bGwsIHR5cGUpO1xyXG4gICAgICAgIHRoaXMuZGF0YVBvb2wuZ2V0KHBhdGgpLnRoZW4oKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgc291cmNlLnNldEJ1ZmZlcihkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gc291cmNlO1xyXG4gICAgfVxyXG4gICAgc3RyZWFtKHBhdGgsIHR5cGUgPSBTb3VyY2VUeXBlLk1hc3RlclNvdXJjZSkge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgQXVkaW8ocGF0aCk7XHJcbiAgICAgICAgZWxlbWVudC5jcm9zc09yaWdpbiA9ICdhbm9ueW1vdXMnO1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTdHJlYW1pbmdTb3VyY2UodGhpcy5ncmFwaCwgdGhpcy5zY2VuZSwgdGhpcy5jb250ZXh0LCBlbGVtZW50LCB0eXBlKTtcclxuICAgICAgICByZXR1cm4gc291cmNlO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlU291cmNlKHR5cGUsIGRhdGEpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEF1ZGlvU291cmNlKHRoaXMuZ3JhcGgsIHRoaXMuc2NlbmUsIHRoaXMuY29udGV4dCwgZGF0YSk7XHJcbiAgICB9XHJcbiAgICBzZXRFbnZpcm9ubWVudEltcHVsc2UoZmlsZSkge1xyXG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50SW1wdWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaC5yZW1vdmVFZmZlY3QodGhpcy5lbnZpcm9ubWVudEltcHVsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChmaWxlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0geWllbGQgdGhpcy5kYXRhUG9vbC5nZXQoZmlsZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnRJbXB1bHNlID0gbmV3IENvbnZvbHZlcih0aGlzLmNvbnRleHQsIHRoaXMuZ3JhcGgsIHtcclxuICAgICAgICAgICAgICAgIGJ1ZmZlclxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5ncmFwaC5hcHBseUVmZmVjdCh0aGlzLmVudmlyb25tZW50SW1wdWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzZXRMaXN0ZW5lclBvc2l0aW9uKHgsIHksIHopIHtcclxuICAgICAgICB0aGlzLnNjZW5lLnNldExpc3RlbmVyUG9zaXRpb24oeCwgeSwgeik7XHJcbiAgICB9XHJcbiAgICBzZXRMaXN0ZW5lck9yaWVudGF0aW9uKGZvcndhcmQsIHVwKSB7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5zZXRMaXN0ZW5lck9yaWVudGF0aW9uKGZvcndhcmQsIHVwKTtcclxuICAgIH1cclxuICAgIGNsZWFyRGF0YVBvb2woKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhUG9vbC5jbGVhcigpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCBSZXNvbmF0b3IgZnJvbSAnLi4vZnJhbWV3b3JrL3Jlc29uYXRvcic7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU291bmQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5yZXMgPSBuZXcgUmVzb25hdG9yKCk7XHJcbiAgICAgICAgdGhpcy5yZXMuc2V0RW52aXJvbm1lbnRJbXB1bHNlKGBhc3NldHMvR3JlZWs3RWNob0hhbGwud2F2YCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGxheShmaWxlKSB7XHJcbiAgICAgICAgY29uc3Qgc291bmQgPSB0aGlzLnJlcy5sb2FkSW1tZWRpYXRlKGZpbGUpO1xyXG4gICAgICAgIHNvdW5kLnBsYXkoKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7IFRUUyB9IGZyb20gJy4uL2ZyYW1ld29yay90dHMnO1xyXG5pbXBvcnQgeyBBcmlhT3V0cHV0IH0gZnJvbSAnLi4vZnJhbWV3b3JrL3R0cy9vdXRwdXRzL2FyaWEnO1xyXG5pbXBvcnQgU291bmQgZnJvbSAnLi9zb3VuZCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPdXRwdXQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy50dHMgPSBuZXcgVFRTKG5ldyBBcmlhT3V0cHV0KCkpO1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwib3V0cHV0LWFyZWFcIik7XHJcbiAgICAgICAgdGhpcy5zb3VuZCA9IG5ldyBTb3VuZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNheShzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNvdW5kLnBsYXkoYGFzc2V0cy9zY3JvbGwud2F2YCk7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xyXG4gICAgICAgIHN0cmluZy5zcGxpdChcIlxcblwiKS5mb3JFYWNoKChsaW5lKSA9PiB7XHJcbiAgICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGluZSkpO1xyXG4gICAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJiclwiKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5oaXN0b3J5LmFwcGVuZENoaWxkKG5vZGUpO1xyXG4gICAgICAgIC8vIHRoaXMudHRzLnNwZWFrKHN0cmluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcGxheShmaWxlKSB7XHJcbiAgICAgICAgdGhpcy5zb3VuZC5wbGF5KGZpbGUpO1xyXG4gICAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5wdXQge1xyXG4gICAgY29uc3RydWN0b3IoY29tbWFuZEhhbmRsZXIsIG91dHB1dEhhbmRsZXIpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZXIgPSBjb21tYW5kSGFuZGxlcjtcclxuICAgICAgICB0aGlzLm91dHB1dCA9IG91dHB1dEhhbmRsZXI7XHJcbiAgICAgICAgdGhpcy5lY2hvSW5wdXQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaW5wdXRGaWVsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaW5wdXQtYXJlYVwiKTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRFY2hvKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5lY2hvSW5wdXQgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRGaWVsZC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZS53aGljaCA9PSAxMykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5pbnB1dEZpZWxkLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dEZpZWxkLnZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVjaG9JbnB1dCkgdGhpcy5vdXRwdXQuc2F5KGA+ICR7dmFsfWApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVyLmRvQ29tbWFuZCh2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufSIsImltcG9ydCBMb29rQ29tbWFuZCBmcm9tIFwiLi9jb21tYW5kcy9sb29rXCI7XHJcbmltcG9ydCBVc2VDb21tYW5kIGZyb20gXCIuL2NvbW1hbmRzL3VzZVwiO1xyXG5pbXBvcnQgVGFrZUNvbW1hbmQgZnJvbSBcIi4vY29tbWFuZHMvdGFrZVwiO1xyXG5pbXBvcnQgRHJvcENvbW1hbmQgZnJvbSBcIi4vY29tbWFuZHMvZHJvcFwiO1xyXG5pbXBvcnQgRWNob0NvbW1hbmQgZnJvbSBcIi4vY29tbWFuZHMvZWNob1wiO1xyXG5cclxuY29uc3QgZGVmYXVsdENvbW1hbmRzID0gW1xyXG4gICAgW1tcImxvb2tcIiwgXCJsXCJdLCBMb29rQ29tbWFuZF0sXHJcbiAgICBbW1widXNlXCIsIFwiaW50ZXJhY3RcIl0sIFVzZUNvbW1hbmRdLFxyXG4gICAgW1tcInRha2VcIiwgXCJnZXRcIl0sIFRha2VDb21tYW5kXSxcclxuICAgIFtbXCJkcm9wXCIsIFwicHV0XCJdLCBEcm9wQ29tbWFuZF0sXHJcbiAgICBbXCJlY2hvXCIsIEVjaG9Db21tYW5kXVxyXG5dO1xyXG5cclxuY29uc3QgZGlyZWN0aW9uTWFwID0gW1xyXG4gICAgW1wiblwiLCBcIm5vcnRoXCJdLFxyXG4gICAgW1wibmVcIiwgXCJub3J0aGVhc3RcIl0sXHJcbiAgICBbXCJlXCIsIFwiZWFzdFwiXSxcclxuICAgIFtcInNlXCIsIFwic291dGhlYXN0XCJdLFxyXG4gICAgW1wic1wiLCBcInNvdXRoXCJdLFxyXG4gICAgW1wic3dcIiwgXCJzb3V0aHdlc3RcIl0sXHJcbiAgICBbXCJ3XCIsIFwid2VzdFwiXSxcclxuICAgIFtcIm53XCIsIFwibm9ydGh3ZXN0XCJdLFxyXG4gICAgW1widVwiLCBcInVwXCJdLFxyXG4gICAgW1wiZFwiLCBcImRvd25cIl1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1hbmRzIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIGNvbW1hbmRzKSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICAgICAgICB0aGlzLmNvbW1hbmRzID0gY29tbWFuZHMgfHwgbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hZGREZWZhdWx0Q29tbWFuZHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBkb0NvbW1hbmQoc3RyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnByaW50KGBZb3UgY2FuJ3Qgc2VlbSB0byBkbyBhbnl0aGluZyBhdCB0aGUgbW9tZW50LmApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJvb20gPSB0aGlzLmNvbnRleHQuZ2V0Um9vbSh0aGlzLmNvbnRleHQucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgICAgICBjb25zdCBzcGxpdCA9IHN0ci5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuY29tbWFuZHMuZ2V0KHNwbGl0WzBdKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzLmdldChzcGxpdFswXSkoc3BsaXQsIHRoaXMuY29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMubWF0Y2hEaXJlY3Rpb24oc3BsaXRbMF0pO1xyXG5cclxuICAgICAgICBpZiAocm9vbS5nZXRFeGl0KGRpcmVjdGlvbikpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0Lm1vdmUocm9vbS5nZXRFeGl0KGRpcmVjdGlvbikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRDb21tYW5kKG5hbWUsIGZ1bmMpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuYW1lKSkge1xyXG4gICAgICAgICAgICBuYW1lLmZvckVhY2goKGNvbW1hbmQpID0+IHRoaXMuY29tbWFuZHMuc2V0KGNvbW1hbmQsIGZ1bmMpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzLnNldChuYW1lLCBmdW5jKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQ29tbWFuZHMoY29tbWFuZHMpIHtcclxuICAgICAgICBjb21tYW5kcy5mb3JFYWNoKChjb21tYW5kKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkQ29tbWFuZChjb21tYW5kWzBdLCBjb21tYW5kWzFdKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhZGREZWZhdWx0Q29tbWFuZHMoKSB7XHJcbiAgICAgICAgdGhpcy5hZGRDb21tYW5kcyhkZWZhdWx0Q29tbWFuZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIG1hdGNoRGlyZWN0aW9uKHN0cikge1xyXG4gICAgICAgIGZvciAobGV0IGRpciBvZiBkaXJlY3Rpb25NYXApIHtcclxuICAgICAgICAgICAgaWYgKGRpclswXSA9PSBzdHIpIHJldHVybiBkaXJbMV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTG9va0NvbW1hbmQoYXJncywgY29udGV4dCkge1xyXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09IDEpIHtcclxuICAgICAgICBjb250ZXh0LmV4YW1pbmVSb29tKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJvb20gPSBjb250ZXh0LmdldFJvb20oY29udGV4dC5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gcm9vbS5nZXRJdGVtcygpO1xyXG4gICAgICAgIGxldCBpdGVtID0gbnVsbDtcclxuICAgICAgICBmb3IgKGxldCBpIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgICAgIGlmIChpLm5hbWUuaW5jbHVkZXMoYXJnc1sxXSkpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQub3V0cHV0LnNheShgSSBjb3VsZCBub3QgZmluZCBhICR7YXJnc1sxXX0uYCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29udGV4dC5vdXRwdXQuc2F5KGl0ZW0ubmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnRleHQub3V0cHV0LnNheShpdGVtLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBVc2VDb21tYW5kKGFyZ3MsIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IHJvb20gPSBjb250ZXh0LmdldFJvb20oY29udGV4dC5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgY29uc3QgaXRlbXMgPSByb29tLmdldEl0ZW1zKCk7XHJcbiAgICBsZXQgaXRlbSA9IG51bGw7XHJcbiAgICBmb3IgKGxldCBpIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgaWYgKGkubmFtZS5pbmNsdWRlcyhhcmdzWzFdKSkge1xyXG4gICAgICAgICAgICBpdGVtID0gaTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSBjb250ZXh0LnBsYXllci5nZXRJbnZlbnRvcnkoKTtcclxuICAgICAgICBmb3IgKGxldCBpIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgICAgIGlmIChpLm5hbWUuaW5jbHVkZXMoYXJnc1sxXSkpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgICBjb250ZXh0Lm91dHB1dC5zYXkoYEkgY291bGQgbm90IGZpbmQgYSAke2FyZ3NbMV19LmApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBhd2FpdCBpdGVtLm9uVXNlKCk7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUYWtlQ29tbWFuZChhcmdzLCBjb250ZXh0KSB7XHJcbiAgICBjb25zdCByb29tID0gY29udGV4dC5nZXRSb29tKGNvbnRleHQucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgIGNvbnN0IGl0ZW1zID0gcm9vbS5nZXRJdGVtcygpO1xyXG4gICAgbGV0IGl0ZW0gPSBudWxsO1xyXG4gICAgZm9yIChsZXQgaSBvZiBpdGVtcykge1xyXG4gICAgICAgIGlmIChpLm5hbWUuaW5jbHVkZXMoYXJnc1sxXSkpIHtcclxuICAgICAgICAgICAgaXRlbSA9IGk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghaXRlbSkge1xyXG4gICAgICAgIGNvbnRleHQucHJpbnQoYFlvdSBjYW4ndCBmaW5kIGFueSAke2FyZ3NbMV19LmApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIWl0ZW0udGFrZWFibGUpIHtcclxuICAgICAgICAgICAgY29udGV4dC5wcmludChgWW91IGNhbid0IHRha2UgJHtpdGVtLm5hbWV9LmApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJvb20ucmVtb3ZlSXRlbShpdGVtLmlkKTtcclxuICAgICAgICAgICAgY29udGV4dC5wbGF5ZXIuYWRkSXRlbShpdGVtLmlkKTtcclxuICAgICAgICAgICAgY29udGV4dC5wcmludChgWW91IHRha2UgJHtpdGVtLm5hbWV9LmApO1xyXG4gICAgICAgICAgICBpdGVtLm9uVGFrZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERyb3BDb21tYW5kKGFyZ3MsIGNvbnRleHQpIHtcclxuICAgIGNvbnN0IHJvb20gPSBjb250ZXh0LmdldFJvb20oY29udGV4dC5wbGF5ZXIuY3VycmVudFJvb20pO1xyXG4gICAgY29uc3QgaXRlbXMgPSBjb250ZXh0LnBsYXllci5nZXRJbnZlbnRvcnkoKTtcclxuICAgIGxldCBpdGVtID0gbnVsbDtcclxuICAgIGZvciAobGV0IGkgb2YgaXRlbXMpIHtcclxuICAgICAgICBpZiAoaS5uYW1lLmluY2x1ZGVzKGFyZ3NbMV0pKSB7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgICBjb250ZXh0LnByaW50KGBZb3UncmUgbm90IGNhcnJ5aW5nIGEgJHthcmdzWzFdfWApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb250ZXh0LnBsYXllci5yZW1vdmVJdGVtKGl0ZW0uaWQpO1xyXG4gICAgICAgIHJvb20uYWRkSXRlbShpdGVtLmlkKTtcclxuICAgICAgICBjb250ZXh0LnByaW50KGBZb3Ugc2V0ICR7aXRlbS5uYW1lfSBkb3duIG9uIHRoZSBmbG9vci5gKTtcclxuICAgICAgICBpdGVtLm9uRHJvcCgpO1xyXG4gICAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWNob0NvbW1hbmQoYXJncywgY29udGV4dCkge1xyXG4gICAgaWYgKGFyZ3NbMV0gIT0gXCJvblwiICYmIGFyZ3NbMV0gIT0gXCJvZmZcIikge1xyXG4gICAgICAgIGNvbnRleHQucHJpbnQoYFVzYWdlOiBlY2hvIDxvbi9vZmY+YCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnRleHQuc2V0SW5wdXRFY2hvKGFyZ3NbMV0gPT0gXCJvblwiID8gdHJ1ZSA6IGZhbHNlKTtcclxuICAgICAgICBjb250ZXh0LnByaW50KGBDb21tYW5kIGVjaG8gaXMgbm93ICR7YXJnc1sxXX0uYCk7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBSb29tIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaWQgPSBcInJvb21cIjtcclxuICAgICAgICB0aGlzLnRpdGxlID0gXCJBIHJvb21cIjtcclxuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gXCJZb3Ugc2VlIG5vdGhpbmcgc3BlY2lhbFwiO1xyXG4gICAgICAgIHRoaXMuZmlyc3REZXNjcmlwdGlvbiA9IFwiQXMgeW91IHdhbGsgaW50byB0aGUgcm9vbSwgeW91IG5vdGljZSBub3RoaW5nIHNwZWNpYWxcIjtcclxuICAgICAgICB0aGlzLm9iamVjdHMgPSBbXTtcclxuICAgICAgICB0aGlzLmV4aXRzID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMuZW50ZXJDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5leGl0Q2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2FuRW50ZXJMb2dpYyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jYW5FeGl0TG9naWMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudGlja0NhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uRW50ZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW50ZXJDYWxsYmFjaykgcmV0dXJuIHRoaXMuZW50ZXJDYWxsYmFjayh0aGlzLmNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uRXhpdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5leGl0Q2FsbGJhY2spIHJldHVybiB0aGlzLmV4aXRDYWxsYmFjayh0aGlzLmNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbkVudGVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbkVudGVyTG9naWMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FuRW50ZXJMb2dpYyh0aGlzLmNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjYW5FeGl0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbkV4aXRMb2dpYykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW5FeGl0TG9naWModGhpcy5jb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRXhpdChkaXJlY3Rpb24sIHJvb21JRCkge1xyXG4gICAgICAgIHRoaXMuZXhpdHMuc2V0KGRpcmVjdGlvbiwgcm9vbUlEKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBnZXRFeGl0KGRpcmVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV4aXRzLmdldChkaXJlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEl0ZW0oaXRlbSkge1xyXG4gICAgICAgIHRoaXMub2JqZWN0cy5wdXNoKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUl0ZW0oaWQpIHtcclxuICAgICAgICB0aGlzLm9iamVjdHMgPSB0aGlzLm9iamVjdHMuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9IGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRFbnRlckNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5lbnRlckNhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRFeGl0Q2FsbGJhY2soY2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLmV4aXRDYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRW50ZXJMb2dpYyhmdW5jKSB7XHJcbiAgICAgICAgdGhpcy5jYW5FbnRlckxvZ2ljID0gZnVuYy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEV4aXRMb2dpYyhmdW5jKSB7XHJcbiAgICAgICAgdGhpcy5jYW5FeGl0TG9naWMgPSBmdW5jLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVGlja0NhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy50aWNrQ2FsbGJhY2sgPSBjYWxsYmFjay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEl0ZW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9iamVjdHMubWFwKChpdGVtKSA9PiB0aGlzLmNvbnRleHQuZ2V0SXRlbShpdGVtKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25UaWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRpY2tDYWxsYmFjaykgcmV0dXJuIHRoaXMudGlja0NhbGxiYWNrKHRoaXMuY29udGV4dCk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgUm9vbSBmcm9tICcuLi9yb29tJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvb21CdWlsZGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMucm9vbSA9IG5ldyBSb29tKCk7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aElEKElEKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmlkID0gSUQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHdpdGhUaXRsZSh0aXRsZSkge1xyXG4gICAgICAgIHRoaXMucm9vbS50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhGaXJzdERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmZpcnN0RGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIHtcclxuICAgICAgICB0aGlzLnJvb20uZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoRXhpdChkaXJlY3Rpb24sIHJvb21JRCkge1xyXG4gICAgICAgIHRoaXMucm9vbS5hZGRFeGl0KGRpcmVjdGlvbiwgcm9vbUlEKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoSXRlbShpdGVtSUQpIHtcclxuICAgICAgICB0aGlzLnJvb20uYWRkSXRlbShpdGVtSUQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhFbnRlckNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmFkZEVudGVyQ2FsbGJhY2soY2FsbGJhY2spO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhFeGl0Q2FsbGJhY2soY2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLnJvb20uYWRkRXhpdENhbGxiYWNrKGNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoRW50ZXJMb2dpYyhmdW5jKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmFkZEVudGVyTG9naWMoZnVuYyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aEV4aXRMb2dpYyhmdW5jKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmFkZEV4aXRMb2dpYyhmdW5jKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoVGljayhmdW5jKSB7XHJcbiAgICAgICAgdGhpcy5yb29tLmFkZFRpY2tDYWxsYmFjayhmdW5jKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vbTtcclxuICAgIH1cclxufSIsImltcG9ydCBSb29tQnVpbGRlciBmcm9tICcuLi8uLi9lbmdpbmUvYnVpbGRlcnMvcm9vbSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgUm9vbUJ1aWxkZXIoKVxyXG4ud2l0aElEKFwic3RhcnRcIilcclxuLndpdGhUaXRsZShcIlRoZSBzdGFydGluZyByb29tXCIpXHJcbi53aXRoRmlyc3REZXNjcmlwdGlvbihcclxuYFlvdSBzZXQgZm9vdCBpbiB5b3VyIHZlcnkgZmlyc3QgZXZlciByb29tLlxyXG5Zb3UncmUgbm90IHF1aXRlIHN1cmUgd2hhdCB5b3Ugd2VyZSBzdXBwb3NlZCB0byBleHBlY3QsIGJ1dCBpdCBkZWZpbml0ZWx5IHdhc24ndCB0aGlzLlxyXG5JIG1lYW4gd2hvIHdvdWxkIGV4cGVjdCBhIGJvcmluZyBvbGQgcm9vbSBsaWtlIHRoaXMgb25lPyBVZ2guXHJcbkp1c3QuLi4gbWFrZSBpdCBzdG9wLiBQbGVhc2UuYFxyXG4pXHJcbi53aXRoRGVzY3JpcHRpb24oXCJUaGUgZmlyc3Qgcm9vbS4gTm90aGluZyBzcGVjaWFsIGFib3V0IGl0LlwiKVxyXG4ud2l0aEV4aXQoXCJub3J0aFwiLCBcInR1bm5lbF8xXCIpXHJcbi53aXRoRXhpdChcIm5vcnRod2VzdFwiLCBcInR1bm5lbF8yXCIpXHJcbi53aXRoRW50ZXJDYWxsYmFjayhhc3luYyBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICBpZiAoY29udGV4dC5zdGF0ZS5nZXQoXCJzdGFydC5hd29rZW5cIikpIHJldHVybjtcclxuICAgIGNvbnN0IHsgb3V0cHV0LCB3YWl0IH0gPSBjb250ZXh0O1xyXG4gICAgY29udGV4dC5lbmFibGVDb21tYW5kSW5wdXQoZmFsc2UpO1xyXG4gICAgb3V0cHV0LnNheShcIllvdSBzbG93bHkgd2FrZSB1cFwiKTtcclxuICAgIGF3YWl0IHdhaXQoNTAwMCk7XHJcbiAgICBvdXRwdXQuc2F5KFwiSXQncyBzdHJhbmdlLiBZb3UgbmV2ZXIgdXNlZCB0byBiZSBhYmxlIHRvIGJlIGNvbnNjaW91cyBhYm91dCB0aGUgZmFjdCB0aGF0IHlvdSB3ZXJlIHdha2luZyB1cC5cIik7XHJcbiAgICBhd2FpdCB3YWl0KDUwMDApO1xyXG4gICAgb3V0cHV0LnNheShcIllldCBoZXJlIHdlIGFyZS5cIik7XHJcbiAgICBjb250ZXh0LmVuYWJsZUNvbW1hbmRJbnB1dCh0cnVlKTtcclxuICAgIGNvbnRleHQuc3RhdGUuc2V0KFwic3RhcnQuYXdva2VuXCIsIHRydWUpO1xyXG59KVxyXG4ud2l0aEl0ZW0oXCJzdG9uZVwiKVxyXG4ud2l0aEl0ZW0oXCJjdXBcIilcclxuLndpdGhJdGVtKFwidG9yY2hcIilcclxuLmNyZWF0ZSgpOyIsImltcG9ydCBTdGFydCBmcm9tICcuL3N0YXJ0JztcclxuaW1wb3J0IFR1bm5lbDEgZnJvbSAnLi90dW5uZWwxJztcclxuaW1wb3J0IHR1bm5lbDIgZnJvbSAnLi90dW5uZWwyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFtcclxuICAgIFN0YXJ0LFxyXG4gICAgVHVubmVsMSxcclxuICAgIHR1bm5lbDJcclxuXTsiLCJpbXBvcnQgUm9vbUJ1aWxkZXIgZnJvbSAnLi4vLi4vZW5naW5lL2J1aWxkZXJzL3Jvb20nO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IFJvb21CdWlsZGVyKClcclxuLndpdGhJRChcInR1bm5lbF8xXCIpXHJcbi53aXRoVGl0bGUoXCJBIGxvbmcgZGFyayB0dW5uZWxcIilcclxuLndpdGhGaXJzdERlc2NyaXB0aW9uKFwiWW91IGZpcnN0IHN0ZXAgZm9vdCBpbiB0aGlzIGRhcmsgbG9vbXkgdHVubmVsLlwiKVxyXG4ud2l0aERlc2NyaXB0aW9uKFwiVGhlIHdhbGxzIGFyZSB3ZXQuIEV2ZXJ5dGhpbmcgaXMgd2V0LiBVZ2guIFdoeSBkbyB5b3UgZXZlbi5cIilcclxuLndpdGhFeGl0KFwic291dGhcIiwgXCJzdGFydFwiKVxyXG4uY3JlYXRlKCk7IiwiaW1wb3J0IFJvb21CdWlsZGVyIGZyb20gXCIuLi8uLi9lbmdpbmUvYnVpbGRlcnMvcm9vbVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IFJvb21CdWlsZGVyKClcclxuLndpdGhJRChcInR1bm5lbF8yXCIpXHJcbi53aXRoVGl0bGUoXCJBIGxvbmcsIHdpbmRpbmcgdHVubmVsXCIpXHJcbi53aXRoRmlyc3REZXNjcmlwdGlvbihcclxuICAgIGBZb3Ugc3RlcCBvdXQgZnJvbSB5b3VyIGhpZHkgaG9sZSBpbnRvIGEgdGhpbiwgd2luZGluZyB0dW5uZWwuIFRoZSB3YWxscyBhbmQgY2VpbGluZyBhcHBlYXIgdG8gZ2V0IHRoaW5uZXIgYW5kIHRoaW5uZXIsIHNwYWNlIHNsb3dseSBkd2luZGxpbmcgYXdheSB0byBub3RoaW5nLmBcclxuKVxyXG4ud2l0aERlc2NyaXB0aW9uKFxyXG4gICAgYEEgdHVubmVsIHRoYXQgZW5kcyBpbiBhIGJvd2wgc2hhcGUuYFxyXG4pXHJcbi53aXRoRXhpdChcInNvdXRoZWFzdFwiLCBcInN0YXJ0XCIpXHJcbi5jcmVhdGUoKTsiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBJdGVtIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaWQgPSBcIml0ZW1cIjtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIkFuIGl0ZW1cIjtcclxuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gXCJZb3Ugc2VlIG5vdGhpbmcgc3BlY2lhbCBhYm91dCB0aGlzIGl0ZW1cIjtcclxuICAgICAgICB0aGlzLnVzYWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50YWtlYWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy51c2VDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy50YWtlQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZHJvcENhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICB0aGlzLnRpY2tDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblVzZSgpIHtcclxuICAgICAgICBpZiAodGhpcy51c2VDYWxsYmFjaykgcmV0dXJuIHRoaXMudXNlQ2FsbGJhY2sodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblRha2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudGFrZUNhbGxiYWNrKSByZXR1cm4gdGhpcy50YWtlQ2FsbGJhY2sodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkRyb3AoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZHJvcENhbGxiYWNrKSByZXR1cm4gdGhpcy5kcm9wQ2FsbGJhY2sodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuICAgIGFzeW5jIG9uVGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy50aWNrQ2FsbGJhY2spIHJldHVybiB0aGlzLnRpY2tDYWxsYmFjayh0aGlzLmNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZUNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy51c2VDYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVGFrZUNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy50YWtlQ2FsbGJhY2sgPSBjYWxsYmFjay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZERyb3BDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuZHJvcENhbGxiYWNrID0gY2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUaWNrQ2FsbGJhY2soY2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLnRpY2tDYWxsYmFjayA9IGNhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgSXRlbSBmcm9tICcuLi9pdGVtJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEl0ZW1CdWlsZGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbSA9IG5ldyBJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aElEKElEKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtLmlkID0gSUQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aE5hbWUobmFtZSkge1xyXG4gICAgICAgIHRoaXMuaXRlbS5uYW1lID0gbmFtZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIHtcclxuICAgICAgICB0aGlzLml0ZW0uZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBpc1VzYWJsZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuaXRlbS51c2FibGUgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBpc1Rha2VhYmxlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtLnRha2VhYmxlID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aFVzZUNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtLmFkZFVzZUNhbGxiYWNrKGNhbGxiYWNrKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aXRoVGFrZUNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtLmFkZFRha2VDYWxsYmFjayhjYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aERyb3BDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuaXRlbS5hZGREcm9wQ2FsbGJhY2soY2FsbGJhY2spO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB3aXRoVGlja0NhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtLmFkZFRpY2tDYWxsYmFjayhjYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgSXRlbUJ1aWxkZXIgZnJvbSBcIi4uLy4uL2VuZ2luZS9idWlsZGVycy9pdGVtXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgSXRlbUJ1aWxkZXIoKVxyXG4ud2l0aElEKFwic3RvbmVcIilcclxuLndpdGhOYW1lKFwiYSBkdWxsIHN0b25lXCIpXHJcbi53aXRoRGVzY3JpcHRpb24oXCJUaGVyZSBpcyBub3RoaW5nIHJlbWFya2FibGUgYWJvdXQgdGhpcyByb3VnaCwgYmxhbmQgc3RvbmUuXCIpXHJcbi5pc1Rha2VhYmxlKHRydWUpXHJcbi5pc1VzYWJsZSh0cnVlKVxyXG4ud2l0aFRha2VDYWxsYmFjayhhc3luYyBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBUaGUgJHt0aGlzLmlkfSBmZWVscyBoZWF2eSBpbiB5b3VyIGhhbmRzLmApO1xyXG59KVxyXG4ud2l0aERyb3BDYWxsYmFjayhhc3luYyBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBJdCBib3VuY2VzIGJhY2sgYW5kIGZvcnRoIGEgbGl0dGxlLmApXHJcbn0pXHJcbi53aXRoVXNlQ2FsbGJhY2soYXN5bmMgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgY29udGV4dC5wcmludChgWW91IGNhbid0IHJlYWxseSBmaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCAke3RoaXMubmFtZX0geWV0YCk7XHJcbn0pXHJcbi5jcmVhdGUoKTsiLCJpbXBvcnQgU3RvbmUgZnJvbSAnLi9zdG9uZSc7XHJcbmltcG9ydCBUb3JjaCBmcm9tICcuL3RvcmNoJztcclxuaW1wb3J0IEN1cCBmcm9tICcuL2N1cCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBbXHJcbiAgICBTdG9uZSxcclxuICAgIFRvcmNoLFxyXG4gICAgQ3VwXHJcbl0iLCJpbXBvcnQgSXRlbUJ1aWxkZXIgZnJvbSBcIi4uLy4uL2VuZ2luZS9idWlsZGVycy9pdGVtXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgSXRlbUJ1aWxkZXIoKVxyXG4ud2l0aElEKFwidG9yY2hcIilcclxuLndpdGhOYW1lKFwiYSB0b3JjaFwiKVxyXG4ud2l0aERlc2NyaXB0aW9uKFwiQSBzdGFuZGFyZCB0b3JjaCB0aGF0IHByb3ZpZGVzIGxpZ2h0LlwiKVxyXG4uaXNVc2FibGUodHJ1ZSlcclxuLmlzVGFrZWFibGUodHJ1ZSlcclxuLndpdGhVc2VDYWxsYmFjayhhc3luYyBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LnByaW50KGBZb3UgdHJ5IHRvIGxpZ2h0IHRoZSB0b3JjaCBidXQgZmFpbC5gKVxyXG59KVxyXG4uY3JlYXRlKCk7IiwiaW1wb3J0IEl0ZW1CdWlsZGVyIGZyb20gXCIuLi8uLi9lbmdpbmUvYnVpbGRlcnMvaXRlbVwiO1xyXG5pbXBvcnQgSXRlbSBmcm9tIFwiLi4vLi4vZW5naW5lL2l0ZW1cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBJdGVtQnVpbGRlcigpXHJcbi53aXRoSUQoXCJjdXBcIilcclxuLndpdGhOYW1lKFwiYSBjdXBcIilcclxuLndpdGhEZXNjcmlwdGlvbihcIkEgc3RhbmRhcmQgY29mZmVlIGN1cFwiKVxyXG4uaXNUYWtlYWJsZSh0cnVlKVxyXG4uaXNVc2FibGUoZmFsc2UpXHJcbi5jcmVhdGUoKTsiLCJpbXBvcnQgR2FtZSBmcm9tICcuLi9lbmdpbmUnO1xyXG5pbXBvcnQgUm9vbXMgZnJvbSAnLi9yb29tcyc7XHJcbmltcG9ydCBJdGVtcyBmcm9tICcuL2l0ZW1zJztcclxuaW1wb3J0IE1lb3dDb21tYW5kIGZyb20gJy4vY29tbWFuZHMvbWVvdyc7XHJcblxyXG5jb25zdCBnYW1lID0gbmV3IEdhbWUoKTtcclxuXHJcbmdhbWUuaW5pdCh7XHJcbiAgICByb29tczogUm9vbXMsXHJcbiAgICBjb21tYW5kczogW1xyXG4gICAgICAgIFtbXCJtZW93XCIsIFwibWV3XCJdLCBNZW93Q29tbWFuZF1cclxuICAgIF0sXHJcbiAgICBpdGVtczogSXRlbXNcclxufSk7IiwiaW1wb3J0IFN0YXRlIGZyb20gJy4vc3RhdGUnO1xyXG5pbXBvcnQgUm9vbSBmcm9tICcuL3Jvb20nO1xyXG5pbXBvcnQgUGxheWVyIGZyb20gJy4vcGxheWVyJztcclxuaW1wb3J0IE91dHB1dCBmcm9tICcuL291dHB1dCc7XHJcbmltcG9ydCBJbnB1dCBmcm9tICcuL2lucHV0JztcclxuaW1wb3J0IENvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMnO1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWUge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5wbGF5ZXIgPSBuZXcgUGxheWVyKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlO1xyXG4gICAgICAgIHRoaXMucm9vbXMgPSBbXTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgT3V0cHV0KCk7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kSGFuZGxlciA9IG5ldyBDb21tYW5kcyh0aGlzKTtcclxuICAgICAgICB0aGlzLmlucHV0ID0gbmV3IElucHV0KHRoaXMuY29tbWFuZEhhbmRsZXIsIHRoaXMub3V0cHV0KTtcclxuICAgICAgICB0aGlzLnZpc2l0ZWRSb29tcyA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcmludChzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLm91dHB1dC5zYXkoc3RyaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KGRhdGEpIHtcclxuICAgICAgICB0aGlzLnJvb21zID0gZGF0YS5yb29tcy5tYXAoKHJvb20pID0+IHtcclxuICAgICAgICAgICAgcm9vbS5jb250ZXh0ID0gdGhpcztcclxuICAgICAgICAgICAgcmV0dXJuIHJvb207XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0uY29udGV4dCA9IHRoaXM7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBkYXRhLnN0YXRlIHx8IFN0YXRlO1xyXG4gICAgICAgIHRoaXMuY29tbWFuZEhhbmRsZXIuYWRkQ29tbWFuZHMoZGF0YS5jb21tYW5kcyk7XHJcbiAgICAgICAgdGhpcy5wbGF5ZXIgPSBuZXcgUGxheWVyKCk7XHJcbiAgICAgICAgdGhpcy5wbGF5ZXIuY29udGV4dCA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5tb3ZlKHRoaXMucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgICAgICB0aGlzLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWR2YW5jZVRpY2soKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBpdGVtLm9uVGljaygpKTtcclxuICAgICAgICB0aGlzLnJvb21zLmZvckVhY2goKHJvb20pID0+IHJvb20ub25UaWNrKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLmFkdmFuY2VUaWNrKCksIDEwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBleGFtaW5lUm9vbSgpIHtcclxuICAgICAgICBjb25zdCByb29tID0gdGhpcy5nZXRSb29tKHRoaXMucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgICAgICB0aGlzLm91dHB1dC5zYXkocm9vbS50aXRsZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpc2l0ZWRSb29tcy5nZXQodGhpcy5wbGF5ZXIuY3VycmVudFJvb20pICYmIHJvb20uZmlyc3REZXNjcmlwdGlvbiAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3V0cHV0LnNheShyb29tLmZpcnN0RGVzY3JpcHRpb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub3V0cHV0LnNheShyb29tLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5leGFtaW5lSXRlbXMoKTtcclxuICAgICAgICB0aGlzLmV4YW1pbmVFeGl0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4YW1pbmVJdGVtcygpIHtcclxuICAgICAgICBjb25zdCByb29tID0gdGhpcy5nZXRSb29tKHRoaXMucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IHJvb20uZ2V0SXRlbXMoKTtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoIDwgMSkgcmV0dXJuO1xyXG4gICAgICAgIGxldCBpdGVtRGVzY3JpcHRpb24gPSBgWW91IHNlZSBgO1xyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA8IGl0ZW1zLmxlbmd0aCAtIDIpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1EZXNjcmlwdGlvbiArPSBgJHtpdGVtLm5hbWV9LCBgO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4IDwgaXRlbXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbURlc2NyaXB0aW9uICs9IGAke2l0ZW0ubmFtZX0gYW5kIGA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtRGVzY3JpcHRpb24gKz0gaXRlbS5uYW1lXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm91dHB1dC5zYXkoaXRlbURlc2NyaXB0aW9uICsgXCIuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4YW1pbmVFeGl0cygpIHtcclxuICAgICAgICBjb25zdCByb29tID0gdGhpcy5nZXRSb29tKHRoaXMucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgICAgICBsZXQgZXhpdHMgPSBbXTtcclxuICAgICAgICBsZXQgZXhpdERlc2NyaXB0aW9uID0gXCJZb3UgY2FuIGdvIFwiO1xyXG4gICAgICAgIGNvbnN0IGV4aXRLZXlzID0gcm9vbS5leGl0cy5rZXlzKCk7XHJcbiAgICAgICAgZm9yIChsZXQgZXhpdCBvZiBleGl0S2V5cykge1xyXG4gICAgICAgICAgICBleGl0cy5wdXNoKGV4aXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBleGl0cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPCBleGl0cy5sZW5ndGggLSAyKSB7XHJcbiAgICAgICAgICAgICAgICBleGl0RGVzY3JpcHRpb24gKz0gYCR7aXRlbX0sIGA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCBleGl0cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICBleGl0RGVzY3JpcHRpb24gKz0gYCR7aXRlbX0gYW5kIGA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBleGl0RGVzY3JpcHRpb24gKz0gaXRlbVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQuc2F5KGV4aXREZXNjcmlwdGlvbiArIFwiLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSb29tKGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vbXMuZmluZCgocm9vbSkgPT4gcm9vbS5pZCA9PSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXRlbShpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT0gaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHdhaXQobXMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb3ZlKHJvb21JRCkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRSb29tID0gdGhpcy5nZXRSb29tKHRoaXMucGxheWVyLmN1cnJlbnRSb29tKTtcclxuICAgICAgICBjb25zdCBuZXdSb29tID0gdGhpcy5nZXRSb29tKHJvb21JRCk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRSb29tLmNhbkV4aXQoKSAmJiBuZXdSb29tLmNhbkVudGVyKCkpIHtcclxuICAgICAgICAgICAgYXdhaXQgY3VycmVudFJvb20ub25FeGl0KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IG5ld1Jvb20ub25FbnRlcigpO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXllci5jdXJyZW50Um9vbSA9IHJvb21JRDtcclxuICAgICAgICAgICAgdGhpcy5leGFtaW5lUm9vbSgpO1xyXG4gICAgICAgICAgICB0aGlzLnZpc2l0ZWRSb29tcy5zZXQocm9vbUlELCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlQ29tbWFuZElucHV0KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5jb21tYW5kSGFuZGxlci5lbmFibGVkID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5wdXRFY2hvKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dC5zZXRFY2hvKHZhbHVlKTtcclxuICAgIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIE1lb3dDb21tYW5kKGFyZ3MsIGNvbnRleHQpIHtcclxuICAgIGNvbnRleHQucHJpbnQoYFlvdSBtZW93LmApO1xyXG59Il0sIm5hbWVzIjpbImhhcyIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicHJlZml4IiwiRXZlbnRzIiwiRUUiLCJmbiIsImNvbnRleHQiLCJvbmNlIiwidGhpcyIsImFkZExpc3RlbmVyIiwiZW1pdHRlciIsImV2ZW50IiwiVHlwZUVycm9yIiwibGlzdGVuZXIiLCJldnQiLCJfZXZlbnRzIiwicHVzaCIsIl9ldmVudHNDb3VudCIsImNsZWFyRXZlbnQiLCJFdmVudEVtaXR0ZXIiLCJjcmVhdGUiLCJfX3Byb3RvX18iLCJldmVudE5hbWVzIiwiZXZlbnRzIiwibmFtZSIsIm5hbWVzIiwiY2FsbCIsInNsaWNlIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiY29uY2F0IiwibGlzdGVuZXJzIiwiaGFuZGxlcnMiLCJpIiwibCIsImxlbmd0aCIsImVlIiwiQXJyYXkiLCJsaXN0ZW5lckNvdW50IiwiZW1pdCIsImExIiwiYTIiLCJhMyIsImE0IiwiYTUiLCJhcmdzIiwibGVuIiwiYXJndW1lbnRzIiwicmVtb3ZlTGlzdGVuZXIiLCJ1bmRlZmluZWQiLCJhcHBseSIsImoiLCJvbiIsInJlbW92ZUFsbExpc3RlbmVycyIsIm9mZiIsInByZWZpeGVkIiwibW9kdWxlIiwiZXhwb3J0cyIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJuIiwiZ2V0dGVyIiwiX19lc01vZHVsZSIsImQiLCJhIiwiZGVmaW5pdGlvbiIsImtleSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJvYmoiLCJwcm9wIiwiY29uc3RydWN0b3IiLCJzdGF0ZXMiLCJNYXAiLCJzZXQiLCJ2YWx1ZSIsIlBsYXllciIsImludmVudG9yeSIsImN1cnJlbnRSb29tIiwiYWRkSXRlbSIsImlkIiwicmVtb3ZlSXRlbSIsImZpbHRlciIsIml0ZW0iLCJnZXRJbnZlbnRvcnkiLCJtYXAiLCJnZXRJdGVtIiwiQmFzZU91dHB1dCIsInNwZWFrIiwidGV4dCIsInN0b3AiLCJzZXRPcHRpb25zIiwib3B0aW9ucyIsIkFyaWFPdXRwdXQiLCJzdXBlciIsInRpbWVvdXQiLCJpbml0IiwiY29udGFpbmVyIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwic3BlZWNoRGlzcGxheSIsImFwcGVuZCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImluc2VydEJlZm9yZSIsImZpcnN0Q2hpbGQiLCJjbGVhckRpc3BsYXkiLCJub2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJwYXJhIiwic2V0VGltZW91dCIsImJpbmQiLCJpbm5lckhUTUwiLCJXZWJUVFNPdXRwdXQiLCJUVFMiLCJvdXRwdXQiLCJjcmVhdGVPdXRwdXQiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJSZXNvbmF0b3JBdWRpb0NvbnRleHQiLCJBdWRpb0NvbnRleHQiLCJnZXRDb250ZXh0IiwiY3JlYXRlR2FpbiIsImdldE91dHB1dERlc3RpbmF0aW9uIiwiZGVzdGluYXRpb24iLCJjcmVhdGVCdWZmZXJTb3VyY2UiLCJkZWNvZGVBdWRpb0RhdGEiLCJkYXRhIiwiY3JlYXRlUGFubmVyIiwiY3JlYXRlTWVkaWFFbGVtZW50U291cmNlIiwiZWxlbWVudCIsInZlYzQiLCJ2YWx1ZXMiLCJGbG9hdDMyQXJyYXkiLCJ4eXp3IiwieCIsInkiLCJ6IiwidyIsInh5IiwieHl6IiwiciIsImciLCJiIiwicmciLCJyZ2IiLCJyZ2JhIiwiYXQiLCJpbmRleCIsInJlc2V0IiwiY29weSIsImRlc3QiLCJuZWdhdGUiLCJlcXVhbHMiLCJ2ZWN0b3IiLCJ0aHJlc2hvbGQiLCJlcHNpbG9uIiwiTWF0aCIsImFicyIsInNxcnQiLCJzcXVhcmVkTGVuZ3RoIiwiYWRkIiwic3VidHJhY3QiLCJtdWx0aXBseSIsImRpdmlkZSIsInNjYWxlIiwibm9ybWFsaXplIiwibXVsdGlwbHlNYXQ0IiwibWF0cml4IiwibXVsdGlwbHlWZWM0Iiwic3RhdGljIiwidmVjdG9yMiIsInRpbWUiLCJ6ZXJvIiwib25lIiwibWF0NCIsImFsbCIsInJvdyIsImNvbCIsImRldGVybWluYW50IiwiYTAwIiwiYTAxIiwiYTAyIiwiYTAzIiwiYTEwIiwiYTExIiwiYTEyIiwiYTEzIiwiYTIwIiwiYTIxIiwiYTIyIiwiYTIzIiwiYTMwIiwiYTMxIiwiYTMyIiwiYTMzIiwic2V0SWRlbnRpdHkiLCJ0cmFuc3Bvc2UiLCJ0ZW1wMDEiLCJ0ZW1wMDIiLCJ0ZW1wMDMiLCJ0ZW1wMTIiLCJ0ZW1wMTMiLCJ0ZW1wMjMiLCJpbnZlcnNlIiwiZGV0MDAiLCJkZXQwMSIsImRldDAyIiwiZGV0MDMiLCJkZXQwNCIsImRldDA1IiwiZGV0MDYiLCJkZXQwNyIsImRldDA4IiwiZGV0MDkiLCJkZXQxMCIsImRldDExIiwiZGV0IiwiYjAiLCJiMSIsImIyIiwiYjMiLCJtdWx0aXBseVZlYzMiLCJ2ZWMzIiwidG9NYXQzIiwibWF0MyIsInRvSW52ZXJzZU1hdDMiLCJkZXQyMSIsInRyYW5zbGF0ZSIsInJvdGF0ZSIsImFuZ2xlIiwiYXhpcyIsInMiLCJzaW4iLCJjIiwiY29zIiwidCIsImIwMCIsImIwMSIsImIwMiIsImIxMCIsImIxMSIsImIxMiIsImIyMCIsImIyMSIsImIyMiIsImxlZnQiLCJyaWdodCIsImJvdHRvbSIsInRvcCIsIm5lYXIiLCJmYXIiLCJybCIsInRiIiwiZm92IiwiYXNwZWN0IiwidGFuIiwiUEkiLCJmcnVzdHVtIiwicG9zaXRpb24iLCJ0YXJnZXQiLCJ1cCIsImlkZW50aXR5IiwiZGlmZmVyZW5jZSIsImNyb3NzIiwiZG90IiwibTEiLCJtMiIsImIwMyIsImIxMyIsImIyMyIsImIzMCIsImIzMSIsImIzMiIsImIzMyIsInZlYzIiLCJtdWx0aXBseU1hdDIiLCJtdWx0aXBseVZlYzIiLCJtdWx0aXBseU1hdDMiLCJ4MiIsInNxdWFyZWREaXN0YW5jZSIsInkyIiwidG9NYXQ0IiwidG9RdWF0IiwibTAwIiwibTAxIiwibTAyIiwibTEwIiwibTExIiwibTEyIiwibTIwIiwibTIxIiwibTIyIiwiZm91clhTcXVhcmVkTWludXMxIiwiZm91cllTcXVhcmVkTWludXMxIiwiZm91clpTcXVhcmVkTWludXMxIiwiYmlnZ2VzdEluZGV4IiwiZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxIiwiYmlnZ2VzdFZhbCIsIm11bHQiLCJxdWF0Iiwicm9sbCIsImF0YW4yIiwicGl0Y2giLCJ5YXciLCJhc2luIiwiY2FsY3VsYXRlVyIsImludkRvdCIsImNvbmp1Z2F0ZSIsIm90aGVyIiwicTF4IiwicTF5IiwicTF6IiwicTF3IiwicTJ4IiwicTJ5IiwicTJ6IiwicTJ3IiwicXgiLCJxeSIsInF6IiwicXciLCJpeCIsIml5IiwiaXoiLCJpdyIsInoyIiwieHgiLCJ4eiIsInl5IiwieXoiLCJ6eiIsInd4Iiwid3kiLCJ3eiIsInExIiwicTIiLCJxMmEiLCJrMCIsImsxIiwib25lT3ZlclNpbiIsImNvc0hhbGZUaGV0YSIsImhhbGZUaGV0YSIsImFjb3MiLCJzaW5IYWxmVGhldGEiLCJyYXRpb0EiLCJyYXRpb0IiLCJtdWx0aXBseUJ5TWF0MyIsIm11bHRpcGx5QnlRdWF0IiwicXVhdGVybmlvbiIsImZvcndhcmQiLCJSZXNvbmF0b3JTY2VuZSIsInNjZW5lIiwiY3JlYXRlU291cmNlIiwicGFubmluZ01vZGVsIiwiZGlzdGFuY2VNb2RlbCIsIm1heERpc3RhbmNlIiwicmVmRGlzdGFuY2UiLCJjb25uZWN0IiwiZ2V0T3V0cHV0IiwiZ2V0SW5wdXQiLCJzZXRMaXN0ZW5lclBvc2l0aW9uIiwic2V0UG9zaXRpb24iLCJzZXRMaXN0ZW5lck9yaWVudGF0aW9uIiwicmF3dXAiLCJmd2QiLCJzZXRPcmllbnRhdGlvbiIsIkVmZmVjdENoYWluIiwiZ3JhcGgiLCJpbnB1dCIsImVmZmVjdHMiLCJpbnB1dE5vZGUiLCJvdXRwdXROb2RlIiwidXBkYXRlQ29ubmVjdGlvbnMiLCJhcHBseUVmZmVjdCIsImVmZmVjdCIsInJlbW92ZUVmZmVjdCIsImZvckVhY2giLCJjdXJyRWZmZWN0IiwiZGlzY29ubmVjdCIsImN1cnJlbnQiLCJwcmV2aW91cyIsImNvbm5lY3RJbnB1dCIsImNvbm5lY3RPdXRwdXQiLCJBdWRpb0dyYXBoIiwic3dhcENoYW5uZWxzIiwiZWZmZWN0c0J1cyIsIndvcmxkQnVzIiwic2Vjb25kYXJ5QnVzIiwibWFzdGVyIiwiY2hhbm5lbFNwbGl0dGVyIiwiY3JlYXRlQ2hhbm5lbFNwbGl0dGVyIiwiY2hhbm5lbE1lcmdlciIsImNyZWF0ZUNoYW5uZWxNZXJnZXIiLCJjb25uZWN0VG9NYXN0ZXIiLCJjb25uZWN0VG9VSSIsIlNvdXJjZVR5cGUiLCJBdWRpb1NvdXJjZSIsImJ1ZmZlciIsInR5cGUiLCJXb3JsZFNvdXJjZSIsInBsYXliYWNrUmF0ZSIsImdhaW4iLCJnZXRCdWZmZXIiLCJzZXRCdWZmZXIiLCJwbGF5T25Mb2FkIiwicGxheSIsIndoZW4iLCJvZmZzZXQiLCJkdXJhdGlvbiIsInBsYXlpbmciLCJjcmVhdGVDb25uZWN0aW9ucyIsInN0YXJ0IiwibG9vcCIsImxvb3BpbmciLCJzY2VuZU5vZGUiLCJhZGRFdmVudExpc3RlbmVyIiwic2V0UGxheWJhY2tSYXRlIiwicmF0ZSIsImdldFBsYXliYWNrUmF0ZSIsInNldFZvbHVtZSIsInZvbHVtZSIsImdldFZvbHVtZSIsIlVJU291cmNlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRlc3Ryb3kiLCJEYXRhUG9vbEl0ZW0iLCJkZWNvZGVkRGF0YSIsImdldERhdGEiLCJzZXREYXRhIiwiZ2V0RGVjb2RlZERhdGEiLCJzZXREZWNvZGVkRGF0YSIsImdldE5hbWUiLCJzZXROYW1lIiwiSFRUUExvYWRlciIsInBhdGgiLCJmZXRjaCIsImFycmF5QnVmZmVyIiwiRGF0YVBvb2wiLCJsb2FkZXIiLCJtYXhEYXRhIiwiZGVjb2RlZCIsImtleXMiLCJjbGVhciIsIkNvbnZvbHZlciIsInBhcmFtcyIsImVmZmVjdFBhcmFtcyIsImVmZmVjdE5vZGUiLCJjb25zb2xlIiwibG9nIiwiY3JlYXRlQ29udm9sdmVyIiwiU3RyZWFtaW5nU291cmNlIiwiTWFzdGVyU291cmNlIiwiY2FuUGxheSIsInBsYXlPbkF2YWlsYWJsZSIsInBhdXNlIiwiUmVzb25hdG9yIiwiZW52aXJvbm1lbnRJbXB1bHNlIiwiZGF0YVBvb2wiLCJsb2FkIiwibG9hZEltbWVkaWF0ZSIsInNvdXJjZSIsInN0cmVhbSIsIkF1ZGlvIiwiY3Jvc3NPcmlnaW4iLCJzZXRFbnZpcm9ubWVudEltcHVsc2UiLCJmaWxlIiwiY2xlYXJEYXRhUG9vbCIsIlNvdW5kIiwicmVzIiwiT3V0cHV0IiwidHRzIiwiaGlzdG9yeSIsImdldEVsZW1lbnRCeUlkIiwic291bmQiLCJzYXkiLCJzdHJpbmciLCJzcGxpdCIsImxpbmUiLCJJbnB1dCIsImNvbW1hbmRIYW5kbGVyIiwib3V0cHV0SGFuZGxlciIsImhhbmRsZXIiLCJlY2hvSW5wdXQiLCJpbnB1dEZpZWxkIiwic2V0RWNobyIsIndoaWNoIiwidmFsIiwiZG9Db21tYW5kIiwiZGVmYXVsdENvbW1hbmRzIiwiZXhhbWluZVJvb20iLCJpdGVtcyIsImdldFJvb20iLCJwbGF5ZXIiLCJnZXRJdGVtcyIsImluY2x1ZGVzIiwiZGVzY3JpcHRpb24iLCJhc3luYyIsIm9uVXNlIiwicm9vbSIsInRha2VhYmxlIiwicHJpbnQiLCJvblRha2UiLCJvbkRyb3AiLCJzZXRJbnB1dEVjaG8iLCJkaXJlY3Rpb25NYXAiLCJDb21tYW5kcyIsImNvbW1hbmRzIiwiZW5hYmxlZCIsImFkZERlZmF1bHRDb21tYW5kcyIsInN0ciIsImRpcmVjdGlvbiIsIm1hdGNoRGlyZWN0aW9uIiwiZ2V0RXhpdCIsIm1vdmUiLCJhZGRDb21tYW5kIiwiZnVuYyIsImlzQXJyYXkiLCJjb21tYW5kIiwiYWRkQ29tbWFuZHMiLCJkaXIiLCJSb29tIiwidGl0bGUiLCJmaXJzdERlc2NyaXB0aW9uIiwib2JqZWN0cyIsImV4aXRzIiwiZW50ZXJDYWxsYmFjayIsImV4aXRDYWxsYmFjayIsImNhbkVudGVyTG9naWMiLCJjYW5FeGl0TG9naWMiLCJ0aWNrQ2FsbGJhY2siLCJjYW5FbnRlciIsImNhbkV4aXQiLCJhZGRFeGl0Iiwicm9vbUlEIiwiYWRkRW50ZXJDYWxsYmFjayIsImNhbGxiYWNrIiwiYWRkRXhpdENhbGxiYWNrIiwiYWRkRW50ZXJMb2dpYyIsImFkZEV4aXRMb2dpYyIsImFkZFRpY2tDYWxsYmFjayIsIlJvb21CdWlsZGVyIiwid2l0aElEIiwiSUQiLCJ3aXRoVGl0bGUiLCJ3aXRoRmlyc3REZXNjcmlwdGlvbiIsIndpdGhEZXNjcmlwdGlvbiIsIndpdGhFeGl0Iiwid2l0aEl0ZW0iLCJpdGVtSUQiLCJ3aXRoRW50ZXJDYWxsYmFjayIsIndpdGhFeGl0Q2FsbGJhY2siLCJ3aXRoRW50ZXJMb2dpYyIsIndpdGhFeGl0TG9naWMiLCJ3aXRoVGljayIsInN0YXRlIiwid2FpdCIsImVuYWJsZUNvbW1hbmRJbnB1dCIsIkl0ZW0iLCJ1c2FibGUiLCJ1c2VDYWxsYmFjayIsInRha2VDYWxsYmFjayIsImRyb3BDYWxsYmFjayIsImFkZFVzZUNhbGxiYWNrIiwiYWRkVGFrZUNhbGxiYWNrIiwiYWRkRHJvcENhbGxiYWNrIiwiSXRlbUJ1aWxkZXIiLCJ3aXRoTmFtZSIsImlzVXNhYmxlIiwiaXNUYWtlYWJsZSIsIndpdGhVc2VDYWxsYmFjayIsIndpdGhUYWtlQ2FsbGJhY2siLCJ3aXRoRHJvcENhbGxiYWNrIiwid2l0aFRpY2tDYWxsYmFjayIsImdhbWUiLCJyb29tcyIsInZpc2l0ZWRSb29tcyIsImludGVydmFsIiwiYWR2YW5jZVRpY2siLCJvblRpY2siLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJleGFtaW5lSXRlbXMiLCJleGFtaW5lRXhpdHMiLCJpdGVtRGVzY3JpcHRpb24iLCJleGl0RGVzY3JpcHRpb24iLCJleGl0S2V5cyIsImV4aXQiLCJmaW5kIiwibXMiLCJuZXdSb29tIiwib25FeGl0Iiwib25FbnRlciJdLCJzb3VyY2VSb290IjoiIn0=
|