/*! For license information please see vendor.js.LICENSE.txt */ (self.webpackChunk_thirtythree_basetheme=self.webpackChunk_thirtythree_basetheme||[]).push([[898],{158:function(e){var t,n;t="undefined"!=typeof window?window:this,n=function(){function e(){}let t=e.prototype;return t.on=function(e,t){if(!e||!t)return this;let n=this._events=this._events||{},r=n[e]=n[e]||[];return r.includes(t)||r.push(t),this},t.once=function(e,t){if(!e||!t)return this;this.on(e,t);let n=this._onceEvents=this._onceEvents||{};return(n[e]=n[e]||{})[t]=!0,this},t.off=function(e,t){let n=this._events&&this._events[e];if(!n||!n.length)return this;let r=n.indexOf(t);return-1!=r&&n.splice(r,1),this},t.emitEvent=function(e,t){let n=this._events&&this._events[e];if(!n||!n.length)return this;n=n.slice(0),t=t||[];let r=this._onceEvents&&this._onceEvents[e];for(let i of n)r&&r[i]&&(this.off(e,i),delete r[i]),i.apply(this,t);return this},t.allOff=function(){return delete this._events,delete this._onceEvents,this},e},e.exports?e.exports=n():t.EvEmitter=n()},898:function(e,t,n){"use strict";n.d(t,{W:function(){return E}});var r,i,s,a,o,l,u,c,d=function(){return"undefined"!=typeof window},p=function(){return r||d()&&(r=window.gsap)&&r.registerPlugin&&r},h=/[-+=\.]*\d+[\.e\-\+]*\d*[e\-\+]*\d*/gi,f={rect:["width","height"],circle:["r","r"],ellipse:["rx","ry"],line:["x2","y2"]},g=function(e){return Math.round(1e4*e)/1e4},m=function(e){return parseFloat(e)||0},v=function(e,t){var n=m(e);return~e.indexOf("%")?n/100*t:n},y=function(e,t){return m(e.getAttribute(t))},_=Math.sqrt,b=function(e,t,n,r,i,s){return _(Math.pow((m(n)-m(e))*i,2)+Math.pow((m(r)-m(t))*s,2))},w=function(e){return console.warn(e)},x=function(e){return"non-scaling-stroke"===e.getAttribute("vector-effect")},T=function(e){if(!(e=i(e)[0]))return 0;var t,n,r,s,a,o,u,c=e.tagName.toLowerCase(),d=e.style,p=1,m=1;x(e)&&(m=e.getScreenCTM(),p=_(m.a*m.a+m.b*m.b),m=_(m.d*m.d+m.c*m.c));try{n=e.getBBox()}catch(e){w("Some browsers won't measure invisible elements (like display:none or masks inside defs).")}var v=n||{x:0,y:0,width:0,height:0},T=v.x,C=v.y,S=v.width,E=v.height;if(n&&(S||E)||!f[c]||(S=y(e,f[c][0]),E=y(e,f[c][1]),"rect"!==c&&"line"!==c&&(S*=2,E*=2),"line"===c&&(T=y(e,"x1"),C=y(e,"y1"),S=Math.abs(S-T),E=Math.abs(E-C))),"path"===c)s=d.strokeDasharray,d.strokeDasharray="none",t=e.getTotalLength()||0,g(p)!==g(m)&&!l&&(l=1)&&w("Warning: length cannot be measured when vector-effect is non-scaling-stroke and the element isn't proportionally scaled."),t*=(p+m)/2,d.strokeDasharray=s;else if("rect"===c)t=2*S*p+2*E*m;else if("line"===c)t=b(T,C,T+S,C+E,p,m);else if("polyline"===c||"polygon"===c)for(r=e.getAttribute("points").match(h)||[],"polygon"===c&&r.push(r[0],r[1]),t=0,a=2;at&&(r=t),[-a||0,r-a||0]},S=function(){d()&&(document,s=window,o=r=p(),i=r.utils.toArray,u=r.core.getStyleSaver,c=r.core.reverting||function(){},a=-1!==((s.navigator||{}).userAgent||"").indexOf("Edge"))},E={version:"3.12.2",name:"drawSVG",register:function(e){r=e,S()},init:function(e,t,n,r,i){if(!e.getBBox)return!1;o||S();var l,c,d,p=T(e);return this.styles=u&&u(e,"strokeDashoffset,strokeDasharray,strokeMiterlimit"),this.tween=n,this._style=e.style,this._target=e,t+""=="true"?t="0 100%":t?-1===(t+"").indexOf(" ")&&(t="0 "+t):t="0 0",c=function(e,t,n){var r,i,s=e.indexOf(" ");return s<0?(r=void 0!==n?n+"":e,i=e):(r=e.substr(0,s),i=e.substr(s+1)),(r=v(r,t))>(i=v(i,t))?[i,r]:[r,i]}(t,p,(l=C(e,p))[0]),this._length=g(p),this._dash=g(l[1]-l[0]),this._offset=g(-l[0]),this._dashPT=this.add(this,"_dash",this._dash,g(c[1]-c[0]),0,0,0,0,0,1),this._offsetPT=this.add(this,"_offset",this._offset,g(-c[0]),0,0,0,0,0,1),a&&(d=s.getComputedStyle(e)).strokeLinecap!==d.strokeLinejoin&&(c=m(d.strokeMiterlimit),this.add(e.style,"strokeMiterlimit",c,c+.01)),this._live=x(e)||~(t+"").indexOf("live"),this._nowrap=~(t+"").indexOf("nowrap"),this._props.push("drawSVG"),1},render:function(e,t){if(t.tween._time||!c()){var n,r,i,s,a=t._pt,o=t._style;if(a){for(t._live&&(n=T(t._target))!==t._length&&(r=n/t._length,t._length=n,t._offsetPT&&(t._offsetPT.s*=r,t._offsetPT.c*=r),t._dashPT?(t._dashPT.s*=r,t._dashPT.c*=r):t._dash*=r);a;)a.r(e,a.d),a=a._next;i=t._dash||e&&1!==e&&1e-4||0,n=t._length-i+.1,s=t._offset,i&&s&&i+Math.abs(s%t._length)>t._length-.2&&(s+=s<0?.1:-.1)&&(n+=.1),o.strokeDashoffset=i?s:s+.001,o.strokeDasharray=n<.2?"none":i?i+"px,"+(t._nowrap?999999:n)+"px":"0px, 999999px"}}else t.styles.revert()},getLength:T,getPosition:C};p()&&r.registerPlugin(E)},492:function(e,t,n){"use strict";n.d(t,{X:function(){return Oe}});var r=/[achlmqstvz]|(-?\d*\.?\d*(?:e[\-+]?\d+)?)[0-9]/gi,i=/(?:(-)?\d*\.?\d*(?:e[\-+]?\d+)?)[0-9]/gi,s=/[\+\-]?\d*\.?\d+e[\+\-]?\d+/gi,a=/(^[#\.][a-z]|[a-y][a-z])/i,o=Math.PI/180,l=180/Math.PI,u=Math.sin,c=Math.cos,d=Math.abs,p=Math.sqrt,h=Math.atan2,f=1e8,g=function(e){return"string"==typeof e},m=function(e){return"number"==typeof e},v={},y={},_=1e5,b=function(e){return Math.round((e+f)%1*_)/_||(e<0?0:1)},w=function(e){return Math.round(e*_)/_||0},x=function(e){return Math.round(1e10*e)/1e10||0},T=function(e,t,n,r){var i=e[t],s=1===r?6:I(i,n,r);if(s&&s+n+2t){for(;--i&&e[i]>t;);i<0&&(i=0)}else for(;e[++i] element or an SVG path data string")}function M(e){var t,n=0;for(e.reverse();n-1;)n=i[s].nodeName.toLowerCase(),t.indexOf(","+n+",")<0&&r.setAttributeNS(null,n,i[s].nodeValue);return r}(e,"x,y,width,height,cx,cy,rx,ry,r,x1,x2,y1,y2,points"),C=function(e,t){for(var n=t?t.split(","):[],r={},i=n.length;--i>-1;)r[n[i]]=+e.getAttribute(n[i])||0;return r}(e,P[S]),"rect"===S?(a=C.rx,o=C.ry||a,r=C.x,s=C.y,p=C.width-2*a,h=C.height-2*o,n=a||o?"M"+(y=(m=(g=r+a)+p)+a)+","+(b=s+o)+" V"+(w=b+h)+" C"+[y,x=w+o*E,v=m+a*E,T=w+o,m,T,m-(m-g)/3,T,g+(m-g)/3,T,g,T,f=r+a*(1-E),T,r,x,r,w,r,w-(w-b)/3,r,b+(w-b)/3,r,b,r,_=s+o*(1-E),f,s,g,s,g+(m-g)/3,s,m-(m-g)/3,s,m,s,v,s,y,_,y,b].join(",")+"z":"M"+(r+p)+","+s+" v"+h+" h"+-p+" v"+-h+" h"+p+"z"):"circle"===S||"ellipse"===S?("circle"===S?c=(a=o=C.r)*E:(a=C.rx,c=(o=C.ry)*E),n="M"+((r=C.cx)+a)+","+(s=C.cy)+" C"+[r+a,s+c,r+(u=a*E),s+o,r,s+o,r-u,s+o,r-a,s+c,r-a,s,r-a,s-c,r-u,s-o,r,s-o,r+u,s-o,r+a,s-c,r+a,s].join(",")+"z"):"line"===S?n="M"+C.x1+","+C.y1+" L"+C.x2+","+C.y2:"polyline"!==S&&"polygon"!==S||(n="M"+(r=(d=(e.getAttribute("points")+"").match(i)||[]).shift())+","+(s=d.shift())+" L"+d.join(","),"polygon"===S&&(n+=","+r+","+s+"z")),l.setAttribute("d",X(l._gsRawPath=F(n))),t&&e.parentNode&&(e.parentNode.insertBefore(l,e),e.parentNode.removeChild(e)),l):e}function L(e,t,n){var r,i=e[t],s=e[t+2],a=e[t+4];return i+=(s-i)*n,i+=((s+=(a-s)*n)-i)*n,r=s+(a+(e[t+6]-a)*n-s)*n-i,i=e[t+1],i+=((s=e[t+3])-i)*n,i+=((s+=((a=e[t+5])-s)*n)-i)*n,w(h(s+(a+(e[t+7]-a)*n-s)*n-i,r)*l)}function A(e,t,n){n=void 0===n?1:x(n)||0,t=x(t)||0;var r=Math.max(0,~~(d(n-t)-1e-8)),i=function(e){for(var t=[],n=0;nn&&(t=1-t,n=1-n,function(e,t){var n=e.length;for(t||e.reverse();n--;)e[n].reversed||M(e[n])}(i),i.totalLength=0),t<0||n<0){var s=Math.abs(~~Math.min(t,n))+1;t+=s,n+=s}i.totalLength||$(i);var a,o,l,u,c,p,h,f,g=n>1,m=z(i,t,v,!0),_=z(i,n,y),b=_.segment,w=m.segment,C=_.segIndex,k=m.segIndex,P=_.i,O=m.i,A=k===C,D=P===O&&A;if(g||r){for(a=CC)&&i.splice(u,1);else b.angle=L(b,P+l,0),m=b[P+=l],_=b[P+1],b.length=b.totalLength=0,b.totalPoints=i.totalPoints=8,b.push(m,_,m,_,m,_,m,_);return i.totalLength=0,i}function D(e,t,n){t=t||0,e.samples||(e.samples=[],e.lookup=[]);var r,i,s,a,o,l,u,c,h,g,m,v,y,_,b,w,x,T=~~e.resolution||12,C=1/T,S=n?t+6*n+1:e.length,E=e[t],k=e[t+1],M=t?t/6*T:0,P=e.samples,O=e.lookup,L=(t?e.minLength:f)||f,A=P[M+n*T-1],D=t?P[M-1]:0;for(P.length=O.length=0,i=t+2;i8&&(e.splice(i,6),i-=6,S-=6);else for(r=1;r<=T;r++)l=u-(u=((_=C*r)*_*s+3*(y=1-_)*(_*a+y*o))*_),m=v-(v=(_*_*c+3*y*(_*h+y*g))*_),(w=p(m*m+l*l))=1)return 0;var r=e[t],i=e[t+1],s=e[t+2],a=e[t+3],o=e[t+4],l=e[t+5],u=r+(s-r)*n,c=s+(o-s)*n,d=i+(a-i)*n,p=a+(l-a)*n,h=u+(c-u)*n,f=d+(p-d)*n,g=o+(e[t+6]-o)*n,m=l+(e[t+7]-l)*n;return c+=(g-c)*n,p+=(m-p)*n,e.splice(t+2,4,w(u),w(d),w(h),w(f),w(h+(c-h)*n),w(f+(p-f)*n),w(c),w(p),w(g),w(m)),e.samples&&e.samples.splice(t/6*e.resolution|0,0,0,0,0,0,0,0),6}function z(e,t,n,r){n=n||{},e.totalLength||$(e),(t<0||t>1)&&(t=b(t));var i,s,a,o,l,u,c,d=0,p=e[0];if(t)if(1===t)c=1,u=(p=e[d=e.length-1]).length-8;else{if(e.length>1){for(a=e.totalLength*t,l=u=0;(l+=e[u++].totalLength)1)&&(t=b(t)),h.lookup||$(e),e.length>1){for(a=e.totalLength*t,l=u=0;(l+=e[u++].totalLength)=1?1-1e-9:c||1e-9):h.angle||0),f}function R(e,t,n,r,i,s,a){for(var o,l,u,c,d,p=e.length;--p>-1;)for(l=(o=e[p]).length,u=0;u1&&(n=p(S)*n,r=p(S)*r);var E=n*n,k=r*r,M=(E*k-E*C-k*T)/(E*C+k*T);M<0&&(M=0);var P=(s===a?-1:1)*p(M),O=P*(n*x/r),L=P*(-r*w/n),A=(e+l)/2+(g*O-m*L),D=(t+h)/2+(m*O+g*L),$=(w-O)/n,I=(x-L)/r,z=(-w-O)/n,B=(-x-L)/r,R=$*$+I*I,N=(I<0?-1:1)*Math.acos($/p(R)),F=($*B-I*z<0?-1:1)*Math.acos(($*z+I*B)/p(R*(z*z+B*B)));isNaN(F)&&(F=v),!a&&F>0?F-=y:a&&F<0&&(F+=y),N%=y,F%=y;var G,Y=Math.ceil(d(F)/(y/4)),X=[],j=F/Y,H=4/3*u(j/2)/(1+c(j/2)),q=g*n,V=m*n,W=m*-r,U=g*r;for(G=0;G-1e-4?0:t})).match(r)||[],b=[],w=0,x=0,T=2/3,C=_.length,S=0,E="ERROR: malformed path: "+e,k=function(e,t,n,r){h=(n-e)/3,f=(r-t)/3,u.push(e+h,t+f,n-h,r-f,n,r)};if(!e||!isNaN(_[0])||isNaN(_[1]))return console.log(E),b;for(t=0;t.5||d(x-a)>.5)&&(k(w,x,i,a),"L"===o&&(t+=2)),w=i,x=a;else if("A"===o){if(v=_[t+4],y=_[t+5],h=_[t+6],f=_[t+7],n=7,v.length>1&&(v.length<3?(f=h,h=y,n--):(f=y,h=v.substr(2),n-=2),y=v.charAt(1),v=v.charAt(0)),g=N(w,x,+_[t+1],+_[t+2],+_[t+3],+v,+y,(l?w:0)+1*h,(l?x:0)+1*f),t+=n,g)for(n=0;n1?function(e){for(var t=new ue,n=0;n4&&(s=i.offsetLeft,a=i.offsetTop,i=0);if("absolute"!==(o=H.getComputedStyle(e)).position&&"fixed"!==o.position)for(r=e.offsetParent;d&&d!==r;)s+=d.scrollLeft||0,a+=d.scrollTop||0,d=d.parentNode;(i=n.style).top=e.offsetTop-a+"px",i.left=e.offsetLeft-s+"px",i[J]=o[J],i[ee]=o[ee],i.position="fixed"===o.position?"fixed":"absolute",e.parentNode.appendChild(n)}return n},le=function(e,t,n,r,i,s,a){return e.a=t,e.b=n,e.c=r,e.d=i,e.e=s,e.f=a,e},ue=function(){function e(e,t,n,r,i,s){void 0===e&&(e=1),void 0===t&&(t=0),void 0===n&&(n=0),void 0===r&&(r=1),void 0===i&&(i=0),void 0===s&&(s=0),le(this,e,t,n,r,i,s)}var t=e.prototype;return t.inverse=function(){var e=this.a,t=this.b,n=this.c,r=this.d,i=this.e,s=this.f,a=e*r-t*n||1e-10;return le(this,r/a,-t/a,-n/a,e/a,(n*s-r*i)/a,-(e*s-t*i)/a)},t.multiply=function(e){var t=this.a,n=this.b,r=this.c,i=this.d,s=this.e,a=this.f,o=e.a,l=e.c,u=e.b,c=e.d,d=e.e,p=e.f;return le(this,o*t+u*r,o*n+u*i,l*t+c*r,l*n+c*i,s+d*t+p*r,a+d*n+p*i)},t.clone=function(){return new e(this.a,this.b,this.c,this.d,this.e,this.f)},t.equals=function(e){var t=this.a,n=this.b,r=this.c,i=this.d,s=this.e,a=this.f;return t===e.a&&n===e.b&&r===e.c&&i===e.d&&s===e.e&&a===e.f},t.apply=function(e,t){void 0===t&&(t={});var n=e.x,r=e.y,i=this.a,s=this.b,a=this.c,o=this.d,l=this.e,u=this.f;return t.x=n*i+r*a+l||0,t.y=n*s+r*o+u||0,t},e}();function ce(e,t,n,r){if(!e||!e.parentNode||(j||te(e)).documentElement===e)return new ue;var i=function(e){for(var t,n;e&&e!==V;)(n=e._gsap)&&n.uncache&&n.get(e,"x"),n&&!n.scaleX&&!n.scaleY&&n.renderTransform&&(n.scaleX=n.scaleY=1e-4,n.renderTransform(1,n),t?t.push(n):t=[n]),e=e.parentNode;return t}(e),s=ie(e)?ne:re,a=oe(e,n),o=s[0].getBoundingClientRect(),l=s[1].getBoundingClientRect(),u=s[2].getBoundingClientRect(),c=a.parentNode,d=!r&&se(e),p=new ue((l.left-o.left)/100,(l.top-o.top)/100,(u.left-o.left)/100,(u.top-o.top)/100,o.left+(d?0:H.pageXOffset||j.scrollLeft||q.scrollLeft||V.scrollLeft||0),o.top+(d?0:H.pageYOffset||j.scrollTop||q.scrollTop||V.scrollTop||0));if(c.removeChild(a),i)for(o=i.length;o--;)(l=i[o]).scaleX=l.scaleY=0,l.renderTransform(1,l);return t?p.inverse():p}var de,pe,he,fe,ge,me,ve="x,translateX,left,marginLeft,xPercent".split(","),ye="y,translateY,top,marginTop,yPercent".split(","),_e=Math.PI/180,be=function(e,t,n,r){for(var i=t.length,s=2===r?0:r,a=0;a1?e=1:e<0&&(e=0);r--;)B(n[r],e,!r&&t.rotate,n[r]);for(;i;)i.set(i.t,i.p,i.path[i.pp]+i.u,i.d,e),i=i._next;t.rotate&&t.rSet(t.target,t.rProp,n[0].angle*(t.radians?_e:1)+t.rOffset+t.ru,t,e)}else t.styles.revert()},getLength:function(e){return $(k(e)).totalLength},sliceRawPath:A,getRawPath:k,pointsToSegment:Y,stringToRawPath:F,rawPathToString:X,transformRawPath:R,getGlobalMatrix:ce,getPositionOnPath:B,cacheRawPathMeasurements:$,convertToPath:function(e,t){return fe(e).map((function(e){return O(e,!1!==t)}))},convertCoordinates:function(e,t,n){var r=ce(t,!0,!0).multiply(ce(e));return n?r.apply(n):r},getAlignMatrix:ke,getRelativePosition:function(e,t,n,r){var i=ke(e,t,n,r);return{x:i.e,y:i.f}},arrayToRawPath:function(e,t){var n=be(be([],e,(t=t||{}).x||"x",0),e,t.y||"y",1);return t.relative&&xe(n),["cubic"===t.type?n:Y(n,t.curviness)]}};(de||"undefined"!=typeof window&&(de=window.gsap)&&de.registerPlugin&&de)&&de.registerPlugin(Oe)},127:function(e,t,n){"use strict";n.d(t,{L:function(){return b}});var r,i,s,a,o,l,u,c,d=function(){return"undefined"!=typeof window},p=function(){return r||d()&&(r=window.gsap)&&r.registerPlugin&&r},h=function(e){return"string"==typeof e},f=function(e){return"function"==typeof e},g=function(e,t){var n="x"===t?"Width":"Height",r="scroll"+n,i="client"+n;return e===s||e===a||e===o?Math.max(a[r],o[r])-(s["inner"+n]||a[i]||o[i]):e[r]-e["offset"+n]},m=function(e,t){var n="scroll"+("x"===t?"Left":"Top");return e===s&&(null!=e.pageXOffset?n="page"+t.toUpperCase()+"Offset":e=null!=a[n]?a:o),function(){return e[n]}},v=function(e,t){if(!(e=l(e)[0])||!e.getBoundingClientRect)return console.warn("scrollTo target doesn't exist. Using 0")||{x:0,y:0};var n=e.getBoundingClientRect(),r=!t||t===s||t===o,i=r?{top:a.clientTop-(s.pageYOffset||a.scrollTop||o.scrollTop||0),left:a.clientLeft-(s.pageXOffset||a.scrollLeft||o.scrollLeft||0)}:t.getBoundingClientRect(),u={x:n.left-i.left,y:n.top-i.top};return!r&&t&&(u.x+=m(t,"x")(),u.y+=m(t,"y")()),u},y=function(e,t,n,r,i){return isNaN(e)||"object"==typeof e?h(e)&&"="===e.charAt(1)?parseFloat(e.substr(2))*("-"===e.charAt(0)?-1:1)+r-i:"max"===e?g(t,n)-i:Math.min(g(t,n),v(e,t)[n]-i):parseFloat(e)-i},_=function(){r=p(),d()&&r&&"undefined"!=typeof document&&document.body&&(s=window,o=document.body,a=document.documentElement,l=r.utils.toArray,r.config({autoKillThreshold:7}),u=r.config(),i=1)},b={version:"3.12.2",name:"scrollTo",rawVars:1,register:function(e){r=e,_()},init:function(e,t,n,a,o){i||_();var l=this,u=r.getProperty(e,"scrollSnapType");l.isWin=e===s,l.target=e,l.tween=n,t=function(e,t,n,r){if(f(e)&&(e=e(t,n,r)),"object"!=typeof e)return h(e)&&"max"!==e&&"="!==e.charAt(1)?{x:e,y:e}:{y:e};if(e.nodeType)return{y:e,x:e};var i,s={};for(i in e)s[i]="onAutoKill"!==i&&f(e[i])?e[i](t,n,r):e[i];return s}(t,a,e,o),l.vars=t,l.autoKill=!!t.autoKill,l.getX=m(e,"x"),l.getY=m(e,"y"),l.x=l.xPrev=l.getX(),l.y=l.yPrev=l.getY(),c||(c=r.core.globals().ScrollTrigger),"smooth"===r.getProperty(e,"scrollBehavior")&&r.set(e,{scrollBehavior:"auto"}),u&&"none"!==u&&(l.snap=1,l.snapInline=e.style.scrollSnapType,e.style.scrollSnapType="none"),null!=t.x?(l.add(l,"x",l.x,y(t.x,e,"x",l.x,t.offsetX||0),a,o),l._props.push("scrollTo_x")):l.skipX=1,null!=t.y?(l.add(l,"y",l.y,y(t.y,e,"y",l.y,t.offsetY||0),a,o),l._props.push("scrollTo_y")):l.skipY=1},render:function(e,t){for(var n,r,i,a,o,l=t._pt,d=t.target,p=t.tween,h=t.autoKill,f=t.xPrev,m=t.yPrev,v=t.isWin,y=t.snap,_=t.snapInline;l;)l.r(e,l.d),l=l._next;n=v||!t.skipX?t.getX():f,i=(r=v||!t.skipY?t.getY():m)-m,a=n-f,o=u.autoKillThreshold,t.x<0&&(t.x=0),t.y<0&&(t.y=0),h&&(!t.skipX&&(a>o||a<-o)&&no||i<-o)&&ro?(i=r,r=e,a=s,s=l):n?r+=e:r=i+(e-i)/(l-a)*(s-a)};return{update:u,reset:function(){i=r=n?0:r,a=s=0},getVelocity:function(e){var t=a,o=i,c=x();return(e||0===e)&&e!==r&&u(e),s===a||c-a>l?0:(r+(n?o:-o))/((n?c:s)-t)*1e3}}},B=function(e,t){return t&&!e._gsapAllow&&e.preventDefault(),e.changedTouches?e.changedTouches[0]:e},R=function(e){var t=Math.max.apply(Math,e),n=Math.min.apply(Math,e);return Math.abs(t)>=Math.abs(n)?t:n},N=function(){var e,t,n,r;(p=i.core.globals().ScrollTrigger)&&p.core&&(e=p.core,t=e.bridge||{},n=e._scrollers,r=e._proxies,n.push.apply(n,b),r.push.apply(r,w),b=n,w=r,T=function(e,n){return t[e](n)})},F=function(e){return(i=e||v())&&"undefined"!=typeof document&&document.body&&(a=window,o=document,l=o.documentElement,u=o.body,h=[a,o,l,u],i.utils.clamp,m=i.core.context||function(){},d="onpointerenter"in u?"pointer":"mouse",c=G.isTouch=a.matchMedia&&a.matchMedia("(hover: none), (pointer: coarse)").matches?1:"ontouchstart"in a||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0?2:0,g=G.eventTypes=("ontouchstart"in l?"touchstart,touchmove,touchcancel,touchend":"onpointerdown"in l?"pointerdown,pointermove,pointercancel,pointerup":"mousedown,mousemove,mouseup,mouseup").split(","),setTimeout((function(){return y=0}),500),N(),s=1),s};A.op=D,b.cache=0;var G=function(){function e(e){this.init(e)}var t,n,h;return e.prototype.init=function(e){s||F(i)||console.warn("Please gsap.registerPlugin(Observer)"),p||N();var t=e.tolerance,n=e.dragMinimum,r=e.type,h=e.target,v=e.lineHeight,y=e.debounce,b=e.preventDefault,w=e.onStop,T=e.onStopDelay,C=e.ignore,M=e.wheelSpeed,P=e.event,L=e.onDragStart,G=e.onDragEnd,Y=e.onDrag,X=e.onPress,j=e.onRelease,H=e.onRight,q=e.onLeft,V=e.onUp,W=e.onDown,U=e.onChangeX,K=e.onChangeY,Q=e.onChange,Z=e.onToggleX,J=e.onToggleY,ee=e.onHover,te=e.onHoverEnd,ne=e.onMove,re=e.ignoreCheck,ie=e.isNormalizer,se=e.onGestureStart,ae=e.onGestureEnd,oe=e.onWheel,le=e.onEnable,ue=e.onDisable,ce=e.onClick,de=e.scrollSpeed,pe=e.capture,he=e.allowClicks,fe=e.lockAxis,ge=e.onLockAxis;this.target=h=$(h)||l,this.vars=e,C&&(C=i.utils.toArray(C)),t=t||1e-9,n=n||0,M=M||1,de=de||1,r=r||"wheel,touch,pointer",y=!1!==y,v||(v=parseFloat(a.getComputedStyle(u).lineHeight)||22);var me,ve,ye,_e,be,we,xe,Te=this,Ce=0,Se=0,Ee=I(h,A),ke=I(h,D),Me=Ee(),Pe=ke(),Oe=~r.indexOf("touch")&&!~r.indexOf("pointer")&&"pointerdown"===g[0],Le=S(h),Ae=h.ownerDocument||o,De=[0,0,0],$e=[0,0,0],Ie=0,ze=function(){return Ie=x()},Be=function(e,t){return(Te.event=e)&&C&&~C.indexOf(e.target)||t&&Oe&&"touch"!==e.pointerType||re&&re(e,t)},Re=function(){var e=Te.deltaX=R(De),n=Te.deltaY=R($e),r=Math.abs(e)>=t,i=Math.abs(n)>=t;Q&&(r||i)&&Q(Te,e,n,De,$e),r&&(H&&Te.deltaX>0&&H(Te),q&&Te.deltaX<0&&q(Te),U&&U(Te),Z&&Te.deltaX<0!=Ce<0&&Z(Te),Ce=Te.deltaX,De[0]=De[1]=De[2]=0),i&&(W&&Te.deltaY>0&&W(Te),V&&Te.deltaY<0&&V(Te),K&&K(Te),J&&Te.deltaY<0!=Se<0&&J(Te),Se=Te.deltaY,$e[0]=$e[1]=$e[2]=0),(_e||ye)&&(ne&&ne(Te),ye&&(Y(Te),ye=!1),_e=!1),we&&!(we=!1)&&ge&&ge(Te),be&&(oe(Te),be=!1),me=0},Ne=function(e,t,n){De[n]+=e,$e[n]+=t,Te._vx.update(e),Te._vy.update(t),y?me||(me=requestAnimationFrame(Re)):Re()},Fe=function(e,t){fe&&!xe&&(Te.axis=xe=Math.abs(e)>Math.abs(t)?"x":"y",we=!0),"y"!==xe&&(De[2]+=e,Te._vx.update(e,!0)),"x"!==xe&&($e[2]+=t,Te._vy.update(t,!0)),y?me||(me=requestAnimationFrame(Re)):Re()},Ge=function(e){if(!Be(e,1)){var t=(e=B(e,b)).clientX,r=e.clientY,i=t-Te.x,s=r-Te.y,a=Te.isDragging;Te.x=t,Te.y=r,(a||Math.abs(Te.startX-t)>=n||Math.abs(Te.startY-r)>=n)&&(Y&&(ye=!0),a||(Te.isDragging=!0),Fe(i,s),a||L&&L(Te))}},Ye=Te.onPress=function(e){Be(e,1)||e&&e.button||(Te.axis=xe=null,ve.pause(),Te.isPressed=!0,e=B(e),Ce=Se=0,Te.startX=Te.x=e.clientX,Te.startY=Te.y=e.clientY,Te._vx.reset(),Te._vy.reset(),E(ie?h:Ae,g[1],Ge,b,!0),Te.deltaX=Te.deltaY=0,X&&X(Te))},Xe=Te.onRelease=function(e){if(!Be(e,1)){k(ie?h:Ae,g[1],Ge,!0);var t=!isNaN(Te.y-Te.startY),n=Te.isDragging&&(Math.abs(Te.x-Te.startX)>3||Math.abs(Te.y-Te.startY)>3),r=B(e);!n&&t&&(Te._vx.reset(),Te._vy.reset(),b&&he&&i.delayedCall(.08,(function(){if(x()-Ie>300&&!e.defaultPrevented)if(e.target.click)e.target.click();else if(Ae.createEvent){var t=Ae.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,a,1,r.screenX,r.screenY,r.clientX,r.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(t)}}))),Te.isDragging=Te.isGesturing=Te.isPressed=!1,w&&!ie&&ve.restart(!0),G&&n&&G(Te),j&&j(Te,n)}},je=function(e){return e.touches&&e.touches.length>1&&(Te.isGesturing=!0)&&se(e,Te.isDragging)},He=function(){return(Te.isGesturing=!1)||ae(Te)},qe=function(e){if(!Be(e)){var t=Ee(),n=ke();Ne((t-Me)*de,(n-Pe)*de,1),Me=t,Pe=n,w&&ve.restart(!0)}},Ve=function(e){if(!Be(e)){e=B(e,b),oe&&(be=!0);var t=(1===e.deltaMode?v:2===e.deltaMode?a.innerHeight:1)*M;Ne(e.deltaX*t,e.deltaY*t,0),w&&!ie&&ve.restart(!0)}},We=function(e){if(!Be(e)){var t=e.clientX,n=e.clientY,r=t-Te.x,i=n-Te.y;Te.x=t,Te.y=n,_e=!0,(r||i)&&Fe(r,i)}},Ue=function(e){Te.event=e,ee(Te)},Ke=function(e){Te.event=e,te(Te)},Qe=function(e){return Be(e)||B(e,b)&&ce(Te)};ve=Te._dc=i.delayedCall(T||.25,(function(){Te._vx.reset(),Te._vy.reset(),ve.pause(),w&&w(Te)})).pause(),Te.deltaX=Te.deltaY=0,Te._vx=z(0,50,!0),Te._vy=z(0,50,!0),Te.scrollX=Ee,Te.scrollY=ke,Te.isDragging=Te.isGesturing=Te.isPressed=!1,m(this),Te.enable=function(e){return Te.isEnabled||(E(Le?Ae:h,"scroll",O),r.indexOf("scroll")>=0&&E(Le?Ae:h,"scroll",qe,b,pe),r.indexOf("wheel")>=0&&E(h,"wheel",Ve,b,pe),(r.indexOf("touch")>=0&&c||r.indexOf("pointer")>=0)&&(E(h,g[0],Ye,b,pe),E(Ae,g[2],Xe),E(Ae,g[3],Xe),he&&E(h,"click",ze,!1,!0),ce&&E(h,"click",Qe),se&&E(Ae,"gesturestart",je),ae&&E(Ae,"gestureend",He),ee&&E(h,d+"enter",Ue),te&&E(h,d+"leave",Ke),ne&&E(h,d+"move",We)),Te.isEnabled=!0,e&&e.type&&Ye(e),le&&le(Te)),Te},Te.disable=function(){Te.isEnabled&&(_.filter((function(e){return e!==Te&&S(e.target)})).length||k(Le?Ae:h,"scroll",O),Te.isPressed&&(Te._vx.reset(),Te._vy.reset(),k(ie?h:Ae,g[1],Ge,!0)),k(Le?Ae:h,"scroll",qe,pe),k(h,"wheel",Ve,pe),k(h,g[0],Ye,pe),k(Ae,g[2],Xe),k(Ae,g[3],Xe),k(h,"click",ze,!0),k(h,"click",Qe),k(Ae,"gesturestart",je),k(Ae,"gestureend",He),k(h,d+"enter",Ue),k(h,d+"leave",Ke),k(h,d+"move",We),Te.isEnabled=Te.isPressed=Te.isDragging=!1,ue&&ue(Te))},Te.kill=Te.revert=function(){Te.disable();var e=_.indexOf(Te);e>=0&&_.splice(e,1),f===Te&&(f=0)},_.push(Te),ie&&S(h)&&(f=Te),Te.enable(P)},t=e,(n=[{key:"velocityX",get:function(){return this._vx.getVelocity()}},{key:"velocityY",get:function(){return this._vy.getVelocity()}}])&&r(t.prototype,n),h&&r(t,h),e}();G.version="3.12.2",G.create=function(e){return new G(e)},G.register=F,G.getAll=function(){return _.slice()},G.getById=function(e){return _.filter((function(t){return t.vars.id===e}))[0]},v()&&i.registerPlugin(G);var Y,X,j,H,q,V,W,U,K,Q,Z,J,ee,te,ne,re,ie,se,ae,oe,le,ue,ce,de,pe,he,fe,ge,me,ve,ye,_e,be,we,xe,Te,Ce=1,Se=Date.now,Ee=Se(),ke=0,Me=0,Pe=function(e,t,n){var r=Xe(e)&&("clamp("===e.substr(0,6)||e.indexOf("max")>-1);return n["_"+t+"Clamp"]=r,r?e.substr(6,e.length-7):e},Oe=function(e,t){return!t||Xe(e)&&"clamp("===e.substr(0,6)?e:"clamp("+e+")"},Le=function e(){return Me&&requestAnimationFrame(e)},Ae=function(){return te=1},De=function(){return te=0},$e=function(e){return e},Ie=function(e){return Math.round(1e5*e)/1e5||0},ze=function(){return"undefined"!=typeof window},Be=function(){return Y||ze()&&(Y=window.gsap)&&Y.registerPlugin&&Y},Re=function(e){return!!~W.indexOf(e)},Ne=function(e){return("Height"===e?ye:j["inner"+e])||q["client"+e]||V["client"+e]},Fe=function(e){return C(e,"getBoundingClientRect")||(Re(e)?function(){return Zt.width=j.innerWidth,Zt.height=ye,Zt}:function(){return pt(e)})},Ge=function(e,t){var n=t.s,r=t.d2,i=t.d,s=t.a;return Math.max(0,(n="scroll"+r)&&(s=C(e,n))?s()-Fe(e)()[i]:Re(e)?(q[n]||V[n])-Ne(r):e[n]-e["offset"+r])},Ye=function(e,t){for(var n=0;n0){for(e-=i,s=0;s=e)return n[s];return n[s-1]}for(s=n.length,e+=i;s--;)if(n[s]<=e)return n[s];return n[0]}:function(n,r,i){void 0===i&&(i=.001);var s=t(n);return!r||Math.abs(s-n)n&&(r*=t/100),e=e.substr(0,n-1)),e=r+(e in xt?xt[e]*t:~e.indexOf("%")?parseFloat(e)*t/100:parseFloat(e)||0)}return e},Ct=function(e,t,n,r,i,s,a,o){var l=i.startColor,u=i.endColor,c=i.fontSize,d=i.indent,p=i.fontWeight,h=H.createElement("div"),f=Re(n)||"fixed"===C(n,"pinType"),g=-1!==e.indexOf("scroller"),m=f?V:n,v=-1!==e.indexOf("start"),y=v?l:u,_="border-color:"+y+";font-size:"+c+";color:"+y+";font-weight:"+p+";pointer-events:none;white-space:nowrap;font-family:sans-serif,Arial;z-index:1000;padding:4px 8px;border-width:0;border-style:solid;";return _+="position:"+((g||o)&&f?"fixed;":"absolute;"),(g||o||!f)&&(_+=(r===D?Qe:Ze)+":"+(s+parseFloat(d))+"px;"),a&&(_+="box-sizing:border-box;text-align:left;width:"+a.offsetWidth+"px;"),h._isStart=v,h.setAttribute("class","gsap-marker-"+e+(t?" marker-"+t:"")),h.style.cssText=_,h.innerText=t||0===t?e+"-"+t:e,m.children[0]?m.insertBefore(h,m.children[0]):m.appendChild(h),h._offset=h["offset"+r.op.d2],St(h,0,r,v),h},St=function(e,t,n,r){var i={display:"block"},s=n[r?"os2":"p2"],a=n[r?"p2":"os2"];e._isFlipped=r,i[n.a+"Percent"]=r?-100:0,i[n.a]=r?"1px":0,i["border"+s+ot]=1,i["border"+a+ot]=0,i[n.p]=t+"px",Y.set(e,i)},Et=[],kt={},Mt=function(){return Se()-ke>34&&(be||(be=requestAnimationFrame(Ht)))},Pt=function(){(!ce||!ce.isPressed||ce.startX>V.clientWidth)&&(b.cache++,ce?be||(be=requestAnimationFrame(Ht)):Ht(),ke||It("scrollStart"),ke=Se())},Ot=function(){he=j.innerWidth,pe=j.innerHeight},Lt=function(){b.cache++,!ee&&!ue&&!H.fullscreenElement&&!H.webkitFullscreenElement&&(!de||he!==j.innerWidth||Math.abs(j.innerHeight-pe)>.25*j.innerHeight)&&U.restart(!0)},At={},Dt=[],$t=function e(){return yt(an,"scrollEnd",e)||Yt(!0)},It=function(e){return At[e]&&At[e].map((function(e){return e()}))||Dt},zt=[],Bt=function(e){for(var t=0;tt)&&e.setPositions(e.start,Math.max(e.start+1,t),!0)})),n.forEach((function(e){return e&&e.render&&e.render(-1)})),b.forEach((function(e){je(e)&&(e.smooth&&requestAnimationFrame((function(){return e.target.style.scrollBehavior="smooth"})),e.rec&&e(e.rec))})),Nt(me,1),U.pause(),Ft++,we=2,Ht(2),Et.forEach((function(e){return je(e.vars.onRefresh)&&e.vars.onRefresh(e)})),we=an.isRefreshing=!1,It("refresh")}else vt(an,"scrollEnd",$t)},Xt=0,jt=1,Ht=function(e){if(!we||2===e){an.isUpdating=!0,Te&&Te.update(0);var t=Et.length,n=Se(),r=n-Ee>=50,i=t&&Et[0].scroll();if(jt=Xt>i?-1:1,we||(Xt=i),r&&(ke&&!te&&n-ke>200&&(ke=0,It("scrollEnd")),Z=Ee,Ee=n),jt<0){for(re=t;re-- >0;)Et[re]&&Et[re].update(0,r);jt=1}else for(re=0;re20),n-=n-b}if(h&&(o[h]=e||-.001,e<0&&(e=0)),s){var T=e+n,C=s._isStart;f="scroll"+r.d2,St(s,T,r,C&&T>20||!C&&(c?Math.max(V[f],q[f]):s.parentNode[f])<=T+1),c&&(l=pt(a),c&&(s.style[r.op.p]=l[r.op.p]-r.op.m-s._offset+ut))}return p&&m&&(f=pt(m),p.seek(d),g=pt(m),p._caScrollDist=f[r.p]-g[r.p],e=e/p._caScrollDist*d),p&&p.seek(v),p?e:Math.round(e)},en=/(webkit|moz|length|cssText|inset)/i,tn=function(e,t,n,r){if(e.parentNode!==t){var i,s,a=e.style;if(t===V){for(i in e._stOrig=a.cssText,s=ct(e))+i||en.test(i)||!s[i]||"string"!=typeof a[i]||"0"===i||(a[i]=s[i]);a.top=n,a.left=r}else a.cssText=e._stOrig;Y.core.getCache(e).uncache=1,t.appendChild(e)}},nn=function(e,t,n){var r=t,i=r;return function(t){var s=Math.round(e());return s!==r&&s!==i&&Math.abs(s-r)>3&&Math.abs(s-i)>3&&(t=s,n&&n()),i=r,r=t,t}},rn=function(e,t,n){var r={};r[t.p]="+="+n,Y.set(e,r)},sn=function(e,t){var n=I(e,t),r="_scroll"+t.p2,i=function t(i,s,a,o,l){var u=t.tween,c=s.onComplete,d={};a=a||n();var p=nn(n,a,(function(){u.kill(),t.tween=0}));return l=o&&l||0,o=o||i-a,u&&u.kill(),s[r]=i,s.modifiers=d,d[r]=function(){return p(a+o*u.ratio+l*u.ratio*u.ratio)},s.onUpdate=function(){b.cache++,Ht()},s.onComplete=function(){t.tween=0,c&&c.call(u)},u=t.tween=Y.to(e,s)};return e[r]=n,n.wheelHandler=function(){return i.tween&&i.tween.kill()&&(i.tween=0)},vt(e,"wheel",n.wheelHandler),an.isTouch&&vt(e,"touchmove",n.wheelHandler),i},an=function(){function e(t,n){X||e.register(Y)||console.warn("Please gsap.registerPlugin(ScrollTrigger)"),ge(this),this.init(t,n)}return e.prototype.init=function(t,n){if(this.progress=this.start=0,this.vars&&this.kill(!0,!0),Me){var r,i,s,a,o,l,u,c,d,p,h,f,g,m,v,y,_,x,T,S,E,k,M,P,O,L,z,B,R,N,F,G,X,W,U,J,ne,ie,se,ae,ue,ce,de=t=dt(Xe(t)||He(t)||t.nodeType?{trigger:t}:t,wt),pe=de.onUpdate,he=de.toggleClass,fe=de.id,ge=de.onToggle,me=de.onRefresh,ve=de.scrub,ye=de.trigger,be=de.pin,Ee=de.pinSpacing,Le=de.invalidateOnRefresh,Ae=de.anticipatePin,De=de.onScrubComplete,ze=de.onSnapComplete,Be=de.once,Ye=de.snap,Ke=de.pinReparent,Qe=de.pinSpacer,Ze=de.containerAnimation,mt=de.fastScrollEnd,_t=de.preventOverlaps,xt=t.horizontal||t.containerAnimation&&!1!==t.horizontal?A:D,St=!ve&&0!==ve,Mt=$(t.scroller||j),Ot=Y.core.getCache(Mt),At=Re(Mt),Dt="fixed"===("pinType"in t?t.pinType:C(Mt,"pinType")||At&&"fixed"),It=[t.onEnter,t.onLeave,t.onEnterBack,t.onLeaveBack],zt=St&&t.toggleActions.split(" "),Bt="markers"in t?t.markers:wt.markers,Rt=At?0:parseFloat(ct(Mt)["border"+xt.p2+ot])||0,Nt=this,Gt=t.onRefreshInit&&function(){return t.onRefreshInit(Nt)},Xt=function(e,t,n){var r=n.d,i=n.d2,s=n.a;return(s=C(e,"getBoundingClientRect"))?function(){return s()[r]}:function(){return(t?Ne(i):e["client"+i])||0}}(Mt,At,xt),Ht=function(e,t){return!t||~w.indexOf(e)?Fe(e):function(){return Zt}}(Mt,At),qt=0,Vt=0,Ut=0,en=I(Mt,xt);if(Nt._startClamp=Nt._endClamp=!1,Nt._dir=xt,Ae*=45,Nt.scroller=Mt,Nt.scroll=Ze?Ze.time.bind(Ze):en,a=en(),Nt.vars=t,n=n||t.animation,"refreshPriority"in t&&(oe=1,-9999===t.refreshPriority&&(Te=Nt)),Ot.tweenScroll=Ot.tweenScroll||{top:sn(Mt,D),left:sn(Mt,A)},Nt.tweenTo=r=Ot.tweenScroll[xt.p],Nt.scrubDuration=function(e){(X=He(e)&&e)?G?G.duration(e):G=Y.to(n,{ease:"expo",totalProgress:"+=0",duration:X,paused:!0,onComplete:function(){return De&&De(Nt)}}):(G&&G.progress(1).kill(),G=0)},n&&(n.vars.lazy=!1,n._initted&&!Nt.isReverted||!1!==n.vars.immediateRender&&!1!==t.immediateRender&&n.duration()&&n.render(0,!0,!0),Nt.animation=n.pause(),n.scrollTrigger=Nt,Nt.scrubDuration(ve),N=0,fe||(fe=n.vars.id)),Ye&&(qe(Ye)&&!Ye.push||(Ye={snapTo:Ye}),"scrollBehavior"in V.style&&Y.set(At?[V,q]:Mt,{scrollBehavior:"auto"}),b.forEach((function(e){return je(e)&&e.target===(At?H.scrollingElement||q:Mt)&&(e.smooth=!1)})),s=je(Ye.snapTo)?Ye.snapTo:"labels"===Ye.snapTo?function(e){return function(t){return Y.utils.snap(ft(e),t)}}(n):"labelsDirectional"===Ye.snapTo?(ae=n,function(e,t){return gt(ft(ae))(e,t.direction)}):!1!==Ye.directional?function(e,t){return gt(Ye.snapTo)(e,Se()-Vt<500?0:t.direction)}:Y.utils.snap(Ye.snapTo),W=Ye.duration||{min:.1,max:2},W=qe(W)?Q(W.min,W.max):Q(W,W),U=Y.delayedCall(Ye.delay||X/2||.1,(function(){var e=en(),t=Se()-Vt<500,i=r.tween;if(!(t||Math.abs(Nt.getVelocity())<10)||i||te||qt===e)Nt.isActive&&qt!==e&&U.restart(!0);else{var a=(e-l)/m,o=n&&!St?n.totalProgress():a,c=t?0:(o-F)/(Se()-Z)*1e3||0,d=Y.utils.clamp(-a,1-a,Ue(c/2)*c/.185),p=a+(!1===Ye.inertia?0:d),h=Q(0,1,s(p,Nt)),f=Math.round(l+h*m),g=Ye,v=g.onStart,y=g.onInterrupt,_=g.onComplete;if(e<=u&&e>=l&&f!==e){if(i&&!i._initted&&i.data<=Ue(f-e))return;!1===Ye.inertia&&(d=h-a),r(f,{duration:W(Ue(.185*Math.max(Ue(p-o),Ue(h-o))/c/.05||0)),ease:Ye.ease||"power3",data:Ue(f-e),onInterrupt:function(){return U.restart(!0)&&y&&y(Nt)},onComplete:function(){Nt.update(),qt=en(),N=F=n&&!St?n.totalProgress():Nt.progress,ze&&ze(Nt),_&&_(Nt)}},e,d*m,f-e-d*m),v&&v(Nt,r.tween)}}})).pause()),fe&&(kt[fe]=Nt),(se=(ye=Nt.trigger=$(ye||!0!==be&&be))&&ye._gsap&&ye._gsap.stRevert)&&(se=se(Nt)),be=!0===be?ye:$(be),Xe(he)&&(he={targets:ye,className:he}),be&&(!1===Ee||Ee===at||(Ee=!(!Ee&&be.parentNode&&be.parentNode.style&&"flex"===ct(be.parentNode).display)&&st),Nt.pin=be,(i=Y.core.getCache(be)).spacer?v=i.pinState:(Qe&&((Qe=$(Qe))&&!Qe.nodeType&&(Qe=Qe.current||Qe.nativeElement),i.spacerIsNative=!!Qe,Qe&&(i.spacerState=Qt(Qe))),i.spacer=x=Qe||H.createElement("div"),x.classList.add("pin-spacer"),fe&&x.classList.add("pin-spacer-"+fe),i.pinState=v=Qt(be)),!1!==t.force3D&&Y.set(be,{force3D:!0}),Nt.spacer=x=i.spacer,R=ct(be),P=R[Ee+xt.os2],S=Y.getProperty(be),E=Y.quickSetter(be,xt.a,ut),Wt(be,x,R),_=Qt(be)),Bt){f=qe(Bt)?dt(Bt,bt):bt,p=Ct("scroller-start",fe,Mt,xt,f,0),h=Ct("scroller-end",fe,Mt,xt,f,0,p),T=p["offset"+xt.op.d2];var nn=$(C(Mt,"content")||Mt);c=this.markerStart=Ct("start",fe,nn,xt,f,T,0,Ze),d=this.markerEnd=Ct("end",fe,nn,xt,f,T,0,Ze),Ze&&(ie=Y.quickSetter([c,d],xt.a,ut)),Dt||w.length&&!0===C(Mt,"fixedMarkers")||(ce=ct(ue=At?V:Mt).position,ue.style.position="absolute"===ce||"fixed"===ce?ce:"relative",Y.set([p,h],{force3D:!0}),L=Y.quickSetter(p,xt.a,ut),B=Y.quickSetter(h,xt.a,ut))}if(Ze){var an=Ze.vars.onUpdate,on=Ze.vars.onUpdateParams;Ze.eventCallback("onUpdate",(function(){Nt.update(0,0,1),an&&an.apply(Ze,on||[])}))}if(Nt.previous=function(){return Et[Et.indexOf(Nt)-1]},Nt.next=function(){return Et[Et.indexOf(Nt)+1]},Nt.revert=function(e,t){if(!t)return Nt.kill(!0);var r=!1!==e||!Nt.enabled,i=ee;r!==Nt.isReverted&&(r&&(J=Math.max(en(),Nt.scroll.rec||0),Ut=Nt.progress,ne=n&&n.progress()),c&&[c,d,p,h].forEach((function(e){return e.style.display=r?"none":"block"})),r&&(ee=Nt,Nt.update(r)),!be||Ke&&Nt.isActive||(r?function(e,t,n){Kt(n);var r=e._gsap;if(r.spacerIsNative)Kt(r.spacerState);else if(e._gsap.swappedIn){var i=t.parentNode;i&&(i.insertBefore(e,t),i.removeChild(t))}e._gsap.swappedIn=!1}(be,x,v):Wt(be,x,ct(be),O)),r||Nt.update(r),ee=i,Nt.isReverted=r)},Nt.refresh=function(i,s,f,b){if(!ee&&Nt.enabled||s)if(be&&i&&ke)vt(e,"scrollEnd",$t);else{!we&&Gt&&Gt(Nt),ee=Nt,r.tween&&!f&&(r.tween.kill(),r.tween=0),G&&G.pause(),Le&&n&&n.revert({kill:!1}).invalidate(),Nt.isReverted||Nt.revert(!0,!0),Nt._subPinOffset=!1;var w,T,C,E,P,L,B,R,N,F,X,j,W,K=Xt(),Q=Ht(),Z=Ze?Ze.duration():Ge(Mt,xt),te=m<=.01,re=0,ie=b||0,se=qe(f)?f.end:t.end,ae=t.endTrigger||ye,oe=qe(f)?f.start:t.start||(0!==t.start&&ye?be?"0 0":"0 100%":0),ue=Nt.pinnedContainer=t.pinnedContainer&&$(t.pinnedContainer,Nt),ce=ye&&Math.max(0,Et.indexOf(Nt))||0,de=ce;for(Bt&&qe(f)&&(j=Y.getProperty(p,xt.p),W=Y.getProperty(h,xt.p));de--;)(L=Et[de]).end||L.refresh(0,1)||(ee=Nt),!(B=L.pin)||B!==ye&&B!==be&&B!==ue||L.isReverted||(F||(F=[]),F.unshift(L),L.revert(!0,!0)),L!==Et[de]&&(ce--,de--);for(je(oe)&&(oe=oe(Nt)),oe=Pe(oe,"start",Nt),l=Jt(oe,ye,K,xt,en(),c,p,Nt,Q,Rt,Dt,Z,Ze,Nt._startClamp&&"_startClamp")||(be?-.001:0),je(se)&&(se=se(Nt)),Xe(se)&&!se.indexOf("+=")&&(~se.indexOf(" ")?se=(Xe(oe)?oe.split(" ")[0]:"")+se:(re=Tt(se.substr(2),K),se=Xe(oe)?oe:(Ze?Y.utils.mapRange(0,Ze.duration(),Ze.scrollTrigger.start,Ze.scrollTrigger.end,l):l)+re,ae=ye)),se=Pe(se,"end",Nt),u=Math.max(l,Jt(se||(ae?"100% 0":Z),ae,K,xt,en()+re,d,h,Nt,Q,Rt,Dt,Z,Ze,Nt._endClamp&&"_endClamp"))||-.001,re=0,de=ce;de--;)(B=(L=Et[de]).pin)&&L.start-L._pinPush<=l&&!Ze&&L.end>0&&(w=L.end-(Nt._startClamp?Math.max(0,L.start):L.start),(B===ye&&L.start-L._pinPush1&&(X={style:X=(At?H.scrollingElement||q:Mt).style,value:X["overflow"+xt.a.toUpperCase()]},At&&"scroll"!==ct(V)["overflow"+xt.a.toUpperCase()]&&(X.style["overflow"+xt.a.toUpperCase()]="scroll")),Wt(be,x,w),_=Qt(be),T=pt(be,!0),R=Dt&&I(Mt,E?A:D)(),Ee&&((O=[Ee+xt.os2,m+ie+ut]).t=x,(de=Ee===st?ht(be,xt)+m+ie:0)&&O.push(xt.d,de+ut),Kt(O),ue&&Et.forEach((function(e){e.pin===ue&&!1!==e.vars.pinSpacing&&(e._subPinOffset=!0)})),Dt&&en(J)),Dt&&((P={top:T.top+(E?C-l:R)+ut,left:T.left+(E?R:C-l)+ut,boxSizing:"border-box",position:"fixed"})[Je]=P["max"+ot]=Math.ceil(T.width)+ut,P[et]=P["max"+lt]=Math.ceil(T.height)+ut,P[at]=P[at+rt]=P[at+tt]=P[at+it]=P[at+nt]="0",P[st]=w[st],P[st+rt]=w[st+rt],P[st+tt]=w[st+tt],P[st+it]=w[st+it],P[st+nt]=w[st+nt],y=function(e,t,n){for(var r,i=[],s=e.length,a=n?8:0;a1,Dt&&z&&y.splice(y.length-2,2),n.render(0,!0,!0),N||n.invalidate(!0),n.parent||n.totalTime(n.totalTime()),le(0)):M=m,X&&(X.value?X.style["overflow"+xt.a.toUpperCase()]=X.value:X.style.removeProperty("overflow-"+xt.a));else if(ye&&en()&&!Ze)for(T=ye.parentNode;T&&T!==V;)T._pinOffset&&(l-=T._pinOffset,u-=T._pinOffset),T=T.parentNode;F&&F.forEach((function(e){return e.revert(!1,!0)})),Nt.start=l,Nt.end=u,a=o=we?J:en(),Ze||we||(a0?Et.slice(0,t).reverse():Et.slice(t+1);return(Xe(e)?n.filter((function(t){return t.vars.preventOverlaps===e})):n).filter((function(e){return Nt.direction>0?e.end<=l:e.start>=u}))},Nt.update=function(e,t,i){if(!Ze||i||e){var s,c,d,h,f,g,v,b=!0===we?J:Nt.scroll(),w=e?0:(b-l)/m,T=w<0?0:w>1?1:w||0,C=Nt.progress;if(t&&(o=a,a=Ze?en():b,Ye&&(F=N,N=n&&!St?n.totalProgress():T)),Ae&&!T&&be&&!ee&&!Ce&&ke&&lC?1:-1,Nt.progress=T,h&&!ee&&(c=T&&!C?0:1===T?1:1===C?2:3,St&&(d=!f&&"none"!==zt[c+1]&&zt[c+1]||zt[c],v=n&&("complete"===d||"reset"===d||d in n))),_t&&(f||v)&&(v||ve||!n)&&(je(_t)?_t(Nt):Nt.getTrailing(_t).forEach((function(e){return e.endAnimation()}))),St||(!G||ee||Ce?n&&n.totalProgress(T,!(!ee||!Vt&&!e)):(G._dp._time-G._start!==G._time&&G.render(G._dp._time-G._start),G.resetTo?G.resetTo("totalProgress",T,n._tTime/n._tDur):(G.vars.totalProgress=T,G.invalidate().restart()))),be)if(e&&Ee&&(x.style[Ee+xt.os2]=P),Dt){if(h){if(g=!e&&T>C&&u+1>b&&b+1>=Ge(Mt,xt),Ke)if(e||!s&&!g)tn(be,x);else{var S=pt(be,!0),O=b-l;tn(be,V,S.top+(xt===D?O:0)+ut,S.left+(xt===D?0:O)+ut)}Kt(s||g?y:_),z&&T<1&&s||E(k+(1!==T||g?0:M))}}else E(Ie(k+M*T));Ye&&!r.tween&&!ee&&!Ce&&U.restart(!0),he&&(f||Be&&T&&(T<1||!_e))&&K(he.targets).forEach((function(e){return e.classList[s||Be?"add":"remove"](he.className)})),pe&&!St&&!e&&pe(Nt),h&&!ee?(St&&(v&&("complete"===d?n.pause().totalProgress(1):"reset"===d?n.restart(!0).pause():"restart"===d?n.restart(!0):n[d]()),pe&&pe(Nt)),!f&&_e||(ge&&f&&We(Nt,ge),It[c]&&We(Nt,It[c]),Be&&(1===T?Nt.kill(!1,1):It[c]=0),f||It[c=1===T?1:3]&&We(Nt,It[c])),mt&&!s&&Math.abs(Nt.getVelocity())>(He(mt)?mt:2500)&&(Ve(Nt.callbackAnimation),G?G.progress(1):Ve(n,"reverse"===d?1:!T,1))):St&&pe&&!ee&&pe(Nt)}if(B){var A=Ze?b/Ze.duration()*(Ze._caScrollDist||0):b;L(A+(p._isFlipped?1:0)),B(A)}ie&&ie(-b/Ze.duration()*(Ze._caScrollDist||0))}},Nt.enable=function(t,n){Nt.enabled||(Nt.enabled=!0,vt(Mt,"resize",Lt),At||vt(Mt,"scroll",Pt),Gt&&vt(e,"refreshInit",Gt),!1!==t&&(Nt.progress=Ut=0,a=o=qt=en()),!1!==n&&Nt.refresh())},Nt.getTween=function(e){return e&&r?r.tween:G},Nt.setPositions=function(e,t,n,r){if(Ze){var i=Ze.scrollTrigger,s=Ze.duration(),a=i.end-i.start;e=i.start+a*e/s,t=i.start+a*t/s}Nt.refresh(!1,!1,{start:Oe(e,n&&!!Nt._startClamp),end:Oe(t,n&&!!Nt._endClamp)},r),Nt.update()},Nt.adjustPinSpacing=function(e){if(O&&e){var t=O.indexOf(xt.d)+1;O[t]=parseFloat(O[t])+e+ut,O[1]=parseFloat(O[1])+e+ut,Kt(O)}},Nt.disable=function(t,n){if(Nt.enabled&&(!1!==t&&Nt.revert(!0,!0),Nt.enabled=Nt.isActive=!1,n||G&&G.pause(),J=0,i&&(i.uncache=1),Gt&&yt(e,"refreshInit",Gt),U&&(U.pause(),r.tween&&r.tween.kill()&&(r.tween=0)),!At)){for(var s=Et.length;s--;)if(Et[s].scroller===Mt&&Et[s]!==Nt)return;yt(Mt,"resize",Lt),At||yt(Mt,"scroll",Pt)}},Nt.kill=function(e,r){Nt.disable(e,r),G&&!r&&G.kill(),fe&&delete kt[fe];var s=Et.indexOf(Nt);s>=0&&Et.splice(s,1),s===re&&jt>0&&re--,s=0,Et.forEach((function(e){return e.scroller===Nt.scroller&&(s=1)})),s||we||(Nt.scroll.rec=0),n&&(n.scrollTrigger=null,e&&n.revert({kill:!1}),r||n.kill()),c&&[c,d,p,h].forEach((function(e){return e.parentNode&&e.parentNode.removeChild(e)})),Te===Nt&&(Te=0),be&&(i&&(i.uncache=1),s=0,Et.forEach((function(e){return e.pin===be&&s++})),s||(i.spacer=0)),t.onKill&&t.onKill(Nt)},Et.push(Nt),Nt.enable(!1,!1),se&&se(Nt),n&&n.add&&!m){var ln=Nt.update;Nt.update=function(){Nt.update=ln,l||u||Nt.refresh()},Y.delayedCall(.01,Nt.update),m=.01,l=u=0}else Nt.refresh();be&&function(){if(xe!==Ft){var e=xe=Ft;requestAnimationFrame((function(){return e===Ft&&Yt(!0)}))}}()}else this.update=this.refresh=this.kill=$e},e.register=function(t){return X||(Y=t||Be(),ze()&&window.document&&e.enable(),X=Me),X},e.defaults=function(e){if(e)for(var t in e)wt[t]=e[t];return wt},e.disable=function(e,t){Me=0,Et.forEach((function(n){return n[t?"kill":"disable"](e)})),yt(j,"wheel",Pt),yt(H,"scroll",Pt),clearInterval(J),yt(H,"touchcancel",$e),yt(V,"touchstart",$e),mt(yt,H,"pointerdown,touchstart,mousedown",Ae),mt(yt,H,"pointerup,touchend,mouseup",De),U.kill(),Ye(yt);for(var n=0;n0&&r.left+i0&&r.top+i=0&&zt.splice(t,5),zt.push(e,e.style.cssText,e.getBBox&&e.getAttribute("transform"),Y.core.getCache(e),ge())}})):zt},an.revert=function(e,t){return Rt(!e,t)},an.create=function(e,t){return new an(e,t)},an.refresh=function(e){return e?Lt():(X||an.register())&&Yt(!0)},an.update=function(e){return++b.cache&&Ht(!0===e?2:0)},an.clearScrollMemory=Nt,an.maxScroll=function(e,t){return Ge(e,t?A:D)},an.getScrollFunc=function(e,t){return I($(e),t?A:D)},an.getById=function(e){return kt[e]},an.getAll=function(){return Et.filter((function(e){return"ScrollSmoother"!==e.vars.id}))},an.isScrolling=function(){return!!ke},an.snapDirectional=gt,an.addEventListener=function(e,t){var n=At[e]||(At[e]=[]);~n.indexOf(t)||n.push(t)},an.removeEventListener=function(e,t){var n=At[e],r=n&&n.indexOf(t);r>=0&&n.splice(r,1)},an.batch=function(e,t){var n,r=[],i={},s=t.interval||.016,a=t.batchMax||1e9,o=function(e,t){var n=[],r=[],i=Y.delayedCall(s,(function(){t(n,r),n=[],r=[]})).pause();return function(e){n.length||i.restart(!0),n.push(e.trigger),r.push(e),a<=n.length&&i.progress(1)}};for(n in t)i[n]="on"===n.substr(0,2)&&je(t[n])&&"onRefreshInit"!==n?o(0,t[n]):t[n];return je(a)&&(a=a(),vt(an,"refresh",(function(){return a=t.batchMax()}))),K(e).forEach((function(e){var t={};for(n in i)t[n]=i[n];t.trigger=e,r.push(an.create(t))})),r};var on,ln=function(e,t,n,r){return t>r?e(r):t<0&&e(0),n>r?(r-t)/(n-t):n<0?t/(t-n):1},un=function e(t,n){!0===n?t.style.removeProperty("touch-action"):t.style.touchAction=!0===n?"auto":n?"pan-"+n+(G.isTouch?" pinch-zoom":""):"none",t===q&&e(V,n)},cn={auto:1,scroll:1},dn=function(e){var t,n=e.event,r=e.target,i=e.axis,s=(n.changedTouches?n.changedTouches[0]:n).target,a=s._gsap||Y.core.getCache(s),o=Se();if(!a._isScrollT||o-a._isScrollT>2e3){for(;s&&s!==V&&(s.scrollHeight<=s.clientHeight&&s.scrollWidth<=s.clientWidth||!cn[(t=ct(s)).overflowY]&&!cn[t.overflowX]);)s=s.parentNode;a._isScroll=s&&s!==r&&!Re(s)&&(cn[(t=ct(s)).overflowY]||cn[t.overflowX]),a._isScrollT=o}(a._isScroll||"x"===i)&&(n.stopPropagation(),n._gsapAllow=!0)},pn=function(e,t,n,r){return G.create({target:e,capture:!0,debounce:!1,lockAxis:!0,type:t,onWheel:r=r&&dn,onPress:r,onDrag:r,onScroll:r,onEnable:function(){return n&&vt(H,G.eventTypes[0],fn,!1,!0)},onDisable:function(){return yt(H,G.eventTypes[0],fn,!0)}})},hn=/(input|label|select|textarea)/i,fn=function(e){var t=hn.test(e.target.tagName);(t||on)&&(e._gsapAllow=!0,on=t)},gn=function(e){qe(e)||(e={}),e.preventDefault=e.isNormalizer=e.allowClicks=!0,e.type||(e.type="wheel,touch"),e.debounce=!!e.debounce,e.id=e.id||"normalizer";var t,n,r,i,s,a,o,l,u=e,c=u.normalizeScrollX,d=u.momentum,p=u.allowNestedScroll,h=u.onRelease,f=$(e.target)||q,g=Y.core.globals().ScrollSmoother,m=g&&g.get(),v=fe&&(e.content&&$(e.content)||m&&!1!==e.content&&!m.smooth()&&m.content()),y=I(f,D),_=I(f,A),w=1,x=(G.isTouch&&j.visualViewport?j.visualViewport.scale*j.visualViewport.width:j.outerWidth)/j.innerWidth,T=0,C=je(d)?function(){return d(t)}:function(){return d||2.8},S=pn(f,e.type,!0,p),E=function(){return i=!1},k=$e,M=$e,P=function(){n=Ge(f,D),M=Q(fe?1:0,n),c&&(k=Q(0,Ge(f,A))),r=Ft},O=function(){v._gsap.y=Ie(parseFloat(v._gsap.y)+y.offset)+"px",v.style.transform="matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, "+parseFloat(v._gsap.y)+", 0, 1)",y.offset=y.cacheID=0},L=function(){P(),s.isActive()&&s.vars.scrollY>n&&(y()>n?s.progress(1)&&y(n):s.resetTo("scrollY",n))};return v&&Y.set(v,{y:"+=0"}),e.ignoreCheck=function(e){return fe&&"touchmove"===e.type&&function(){if(i){requestAnimationFrame(E);var e=Ie(t.deltaY/2),n=M(y.v-e);if(v&&n!==y.v+y.offset){y.offset=n-y.v;var r=Ie((parseFloat(v&&v._gsap.y)||0)-y.offset);v.style.transform="matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, "+r+", 0, 1)",v._gsap.y=r+"px",y.cacheID=b.cache,Ht()}return!0}y.offset&&O(),i=!0}()||w>1.05&&"touchstart"!==e.type||t.isGesturing||e.touches&&e.touches.length>1},e.onPress=function(){i=!1;var e=w;w=Ie((j.visualViewport&&j.visualViewport.scale||1)/x),s.pause(),e!==w&&un(f,w>1.01||!c&&"x"),a=_(),o=y(),P(),r=Ft},e.onRelease=e.onGestureStart=function(e,t){if(y.offset&&O(),t){b.cache++;var r,i,a=C();c&&(i=(r=_())+.05*a*-e.velocityX/.227,a*=ln(_,r,i,Ge(f,A)),s.vars.scrollX=k(i)),i=(r=y())+.05*a*-e.velocityY/.227,a*=ln(y,r,i,Ge(f,D)),s.vars.scrollY=M(i),s.invalidate().duration(a).play(.01),(fe&&s.vars.scrollY>=n||r>=n-1)&&Y.to({},{onUpdate:L,duration:a})}else l.restart(!0);h&&h(e)},e.onWheel=function(){s._ts&&s.pause(),Se()-T>1e3&&(r=0,T=Se())},e.onChange=function(e,t,n,i,s){if(Ft!==r&&P(),t&&c&&_(k(i[2]===t?a+(e.startX-e.x):_()+t-i[1])),n){y.offset&&O();var l=s[2]===n,u=l?o+e.startY-e.y:y()+n-s[1],d=M(u);l&&u!==d&&(o+=d-u),y(d)}(n||t)&&Ht()},e.onEnable=function(){un(f,!c&&"x"),an.addEventListener("refresh",L),vt(j,"resize",L),y.smooth&&(y.target.style.scrollBehavior="auto",y.smooth=_.smooth=!1),S.enable()},e.onDisable=function(){un(f,!0),yt(j,"resize",L),an.removeEventListener("refresh",L),S.kill()},e.lockAxis=!1!==e.lockAxis,(t=new G(e)).iOS=fe,fe&&!y()&&y(1),fe&&Y.ticker.add($e),l=t._dc,s=Y.to(t,{ease:"power4",paused:!0,scrollX:c?"+=0.1":"+=0",scrollY:"+=0.1",modifiers:{scrollY:nn(y,y(),(function(){return s.pause()}))},onUpdate:Ht,onComplete:l.vars.onComplete}),t};an.sort=function(e){return Et.sort(e||function(e,t){return-1e6*(e.vars.refreshPriority||0)+e.start-(t.start+-1e6*(t.vars.refreshPriority||0))})},an.observe=function(e){return new G(e)},an.normalizeScroll=function(e){if(void 0===e)return ce;if(!0===e&&ce)return ce.enable();if(!1===e)return ce&&ce.kill();var t=e instanceof G?e:gn(e);return ce&&ce.target===t.target&&ce.kill(),Re(t.target)&&(ce=t),t},an.core={_getVelocityProp:z,_inputObserver:pn,_scrollers:b,_proxies:w,bridge:{ss:function(){ke||It("scrollStart"),ke=Se()},ref:function(){return ee}}},Be()&&Y.registerPlugin(an)},38:function(e,t,n){"use strict";function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function i(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}n.d(t,{ZP:function(){return Wr},p8:function(){return Wr}});var s,a,o,l,u,c,d,p,h,f,g,m,v,y,_,b={autoSleep:120,force3D:"auto",nullTargetWarn:1,units:{lineHeight:""}},w={duration:.5,overwrite:!1,delay:0},x=1e8,T=1e-8,C=2*Math.PI,S=C/4,E=0,k=Math.sqrt,M=Math.cos,P=Math.sin,O=function(e){return"string"==typeof e},L=function(e){return"function"==typeof e},A=function(e){return"number"==typeof e},D=function(e){return void 0===e},$=function(e){return"object"==typeof e},I=function(e){return!1!==e},z=function(){return"undefined"!=typeof window},B=function(e){return L(e)||O(e)},R="function"==typeof ArrayBuffer&&ArrayBuffer.isView||function(){},N=Array.isArray,F=/(?:-?\.?\d|\.)+/gi,G=/[-+=.]*\d+[.e\-+]*\d*[e\-+]*\d*/g,Y=/[-+=.]*\d+[.e-]*\d*[a-z%]*/g,X=/[-+=.]*\d+\.?\d*(?:e-|e\+)?\d*/gi,j=/[+-]=-?[.\d]+/,H=/[^,'"\[\]\s]+/gi,q=/^[+\-=e\s\d]*\d+[.\d]*([a-z]*|%)\s*$/i,V={},W={},U=function(e){return(W=Ce(e,V))&&En},K=function(e,t){return console.warn("Invalid property",e,"set to",t,"Missing plugin? gsap.registerPlugin()")},Q=function(e,t){return!t&&console.warn(e)},Z=function(e,t){return e&&(V[e]=t)&&W&&(W[e]=t)||V},J=function(){return 0},ee={suppressEvents:!0,isStart:!0,kill:!1},te={suppressEvents:!0,kill:!1},ne={suppressEvents:!0},re={},ie=[],se={},ae={},oe={},le=30,ue=[],ce="",de=function(e){var t,n,r=e[0];if($(r)||L(r)||(e=[e]),!(t=(r._gsap||{}).harness)){for(n=ue.length;n--&&!ue[n].targetTest(r););t=ue[n]}for(n=e.length;n--;)e[n]&&(e[n]._gsap||(e[n]._gsap=new Nt(e[n],t)))||e.splice(n,1);return e},pe=function(e){return e._gsap||de(nt(e))[0]._gsap},he=function(e,t,n){return(n=e[t])&&L(n)?e[t]():D(n)&&e.getAttribute&&e.getAttribute(t)||n},fe=function(e,t){return(e=e.split(",")).forEach(t)||e},ge=function(e){return Math.round(1e5*e)/1e5||0},me=function(e){return Math.round(1e7*e)/1e7||0},ve=function(e,t){var n=t.charAt(0),r=parseFloat(t.substr(2));return e=parseFloat(e),"+"===n?e+r:"-"===n?e-r:"*"===n?e*r:e/r},ye=function(e,t){for(var n=t.length,r=0;e.indexOf(t[r])<0&&++rs;)a=a._prev;return a?(t._next=a._next,a._next=t):(t._next=e[n],e[n]=t),t._next?t._next._prev=t:e[r]=t,t._prev=a,t.parent=t._dp=e,t},Pe=function(e,t,n,r){void 0===n&&(n="_first"),void 0===r&&(r="_last");var i=t._prev,s=t._next;i?i._next=s:e[n]===t&&(e[n]=s),s?s._prev=i:e[r]===t&&(e[r]=i),t._next=t._prev=t.parent=null},Oe=function(e,t){e.parent&&(!t||e.parent.autoRemoveChildren)&&e.parent.remove&&e.parent.remove(e),e._act=0},Le=function(e,t){if(e&&(!t||t._end>e._dur||t._start<0))for(var n=e;n;)n._dirty=1,n=n.parent;return e},Ae=function(e,t,n,r){return e._startAt&&(a?e._startAt.revert(te):e.vars.immediateRender&&!e.vars.autoRevert||e._startAt.render(t,!0,r))},De=function e(t){return!t||t._ts&&e(t.parent)},$e=function(e){return e._repeat?Ie(e._tTime,e=e.duration()+e._rDelay)*e:0},Ie=function(e,t){var n=Math.floor(e/=t);return e&&n===e?n-1:n},ze=function(e,t){return(e-t._start)*t._ts+(t._ts>=0?0:t._dirty?t.totalDuration():t._tDur)},Be=function(e){return e._end=me(e._start+(e._tDur/Math.abs(e._ts||e._rts||T)||0))},Re=function(e,t){var n=e._dp;return n&&n.smoothChildTiming&&e._ts&&(e._start=me(n._time-(e._ts>0?t/e._ts:((e._dirty?e.totalDuration():e._tDur)-t)/-e._ts)),Be(e),n._dirty||Le(n,e)),e},Ne=function(e,t){var n;if((t._time||!t._dur&&t._initted||t._startT)&&t.render(n,!0)),Le(e,t)._dp&&e._initted&&e._time>=e._dur&&e._ts){if(e._dur=0&&n.totalTime(n._tTime),n=n._dp;e._zTime=-1e-8}},Fe=function(e,t,n,r){return t.parent&&Oe(t),t._start=me((A(n)?n:n||e!==l?We(e,n,t):e._time)+t._delay),t._end=me(t._start+(t.totalDuration()/Math.abs(t.timeScale())||0)),Me(e,t,"_first","_last",e._sort?"_start":0),je(t)||(e._recent=t),r||Ne(e,t),e._ts<0&&Re(e,e._tTime),e},Ge=function(e,t){return(V.ScrollTrigger||K("scrollTrigger",t))&&V.ScrollTrigger.create(t,e)},Ye=function(e,t,n,r,i){return Vt(e,t,i),e._initted?!n&&e._pt&&!a&&(e._dur&&!1!==e.vars.lazy||!e._dur&&e.vars.lazy)&&h!==Et.frame?(ie.push(e),e._lazy=[i,r],1):void 0:1},Xe=function e(t){var n=t.parent;return n&&n._ts&&n._initted&&!n._lock&&(n.rawTime()<0||e(n))},je=function(e){var t=e.data;return"isFromStart"===t||"isStart"===t},He=function(e,t,n,r){var i=e._repeat,s=me(t)||0,a=e._tTime/e._tDur;return a&&!r&&(e._time*=s/e._dur),e._dur=s,e._tDur=i?i<0?1e10:me(s*(i+1)+e._rDelay*i):s,a>0&&!r&&Re(e,e._tTime=e._tDur*a),e.parent&&Be(e),n||Le(e.parent,e),e},qe=function(e){return e instanceof Gt?Le(e):He(e,e._dur)},Ve={_start:0,endTime:J,totalDuration:J},We=function e(t,n,r){var i,s,a,o=t.labels,l=t._recent||Ve,u=t.duration()>=x?l.endTime(!1):t._dur;return O(n)&&(isNaN(n)||n in o)?(s=n.charAt(0),a="%"===n.substr(-1),i=n.indexOf("="),"<"===s||">"===s?(i>=0&&(n=n.replace(/=/,"")),("<"===s?l._start:l.endTime(l._repeat>=0))+(parseFloat(n.substr(1))||0)*(a?(i<0?l:r).totalDuration()/100:1)):i<0?(n in o||(o[n]=u),o[n]):(s=parseFloat(n.charAt(i-1)+n.substr(i+1)),a&&r&&(s=s/100*(N(r)?r[0]:r).totalDuration()),i>1?e(t,n.substr(0,i-1),r)+s:u+s)):null==n?u:+n},Ue=function(e,t,n){var r,i,s=A(t[1]),a=(s?2:1)+(e<2?0:1),o=t[a];if(s&&(o.duration=t[1]),o.parent=n,e){for(r=o,i=n;i&&!("immediateRender"in r);)r=i.vars.defaults||{},i=I(i.vars.inherit)&&i.parent;o.immediateRender=I(r.immediateRender),e<2?o.runBackwards=1:o.startAt=t[a-1]}return new Zt(t[0],o,t[a+1])},Ke=function(e,t){return e||0===e?t(e):t},Qe=function(e,t,n){return nt?t:n},Ze=function(e,t){return O(e)&&(t=q.exec(e))?t[1]:""},Je=[].slice,et=function(e,t){return e&&$(e)&&"length"in e&&(!t&&!e.length||e.length-1 in e&&$(e[0]))&&!e.nodeType&&e!==u},tt=function(e,t,n){return void 0===n&&(n=[]),e.forEach((function(e){var r;return O(e)&&!t||et(e,1)?(r=n).push.apply(r,nt(e)):n.push(e)}))||n},nt=function(e,t,n){return o&&!t&&o.selector?o.selector(e):!O(e)||n||!c&&kt()?N(e)?tt(e,n):et(e)?Je.call(e,0):e?[e]:[]:Je.call((t||d).querySelectorAll(e),0)},rt=function(e){return e=nt(e)[0]||Q("Invalid scope")||{},function(t){var n=e.current||e.nativeElement||e;return nt(t,n.querySelectorAll?n:n===e?Q("Invalid scope")||d.createElement("div"):e)}},it=function(e){return e.sort((function(){return.5-Math.random()}))},st=function(e){if(L(e))return e;var t=$(e)?e:{each:e},n=$t(t.ease),r=t.from||0,i=parseFloat(t.base)||0,s={},a=r>0&&r<1,o=isNaN(r)||a,l=t.axis,u=r,c=r;return O(r)?u=c={center:.5,edges:.5,end:1}[r]||0:!a&&o&&(u=r[0],c=r[1]),function(e,a,d){var p,h,f,g,m,v,y,_,b,w=(d||t).length,T=s[w];if(!T){if(!(b="auto"===t.grid?0:(t.grid||[1,x])[1])){for(y=-x;y<(y=d[b++].getBoundingClientRect().left)&&by&&(y=m),m<_&&(_=m);"random"===r&&it(T),T.max=y-_,T.min=_,T.v=w=(parseFloat(t.amount)||parseFloat(t.each)*(b>w?w-1:l?"y"===l?w/b:b:Math.max(b,w/b))||0)*("edges"===r?-1:1),T.b=w<0?i-w:i,T.u=Ze(t.amount||t.each)||0,n=n&&w<0?At(n):n}return w=(T[e]-T.min)/T.max||0,me(T.b+(n?n(w):w)*T.v)+T.u}},at=function(e){var t=Math.pow(10,((e+"").split(".")[1]||"").length);return function(n){var r=me(Math.round(parseFloat(n)/e)*e*t);return(r-r%1)/t+(A(n)?0:Ze(n))}},ot=function(e,t){var n,r,i=N(e);return!i&&$(e)&&(n=i=e.radius||x,e.values?(e=nt(e.values),(r=!A(e[0]))&&(n*=n)):e=at(e.increment)),Ke(t,i?L(e)?function(t){return r=e(t),Math.abs(r-t)<=n?r:t}:function(t){for(var i,s,a=parseFloat(r?t.x:t),o=parseFloat(r?t.y:0),l=x,u=0,c=e.length;c--;)(i=r?(i=e[c].x-a)*i+(s=e[c].y-o)*s:Math.abs(e[c]-a))(i=Math.abs(i))&&(s=r,o=i);return s},ht=function(e,t,n){var r,i,s,a=e.vars,l=a[t],u=o,c=e._ctx;if(l)return r=a[t+"Params"],i=a.callbackScope||e,n&&ie.length&&_e(),c&&(o=c),s=r?l.apply(i,r):l.call(i),o=u,s},ft=function(e){return Oe(e),e.scrollTrigger&&e.scrollTrigger.kill(!!a),e.progress()<1&&ht(e,"onInterrupt"),e},gt=[],mt=function(e){if(z()&&e){var t=(e=!e.name&&e.default||e).name,n=L(e),r=t&&!n&&e.init?function(){this._props=[]}:e,i={init:J,render:ln,add:Ht,kill:cn,modifier:un,rawVars:0},s={targetTest:0,get:0,getSetter:rn,aliases:{},register:0};if(kt(),e!==r){if(ae[t])return;Te(r,Te(Ee(e,i),s)),Ce(r.prototype,Ce(i,Ee(e,s))),ae[r.prop=t]=r,e.targetTest&&(ue.push(r),re[t]=1),t=("css"===t?"CSS":t.charAt(0).toUpperCase()+t.substr(1))+"Plugin"}Z(t,r),e.register&&e.register(En,r,hn)}else e&>.push(e)},vt=255,yt={aqua:[0,vt,vt],lime:[0,vt,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,vt],navy:[0,0,128],white:[vt,vt,vt],olive:[128,128,0],yellow:[vt,vt,0],orange:[vt,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[vt,0,0],pink:[vt,192,203],cyan:[0,vt,vt],transparent:[vt,vt,vt,0]},_t=function(e,t,n){return(6*(e+=e<0?1:e>1?-1:0)<1?t+(n-t)*e*6:e<.5?n:3*e<2?t+(n-t)*(2/3-e)*6:t)*vt+.5|0},bt=function(e,t,n){var r,i,s,a,o,l,u,c,d,p,h=e?A(e)?[e>>16,e>>8&vt,e&vt]:0:yt.black;if(!h){if(","===e.substr(-1)&&(e=e.substr(0,e.length-1)),yt[e])h=yt[e];else if("#"===e.charAt(0)){if(e.length<6&&(r=e.charAt(1),i=e.charAt(2),s=e.charAt(3),e="#"+r+r+i+i+s+s+(5===e.length?e.charAt(4)+e.charAt(4):"")),9===e.length)return[(h=parseInt(e.substr(1,6),16))>>16,h>>8&vt,h&vt,parseInt(e.substr(7),16)/255];h=[(e=parseInt(e.substr(1),16))>>16,e>>8&vt,e&vt]}else if("hsl"===e.substr(0,3))if(h=p=e.match(F),t){if(~e.indexOf("="))return h=e.match(G),n&&h.length<4&&(h[3]=1),h}else a=+h[0]%360/360,o=+h[1]/100,r=2*(l=+h[2]/100)-(i=l<=.5?l*(o+1):l+o-l*o),h.length>3&&(h[3]*=1),h[0]=_t(a+1/3,r,i),h[1]=_t(a,r,i),h[2]=_t(a-1/3,r,i);else h=e.match(F)||yt.transparent;h=h.map(Number)}return t&&!p&&(r=h[0]/vt,i=h[1]/vt,s=h[2]/vt,l=((u=Math.max(r,i,s))+(c=Math.min(r,i,s)))/2,u===c?a=o=0:(d=u-c,o=l>.5?d/(2-u-c):d/(u+c),a=u===r?(i-s)/d+(io&&(h+=_-l),((c=(p=(f+=_)-h)-v)>0||b)&&(g=++r.frame,i=p-1e3*r.time,r.time=p/=1e3,v+=c+(c>=m?4:m-c),d=1),b||(e=t(n)),d)for(s=0;s=t&&s--},_listeners:y}}(),kt=function(){return!g&&Et.wake()},Mt={},Pt=/^[\d.\-M][\d.\-,\s]/,Ot=/["']/g,Lt=function(e){for(var t,n,r,i={},s=e.substr(1,e.length-3).split(":"),a=s[0],o=1,l=s.length;o1&&a.config?a.config.apply(null,~e.indexOf("{")?[Lt(s[1])]:(t=e,n=t.indexOf("(")+1,r=t.indexOf(")"),i=t.indexOf("(",n),t.substring(n,~i&&i=1?n:1,s=(r||(t?.3:.45))/(n<1?n:1),a=s/C*(Math.asin(1/i)||0),o=function(e){return 1===e?1:i*Math.pow(2,-10*e)*P((e-a)*s)+1},l="out"===t?o:"in"===t?function(e){return 1-o(1-e)}:zt(o);return s=C/s,l.config=function(n,r){return e(t,n,r)},l},Rt=function e(t,n){void 0===n&&(n=1.70158);var r=function(e){return e?--e*e*((n+1)*e+n)+1:0},i="out"===t?r:"in"===t?function(e){return 1-r(1-e)}:zt(r);return i.config=function(n){return e(t,n)},i};fe("Linear,Quad,Cubic,Quart,Quint,Strong",(function(e,t){var n=t<5?t+1:t;It(e+",Power"+(n-1),t?function(e){return Math.pow(e,n)}:function(e){return e},(function(e){return 1-Math.pow(1-e,n)}),(function(e){return e<.5?Math.pow(2*e,n)/2:1-Math.pow(2*(1-e),n)/2}))})),Mt.Linear.easeNone=Mt.none=Mt.Linear.easeIn,It("Elastic",Bt("in"),Bt("out"),Bt()),m=7.5625,y=1/(v=2.75),It("Bounce",(function(e){return 1-_(1-e)}),_=function(e){return e0?e+(e+this._rDelay)*this._repeat:e):this.totalDuration()&&this._dur},t.totalDuration=function(e){return arguments.length?(this._dirty=0,He(this,this._repeat<0?e:(e-this._repeat*this._rDelay)/(this._repeat+1))):this._tDur},t.totalTime=function(e,t){if(kt(),!arguments.length)return this._tTime;var n=this._dp;if(n&&n.smoothChildTiming&&this._ts){for(Re(this,e),!n._dp||n.parent||Ne(n,this);n&&n.parent;)n.parent._time!==n._start+(n._ts>=0?n._tTime/n._ts:(n.totalDuration()-n._tTime)/-n._ts)&&n.totalTime(n._tTime,!0),n=n.parent;!this.parent&&this._dp.autoRemoveChildren&&(this._ts>0&&e0||!this._tDur&&!e)&&Fe(this._dp,this,this._start-this._delay)}return(this._tTime!==e||!this._dur&&!t||this._initted&&Math.abs(this._zTime)===T||!e&&!this._initted&&(this.add||this._ptLookup))&&(this._ts||(this._pTime=e),be(this,e,t)),this},t.time=function(e,t){return arguments.length?this.totalTime(Math.min(this.totalDuration(),e+$e(this))%(this._dur+this._rDelay)||(e?this._dur:0),t):this._time},t.totalProgress=function(e,t){return arguments.length?this.totalTime(this.totalDuration()*e,t):this.totalDuration()?Math.min(1,this._tTime/this._tDur):this.ratio},t.progress=function(e,t){return arguments.length?this.totalTime(this.duration()*(!this._yoyo||1&this.iteration()?e:1-e)+$e(this),t):this.duration()?Math.min(1,this._time/this._dur):this.ratio},t.iteration=function(e,t){var n=this.duration()+this._rDelay;return arguments.length?this.totalTime(this._time+(e-1)*n,t):this._repeat?Ie(this._tTime,n)+1:1},t.timeScale=function(e){if(!arguments.length)return-1e-8===this._rts?0:this._rts;if(this._rts===e)return this;var t=this.parent&&this._ts?ze(this.parent._time,this):this._tTime;return this._rts=+e||0,this._ts=this._ps||-1e-8===e?0:this._rts,this.totalTime(Qe(-Math.abs(this._delay),this._tDur,t),!0),Be(this),function(e){for(var t=e.parent;t&&t.parent;)t._dirty=1,t.totalDuration(),t=t.parent;return e}(this)},t.paused=function(e){return arguments.length?(this._ps!==e&&(this._ps=e,e?(this._pTime=this._tTime||Math.max(-this._delay,this.rawTime()),this._ts=this._act=0):(kt(),this._ts=this._rts,this.totalTime(this.parent&&!this.parent.smoothChildTiming?this.rawTime():this._tTime||this._pTime,1===this.progress()&&Math.abs(this._zTime)!==T&&(this._tTime-=T)))),this):this._ps},t.startTime=function(e){if(arguments.length){this._start=e;var t=this.parent||this._dp;return t&&(t._sort||!this.parent)&&Fe(t,this,e-this._delay),this}return this._start},t.endTime=function(e){return this._start+(I(e)?this.totalDuration():this.duration())/Math.abs(this._ts||1)},t.rawTime=function(e){var t=this.parent||this._dp;return t?e&&(!this._ts||this._repeat&&this._time&&this.totalProgress()<1)?this._tTime%(this._dur+this._rDelay):this._ts?ze(t.rawTime(e),this):this._tTime:this._tTime},t.revert=function(e){void 0===e&&(e=ne);var t=a;return a=e,(this._initted||this._startAt)&&(this.timeline&&this.timeline.revert(e),this.totalTime(-.01,e.suppressEvents)),"nested"!==this.data&&!1!==e.kill&&this.kill(),a=t,this},t.globalTime=function(e){for(var t=this,n=arguments.length?e:t.rawTime();t;)n=t._start+n/(t._ts||1),t=t._dp;return!this.parent&&this._sat?this._sat.vars.immediateRender?-1/0:this._sat.globalTime(e):n},t.repeat=function(e){return arguments.length?(this._repeat=e===1/0?-2:e,qe(this)):-2===this._repeat?1/0:this._repeat},t.repeatDelay=function(e){if(arguments.length){var t=this._time;return this._rDelay=e,qe(this),t?this.time(t):this}return this._rDelay},t.yoyo=function(e){return arguments.length?(this._yoyo=e,this):this._yoyo},t.seek=function(e,t){return this.totalTime(We(this,e),I(t))},t.restart=function(e,t){return this.play().totalTime(e?-this._delay:0,I(t))},t.play=function(e,t){return null!=e&&this.seek(e,t),this.reversed(!1).paused(!1)},t.reverse=function(e,t){return null!=e&&this.seek(e||this.totalDuration(),t),this.reversed(!0).paused(!1)},t.pause=function(e,t){return null!=e&&this.seek(e,t),this.paused(!0)},t.resume=function(){return this.paused(!1)},t.reversed=function(e){return arguments.length?(!!e!==this.reversed()&&this.timeScale(-this._rts||(e?-1e-8:0)),this):this._rts<0},t.invalidate=function(){return this._initted=this._act=0,this._zTime=-1e-8,this},t.isActive=function(){var e,t=this.parent||this._dp,n=this._start;return!(t&&!(this._ts&&this._initted&&t.isActive()&&(e=t.rawTime(!0))>=n&&e1?(t?(r[e]=t,n&&(r[e+"Params"]=n),"onUpdate"===e&&(this._onUpdate=t)):delete r[e],this):r[e]},t.then=function(e){var t=this;return new Promise((function(n){var r=L(e)?e:xe,i=function(){var e=t.then;t.then=null,L(r)&&(r=r(t))&&(r.then||r===t)&&(t.then=e),n(r),t.then=e};t._initted&&1===t.totalProgress()&&t._ts>=0||!t._tTime&&t._ts<0?i():t._prom=i}))},t.kill=function(){ft(this)},e}();Te(Ft.prototype,{_time:0,_start:0,_end:0,_tTime:0,_tDur:0,_dirty:0,_repeat:0,_yoyo:!1,parent:null,_initted:!1,_rDelay:0,_ts:1,_dp:0,ratio:0,_zTime:-1e-8,_prom:0,_ps:!1,_rts:1});var Gt=function(e){function t(t,n){var i;return void 0===t&&(t={}),(i=e.call(this,t)||this).labels={},i.smoothChildTiming=!!t.smoothChildTiming,i.autoRemoveChildren=!!t.autoRemoveChildren,i._sort=I(t.sortChildren),l&&Fe(t.parent||l,r(i),n),t.reversed&&i.reverse(),t.paused&&i.paused(!0),t.scrollTrigger&&Ge(r(i),t.scrollTrigger),i}i(t,e);var n=t.prototype;return n.to=function(e,t,n){return Ue(0,arguments,this),this},n.from=function(e,t,n){return Ue(1,arguments,this),this},n.fromTo=function(e,t,n,r){return Ue(2,arguments,this),this},n.set=function(e,t,n){return t.duration=0,t.parent=this,ke(t).repeatDelay||(t.repeat=0),t.immediateRender=!!t.immediateRender,new Zt(e,t,We(this,n),1),this},n.call=function(e,t,n){return Fe(this,Zt.delayedCall(0,e,t),n)},n.staggerTo=function(e,t,n,r,i,s,a){return n.duration=t,n.stagger=n.stagger||r,n.onComplete=s,n.onCompleteParams=a,n.parent=this,new Zt(e,n,We(this,i)),this},n.staggerFrom=function(e,t,n,r,i,s,a){return n.runBackwards=1,ke(n).immediateRender=I(n.immediateRender),this.staggerTo(e,t,n,r,i,s,a)},n.staggerFromTo=function(e,t,n,r,i,s,a,o){return r.startAt=n,ke(r).immediateRender=I(r.immediateRender),this.staggerTo(e,t,r,i,s,a,o)},n.render=function(e,t,n){var r,i,s,o,u,c,d,p,h,f,g,m,v=this._time,y=this._dirty?this.totalDuration():this._tDur,_=this._dur,b=e<=0?0:me(e),w=this._zTime<0!=e<0&&(this._initted||!_);if(this!==l&&b>y&&e>=0&&(b=y),b!==this._tTime||n||w){if(v!==this._time&&_&&(b+=this._time-v,e+=this._time-v),r=b,h=this._start,c=!(p=this._ts),w&&(_||(v=this._zTime),(e||!t)&&(this._zTime=e)),this._repeat){if(g=this._yoyo,u=_+this._rDelay,this._repeat<-1&&e<0)return this.totalTime(100*u+e,t,n);if(r=me(b%u),b===y?(o=this._repeat,r=_):((o=~~(b/u))&&o===b/u&&(r=_,o--),r>_&&(r=_)),f=Ie(this._tTime,u),!v&&this._tTime&&f!==o&&this._tTime-f*u-this._dur<=0&&(f=o),g&&1&o&&(r=_-r,m=1),o!==f&&!this._lock){var x=g&&1&f,C=x===(g&&1&o);if(ot)for(r=e._first;r&&r._start<=n;){if("isPause"===r.data&&r._start>t)return r;r=r._next}else for(r=e._last;r&&r._start>=n;){if("isPause"===r.data&&r._start=v&&e>=0)for(i=this._first;i;){if(s=i._next,(i._act||r>=i._start)&&i._ts&&d!==i){if(i.parent!==this)return this.render(e,t,n);if(i.render(i._ts>0?(r-i._start)*i._ts:(i._dirty?i.totalDuration():i._tDur)+(r-i._start)*i._ts,t,n),r!==this._time||!this._ts&&!c){d=0,s&&(b+=this._zTime=-1e-8);break}}i=s}else{i=this._last;for(var S=e<0?e:r;i;){if(s=i._prev,(i._act||S<=i._end)&&i._ts&&d!==i){if(i.parent!==this)return this.render(e,t,n);if(i.render(i._ts>0?(S-i._start)*i._ts:(i._dirty?i.totalDuration():i._tDur)+(S-i._start)*i._ts,t,n||a&&(i._initted||i._startAt)),r!==this._time||!this._ts&&!c){d=0,s&&(b+=this._zTime=S?-1e-8:T);break}}i=s}}if(d&&!t&&(this.pause(),d.render(r>=v?0:-1e-8)._zTime=r>=v?1:-1,this._ts))return this._start=h,Be(this),this.render(e,t,n);this._onUpdate&&!t&&ht(this,"onUpdate",!0),(b===y&&this._tTime>=this.totalDuration()||!b&&v)&&(h!==this._start&&Math.abs(p)===Math.abs(this._ts)||this._lock||((e||!_)&&(b===y&&this._ts>0||!b&&this._ts<0)&&Oe(this,1),t||e<0&&!v||!b&&!v&&y||(ht(this,b===y&&e>=0?"onComplete":"onReverseComplete",!0),this._prom&&!(b0)&&this._prom())))}return this},n.add=function(e,t){var n=this;if(A(t)||(t=We(this,t,e)),!(e instanceof Ft)){if(N(e))return e.forEach((function(e){return n.add(e,t)})),this;if(O(e))return this.addLabel(e,t);if(!L(e))return this;e=Zt.delayedCall(0,e)}return this!==e?Fe(this,e,t):this},n.getChildren=function(e,t,n,r){void 0===e&&(e=!0),void 0===t&&(t=!0),void 0===n&&(n=!0),void 0===r&&(r=-x);for(var i=[],s=this._first;s;)s._start>=r&&(s instanceof Zt?t&&i.push(s):(n&&i.push(s),e&&i.push.apply(i,s.getChildren(!0,t,n)))),s=s._next;return i},n.getById=function(e){for(var t=this.getChildren(1,1,1),n=t.length;n--;)if(t[n].vars.id===e)return t[n]},n.remove=function(e){return O(e)?this.removeLabel(e):L(e)?this.killTweensOf(e):(Pe(this,e),e===this._recent&&(this._recent=this._last),Le(this))},n.totalTime=function(t,n){return arguments.length?(this._forcing=1,!this._dp&&this._ts&&(this._start=me(Et.time-(this._ts>0?t/this._ts:(this.totalDuration()-t)/-this._ts))),e.prototype.totalTime.call(this,t,n),this._forcing=0,this):this._tTime},n.addLabel=function(e,t){return this.labels[e]=We(this,t),this},n.removeLabel=function(e){return delete this.labels[e],this},n.addPause=function(e,t,n){var r=Zt.delayedCall(0,t||J,n);return r.data="isPause",this._hasPause=1,Fe(this,r,We(this,e))},n.removePause=function(e){var t=this._first;for(e=We(this,e);t;)t._start===e&&"isPause"===t.data&&Oe(t),t=t._next},n.killTweensOf=function(e,t,n){for(var r=this.getTweensOf(e,n),i=r.length;i--;)Yt!==r[i]&&r[i].kill(e,t);return this},n.getTweensOf=function(e,t){for(var n,r=[],i=nt(e),s=this._first,a=A(t);s;)s instanceof Zt?ye(s._targets,i)&&(a?(!Yt||s._initted&&s._ts)&&s.globalTime(0)<=t&&s.globalTime(s.totalDuration())>t:!t||s.isActive())&&r.push(s):(n=s.getTweensOf(i,t)).length&&r.push.apply(r,n),s=s._next;return r},n.tweenTo=function(e,t){t=t||{};var n,r=this,i=We(r,e),s=t,a=s.startAt,o=s.onStart,l=s.onStartParams,u=s.immediateRender,c=Zt.to(r,Te({ease:t.ease||"none",lazy:!1,immediateRender:!1,time:i,overwrite:"auto",duration:t.duration||Math.abs((i-(a&&"time"in a?a.time:r._time))/r.timeScale())||T,onStart:function(){if(r.pause(),!n){var e=t.duration||Math.abs((i-(a&&"time"in a?a.time:r._time))/r.timeScale());c._dur!==e&&He(c,e,0,1).render(c._time,!0,!0),n=1}o&&o.apply(c,l||[])}},t));return u?c.render(0):c},n.tweenFromTo=function(e,t,n){return this.tweenTo(t,Te({startAt:{time:We(this,e)}},n))},n.recent=function(){return this._recent},n.nextLabel=function(e){return void 0===e&&(e=this._time),pt(this,We(this,e))},n.previousLabel=function(e){return void 0===e&&(e=this._time),pt(this,We(this,e),1)},n.currentLabel=function(e){return arguments.length?this.seek(e,!0):this.previousLabel(this._time+T)},n.shiftChildren=function(e,t,n){void 0===n&&(n=0);for(var r,i=this._first,s=this.labels;i;)i._start>=n&&(i._start+=e,i._end+=e),i=i._next;if(t)for(r in s)s[r]>=n&&(s[r]+=e);return Le(this)},n.invalidate=function(t){var n=this._first;for(this._lock=0;n;)n.invalidate(t),n=n._next;return e.prototype.invalidate.call(this,t)},n.clear=function(e){void 0===e&&(e=!0);for(var t,n=this._first;n;)t=n._next,this.remove(n),n=t;return this._dp&&(this._time=this._tTime=this._pTime=0),e&&(this.labels={}),Le(this)},n.totalDuration=function(e){var t,n,r,i=0,s=this,a=s._last,o=x;if(arguments.length)return s.timeScale((s._repeat<0?s.duration():s.totalDuration())/(s.reversed()?-e:e));if(s._dirty){for(r=s.parent;a;)t=a._prev,a._dirty&&a.totalDuration(),(n=a._start)>o&&s._sort&&a._ts&&!s._lock?(s._lock=1,Fe(s,a,n-a._delay,1)._lock=0):o=n,n<0&&a._ts&&(i-=n,(!r&&!s._dp||r&&r.smoothChildTiming)&&(s._start+=n/s._ts,s._time-=n,s._tTime-=n),s.shiftChildren(-n,!1,-Infinity),o=0),a._end>i&&a._ts&&(i=a._end),a=t;He(s,s===l&&s._time>i?s._time:i,1,1),s._dirty=0}return s._tDur},t.updateRoot=function(e){if(l._ts&&(be(l,ze(e,l)),h=Et.frame),Et.frame>=le){le+=b.autoSleep||120;var t=l._first;if((!t||!t._ts)&&b.autoSleep&&Et._listeners.length<2){for(;t&&!t._ts;)t=t._next;t||Et.sleep()}}},t}(Ft);Te(Gt.prototype,{_lock:0,_hasPause:0,_forcing:0});var Yt,Xt,jt=function(e,t,n,r,i,s,a){var o,l,u,c,d,p,h,f,g=new hn(this._pt,e,t,0,1,on,null,i),m=0,v=0;for(g.b=n,g.e=r,n+="",(h=~(r+="").indexOf("random("))&&(r=ct(r)),s&&(s(f=[n,r],e,t),n=f[0],r=f[1]),l=n.match(X)||[];o=X.exec(r);)c=o[0],d=r.substring(m,o.index),u?u=(u+1)%5:"rgba("===d.substr(-5)&&(u=1),c!==l[v++]&&(p=parseFloat(l[v-1])||0,g._pt={_next:g._pt,p:d||1===v?d:",",s:p,c:"="===c.charAt(1)?ve(p,c)-p:parseFloat(c)-p,m:u&&u<4?Math.round:0},m=X.lastIndex);return g.c=m")})),u.duration();else{for(h in d={},C)"ease"===h||"easeEach"===h||Wt(h,C[h],d,C.easeEach);for(h in d)for(O=d[h].sort((function(e,t){return e.t-t.t})),z=0,c=0;cf-T&&!m?f:eg&&(r=g)),(u=this._yoyo&&1&s)&&(p=this._yEase,r=g-r),l=Ie(this._tTime,o),r===h&&!n&&this._initted)return this._tTime=v,this;s!==l&&(d&&this._yEase&&Dt(d,u),!this.vars.repeatRefresh||u||this._lock||(this._lock=n=1,this.render(me(o*s),!0).invalidate()._lock=0))}if(!this._initted){if(Ye(this,m?e:r,n,t,v))return this._tTime=0,this;if(h!==this._time)return this;if(g!==this._dur)return this.render(e,t,n)}if(this._tTime=v,this._time=r,!this._act&&this._ts&&(this._act=1,this._lazy=0),this.ratio=c=(p||this._ease)(r/g),this._from&&(this.ratio=c=1-c),r&&!h&&!t&&!s&&(ht(this,"onStart"),this._tTime!==v))return this;for(i=this._pt;i;)i.r(c,i.d),i=i._next;d&&d.render(e<0?e:!r&&u?-1e-8:d._dur*d._ease(r/this._dur),t,n)||this._startAt&&(this._zTime=e),this._onUpdate&&!t&&(m&&Ae(this,e,0,n),ht(this,"onUpdate")),this._repeat&&s!==l&&this.vars.onRepeat&&!t&&this.parent&&ht(this,"onRepeat"),v!==this._tDur&&v||this._tTime!==v||(m&&!this._onUpdate&&Ae(this,e,0,!0),(e||!g)&&(v===this._tDur&&this._ts>0||!v&&this._ts<0)&&Oe(this,1),t||m&&!h||!(v||h||u)||(ht(this,v===f?"onComplete":"onReverseComplete",!0),this._prom&&!(v0)&&this._prom()))}}else!function(e,t,n,r){var i,s,o,l=e.ratio,u=t<0||!t&&(!e._start&&Xe(e)&&(e._initted||!je(e))||(e._ts<0||e._dp._ts<0)&&!je(e))?0:1,c=e._rDelay,d=0;if(c&&e._repeat&&(d=Qe(0,e._tDur,t),s=Ie(d,c),e._yoyo&&1&s&&(u=1-u),s!==Ie(e._tTime,c)&&(l=1-u,e.vars.repeatRefresh&&e._initted&&e.invalidate())),u!==l||a||r||e._zTime===T||!t&&e._zTime){if(!e._initted&&Ye(e,t,r,n,d))return;for(o=e._zTime,e._zTime=t||(n?T:0),n||(n=t&&!o),e.ratio=u,e._from&&(u=1-u),e._time=0,e._tTime=d,i=e._pt;i;)i.r(u,i.d),i=i._next;t<0&&Ae(e,t,0,!0),e._onUpdate&&!n&&ht(e,"onUpdate"),d&&e._repeat&&!n&&e.parent&&ht(e,"onRepeat"),(t>=e._tDur||t<0)&&e.ratio===u&&(u&&Oe(e,1),n||a||(ht(e,u?"onComplete":"onReverseComplete",!0),e._prom&&e._prom()))}else e._zTime||(e._zTime=t)}(this,e,t,n);return this},n.targets=function(){return this._targets},n.invalidate=function(t){return(!t||!this.vars.runBackwards)&&(this._startAt=0),this._pt=this._op=this._onUpdate=this._lazy=this.ratio=0,this._ptLookup=[],this.timeline&&this.timeline.invalidate(t),e.prototype.invalidate.call(this,t)},n.resetTo=function(e,t,n,r){g||Et.wake(),this._ts||this.play();var i=Math.min(this._dur,(this._dp._time-this._start)*this._ts);return this._initted||Vt(this,i),function(e,t,n,r,i,s,a){var o,l,u,c,d=(e._pt&&e._ptCache||(e._ptCache={}))[t];if(!d)for(d=e._ptCache[t]=[],u=e._ptLookup,c=e._targets.length;c--;){if((o=u[c][t])&&o.d&&o.d._pt)for(o=o.d._pt;o&&o.p!==t&&o.fp!==t;)o=o._next;if(!o)return Xt=1,e.vars[t]="+=0",Vt(e,a),Xt=0,1;d.push(o)}for(c=d.length;c--;)(o=(l=d[c])._pt||l).s=!r&&0!==r||i?o.s+(r||0)+s*o.c:r,o.c=n-o.s,l.e&&(l.e=ge(n)+Ze(l.e)),l.b&&(l.b=o.s+Ze(l.b))}(this,e,t,n,r,this._ease(i/this._dur),i)?this.resetTo(e,t,n,r):(Re(this,0),this.parent||Me(this._dp,this,"_first","_last",this._dp._sort?"_start":0),this.render(0))},n.kill=function(e,t){if(void 0===t&&(t="all"),!(e||t&&"all"!==t))return this._lazy=this._pt=0,this.parent?ft(this):this;if(this.timeline){var n=this.timeline.totalDuration();return this.timeline.killTweensOf(e,t,Yt&&!0!==Yt.vars.overwrite)._first||ft(this),this.parent&&n!==this.timeline.totalDuration()&&He(this,this._dur*this.timeline._tDur/n,0,1),this}var r,i,s,a,o,l,u,c=this._targets,d=e?nt(e):c,p=this._ptLookup,h=this._pt;if((!t||"all"===t)&&function(e,t){for(var n=e.length,r=n===t.length;r&&n--&&e[n]===t[n];);return n<0}(c,d))return"all"===t&&(this._pt=0),ft(this);for(r=this._op=this._op||[],"all"!==t&&(O(t)&&(o={},fe(t,(function(e){return o[e]=1})),t=o),t=function(e,t){var n,r,i,s,a=e[0]?pe(e[0]).harness:0,o=a&&a.aliases;if(!o)return t;for(r in n=Ce({},t),o)if(r in n)for(i=(s=o[r].split(",")).length;i--;)n[s[i]]=n[r];return n}(c,t)),u=c.length;u--;)if(~d.indexOf(c[u]))for(o in i=p[u],"all"===t?(r[u]=t,a=i,s={}):(s=r[u]=r[u]||{},a=t),a)(l=i&&i[o])&&("kill"in l.d&&!0!==l.d.kill(o)||Pe(this,l,"_pt"),delete i[o]),"all"!==s&&(s[o]=1);return this._initted&&!this._pt&&h&&ft(this),this},t.to=function(e,n){return new t(e,n,arguments[2])},t.from=function(e,t){return Ue(1,arguments)},t.delayedCall=function(e,n,r,i){return new t(n,0,{immediateRender:!1,lazy:!1,overwrite:!1,delay:e,onComplete:n,onReverseComplete:n,onCompleteParams:r,onReverseCompleteParams:r,callbackScope:i})},t.fromTo=function(e,t,n){return Ue(2,arguments)},t.set=function(e,n){return n.duration=0,n.repeatDelay||(n.repeat=0),new t(e,n)},t.killTweensOf=function(e,t,n){return l.killTweensOf(e,t,n)},t}(Ft);Te(Zt.prototype,{_targets:[],_lazy:0,_startAt:0,_op:0,_onInit:0}),fe("staggerTo,staggerFrom,staggerFromTo",(function(e){Zt[e]=function(){var t=new Gt,n=Je.call(arguments,0);return n.splice("staggerFromTo"===e?5:4,0,0),t[e].apply(t,n)}}));var Jt=function(e,t,n){return e[t]=n},en=function(e,t,n){return e[t](n)},tn=function(e,t,n,r){return e[t](r.fp,n)},nn=function(e,t,n){return e.setAttribute(t,n)},rn=function(e,t){return L(e[t])?en:D(e[t])&&e.setAttribute?nn:Jt},sn=function(e,t){return t.set(t.t,t.p,Math.round(1e6*(t.s+t.c*e))/1e6,t)},an=function(e,t){return t.set(t.t,t.p,!!(t.s+t.c*e),t)},on=function(e,t){var n=t._pt,r="";if(!e&&t.b)r=t.b;else if(1===e&&t.e)r=t.e;else{for(;n;)r=n.p+(n.m?n.m(n.s+n.c*e):Math.round(1e4*(n.s+n.c*e))/1e4)+r,n=n._next;r+=t.c}t.set(t.t,t.p,r,t)},ln=function(e,t){for(var n=t._pt;n;)n.r(e,n.d),n=n._next},un=function(e,t,n,r){for(var i,s=this._pt;s;)i=s._next,s.p===r&&s.modifier(e,t,n),s=i},cn=function(e){for(var t,n,r=this._pt;r;)n=r._next,r.p===e&&!r.op||r.op===e?Pe(this,r,"_pt"):r.dep||(t=1),r=n;return!t},dn=function(e,t,n,r){r.mSet(e,t,r.m.call(r.tween,n,r.mt),r)},pn=function(e){for(var t,n,r,i,s=e._pt;s;){for(t=s._next,n=r;n&&n.pr>s.pr;)n=n._next;(s._prev=n?n._prev:i)?s._prev._next=s:r=s,(s._next=n)?n._prev=s:i=s,s=t}e._pt=r},hn=function(){function e(e,t,n,r,i,s,a,o,l){this.t=t,this.s=r,this.c=i,this.p=n,this.r=s||sn,this.d=a||this,this.set=o||Jt,this.pr=l||0,this._next=e,e&&(e._prev=this)}return e.prototype.modifier=function(e,t,n){this.mSet=this.mSet||this.set,this.set=dn,this.m=e,this.mt=n,this.tween=t},e}();fe(ce+"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger",(function(e){return re[e]=1})),V.TweenMax=V.TweenLite=Zt,V.TimelineLite=V.TimelineMax=Gt,l=new Gt({sortChildren:!1,defaults:w,autoRemoveChildren:!0,id:"root",smoothChildTiming:!0}),b.stringFilter=St;var fn=[],gn={},mn=[],vn=0,yn=0,_n=function(e){return(gn[e]||mn).map((function(e){return e()}))},bn=function(){var e=Date.now(),t=[];e-vn>2&&(_n("matchMediaInit"),fn.forEach((function(e){var n,r,i,s,a=e.queries,o=e.conditions;for(r in a)(n=u.matchMedia(a[r]).matches)&&(i=1),n!==o[r]&&(o[r]=n,s=1);s&&(e.revert(),i&&t.push(e))})),_n("matchMediaRevert"),t.forEach((function(e){return e.onMatch(e)})),vn=e,_n("matchMedia"))},wn=function(){function e(e,t){this.selector=t&&rt(t),this.data=[],this._r=[],this.isReverted=!1,this.id=yn++,e&&this.add(e)}var t=e.prototype;return t.add=function(e,t,n){L(e)&&(n=t,t=e,e=L);var r=this,i=function(){var e,i=o,s=r.selector;return i&&i!==r&&i.data.push(r),n&&(r.selector=rt(n)),o=r,e=t.apply(r,arguments),L(e)&&r._r.push(e),o=i,r.selector=s,r.isReverted=!1,e};return r.last=i,e===L?i(r):e?r[e]=i:i},t.ignore=function(e){var t=o;o=null,e(this),o=t},t.getTweens=function(){var t=[];return this.data.forEach((function(n){return n instanceof e?t.push.apply(t,n.getTweens()):n instanceof Zt&&!(n.parent&&"nested"===n.parent.data)&&t.push(n)})),t},t.clear=function(){this._r.length=this.data.length=0},t.kill=function(e,t){var n=this;if(e){var r=this.getTweens();this.data.forEach((function(e){"isFlip"===e.data&&(e.revert(),e.getChildren(!0,!0,!1).forEach((function(e){return r.splice(r.indexOf(e),1)})))})),r.map((function(e){return{g:e.globalTime(0),t:e}})).sort((function(e,t){return t.g-e.g||-1/0})).forEach((function(t){return t.t.revert(e)})),this.data.forEach((function(t){return!(t instanceof Zt)&&t.revert&&t.revert(e)})),this._r.forEach((function(t){return t(e,n)})),this.isReverted=!0}else this.data.forEach((function(e){return e.kill&&e.kill()}));if(this.clear(),t)for(var i=fn.length;i--;)fn[i].id===this.id&&fn.splice(i,1)},t.revert=function(e){this.kill(e||{})},e}(),xn=function(){function e(e){this.contexts=[],this.scope=e}var t=e.prototype;return t.add=function(e,t,n){$(e)||(e={matches:e});var r,i,s,a=new wn(0,n||this.scope),l=a.conditions={};for(i in o&&!a.selector&&(a.selector=o.selector),this.contexts.push(a),t=a.add("onMatch",t),a.queries=e,e)"all"===i?s=1:(r=u.matchMedia(e[i]))&&(fn.indexOf(a)<0&&fn.push(a),(l[i]=r.matches)&&(s=1),r.addListener?r.addListener(bn):r.addEventListener("change",bn));return s&&t(a),this},t.revert=function(e){this.kill(e||{})},t.kill=function(e){this.contexts.forEach((function(t){return t.kill(e,!0)}))},e}(),Tn={registerPlugin:function(){for(var e=arguments.length,t=new Array(e),n=0;n1){var r=e.map((function(e){return En.quickSetter(e,t,n)})),i=r.length;return function(e){for(var t=i;t--;)r[t](e)}}e=e[0]||{};var s=ae[t],a=pe(e),o=a.harness&&(a.harness.aliases||{})[t]||t,l=s?function(t){var r=new s;f._pt=0,r.init(e,n?t+n:t,f,0,[e]),r.render(1,r),f._pt&&ln(1,f)}:a.set(e,o);return s?l:function(t){return l(e,o,n?t+n:t,a,1)}},quickTo:function(e,t,n){var r,i=En.to(e,Ce(((r={})[t]="+=0.1",r.paused=!0,r),n||{})),s=function(e,n,r){return i.resetTo(t,e,n,r)};return s.tween=i,s},isTweening:function(e){return l.getTweensOf(e,!0).length>0},defaults:function(e){return e&&e.ease&&(e.ease=$t(e.ease,w.ease)),Se(w,e||{})},config:function(e){return Se(b,e||{})},registerEffect:function(e){var t=e.name,n=e.effect,r=e.plugins,i=e.defaults,s=e.extendTimeline;(r||"").split(",").forEach((function(e){return e&&!ae[e]&&!V[e]&&Q(t+" effect requires "+e+" plugin.")})),oe[t]=function(e,t,r){return n(nt(e),Te(t||{},i),r)},s&&(Gt.prototype[t]=function(e,n,r){return this.add(oe[t](e,$(n)?n:(r=n)&&{},this),r)})},registerEase:function(e,t){Mt[e]=$t(t)},parseEase:function(e,t){return arguments.length?$t(e,t):Mt},getById:function(e){return l.getById(e)},exportRoot:function(e,t){void 0===e&&(e={});var n,r,i=new Gt(e);for(i.smoothChildTiming=I(e.smoothChildTiming),l.remove(i),i._dp=0,i._time=i._tTime=l._time,n=l._first;n;)r=n._next,!t&&!n._dur&&n instanceof Zt&&n.vars.onComplete===n._targets[0]||Fe(i,n,n._start-n._delay),n=r;return Fe(l,i,0),i},context:function(e,t){return e?new wn(e,t):o},matchMedia:function(e){return new xn(e)},matchMediaRefresh:function(){return fn.forEach((function(e){var t,n,r=e.conditions;for(n in r)r[n]&&(r[n]=!1,t=1);t&&e.revert()}))||bn()},addEventListener:function(e,t){var n=gn[e]||(gn[e]=[]);~n.indexOf(t)||n.push(t)},removeEventListener:function(e,t){var n=gn[e],r=n&&n.indexOf(t);r>=0&&n.splice(r,1)},utils:{wrap:function e(t,n,r){var i=n-t;return N(t)?ut(t,e(0,t.length),n):Ke(r,(function(e){return(i+(e-t)%i)%i+t}))},wrapYoyo:function e(t,n,r){var i=n-t,s=2*i;return N(t)?ut(t,e(0,t.length-1),n):Ke(r,(function(e){return t+((e=(s+(e-t)%s)%s||0)>i?s-e:e)}))},distribute:st,random:lt,snap:ot,normalize:function(e,t,n){return dt(e,t,0,1,n)},getUnit:Ze,clamp:function(e,t,n){return Ke(n,(function(n){return Qe(e,t,n)}))},splitColor:bt,toArray:nt,selector:rt,mapRange:dt,pipe:function(){for(var e=arguments.length,t=new Array(e),n=0;n=0)return;i._gsap.svg&&(this.svgo=i.getAttribute("data-svg-origin"),this.props.push(nr,n,"")),t=tr}(s||n)&&this.props.push(t,n,s[t])},ir=function(e){e.translate&&(e.removeProperty("translate"),e.removeProperty("scale"),e.removeProperty("rotate"))},sr=function(){var e,t,n=this.props,r=this.target,i=r.style,s=r._gsap;for(e=0;e=0?ur[i]:"")+e},dr=function(){"undefined"!=typeof window&&window.document&&(kn=window,Mn=kn.document,Pn=Mn.documentElement,Ln=or("div")||{style:{}},or("div"),tr=cr(tr),nr=tr+"Origin",Ln.style.cssText="border-width:0;line-height:0;position:absolute;padding:0",$n=!!cr("perspective"),Dn=En.core.reverting,On=1)},pr=function e(t){var n,r=or("svg",this.ownerSVGElement&&this.ownerSVGElement.getAttribute("xmlns")||"http://www.w3.org/2000/svg"),i=this.parentNode,s=this.nextSibling,a=this.style.cssText;if(Pn.appendChild(r),r.appendChild(this),this.style.display="block",t)try{n=this.getBBox(),this._gsapBBox=this.getBBox,this.getBBox=e}catch(e){}else this._gsapBBox&&(n=this._gsapBBox());return i&&(s?i.insertBefore(this,s):i.appendChild(this)),Pn.removeChild(r),this.style.cssText=a,n},hr=function(e,t){for(var n=t.length;n--;)if(e.hasAttribute(t[n]))return e.getAttribute(t[n])},fr=function(e){var t;try{t=e.getBBox()}catch(n){t=pr.call(e,!0)}return t&&(t.width||t.height)||e.getBBox===pr||(t=pr.call(e,!0)),!t||t.width||t.x||t.y?t:{x:+hr(e,["x","cx","x1"])||0,y:+hr(e,["y","cy","y1"])||0,width:0,height:0}},gr=function(e){return!(!e.getCTM||e.parentNode&&!e.ownerSVGElement||!fr(e))},mr=function(e,t){if(t){var n=e.style;t in In&&t!==nr&&(t=tr),n.removeProperty?("ms"!==t.substr(0,2)&&"webkit"!==t.substr(0,6)||(t="-"+t),n.removeProperty(t.replace(Nn,"-$1").toLowerCase())):n.removeAttribute(t)}},vr=function(e,t,n,r,i,s){var a=new hn(e._pt,t,n,0,1,s?Wn:Vn);return e._pt=a,a.b=r,a.e=i,e._props.push(n),a},yr={deg:1,rad:1,turn:1},_r={grid:1,flex:1},br=function e(t,n,r,i){var s,a,o,l,u=parseFloat(r)||0,c=(r+"").trim().substr((u+"").length)||"px",d=Ln.style,p=Fn.test(n),h="svg"===t.tagName.toLowerCase(),f=(h?"client":"offset")+(p?"Width":"Height"),g=100,m="px"===i,v="%"===i;return i===c||!u||yr[i]||yr[c]?u:("px"!==c&&!m&&(u=e(t,n,r,"px")),l=t.getCTM&&gr(t),!v&&"%"!==c||!In[n]&&!~n.indexOf("adius")?(d[p?"width":"height"]=g+(m?c:i),a=~n.indexOf("adius")||"em"===i&&t.appendChild&&!h?t:t.parentNode,l&&(a=(t.ownerSVGElement||{}).parentNode),a&&a!==Mn&&a.appendChild||(a=Mn.body),(o=a._gsap)&&v&&o.width&&p&&o.time===Et.time&&!o.uncache?ge(u/o.width*g):((v||"%"===c)&&!_r[lr(a,"display")]&&(d.position=lr(t,"position")),a===t&&(d.position="static"),a.appendChild(Ln),s=Ln[f],a.removeChild(Ln),d.position="absolute",p&&v&&((o=pe(a)).time=Et.time,o.width=a[f]),ge(m?s*u/g:s&&u?g/s*u:0))):(s=l?t.getBBox()[p?"width":"height"]:t[f],ge(v?u/s*g:u/100*s)))},wr=function(e,t,n,r){var i;return On||dr(),t in Yn&&"transform"!==t&&~(t=Yn[t]).indexOf(",")&&(t=t.split(",")[0]),In[t]&&"transform"!==t?(i=Ar(e,r),i="transformOrigin"!==t?i[t]:i.svg?i.origin:Dr(lr(e,nr))+" "+i.zOrigin+"px"):(!(i=e.style[t])||"auto"===i||r||~(i+"").indexOf("calc("))&&(i=Sr[t]&&Sr[t](e,t,n)||lr(e,t)||he(e,t)||("opacity"===t?1:0)),n&&!~(i+"").trim().indexOf(" ")?br(e,t,i,n)+n:i},xr=function(e,t,n,r){if(!n||"none"===n){var i=cr(t,e,1),s=i&&lr(e,i,1);s&&s!==n?(t=i,n=s):"borderColor"===t&&(n=lr(e,"borderTopColor"))}var a,o,l,u,c,d,p,h,f,g,m,v=new hn(this._pt,e.style,t,0,1,on),y=0,_=0;if(v.b=n,v.e=r,n+="","auto"===(r+="")&&(e.style[t]=r,r=lr(e,t)||r,e.style[t]=n),St(a=[n,r]),r=a[1],l=(n=a[0]).match(Y)||[],(r.match(Y)||[]).length){for(;o=Y.exec(r);)p=o[0],f=r.substring(y,o.index),c?c=(c+1)%5:"rgba("!==f.substr(-5)&&"hsla("!==f.substr(-5)||(c=1),p!==(d=l[_++]||"")&&(u=parseFloat(d)||0,m=d.substr((u+"").length),"="===p.charAt(1)&&(p=ve(u,p)+m),h=parseFloat(p),g=p.substr((h+"").length),y=Y.lastIndex-g.length,g||(g=g||b.units[t]||m,y===r.length&&(r+=g,v.e+=g)),m!==g&&(u=br(e,t,d,g)||0),v._pt={_next:v._pt,p:f||1===_?f:",",s:u,c:h-u,m:c&&c<4||"zIndex"===t?Math.round:0});v.c=y-1;)n=o[i],In[n]&&(r=1,n="transformOrigin"===n?nr:tr),mr(s,n);r&&(mr(s,tr),l&&(l.svg&&s.removeAttribute("transform"),Ar(s,1),l.uncache=1,ir(a)))}},Sr={clearProps:function(e,t,n,r,i){if("isFromStart"!==i.data){var s=e._pt=new hn(e._pt,t,n,0,0,Cr);return s.u=r,s.pr=-10,s.tween=i,e._props.push(n),1}}},Er=[1,0,0,1,0,0],kr={},Mr=function(e){return"matrix(1, 0, 0, 1, 0, 0)"===e||"none"===e||!e},Pr=function(e){var t=lr(e,tr);return Mr(t)?Er:t.substr(7).match(G).map(ge)},Or=function(e,t){var n,r,i,s,a=e._gsap||pe(e),o=e.style,l=Pr(e);return a.svg&&e.getAttribute("transform")?"1,0,0,1,0,0"===(l=[(i=e.transform.baseVal.consolidate().matrix).a,i.b,i.c,i.d,i.e,i.f]).join(",")?Er:l:(l!==Er||e.offsetParent||e===Pn||a.svg||(i=o.display,o.display="block",(n=e.parentNode)&&e.offsetParent||(s=1,r=e.nextElementSibling,Pn.appendChild(e)),l=Pr(e),i?o.display=i:mr(e,"display"),s&&(r?n.insertBefore(e,r):n?n.appendChild(e):Pn.removeChild(e))),t&&l.length>6?[l[0],l[1],l[4],l[5],l[12],l[13]]:l)},Lr=function(e,t,n,r,i,s){var a,o,l,u=e._gsap,c=i||Or(e,!0),d=u.xOrigin||0,p=u.yOrigin||0,h=u.xOffset||0,f=u.yOffset||0,g=c[0],m=c[1],v=c[2],y=c[3],_=c[4],b=c[5],w=t.split(" "),x=parseFloat(w[0])||0,T=parseFloat(w[1])||0;n?c!==Er&&(o=g*y-m*v)&&(l=x*(-m/o)+T*(g/o)-(g*b-m*_)/o,x=x*(y/o)+T*(-v/o)+(v*b-y*_)/o,T=l):(x=(a=fr(e)).x+(~w[0].indexOf("%")?x/100*a.width:x),T=a.y+(~(w[1]||w[0]).indexOf("%")?T/100*a.height:T)),r||!1!==r&&u.smooth?(_=x-d,b=T-p,u.xOffset=h+(_*g+b*v)-_,u.yOffset=f+(_*m+b*y)-b):u.xOffset=u.yOffset=0,u.xOrigin=x,u.yOrigin=T,u.smooth=!!r,u.origin=t,u.originIsAbsolute=!!n,e.style[nr]="0px 0px",s&&(vr(s,u,"xOrigin",d,x),vr(s,u,"yOrigin",p,T),vr(s,u,"xOffset",h,u.xOffset),vr(s,u,"yOffset",f,u.yOffset)),e.setAttribute("data-svg-origin",x+" "+T)},Ar=function(e,t){var n=e._gsap||new Nt(e);if("x"in n&&!t&&!n.uncache)return n;var r,i,s,a,o,l,u,c,d,p,h,f,g,m,v,y,_,w,x,T,C,S,E,k,M,P,O,L,A,D,$,I,z=e.style,B=n.scaleX<0,R="px",N="deg",F=getComputedStyle(e),G=lr(e,nr)||"0";return r=i=s=l=u=c=d=p=h=0,a=o=1,n.svg=!(!e.getCTM||!gr(e)),F.translate&&("none"===F.translate&&"none"===F.scale&&"none"===F.rotate||(z[tr]=("none"!==F.translate?"translate3d("+(F.translate+" 0 0").split(" ").slice(0,3).join(", ")+") ":"")+("none"!==F.rotate?"rotate("+F.rotate+") ":"")+("none"!==F.scale?"scale("+F.scale.split(" ").join(",")+") ":"")+("none"!==F[tr]?F[tr]:"")),z.scale=z.rotate=z.translate="none"),m=Or(e,n.svg),n.svg&&(n.uncache?(M=e.getBBox(),G=n.xOrigin-M.x+"px "+(n.yOrigin-M.y)+"px",k=""):k=!t&&e.getAttribute("data-svg-origin"),Lr(e,k||G,!!k||n.originIsAbsolute,!1!==n.smooth,m)),f=n.xOrigin||0,g=n.yOrigin||0,m!==Er&&(w=m[0],x=m[1],T=m[2],C=m[3],r=S=m[4],i=E=m[5],6===m.length?(a=Math.sqrt(w*w+x*x),o=Math.sqrt(C*C+T*T),l=w||x?Rn(x,w)*zn:0,(d=T||C?Rn(T,C)*zn+l:0)&&(o*=Math.abs(Math.cos(d*Bn))),n.svg&&(r-=f-(f*w+g*T),i-=g-(f*x+g*C))):(I=m[6],D=m[7],O=m[8],L=m[9],A=m[10],$=m[11],r=m[12],i=m[13],s=m[14],u=(v=Rn(I,A))*zn,v&&(k=S*(y=Math.cos(-v))+O*(_=Math.sin(-v)),M=E*y+L*_,P=I*y+A*_,O=S*-_+O*y,L=E*-_+L*y,A=I*-_+A*y,$=D*-_+$*y,S=k,E=M,I=P),c=(v=Rn(-T,A))*zn,v&&(y=Math.cos(-v),$=C*(_=Math.sin(-v))+$*y,w=k=w*y-O*_,x=M=x*y-L*_,T=P=T*y-A*_),l=(v=Rn(x,w))*zn,v&&(k=w*(y=Math.cos(v))+x*(_=Math.sin(v)),M=S*y+E*_,x=x*y-w*_,E=E*y-S*_,w=k,S=M),u&&Math.abs(u)+Math.abs(l)>359.9&&(u=l=0,c=180-c),a=ge(Math.sqrt(w*w+x*x+T*T)),o=ge(Math.sqrt(E*E+I*I)),v=Rn(S,E),d=Math.abs(v)>2e-4?v*zn:0,h=$?1/($<0?-$:$):0),n.svg&&(k=e.getAttribute("transform"),n.forceCSS=e.setAttribute("transform","")||!Mr(lr(e,tr)),k&&e.setAttribute("transform",k))),Math.abs(d)>90&&Math.abs(d)<270&&(B?(a*=-1,d+=l<=0?180:-180,l+=l<=0?180:-180):(o*=-1,d+=d<=0?180:-180)),t=t||n.uncache,n.x=r-((n.xPercent=r&&(!t&&n.xPercent||(Math.round(e.offsetWidth/2)===Math.round(-r)?-50:0)))?e.offsetWidth*n.xPercent/100:0)+R,n.y=i-((n.yPercent=i&&(!t&&n.yPercent||(Math.round(e.offsetHeight/2)===Math.round(-i)?-50:0)))?e.offsetHeight*n.yPercent/100:0)+R,n.z=s+R,n.scaleX=ge(a),n.scaleY=ge(o),n.rotation=ge(l)+N,n.rotationX=ge(u)+N,n.rotationY=ge(c)+N,n.skewX=d+N,n.skewY=p+N,n.transformPerspective=h+R,(n.zOrigin=parseFloat(G.split(" ")[2])||0)&&(z[nr]=Dr(G)),n.xOffset=n.yOffset=0,n.force3D=b.force3D,n.renderTransform=n.svg?Fr:$n?Nr:Ir,n.uncache=0,n},Dr=function(e){return(e=e.split(" "))[0]+" "+e[1]},$r=function(e,t,n){var r=Ze(t);return ge(parseFloat(t)+parseFloat(br(e,"x",n+"px",r)))+r},Ir=function(e,t){t.z="0px",t.rotationY=t.rotationX="0deg",t.force3D=0,Nr(e,t)},zr="0deg",Br="0px",Rr=") ",Nr=function(e,t){var n=t||this,r=n.xPercent,i=n.yPercent,s=n.x,a=n.y,o=n.z,l=n.rotation,u=n.rotationY,c=n.rotationX,d=n.skewX,p=n.skewY,h=n.scaleX,f=n.scaleY,g=n.transformPerspective,m=n.force3D,v=n.target,y=n.zOrigin,_="",b="auto"===m&&e&&1!==e||!0===m;if(y&&(c!==zr||u!==zr)){var w,x=parseFloat(u)*Bn,T=Math.sin(x),C=Math.cos(x);x=parseFloat(c)*Bn,w=Math.cos(x),s=$r(v,s,T*w*-y),a=$r(v,a,-Math.sin(x)*-y),o=$r(v,o,C*w*-y+y)}g!==Br&&(_+="perspective("+g+Rr),(r||i)&&(_+="translate("+r+"%, "+i+"%) "),(b||s!==Br||a!==Br||o!==Br)&&(_+=o!==Br||b?"translate3d("+s+", "+a+", "+o+") ":"translate("+s+", "+a+Rr),l!==zr&&(_+="rotate("+l+Rr),u!==zr&&(_+="rotateY("+u+Rr),c!==zr&&(_+="rotateX("+c+Rr),d===zr&&p===zr||(_+="skew("+d+", "+p+Rr),1===h&&1===f||(_+="scale("+h+", "+f+Rr),v.style[tr]=_||"translate(0, 0)"},Fr=function(e,t){var n,r,i,s,a,o=t||this,l=o.xPercent,u=o.yPercent,c=o.x,d=o.y,p=o.rotation,h=o.skewX,f=o.skewY,g=o.scaleX,m=o.scaleY,v=o.target,y=o.xOrigin,_=o.yOrigin,b=o.xOffset,w=o.yOffset,x=o.forceCSS,T=parseFloat(c),C=parseFloat(d);p=parseFloat(p),h=parseFloat(h),(f=parseFloat(f))&&(h+=f=parseFloat(f),p+=f),p||h?(p*=Bn,h*=Bn,n=Math.cos(p)*g,r=Math.sin(p)*g,i=Math.sin(p-h)*-m,s=Math.cos(p-h)*m,h&&(f*=Bn,a=Math.tan(h-f),i*=a=Math.sqrt(1+a*a),s*=a,f&&(a=Math.tan(f),n*=a=Math.sqrt(1+a*a),r*=a)),n=ge(n),r=ge(r),i=ge(i),s=ge(s)):(n=g,s=m,r=i=0),(T&&!~(c+"").indexOf("px")||C&&!~(d+"").indexOf("px"))&&(T=br(v,"x",c,"px"),C=br(v,"y",d,"px")),(y||_||b||w)&&(T=ge(T+y-(y*n+_*i)+b),C=ge(C+_-(y*r+_*s)+w)),(l||u)&&(a=v.getBBox(),T=ge(T+l/100*a.width),C=ge(C+u/100*a.height)),a="matrix("+n+","+r+","+i+","+s+","+T+","+C+")",v.setAttribute("transform",a),x&&(v.style[tr]=a)},Gr=function(e,t,n,r,i){var s,a,o=360,l=O(i),u=parseFloat(i)*(l&&~i.indexOf("rad")?zn:1)-r,c=r+u+"deg";return l&&("short"===(s=i.split("_")[1])&&(u%=o)!==u%180&&(u+=u<0?o:-360),"cw"===s&&u<0?u=(u+36e9)%o-~~(u/o)*o:"ccw"===s&&u>0&&(u=(u-36e9)%o-~~(u/o)*o)),e._pt=a=new hn(e._pt,t,n,r,u,jn),a.e=c,a.u="deg",e._props.push(n),a},Yr=function(e,t){for(var n in t)e[n]=t[n];return e},Xr=function(e,t,n){var r,i,s,a,o,l,u,c=Yr({},n._gsap),d=n.style;for(i in c.svg?(s=n.getAttribute("transform"),n.setAttribute("transform",""),d[tr]=t,r=Ar(n,1),mr(n,tr),n.setAttribute("transform",s)):(s=getComputedStyle(n)[tr],d[tr]=t,r=Ar(n,1),d[tr]=s),In)(s=c[i])!==(a=r[i])&&"perspective,force3D,transformOrigin,svgOrigin".indexOf(i)<0&&(o=Ze(s)!==(u=Ze(a))?br(n,i,s,u):parseFloat(s),l=parseFloat(a),e._pt=new hn(e._pt,r,i,o,l-o,Xn),e._pt.u=u||0,e._props.push(i));Yr(r,c)};fe("padding,margin,Width,Radius",(function(e,t){var n="Top",r="Right",i="Bottom",s="Left",a=(t<3?[n,r,i,s]:[n+s,n+r,i+r,i+s]).map((function(n){return t<2?e+n:"border"+n+e}));Sr[t>1?"border"+e:e]=function(e,t,n,r,i){var s,o;if(arguments.length<4)return s=a.map((function(t){return wr(e,t,n)})),5===(o=s.join(" ")).split(s[0]).length?s[0]:o;s=(r+"").split(" "),o={},a.forEach((function(e,t){return o[e]=s[t]=s[t]||s[(t-1)/2|0]})),e.init(t,o,i)}}));var jr,Hr,qr,Vr={name:"css",register:dr,targetTest:function(e){return e.style&&e.nodeType},init:function(e,t,n,r,i){var s,a,o,l,u,c,d,p,h,f,g,m,v,y,_,w,x,T,C,S,E=this._props,k=e.style,M=n.vars.startAt;for(d in On||dr(),this.styles=this.styles||ar(e),w=this.styles.props,this.tween=n,t)if("autoRound"!==d&&(a=t[d],!ae[d]||!qt(d,t,n,r,e,i)))if(u=typeof a,c=Sr[d],"function"===u&&(u=typeof(a=a.call(n,r,e,i))),"string"===u&&~a.indexOf("random(")&&(a=ct(a)),c)c(this,e,d,a,n)&&(_=1);else if("--"===d.substr(0,2))s=(getComputedStyle(e).getPropertyValue(d)+"").trim(),a+="",Tt.lastIndex=0,Tt.test(s)||(p=Ze(s),h=Ze(a)),h?p!==h&&(s=br(e,d,s,h)+h):p&&(a+=p),this.add(k,"setProperty",s,a,r,i,0,0,d),E.push(d),w.push(d,0,k[d]);else if("undefined"!==u){if(M&&d in M?(s="function"==typeof M[d]?M[d].call(n,r,e,i):M[d],O(s)&&~s.indexOf("random(")&&(s=ct(s)),Ze(s+"")||(s+=b.units[d]||Ze(wr(e,d))||""),"="===(s+"").charAt(1)&&(s=wr(e,d))):s=wr(e,d),l=parseFloat(s),(f="string"===u&&"="===a.charAt(1)&&a.substr(0,2))&&(a=a.substr(2)),o=parseFloat(a),d in Yn&&("autoAlpha"===d&&(1===l&&"hidden"===wr(e,"visibility")&&o&&(l=0),w.push("visibility",0,k.visibility),vr(this,k,"visibility",l?"inherit":"hidden",o?"inherit":"hidden",!o)),"scale"!==d&&"transform"!==d&&~(d=Yn[d]).indexOf(",")&&(d=d.split(",")[0])),g=d in In)if(this.styles.save(d),m||((v=e._gsap).renderTransform&&!t.parseTransform||Ar(e,t.parseTransform),y=!1!==t.smoothOrigin&&v.smooth,(m=this._pt=new hn(this._pt,k,tr,0,1,v.renderTransform,v,0,-1)).dep=1),"scale"===d)this._pt=new hn(this._pt,v,"scaleY",v.scaleY,(f?ve(v.scaleY,f+o):o)-v.scaleY||0,Xn),this._pt.u=0,E.push("scaleY",d),d+="X";else{if("transformOrigin"===d){w.push(nr,0,k[nr]),T=void 0,C=void 0,S=void 0,T=(x=a).split(" "),C=T[0],S=T[1]||"50%","top"!==C&&"bottom"!==C&&"left"!==S&&"right"!==S||(x=C,C=S,S=x),T[0]=Tr[C]||C,T[1]=Tr[S]||S,a=T.join(" "),v.svg?Lr(e,a,0,y,0,this):((h=parseFloat(a.split(" ")[2])||0)!==v.zOrigin&&vr(this,v,"zOrigin",v.zOrigin,h),vr(this,k,d,Dr(s),Dr(a)));continue}if("svgOrigin"===d){Lr(e,a,1,y,0,this);continue}if(d in kr){Gr(this,v,d,l,f?ve(l,f+a):a);continue}if("smoothOrigin"===d){vr(this,v,"smooth",v.smooth,a);continue}if("force3D"===d){v[d]=a;continue}if("transform"===d){Xr(this,a,e);continue}}else d in k||(d=cr(d)||d);if(g||(o||0===o)&&(l||0===l)&&!Gn.test(a)&&d in k)o||(o=0),(p=(s+"").substr((l+"").length))!==(h=Ze(a)||(d in b.units?b.units[d]:p))&&(l=br(e,d,s,h)),this._pt=new hn(this._pt,g?v:k,d,l,(f?ve(l,f+o):o)-l,g||"px"!==h&&"zIndex"!==d||!1===t.autoRound?Xn:qn),this._pt.u=h||0,p!==h&&"%"!==h&&(this._pt.b=s,this._pt.r=Hn);else if(d in k)xr.call(this,e,d,s,f?f+a:a);else if(d in e)this.add(e,d,s||e[d],f?f+a:a,r,i);else if("parseTransform"!==d){K(d,a);continue}g||(d in k?w.push(d,0,k[d]):w.push(d,1,s||e[d])),E.push(d)}_&&pn(this)},render:function(e,t){if(t.tween._time||!Dn())for(var n=t._pt;n;)n.r(e,n.d),n=n._next;else t.styles.revert()},get:wr,aliases:Yn,getSetter:function(e,t,n){var r=Yn[t];return r&&r.indexOf(",")<0&&(t=r),t in In&&t!==nr&&(e._gsap.x||wr(e,"x"))?n&&An===n?"scale"===t?Zn:Qn:(An=n||{})&&("scale"===t?Jn:er):e.style&&!D(e.style[t])?Un:~t.indexOf("-")?Kn:rn(e,t)},core:{_removeProperty:mr,_getMatrix:Or}};En.utils.checkPrefix=cr,En.core.getStyleSaver=ar,qr=fe((jr="x,y,z,scale,scaleX,scaleY,xPercent,yPercent")+","+(Hr="rotation,rotationX,rotationY,skewX,skewY")+",transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective",(function(e){In[e]=1})),fe(Hr,(function(e){b.units[e]="deg",kr[e]=1})),Yn[qr[13]]=jr+","+Hr,fe("0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY",(function(e){var t=e.split(":");Yn[t[1]]=qr[t[0]]})),fe("x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective",(function(e){b.units[e]="px"})),En.registerPlugin(Vr);var Wr=En.registerPlugin(Vr)||En;Wr.core.Tween},564:function(e,t,n){!function(t,r){e.exports?e.exports=r(t,n(158)):t.imagesLoaded=r(t,t.EvEmitter)}("undefined"!=typeof window?window:this,(function(e,t){let n=e.jQuery,r=e.console;function i(e,t,s){if(!(this instanceof i))return new i(e,t,s);let a=e;var o;("string"==typeof e&&(a=document.querySelectorAll(e)),a)?(this.elements=(o=a,Array.isArray(o)?o:"object"==typeof o&&"number"==typeof o.length?[...o]:[o]),this.options={},"function"==typeof t?s=t:Object.assign(this.options,t),s&&this.on("always",s),this.getImages(),n&&(this.jqDeferred=new n.Deferred),setTimeout(this.check.bind(this))):r.error(`Bad element for imagesLoaded ${a||e}`)}i.prototype=Object.create(t.prototype),i.prototype.getImages=function(){this.images=[],this.elements.forEach(this.addElementImages,this)};const s=[1,9,11];i.prototype.addElementImages=function(e){"IMG"===e.nodeName&&this.addImage(e),!0===this.options.background&&this.addElementBackgroundImages(e);let{nodeType:t}=e;if(!t||!s.includes(t))return;let n=e.querySelectorAll("img");for(let e of n)this.addImage(e);if("string"==typeof this.options.background){let t=e.querySelectorAll(this.options.background);for(let e of t)this.addElementBackgroundImages(e)}};const a=/url\((['"])?(.*?)\1\)/gi;function o(e){this.img=e}function l(e,t){this.url=e,this.element=t,this.img=new Image}return i.prototype.addElementBackgroundImages=function(e){let t=getComputedStyle(e);if(!t)return;let n=a.exec(t.backgroundImage);for(;null!==n;){let r=n&&n[2];r&&this.addBackground(r,e),n=a.exec(t.backgroundImage)}},i.prototype.addImage=function(e){let t=new o(e);this.images.push(t)},i.prototype.addBackground=function(e,t){let n=new l(e,t);this.images.push(n)},i.prototype.check=function(){if(this.progressedCount=0,this.hasAnyBroken=!1,!this.images.length)return void this.complete();let e=(e,t,n)=>{setTimeout((()=>{this.progress(e,t,n)}))};this.images.forEach((function(t){t.once("progress",e),t.check()}))},i.prototype.progress=function(e,t,n){this.progressedCount++,this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded,this.emitEvent("progress",[this,e,t]),this.jqDeferred&&this.jqDeferred.notify&&this.jqDeferred.notify(this,e),this.progressedCount===this.images.length&&this.complete(),this.options.debug&&r&&r.log(`progress: ${n}`,e,t)},i.prototype.complete=function(){let e=this.hasAnyBroken?"fail":"done";if(this.isComplete=!0,this.emitEvent(e,[this]),this.emitEvent("always",[this]),this.jqDeferred){let e=this.hasAnyBroken?"reject":"resolve";this.jqDeferred[e](this)}},o.prototype=Object.create(t.prototype),o.prototype.check=function(){this.getIsImageComplete()?this.confirm(0!==this.img.naturalWidth,"naturalWidth"):(this.proxyImage=new Image,this.img.crossOrigin&&(this.proxyImage.crossOrigin=this.img.crossOrigin),this.proxyImage.addEventListener("load",this),this.proxyImage.addEventListener("error",this),this.img.addEventListener("load",this),this.img.addEventListener("error",this),this.proxyImage.src=this.img.currentSrc||this.img.src)},o.prototype.getIsImageComplete=function(){return this.img.complete&&this.img.naturalWidth},o.prototype.confirm=function(e,t){this.isLoaded=e;let{parentNode:n}=this.img,r="PICTURE"===n.nodeName?n:this.img;this.emitEvent("progress",[this,r,t])},o.prototype.handleEvent=function(e){let t="on"+e.type;this[t]&&this[t](e)},o.prototype.onload=function(){this.confirm(!0,"onload"),this.unbindEvents()},o.prototype.onerror=function(){this.confirm(!1,"onerror"),this.unbindEvents()},o.prototype.unbindEvents=function(){this.proxyImage.removeEventListener("load",this),this.proxyImage.removeEventListener("error",this),this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},l.prototype=Object.create(o.prototype),l.prototype.check=function(){this.img.addEventListener("load",this),this.img.addEventListener("error",this),this.img.src=this.url,this.getIsImageComplete()&&(this.confirm(0!==this.img.naturalWidth,"naturalWidth"),this.unbindEvents())},l.prototype.unbindEvents=function(){this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},l.prototype.confirm=function(e,t){this.isLoaded=e,this.emitEvent("progress",[this,this.element,t])},i.makeJQueryPlugin=function(t){(t=t||e.jQuery)&&(n=t,n.fn.imagesLoaded=function(e,t){return new i(this,e,t).jqDeferred.promise(n(this))})},i.makeJQueryPlugin(),i}))},911:function(e,t,n){"use strict";function r(e){return null!==e&&"object"==typeof e&&"constructor"in e&&e.constructor===Object}function i(e={},t={}){Object.keys(t).forEach((n=>{void 0===e[n]?e[n]=t[n]:r(t[n])&&r(e[n])&&Object.keys(t[n]).length>0&&i(e[n],t[n])}))}n.d(t,{s5:function(){return se},W_:function(){return ne},tl:function(){return ie},ZP:function(){return ee}});const s={body:{},addEventListener(){},removeEventListener(){},activeElement:{blur(){},nodeName:""},querySelector(){return null},querySelectorAll(){return[]},getElementById(){return null},createEvent(){return{initEvent(){}}},createElement(){return{children:[],childNodes:[],style:{},setAttribute(){},getElementsByTagName(){return[]}}},createElementNS(){return{}},importNode(){return null},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function a(){const e="undefined"!=typeof document?document:{};return i(e,s),e}const o={document:s,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState(){},pushState(){},go(){},back(){}},CustomEvent:function(){return this},addEventListener(){},removeEventListener(){},getComputedStyle(){return{getPropertyValue(){return""}}},Image(){},Date(){},screen:{},setTimeout(){},clearTimeout(){},matchMedia(){return{}},requestAnimationFrame(e){return"undefined"==typeof setTimeout?(e(),null):setTimeout(e,0)},cancelAnimationFrame(e){"undefined"!=typeof setTimeout&&clearTimeout(e)}};function l(){const e="undefined"!=typeof window?window:{};return i(e,o),e}class u extends Array{constructor(e){"number"==typeof e?super(e):(super(...e||[]),function(e){const t=e.__proto__;Object.defineProperty(e,"__proto__",{get(){return t},set(e){t.__proto__=e}})}(this))}}function c(e=[]){const t=[];return e.forEach((e=>{Array.isArray(e)?t.push(...c(e)):t.push(e)})),t}function d(e,t){return Array.prototype.filter.call(e,t)}function p(e,t){const n=l(),r=a();let i=[];if(!t&&e instanceof u)return e;if(!e)return new u(i);if("string"==typeof e){const n=e.trim();if(n.indexOf("<")>=0&&n.indexOf(">")>=0){let e="div";0===n.indexOf("e.split(" "))));return this.forEach((e=>{e.classList.add(...t)})),this},removeClass:function(...e){const t=c(e.map((e=>e.split(" "))));return this.forEach((e=>{e.classList.remove(...t)})),this},hasClass:function(...e){const t=c(e.map((e=>e.split(" "))));return d(this,(e=>t.filter((t=>e.classList.contains(t))).length>0)).length>0},toggleClass:function(...e){const t=c(e.map((e=>e.split(" "))));this.forEach((e=>{t.forEach((t=>{e.classList.toggle(t)}))}))},attr:function(e,t){if(1===arguments.length&&"string"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(let n=0;n=0;e-=1){const n=a[e];r&&n.listener===r||r&&n.listener&&n.listener.dom7proxy&&n.listener.dom7proxy===r?(s.removeEventListener(t,n.proxyListener,i),a.splice(e,1)):r||(s.removeEventListener(t,n.proxyListener,i),a.splice(e,1))}}}return this},trigger:function(...e){const t=l(),n=e[0].split(" "),r=e[1];for(let i=0;it>0)),i.dispatchEvent(n),i.dom7EventData=[],delete i.dom7EventData}}}return this},transitionEnd:function(e){const t=this;return e&&t.on("transitionend",(function n(r){r.target===this&&(e.call(this,r),t.off("transitionend",n))})),this},outerWidth:function(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetWidth+parseFloat(e.getPropertyValue("margin-right"))+parseFloat(e.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null},outerHeight:function(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetHeight+parseFloat(e.getPropertyValue("margin-top"))+parseFloat(e.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null},styles:function(){const e=l();return this[0]?e.getComputedStyle(this[0],null):{}},offset:function(){if(this.length>0){const e=l(),t=a(),n=this[0],r=n.getBoundingClientRect(),i=t.body,s=n.clientTop||i.clientTop||0,o=n.clientLeft||i.clientLeft||0,u=n===e?e.scrollY:n.scrollTop,c=n===e?e.scrollX:n.scrollLeft;return{top:r.top+u-s,left:r.left+c-o}}return null},css:function(e,t){const n=l();let r;if(1===arguments.length){if("string"!=typeof e){for(r=0;r{e.apply(t,[t,n])})),this):this},html:function(e){if(void 0===e)return this[0]?this[0].innerHTML:null;for(let t=0;tt-1)return p([]);if(e<0){const n=t+e;return p(n<0?[]:[this[n]])}return p([this[e]])},append:function(...e){let t;const n=a();for(let r=0;r=0;r-=1)this[n].insertBefore(i.childNodes[r],this[n].childNodes[0])}else if(e instanceof u)for(r=0;r0?e?this[0].nextElementSibling&&p(this[0].nextElementSibling).is(e)?p([this[0].nextElementSibling]):p([]):this[0].nextElementSibling?p([this[0].nextElementSibling]):p([]):p([])},nextAll:function(e){const t=[];let n=this[0];if(!n)return p([]);for(;n.nextElementSibling;){const r=n.nextElementSibling;e?p(r).is(e)&&t.push(r):t.push(r),n=r}return p(t)},prev:function(e){if(this.length>0){const t=this[0];return e?t.previousElementSibling&&p(t.previousElementSibling).is(e)?p([t.previousElementSibling]):p([]):t.previousElementSibling?p([t.previousElementSibling]):p([])}return p([])},prevAll:function(e){const t=[];let n=this[0];if(!n)return p([]);for(;n.previousElementSibling;){const r=n.previousElementSibling;e?p(r).is(e)&&t.push(r):t.push(r),n=r}return p(t)},parent:function(e){const t=[];for(let n=0;n{Object.defineProperty(p.fn,e,{value:g[e],writable:!0})}));var m=p;function v(e,t=0){return setTimeout(e,t)}function y(){return Date.now()}function _(e,t="x"){const n=l();let r,i,s;const a=function(e){const t=l();let n;return t.getComputedStyle&&(n=t.getComputedStyle(e,null)),!n&&e.currentStyle&&(n=e.currentStyle),n||(n=e.style),n}(e);return n.WebKitCSSMatrix?(i=a.transform||a.webkitTransform,i.split(",").length>6&&(i=i.split(", ").map((e=>e.replace(",","."))).join(", ")),s=new n.WebKitCSSMatrix("none"===i?"":i)):(s=a.MozTransform||a.OTransform||a.MsTransform||a.msTransform||a.transform||a.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),r=s.toString().split(",")),"x"===t&&(i=n.WebKitCSSMatrix?s.m41:16===r.length?parseFloat(r[12]):parseFloat(r[4])),"y"===t&&(i=n.WebKitCSSMatrix?s.m42:16===r.length?parseFloat(r[13]):parseFloat(r[5])),i||0}function b(e){return"object"==typeof e&&null!==e&&e.constructor&&"Object"===Object.prototype.toString.call(e).slice(8,-1)}function w(...e){const t=Object(e[0]),n=["__proto__","constructor","prototype"];for(let i=1;in.indexOf(e)<0));for(let n=0,r=e.length;ni?"next":"prev",c=(e,t)=>"next"===u&&e>=t||"prev"===u&&e<=t,d=()=>{s=(new Date).getTime(),null===a&&(a=s);const l=Math.max(Math.min((s-a)/o,1),0),u=.5-Math.cos(l*Math.PI)/2;let p=i+u*(t-i);if(c(p,t)&&(p=t),e.wrapperEl.scrollTo({[n]:p}),c(p,t))return e.wrapperEl.style.overflow="hidden",e.wrapperEl.style.scrollSnapType="",setTimeout((()=>{e.wrapperEl.style.overflow="",e.wrapperEl.scrollTo({[n]:p})})),void r.cancelAnimationFrame(e.cssModeFrameID);e.cssModeFrameID=r.requestAnimationFrame(d)};d()}let C,S,E;function k(){return C||(C=function(){const e=l(),t=a();return{smoothScroll:t.documentElement&&"scrollBehavior"in t.documentElement.style,touch:!!("ontouchstart"in e||e.DocumentTouch&&t instanceof e.DocumentTouch),passiveListener:function(){let t=!1;try{const n=Object.defineProperty({},"passive",{get(){t=!0}});e.addEventListener("testPassiveListener",null,n)}catch(e){}return t}(),gestures:"ongesturestart"in e}}()),C}function M(e={}){return S||(S=function({userAgent:e}={}){const t=k(),n=l(),r=n.navigator.platform,i=e||n.navigator.userAgent,s={ios:!1,android:!1},a=n.screen.width,o=n.screen.height,u=i.match(/(Android);?[\s\/]+([\d.]+)?/);let c=i.match(/(iPad).*OS\s([\d_]+)/);const d=i.match(/(iPod)(.*OS\s([\d_]+))?/),p=!c&&i.match(/(iPhone\sOS|iOS)\s([\d_]+)/),h="Win32"===r;let f="MacIntel"===r;return!c&&f&&t.touch&&["1024x1366","1366x1024","834x1194","1194x834","834x1112","1112x834","768x1024","1024x768","820x1180","1180x820","810x1080","1080x810"].indexOf(`${a}x${o}`)>=0&&(c=i.match(/(Version)\/([\d.]+)/),c||(c=[0,1,"13_0_0"]),f=!1),u&&!h&&(s.os="android",s.android=!0),(c||p||d)&&(s.os="ios",s.ios=!0),s}(e)),S}function P(){return E||(E=function(){const e=l();return{isSafari:function(){const t=e.navigator.userAgent.toLowerCase();return t.indexOf("safari")>=0&&t.indexOf("chrome")<0&&t.indexOf("android")<0}(),isWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(e.navigator.userAgent)}}()),E}var O={on(e,t,n){const r=this;if(!r.eventsListeners||r.destroyed)return r;if("function"!=typeof t)return r;const i=n?"unshift":"push";return e.split(" ").forEach((e=>{r.eventsListeners[e]||(r.eventsListeners[e]=[]),r.eventsListeners[e][i](t)})),r},once(e,t,n){const r=this;if(!r.eventsListeners||r.destroyed)return r;if("function"!=typeof t)return r;function i(...n){r.off(e,i),i.__emitterProxy&&delete i.__emitterProxy,t.apply(r,n)}return i.__emitterProxy=t,r.on(e,i,n)},onAny(e,t){const n=this;if(!n.eventsListeners||n.destroyed)return n;if("function"!=typeof e)return n;const r=t?"unshift":"push";return n.eventsAnyListeners.indexOf(e)<0&&n.eventsAnyListeners[r](e),n},offAny(e){const t=this;if(!t.eventsListeners||t.destroyed)return t;if(!t.eventsAnyListeners)return t;const n=t.eventsAnyListeners.indexOf(e);return n>=0&&t.eventsAnyListeners.splice(n,1),t},off(e,t){const n=this;return!n.eventsListeners||n.destroyed?n:n.eventsListeners?(e.split(" ").forEach((e=>{void 0===t?n.eventsListeners[e]=[]:n.eventsListeners[e]&&n.eventsListeners[e].forEach(((r,i)=>{(r===t||r.__emitterProxy&&r.__emitterProxy===t)&&n.eventsListeners[e].splice(i,1)}))})),n):n},emit(...e){const t=this;if(!t.eventsListeners||t.destroyed)return t;if(!t.eventsListeners)return t;let n,r,i;"string"==typeof e[0]||Array.isArray(e[0])?(n=e[0],r=e.slice(1,e.length),i=t):(n=e[0].events,r=e[0].data,i=e[0].context||t),r.unshift(i);return(Array.isArray(n)?n:n.split(" ")).forEach((e=>{t.eventsAnyListeners&&t.eventsAnyListeners.length&&t.eventsAnyListeners.forEach((t=>{t.apply(i,[e,...r])})),t.eventsListeners&&t.eventsListeners[e]&&t.eventsListeners[e].forEach((e=>{e.apply(i,r)}))})),t}};var L={updateSize:function(){const e=this;let t,n;const r=e.$el;t=void 0!==e.params.width&&null!==e.params.width?e.params.width:r[0].clientWidth,n=void 0!==e.params.height&&null!==e.params.height?e.params.height:r[0].clientHeight,0===t&&e.isHorizontal()||0===n&&e.isVertical()||(t=t-parseInt(r.css("padding-left")||0,10)-parseInt(r.css("padding-right")||0,10),n=n-parseInt(r.css("padding-top")||0,10)-parseInt(r.css("padding-bottom")||0,10),Number.isNaN(t)&&(t=0),Number.isNaN(n)&&(n=0),Object.assign(e,{width:t,height:n,size:e.isHorizontal()?t:n}))},updateSlides:function(){const e=this;function t(t){return e.isHorizontal()?t:{width:"height","margin-top":"margin-left","margin-bottom ":"margin-right","margin-left":"margin-top","margin-right":"margin-bottom","padding-left":"padding-top","padding-right":"padding-bottom",marginRight:"marginBottom"}[t]}function n(e,n){return parseFloat(e.getPropertyValue(t(n))||0)}const r=e.params,{$wrapperEl:i,size:s,rtlTranslate:a,wrongRTL:o}=e,l=e.virtual&&r.virtual.enabled,u=l?e.virtual.slides.length:e.slides.length,c=i.children(`.${e.params.slideClass}`),d=l?e.virtual.slides.length:c.length;let p=[];const h=[],f=[];let g=r.slidesOffsetBefore;"function"==typeof g&&(g=r.slidesOffsetBefore.call(e));let m=r.slidesOffsetAfter;"function"==typeof m&&(m=r.slidesOffsetAfter.call(e));const v=e.snapGrid.length,y=e.slidesGrid.length;let _=r.spaceBetween,b=-g,w=0,T=0;if(void 0===s)return;"string"==typeof _&&_.indexOf("%")>=0&&(_=parseFloat(_.replace("%",""))/100*s),e.virtualSize=-_,a?c.css({marginLeft:"",marginBottom:"",marginTop:""}):c.css({marginRight:"",marginBottom:"",marginTop:""}),r.centeredSlides&&r.cssMode&&(x(e.wrapperEl,"--swiper-centered-offset-before",""),x(e.wrapperEl,"--swiper-centered-offset-after",""));const C=r.grid&&r.grid.rows>1&&e.grid;let S;C&&e.grid.initSlides(d);const E="auto"===r.slidesPerView&&r.breakpoints&&Object.keys(r.breakpoints).filter((e=>void 0!==r.breakpoints[e].slidesPerView)).length>0;for(let i=0;i1&&p.push(e.virtualSize-s)}if(0===p.length&&(p=[0]),0!==r.spaceBetween){const n=e.isHorizontal()&&a?"marginLeft":t("marginRight");c.filter(((e,t)=>!r.cssMode||t!==c.length-1)).css({[n]:`${_}px`})}if(r.centeredSlides&&r.centeredSlidesBounds){let e=0;f.forEach((t=>{e+=t+(r.spaceBetween?r.spaceBetween:0)})),e-=r.spaceBetween;const t=e-s;p=p.map((e=>e<0?-g:e>t?t+m:e))}if(r.centerInsufficientSlides){let e=0;if(f.forEach((t=>{e+=t+(r.spaceBetween?r.spaceBetween:0)})),e-=r.spaceBetween,e{p[n]=e-t})),h.forEach(((e,n)=>{h[n]=e+t}))}}if(Object.assign(e,{slides:c,snapGrid:p,slidesGrid:h,slidesSizesGrid:f}),r.centeredSlides&&r.cssMode&&!r.centeredSlidesBounds){x(e.wrapperEl,"--swiper-centered-offset-before",-p[0]+"px"),x(e.wrapperEl,"--swiper-centered-offset-after",e.size/2-f[f.length-1]/2+"px");const t=-e.snapGrid[0],n=-e.slidesGrid[0];e.snapGrid=e.snapGrid.map((e=>e+t)),e.slidesGrid=e.slidesGrid.map((e=>e+n))}if(d!==u&&e.emit("slidesLengthChange"),p.length!==v&&(e.params.watchOverflow&&e.checkOverflow(),e.emit("snapGridLengthChange")),h.length!==y&&e.emit("slidesGridLengthChange"),r.watchSlidesProgress&&e.updateSlidesOffset(),!(l||r.cssMode||"slide"!==r.effect&&"fade"!==r.effect)){const t=`${r.containerModifierClass}backface-hidden`,n=e.$el.hasClass(t);d<=r.maxBackfaceHiddenSlides?n||e.$el.addClass(t):n&&e.$el.removeClass(t)}},updateAutoHeight:function(e){const t=this,n=[],r=t.virtual&&t.params.virtual.enabled;let i,s=0;"number"==typeof e?t.setTransition(e):!0===e&&t.setTransition(t.params.speed);const a=e=>r?t.slides.filter((t=>parseInt(t.getAttribute("data-swiper-slide-index"),10)===e))[0]:t.slides.eq(e)[0];if("auto"!==t.params.slidesPerView&&t.params.slidesPerView>1)if(t.params.centeredSlides)(t.visibleSlides||m([])).each((e=>{n.push(e)}));else for(i=0;it.slides.length&&!r)break;n.push(a(e))}else n.push(a(t.activeIndex));for(i=0;is?e:s}(s||0===s)&&t.$wrapperEl.css("height",`${s}px`)},updateSlidesOffset:function(){const e=this,t=e.slides;for(let n=0;n=0&&d1&&p<=t.size||d<=0&&p>=t.size)&&(t.visibleSlides.push(o),t.visibleSlidesIndexes.push(e),r.eq(e).addClass(n.slideVisibleClass)),o.progress=i?-u:u,o.originalProgress=i?-c:c}t.visibleSlides=m(t.visibleSlides)},updateProgress:function(e){const t=this;if(void 0===e){const n=t.rtlTranslate?-1:1;e=t&&t.translate&&t.translate*n||0}const n=t.params,r=t.maxTranslate()-t.minTranslate();let{progress:i,isBeginning:s,isEnd:a}=t;const o=s,l=a;0===r?(i=0,s=!0,a=!0):(i=(e-t.minTranslate())/r,s=i<=0,a=i>=1),Object.assign(t,{progress:i,isBeginning:s,isEnd:a}),(n.watchSlidesProgress||n.centeredSlides&&n.autoHeight)&&t.updateSlidesProgress(e),s&&!o&&t.emit("reachBeginning toEdge"),a&&!l&&t.emit("reachEnd toEdge"),(o&&!s||l&&!a)&&t.emit("fromEdge"),t.emit("progress",i)},updateSlidesClasses:function(){const e=this,{slides:t,params:n,$wrapperEl:r,activeIndex:i,realIndex:s}=e,a=e.virtual&&n.virtual.enabled;let o;t.removeClass(`${n.slideActiveClass} ${n.slideNextClass} ${n.slidePrevClass} ${n.slideDuplicateActiveClass} ${n.slideDuplicateNextClass} ${n.slideDuplicatePrevClass}`),o=a?e.$wrapperEl.find(`.${n.slideClass}[data-swiper-slide-index="${i}"]`):t.eq(i),o.addClass(n.slideActiveClass),n.loop&&(o.hasClass(n.slideDuplicateClass)?r.children(`.${n.slideClass}:not(.${n.slideDuplicateClass})[data-swiper-slide-index="${s}"]`).addClass(n.slideDuplicateActiveClass):r.children(`.${n.slideClass}.${n.slideDuplicateClass}[data-swiper-slide-index="${s}"]`).addClass(n.slideDuplicateActiveClass));let l=o.nextAll(`.${n.slideClass}`).eq(0).addClass(n.slideNextClass);n.loop&&0===l.length&&(l=t.eq(0),l.addClass(n.slideNextClass));let u=o.prevAll(`.${n.slideClass}`).eq(0).addClass(n.slidePrevClass);n.loop&&0===u.length&&(u=t.eq(-1),u.addClass(n.slidePrevClass)),n.loop&&(l.hasClass(n.slideDuplicateClass)?r.children(`.${n.slideClass}:not(.${n.slideDuplicateClass})[data-swiper-slide-index="${l.attr("data-swiper-slide-index")}"]`).addClass(n.slideDuplicateNextClass):r.children(`.${n.slideClass}.${n.slideDuplicateClass}[data-swiper-slide-index="${l.attr("data-swiper-slide-index")}"]`).addClass(n.slideDuplicateNextClass),u.hasClass(n.slideDuplicateClass)?r.children(`.${n.slideClass}:not(.${n.slideDuplicateClass})[data-swiper-slide-index="${u.attr("data-swiper-slide-index")}"]`).addClass(n.slideDuplicatePrevClass):r.children(`.${n.slideClass}.${n.slideDuplicateClass}[data-swiper-slide-index="${u.attr("data-swiper-slide-index")}"]`).addClass(n.slideDuplicatePrevClass)),e.emitSlidesClasses()},updateActiveIndex:function(e){const t=this,n=t.rtlTranslate?t.translate:-t.translate,{slidesGrid:r,snapGrid:i,params:s,activeIndex:a,realIndex:o,snapIndex:l}=t;let u,c=e;if(void 0===c){for(let e=0;e=r[e]&&n=r[e]&&n=r[e]&&(c=e);s.normalizeSlideIndex&&(c<0||void 0===c)&&(c=0)}if(i.indexOf(n)>=0)u=i.indexOf(n);else{const e=Math.min(s.slidesPerGroupSkip,c);u=e+Math.floor((c-e)/s.slidesPerGroup)}if(u>=i.length&&(u=i.length-1),c===a)return void(u!==l&&(t.snapIndex=u,t.emit("snapIndexChange")));const d=parseInt(t.slides.eq(c).attr("data-swiper-slide-index")||c,10);Object.assign(t,{snapIndex:u,realIndex:d,previousIndex:a,activeIndex:c}),t.emit("activeIndexChange"),t.emit("snapIndexChange"),o!==d&&t.emit("realIndexChange"),(t.initialized||t.params.runCallbacksOnInit)&&t.emit("slideChange")},updateClickedSlide:function(e){const t=this,n=t.params,r=m(e).closest(`.${n.slideClass}`)[0];let i,s=!1;if(r)for(let e=0;el?l:r&&es?"next":i=l.length&&(m=l.length-1);const v=-l[m];if(o.normalizeSlideIndex)for(let e=0;e=n&&t=n&&t=n&&(a=e)}if(s.initialized&&a!==d){if(!s.allowSlideNext&&vs.translate&&v>s.maxTranslate()&&(d||0)!==a)return!1}let y;if(a!==(c||0)&&n&&s.emit("beforeSlideChangeStart"),s.updateProgress(v),y=a>d?"next":a{s.wrapperEl.style.scrollSnapType="",s._swiperImmediateVirtual=!1}))}else{if(!s.support.smoothScroll)return T({swiper:s,targetPosition:n,side:e?"left":"top"}),!0;h.scrollTo({[e?"left":"top"]:n,behavior:"smooth"})}return!0}return s.setTransition(t),s.setTranslate(v),s.updateActiveIndex(a),s.updateSlidesClasses(),s.emit("beforeTransitionStart",t,r),s.transitionStart(n,y),0===t?s.transitionEnd(n,y):s.animating||(s.animating=!0,s.onSlideToWrapperTransitionEnd||(s.onSlideToWrapperTransitionEnd=function(e){s&&!s.destroyed&&e.target===this&&(s.$wrapperEl[0].removeEventListener("transitionend",s.onSlideToWrapperTransitionEnd),s.$wrapperEl[0].removeEventListener("webkitTransitionEnd",s.onSlideToWrapperTransitionEnd),s.onSlideToWrapperTransitionEnd=null,delete s.onSlideToWrapperTransitionEnd,s.transitionEnd(n,y))}),s.$wrapperEl[0].addEventListener("transitionend",s.onSlideToWrapperTransitionEnd),s.$wrapperEl[0].addEventListener("webkitTransitionEnd",s.onSlideToWrapperTransitionEnd)),!0},slideToLoop:function(e=0,t=this.params.speed,n=!0,r){if("string"==typeof e){const t=parseInt(e,10);if(!isFinite(t))throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${e}] given.`);e=t}const i=this;let s=e;return i.params.loop&&(s+=i.loopedSlides),i.slideTo(s,t,n,r)},slideNext:function(e=this.params.speed,t=!0,n){const r=this,{animating:i,enabled:s,params:a}=r;if(!s)return r;let o=a.slidesPerGroup;"auto"===a.slidesPerView&&1===a.slidesPerGroup&&a.slidesPerGroupAuto&&(o=Math.max(r.slidesPerViewDynamic("current",!0),1));const l=r.activeIndexc(e)));let h=a[p.indexOf(d)-1];if(void 0===h&&i.cssMode){let e;a.forEach(((t,n)=>{d>=t&&(e=n)})),void 0!==e&&(h=a[e>0?e-1:e])}let f=0;if(void 0!==h&&(f=o.indexOf(h),f<0&&(f=r.activeIndex-1),"auto"===i.slidesPerView&&1===i.slidesPerGroup&&i.slidesPerGroupAuto&&(f=f-r.slidesPerViewDynamic("previous",!0)+1,f=Math.max(f,0))),i.rewind&&r.isBeginning){const i=r.params.virtual&&r.params.virtual.enabled&&r.virtual?r.virtual.slides.length-1:r.slides.length-1;return r.slideTo(i,e,t,n)}return r.slideTo(f,e,t,n)},slideReset:function(e=this.params.speed,t=!0,n){return this.slideTo(this.activeIndex,e,t,n)},slideToClosest:function(e=this.params.speed,t=!0,n,r=.5){const i=this;let s=i.activeIndex;const a=Math.min(i.params.slidesPerGroupSkip,s),o=a+Math.floor((s-a)/i.params.slidesPerGroup),l=i.rtlTranslate?i.translate:-i.translate;if(l>=i.snapGrid[o]){const e=i.snapGrid[o];l-e>(i.snapGrid[o+1]-e)*r&&(s+=i.params.slidesPerGroup)}else{const e=i.snapGrid[o-1];l-e<=(i.snapGrid[o]-e)*r&&(s-=i.params.slidesPerGroup)}return s=Math.max(s,0),s=Math.min(s,i.slidesGrid.length-1),i.slideTo(s,e,t,n)},slideToClickedSlide:function(){const e=this,{params:t,$wrapperEl:n}=e,r="auto"===t.slidesPerView?e.slidesPerViewDynamic():t.slidesPerView;let i,s=e.clickedIndex;if(t.loop){if(e.animating)return;i=parseInt(m(e.clickedSlide).attr("data-swiper-slide-index"),10),t.centeredSlides?se.slides.length-e.loopedSlides+r/2?(e.loopFix(),s=n.children(`.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),v((()=>{e.slideTo(s)}))):e.slideTo(s):s>e.slides.length-r?(e.loopFix(),s=n.children(`.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),v((()=>{e.slideTo(s)}))):e.slideTo(s)}else e.slideTo(s)}};var I={loopCreate:function(){const e=this,t=a(),{params:n,$wrapperEl:r}=e,i=r.children().length>0?m(r.children()[0].parentNode):r;i.children(`.${n.slideClass}.${n.slideDuplicateClass}`).remove();let s=i.children(`.${n.slideClass}`);if(n.loopFillGroupWithBlank){const e=n.slidesPerGroup-s.length%n.slidesPerGroup;if(e!==n.slidesPerGroup){for(let r=0;rs.length&&e.params.loopedSlidesLimit&&(e.loopedSlides=s.length);const o=[],l=[];s.each(((e,t)=>{m(e).attr("data-swiper-slide-index",t)}));for(let t=0;t=0;e-=1)i.prepend(m(o[e].cloneNode(!0)).addClass(n.slideDuplicateClass))},loopFix:function(){const e=this;e.emit("beforeLoopFix");const{activeIndex:t,slides:n,loopedSlides:r,allowSlidePrev:i,allowSlideNext:s,snapGrid:a,rtlTranslate:o}=e;let l;e.allowSlidePrev=!0,e.allowSlideNext=!0;const u=-a[t]-e.getTranslate();if(t=n.length-r){l=-n.length+t+r,l+=r;e.slideTo(l,0,!1,!0)&&0!==u&&e.setTranslate((o?-e.translate:e.translate)-u)}e.allowSlidePrev=i,e.allowSlideNext=s,e.emit("loopFix")},loopDestroy:function(){const{$wrapperEl:e,params:t,slides:n}=this;e.children(`.${t.slideClass}.${t.slideDuplicateClass},.${t.slideClass}.${t.slideBlankClass}`).remove(),n.removeAttr("data-swiper-slide-index")}};function z(e){const t=this,n=a(),r=l(),i=t.touchEventsData,{params:s,touches:o,enabled:u}=t;if(!u)return;if(t.animating&&s.preventInteractionOnTransition)return;!t.animating&&s.cssMode&&s.loop&&t.loopFix();let c=e;c.originalEvent&&(c=c.originalEvent);let d=m(c.target);if("wrapper"===s.touchEventsTarget&&!d.closest(t.wrapperEl).length)return;if(i.isTouchEvent="touchstart"===c.type,!i.isTouchEvent&&"which"in c&&3===c.which)return;if(!i.isTouchEvent&&"button"in c&&c.button>0)return;if(i.isTouched&&i.isMoved)return;const p=!!s.noSwipingClass&&""!==s.noSwipingClass,h=e.composedPath?e.composedPath():e.path;p&&c.target&&c.target.shadowRoot&&h&&(d=m(h[0]));const f=s.noSwipingSelector?s.noSwipingSelector:`.${s.noSwipingClass}`,g=!(!c.target||!c.target.shadowRoot);if(s.noSwiping&&(g?function(e,t=this){return function t(n){if(!n||n===a()||n===l())return null;n.assignedSlot&&(n=n.assignedSlot);const r=n.closest(e);return r||n.getRootNode?r||t(n.getRootNode().host):null}(t)}(f,d[0]):d.closest(f)[0]))return void(t.allowClick=!0);if(s.swipeHandler&&!d.closest(s.swipeHandler)[0])return;o.currentX="touchstart"===c.type?c.targetTouches[0].pageX:c.pageX,o.currentY="touchstart"===c.type?c.targetTouches[0].pageY:c.pageY;const v=o.currentX,_=o.currentY,b=s.edgeSwipeDetection||s.iOSEdgeSwipeDetection,w=s.edgeSwipeThreshold||s.iOSEdgeSwipeThreshold;if(b&&(v<=w||v>=r.innerWidth-w)){if("prevent"!==b)return;e.preventDefault()}if(Object.assign(i,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),o.startX=v,o.startY=_,i.touchStartTime=y(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,s.threshold>0&&(i.allowThresholdMove=!1),"touchstart"!==c.type){let e=!0;d.is(i.focusableElements)&&(e=!1,"SELECT"===d[0].nodeName&&(i.isTouched=!1)),n.activeElement&&m(n.activeElement).is(i.focusableElements)&&n.activeElement!==d[0]&&n.activeElement.blur();const r=e&&t.allowTouchMove&&s.touchStartPreventDefault;!s.touchStartForcePreventDefault&&!r||d[0].isContentEditable||c.preventDefault()}t.params.freeMode&&t.params.freeMode.enabled&&t.freeMode&&t.animating&&!s.cssMode&&t.freeMode.onTouchStart(),t.emit("touchStart",c)}function B(e){const t=a(),n=this,r=n.touchEventsData,{params:i,touches:s,rtlTranslate:o,enabled:l}=n;if(!l)return;let u=e;if(u.originalEvent&&(u=u.originalEvent),!r.isTouched)return void(r.startMoving&&r.isScrolling&&n.emit("touchMoveOpposite",u));if(r.isTouchEvent&&"touchmove"!==u.type)return;const c="touchmove"===u.type&&u.targetTouches&&(u.targetTouches[0]||u.changedTouches[0]),d="touchmove"===u.type?c.pageX:u.pageX,p="touchmove"===u.type?c.pageY:u.pageY;if(u.preventedByNestedSwiper)return s.startX=d,void(s.startY=p);if(!n.allowTouchMove)return m(u.target).is(r.focusableElements)||(n.allowClick=!1),void(r.isTouched&&(Object.assign(s,{startX:d,startY:p,currentX:d,currentY:p}),r.touchStartTime=y()));if(r.isTouchEvent&&i.touchReleaseOnEdges&&!i.loop)if(n.isVertical()){if(ps.startY&&n.translate>=n.minTranslate())return r.isTouched=!1,void(r.isMoved=!1)}else if(ds.startX&&n.translate>=n.minTranslate())return;if(r.isTouchEvent&&t.activeElement&&u.target===t.activeElement&&m(u.target).is(r.focusableElements))return r.isMoved=!0,void(n.allowClick=!1);if(r.allowTouchCallbacks&&n.emit("touchMove",u),u.targetTouches&&u.targetTouches.length>1)return;s.currentX=d,s.currentY=p;const h=s.currentX-s.startX,f=s.currentY-s.startY;if(n.params.threshold&&Math.sqrt(h**2+f**2)=25&&(e=180*Math.atan2(Math.abs(f),Math.abs(h))/Math.PI,r.isScrolling=n.isHorizontal()?e>i.touchAngle:90-e>i.touchAngle)}if(r.isScrolling&&n.emit("touchMoveOpposite",u),void 0===r.startMoving&&(s.currentX===s.startX&&s.currentY===s.startY||(r.startMoving=!0)),r.isScrolling)return void(r.isTouched=!1);if(!r.startMoving)return;n.allowClick=!1,!i.cssMode&&u.cancelable&&u.preventDefault(),i.touchMoveStopPropagation&&!i.nested&&u.stopPropagation(),r.isMoved||(i.loop&&!i.cssMode&&n.loopFix(),r.startTranslate=n.getTranslate(),n.setTransition(0),n.animating&&n.$wrapperEl.trigger("webkitTransitionEnd transitionend"),r.allowMomentumBounce=!1,!i.grabCursor||!0!==n.allowSlideNext&&!0!==n.allowSlidePrev||n.setGrabCursor(!0),n.emit("sliderFirstMove",u)),n.emit("sliderMove",u),r.isMoved=!0;let g=n.isHorizontal()?h:f;s.diff=g,g*=i.touchRatio,o&&(g=-g),n.swipeDirection=g>0?"prev":"next",r.currentTranslate=g+r.startTranslate;let v=!0,_=i.resistanceRatio;if(i.touchReleaseOnEdges&&(_=0),g>0&&r.currentTranslate>n.minTranslate()?(v=!1,i.resistance&&(r.currentTranslate=n.minTranslate()-1+(-n.minTranslate()+r.startTranslate+g)**_)):g<0&&r.currentTranslater.startTranslate&&(r.currentTranslate=r.startTranslate),n.allowSlidePrev||n.allowSlideNext||(r.currentTranslate=r.startTranslate),i.threshold>0){if(!(Math.abs(g)>i.threshold||r.allowThresholdMove))return void(r.currentTranslate=r.startTranslate);if(!r.allowThresholdMove)return r.allowThresholdMove=!0,s.startX=s.currentX,s.startY=s.currentY,r.currentTranslate=r.startTranslate,void(s.diff=n.isHorizontal()?s.currentX-s.startX:s.currentY-s.startY)}i.followFinger&&!i.cssMode&&((i.freeMode&&i.freeMode.enabled&&n.freeMode||i.watchSlidesProgress)&&(n.updateActiveIndex(),n.updateSlidesClasses()),n.params.freeMode&&i.freeMode.enabled&&n.freeMode&&n.freeMode.onTouchMove(),n.updateProgress(r.currentTranslate),n.setTranslate(r.currentTranslate))}function R(e){const t=this,n=t.touchEventsData,{params:r,touches:i,rtlTranslate:s,slidesGrid:a,enabled:o}=t;if(!o)return;let l=e;if(l.originalEvent&&(l=l.originalEvent),n.allowTouchCallbacks&&t.emit("touchEnd",l),n.allowTouchCallbacks=!1,!n.isTouched)return n.isMoved&&r.grabCursor&&t.setGrabCursor(!1),n.isMoved=!1,void(n.startMoving=!1);r.grabCursor&&n.isMoved&&n.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);const u=y(),c=u-n.touchStartTime;if(t.allowClick){const e=l.path||l.composedPath&&l.composedPath();t.updateClickedSlide(e&&e[0]||l.target),t.emit("tap click",l),c<300&&u-n.lastClickTime<300&&t.emit("doubleTap doubleClick",l)}if(n.lastClickTime=y(),v((()=>{t.destroyed||(t.allowClick=!0)})),!n.isTouched||!n.isMoved||!t.swipeDirection||0===i.diff||n.currentTranslate===n.startTranslate)return n.isTouched=!1,n.isMoved=!1,void(n.startMoving=!1);let d;if(n.isTouched=!1,n.isMoved=!1,n.startMoving=!1,d=r.followFinger?s?t.translate:-t.translate:-n.currentTranslate,r.cssMode)return;if(t.params.freeMode&&r.freeMode.enabled)return void t.freeMode.onTouchEnd({currentPos:d});let p=0,h=t.slidesSizesGrid[0];for(let e=0;e=a[e]&&d=a[e]&&(p=e,h=a[a.length-1]-a[a.length-2])}let f=null,g=null;r.rewind&&(t.isBeginning?g=t.params.virtual&&t.params.virtual.enabled&&t.virtual?t.virtual.slides.length-1:t.slides.length-1:t.isEnd&&(f=0));const m=(d-a[p])/h,_=pr.longSwipesMs){if(!r.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(m>=r.longSwipesRatio?t.slideTo(r.rewind&&t.isEnd?f:p+_):t.slideTo(p)),"prev"===t.swipeDirection&&(m>1-r.longSwipesRatio?t.slideTo(p+_):null!==g&&m<0&&Math.abs(m)>r.longSwipesRatio?t.slideTo(g):t.slideTo(p))}else{if(!r.shortSwipes)return void t.slideTo(t.activeIndex);t.navigation&&(l.target===t.navigation.nextEl||l.target===t.navigation.prevEl)?l.target===t.navigation.nextEl?t.slideTo(p+_):t.slideTo(p):("next"===t.swipeDirection&&t.slideTo(null!==f?f:p+_),"prev"===t.swipeDirection&&t.slideTo(null!==g?g:p))}}function N(){const e=this,{params:t,el:n}=e;if(n&&0===n.offsetWidth)return;t.breakpoints&&e.setBreakpoint();const{allowSlideNext:r,allowSlidePrev:i,snapGrid:s}=e;e.allowSlideNext=!0,e.allowSlidePrev=!0,e.updateSize(),e.updateSlides(),e.updateSlidesClasses(),("auto"===t.slidesPerView||t.slidesPerView>1)&&e.isEnd&&!e.isBeginning&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),e.autoplay&&e.autoplay.running&&e.autoplay.paused&&e.autoplay.run(),e.allowSlidePrev=i,e.allowSlideNext=r,e.params.watchOverflow&&s!==e.snapGrid&&e.checkOverflow()}function F(e){const t=this;t.enabled&&(t.allowClick||(t.params.preventClicks&&e.preventDefault(),t.params.preventClicksPropagation&&t.animating&&(e.stopPropagation(),e.stopImmediatePropagation())))}function G(){const e=this,{wrapperEl:t,rtlTranslate:n,enabled:r}=e;if(!r)return;let i;e.previousTranslate=e.translate,e.isHorizontal()?e.translate=-t.scrollLeft:e.translate=-t.scrollTop,0===e.translate&&(e.translate=0),e.updateActiveIndex(),e.updateSlidesClasses();const s=e.maxTranslate()-e.minTranslate();i=0===s?0:(e.translate-e.minTranslate())/s,i!==e.progress&&e.updateProgress(n?-e.translate:e.translate),e.emit("setTranslate",e.translate,!1)}let Y=!1;function X(){}const j=(e,t)=>{const n=a(),{params:r,touchEvents:i,el:s,wrapperEl:o,device:l,support:u}=e,c=!!r.nested,d="on"===t?"addEventListener":"removeEventListener",p=t;if(u.touch){const t=!("touchstart"!==i.start||!u.passiveListener||!r.passiveListeners)&&{passive:!0,capture:!1};s[d](i.start,e.onTouchStart,t),s[d](i.move,e.onTouchMove,u.passiveListener?{passive:!1,capture:c}:c),s[d](i.end,e.onTouchEnd,t),i.cancel&&s[d](i.cancel,e.onTouchEnd,t)}else s[d](i.start,e.onTouchStart,!1),n[d](i.move,e.onTouchMove,c),n[d](i.end,e.onTouchEnd,!1);(r.preventClicks||r.preventClicksPropagation)&&s[d]("click",e.onClick,!0),r.cssMode&&o[d]("scroll",e.onScroll),r.updateOnWindowResize?e[p](l.ios||l.android?"resize orientationchange observerUpdate":"resize observerUpdate",N,!0):e[p]("observerUpdate",N,!0)};var H={attachEvents:function(){const e=this,t=a(),{params:n,support:r}=e;e.onTouchStart=z.bind(e),e.onTouchMove=B.bind(e),e.onTouchEnd=R.bind(e),n.cssMode&&(e.onScroll=G.bind(e)),e.onClick=F.bind(e),r.touch&&!Y&&(t.addEventListener("touchstart",X),Y=!0),j(e,"on")},detachEvents:function(){j(this,"off")}};const q=(e,t)=>e.grid&&t.grid&&t.grid.rows>1;var V={setBreakpoint:function(){const e=this,{activeIndex:t,initialized:n,loopedSlides:r=0,params:i,$el:s}=e,a=i.breakpoints;if(!a||a&&0===Object.keys(a).length)return;const o=e.getBreakpoint(a,e.params.breakpointsBase,e.el);if(!o||e.currentBreakpoint===o)return;const l=(o in a?a[o]:void 0)||e.originalParams,u=q(e,i),c=q(e,l),d=i.enabled;u&&!c?(s.removeClass(`${i.containerModifierClass}grid ${i.containerModifierClass}grid-column`),e.emitContainerClasses()):!u&&c&&(s.addClass(`${i.containerModifierClass}grid`),(l.grid.fill&&"column"===l.grid.fill||!l.grid.fill&&"column"===i.grid.fill)&&s.addClass(`${i.containerModifierClass}grid-column`),e.emitContainerClasses()),["navigation","pagination","scrollbar"].forEach((t=>{const n=i[t]&&i[t].enabled,r=l[t]&&l[t].enabled;n&&!r&&e[t].disable(),!n&&r&&e[t].enable()}));const p=l.direction&&l.direction!==i.direction,h=i.loop&&(l.slidesPerView!==i.slidesPerView||p);p&&n&&e.changeDirection(),w(e.params,l);const f=e.params.enabled;Object.assign(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),d&&!f?e.disable():!d&&f&&e.enable(),e.currentBreakpoint=o,e.emit("_beforeBreakpoint",l),h&&n&&(e.loopDestroy(),e.loopCreate(),e.updateSlides(),e.slideTo(t-r+e.loopedSlides,0,!1)),e.emit("breakpoint",l)},getBreakpoint:function(e,t="window",n){if(!e||"container"===t&&!n)return;let r=!1;const i=l(),s="window"===t?i.innerHeight:n.clientHeight,a=Object.keys(e).map((e=>{if("string"==typeof e&&0===e.indexOf("@")){const t=parseFloat(e.substr(1));return{value:s*t,point:e}}return{value:e,point:e}}));a.sort(((e,t)=>parseInt(e.value,10)-parseInt(t.value,10)));for(let e=0;e{"object"==typeof e?Object.keys(e).forEach((r=>{e[r]&&n.push(t+r)})):"string"==typeof e&&n.push(t+e)})),n}(["initialized",n.direction,{"pointer-events":!a.touch},{"free-mode":e.params.freeMode&&n.freeMode.enabled},{autoheight:n.autoHeight},{rtl:r},{grid:n.grid&&n.grid.rows>1},{"grid-column":n.grid&&n.grid.rows>1&&"column"===n.grid.fill},{android:s.android},{ios:s.ios},{"css-mode":n.cssMode},{centered:n.cssMode&&n.centeredSlides},{"watch-progress":n.watchSlidesProgress}],n.containerModifierClass);t.push(...o),i.addClass([...t].join(" ")),e.emitContainerClasses()},removeClasses:function(){const{$el:e,classNames:t}=this;e.removeClass(t.join(" ")),this.emitContainerClasses()}};var U={init:!0,direction:"horizontal",touchEventsTarget:"wrapper",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!0,nested:!1,createElements:!1,enabled:!0,focusableElements:"input, select, option, textarea, button, video, label",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsBase:"window",spaceBetween:0,slidesPerView:1,slidesPerGroup:1,slidesPerGroupSkip:0,slidesPerGroupAuto:!1,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopedSlidesLimit:!0,loopFillGroupWithBlank:!1,loopPreventsSlide:!0,rewind:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,maxBackfaceHiddenSlides:10,containerModifierClass:"swiper-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0,_emitClasses:!1};function K(e,t){return function(n={}){const r=Object.keys(n)[0],i=n[r];"object"==typeof i&&null!==i?(["navigation","pagination","scrollbar"].indexOf(r)>=0&&!0===e[r]&&(e[r]={auto:!0}),r in e&&"enabled"in i?(!0===e[r]&&(e[r]={enabled:!0}),"object"!=typeof e[r]||"enabled"in e[r]||(e[r].enabled=!0),e[r]||(e[r]={enabled:!1}),w(t,n)):w(t,n)):w(t,n)}}const Q={eventsEmitter:O,update:L,translate:A,transition:{setTransition:function(e,t){const n=this;n.params.cssMode||n.$wrapperEl.transition(e),n.emit("setTransition",e,t)},transitionStart:function(e=!0,t){const n=this,{params:r}=n;r.cssMode||(r.autoHeight&&n.updateAutoHeight(),D({swiper:n,runCallbacks:e,direction:t,step:"Start"}))},transitionEnd:function(e=!0,t){const n=this,{params:r}=n;n.animating=!1,r.cssMode||(n.setTransition(0),D({swiper:n,runCallbacks:e,direction:t,step:"End"}))}},slide:$,loop:I,grabCursor:{setGrabCursor:function(e){const t=this;if(t.support.touch||!t.params.simulateTouch||t.params.watchOverflow&&t.isLocked||t.params.cssMode)return;const n="container"===t.params.touchEventsTarget?t.el:t.wrapperEl;n.style.cursor="move",n.style.cursor=e?"grabbing":"grab"},unsetGrabCursor:function(){const e=this;e.support.touch||e.params.watchOverflow&&e.isLocked||e.params.cssMode||(e["container"===e.params.touchEventsTarget?"el":"wrapperEl"].style.cursor="")}},events:H,breakpoints:V,checkOverflow:{checkOverflow:function(){const e=this,{isLocked:t,params:n}=e,{slidesOffsetBefore:r}=n;if(r){const t=e.slides.length-1,n=e.slidesGrid[t]+e.slidesSizesGrid[t]+2*r;e.isLocked=e.size>n}else e.isLocked=1===e.snapGrid.length;!0===n.allowSlideNext&&(e.allowSlideNext=!e.isLocked),!0===n.allowSlidePrev&&(e.allowSlidePrev=!e.isLocked),t&&t!==e.isLocked&&(e.isEnd=!1),t!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock")}},classes:W,images:{loadImage:function(e,t,n,r,i,s){const a=l();let o;function u(){s&&s()}m(e).parent("picture")[0]||e.complete&&i?u():t?(o=new a.Image,o.onload=u,o.onerror=u,r&&(o.sizes=r),n&&(o.srcset=n),t&&(o.src=t)):u()},preloadImages:function(){const e=this;function t(){null!=e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(),e.emit("imagesReady")))}e.imagesToLoad=e.$el.find("img");for(let n=0;n1){const e=[];return m(n.el).each((t=>{const r=w({},n,{el:t});e.push(new J(r))})),e}const r=this;r.__swiper__=!0,r.support=k(),r.device=M({userAgent:n.userAgent}),r.browser=P(),r.eventsListeners={},r.eventsAnyListeners=[],r.modules=[...r.__modules__],n.modules&&Array.isArray(n.modules)&&r.modules.push(...n.modules);const i={};r.modules.forEach((e=>{e({swiper:r,extendParams:K(n,i),on:r.on.bind(r),once:r.once.bind(r),off:r.off.bind(r),emit:r.emit.bind(r)})}));const s=w({},U,i);return r.params=w({},s,Z,n),r.originalParams=w({},r.params),r.passedParams=w({},n),r.params&&r.params.on&&Object.keys(r.params.on).forEach((e=>{r.on(e,r.params.on[e])})),r.params&&r.params.onAny&&r.onAny(r.params.onAny),r.$=m,Object.assign(r,{enabled:r.params.enabled,el:t,classNames:[],slides:m(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal(){return"horizontal"===r.params.direction},isVertical(){return"vertical"===r.params.direction},activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,allowSlideNext:r.params.allowSlideNext,allowSlidePrev:r.params.allowSlidePrev,touchEvents:function(){const e=["touchstart","touchmove","touchend","touchcancel"],t=["pointerdown","pointermove","pointerup"];return r.touchEventsTouch={start:e[0],move:e[1],end:e[2],cancel:e[3]},r.touchEventsDesktop={start:t[0],move:t[1],end:t[2]},r.support.touch||!r.params.simulateTouch?r.touchEventsTouch:r.touchEventsDesktop}(),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:r.params.focusableElements,lastClickTime:y(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:r.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),r.emit("_swiper"),r.params.init&&r.init(),r}enable(){const e=this;e.enabled||(e.enabled=!0,e.params.grabCursor&&e.setGrabCursor(),e.emit("enable"))}disable(){const e=this;e.enabled&&(e.enabled=!1,e.params.grabCursor&&e.unsetGrabCursor(),e.emit("disable"))}setProgress(e,t){const n=this;e=Math.min(Math.max(e,0),1);const r=n.minTranslate(),i=(n.maxTranslate()-r)*e+r;n.translateTo(i,void 0===t?0:t),n.updateActiveIndex(),n.updateSlidesClasses()}emitContainerClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=e.el.className.split(" ").filter((t=>0===t.indexOf("swiper")||0===t.indexOf(e.params.containerModifierClass)));e.emit("_containerClasses",t.join(" "))}getSlideClasses(e){const t=this;return t.destroyed?"":e.className.split(" ").filter((e=>0===e.indexOf("swiper-slide")||0===e.indexOf(t.params.slideClass))).join(" ")}emitSlidesClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=[];e.slides.each((n=>{const r=e.getSlideClasses(n);t.push({slideEl:n,classNames:r}),e.emit("_slideClass",n,r)})),e.emit("_slideClasses",t)}slidesPerViewDynamic(e="current",t=!1){const{params:n,slides:r,slidesGrid:i,slidesSizesGrid:s,size:a,activeIndex:o}=this;let l=1;if(n.centeredSlides){let e,t=r[o].swiperSlideSize;for(let n=o+1;na&&(e=!0));for(let n=o-1;n>=0;n-=1)r[n]&&!e&&(t+=r[n].swiperSlideSize,l+=1,t>a&&(e=!0))}else if("current"===e)for(let e=o+1;e=0;e-=1){i[o]-i[e]1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),i||r()),n.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit("update")}changeDirection(e,t=!0){const n=this,r=n.params.direction;return e||(e="horizontal"===r?"vertical":"horizontal"),e===r||"horizontal"!==e&&"vertical"!==e||(n.$el.removeClass(`${n.params.containerModifierClass}${r}`).addClass(`${n.params.containerModifierClass}${e}`),n.emitContainerClasses(),n.params.direction=e,n.slides.each((t=>{"vertical"===e?t.style.width="":t.style.height=""})),n.emit("changeDirection"),t&&n.update()),n}changeLanguageDirection(e){const t=this;t.rtl&&"rtl"===e||!t.rtl&&"ltr"===e||(t.rtl="rtl"===e,t.rtlTranslate="horizontal"===t.params.direction&&t.rtl,t.rtl?(t.$el.addClass(`${t.params.containerModifierClass}rtl`),t.el.dir="rtl"):(t.$el.removeClass(`${t.params.containerModifierClass}rtl`),t.el.dir="ltr"),t.update())}mount(e){const t=this;if(t.mounted)return!0;const n=m(e||t.params.el);if(!(e=n[0]))return!1;e.swiper=t;const r=()=>`.${(t.params.wrapperClass||"").trim().split(" ").join(".")}`;let i=(()=>{if(e&&e.shadowRoot&&e.shadowRoot.querySelector){const t=m(e.shadowRoot.querySelector(r()));return t.children=e=>n.children(e),t}return n.children?n.children(r()):m(n).children(r())})();if(0===i.length&&t.params.createElements){const e=a().createElement("div");i=m(e),e.className=t.params.wrapperClass,n.append(e),n.children(`.${t.params.slideClass}`).each((e=>{i.append(e)}))}return Object.assign(t,{$el:n,el:e,$wrapperEl:i,wrapperEl:i[0],mounted:!0,rtl:"rtl"===e.dir.toLowerCase()||"rtl"===n.css("direction"),rtlTranslate:"horizontal"===t.params.direction&&("rtl"===e.dir.toLowerCase()||"rtl"===n.css("direction")),wrongRTL:"-webkit-box"===i.css("display")}),!0}init(e){const t=this;if(t.initialized)return t;return!1===t.mount(e)||(t.emit("beforeInit"),t.params.breakpoints&&t.setBreakpoint(),t.addClasses(),t.params.loop&&t.loopCreate(),t.updateSize(),t.updateSlides(),t.params.watchOverflow&&t.checkOverflow(),t.params.grabCursor&&t.enabled&&t.setGrabCursor(),t.params.preloadImages&&t.preloadImages(),t.params.loop?t.slideTo(t.params.initialSlide+t.loopedSlides,0,t.params.runCallbacksOnInit,!1,!0):t.slideTo(t.params.initialSlide,0,t.params.runCallbacksOnInit,!1,!0),t.attachEvents(),t.initialized=!0,t.emit("init"),t.emit("afterInit")),t}destroy(e=!0,t=!0){const n=this,{params:r,$el:i,$wrapperEl:s,slides:a}=n;return void 0===n.params||n.destroyed||(n.emit("beforeDestroy"),n.initialized=!1,n.detachEvents(),r.loop&&n.loopDestroy(),t&&(n.removeClasses(),i.removeAttr("style"),s.removeAttr("style"),a&&a.length&&a.removeClass([r.slideVisibleClass,r.slideActiveClass,r.slideNextClass,r.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index")),n.emit("destroy"),Object.keys(n.eventsListeners).forEach((e=>{n.off(e)})),!1!==e&&(n.$el[0].swiper=null,function(e){const t=e;Object.keys(t).forEach((e=>{try{t[e]=null}catch(e){}try{delete t[e]}catch(e){}}))}(n)),n.destroyed=!0),null}static extendDefaults(e){w(Z,e)}static get extendedDefaults(){return Z}static get defaults(){return U}static installModule(e){J.prototype.__modules__||(J.prototype.__modules__=[]);const t=J.prototype.__modules__;"function"==typeof e&&t.indexOf(e)<0&&t.push(e)}static use(e){return Array.isArray(e)?(e.forEach((e=>J.installModule(e))),J):(J.installModule(e),J)}}Object.keys(Q).forEach((e=>{Object.keys(Q[e]).forEach((t=>{J.prototype[t]=Q[e][t]}))})),J.use([function({swiper:e,on:t,emit:n}){const r=l();let i=null,s=null;const a=()=>{e&&!e.destroyed&&e.initialized&&(n("beforeResize"),n("resize"))},o=()=>{e&&!e.destroyed&&e.initialized&&n("orientationchange")};t("init",(()=>{e.params.resizeObserver&&void 0!==r.ResizeObserver?e&&!e.destroyed&&e.initialized&&(i=new ResizeObserver((t=>{s=r.requestAnimationFrame((()=>{const{width:n,height:r}=e;let i=n,s=r;t.forEach((({contentBoxSize:t,contentRect:n,target:r})=>{r&&r!==e.el||(i=n?n.width:(t[0]||t).inlineSize,s=n?n.height:(t[0]||t).blockSize)})),i===n&&s===r||a()}))})),i.observe(e.el)):(r.addEventListener("resize",a),r.addEventListener("orientationchange",o))})),t("destroy",(()=>{s&&r.cancelAnimationFrame(s),i&&i.unobserve&&e.el&&(i.unobserve(e.el),i=null),r.removeEventListener("resize",a),r.removeEventListener("orientationchange",o)}))},function({swiper:e,extendParams:t,on:n,emit:r}){const i=[],s=l(),a=(e,t={})=>{const n=new(s.MutationObserver||s.WebkitMutationObserver)((e=>{if(1===e.length)return void r("observerUpdate",e[0]);const t=function(){r("observerUpdate",e[0])};s.requestAnimationFrame?s.requestAnimationFrame(t):s.setTimeout(t,0)}));n.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),i.push(n)};t({observer:!1,observeParents:!1,observeSlideChildren:!1}),n("init",(()=>{if(e.params.observer){if(e.params.observeParents){const t=e.$el.parents();for(let e=0;e{i.forEach((e=>{e.disconnect()})),i.splice(0,i.length)}))}]);var ee=J;function te(e,t,n,r){const i=a();return e.params.createElements&&Object.keys(r).forEach((s=>{if(!n[s]&&!0===n.auto){let a=e.$el.children(`.${r[s]}`)[0];a||(a=i.createElement("div"),a.className=r[s],e.$el.append(a)),n[s]=a,t[s]=a}})),n}function ne({swiper:e,extendParams:t,on:n,emit:r}){function i(t){let n;return t&&(n=m(t),e.params.uniqueNavElements&&"string"==typeof t&&n.length>1&&1===e.$el.find(t).length&&(n=e.$el.find(t))),n}function s(t,n){const r=e.params.navigation;t&&t.length>0&&(t[n?"addClass":"removeClass"](r.disabledClass),t[0]&&"BUTTON"===t[0].tagName&&(t[0].disabled=n),e.params.watchOverflow&&e.enabled&&t[e.isLocked?"addClass":"removeClass"](r.lockClass))}function a(){if(e.params.loop)return;const{$nextEl:t,$prevEl:n}=e.navigation;s(n,e.isBeginning&&!e.params.rewind),s(t,e.isEnd&&!e.params.rewind)}function o(t){t.preventDefault(),(!e.isBeginning||e.params.loop||e.params.rewind)&&(e.slidePrev(),r("navigationPrev"))}function l(t){t.preventDefault(),(!e.isEnd||e.params.loop||e.params.rewind)&&(e.slideNext(),r("navigationNext"))}function u(){const t=e.params.navigation;if(e.params.navigation=te(e,e.originalParams.navigation,e.params.navigation,{nextEl:"swiper-button-next",prevEl:"swiper-button-prev"}),!t.nextEl&&!t.prevEl)return;const n=i(t.nextEl),r=i(t.prevEl);n&&n.length>0&&n.on("click",l),r&&r.length>0&&r.on("click",o),Object.assign(e.navigation,{$nextEl:n,nextEl:n&&n[0],$prevEl:r,prevEl:r&&r[0]}),e.enabled||(n&&n.addClass(t.lockClass),r&&r.addClass(t.lockClass))}function c(){const{$nextEl:t,$prevEl:n}=e.navigation;t&&t.length&&(t.off("click",l),t.removeClass(e.params.navigation.disabledClass)),n&&n.length&&(n.off("click",o),n.removeClass(e.params.navigation.disabledClass))}t({navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock",navigationDisabledClass:"swiper-navigation-disabled"}}),e.navigation={nextEl:null,$nextEl:null,prevEl:null,$prevEl:null},n("init",(()=>{!1===e.params.navigation.enabled?d():(u(),a())})),n("toEdge fromEdge lock unlock",(()=>{a()})),n("destroy",(()=>{c()})),n("enable disable",(()=>{const{$nextEl:t,$prevEl:n}=e.navigation;t&&t[e.enabled?"removeClass":"addClass"](e.params.navigation.lockClass),n&&n[e.enabled?"removeClass":"addClass"](e.params.navigation.lockClass)})),n("click",((t,n)=>{const{$nextEl:i,$prevEl:s}=e.navigation,a=n.target;if(e.params.navigation.hideOnClick&&!m(a).is(s)&&!m(a).is(i)){if(e.pagination&&e.params.pagination&&e.params.pagination.clickable&&(e.pagination.el===a||e.pagination.el.contains(a)))return;let t;i?t=i.hasClass(e.params.navigation.hiddenClass):s&&(t=s.hasClass(e.params.navigation.hiddenClass)),r(!0===t?"navigationShow":"navigationHide"),i&&i.toggleClass(e.params.navigation.hiddenClass),s&&s.toggleClass(e.params.navigation.hiddenClass)}}));const d=()=>{e.$el.addClass(e.params.navigation.navigationDisabledClass),c()};Object.assign(e.navigation,{enable:()=>{e.$el.removeClass(e.params.navigation.navigationDisabledClass),u(),a()},disable:d,update:a,init:u,destroy:c})}function re(e=""){return`.${e.trim().replace(/([\.:!\/])/g,"\\$1").replace(/ /g,".")}`}function ie({swiper:e,extendParams:t,on:n,emit:r}){const i="swiper-pagination";let s;t({pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:e=>e,formatFractionTotal:e=>e,bulletClass:`${i}-bullet`,bulletActiveClass:`${i}-bullet-active`,modifierClass:`${i}-`,currentClass:`${i}-current`,totalClass:`${i}-total`,hiddenClass:`${i}-hidden`,progressbarFillClass:`${i}-progressbar-fill`,progressbarOppositeClass:`${i}-progressbar-opposite`,clickableClass:`${i}-clickable`,lockClass:`${i}-lock`,horizontalClass:`${i}-horizontal`,verticalClass:`${i}-vertical`,paginationDisabledClass:`${i}-disabled`}}),e.pagination={el:null,$el:null,bullets:[]};let a=0;function o(){return!e.params.pagination.el||!e.pagination.el||!e.pagination.$el||0===e.pagination.$el.length}function l(t,n){const{bulletActiveClass:r}=e.params.pagination;t[n]().addClass(`${r}-${n}`)[n]().addClass(`${r}-${n}-${n}`)}function u(){const t=e.rtl,n=e.params.pagination;if(o())return;const i=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,u=e.pagination.$el;let c;const d=e.params.loop?Math.ceil((i-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length;if(e.params.loop?(c=Math.ceil((e.activeIndex-e.loopedSlides)/e.params.slidesPerGroup),c>i-1-2*e.loopedSlides&&(c-=i-2*e.loopedSlides),c>d-1&&(c-=d),c<0&&"bullets"!==e.params.paginationType&&(c=d+c)):c=void 0!==e.snapIndex?e.snapIndex:e.activeIndex||0,"bullets"===n.type&&e.pagination.bullets&&e.pagination.bullets.length>0){const r=e.pagination.bullets;let i,o,d;if(n.dynamicBullets&&(s=r.eq(0)[e.isHorizontal()?"outerWidth":"outerHeight"](!0),u.css(e.isHorizontal()?"width":"height",s*(n.dynamicMainBullets+4)+"px"),n.dynamicMainBullets>1&&void 0!==e.previousIndex&&(a+=c-(e.previousIndex-e.loopedSlides||0),a>n.dynamicMainBullets-1?a=n.dynamicMainBullets-1:a<0&&(a=0)),i=Math.max(c-a,0),o=i+(Math.min(r.length,n.dynamicMainBullets)-1),d=(o+i)/2),r.removeClass(["","-next","-next-next","-prev","-prev-prev","-main"].map((e=>`${n.bulletActiveClass}${e}`)).join(" ")),u.length>1)r.each((e=>{const t=m(e),r=t.index();r===c&&t.addClass(n.bulletActiveClass),n.dynamicBullets&&(r>=i&&r<=o&&t.addClass(`${n.bulletActiveClass}-main`),r===i&&l(t,"prev"),r===o&&l(t,"next"))}));else{const t=r.eq(c),s=t.index();if(t.addClass(n.bulletActiveClass),n.dynamicBullets){const t=r.eq(i),a=r.eq(o);for(let e=i;e<=o;e+=1)r.eq(e).addClass(`${n.bulletActiveClass}-main`);if(e.params.loop)if(s>=r.length){for(let e=n.dynamicMainBullets;e>=0;e-=1)r.eq(r.length-e).addClass(`${n.bulletActiveClass}-main`);r.eq(r.length-n.dynamicMainBullets-1).addClass(`${n.bulletActiveClass}-prev`)}else l(t,"prev"),l(a,"next");else l(t,"prev"),l(a,"next")}}if(n.dynamicBullets){const i=Math.min(r.length,n.dynamicMainBullets+4),a=(s*i-s)/2-d*s,o=t?"right":"left";r.css(e.isHorizontal()?o:"top",`${a}px`)}}if("fraction"===n.type&&(u.find(re(n.currentClass)).text(n.formatFractionCurrent(c+1)),u.find(re(n.totalClass)).text(n.formatFractionTotal(d))),"progressbar"===n.type){let t;t=n.progressbarOpposite?e.isHorizontal()?"vertical":"horizontal":e.isHorizontal()?"horizontal":"vertical";const r=(c+1)/d;let i=1,s=1;"horizontal"===t?i=r:s=r,u.find(re(n.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${i}) scaleY(${s})`).transition(e.params.speed)}"custom"===n.type&&n.renderCustom?(u.html(n.renderCustom(e,c+1,d)),r("paginationRender",u[0])):r("paginationUpdate",u[0]),e.params.watchOverflow&&e.enabled&&u[e.isLocked?"addClass":"removeClass"](n.lockClass)}function c(){const t=e.params.pagination;if(o())return;const n=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,i=e.pagination.$el;let s="";if("bullets"===t.type){let r=e.params.loop?Math.ceil((n-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length;e.params.freeMode&&e.params.freeMode.enabled&&!e.params.loop&&r>n&&(r=n);for(let n=0;n`;i.html(s),e.pagination.bullets=i.find(re(t.bulletClass))}"fraction"===t.type&&(s=t.renderFraction?t.renderFraction.call(e,t.currentClass,t.totalClass):` / `,i.html(s)),"progressbar"===t.type&&(s=t.renderProgressbar?t.renderProgressbar.call(e,t.progressbarFillClass):``,i.html(s)),"custom"!==t.type&&r("paginationRender",e.pagination.$el[0])}function d(){e.params.pagination=te(e,e.originalParams.pagination,e.params.pagination,{el:"swiper-pagination"});const t=e.params.pagination;if(!t.el)return;let n=m(t.el);0!==n.length&&(e.params.uniqueNavElements&&"string"==typeof t.el&&n.length>1&&(n=e.$el.find(t.el),n.length>1&&(n=n.filter((t=>m(t).parents(".swiper")[0]===e.el)))),"bullets"===t.type&&t.clickable&&n.addClass(t.clickableClass),n.addClass(t.modifierClass+t.type),n.addClass(e.isHorizontal()?t.horizontalClass:t.verticalClass),"bullets"===t.type&&t.dynamicBullets&&(n.addClass(`${t.modifierClass}${t.type}-dynamic`),a=0,t.dynamicMainBullets<1&&(t.dynamicMainBullets=1)),"progressbar"===t.type&&t.progressbarOpposite&&n.addClass(t.progressbarOppositeClass),t.clickable&&n.on("click",re(t.bulletClass),(function(t){t.preventDefault();let n=m(this).index()*e.params.slidesPerGroup;e.params.loop&&(n+=e.loopedSlides),e.slideTo(n)})),Object.assign(e.pagination,{$el:n,el:n[0]}),e.enabled||n.addClass(t.lockClass))}function p(){const t=e.params.pagination;if(o())return;const n=e.pagination.$el;n.removeClass(t.hiddenClass),n.removeClass(t.modifierClass+t.type),n.removeClass(e.isHorizontal()?t.horizontalClass:t.verticalClass),e.pagination.bullets&&e.pagination.bullets.removeClass&&e.pagination.bullets.removeClass(t.bulletActiveClass),t.clickable&&n.off("click",re(t.bulletClass))}n("init",(()=>{!1===e.params.pagination.enabled?h():(d(),c(),u())})),n("activeIndexChange",(()=>{(e.params.loop||void 0===e.snapIndex)&&u()})),n("snapIndexChange",(()=>{e.params.loop||u()})),n("slidesLengthChange",(()=>{e.params.loop&&(c(),u())})),n("snapGridLengthChange",(()=>{e.params.loop||(c(),u())})),n("destroy",(()=>{p()})),n("enable disable",(()=>{const{$el:t}=e.pagination;t&&t[e.enabled?"removeClass":"addClass"](e.params.pagination.lockClass)})),n("lock unlock",(()=>{u()})),n("click",((t,n)=>{const i=n.target,{$el:s}=e.pagination;if(e.params.pagination.el&&e.params.pagination.hideOnClick&&s&&s.length>0&&!m(i).hasClass(e.params.pagination.bulletClass)){if(e.navigation&&(e.navigation.nextEl&&i===e.navigation.nextEl||e.navigation.prevEl&&i===e.navigation.prevEl))return;const t=s.hasClass(e.params.pagination.hiddenClass);r(!0===t?"paginationShow":"paginationHide"),s.toggleClass(e.params.pagination.hiddenClass)}}));const h=()=>{e.$el.addClass(e.params.pagination.paginationDisabledClass),e.pagination.$el&&e.pagination.$el.addClass(e.params.pagination.paginationDisabledClass),p()};Object.assign(e.pagination,{enable:()=>{e.$el.removeClass(e.params.pagination.paginationDisabledClass),e.pagination.$el&&e.pagination.$el.removeClass(e.params.pagination.paginationDisabledClass),d(),c(),u()},disable:h,render:c,update:u,init:d,destroy:p})}function se({swiper:e,extendParams:t,on:n}){t({a11y:{enabled:!0,notificationClass:"swiper-notification",prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",slideLabelMessage:"{{index}} / {{slidesLength}}",containerMessage:null,containerRoleDescriptionMessage:null,itemRoleDescriptionMessage:null,slideRole:"group",id:null}}),e.a11y={clicked:!1};let r=null;function i(e){const t=r;0!==t.length&&(t.html(""),t.html(e))}function s(e){e.attr("tabIndex","0")}function a(e){e.attr("tabIndex","-1")}function o(e,t){e.attr("role",t)}function l(e,t){e.attr("aria-roledescription",t)}function u(e,t){e.attr("aria-label",t)}function c(e){e.attr("aria-disabled",!0)}function d(e){e.attr("aria-disabled",!1)}function p(t){if(13!==t.keyCode&&32!==t.keyCode)return;const n=e.params.a11y,r=m(t.target);e.navigation&&e.navigation.$nextEl&&r.is(e.navigation.$nextEl)&&(e.isEnd&&!e.params.loop||e.slideNext(),e.isEnd?i(n.lastSlideMessage):i(n.nextSlideMessage)),e.navigation&&e.navigation.$prevEl&&r.is(e.navigation.$prevEl)&&(e.isBeginning&&!e.params.loop||e.slidePrev(),e.isBeginning?i(n.firstSlideMessage):i(n.prevSlideMessage)),e.pagination&&r.is(re(e.params.pagination.bulletClass))&&r[0].click()}function h(){return e.pagination&&e.pagination.bullets&&e.pagination.bullets.length}function f(){return h()&&e.params.pagination.clickable}const g=(e,t,n)=>{s(e),"BUTTON"!==e[0].tagName&&(o(e,"button"),e.on("keydown",p)),u(e,n),function(e,t){e.attr("aria-controls",t)}(e,t)},v=()=>{e.a11y.clicked=!0},y=()=>{requestAnimationFrame((()=>{requestAnimationFrame((()=>{e.destroyed||(e.a11y.clicked=!1)}))}))},_=t=>{if(e.a11y.clicked)return;const n=t.target.closest(`.${e.params.slideClass}`);if(!n||!e.slides.includes(n))return;const r=e.slides.indexOf(n)===e.activeIndex,i=e.params.watchSlidesProgress&&e.visibleSlides&&e.visibleSlides.includes(n);r||i||t.sourceCapabilities&&t.sourceCapabilities.firesTouchEvents||(e.isHorizontal()?e.el.scrollLeft=0:e.el.scrollTop=0,e.slideTo(e.slides.indexOf(n),0))},b=()=>{const t=e.params.a11y;t.itemRoleDescriptionMessage&&l(m(e.slides),t.itemRoleDescriptionMessage),t.slideRole&&o(m(e.slides),t.slideRole);const n=e.params.loop?e.slides.filter((t=>!t.classList.contains(e.params.slideDuplicateClass))).length:e.slides.length;t.slideLabelMessage&&e.slides.each(((r,i)=>{const s=m(r),a=e.params.loop?parseInt(s.attr("data-swiper-slide-index"),10):i;u(s,t.slideLabelMessage.replace(/\{\{index\}\}/,a+1).replace(/\{\{slidesLength\}\}/,n))}))},w=()=>{const t=e.params.a11y;e.$el.append(r);const n=e.$el;t.containerRoleDescriptionMessage&&l(n,t.containerRoleDescriptionMessage),t.containerMessage&&u(n,t.containerMessage);const i=e.$wrapperEl,s=t.id||i.attr("id")||`swiper-wrapper-${function(e=16){return"x".repeat(e).replace(/x/g,(()=>Math.round(16*Math.random()).toString(16)))}(16)}`,a=e.params.autoplay&&e.params.autoplay.enabled?"off":"polite";var o;let c,d;o=s,i.attr("id",o),function(e,t){e.attr("aria-live",t)}(i,a),b(),e.navigation&&e.navigation.$nextEl&&(c=e.navigation.$nextEl),e.navigation&&e.navigation.$prevEl&&(d=e.navigation.$prevEl),c&&c.length&&g(c,s,t.nextSlideMessage),d&&d.length&&g(d,s,t.prevSlideMessage),f()&&e.pagination.$el.on("keydown",re(e.params.pagination.bulletClass),p),e.$el.on("focus",_,!0),e.$el.on("pointerdown",v,!0),e.$el.on("pointerup",y,!0)};n("beforeInit",(()=>{r=m(``)})),n("afterInit",(()=>{e.params.a11y.enabled&&w()})),n("slidesLengthChange snapGridLengthChange slidesGridLengthChange",(()=>{e.params.a11y.enabled&&b()})),n("fromEdge toEdge afterInit lock unlock",(()=>{e.params.a11y.enabled&&function(){if(e.params.loop||e.params.rewind||!e.navigation)return;const{$nextEl:t,$prevEl:n}=e.navigation;n&&n.length>0&&(e.isBeginning?(c(n),a(n)):(d(n),s(n))),t&&t.length>0&&(e.isEnd?(c(t),a(t)):(d(t),s(t)))}()})),n("paginationUpdate",(()=>{e.params.a11y.enabled&&function(){const t=e.params.a11y;h()&&e.pagination.bullets.each((n=>{const r=m(n);e.params.pagination.clickable&&(s(r),e.params.pagination.renderBullet||(o(r,"button"),u(r,t.paginationBulletMessage.replace(/\{\{index\}\}/,r.index()+1)))),r.is(`.${e.params.pagination.bulletActiveClass}`)?r.attr("aria-current","true"):r.removeAttr("aria-current")}))}()})),n("destroy",(()=>{e.params.a11y.enabled&&function(){let t,n;r&&r.length>0&&r.remove(),e.navigation&&e.navigation.$nextEl&&(t=e.navigation.$nextEl),e.navigation&&e.navigation.$prevEl&&(n=e.navigation.$prevEl),t&&t.off("keydown",p),n&&n.off("keydown",p),f()&&e.pagination.$el.off("keydown",re(e.params.pagination.bulletClass),p),e.$el.off("focus",_,!0),e.$el.off("pointerdown",v,!0),e.$el.off("pointerup",y,!0)}()}))}}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxTQUloRDB6QixFQUFPcVUsWUFBY3JVLEVBQU9xVSxXQUFXeUosVUFDekNBLEVBQVU5ZCxFQUFPcVUsV0FBV3lKLFNBRzFCOWQsRUFBT3FVLFlBQWNyVSxFQUFPcVUsV0FBVzBKLFVBQ3pDQSxFQUFVL2QsRUFBT3FVLFdBQVcwSixTQUcxQkQsR0FDRkEsRUFBUS9tRixJQUFJLFVBQVdrc0YsR0FHckJsRixHQUNGQSxFQUFRaG5GLElBQUksVUFBV2tzRixHQUlyQkcsS0FDRnBqQixFQUFPdWUsV0FBV2xiLElBQUl0c0UsSUFBSSxVQUFXMm5GLEdBQWtCMWUsRUFBT3J3QixPQUFPNHVDLFdBQVdrQixhQUFjd0QsR0FJaEdqakIsRUFBT3FELElBQUl0c0UsSUFBSSxRQUFTNHNGLEdBQWEsR0FDckMzakIsRUFBT3FELElBQUl0c0UsSUFBSSxjQUFlMHNGLEdBQW1CLEdBQ2pEempCLEVBQU9xRCxJQUFJdHNFLElBQUksWUFBYTJzRixHQUFpQixFQUMvQyxDQXVCRXJJLEVBQVMsR0FFYiIsInNvdXJjZXMiOlsid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvZXYtZW1pdHRlci9ldi1lbWl0dGVyLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvZ3NhcC9EcmF3U1ZHUGx1Z2luLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvZ3NhcC91dGlscy9wYXRocy5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL2dzYXAvdXRpbHMvbWF0cml4LmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvZ3NhcC9Nb3Rpb25QYXRoUGx1Z2luLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvZ3NhcC9TY3JvbGxUb1BsdWdpbi5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL2dzYXAvT2JzZXJ2ZXIuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9nc2FwL1Njcm9sbFRyaWdnZXIuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9nc2FwL2dzYXAtY29yZS5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL2dzYXAvQ1NTUGx1Z2luLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvZ3NhcC9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL2ltYWdlc2xvYWRlZC9pbWFnZXNsb2FkZWQuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zc3Itd2luZG93L3Nzci13aW5kb3cuZXNtLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvZG9tNy9kb203LmVzbS5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9zaGFyZWQvZG9tLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC91dGlscy5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9zaGFyZWQvZ2V0LXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvc2hhcmVkL2dldC1kZXZpY2UuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvc2hhcmVkL2dldC1icm93c2VyLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzLWVtaXR0ZXIuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS91cGRhdGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS91cGRhdGUvdXBkYXRlU2l6ZS5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3VwZGF0ZS91cGRhdGVTbGlkZXMuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS91cGRhdGUvdXBkYXRlQXV0b0hlaWdodC5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3VwZGF0ZS91cGRhdGVTbGlkZXNPZmZzZXQuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS91cGRhdGUvdXBkYXRlU2xpZGVzUHJvZ3Jlc3MuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS91cGRhdGUvdXBkYXRlUHJvZ3Jlc3MuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS91cGRhdGUvdXBkYXRlU2xpZGVzQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3VwZGF0ZS91cGRhdGVBY3RpdmVJbmRleC5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3VwZGF0ZS91cGRhdGVDbGlja2VkU2xpZGUuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS90cmFuc2xhdGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS90cmFuc2xhdGUvZ2V0VHJhbnNsYXRlLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNsYXRlL3NldFRyYW5zbGF0ZS5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3RyYW5zbGF0ZS9taW5UcmFuc2xhdGUuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS90cmFuc2xhdGUvbWF4VHJhbnNsYXRlLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNsYXRlL3RyYW5zbGF0ZVRvLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNpdGlvbi90cmFuc2l0aW9uRW1pdC5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3NsaWRlL2luZGV4LmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVUby5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3NsaWRlL3NsaWRlVG9Mb29wLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVOZXh0LmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVQcmV2LmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVSZXNldC5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3NsaWRlL3NsaWRlVG9DbG9zZXN0LmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVUb0NsaWNrZWRTbGlkZS5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2xvb3AvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9sb29wL2xvb3BDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9sb29wL2xvb3BGaXguanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9sb29wL2xvb3BEZXN0cm95LmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzL29uVG91Y2hTdGFydC5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2V2ZW50cy9vblRvdWNoTW92ZS5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2V2ZW50cy9vblRvdWNoRW5kLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzL29uUmVzaXplLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzL29uQ2xpY2suanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9ldmVudHMvb25TY3JvbGwuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9ldmVudHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9icmVha3BvaW50cy9zZXRCcmVha3BvaW50LmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvYnJlYWtwb2ludHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9icmVha3BvaW50cy9nZXRCcmVha3BvaW50LmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvY2xhc3Nlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2NsYXNzZXMvYWRkQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2NsYXNzZXMvcmVtb3ZlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2NoZWNrLW92ZXJmbG93L2luZGV4LmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZGVmYXVsdHMuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9tb2R1bGVFeHRlbmRQYXJhbXMuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9jb3JlLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNpdGlvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3RyYW5zaXRpb24vc2V0VHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3RyYW5zaXRpb24vdHJhbnNpdGlvblN0YXJ0LmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNpdGlvbi90cmFuc2l0aW9uRW5kLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZ3JhYi1jdXJzb3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9ncmFiLWN1cnNvci9zZXRHcmFiQ3Vyc29yLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZ3JhYi1jdXJzb3IvdW5zZXRHcmFiQ3Vyc29yLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvaW1hZ2VzL2luZGV4LmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvaW1hZ2VzL2xvYWRJbWFnZS5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2ltYWdlcy9wcmVsb2FkSW1hZ2VzLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvbW9kdWxlcy9yZXNpemUvcmVzaXplLmpzIiwid2VicGFjazovL0B0aGlydHl0aHJlZS9iYXNldGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvbW9kdWxlcy9vYnNlcnZlci9vYnNlcnZlci5qcyIsIndlYnBhY2s6Ly9AdGhpcnR5dGhyZWUvYmFzZXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9zaGFyZWQvY3JlYXRlLWVsZW1lbnQtaWYtbm90LWRlZmluZWQuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvbW9kdWxlcy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvc2hhcmVkL2NsYXNzZXMtdG8tc2VsZWN0b3IuanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvbW9kdWxlcy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uanMiLCJ3ZWJwYWNrOi8vQHRoaXJ0eXRocmVlL2Jhc2V0aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvbW9kdWxlcy9hMTF5L2ExMXkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFdkVtaXR0ZXIgdjIuMS4xXG4gKiBMaWwnIGV2ZW50IGVtaXR0ZXJcbiAqIE1JVCBMaWNlbnNlXG4gKi9cblxuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuICAvLyB1bml2ZXJzYWwgbW9kdWxlIGRlZmluaXRpb25cbiAgaWYgKCB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzICkge1xuICAgIC8vIENvbW1vbkpTIC0gQnJvd3NlcmlmeSwgV2VicGFja1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFsc1xuICAgIGdsb2JhbC5FdkVtaXR0ZXIgPSBmYWN0b3J5KCk7XG4gIH1cblxufSggdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCkge1xuXG5mdW5jdGlvbiBFdkVtaXR0ZXIoKSB7fVxuXG5sZXQgcHJvdG8gPSBFdkVtaXR0ZXIucHJvdG90eXBlO1xuXG5wcm90by5vbiA9IGZ1bmN0aW9uKCBldmVudE5hbWUsIGxpc3RlbmVyICkge1xuICBpZiAoICFldmVudE5hbWUgfHwgIWxpc3RlbmVyICkgcmV0dXJuIHRoaXM7XG5cbiAgLy8gc2V0IGV2ZW50cyBoYXNoXG4gIGxldCBldmVudHMgPSB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMgfHwge307XG4gIC8vIHNldCBsaXN0ZW5lcnMgYXJyYXlcbiAgbGV0IGxpc3RlbmVycyA9IGV2ZW50c1sgZXZlbnROYW1lIF0gPSBldmVudHNbIGV2ZW50TmFtZSBdIHx8IFtdO1xuICAvLyBvbmx5IGFkZCBvbmNlXG4gIGlmICggIWxpc3RlbmVycy5pbmNsdWRlcyggbGlzdGVuZXIgKSApIHtcbiAgICBsaXN0ZW5lcnMucHVzaCggbGlzdGVuZXIgKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxucHJvdG8ub25jZSA9IGZ1bmN0aW9uKCBldmVudE5hbWUsIGxpc3RlbmVyICkge1xuICBpZiAoICFldmVudE5hbWUgfHwgIWxpc3RlbmVyICkgcmV0dXJuIHRoaXM7XG5cbiAgLy8gYWRkIGV2ZW50XG4gIHRoaXMub24oIGV2ZW50TmFtZSwgbGlzdGVuZXIgKTtcbiAgLy8gc2V0IG9uY2UgZmxhZ1xuICAvLyBzZXQgb25jZUV2ZW50cyBoYXNoXG4gIGxldCBvbmNlRXZlbnRzID0gdGhpcy5fb25jZUV2ZW50cyA9IHRoaXMuX29uY2VFdmVudHMgfHwge307XG4gIC8vIHNldCBvbmNlTGlzdGVuZXJzIG9iamVjdFxuICBsZXQgb25jZUxpc3RlbmVycyA9IG9uY2VFdmVudHNbIGV2ZW50TmFtZSBdID0gb25jZUV2ZW50c1sgZXZlbnROYW1lIF0gfHwge307XG4gIC8vIHNldCBmbGFnXG4gIG9uY2VMaXN0ZW5lcnNbIGxpc3RlbmVyIF0gPSB0cnVlO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxucHJvdG8ub2ZmID0gZnVuY3Rpb24oIGV2ZW50TmFtZSwgbGlzdGVuZXIgKSB7XG4gIGxldCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHMgJiYgdGhpcy5fZXZlbnRzWyBldmVudE5hbWUgXTtcbiAgaWYgKCAhbGlzdGVuZXJzIHx8ICFsaXN0ZW5lcnMubGVuZ3RoICkgcmV0dXJuIHRoaXM7XG5cbiAgbGV0IGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YoIGxpc3RlbmVyICk7XG4gIGlmICggaW5kZXggIT0gLTEgKSB7XG4gICAgbGlzdGVuZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxucHJvdG8uZW1pdEV2ZW50ID0gZnVuY3Rpb24oIGV2ZW50TmFtZSwgYXJncyApIHtcbiAgbGV0IGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbIGV2ZW50TmFtZSBdO1xuICBpZiAoICFsaXN0ZW5lcnMgfHwgIWxpc3RlbmVycy5sZW5ndGggKSByZXR1cm4gdGhpcztcblxuICAvLyBjb3B5IG92ZXIgdG8gYXZvaWQgaW50ZXJmZXJlbmNlIGlmIC5vZmYoKSBpbiBsaXN0ZW5lclxuICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoIDAgKTtcbiAgYXJncyA9IGFyZ3MgfHwgW107XG4gIC8vIG9uY2Ugc3R1ZmZcbiAgbGV0IG9uY2VMaXN0ZW5lcnMgPSB0aGlzLl9vbmNlRXZlbnRzICYmIHRoaXMuX29uY2VFdmVudHNbIGV2ZW50TmFtZSBdO1xuXG4gIGZvciAoIGxldCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMgKSB7XG4gICAgbGV0IGlzT25jZSA9IG9uY2VMaXN0ZW5lcnMgJiYgb25jZUxpc3RlbmVyc1sgbGlzdGVuZXIgXTtcbiAgICBpZiAoIGlzT25jZSApIHtcbiAgICAgIC8vIHJlbW92ZSBsaXN0ZW5lclxuICAgICAgLy8gcmVtb3ZlIGJlZm9yZSB0cmlnZ2VyIHRvIHByZXZlbnQgcmVjdXJzaW9uXG4gICAgICB0aGlzLm9mZiggZXZlbnROYW1lLCBsaXN0ZW5lciApO1xuICAgICAgLy8gdW5zZXQgb25jZSBmbGFnXG4gICAgICBkZWxldGUgb25jZUxpc3RlbmVyc1sgbGlzdGVuZXIgXTtcbiAgICB9XG4gICAgLy8gdHJpZ2dlciBsaXN0ZW5lclxuICAgIGxpc3RlbmVyLmFwcGx5KCB0aGlzLCBhcmdzICk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbnByb3RvLmFsbE9mZiA9IGZ1bmN0aW9uKCkge1xuICBkZWxldGUgdGhpcy5fZXZlbnRzO1xuICBkZWxldGUgdGhpcy5fb25jZUV2ZW50cztcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5yZXR1cm4gRXZFbWl0dGVyO1xuXG59ICkgKTtcbiIsIi8qIVxuICogRHJhd1NWR1BsdWdpbiAzLjEyLjJcbiAqIGh0dHBzOi8vZ3JlZW5zb2NrLmNvbVxuICpcbiAqIEBsaWNlbnNlIENvcHlyaWdodCAyMDA4LTIwMjMsIEdyZWVuU29jay4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFN1YmplY3QgdG8gdGhlIHRlcm1zIGF0IGh0dHBzOi8vZ3JlZW5zb2NrLmNvbS9zdGFuZGFyZC1saWNlbnNlIG9yIGZvclxuICogQ2x1YiBHcmVlblNvY2sgbWVtYmVycywgdGhlIGFncmVlbWVudCBpc3N1ZWQgd2l0aCB0aGF0IG1lbWJlcnNoaXAuXG4gKiBAYXV0aG9yOiBKYWNrIERveWxlLCBqYWNrQGdyZWVuc29jay5jb21cbiovXG5cbi8qIGVzbGludC1kaXNhYmxlICovXG52YXIgZ3NhcCxcbiAgICBfdG9BcnJheSxcbiAgICBfZG9jLFxuICAgIF93aW4sXG4gICAgX2lzRWRnZSxcbiAgICBfY29yZUluaXR0ZWQsXG4gICAgX3dhcm5lZCxcbiAgICBfZ2V0U3R5bGVTYXZlcixcbiAgICBfcmV2ZXJ0aW5nLFxuICAgIF93aW5kb3dFeGlzdHMgPSBmdW5jdGlvbiBfd2luZG93RXhpc3RzKCkge1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIjtcbn0sXG4gICAgX2dldEdTQVAgPSBmdW5jdGlvbiBfZ2V0R1NBUCgpIHtcbiAgcmV0dXJuIGdzYXAgfHwgX3dpbmRvd0V4aXN0cygpICYmIChnc2FwID0gd2luZG93LmdzYXApICYmIGdzYXAucmVnaXN0ZXJQbHVnaW4gJiYgZ3NhcDtcbn0sXG4gICAgX251bUV4cCA9IC9bLSs9XFwuXSpcXGQrW1xcLmVcXC1cXCtdKlxcZCpbZVxcLVxcK10qXFxkKi9naSxcbiAgICAvL2ZpbmRzIGFueSBudW1iZXJzLCBpbmNsdWRpbmcgb25lcyB0aGF0IHN0YXJ0IHdpdGggKz0gb3IgLT0sIG5lZ2F0aXZlIG51bWJlcnMsIGFuZCBvbmVzIGluIHNjaWVudGlmaWMgbm90YXRpb24gbGlrZSAxZS04LlxuX3R5cGVzID0ge1xuICByZWN0OiBbXCJ3aWR0aFwiLCBcImhlaWdodFwiXSxcbiAgY2lyY2xlOiBbXCJyXCIsIFwiclwiXSxcbiAgZWxsaXBzZTogW1wicnhcIiwgXCJyeVwiXSxcbiAgbGluZTogW1wieDJcIiwgXCJ5MlwiXVxufSxcbiAgICBfcm91bmQgPSBmdW5jdGlvbiBfcm91bmQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiAxMDAwMCkgLyAxMDAwMDtcbn0sXG4gICAgX3BhcnNlTnVtID0gZnVuY3Rpb24gX3BhcnNlTnVtKHZhbHVlKSB7XG4gIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKSB8fCAwO1xufSxcbiAgICBfcGFyc2VTaW5nbGVWYWwgPSBmdW5jdGlvbiBfcGFyc2VTaW5nbGVWYWwodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgbnVtID0gX3BhcnNlTnVtKHZhbHVlKTtcblxuICByZXR1cm4gfnZhbHVlLmluZGV4T2YoXCIlXCIpID8gbnVtIC8gMTAwICogbGVuZ3RoIDogbnVtO1xufSxcbiAgICBfZ2V0QXR0cmlidXRlQXNOdW1iZXIgPSBmdW5jdGlvbiBfZ2V0QXR0cmlidXRlQXNOdW1iZXIodGFyZ2V0LCBhdHRyKSB7XG4gIHJldHVybiBfcGFyc2VOdW0odGFyZ2V0LmdldEF0dHJpYnV0ZShhdHRyKSk7XG59LFxuICAgIF9zcXJ0ID0gTWF0aC5zcXJ0LFxuICAgIF9nZXREaXN0YW5jZSA9IGZ1bmN0aW9uIF9nZXREaXN0YW5jZSh4MSwgeTEsIHgyLCB5Miwgc2NhbGVYLCBzY2FsZVkpIHtcbiAgcmV0dXJuIF9zcXJ0KE1hdGgucG93KChfcGFyc2VOdW0oeDIpIC0gX3BhcnNlTnVtKHgxKSkgKiBzY2FsZVgsIDIpICsgTWF0aC5wb3coKF9wYXJzZU51bSh5MikgLSBfcGFyc2VOdW0oeTEpKSAqIHNjYWxlWSwgMikpO1xufSxcbiAgICBfd2FybiA9IGZ1bmN0aW9uIF93YXJuKG1lc3NhZ2UpIHtcbiAgcmV0dXJuIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbn0sXG4gICAgX2hhc05vblNjYWxpbmdTdHJva2UgPSBmdW5jdGlvbiBfaGFzTm9uU2NhbGluZ1N0cm9rZSh0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJ2ZWN0b3ItZWZmZWN0XCIpID09PSBcIm5vbi1zY2FsaW5nLXN0cm9rZVwiO1xufSxcbiAgICBfYm9udXNWYWxpZGF0ZWQgPSAxLFxuICAgIC8vPG5hbWU+RHJhd1NWR1BsdWdpbjwvbmFtZT5cbi8vYWNjZXB0cyB2YWx1ZXMgbGlrZSBcIjEwMCVcIiBvciBcIjIwJSA4MCVcIiBvciBcIjIwIDUwXCIgYW5kIHBhcnNlcyBpdCBpbnRvIGFuIGFic29sdXRlIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb24gb24gdGhlIGxpbmUvc3Ryb2tlIGJhc2VkIG9uIGl0cyBsZW5ndGguIFJldHVybnMgYW4gYW4gYXJyYXkgd2l0aCB0aGUgc3RhcnQgYW5kIGVuZCB2YWx1ZXMsIGxpa2UgWzAsIDI0M11cbl9wYXJzZSA9IGZ1bmN0aW9uIF9wYXJzZSh2YWx1ZSwgbGVuZ3RoLCBkZWZhdWx0U3RhcnQpIHtcbiAgdmFyIGkgPSB2YWx1ZS5pbmRleE9mKFwiIFwiKSxcbiAgICAgIHMsXG4gICAgICBlO1xuXG4gIGlmIChpIDwgMCkge1xuICAgIHMgPSBkZWZhdWx0U3RhcnQgIT09IHVuZGVmaW5lZCA/IGRlZmF1bHRTdGFydCArIFwiXCIgOiB2YWx1ZTtcbiAgICBlID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcyA9IHZhbHVlLnN1YnN0cigwLCBpKTtcbiAgICBlID0gdmFsdWUuc3Vic3RyKGkgKyAxKTtcbiAgfVxuXG4gIHMgPSBfcGFyc2VTaW5nbGVWYWwocywgbGVuZ3RoKTtcbiAgZSA9IF9wYXJzZVNpbmdsZVZhbChlLCBsZW5ndGgpO1xuICByZXR1cm4gcyA+IGUgPyBbZSwgc10gOiBbcywgZV07XG59LFxuICAgIF9nZXRMZW5ndGggPSBmdW5jdGlvbiBfZ2V0TGVuZ3RoKHRhcmdldCkge1xuICB0YXJnZXQgPSBfdG9BcnJheSh0YXJnZXQpWzBdO1xuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICB2YXIgdHlwZSA9IHRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICBzdHlsZSA9IHRhcmdldC5zdHlsZSxcbiAgICAgIHNjYWxlWCA9IDEsXG4gICAgICBzY2FsZVkgPSAxLFxuICAgICAgbGVuZ3RoLFxuICAgICAgYmJveCxcbiAgICAgIHBvaW50cyxcbiAgICAgIHByZXZQb2ludCxcbiAgICAgIGksXG4gICAgICByeCxcbiAgICAgIHJ5O1xuXG4gIGlmIChfaGFzTm9uU2NhbGluZ1N0cm9rZSh0YXJnZXQpKSB7XG4gICAgLy9ub24tc2NhbGluZy1zdHJva2UgYmFzaWNhbGx5IHNjYWxlcyB0aGUgc2hhcGUgYW5kIHRoZW4gc3Ryb2tlcyBpdCBhdCB0aGUgc2NyZWVuLWxldmVsIChhZnRlciB0cmFuc2Zvcm1zKSwgdGh1cyB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgbGVuZ3RoIGFjY29yZGluZ2x5LlxuICAgIHNjYWxlWSA9IHRhcmdldC5nZXRTY3JlZW5DVE0oKTtcbiAgICBzY2FsZVggPSBfc3FydChzY2FsZVkuYSAqIHNjYWxlWS5hICsgc2NhbGVZLmIgKiBzY2FsZVkuYik7XG4gICAgc2NhbGVZID0gX3NxcnQoc2NhbGVZLmQgKiBzY2FsZVkuZCArIHNjYWxlWS5jICogc2NhbGVZLmMpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvL0lFIGJ1ZzogY2FsbGluZyA8cGF0aD4uZ2V0VG90YWxMZW5ndGgoKSBsb2NrcyB0aGUgcmVwYWludCBhcmVhIG9mIHRoZSBzdHJva2UgdG8gd2hhdGV2ZXIgaXRzIGN1cnJlbnQgZGltZW5zaW9ucyBhcmUgb24gdGhhdCBmcmFtZS90aWNrLiBUbyB3b3JrIGFyb3VuZCB0aGF0LCB3ZSBtdXN0IGNhbGwgZ2V0QkJveCgpIHRvIGZvcmNlIElFIHRvIHJlY2FsY3VsYXRlIHRoaW5ncy5cbiAgICBiYm94ID0gdGFyZ2V0LmdldEJCb3goKTsgLy9zb2xlbHkgZm9yIGZpeGluZyBidWcgaW4gSUUgLSB3ZSBkb24ndCBhY3R1YWxseSB1c2UgdGhlIGJib3guXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvL2ZpcmVmb3ggaGFzIGEgYnVnIHRoYXQgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBlbGVtZW50IGlzbid0IHZpc2libGUuXG4gICAgX3dhcm4oXCJTb21lIGJyb3dzZXJzIHdvbid0IG1lYXN1cmUgaW52aXNpYmxlIGVsZW1lbnRzIChsaWtlIGRpc3BsYXk6bm9uZSBvciBtYXNrcyBpbnNpZGUgZGVmcykuXCIpO1xuICB9XG5cbiAgdmFyIF9yZWYgPSBiYm94IHx8IHtcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiAwXG4gIH0sXG4gICAgICB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueSxcbiAgICAgIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICAgIGhlaWdodCA9IF9yZWYuaGVpZ2h0O1xuXG4gIGlmICgoIWJib3ggfHwgIXdpZHRoICYmICFoZWlnaHQpICYmIF90eXBlc1t0eXBlXSkge1xuICAgIC8vaWYgdGhlIGVsZW1lbnQgaXNuJ3QgdmlzaWJsZSwgdHJ5IHRvIGRpc2Nlcm4gd2lkdGgvaGVpZ2h0IHVzaW5nIGl0cyBhdHRyaWJ1dGVzLlxuICAgIHdpZHRoID0gX2dldEF0dHJpYnV0ZUFzTnVtYmVyKHRhcmdldCwgX3R5cGVzW3R5cGVdWzBdKTtcbiAgICBoZWlnaHQgPSBfZ2V0QXR0cmlidXRlQXNOdW1iZXIodGFyZ2V0LCBfdHlwZXNbdHlwZV1bMV0pO1xuXG4gICAgaWYgKHR5cGUgIT09IFwicmVjdFwiICYmIHR5cGUgIT09IFwibGluZVwiKSB7XG4gICAgICAvL2RvdWJsZSB0aGUgcmFkaXVzIGZvciBjaXJjbGVzIGFuZCBlbGxpcHNlc1xuICAgICAgd2lkdGggKj0gMjtcbiAgICAgIGhlaWdodCAqPSAyO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBcImxpbmVcIikge1xuICAgICAgeCA9IF9nZXRBdHRyaWJ1dGVBc051bWJlcih0YXJnZXQsIFwieDFcIik7XG4gICAgICB5ID0gX2dldEF0dHJpYnV0ZUFzTnVtYmVyKHRhcmdldCwgXCJ5MVwiKTtcbiAgICAgIHdpZHRoID0gTWF0aC5hYnMod2lkdGggLSB4KTtcbiAgICAgIGhlaWdodCA9IE1hdGguYWJzKGhlaWdodCAtIHkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlID09PSBcInBhdGhcIikge1xuICAgIHByZXZQb2ludCA9IHN0eWxlLnN0cm9rZURhc2hhcnJheTtcbiAgICBzdHlsZS5zdHJva2VEYXNoYXJyYXkgPSBcIm5vbmVcIjtcbiAgICBsZW5ndGggPSB0YXJnZXQuZ2V0VG90YWxMZW5ndGgoKSB8fCAwO1xuICAgIF9yb3VuZChzY2FsZVgpICE9PSBfcm91bmQoc2NhbGVZKSAmJiAhX3dhcm5lZCAmJiAoX3dhcm5lZCA9IDEpICYmIF93YXJuKFwiV2FybmluZzogPHBhdGg+IGxlbmd0aCBjYW5ub3QgYmUgbWVhc3VyZWQgd2hlbiB2ZWN0b3ItZWZmZWN0IGlzIG5vbi1zY2FsaW5nLXN0cm9rZSBhbmQgdGhlIGVsZW1lbnQgaXNuJ3QgcHJvcG9ydGlvbmFsbHkgc2NhbGVkLlwiKTtcbiAgICBsZW5ndGggKj0gKHNjYWxlWCArIHNjYWxlWSkgLyAyO1xuICAgIHN0eWxlLnN0cm9rZURhc2hhcnJheSA9IHByZXZQb2ludDtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBcInJlY3RcIikge1xuICAgIGxlbmd0aCA9IHdpZHRoICogMiAqIHNjYWxlWCArIGhlaWdodCAqIDIgKiBzY2FsZVk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJsaW5lXCIpIHtcbiAgICBsZW5ndGggPSBfZ2V0RGlzdGFuY2UoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCBzY2FsZVgsIHNjYWxlWSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJwb2x5bGluZVwiIHx8IHR5cGUgPT09IFwicG9seWdvblwiKSB7XG4gICAgcG9pbnRzID0gdGFyZ2V0LmdldEF0dHJpYnV0ZShcInBvaW50c1wiKS5tYXRjaChfbnVtRXhwKSB8fCBbXTtcbiAgICB0eXBlID09PSBcInBvbHlnb25cIiAmJiBwb2ludHMucHVzaChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgbGVuZ3RoID0gMDtcblxuICAgIGZvciAoaSA9IDI7IGkgPCBwb2ludHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGxlbmd0aCArPSBfZ2V0RGlzdGFuY2UocG9pbnRzW2kgLSAyXSwgcG9pbnRzW2kgLSAxXSwgcG9pbnRzW2ldLCBwb2ludHNbaSArIDFdLCBzY2FsZVgsIHNjYWxlWSkgfHwgMDtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJjaXJjbGVcIiB8fCB0eXBlID09PSBcImVsbGlwc2VcIikge1xuICAgIHJ4ID0gd2lkdGggLyAyICogc2NhbGVYO1xuICAgIHJ5ID0gaGVpZ2h0IC8gMiAqIHNjYWxlWTtcbiAgICBsZW5ndGggPSBNYXRoLlBJICogKDMgKiAocnggKyByeSkgLSBfc3FydCgoMyAqIHJ4ICsgcnkpICogKHJ4ICsgMyAqIHJ5KSkpO1xuICB9XG5cbiAgcmV0dXJuIGxlbmd0aCB8fCAwO1xufSxcbiAgICBfZ2V0UG9zaXRpb24gPSBmdW5jdGlvbiBfZ2V0UG9zaXRpb24odGFyZ2V0LCBsZW5ndGgpIHtcbiAgdGFyZ2V0ID0gX3RvQXJyYXkodGFyZ2V0KVswXTtcblxuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiBbMCwgMF07XG4gIH1cblxuICBsZW5ndGggfHwgKGxlbmd0aCA9IF9nZXRMZW5ndGgodGFyZ2V0KSArIDEpO1xuXG4gIHZhciBjcyA9IF93aW4uZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLFxuICAgICAgZGFzaCA9IGNzLnN0cm9rZURhc2hhcnJheSB8fCBcIlwiLFxuICAgICAgb2Zmc2V0ID0gX3BhcnNlTnVtKGNzLnN0cm9rZURhc2hvZmZzZXQpLFxuICAgICAgaSA9IGRhc2guaW5kZXhPZihcIixcIik7XG5cbiAgaSA8IDAgJiYgKGkgPSBkYXNoLmluZGV4T2YoXCIgXCIpKTtcbiAgZGFzaCA9IGkgPCAwID8gbGVuZ3RoIDogX3BhcnNlTnVtKGRhc2guc3Vic3RyKDAsIGkpKTtcbiAgZGFzaCA+IGxlbmd0aCAmJiAoZGFzaCA9IGxlbmd0aCk7XG4gIHJldHVybiBbLW9mZnNldCB8fCAwLCBkYXNoIC0gb2Zmc2V0IHx8IDBdO1xufSxcbiAgICBfaW5pdENvcmUgPSBmdW5jdGlvbiBfaW5pdENvcmUoKSB7XG4gIGlmIChfd2luZG93RXhpc3RzKCkpIHtcbiAgICBfZG9jID0gZG9jdW1lbnQ7XG4gICAgX3dpbiA9IHdpbmRvdztcbiAgICBfY29yZUluaXR0ZWQgPSBnc2FwID0gX2dldEdTQVAoKTtcbiAgICBfdG9BcnJheSA9IGdzYXAudXRpbHMudG9BcnJheTtcbiAgICBfZ2V0U3R5bGVTYXZlciA9IGdzYXAuY29yZS5nZXRTdHlsZVNhdmVyO1xuXG4gICAgX3JldmVydGluZyA9IGdzYXAuY29yZS5yZXZlcnRpbmcgfHwgZnVuY3Rpb24gKCkge307XG5cbiAgICBfaXNFZGdlID0gKChfd2luLm5hdmlnYXRvciB8fCB7fSkudXNlckFnZW50IHx8IFwiXCIpLmluZGV4T2YoXCJFZGdlXCIpICE9PSAtMTsgLy9NaWNyb3NvZnQgRWRnZSBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgbm90IHRvIHJlZHJhdyB0aGUgcGF0aCBjb3JyZWN0bHkgaWYgdGhlIHN0cm9rZS1saW5lY2FwIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gXCJidXR0XCIgKGxpa2UgXCJyb3VuZFwiKSBhbmQgaXQgZG9lc24ndCBtYXRjaCB0aGUgc3Ryb2tlLWxpbmVqb2luLiBBIHdheSB0byB0cmlnZ2VyIGl0IGlzIHRvIGNoYW5nZSB0aGUgc3Ryb2tlLW1pdGVybGltaXQsIHNvIHdlJ2xsIG9ubHkgZG8gdGhhdCBpZi93aGVuIHdlIGhhdmUgdG8gKHRvIG1heGltaXplIHBlcmZvcm1hbmNlKVxuICB9XG59O1xuXG5leHBvcnQgdmFyIERyYXdTVkdQbHVnaW4gPSB7XG4gIHZlcnNpb246IFwiMy4xMi4yXCIsXG4gIG5hbWU6IFwiZHJhd1NWR1wiLFxuICByZWdpc3RlcjogZnVuY3Rpb24gcmVnaXN0ZXIoY29yZSkge1xuICAgIGdzYXAgPSBjb3JlO1xuXG4gICAgX2luaXRDb3JlKCk7XG4gIH0sXG4gIGluaXQ6IGZ1bmN0aW9uIGluaXQodGFyZ2V0LCB2YWx1ZSwgdHdlZW4sIGluZGV4LCB0YXJnZXRzKSB7XG4gICAgaWYgKCF0YXJnZXQuZ2V0QkJveCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIF9jb3JlSW5pdHRlZCB8fCBfaW5pdENvcmUoKTtcblxuICAgIHZhciBsZW5ndGggPSBfZ2V0TGVuZ3RoKHRhcmdldCksXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBlbmQsXG4gICAgICAgIGNzO1xuXG4gICAgdGhpcy5zdHlsZXMgPSBfZ2V0U3R5bGVTYXZlciAmJiBfZ2V0U3R5bGVTYXZlcih0YXJnZXQsIFwic3Ryb2tlRGFzaG9mZnNldCxzdHJva2VEYXNoYXJyYXksc3Ryb2tlTWl0ZXJsaW1pdFwiKTtcbiAgICB0aGlzLnR3ZWVuID0gdHdlZW47XG4gICAgdGhpcy5fc3R5bGUgPSB0YXJnZXQuc3R5bGU7XG4gICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0O1xuXG4gICAgaWYgKHZhbHVlICsgXCJcIiA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgIHZhbHVlID0gXCIwIDEwMCVcIjtcbiAgICB9IGVsc2UgaWYgKCF2YWx1ZSkge1xuICAgICAgdmFsdWUgPSBcIjAgMFwiO1xuICAgIH0gZWxzZSBpZiAoKHZhbHVlICsgXCJcIikuaW5kZXhPZihcIiBcIikgPT09IC0xKSB7XG4gICAgICB2YWx1ZSA9IFwiMCBcIiArIHZhbHVlO1xuICAgIH1cblxuICAgIHN0YXJ0ID0gX2dldFBvc2l0aW9uKHRhcmdldCwgbGVuZ3RoKTtcbiAgICBlbmQgPSBfcGFyc2UodmFsdWUsIGxlbmd0aCwgc3RhcnRbMF0pO1xuICAgIHRoaXMuX2xlbmd0aCA9IF9yb3VuZChsZW5ndGgpO1xuICAgIHRoaXMuX2Rhc2ggPSBfcm91bmQoc3RhcnRbMV0gLSBzdGFydFswXSk7IC8vc29tZSBicm93c2VycyByZW5kZXIgYXJ0aWZhY3RzIGlmIGRhc2ggaXMgMCwgc28gd2UgdXNlIGEgdmVyeSBzbWFsbCBudW1iZXIgaW4gdGhhdCBjYXNlLlxuXG4gICAgdGhpcy5fb2Zmc2V0ID0gX3JvdW5kKC1zdGFydFswXSk7XG4gICAgdGhpcy5fZGFzaFBUID0gdGhpcy5hZGQodGhpcywgXCJfZGFzaFwiLCB0aGlzLl9kYXNoLCBfcm91bmQoZW5kWzFdIC0gZW5kWzBdKSwgMCwgMCwgMCwgMCwgMCwgMSk7XG4gICAgdGhpcy5fb2Zmc2V0UFQgPSB0aGlzLmFkZCh0aGlzLCBcIl9vZmZzZXRcIiwgdGhpcy5fb2Zmc2V0LCBfcm91bmQoLWVuZFswXSksIDAsIDAsIDAsIDAsIDAsIDEpO1xuXG4gICAgaWYgKF9pc0VkZ2UpIHtcbiAgICAgIC8vdG8gd29yayBhcm91bmQgYSBidWcgaW4gTWljcm9zb2Z0IEVkZ2UsIGFuaW1hdGUgdGhlIHN0cm9rZS1taXRlcmxpbWl0IGJ5IDAuMDAwMSBqdXN0IHRvIHRyaWdnZXIgdGhlIHJlcGFpbnQgKHVubmVjZXNzYXJ5IGlmIGl0J3MgXCJyb3VuZFwiIGFuZCBzdHJva2UtbGluZWpvaW4gaXMgYWxzbyBcInJvdW5kXCIpLiBJbXBlcmNlcHRpYmxlLCByZWxhdGl2ZWx5IGhpZ2gtcGVyZm9ybWFuY2UsIGFuZCBlZmZlY3RpdmUuIEFub3RoZXIgb3B0aW9uIHdhcyB0byBzZXQgdGhlIFwiZFwiIDxwYXRoPiBhdHRyaWJ1dGUgdG8gaXRzIGN1cnJlbnQgdmFsdWUgb24gZXZlcnkgdGljaywgYnV0IHRoYXQgc2VlbXMgbGlrZSBpdCdkIGJlIG11Y2ggbGVzcyBwZXJmb3JtYW50LlxuICAgICAgY3MgPSBfd2luLmdldENvbXB1dGVkU3R5bGUodGFyZ2V0KTtcblxuICAgICAgaWYgKGNzLnN0cm9rZUxpbmVjYXAgIT09IGNzLnN0cm9rZUxpbmVqb2luKSB7XG4gICAgICAgIGVuZCA9IF9wYXJzZU51bShjcy5zdHJva2VNaXRlcmxpbWl0KTtcbiAgICAgICAgdGhpcy5hZGQodGFyZ2V0LnN0eWxlLCBcInN0cm9rZU1pdGVybGltaXRcIiwgZW5kLCBlbmQgKyAwLjAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9saXZlID0gX2hhc05vblNjYWxpbmdTdHJva2UodGFyZ2V0KSB8fCB+KHZhbHVlICsgXCJcIikuaW5kZXhPZihcImxpdmVcIik7XG4gICAgdGhpcy5fbm93cmFwID0gfih2YWx1ZSArIFwiXCIpLmluZGV4T2YoXCJub3dyYXBcIik7XG5cbiAgICB0aGlzLl9wcm9wcy5wdXNoKFwiZHJhd1NWR1wiKTtcblxuICAgIHJldHVybiBfYm9udXNWYWxpZGF0ZWQ7XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHJhdGlvLCBkYXRhKSB7XG4gICAgaWYgKGRhdGEudHdlZW4uX3RpbWUgfHwgIV9yZXZlcnRpbmcoKSkge1xuICAgICAgdmFyIHB0ID0gZGF0YS5fcHQsXG4gICAgICAgICAgc3R5bGUgPSBkYXRhLl9zdHlsZSxcbiAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgbGVuZ3RoUmF0aW8sXG4gICAgICAgICAgZGFzaCxcbiAgICAgICAgICBvZmZzZXQ7XG5cbiAgICAgIGlmIChwdCkge1xuICAgICAgICAvL3doZW4gdGhlIGVsZW1lbnQgaGFzIHZlY3Rvci1lZmZlY3Q9XCJub24tc2NhbGluZy1zdHJva2VcIiBhbmQgdGhlIFNWRyBpcyByZXNpemVkIChsaWtlIG9uIGEgd2luZG93IHJlc2l6ZSksIGl0IGFjdHVhbGx5IGNoYW5nZXMgdGhlIGxlbmd0aCBvZiB0aGUgc3Ryb2tlISBTbyB3ZSBtdXN0IHNlbnNlIHRoYXQgYW5kIG1ha2UgdGhlIHByb3BlciBhZGp1c3RtZW50cy5cbiAgICAgICAgaWYgKGRhdGEuX2xpdmUpIHtcbiAgICAgICAgICBsZW5ndGggPSBfZ2V0TGVuZ3RoKGRhdGEuX3RhcmdldCk7XG5cbiAgICAgICAgICBpZiAobGVuZ3RoICE9PSBkYXRhLl9sZW5ndGgpIHtcbiAgICAgICAgICAgIGxlbmd0aFJhdGlvID0gbGVuZ3RoIC8gZGF0YS5fbGVuZ3RoO1xuICAgICAgICAgICAgZGF0YS5fbGVuZ3RoID0gbGVuZ3RoO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5fb2Zmc2V0UFQpIHtcbiAgICAgICAgICAgICAgZGF0YS5fb2Zmc2V0UFQucyAqPSBsZW5ndGhSYXRpbztcbiAgICAgICAgICAgICAgZGF0YS5fb2Zmc2V0UFQuYyAqPSBsZW5ndGhSYXRpbztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuX2Rhc2hQVCkge1xuICAgICAgICAgICAgICBkYXRhLl9kYXNoUFQucyAqPSBsZW5ndGhSYXRpbztcbiAgICAgICAgICAgICAgZGF0YS5fZGFzaFBULmMgKj0gbGVuZ3RoUmF0aW87XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkYXRhLl9kYXNoICo9IGxlbmd0aFJhdGlvO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChwdCkge1xuICAgICAgICAgIHB0LnIocmF0aW8sIHB0LmQpO1xuICAgICAgICAgIHB0ID0gcHQuX25leHQ7XG4gICAgICAgIH1cblxuICAgICAgICBkYXNoID0gZGF0YS5fZGFzaCB8fCByYXRpbyAmJiByYXRpbyAhPT0gMSAmJiAwLjAwMDEgfHwgMDsgLy8gb25seSBsZXQgaXQgYmUgemVybyBpZiBpdCdzIGF0IHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIHR3ZWVuLlxuXG4gICAgICAgIGxlbmd0aCA9IGRhdGEuX2xlbmd0aCAtIGRhc2ggKyAwLjE7XG4gICAgICAgIG9mZnNldCA9IGRhdGEuX29mZnNldDtcbiAgICAgICAgZGFzaCAmJiBvZmZzZXQgJiYgZGFzaCArIE1hdGguYWJzKG9mZnNldCAlIGRhdGEuX2xlbmd0aCkgPiBkYXRhLl9sZW5ndGggLSAwLjIgJiYgKG9mZnNldCArPSBvZmZzZXQgPCAwID8gMC4xIDogLTAuMSkgJiYgKGxlbmd0aCArPSAwLjEpO1xuICAgICAgICBzdHlsZS5zdHJva2VEYXNob2Zmc2V0ID0gZGFzaCA/IG9mZnNldCA6IG9mZnNldCArIDAuMDAxO1xuICAgICAgICBzdHlsZS5zdHJva2VEYXNoYXJyYXkgPSBsZW5ndGggPCAwLjIgPyBcIm5vbmVcIiA6IGRhc2ggPyBkYXNoICsgXCJweCxcIiArIChkYXRhLl9ub3dyYXAgPyA5OTk5OTkgOiBsZW5ndGgpICsgXCJweFwiIDogXCIwcHgsIDk5OTk5OXB4XCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEuc3R5bGVzLnJldmVydCgpO1xuICAgIH1cbiAgfSxcbiAgZ2V0TGVuZ3RoOiBfZ2V0TGVuZ3RoLFxuICBnZXRQb3NpdGlvbjogX2dldFBvc2l0aW9uXG59O1xuX2dldEdTQVAoKSAmJiBnc2FwLnJlZ2lzdGVyUGx1Z2luKERyYXdTVkdQbHVnaW4pO1xuZXhwb3J0IHsgRHJhd1NWR1BsdWdpbiBhcyBkZWZhdWx0IH07IiwiLyohXG4gKiBwYXRocyAzLjEyLjJcbiAqIGh0dHBzOi8vZ3JlZW5zb2NrLmNvbVxuICpcbiAqIENvcHlyaWdodCAyMDA4LTIwMjMsIEdyZWVuU29jay4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFN1YmplY3QgdG8gdGhlIHRlcm1zIGF0IGh0dHBzOi8vZ3JlZW5zb2NrLmNvbS9zdGFuZGFyZC1saWNlbnNlIG9yIGZvclxuICogQ2x1YiBHcmVlblNvY2sgbWVtYmVycywgdGhlIGFncmVlbWVudCBpc3N1ZWQgd2l0aCB0aGF0IG1lbWJlcnNoaXAuXG4gKiBAYXV0aG9yOiBKYWNrIERveWxlLCBqYWNrQGdyZWVuc29jay5jb21cbiovXG5cbi8qIGVzbGludC1kaXNhYmxlICovXG52YXIgX3N2Z1BhdGhFeHAgPSAvW2FjaGxtcXN0dnpdfCgtP1xcZCpcXC4/XFxkKig/OmVbXFwtK10/XFxkKyk/KVswLTldL2lnLFxuICAgIF9udW1iZXJzRXhwID0gLyg/OigtKT9cXGQqXFwuP1xcZCooPzplW1xcLStdP1xcZCspPylbMC05XS9pZyxcbiAgICBfc2NpZW50aWZpYyA9IC9bXFwrXFwtXT9cXGQqXFwuP1xcZCtlW1xcK1xcLV0/XFxkKy9pZyxcbiAgICBfc2VsZWN0b3JFeHAgPSAvKF5bI1xcLl1bYS16XXxbYS15XVthLXpdKS9pLFxuICAgIF9ERUcyUkFEID0gTWF0aC5QSSAvIDE4MCxcbiAgICBfUkFEMkRFRyA9IDE4MCAvIE1hdGguUEksXG4gICAgX3NpbiA9IE1hdGguc2luLFxuICAgIF9jb3MgPSBNYXRoLmNvcyxcbiAgICBfYWJzID0gTWF0aC5hYnMsXG4gICAgX3NxcnQgPSBNYXRoLnNxcnQsXG4gICAgX2F0YW4yID0gTWF0aC5hdGFuMixcbiAgICBfbGFyZ2VOdW0gPSAxZTgsXG4gICAgX2lzU3RyaW5nID0gZnVuY3Rpb24gX2lzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCI7XG59LFxuICAgIF9pc051bWJlciA9IGZ1bmN0aW9uIF9pc051bWJlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xufSxcbiAgICBfaXNVbmRlZmluZWQgPSBmdW5jdGlvbiBfaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIjtcbn0sXG4gICAgX3RlbXAgPSB7fSxcbiAgICBfdGVtcDIgPSB7fSxcbiAgICBfcm91bmRpbmdOdW0gPSAxZTUsXG4gICAgX3dyYXBQcm9ncmVzcyA9IGZ1bmN0aW9uIF93cmFwUHJvZ3Jlc3MocHJvZ3Jlc3MpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQoKHByb2dyZXNzICsgX2xhcmdlTnVtKSAlIDEgKiBfcm91bmRpbmdOdW0pIC8gX3JvdW5kaW5nTnVtIHx8IChwcm9ncmVzcyA8IDAgPyAwIDogMSk7XG59LFxuICAgIC8vaWYgcHJvZ3Jlc3MgbGFuZHMgb24gMSwgdGhlICUgd2lsbCBtYWtlIGl0IDAgd2hpY2ggaXMgd2h5IHdlIHx8IDEsIGJ1dCBub3QgaWYgaXQncyBuZWdhdGl2ZSBiZWNhdXNlIGl0IG1ha2VzIG1vcmUgc2Vuc2UgZm9yIG1vdGlvbiB0byBlbmQgYXQgMCBpbiB0aGF0IGNhc2UuXG5fcm91bmQgPSBmdW5jdGlvbiBfcm91bmQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBfcm91bmRpbmdOdW0pIC8gX3JvdW5kaW5nTnVtIHx8IDA7XG59LFxuICAgIF9yb3VuZFByZWNpc2UgPSBmdW5jdGlvbiBfcm91bmRQcmVjaXNlKHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogMWUxMCkgLyAxZTEwIHx8IDA7XG59LFxuICAgIF9zcGxpdFNlZ21lbnQgPSBmdW5jdGlvbiBfc3BsaXRTZWdtZW50KHJhd1BhdGgsIHNlZ0luZGV4LCBpLCB0KSB7XG4gIHZhciBzZWdtZW50ID0gcmF3UGF0aFtzZWdJbmRleF0sXG4gICAgICBzaGlmdCA9IHQgPT09IDEgPyA2IDogc3ViZGl2aWRlU2VnbWVudChzZWdtZW50LCBpLCB0KTtcblxuICBpZiAoc2hpZnQgJiYgc2hpZnQgKyBpICsgMiA8IHNlZ21lbnQubGVuZ3RoKSB7XG4gICAgcmF3UGF0aC5zcGxpY2Uoc2VnSW5kZXgsIDAsIHNlZ21lbnQuc2xpY2UoMCwgaSArIHNoaWZ0ICsgMikpO1xuICAgIHNlZ21lbnQuc3BsaWNlKDAsIGkgKyBzaGlmdCk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn0sXG4gICAgX2dldFNhbXBsZUluZGV4ID0gZnVuY3Rpb24gX2dldFNhbXBsZUluZGV4KHNhbXBsZXMsIGxlbmd0aCwgcHJvZ3Jlc3MpIHtcbiAgLy8gc2xpZ2h0bHkgc2xvd2VyIHdheSB0aGFuIGRvaW5nIHRoaXMgKHdoZW4gdGhlcmUncyBubyBsb29rdXApOiBzZWdtZW50Lmxvb2t1cFtwcm9ncmVzcyA8IDEgPyB+fihsZW5ndGggLyBzZWdtZW50Lm1pbkxlbmd0aCkgOiBzZWdtZW50Lmxvb2t1cC5sZW5ndGggLSAxXSB8fCAwO1xuICB2YXIgbCA9IHNhbXBsZXMubGVuZ3RoLFxuICAgICAgaSA9IH5+KHByb2dyZXNzICogbCk7XG5cbiAgaWYgKHNhbXBsZXNbaV0gPiBsZW5ndGgpIHtcbiAgICB3aGlsZSAoLS1pICYmIHNhbXBsZXNbaV0gPiBsZW5ndGgpIHt9XG5cbiAgICBpIDwgMCAmJiAoaSA9IDApO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzYW1wbGVzWysraV0gPCBsZW5ndGggJiYgaSA8IGwpIHt9XG4gIH1cblxuICByZXR1cm4gaSA8IGwgPyBpIDogbCAtIDE7XG59LFxuICAgIF9yZXZlcnNlUmF3UGF0aCA9IGZ1bmN0aW9uIF9yZXZlcnNlUmF3UGF0aChyYXdQYXRoLCBza2lwT3V0ZXIpIHtcbiAgdmFyIGkgPSByYXdQYXRoLmxlbmd0aDtcbiAgc2tpcE91dGVyIHx8IHJhd1BhdGgucmV2ZXJzZSgpO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICByYXdQYXRoW2ldLnJldmVyc2VkIHx8IHJldmVyc2VTZWdtZW50KHJhd1BhdGhbaV0pO1xuICB9XG59LFxuICAgIF9jb3B5TWV0YURhdGEgPSBmdW5jdGlvbiBfY29weU1ldGFEYXRhKHNvdXJjZSwgY29weSkge1xuICBjb3B5LnRvdGFsTGVuZ3RoID0gc291cmNlLnRvdGFsTGVuZ3RoO1xuXG4gIGlmIChzb3VyY2Uuc2FtcGxlcykge1xuICAgIC8vc2VnbWVudFxuICAgIGNvcHkuc2FtcGxlcyA9IHNvdXJjZS5zYW1wbGVzLnNsaWNlKDApO1xuICAgIGNvcHkubG9va3VwID0gc291cmNlLmxvb2t1cC5zbGljZSgwKTtcbiAgICBjb3B5Lm1pbkxlbmd0aCA9IHNvdXJjZS5taW5MZW5ndGg7XG4gICAgY29weS5yZXNvbHV0aW9uID0gc291cmNlLnJlc29sdXRpb247XG4gIH0gZWxzZSBpZiAoc291cmNlLnRvdGFsUG9pbnRzKSB7XG4gICAgLy9yYXdQYXRoXG4gICAgY29weS50b3RhbFBvaW50cyA9IHNvdXJjZS50b3RhbFBvaW50cztcbiAgfVxuXG4gIHJldHVybiBjb3B5O1xufSxcbiAgICAvL3B1c2hlcyBhIG5ldyBzZWdtZW50IGludG8gYSByYXdQYXRoLCBidXQgaWYgaXRzIHN0YXJ0aW5nIHZhbHVlcyBtYXRjaCB0aGUgZW5kaW5nIHZhbHVlcyBvZiB0aGUgbGFzdCBzZWdtZW50LCBpdCdsbCBtZXJnZSBpdCBpbnRvIHRoYXQgc2FtZSBzZWdtZW50ICh0byByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWdtZW50cylcbl9hcHBlbmRPck1lcmdlID0gZnVuY3Rpb24gX2FwcGVuZE9yTWVyZ2UocmF3UGF0aCwgc2VnbWVudCkge1xuICB2YXIgaW5kZXggPSByYXdQYXRoLmxlbmd0aCxcbiAgICAgIHByZXZTZWcgPSByYXdQYXRoW2luZGV4IC0gMV0gfHwgW10sXG4gICAgICBsID0gcHJldlNlZy5sZW5ndGg7XG5cbiAgaWYgKGluZGV4ICYmIHNlZ21lbnRbMF0gPT09IHByZXZTZWdbbCAtIDJdICYmIHNlZ21lbnRbMV0gPT09IHByZXZTZWdbbCAtIDFdKSB7XG4gICAgc2VnbWVudCA9IHByZXZTZWcuY29uY2F0KHNlZ21lbnQuc2xpY2UoMikpO1xuICAgIGluZGV4LS07XG4gIH1cblxuICByYXdQYXRoW2luZGV4XSA9IHNlZ21lbnQ7XG59LFxuICAgIF9iZXN0RGlzdGFuY2U7XG4vKiBURVJNSU5PTE9HWVxuIC0gUmF3UGF0aCAtIGFuIGFycmF5IG9mIGFycmF5cywgb25lIGZvciBlYWNoIFNlZ21lbnQuIEEgc2luZ2xlIFJhd1BhdGggY291bGQgaGF2ZSBtdWx0aXBsZSBcIk1cIiBjb21tYW5kcywgZGVmaW5pbmcgU2VnbWVudHMgKHBhdGhzIGFyZW4ndCBhbHdheXMgY29ubmVjdGVkKS5cbiAtIFNlZ21lbnQgLSBhbiBhcnJheSBjb250YWluaW5nIGEgc2VxdWVuY2Ugb2YgQ3ViaWMgQmV6aWVyIGNvb3JkaW5hdGVzIGluIGFsdGVybmF0aW5nIHgsIHksIHgsIHkgZm9ybWF0LiBTdGFydGluZyBhbmNob3IsIHRoZW4gY29udHJvbCBwb2ludCAxLCBjb250cm9sIHBvaW50IDIsIGFuZCBlbmRpbmcgYW5jaG9yLCB0aGVuIHRoZSBuZXh0IGNvbnRyb2wgcG9pbnQgMSwgY29udHJvbCBwb2ludCAyLCBhbmNob3IsIGV0Yy4gVXNlcyBsZXNzIG1lbW9yeSB0aGFuIGFuIGFycmF5IHdpdGggYSBidW5jaCBvZiB7eCwgeX0gcG9pbnRzLlxuIC0gQmV6aWVyIC0gYSBzaW5nbGUgY3ViaWMgQmV6aWVyIHdpdGggYSBzdGFydGluZyBhbmNob3IsIHR3byBjb250cm9sIHBvaW50cywgYW5kIGFuIGVuZGluZyBhbmNob3IuXG4gLSB0aGUgdmFyaWFibGUgXCJ0XCIgaXMgdHlwaWNhbGx5IHRoZSBwb3NpdGlvbiBhbG9uZyBhbiBpbmRpdmlkdWFsIEJlemllciBwYXRoICh0aW1lKSBhbmQgaXQncyBOT1QgbGluZWFyLCBtZWFuaW5nIGl0IGNvdWxkIGFjY2VsZXJhdGUvZGVjZWxlcmF0ZSBiYXNlZCBvbiB0aGUgY29udHJvbCBwb2ludHMgd2hlcmVhcyB0aGUgXCJwXCIgb3IgXCJwcm9ncmVzc1wiIHZhbHVlIGlzIGxpbmVhcmx5IG1hcHBlZCB0byB0aGUgd2hvbGUgcGF0aCwgc28gaXQgc2hvdWxkbid0IHJlYWxseSBhY2NlbGVyYXRlL2RlY2VsZXJhdGUgYmFzZWQgb24gY29udHJvbCBwb2ludHMuIFNvIGEgcHJvZ3Jlc3Mgb2YgMC4yIHdvdWxkIGJlIGFsbW9zdCBleGFjdGx5IDIwJSBhbG9uZyB0aGUgcGF0aC4gXCJ0XCIgaXMgT05MWSBpbiBhbiBpbmRpdmlkdWFsIEJlemllciBwaWVjZS5cbiAqL1xuLy9hY2NlcHRzIGJhc2ljIHNlbGVjdG9yIHRleHQsIGEgcGF0aCBpbnN0YW5jZSwgYSBSYXdQYXRoIGluc3RhbmNlLCBvciBhIFNlZ21lbnQgYW5kIHJldHVybnMgYSBSYXdQYXRoIChtYWtlcyBpdCBlYXN5IHRvIGhvbW9nZW5pemUgdGhpbmdzKS4gSWYgYW4gZWxlbWVudCBvciBzZWxlY3RvciB0ZXh0IGlzIHBhc3NlZCBpbiwgaXQnbGwgYWxzbyBjYWNoZSB0aGUgdmFsdWUgc28gdGhhdCBpZiBpdCdzIHF1ZXJpZWQgYWdhaW4sIGl0J2xsIGp1c3QgdGFrZSB0aGUgcGF0aCBkYXRhIGZyb20gdGhlcmUgaW5zdGVhZCBvZiBwYXJzaW5nIGl0IGFsbCBvdmVyIGFnYWluIChhcyBsb25nIGFzIHRoZSBwYXRoIGRhdGEgaXRzZWxmIGhhc24ndCBjaGFuZ2VkIC0gaXQnbGwgY2hlY2spLlxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYXdQYXRoKHZhbHVlKSB7XG4gIHZhbHVlID0gX2lzU3RyaW5nKHZhbHVlKSAmJiBfc2VsZWN0b3JFeHAudGVzdCh2YWx1ZSkgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHZhbHVlKSB8fCB2YWx1ZSA6IHZhbHVlO1xuICB2YXIgZSA9IHZhbHVlLmdldEF0dHJpYnV0ZSA/IHZhbHVlIDogMCxcbiAgICAgIHJhd1BhdGg7XG5cbiAgaWYgKGUgJiYgKHZhbHVlID0gdmFsdWUuZ2V0QXR0cmlidXRlKFwiZFwiKSkpIHtcbiAgICAvL2ltcGxlbWVudHMgY2FjaGluZ1xuICAgIGlmICghZS5fZ3NQYXRoKSB7XG4gICAgICBlLl9nc1BhdGggPSB7fTtcbiAgICB9XG5cbiAgICByYXdQYXRoID0gZS5fZ3NQYXRoW3ZhbHVlXTtcbiAgICByZXR1cm4gcmF3UGF0aCAmJiAhcmF3UGF0aC5fZGlydHkgPyByYXdQYXRoIDogZS5fZ3NQYXRoW3ZhbHVlXSA9IHN0cmluZ1RvUmF3UGF0aCh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gIXZhbHVlID8gY29uc29sZS53YXJuKFwiRXhwZWN0aW5nIGEgPHBhdGg+IGVsZW1lbnQgb3IgYW4gU1ZHIHBhdGggZGF0YSBzdHJpbmdcIikgOiBfaXNTdHJpbmcodmFsdWUpID8gc3RyaW5nVG9SYXdQYXRoKHZhbHVlKSA6IF9pc051bWJlcih2YWx1ZVswXSkgPyBbdmFsdWVdIDogdmFsdWU7XG59IC8vY29waWVzIGEgUmF3UGF0aCBXSVRIT1VUIHRoZSBsZW5ndGggbWV0YSBkYXRhIChmb3Igc3BlZWQpXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5UmF3UGF0aChyYXdQYXRoKSB7XG4gIHZhciBhID0gW10sXG4gICAgICBpID0gMDtcblxuICBmb3IgKDsgaSA8IHJhd1BhdGgubGVuZ3RoOyBpKyspIHtcbiAgICBhW2ldID0gX2NvcHlNZXRhRGF0YShyYXdQYXRoW2ldLCByYXdQYXRoW2ldLnNsaWNlKDApKTtcbiAgfVxuXG4gIHJldHVybiBfY29weU1ldGFEYXRhKHJhd1BhdGgsIGEpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJldmVyc2VTZWdtZW50KHNlZ21lbnQpIHtcbiAgdmFyIGkgPSAwLFxuICAgICAgeTtcbiAgc2VnbWVudC5yZXZlcnNlKCk7IC8vdGhpcyB3aWxsIGludmVydCB0aGUgb3JkZXIgeSwgeCwgeSwgeCBzbyB3ZSBtdXN0IGZsaXAgaXQgYmFjay5cblxuICBmb3IgKDsgaSA8IHNlZ21lbnQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB5ID0gc2VnbWVudFtpXTtcbiAgICBzZWdtZW50W2ldID0gc2VnbWVudFtpICsgMV07XG4gICAgc2VnbWVudFtpICsgMV0gPSB5O1xuICB9XG5cbiAgc2VnbWVudC5yZXZlcnNlZCA9ICFzZWdtZW50LnJldmVyc2VkO1xufVxuXG52YXIgX2NyZWF0ZVBhdGggPSBmdW5jdGlvbiBfY3JlYXRlUGF0aChlLCBpZ25vcmUpIHtcbiAgdmFyIHBhdGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInBhdGhcIiksXG4gICAgICBhdHRyID0gW10uc2xpY2UuY2FsbChlLmF0dHJpYnV0ZXMpLFxuICAgICAgaSA9IGF0dHIubGVuZ3RoLFxuICAgICAgbmFtZTtcbiAgaWdub3JlID0gXCIsXCIgKyBpZ25vcmUgKyBcIixcIjtcblxuICB3aGlsZSAoLS1pID4gLTEpIHtcbiAgICBuYW1lID0gYXR0cltpXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyAvL2luIE1pY3Jvc29mdCBFZGdlLCBpZiB5b3UgZG9uJ3Qgc2V0IHRoZSBhdHRyaWJ1dGUgd2l0aCBhIGxvd2VyY2FzZSBuYW1lLCBpdCBkb2Vzbid0IHJlbmRlciBjb3JyZWN0bHkhIFN1cGVyIHdlaXJkLlxuXG4gICAgaWYgKGlnbm9yZS5pbmRleE9mKFwiLFwiICsgbmFtZSArIFwiLFwiKSA8IDApIHtcbiAgICAgIHBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwgbmFtZSwgYXR0cltpXS5ub2RlVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXRoO1xufSxcbiAgICBfdHlwZUF0dHJzID0ge1xuICByZWN0OiBcInJ4LHJ5LHgseSx3aWR0aCxoZWlnaHRcIixcbiAgY2lyY2xlOiBcInIsY3gsY3lcIixcbiAgZWxsaXBzZTogXCJyeCxyeSxjeCxjeVwiLFxuICBsaW5lOiBcIngxLHgyLHkxLHkyXCJcbn0sXG4gICAgX2F0dHJUb09iaiA9IGZ1bmN0aW9uIF9hdHRyVG9PYmooZSwgYXR0cnMpIHtcbiAgdmFyIHByb3BzID0gYXR0cnMgPyBhdHRycy5zcGxpdChcIixcIikgOiBbXSxcbiAgICAgIG9iaiA9IHt9LFxuICAgICAgaSA9IHByb3BzLmxlbmd0aDtcblxuICB3aGlsZSAoLS1pID4gLTEpIHtcbiAgICBvYmpbcHJvcHNbaV1dID0gK2UuZ2V0QXR0cmlidXRlKHByb3BzW2ldKSB8fCAwO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07IC8vY29udmVydHMgYW4gU1ZHIHNoYXBlIGxpa2UgPGNpcmNsZT4sIDxyZWN0PiwgPHBvbHlnb24+LCA8cG9seWxpbmU+LCA8ZWxsaXBzZT4sIGV0Yy4gdG8gYSA8cGF0aD4sIHN3YXBwaW5nIGl0IGluIGFuZCBjb3B5aW5nIHRoZSBhdHRyaWJ1dGVzIHRvIG1hdGNoLlxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9QYXRoKGVsZW1lbnQsIHN3YXApIHtcbiAgdmFyIHR5cGUgPSBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgIGNpcmMgPSAwLjU1MjI4NDc0OTgzMSxcbiAgICAgIGRhdGEsXG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHIsXG4gICAgICByeSxcbiAgICAgIHBhdGgsXG4gICAgICByY2lyYyxcbiAgICAgIHJ5Y2lyYyxcbiAgICAgIHBvaW50cyxcbiAgICAgIHcsXG4gICAgICBoLFxuICAgICAgeDIsXG4gICAgICB4MyxcbiAgICAgIHg0LFxuICAgICAgeDUsXG4gICAgICB4NixcbiAgICAgIHkyLFxuICAgICAgeTMsXG4gICAgICB5NCxcbiAgICAgIHk1LFxuICAgICAgeTYsXG4gICAgICBhdHRyO1xuXG4gIGlmICh0eXBlID09PSBcInBhdGhcIiB8fCAhZWxlbWVudC5nZXRCQm94KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBwYXRoID0gX2NyZWF0ZVBhdGgoZWxlbWVudCwgXCJ4LHksd2lkdGgsaGVpZ2h0LGN4LGN5LHJ4LHJ5LHIseDEseDIseTEseTIscG9pbnRzXCIpO1xuICBhdHRyID0gX2F0dHJUb09iaihlbGVtZW50LCBfdHlwZUF0dHJzW3R5cGVdKTtcblxuICBpZiAodHlwZSA9PT0gXCJyZWN0XCIpIHtcbiAgICByID0gYXR0ci5yeDtcbiAgICByeSA9IGF0dHIucnkgfHwgcjtcbiAgICB4ID0gYXR0ci54O1xuICAgIHkgPSBhdHRyLnk7XG4gICAgdyA9IGF0dHIud2lkdGggLSByICogMjtcbiAgICBoID0gYXR0ci5oZWlnaHQgLSByeSAqIDI7XG5cbiAgICBpZiAociB8fCByeSkge1xuICAgICAgLy9pZiB0aGVyZSBhcmUgcm91bmRlZCBjb3JuZXJzLCByZW5kZXIgY3ViaWMgYmV6aWVyc1xuICAgICAgeDIgPSB4ICsgciAqICgxIC0gY2lyYyk7XG4gICAgICB4MyA9IHggKyByO1xuICAgICAgeDQgPSB4MyArIHc7XG4gICAgICB4NSA9IHg0ICsgciAqIGNpcmM7XG4gICAgICB4NiA9IHg0ICsgcjtcbiAgICAgIHkyID0geSArIHJ5ICogKDEgLSBjaXJjKTtcbiAgICAgIHkzID0geSArIHJ5O1xuICAgICAgeTQgPSB5MyArIGg7XG4gICAgICB5NSA9IHk0ICsgcnkgKiBjaXJjO1xuICAgICAgeTYgPSB5NCArIHJ5O1xuICAgICAgZGF0YSA9IFwiTVwiICsgeDYgKyBcIixcIiArIHkzICsgXCIgVlwiICsgeTQgKyBcIiBDXCIgKyBbeDYsIHk1LCB4NSwgeTYsIHg0LCB5NiwgeDQgLSAoeDQgLSB4MykgLyAzLCB5NiwgeDMgKyAoeDQgLSB4MykgLyAzLCB5NiwgeDMsIHk2LCB4MiwgeTYsIHgsIHk1LCB4LCB5NCwgeCwgeTQgLSAoeTQgLSB5MykgLyAzLCB4LCB5MyArICh5NCAtIHkzKSAvIDMsIHgsIHkzLCB4LCB5MiwgeDIsIHksIHgzLCB5LCB4MyArICh4NCAtIHgzKSAvIDMsIHksIHg0IC0gKHg0IC0geDMpIC8gMywgeSwgeDQsIHksIHg1LCB5LCB4NiwgeTIsIHg2LCB5M10uam9pbihcIixcIikgKyBcInpcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IFwiTVwiICsgKHggKyB3KSArIFwiLFwiICsgeSArIFwiIHZcIiArIGggKyBcIiBoXCIgKyAtdyArIFwiIHZcIiArIC1oICsgXCIgaFwiICsgdyArIFwielwiO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSBcImNpcmNsZVwiIHx8IHR5cGUgPT09IFwiZWxsaXBzZVwiKSB7XG4gICAgaWYgKHR5cGUgPT09IFwiY2lyY2xlXCIpIHtcbiAgICAgIHIgPSByeSA9IGF0dHIucjtcbiAgICAgIHJ5Y2lyYyA9IHIgKiBjaXJjO1xuICAgIH0gZWxzZSB7XG4gICAgICByID0gYXR0ci5yeDtcbiAgICAgIHJ5ID0gYXR0ci5yeTtcbiAgICAgIHJ5Y2lyYyA9IHJ5ICogY2lyYztcbiAgICB9XG5cbiAgICB4ID0gYXR0ci5jeDtcbiAgICB5ID0gYXR0ci5jeTtcbiAgICByY2lyYyA9IHIgKiBjaXJjO1xuICAgIGRhdGEgPSBcIk1cIiArICh4ICsgcikgKyBcIixcIiArIHkgKyBcIiBDXCIgKyBbeCArIHIsIHkgKyByeWNpcmMsIHggKyByY2lyYywgeSArIHJ5LCB4LCB5ICsgcnksIHggLSByY2lyYywgeSArIHJ5LCB4IC0gciwgeSArIHJ5Y2lyYywgeCAtIHIsIHksIHggLSByLCB5IC0gcnljaXJjLCB4IC0gcmNpcmMsIHkgLSByeSwgeCwgeSAtIHJ5LCB4ICsgcmNpcmMsIHkgLSByeSwgeCArIHIsIHkgLSByeWNpcmMsIHggKyByLCB5XS5qb2luKFwiLFwiKSArIFwielwiO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFwibGluZVwiKSB7XG4gICAgZGF0YSA9IFwiTVwiICsgYXR0ci54MSArIFwiLFwiICsgYXR0ci55MSArIFwiIExcIiArIGF0dHIueDIgKyBcIixcIiArIGF0dHIueTI7IC8vcHJldmlvdXNseSwgd2UganVzdCBjb252ZXJ0ZWQgdG8gXCJNeCx5IEx4LHlcIiBidXQgU2FmYXJpIGhhcyBidWdzIHRoYXQgY2F1c2UgdGhhdCBub3QgdG8gcmVuZGVyIHByb3Blcmx5IHdoZW4gdXNpbmcgYSBzdHJva2UtZGFzaGFycmF5IHRoYXQncyBub3QgZnVsbHkgdmlzaWJsZSEgVXNpbmcgYSBjdWJpYyBiZXppZXIgZml4ZXMgdGhhdCBpc3N1ZS5cbiAgfSBlbHNlIGlmICh0eXBlID09PSBcInBvbHlsaW5lXCIgfHwgdHlwZSA9PT0gXCJwb2x5Z29uXCIpIHtcbiAgICBwb2ludHMgPSAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJwb2ludHNcIikgKyBcIlwiKS5tYXRjaChfbnVtYmVyc0V4cCkgfHwgW107XG4gICAgeCA9IHBvaW50cy5zaGlmdCgpO1xuICAgIHkgPSBwb2ludHMuc2hpZnQoKTtcbiAgICBkYXRhID0gXCJNXCIgKyB4ICsgXCIsXCIgKyB5ICsgXCIgTFwiICsgcG9pbnRzLmpvaW4oXCIsXCIpO1xuXG4gICAgaWYgKHR5cGUgPT09IFwicG9seWdvblwiKSB7XG4gICAgICBkYXRhICs9IFwiLFwiICsgeCArIFwiLFwiICsgeSArIFwielwiO1xuICAgIH1cbiAgfVxuXG4gIHBhdGguc2V0QXR0cmlidXRlKFwiZFwiLCByYXdQYXRoVG9TdHJpbmcocGF0aC5fZ3NSYXdQYXRoID0gc3RyaW5nVG9SYXdQYXRoKGRhdGEpKSk7XG5cbiAgaWYgKHN3YXAgJiYgZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShwYXRoLCBlbGVtZW50KTtcbiAgICBlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gcGF0aDtcbn0gLy9yZXR1cm5zIHRoZSByb3RhdGlvbiAoaW4gZGVncmVlcykgYXQgYSBwYXJ0aWN1bGFyIHByb2dyZXNzIG9uIGEgcmF3UGF0aCAodGhlIHNsb3BlIG9mIHRoZSB0YW5nZW50KVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um90YXRpb25BdFByb2dyZXNzKHJhd1BhdGgsIHByb2dyZXNzKSB7XG4gIHZhciBkID0gZ2V0UHJvZ3Jlc3NEYXRhKHJhd1BhdGgsIHByb2dyZXNzID49IDEgPyAxIC0gMWUtOSA6IHByb2dyZXNzID8gcHJvZ3Jlc3MgOiAxZS05KTtcbiAgcmV0dXJuIGdldFJvdGF0aW9uQXRCZXppZXJUKGQuc2VnbWVudCwgZC5pLCBkLnQpO1xufVxuXG5mdW5jdGlvbiBnZXRSb3RhdGlvbkF0QmV6aWVyVChzZWdtZW50LCBpLCB0KSB7XG4gIHZhciBhID0gc2VnbWVudFtpXSxcbiAgICAgIGIgPSBzZWdtZW50W2kgKyAyXSxcbiAgICAgIGMgPSBzZWdtZW50W2kgKyA0XSxcbiAgICAgIHg7XG4gIGEgKz0gKGIgLSBhKSAqIHQ7XG4gIGIgKz0gKGMgLSBiKSAqIHQ7XG4gIGEgKz0gKGIgLSBhKSAqIHQ7XG4gIHggPSBiICsgKGMgKyAoc2VnbWVudFtpICsgNl0gLSBjKSAqIHQgLSBiKSAqIHQgLSBhO1xuICBhID0gc2VnbWVudFtpICsgMV07XG4gIGIgPSBzZWdtZW50W2kgKyAzXTtcbiAgYyA9IHNlZ21lbnRbaSArIDVdO1xuICBhICs9IChiIC0gYSkgKiB0O1xuICBiICs9IChjIC0gYikgKiB0O1xuICBhICs9IChiIC0gYSkgKiB0O1xuICByZXR1cm4gX3JvdW5kKF9hdGFuMihiICsgKGMgKyAoc2VnbWVudFtpICsgN10gLSBjKSAqIHQgLSBiKSAqIHQgLSBhLCB4KSAqIF9SQUQyREVHKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlUmF3UGF0aChyYXdQYXRoLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IF9pc1VuZGVmaW5lZChlbmQpID8gMSA6IF9yb3VuZFByZWNpc2UoZW5kKSB8fCAwOyAvLyB3ZSBtdXN0IHJvdW5kIHRvIGF2b2lkIGlzc3VlcyBsaWtlIDQuMTUgLyA4ID0gMC44MzAwMDAwMDAwMDAwMDAxIGluc3RlYWQgb2YgMC44MyBvciAyLjggLyA1ID0gMC41NTk5OTk5OTk5OTk5OTk5IGluc3RlYWQgb2YgMC41NiBhbmQgaWYgc29tZW9uZSBpcyBkb2luZyBhIGxvb3AgbGlrZSBzdGFydDogMi44IC8gMC41LCBlbmQ6IDIuOCAvIDAuNSArIDEuXG5cbiAgc3RhcnQgPSBfcm91bmRQcmVjaXNlKHN0YXJ0KSB8fCAwO1xuICB2YXIgbG9vcHMgPSBNYXRoLm1heCgwLCB+fihfYWJzKGVuZCAtIHN0YXJ0KSAtIDFlLTgpKSxcbiAgICAgIHBhdGggPSBjb3B5UmF3UGF0aChyYXdQYXRoKTtcblxuICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICBzdGFydCA9IDEgLSBzdGFydDtcbiAgICBlbmQgPSAxIC0gZW5kO1xuXG4gICAgX3JldmVyc2VSYXdQYXRoKHBhdGgpO1xuXG4gICAgcGF0aC50b3RhbExlbmd0aCA9IDA7XG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA8IDApIHtcbiAgICB2YXIgb2Zmc2V0ID0gTWF0aC5hYnMofn5NYXRoLm1pbihzdGFydCwgZW5kKSkgKyAxO1xuICAgIHN0YXJ0ICs9IG9mZnNldDtcbiAgICBlbmQgKz0gb2Zmc2V0O1xuICB9XG5cbiAgcGF0aC50b3RhbExlbmd0aCB8fCBjYWNoZVJhd1BhdGhNZWFzdXJlbWVudHMocGF0aCk7XG4gIHZhciB3cmFwID0gZW5kID4gMSxcbiAgICAgIHMgPSBnZXRQcm9ncmVzc0RhdGEocGF0aCwgc3RhcnQsIF90ZW1wLCB0cnVlKSxcbiAgICAgIGUgPSBnZXRQcm9ncmVzc0RhdGEocGF0aCwgZW5kLCBfdGVtcDIpLFxuICAgICAgZVNlZyA9IGUuc2VnbWVudCxcbiAgICAgIHNTZWcgPSBzLnNlZ21lbnQsXG4gICAgICBlU2VnSW5kZXggPSBlLnNlZ0luZGV4LFxuICAgICAgc1NlZ0luZGV4ID0gcy5zZWdJbmRleCxcbiAgICAgIGVpID0gZS5pLFxuICAgICAgc2kgPSBzLmksXG4gICAgICBzYW1lU2VnbWVudCA9IHNTZWdJbmRleCA9PT0gZVNlZ0luZGV4LFxuICAgICAgc2FtZUJlemllciA9IGVpID09PSBzaSAmJiBzYW1lU2VnbWVudCxcbiAgICAgIHdyYXBzQmVoaW5kLFxuICAgICAgc1NoaWZ0LFxuICAgICAgZVNoaWZ0LFxuICAgICAgaSxcbiAgICAgIGNvcHksXG4gICAgICB0b3RhbFNlZ21lbnRzLFxuICAgICAgbCxcbiAgICAgIGo7XG5cbiAgaWYgKHdyYXAgfHwgbG9vcHMpIHtcbiAgICB3cmFwc0JlaGluZCA9IGVTZWdJbmRleCA8IHNTZWdJbmRleCB8fCBzYW1lU2VnbWVudCAmJiBlaSA8IHNpIHx8IHNhbWVCZXppZXIgJiYgZS50IDwgcy50O1xuXG4gICAgaWYgKF9zcGxpdFNlZ21lbnQocGF0aCwgc1NlZ0luZGV4LCBzaSwgcy50KSkge1xuICAgICAgc1NlZ0luZGV4Kys7XG5cbiAgICAgIGlmICghd3JhcHNCZWhpbmQpIHtcbiAgICAgICAgZVNlZ0luZGV4Kys7XG5cbiAgICAgICAgaWYgKHNhbWVCZXppZXIpIHtcbiAgICAgICAgICBlLnQgPSAoZS50IC0gcy50KSAvICgxIC0gcy50KTtcbiAgICAgICAgICBlaSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoc2FtZVNlZ21lbnQpIHtcbiAgICAgICAgICBlaSAtPSBzaTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChNYXRoLmFicygxIC0gKGVuZCAtIHN0YXJ0KSkgPCAxZS01KSB7XG4gICAgICBlU2VnSW5kZXggPSBzU2VnSW5kZXggLSAxO1xuICAgIH0gZWxzZSBpZiAoIWUudCAmJiBlU2VnSW5kZXgpIHtcbiAgICAgIGVTZWdJbmRleC0tO1xuICAgIH0gZWxzZSBpZiAoX3NwbGl0U2VnbWVudChwYXRoLCBlU2VnSW5kZXgsIGVpLCBlLnQpICYmIHdyYXBzQmVoaW5kKSB7XG4gICAgICBzU2VnSW5kZXgrKztcbiAgICB9XG5cbiAgICBpZiAocy50ID09PSAxKSB7XG4gICAgICBzU2VnSW5kZXggPSAoc1NlZ0luZGV4ICsgMSkgJSBwYXRoLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb3B5ID0gW107XG4gICAgdG90YWxTZWdtZW50cyA9IHBhdGgubGVuZ3RoO1xuICAgIGwgPSAxICsgdG90YWxTZWdtZW50cyAqIGxvb3BzO1xuICAgIGogPSBzU2VnSW5kZXg7XG4gICAgbCArPSAodG90YWxTZWdtZW50cyAtIHNTZWdJbmRleCArIGVTZWdJbmRleCkgJSB0b3RhbFNlZ21lbnRzO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgX2FwcGVuZE9yTWVyZ2UoY29weSwgcGF0aFtqKysgJSB0b3RhbFNlZ21lbnRzXSk7XG4gICAgfVxuXG4gICAgcGF0aCA9IGNvcHk7XG4gIH0gZWxzZSB7XG4gICAgZVNoaWZ0ID0gZS50ID09PSAxID8gNiA6IHN1YmRpdmlkZVNlZ21lbnQoZVNlZywgZWksIGUudCk7XG5cbiAgICBpZiAoc3RhcnQgIT09IGVuZCkge1xuICAgICAgc1NoaWZ0ID0gc3ViZGl2aWRlU2VnbWVudChzU2VnLCBzaSwgc2FtZUJlemllciA/IHMudCAvIGUudCA6IHMudCk7XG4gICAgICBzYW1lU2VnbWVudCAmJiAoZVNoaWZ0ICs9IHNTaGlmdCk7XG4gICAgICBlU2VnLnNwbGljZShlaSArIGVTaGlmdCArIDIpO1xuICAgICAgKHNTaGlmdCB8fCBzaSkgJiYgc1NlZy5zcGxpY2UoMCwgc2kgKyBzU2hpZnQpO1xuICAgICAgaSA9IHBhdGgubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIC8vY2hvcCBvZmYgYW55IGV4dHJhIHNlZ21lbnRzXG4gICAgICAgIChpIDwgc1NlZ0luZGV4IHx8IGkgPiBlU2VnSW5kZXgpICYmIHBhdGguc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlU2VnLmFuZ2xlID0gZ2V0Um90YXRpb25BdEJlemllclQoZVNlZywgZWkgKyBlU2hpZnQsIDApOyAvL3JlY29yZCB0aGUgdmFsdWUgYmVmb3JlIHdlIGNob3AgYmVjYXVzZSBpdCdsbCBiZSBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgYW5nbGUgYWZ0ZXIgaXRzIGxlbmd0aCBpcyAwIVxuXG4gICAgICBlaSArPSBlU2hpZnQ7XG4gICAgICBzID0gZVNlZ1tlaV07XG4gICAgICBlID0gZVNlZ1tlaSArIDFdO1xuICAgICAgZVNlZy5sZW5ndGggPSBlU2VnLnRvdGFsTGVuZ3RoID0gMDtcbiAgICAgIGVTZWcudG90YWxQb2ludHMgPSBwYXRoLnRvdGFsUG9pbnRzID0gODtcbiAgICAgIGVTZWcucHVzaChzLCBlLCBzLCBlLCBzLCBlLCBzLCBlKTtcbiAgICB9XG4gIH1cblxuICBwYXRoLnRvdGFsTGVuZ3RoID0gMDtcbiAgcmV0dXJuIHBhdGg7XG59IC8vbWVhc3VyZXMgYSBTZWdtZW50IGFjY29yZGluZyB0byBpdHMgcmVzb2x1dGlvbiAoc28gaWYgc2VnbWVudC5yZXNvbHV0aW9uIGlzIDYsIGZvciBleGFtcGxlLCBpdCdsbCB0YWtlIDYgc2FtcGxlcyBlcXVhbGx5IGFjcm9zcyBlYWNoIEJlemllcikgYW5kIGNyZWF0ZS9wb3B1bGF0ZSBhIFwic2FtcGxlc1wiIEFycmF5IHRoYXQgaGFzIHRoZSBsZW5ndGggdXAgdG8gZWFjaCBvZiB0aG9zZSBzYW1wbGUgcG9pbnRzIChhbHdheXMgaW5jcmVhc2luZyBmcm9tIHRoZSBzdGFydCkgYXMgd2VsbCBhcyBhIFwibG9va3VwXCIgYXJyYXkgdGhhdCdzIGJyb2tlbiB1cCBhY2NvcmRpbmcgdG8gdGhlIHNtYWxsZXN0IGRpc3RhbmNlIGJldHdlZW4gMiBzYW1wbGVzLiBUaGlzIGdpdmVzIHVzIGEgdmVyeSBmYXN0IHdheSBvZiBsb29raW5nIHVwIGEgcHJvZ3Jlc3MgcG9zaXRpb24gcmF0aGVyIHRoYW4gbG9vcGluZyB0aHJvdWdoIGFsbCB0aGUgcG9pbnRzL0JlemllcnMuIFlvdSBjYW4gb3B0aW9uYWxseSBoYXZlIGl0IG9ubHkgbWVhc3VyZSBhIHN1YnNldCwgc3RhcnRpbmcgYXQgc3RhcnRJbmRleCBhbmQgZ29pbmcgZm9yIGEgc3BlY2lmaWMgbnVtYmVyIG9mIGJlemllcnMgKHJlbWVtYmVyLCB0aGVyZSBhcmUgMyB4L3kgcGFpcnMgZWFjaCwgZm9yIGEgdG90YWwgb2YgNiBlbGVtZW50cyBmb3IgZWFjaCBCZXppZXIpLiBJdCB3aWxsIGFsc28gcG9wdWxhdGUgYSBcInRvdGFsTGVuZ3RoXCIgcHJvcGVydHksIGJ1dCB0aGF0J3Mgbm90IGdlbmVyYWxseSBzdXBlciBhY2N1cmF0ZSBiZWNhdXNlIGJ5IGRlZmF1bHQgaXQnbGwgb25seSB0YWtlIDYgc2FtcGxlcyBwZXIgQmV6aWVyLiBCdXQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGl0J3MgcGVyZmVjdGx5IGFkZXF1YXRlIGZvciBtZWFzdXJpbmcgcHJvZ3Jlc3MgdmFsdWVzIGFsb25nIHRoZSBwYXRoLiBJZiB5b3UgbmVlZCBhIG1vcmUgYWNjdXJhdGUgdG90YWxMZW5ndGgsIGVpdGhlciBpbmNyZWFzZSB0aGUgcmVzb2x1dGlvbiBvciB1c2UgdGhlIG1vcmUgYWR2YW5jZWQgYmV6aWVyVG9Qb2ludHMoKSBtZXRob2Qgd2hpY2gga2VlcHMgYWRkaW5nIHBvaW50cyB1bnRpbCB0aGV5IGRvbid0IGRldmlhdGUgYnkgbW9yZSB0aGFuIGEgY2VydGFpbiBwcmVjaXNpb24gdmFsdWUuXG5cbmZ1bmN0aW9uIG1lYXN1cmVTZWdtZW50KHNlZ21lbnQsIHN0YXJ0SW5kZXgsIGJlemllclF0eSkge1xuICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCB8fCAwO1xuXG4gIGlmICghc2VnbWVudC5zYW1wbGVzKSB7XG4gICAgc2VnbWVudC5zYW1wbGVzID0gW107XG4gICAgc2VnbWVudC5sb29rdXAgPSBbXTtcbiAgfVxuXG4gIHZhciByZXNvbHV0aW9uID0gfn5zZWdtZW50LnJlc29sdXRpb24gfHwgMTIsXG4gICAgICBpbmMgPSAxIC8gcmVzb2x1dGlvbixcbiAgICAgIGVuZEluZGV4ID0gYmV6aWVyUXR5ID8gc3RhcnRJbmRleCArIGJlemllclF0eSAqIDYgKyAxIDogc2VnbWVudC5sZW5ndGgsXG4gICAgICB4MSA9IHNlZ21lbnRbc3RhcnRJbmRleF0sXG4gICAgICB5MSA9IHNlZ21lbnRbc3RhcnRJbmRleCArIDFdLFxuICAgICAgc2FtcGxlc0luZGV4ID0gc3RhcnRJbmRleCA/IHN0YXJ0SW5kZXggLyA2ICogcmVzb2x1dGlvbiA6IDAsXG4gICAgICBzYW1wbGVzID0gc2VnbWVudC5zYW1wbGVzLFxuICAgICAgbG9va3VwID0gc2VnbWVudC5sb29rdXAsXG4gICAgICBtaW4gPSAoc3RhcnRJbmRleCA/IHNlZ21lbnQubWluTGVuZ3RoIDogX2xhcmdlTnVtKSB8fCBfbGFyZ2VOdW0sXG4gICAgICBwcmV2TGVuZ3RoID0gc2FtcGxlc1tzYW1wbGVzSW5kZXggKyBiZXppZXJRdHkgKiByZXNvbHV0aW9uIC0gMV0sXG4gICAgICBsZW5ndGggPSBzdGFydEluZGV4ID8gc2FtcGxlc1tzYW1wbGVzSW5kZXggLSAxXSA6IDAsXG4gICAgICBpLFxuICAgICAgaixcbiAgICAgIHg0LFxuICAgICAgeDMsXG4gICAgICB4MixcbiAgICAgIHhkLFxuICAgICAgeGQxLFxuICAgICAgeTQsXG4gICAgICB5MyxcbiAgICAgIHkyLFxuICAgICAgeWQsXG4gICAgICB5ZDEsXG4gICAgICBpbnYsXG4gICAgICB0LFxuICAgICAgbGVuZ3RoSW5kZXgsXG4gICAgICBsLFxuICAgICAgc2VnTGVuZ3RoO1xuICBzYW1wbGVzLmxlbmd0aCA9IGxvb2t1cC5sZW5ndGggPSAwO1xuXG4gIGZvciAoaiA9IHN0YXJ0SW5kZXggKyAyOyBqIDwgZW5kSW5kZXg7IGogKz0gNikge1xuICAgIHg0ID0gc2VnbWVudFtqICsgNF0gLSB4MTtcbiAgICB4MyA9IHNlZ21lbnRbaiArIDJdIC0geDE7XG4gICAgeDIgPSBzZWdtZW50W2pdIC0geDE7XG4gICAgeTQgPSBzZWdtZW50W2ogKyA1XSAtIHkxO1xuICAgIHkzID0gc2VnbWVudFtqICsgM10gLSB5MTtcbiAgICB5MiA9IHNlZ21lbnRbaiArIDFdIC0geTE7XG4gICAgeGQgPSB4ZDEgPSB5ZCA9IHlkMSA9IDA7XG5cbiAgICBpZiAoX2Ficyh4NCkgPCAuMDEgJiYgX2Ficyh5NCkgPCAuMDEgJiYgX2Ficyh4MikgKyBfYWJzKHkyKSA8IC4wMSkge1xuICAgICAgLy9kdW1wIHBvaW50cyB0aGF0IGFyZSBzdWZmaWNpZW50bHkgY2xvc2UgKGJhc2ljYWxseSByaWdodCBvbiB0b3Agb2YgZWFjaCBvdGhlciwgbWFraW5nIGEgYmV6aWVyIHN1cGVyIHRpbnkgb3IgMCBsZW5ndGgpXG4gICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA4KSB7XG4gICAgICAgIHNlZ21lbnQuc3BsaWNlKGosIDYpO1xuICAgICAgICBqIC09IDY7XG4gICAgICAgIGVuZEluZGV4IC09IDY7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoaSA9IDE7IGkgPD0gcmVzb2x1dGlvbjsgaSsrKSB7XG4gICAgICAgIHQgPSBpbmMgKiBpO1xuICAgICAgICBpbnYgPSAxIC0gdDtcbiAgICAgICAgeGQgPSB4ZDEgLSAoeGQxID0gKHQgKiB0ICogeDQgKyAzICogaW52ICogKHQgKiB4MyArIGludiAqIHgyKSkgKiB0KTtcbiAgICAgICAgeWQgPSB5ZDEgLSAoeWQxID0gKHQgKiB0ICogeTQgKyAzICogaW52ICogKHQgKiB5MyArIGludiAqIHkyKSkgKiB0KTtcbiAgICAgICAgbCA9IF9zcXJ0KHlkICogeWQgKyB4ZCAqIHhkKTtcblxuICAgICAgICBpZiAobCA8IG1pbikge1xuICAgICAgICAgIG1pbiA9IGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZW5ndGggKz0gbDtcbiAgICAgICAgc2FtcGxlc1tzYW1wbGVzSW5kZXgrK10gPSBsZW5ndGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgeDEgKz0geDQ7XG4gICAgeTEgKz0geTQ7XG4gIH1cblxuICBpZiAocHJldkxlbmd0aCkge1xuICAgIHByZXZMZW5ndGggLT0gbGVuZ3RoO1xuXG4gICAgZm9yICg7IHNhbXBsZXNJbmRleCA8IHNhbXBsZXMubGVuZ3RoOyBzYW1wbGVzSW5kZXgrKykge1xuICAgICAgc2FtcGxlc1tzYW1wbGVzSW5kZXhdICs9IHByZXZMZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgaWYgKHNhbXBsZXMubGVuZ3RoICYmIG1pbikge1xuICAgIHNlZ21lbnQudG90YWxMZW5ndGggPSBzZWdMZW5ndGggPSBzYW1wbGVzW3NhbXBsZXMubGVuZ3RoIC0gMV0gfHwgMDtcbiAgICBzZWdtZW50Lm1pbkxlbmd0aCA9IG1pbjtcblxuICAgIGlmIChzZWdMZW5ndGggLyBtaW4gPCA5OTk5KSB7XG4gICAgICAvLyBpZiB0aGUgbG9va3VwIHdvdWxkIHJlcXVpcmUgdG9vIG1hbnkgdmFsdWVzIChtZW1vcnkgcHJvYmxlbSksIHdlIHNraXAgdGhpcyBhbmQgaW5zdGVhZCB3ZSB1c2UgYSBsb29wIHRvIGxvb2t1cCB2YWx1ZXMgZGlyZWN0bHkgaW4gdGhlIHNhbXBsZXMgQXJyYXlcbiAgICAgIGwgPSBsZW5ndGhJbmRleCA9IDA7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBzZWdMZW5ndGg7IGkgKz0gbWluKSB7XG4gICAgICAgIGxvb2t1cFtsKytdID0gc2FtcGxlc1tsZW5ndGhJbmRleF0gPCBpID8gKytsZW5ndGhJbmRleCA6IGxlbmd0aEluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzZWdtZW50LnRvdGFsTGVuZ3RoID0gc2FtcGxlc1swXSA9IDA7XG4gIH1cblxuICByZXR1cm4gc3RhcnRJbmRleCA/IGxlbmd0aCAtIHNhbXBsZXNbc3RhcnRJbmRleCAvIDIgLSAxXSA6IGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlUmF3UGF0aE1lYXN1cmVtZW50cyhyYXdQYXRoLCByZXNvbHV0aW9uKSB7XG4gIHZhciBwYXRoTGVuZ3RoLCBwb2ludHMsIGk7XG5cbiAgZm9yIChpID0gcGF0aExlbmd0aCA9IHBvaW50cyA9IDA7IGkgPCByYXdQYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgcmF3UGF0aFtpXS5yZXNvbHV0aW9uID0gfn5yZXNvbHV0aW9uIHx8IDEyOyAvL3N0ZXBzIHBlciBCZXppZXIgY3VydmUgKGFuY2hvciwgMiBjb250cm9sIHBvaW50cywgdG8gYW5jaG9yKVxuXG4gICAgcG9pbnRzICs9IHJhd1BhdGhbaV0ubGVuZ3RoO1xuICAgIHBhdGhMZW5ndGggKz0gbWVhc3VyZVNlZ21lbnQocmF3UGF0aFtpXSk7XG4gIH1cblxuICByYXdQYXRoLnRvdGFsUG9pbnRzID0gcG9pbnRzO1xuICByYXdQYXRoLnRvdGFsTGVuZ3RoID0gcGF0aExlbmd0aDtcbiAgcmV0dXJuIHJhd1BhdGg7XG59IC8vZGl2aWRlIHNlZ21lbnRbaV0gYXQgcG9zaXRpb24gdCAodmFsdWUgYmV0d2VlbiAwIGFuZCAxLCBwcm9ncmVzcyBhbG9uZyB0aGF0IHBhcnRpY3VsYXIgY3ViaWMgYmV6aWVyIHNlZ21lbnQgdGhhdCBzdGFydHMgYXQgc2VnbWVudFtpXSkuIFJldHVybnMgaG93IG1hbnkgZWxlbWVudHMgd2VyZSBzcGxpY2VkIGludG8gdGhlIHNlZ21lbnQgYXJyYXkgKGVpdGhlciAwIG9yIDYpXG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJkaXZpZGVTZWdtZW50KHNlZ21lbnQsIGksIHQpIHtcbiAgaWYgKHQgPD0gMCB8fCB0ID49IDEpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciBheCA9IHNlZ21lbnRbaV0sXG4gICAgICBheSA9IHNlZ21lbnRbaSArIDFdLFxuICAgICAgY3AxeCA9IHNlZ21lbnRbaSArIDJdLFxuICAgICAgY3AxeSA9IHNlZ21lbnRbaSArIDNdLFxuICAgICAgY3AyeCA9IHNlZ21lbnRbaSArIDRdLFxuICAgICAgY3AyeSA9IHNlZ21lbnRbaSArIDVdLFxuICAgICAgYnggPSBzZWdtZW50W2kgKyA2XSxcbiAgICAgIGJ5ID0gc2VnbWVudFtpICsgN10sXG4gICAgICB4MWEgPSBheCArIChjcDF4IC0gYXgpICogdCxcbiAgICAgIHgyID0gY3AxeCArIChjcDJ4IC0gY3AxeCkgKiB0LFxuICAgICAgeTFhID0gYXkgKyAoY3AxeSAtIGF5KSAqIHQsXG4gICAgICB5MiA9IGNwMXkgKyAoY3AyeSAtIGNwMXkpICogdCxcbiAgICAgIHgxID0geDFhICsgKHgyIC0geDFhKSAqIHQsXG4gICAgICB5MSA9IHkxYSArICh5MiAtIHkxYSkgKiB0LFxuICAgICAgeDJhID0gY3AyeCArIChieCAtIGNwMngpICogdCxcbiAgICAgIHkyYSA9IGNwMnkgKyAoYnkgLSBjcDJ5KSAqIHQ7XG4gIHgyICs9ICh4MmEgLSB4MikgKiB0O1xuICB5MiArPSAoeTJhIC0geTIpICogdDtcbiAgc2VnbWVudC5zcGxpY2UoaSArIDIsIDQsIF9yb3VuZCh4MWEpLCAvL2ZpcnN0IGNvbnRyb2wgcG9pbnRcbiAgX3JvdW5kKHkxYSksIF9yb3VuZCh4MSksIC8vc2Vjb25kIGNvbnRyb2wgcG9pbnRcbiAgX3JvdW5kKHkxKSwgX3JvdW5kKHgxICsgKHgyIC0geDEpICogdCksIC8vbmV3IGZhYnJpY2F0ZWQgYW5jaG9yIG9uIGxpbmVcbiAgX3JvdW5kKHkxICsgKHkyIC0geTEpICogdCksIF9yb3VuZCh4MiksIC8vdGhpcmQgY29udHJvbCBwb2ludFxuICBfcm91bmQoeTIpLCBfcm91bmQoeDJhKSwgLy9mb3VydGggY29udHJvbCBwb2ludFxuICBfcm91bmQoeTJhKSk7XG4gIHNlZ21lbnQuc2FtcGxlcyAmJiBzZWdtZW50LnNhbXBsZXMuc3BsaWNlKGkgLyA2ICogc2VnbWVudC5yZXNvbHV0aW9uIHwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7XG4gIHJldHVybiA2O1xufSAvLyByZXR1cm5zIGFuIG9iamVjdCB7cGF0aCwgc2VnbWVudCwgc2VnSW5kZXgsIGksIHR9XG5cbmZ1bmN0aW9uIGdldFByb2dyZXNzRGF0YShyYXdQYXRoLCBwcm9ncmVzcywgZGVjb3JhdGVlLCBwdXNoVG9OZXh0SWZBdEVuZCkge1xuICBkZWNvcmF0ZWUgPSBkZWNvcmF0ZWUgfHwge307XG4gIHJhd1BhdGgudG90YWxMZW5ndGggfHwgY2FjaGVSYXdQYXRoTWVhc3VyZW1lbnRzKHJhd1BhdGgpO1xuXG4gIGlmIChwcm9ncmVzcyA8IDAgfHwgcHJvZ3Jlc3MgPiAxKSB7XG4gICAgcHJvZ3Jlc3MgPSBfd3JhcFByb2dyZXNzKHByb2dyZXNzKTtcbiAgfVxuXG4gIHZhciBzZWdJbmRleCA9IDAsXG4gICAgICBzZWdtZW50ID0gcmF3UGF0aFswXSxcbiAgICAgIHNhbXBsZXMsXG4gICAgICByZXNvbHV0aW9uLFxuICAgICAgbGVuZ3RoLFxuICAgICAgbWluLFxuICAgICAgbWF4LFxuICAgICAgaSxcbiAgICAgIHQ7XG5cbiAgaWYgKCFwcm9ncmVzcykge1xuICAgIHQgPSBpID0gc2VnSW5kZXggPSAwO1xuICAgIHNlZ21lbnQgPSByYXdQYXRoWzBdO1xuICB9IGVsc2UgaWYgKHByb2dyZXNzID09PSAxKSB7XG4gICAgdCA9IDE7XG4gICAgc2VnSW5kZXggPSByYXdQYXRoLmxlbmd0aCAtIDE7XG4gICAgc2VnbWVudCA9IHJhd1BhdGhbc2VnSW5kZXhdO1xuICAgIGkgPSBzZWdtZW50Lmxlbmd0aCAtIDg7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHJhd1BhdGgubGVuZ3RoID4gMSkge1xuICAgICAgLy9zcGVlZCBvcHRpbWl6YXRpb246IG1vc3Qgb2YgdGhlIHRpbWUsIHRoZXJlJ3Mgb25seSBvbmUgc2VnbWVudCBzbyBza2lwIHRoZSByZWN1cnNpb24uXG4gICAgICBsZW5ndGggPSByYXdQYXRoLnRvdGFsTGVuZ3RoICogcHJvZ3Jlc3M7XG4gICAgICBtYXggPSBpID0gMDtcblxuICAgICAgd2hpbGUgKChtYXggKz0gcmF3UGF0aFtpKytdLnRvdGFsTGVuZ3RoKSA8IGxlbmd0aCkge1xuICAgICAgICBzZWdJbmRleCA9IGk7XG4gICAgICB9XG5cbiAgICAgIHNlZ21lbnQgPSByYXdQYXRoW3NlZ0luZGV4XTtcbiAgICAgIG1pbiA9IG1heCAtIHNlZ21lbnQudG90YWxMZW5ndGg7XG4gICAgICBwcm9ncmVzcyA9IChsZW5ndGggLSBtaW4pIC8gKG1heCAtIG1pbikgfHwgMDtcbiAgICB9XG5cbiAgICBzYW1wbGVzID0gc2VnbWVudC5zYW1wbGVzO1xuICAgIHJlc29sdXRpb24gPSBzZWdtZW50LnJlc29sdXRpb247IC8vaG93IG1hbnkgc2FtcGxlcyBwZXIgY3ViaWMgYmV6aWVyIGNodW5rXG5cbiAgICBsZW5ndGggPSBzZWdtZW50LnRvdGFsTGVuZ3RoICogcHJvZ3Jlc3M7XG4gICAgaSA9IHNlZ21lbnQubG9va3VwLmxlbmd0aCA/IHNlZ21lbnQubG9va3VwW35+KGxlbmd0aCAvIHNlZ21lbnQubWluTGVuZ3RoKV0gfHwgMCA6IF9nZXRTYW1wbGVJbmRleChzYW1wbGVzLCBsZW5ndGgsIHByb2dyZXNzKTtcbiAgICBtaW4gPSBpID8gc2FtcGxlc1tpIC0gMV0gOiAwO1xuICAgIG1heCA9IHNhbXBsZXNbaV07XG5cbiAgICBpZiAobWF4IDwgbGVuZ3RoKSB7XG4gICAgICBtaW4gPSBtYXg7XG4gICAgICBtYXggPSBzYW1wbGVzWysraV07XG4gICAgfVxuXG4gICAgdCA9IDEgLyByZXNvbHV0aW9uICogKChsZW5ndGggLSBtaW4pIC8gKG1heCAtIG1pbikgKyBpICUgcmVzb2x1dGlvbik7XG4gICAgaSA9IH5+KGkgLyByZXNvbHV0aW9uKSAqIDY7XG5cbiAgICBpZiAocHVzaFRvTmV4dElmQXRFbmQgJiYgdCA9PT0gMSkge1xuICAgICAgaWYgKGkgKyA2IDwgc2VnbWVudC5sZW5ndGgpIHtcbiAgICAgICAgaSArPSA2O1xuICAgICAgICB0ID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoc2VnSW5kZXggKyAxIDwgcmF3UGF0aC5sZW5ndGgpIHtcbiAgICAgICAgaSA9IHQgPSAwO1xuICAgICAgICBzZWdtZW50ID0gcmF3UGF0aFsrK3NlZ0luZGV4XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkZWNvcmF0ZWUudCA9IHQ7XG4gIGRlY29yYXRlZS5pID0gaTtcbiAgZGVjb3JhdGVlLnBhdGggPSByYXdQYXRoO1xuICBkZWNvcmF0ZWUuc2VnbWVudCA9IHNlZ21lbnQ7XG4gIGRlY29yYXRlZS5zZWdJbmRleCA9IHNlZ0luZGV4O1xuICByZXR1cm4gZGVjb3JhdGVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9zaXRpb25PblBhdGgocmF3UGF0aCwgcHJvZ3Jlc3MsIGluY2x1ZGVBbmdsZSwgcG9pbnQpIHtcbiAgdmFyIHNlZ21lbnQgPSByYXdQYXRoWzBdLFxuICAgICAgcmVzdWx0ID0gcG9pbnQgfHwge30sXG4gICAgICBzYW1wbGVzLFxuICAgICAgcmVzb2x1dGlvbixcbiAgICAgIGxlbmd0aCxcbiAgICAgIG1pbixcbiAgICAgIG1heCxcbiAgICAgIGksXG4gICAgICB0LFxuICAgICAgYSxcbiAgICAgIGludjtcblxuICBpZiAocHJvZ3Jlc3MgPCAwIHx8IHByb2dyZXNzID4gMSkge1xuICAgIHByb2dyZXNzID0gX3dyYXBQcm9ncmVzcyhwcm9ncmVzcyk7XG4gIH1cblxuICBzZWdtZW50Lmxvb2t1cCB8fCBjYWNoZVJhd1BhdGhNZWFzdXJlbWVudHMocmF3UGF0aCk7XG5cbiAgaWYgKHJhd1BhdGgubGVuZ3RoID4gMSkge1xuICAgIC8vc3BlZWQgb3B0aW1pemF0aW9uOiBtb3N0IG9mIHRoZSB0aW1lLCB0aGVyZSdzIG9ubHkgb25lIHNlZ21lbnQgc28gc2tpcCB0aGUgcmVjdXJzaW9uLlxuICAgIGxlbmd0aCA9IHJhd1BhdGgudG90YWxMZW5ndGggKiBwcm9ncmVzcztcbiAgICBtYXggPSBpID0gMDtcblxuICAgIHdoaWxlICgobWF4ICs9IHJhd1BhdGhbaSsrXS50b3RhbExlbmd0aCkgPCBsZW5ndGgpIHtcbiAgICAgIHNlZ21lbnQgPSByYXdQYXRoW2ldO1xuICAgIH1cblxuICAgIG1pbiA9IG1heCAtIHNlZ21lbnQudG90YWxMZW5ndGg7XG4gICAgcHJvZ3Jlc3MgPSAobGVuZ3RoIC0gbWluKSAvIChtYXggLSBtaW4pIHx8IDA7XG4gIH1cblxuICBzYW1wbGVzID0gc2VnbWVudC5zYW1wbGVzO1xuICByZXNvbHV0aW9uID0gc2VnbWVudC5yZXNvbHV0aW9uO1xuICBsZW5ndGggPSBzZWdtZW50LnRvdGFsTGVuZ3RoICogcHJvZ3Jlc3M7XG4gIGkgPSBzZWdtZW50Lmxvb2t1cC5sZW5ndGggPyBzZWdtZW50Lmxvb2t1cFtwcm9ncmVzcyA8IDEgPyB+fihsZW5ndGggLyBzZWdtZW50Lm1pbkxlbmd0aCkgOiBzZWdtZW50Lmxvb2t1cC5sZW5ndGggLSAxXSB8fCAwIDogX2dldFNhbXBsZUluZGV4KHNhbXBsZXMsIGxlbmd0aCwgcHJvZ3Jlc3MpO1xuICBtaW4gPSBpID8gc2FtcGxlc1tpIC0gMV0gOiAwO1xuICBtYXggPSBzYW1wbGVzW2ldO1xuXG4gIGlmIChtYXggPCBsZW5ndGgpIHtcbiAgICBtaW4gPSBtYXg7XG4gICAgbWF4ID0gc2FtcGxlc1srK2ldO1xuICB9XG5cbiAgdCA9IDEgLyByZXNvbHV0aW9uICogKChsZW5ndGggLSBtaW4pIC8gKG1heCAtIG1pbikgKyBpICUgcmVzb2x1dGlvbikgfHwgMDtcbiAgaW52ID0gMSAtIHQ7XG4gIGkgPSB+fihpIC8gcmVzb2x1dGlvbikgKiA2O1xuICBhID0gc2VnbWVudFtpXTtcbiAgcmVzdWx0LnggPSBfcm91bmQoKHQgKiB0ICogKHNlZ21lbnRbaSArIDZdIC0gYSkgKyAzICogaW52ICogKHQgKiAoc2VnbWVudFtpICsgNF0gLSBhKSArIGludiAqIChzZWdtZW50W2kgKyAyXSAtIGEpKSkgKiB0ICsgYSk7XG4gIHJlc3VsdC55ID0gX3JvdW5kKCh0ICogdCAqIChzZWdtZW50W2kgKyA3XSAtIChhID0gc2VnbWVudFtpICsgMV0pKSArIDMgKiBpbnYgKiAodCAqIChzZWdtZW50W2kgKyA1XSAtIGEpICsgaW52ICogKHNlZ21lbnRbaSArIDNdIC0gYSkpKSAqIHQgKyBhKTtcblxuICBpZiAoaW5jbHVkZUFuZ2xlKSB7XG4gICAgcmVzdWx0LmFuZ2xlID0gc2VnbWVudC50b3RhbExlbmd0aCA/IGdldFJvdGF0aW9uQXRCZXppZXJUKHNlZ21lbnQsIGksIHQgPj0gMSA/IDEgLSAxZS05IDogdCA/IHQgOiAxZS05KSA6IHNlZ21lbnQuYW5nbGUgfHwgMDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59IC8vYXBwbGllcyBhIG1hdHJpeCB0cmFuc2Zvcm0gdG8gUmF3UGF0aCAob3IgYSBzZWdtZW50IGluIGEgUmF3UGF0aCkgYW5kIHJldHVybnMgd2hhdGV2ZXIgd2FzIHBhc3NlZCBpbiAoaXQgdHJhbnNmb3JtcyB0aGUgdmFsdWVzIGluIHRoZSBhcnJheShzKSwgbm90IGEgY29weSkuXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1SYXdQYXRoKHJhd1BhdGgsIGEsIGIsIGMsIGQsIHR4LCB0eSkge1xuICB2YXIgaiA9IHJhd1BhdGgubGVuZ3RoLFxuICAgICAgc2VnbWVudCxcbiAgICAgIGwsXG4gICAgICBpLFxuICAgICAgeCxcbiAgICAgIHk7XG5cbiAgd2hpbGUgKC0taiA+IC0xKSB7XG4gICAgc2VnbWVudCA9IHJhd1BhdGhbal07XG4gICAgbCA9IHNlZ21lbnQubGVuZ3RoO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGw7IGkgKz0gMikge1xuICAgICAgeCA9IHNlZ21lbnRbaV07XG4gICAgICB5ID0gc2VnbWVudFtpICsgMV07XG4gICAgICBzZWdtZW50W2ldID0geCAqIGEgKyB5ICogYyArIHR4O1xuICAgICAgc2VnbWVudFtpICsgMV0gPSB4ICogYiArIHkgKiBkICsgdHk7XG4gICAgfVxuICB9XG5cbiAgcmF3UGF0aC5fZGlydHkgPSAxO1xuICByZXR1cm4gcmF3UGF0aDtcbn0gLy8gdHJhbnNsYXRlcyBTVkcgYXJjIGRhdGEgaW50byBhIHNlZ21lbnQgKGN1YmljIGJlemllcnMpLiBBbmdsZSBpcyBpbiBkZWdyZWVzLlxuXG5mdW5jdGlvbiBhcmNUb1NlZ21lbnQobGFzdFgsIGxhc3RZLCByeCwgcnksIGFuZ2xlLCBsYXJnZUFyY0ZsYWcsIHN3ZWVwRmxhZywgeCwgeSkge1xuICBpZiAobGFzdFggPT09IHggJiYgbGFzdFkgPT09IHkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByeCA9IF9hYnMocngpO1xuICByeSA9IF9hYnMocnkpO1xuXG4gIHZhciBhbmdsZVJhZCA9IGFuZ2xlICUgMzYwICogX0RFRzJSQUQsXG4gICAgICBjb3NBbmdsZSA9IF9jb3MoYW5nbGVSYWQpLFxuICAgICAgc2luQW5nbGUgPSBfc2luKGFuZ2xlUmFkKSxcbiAgICAgIFBJID0gTWF0aC5QSSxcbiAgICAgIFRXT1BJID0gUEkgKiAyLFxuICAgICAgZHgyID0gKGxhc3RYIC0geCkgLyAyLFxuICAgICAgZHkyID0gKGxhc3RZIC0geSkgLyAyLFxuICAgICAgeDEgPSBjb3NBbmdsZSAqIGR4MiArIHNpbkFuZ2xlICogZHkyLFxuICAgICAgeTEgPSAtc2luQW5nbGUgKiBkeDIgKyBjb3NBbmdsZSAqIGR5MixcbiAgICAgIHgxX3NxID0geDEgKiB4MSxcbiAgICAgIHkxX3NxID0geTEgKiB5MSxcbiAgICAgIHJhZGlpQ2hlY2sgPSB4MV9zcSAvIChyeCAqIHJ4KSArIHkxX3NxIC8gKHJ5ICogcnkpO1xuXG4gIGlmIChyYWRpaUNoZWNrID4gMSkge1xuICAgIHJ4ID0gX3NxcnQocmFkaWlDaGVjaykgKiByeDtcbiAgICByeSA9IF9zcXJ0KHJhZGlpQ2hlY2spICogcnk7XG4gIH1cblxuICB2YXIgcnhfc3EgPSByeCAqIHJ4LFxuICAgICAgcnlfc3EgPSByeSAqIHJ5LFxuICAgICAgc3EgPSAocnhfc3EgKiByeV9zcSAtIHJ4X3NxICogeTFfc3EgLSByeV9zcSAqIHgxX3NxKSAvIChyeF9zcSAqIHkxX3NxICsgcnlfc3EgKiB4MV9zcSk7XG5cbiAgaWYgKHNxIDwgMCkge1xuICAgIHNxID0gMDtcbiAgfVxuXG4gIHZhciBjb2VmID0gKGxhcmdlQXJjRmxhZyA9PT0gc3dlZXBGbGFnID8gLTEgOiAxKSAqIF9zcXJ0KHNxKSxcbiAgICAgIGN4MSA9IGNvZWYgKiAocnggKiB5MSAvIHJ5KSxcbiAgICAgIGN5MSA9IGNvZWYgKiAtKHJ5ICogeDEgLyByeCksXG4gICAgICBzeDIgPSAobGFzdFggKyB4KSAvIDIsXG4gICAgICBzeTIgPSAobGFzdFkgKyB5KSAvIDIsXG4gICAgICBjeCA9IHN4MiArIChjb3NBbmdsZSAqIGN4MSAtIHNpbkFuZ2xlICogY3kxKSxcbiAgICAgIGN5ID0gc3kyICsgKHNpbkFuZ2xlICogY3gxICsgY29zQW5nbGUgKiBjeTEpLFxuICAgICAgdXggPSAoeDEgLSBjeDEpIC8gcngsXG4gICAgICB1eSA9ICh5MSAtIGN5MSkgLyByeSxcbiAgICAgIHZ4ID0gKC14MSAtIGN4MSkgLyByeCxcbiAgICAgIHZ5ID0gKC15MSAtIGN5MSkgLyByeSxcbiAgICAgIHRlbXAgPSB1eCAqIHV4ICsgdXkgKiB1eSxcbiAgICAgIGFuZ2xlU3RhcnQgPSAodXkgPCAwID8gLTEgOiAxKSAqIE1hdGguYWNvcyh1eCAvIF9zcXJ0KHRlbXApKSxcbiAgICAgIGFuZ2xlRXh0ZW50ID0gKHV4ICogdnkgLSB1eSAqIHZ4IDwgMCA/IC0xIDogMSkgKiBNYXRoLmFjb3MoKHV4ICogdnggKyB1eSAqIHZ5KSAvIF9zcXJ0KHRlbXAgKiAodnggKiB2eCArIHZ5ICogdnkpKSk7XG5cbiAgaXNOYU4oYW5nbGVFeHRlbnQpICYmIChhbmdsZUV4dGVudCA9IFBJKTsgLy9yYXJlIGVkZ2UgY2FzZS4gTWF0aC5jb3MoLTEpIGlzIE5hTi5cblxuICBpZiAoIXN3ZWVwRmxhZyAmJiBhbmdsZUV4dGVudCA+IDApIHtcbiAgICBhbmdsZUV4dGVudCAtPSBUV09QSTtcbiAgfSBlbHNlIGlmIChzd2VlcEZsYWcgJiYgYW5nbGVFeHRlbnQgPCAwKSB7XG4gICAgYW5nbGVFeHRlbnQgKz0gVFdPUEk7XG4gIH1cblxuICBhbmdsZVN0YXJ0ICU9IFRXT1BJO1xuICBhbmdsZUV4dGVudCAlPSBUV09QSTtcblxuICB2YXIgc2VnbWVudHMgPSBNYXRoLmNlaWwoX2FicyhhbmdsZUV4dGVudCkgLyAoVFdPUEkgLyA0KSksXG4gICAgICByYXdQYXRoID0gW10sXG4gICAgICBhbmdsZUluY3JlbWVudCA9IGFuZ2xlRXh0ZW50IC8gc2VnbWVudHMsXG4gICAgICBjb250cm9sTGVuZ3RoID0gNCAvIDMgKiBfc2luKGFuZ2xlSW5jcmVtZW50IC8gMikgLyAoMSArIF9jb3MoYW5nbGVJbmNyZW1lbnQgLyAyKSksXG4gICAgICBtYSA9IGNvc0FuZ2xlICogcngsXG4gICAgICBtYiA9IHNpbkFuZ2xlICogcngsXG4gICAgICBtYyA9IHNpbkFuZ2xlICogLXJ5LFxuICAgICAgbWQgPSBjb3NBbmdsZSAqIHJ5LFxuICAgICAgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc2VnbWVudHM7IGkrKykge1xuICAgIGFuZ2xlID0gYW5nbGVTdGFydCArIGkgKiBhbmdsZUluY3JlbWVudDtcbiAgICB4MSA9IF9jb3MoYW5nbGUpO1xuICAgIHkxID0gX3NpbihhbmdsZSk7XG4gICAgdXggPSBfY29zKGFuZ2xlICs9IGFuZ2xlSW5jcmVtZW50KTtcbiAgICB1eSA9IF9zaW4oYW5nbGUpO1xuICAgIHJhd1BhdGgucHVzaCh4MSAtIGNvbnRyb2xMZW5ndGggKiB5MSwgeTEgKyBjb250cm9sTGVuZ3RoICogeDEsIHV4ICsgY29udHJvbExlbmd0aCAqIHV5LCB1eSAtIGNvbnRyb2xMZW5ndGggKiB1eCwgdXgsIHV5KTtcbiAgfSAvL25vdyB0cmFuc2Zvcm0gYWNjb3JkaW5nIHRvIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgZWxsaXBzZS9hcmMgKHRoZSBiZXppZXJzIHdlcmUgbm9yYW1saXplZCwgYmV0d2VlbiAwIGFuZCAxIG9uIGEgY2lyY2xlKS5cblxuXG4gIGZvciAoaSA9IDA7IGkgPCByYXdQYXRoLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgeDEgPSByYXdQYXRoW2ldO1xuICAgIHkxID0gcmF3UGF0aFtpICsgMV07XG4gICAgcmF3UGF0aFtpXSA9IHgxICogbWEgKyB5MSAqIG1jICsgY3g7XG4gICAgcmF3UGF0aFtpICsgMV0gPSB4MSAqIG1iICsgeTEgKiBtZCArIGN5O1xuICB9XG5cbiAgcmF3UGF0aFtpIC0gMl0gPSB4OyAvL2Fsd2F5cyBzZXQgdGhlIGVuZCB0byBleGFjdGx5IHdoZXJlIGl0J3Mgc3VwcG9zZWQgdG8gYmVcblxuICByYXdQYXRoW2kgLSAxXSA9IHk7XG4gIHJldHVybiByYXdQYXRoO1xufSAvL1NwaXRzIGJhY2sgYSBSYXdQYXRoIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuIEVhY2ggc2VnbWVudCBzdGFydHMgd2l0aCBhIFwibW92ZVRvXCIgY29tbWFuZCAoeCBjb29yZGluYXRlLCB0aGVuIHkpIGFuZCB0aGVuIDIgY29udHJvbCBwb2ludHMgKHgsIHksIHgsIHkpLCB0aGVuIGFuY2hvci4gVGhlIGdvYWwgaXMgdG8gbWluaW1pemUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC5cblxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nVG9SYXdQYXRoKGQpIHtcbiAgdmFyIGEgPSAoZCArIFwiXCIpLnJlcGxhY2UoX3NjaWVudGlmaWMsIGZ1bmN0aW9uIChtKSB7XG4gICAgdmFyIG4gPSArbTtcbiAgICByZXR1cm4gbiA8IDAuMDAwMSAmJiBuID4gLTAuMDAwMSA/IDAgOiBuO1xuICB9KS5tYXRjaChfc3ZnUGF0aEV4cCkgfHwgW10sXG4gICAgICAvL3NvbWUgYXV0aG9yaW5nIHByb2dyYW1zIHNwaXQgb3V0IHZlcnkgc21hbGwgbnVtYmVycyBpbiBzY2llbnRpZmljIG5vdGF0aW9uIGxpa2UgXCIxZS01XCIsIHNvIG1ha2Ugc3VyZSB3ZSByb3VuZCB0aGF0IGRvd24gdG8gMCBmaXJzdC5cbiAgcGF0aCA9IFtdLFxuICAgICAgcmVsYXRpdmVYID0gMCxcbiAgICAgIHJlbGF0aXZlWSA9IDAsXG4gICAgICB0d29UaGlyZHMgPSAyIC8gMyxcbiAgICAgIGVsZW1lbnRzID0gYS5sZW5ndGgsXG4gICAgICBwb2ludHMgPSAwLFxuICAgICAgZXJyb3JNZXNzYWdlID0gXCJFUlJPUjogbWFsZm9ybWVkIHBhdGg6IFwiICsgZCxcbiAgICAgIGksXG4gICAgICBqLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBjb21tYW5kLFxuICAgICAgaXNSZWxhdGl2ZSxcbiAgICAgIHNlZ21lbnQsXG4gICAgICBzdGFydFgsXG4gICAgICBzdGFydFksXG4gICAgICBkaWZYLFxuICAgICAgZGlmWSxcbiAgICAgIGJlemllcnMsXG4gICAgICBwcmV2Q29tbWFuZCxcbiAgICAgIGZsYWcxLFxuICAgICAgZmxhZzIsXG4gICAgICBsaW5lID0gZnVuY3Rpb24gbGluZShzeCwgc3ksIGV4LCBleSkge1xuICAgIGRpZlggPSAoZXggLSBzeCkgLyAzO1xuICAgIGRpZlkgPSAoZXkgLSBzeSkgLyAzO1xuICAgIHNlZ21lbnQucHVzaChzeCArIGRpZlgsIHN5ICsgZGlmWSwgZXggLSBkaWZYLCBleSAtIGRpZlksIGV4LCBleSk7XG4gIH07XG5cbiAgaWYgKCFkIHx8ICFpc05hTihhWzBdKSB8fCBpc05hTihhWzFdKSkge1xuICAgIGNvbnNvbGUubG9nKGVycm9yTWVzc2FnZSk7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgZWxlbWVudHM7IGkrKykge1xuICAgIHByZXZDb21tYW5kID0gY29tbWFuZDtcblxuICAgIGlmIChpc05hTihhW2ldKSkge1xuICAgICAgY29tbWFuZCA9IGFbaV0udG9VcHBlckNhc2UoKTtcbiAgICAgIGlzUmVsYXRpdmUgPSBjb21tYW5kICE9PSBhW2ldOyAvL2xvd2VyIGNhc2UgbWVhbnMgcmVsYXRpdmVcbiAgICB9IGVsc2Uge1xuICAgICAgLy9jb21tYW5kcyBsaWtlIFwiQ1wiIGNhbiBiZSBzdHJ1bmcgdG9nZXRoZXIgd2l0aG91dCBhbnkgbmV3IGNvbW1hbmQgY2hhcmFjdGVycyBiZXR3ZWVuLlxuICAgICAgaS0tO1xuICAgIH1cblxuICAgIHggPSArYVtpICsgMV07XG4gICAgeSA9ICthW2kgKyAyXTtcblxuICAgIGlmIChpc1JlbGF0aXZlKSB7XG4gICAgICB4ICs9IHJlbGF0aXZlWDtcbiAgICAgIHkgKz0gcmVsYXRpdmVZO1xuICAgIH1cblxuICAgIGlmICghaSkge1xuICAgICAgc3RhcnRYID0geDtcbiAgICAgIHN0YXJ0WSA9IHk7XG4gICAgfSAvLyBcIk1cIiAobW92ZSlcblxuXG4gICAgaWYgKGNvbW1hbmQgPT09IFwiTVwiKSB7XG4gICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPCA4KSB7XG4gICAgICAgICAgLy9pZiB0aGUgcGF0aCBkYXRhIHdhcyBmdW5reSBhbmQganVzdCBoYWQgYSBNIHdpdGggbm8gYWN0dWFsIGRyYXdpbmcgYW55d2hlcmUsIHNraXAgaXQuXG4gICAgICAgICAgcGF0aC5sZW5ndGggLT0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwb2ludHMgKz0gc2VnbWVudC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVsYXRpdmVYID0gc3RhcnRYID0geDtcbiAgICAgIHJlbGF0aXZlWSA9IHN0YXJ0WSA9IHk7XG4gICAgICBzZWdtZW50ID0gW3gsIHldO1xuICAgICAgcGF0aC5wdXNoKHNlZ21lbnQpO1xuICAgICAgaSArPSAyO1xuICAgICAgY29tbWFuZCA9IFwiTFwiOyAvL2FuIFwiTVwiIHdpdGggbW9yZSB0aGFuIDIgdmFsdWVzIGdldHMgaW50ZXJwcmV0ZWQgYXMgXCJsaW5lVG9cIiBjb21tYW5kcyAoXCJMXCIpLlxuICAgICAgLy8gXCJDXCIgKGN1YmljIGJlemllcilcbiAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT09IFwiQ1wiKSB7XG4gICAgICBpZiAoIXNlZ21lbnQpIHtcbiAgICAgICAgc2VnbWVudCA9IFswLCAwXTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc1JlbGF0aXZlKSB7XG4gICAgICAgIHJlbGF0aXZlWCA9IHJlbGF0aXZlWSA9IDA7XG4gICAgICB9IC8vbm90ZTogXCIqMVwiIGlzIGp1c3QgYSBmYXN0L3Nob3J0IHdheSB0byBjYXN0IHRoZSB2YWx1ZSBhcyBhIE51bWJlci4gV0FBQVkgZmFzdGVyIGluIENocm9tZSwgc2xpZ2h0bHkgc2xvd2VyIGluIEZpcmVmb3guXG5cblxuICAgICAgc2VnbWVudC5wdXNoKHgsIHksIHJlbGF0aXZlWCArIGFbaSArIDNdICogMSwgcmVsYXRpdmVZICsgYVtpICsgNF0gKiAxLCByZWxhdGl2ZVggKz0gYVtpICsgNV0gKiAxLCByZWxhdGl2ZVkgKz0gYVtpICsgNl0gKiAxKTtcbiAgICAgIGkgKz0gNjsgLy8gXCJTXCIgKGNvbnRpbnVhdGlvbiBvZiBjdWJpYyBiZXppZXIpXG4gICAgfSBlbHNlIGlmIChjb21tYW5kID09PSBcIlNcIikge1xuICAgICAgZGlmWCA9IHJlbGF0aXZlWDtcbiAgICAgIGRpZlkgPSByZWxhdGl2ZVk7XG5cbiAgICAgIGlmIChwcmV2Q29tbWFuZCA9PT0gXCJDXCIgfHwgcHJldkNvbW1hbmQgPT09IFwiU1wiKSB7XG4gICAgICAgIGRpZlggKz0gcmVsYXRpdmVYIC0gc2VnbWVudFtzZWdtZW50Lmxlbmd0aCAtIDRdO1xuICAgICAgICBkaWZZICs9IHJlbGF0aXZlWSAtIHNlZ21lbnRbc2VnbWVudC5sZW5ndGggLSAzXTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc1JlbGF0aXZlKSB7XG4gICAgICAgIHJlbGF0aXZlWCA9IHJlbGF0aXZlWSA9IDA7XG4gICAgICB9XG5cbiAgICAgIHNlZ21lbnQucHVzaChkaWZYLCBkaWZZLCB4LCB5LCByZWxhdGl2ZVggKz0gYVtpICsgM10gKiAxLCByZWxhdGl2ZVkgKz0gYVtpICsgNF0gKiAxKTtcbiAgICAgIGkgKz0gNDsgLy8gXCJRXCIgKHF1YWRyYXRpYyBiZXppZXIpXG4gICAgfSBlbHNlIGlmIChjb21tYW5kID09PSBcIlFcIikge1xuICAgICAgZGlmWCA9IHJlbGF0aXZlWCArICh4IC0gcmVsYXRpdmVYKSAqIHR3b1RoaXJkcztcbiAgICAgIGRpZlkgPSByZWxhdGl2ZVkgKyAoeSAtIHJlbGF0aXZlWSkgKiB0d29UaGlyZHM7XG5cbiAgICAgIGlmICghaXNSZWxhdGl2ZSkge1xuICAgICAgICByZWxhdGl2ZVggPSByZWxhdGl2ZVkgPSAwO1xuICAgICAgfVxuXG4gICAgICByZWxhdGl2ZVggKz0gYVtpICsgM10gKiAxO1xuICAgICAgcmVsYXRpdmVZICs9IGFbaSArIDRdICogMTtcbiAgICAgIHNlZ21lbnQucHVzaChkaWZYLCBkaWZZLCByZWxhdGl2ZVggKyAoeCAtIHJlbGF0aXZlWCkgKiB0d29UaGlyZHMsIHJlbGF0aXZlWSArICh5IC0gcmVsYXRpdmVZKSAqIHR3b1RoaXJkcywgcmVsYXRpdmVYLCByZWxhdGl2ZVkpO1xuICAgICAgaSArPSA0OyAvLyBcIlRcIiAoY29udGludWF0aW9uIG9mIHF1YWRyYXRpYyBiZXppZXIpXG4gICAgfSBlbHNlIGlmIChjb21tYW5kID09PSBcIlRcIikge1xuICAgICAgZGlmWCA9IHJlbGF0aXZlWCAtIHNlZ21lbnRbc2VnbWVudC5sZW5ndGggLSA0XTtcbiAgICAgIGRpZlkgPSByZWxhdGl2ZVkgLSBzZWdtZW50W3NlZ21lbnQubGVuZ3RoIC0gM107XG4gICAgICBzZWdtZW50LnB1c2gocmVsYXRpdmVYICsgZGlmWCwgcmVsYXRpdmVZICsgZGlmWSwgeCArIChyZWxhdGl2ZVggKyBkaWZYICogMS41IC0geCkgKiB0d29UaGlyZHMsIHkgKyAocmVsYXRpdmVZICsgZGlmWSAqIDEuNSAtIHkpICogdHdvVGhpcmRzLCByZWxhdGl2ZVggPSB4LCByZWxhdGl2ZVkgPSB5KTtcbiAgICAgIGkgKz0gMjsgLy8gXCJIXCIgKGhvcml6b250YWwgbGluZSlcbiAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT09IFwiSFwiKSB7XG4gICAgICBsaW5lKHJlbGF0aXZlWCwgcmVsYXRpdmVZLCByZWxhdGl2ZVggPSB4LCByZWxhdGl2ZVkpO1xuICAgICAgaSArPSAxOyAvLyBcIlZcIiAodmVydGljYWwgbGluZSlcbiAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT09IFwiVlwiKSB7XG4gICAgICAvL2FkanVzdCB2YWx1ZXMgYmVjYXVzZSB0aGUgZmlyc3QgKGFuZCBvbmx5IG9uZSkgaXNuJ3QgeCBpbiB0aGlzIGNhc2UsIGl0J3MgeS5cbiAgICAgIGxpbmUocmVsYXRpdmVYLCByZWxhdGl2ZVksIHJlbGF0aXZlWCwgcmVsYXRpdmVZID0geCArIChpc1JlbGF0aXZlID8gcmVsYXRpdmVZIC0gcmVsYXRpdmVYIDogMCkpO1xuICAgICAgaSArPSAxOyAvLyBcIkxcIiAobGluZSkgb3IgXCJaXCIgKGNsb3NlKVxuICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PT0gXCJMXCIgfHwgY29tbWFuZCA9PT0gXCJaXCIpIHtcbiAgICAgIGlmIChjb21tYW5kID09PSBcIlpcIikge1xuICAgICAgICB4ID0gc3RhcnRYO1xuICAgICAgICB5ID0gc3RhcnRZO1xuICAgICAgICBzZWdtZW50LmNsb3NlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21tYW5kID09PSBcIkxcIiB8fCBfYWJzKHJlbGF0aXZlWCAtIHgpID4gMC41IHx8IF9hYnMocmVsYXRpdmVZIC0geSkgPiAwLjUpIHtcbiAgICAgICAgbGluZShyZWxhdGl2ZVgsIHJlbGF0aXZlWSwgeCwgeSk7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQgPT09IFwiTFwiKSB7XG4gICAgICAgICAgaSArPSAyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlbGF0aXZlWCA9IHg7XG4gICAgICByZWxhdGl2ZVkgPSB5OyAvLyBcIkFcIiAoYXJjKVxuICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PT0gXCJBXCIpIHtcbiAgICAgIGZsYWcxID0gYVtpICsgNF07XG4gICAgICBmbGFnMiA9IGFbaSArIDVdO1xuICAgICAgZGlmWCA9IGFbaSArIDZdO1xuICAgICAgZGlmWSA9IGFbaSArIDddO1xuICAgICAgaiA9IDc7XG5cbiAgICAgIGlmIChmbGFnMS5sZW5ndGggPiAxKSB7XG4gICAgICAgIC8vIGZvciBjYXNlcyB3aGVuIHRoZSBmbGFncyBhcmUgbWVyZ2VkLCBsaWtlIFwiYTggOCAwIDAxOCA4XCIgKHRoZSAwIGFuZCAxIGZsYWdzIGFyZSBXSVRIIHRoZSB4IHZhbHVlIG9mIDgsIGJ1dCBpdCBjb3VsZCBhbHNvIGJlIFwiYTggOCAwIDAxLTggOFwiIHNvIGl0IG1heSBpbmNsdWRlIHggb3Igbm90KVxuICAgICAgICBpZiAoZmxhZzEubGVuZ3RoIDwgMykge1xuICAgICAgICAgIGRpZlkgPSBkaWZYO1xuICAgICAgICAgIGRpZlggPSBmbGFnMjtcbiAgICAgICAgICBqLS07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlmWSA9IGZsYWcyO1xuICAgICAgICAgIGRpZlggPSBmbGFnMS5zdWJzdHIoMik7XG4gICAgICAgICAgaiAtPSAyO1xuICAgICAgICB9XG5cbiAgICAgICAgZmxhZzIgPSBmbGFnMS5jaGFyQXQoMSk7XG4gICAgICAgIGZsYWcxID0gZmxhZzEuY2hhckF0KDApO1xuICAgICAgfVxuXG4gICAgICBiZXppZXJzID0gYXJjVG9TZWdtZW50KHJlbGF0aXZlWCwgcmVsYXRpdmVZLCArYVtpICsgMV0sICthW2kgKyAyXSwgK2FbaSArIDNdLCArZmxhZzEsICtmbGFnMiwgKGlzUmVsYXRpdmUgPyByZWxhdGl2ZVggOiAwKSArIGRpZlggKiAxLCAoaXNSZWxhdGl2ZSA/IHJlbGF0aXZlWSA6IDApICsgZGlmWSAqIDEpO1xuICAgICAgaSArPSBqO1xuXG4gICAgICBpZiAoYmV6aWVycykge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgYmV6aWVycy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHNlZ21lbnQucHVzaChiZXppZXJzW2pdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZWxhdGl2ZVggPSBzZWdtZW50W3NlZ21lbnQubGVuZ3RoIC0gMl07XG4gICAgICByZWxhdGl2ZVkgPSBzZWdtZW50W3NlZ21lbnQubGVuZ3RoIC0gMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgaSA9IHNlZ21lbnQubGVuZ3RoO1xuXG4gIGlmIChpIDwgNikge1xuICAgIC8vaW4gY2FzZSB0aGVyZSdzIG9kZCBTVkcgbGlrZSBhIE0wLDAgY29tbWFuZCBhdCB0aGUgdmVyeSBlbmQuXG4gICAgcGF0aC5wb3AoKTtcbiAgICBpID0gMDtcbiAgfSBlbHNlIGlmIChzZWdtZW50WzBdID09PSBzZWdtZW50W2kgLSAyXSAmJiBzZWdtZW50WzFdID09PSBzZWdtZW50W2kgLSAxXSkge1xuICAgIHNlZ21lbnQuY2xvc2VkID0gdHJ1ZTtcbiAgfVxuXG4gIHBhdGgudG90YWxQb2ludHMgPSBwb2ludHMgKyBpO1xuICByZXR1cm4gcGF0aDtcbn0gLy9wb3B1bGF0ZXMgdGhlIHBvaW50cyBhcnJheSBpbiBhbHRlcm5hdGluZyB4L3kgdmFsdWVzIChsaWtlIFt4LCB5LCB4LCB5Li4uXSBpbnN0ZWFkIG9mIGluZGl2aWR1YWwgcG9pbnQgb2JqZWN0cyBbe3gsIHl9LCB7eCwgeX0uLi5dIHRvIGNvbnNlcnZlIG1lbW9yeSBhbmQgc3RheSBpbiBsaW5lIHdpdGggaG93IHdlJ3JlIGhhbmRsaW5nIHNlZ21lbnQgYXJyYXlzXG5cbmV4cG9ydCBmdW5jdGlvbiBiZXppZXJUb1BvaW50cyh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB4NCwgeTQsIHRocmVzaG9sZCwgcG9pbnRzLCBpbmRleCkge1xuICB2YXIgeDEyID0gKHgxICsgeDIpIC8gMixcbiAgICAgIHkxMiA9ICh5MSArIHkyKSAvIDIsXG4gICAgICB4MjMgPSAoeDIgKyB4MykgLyAyLFxuICAgICAgeTIzID0gKHkyICsgeTMpIC8gMixcbiAgICAgIHgzNCA9ICh4MyArIHg0KSAvIDIsXG4gICAgICB5MzQgPSAoeTMgKyB5NCkgLyAyLFxuICAgICAgeDEyMyA9ICh4MTIgKyB4MjMpIC8gMixcbiAgICAgIHkxMjMgPSAoeTEyICsgeTIzKSAvIDIsXG4gICAgICB4MjM0ID0gKHgyMyArIHgzNCkgLyAyLFxuICAgICAgeTIzNCA9ICh5MjMgKyB5MzQpIC8gMixcbiAgICAgIHgxMjM0ID0gKHgxMjMgKyB4MjM0KSAvIDIsXG4gICAgICB5MTIzNCA9ICh5MTIzICsgeTIzNCkgLyAyLFxuICAgICAgZHggPSB4NCAtIHgxLFxuICAgICAgZHkgPSB5NCAtIHkxLFxuICAgICAgZDIgPSBfYWJzKCh4MiAtIHg0KSAqIGR5IC0gKHkyIC0geTQpICogZHgpLFxuICAgICAgZDMgPSBfYWJzKCh4MyAtIHg0KSAqIGR5IC0gKHkzIC0geTQpICogZHgpLFxuICAgICAgbGVuZ3RoO1xuXG4gIGlmICghcG9pbnRzKSB7XG4gICAgcG9pbnRzID0gW3gxLCB5MSwgeDQsIHk0XTtcbiAgICBpbmRleCA9IDI7XG4gIH1cblxuICBwb2ludHMuc3BsaWNlKGluZGV4IHx8IHBvaW50cy5sZW5ndGggLSAyLCAwLCB4MTIzNCwgeTEyMzQpO1xuXG4gIGlmICgoZDIgKyBkMykgKiAoZDIgKyBkMykgPiB0aHJlc2hvbGQgKiAoZHggKiBkeCArIGR5ICogZHkpKSB7XG4gICAgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aDtcbiAgICBiZXppZXJUb1BvaW50cyh4MSwgeTEsIHgxMiwgeTEyLCB4MTIzLCB5MTIzLCB4MTIzNCwgeTEyMzQsIHRocmVzaG9sZCwgcG9pbnRzLCBpbmRleCk7XG4gICAgYmV6aWVyVG9Qb2ludHMoeDEyMzQsIHkxMjM0LCB4MjM0LCB5MjM0LCB4MzQsIHkzNCwgeDQsIHk0LCB0aHJlc2hvbGQsIHBvaW50cywgaW5kZXggKyAyICsgKHBvaW50cy5sZW5ndGggLSBsZW5ndGgpKTtcbiAgfVxuXG4gIHJldHVybiBwb2ludHM7XG59XG4vKlxuZnVuY3Rpb24gZ2V0QW5nbGVCZXR3ZWVuUG9pbnRzKHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIpIHsgLy9hbmdsZSBiZXR3ZWVuIDMgcG9pbnRzIGluIHJhZGlhbnNcblx0dmFyIGR4MSA9IHgxIC0geDAsXG5cdFx0ZHkxID0geTEgLSB5MCxcblx0XHRkeDIgPSB4MiAtIHgxLFxuXHRcdGR5MiA9IHkyIC0geTEsXG5cdFx0ZHgzID0geDIgLSB4MCxcblx0XHRkeTMgPSB5MiAtIHkwLFxuXHRcdGEgPSBkeDEgKiBkeDEgKyBkeTEgKiBkeTEsXG5cdFx0YiA9IGR4MiAqIGR4MiArIGR5MiAqIGR5Mixcblx0XHRjID0gZHgzICogZHgzICsgZHkzICogZHkzO1xuXHRyZXR1cm4gTWF0aC5hY29zKCAoYSArIGIgLSBjKSAvIF9zcXJ0KDQgKiBhICogYikgKTtcbn0sXG4qL1xuLy9wb2ludHNUb1NlZ21lbnQoKSBkb2Vzbid0IGhhbmRsZSBmbGF0IGNvb3JkaW5hdGVzICh3aGVyZSB5IGlzIGFsd2F5cyAwKSB0aGUgd2F5IHdlIG5lZWQgKHRoZSByZXN1bHRpbmcgY29udHJvbCBwb2ludHMgYXJlIGFsd2F5cyByaWdodCBvbiB0b3Agb2YgdGhlIGFuY2hvcnMpLCBzbyB0aGlzIGZ1bmN0aW9uIGJhc2ljYWxseSBtYWtlcyB0aGUgY29udHJvbCBwb2ludHMgZ28gZGlyZWN0bHkgdXAgYW5kIGRvd24sIHZhcnlpbmcgaW4gbGVuZ3RoIGJhc2VkIG9uIHRoZSBjdXJ2aW5lc3MgKG1vcmUgY3VydnksIGZ1cnRoZXIgY29udHJvbCBwb2ludHMpXG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0UG9pbnRzVG9TZWdtZW50KHBvaW50cywgY3VydmluZXNzKSB7XG4gIGlmIChjdXJ2aW5lc3MgPT09IHZvaWQgMCkge1xuICAgIGN1cnZpbmVzcyA9IDE7XG4gIH1cblxuICB2YXIgeCA9IHBvaW50c1swXSxcbiAgICAgIHkgPSAwLFxuICAgICAgc2VnbWVudCA9IFt4LCB5XSxcbiAgICAgIGkgPSAyO1xuXG4gIGZvciAoOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgc2VnbWVudC5wdXNoKHgsIHksIHBvaW50c1tpXSwgeSA9IChwb2ludHNbaV0gLSB4KSAqIGN1cnZpbmVzcyAvIDIsIHggPSBwb2ludHNbaV0sIC15KTtcbiAgfVxuXG4gIHJldHVybiBzZWdtZW50O1xufSAvL3BvaW50cyBpcyBhbiBhcnJheSBvZiB4L3kgcG9pbnRzLCBsaWtlIFt4LCB5LCB4LCB5LCB4LCB5XVxuXG5leHBvcnQgZnVuY3Rpb24gcG9pbnRzVG9TZWdtZW50KHBvaW50cywgY3VydmluZXNzKSB7XG4gIC8vcG9pbnRzID0gc2ltcGxpZnlQb2ludHMocG9pbnRzLCB0b2xlcmFuY2UpO1xuICBfYWJzKHBvaW50c1swXSAtIHBvaW50c1syXSkgPCAxZS00ICYmIF9hYnMocG9pbnRzWzFdIC0gcG9pbnRzWzNdKSA8IDFlLTQgJiYgKHBvaW50cyA9IHBvaW50cy5zbGljZSgyKSk7IC8vIGlmIHRoZSBmaXJzdCB0d28gcG9pbnRzIGFyZSBzdXBlciBjbG9zZSwgZHVtcCB0aGUgZmlyc3Qgb25lLlxuXG4gIHZhciBsID0gcG9pbnRzLmxlbmd0aCAtIDIsXG4gICAgICB4ID0gK3BvaW50c1swXSxcbiAgICAgIHkgPSArcG9pbnRzWzFdLFxuICAgICAgbmV4dFggPSArcG9pbnRzWzJdLFxuICAgICAgbmV4dFkgPSArcG9pbnRzWzNdLFxuICAgICAgc2VnbWVudCA9IFt4LCB5LCB4LCB5XSxcbiAgICAgIGR4MiA9IG5leHRYIC0geCxcbiAgICAgIGR5MiA9IG5leHRZIC0geSxcbiAgICAgIGNsb3NlZCA9IE1hdGguYWJzKHBvaW50c1tsXSAtIHgpIDwgMC4wMDEgJiYgTWF0aC5hYnMocG9pbnRzW2wgKyAxXSAtIHkpIDwgMC4wMDEsXG4gICAgICBwcmV2WCxcbiAgICAgIHByZXZZLFxuICAgICAgaSxcbiAgICAgIGR4MSxcbiAgICAgIGR5MSxcbiAgICAgIHIxLFxuICAgICAgcjIsXG4gICAgICByMyxcbiAgICAgIHRsLFxuICAgICAgbXgxLFxuICAgICAgbXgyLFxuICAgICAgbXhtLFxuICAgICAgbXkxLFxuICAgICAgbXkyLFxuICAgICAgbXltO1xuXG4gIGlmIChjbG9zZWQpIHtcbiAgICAvLyBpZiB0aGUgc3RhcnQgYW5kIGVuZCBwb2ludHMgYXJlIGJhc2ljYWxseSBvbiB0b3Agb2YgZWFjaCBvdGhlciwgY2xvc2UgdGhlIHNlZ21lbnQgYnkgYWRkaW5nIHRoZSAybmQgcG9pbnQgdG8gdGhlIGVuZCwgYW5kIHRoZSAybmQtdG8tbGFzdCBwb2ludCB0byB0aGUgYmVnaW5uaW5nICh3ZSdsbCByZW1vdmUgdGhlbSBhdCB0aGUgZW5kLCBidXQgdGhpcyBhbGxvd3MgdGhlIGN1cnZhdHVyZSB0byBsb29rIHBlcmZlY3QpXG4gICAgcG9pbnRzLnB1c2gobmV4dFgsIG5leHRZKTtcbiAgICBuZXh0WCA9IHg7XG4gICAgbmV4dFkgPSB5O1xuICAgIHggPSBwb2ludHNbbCAtIDJdO1xuICAgIHkgPSBwb2ludHNbbCAtIDFdO1xuICAgIHBvaW50cy51bnNoaWZ0KHgsIHkpO1xuICAgIGwgKz0gNDtcbiAgfVxuXG4gIGN1cnZpbmVzcyA9IGN1cnZpbmVzcyB8fCBjdXJ2aW5lc3MgPT09IDAgPyArY3VydmluZXNzIDogMTtcblxuICBmb3IgKGkgPSAyOyBpIDwgbDsgaSArPSAyKSB7XG4gICAgcHJldlggPSB4O1xuICAgIHByZXZZID0geTtcbiAgICB4ID0gbmV4dFg7XG4gICAgeSA9IG5leHRZO1xuICAgIG5leHRYID0gK3BvaW50c1tpICsgMl07XG4gICAgbmV4dFkgPSArcG9pbnRzW2kgKyAzXTtcblxuICAgIGlmICh4ID09PSBuZXh0WCAmJiB5ID09PSBuZXh0WSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZHgxID0gZHgyO1xuICAgIGR5MSA9IGR5MjtcbiAgICBkeDIgPSBuZXh0WCAtIHg7XG4gICAgZHkyID0gbmV4dFkgLSB5O1xuICAgIHIxID0gX3NxcnQoZHgxICogZHgxICsgZHkxICogZHkxKTsgLy8gcjEsIHIyLCBhbmQgcjMgY29ycmVsYXRlIHggYW5kIHkgKGFuZCB6IGluIHRoZSBmdXR1cmUpLiBCYXNpY2FsbHkgMkQgb3IgM0QgaHlwb3RlbnVzZVxuXG4gICAgcjIgPSBfc3FydChkeDIgKiBkeDIgKyBkeTIgKiBkeTIpO1xuICAgIHIzID0gX3NxcnQoTWF0aC5wb3coZHgyIC8gcjIgKyBkeDEgLyByMSwgMikgKyBNYXRoLnBvdyhkeTIgLyByMiArIGR5MSAvIHIxLCAyKSk7XG4gICAgdGwgPSAocjEgKyByMikgKiBjdXJ2aW5lc3MgKiAwLjI1IC8gcjM7XG4gICAgbXgxID0geCAtICh4IC0gcHJldlgpICogKHIxID8gdGwgLyByMSA6IDApO1xuICAgIG14MiA9IHggKyAobmV4dFggLSB4KSAqIChyMiA/IHRsIC8gcjIgOiAwKTtcbiAgICBteG0gPSB4IC0gKG14MSArICgobXgyIC0gbXgxKSAqIChyMSAqIDMgLyAocjEgKyByMikgKyAwLjUpIC8gNCB8fCAwKSk7XG4gICAgbXkxID0geSAtICh5IC0gcHJldlkpICogKHIxID8gdGwgLyByMSA6IDApO1xuICAgIG15MiA9IHkgKyAobmV4dFkgLSB5KSAqIChyMiA/IHRsIC8gcjIgOiAwKTtcbiAgICBteW0gPSB5IC0gKG15MSArICgobXkyIC0gbXkxKSAqIChyMSAqIDMgLyAocjEgKyByMikgKyAwLjUpIC8gNCB8fCAwKSk7XG5cbiAgICBpZiAoeCAhPT0gcHJldlggfHwgeSAhPT0gcHJldlkpIHtcbiAgICAgIHNlZ21lbnQucHVzaChfcm91bmQobXgxICsgbXhtKSwgLy8gZmlyc3QgY29udHJvbCBwb2ludFxuICAgICAgX3JvdW5kKG15MSArIG15bSksIF9yb3VuZCh4KSwgLy8gYW5jaG9yXG4gICAgICBfcm91bmQoeSksIF9yb3VuZChteDIgKyBteG0pLCAvLyBzZWNvbmQgY29udHJvbCBwb2ludFxuICAgICAgX3JvdW5kKG15MiArIG15bSkpO1xuICAgIH1cbiAgfVxuXG4gIHggIT09IG5leHRYIHx8IHkgIT09IG5leHRZIHx8IHNlZ21lbnQubGVuZ3RoIDwgNCA/IHNlZ21lbnQucHVzaChfcm91bmQobmV4dFgpLCBfcm91bmQobmV4dFkpLCBfcm91bmQobmV4dFgpLCBfcm91bmQobmV4dFkpKSA6IHNlZ21lbnQubGVuZ3RoIC09IDI7XG5cbiAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgLy8gb25seSBvbmUgcG9pbnQhXG4gICAgc2VnbWVudC5wdXNoKHgsIHksIHgsIHksIHgsIHkpO1xuICB9IGVsc2UgaWYgKGNsb3NlZCkge1xuICAgIHNlZ21lbnQuc3BsaWNlKDAsIDYpO1xuICAgIHNlZ21lbnQubGVuZ3RoID0gc2VnbWVudC5sZW5ndGggLSA2O1xuICB9XG5cbiAgcmV0dXJuIHNlZ21lbnQ7XG59IC8vcmV0dXJucyB0aGUgc3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIGFuIHgveSBjb29yZGluYXRlIGFuZCBhIHNlZ21lbnQgYmV0d2VlbiB4MS95MSBhbmQgeDIveTJcblxuZnVuY3Rpb24gcG9pbnRUb1NlZ0Rpc3QoeCwgeSwgeDEsIHkxLCB4MiwgeTIpIHtcbiAgdmFyIGR4ID0geDIgLSB4MSxcbiAgICAgIGR5ID0geTIgLSB5MSxcbiAgICAgIHQ7XG5cbiAgaWYgKGR4IHx8IGR5KSB7XG4gICAgdCA9ICgoeCAtIHgxKSAqIGR4ICsgKHkgLSB5MSkgKiBkeSkgLyAoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgaWYgKHQgPiAxKSB7XG4gICAgICB4MSA9IHgyO1xuICAgICAgeTEgPSB5MjtcbiAgICB9IGVsc2UgaWYgKHQgPiAwKSB7XG4gICAgICB4MSArPSBkeCAqIHQ7XG4gICAgICB5MSArPSBkeSAqIHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE1hdGgucG93KHggLSB4MSwgMikgKyBNYXRoLnBvdyh5IC0geTEsIDIpO1xufVxuXG5mdW5jdGlvbiBzaW1wbGlmeVN0ZXAocG9pbnRzLCBmaXJzdCwgbGFzdCwgdG9sZXJhbmNlLCBzaW1wbGlmaWVkKSB7XG4gIHZhciBtYXhTcURpc3QgPSB0b2xlcmFuY2UsXG4gICAgICBmaXJzdFggPSBwb2ludHNbZmlyc3RdLFxuICAgICAgZmlyc3RZID0gcG9pbnRzW2ZpcnN0ICsgMV0sXG4gICAgICBsYXN0WCA9IHBvaW50c1tsYXN0XSxcbiAgICAgIGxhc3RZID0gcG9pbnRzW2xhc3QgKyAxXSxcbiAgICAgIGluZGV4LFxuICAgICAgaSxcbiAgICAgIGQ7XG5cbiAgZm9yIChpID0gZmlyc3QgKyAyOyBpIDwgbGFzdDsgaSArPSAyKSB7XG4gICAgZCA9IHBvaW50VG9TZWdEaXN0KHBvaW50c1tpXSwgcG9pbnRzW2kgKyAxXSwgZmlyc3RYLCBmaXJzdFksIGxhc3RYLCBsYXN0WSk7XG5cbiAgICBpZiAoZCA+IG1heFNxRGlzdCkge1xuICAgICAgaW5kZXggPSBpO1xuICAgICAgbWF4U3FEaXN0ID0gZDtcbiAgICB9XG4gIH1cblxuICBpZiAobWF4U3FEaXN0ID4gdG9sZXJhbmNlKSB7XG4gICAgaW5kZXggLSBmaXJzdCA+IDIgJiYgc2ltcGxpZnlTdGVwKHBvaW50cywgZmlyc3QsIGluZGV4LCB0b2xlcmFuY2UsIHNpbXBsaWZpZWQpO1xuICAgIHNpbXBsaWZpZWQucHVzaChwb2ludHNbaW5kZXhdLCBwb2ludHNbaW5kZXggKyAxXSk7XG4gICAgbGFzdCAtIGluZGV4ID4gMiAmJiBzaW1wbGlmeVN0ZXAocG9pbnRzLCBpbmRleCwgbGFzdCwgdG9sZXJhbmNlLCBzaW1wbGlmaWVkKTtcbiAgfVxufSAvL3BvaW50cyBpcyBhbiBhcnJheSBvZiB4L3kgdmFsdWVzIGxpa2UgW3gsIHksIHgsIHksIHgsIHldXG5cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsaWZ5UG9pbnRzKHBvaW50cywgdG9sZXJhbmNlKSB7XG4gIHZhciBwcmV2WCA9IHBhcnNlRmxvYXQocG9pbnRzWzBdKSxcbiAgICAgIHByZXZZID0gcGFyc2VGbG9hdChwb2ludHNbMV0pLFxuICAgICAgdGVtcCA9IFtwcmV2WCwgcHJldlldLFxuICAgICAgbCA9IHBvaW50cy5sZW5ndGggLSAyLFxuICAgICAgaSxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgZHgsXG4gICAgICBkeSxcbiAgICAgIHJlc3VsdCxcbiAgICAgIGxhc3Q7XG4gIHRvbGVyYW5jZSA9IE1hdGgucG93KHRvbGVyYW5jZSB8fCAxLCAyKTtcblxuICBmb3IgKGkgPSAyOyBpIDwgbDsgaSArPSAyKSB7XG4gICAgeCA9IHBhcnNlRmxvYXQocG9pbnRzW2ldKTtcbiAgICB5ID0gcGFyc2VGbG9hdChwb2ludHNbaSArIDFdKTtcbiAgICBkeCA9IHByZXZYIC0geDtcbiAgICBkeSA9IHByZXZZIC0geTtcblxuICAgIGlmIChkeCAqIGR4ICsgZHkgKiBkeSA+IHRvbGVyYW5jZSkge1xuICAgICAgdGVtcC5wdXNoKHgsIHkpO1xuICAgICAgcHJldlggPSB4O1xuICAgICAgcHJldlkgPSB5O1xuICAgIH1cbiAgfVxuXG4gIHRlbXAucHVzaChwYXJzZUZsb2F0KHBvaW50c1tsXSksIHBhcnNlRmxvYXQocG9pbnRzW2wgKyAxXSkpO1xuICBsYXN0ID0gdGVtcC5sZW5ndGggLSAyO1xuICByZXN1bHQgPSBbdGVtcFswXSwgdGVtcFsxXV07XG4gIHNpbXBsaWZ5U3RlcCh0ZW1wLCAwLCBsYXN0LCB0b2xlcmFuY2UsIHJlc3VsdCk7XG4gIHJlc3VsdC5wdXNoKHRlbXBbbGFzdF0sIHRlbXBbbGFzdCArIDFdKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xvc2VzdFByb2dyZXNzT25CZXppZXIoaXRlcmF0aW9ucywgcHgsIHB5LCBzdGFydCwgZW5kLCBzbGljZXMsIHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5Mykge1xuICB2YXIgaW5jID0gKGVuZCAtIHN0YXJ0KSAvIHNsaWNlcyxcbiAgICAgIGJlc3QgPSAwLFxuICAgICAgdCA9IHN0YXJ0LFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBkLFxuICAgICAgZHgsXG4gICAgICBkeSxcbiAgICAgIGludjtcbiAgX2Jlc3REaXN0YW5jZSA9IF9sYXJnZU51bTtcblxuICB3aGlsZSAodCA8PSBlbmQpIHtcbiAgICBpbnYgPSAxIC0gdDtcbiAgICB4ID0gaW52ICogaW52ICogaW52ICogeDAgKyAzICogaW52ICogaW52ICogdCAqIHgxICsgMyAqIGludiAqIHQgKiB0ICogeDIgKyB0ICogdCAqIHQgKiB4MztcbiAgICB5ID0gaW52ICogaW52ICogaW52ICogeTAgKyAzICogaW52ICogaW52ICogdCAqIHkxICsgMyAqIGludiAqIHQgKiB0ICogeTIgKyB0ICogdCAqIHQgKiB5MztcbiAgICBkeCA9IHggLSBweDtcbiAgICBkeSA9IHkgLSBweTtcbiAgICBkID0gZHggKiBkeCArIGR5ICogZHk7XG5cbiAgICBpZiAoZCA8IF9iZXN0RGlzdGFuY2UpIHtcbiAgICAgIF9iZXN0RGlzdGFuY2UgPSBkO1xuICAgICAgYmVzdCA9IHQ7XG4gICAgfVxuXG4gICAgdCArPSBpbmM7XG4gIH1cblxuICByZXR1cm4gaXRlcmF0aW9ucyA+IDEgPyBnZXRDbG9zZXN0UHJvZ3Jlc3NPbkJlemllcihpdGVyYXRpb25zIC0gMSwgcHgsIHB5LCBNYXRoLm1heChiZXN0IC0gaW5jLCAwKSwgTWF0aC5taW4oYmVzdCArIGluYywgMSksIHNsaWNlcywgeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKSA6IGJlc3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbG9zZXN0RGF0YShyYXdQYXRoLCB4LCB5LCBzbGljZXMpIHtcbiAgLy9yZXR1cm5zIGFuIG9iamVjdCB3aXRoIHRoZSBjbG9zZXN0IGosIGksIGFuZCB0IChqIGlzIHRoZSBzZWdtZW50IGluZGV4LCBpIGlzIHRoZSBpbmRleCBvZiB0aGUgcG9pbnQgaW4gdGhhdCBzZWdtZW50LCBhbmQgdCBpcyB0aGUgdGltZS9wcm9ncmVzcyBhbG9uZyB0aGF0IGJlemllcilcbiAgdmFyIGNsb3Nlc3QgPSB7XG4gICAgajogMCxcbiAgICBpOiAwLFxuICAgIHQ6IDBcbiAgfSxcbiAgICAgIGJlc3REaXN0YW5jZSA9IF9sYXJnZU51bSxcbiAgICAgIGksXG4gICAgICBqLFxuICAgICAgdCxcbiAgICAgIHNlZ21lbnQ7XG5cbiAgZm9yIChqID0gMDsgaiA8IHJhd1BhdGgubGVuZ3RoOyBqKyspIHtcbiAgICBzZWdtZW50ID0gcmF3UGF0aFtqXTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzZWdtZW50Lmxlbmd0aDsgaSArPSA2KSB7XG4gICAgICB0ID0gZ2V0Q2xvc2VzdFByb2dyZXNzT25CZXppZXIoMSwgeCwgeSwgMCwgMSwgc2xpY2VzIHx8IDIwLCBzZWdtZW50W2ldLCBzZWdtZW50W2kgKyAxXSwgc2VnbWVudFtpICsgMl0sIHNlZ21lbnRbaSArIDNdLCBzZWdtZW50W2kgKyA0XSwgc2VnbWVudFtpICsgNV0sIHNlZ21lbnRbaSArIDZdLCBzZWdtZW50W2kgKyA3XSk7XG5cbiAgICAgIGlmIChiZXN0RGlzdGFuY2UgPiBfYmVzdERpc3RhbmNlKSB7XG4gICAgICAgIGJlc3REaXN0YW5jZSA9IF9iZXN0RGlzdGFuY2U7XG4gICAgICAgIGNsb3Nlc3QuaiA9IGo7XG4gICAgICAgIGNsb3Nlc3QuaSA9IGk7XG4gICAgICAgIGNsb3Nlc3QudCA9IHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNsb3Nlc3Q7XG59IC8vc3ViZGl2aWRlIGEgU2VnbWVudCBjbG9zZXN0IHRvIGEgc3BlY2lmaWMgeCx5IGNvb3JkaW5hdGVcblxuZXhwb3J0IGZ1bmN0aW9uIHN1YmRpdmlkZVNlZ21lbnROZWFyKHgsIHksIHNlZ21lbnQsIHNsaWNlcywgaXRlcmF0aW9ucykge1xuICB2YXIgbCA9IHNlZ21lbnQubGVuZ3RoLFxuICAgICAgYmVzdERpc3RhbmNlID0gX2xhcmdlTnVtLFxuICAgICAgYmVzdFQgPSAwLFxuICAgICAgYmVzdFNlZ21lbnRJbmRleCA9IDAsXG4gICAgICB0LFxuICAgICAgaTtcbiAgc2xpY2VzID0gc2xpY2VzIHx8IDIwO1xuICBpdGVyYXRpb25zID0gaXRlcmF0aW9ucyB8fCAzO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBsOyBpICs9IDYpIHtcbiAgICB0ID0gZ2V0Q2xvc2VzdFByb2dyZXNzT25CZXppZXIoMSwgeCwgeSwgMCwgMSwgc2xpY2VzLCBzZWdtZW50W2ldLCBzZWdtZW50W2kgKyAxXSwgc2VnbWVudFtpICsgMl0sIHNlZ21lbnRbaSArIDNdLCBzZWdtZW50W2kgKyA0XSwgc2VnbWVudFtpICsgNV0sIHNlZ21lbnRbaSArIDZdLCBzZWdtZW50W2kgKyA3XSk7XG5cbiAgICBpZiAoYmVzdERpc3RhbmNlID4gX2Jlc3REaXN0YW5jZSkge1xuICAgICAgYmVzdERpc3RhbmNlID0gX2Jlc3REaXN0YW5jZTtcbiAgICAgIGJlc3RUID0gdDtcbiAgICAgIGJlc3RTZWdtZW50SW5kZXggPSBpO1xuICAgIH1cbiAgfVxuXG4gIHQgPSBnZXRDbG9zZXN0UHJvZ3Jlc3NPbkJlemllcihpdGVyYXRpb25zLCB4LCB5LCBiZXN0VCAtIDAuMDUsIGJlc3RUICsgMC4wNSwgc2xpY2VzLCBzZWdtZW50W2Jlc3RTZWdtZW50SW5kZXhdLCBzZWdtZW50W2Jlc3RTZWdtZW50SW5kZXggKyAxXSwgc2VnbWVudFtiZXN0U2VnbWVudEluZGV4ICsgMl0sIHNlZ21lbnRbYmVzdFNlZ21lbnRJbmRleCArIDNdLCBzZWdtZW50W2Jlc3RTZWdtZW50SW5kZXggKyA0XSwgc2VnbWVudFtiZXN0U2VnbWVudEluZGV4ICsgNV0sIHNlZ21lbnRbYmVzdFNlZ21lbnRJbmRleCArIDZdLCBzZWdtZW50W2Jlc3RTZWdtZW50SW5kZXggKyA3XSk7XG4gIHN1YmRpdmlkZVNlZ21lbnQoc2VnbWVudCwgYmVzdFNlZ21lbnRJbmRleCwgdCk7XG4gIHJldHVybiBiZXN0U2VnbWVudEluZGV4ICsgNjtcbn1cbi8qXG5UYWtlcyBhbnkgb2YgdGhlIGZvbGxvd2luZyBhbmQgY29udmVydHMgaXQgdG8gYW4gYWxsIEN1YmljIEJlemllciBTVkcgZGF0YSBzdHJpbmc6XG4tIEEgPHBhdGg+IGRhdGEgc3RyaW5nIGxpa2UgXCJNMCwwIEwyLDQgdjIwLDE1IEgxMDBcIlxuLSBBIFJhd1BhdGgsIGxpa2UgW1t4LCB5LCB4LCB5LCB4LCB5LCB4LCB5XVtbeCwgeSwgeCwgeSwgeCwgeSwgeCwgeV1dXG4tIEEgU2VnbWVudCwgbGlrZSBbeCwgeSwgeCwgeSwgeCwgeSwgeCwgeV1cblxuTm90ZTogYWxsIG51bWJlcnMgYXJlIHJvdW5kZWQgZG93biB0byB0aGUgY2xvc2VzdCAwLjAwMSB0byBtaW5pbWl6ZSBtZW1vcnksIG1heGltaXplIHNwZWVkLCBhbmQgYXZvaWQgb2RkIG51bWJlcnMgbGlrZSAxZS0xM1xuKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJhd1BhdGhUb1N0cmluZyhyYXdQYXRoKSB7XG4gIGlmIChfaXNOdW1iZXIocmF3UGF0aFswXSkpIHtcbiAgICAvL2luIGNhc2UgYSBzZWdtZW50IGlzIHBhc3NlZCBpbiBpbnN0ZWFkXG4gICAgcmF3UGF0aCA9IFtyYXdQYXRoXTtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBcIlwiLFxuICAgICAgbCA9IHJhd1BhdGgubGVuZ3RoLFxuICAgICAgc2wsXG4gICAgICBzLFxuICAgICAgaSxcbiAgICAgIHNlZ21lbnQ7XG5cbiAgZm9yIChzID0gMDsgcyA8IGw7IHMrKykge1xuICAgIHNlZ21lbnQgPSByYXdQYXRoW3NdO1xuICAgIHJlc3VsdCArPSBcIk1cIiArIF9yb3VuZChzZWdtZW50WzBdKSArIFwiLFwiICsgX3JvdW5kKHNlZ21lbnRbMV0pICsgXCIgQ1wiO1xuICAgIHNsID0gc2VnbWVudC5sZW5ndGg7XG5cbiAgICBmb3IgKGkgPSAyOyBpIDwgc2w7IGkrKykge1xuICAgICAgcmVzdWx0ICs9IF9yb3VuZChzZWdtZW50W2krK10pICsgXCIsXCIgKyBfcm91bmQoc2VnbWVudFtpKytdKSArIFwiIFwiICsgX3JvdW5kKHNlZ21lbnRbaSsrXSkgKyBcIixcIiArIF9yb3VuZChzZWdtZW50W2krK10pICsgXCIgXCIgKyBfcm91bmQoc2VnbWVudFtpKytdKSArIFwiLFwiICsgX3JvdW5kKHNlZ21lbnRbaV0pICsgXCIgXCI7XG4gICAgfVxuXG4gICAgaWYgKHNlZ21lbnQuY2xvc2VkKSB7XG4gICAgICByZXN1bHQgKz0gXCJ6XCI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qXG4vLyB0YWtlcyBhIHNlZ21lbnQgd2l0aCBjb29yZGluYXRlcyBbeCwgeSwgeCwgeSwgLi4uXSBhbmQgY29udmVydHMgdGhlIGNvbnRyb2wgcG9pbnRzIGludG8gYW5nbGVzIGFuZCBsZW5ndGhzIFt4LCB5LCBhbmdsZSwgbGVuZ3RoLCBhbmdsZSwgbGVuZ3RoLCB4LCB5LCBhbmdsZSwgbGVuZ3RoLCAuLi5dIHNvIHRoYXQgaXQgYW5pbWF0ZXMgbW9yZSBjbGVhbmx5IGFuZCBhdm9pZHMgb2RkIGJyZWFrcy9raW5rcy4gRm9yIGV4YW1wbGUsIGlmIHlvdSBhbmltYXRlIGZyb20gMSBvJ2Nsb2NrIHRvIDYgbydjbG9jaywgaXQnZCBqdXN0IGdvIGRpcmVjdGx5L2xpbmVhcmx5IHJhdGhlciB0aGFuIGFyb3VuZC4gU28gdGhlIGxlbmd0aCB3b3VsZCBiZSB2ZXJ5IHNob3J0IGluIHRoZSBtaWRkbGUgb2YgdGhlIHR3ZWVuLlxuZXhwb3J0IGZ1bmN0aW9uIGNwQ29vcmRzVG9BbmdsZXMoc2VnbWVudCwgY29weSkge1xuXHR2YXIgcmVzdWx0ID0gY29weSA/IHNlZ21lbnQuc2xpY2UoMCkgOiBzZWdtZW50LFxuXHRcdHgsIHksIGk7XG5cdGZvciAoaSA9IDA7IGkgPCBzZWdtZW50Lmxlbmd0aDsgaSs9Nikge1xuXHRcdHggPSBzZWdtZW50W2krMl0gLSBzZWdtZW50W2ldO1xuXHRcdHkgPSBzZWdtZW50W2krM10gLSBzZWdtZW50W2krMV07XG5cdFx0cmVzdWx0W2krMl0gPSBNYXRoLmF0YW4yKHksIHgpO1xuXHRcdHJlc3VsdFtpKzNdID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xuXHRcdHggPSBzZWdtZW50W2krNl0gLSBzZWdtZW50W2krNF07XG5cdFx0eSA9IHNlZ21lbnRbaSs3XSAtIHNlZ21lbnRbaSs1XTtcblx0XHRyZXN1bHRbaSs0XSA9IE1hdGguYXRhbjIoeSwgeCk7XG5cdFx0cmVzdWx0W2krNV0gPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gdGFrZXMgYSBzZWdtZW50IHRoYXQgd2FzIGNvbnZlcnRlZCB3aXRoIGNwQ29vcmRzVG9BbmdsZXMoKSB0byBoYXZlIGFuZ2xlcyBhbmQgbGVuZ3RocyBpbnN0ZWFkIG9mIGNvb3JkaW5hdGVzIGZvciB0aGUgY29udHJvbCBwb2ludHMsIGFuZCBjb252ZXJ0cyBpdCBCQUNLIGludG8gY29vcmRpbmF0ZXMuXG5leHBvcnQgZnVuY3Rpb24gY3BBbmdsZXNUb0Nvb3JkcyhzZWdtZW50LCBjb3B5KSB7XG5cdHZhciByZXN1bHQgPSBjb3B5ID8gc2VnbWVudC5zbGljZSgwKSA6IHNlZ21lbnQsXG5cdFx0bGVuZ3RoID0gc2VnbWVudC5sZW5ndGgsXG5cdFx0cm5kID0gMTAwMCxcblx0XHRhbmdsZSwgbCwgaSwgajtcblx0Zm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSs9Nikge1xuXHRcdGFuZ2xlID0gc2VnbWVudFtpKzJdO1xuXHRcdGwgPSBzZWdtZW50W2krM107IC8vbGVuZ3RoXG5cdFx0cmVzdWx0W2krMl0gPSAoKChzZWdtZW50W2ldICsgTWF0aC5jb3MoYW5nbGUpICogbCkgKiBybmQpIHwgMCkgLyBybmQ7XG5cdFx0cmVzdWx0W2krM10gPSAoKChzZWdtZW50W2krMV0gKyBNYXRoLnNpbihhbmdsZSkgKiBsKSAqIHJuZCkgfCAwKSAvIHJuZDtcblx0XHRhbmdsZSA9IHNlZ21lbnRbaSs0XTtcblx0XHRsID0gc2VnbWVudFtpKzVdOyAvL2xlbmd0aFxuXHRcdHJlc3VsdFtpKzRdID0gKCgoc2VnbWVudFtpKzZdIC0gTWF0aC5jb3MoYW5nbGUpICogbCkgKiBybmQpIHwgMCkgLyBybmQ7XG5cdFx0cmVzdWx0W2krNV0gPSAoKChzZWdtZW50W2krN10gLSBNYXRoLnNpbihhbmdsZSkgKiBsKSAqIHJuZCkgfCAwKSAvIHJuZDtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vL2FkZHMgYW4gXCJpc1Ntb290aFwiIGFycmF5IHRvIGVhY2ggc2VnbWVudCBhbmQgcG9wdWxhdGVzIGl0IHdpdGggYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgaXQncyBzbW9vdGggKHRoZSBjb250cm9sIHBvaW50cyBoYXZlIGJhc2ljYWxseSB0aGUgc2FtZSBzbG9wZSkuIEZvciBhbnkgc21vb3RoIGNvbnRyb2wgcG9pbnRzLCBpdCBjb252ZXJ0cyB0aGUgY29vcmRpbmF0ZXMgaW50byBhbmdsZSAoeCwgaW4gcmFkaWFucykgYW5kIGxlbmd0aCAoeSkgYW5kIHB1dHMgdGhlbSBpbnRvIHRoZSBzYW1lIGluZGV4IHZhbHVlIGluIGEgc21vb3RoRGF0YSBhcnJheS5cbmV4cG9ydCBmdW5jdGlvbiBwb3B1bGF0ZVNtb290aERhdGEocmF3UGF0aCkge1xuXHRsZXQgaiA9IHJhd1BhdGgubGVuZ3RoLFxuXHRcdHNtb290aCwgc2VnbWVudCwgeCwgeSwgeDIsIHkyLCBpLCBsLCBhLCBhMiwgaXNTbW9vdGgsIHNtb290aERhdGE7XG5cdHdoaWxlICgtLWogPiAtMSkge1xuXHRcdHNlZ21lbnQgPSByYXdQYXRoW2pdO1xuXHRcdGlzU21vb3RoID0gc2VnbWVudC5pc1Ntb290aCA9IHNlZ21lbnQuaXNTbW9vdGggfHwgWzAsIDAsIDAsIDBdO1xuXHRcdHNtb290aERhdGEgPSBzZWdtZW50LnNtb290aERhdGEgPSBzZWdtZW50LnNtb290aERhdGEgfHwgWzAsIDAsIDAsIDBdO1xuXHRcdGlzU21vb3RoLmxlbmd0aCA9IDQ7XG5cdFx0bCA9IHNlZ21lbnQubGVuZ3RoIC0gMjtcblx0XHRmb3IgKGkgPSA2OyBpIDwgbDsgaSArPSA2KSB7XG5cdFx0XHR4ID0gc2VnbWVudFtpXSAtIHNlZ21lbnRbaSAtIDJdO1xuXHRcdFx0eSA9IHNlZ21lbnRbaSArIDFdIC0gc2VnbWVudFtpIC0gMV07XG5cdFx0XHR4MiA9IHNlZ21lbnRbaSArIDJdIC0gc2VnbWVudFtpXTtcblx0XHRcdHkyID0gc2VnbWVudFtpICsgM10gLSBzZWdtZW50W2kgKyAxXTtcblx0XHRcdGEgPSBfYXRhbjIoeSwgeCk7XG5cdFx0XHRhMiA9IF9hdGFuMih5MiwgeDIpO1xuXHRcdFx0c21vb3RoID0gKE1hdGguYWJzKGEgLSBhMikgPCAwLjA5KTtcblx0XHRcdGlmIChzbW9vdGgpIHtcblx0XHRcdFx0c21vb3RoRGF0YVtpIC0gMl0gPSBhO1xuXHRcdFx0XHRzbW9vdGhEYXRhW2kgKyAyXSA9IGEyO1xuXHRcdFx0XHRzbW9vdGhEYXRhW2kgLSAxXSA9IF9zcXJ0KHggKiB4ICsgeSAqIHkpO1xuXHRcdFx0XHRzbW9vdGhEYXRhW2kgKyAzXSA9IF9zcXJ0KHgyICogeDIgKyB5MiAqIHkyKTtcblx0XHRcdH1cblx0XHRcdGlzU21vb3RoLnB1c2goc21vb3RoLCBzbW9vdGgsIDAsIDAsIHNtb290aCwgc21vb3RoKTtcblx0XHR9XG5cdFx0Ly9pZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnRzIGFyZSBpZGVudGljYWwsIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGEgc21vb3RoIHRyYW5zaXRpb24uIFdlIG11c3QgaGFuZGxlIHRoaXMgYSBiaXQgZGlmZmVyZW50bHkgZHVlIHRvIHRoZWlyIHBvc2l0aW9ucyBpbiB0aGUgYXJyYXkuXG5cdFx0aWYgKHNlZ21lbnRbbF0gPT09IHNlZ21lbnRbMF0gJiYgc2VnbWVudFtsKzFdID09PSBzZWdtZW50WzFdKSB7XG5cdFx0XHR4ID0gc2VnbWVudFswXSAtIHNlZ21lbnRbbC0yXTtcblx0XHRcdHkgPSBzZWdtZW50WzFdIC0gc2VnbWVudFtsLTFdO1xuXHRcdFx0eDIgPSBzZWdtZW50WzJdIC0gc2VnbWVudFswXTtcblx0XHRcdHkyID0gc2VnbWVudFszXSAtIHNlZ21lbnRbMV07XG5cdFx0XHRhID0gX2F0YW4yKHksIHgpO1xuXHRcdFx0YTIgPSBfYXRhbjIoeTIsIHgyKTtcblx0XHRcdGlmIChNYXRoLmFicyhhIC0gYTIpIDwgMC4wOSkge1xuXHRcdFx0XHRzbW9vdGhEYXRhW2wtMl0gPSBhO1xuXHRcdFx0XHRzbW9vdGhEYXRhWzJdID0gYTI7XG5cdFx0XHRcdHNtb290aERhdGFbbC0xXSA9IF9zcXJ0KHggKiB4ICsgeSAqIHkpO1xuXHRcdFx0XHRzbW9vdGhEYXRhWzNdID0gX3NxcnQoeDIgKiB4MiArIHkyICogeTIpO1xuXHRcdFx0XHRpc1Ntb290aFtsLTJdID0gaXNTbW9vdGhbbC0xXSA9IHRydWU7IC8vZG9uJ3QgY2hhbmdlIGluZGV4ZXMgMiBhbmQgMyBiZWNhdXNlIHdlJ2xsIHRyaWdnZXIgZXZlcnl0aGluZyBmcm9tIHRoZSBFTkQsIGFuZCB0aGlzIHdpbGwgb3B0aW1pemUgZmlsZSBzaXplIGEgYml0LlxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmF3UGF0aDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwb2ludFRvU2NyZWVuKHN2Z0VsZW1lbnQsIHBvaW50KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgeyAvL2J5IGRlZmF1bHQsIHRha2UgdGhlIGZpcnN0IHNldCBvZiBjb29yZGluYXRlcyBpbiB0aGUgcGF0aCBhcyB0aGUgcG9pbnRcblx0XHRsZXQgcmF3UGF0aCA9IGdldFJhd1BhdGgoc3ZnRWxlbWVudCk7XG5cdFx0cG9pbnQgPSBzdmdFbGVtZW50Lm93bmVyU1ZHRWxlbWVudC5jcmVhdGVTVkdQb2ludCgpO1xuXHRcdHBvaW50LnggPSByYXdQYXRoWzBdWzBdO1xuXHRcdHBvaW50LnkgPSByYXdQYXRoWzBdWzFdO1xuXHR9XG5cdHJldHVybiBwb2ludC5tYXRyaXhUcmFuc2Zvcm0oc3ZnRWxlbWVudC5nZXRTY3JlZW5DVE0oKSk7XG59XG5cbiovIiwiLyohXG4gKiBtYXRyaXggMy4xMi4yXG4gKiBodHRwczovL2dyZWVuc29jay5jb21cbiAqXG4gKiBDb3B5cmlnaHQgMjAwOC0yMDIzLCBHcmVlblNvY2suIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhdCBodHRwczovL2dyZWVuc29jay5jb20vc3RhbmRhcmQtbGljZW5zZSBvciBmb3JcbiAqIENsdWIgR3JlZW5Tb2NrIG1lbWJlcnMsIHRoZSBhZ3JlZW1lbnQgaXNzdWVkIHdpdGggdGhhdCBtZW1iZXJzaGlwLlxuICogQGF1dGhvcjogSmFjayBEb3lsZSwgamFja0BncmVlbnNvY2suY29tXG4qL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xudmFyIF9kb2MsXG4gICAgX3dpbixcbiAgICBfZG9jRWxlbWVudCxcbiAgICBfYm9keSxcbiAgICBfZGl2Q29udGFpbmVyLFxuICAgIF9zdmdDb250YWluZXIsXG4gICAgX2lkZW50aXR5TWF0cml4LFxuICAgIF9nRWwsXG4gICAgX3RyYW5zZm9ybVByb3AgPSBcInRyYW5zZm9ybVwiLFxuICAgIF90cmFuc2Zvcm1PcmlnaW5Qcm9wID0gX3RyYW5zZm9ybVByb3AgKyBcIk9yaWdpblwiLFxuICAgIF9oYXNPZmZzZXRCdWcsXG4gICAgX3NldERvYyA9IGZ1bmN0aW9uIF9zZXREb2MoZWxlbWVudCkge1xuICB2YXIgZG9jID0gZWxlbWVudC5vd25lckRvY3VtZW50IHx8IGVsZW1lbnQ7XG5cbiAgaWYgKCEoX3RyYW5zZm9ybVByb3AgaW4gZWxlbWVudC5zdHlsZSkgJiYgXCJtc1RyYW5zZm9ybVwiIGluIGVsZW1lbnQuc3R5bGUpIHtcbiAgICAvL3RvIGltcHJvdmUgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBNaWNyb3NvZnQgYnJvd3NlcnNcbiAgICBfdHJhbnNmb3JtUHJvcCA9IFwibXNUcmFuc2Zvcm1cIjtcbiAgICBfdHJhbnNmb3JtT3JpZ2luUHJvcCA9IF90cmFuc2Zvcm1Qcm9wICsgXCJPcmlnaW5cIjtcbiAgfVxuXG4gIHdoaWxlIChkb2MucGFyZW50Tm9kZSAmJiAoZG9jID0gZG9jLnBhcmVudE5vZGUpKSB7fVxuXG4gIF93aW4gPSB3aW5kb3c7XG4gIF9pZGVudGl0eU1hdHJpeCA9IG5ldyBNYXRyaXgyRCgpO1xuXG4gIGlmIChkb2MpIHtcbiAgICBfZG9jID0gZG9jO1xuICAgIF9kb2NFbGVtZW50ID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICBfYm9keSA9IGRvYy5ib2R5O1xuICAgIF9nRWwgPSBfZG9jLmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwiZ1wiKTsgLy8gcHJldmVudCBhbnkgZXhpc3RpbmcgQ1NTIGZyb20gdHJhbnNmb3JtaW5nIGl0XG5cbiAgICBfZ0VsLnN0eWxlLnRyYW5zZm9ybSA9IFwibm9uZVwiOyAvLyBub3cgdGVzdCBmb3IgdGhlIG9mZnNldCByZXBvcnRpbmcgYnVnLiBVc2UgZmVhdHVyZSBkZXRlY3Rpb24gaW5zdGVhZCBvZiBicm93c2VyIHNuaWZmaW5nIHRvIG1ha2UgdGhpbmdzIG1vcmUgYnVsbGV0cHJvb2YgYW5kIGZ1dHVyZS1wcm9vZi4gSG9wZWZ1bGx5IFNhZmFyaSB3aWxsIGZpeCB0aGVpciBidWcgc29vbiBidXQgaXQncyAyMDIwIGFuZCBpdCdzIHN0aWxsIG5vdCBmaXhlZC5cblxuICAgIHZhciBkMSA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxuICAgICAgICBkMiA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgX2JvZHkuYXBwZW5kQ2hpbGQoZDEpO1xuXG4gICAgZDEuYXBwZW5kQ2hpbGQoZDIpO1xuICAgIGQxLnN0eWxlLnBvc2l0aW9uID0gXCJzdGF0aWNcIjtcbiAgICBkMS5zdHlsZVtfdHJhbnNmb3JtUHJvcF0gPSBcInRyYW5zbGF0ZTNkKDAsMCwxcHgpXCI7XG4gICAgX2hhc09mZnNldEJ1ZyA9IGQyLm9mZnNldFBhcmVudCAhPT0gZDE7XG5cbiAgICBfYm9keS5yZW1vdmVDaGlsZChkMSk7XG4gIH1cblxuICByZXR1cm4gZG9jO1xufSxcbiAgICBfZm9yY2VOb25aZXJvU2NhbGUgPSBmdW5jdGlvbiBfZm9yY2VOb25aZXJvU2NhbGUoZSkge1xuICAvLyB3YWxrcyB1cCB0aGUgZWxlbWVudCdzIGFuY2VzdG9ycyBhbmQgZmluZHMgYW55IHRoYXQgaGFkIHRoZWlyIHNjYWxlIHNldCB0byAwIHZpYSBHU0FQLCBhbmQgY2hhbmdlcyB0aGVtIHRvIDAuMDAwMSB0byBlbnN1cmUgdGhhdCBtZWFzdXJlbWVudHMgd29yay4gRmlyZWZveCBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gaW5jb3JyZWN0bHkgcmVwb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHdoZW4gc2NhbGUgaXMgMC5cbiAgdmFyIGEsIGNhY2hlO1xuXG4gIHdoaWxlIChlICYmIGUgIT09IF9ib2R5KSB7XG4gICAgY2FjaGUgPSBlLl9nc2FwO1xuICAgIGNhY2hlICYmIGNhY2hlLnVuY2FjaGUgJiYgY2FjaGUuZ2V0KGUsIFwieFwiKTsgLy8gZm9yY2UgcmUtcGFyc2luZyBvZiB0cmFuc2Zvcm1zIGlmIG5lY2Vzc2FyeVxuXG4gICAgaWYgKGNhY2hlICYmICFjYWNoZS5zY2FsZVggJiYgIWNhY2hlLnNjYWxlWSAmJiBjYWNoZS5yZW5kZXJUcmFuc2Zvcm0pIHtcbiAgICAgIGNhY2hlLnNjYWxlWCA9IGNhY2hlLnNjYWxlWSA9IDFlLTQ7XG4gICAgICBjYWNoZS5yZW5kZXJUcmFuc2Zvcm0oMSwgY2FjaGUpO1xuICAgICAgYSA/IGEucHVzaChjYWNoZSkgOiBhID0gW2NhY2hlXTtcbiAgICB9XG5cbiAgICBlID0gZS5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIGE7XG59LFxuICAgIC8vIHBvc3NpYmxlIGZ1dHVyZSBhZGRpdGlvbjogcGFzcyBhbiBlbGVtZW50IHRvIF9mb3JjZURpc3BsYXkoKSBhbmQgaXQnbGwgd2FsayB1cCBhbGwgaXRzIGFuY2VzdG9ycyBhbmQgbWFrZSBzdXJlIGFueXRoaW5nIHdpdGggZGlzcGxheTogbm9uZSBpcyBzZXQgdG8gZGlzcGxheTogYmxvY2ssIGFuZCBpZiB0aGVyZSdzIG5vIHBhcmVudE5vZGUsIGl0J2xsIGFkZCBpdCB0byB0aGUgYm9keS4gSXQgcmV0dXJucyBhbiBBcnJheSB0aGF0IHlvdSBjYW4gdGhlbiBmZWVkIHRvIF9yZXZlcnREaXNwbGF5KCkgdG8gaGF2ZSBpdCByZXZlcnQgYWxsIHRoZSBjaGFuZ2VzIGl0IG1hZGUuXG4vLyBfZm9yY2VEaXNwbGF5ID0gZSA9PiB7XG4vLyBcdGxldCBhID0gW10sXG4vLyBcdFx0cGFyZW50O1xuLy8gXHR3aGlsZSAoZSAmJiBlICE9PSBfYm9keSkge1xuLy8gXHRcdHBhcmVudCA9IGUucGFyZW50Tm9kZTtcbi8vIFx0XHQoX3dpbi5nZXRDb21wdXRlZFN0eWxlKGUpLmRpc3BsYXkgPT09IFwibm9uZVwiIHx8ICFwYXJlbnQpICYmIGEucHVzaChlLCBlLnN0eWxlLmRpc3BsYXksIHBhcmVudCkgJiYgKGUuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIik7XG4vLyBcdFx0cGFyZW50IHx8IF9ib2R5LmFwcGVuZENoaWxkKGUpO1xuLy8gXHRcdGUgPSBwYXJlbnQ7XG4vLyBcdH1cbi8vIFx0cmV0dXJuIGE7XG4vLyB9LFxuLy8gX3JldmVydERpc3BsYXkgPSBhID0+IHtcbi8vIFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSs9Mykge1xuLy8gXHRcdGFbaSsxXSA/IChhW2ldLnN0eWxlLmRpc3BsYXkgPSBhW2krMV0pIDogYVtpXS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcImRpc3BsYXlcIik7XG4vLyBcdFx0YVtpKzJdIHx8IGFbaV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhW2ldKTtcbi8vIFx0fVxuLy8gfSxcbl9zdmdUZW1wcyA9IFtdLFxuICAgIC8vd2UgY3JlYXRlIDMgZWxlbWVudHMgZm9yIFNWRywgYW5kIDMgZm9yIG90aGVyIERPTSBlbGVtZW50cyBhbmQgY2FjaGUgdGhlbSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gVGhleSBnZXQgbmVzdGVkIGluIF9kaXZDb250YWluZXIgYW5kIF9zdmdDb250YWluZXIgc28gdGhhdCBqdXN0IG9uZSBlbGVtZW50IGlzIGFkZGVkIHRvIHRoZSBET00gb24gZWFjaCBzdWNjZXNzaXZlIGF0dGVtcHQuIEFnYWluLCBwZXJmb3JtYW5jZSBpcyBrZXkuXG5fZGl2VGVtcHMgPSBbXSxcbiAgICBfZ2V0RG9jU2Nyb2xsVG9wID0gZnVuY3Rpb24gX2dldERvY1Njcm9sbFRvcCgpIHtcbiAgcmV0dXJuIF93aW4ucGFnZVlPZmZzZXQgfHwgX2RvYy5zY3JvbGxUb3AgfHwgX2RvY0VsZW1lbnQuc2Nyb2xsVG9wIHx8IF9ib2R5LnNjcm9sbFRvcCB8fCAwO1xufSxcbiAgICBfZ2V0RG9jU2Nyb2xsTGVmdCA9IGZ1bmN0aW9uIF9nZXREb2NTY3JvbGxMZWZ0KCkge1xuICByZXR1cm4gX3dpbi5wYWdlWE9mZnNldCB8fCBfZG9jLnNjcm9sbExlZnQgfHwgX2RvY0VsZW1lbnQuc2Nyb2xsTGVmdCB8fCBfYm9keS5zY3JvbGxMZWZ0IHx8IDA7XG59LFxuICAgIF9zdmdPd25lciA9IGZ1bmN0aW9uIF9zdmdPd25lcihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50Lm93bmVyU1ZHRWxlbWVudCB8fCAoKGVsZW1lbnQudGFnTmFtZSArIFwiXCIpLnRvTG93ZXJDYXNlKCkgPT09IFwic3ZnXCIgPyBlbGVtZW50IDogbnVsbCk7XG59LFxuICAgIF9pc0ZpeGVkID0gZnVuY3Rpb24gX2lzRml4ZWQoZWxlbWVudCkge1xuICBpZiAoX3dpbi5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSBcImZpeGVkXCIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cbiAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSA9PT0gMSkge1xuICAgIC8vIGF2b2lkIGRvY3VtZW50IGZyYWdtZW50cyB3aGljaCB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgIHJldHVybiBfaXNGaXhlZChlbGVtZW50KTtcbiAgfVxufSxcbiAgICBfY3JlYXRlU2libGluZyA9IGZ1bmN0aW9uIF9jcmVhdGVTaWJsaW5nKGVsZW1lbnQsIGkpIHtcbiAgaWYgKGVsZW1lbnQucGFyZW50Tm9kZSAmJiAoX2RvYyB8fCBfc2V0RG9jKGVsZW1lbnQpKSkge1xuICAgIHZhciBzdmcgPSBfc3ZnT3duZXIoZWxlbWVudCksXG4gICAgICAgIG5zID0gc3ZnID8gc3ZnLmdldEF0dHJpYnV0ZShcInhtbG5zXCIpIHx8IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiA6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFxuICAgICAgICB0eXBlID0gc3ZnID8gaSA/IFwicmVjdFwiIDogXCJnXCIgOiBcImRpdlwiLFxuICAgICAgICB4ID0gaSAhPT0gMiA/IDAgOiAxMDAsXG4gICAgICAgIHkgPSBpID09PSAzID8gMTAwIDogMCxcbiAgICAgICAgY3NzID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO3BvaW50ZXItZXZlbnRzOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO1wiLFxuICAgICAgICBlID0gX2RvYy5jcmVhdGVFbGVtZW50TlMgPyBfZG9jLmNyZWF0ZUVsZW1lbnROUyhucy5yZXBsYWNlKC9eaHR0cHMvLCBcImh0dHBcIiksIHR5cGUpIDogX2RvYy5jcmVhdGVFbGVtZW50KHR5cGUpO1xuXG4gICAgaWYgKGkpIHtcbiAgICAgIGlmICghc3ZnKSB7XG4gICAgICAgIGlmICghX2RpdkNvbnRhaW5lcikge1xuICAgICAgICAgIF9kaXZDb250YWluZXIgPSBfY3JlYXRlU2libGluZyhlbGVtZW50KTtcbiAgICAgICAgICBfZGl2Q29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBjc3M7XG4gICAgICAgIH1cblxuICAgICAgICBlLnN0eWxlLmNzc1RleHQgPSBjc3MgKyBcIndpZHRoOjAuMXB4O2hlaWdodDowLjFweDt0b3A6XCIgKyB5ICsgXCJweDtsZWZ0OlwiICsgeCArIFwicHhcIjtcblxuICAgICAgICBfZGl2Q29udGFpbmVyLmFwcGVuZENoaWxkKGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3N2Z0NvbnRhaW5lciB8fCAoX3N2Z0NvbnRhaW5lciA9IF9jcmVhdGVTaWJsaW5nKGVsZW1lbnQpKTtcbiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCAwLjAxKTtcbiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgMC4wMSk7XG4gICAgICAgIGUuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgeCArIFwiLFwiICsgeSArIFwiKVwiKTtcblxuICAgICAgICBfc3ZnQ29udGFpbmVyLmFwcGVuZENoaWxkKGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlO1xuICB9XG5cbiAgdGhyb3cgXCJOZWVkIGRvY3VtZW50IGFuZCBwYXJlbnQuXCI7XG59LFxuICAgIF9jb25zb2xpZGF0ZSA9IGZ1bmN0aW9uIF9jb25zb2xpZGF0ZShtKSB7XG4gIC8vIHJlcGxhY2VzIFNWR1RyYW5zZm9ybUxpc3QuY29uc29saWRhdGUoKSBiZWNhdXNlIGEgYnVnIGluIEZpcmVmb3ggY2F1c2VzIGl0IHRvIGJyZWFrIHBvaW50ZXIgZXZlbnRzLiBTZWUgaHR0cHM6Ly9ncmVlbnNvY2suY29tL2ZvcnVtcy90b3BpYy8yMzI0OC10b3VjaC1pcy1ub3Qtd29ya2luZy1vbi1kcmFnZ2FibGUtaW4tZmlyZWZveC13aW5kb3dzLXYzMjQvP3RhYj1jb21tZW50cyNjb21tZW50LTEwOTgwMFxuICB2YXIgYyA9IG5ldyBNYXRyaXgyRCgpLFxuICAgICAgaSA9IDA7XG5cbiAgZm9yICg7IGkgPCBtLm51bWJlck9mSXRlbXM7IGkrKykge1xuICAgIGMubXVsdGlwbHkobS5nZXRJdGVtKGkpLm1hdHJpeCk7XG4gIH1cblxuICByZXR1cm4gYztcbn0sXG4gICAgX2dldENUTSA9IGZ1bmN0aW9uIF9nZXRDVE0oc3ZnKSB7XG4gIHZhciBtID0gc3ZnLmdldENUTSgpLFxuICAgICAgdHJhbnNmb3JtO1xuXG4gIGlmICghbSkge1xuICAgIC8vIEZpcmVmb3ggcmV0dXJucyBudWxsIGZvciBnZXRDVE0oKSBvbiByb290IDxzdmc+IGVsZW1lbnRzLCBzbyB0aGlzIGlzIGEgd29ya2Fyb3VuZCB1c2luZyBhIDxnPiB0aGF0IHdlIHRlbXBvcmFyaWx5IGFwcGVuZC5cbiAgICB0cmFuc2Zvcm0gPSBzdmcuc3R5bGVbX3RyYW5zZm9ybVByb3BdO1xuICAgIHN2Zy5zdHlsZVtfdHJhbnNmb3JtUHJvcF0gPSBcIm5vbmVcIjsgLy8gYSBidWcgaW4gRmlyZWZveCBjYXVzZXMgY3NzIHRyYW5zZm9ybXMgdG8gY29udGFtaW5hdGUgdGhlIGdldENUTSgpXG5cbiAgICBzdmcuYXBwZW5kQ2hpbGQoX2dFbCk7XG4gICAgbSA9IF9nRWwuZ2V0Q1RNKCk7XG4gICAgc3ZnLnJlbW92ZUNoaWxkKF9nRWwpO1xuICAgIHRyYW5zZm9ybSA/IHN2Zy5zdHlsZVtfdHJhbnNmb3JtUHJvcF0gPSB0cmFuc2Zvcm0gOiBzdmcuc3R5bGUucmVtb3ZlUHJvcGVydHkoX3RyYW5zZm9ybVByb3AucmVwbGFjZSgvKFtBLVpdKS9nLCBcIi0kMVwiKS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHJldHVybiBtIHx8IF9pZGVudGl0eU1hdHJpeC5jbG9uZSgpOyAvLyBGaXJlZm94IHdpbGwgc3RpbGwgcmV0dXJuIG51bGwgaWYgdGhlIDxzdmc+IGhhcyBhIHdpZHRoL2hlaWdodCBvZiAwIGluIHRoZSBicm93c2VyLlxufSxcbiAgICBfcGxhY2VTaWJsaW5ncyA9IGZ1bmN0aW9uIF9wbGFjZVNpYmxpbmdzKGVsZW1lbnQsIGFkanVzdEdPZmZzZXQpIHtcbiAgdmFyIHN2ZyA9IF9zdmdPd25lcihlbGVtZW50KSxcbiAgICAgIGlzUm9vdFNWRyA9IGVsZW1lbnQgPT09IHN2ZyxcbiAgICAgIHNpYmxpbmdzID0gc3ZnID8gX3N2Z1RlbXBzIDogX2RpdlRlbXBzLFxuICAgICAgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgY29udGFpbmVyLFxuICAgICAgbSxcbiAgICAgIGIsXG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIGNzO1xuXG4gIGlmIChlbGVtZW50ID09PSBfd2luKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBzaWJsaW5ncy5sZW5ndGggfHwgc2libGluZ3MucHVzaChfY3JlYXRlU2libGluZyhlbGVtZW50LCAxKSwgX2NyZWF0ZVNpYmxpbmcoZWxlbWVudCwgMiksIF9jcmVhdGVTaWJsaW5nKGVsZW1lbnQsIDMpKTtcbiAgY29udGFpbmVyID0gc3ZnID8gX3N2Z0NvbnRhaW5lciA6IF9kaXZDb250YWluZXI7XG5cbiAgaWYgKHN2Zykge1xuICAgIGlmIChpc1Jvb3RTVkcpIHtcbiAgICAgIGIgPSBfZ2V0Q1RNKGVsZW1lbnQpO1xuICAgICAgeCA9IC1iLmUgLyBiLmE7XG4gICAgICB5ID0gLWIuZiAvIGIuZDtcbiAgICAgIG0gPSBfaWRlbnRpdHlNYXRyaXg7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50LmdldEJCb3gpIHtcbiAgICAgIGIgPSBlbGVtZW50LmdldEJCb3goKTtcbiAgICAgIG0gPSBlbGVtZW50LnRyYW5zZm9ybSA/IGVsZW1lbnQudHJhbnNmb3JtLmJhc2VWYWwgOiB7fTsgLy8gSUUxMSBkb2Vzbid0IGZvbGxvdyB0aGUgc3BlYy5cblxuICAgICAgbSA9ICFtLm51bWJlck9mSXRlbXMgPyBfaWRlbnRpdHlNYXRyaXggOiBtLm51bWJlck9mSXRlbXMgPiAxID8gX2NvbnNvbGlkYXRlKG0pIDogbS5nZXRJdGVtKDApLm1hdHJpeDsgLy8gZG9uJ3QgY2FsbCBtLmNvbnNvbGlkYXRlKCkubWF0cml4IGJlY2F1c2UgYSBidWcgaW4gRmlyZWZveCBtYWtlcyBwb2ludGVyIGV2ZW50cyBub3Qgd29yayB3aGVuIGNvbnNvbGlkYXRlKCkgaXMgY2FsbGVkIG9uIHRoZSBzYW1lIHRpY2sgYXMgZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkhIFNlZSBodHRwczovL2dyZWVuc29jay5jb20vZm9ydW1zL3RvcGljLzIzMjQ4LXRvdWNoLWlzLW5vdC13b3JraW5nLW9uLWRyYWdnYWJsZS1pbi1maXJlZm94LXdpbmRvd3MtdjMyNC8/dGFiPWNvbW1lbnRzI2NvbW1lbnQtMTA5ODAwXG5cbiAgICAgIHggPSBtLmEgKiBiLnggKyBtLmMgKiBiLnk7XG4gICAgICB5ID0gbS5iICogYi54ICsgbS5kICogYi55O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBtYXkgYmUgYSA8bWFzaz4gd2hpY2ggaGFzIG5vIGdldEJCb3goKSBzbyBqdXN0IHVzZSBkZWZhdWx0cyBpbnN0ZWFkIG9mIHRocm93aW5nIGVycm9ycy5cbiAgICAgIG0gPSBuZXcgTWF0cml4MkQoKTtcbiAgICAgIHggPSB5ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoYWRqdXN0R09mZnNldCAmJiBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJnXCIpIHtcbiAgICAgIHggPSB5ID0gMDtcbiAgICB9XG5cbiAgICAoaXNSb290U1ZHID8gc3ZnIDogcGFyZW50KS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgXCJtYXRyaXgoXCIgKyBtLmEgKyBcIixcIiArIG0uYiArIFwiLFwiICsgbS5jICsgXCIsXCIgKyBtLmQgKyBcIixcIiArIChtLmUgKyB4KSArIFwiLFwiICsgKG0uZiArIHkpICsgXCIpXCIpO1xuICB9IGVsc2Uge1xuICAgIHggPSB5ID0gMDtcblxuICAgIGlmIChfaGFzT2Zmc2V0QnVnKSB7XG4gICAgICAvLyBzb21lIGJyb3dzZXJzIChsaWtlIFNhZmFyaSkgaGF2ZSBhIGJ1ZyB0aGF0IGNhdXNlcyB0aGVtIHRvIG1pc3JlcG9ydCBvZmZzZXQgdmFsdWVzLiBXaGVuIGFuIGFuY2VzdG9yIGVsZW1lbnQgaGFzIGEgdHJhbnNmb3JtIGFwcGxpZWQsIGl0J3Mgc3VwcG9zZWQgdG8gdHJlYXQgaXQgYXMgaWYgaXQncyBwb3NpdGlvbjogcmVsYXRpdmUgKG5ldyBjb250ZXh0KS4gU2FmYXJpIGJvdGNoZXMgdGhpcywgc28gd2UgbmVlZCB0byBmaW5kIHRoZSBjbG9zZXN0IGFuY2VzdG9yIChiZXR3ZWVuIHRoZSBlbGVtZW50IGFuZCBpdHMgb2Zmc2V0UGFyZW50KSB0aGF0IGhhcyBhIHRyYW5zZm9ybSBhcHBsaWVkIGFuZCBpZiBvbmUgaXMgZm91bmQsIGdyYWIgaXRzIG9mZnNldFRvcC9MZWZ0IGFuZCBzdWJ0cmFjdCB0aGVtIHRvIGNvbXBlbnNhdGUuXG4gICAgICBtID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG4gICAgICBiID0gZWxlbWVudDtcblxuICAgICAgd2hpbGUgKGIgJiYgKGIgPSBiLnBhcmVudE5vZGUpICYmIGIgIT09IG0gJiYgYi5wYXJlbnROb2RlKSB7XG4gICAgICAgIGlmICgoX3dpbi5nZXRDb21wdXRlZFN0eWxlKGIpW190cmFuc2Zvcm1Qcm9wXSArIFwiXCIpLmxlbmd0aCA+IDQpIHtcbiAgICAgICAgICB4ID0gYi5vZmZzZXRMZWZ0O1xuICAgICAgICAgIHkgPSBiLm9mZnNldFRvcDtcbiAgICAgICAgICBiID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNzID0gX3dpbi5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuXG4gICAgaWYgKGNzLnBvc2l0aW9uICE9PSBcImFic29sdXRlXCIgJiYgY3MucG9zaXRpb24gIT09IFwiZml4ZWRcIikge1xuICAgICAgbSA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXG4gICAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudCAhPT0gbSkge1xuICAgICAgICAvLyBpZiB0aGVyZSdzIGFuIGFuY2VzdG9yIGVsZW1lbnQgYmV0d2VlbiB0aGUgZWxlbWVudCBhbmQgaXRzIG9mZnNldFBhcmVudCB0aGF0J3Mgc2Nyb2xsZWQsIHdlIG11c3QgZmFjdG9yIHRoYXQgaW4uXG4gICAgICAgIHggKz0gcGFyZW50LnNjcm9sbExlZnQgfHwgMDtcbiAgICAgICAgeSArPSBwYXJlbnQuc2Nyb2xsVG9wIHx8IDA7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGIgPSBjb250YWluZXIuc3R5bGU7XG4gICAgYi50b3AgPSBlbGVtZW50Lm9mZnNldFRvcCAtIHkgKyBcInB4XCI7XG4gICAgYi5sZWZ0ID0gZWxlbWVudC5vZmZzZXRMZWZ0IC0geCArIFwicHhcIjtcbiAgICBiW190cmFuc2Zvcm1Qcm9wXSA9IGNzW190cmFuc2Zvcm1Qcm9wXTtcbiAgICBiW190cmFuc2Zvcm1PcmlnaW5Qcm9wXSA9IGNzW190cmFuc2Zvcm1PcmlnaW5Qcm9wXTsgLy8gYi5ib3JkZXIgPSBtLmJvcmRlcjtcbiAgICAvLyBiLmJvcmRlckxlZnRTdHlsZSA9IG0uYm9yZGVyTGVmdFN0eWxlO1xuICAgIC8vIGIuYm9yZGVyVG9wU3R5bGUgPSBtLmJvcmRlclRvcFN0eWxlO1xuICAgIC8vIGIuYm9yZGVyTGVmdFdpZHRoID0gbS5ib3JkZXJMZWZ0V2lkdGg7XG4gICAgLy8gYi5ib3JkZXJUb3BXaWR0aCA9IG0uYm9yZGVyVG9wV2lkdGg7XG5cbiAgICBiLnBvc2l0aW9uID0gY3MucG9zaXRpb24gPT09IFwiZml4ZWRcIiA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICBlbGVtZW50LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZXI7XG59LFxuICAgIF9zZXRNYXRyaXggPSBmdW5jdGlvbiBfc2V0TWF0cml4KG0sIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgbS5hID0gYTtcbiAgbS5iID0gYjtcbiAgbS5jID0gYztcbiAgbS5kID0gZDtcbiAgbS5lID0gZTtcbiAgbS5mID0gZjtcbiAgcmV0dXJuIG07XG59O1xuXG5leHBvcnQgdmFyIE1hdHJpeDJEID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWF0cml4MkQoYSwgYiwgYywgZCwgZSwgZikge1xuICAgIGlmIChhID09PSB2b2lkIDApIHtcbiAgICAgIGEgPSAxO1xuICAgIH1cblxuICAgIGlmIChiID09PSB2b2lkIDApIHtcbiAgICAgIGIgPSAwO1xuICAgIH1cblxuICAgIGlmIChjID09PSB2b2lkIDApIHtcbiAgICAgIGMgPSAwO1xuICAgIH1cblxuICAgIGlmIChkID09PSB2b2lkIDApIHtcbiAgICAgIGQgPSAxO1xuICAgIH1cblxuICAgIGlmIChlID09PSB2b2lkIDApIHtcbiAgICAgIGUgPSAwO1xuICAgIH1cblxuICAgIGlmIChmID09PSB2b2lkIDApIHtcbiAgICAgIGYgPSAwO1xuICAgIH1cblxuICAgIF9zZXRNYXRyaXgodGhpcywgYSwgYiwgYywgZCwgZSwgZik7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTWF0cml4MkQucHJvdG90eXBlO1xuXG4gIF9wcm90by5pbnZlcnNlID0gZnVuY3Rpb24gaW52ZXJzZSgpIHtcbiAgICB2YXIgYSA9IHRoaXMuYSxcbiAgICAgICAgYiA9IHRoaXMuYixcbiAgICAgICAgYyA9IHRoaXMuYyxcbiAgICAgICAgZCA9IHRoaXMuZCxcbiAgICAgICAgZSA9IHRoaXMuZSxcbiAgICAgICAgZiA9IHRoaXMuZixcbiAgICAgICAgZGV0ZXJtaW5hbnQgPSBhICogZCAtIGIgKiBjIHx8IDFlLTEwO1xuICAgIHJldHVybiBfc2V0TWF0cml4KHRoaXMsIGQgLyBkZXRlcm1pbmFudCwgLWIgLyBkZXRlcm1pbmFudCwgLWMgLyBkZXRlcm1pbmFudCwgYSAvIGRldGVybWluYW50LCAoYyAqIGYgLSBkICogZSkgLyBkZXRlcm1pbmFudCwgLShhICogZiAtIGIgKiBlKSAvIGRldGVybWluYW50KTtcbiAgfTtcblxuICBfcHJvdG8ubXVsdGlwbHkgPSBmdW5jdGlvbiBtdWx0aXBseShtYXRyaXgpIHtcbiAgICB2YXIgYSA9IHRoaXMuYSxcbiAgICAgICAgYiA9IHRoaXMuYixcbiAgICAgICAgYyA9IHRoaXMuYyxcbiAgICAgICAgZCA9IHRoaXMuZCxcbiAgICAgICAgZSA9IHRoaXMuZSxcbiAgICAgICAgZiA9IHRoaXMuZixcbiAgICAgICAgYTIgPSBtYXRyaXguYSxcbiAgICAgICAgYjIgPSBtYXRyaXguYyxcbiAgICAgICAgYzIgPSBtYXRyaXguYixcbiAgICAgICAgZDIgPSBtYXRyaXguZCxcbiAgICAgICAgZTIgPSBtYXRyaXguZSxcbiAgICAgICAgZjIgPSBtYXRyaXguZjtcbiAgICByZXR1cm4gX3NldE1hdHJpeCh0aGlzLCBhMiAqIGEgKyBjMiAqIGMsIGEyICogYiArIGMyICogZCwgYjIgKiBhICsgZDIgKiBjLCBiMiAqIGIgKyBkMiAqIGQsIGUgKyBlMiAqIGEgKyBmMiAqIGMsIGYgKyBlMiAqIGIgKyBmMiAqIGQpO1xuICB9O1xuXG4gIF9wcm90by5jbG9uZSA9IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgTWF0cml4MkQodGhpcy5hLCB0aGlzLmIsIHRoaXMuYywgdGhpcy5kLCB0aGlzLmUsIHRoaXMuZik7XG4gIH07XG5cbiAgX3Byb3RvLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyhtYXRyaXgpIHtcbiAgICB2YXIgYSA9IHRoaXMuYSxcbiAgICAgICAgYiA9IHRoaXMuYixcbiAgICAgICAgYyA9IHRoaXMuYyxcbiAgICAgICAgZCA9IHRoaXMuZCxcbiAgICAgICAgZSA9IHRoaXMuZSxcbiAgICAgICAgZiA9IHRoaXMuZjtcbiAgICByZXR1cm4gYSA9PT0gbWF0cml4LmEgJiYgYiA9PT0gbWF0cml4LmIgJiYgYyA9PT0gbWF0cml4LmMgJiYgZCA9PT0gbWF0cml4LmQgJiYgZSA9PT0gbWF0cml4LmUgJiYgZiA9PT0gbWF0cml4LmY7XG4gIH07XG5cbiAgX3Byb3RvLmFwcGx5ID0gZnVuY3Rpb24gYXBwbHkocG9pbnQsIGRlY29yYXRlZSkge1xuICAgIGlmIChkZWNvcmF0ZWUgPT09IHZvaWQgMCkge1xuICAgICAgZGVjb3JhdGVlID0ge307XG4gICAgfVxuXG4gICAgdmFyIHggPSBwb2ludC54LFxuICAgICAgICB5ID0gcG9pbnQueSxcbiAgICAgICAgYSA9IHRoaXMuYSxcbiAgICAgICAgYiA9IHRoaXMuYixcbiAgICAgICAgYyA9IHRoaXMuYyxcbiAgICAgICAgZCA9IHRoaXMuZCxcbiAgICAgICAgZSA9IHRoaXMuZSxcbiAgICAgICAgZiA9IHRoaXMuZjtcbiAgICBkZWNvcmF0ZWUueCA9IHggKiBhICsgeSAqIGMgKyBlIHx8IDA7XG4gICAgZGVjb3JhdGVlLnkgPSB4ICogYiArIHkgKiBkICsgZiB8fCAwO1xuICAgIHJldHVybiBkZWNvcmF0ZWU7XG4gIH07XG5cbiAgcmV0dXJuIE1hdHJpeDJEO1xufSgpOyAvLyBGZWVkIGluIGFuIGVsZW1lbnQgYW5kIGl0J2xsIHJldHVybiBhIDJEIG1hdHJpeCAob3B0aW9uYWxseSBpbnZlcnRlZCkgc28gdGhhdCB5b3UgY2FuIHRyYW5zbGF0ZSBiZXR3ZWVuIGNvb3JkaW5hdGUgc3BhY2VzLlxuLy8gSW52ZXJ0aW5nIGxldHMgeW91IHRyYW5zbGF0ZSBhIGdsb2JhbCBwb2ludCBpbnRvIGEgbG9jYWwgY29vcmRpbmF0ZSBzcGFjZS4gTm8gaW52ZXJ0aW5nIGxldHMgeW91IGdvIHRoZSBvdGhlciB3YXkuXG4vLyBXZSBuZWVkZWQgdGhpcyB0byB3b3JrIGFyb3VuZCB2YXJpb3VzIGJyb3dzZXIgYnVncywgbGlrZSBGaXJlZm94IGRvZXNuJ3QgYWNjdXJhdGVseSByZXBvcnQgZ2V0U2NyZWVuQ1RNKCkgd2hlbiB0aGVyZVxuLy8gYXJlIHRyYW5zZm9ybXMgYXBwbGllZCB0byBhbmNlc3RvciBlbGVtZW50cy5cbi8vIFRoZSBtYXRyaXggbWF0aCB0byBjb252ZXJ0IGFueSB4L3kgY29vcmRpbmF0ZSBpcyBhcyBmb2xsb3dzLCB3aGljaCBpcyB3cmFwcGVkIGluIGEgY29udmVuaWVudCBhcHBseSgpIG1ldGhvZCBvZiBNYXRyaXgyRCBhYm92ZTpcbi8vICAgICB0eCA9IG0uYSAqIHggKyBtLmMgKiB5ICsgbS5lXG4vLyAgICAgdHkgPSBtLmIgKiB4ICsgbS5kICogeSArIG0uZlxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsTWF0cml4KGVsZW1lbnQsIGludmVyc2UsIGFkanVzdEdPZmZzZXQsIGluY2x1ZGVTY3JvbGxJbkZpeGVkKSB7XG4gIC8vIGFkanVzdEdPZmZzZXQgaXMgdHlwaWNhbGx5IHVzZWQgb25seSB3aGVuIGdyYWJiaW5nIGFuIGVsZW1lbnQncyBQQVJFTlQncyBnbG9iYWwgbWF0cml4LCBhbmQgaXQgaWdub3JlcyB0aGUgeC95IG9mZnNldCBvZiBhbnkgU1ZHIDxnPiBlbGVtZW50cyBiZWNhdXNlIHRoZXkgYmVoYXZlIGluIGEgc3BlY2lhbCB3YXkuXG4gIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5wYXJlbnROb2RlIHx8IChfZG9jIHx8IF9zZXREb2MoZWxlbWVudCkpLmRvY3VtZW50RWxlbWVudCA9PT0gZWxlbWVudCkge1xuICAgIHJldHVybiBuZXcgTWF0cml4MkQoKTtcbiAgfVxuXG4gIHZhciB6ZXJvU2NhbGVzID0gX2ZvcmNlTm9uWmVyb1NjYWxlKGVsZW1lbnQpLFxuICAgICAgc3ZnID0gX3N2Z093bmVyKGVsZW1lbnQpLFxuICAgICAgdGVtcHMgPSBzdmcgPyBfc3ZnVGVtcHMgOiBfZGl2VGVtcHMsXG4gICAgICBjb250YWluZXIgPSBfcGxhY2VTaWJsaW5ncyhlbGVtZW50LCBhZGp1c3RHT2Zmc2V0KSxcbiAgICAgIGIxID0gdGVtcHNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICBiMiA9IHRlbXBzWzFdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgYjMgPSB0ZW1wc1syXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIHBhcmVudCA9IGNvbnRhaW5lci5wYXJlbnROb2RlLFxuICAgICAgaXNGaXhlZCA9ICFpbmNsdWRlU2Nyb2xsSW5GaXhlZCAmJiBfaXNGaXhlZChlbGVtZW50KSxcbiAgICAgIG0gPSBuZXcgTWF0cml4MkQoKGIyLmxlZnQgLSBiMS5sZWZ0KSAvIDEwMCwgKGIyLnRvcCAtIGIxLnRvcCkgLyAxMDAsIChiMy5sZWZ0IC0gYjEubGVmdCkgLyAxMDAsIChiMy50b3AgLSBiMS50b3ApIC8gMTAwLCBiMS5sZWZ0ICsgKGlzRml4ZWQgPyAwIDogX2dldERvY1Njcm9sbExlZnQoKSksIGIxLnRvcCArIChpc0ZpeGVkID8gMCA6IF9nZXREb2NTY3JvbGxUb3AoKSkpO1xuXG4gIHBhcmVudC5yZW1vdmVDaGlsZChjb250YWluZXIpO1xuXG4gIGlmICh6ZXJvU2NhbGVzKSB7XG4gICAgYjEgPSB6ZXJvU2NhbGVzLmxlbmd0aDtcblxuICAgIHdoaWxlIChiMS0tKSB7XG4gICAgICBiMiA9IHplcm9TY2FsZXNbYjFdO1xuICAgICAgYjIuc2NhbGVYID0gYjIuc2NhbGVZID0gMDtcbiAgICAgIGIyLnJlbmRlclRyYW5zZm9ybSgxLCBiMik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGludmVyc2UgPyBtLmludmVyc2UoKSA6IG07XG59XG5leHBvcnQgeyBfZ2V0RG9jU2Nyb2xsVG9wLCBfZ2V0RG9jU2Nyb2xsTGVmdCwgX3NldERvYywgX2lzRml4ZWQsIF9nZXRDVE0gfTsgLy8gZXhwb3J0IGZ1bmN0aW9uIGdldE1hdHJpeChlbGVtZW50KSB7XG4vLyBcdF9kb2MgfHwgX3NldERvYyhlbGVtZW50KTtcbi8vIFx0bGV0IG0gPSAoX3dpbi5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpW190cmFuc2Zvcm1Qcm9wXSArIFwiXCIpLnN1YnN0cig3KS5tYXRjaCgvWy0uXSpcXGQrWy5lXFwtK10qXFxkKltlXFwtXFwrXSpcXGQqL2cpLFxuLy8gXHRcdGlzMkQgPSBtICYmIG0ubGVuZ3RoID09PSA2O1xuLy8gXHRyZXR1cm4gIW0gfHwgbS5sZW5ndGggPCA2ID8gbmV3IE1hdHJpeDJEKCkgOiBuZXcgTWF0cml4MkQoK21bMF0sICttWzFdLCArbVtpczJEID8gMiA6IDRdLCArbVtpczJEID8gMyA6IDVdLCArbVtpczJEID8gNCA6IDEyXSwgK21baXMyRCA/IDUgOiAxM10pO1xuLy8gfSIsIi8qIVxuICogTW90aW9uUGF0aFBsdWdpbiAzLjEyLjJcbiAqIGh0dHBzOi8vZ3JlZW5zb2NrLmNvbVxuICpcbiAqIEBsaWNlbnNlIENvcHlyaWdodCAyMDA4LTIwMjMsIEdyZWVuU29jay4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFN1YmplY3QgdG8gdGhlIHRlcm1zIGF0IGh0dHBzOi8vZ3JlZW5zb2NrLmNvbS9zdGFuZGFyZC1saWNlbnNlIG9yIGZvclxuICogQ2x1YiBHcmVlblNvY2sgbWVtYmVycywgdGhlIGFncmVlbWVudCBpc3N1ZWQgd2l0aCB0aGF0IG1lbWJlcnNoaXAuXG4gKiBAYXV0aG9yOiBKYWNrIERveWxlLCBqYWNrQGdyZWVuc29jay5jb21cbiovXG5cbi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBnZXRSYXdQYXRoLCBjYWNoZVJhd1BhdGhNZWFzdXJlbWVudHMsIGdldFBvc2l0aW9uT25QYXRoLCBwb2ludHNUb1NlZ21lbnQsIGZsYXRQb2ludHNUb1NlZ21lbnQsIHNsaWNlUmF3UGF0aCwgc3RyaW5nVG9SYXdQYXRoLCByYXdQYXRoVG9TdHJpbmcsIHRyYW5zZm9ybVJhd1BhdGgsIGNvbnZlcnRUb1BhdGggYXMgX2NvbnZlcnRUb1BhdGggfSBmcm9tIFwiLi91dGlscy9wYXRocy5qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsTWF0cml4IH0gZnJvbSBcIi4vdXRpbHMvbWF0cml4LmpzXCI7XG5cbnZhciBfeFByb3BzID0gXCJ4LHRyYW5zbGF0ZVgsbGVmdCxtYXJnaW5MZWZ0LHhQZXJjZW50XCIuc3BsaXQoXCIsXCIpLFxuICAgIF95UHJvcHMgPSBcInksdHJhbnNsYXRlWSx0b3AsbWFyZ2luVG9wLHlQZXJjZW50XCIuc3BsaXQoXCIsXCIpLFxuICAgIF9ERUcyUkFEID0gTWF0aC5QSSAvIDE4MCxcbiAgICBnc2FwLFxuICAgIFByb3BUd2VlbixcbiAgICBfZ2V0VW5pdCxcbiAgICBfdG9BcnJheSxcbiAgICBfZ2V0U3R5bGVTYXZlcixcbiAgICBfcmV2ZXJ0aW5nLFxuICAgIF9nZXRHU0FQID0gZnVuY3Rpb24gX2dldEdTQVAoKSB7XG4gIHJldHVybiBnc2FwIHx8IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgKGdzYXAgPSB3aW5kb3cuZ3NhcCkgJiYgZ3NhcC5yZWdpc3RlclBsdWdpbiAmJiBnc2FwO1xufSxcbiAgICBfcG9wdWxhdGVTZWdtZW50RnJvbUFycmF5ID0gZnVuY3Rpb24gX3BvcHVsYXRlU2VnbWVudEZyb21BcnJheShzZWdtZW50LCB2YWx1ZXMsIHByb3BlcnR5LCBtb2RlKSB7XG4gIC8vbW9kZTogMCA9IHggYnV0IGRvbid0IGZpbGwgeSB5ZXQsIDEgPSB5LCAyID0geCBhbmQgZmlsbCB5IHdpdGggMC5cbiAgdmFyIGwgPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgc2kgPSBtb2RlID09PSAyID8gMCA6IG1vZGUsXG4gICAgICBpID0gMCxcbiAgICAgIHY7XG5cbiAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICBzZWdtZW50W3NpXSA9IHYgPSBwYXJzZUZsb2F0KHZhbHVlc1tpXVtwcm9wZXJ0eV0pO1xuICAgIG1vZGUgPT09IDIgJiYgKHNlZ21lbnRbc2kgKyAxXSA9IDApO1xuICAgIHNpICs9IDI7XG4gIH1cblxuICByZXR1cm4gc2VnbWVudDtcbn0sXG4gICAgX2dldFByb3BOdW0gPSBmdW5jdGlvbiBfZ2V0UHJvcE51bSh0YXJnZXQsIHByb3AsIHVuaXQpIHtcbiAgcmV0dXJuIHBhcnNlRmxvYXQodGFyZ2V0Ll9nc2FwLmdldCh0YXJnZXQsIHByb3AsIHVuaXQgfHwgXCJweFwiKSkgfHwgMDtcbn0sXG4gICAgX3JlbGF0aXZpemUgPSBmdW5jdGlvbiBfcmVsYXRpdml6ZShzZWdtZW50KSB7XG4gIHZhciB4ID0gc2VnbWVudFswXSxcbiAgICAgIHkgPSBzZWdtZW50WzFdLFxuICAgICAgaTtcblxuICBmb3IgKGkgPSAyOyBpIDwgc2VnbWVudC5sZW5ndGg7IGkgKz0gMikge1xuICAgIHggPSBzZWdtZW50W2ldICs9IHg7XG4gICAgeSA9IHNlZ21lbnRbaSArIDFdICs9IHk7XG4gIH1cbn0sXG4gICAgLy8gZmVlZCBpbiBhbiBhcnJheSBvZiBxdWFkcmF0aWMgYmV6aWVyIHBvaW50cyBsaWtlIFt7eDogMCwgeTogMH0sIC4uLl0gYW5kIGl0J2xsIGNvbnZlcnQgaXQgdG8gY3ViaWMgYmV6aWVyXG4vLyBfcXVhZFRvQ3ViaWMgPSBwb2ludHMgPT4ge1xuLy8gXHRsZXQgY3ViaWMgPSBbXSxcbi8vIFx0XHRsID0gcG9pbnRzLmxlbmd0aCAtIDEsXG4vLyBcdFx0aSA9IDEsXG4vLyBcdFx0YSwgYiwgYztcbi8vIFx0Zm9yICg7IGkgPCBsOyBpKz0yKSB7XG4vLyBcdFx0YSA9IHBvaW50c1tpLTFdO1xuLy8gXHRcdGIgPSBwb2ludHNbaV07XG4vLyBcdFx0YyA9IHBvaW50c1tpKzFdO1xuLy8gXHRcdGN1YmljLnB1c2goYSwge3g6ICgyICogYi54ICsgYS54KSAvIDMsIHk6ICgyICogYi55ICsgYS55KSAvIDN9LCB7eDogKDIgKiBiLnggKyBjLngpIC8gMywgeTogKDIgKiBiLnkgKyBjLnkpIC8gM30pO1xuLy8gXHR9XG4vLyBcdGN1YmljLnB1c2gocG9pbnRzW2xdKTtcbi8vIFx0cmV0dXJuIGN1YmljO1xuLy8gfSxcbl9zZWdtZW50VG9SYXdQYXRoID0gZnVuY3Rpb24gX3NlZ21lbnRUb1Jhd1BhdGgocGx1Z2luLCBzZWdtZW50LCB0YXJnZXQsIHgsIHksIHNsaWNlciwgdmFycywgdW5pdFgsIHVuaXRZKSB7XG4gIGlmICh2YXJzLnR5cGUgPT09IFwiY3ViaWNcIikge1xuICAgIHNlZ21lbnQgPSBbc2VnbWVudF07XG4gIH0gZWxzZSB7XG4gICAgdmFycy5mcm9tQ3VycmVudCAhPT0gZmFsc2UgJiYgc2VnbWVudC51bnNoaWZ0KF9nZXRQcm9wTnVtKHRhcmdldCwgeCwgdW5pdFgpLCB5ID8gX2dldFByb3BOdW0odGFyZ2V0LCB5LCB1bml0WSkgOiAwKTtcbiAgICB2YXJzLnJlbGF0aXZlICYmIF9yZWxhdGl2aXplKHNlZ21lbnQpO1xuICAgIHZhciBwb2ludEZ1bmMgPSB5ID8gcG9pbnRzVG9TZWdtZW50IDogZmxhdFBvaW50c1RvU2VnbWVudDtcbiAgICBzZWdtZW50ID0gW3BvaW50RnVuYyhzZWdtZW50LCB2YXJzLmN1cnZpbmVzcyldO1xuICB9XG5cbiAgc2VnbWVudCA9IHNsaWNlcihfYWxpZ24oc2VnbWVudCwgdGFyZ2V0LCB2YXJzKSk7XG5cbiAgX2FkZERpbWVuc2lvbmFsUHJvcFR3ZWVuKHBsdWdpbiwgdGFyZ2V0LCB4LCBzZWdtZW50LCBcInhcIiwgdW5pdFgpO1xuXG4gIHkgJiYgX2FkZERpbWVuc2lvbmFsUHJvcFR3ZWVuKHBsdWdpbiwgdGFyZ2V0LCB5LCBzZWdtZW50LCBcInlcIiwgdW5pdFkpO1xuICByZXR1cm4gY2FjaGVSYXdQYXRoTWVhc3VyZW1lbnRzKHNlZ21lbnQsIHZhcnMucmVzb2x1dGlvbiB8fCAodmFycy5jdXJ2aW5lc3MgPT09IDAgPyAyMCA6IDEyKSk7IC8vd2hlbiBjdXJ2aW5lc3MgaXMgMCwgaXQgY3JlYXRlcyBjb250cm9sIHBvaW50cyByaWdodCBvbiB0b3Agb2YgdGhlIGFuY2hvcnMgd2hpY2ggbWFrZXMgaXQgbW9yZSBzZW5zaXRpdmUgdG8gcmVzb2x1dGlvbiwgdGh1cyB3ZSBjaGFuZ2UgdGhlIGRlZmF1bHQgYWNjb3JkaW5nbHkuXG59LFxuICAgIF9lbXB0eUZ1bmMgPSBmdW5jdGlvbiBfZW1wdHlGdW5jKHYpIHtcbiAgcmV0dXJuIHY7XG59LFxuICAgIF9udW1FeHAgPSAvWy0rXFwuXSpcXGQrXFwuPyg/OmUtfGVcXCspP1xcZCovZyxcbiAgICBfb3JpZ2luVG9Qb2ludCA9IGZ1bmN0aW9uIF9vcmlnaW5Ub1BvaW50KGVsZW1lbnQsIG9yaWdpbiwgcGFyZW50TWF0cml4KSB7XG4gIC8vIG9yaWdpbiBpcyBhbiBhcnJheSBvZiBub3JtYWxpemVkIHZhbHVlcyAoMC0xKSBpbiByZWxhdGlvbiB0byB0aGUgd2lkdGgvaGVpZ2h0LCBzbyBbMC41LCAwLjVdIHdvdWxkIGJlIHRoZSBjZW50ZXIuIEl0IGNhbiBhbHNvIGJlIFwiYXV0b1wiIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBiZSB0aGUgdG9wIGxlZnQgdW5sZXNzIGl0J3MgYSA8cGF0aD4sIHdoZW4gaXQgd2lsbCBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoIGl0c2VsZi5cbiAgdmFyIG0gPSBnZXRHbG9iYWxNYXRyaXgoZWxlbWVudCksXG4gICAgICB4ID0gMCxcbiAgICAgIHkgPSAwLFxuICAgICAgc3ZnO1xuXG4gIGlmICgoZWxlbWVudC50YWdOYW1lICsgXCJcIikudG9Mb3dlckNhc2UoKSA9PT0gXCJzdmdcIikge1xuICAgIHN2ZyA9IGVsZW1lbnQudmlld0JveC5iYXNlVmFsO1xuICAgIHN2Zy53aWR0aCB8fCAoc3ZnID0ge1xuICAgICAgd2lkdGg6ICtlbGVtZW50LmdldEF0dHJpYnV0ZShcIndpZHRoXCIpLFxuICAgICAgaGVpZ2h0OiArZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIilcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzdmcgPSBvcmlnaW4gJiYgZWxlbWVudC5nZXRCQm94ICYmIGVsZW1lbnQuZ2V0QkJveCgpO1xuICB9XG5cbiAgaWYgKG9yaWdpbiAmJiBvcmlnaW4gIT09IFwiYXV0b1wiKSB7XG4gICAgeCA9IG9yaWdpbi5wdXNoID8gb3JpZ2luWzBdICogKHN2ZyA/IHN2Zy53aWR0aCA6IGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMCkgOiBvcmlnaW4ueDtcbiAgICB5ID0gb3JpZ2luLnB1c2ggPyBvcmlnaW5bMV0gKiAoc3ZnID8gc3ZnLmhlaWdodCA6IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDApIDogb3JpZ2luLnk7XG4gIH1cblxuICByZXR1cm4gcGFyZW50TWF0cml4LmFwcGx5KHggfHwgeSA/IG0uYXBwbHkoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9KSA6IHtcbiAgICB4OiBtLmUsXG4gICAgeTogbS5mXG4gIH0pO1xufSxcbiAgICBfZ2V0QWxpZ25NYXRyaXggPSBmdW5jdGlvbiBfZ2V0QWxpZ25NYXRyaXgoZnJvbUVsZW1lbnQsIHRvRWxlbWVudCwgZnJvbU9yaWdpbiwgdG9PcmlnaW4pIHtcbiAgdmFyIHBhcmVudE1hdHJpeCA9IGdldEdsb2JhbE1hdHJpeChmcm9tRWxlbWVudC5wYXJlbnROb2RlLCB0cnVlLCB0cnVlKSxcbiAgICAgIG0gPSBwYXJlbnRNYXRyaXguY2xvbmUoKS5tdWx0aXBseShnZXRHbG9iYWxNYXRyaXgodG9FbGVtZW50KSksXG4gICAgICBmcm9tUG9pbnQgPSBfb3JpZ2luVG9Qb2ludChmcm9tRWxlbWVudCwgZnJvbU9yaWdpbiwgcGFyZW50TWF0cml4KSxcbiAgICAgIF9vcmlnaW5Ub1BvaW50MiA9IF9vcmlnaW5Ub1BvaW50KHRvRWxlbWVudCwgdG9PcmlnaW4sIHBhcmVudE1hdHJpeCksXG4gICAgICB4ID0gX29yaWdpblRvUG9pbnQyLngsXG4gICAgICB5ID0gX29yaWdpblRvUG9pbnQyLnksXG4gICAgICBwO1xuXG4gIG0uZSA9IG0uZiA9IDA7XG5cbiAgaWYgKHRvT3JpZ2luID09PSBcImF1dG9cIiAmJiB0b0VsZW1lbnQuZ2V0VG90YWxMZW5ndGggJiYgdG9FbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJwYXRoXCIpIHtcbiAgICBwID0gdG9FbGVtZW50LmdldEF0dHJpYnV0ZShcImRcIikubWF0Y2goX251bUV4cCkgfHwgW107XG4gICAgcCA9IG0uYXBwbHkoe1xuICAgICAgeDogK3BbMF0sXG4gICAgICB5OiArcFsxXVxuICAgIH0pO1xuICAgIHggKz0gcC54O1xuICAgIHkgKz0gcC55O1xuICB9IC8vaWYgKHAgfHwgKHRvRWxlbWVudC5nZXRCQm94ICYmIGZyb21FbGVtZW50LmdldEJCb3ggJiYgdG9FbGVtZW50Lm93bmVyU1ZHRWxlbWVudCA9PT0gZnJvbUVsZW1lbnQub3duZXJTVkdFbGVtZW50KSkge1xuXG5cbiAgaWYgKHApIHtcbiAgICBwID0gbS5hcHBseSh0b0VsZW1lbnQuZ2V0QkJveCgpKTtcbiAgICB4IC09IHAueDtcbiAgICB5IC09IHAueTtcbiAgfVxuXG4gIG0uZSA9IHggLSBmcm9tUG9pbnQueDtcbiAgbS5mID0geSAtIGZyb21Qb2ludC55O1xuICByZXR1cm4gbTtcbn0sXG4gICAgX2FsaWduID0gZnVuY3Rpb24gX2FsaWduKHJhd1BhdGgsIHRhcmdldCwgX3JlZikge1xuICB2YXIgYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBvZmZzZXRYID0gX3JlZi5vZmZzZXRYLFxuICAgICAgb2Zmc2V0WSA9IF9yZWYub2Zmc2V0WSxcbiAgICAgIGFsaWduT3JpZ2luID0gX3JlZi5hbGlnbk9yaWdpbjtcblxuICB2YXIgeCA9IHJhd1BhdGhbMF1bMF0sXG4gICAgICB5ID0gcmF3UGF0aFswXVsxXSxcbiAgICAgIGN1clggPSBfZ2V0UHJvcE51bSh0YXJnZXQsIFwieFwiKSxcbiAgICAgIGN1clkgPSBfZ2V0UHJvcE51bSh0YXJnZXQsIFwieVwiKSxcbiAgICAgIGFsaWduVGFyZ2V0LFxuICAgICAgbSxcbiAgICAgIHA7XG5cbiAgaWYgKCFyYXdQYXRoIHx8ICFyYXdQYXRoLmxlbmd0aCkge1xuICAgIHJldHVybiBnZXRSYXdQYXRoKFwiTTAsMEwwLDBcIik7XG4gIH1cblxuICBpZiAoYWxpZ24pIHtcbiAgICBpZiAoYWxpZ24gPT09IFwic2VsZlwiIHx8IChhbGlnblRhcmdldCA9IF90b0FycmF5KGFsaWduKVswXSB8fCB0YXJnZXQpID09PSB0YXJnZXQpIHtcbiAgICAgIHRyYW5zZm9ybVJhd1BhdGgocmF3UGF0aCwgMSwgMCwgMCwgMSwgY3VyWCAtIHgsIGN1clkgLSB5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGFsaWduT3JpZ2luICYmIGFsaWduT3JpZ2luWzJdICE9PSBmYWxzZSkge1xuICAgICAgICBnc2FwLnNldCh0YXJnZXQsIHtcbiAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW46IGFsaWduT3JpZ2luWzBdICogMTAwICsgXCIlIFwiICsgYWxpZ25PcmlnaW5bMV0gKiAxMDAgKyBcIiVcIlxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduT3JpZ2luID0gW19nZXRQcm9wTnVtKHRhcmdldCwgXCJ4UGVyY2VudFwiKSAvIC0xMDAsIF9nZXRQcm9wTnVtKHRhcmdldCwgXCJ5UGVyY2VudFwiKSAvIC0xMDBdO1xuICAgICAgfVxuXG4gICAgICBtID0gX2dldEFsaWduTWF0cml4KHRhcmdldCwgYWxpZ25UYXJnZXQsIGFsaWduT3JpZ2luLCBcImF1dG9cIik7XG4gICAgICBwID0gbS5hcHBseSh7XG4gICAgICAgIHg6IHgsXG4gICAgICAgIHk6IHlcbiAgICAgIH0pO1xuICAgICAgdHJhbnNmb3JtUmF3UGF0aChyYXdQYXRoLCBtLmEsIG0uYiwgbS5jLCBtLmQsIGN1clggKyBtLmUgLSAocC54IC0gbS5lKSwgY3VyWSArIG0uZiAtIChwLnkgLSBtLmYpKTtcbiAgICB9XG4gIH1cblxuICBpZiAobWF0cml4KSB7XG4gICAgdHJhbnNmb3JtUmF3UGF0aChyYXdQYXRoLCBtYXRyaXguYSwgbWF0cml4LmIsIG1hdHJpeC5jLCBtYXRyaXguZCwgbWF0cml4LmUsIG1hdHJpeC5mKTtcbiAgfSBlbHNlIGlmIChvZmZzZXRYIHx8IG9mZnNldFkpIHtcbiAgICB0cmFuc2Zvcm1SYXdQYXRoKHJhd1BhdGgsIDEsIDAsIDAsIDEsIG9mZnNldFggfHwgMCwgb2Zmc2V0WSB8fCAwKTtcbiAgfVxuXG4gIHJldHVybiByYXdQYXRoO1xufSxcbiAgICBfYWRkRGltZW5zaW9uYWxQcm9wVHdlZW4gPSBmdW5jdGlvbiBfYWRkRGltZW5zaW9uYWxQcm9wVHdlZW4ocGx1Z2luLCB0YXJnZXQsIHByb3BlcnR5LCByYXdQYXRoLCBwYXRoUHJvcGVydHksIGZvcmNlVW5pdCkge1xuICB2YXIgY2FjaGUgPSB0YXJnZXQuX2dzYXAsXG4gICAgICBoYXJuZXNzID0gY2FjaGUuaGFybmVzcyxcbiAgICAgIGFsaWFzID0gaGFybmVzcyAmJiBoYXJuZXNzLmFsaWFzZXMgJiYgaGFybmVzcy5hbGlhc2VzW3Byb3BlcnR5XSxcbiAgICAgIHByb3AgPSBhbGlhcyAmJiBhbGlhcy5pbmRleE9mKFwiLFwiKSA8IDAgPyBhbGlhcyA6IHByb3BlcnR5LFxuICAgICAgcHQgPSBwbHVnaW4uX3B0ID0gbmV3IFByb3BUd2VlbihwbHVnaW4uX3B0LCB0YXJnZXQsIHByb3AsIDAsIDAsIF9lbXB0eUZ1bmMsIDAsIGNhY2hlLnNldCh0YXJnZXQsIHByb3AsIHBsdWdpbikpO1xuICBwdC51ID0gX2dldFVuaXQoY2FjaGUuZ2V0KHRhcmdldCwgcHJvcCwgZm9yY2VVbml0KSkgfHwgMDtcbiAgcHQucGF0aCA9IHJhd1BhdGg7XG4gIHB0LnBwID0gcGF0aFByb3BlcnR5O1xuXG4gIHBsdWdpbi5fcHJvcHMucHVzaChwcm9wKTtcbn0sXG4gICAgX3NsaWNlTW9kaWZpZXIgPSBmdW5jdGlvbiBfc2xpY2VNb2RpZmllcihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmF3UGF0aCkge1xuICAgIHJldHVybiBzdGFydCB8fCBlbmQgIT09IDEgPyBzbGljZVJhd1BhdGgocmF3UGF0aCwgc3RhcnQsIGVuZCkgOiByYXdQYXRoO1xuICB9O1xufTtcblxuZXhwb3J0IHZhciBNb3Rpb25QYXRoUGx1Z2luID0ge1xuICB2ZXJzaW9uOiBcIjMuMTIuMlwiLFxuICBuYW1lOiBcIm1vdGlvblBhdGhcIixcbiAgcmVnaXN0ZXI6IGZ1bmN0aW9uIHJlZ2lzdGVyKGNvcmUsIFBsdWdpbiwgcHJvcFR3ZWVuKSB7XG4gICAgZ3NhcCA9IGNvcmU7XG4gICAgX2dldFVuaXQgPSBnc2FwLnV0aWxzLmdldFVuaXQ7XG4gICAgX3RvQXJyYXkgPSBnc2FwLnV0aWxzLnRvQXJyYXk7XG4gICAgX2dldFN0eWxlU2F2ZXIgPSBnc2FwLmNvcmUuZ2V0U3R5bGVTYXZlcjtcblxuICAgIF9yZXZlcnRpbmcgPSBnc2FwLmNvcmUucmV2ZXJ0aW5nIHx8IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgUHJvcFR3ZWVuID0gcHJvcFR3ZWVuO1xuICB9LFxuICBpbml0OiBmdW5jdGlvbiBpbml0KHRhcmdldCwgdmFycywgdHdlZW4pIHtcbiAgICBpZiAoIWdzYXApIHtcbiAgICAgIGNvbnNvbGUud2FybihcIlBsZWFzZSBnc2FwLnJlZ2lzdGVyUGx1Z2luKE1vdGlvblBhdGhQbHVnaW4pXCIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghKHR5cGVvZiB2YXJzID09PSBcIm9iamVjdFwiICYmICF2YXJzLnN0eWxlKSB8fCAhdmFycy5wYXRoKSB7XG4gICAgICB2YXJzID0ge1xuICAgICAgICBwYXRoOiB2YXJzXG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciByYXdQYXRocyA9IFtdLFxuICAgICAgICBfdmFycyA9IHZhcnMsXG4gICAgICAgIHBhdGggPSBfdmFycy5wYXRoLFxuICAgICAgICBhdXRvUm90YXRlID0gX3ZhcnMuYXV0b1JvdGF0ZSxcbiAgICAgICAgdW5pdFggPSBfdmFycy51bml0WCxcbiAgICAgICAgdW5pdFkgPSBfdmFycy51bml0WSxcbiAgICAgICAgeCA9IF92YXJzLngsXG4gICAgICAgIHkgPSBfdmFycy55LFxuICAgICAgICBmaXJzdE9iaiA9IHBhdGhbMF0sXG4gICAgICAgIHNsaWNlciA9IF9zbGljZU1vZGlmaWVyKHZhcnMuc3RhcnQsIFwiZW5kXCIgaW4gdmFycyA/IHZhcnMuZW5kIDogMSksXG4gICAgICAgIHJhd1BhdGgsXG4gICAgICAgIHA7XG5cbiAgICB0aGlzLnJhd1BhdGhzID0gcmF3UGF0aHM7XG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgdGhpcy50d2VlbiA9IHR3ZWVuO1xuICAgIHRoaXMuc3R5bGVzID0gX2dldFN0eWxlU2F2ZXIgJiYgX2dldFN0eWxlU2F2ZXIodGFyZ2V0LCBcInRyYW5zZm9ybVwiKTtcblxuICAgIGlmICh0aGlzLnJvdGF0ZSA9IGF1dG9Sb3RhdGUgfHwgYXV0b1JvdGF0ZSA9PT0gMCkge1xuICAgICAgLy9nZXQgdGhlIHJvdGF0aW9uYWwgZGF0YSBGSVJTVCBzbyB0aGF0IHRoZSBzZXRUcmFuc2Zvcm0oKSBtZXRob2QgaXMgY2FsbGVkIGluIHRoZSBjb3JyZWN0IG9yZGVyIGluIHRoZSByZW5kZXIoKSBsb29wIC0gcm90YXRpb24gZ2V0cyBzZXQgbGFzdC5cbiAgICAgIHRoaXMuck9mZnNldCA9IHBhcnNlRmxvYXQoYXV0b1JvdGF0ZSkgfHwgMDtcbiAgICAgIHRoaXMucmFkaWFucyA9ICEhdmFycy51c2VSYWRpYW5zO1xuICAgICAgdGhpcy5yUHJvcCA9IHZhcnMucm90YXRpb24gfHwgXCJyb3RhdGlvblwiOyAvLyByb3RhdGlvbiBwcm9wZXJ0eVxuXG4gICAgICB0aGlzLnJTZXQgPSB0YXJnZXQuX2dzYXAuc2V0KHRhcmdldCwgdGhpcy5yUHJvcCwgdGhpcyk7IC8vIHJvdGF0aW9uIHNldHRlclxuXG4gICAgICB0aGlzLnJ1ID0gX2dldFVuaXQodGFyZ2V0Ll9nc2FwLmdldCh0YXJnZXQsIHRoaXMuclByb3ApKSB8fCAwOyAvLyByb3RhdGlvbiB1bml0c1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGgpICYmICEoXCJjbG9zZWRcIiBpbiBwYXRoKSAmJiB0eXBlb2YgZmlyc3RPYmogIT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGZvciAocCBpbiBmaXJzdE9iaikge1xuICAgICAgICBpZiAoIXggJiYgfl94UHJvcHMuaW5kZXhPZihwKSkge1xuICAgICAgICAgIHggPSBwO1xuICAgICAgICB9IGVsc2UgaWYgKCF5ICYmIH5feVByb3BzLmluZGV4T2YocCkpIHtcbiAgICAgICAgICB5ID0gcDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoeCAmJiB5KSB7XG4gICAgICAgIC8vY29ycmVsYXRlZCB2YWx1ZXNcbiAgICAgICAgcmF3UGF0aHMucHVzaChfc2VnbWVudFRvUmF3UGF0aCh0aGlzLCBfcG9wdWxhdGVTZWdtZW50RnJvbUFycmF5KF9wb3B1bGF0ZVNlZ21lbnRGcm9tQXJyYXkoW10sIHBhdGgsIHgsIDApLCBwYXRoLCB5LCAxKSwgdGFyZ2V0LCB4LCB5LCBzbGljZXIsIHZhcnMsIHVuaXRYIHx8IF9nZXRVbml0KHBhdGhbMF1beF0pLCB1bml0WSB8fCBfZ2V0VW5pdChwYXRoWzBdW3ldKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeCA9IHkgPSAwO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHAgaW4gZmlyc3RPYmopIHtcbiAgICAgICAgcCAhPT0geCAmJiBwICE9PSB5ICYmIHJhd1BhdGhzLnB1c2goX3NlZ21lbnRUb1Jhd1BhdGgodGhpcywgX3BvcHVsYXRlU2VnbWVudEZyb21BcnJheShbXSwgcGF0aCwgcCwgMiksIHRhcmdldCwgcCwgMCwgc2xpY2VyLCB2YXJzLCBfZ2V0VW5pdChwYXRoWzBdW3BdKSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByYXdQYXRoID0gc2xpY2VyKF9hbGlnbihnZXRSYXdQYXRoKHZhcnMucGF0aCksIHRhcmdldCwgdmFycykpO1xuICAgICAgY2FjaGVSYXdQYXRoTWVhc3VyZW1lbnRzKHJhd1BhdGgsIHZhcnMucmVzb2x1dGlvbik7XG4gICAgICByYXdQYXRocy5wdXNoKHJhd1BhdGgpO1xuXG4gICAgICBfYWRkRGltZW5zaW9uYWxQcm9wVHdlZW4odGhpcywgdGFyZ2V0LCB2YXJzLnggfHwgXCJ4XCIsIHJhd1BhdGgsIFwieFwiLCB2YXJzLnVuaXRYIHx8IFwicHhcIik7XG5cbiAgICAgIF9hZGREaW1lbnNpb25hbFByb3BUd2Vlbih0aGlzLCB0YXJnZXQsIHZhcnMueSB8fCBcInlcIiwgcmF3UGF0aCwgXCJ5XCIsIHZhcnMudW5pdFkgfHwgXCJweFwiKTtcbiAgICB9XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHJhdGlvLCBkYXRhKSB7XG4gICAgdmFyIHJhd1BhdGhzID0gZGF0YS5yYXdQYXRocyxcbiAgICAgICAgaSA9IHJhd1BhdGhzLmxlbmd0aCxcbiAgICAgICAgcHQgPSBkYXRhLl9wdDtcblxuICAgIGlmIChkYXRhLnR3ZWVuLl90aW1lIHx8ICFfcmV2ZXJ0aW5nKCkpIHtcbiAgICAgIGlmIChyYXRpbyA+IDEpIHtcbiAgICAgICAgcmF0aW8gPSAxO1xuICAgICAgfSBlbHNlIGlmIChyYXRpbyA8IDApIHtcbiAgICAgICAgcmF0aW8gPSAwO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGdldFBvc2l0aW9uT25QYXRoKHJhd1BhdGhzW2ldLCByYXRpbywgIWkgJiYgZGF0YS5yb3RhdGUsIHJhd1BhdGhzW2ldKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHB0KSB7XG4gICAgICAgIHB0LnNldChwdC50LCBwdC5wLCBwdC5wYXRoW3B0LnBwXSArIHB0LnUsIHB0LmQsIHJhdGlvKTtcbiAgICAgICAgcHQgPSBwdC5fbmV4dDtcbiAgICAgIH1cblxuICAgICAgZGF0YS5yb3RhdGUgJiYgZGF0YS5yU2V0KGRhdGEudGFyZ2V0LCBkYXRhLnJQcm9wLCByYXdQYXRoc1swXS5hbmdsZSAqIChkYXRhLnJhZGlhbnMgPyBfREVHMlJBRCA6IDEpICsgZGF0YS5yT2Zmc2V0ICsgZGF0YS5ydSwgZGF0YSwgcmF0aW8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhLnN0eWxlcy5yZXZlcnQoKTtcbiAgICB9XG4gIH0sXG4gIGdldExlbmd0aDogZnVuY3Rpb24gZ2V0TGVuZ3RoKHBhdGgpIHtcbiAgICByZXR1cm4gY2FjaGVSYXdQYXRoTWVhc3VyZW1lbnRzKGdldFJhd1BhdGgocGF0aCkpLnRvdGFsTGVuZ3RoO1xuICB9LFxuICBzbGljZVJhd1BhdGg6IHNsaWNlUmF3UGF0aCxcbiAgZ2V0UmF3UGF0aDogZ2V0UmF3UGF0aCxcbiAgcG9pbnRzVG9TZWdtZW50OiBwb2ludHNUb1NlZ21lbnQsXG4gIHN0cmluZ1RvUmF3UGF0aDogc3RyaW5nVG9SYXdQYXRoLFxuICByYXdQYXRoVG9TdHJpbmc6IHJhd1BhdGhUb1N0cmluZyxcbiAgdHJhbnNmb3JtUmF3UGF0aDogdHJhbnNmb3JtUmF3UGF0aCxcbiAgZ2V0R2xvYmFsTWF0cml4OiBnZXRHbG9iYWxNYXRyaXgsXG4gIGdldFBvc2l0aW9uT25QYXRoOiBnZXRQb3NpdGlvbk9uUGF0aCxcbiAgY2FjaGVSYXdQYXRoTWVhc3VyZW1lbnRzOiBjYWNoZVJhd1BhdGhNZWFzdXJlbWVudHMsXG4gIGNvbnZlcnRUb1BhdGg6IGZ1bmN0aW9uIGNvbnZlcnRUb1BhdGgodGFyZ2V0cywgc3dhcCkge1xuICAgIHJldHVybiBfdG9BcnJheSh0YXJnZXRzKS5tYXAoZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgcmV0dXJuIF9jb252ZXJ0VG9QYXRoKHRhcmdldCwgc3dhcCAhPT0gZmFsc2UpO1xuICAgIH0pO1xuICB9LFxuICBjb252ZXJ0Q29vcmRpbmF0ZXM6IGZ1bmN0aW9uIGNvbnZlcnRDb29yZGluYXRlcyhmcm9tRWxlbWVudCwgdG9FbGVtZW50LCBwb2ludCkge1xuICAgIHZhciBtID0gZ2V0R2xvYmFsTWF0cml4KHRvRWxlbWVudCwgdHJ1ZSwgdHJ1ZSkubXVsdGlwbHkoZ2V0R2xvYmFsTWF0cml4KGZyb21FbGVtZW50KSk7XG4gICAgcmV0dXJuIHBvaW50ID8gbS5hcHBseShwb2ludCkgOiBtO1xuICB9LFxuICBnZXRBbGlnbk1hdHJpeDogX2dldEFsaWduTWF0cml4LFxuICBnZXRSZWxhdGl2ZVBvc2l0aW9uOiBmdW5jdGlvbiBnZXRSZWxhdGl2ZVBvc2l0aW9uKGZyb21FbGVtZW50LCB0b0VsZW1lbnQsIGZyb21PcmlnaW4sIHRvT3JpZ2luKSB7XG4gICAgdmFyIG0gPSBfZ2V0QWxpZ25NYXRyaXgoZnJvbUVsZW1lbnQsIHRvRWxlbWVudCwgZnJvbU9yaWdpbiwgdG9PcmlnaW4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IG0uZSxcbiAgICAgIHk6IG0uZlxuICAgIH07XG4gIH0sXG4gIGFycmF5VG9SYXdQYXRoOiBmdW5jdGlvbiBhcnJheVRvUmF3UGF0aCh2YWx1ZSwgdmFycykge1xuICAgIHZhcnMgPSB2YXJzIHx8IHt9O1xuXG4gICAgdmFyIHNlZ21lbnQgPSBfcG9wdWxhdGVTZWdtZW50RnJvbUFycmF5KF9wb3B1bGF0ZVNlZ21lbnRGcm9tQXJyYXkoW10sIHZhbHVlLCB2YXJzLnggfHwgXCJ4XCIsIDApLCB2YWx1ZSwgdmFycy55IHx8IFwieVwiLCAxKTtcblxuICAgIHZhcnMucmVsYXRpdmUgJiYgX3JlbGF0aXZpemUoc2VnbWVudCk7XG4gICAgcmV0dXJuIFt2YXJzLnR5cGUgPT09IFwiY3ViaWNcIiA/IHNlZ21lbnQgOiBwb2ludHNUb1NlZ21lbnQoc2VnbWVudCwgdmFycy5jdXJ2aW5lc3MpXTtcbiAgfVxufTtcbl9nZXRHU0FQKCkgJiYgZ3NhcC5yZWdpc3RlclBsdWdpbihNb3Rpb25QYXRoUGx1Z2luKTtcbmV4cG9ydCB7IE1vdGlvblBhdGhQbHVnaW4gYXMgZGVmYXVsdCB9OyIsIi8qIVxuICogU2Nyb2xsVG9QbHVnaW4gMy4xMi4yXG4gKiBodHRwczovL2dyZWVuc29jay5jb21cbiAqXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgMjAwOC0yMDIzLCBHcmVlblNvY2suIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhdCBodHRwczovL2dyZWVuc29jay5jb20vc3RhbmRhcmQtbGljZW5zZSBvciBmb3JcbiAqIENsdWIgR3JlZW5Tb2NrIG1lbWJlcnMsIHRoZSBhZ3JlZW1lbnQgaXNzdWVkIHdpdGggdGhhdCBtZW1iZXJzaGlwLlxuICogQGF1dGhvcjogSmFjayBEb3lsZSwgamFja0BncmVlbnNvY2suY29tXG4qL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xudmFyIGdzYXAsXG4gICAgX2NvcmVJbml0dGVkLFxuICAgIF93aW5kb3csXG4gICAgX2RvY0VsLFxuICAgIF9ib2R5LFxuICAgIF90b0FycmF5LFxuICAgIF9jb25maWcsXG4gICAgU2Nyb2xsVHJpZ2dlcixcbiAgICBfd2luZG93RXhpc3RzID0gZnVuY3Rpb24gX3dpbmRvd0V4aXN0cygpIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCI7XG59LFxuICAgIF9nZXRHU0FQID0gZnVuY3Rpb24gX2dldEdTQVAoKSB7XG4gIHJldHVybiBnc2FwIHx8IF93aW5kb3dFeGlzdHMoKSAmJiAoZ3NhcCA9IHdpbmRvdy5nc2FwKSAmJiBnc2FwLnJlZ2lzdGVyUGx1Z2luICYmIGdzYXA7XG59LFxuICAgIF9pc1N0cmluZyA9IGZ1bmN0aW9uIF9pc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xufSxcbiAgICBfaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIF9pc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIjtcbn0sXG4gICAgX21heCA9IGZ1bmN0aW9uIF9tYXgoZWxlbWVudCwgYXhpcykge1xuICB2YXIgZGltID0gYXhpcyA9PT0gXCJ4XCIgPyBcIldpZHRoXCIgOiBcIkhlaWdodFwiLFxuICAgICAgc2Nyb2xsID0gXCJzY3JvbGxcIiArIGRpbSxcbiAgICAgIGNsaWVudCA9IFwiY2xpZW50XCIgKyBkaW07XG4gIHJldHVybiBlbGVtZW50ID09PSBfd2luZG93IHx8IGVsZW1lbnQgPT09IF9kb2NFbCB8fCBlbGVtZW50ID09PSBfYm9keSA/IE1hdGgubWF4KF9kb2NFbFtzY3JvbGxdLCBfYm9keVtzY3JvbGxdKSAtIChfd2luZG93W1wiaW5uZXJcIiArIGRpbV0gfHwgX2RvY0VsW2NsaWVudF0gfHwgX2JvZHlbY2xpZW50XSkgOiBlbGVtZW50W3Njcm9sbF0gLSBlbGVtZW50W1wib2Zmc2V0XCIgKyBkaW1dO1xufSxcbiAgICBfYnVpbGRHZXR0ZXIgPSBmdW5jdGlvbiBfYnVpbGRHZXR0ZXIoZSwgYXhpcykge1xuICAvL3Bhc3MgaW4gYW4gZWxlbWVudCBhbmQgYW4gYXhpcyAoXCJ4XCIgb3IgXCJ5XCIpIGFuZCBpdCdsbCByZXR1cm4gYSBnZXR0ZXIgZnVuY3Rpb24gZm9yIHRoZSBzY3JvbGwgcG9zaXRpb24gb2YgdGhhdCBlbGVtZW50IChsaWtlIHNjcm9sbFRvcCBvciBzY3JvbGxMZWZ0LCBhbHRob3VnaCBpZiB0aGUgZWxlbWVudCBpcyB0aGUgd2luZG93LCBpdCdsbCB1c2UgdGhlIHBhZ2VYT2Zmc2V0L3BhZ2VZT2Zmc2V0IG9yIHRoZSBkb2N1bWVudEVsZW1lbnQncyBzY3JvbGxUb3Avc2Nyb2xsTGVmdCBvciBkb2N1bWVudC5ib2R5J3MuIEJhc2ljYWxseSB0aGlzIHN0cmVhbWxpbmVzIHRoaW5ncyBhbmQgbWFrZXMgYSB2ZXJ5IGZhc3QgZ2V0dGVyIGFjcm9zcyBicm93c2Vycy5cbiAgdmFyIHAgPSBcInNjcm9sbFwiICsgKGF4aXMgPT09IFwieFwiID8gXCJMZWZ0XCIgOiBcIlRvcFwiKTtcblxuICBpZiAoZSA9PT0gX3dpbmRvdykge1xuICAgIGlmIChlLnBhZ2VYT2Zmc2V0ICE9IG51bGwpIHtcbiAgICAgIHAgPSBcInBhZ2VcIiArIGF4aXMudG9VcHBlckNhc2UoKSArIFwiT2Zmc2V0XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGUgPSBfZG9jRWxbcF0gIT0gbnVsbCA/IF9kb2NFbCA6IF9ib2R5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGVbcF07XG4gIH07XG59LFxuICAgIF9jbGVhbiA9IGZ1bmN0aW9uIF9jbGVhbih2YWx1ZSwgaW5kZXgsIHRhcmdldCwgdGFyZ2V0cykge1xuICBfaXNGdW5jdGlvbih2YWx1ZSkgJiYgKHZhbHVlID0gdmFsdWUoaW5kZXgsIHRhcmdldCwgdGFyZ2V0cykpO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gX2lzU3RyaW5nKHZhbHVlKSAmJiB2YWx1ZSAhPT0gXCJtYXhcIiAmJiB2YWx1ZS5jaGFyQXQoMSkgIT09IFwiPVwiID8ge1xuICAgICAgeDogdmFsdWUsXG4gICAgICB5OiB2YWx1ZVxuICAgIH0gOiB7XG4gICAgICB5OiB2YWx1ZVxuICAgIH07IC8vaWYgd2UgZG9uJ3QgcmVjZWl2ZSBhbiBvYmplY3QgYXMgdGhlIHBhcmFtZXRlciwgYXNzdW1lIHRoZSB1c2VyIGludGVuZHMgXCJ5XCIuXG4gIH0gZWxzZSBpZiAodmFsdWUubm9kZVR5cGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeTogdmFsdWUsXG4gICAgICB4OiB2YWx1ZVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9LFxuICAgICAgICBwO1xuXG4gICAgZm9yIChwIGluIHZhbHVlKSB7XG4gICAgICByZXN1bHRbcF0gPSBwICE9PSBcIm9uQXV0b0tpbGxcIiAmJiBfaXNGdW5jdGlvbih2YWx1ZVtwXSkgPyB2YWx1ZVtwXShpbmRleCwgdGFyZ2V0LCB0YXJnZXRzKSA6IHZhbHVlW3BdO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0sXG4gICAgX2dldE9mZnNldCA9IGZ1bmN0aW9uIF9nZXRPZmZzZXQoZWxlbWVudCwgY29udGFpbmVyKSB7XG4gIGVsZW1lbnQgPSBfdG9BcnJheShlbGVtZW50KVswXTtcblxuICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KSB7XG4gICAgcmV0dXJuIGNvbnNvbGUud2FybihcInNjcm9sbFRvIHRhcmdldCBkb2Vzbid0IGV4aXN0LiBVc2luZyAwXCIpIHx8IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfVxuXG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIGlzUm9vdCA9ICFjb250YWluZXIgfHwgY29udGFpbmVyID09PSBfd2luZG93IHx8IGNvbnRhaW5lciA9PT0gX2JvZHksXG4gICAgICBjUmVjdCA9IGlzUm9vdCA/IHtcbiAgICB0b3A6IF9kb2NFbC5jbGllbnRUb3AgLSAoX3dpbmRvdy5wYWdlWU9mZnNldCB8fCBfZG9jRWwuc2Nyb2xsVG9wIHx8IF9ib2R5LnNjcm9sbFRvcCB8fCAwKSxcbiAgICBsZWZ0OiBfZG9jRWwuY2xpZW50TGVmdCAtIChfd2luZG93LnBhZ2VYT2Zmc2V0IHx8IF9kb2NFbC5zY3JvbGxMZWZ0IHx8IF9ib2R5LnNjcm9sbExlZnQgfHwgMClcbiAgfSA6IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgeDogcmVjdC5sZWZ0IC0gY1JlY3QubGVmdCxcbiAgICB5OiByZWN0LnRvcCAtIGNSZWN0LnRvcFxuICB9O1xuXG4gIGlmICghaXNSb290ICYmIGNvbnRhaW5lcikge1xuICAgIC8vb25seSBhZGQgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIGlmIGl0J3Mgbm90IHRoZSB3aW5kb3cvYm9keS5cbiAgICBvZmZzZXRzLnggKz0gX2J1aWxkR2V0dGVyKGNvbnRhaW5lciwgXCJ4XCIpKCk7XG4gICAgb2Zmc2V0cy55ICs9IF9idWlsZEdldHRlcihjb250YWluZXIsIFwieVwiKSgpO1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59LFxuICAgIF9wYXJzZVZhbCA9IGZ1bmN0aW9uIF9wYXJzZVZhbCh2YWx1ZSwgdGFyZ2V0LCBheGlzLCBjdXJyZW50VmFsLCBvZmZzZXQpIHtcbiAgcmV0dXJuICFpc05hTih2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiID8gcGFyc2VGbG9hdCh2YWx1ZSkgLSBvZmZzZXQgOiBfaXNTdHJpbmcodmFsdWUpICYmIHZhbHVlLmNoYXJBdCgxKSA9PT0gXCI9XCIgPyBwYXJzZUZsb2F0KHZhbHVlLnN1YnN0cigyKSkgKiAodmFsdWUuY2hhckF0KDApID09PSBcIi1cIiA/IC0xIDogMSkgKyBjdXJyZW50VmFsIC0gb2Zmc2V0IDogdmFsdWUgPT09IFwibWF4XCIgPyBfbWF4KHRhcmdldCwgYXhpcykgLSBvZmZzZXQgOiBNYXRoLm1pbihfbWF4KHRhcmdldCwgYXhpcyksIF9nZXRPZmZzZXQodmFsdWUsIHRhcmdldClbYXhpc10gLSBvZmZzZXQpO1xufSxcbiAgICBfaW5pdENvcmUgPSBmdW5jdGlvbiBfaW5pdENvcmUoKSB7XG4gIGdzYXAgPSBfZ2V0R1NBUCgpO1xuXG4gIGlmIChfd2luZG93RXhpc3RzKCkgJiYgZ3NhcCAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnQuYm9keSkge1xuICAgIF93aW5kb3cgPSB3aW5kb3c7XG4gICAgX2JvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgIF9kb2NFbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICBfdG9BcnJheSA9IGdzYXAudXRpbHMudG9BcnJheTtcbiAgICBnc2FwLmNvbmZpZyh7XG4gICAgICBhdXRvS2lsbFRocmVzaG9sZDogN1xuICAgIH0pO1xuICAgIF9jb25maWcgPSBnc2FwLmNvbmZpZygpO1xuICAgIF9jb3JlSW5pdHRlZCA9IDE7XG4gIH1cbn07XG5cbmV4cG9ydCB2YXIgU2Nyb2xsVG9QbHVnaW4gPSB7XG4gIHZlcnNpb246IFwiMy4xMi4yXCIsXG4gIG5hbWU6IFwic2Nyb2xsVG9cIixcbiAgcmF3VmFyczogMSxcbiAgcmVnaXN0ZXI6IGZ1bmN0aW9uIHJlZ2lzdGVyKGNvcmUpIHtcbiAgICBnc2FwID0gY29yZTtcblxuICAgIF9pbml0Q29yZSgpO1xuICB9LFxuICBpbml0OiBmdW5jdGlvbiBpbml0KHRhcmdldCwgdmFsdWUsIHR3ZWVuLCBpbmRleCwgdGFyZ2V0cykge1xuICAgIF9jb3JlSW5pdHRlZCB8fCBfaW5pdENvcmUoKTtcbiAgICB2YXIgZGF0YSA9IHRoaXMsXG4gICAgICAgIHNuYXBUeXBlID0gZ3NhcC5nZXRQcm9wZXJ0eSh0YXJnZXQsIFwic2Nyb2xsU25hcFR5cGVcIik7XG4gICAgZGF0YS5pc1dpbiA9IHRhcmdldCA9PT0gX3dpbmRvdztcbiAgICBkYXRhLnRhcmdldCA9IHRhcmdldDtcbiAgICBkYXRhLnR3ZWVuID0gdHdlZW47XG4gICAgdmFsdWUgPSBfY2xlYW4odmFsdWUsIGluZGV4LCB0YXJnZXQsIHRhcmdldHMpO1xuICAgIGRhdGEudmFycyA9IHZhbHVlO1xuICAgIGRhdGEuYXV0b0tpbGwgPSAhIXZhbHVlLmF1dG9LaWxsO1xuICAgIGRhdGEuZ2V0WCA9IF9idWlsZEdldHRlcih0YXJnZXQsIFwieFwiKTtcbiAgICBkYXRhLmdldFkgPSBfYnVpbGRHZXR0ZXIodGFyZ2V0LCBcInlcIik7XG4gICAgZGF0YS54ID0gZGF0YS54UHJldiA9IGRhdGEuZ2V0WCgpO1xuICAgIGRhdGEueSA9IGRhdGEueVByZXYgPSBkYXRhLmdldFkoKTtcbiAgICBTY3JvbGxUcmlnZ2VyIHx8IChTY3JvbGxUcmlnZ2VyID0gZ3NhcC5jb3JlLmdsb2JhbHMoKS5TY3JvbGxUcmlnZ2VyKTtcbiAgICBnc2FwLmdldFByb3BlcnR5KHRhcmdldCwgXCJzY3JvbGxCZWhhdmlvclwiKSA9PT0gXCJzbW9vdGhcIiAmJiBnc2FwLnNldCh0YXJnZXQsIHtcbiAgICAgIHNjcm9sbEJlaGF2aW9yOiBcImF1dG9cIlxuICAgIH0pO1xuXG4gICAgaWYgKHNuYXBUeXBlICYmIHNuYXBUeXBlICE9PSBcIm5vbmVcIikge1xuICAgICAgLy8gZGlzYWJsZSBzY3JvbGwgc25hcHBpbmcgdG8gYXZvaWQgc3RyYW5nZSBiZWhhdmlvclxuICAgICAgZGF0YS5zbmFwID0gMTtcbiAgICAgIGRhdGEuc25hcElubGluZSA9IHRhcmdldC5zdHlsZS5zY3JvbGxTbmFwVHlwZTtcbiAgICAgIHRhcmdldC5zdHlsZS5zY3JvbGxTbmFwVHlwZSA9IFwibm9uZVwiO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS54ICE9IG51bGwpIHtcbiAgICAgIGRhdGEuYWRkKGRhdGEsIFwieFwiLCBkYXRhLngsIF9wYXJzZVZhbCh2YWx1ZS54LCB0YXJnZXQsIFwieFwiLCBkYXRhLngsIHZhbHVlLm9mZnNldFggfHwgMCksIGluZGV4LCB0YXJnZXRzKTtcblxuICAgICAgZGF0YS5fcHJvcHMucHVzaChcInNjcm9sbFRvX3hcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEuc2tpcFggPSAxO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS55ICE9IG51bGwpIHtcbiAgICAgIGRhdGEuYWRkKGRhdGEsIFwieVwiLCBkYXRhLnksIF9wYXJzZVZhbCh2YWx1ZS55LCB0YXJnZXQsIFwieVwiLCBkYXRhLnksIHZhbHVlLm9mZnNldFkgfHwgMCksIGluZGV4LCB0YXJnZXRzKTtcblxuICAgICAgZGF0YS5fcHJvcHMucHVzaChcInNjcm9sbFRvX3lcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEuc2tpcFkgPSAxO1xuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIocmF0aW8sIGRhdGEpIHtcbiAgICB2YXIgcHQgPSBkYXRhLl9wdCxcbiAgICAgICAgdGFyZ2V0ID0gZGF0YS50YXJnZXQsXG4gICAgICAgIHR3ZWVuID0gZGF0YS50d2VlbixcbiAgICAgICAgYXV0b0tpbGwgPSBkYXRhLmF1dG9LaWxsLFxuICAgICAgICB4UHJldiA9IGRhdGEueFByZXYsXG4gICAgICAgIHlQcmV2ID0gZGF0YS55UHJldixcbiAgICAgICAgaXNXaW4gPSBkYXRhLmlzV2luLFxuICAgICAgICBzbmFwID0gZGF0YS5zbmFwLFxuICAgICAgICBzbmFwSW5saW5lID0gZGF0YS5zbmFwSW5saW5lLFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICB5RGlmLFxuICAgICAgICB4RGlmLFxuICAgICAgICB0aHJlc2hvbGQ7XG5cbiAgICB3aGlsZSAocHQpIHtcbiAgICAgIHB0LnIocmF0aW8sIHB0LmQpO1xuICAgICAgcHQgPSBwdC5fbmV4dDtcbiAgICB9XG5cbiAgICB4ID0gaXNXaW4gfHwgIWRhdGEuc2tpcFggPyBkYXRhLmdldFgoKSA6IHhQcmV2O1xuICAgIHkgPSBpc1dpbiB8fCAhZGF0YS5za2lwWSA/IGRhdGEuZ2V0WSgpIDogeVByZXY7XG4gICAgeURpZiA9IHkgLSB5UHJldjtcbiAgICB4RGlmID0geCAtIHhQcmV2O1xuICAgIHRocmVzaG9sZCA9IF9jb25maWcuYXV0b0tpbGxUaHJlc2hvbGQ7XG5cbiAgICBpZiAoZGF0YS54IDwgMCkge1xuICAgICAgLy9jYW4ndCBzY3JvbGwgdG8gYSBwb3NpdGlvbiBsZXNzIHRoYW4gMCEgTWlnaHQgaGFwcGVuIGlmIHNvbWVvbmUgdXNlcyBhIEJhY2suZWFzZU91dCBvciBFbGFzdGljLmVhc2VPdXQgd2hlbiBzY3JvbGxpbmcgYmFjayB0byB0aGUgdG9wIG9mIHRoZSBwYWdlIChmb3IgZXhhbXBsZSlcbiAgICAgIGRhdGEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEueSA8IDApIHtcbiAgICAgIGRhdGEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGF1dG9LaWxsKSB7XG4gICAgICAvL25vdGU6IGlPUyBoYXMgYSBidWcgdGhhdCB0aHJvd3Mgb2ZmIHRoZSBzY3JvbGwgYnkgc2V2ZXJhbCBwaXhlbHMsIHNvIHdlIG5lZWQgdG8gY2hlY2sgaWYgaXQncyB3aXRoaW4gNyBwaXhlbHMgb2YgdGhlIHByZXZpb3VzIG9uZSB0aGF0IHdlIHNldCBpbnN0ZWFkIG9mIGp1c3QgbG9va2luZyBmb3IgYW4gZXhhY3QgbWF0Y2guXG4gICAgICBpZiAoIWRhdGEuc2tpcFggJiYgKHhEaWYgPiB0aHJlc2hvbGQgfHwgeERpZiA8IC10aHJlc2hvbGQpICYmIHggPCBfbWF4KHRhcmdldCwgXCJ4XCIpKSB7XG4gICAgICAgIGRhdGEuc2tpcFggPSAxOyAvL2lmIHRoZSB1c2VyIHNjcm9sbHMgc2VwYXJhdGVseSwgd2Ugc2hvdWxkIHN0b3AgdHdlZW5pbmchXG4gICAgICB9XG5cbiAgICAgIGlmICghZGF0YS5za2lwWSAmJiAoeURpZiA+IHRocmVzaG9sZCB8fCB5RGlmIDwgLXRocmVzaG9sZCkgJiYgeSA8IF9tYXgodGFyZ2V0LCBcInlcIikpIHtcbiAgICAgICAgZGF0YS5za2lwWSA9IDE7IC8vaWYgdGhlIHVzZXIgc2Nyb2xscyBzZXBhcmF0ZWx5LCB3ZSBzaG91bGQgc3RvcCB0d2VlbmluZyFcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2tpcFggJiYgZGF0YS5za2lwWSkge1xuICAgICAgICB0d2Vlbi5raWxsKCk7XG4gICAgICAgIGRhdGEudmFycy5vbkF1dG9LaWxsICYmIGRhdGEudmFycy5vbkF1dG9LaWxsLmFwcGx5KHR3ZWVuLCBkYXRhLnZhcnMub25BdXRvS2lsbFBhcmFtcyB8fCBbXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzV2luKSB7XG4gICAgICBfd2luZG93LnNjcm9sbFRvKCFkYXRhLnNraXBYID8gZGF0YS54IDogeCwgIWRhdGEuc2tpcFkgPyBkYXRhLnkgOiB5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YS5za2lwWSB8fCAodGFyZ2V0LnNjcm9sbFRvcCA9IGRhdGEueSk7XG4gICAgICBkYXRhLnNraXBYIHx8ICh0YXJnZXQuc2Nyb2xsTGVmdCA9IGRhdGEueCk7XG4gICAgfVxuXG4gICAgaWYgKHNuYXAgJiYgKHJhdGlvID09PSAxIHx8IHJhdGlvID09PSAwKSkge1xuICAgICAgeSA9IHRhcmdldC5zY3JvbGxUb3A7XG4gICAgICB4ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gICAgICBzbmFwSW5saW5lID8gdGFyZ2V0LnN0eWxlLnNjcm9sbFNuYXBUeXBlID0gc25hcElubGluZSA6IHRhcmdldC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInNjcm9sbC1zbmFwLXR5cGVcIik7XG4gICAgICB0YXJnZXQuc2Nyb2xsVG9wID0geSArIDE7IC8vIGJ1ZyBpbiBTYWZhcmkgY2F1c2VzIHRoZSBlbGVtZW50IHRvIHRvdGFsbHkgcmVzZXQgaXRzIHNjcm9sbCBwb3NpdGlvbiB3aGVuIHNjcm9sbC1zbmFwLXR5cGUgY2hhbmdlcywgc28gd2UgbmVlZCB0byBzZXQgaXQgdG8gYSBzbGlnaHRseSBkaWZmZXJlbnQgdmFsdWUgYW5kIHRoZW4gYmFjayBhZ2FpbiB0byB3b3JrIGFyb3VuZCB0aGlzIGJ1Zy5cblxuICAgICAgdGFyZ2V0LnNjcm9sbExlZnQgPSB4ICsgMTtcbiAgICAgIHRhcmdldC5zY3JvbGxUb3AgPSB5O1xuICAgICAgdGFyZ2V0LnNjcm9sbExlZnQgPSB4O1xuICAgIH1cblxuICAgIGRhdGEueFByZXYgPSBkYXRhLng7XG4gICAgZGF0YS55UHJldiA9IGRhdGEueTtcbiAgICBTY3JvbGxUcmlnZ2VyICYmIFNjcm9sbFRyaWdnZXIudXBkYXRlKCk7XG4gIH0sXG4gIGtpbGw6IGZ1bmN0aW9uIGtpbGwocHJvcGVydHkpIHtcbiAgICB2YXIgYm90aCA9IHByb3BlcnR5ID09PSBcInNjcm9sbFRvXCI7XG5cbiAgICBpZiAoYm90aCB8fCBwcm9wZXJ0eSA9PT0gXCJzY3JvbGxUb194XCIpIHtcbiAgICAgIHRoaXMuc2tpcFggPSAxO1xuICAgIH1cblxuICAgIGlmIChib3RoIHx8IHByb3BlcnR5ID09PSBcInNjcm9sbFRvX3lcIikge1xuICAgICAgdGhpcy5za2lwWSA9IDE7XG4gICAgfVxuICB9XG59O1xuU2Nyb2xsVG9QbHVnaW4ubWF4ID0gX21heDtcblNjcm9sbFRvUGx1Z2luLmdldE9mZnNldCA9IF9nZXRPZmZzZXQ7XG5TY3JvbGxUb1BsdWdpbi5idWlsZEdldHRlciA9IF9idWlsZEdldHRlcjtcbl9nZXRHU0FQKCkgJiYgZ3NhcC5yZWdpc3RlclBsdWdpbihTY3JvbGxUb1BsdWdpbik7XG5leHBvcnQgeyBTY3JvbGxUb1BsdWdpbiBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4vKiFcbiAqIE9ic2VydmVyIDMuMTIuMlxuICogaHR0cHM6Ly9ncmVlbnNvY2suY29tXG4gKlxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IDIwMDgtMjAyMywgR3JlZW5Tb2NrLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogU3ViamVjdCB0byB0aGUgdGVybXMgYXQgaHR0cHM6Ly9ncmVlbnNvY2suY29tL3N0YW5kYXJkLWxpY2Vuc2Ugb3IgZm9yXG4gKiBDbHViIEdyZWVuU29jayBtZW1iZXJzLCB0aGUgYWdyZWVtZW50IGlzc3VlZCB3aXRoIHRoYXQgbWVtYmVyc2hpcC5cbiAqIEBhdXRob3I6IEphY2sgRG95bGUsIGphY2tAZ3JlZW5zb2NrLmNvbVxuKi9cblxuLyogZXNsaW50LWRpc2FibGUgKi9cbnZhciBnc2FwLFxuICAgIF9jb3JlSW5pdHRlZCxcbiAgICBfY2xhbXAsXG4gICAgX3dpbixcbiAgICBfZG9jLFxuICAgIF9kb2NFbCxcbiAgICBfYm9keSxcbiAgICBfaXNUb3VjaCxcbiAgICBfcG9pbnRlclR5cGUsXG4gICAgU2Nyb2xsVHJpZ2dlcixcbiAgICBfcm9vdCxcbiAgICBfbm9ybWFsaXplcixcbiAgICBfZXZlbnRUeXBlcyxcbiAgICBfY29udGV4dCxcbiAgICBfZ2V0R1NBUCA9IGZ1bmN0aW9uIF9nZXRHU0FQKCkge1xuICByZXR1cm4gZ3NhcCB8fCB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIChnc2FwID0gd2luZG93LmdzYXApICYmIGdzYXAucmVnaXN0ZXJQbHVnaW4gJiYgZ3NhcDtcbn0sXG4gICAgX3N0YXJ0dXAgPSAxLFxuICAgIF9vYnNlcnZlcnMgPSBbXSxcbiAgICBfc2Nyb2xsZXJzID0gW10sXG4gICAgX3Byb3hpZXMgPSBbXSxcbiAgICBfZ2V0VGltZSA9IERhdGUubm93LFxuICAgIF9icmlkZ2UgPSBmdW5jdGlvbiBfYnJpZGdlKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn0sXG4gICAgX2ludGVncmF0ZSA9IGZ1bmN0aW9uIF9pbnRlZ3JhdGUoKSB7XG4gIHZhciBjb3JlID0gU2Nyb2xsVHJpZ2dlci5jb3JlLFxuICAgICAgZGF0YSA9IGNvcmUuYnJpZGdlIHx8IHt9LFxuICAgICAgc2Nyb2xsZXJzID0gY29yZS5fc2Nyb2xsZXJzLFxuICAgICAgcHJveGllcyA9IGNvcmUuX3Byb3hpZXM7XG4gIHNjcm9sbGVycy5wdXNoLmFwcGx5KHNjcm9sbGVycywgX3Njcm9sbGVycyk7XG4gIHByb3hpZXMucHVzaC5hcHBseShwcm94aWVzLCBfcHJveGllcyk7XG4gIF9zY3JvbGxlcnMgPSBzY3JvbGxlcnM7XG4gIF9wcm94aWVzID0gcHJveGllcztcblxuICBfYnJpZGdlID0gZnVuY3Rpb24gX2JyaWRnZShuYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiBkYXRhW25hbWVdKHZhbHVlKTtcbiAgfTtcbn0sXG4gICAgX2dldFByb3h5UHJvcCA9IGZ1bmN0aW9uIF9nZXRQcm94eVByb3AoZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgcmV0dXJuIH5fcHJveGllcy5pbmRleE9mKGVsZW1lbnQpICYmIF9wcm94aWVzW19wcm94aWVzLmluZGV4T2YoZWxlbWVudCkgKyAxXVtwcm9wZXJ0eV07XG59LFxuICAgIF9pc1ZpZXdwb3J0ID0gZnVuY3Rpb24gX2lzVmlld3BvcnQoZWwpIHtcbiAgcmV0dXJuICEhfl9yb290LmluZGV4T2YoZWwpO1xufSxcbiAgICBfYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBfYWRkTGlzdGVuZXIoZWxlbWVudCwgdHlwZSwgZnVuYywgbm9uUGFzc2l2ZSwgY2FwdHVyZSkge1xuICByZXR1cm4gZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmMsIHtcbiAgICBwYXNzaXZlOiAhbm9uUGFzc2l2ZSxcbiAgICBjYXB0dXJlOiAhIWNhcHR1cmVcbiAgfSk7XG59LFxuICAgIF9yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIF9yZW1vdmVMaXN0ZW5lcihlbGVtZW50LCB0eXBlLCBmdW5jLCBjYXB0dXJlKSB7XG4gIHJldHVybiBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZnVuYywgISFjYXB0dXJlKTtcbn0sXG4gICAgX3Njcm9sbExlZnQgPSBcInNjcm9sbExlZnRcIixcbiAgICBfc2Nyb2xsVG9wID0gXCJzY3JvbGxUb3BcIixcbiAgICBfb25TY3JvbGwgPSBmdW5jdGlvbiBfb25TY3JvbGwoKSB7XG4gIHJldHVybiBfbm9ybWFsaXplciAmJiBfbm9ybWFsaXplci5pc1ByZXNzZWQgfHwgX3Njcm9sbGVycy5jYWNoZSsrO1xufSxcbiAgICBfc2Nyb2xsQ2FjaGVGdW5jID0gZnVuY3Rpb24gX3Njcm9sbENhY2hlRnVuYyhmLCBkb05vdENhY2hlKSB7XG4gIHZhciBjYWNoaW5nRnVuYyA9IGZ1bmN0aW9uIGNhY2hpbmdGdW5jKHZhbHVlKSB7XG4gICAgLy8gc2luY2UgcmVhZGluZyB0aGUgc2Nyb2xsVG9wL3Njcm9sbExlZnQvcGFnZU9mZnNldFkvcGFnZU9mZnNldFggY2FuIHRyaWdnZXIgYSBsYXlvdXQsIHRoaXMgZnVuY3Rpb24gYWxsb3dzIHVzIHRvIGNhY2hlIHRoZSB2YWx1ZSBzbyBpdCBvbmx5IGdldHMgcmVhZCBmcmVzaCBhZnRlciBhIFwic2Nyb2xsXCIgZXZlbnQgZmlyZXMgKG9yIHdoaWxlIHdlJ3JlIHJlZnJlc2hpbmcgYmVjYXVzZSB0aGF0IGNhbiBsZW5ndGhlbiB0aGUgcGFnZSBhbmQgYWx0ZXIgdGhlIHNjcm9sbCBwb3NpdGlvbikuIHdoZW4gXCJzb2Z0XCIgaXMgdHJ1ZSwgdGhhdCBtZWFucyBkb24ndCBhY3R1YWxseSBzZXQgdGhlIHNjcm9sbCwgYnV0IGNhY2hlIHRoZSBuZXcgdmFsdWUgaW5zdGVhZCAodXNlZnVsIGluIFNjcm9sbFNtb290aGVyKVxuICAgIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgICAgX3N0YXJ0dXAgJiYgKF93aW4uaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9IFwibWFudWFsXCIpOyAvLyBvdGhlcndpc2UgdGhlIG5ldyBwb3NpdGlvbiB3aWxsIGdldCBvdmVyd3JpdHRlbiBieSB0aGUgYnJvd3NlciBvbmxvYWQuXG5cbiAgICAgIHZhciBpc05vcm1hbGl6aW5nID0gX25vcm1hbGl6ZXIgJiYgX25vcm1hbGl6ZXIuaXNQcmVzc2VkO1xuICAgICAgdmFsdWUgPSBjYWNoaW5nRnVuYy52ID0gTWF0aC5yb3VuZCh2YWx1ZSkgfHwgKF9ub3JtYWxpemVyICYmIF9ub3JtYWxpemVyLmlPUyA/IDEgOiAwKTsgLy9UT0RPOiBpT1MgQnVnOiBpZiB5b3UgYWxsb3cgaXQgdG8gZ28gdG8gMCwgU2FmYXJpIGNhbiBzdGFydCB0byByZXBvcnQgc3VwZXIgc3RyYW5nZSAod2lsZGx5IGluYWNjdXJhdGUpIHRvdWNoIHBvc2l0aW9ucyFcblxuICAgICAgZih2YWx1ZSk7XG4gICAgICBjYWNoaW5nRnVuYy5jYWNoZUlEID0gX3Njcm9sbGVycy5jYWNoZTtcbiAgICAgIGlzTm9ybWFsaXppbmcgJiYgX2JyaWRnZShcInNzXCIsIHZhbHVlKTsgLy8gc2V0IHNjcm9sbCAobm90aWZ5IFNjcm9sbFRyaWdnZXIgc28gaXQgY2FuIGRpc3BhdGNoIGEgXCJzY3JvbGxTdGFydFwiIGV2ZW50IGlmIG5lY2Vzc2FyeVxuICAgIH0gZWxzZSBpZiAoZG9Ob3RDYWNoZSB8fCBfc2Nyb2xsZXJzLmNhY2hlICE9PSBjYWNoaW5nRnVuYy5jYWNoZUlEIHx8IF9icmlkZ2UoXCJyZWZcIikpIHtcbiAgICAgIGNhY2hpbmdGdW5jLmNhY2hlSUQgPSBfc2Nyb2xsZXJzLmNhY2hlO1xuICAgICAgY2FjaGluZ0Z1bmMudiA9IGYoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FjaGluZ0Z1bmMudiArIGNhY2hpbmdGdW5jLm9mZnNldDtcbiAgfTtcblxuICBjYWNoaW5nRnVuYy5vZmZzZXQgPSAwO1xuICByZXR1cm4gZiAmJiBjYWNoaW5nRnVuYztcbn0sXG4gICAgX2hvcml6b250YWwgPSB7XG4gIHM6IF9zY3JvbGxMZWZ0LFxuICBwOiBcImxlZnRcIixcbiAgcDI6IFwiTGVmdFwiLFxuICBvczogXCJyaWdodFwiLFxuICBvczI6IFwiUmlnaHRcIixcbiAgZDogXCJ3aWR0aFwiLFxuICBkMjogXCJXaWR0aFwiLFxuICBhOiBcInhcIixcbiAgc2M6IF9zY3JvbGxDYWNoZUZ1bmMoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyBfd2luLnNjcm9sbFRvKHZhbHVlLCBfdmVydGljYWwuc2MoKSkgOiBfd2luLnBhZ2VYT2Zmc2V0IHx8IF9kb2NbX3Njcm9sbExlZnRdIHx8IF9kb2NFbFtfc2Nyb2xsTGVmdF0gfHwgX2JvZHlbX3Njcm9sbExlZnRdIHx8IDA7XG4gIH0pXG59LFxuICAgIF92ZXJ0aWNhbCA9IHtcbiAgczogX3Njcm9sbFRvcCxcbiAgcDogXCJ0b3BcIixcbiAgcDI6IFwiVG9wXCIsXG4gIG9zOiBcImJvdHRvbVwiLFxuICBvczI6IFwiQm90dG9tXCIsXG4gIGQ6IFwiaGVpZ2h0XCIsXG4gIGQyOiBcIkhlaWdodFwiLFxuICBhOiBcInlcIixcbiAgb3A6IF9ob3Jpem9udGFsLFxuICBzYzogX3Njcm9sbENhY2hlRnVuYyhmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IF93aW4uc2Nyb2xsVG8oX2hvcml6b250YWwuc2MoKSwgdmFsdWUpIDogX3dpbi5wYWdlWU9mZnNldCB8fCBfZG9jW19zY3JvbGxUb3BdIHx8IF9kb2NFbFtfc2Nyb2xsVG9wXSB8fCBfYm9keVtfc2Nyb2xsVG9wXSB8fCAwO1xuICB9KVxufSxcbiAgICBfZ2V0VGFyZ2V0ID0gZnVuY3Rpb24gX2dldFRhcmdldCh0LCBzZWxmKSB7XG4gIHJldHVybiAoc2VsZiAmJiBzZWxmLl9jdHggJiYgc2VsZi5fY3R4LnNlbGVjdG9yIHx8IGdzYXAudXRpbHMudG9BcnJheSkodClbMF0gfHwgKHR5cGVvZiB0ID09PSBcInN0cmluZ1wiICYmIGdzYXAuY29uZmlnKCkubnVsbFRhcmdldFdhcm4gIT09IGZhbHNlID8gY29uc29sZS53YXJuKFwiRWxlbWVudCBub3QgZm91bmQ6XCIsIHQpIDogbnVsbCk7XG59LFxuICAgIF9nZXRTY3JvbGxGdW5jID0gZnVuY3Rpb24gX2dldFNjcm9sbEZ1bmMoZWxlbWVudCwgX3JlZikge1xuICB2YXIgcyA9IF9yZWYucyxcbiAgICAgIHNjID0gX3JlZi5zYztcbiAgLy8gd2Ugc3RvcmUgdGhlIHNjcm9sbGVyIGZ1bmN0aW9ucyBpbiBhbiBhbHRlcm5hdGluZyBzZXF1ZW5jZWQgQXJyYXkgbGlrZSBbZWxlbWVudCwgdmVydGljYWxTY3JvbGxGdW5jLCBob3Jpem9udGFsU2Nyb2xsRnVuYywgLi4uXSBzbyB0aGF0IHdlIGNhbiBtaW5pbWl6ZSBtZW1vcnksIG1heGltaXplIHBlcmZvcm1hbmNlLCBhbmQgd2UgYWxzbyByZWNvcmQgdGhlIGxhc3QgcG9zaXRpb24gYXMgYSBcIi5yZWNcIiBwcm9wZXJ0eSBpbiBvcmRlciB0byByZXZlcnQgdG8gdGhhdCBhZnRlciByZWZyZXNoaW5nIHRvIGVuc3VyZSB0aGluZ3MgZG9uJ3Qgc2hpZnQgYXJvdW5kLlxuICBfaXNWaWV3cG9ydChlbGVtZW50KSAmJiAoZWxlbWVudCA9IF9kb2Muc2Nyb2xsaW5nRWxlbWVudCB8fCBfZG9jRWwpO1xuXG4gIHZhciBpID0gX3Njcm9sbGVycy5pbmRleE9mKGVsZW1lbnQpLFxuICAgICAgb2Zmc2V0ID0gc2MgPT09IF92ZXJ0aWNhbC5zYyA/IDEgOiAyO1xuXG4gICF+aSAmJiAoaSA9IF9zY3JvbGxlcnMucHVzaChlbGVtZW50KSAtIDEpO1xuICBfc2Nyb2xsZXJzW2kgKyBvZmZzZXRdIHx8IF9hZGRMaXN0ZW5lcihlbGVtZW50LCBcInNjcm9sbFwiLCBfb25TY3JvbGwpOyAvLyBjbGVhciB0aGUgY2FjaGUgd2hlbiBhIHNjcm9sbCBvY2N1cnNcblxuICB2YXIgcHJldiA9IF9zY3JvbGxlcnNbaSArIG9mZnNldF0sXG4gICAgICBmdW5jID0gcHJldiB8fCAoX3Njcm9sbGVyc1tpICsgb2Zmc2V0XSA9IF9zY3JvbGxDYWNoZUZ1bmMoX2dldFByb3h5UHJvcChlbGVtZW50LCBzKSwgdHJ1ZSkgfHwgKF9pc1ZpZXdwb3J0KGVsZW1lbnQpID8gc2MgOiBfc2Nyb2xsQ2FjaGVGdW5jKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gZWxlbWVudFtzXSA9IHZhbHVlIDogZWxlbWVudFtzXTtcbiAgfSkpKTtcbiAgZnVuYy50YXJnZXQgPSBlbGVtZW50O1xuICBwcmV2IHx8IChmdW5jLnNtb290aCA9IGdzYXAuZ2V0UHJvcGVydHkoZWxlbWVudCwgXCJzY3JvbGxCZWhhdmlvclwiKSA9PT0gXCJzbW9vdGhcIik7IC8vIG9ubHkgc2V0IGl0IHRoZSBmaXJzdCB0aW1lIChkb24ndCByZXNldCBldmVyeSB0aW1lIGEgc2Nyb2xsRnVuYyBpcyByZXF1ZXN0ZWQgYmVjYXVzZSBwZXJoYXBzIGl0IGhhcHBlbnMgZHVyaW5nIGEgcmVmcmVzaCgpIHdoZW4gaXQncyBkaXNhYmxlZCBpbiBTY3JvbGxUcmlnZ2VyLlxuXG4gIHJldHVybiBmdW5jO1xufSxcbiAgICBfZ2V0VmVsb2NpdHlQcm9wID0gZnVuY3Rpb24gX2dldFZlbG9jaXR5UHJvcCh2YWx1ZSwgbWluVGltZVJlZnJlc2gsIHVzZURlbHRhKSB7XG4gIHZhciB2MSA9IHZhbHVlLFxuICAgICAgdjIgPSB2YWx1ZSxcbiAgICAgIHQxID0gX2dldFRpbWUoKSxcbiAgICAgIHQyID0gdDEsXG4gICAgICBtaW4gPSBtaW5UaW1lUmVmcmVzaCB8fCA1MCxcbiAgICAgIGRyb3BUb1plcm9UaW1lID0gTWF0aC5tYXgoNTAwLCBtaW4gKiAzKSxcbiAgICAgIHVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSh2YWx1ZSwgZm9yY2UpIHtcbiAgICB2YXIgdCA9IF9nZXRUaW1lKCk7XG5cbiAgICBpZiAoZm9yY2UgfHwgdCAtIHQxID4gbWluKSB7XG4gICAgICB2MiA9IHYxO1xuICAgICAgdjEgPSB2YWx1ZTtcbiAgICAgIHQyID0gdDE7XG4gICAgICB0MSA9IHQ7XG4gICAgfSBlbHNlIGlmICh1c2VEZWx0YSkge1xuICAgICAgdjEgKz0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vdCB0b3RhbGx5IG5lY2Vzc2FyeSwgYnV0IG1ha2VzIGl0IGEgYml0IG1vcmUgYWNjdXJhdGUgYnkgYWRqdXN0aW5nIHRoZSB2MSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIG5ldyBzbG9wZS4gVGhpcyB3YXkgd2UncmUgbm90IGp1c3QgaWdub3JpbmcgdGhlIGluY29taW5nIGRhdGEuIFJlbW92aW5nIGZvciBub3cgYmVjYXVzZSBpdCBkb2Vzbid0IHNlZW0gdG8gbWFrZSBtdWNoIHByYWN0aWNhbCBkaWZmZXJlbmNlIGFuZCBpdCdzIHByb2JhYmx5IG5vdCB3b3J0aCB0aGUga2IuXG4gICAgICB2MSA9IHYyICsgKHZhbHVlIC0gdjIpIC8gKHQgLSB0MikgKiAodDEgLSB0Mik7XG4gICAgfVxuICB9LFxuICAgICAgcmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICB2MiA9IHYxID0gdXNlRGVsdGEgPyAwIDogdjE7XG4gICAgdDIgPSB0MSA9IDA7XG4gIH0sXG4gICAgICBnZXRWZWxvY2l0eSA9IGZ1bmN0aW9uIGdldFZlbG9jaXR5KGxhdGVzdFZhbHVlKSB7XG4gICAgdmFyIHRPbGQgPSB0MixcbiAgICAgICAgdk9sZCA9IHYyLFxuICAgICAgICB0ID0gX2dldFRpbWUoKTtcblxuICAgIChsYXRlc3RWYWx1ZSB8fCBsYXRlc3RWYWx1ZSA9PT0gMCkgJiYgbGF0ZXN0VmFsdWUgIT09IHYxICYmIHVwZGF0ZShsYXRlc3RWYWx1ZSk7XG4gICAgcmV0dXJuIHQxID09PSB0MiB8fCB0IC0gdDIgPiBkcm9wVG9aZXJvVGltZSA/IDAgOiAodjEgKyAodXNlRGVsdGEgPyB2T2xkIDogLXZPbGQpKSAvICgodXNlRGVsdGEgPyB0IDogdDEpIC0gdE9sZCkgKiAxMDAwO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiB1cGRhdGUsXG4gICAgcmVzZXQ6IHJlc2V0LFxuICAgIGdldFZlbG9jaXR5OiBnZXRWZWxvY2l0eVxuICB9O1xufSxcbiAgICBfZ2V0RXZlbnQgPSBmdW5jdGlvbiBfZ2V0RXZlbnQoZSwgcHJldmVudERlZmF1bHQpIHtcbiAgcHJldmVudERlZmF1bHQgJiYgIWUuX2dzYXBBbGxvdyAmJiBlLnByZXZlbnREZWZhdWx0KCk7XG4gIHJldHVybiBlLmNoYW5nZWRUb3VjaGVzID8gZS5jaGFuZ2VkVG91Y2hlc1swXSA6IGU7XG59LFxuICAgIF9nZXRBYnNvbHV0ZU1heCA9IGZ1bmN0aW9uIF9nZXRBYnNvbHV0ZU1heChhKSB7XG4gIHZhciBtYXggPSBNYXRoLm1heC5hcHBseShNYXRoLCBhKSxcbiAgICAgIG1pbiA9IE1hdGgubWluLmFwcGx5KE1hdGgsIGEpO1xuICByZXR1cm4gTWF0aC5hYnMobWF4KSA+PSBNYXRoLmFicyhtaW4pID8gbWF4IDogbWluO1xufSxcbiAgICBfc2V0U2Nyb2xsVHJpZ2dlciA9IGZ1bmN0aW9uIF9zZXRTY3JvbGxUcmlnZ2VyKCkge1xuICBTY3JvbGxUcmlnZ2VyID0gZ3NhcC5jb3JlLmdsb2JhbHMoKS5TY3JvbGxUcmlnZ2VyO1xuICBTY3JvbGxUcmlnZ2VyICYmIFNjcm9sbFRyaWdnZXIuY29yZSAmJiBfaW50ZWdyYXRlKCk7XG59LFxuICAgIF9pbml0Q29yZSA9IGZ1bmN0aW9uIF9pbml0Q29yZShjb3JlKSB7XG4gIGdzYXAgPSBjb3JlIHx8IF9nZXRHU0FQKCk7XG5cbiAgaWYgKGdzYXAgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmJvZHkpIHtcbiAgICBfd2luID0gd2luZG93O1xuICAgIF9kb2MgPSBkb2N1bWVudDtcbiAgICBfZG9jRWwgPSBfZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICBfYm9keSA9IF9kb2MuYm9keTtcbiAgICBfcm9vdCA9IFtfd2luLCBfZG9jLCBfZG9jRWwsIF9ib2R5XTtcbiAgICBfY2xhbXAgPSBnc2FwLnV0aWxzLmNsYW1wO1xuXG4gICAgX2NvbnRleHQgPSBnc2FwLmNvcmUuY29udGV4dCB8fCBmdW5jdGlvbiAoKSB7fTtcblxuICAgIF9wb2ludGVyVHlwZSA9IFwib25wb2ludGVyZW50ZXJcIiBpbiBfYm9keSA/IFwicG9pbnRlclwiIDogXCJtb3VzZVwiOyAvLyBpc1RvdWNoIGlzIDAgaWYgbm8gdG91Y2gsIDEgaWYgT05MWSB0b3VjaCwgYW5kIDIgaWYgaXQgY2FuIGFjY29tbW9kYXRlIHRvdWNoIGJ1dCBhbHNvIG90aGVyIHR5cGVzIGxpa2UgbW91c2UvcG9pbnRlci5cblxuICAgIF9pc1RvdWNoID0gT2JzZXJ2ZXIuaXNUb3VjaCA9IF93aW4ubWF0Y2hNZWRpYSAmJiBfd2luLm1hdGNoTWVkaWEoXCIoaG92ZXI6IG5vbmUpLCAocG9pbnRlcjogY29hcnNlKVwiKS5tYXRjaGVzID8gMSA6IFwib250b3VjaHN0YXJ0XCIgaW4gX3dpbiB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAwIHx8IG5hdmlnYXRvci5tc01heFRvdWNoUG9pbnRzID4gMCA/IDIgOiAwO1xuICAgIF9ldmVudFR5cGVzID0gT2JzZXJ2ZXIuZXZlbnRUeXBlcyA9IChcIm9udG91Y2hzdGFydFwiIGluIF9kb2NFbCA/IFwidG91Y2hzdGFydCx0b3VjaG1vdmUsdG91Y2hjYW5jZWwsdG91Y2hlbmRcIiA6ICEoXCJvbnBvaW50ZXJkb3duXCIgaW4gX2RvY0VsKSA/IFwibW91c2Vkb3duLG1vdXNlbW92ZSxtb3VzZXVwLG1vdXNldXBcIiA6IFwicG9pbnRlcmRvd24scG9pbnRlcm1vdmUscG9pbnRlcmNhbmNlbCxwb2ludGVydXBcIikuc3BsaXQoXCIsXCIpO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF9zdGFydHVwID0gMDtcbiAgICB9LCA1MDApO1xuXG4gICAgX3NldFNjcm9sbFRyaWdnZXIoKTtcblxuICAgIF9jb3JlSW5pdHRlZCA9IDE7XG4gIH1cblxuICByZXR1cm4gX2NvcmVJbml0dGVkO1xufTtcblxuX2hvcml6b250YWwub3AgPSBfdmVydGljYWw7XG5fc2Nyb2xsZXJzLmNhY2hlID0gMDtcbmV4cG9ydCB2YXIgT2JzZXJ2ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBPYnNlcnZlcih2YXJzKSB7XG4gICAgdGhpcy5pbml0KHZhcnMpO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE9ic2VydmVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uaW5pdCA9IGZ1bmN0aW9uIGluaXQodmFycykge1xuICAgIF9jb3JlSW5pdHRlZCB8fCBfaW5pdENvcmUoZ3NhcCkgfHwgY29uc29sZS53YXJuKFwiUGxlYXNlIGdzYXAucmVnaXN0ZXJQbHVnaW4oT2JzZXJ2ZXIpXCIpO1xuICAgIFNjcm9sbFRyaWdnZXIgfHwgX3NldFNjcm9sbFRyaWdnZXIoKTtcbiAgICB2YXIgdG9sZXJhbmNlID0gdmFycy50b2xlcmFuY2UsXG4gICAgICAgIGRyYWdNaW5pbXVtID0gdmFycy5kcmFnTWluaW11bSxcbiAgICAgICAgdHlwZSA9IHZhcnMudHlwZSxcbiAgICAgICAgdGFyZ2V0ID0gdmFycy50YXJnZXQsXG4gICAgICAgIGxpbmVIZWlnaHQgPSB2YXJzLmxpbmVIZWlnaHQsXG4gICAgICAgIGRlYm91bmNlID0gdmFycy5kZWJvdW5jZSxcbiAgICAgICAgcHJldmVudERlZmF1bHQgPSB2YXJzLnByZXZlbnREZWZhdWx0LFxuICAgICAgICBvblN0b3AgPSB2YXJzLm9uU3RvcCxcbiAgICAgICAgb25TdG9wRGVsYXkgPSB2YXJzLm9uU3RvcERlbGF5LFxuICAgICAgICBpZ25vcmUgPSB2YXJzLmlnbm9yZSxcbiAgICAgICAgd2hlZWxTcGVlZCA9IHZhcnMud2hlZWxTcGVlZCxcbiAgICAgICAgZXZlbnQgPSB2YXJzLmV2ZW50LFxuICAgICAgICBvbkRyYWdTdGFydCA9IHZhcnMub25EcmFnU3RhcnQsXG4gICAgICAgIG9uRHJhZ0VuZCA9IHZhcnMub25EcmFnRW5kLFxuICAgICAgICBvbkRyYWcgPSB2YXJzLm9uRHJhZyxcbiAgICAgICAgb25QcmVzcyA9IHZhcnMub25QcmVzcyxcbiAgICAgICAgb25SZWxlYXNlID0gdmFycy5vblJlbGVhc2UsXG4gICAgICAgIG9uUmlnaHQgPSB2YXJzLm9uUmlnaHQsXG4gICAgICAgIG9uTGVmdCA9IHZhcnMub25MZWZ0LFxuICAgICAgICBvblVwID0gdmFycy5vblVwLFxuICAgICAgICBvbkRvd24gPSB2YXJzLm9uRG93bixcbiAgICAgICAgb25DaGFuZ2VYID0gdmFycy5vbkNoYW5nZVgsXG4gICAgICAgIG9uQ2hhbmdlWSA9IHZhcnMub25DaGFuZ2VZLFxuICAgICAgICBvbkNoYW5nZSA9IHZhcnMub25DaGFuZ2UsXG4gICAgICAgIG9uVG9nZ2xlWCA9IHZhcnMub25Ub2dnbGVYLFxuICAgICAgICBvblRvZ2dsZVkgPSB2YXJzLm9uVG9nZ2xlWSxcbiAgICAgICAgb25Ib3ZlciA9IHZhcnMub25Ib3ZlcixcbiAgICAgICAgb25Ib3ZlckVuZCA9IHZhcnMub25Ib3ZlckVuZCxcbiAgICAgICAgb25Nb3ZlID0gdmFycy5vbk1vdmUsXG4gICAgICAgIGlnbm9yZUNoZWNrID0gdmFycy5pZ25vcmVDaGVjayxcbiAgICAgICAgaXNOb3JtYWxpemVyID0gdmFycy5pc05vcm1hbGl6ZXIsXG4gICAgICAgIG9uR2VzdHVyZVN0YXJ0ID0gdmFycy5vbkdlc3R1cmVTdGFydCxcbiAgICAgICAgb25HZXN0dXJlRW5kID0gdmFycy5vbkdlc3R1cmVFbmQsXG4gICAgICAgIG9uV2hlZWwgPSB2YXJzLm9uV2hlZWwsXG4gICAgICAgIG9uRW5hYmxlID0gdmFycy5vbkVuYWJsZSxcbiAgICAgICAgb25EaXNhYmxlID0gdmFycy5vbkRpc2FibGUsXG4gICAgICAgIG9uQ2xpY2sgPSB2YXJzLm9uQ2xpY2ssXG4gICAgICAgIHNjcm9sbFNwZWVkID0gdmFycy5zY3JvbGxTcGVlZCxcbiAgICAgICAgY2FwdHVyZSA9IHZhcnMuY2FwdHVyZSxcbiAgICAgICAgYWxsb3dDbGlja3MgPSB2YXJzLmFsbG93Q2xpY2tzLFxuICAgICAgICBsb2NrQXhpcyA9IHZhcnMubG9ja0F4aXMsXG4gICAgICAgIG9uTG9ja0F4aXMgPSB2YXJzLm9uTG9ja0F4aXM7XG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQgPSBfZ2V0VGFyZ2V0KHRhcmdldCkgfHwgX2RvY0VsO1xuICAgIHRoaXMudmFycyA9IHZhcnM7XG4gICAgaWdub3JlICYmIChpZ25vcmUgPSBnc2FwLnV0aWxzLnRvQXJyYXkoaWdub3JlKSk7XG4gICAgdG9sZXJhbmNlID0gdG9sZXJhbmNlIHx8IDFlLTk7XG4gICAgZHJhZ01pbmltdW0gPSBkcmFnTWluaW11bSB8fCAwO1xuICAgIHdoZWVsU3BlZWQgPSB3aGVlbFNwZWVkIHx8IDE7XG4gICAgc2Nyb2xsU3BlZWQgPSBzY3JvbGxTcGVlZCB8fCAxO1xuICAgIHR5cGUgPSB0eXBlIHx8IFwid2hlZWwsdG91Y2gscG9pbnRlclwiO1xuICAgIGRlYm91bmNlID0gZGVib3VuY2UgIT09IGZhbHNlO1xuICAgIGxpbmVIZWlnaHQgfHwgKGxpbmVIZWlnaHQgPSBwYXJzZUZsb2F0KF93aW4uZ2V0Q29tcHV0ZWRTdHlsZShfYm9keSkubGluZUhlaWdodCkgfHwgMjIpOyAvLyBub3RlOiBicm93c2VyIG1heSByZXBvcnQgXCJub3JtYWxcIiwgc28gZGVmYXVsdCB0byAyMi5cblxuICAgIHZhciBpZCxcbiAgICAgICAgb25TdG9wRGVsYXllZENhbGwsXG4gICAgICAgIGRyYWdnZWQsXG4gICAgICAgIG1vdmVkLFxuICAgICAgICB3aGVlbGVkLFxuICAgICAgICBsb2NrZWQsXG4gICAgICAgIGF4aXMsXG4gICAgICAgIHNlbGYgPSB0aGlzLFxuICAgICAgICBwcmV2RGVsdGFYID0gMCxcbiAgICAgICAgcHJldkRlbHRhWSA9IDAsXG4gICAgICAgIHNjcm9sbEZ1bmNYID0gX2dldFNjcm9sbEZ1bmModGFyZ2V0LCBfaG9yaXpvbnRhbCksXG4gICAgICAgIHNjcm9sbEZ1bmNZID0gX2dldFNjcm9sbEZ1bmModGFyZ2V0LCBfdmVydGljYWwpLFxuICAgICAgICBzY3JvbGxYID0gc2Nyb2xsRnVuY1goKSxcbiAgICAgICAgc2Nyb2xsWSA9IHNjcm9sbEZ1bmNZKCksXG4gICAgICAgIGxpbWl0VG9Ub3VjaCA9IH50eXBlLmluZGV4T2YoXCJ0b3VjaFwiKSAmJiAhfnR5cGUuaW5kZXhPZihcInBvaW50ZXJcIikgJiYgX2V2ZW50VHlwZXNbMF0gPT09IFwicG9pbnRlcmRvd25cIixcbiAgICAgICAgLy8gZm9yIGRldmljZXMgdGhhdCBhY2NvbW1vZGF0ZSBtb3VzZSBldmVudHMgYW5kIHRvdWNoIGV2ZW50cywgd2UgbmVlZCB0byBkaXN0aW5ndWlzaC5cbiAgICBpc1ZpZXdwb3J0ID0gX2lzVmlld3BvcnQodGFyZ2V0KSxcbiAgICAgICAgb3duZXJEb2MgPSB0YXJnZXQub3duZXJEb2N1bWVudCB8fCBfZG9jLFxuICAgICAgICBkZWx0YVggPSBbMCwgMCwgMF0sXG4gICAgICAgIC8vIHdoZWVsLCBzY3JvbGwsIHBvaW50ZXIvdG91Y2hcbiAgICBkZWx0YVkgPSBbMCwgMCwgMF0sXG4gICAgICAgIG9uQ2xpY2tUaW1lID0gMCxcbiAgICAgICAgY2xpY2tDYXB0dXJlID0gZnVuY3Rpb24gY2xpY2tDYXB0dXJlKCkge1xuICAgICAgcmV0dXJuIG9uQ2xpY2tUaW1lID0gX2dldFRpbWUoKTtcbiAgICB9LFxuICAgICAgICBfaWdub3JlQ2hlY2sgPSBmdW5jdGlvbiBfaWdub3JlQ2hlY2soZSwgaXNQb2ludGVyT3JUb3VjaCkge1xuICAgICAgcmV0dXJuIChzZWxmLmV2ZW50ID0gZSkgJiYgaWdub3JlICYmIH5pZ25vcmUuaW5kZXhPZihlLnRhcmdldCkgfHwgaXNQb2ludGVyT3JUb3VjaCAmJiBsaW1pdFRvVG91Y2ggJiYgZS5wb2ludGVyVHlwZSAhPT0gXCJ0b3VjaFwiIHx8IGlnbm9yZUNoZWNrICYmIGlnbm9yZUNoZWNrKGUsIGlzUG9pbnRlck9yVG91Y2gpO1xuICAgIH0sXG4gICAgICAgIG9uU3RvcEZ1bmMgPSBmdW5jdGlvbiBvblN0b3BGdW5jKCkge1xuICAgICAgc2VsZi5fdngucmVzZXQoKTtcblxuICAgICAgc2VsZi5fdnkucmVzZXQoKTtcblxuICAgICAgb25TdG9wRGVsYXllZENhbGwucGF1c2UoKTtcbiAgICAgIG9uU3RvcCAmJiBvblN0b3Aoc2VsZik7XG4gICAgfSxcbiAgICAgICAgdXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgdmFyIGR4ID0gc2VsZi5kZWx0YVggPSBfZ2V0QWJzb2x1dGVNYXgoZGVsdGFYKSxcbiAgICAgICAgICBkeSA9IHNlbGYuZGVsdGFZID0gX2dldEFic29sdXRlTWF4KGRlbHRhWSksXG4gICAgICAgICAgY2hhbmdlZFggPSBNYXRoLmFicyhkeCkgPj0gdG9sZXJhbmNlLFxuICAgICAgICAgIGNoYW5nZWRZID0gTWF0aC5hYnMoZHkpID49IHRvbGVyYW5jZTtcblxuICAgICAgb25DaGFuZ2UgJiYgKGNoYW5nZWRYIHx8IGNoYW5nZWRZKSAmJiBvbkNoYW5nZShzZWxmLCBkeCwgZHksIGRlbHRhWCwgZGVsdGFZKTsgLy8gaW4gU2Nyb2xsVHJpZ2dlci5ub3JtYWxpemVTY3JvbGwoKSwgd2UgbmVlZCB0byBrbm93IGlmIGl0IHdhcyB0b3VjaC9wb2ludGVyIHNvIHdlIG5lZWQgYWNjZXNzIHRvIHRoZSBkZWx0YVgvZGVsdGFZIEFycmF5cyBiZWZvcmUgd2UgY2xlYXIgdGhlbSBvdXQuXG5cbiAgICAgIGlmIChjaGFuZ2VkWCkge1xuICAgICAgICBvblJpZ2h0ICYmIHNlbGYuZGVsdGFYID4gMCAmJiBvblJpZ2h0KHNlbGYpO1xuICAgICAgICBvbkxlZnQgJiYgc2VsZi5kZWx0YVggPCAwICYmIG9uTGVmdChzZWxmKTtcbiAgICAgICAgb25DaGFuZ2VYICYmIG9uQ2hhbmdlWChzZWxmKTtcbiAgICAgICAgb25Ub2dnbGVYICYmIHNlbGYuZGVsdGFYIDwgMCAhPT0gcHJldkRlbHRhWCA8IDAgJiYgb25Ub2dnbGVYKHNlbGYpO1xuICAgICAgICBwcmV2RGVsdGFYID0gc2VsZi5kZWx0YVg7XG4gICAgICAgIGRlbHRhWFswXSA9IGRlbHRhWFsxXSA9IGRlbHRhWFsyXSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VkWSkge1xuICAgICAgICBvbkRvd24gJiYgc2VsZi5kZWx0YVkgPiAwICYmIG9uRG93bihzZWxmKTtcbiAgICAgICAgb25VcCAmJiBzZWxmLmRlbHRhWSA8IDAgJiYgb25VcChzZWxmKTtcbiAgICAgICAgb25DaGFuZ2VZICYmIG9uQ2hhbmdlWShzZWxmKTtcbiAgICAgICAgb25Ub2dnbGVZICYmIHNlbGYuZGVsdGFZIDwgMCAhPT0gcHJldkRlbHRhWSA8IDAgJiYgb25Ub2dnbGVZKHNlbGYpO1xuICAgICAgICBwcmV2RGVsdGFZID0gc2VsZi5kZWx0YVk7XG4gICAgICAgIGRlbHRhWVswXSA9IGRlbHRhWVsxXSA9IGRlbHRhWVsyXSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb3ZlZCB8fCBkcmFnZ2VkKSB7XG4gICAgICAgIG9uTW92ZSAmJiBvbk1vdmUoc2VsZik7XG5cbiAgICAgICAgaWYgKGRyYWdnZWQpIHtcbiAgICAgICAgICBvbkRyYWcoc2VsZik7XG4gICAgICAgICAgZHJhZ2dlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbW92ZWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgbG9ja2VkICYmICEobG9ja2VkID0gZmFsc2UpICYmIG9uTG9ja0F4aXMgJiYgb25Mb2NrQXhpcyhzZWxmKTtcblxuICAgICAgaWYgKHdoZWVsZWQpIHtcbiAgICAgICAgb25XaGVlbChzZWxmKTtcbiAgICAgICAgd2hlZWxlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZCA9IDA7XG4gICAgfSxcbiAgICAgICAgb25EZWx0YSA9IGZ1bmN0aW9uIG9uRGVsdGEoeCwgeSwgaW5kZXgpIHtcbiAgICAgIGRlbHRhWFtpbmRleF0gKz0geDtcbiAgICAgIGRlbHRhWVtpbmRleF0gKz0geTtcblxuICAgICAgc2VsZi5fdngudXBkYXRlKHgpO1xuXG4gICAgICBzZWxmLl92eS51cGRhdGUoeSk7XG5cbiAgICAgIGRlYm91bmNlID8gaWQgfHwgKGlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZSkpIDogdXBkYXRlKCk7XG4gICAgfSxcbiAgICAgICAgb25Ub3VjaE9yUG9pbnRlckRlbHRhID0gZnVuY3Rpb24gb25Ub3VjaE9yUG9pbnRlckRlbHRhKHgsIHkpIHtcbiAgICAgIGlmIChsb2NrQXhpcyAmJiAhYXhpcykge1xuICAgICAgICBzZWxmLmF4aXMgPSBheGlzID0gTWF0aC5hYnMoeCkgPiBNYXRoLmFicyh5KSA/IFwieFwiIDogXCJ5XCI7XG4gICAgICAgIGxvY2tlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChheGlzICE9PSBcInlcIikge1xuICAgICAgICBkZWx0YVhbMl0gKz0geDtcblxuICAgICAgICBzZWxmLl92eC51cGRhdGUoeCwgdHJ1ZSk7IC8vIHVwZGF0ZSB0aGUgdmVsb2NpdHkgYXMgZnJlcXVlbnRseSBhcyBwb3NzaWJsZSBpbnN0ZWFkIG9mIGluIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gc28gdGhhdCB2ZXJ5IHF1aWNrIHRvdWNoLXNjcm9sbHMgKGZsaWNrcykgZmVlbCBuYXR1cmFsLiBJZiBpdCdzIHRoZSBtb3VzZS90b3VjaC9wb2ludGVyLCBmb3JjZSBpdCBzbyB0aGF0IHdlIGdldCBzbmFwcHkvYWNjdXJhdGUgbW9tZW50dW0gc2Nyb2xsLlxuXG4gICAgICB9XG5cbiAgICAgIGlmIChheGlzICE9PSBcInhcIikge1xuICAgICAgICBkZWx0YVlbMl0gKz0geTtcblxuICAgICAgICBzZWxmLl92eS51cGRhdGUoeSwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGRlYm91bmNlID8gaWQgfHwgKGlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZSkpIDogdXBkYXRlKCk7XG4gICAgfSxcbiAgICAgICAgX29uRHJhZyA9IGZ1bmN0aW9uIF9vbkRyYWcoZSkge1xuICAgICAgaWYgKF9pZ25vcmVDaGVjayhlLCAxKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGUgPSBfZ2V0RXZlbnQoZSwgcHJldmVudERlZmF1bHQpO1xuICAgICAgdmFyIHggPSBlLmNsaWVudFgsXG4gICAgICAgICAgeSA9IGUuY2xpZW50WSxcbiAgICAgICAgICBkeCA9IHggLSBzZWxmLngsXG4gICAgICAgICAgZHkgPSB5IC0gc2VsZi55LFxuICAgICAgICAgIGlzRHJhZ2dpbmcgPSBzZWxmLmlzRHJhZ2dpbmc7XG4gICAgICBzZWxmLnggPSB4O1xuICAgICAgc2VsZi55ID0geTtcblxuICAgICAgaWYgKGlzRHJhZ2dpbmcgfHwgTWF0aC5hYnMoc2VsZi5zdGFydFggLSB4KSA+PSBkcmFnTWluaW11bSB8fCBNYXRoLmFicyhzZWxmLnN0YXJ0WSAtIHkpID49IGRyYWdNaW5pbXVtKSB7XG4gICAgICAgIG9uRHJhZyAmJiAoZHJhZ2dlZCA9IHRydWUpO1xuICAgICAgICBpc0RyYWdnaW5nIHx8IChzZWxmLmlzRHJhZ2dpbmcgPSB0cnVlKTtcbiAgICAgICAgb25Ub3VjaE9yUG9pbnRlckRlbHRhKGR4LCBkeSk7XG4gICAgICAgIGlzRHJhZ2dpbmcgfHwgb25EcmFnU3RhcnQgJiYgb25EcmFnU3RhcnQoc2VsZik7XG4gICAgICB9XG4gICAgfSxcbiAgICAgICAgX29uUHJlc3MgPSBzZWxmLm9uUHJlc3MgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKF9pZ25vcmVDaGVjayhlLCAxKSB8fCBlICYmIGUuYnV0dG9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2VsZi5heGlzID0gYXhpcyA9IG51bGw7XG4gICAgICBvblN0b3BEZWxheWVkQ2FsbC5wYXVzZSgpO1xuICAgICAgc2VsZi5pc1ByZXNzZWQgPSB0cnVlO1xuICAgICAgZSA9IF9nZXRFdmVudChlKTsgLy8gbm90ZTogbWF5IG5lZWQgdG8gcHJldmVudERlZmF1bHQoPykgV29uJ3Qgc2lkZS1zY3JvbGwgb24gaU9TIFNhZmFyaSBpZiB3ZSBkbywgdGhvdWdoLlxuXG4gICAgICBwcmV2RGVsdGFYID0gcHJldkRlbHRhWSA9IDA7XG4gICAgICBzZWxmLnN0YXJ0WCA9IHNlbGYueCA9IGUuY2xpZW50WDtcbiAgICAgIHNlbGYuc3RhcnRZID0gc2VsZi55ID0gZS5jbGllbnRZO1xuXG4gICAgICBzZWxmLl92eC5yZXNldCgpOyAvLyBvdGhlcndpc2UgdGhlIHQyIG1heSBiZSBzdGFsZSBpZiB0aGUgdXNlciB0b3VjaGVzIGFuZCBmbGlja3Mgc3VwZXIgZmFzdCBhbmQgcmVsZWFzZXMgaW4gbGVzcyB0aGFuIDIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRpY2tzLCBjYXVzaW5nIHZlbG9jaXR5IHRvIGJlIDAuXG5cblxuICAgICAgc2VsZi5fdnkucmVzZXQoKTtcblxuICAgICAgX2FkZExpc3RlbmVyKGlzTm9ybWFsaXplciA/IHRhcmdldCA6IG93bmVyRG9jLCBfZXZlbnRUeXBlc1sxXSwgX29uRHJhZywgcHJldmVudERlZmF1bHQsIHRydWUpO1xuXG4gICAgICBzZWxmLmRlbHRhWCA9IHNlbGYuZGVsdGFZID0gMDtcbiAgICAgIG9uUHJlc3MgJiYgb25QcmVzcyhzZWxmKTtcbiAgICB9LFxuICAgICAgICBfb25SZWxlYXNlID0gc2VsZi5vblJlbGVhc2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKF9pZ25vcmVDaGVjayhlLCAxKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF9yZW1vdmVMaXN0ZW5lcihpc05vcm1hbGl6ZXIgPyB0YXJnZXQgOiBvd25lckRvYywgX2V2ZW50VHlwZXNbMV0sIF9vbkRyYWcsIHRydWUpO1xuXG4gICAgICB2YXIgaXNUcmFja2luZ0RyYWcgPSAhaXNOYU4oc2VsZi55IC0gc2VsZi5zdGFydFkpLFxuICAgICAgICAgIHdhc0RyYWdnaW5nID0gc2VsZi5pc0RyYWdnaW5nICYmIChNYXRoLmFicyhzZWxmLnggLSBzZWxmLnN0YXJ0WCkgPiAzIHx8IE1hdGguYWJzKHNlbGYueSAtIHNlbGYuc3RhcnRZKSA+IDMpLFxuICAgICAgICAgIC8vIHNvbWUgdG91Y2ggZGV2aWNlcyBuZWVkIHNvbWUgd2lnZ2xlIHJvb20gaW4gdGVybXMgb2Ygc2Vuc2luZyBjbGlja3MgLSB0aGUgZmluZ2VyIG1heSBtb3ZlIGEgZmV3IHBpeGVscy5cbiAgICAgIGV2ZW50RGF0YSA9IF9nZXRFdmVudChlKTtcblxuICAgICAgaWYgKCF3YXNEcmFnZ2luZyAmJiBpc1RyYWNraW5nRHJhZykge1xuICAgICAgICBzZWxmLl92eC5yZXNldCgpO1xuXG4gICAgICAgIHNlbGYuX3Z5LnJlc2V0KCk7XG5cbiAgICAgICAgaWYgKHByZXZlbnREZWZhdWx0ICYmIGFsbG93Q2xpY2tzKSB7XG4gICAgICAgICAgZ3NhcC5kZWxheWVkQ2FsbCgwLjA4LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBzb21lIGJyb3dzZXJzIChsaWtlIEZpcmVmb3gpIHdvbid0IHRydXN0IHNjcmlwdC1nZW5lcmF0ZWQgY2xpY2tzLCBzbyBpZiB0aGUgdXNlciB0cmllcyB0byBjbGljayBvbiBhIHZpZGVvIHRvIHBsYXkgaXQsIGZvciBleGFtcGxlLCBpdCBzaW1wbHkgd29uJ3Qgd29yay4gU2luY2UgYSByZWd1bGFyIFwiY2xpY2tcIiBldmVudCB3aWxsIG1vc3QgbGlrZWx5IGJlIGdlbmVyYXRlZCBhbnl3YXkgKG9uZSB0aGF0IGhhcyBpdHMgaXNUcnVzdGVkIGZsYWcgc2V0IHRvIHRydWUpLCB3ZSBtdXN0IHNsaWdodGx5IGRlbGF5IG91ciBzY3JpcHQtZ2VuZXJhdGVkIGNsaWNrIHNvIHRoYXQgdGhlIFwicmVhbFwiL3RydXN0ZWQgb25lIGlzIHByaW9yaXRpemVkLiBSZW1lbWJlciwgd2hlbiB0aGVyZSBhcmUgZHVwbGljYXRlIGV2ZW50cyBpbiBxdWljayBzdWNjZXNzaW9uLCB3ZSBzdXBwcmVzcyBhbGwgYnV0IHRoZSBmaXJzdCBvbmUuIFNvbWUgYnJvd3NlcnMgZG9uJ3QgZXZlbiB0cmlnZ2VyIHRoZSBcInJlYWxcIiBvbmUgYXQgYWxsLCBzbyBvdXIgc3ludGhldGljIG9uZSBpcyBhIHNhZmV0eSB2YWx2ZSB0aGF0IGVuc3VyZXMgdGhhdCBubyBtYXR0ZXIgd2hhdCwgYSBjbGljayBldmVudCBkb2VzIGdldCBkaXNwYXRjaGVkLlxuICAgICAgICAgICAgaWYgKF9nZXRUaW1lKCkgLSBvbkNsaWNrVGltZSA+IDMwMCAmJiAhZS5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgIGlmIChlLnRhcmdldC5jbGljaykge1xuICAgICAgICAgICAgICAgIC8vc29tZSBicm93c2VycyAobGlrZSBtb2JpbGUgU2FmYXJpKSBkb24ndCBwcm9wZXJseSB0cmlnZ2VyIHRoZSBjbGljayBldmVudFxuICAgICAgICAgICAgICAgIGUudGFyZ2V0LmNsaWNrKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAob3duZXJEb2MuY3JlYXRlRXZlbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3ludGhldGljRXZlbnQgPSBvd25lckRvYy5jcmVhdGVFdmVudChcIk1vdXNlRXZlbnRzXCIpO1xuICAgICAgICAgICAgICAgIHN5bnRoZXRpY0V2ZW50LmluaXRNb3VzZUV2ZW50KFwiY2xpY2tcIiwgdHJ1ZSwgdHJ1ZSwgX3dpbiwgMSwgZXZlbnREYXRhLnNjcmVlblgsIGV2ZW50RGF0YS5zY3JlZW5ZLCBldmVudERhdGEuY2xpZW50WCwgZXZlbnREYXRhLmNsaWVudFksIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCBudWxsKTtcbiAgICAgICAgICAgICAgICBlLnRhcmdldC5kaXNwYXRjaEV2ZW50KHN5bnRoZXRpY0V2ZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNlbGYuaXNEcmFnZ2luZyA9IHNlbGYuaXNHZXN0dXJpbmcgPSBzZWxmLmlzUHJlc3NlZCA9IGZhbHNlO1xuICAgICAgb25TdG9wICYmICFpc05vcm1hbGl6ZXIgJiYgb25TdG9wRGVsYXllZENhbGwucmVzdGFydCh0cnVlKTtcbiAgICAgIG9uRHJhZ0VuZCAmJiB3YXNEcmFnZ2luZyAmJiBvbkRyYWdFbmQoc2VsZik7XG4gICAgICBvblJlbGVhc2UgJiYgb25SZWxlYXNlKHNlbGYsIHdhc0RyYWdnaW5nKTtcbiAgICB9LFxuICAgICAgICBfb25HZXN0dXJlU3RhcnQgPSBmdW5jdGlvbiBfb25HZXN0dXJlU3RhcnQoZSkge1xuICAgICAgcmV0dXJuIGUudG91Y2hlcyAmJiBlLnRvdWNoZXMubGVuZ3RoID4gMSAmJiAoc2VsZi5pc0dlc3R1cmluZyA9IHRydWUpICYmIG9uR2VzdHVyZVN0YXJ0KGUsIHNlbGYuaXNEcmFnZ2luZyk7XG4gICAgfSxcbiAgICAgICAgX29uR2VzdHVyZUVuZCA9IGZ1bmN0aW9uIF9vbkdlc3R1cmVFbmQoKSB7XG4gICAgICByZXR1cm4gKHNlbGYuaXNHZXN0dXJpbmcgPSBmYWxzZSkgfHwgb25HZXN0dXJlRW5kKHNlbGYpO1xuICAgIH0sXG4gICAgICAgIG9uU2Nyb2xsID0gZnVuY3Rpb24gb25TY3JvbGwoZSkge1xuICAgICAgaWYgKF9pZ25vcmVDaGVjayhlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB4ID0gc2Nyb2xsRnVuY1goKSxcbiAgICAgICAgICB5ID0gc2Nyb2xsRnVuY1koKTtcbiAgICAgIG9uRGVsdGEoKHggLSBzY3JvbGxYKSAqIHNjcm9sbFNwZWVkLCAoeSAtIHNjcm9sbFkpICogc2Nyb2xsU3BlZWQsIDEpO1xuICAgICAgc2Nyb2xsWCA9IHg7XG4gICAgICBzY3JvbGxZID0geTtcbiAgICAgIG9uU3RvcCAmJiBvblN0b3BEZWxheWVkQ2FsbC5yZXN0YXJ0KHRydWUpO1xuICAgIH0sXG4gICAgICAgIF9vbldoZWVsID0gZnVuY3Rpb24gX29uV2hlZWwoZSkge1xuICAgICAgaWYgKF9pZ25vcmVDaGVjayhlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGUgPSBfZ2V0RXZlbnQoZSwgcHJldmVudERlZmF1bHQpO1xuICAgICAgb25XaGVlbCAmJiAod2hlZWxlZCA9IHRydWUpO1xuICAgICAgdmFyIG11bHRpcGxpZXIgPSAoZS5kZWx0YU1vZGUgPT09IDEgPyBsaW5lSGVpZ2h0IDogZS5kZWx0YU1vZGUgPT09IDIgPyBfd2luLmlubmVySGVpZ2h0IDogMSkgKiB3aGVlbFNwZWVkO1xuICAgICAgb25EZWx0YShlLmRlbHRhWCAqIG11bHRpcGxpZXIsIGUuZGVsdGFZICogbXVsdGlwbGllciwgMCk7XG4gICAgICBvblN0b3AgJiYgIWlzTm9ybWFsaXplciAmJiBvblN0b3BEZWxheWVkQ2FsbC5yZXN0YXJ0KHRydWUpO1xuICAgIH0sXG4gICAgICAgIF9vbk1vdmUgPSBmdW5jdGlvbiBfb25Nb3ZlKGUpIHtcbiAgICAgIGlmIChfaWdub3JlQ2hlY2soZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgeCA9IGUuY2xpZW50WCxcbiAgICAgICAgICB5ID0gZS5jbGllbnRZLFxuICAgICAgICAgIGR4ID0geCAtIHNlbGYueCxcbiAgICAgICAgICBkeSA9IHkgLSBzZWxmLnk7XG4gICAgICBzZWxmLnggPSB4O1xuICAgICAgc2VsZi55ID0geTtcbiAgICAgIG1vdmVkID0gdHJ1ZTtcbiAgICAgIChkeCB8fCBkeSkgJiYgb25Ub3VjaE9yUG9pbnRlckRlbHRhKGR4LCBkeSk7XG4gICAgfSxcbiAgICAgICAgX29uSG92ZXIgPSBmdW5jdGlvbiBfb25Ib3ZlcihlKSB7XG4gICAgICBzZWxmLmV2ZW50ID0gZTtcbiAgICAgIG9uSG92ZXIoc2VsZik7XG4gICAgfSxcbiAgICAgICAgX29uSG92ZXJFbmQgPSBmdW5jdGlvbiBfb25Ib3ZlckVuZChlKSB7XG4gICAgICBzZWxmLmV2ZW50ID0gZTtcbiAgICAgIG9uSG92ZXJFbmQoc2VsZik7XG4gICAgfSxcbiAgICAgICAgX29uQ2xpY2sgPSBmdW5jdGlvbiBfb25DbGljayhlKSB7XG4gICAgICByZXR1cm4gX2lnbm9yZUNoZWNrKGUpIHx8IF9nZXRFdmVudChlLCBwcmV2ZW50RGVmYXVsdCkgJiYgb25DbGljayhzZWxmKTtcbiAgICB9O1xuXG4gICAgb25TdG9wRGVsYXllZENhbGwgPSBzZWxmLl9kYyA9IGdzYXAuZGVsYXllZENhbGwob25TdG9wRGVsYXkgfHwgMC4yNSwgb25TdG9wRnVuYykucGF1c2UoKTtcbiAgICBzZWxmLmRlbHRhWCA9IHNlbGYuZGVsdGFZID0gMDtcbiAgICBzZWxmLl92eCA9IF9nZXRWZWxvY2l0eVByb3AoMCwgNTAsIHRydWUpO1xuICAgIHNlbGYuX3Z5ID0gX2dldFZlbG9jaXR5UHJvcCgwLCA1MCwgdHJ1ZSk7XG4gICAgc2VsZi5zY3JvbGxYID0gc2Nyb2xsRnVuY1g7XG4gICAgc2VsZi5zY3JvbGxZID0gc2Nyb2xsRnVuY1k7XG4gICAgc2VsZi5pc0RyYWdnaW5nID0gc2VsZi5pc0dlc3R1cmluZyA9IHNlbGYuaXNQcmVzc2VkID0gZmFsc2U7XG5cbiAgICBfY29udGV4dCh0aGlzKTtcblxuICAgIHNlbGYuZW5hYmxlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmICghc2VsZi5pc0VuYWJsZWQpIHtcbiAgICAgICAgX2FkZExpc3RlbmVyKGlzVmlld3BvcnQgPyBvd25lckRvYyA6IHRhcmdldCwgXCJzY3JvbGxcIiwgX29uU2Nyb2xsKTtcblxuICAgICAgICB0eXBlLmluZGV4T2YoXCJzY3JvbGxcIikgPj0gMCAmJiBfYWRkTGlzdGVuZXIoaXNWaWV3cG9ydCA/IG93bmVyRG9jIDogdGFyZ2V0LCBcInNjcm9sbFwiLCBvblNjcm9sbCwgcHJldmVudERlZmF1bHQsIGNhcHR1cmUpO1xuICAgICAgICB0eXBlLmluZGV4T2YoXCJ3aGVlbFwiKSA+PSAwICYmIF9hZGRMaXN0ZW5lcih0YXJnZXQsIFwid2hlZWxcIiwgX29uV2hlZWwsIHByZXZlbnREZWZhdWx0LCBjYXB0dXJlKTtcblxuICAgICAgICBpZiAodHlwZS5pbmRleE9mKFwidG91Y2hcIikgPj0gMCAmJiBfaXNUb3VjaCB8fCB0eXBlLmluZGV4T2YoXCJwb2ludGVyXCIpID49IDApIHtcbiAgICAgICAgICBfYWRkTGlzdGVuZXIodGFyZ2V0LCBfZXZlbnRUeXBlc1swXSwgX29uUHJlc3MsIHByZXZlbnREZWZhdWx0LCBjYXB0dXJlKTtcblxuICAgICAgICAgIF9hZGRMaXN0ZW5lcihvd25lckRvYywgX2V2ZW50VHlwZXNbMl0sIF9vblJlbGVhc2UpO1xuXG4gICAgICAgICAgX2FkZExpc3RlbmVyKG93bmVyRG9jLCBfZXZlbnRUeXBlc1szXSwgX29uUmVsZWFzZSk7XG5cbiAgICAgICAgICBhbGxvd0NsaWNrcyAmJiBfYWRkTGlzdGVuZXIodGFyZ2V0LCBcImNsaWNrXCIsIGNsaWNrQ2FwdHVyZSwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgIG9uQ2xpY2sgJiYgX2FkZExpc3RlbmVyKHRhcmdldCwgXCJjbGlja1wiLCBfb25DbGljayk7XG4gICAgICAgICAgb25HZXN0dXJlU3RhcnQgJiYgX2FkZExpc3RlbmVyKG93bmVyRG9jLCBcImdlc3R1cmVzdGFydFwiLCBfb25HZXN0dXJlU3RhcnQpO1xuICAgICAgICAgIG9uR2VzdHVyZUVuZCAmJiBfYWRkTGlzdGVuZXIob3duZXJEb2MsIFwiZ2VzdHVyZWVuZFwiLCBfb25HZXN0dXJlRW5kKTtcbiAgICAgICAgICBvbkhvdmVyICYmIF9hZGRMaXN0ZW5lcih0YXJnZXQsIF9wb2ludGVyVHlwZSArIFwiZW50ZXJcIiwgX29uSG92ZXIpO1xuICAgICAgICAgIG9uSG92ZXJFbmQgJiYgX2FkZExpc3RlbmVyKHRhcmdldCwgX3BvaW50ZXJUeXBlICsgXCJsZWF2ZVwiLCBfb25Ib3ZlckVuZCk7XG4gICAgICAgICAgb25Nb3ZlICYmIF9hZGRMaXN0ZW5lcih0YXJnZXQsIF9wb2ludGVyVHlwZSArIFwibW92ZVwiLCBfb25Nb3ZlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuaXNFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgZSAmJiBlLnR5cGUgJiYgX29uUHJlc3MoZSk7XG4gICAgICAgIG9uRW5hYmxlICYmIG9uRW5hYmxlKHNlbGYpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuXG4gICAgc2VsZi5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHNlbGYuaXNFbmFibGVkKSB7XG4gICAgICAgIC8vIG9ubHkgcmVtb3ZlIHRoZSBfb25TY3JvbGwgbGlzdGVuZXIgaWYgdGhlcmUgYXJlbid0IGFueSBvdGhlcnMgdGhhdCByZWx5IG9uIHRoZSBmdW5jdGlvbmFsaXR5LlxuICAgICAgICBfb2JzZXJ2ZXJzLmZpbHRlcihmdW5jdGlvbiAobykge1xuICAgICAgICAgIHJldHVybiBvICE9PSBzZWxmICYmIF9pc1ZpZXdwb3J0KG8udGFyZ2V0KTtcbiAgICAgICAgfSkubGVuZ3RoIHx8IF9yZW1vdmVMaXN0ZW5lcihpc1ZpZXdwb3J0ID8gb3duZXJEb2MgOiB0YXJnZXQsIFwic2Nyb2xsXCIsIF9vblNjcm9sbCk7XG5cbiAgICAgICAgaWYgKHNlbGYuaXNQcmVzc2VkKSB7XG4gICAgICAgICAgc2VsZi5fdngucmVzZXQoKTtcblxuICAgICAgICAgIHNlbGYuX3Z5LnJlc2V0KCk7XG5cbiAgICAgICAgICBfcmVtb3ZlTGlzdGVuZXIoaXNOb3JtYWxpemVyID8gdGFyZ2V0IDogb3duZXJEb2MsIF9ldmVudFR5cGVzWzFdLCBfb25EcmFnLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF9yZW1vdmVMaXN0ZW5lcihpc1ZpZXdwb3J0ID8gb3duZXJEb2MgOiB0YXJnZXQsIFwic2Nyb2xsXCIsIG9uU2Nyb2xsLCBjYXB0dXJlKTtcblxuICAgICAgICBfcmVtb3ZlTGlzdGVuZXIodGFyZ2V0LCBcIndoZWVsXCIsIF9vbldoZWVsLCBjYXB0dXJlKTtcblxuICAgICAgICBfcmVtb3ZlTGlzdGVuZXIodGFyZ2V0LCBfZXZlbnRUeXBlc1swXSwgX29uUHJlc3MsIGNhcHR1cmUpO1xuXG4gICAgICAgIF9yZW1vdmVMaXN0ZW5lcihvd25lckRvYywgX2V2ZW50VHlwZXNbMl0sIF9vblJlbGVhc2UpO1xuXG4gICAgICAgIF9yZW1vdmVMaXN0ZW5lcihvd25lckRvYywgX2V2ZW50VHlwZXNbM10sIF9vblJlbGVhc2UpO1xuXG4gICAgICAgIF9yZW1vdmVMaXN0ZW5lcih0YXJnZXQsIFwiY2xpY2tcIiwgY2xpY2tDYXB0dXJlLCB0cnVlKTtcblxuICAgICAgICBfcmVtb3ZlTGlzdGVuZXIodGFyZ2V0LCBcImNsaWNrXCIsIF9vbkNsaWNrKTtcblxuICAgICAgICBfcmVtb3ZlTGlzdGVuZXIob3duZXJEb2MsIFwiZ2VzdHVyZXN0YXJ0XCIsIF9vbkdlc3R1cmVTdGFydCk7XG5cbiAgICAgICAgX3JlbW92ZUxpc3RlbmVyKG93bmVyRG9jLCBcImdlc3R1cmVlbmRcIiwgX29uR2VzdHVyZUVuZCk7XG5cbiAgICAgICAgX3JlbW92ZUxpc3RlbmVyKHRhcmdldCwgX3BvaW50ZXJUeXBlICsgXCJlbnRlclwiLCBfb25Ib3Zlcik7XG5cbiAgICAgICAgX3JlbW92ZUxpc3RlbmVyKHRhcmdldCwgX3BvaW50ZXJUeXBlICsgXCJsZWF2ZVwiLCBfb25Ib3ZlckVuZCk7XG5cbiAgICAgICAgX3JlbW92ZUxpc3RlbmVyKHRhcmdldCwgX3BvaW50ZXJUeXBlICsgXCJtb3ZlXCIsIF9vbk1vdmUpO1xuXG4gICAgICAgIHNlbGYuaXNFbmFibGVkID0gc2VsZi5pc1ByZXNzZWQgPSBzZWxmLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgb25EaXNhYmxlICYmIG9uRGlzYWJsZShzZWxmKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2VsZi5raWxsID0gc2VsZi5yZXZlcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLmRpc2FibGUoKTtcblxuICAgICAgdmFyIGkgPSBfb2JzZXJ2ZXJzLmluZGV4T2Yoc2VsZik7XG5cbiAgICAgIGkgPj0gMCAmJiBfb2JzZXJ2ZXJzLnNwbGljZShpLCAxKTtcbiAgICAgIF9ub3JtYWxpemVyID09PSBzZWxmICYmIChfbm9ybWFsaXplciA9IDApO1xuICAgIH07XG5cbiAgICBfb2JzZXJ2ZXJzLnB1c2goc2VsZik7XG5cbiAgICBpc05vcm1hbGl6ZXIgJiYgX2lzVmlld3BvcnQodGFyZ2V0KSAmJiAoX25vcm1hbGl6ZXIgPSBzZWxmKTtcbiAgICBzZWxmLmVuYWJsZShldmVudCk7XG4gIH07XG5cbiAgX2NyZWF0ZUNsYXNzKE9ic2VydmVyLCBbe1xuICAgIGtleTogXCJ2ZWxvY2l0eVhcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl92eC5nZXRWZWxvY2l0eSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2ZWxvY2l0eVlcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl92eS5nZXRWZWxvY2l0eSgpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBPYnNlcnZlcjtcbn0oKTtcbk9ic2VydmVyLnZlcnNpb24gPSBcIjMuMTIuMlwiO1xuXG5PYnNlcnZlci5jcmVhdGUgPSBmdW5jdGlvbiAodmFycykge1xuICByZXR1cm4gbmV3IE9ic2VydmVyKHZhcnMpO1xufTtcblxuT2JzZXJ2ZXIucmVnaXN0ZXIgPSBfaW5pdENvcmU7XG5cbk9ic2VydmVyLmdldEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9vYnNlcnZlcnMuc2xpY2UoKTtcbn07XG5cbk9ic2VydmVyLmdldEJ5SWQgPSBmdW5jdGlvbiAoaWQpIHtcbiAgcmV0dXJuIF9vYnNlcnZlcnMuZmlsdGVyKGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8udmFycy5pZCA9PT0gaWQ7XG4gIH0pWzBdO1xufTtcblxuX2dldEdTQVAoKSAmJiBnc2FwLnJlZ2lzdGVyUGx1Z2luKE9ic2VydmVyKTtcbmV4cG9ydCB7IE9ic2VydmVyIGFzIGRlZmF1bHQsIF9pc1ZpZXdwb3J0LCBfc2Nyb2xsZXJzLCBfZ2V0U2Nyb2xsRnVuYywgX2dldFByb3h5UHJvcCwgX3Byb3hpZXMsIF9nZXRWZWxvY2l0eVByb3AsIF92ZXJ0aWNhbCwgX2hvcml6b250YWwsIF9nZXRUYXJnZXQgfTsiLCIvKiFcbiAqIFNjcm9sbFRyaWdnZXIgMy4xMi4yXG4gKiBodHRwczovL2dyZWVuc29jay5jb21cbiAqXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgMjAwOC0yMDIzLCBHcmVlblNvY2suIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhdCBodHRwczovL2dyZWVuc29jay5jb20vc3RhbmRhcmQtbGljZW5zZSBvciBmb3JcbiAqIENsdWIgR3JlZW5Tb2NrIG1lbWJlcnMsIHRoZSBhZ3JlZW1lbnQgaXNzdWVkIHdpdGggdGhhdCBtZW1iZXJzaGlwLlxuICogQGF1dGhvcjogSmFjayBEb3lsZSwgamFja0BncmVlbnNvY2suY29tXG4qL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgT2JzZXJ2ZXIsIF9nZXRUYXJnZXQsIF92ZXJ0aWNhbCwgX2hvcml6b250YWwsIF9zY3JvbGxlcnMsIF9wcm94aWVzLCBfZ2V0U2Nyb2xsRnVuYywgX2dldFByb3h5UHJvcCwgX2dldFZlbG9jaXR5UHJvcCB9IGZyb20gXCIuL09ic2VydmVyLmpzXCI7XG5cbnZhciBnc2FwLFxuICAgIF9jb3JlSW5pdHRlZCxcbiAgICBfd2luLFxuICAgIF9kb2MsXG4gICAgX2RvY0VsLFxuICAgIF9ib2R5LFxuICAgIF9yb290LFxuICAgIF9yZXNpemVEZWxheSxcbiAgICBfdG9BcnJheSxcbiAgICBfY2xhbXAsXG4gICAgX3RpbWUyLFxuICAgIF9zeW5jSW50ZXJ2YWwsXG4gICAgX3JlZnJlc2hpbmcsXG4gICAgX3BvaW50ZXJJc0Rvd24sXG4gICAgX3RyYW5zZm9ybVByb3AsXG4gICAgX2ksXG4gICAgX3ByZXZXaWR0aCxcbiAgICBfcHJldkhlaWdodCxcbiAgICBfYXV0b1JlZnJlc2gsXG4gICAgX3NvcnQsXG4gICAgX3N1cHByZXNzT3ZlcndyaXRlcyxcbiAgICBfaWdub3JlUmVzaXplLFxuICAgIF9ub3JtYWxpemVyLFxuICAgIF9pZ25vcmVNb2JpbGVSZXNpemUsXG4gICAgX2Jhc2VTY3JlZW5IZWlnaHQsXG4gICAgX2Jhc2VTY3JlZW5XaWR0aCxcbiAgICBfZml4SU9TQnVnLFxuICAgIF9jb250ZXh0LFxuICAgIF9zY3JvbGxSZXN0b3JhdGlvbixcbiAgICBfZGl2MTAwdmgsXG4gICAgXzEwMHZoLFxuICAgIF9saW1pdENhbGxiYWNrcyxcbiAgICAvLyBpZiB0cnVlLCB3ZSdsbCBvbmx5IHRyaWdnZXIgY2FsbGJhY2tzIGlmIHRoZSBhY3RpdmUgc3RhdGUgdG9nZ2xlcywgc28gaWYgeW91IHNjcm9sbCBpbW1lZGlhdGVseSBwYXN0IGJvdGggdGhlIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIG9mIGEgU2Nyb2xsVHJpZ2dlciAodGh1cyBpbmFjdGl2ZSB0byBpbmFjdGl2ZSksIG5laXRoZXIgaXRzIG9uRW50ZXIgbm9yIG9uTGVhdmUgd2lsbCBiZSBjYWxsZWQuIFRoaXMgaXMgdXNlZnVsIGR1cmluZyBzdGFydHVwLlxuX3N0YXJ0dXAgPSAxLFxuICAgIF9nZXRUaW1lID0gRGF0ZS5ub3csXG4gICAgX3RpbWUxID0gX2dldFRpbWUoKSxcbiAgICBfbGFzdFNjcm9sbFRpbWUgPSAwLFxuICAgIF9lbmFibGVkID0gMCxcbiAgICBfcGFyc2VDbGFtcCA9IGZ1bmN0aW9uIF9wYXJzZUNsYW1wKHZhbHVlLCB0eXBlLCBzZWxmKSB7XG4gIHZhciBjbGFtcCA9IF9pc1N0cmluZyh2YWx1ZSkgJiYgKHZhbHVlLnN1YnN0cigwLCA2KSA9PT0gXCJjbGFtcChcIiB8fCB2YWx1ZS5pbmRleE9mKFwibWF4XCIpID4gLTEpO1xuICBzZWxmW1wiX1wiICsgdHlwZSArIFwiQ2xhbXBcIl0gPSBjbGFtcDtcbiAgcmV0dXJuIGNsYW1wID8gdmFsdWUuc3Vic3RyKDYsIHZhbHVlLmxlbmd0aCAtIDcpIDogdmFsdWU7XG59LFxuICAgIF9rZWVwQ2xhbXAgPSBmdW5jdGlvbiBfa2VlcENsYW1wKHZhbHVlLCBjbGFtcCkge1xuICByZXR1cm4gY2xhbXAgJiYgKCFfaXNTdHJpbmcodmFsdWUpIHx8IHZhbHVlLnN1YnN0cigwLCA2KSAhPT0gXCJjbGFtcChcIikgPyBcImNsYW1wKFwiICsgdmFsdWUgKyBcIilcIiA6IHZhbHVlO1xufSxcbiAgICBfcmFmQnVnRml4ID0gZnVuY3Rpb24gX3JhZkJ1Z0ZpeCgpIHtcbiAgcmV0dXJuIF9lbmFibGVkICYmIHJlcXVlc3RBbmltYXRpb25GcmFtZShfcmFmQnVnRml4KTtcbn0sXG4gICAgLy8gaW4gc29tZSBicm93c2VycyAobGlrZSBGaXJlZm94KSwgc2NyZWVuIHJlcGFpbnRzIHdlcmVuJ3QgY29uc2lzdGVudCB1bmxlc3Mgd2UgaGFkIFNPTUVUSElORyBxdWV1ZWQgdXAgaW4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkhIFNvIHRoaXMganVzdCBjcmVhdGVzIGEgc3VwZXIgc2ltcGxlIGxvb3AgdG8ga2VlcCBpdCBhbGl2ZSBhbmQgc21vb3RoIG91dCByZXBhaW50cy5cbl9wb2ludGVyRG93bkhhbmRsZXIgPSBmdW5jdGlvbiBfcG9pbnRlckRvd25IYW5kbGVyKCkge1xuICByZXR1cm4gX3BvaW50ZXJJc0Rvd24gPSAxO1xufSxcbiAgICBfcG9pbnRlclVwSGFuZGxlciA9IGZ1bmN0aW9uIF9wb2ludGVyVXBIYW5kbGVyKCkge1xuICByZXR1cm4gX3BvaW50ZXJJc0Rvd24gPSAwO1xufSxcbiAgICBfcGFzc1Rocm91Z2ggPSBmdW5jdGlvbiBfcGFzc1Rocm91Z2godikge1xuICByZXR1cm4gdjtcbn0sXG4gICAgX3JvdW5kID0gZnVuY3Rpb24gX3JvdW5kKHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogMTAwMDAwKSAvIDEwMDAwMCB8fCAwO1xufSxcbiAgICBfd2luZG93RXhpc3RzID0gZnVuY3Rpb24gX3dpbmRvd0V4aXN0cygpIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCI7XG59LFxuICAgIF9nZXRHU0FQID0gZnVuY3Rpb24gX2dldEdTQVAoKSB7XG4gIHJldHVybiBnc2FwIHx8IF93aW5kb3dFeGlzdHMoKSAmJiAoZ3NhcCA9IHdpbmRvdy5nc2FwKSAmJiBnc2FwLnJlZ2lzdGVyUGx1Z2luICYmIGdzYXA7XG59LFxuICAgIF9pc1ZpZXdwb3J0ID0gZnVuY3Rpb24gX2lzVmlld3BvcnQoZSkge1xuICByZXR1cm4gISF+X3Jvb3QuaW5kZXhPZihlKTtcbn0sXG4gICAgX2dldFZpZXdwb3J0RGltZW5zaW9uID0gZnVuY3Rpb24gX2dldFZpZXdwb3J0RGltZW5zaW9uKGRpbWVuc2lvblByb3BlcnR5KSB7XG4gIHJldHVybiAoZGltZW5zaW9uUHJvcGVydHkgPT09IFwiSGVpZ2h0XCIgPyBfMTAwdmggOiBfd2luW1wiaW5uZXJcIiArIGRpbWVuc2lvblByb3BlcnR5XSkgfHwgX2RvY0VsW1wiY2xpZW50XCIgKyBkaW1lbnNpb25Qcm9wZXJ0eV0gfHwgX2JvZHlbXCJjbGllbnRcIiArIGRpbWVuc2lvblByb3BlcnR5XTtcbn0sXG4gICAgX2dldEJvdW5kc0Z1bmMgPSBmdW5jdGlvbiBfZ2V0Qm91bmRzRnVuYyhlbGVtZW50KSB7XG4gIHJldHVybiBfZ2V0UHJveHlQcm9wKGVsZW1lbnQsIFwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0XCIpIHx8IChfaXNWaWV3cG9ydChlbGVtZW50KSA/IGZ1bmN0aW9uICgpIHtcbiAgICBfd2luT2Zmc2V0cy53aWR0aCA9IF93aW4uaW5uZXJXaWR0aDtcbiAgICBfd2luT2Zmc2V0cy5oZWlnaHQgPSBfMTAwdmg7XG4gICAgcmV0dXJuIF93aW5PZmZzZXRzO1xuICB9IDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZ2V0Qm91bmRzKGVsZW1lbnQpO1xuICB9KTtcbn0sXG4gICAgX2dldFNpemVGdW5jID0gZnVuY3Rpb24gX2dldFNpemVGdW5jKHNjcm9sbGVyLCBpc1ZpZXdwb3J0LCBfcmVmKSB7XG4gIHZhciBkID0gX3JlZi5kLFxuICAgICAgZDIgPSBfcmVmLmQyLFxuICAgICAgYSA9IF9yZWYuYTtcbiAgcmV0dXJuIChhID0gX2dldFByb3h5UHJvcChzY3JvbGxlciwgXCJnZXRCb3VuZGluZ0NsaWVudFJlY3RcIikpID8gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBhKClbZF07XG4gIH0gOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIChpc1ZpZXdwb3J0ID8gX2dldFZpZXdwb3J0RGltZW5zaW9uKGQyKSA6IHNjcm9sbGVyW1wiY2xpZW50XCIgKyBkMl0pIHx8IDA7XG4gIH07XG59LFxuICAgIF9nZXRPZmZzZXRzRnVuYyA9IGZ1bmN0aW9uIF9nZXRPZmZzZXRzRnVuYyhlbGVtZW50LCBpc1ZpZXdwb3J0KSB7XG4gIHJldHVybiAhaXNWaWV3cG9ydCB8fCB+X3Byb3hpZXMuaW5kZXhPZihlbGVtZW50KSA/IF9nZXRCb3VuZHNGdW5jKGVsZW1lbnQpIDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfd2luT2Zmc2V0cztcbiAgfTtcbn0sXG4gICAgX21heFNjcm9sbCA9IGZ1bmN0aW9uIF9tYXhTY3JvbGwoZWxlbWVudCwgX3JlZjIpIHtcbiAgdmFyIHMgPSBfcmVmMi5zLFxuICAgICAgZDIgPSBfcmVmMi5kMixcbiAgICAgIGQgPSBfcmVmMi5kLFxuICAgICAgYSA9IF9yZWYyLmE7XG4gIHJldHVybiBNYXRoLm1heCgwLCAocyA9IFwic2Nyb2xsXCIgKyBkMikgJiYgKGEgPSBfZ2V0UHJveHlQcm9wKGVsZW1lbnQsIHMpKSA/IGEoKSAtIF9nZXRCb3VuZHNGdW5jKGVsZW1lbnQpKClbZF0gOiBfaXNWaWV3cG9ydChlbGVtZW50KSA/IChfZG9jRWxbc10gfHwgX2JvZHlbc10pIC0gX2dldFZpZXdwb3J0RGltZW5zaW9uKGQyKSA6IGVsZW1lbnRbc10gLSBlbGVtZW50W1wib2Zmc2V0XCIgKyBkMl0pO1xufSxcbiAgICBfaXRlcmF0ZUF1dG9SZWZyZXNoID0gZnVuY3Rpb24gX2l0ZXJhdGVBdXRvUmVmcmVzaChmdW5jLCBldmVudHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBfYXV0b1JlZnJlc2gubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAoIWV2ZW50cyB8fCB+ZXZlbnRzLmluZGV4T2YoX2F1dG9SZWZyZXNoW2kgKyAxXSkpICYmIGZ1bmMoX2F1dG9SZWZyZXNoW2ldLCBfYXV0b1JlZnJlc2hbaSArIDFdLCBfYXV0b1JlZnJlc2hbaSArIDJdKTtcbiAgfVxufSxcbiAgICBfaXNTdHJpbmcgPSBmdW5jdGlvbiBfaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIjtcbn0sXG4gICAgX2lzRnVuY3Rpb24gPSBmdW5jdGlvbiBfaXNGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCI7XG59LFxuICAgIF9pc051bWJlciA9IGZ1bmN0aW9uIF9pc051bWJlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xufSxcbiAgICBfaXNPYmplY3QgPSBmdW5jdGlvbiBfaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIjtcbn0sXG4gICAgX2VuZEFuaW1hdGlvbiA9IGZ1bmN0aW9uIF9lbmRBbmltYXRpb24oYW5pbWF0aW9uLCByZXZlcnNlZCwgcGF1c2UpIHtcbiAgcmV0dXJuIGFuaW1hdGlvbiAmJiBhbmltYXRpb24ucHJvZ3Jlc3MocmV2ZXJzZWQgPyAwIDogMSkgJiYgcGF1c2UgJiYgYW5pbWF0aW9uLnBhdXNlKCk7XG59LFxuICAgIF9jYWxsYmFjayA9IGZ1bmN0aW9uIF9jYWxsYmFjayhzZWxmLCBmdW5jKSB7XG4gIGlmIChzZWxmLmVuYWJsZWQpIHtcbiAgICB2YXIgcmVzdWx0ID0gZnVuYyhzZWxmKTtcbiAgICByZXN1bHQgJiYgcmVzdWx0LnRvdGFsVGltZSAmJiAoc2VsZi5jYWxsYmFja0FuaW1hdGlvbiA9IHJlc3VsdCk7XG4gIH1cbn0sXG4gICAgX2FicyA9IE1hdGguYWJzLFxuICAgIF9sZWZ0ID0gXCJsZWZ0XCIsXG4gICAgX3RvcCA9IFwidG9wXCIsXG4gICAgX3JpZ2h0ID0gXCJyaWdodFwiLFxuICAgIF9ib3R0b20gPSBcImJvdHRvbVwiLFxuICAgIF93aWR0aCA9IFwid2lkdGhcIixcbiAgICBfaGVpZ2h0ID0gXCJoZWlnaHRcIixcbiAgICBfUmlnaHQgPSBcIlJpZ2h0XCIsXG4gICAgX0xlZnQgPSBcIkxlZnRcIixcbiAgICBfVG9wID0gXCJUb3BcIixcbiAgICBfQm90dG9tID0gXCJCb3R0b21cIixcbiAgICBfcGFkZGluZyA9IFwicGFkZGluZ1wiLFxuICAgIF9tYXJnaW4gPSBcIm1hcmdpblwiLFxuICAgIF9XaWR0aCA9IFwiV2lkdGhcIixcbiAgICBfSGVpZ2h0ID0gXCJIZWlnaHRcIixcbiAgICBfcHggPSBcInB4XCIsXG4gICAgX2dldENvbXB1dGVkU3R5bGUgPSBmdW5jdGlvbiBfZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBfd2luLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59LFxuICAgIF9tYWtlUG9zaXRpb25hYmxlID0gZnVuY3Rpb24gX21ha2VQb3NpdGlvbmFibGUoZWxlbWVudCkge1xuICAvLyBpZiB0aGUgZWxlbWVudCBhbHJlYWR5IGhhcyBwb3NpdGlvbjogYWJzb2x1dGUgb3IgZml4ZWQsIGxlYXZlIHRoYXQsIG90aGVyd2lzZSBtYWtlIGl0IHBvc2l0aW9uOiByZWxhdGl2ZVxuICB2YXIgcG9zaXRpb24gPSBfZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbjtcblxuICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiID8gcG9zaXRpb24gOiBcInJlbGF0aXZlXCI7XG59LFxuICAgIF9zZXREZWZhdWx0cyA9IGZ1bmN0aW9uIF9zZXREZWZhdWx0cyhvYmosIGRlZmF1bHRzKSB7XG4gIGZvciAodmFyIHAgaW4gZGVmYXVsdHMpIHtcbiAgICBwIGluIG9iaiB8fCAob2JqW3BdID0gZGVmYXVsdHNbcF0pO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn0sXG4gICAgX2dldEJvdW5kcyA9IGZ1bmN0aW9uIF9nZXRCb3VuZHMoZWxlbWVudCwgd2l0aG91dFRyYW5zZm9ybXMpIHtcbiAgdmFyIHR3ZWVuID0gd2l0aG91dFRyYW5zZm9ybXMgJiYgX2dldENvbXB1dGVkU3R5bGUoZWxlbWVudClbX3RyYW5zZm9ybVByb3BdICE9PSBcIm1hdHJpeCgxLCAwLCAwLCAxLCAwLCAwKVwiICYmIGdzYXAudG8oZWxlbWVudCwge1xuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgICB4UGVyY2VudDogMCxcbiAgICB5UGVyY2VudDogMCxcbiAgICByb3RhdGlvbjogMCxcbiAgICByb3RhdGlvblg6IDAsXG4gICAgcm90YXRpb25ZOiAwLFxuICAgIHNjYWxlOiAxLFxuICAgIHNrZXdYOiAwLFxuICAgIHNrZXdZOiAwXG4gIH0pLnByb2dyZXNzKDEpLFxuICAgICAgYm91bmRzID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdHdlZW4gJiYgdHdlZW4ucHJvZ3Jlc3MoMCkua2lsbCgpO1xuICByZXR1cm4gYm91bmRzO1xufSxcbiAgICBfZ2V0U2l6ZSA9IGZ1bmN0aW9uIF9nZXRTaXplKGVsZW1lbnQsIF9yZWYzKSB7XG4gIHZhciBkMiA9IF9yZWYzLmQyO1xuICByZXR1cm4gZWxlbWVudFtcIm9mZnNldFwiICsgZDJdIHx8IGVsZW1lbnRbXCJjbGllbnRcIiArIGQyXSB8fCAwO1xufSxcbiAgICBfZ2V0TGFiZWxSYXRpb0FycmF5ID0gZnVuY3Rpb24gX2dldExhYmVsUmF0aW9BcnJheSh0aW1lbGluZSkge1xuICB2YXIgYSA9IFtdLFxuICAgICAgbGFiZWxzID0gdGltZWxpbmUubGFiZWxzLFxuICAgICAgZHVyYXRpb24gPSB0aW1lbGluZS5kdXJhdGlvbigpLFxuICAgICAgcDtcblxuICBmb3IgKHAgaW4gbGFiZWxzKSB7XG4gICAgYS5wdXNoKGxhYmVsc1twXSAvIGR1cmF0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBhO1xufSxcbiAgICBfZ2V0Q2xvc2VzdExhYmVsID0gZnVuY3Rpb24gX2dldENsb3Nlc3RMYWJlbChhbmltYXRpb24pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBnc2FwLnV0aWxzLnNuYXAoX2dldExhYmVsUmF0aW9BcnJheShhbmltYXRpb24pLCB2YWx1ZSk7XG4gIH07XG59LFxuICAgIF9zbmFwRGlyZWN0aW9uYWwgPSBmdW5jdGlvbiBfc25hcERpcmVjdGlvbmFsKHNuYXBJbmNyZW1lbnRPckFycmF5KSB7XG4gIHZhciBzbmFwID0gZ3NhcC51dGlscy5zbmFwKHNuYXBJbmNyZW1lbnRPckFycmF5KSxcbiAgICAgIGEgPSBBcnJheS5pc0FycmF5KHNuYXBJbmNyZW1lbnRPckFycmF5KSAmJiBzbmFwSW5jcmVtZW50T3JBcnJheS5zbGljZSgwKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEgLSBiO1xuICB9KTtcbiAgcmV0dXJuIGEgPyBmdW5jdGlvbiAodmFsdWUsIGRpcmVjdGlvbiwgdGhyZXNob2xkKSB7XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAxZS0zO1xuICAgIH1cblxuICAgIHZhciBpO1xuXG4gICAgaWYgKCFkaXJlY3Rpb24pIHtcbiAgICAgIHJldHVybiBzbmFwKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgdmFsdWUgLT0gdGhyZXNob2xkOyAvLyB0byBhdm9pZCByb3VuZGluZyBlcnJvcnMuIElmIHdlJ3JlIHRvbyBzdHJpY3QsIGl0IG1pZ2h0IHNuYXAgZm9yd2FyZCwgdGhlbiBpbW1lZGlhdGVseSBhZ2FpbiwgYW5kIGFnYWluLlxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYVtpXSA+PSB2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBhW2ldO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhW2kgLSAxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaSA9IGEubGVuZ3RoO1xuICAgICAgdmFsdWUgKz0gdGhyZXNob2xkO1xuXG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGlmIChhW2ldIDw9IHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIGFbaV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYVswXTtcbiAgfSA6IGZ1bmN0aW9uICh2YWx1ZSwgZGlyZWN0aW9uLCB0aHJlc2hvbGQpIHtcbiAgICBpZiAodGhyZXNob2xkID09PSB2b2lkIDApIHtcbiAgICAgIHRocmVzaG9sZCA9IDFlLTM7XG4gICAgfVxuXG4gICAgdmFyIHNuYXBwZWQgPSBzbmFwKHZhbHVlKTtcbiAgICByZXR1cm4gIWRpcmVjdGlvbiB8fCBNYXRoLmFicyhzbmFwcGVkIC0gdmFsdWUpIDwgdGhyZXNob2xkIHx8IHNuYXBwZWQgLSB2YWx1ZSA8IDAgPT09IGRpcmVjdGlvbiA8IDAgPyBzbmFwcGVkIDogc25hcChkaXJlY3Rpb24gPCAwID8gdmFsdWUgLSBzbmFwSW5jcmVtZW50T3JBcnJheSA6IHZhbHVlICsgc25hcEluY3JlbWVudE9yQXJyYXkpO1xuICB9O1xufSxcbiAgICBfZ2V0TGFiZWxBdERpcmVjdGlvbiA9IGZ1bmN0aW9uIF9nZXRMYWJlbEF0RGlyZWN0aW9uKHRpbWVsaW5lKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIHN0KSB7XG4gICAgcmV0dXJuIF9zbmFwRGlyZWN0aW9uYWwoX2dldExhYmVsUmF0aW9BcnJheSh0aW1lbGluZSkpKHZhbHVlLCBzdC5kaXJlY3Rpb24pO1xuICB9O1xufSxcbiAgICBfbXVsdGlMaXN0ZW5lciA9IGZ1bmN0aW9uIF9tdWx0aUxpc3RlbmVyKGZ1bmMsIGVsZW1lbnQsIHR5cGVzLCBjYWxsYmFjaykge1xuICByZXR1cm4gdHlwZXMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICByZXR1cm4gZnVuYyhlbGVtZW50LCB0eXBlLCBjYWxsYmFjayk7XG4gIH0pO1xufSxcbiAgICBfYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBfYWRkTGlzdGVuZXIoZWxlbWVudCwgdHlwZSwgZnVuYywgbm9uUGFzc2l2ZSwgY2FwdHVyZSkge1xuICByZXR1cm4gZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmMsIHtcbiAgICBwYXNzaXZlOiAhbm9uUGFzc2l2ZSxcbiAgICBjYXB0dXJlOiAhIWNhcHR1cmVcbiAgfSk7XG59LFxuICAgIF9yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIF9yZW1vdmVMaXN0ZW5lcihlbGVtZW50LCB0eXBlLCBmdW5jLCBjYXB0dXJlKSB7XG4gIHJldHVybiBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZnVuYywgISFjYXB0dXJlKTtcbn0sXG4gICAgX3doZWVsTGlzdGVuZXIgPSBmdW5jdGlvbiBfd2hlZWxMaXN0ZW5lcihmdW5jLCBlbCwgc2Nyb2xsRnVuYykge1xuICBzY3JvbGxGdW5jID0gc2Nyb2xsRnVuYyAmJiBzY3JvbGxGdW5jLndoZWVsSGFuZGxlcjtcblxuICBpZiAoc2Nyb2xsRnVuYykge1xuICAgIGZ1bmMoZWwsIFwid2hlZWxcIiwgc2Nyb2xsRnVuYyk7XG4gICAgZnVuYyhlbCwgXCJ0b3VjaG1vdmVcIiwgc2Nyb2xsRnVuYyk7XG4gIH1cbn0sXG4gICAgX21hcmtlckRlZmF1bHRzID0ge1xuICBzdGFydENvbG9yOiBcImdyZWVuXCIsXG4gIGVuZENvbG9yOiBcInJlZFwiLFxuICBpbmRlbnQ6IDAsXG4gIGZvbnRTaXplOiBcIjE2cHhcIixcbiAgZm9udFdlaWdodDogXCJub3JtYWxcIlxufSxcbiAgICBfZGVmYXVsdHMgPSB7XG4gIHRvZ2dsZUFjdGlvbnM6IFwicGxheVwiLFxuICBhbnRpY2lwYXRlUGluOiAwXG59LFxuICAgIF9rZXl3b3JkcyA9IHtcbiAgdG9wOiAwLFxuICBsZWZ0OiAwLFxuICBjZW50ZXI6IDAuNSxcbiAgYm90dG9tOiAxLFxuICByaWdodDogMVxufSxcbiAgICBfb2Zmc2V0VG9QeCA9IGZ1bmN0aW9uIF9vZmZzZXRUb1B4KHZhbHVlLCBzaXplKSB7XG4gIGlmIChfaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgdmFyIGVxSW5kZXggPSB2YWx1ZS5pbmRleE9mKFwiPVwiKSxcbiAgICAgICAgcmVsYXRpdmUgPSB+ZXFJbmRleCA/ICsodmFsdWUuY2hhckF0KGVxSW5kZXggLSAxKSArIDEpICogcGFyc2VGbG9hdCh2YWx1ZS5zdWJzdHIoZXFJbmRleCArIDEpKSA6IDA7XG5cbiAgICBpZiAofmVxSW5kZXgpIHtcbiAgICAgIHZhbHVlLmluZGV4T2YoXCIlXCIpID4gZXFJbmRleCAmJiAocmVsYXRpdmUgKj0gc2l6ZSAvIDEwMCk7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cigwLCBlcUluZGV4IC0gMSk7XG4gICAgfVxuXG4gICAgdmFsdWUgPSByZWxhdGl2ZSArICh2YWx1ZSBpbiBfa2V5d29yZHMgPyBfa2V5d29yZHNbdmFsdWVdICogc2l6ZSA6IH52YWx1ZS5pbmRleE9mKFwiJVwiKSA/IHBhcnNlRmxvYXQodmFsdWUpICogc2l6ZSAvIDEwMCA6IHBhcnNlRmxvYXQodmFsdWUpIHx8IDApO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufSxcbiAgICBfY3JlYXRlTWFya2VyID0gZnVuY3Rpb24gX2NyZWF0ZU1hcmtlcih0eXBlLCBuYW1lLCBjb250YWluZXIsIGRpcmVjdGlvbiwgX3JlZjQsIG9mZnNldCwgbWF0Y2hXaWR0aEVsLCBjb250YWluZXJBbmltYXRpb24pIHtcbiAgdmFyIHN0YXJ0Q29sb3IgPSBfcmVmNC5zdGFydENvbG9yLFxuICAgICAgZW5kQ29sb3IgPSBfcmVmNC5lbmRDb2xvcixcbiAgICAgIGZvbnRTaXplID0gX3JlZjQuZm9udFNpemUsXG4gICAgICBpbmRlbnQgPSBfcmVmNC5pbmRlbnQsXG4gICAgICBmb250V2VpZ2h0ID0gX3JlZjQuZm9udFdlaWdodDtcblxuICB2YXIgZSA9IF9kb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKSxcbiAgICAgIHVzZUZpeGVkUG9zaXRpb24gPSBfaXNWaWV3cG9ydChjb250YWluZXIpIHx8IF9nZXRQcm94eVByb3AoY29udGFpbmVyLCBcInBpblR5cGVcIikgPT09IFwiZml4ZWRcIixcbiAgICAgIGlzU2Nyb2xsZXIgPSB0eXBlLmluZGV4T2YoXCJzY3JvbGxlclwiKSAhPT0gLTEsXG4gICAgICBwYXJlbnQgPSB1c2VGaXhlZFBvc2l0aW9uID8gX2JvZHkgOiBjb250YWluZXIsXG4gICAgICBpc1N0YXJ0ID0gdHlwZS5pbmRleE9mKFwic3RhcnRcIikgIT09IC0xLFxuICAgICAgY29sb3IgPSBpc1N0YXJ0ID8gc3RhcnRDb2xvciA6IGVuZENvbG9yLFxuICAgICAgY3NzID0gXCJib3JkZXItY29sb3I6XCIgKyBjb2xvciArIFwiO2ZvbnQtc2l6ZTpcIiArIGZvbnRTaXplICsgXCI7Y29sb3I6XCIgKyBjb2xvciArIFwiO2ZvbnQtd2VpZ2h0OlwiICsgZm9udFdlaWdodCArIFwiO3BvaW50ZXItZXZlbnRzOm5vbmU7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWYsQXJpYWw7ei1pbmRleDoxMDAwO3BhZGRpbmc6NHB4IDhweDtib3JkZXItd2lkdGg6MDtib3JkZXItc3R5bGU6c29saWQ7XCI7XG5cbiAgY3NzICs9IFwicG9zaXRpb246XCIgKyAoKGlzU2Nyb2xsZXIgfHwgY29udGFpbmVyQW5pbWF0aW9uKSAmJiB1c2VGaXhlZFBvc2l0aW9uID8gXCJmaXhlZDtcIiA6IFwiYWJzb2x1dGU7XCIpO1xuICAoaXNTY3JvbGxlciB8fCBjb250YWluZXJBbmltYXRpb24gfHwgIXVzZUZpeGVkUG9zaXRpb24pICYmIChjc3MgKz0gKGRpcmVjdGlvbiA9PT0gX3ZlcnRpY2FsID8gX3JpZ2h0IDogX2JvdHRvbSkgKyBcIjpcIiArIChvZmZzZXQgKyBwYXJzZUZsb2F0KGluZGVudCkpICsgXCJweDtcIik7XG4gIG1hdGNoV2lkdGhFbCAmJiAoY3NzICs9IFwiYm94LXNpemluZzpib3JkZXItYm94O3RleHQtYWxpZ246bGVmdDt3aWR0aDpcIiArIG1hdGNoV2lkdGhFbC5vZmZzZXRXaWR0aCArIFwicHg7XCIpO1xuICBlLl9pc1N0YXJ0ID0gaXNTdGFydDtcbiAgZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcImdzYXAtbWFya2VyLVwiICsgdHlwZSArIChuYW1lID8gXCIgbWFya2VyLVwiICsgbmFtZSA6IFwiXCIpKTtcbiAgZS5zdHlsZS5jc3NUZXh0ID0gY3NzO1xuICBlLmlubmVyVGV4dCA9IG5hbWUgfHwgbmFtZSA9PT0gMCA/IHR5cGUgKyBcIi1cIiArIG5hbWUgOiB0eXBlO1xuICBwYXJlbnQuY2hpbGRyZW5bMF0gPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGUsIHBhcmVudC5jaGlsZHJlblswXSkgOiBwYXJlbnQuYXBwZW5kQ2hpbGQoZSk7XG4gIGUuX29mZnNldCA9IGVbXCJvZmZzZXRcIiArIGRpcmVjdGlvbi5vcC5kMl07XG5cbiAgX3Bvc2l0aW9uTWFya2VyKGUsIDAsIGRpcmVjdGlvbiwgaXNTdGFydCk7XG5cbiAgcmV0dXJuIGU7XG59LFxuICAgIF9wb3NpdGlvbk1hcmtlciA9IGZ1bmN0aW9uIF9wb3NpdGlvbk1hcmtlcihtYXJrZXIsIHN0YXJ0LCBkaXJlY3Rpb24sIGZsaXBwZWQpIHtcbiAgdmFyIHZhcnMgPSB7XG4gICAgZGlzcGxheTogXCJibG9ja1wiXG4gIH0sXG4gICAgICBzaWRlID0gZGlyZWN0aW9uW2ZsaXBwZWQgPyBcIm9zMlwiIDogXCJwMlwiXSxcbiAgICAgIG9wcG9zaXRlU2lkZSA9IGRpcmVjdGlvbltmbGlwcGVkID8gXCJwMlwiIDogXCJvczJcIl07XG4gIG1hcmtlci5faXNGbGlwcGVkID0gZmxpcHBlZDtcbiAgdmFyc1tkaXJlY3Rpb24uYSArIFwiUGVyY2VudFwiXSA9IGZsaXBwZWQgPyAtMTAwIDogMDtcbiAgdmFyc1tkaXJlY3Rpb24uYV0gPSBmbGlwcGVkID8gXCIxcHhcIiA6IDA7XG4gIHZhcnNbXCJib3JkZXJcIiArIHNpZGUgKyBfV2lkdGhdID0gMTtcbiAgdmFyc1tcImJvcmRlclwiICsgb3Bwb3NpdGVTaWRlICsgX1dpZHRoXSA9IDA7XG4gIHZhcnNbZGlyZWN0aW9uLnBdID0gc3RhcnQgKyBcInB4XCI7XG4gIGdzYXAuc2V0KG1hcmtlciwgdmFycyk7XG59LFxuICAgIF90cmlnZ2VycyA9IFtdLFxuICAgIF9pZHMgPSB7fSxcbiAgICBfcmFmSUQsXG4gICAgX3N5bmMgPSBmdW5jdGlvbiBfc3luYygpIHtcbiAgcmV0dXJuIF9nZXRUaW1lKCkgLSBfbGFzdFNjcm9sbFRpbWUgPiAzNCAmJiAoX3JhZklEIHx8IChfcmFmSUQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3VwZGF0ZUFsbCkpKTtcbn0sXG4gICAgX29uU2Nyb2xsID0gZnVuY3Rpb24gX29uU2Nyb2xsKCkge1xuICAvLyBwcmV2aW91c2x5LCB3ZSB0cmllZCB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBieSBiYXRjaGluZy9kZWZlcnJpbmcgdG8gdGhlIG5leHQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCksIGJ1dCBkaXNjb3ZlcmVkIHRoYXQgU2FmYXJpIGhhcyBhIGZldyBidWdzIHRoYXQgbWFrZSB0aGlzIHVud29ya2FibGUgKGVzcGVjaWFsbHkgb24gaU9TKS4gU2VlIGh0dHBzOi8vY29kZXBlbi5pby9HcmVlblNvY2svcGVuLzE2YzQzNWIxMmVmMDljMzgxMjUyMDQ4MThlN2I0NWZjP2VkaXRvcnM9MDAxMCBhbmQgaHR0cHM6Ly9jb2RlcGVuLmlvL0dyZWVuU29jay9wZW4vSmpPeFlwUS8zZGQ2NWNjZWM1YTYwZjFkODYyYzM1NWQ4NGQxNDU2Mj9lZGl0b3JzPTAwMTAgYW5kIGh0dHBzOi8vY29kZXBlbi5pby9HcmVlblNvY2svcGVuL0V4YnJQTmEvMDg3Y2VmMTk3ZGMzNTQ0NWEwOTUxZTg5MzVjNDE1MDM/ZWRpdG9ycz0wMDEwXG4gIGlmICghX25vcm1hbGl6ZXIgfHwgIV9ub3JtYWxpemVyLmlzUHJlc3NlZCB8fCBfbm9ybWFsaXplci5zdGFydFggPiBfYm9keS5jbGllbnRXaWR0aCkge1xuICAgIC8vIGlmIHRoZSB1c2VyIGlzIGRyYWdnaW5nIHRoZSBzY3JvbGxiYXIsIGFsbG93IGl0LlxuICAgIF9zY3JvbGxlcnMuY2FjaGUrKztcblxuICAgIGlmIChfbm9ybWFsaXplcikge1xuICAgICAgX3JhZklEIHx8IChfcmFmSUQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3VwZGF0ZUFsbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfdXBkYXRlQWxsKCk7IC8vIFNhZmFyaSBpbiBwYXJ0aWN1bGFyIChvbiBkZXNrdG9wKSBORUVEUyB0aGUgaW1tZWRpYXRlIHVwZGF0ZSByYXRoZXIgdGhhbiB3YWl0aW5nIGZvciBhIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpIHdoZXJlYXMgaU9TIHNlZW1zIHRvIGJlbmVmaXQgZnJvbSB3YWl0aW5nIGZvciB0aGUgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkgdGljaywgYXQgbGVhc3Qgd2hlbiBub3JtYWxpemluZy4gU2VlIGh0dHBzOi8vY29kZXBlbi5pby9HcmVlblNvY2svcGVuL3FCWW96cU8/ZWRpdG9ycz0wMTEwXG5cbiAgICB9XG5cbiAgICBfbGFzdFNjcm9sbFRpbWUgfHwgX2Rpc3BhdGNoKFwic2Nyb2xsU3RhcnRcIik7XG4gICAgX2xhc3RTY3JvbGxUaW1lID0gX2dldFRpbWUoKTtcbiAgfVxufSxcbiAgICBfc2V0QmFzZURpbWVuc2lvbnMgPSBmdW5jdGlvbiBfc2V0QmFzZURpbWVuc2lvbnMoKSB7XG4gIF9iYXNlU2NyZWVuV2lkdGggPSBfd2luLmlubmVyV2lkdGg7XG4gIF9iYXNlU2NyZWVuSGVpZ2h0ID0gX3dpbi5pbm5lckhlaWdodDtcbn0sXG4gICAgX29uUmVzaXplID0gZnVuY3Rpb24gX29uUmVzaXplKCkge1xuICBfc2Nyb2xsZXJzLmNhY2hlKys7XG4gICFfcmVmcmVzaGluZyAmJiAhX2lnbm9yZVJlc2l6ZSAmJiAhX2RvYy5mdWxsc2NyZWVuRWxlbWVudCAmJiAhX2RvYy53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCAmJiAoIV9pZ25vcmVNb2JpbGVSZXNpemUgfHwgX2Jhc2VTY3JlZW5XaWR0aCAhPT0gX3dpbi5pbm5lcldpZHRoIHx8IE1hdGguYWJzKF93aW4uaW5uZXJIZWlnaHQgLSBfYmFzZVNjcmVlbkhlaWdodCkgPiBfd2luLmlubmVySGVpZ2h0ICogMC4yNSkgJiYgX3Jlc2l6ZURlbGF5LnJlc3RhcnQodHJ1ZSk7XG59LFxuICAgIC8vIGlnbm9yZSByZXNpemVzIHRyaWdnZXJlZCBieSByZWZyZXNoKClcbl9saXN0ZW5lcnMgPSB7fSxcbiAgICBfZW1wdHlBcnJheSA9IFtdLFxuICAgIF9zb2Z0UmVmcmVzaCA9IGZ1bmN0aW9uIF9zb2Z0UmVmcmVzaCgpIHtcbiAgcmV0dXJuIF9yZW1vdmVMaXN0ZW5lcihTY3JvbGxUcmlnZ2VyLCBcInNjcm9sbEVuZFwiLCBfc29mdFJlZnJlc2gpIHx8IF9yZWZyZXNoQWxsKHRydWUpO1xufSxcbiAgICBfZGlzcGF0Y2ggPSBmdW5jdGlvbiBfZGlzcGF0Y2godHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVyc1t0eXBlXSAmJiBfbGlzdGVuZXJzW3R5cGVdLm1hcChmdW5jdGlvbiAoZikge1xuICAgIHJldHVybiBmKCk7XG4gIH0pIHx8IF9lbXB0eUFycmF5O1xufSxcbiAgICBfc2F2ZWRTdHlsZXMgPSBbXSxcbiAgICAvLyB3aGVuIFNjcm9sbFRyaWdnZXIuc2F2ZVN0eWxlcygpIGlzIGNhbGxlZCwgdGhlIGlubGluZSBzdHlsZXMgYXJlIHJlY29yZGVkIGluIHRoaXMgQXJyYXkgaW4gYSBzZXF1ZW50aWFsIGZvcm1hdCBsaWtlIFtlbGVtZW50LCBjc3NUZXh0LCBnc0NhY2hlLCBtZWRpYV0uIFRoaXMga2VlcHMgaXQgdmVyeSBtZW1vcnktZWZmaWNpZW50IGFuZCBmYXN0IHRvIGl0ZXJhdGUgdGhyb3VnaC5cbl9yZXZlcnRSZWNvcmRlZCA9IGZ1bmN0aW9uIF9yZXZlcnRSZWNvcmRlZChtZWRpYSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IF9zYXZlZFN0eWxlcy5sZW5ndGg7IGkgKz0gNSkge1xuICAgIGlmICghbWVkaWEgfHwgX3NhdmVkU3R5bGVzW2kgKyA0XSAmJiBfc2F2ZWRTdHlsZXNbaSArIDRdLnF1ZXJ5ID09PSBtZWRpYSkge1xuICAgICAgX3NhdmVkU3R5bGVzW2ldLnN0eWxlLmNzc1RleHQgPSBfc2F2ZWRTdHlsZXNbaSArIDFdO1xuICAgICAgX3NhdmVkU3R5bGVzW2ldLmdldEJCb3ggJiYgX3NhdmVkU3R5bGVzW2ldLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCBfc2F2ZWRTdHlsZXNbaSArIDJdIHx8IFwiXCIpO1xuICAgICAgX3NhdmVkU3R5bGVzW2kgKyAzXS51bmNhY2hlID0gMTtcbiAgICB9XG4gIH1cbn0sXG4gICAgX3JldmVydEFsbCA9IGZ1bmN0aW9uIF9yZXZlcnRBbGwoa2lsbCwgbWVkaWEpIHtcbiAgdmFyIHRyaWdnZXI7XG5cbiAgZm9yIChfaSA9IDA7IF9pIDwgX3RyaWdnZXJzLmxlbmd0aDsgX2krKykge1xuICAgIHRyaWdnZXIgPSBfdHJpZ2dlcnNbX2ldO1xuXG4gICAgaWYgKHRyaWdnZXIgJiYgKCFtZWRpYSB8fCB0cmlnZ2VyLl9jdHggPT09IG1lZGlhKSkge1xuICAgICAgaWYgKGtpbGwpIHtcbiAgICAgICAgdHJpZ2dlci5raWxsKDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJpZ2dlci5yZXZlcnQodHJ1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWVkaWEgJiYgX3JldmVydFJlY29yZGVkKG1lZGlhKTtcbiAgbWVkaWEgfHwgX2Rpc3BhdGNoKFwicmV2ZXJ0XCIpO1xufSxcbiAgICBfY2xlYXJTY3JvbGxNZW1vcnkgPSBmdW5jdGlvbiBfY2xlYXJTY3JvbGxNZW1vcnkoc2Nyb2xsUmVzdG9yYXRpb24sIGZvcmNlKSB7XG4gIC8vIHplcm8tb3V0IGFsbCB0aGUgcmVjb3JkZWQgc2Nyb2xsIHBvc2l0aW9ucy4gRG9uJ3QgdXNlIF90cmlnZ2VycyBiZWNhdXNlIGlmLCBmb3IgZXhhbXBsZSwgLm1hdGNoTWVkaWEoKSBpcyB1c2VkIHRvIGNyZWF0ZSBzb21lIFNjcm9sbFRyaWdnZXJzIGFuZCB0aGVuIHRoZSB1c2VyIHJlc2l6ZXMgYW5kIGl0IHJlbW92ZXMgQUxMIFNjcm9sbFRyaWdnZXJzLCBhbmQgdGhlbiBnbyBiYWNrIHRvIGEgc2l6ZSB3aGVyZSB0aGVyZSBhcmUgU2Nyb2xsVHJpZ2dlcnMsIGl0IHdvdWxkIGhhdmUga2VwdCB0aGUgcG9zaXRpb24ocykgc2F2ZWQgZnJvbSB0aGUgaW5pdGlhbCBzdGF0ZS5cbiAgX3Njcm9sbGVycy5jYWNoZSsrO1xuICAoZm9yY2UgfHwgIV9yZWZyZXNoaW5nQWxsKSAmJiBfc2Nyb2xsZXJzLmZvckVhY2goZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBfaXNGdW5jdGlvbihvYmopICYmIG9iai5jYWNoZUlEKysgJiYgKG9iai5yZWMgPSAwKTtcbiAgfSk7XG4gIF9pc1N0cmluZyhzY3JvbGxSZXN0b3JhdGlvbikgJiYgKF93aW4uaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9IF9zY3JvbGxSZXN0b3JhdGlvbiA9IHNjcm9sbFJlc3RvcmF0aW9uKTtcbn0sXG4gICAgX3JlZnJlc2hpbmdBbGwsXG4gICAgX3JlZnJlc2hJRCA9IDAsXG4gICAgX3F1ZXVlUmVmcmVzaElELFxuICAgIF9xdWV1ZVJlZnJlc2hBbGwgPSBmdW5jdGlvbiBfcXVldWVSZWZyZXNoQWxsKCkge1xuICAvLyB3ZSBkb24ndCB3YW50IHRvIGNhbGwgX3JlZnJlc2hBbGwoKSBldmVyeSB0aW1lIHdlIGNyZWF0ZSBhIG5ldyBTY3JvbGxUcmlnZ2VyIChmb3IgcGVyZm9ybWFuY2UgcmVhc29ucykgLSBpdCdzIGJldHRlciB0byBiYXRjaCB0aGVtLiBTb21lIGZyYW1ld29ya3MgZHluYW1pY2FsbHkgbG9hZCBjb250ZW50IGFuZCB3ZSBjYW4ndCByZWx5IG9uIHRoZSB3aW5kb3cncyBcImxvYWRcIiBvciBcIkRPTUNvbnRlbnRMb2FkZWRcIiBldmVudHMgdG8gdHJpZ2dlciBpdC5cbiAgaWYgKF9xdWV1ZVJlZnJlc2hJRCAhPT0gX3JlZnJlc2hJRCkge1xuICAgIHZhciBpZCA9IF9xdWV1ZVJlZnJlc2hJRCA9IF9yZWZyZXNoSUQ7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBpZCA9PT0gX3JlZnJlc2hJRCAmJiBfcmVmcmVzaEFsbCh0cnVlKTtcbiAgICB9KTtcbiAgfVxufSxcbiAgICBfcmVmcmVzaDEwMHZoID0gZnVuY3Rpb24gX3JlZnJlc2gxMDB2aCgpIHtcbiAgX2JvZHkuYXBwZW5kQ2hpbGQoX2RpdjEwMHZoKTtcblxuICBfMTAwdmggPSBfZGl2MTAwdmgub2Zmc2V0SGVpZ2h0IHx8IF93aW4uaW5uZXJIZWlnaHQ7XG5cbiAgX2JvZHkucmVtb3ZlQ2hpbGQoX2RpdjEwMHZoKTtcbn0sXG4gICAgX3JlZnJlc2hBbGwgPSBmdW5jdGlvbiBfcmVmcmVzaEFsbChmb3JjZSwgc2tpcFJldmVydCkge1xuICBpZiAoX2xhc3RTY3JvbGxUaW1lICYmICFmb3JjZSkge1xuICAgIF9hZGRMaXN0ZW5lcihTY3JvbGxUcmlnZ2VyLCBcInNjcm9sbEVuZFwiLCBfc29mdFJlZnJlc2gpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgX3JlZnJlc2gxMDB2aCgpO1xuXG4gIF9yZWZyZXNoaW5nQWxsID0gU2Nyb2xsVHJpZ2dlci5pc1JlZnJlc2hpbmcgPSB0cnVlO1xuXG4gIF9zY3JvbGxlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIF9pc0Z1bmN0aW9uKG9iaikgJiYgKytvYmouY2FjaGVJRCAmJiAob2JqLnJlYyA9IG9iaigpKTtcbiAgfSk7IC8vIGZvcmNlIHRoZSBjbGVhcmluZyBvZiB0aGUgY2FjaGUgYmVjYXVzZSBzb21lIGJyb3dzZXJzIHRha2UgYSBsaXR0bGUgd2hpbGUgdG8gZGlzcGF0Y2ggdGhlIFwic2Nyb2xsXCIgZXZlbnQgYW5kIHRoZSB1c2VyIG1heSBoYXZlIGNoYW5nZWQgdGhlIHNjcm9sbCBwb3NpdGlvbiBhbmQgdGhlbiBjYWxsZWQgU2Nyb2xsVHJpZ2dlci5yZWZyZXNoKCkgcmlnaHQgYXdheVxuXG5cbiAgdmFyIHJlZnJlc2hJbml0cyA9IF9kaXNwYXRjaChcInJlZnJlc2hJbml0XCIpO1xuXG4gIF9zb3J0ICYmIFNjcm9sbFRyaWdnZXIuc29ydCgpO1xuICBza2lwUmV2ZXJ0IHx8IF9yZXZlcnRBbGwoKTtcblxuICBfc2Nyb2xsZXJzLmZvckVhY2goZnVuY3Rpb24gKG9iaikge1xuICAgIGlmIChfaXNGdW5jdGlvbihvYmopKSB7XG4gICAgICBvYmouc21vb3RoICYmIChvYmoudGFyZ2V0LnN0eWxlLnNjcm9sbEJlaGF2aW9yID0gXCJhdXRvXCIpOyAvLyBzbW9vdGggc2Nyb2xsaW5nIGludGVyZmVyZXNcblxuICAgICAgb2JqKDApO1xuICAgIH1cbiAgfSk7XG5cbiAgX3RyaWdnZXJzLnNsaWNlKDApLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5yZWZyZXNoKCk7XG4gIH0pOyAvLyBkb24ndCBsb29wIHdpdGggX2kgYmVjYXVzZSBkdXJpbmcgYSByZWZyZXNoKCkgc29tZW9uZSBjb3VsZCBjYWxsIFNjcm9sbFRyaWdnZXIudXBkYXRlKCkgd2hpY2ggd291bGQgaXRlcmF0ZSB0aHJvdWdoIF9pIHJlc3VsdGluZyBpbiBhIHNraXAuXG5cblxuICBfdHJpZ2dlcnMuZm9yRWFjaChmdW5jdGlvbiAodCwgaSkge1xuICAgIC8vIG5lc3RlZCBwaW5zIChwaW5uZWRDb250YWluZXIpIHdpdGggcGluU3BhY2luZyBtYXkgZXhwYW5kIHRoZSBjb250YWluZXIsIHNvIHdlIG11c3QgYWNjb21tb2RhdGUgdGhhdCBoZXJlLlxuICAgIGlmICh0Ll9zdWJQaW5PZmZzZXQgJiYgdC5waW4pIHtcbiAgICAgIHZhciBwcm9wID0gdC52YXJzLmhvcml6b250YWwgPyBcIm9mZnNldFdpZHRoXCIgOiBcIm9mZnNldEhlaWdodFwiLFxuICAgICAgICAgIG9yaWdpbmFsID0gdC5waW5bcHJvcF07XG4gICAgICB0LnJldmVydCh0cnVlLCAxKTtcbiAgICAgIHQuYWRqdXN0UGluU3BhY2luZyh0LnBpbltwcm9wXSAtIG9yaWdpbmFsKTtcbiAgICAgIHQucmVmcmVzaCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgX3RyaWdnZXJzLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcbiAgICAvLyB0aGUgc2Nyb2xsZXIncyBtYXggc2Nyb2xsIHBvc2l0aW9uIG1heSBjaGFuZ2UgYWZ0ZXIgYWxsIHRoZSBTY3JvbGxUcmlnZ2VycyByZWZyZXNoZWQgKGxpa2UgcGlubmluZyBjb3VsZCBwdXNoIGl0IGRvd24pLCBzbyB3ZSBuZWVkIHRvIGxvb3AgYmFjayBhbmQgY29ycmVjdCBhbnkgd2l0aCBlbmQ6IFwibWF4XCIuIFNhbWUgZm9yIGFueXRoaW5nIHdpdGggYSBjbGFtcGVkIGVuZFxuICAgIHZhciBtYXggPSBfbWF4U2Nyb2xsKHQuc2Nyb2xsZXIsIHQuX2Rpcik7XG5cbiAgICAodC52YXJzLmVuZCA9PT0gXCJtYXhcIiB8fCB0Ll9lbmRDbGFtcCAmJiB0LmVuZCA+IG1heCkgJiYgdC5zZXRQb3NpdGlvbnModC5zdGFydCwgTWF0aC5tYXgodC5zdGFydCArIDEsIG1heCksIHRydWUpO1xuICB9KTtcblxuICByZWZyZXNoSW5pdHMuZm9yRWFjaChmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQucmVuZGVyICYmIHJlc3VsdC5yZW5kZXIoLTEpO1xuICB9KTsgLy8gaWYgdGhlIG9uUmVmcmVzaEluaXQoKSByZXR1cm5zIGFuIGFuaW1hdGlvbiAodHlwaWNhbGx5IGEgZ3NhcC5zZXQoKSksIHJldmVydCBpdC4gVGhpcyBtYWtlcyBpdCBlYXN5IHRvIHB1dCB0aGluZ3MgaW4gYSBjZXJ0YWluIHNwb3QgYmVmb3JlIHJlZnJlc2hpbmcgZm9yIG1lYXN1cmVtZW50IHB1cnBvc2VzLCBhbmQgdGhlbiBwdXQgdGhpbmdzIGJhY2suXG5cbiAgX3Njcm9sbGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYmopIHtcbiAgICBpZiAoX2lzRnVuY3Rpb24ob2JqKSkge1xuICAgICAgb2JqLnNtb290aCAmJiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb2JqLnRhcmdldC5zdHlsZS5zY3JvbGxCZWhhdmlvciA9IFwic21vb3RoXCI7XG4gICAgICB9KTtcbiAgICAgIG9iai5yZWMgJiYgb2JqKG9iai5yZWMpO1xuICAgIH1cbiAgfSk7XG5cbiAgX2NsZWFyU2Nyb2xsTWVtb3J5KF9zY3JvbGxSZXN0b3JhdGlvbiwgMSk7XG5cbiAgX3Jlc2l6ZURlbGF5LnBhdXNlKCk7XG5cbiAgX3JlZnJlc2hJRCsrO1xuICBfcmVmcmVzaGluZ0FsbCA9IDI7XG5cbiAgX3VwZGF0ZUFsbCgyKTtcblxuICBfdHJpZ2dlcnMuZm9yRWFjaChmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiBfaXNGdW5jdGlvbih0LnZhcnMub25SZWZyZXNoKSAmJiB0LnZhcnMub25SZWZyZXNoKHQpO1xuICB9KTtcblxuICBfcmVmcmVzaGluZ0FsbCA9IFNjcm9sbFRyaWdnZXIuaXNSZWZyZXNoaW5nID0gZmFsc2U7XG5cbiAgX2Rpc3BhdGNoKFwicmVmcmVzaFwiKTtcbn0sXG4gICAgX2xhc3RTY3JvbGwgPSAwLFxuICAgIF9kaXJlY3Rpb24gPSAxLFxuICAgIF9wcmltYXJ5LFxuICAgIF91cGRhdGVBbGwgPSBmdW5jdGlvbiBfdXBkYXRlQWxsKGZvcmNlKSB7XG4gIGlmICghX3JlZnJlc2hpbmdBbGwgfHwgZm9yY2UgPT09IDIpIHtcbiAgICBTY3JvbGxUcmlnZ2VyLmlzVXBkYXRpbmcgPSB0cnVlO1xuICAgIF9wcmltYXJ5ICYmIF9wcmltYXJ5LnVwZGF0ZSgwKTsgLy8gU2Nyb2xsU21vb3RoZXIgdXNlcyByZWZyZXNoUHJpb3JpdHkgLTk5OTkgdG8gYmVjb21lIHRoZSBwcmltYXJ5IHRoYXQgZ2V0cyB1cGRhdGVkIGJlZm9yZSBhbGwgb3RoZXJzIGJlY2F1c2UgaXQgYWZmZWN0cyB0aGUgc2Nyb2xsIHBvc2l0aW9uLlxuXG4gICAgdmFyIGwgPSBfdHJpZ2dlcnMubGVuZ3RoLFxuICAgICAgICB0aW1lID0gX2dldFRpbWUoKSxcbiAgICAgICAgcmVjb3JkVmVsb2NpdHkgPSB0aW1lIC0gX3RpbWUxID49IDUwLFxuICAgICAgICBzY3JvbGwgPSBsICYmIF90cmlnZ2Vyc1swXS5zY3JvbGwoKTtcblxuICAgIF9kaXJlY3Rpb24gPSBfbGFzdFNjcm9sbCA+IHNjcm9sbCA/IC0xIDogMTtcbiAgICBfcmVmcmVzaGluZ0FsbCB8fCAoX2xhc3RTY3JvbGwgPSBzY3JvbGwpO1xuXG4gICAgaWYgKHJlY29yZFZlbG9jaXR5KSB7XG4gICAgICBpZiAoX2xhc3RTY3JvbGxUaW1lICYmICFfcG9pbnRlcklzRG93biAmJiB0aW1lIC0gX2xhc3RTY3JvbGxUaW1lID4gMjAwKSB7XG4gICAgICAgIF9sYXN0U2Nyb2xsVGltZSA9IDA7XG5cbiAgICAgICAgX2Rpc3BhdGNoKFwic2Nyb2xsRW5kXCIpO1xuICAgICAgfVxuXG4gICAgICBfdGltZTIgPSBfdGltZTE7XG4gICAgICBfdGltZTEgPSB0aW1lO1xuICAgIH1cblxuICAgIGlmIChfZGlyZWN0aW9uIDwgMCkge1xuICAgICAgX2kgPSBsO1xuXG4gICAgICB3aGlsZSAoX2ktLSA+IDApIHtcbiAgICAgICAgX3RyaWdnZXJzW19pXSAmJiBfdHJpZ2dlcnNbX2ldLnVwZGF0ZSgwLCByZWNvcmRWZWxvY2l0eSk7XG4gICAgICB9XG5cbiAgICAgIF9kaXJlY3Rpb24gPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKF9pID0gMDsgX2kgPCBsOyBfaSsrKSB7XG4gICAgICAgIF90cmlnZ2Vyc1tfaV0gJiYgX3RyaWdnZXJzW19pXS51cGRhdGUoMCwgcmVjb3JkVmVsb2NpdHkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIFNjcm9sbFRyaWdnZXIuaXNVcGRhdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgX3JhZklEID0gMDtcbn0sXG4gICAgX3Byb3BOYW1lc1RvQ29weSA9IFtfbGVmdCwgX3RvcCwgX2JvdHRvbSwgX3JpZ2h0LCBfbWFyZ2luICsgX0JvdHRvbSwgX21hcmdpbiArIF9SaWdodCwgX21hcmdpbiArIF9Ub3AsIF9tYXJnaW4gKyBfTGVmdCwgXCJkaXNwbGF5XCIsIFwiZmxleFNocmlua1wiLCBcImZsb2F0XCIsIFwiekluZGV4XCIsIFwiZ3JpZENvbHVtblN0YXJ0XCIsIFwiZ3JpZENvbHVtbkVuZFwiLCBcImdyaWRSb3dTdGFydFwiLCBcImdyaWRSb3dFbmRcIiwgXCJncmlkQXJlYVwiLCBcImp1c3RpZnlTZWxmXCIsIFwiYWxpZ25TZWxmXCIsIFwicGxhY2VTZWxmXCIsIFwib3JkZXJcIl0sXG4gICAgX3N0YXRlUHJvcHMgPSBfcHJvcE5hbWVzVG9Db3B5LmNvbmNhdChbX3dpZHRoLCBfaGVpZ2h0LCBcImJveFNpemluZ1wiLCBcIm1heFwiICsgX1dpZHRoLCBcIm1heFwiICsgX0hlaWdodCwgXCJwb3NpdGlvblwiLCBfbWFyZ2luLCBfcGFkZGluZywgX3BhZGRpbmcgKyBfVG9wLCBfcGFkZGluZyArIF9SaWdodCwgX3BhZGRpbmcgKyBfQm90dG9tLCBfcGFkZGluZyArIF9MZWZ0XSksXG4gICAgX3N3YXBQaW5PdXQgPSBmdW5jdGlvbiBfc3dhcFBpbk91dChwaW4sIHNwYWNlciwgc3RhdGUpIHtcbiAgX3NldFN0YXRlKHN0YXRlKTtcblxuICB2YXIgY2FjaGUgPSBwaW4uX2dzYXA7XG5cbiAgaWYgKGNhY2hlLnNwYWNlcklzTmF0aXZlKSB7XG4gICAgX3NldFN0YXRlKGNhY2hlLnNwYWNlclN0YXRlKTtcbiAgfSBlbHNlIGlmIChwaW4uX2dzYXAuc3dhcHBlZEluKSB7XG4gICAgdmFyIHBhcmVudCA9IHNwYWNlci5wYXJlbnROb2RlO1xuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShwaW4sIHNwYWNlcik7XG4gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoc3BhY2VyKTtcbiAgICB9XG4gIH1cblxuICBwaW4uX2dzYXAuc3dhcHBlZEluID0gZmFsc2U7XG59LFxuICAgIF9zd2FwUGluSW4gPSBmdW5jdGlvbiBfc3dhcFBpbkluKHBpbiwgc3BhY2VyLCBjcywgc3BhY2VyU3RhdGUpIHtcbiAgaWYgKCFwaW4uX2dzYXAuc3dhcHBlZEluKSB7XG4gICAgdmFyIGkgPSBfcHJvcE5hbWVzVG9Db3B5Lmxlbmd0aCxcbiAgICAgICAgc3BhY2VyU3R5bGUgPSBzcGFjZXIuc3R5bGUsXG4gICAgICAgIHBpblN0eWxlID0gcGluLnN0eWxlLFxuICAgICAgICBwO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgcCA9IF9wcm9wTmFtZXNUb0NvcHlbaV07XG4gICAgICBzcGFjZXJTdHlsZVtwXSA9IGNzW3BdO1xuICAgIH1cblxuICAgIHNwYWNlclN0eWxlLnBvc2l0aW9uID0gY3MucG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiA/IFwiYWJzb2x1dGVcIiA6IFwicmVsYXRpdmVcIjtcbiAgICBjcy5kaXNwbGF5ID09PSBcImlubGluZVwiICYmIChzcGFjZXJTdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIik7XG4gICAgcGluU3R5bGVbX2JvdHRvbV0gPSBwaW5TdHlsZVtfcmlnaHRdID0gXCJhdXRvXCI7XG4gICAgc3BhY2VyU3R5bGUuZmxleEJhc2lzID0gY3MuZmxleEJhc2lzIHx8IFwiYXV0b1wiO1xuICAgIHNwYWNlclN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XG4gICAgc3BhY2VyU3R5bGUuYm94U2l6aW5nID0gXCJib3JkZXItYm94XCI7XG4gICAgc3BhY2VyU3R5bGVbX3dpZHRoXSA9IF9nZXRTaXplKHBpbiwgX2hvcml6b250YWwpICsgX3B4O1xuICAgIHNwYWNlclN0eWxlW19oZWlnaHRdID0gX2dldFNpemUocGluLCBfdmVydGljYWwpICsgX3B4O1xuICAgIHNwYWNlclN0eWxlW19wYWRkaW5nXSA9IHBpblN0eWxlW19tYXJnaW5dID0gcGluU3R5bGVbX3RvcF0gPSBwaW5TdHlsZVtfbGVmdF0gPSBcIjBcIjtcblxuICAgIF9zZXRTdGF0ZShzcGFjZXJTdGF0ZSk7XG5cbiAgICBwaW5TdHlsZVtfd2lkdGhdID0gcGluU3R5bGVbXCJtYXhcIiArIF9XaWR0aF0gPSBjc1tfd2lkdGhdO1xuICAgIHBpblN0eWxlW19oZWlnaHRdID0gcGluU3R5bGVbXCJtYXhcIiArIF9IZWlnaHRdID0gY3NbX2hlaWdodF07XG4gICAgcGluU3R5bGVbX3BhZGRpbmddID0gY3NbX3BhZGRpbmddO1xuXG4gICAgaWYgKHBpbi5wYXJlbnROb2RlICE9PSBzcGFjZXIpIHtcbiAgICAgIHBpbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzcGFjZXIsIHBpbik7XG4gICAgICBzcGFjZXIuYXBwZW5kQ2hpbGQocGluKTtcbiAgICB9XG5cbiAgICBwaW4uX2dzYXAuc3dhcHBlZEluID0gdHJ1ZTtcbiAgfVxufSxcbiAgICBfY2Fwc0V4cCA9IC8oW0EtWl0pL2csXG4gICAgX3NldFN0YXRlID0gZnVuY3Rpb24gX3NldFN0YXRlKHN0YXRlKSB7XG4gIGlmIChzdGF0ZSkge1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnQuc3R5bGUsXG4gICAgICAgIGwgPSBzdGF0ZS5sZW5ndGgsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICBwLFxuICAgICAgICB2YWx1ZTtcbiAgICAoc3RhdGUudC5fZ3NhcCB8fCBnc2FwLmNvcmUuZ2V0Q2FjaGUoc3RhdGUudCkpLnVuY2FjaGUgPSAxOyAvLyBvdGhlcndpc2UgdHJhbnNmb3JtcyBtYXkgYmUgb2ZmXG5cbiAgICBmb3IgKDsgaSA8IGw7IGkgKz0gMikge1xuICAgICAgdmFsdWUgPSBzdGF0ZVtpICsgMV07XG4gICAgICBwID0gc3RhdGVbaV07XG5cbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBzdHlsZVtwXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZVtwXSkge1xuICAgICAgICBzdHlsZS5yZW1vdmVQcm9wZXJ0eShwLnJlcGxhY2UoX2NhcHNFeHAsIFwiLSQxXCIpLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSxcbiAgICBfZ2V0U3RhdGUgPSBmdW5jdGlvbiBfZ2V0U3RhdGUoZWxlbWVudCkge1xuICAvLyByZXR1cm5zIGFuIEFycmF5IHdpdGggYWx0ZXJuYXRpbmcgdmFsdWVzIGxpa2UgW3Byb3BlcnR5LCB2YWx1ZSwgcHJvcGVydHksIHZhbHVlXSBhbmQgYSBcInRcIiBwcm9wZXJ0eSBwb2ludGluZyB0byB0aGUgdGFyZ2V0IChlbGVtZW50KS4gTWFrZXMgaXQgZmFzdCBhbmQgY2hlYXAuXG4gIHZhciBsID0gX3N0YXRlUHJvcHMubGVuZ3RoLFxuICAgICAgc3R5bGUgPSBlbGVtZW50LnN0eWxlLFxuICAgICAgc3RhdGUgPSBbXSxcbiAgICAgIGkgPSAwO1xuXG4gIGZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgc3RhdGUucHVzaChfc3RhdGVQcm9wc1tpXSwgc3R5bGVbX3N0YXRlUHJvcHNbaV1dKTtcbiAgfVxuXG4gIHN0YXRlLnQgPSBlbGVtZW50O1xuICByZXR1cm4gc3RhdGU7XG59LFxuICAgIF9jb3B5U3RhdGUgPSBmdW5jdGlvbiBfY29weVN0YXRlKHN0YXRlLCBvdmVycmlkZSwgb21pdE9mZnNldHMpIHtcbiAgdmFyIHJlc3VsdCA9IFtdLFxuICAgICAgbCA9IHN0YXRlLmxlbmd0aCxcbiAgICAgIGkgPSBvbWl0T2Zmc2V0cyA/IDggOiAwLFxuICAgICAgLy8gc2tpcCB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20gaWYgb21pdE9mZnNldHMgaXMgdHJ1ZVxuICBwO1xuXG4gIGZvciAoOyBpIDwgbDsgaSArPSAyKSB7XG4gICAgcCA9IHN0YXRlW2ldO1xuICAgIHJlc3VsdC5wdXNoKHAsIHAgaW4gb3ZlcnJpZGUgPyBvdmVycmlkZVtwXSA6IHN0YXRlW2kgKyAxXSk7XG4gIH1cblxuICByZXN1bHQudCA9IHN0YXRlLnQ7XG4gIHJldHVybiByZXN1bHQ7XG59LFxuICAgIF93aW5PZmZzZXRzID0ge1xuICBsZWZ0OiAwLFxuICB0b3A6IDBcbn0sXG4gICAgLy8gLy8gcG90ZW50aWFsIGZ1dHVyZSBmZWF0dXJlICg/KSBBbGxvdyB1c2VycyB0byBjYWxjdWxhdGUgd2hlcmUgYSB0cmlnZ2VyIGhpdHMgKHNjcm9sbCBwb3NpdGlvbikgbGlrZSBnZXRTY3JvbGxQb3NpdGlvbihcIiNpZFwiLCBcInRvcCBib3R0b21cIilcbi8vIF9nZXRTY3JvbGxQb3NpdGlvbiA9ICh0cmlnZ2VyLCBwb3NpdGlvbiwge3Njcm9sbGVyLCBjb250YWluZXJBbmltYXRpb24sIGhvcml6b250YWx9KSA9PiB7XG4vLyBcdHNjcm9sbGVyID0gX2dldFRhcmdldChzY3JvbGxlciB8fCBfd2luKTtcbi8vIFx0bGV0IGRpcmVjdGlvbiA9IGhvcml6b250YWwgPyBfaG9yaXpvbnRhbCA6IF92ZXJ0aWNhbCxcbi8vIFx0XHRpc1ZpZXdwb3J0ID0gX2lzVmlld3BvcnQoc2Nyb2xsZXIpO1xuLy8gXHRfZ2V0U2l6ZUZ1bmMoc2Nyb2xsZXIsIGlzVmlld3BvcnQsIGRpcmVjdGlvbik7XG4vLyBcdHJldHVybiBfcGFyc2VQb3NpdGlvbihwb3NpdGlvbiwgX2dldFRhcmdldCh0cmlnZ2VyKSwgX2dldFNpemVGdW5jKHNjcm9sbGVyLCBpc1ZpZXdwb3J0LCBkaXJlY3Rpb24pKCksIGRpcmVjdGlvbiwgX2dldFNjcm9sbEZ1bmMoc2Nyb2xsZXIsIGRpcmVjdGlvbikoKSwgMCwgMCwgMCwgX2dldE9mZnNldHNGdW5jKHNjcm9sbGVyLCBpc1ZpZXdwb3J0KSgpLCBpc1ZpZXdwb3J0ID8gMCA6IHBhcnNlRmxvYXQoX2dldENvbXB1dGVkU3R5bGUoc2Nyb2xsZXIpW1wiYm9yZGVyXCIgKyBkaXJlY3Rpb24ucDIgKyBfV2lkdGhdKSB8fCAwLCAwLCBjb250YWluZXJBbmltYXRpb24gPyBjb250YWluZXJBbmltYXRpb24uZHVyYXRpb24oKSA6IF9tYXhTY3JvbGwoc2Nyb2xsZXIpLCBjb250YWluZXJBbmltYXRpb24pO1xuLy8gfSxcbl9wYXJzZVBvc2l0aW9uID0gZnVuY3Rpb24gX3BhcnNlUG9zaXRpb24odmFsdWUsIHRyaWdnZXIsIHNjcm9sbGVyU2l6ZSwgZGlyZWN0aW9uLCBzY3JvbGwsIG1hcmtlciwgbWFya2VyU2Nyb2xsZXIsIHNlbGYsIHNjcm9sbGVyQm91bmRzLCBib3JkZXJXaWR0aCwgdXNlRml4ZWRQb3NpdGlvbiwgc2Nyb2xsZXJNYXgsIGNvbnRhaW5lckFuaW1hdGlvbiwgY2xhbXBaZXJvUHJvcCkge1xuICBfaXNGdW5jdGlvbih2YWx1ZSkgJiYgKHZhbHVlID0gdmFsdWUoc2VsZikpO1xuXG4gIGlmIChfaXNTdHJpbmcodmFsdWUpICYmIHZhbHVlLnN1YnN0cigwLCAzKSA9PT0gXCJtYXhcIikge1xuICAgIHZhbHVlID0gc2Nyb2xsZXJNYXggKyAodmFsdWUuY2hhckF0KDQpID09PSBcIj1cIiA/IF9vZmZzZXRUb1B4KFwiMFwiICsgdmFsdWUuc3Vic3RyKDMpLCBzY3JvbGxlclNpemUpIDogMCk7XG4gIH1cblxuICB2YXIgdGltZSA9IGNvbnRhaW5lckFuaW1hdGlvbiA/IGNvbnRhaW5lckFuaW1hdGlvbi50aW1lKCkgOiAwLFxuICAgICAgcDEsXG4gICAgICBwMixcbiAgICAgIGVsZW1lbnQ7XG4gIGNvbnRhaW5lckFuaW1hdGlvbiAmJiBjb250YWluZXJBbmltYXRpb24uc2VlaygwKTtcbiAgaXNOYU4odmFsdWUpIHx8ICh2YWx1ZSA9ICt2YWx1ZSk7IC8vIGNvbnZlcnQgYSBzdHJpbmcgbnVtYmVyIGxpa2UgXCI0NVwiIHRvIGFuIGFjdHVhbCBudW1iZXJcblxuICBpZiAoIV9pc051bWJlcih2YWx1ZSkpIHtcbiAgICBfaXNGdW5jdGlvbih0cmlnZ2VyKSAmJiAodHJpZ2dlciA9IHRyaWdnZXIoc2VsZikpO1xuICAgIHZhciBvZmZzZXRzID0gKHZhbHVlIHx8IFwiMFwiKS5zcGxpdChcIiBcIiksXG4gICAgICAgIGJvdW5kcyxcbiAgICAgICAgbG9jYWxPZmZzZXQsXG4gICAgICAgIGdsb2JhbE9mZnNldCxcbiAgICAgICAgZGlzcGxheTtcbiAgICBlbGVtZW50ID0gX2dldFRhcmdldCh0cmlnZ2VyLCBzZWxmKSB8fCBfYm9keTtcbiAgICBib3VuZHMgPSBfZ2V0Qm91bmRzKGVsZW1lbnQpIHx8IHt9O1xuXG4gICAgaWYgKCghYm91bmRzIHx8ICFib3VuZHMubGVmdCAmJiAhYm91bmRzLnRvcCkgJiYgX2dldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZGlzcGxheSA9PT0gXCJub25lXCIpIHtcbiAgICAgIC8vIGlmIGRpc3BsYXkgaXMgXCJub25lXCIsIGl0IHdvbid0IHJlcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSBwcm9wZXJseVxuICAgICAgZGlzcGxheSA9IGVsZW1lbnQuc3R5bGUuZGlzcGxheTtcbiAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIGJvdW5kcyA9IF9nZXRCb3VuZHMoZWxlbWVudCk7XG4gICAgICBkaXNwbGF5ID8gZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gZGlzcGxheSA6IGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJkaXNwbGF5XCIpO1xuICAgIH1cblxuICAgIGxvY2FsT2Zmc2V0ID0gX29mZnNldFRvUHgob2Zmc2V0c1swXSwgYm91bmRzW2RpcmVjdGlvbi5kXSk7XG4gICAgZ2xvYmFsT2Zmc2V0ID0gX29mZnNldFRvUHgob2Zmc2V0c1sxXSB8fCBcIjBcIiwgc2Nyb2xsZXJTaXplKTtcbiAgICB2YWx1ZSA9IGJvdW5kc1tkaXJlY3Rpb24ucF0gLSBzY3JvbGxlckJvdW5kc1tkaXJlY3Rpb24ucF0gLSBib3JkZXJXaWR0aCArIGxvY2FsT2Zmc2V0ICsgc2Nyb2xsIC0gZ2xvYmFsT2Zmc2V0O1xuICAgIG1hcmtlclNjcm9sbGVyICYmIF9wb3NpdGlvbk1hcmtlcihtYXJrZXJTY3JvbGxlciwgZ2xvYmFsT2Zmc2V0LCBkaXJlY3Rpb24sIHNjcm9sbGVyU2l6ZSAtIGdsb2JhbE9mZnNldCA8IDIwIHx8IG1hcmtlclNjcm9sbGVyLl9pc1N0YXJ0ICYmIGdsb2JhbE9mZnNldCA+IDIwKTtcbiAgICBzY3JvbGxlclNpemUgLT0gc2Nyb2xsZXJTaXplIC0gZ2xvYmFsT2Zmc2V0OyAvLyBhZGp1c3QgZm9yIHRoZSBtYXJrZXJcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXJBbmltYXRpb24gJiYgKHZhbHVlID0gZ3NhcC51dGlscy5tYXBSYW5nZShjb250YWluZXJBbmltYXRpb24uc2Nyb2xsVHJpZ2dlci5zdGFydCwgY29udGFpbmVyQW5pbWF0aW9uLnNjcm9sbFRyaWdnZXIuZW5kLCAwLCBzY3JvbGxlck1heCwgdmFsdWUpKTtcbiAgICBtYXJrZXJTY3JvbGxlciAmJiBfcG9zaXRpb25NYXJrZXIobWFya2VyU2Nyb2xsZXIsIHNjcm9sbGVyU2l6ZSwgZGlyZWN0aW9uLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChjbGFtcFplcm9Qcm9wKSB7XG4gICAgc2VsZltjbGFtcFplcm9Qcm9wXSA9IHZhbHVlIHx8IC0wLjAwMTtcbiAgICB2YWx1ZSA8IDAgJiYgKHZhbHVlID0gMCk7XG4gIH1cblxuICBpZiAobWFya2VyKSB7XG4gICAgdmFyIHBvc2l0aW9uID0gdmFsdWUgKyBzY3JvbGxlclNpemUsXG4gICAgICAgIGlzU3RhcnQgPSBtYXJrZXIuX2lzU3RhcnQ7XG4gICAgcDEgPSBcInNjcm9sbFwiICsgZGlyZWN0aW9uLmQyO1xuXG4gICAgX3Bvc2l0aW9uTWFya2VyKG1hcmtlciwgcG9zaXRpb24sIGRpcmVjdGlvbiwgaXNTdGFydCAmJiBwb3NpdGlvbiA+IDIwIHx8ICFpc1N0YXJ0ICYmICh1c2VGaXhlZFBvc2l0aW9uID8gTWF0aC5tYXgoX2JvZHlbcDFdLCBfZG9jRWxbcDFdKSA6IG1hcmtlci5wYXJlbnROb2RlW3AxXSkgPD0gcG9zaXRpb24gKyAxKTtcblxuICAgIGlmICh1c2VGaXhlZFBvc2l0aW9uKSB7XG4gICAgICBzY3JvbGxlckJvdW5kcyA9IF9nZXRCb3VuZHMobWFya2VyU2Nyb2xsZXIpO1xuICAgICAgdXNlRml4ZWRQb3NpdGlvbiAmJiAobWFya2VyLnN0eWxlW2RpcmVjdGlvbi5vcC5wXSA9IHNjcm9sbGVyQm91bmRzW2RpcmVjdGlvbi5vcC5wXSAtIGRpcmVjdGlvbi5vcC5tIC0gbWFya2VyLl9vZmZzZXQgKyBfcHgpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb250YWluZXJBbmltYXRpb24gJiYgZWxlbWVudCkge1xuICAgIHAxID0gX2dldEJvdW5kcyhlbGVtZW50KTtcbiAgICBjb250YWluZXJBbmltYXRpb24uc2VlayhzY3JvbGxlck1heCk7XG4gICAgcDIgPSBfZ2V0Qm91bmRzKGVsZW1lbnQpO1xuICAgIGNvbnRhaW5lckFuaW1hdGlvbi5fY2FTY3JvbGxEaXN0ID0gcDFbZGlyZWN0aW9uLnBdIC0gcDJbZGlyZWN0aW9uLnBdO1xuICAgIHZhbHVlID0gdmFsdWUgLyBjb250YWluZXJBbmltYXRpb24uX2NhU2Nyb2xsRGlzdCAqIHNjcm9sbGVyTWF4O1xuICB9XG5cbiAgY29udGFpbmVyQW5pbWF0aW9uICYmIGNvbnRhaW5lckFuaW1hdGlvbi5zZWVrKHRpbWUpO1xuICByZXR1cm4gY29udGFpbmVyQW5pbWF0aW9uID8gdmFsdWUgOiBNYXRoLnJvdW5kKHZhbHVlKTtcbn0sXG4gICAgX3ByZWZpeEV4cCA9IC8od2Via2l0fG1venxsZW5ndGh8Y3NzVGV4dHxpbnNldCkvaSxcbiAgICBfcmVwYXJlbnQgPSBmdW5jdGlvbiBfcmVwYXJlbnQoZWxlbWVudCwgcGFyZW50LCB0b3AsIGxlZnQpIHtcbiAgaWYgKGVsZW1lbnQucGFyZW50Tm9kZSAhPT0gcGFyZW50KSB7XG4gICAgdmFyIHN0eWxlID0gZWxlbWVudC5zdHlsZSxcbiAgICAgICAgcCxcbiAgICAgICAgY3M7XG5cbiAgICBpZiAocGFyZW50ID09PSBfYm9keSkge1xuICAgICAgZWxlbWVudC5fc3RPcmlnID0gc3R5bGUuY3NzVGV4dDsgLy8gcmVjb3JkIG9yaWdpbmFsIGlubGluZSBzdHlsZXMgc28gd2UgY2FuIHJldmVydCB0aGVtIGxhdGVyXG5cbiAgICAgIGNzID0gX2dldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cbiAgICAgIGZvciAocCBpbiBjcykge1xuICAgICAgICAvLyBtdXN0IGNvcHkgYWxsIHJlbGV2YW50IHN0eWxlcyB0byBlbnN1cmUgdGhhdCBub3RoaW5nIGNoYW5nZXMgdmlzdWFsbHkgd2hlbiB3ZSByZXBhcmVudCB0byB0aGUgPGJvZHk+LiBTa2lwIHRoZSB2ZW5kb3IgcHJlZml4ZWQgb25lcy5cbiAgICAgICAgaWYgKCErcCAmJiAhX3ByZWZpeEV4cC50ZXN0KHApICYmIGNzW3BdICYmIHR5cGVvZiBzdHlsZVtwXSA9PT0gXCJzdHJpbmdcIiAmJiBwICE9PSBcIjBcIikge1xuICAgICAgICAgIHN0eWxlW3BdID0gY3NbcF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3R5bGUudG9wID0gdG9wO1xuICAgICAgc3R5bGUubGVmdCA9IGxlZnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlLmNzc1RleHQgPSBlbGVtZW50Ll9zdE9yaWc7XG4gICAgfVxuXG4gICAgZ3NhcC5jb3JlLmdldENhY2hlKGVsZW1lbnQpLnVuY2FjaGUgPSAxO1xuICAgIHBhcmVudC5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgfVxufSxcbiAgICBfaW50ZXJydXB0aW9uVHJhY2tlciA9IGZ1bmN0aW9uIF9pbnRlcnJ1cHRpb25UcmFja2VyKGdldFZhbHVlRnVuYywgaW5pdGlhbFZhbHVlLCBvbkludGVycnVwdCkge1xuICB2YXIgbGFzdDEgPSBpbml0aWFsVmFsdWUsXG4gICAgICBsYXN0MiA9IGxhc3QxO1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBNYXRoLnJvdW5kKGdldFZhbHVlRnVuYygpKTsgLy8gcm91bmQgYmVjYXVzZSBpbiBzb21lIFt2ZXJ5IHVuY29tbW9uXSBXaW5kb3dzIGVudmlyb25tZW50cywgc2Nyb2xsIGNhbiBnZXQgcmVwb3J0ZWQgd2l0aCBkZWNpbWFscyBldmVuIHRob3VnaCBpdCB3YXMgc2V0IHdpdGhvdXQuXG5cbiAgICBpZiAoY3VycmVudCAhPT0gbGFzdDEgJiYgY3VycmVudCAhPT0gbGFzdDIgJiYgTWF0aC5hYnMoY3VycmVudCAtIGxhc3QxKSA+IDMgJiYgTWF0aC5hYnMoY3VycmVudCAtIGxhc3QyKSA+IDMpIHtcbiAgICAgIC8vIGlmIHRoZSB1c2VyIHNjcm9sbHMsIGtpbGwgdGhlIHR3ZWVuLiBpT1MgU2FmYXJpIGludGVybWl0dGVudGx5IG1pc3JlcG9ydHMgdGhlIHNjcm9sbCBwb3NpdGlvbiwgaXQgbWF5IGJlIHRoZSBtb3N0IHJlY2VudGx5LXNldCBvbmUgb3IgdGhlIG9uZSBiZWZvcmUgdGhhdCEgV2hlbiBTYWZhcmkgaXMgem9vbWVkIChDTUQtKyksIGl0IG9mdGVuIG1pc3JlcG9ydHMgYXMgMSBwaXhlbCBvZmYgdG9vISBTbyBpZiB3ZSBzZXQgdGhlIHNjcm9sbCBwb3NpdGlvbiB0byAxMjUsIGZvciBleGFtcGxlLCBpdCdsbCBhY3R1YWxseSByZXBvcnQgaXQgYXMgMTI0LlxuICAgICAgdmFsdWUgPSBjdXJyZW50O1xuICAgICAgb25JbnRlcnJ1cHQgJiYgb25JbnRlcnJ1cHQoKTtcbiAgICB9XG5cbiAgICBsYXN0MiA9IGxhc3QxO1xuICAgIGxhc3QxID0gdmFsdWU7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufSxcbiAgICBfc2hpZnRNYXJrZXIgPSBmdW5jdGlvbiBfc2hpZnRNYXJrZXIobWFya2VyLCBkaXJlY3Rpb24sIHZhbHVlKSB7XG4gIHZhciB2YXJzID0ge307XG4gIHZhcnNbZGlyZWN0aW9uLnBdID0gXCIrPVwiICsgdmFsdWU7XG4gIGdzYXAuc2V0KG1hcmtlciwgdmFycyk7XG59LFxuICAgIC8vIF9tZXJnZUFuaW1hdGlvbnMgPSBhbmltYXRpb25zID0+IHtcbi8vIFx0bGV0IHRsID0gZ3NhcC50aW1lbGluZSh7c21vb3RoQ2hpbGRUaW1pbmc6IHRydWV9KS5zdGFydFRpbWUoTWF0aC5taW4oLi4uYW5pbWF0aW9ucy5tYXAoYSA9PiBhLmdsb2JhbFRpbWUoMCkpKSk7XG4vLyBcdGFuaW1hdGlvbnMuZm9yRWFjaChhID0+IHtsZXQgdGltZSA9IGEudG90YWxUaW1lKCk7IHRsLmFkZChhKTsgYS50b3RhbFRpbWUodGltZSk7IH0pO1xuLy8gXHR0bC5zbW9vdGhDaGlsZFRpbWluZyA9IGZhbHNlO1xuLy8gXHRyZXR1cm4gdGw7XG4vLyB9LFxuLy8gcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gdHdlZW4gdGhlIHNjcm9sbCBwb3NpdGlvbiBpbiB0aGUgZGlyZWN0aW9uIHByb3ZpZGVkLCBhbmQgd2hlbiBkb2luZyBzbyBpdCdsbCBhZGQgYSAudHdlZW4gcHJvcGVydHkgdG8gdGhlIEZVTkNUSU9OIGl0c2VsZiwgYW5kIHJlbW92ZSBpdCB3aGVuIHRoZSB0d2VlbiBjb21wbGV0ZXMgb3IgZ2V0cyBraWxsZWQuIFRoaXMgZ2l2ZXMgdXMgYSB3YXkgdG8gaGF2ZSBtdWx0aXBsZSBTY3JvbGxUcmlnZ2VycyB1c2UgYSBjZW50cmFsIGZ1bmN0aW9uIGZvciBhbnkgZ2l2ZW4gc2Nyb2xsZXIgYW5kIHNlZSBpZiB0aGVyZSdzIGEgc2Nyb2xsIHR3ZWVuIHJ1bm5pbmcgKHdoaWNoIHdvdWxkIGFmZmVjdCBpZi9ob3cgdGhpbmdzIGdldCB1cGRhdGVkKVxuX2dldFR3ZWVuQ3JlYXRvciA9IGZ1bmN0aW9uIF9nZXRUd2VlbkNyZWF0b3Ioc2Nyb2xsZXIsIGRpcmVjdGlvbikge1xuICB2YXIgZ2V0U2Nyb2xsID0gX2dldFNjcm9sbEZ1bmMoc2Nyb2xsZXIsIGRpcmVjdGlvbiksXG4gICAgICBwcm9wID0gXCJfc2Nyb2xsXCIgKyBkaXJlY3Rpb24ucDIsXG4gICAgICAvLyBhZGQgYSB0d2VlbmFibGUgcHJvcGVydHkgdG8gdGhlIHNjcm9sbGVyIHRoYXQncyBhIGdldHRlci9zZXR0ZXIgZnVuY3Rpb24sIGxpa2UgX3Njcm9sbFRvcCBvciBfc2Nyb2xsTGVmdC4gVGhpcyB3YXksIGlmIHNvbWVvbmUgZG9lcyBnc2FwLmtpbGxUd2VlbnNPZihzY3JvbGxlcikgaXQnbGwga2lsbCB0aGUgc2Nyb2xsIHR3ZWVuLlxuICBnZXRUd2VlbiA9IGZ1bmN0aW9uIGdldFR3ZWVuKHNjcm9sbFRvLCB2YXJzLCBpbml0aWFsVmFsdWUsIGNoYW5nZTEsIGNoYW5nZTIpIHtcbiAgICB2YXIgdHdlZW4gPSBnZXRUd2Vlbi50d2VlbixcbiAgICAgICAgb25Db21wbGV0ZSA9IHZhcnMub25Db21wbGV0ZSxcbiAgICAgICAgbW9kaWZpZXJzID0ge307XG4gICAgaW5pdGlhbFZhbHVlID0gaW5pdGlhbFZhbHVlIHx8IGdldFNjcm9sbCgpO1xuXG4gICAgdmFyIGNoZWNrRm9ySW50ZXJydXB0aW9uID0gX2ludGVycnVwdGlvblRyYWNrZXIoZ2V0U2Nyb2xsLCBpbml0aWFsVmFsdWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHR3ZWVuLmtpbGwoKTtcbiAgICAgIGdldFR3ZWVuLnR3ZWVuID0gMDtcbiAgICB9KTtcblxuICAgIGNoYW5nZTIgPSBjaGFuZ2UxICYmIGNoYW5nZTIgfHwgMDsgLy8gaWYgY2hhbmdlMSBpcyAwLCB3ZSBzZXQgdGhhdCB0byB0aGUgZGlmZmVyZW5jZSBhbmQgaWdub3JlIGNoYW5nZTIuIE90aGVyd2lzZSwgdGhlcmUgd291bGQgYmUgYSBjb21wb3VuZCBlZmZlY3QuXG5cbiAgICBjaGFuZ2UxID0gY2hhbmdlMSB8fCBzY3JvbGxUbyAtIGluaXRpYWxWYWx1ZTtcbiAgICB0d2VlbiAmJiB0d2Vlbi5raWxsKCk7XG4gICAgdmFyc1twcm9wXSA9IHNjcm9sbFRvO1xuICAgIHZhcnMubW9kaWZpZXJzID0gbW9kaWZpZXJzO1xuXG4gICAgbW9kaWZpZXJzW3Byb3BdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGNoZWNrRm9ySW50ZXJydXB0aW9uKGluaXRpYWxWYWx1ZSArIGNoYW5nZTEgKiB0d2Vlbi5yYXRpbyArIGNoYW5nZTIgKiB0d2Vlbi5yYXRpbyAqIHR3ZWVuLnJhdGlvKTtcbiAgICB9O1xuXG4gICAgdmFycy5vblVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF9zY3JvbGxlcnMuY2FjaGUrKztcblxuICAgICAgX3VwZGF0ZUFsbCgpO1xuICAgIH07XG5cbiAgICB2YXJzLm9uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBnZXRUd2Vlbi50d2VlbiA9IDA7XG4gICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUuY2FsbCh0d2Vlbik7XG4gICAgfTtcblxuICAgIHR3ZWVuID0gZ2V0VHdlZW4udHdlZW4gPSBnc2FwLnRvKHNjcm9sbGVyLCB2YXJzKTtcbiAgICByZXR1cm4gdHdlZW47XG4gIH07XG5cbiAgc2Nyb2xsZXJbcHJvcF0gPSBnZXRTY3JvbGw7XG5cbiAgZ2V0U2Nyb2xsLndoZWVsSGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0VHdlZW4udHdlZW4gJiYgZ2V0VHdlZW4udHdlZW4ua2lsbCgpICYmIChnZXRUd2Vlbi50d2VlbiA9IDApO1xuICB9O1xuXG4gIF9hZGRMaXN0ZW5lcihzY3JvbGxlciwgXCJ3aGVlbFwiLCBnZXRTY3JvbGwud2hlZWxIYW5kbGVyKTsgLy8gV2luZG93cyBtYWNoaW5lcyBoYW5kbGUgbW91c2V3aGVlbCBzY3JvbGxpbmcgaW4gY2h1bmtzIChsaWtlIFwiMyBsaW5lcyBwZXIgc2Nyb2xsXCIpIG1lYW5pbmcgdGhlIHR5cGljYWwgc3RyYXRlZ3kgZm9yIGNhbmNlbGxpbmcgdGhlIHNjcm9sbCBpc24ndCBhcyBzZW5zaXRpdmUuIEl0J3MgbXVjaCBtb3JlIGxpa2VseSB0byBtYXRjaCBvbmUgb2YgdGhlIHByZXZpb3VzIDIgc2Nyb2xsIGV2ZW50IHBvc2l0aW9ucy4gU28gd2Uga2lsbCBhbnkgc25hcHBpbmcgYXMgc29vbiBhcyB0aGVyZSdzIGEgd2hlZWwgZXZlbnQuXG5cblxuICBTY3JvbGxUcmlnZ2VyLmlzVG91Y2ggJiYgX2FkZExpc3RlbmVyKHNjcm9sbGVyLCBcInRvdWNobW92ZVwiLCBnZXRTY3JvbGwud2hlZWxIYW5kbGVyKTtcbiAgcmV0dXJuIGdldFR3ZWVuO1xufTtcblxuZXhwb3J0IHZhciBTY3JvbGxUcmlnZ2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU2Nyb2xsVHJpZ2dlcih2YXJzLCBhbmltYXRpb24pIHtcbiAgICBfY29yZUluaXR0ZWQgfHwgU2Nyb2xsVHJpZ2dlci5yZWdpc3Rlcihnc2FwKSB8fCBjb25zb2xlLndhcm4oXCJQbGVhc2UgZ3NhcC5yZWdpc3RlclBsdWdpbihTY3JvbGxUcmlnZ2VyKVwiKTtcblxuICAgIF9jb250ZXh0KHRoaXMpO1xuXG4gICAgdGhpcy5pbml0KHZhcnMsIGFuaW1hdGlvbik7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU2Nyb2xsVHJpZ2dlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmluaXQgPSBmdW5jdGlvbiBpbml0KHZhcnMsIGFuaW1hdGlvbikge1xuICAgIHRoaXMucHJvZ3Jlc3MgPSB0aGlzLnN0YXJ0ID0gMDtcbiAgICB0aGlzLnZhcnMgJiYgdGhpcy5raWxsKHRydWUsIHRydWUpOyAvLyBpbiBjYXNlIGl0J3MgYmVpbmcgaW5pdHRlZCBhZ2FpblxuXG4gICAgaWYgKCFfZW5hYmxlZCkge1xuICAgICAgdGhpcy51cGRhdGUgPSB0aGlzLnJlZnJlc2ggPSB0aGlzLmtpbGwgPSBfcGFzc1Rocm91Z2g7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFycyA9IF9zZXREZWZhdWx0cyhfaXNTdHJpbmcodmFycykgfHwgX2lzTnVtYmVyKHZhcnMpIHx8IHZhcnMubm9kZVR5cGUgPyB7XG4gICAgICB0cmlnZ2VyOiB2YXJzXG4gICAgfSA6IHZhcnMsIF9kZWZhdWx0cyk7XG5cbiAgICB2YXIgX3ZhcnMgPSB2YXJzLFxuICAgICAgICBvblVwZGF0ZSA9IF92YXJzLm9uVXBkYXRlLFxuICAgICAgICB0b2dnbGVDbGFzcyA9IF92YXJzLnRvZ2dsZUNsYXNzLFxuICAgICAgICBpZCA9IF92YXJzLmlkLFxuICAgICAgICBvblRvZ2dsZSA9IF92YXJzLm9uVG9nZ2xlLFxuICAgICAgICBvblJlZnJlc2ggPSBfdmFycy5vblJlZnJlc2gsXG4gICAgICAgIHNjcnViID0gX3ZhcnMuc2NydWIsXG4gICAgICAgIHRyaWdnZXIgPSBfdmFycy50cmlnZ2VyLFxuICAgICAgICBwaW4gPSBfdmFycy5waW4sXG4gICAgICAgIHBpblNwYWNpbmcgPSBfdmFycy5waW5TcGFjaW5nLFxuICAgICAgICBpbnZhbGlkYXRlT25SZWZyZXNoID0gX3ZhcnMuaW52YWxpZGF0ZU9uUmVmcmVzaCxcbiAgICAgICAgYW50aWNpcGF0ZVBpbiA9IF92YXJzLmFudGljaXBhdGVQaW4sXG4gICAgICAgIG9uU2NydWJDb21wbGV0ZSA9IF92YXJzLm9uU2NydWJDb21wbGV0ZSxcbiAgICAgICAgb25TbmFwQ29tcGxldGUgPSBfdmFycy5vblNuYXBDb21wbGV0ZSxcbiAgICAgICAgb25jZSA9IF92YXJzLm9uY2UsXG4gICAgICAgIHNuYXAgPSBfdmFycy5zbmFwLFxuICAgICAgICBwaW5SZXBhcmVudCA9IF92YXJzLnBpblJlcGFyZW50LFxuICAgICAgICBwaW5TcGFjZXIgPSBfdmFycy5waW5TcGFjZXIsXG4gICAgICAgIGNvbnRhaW5lckFuaW1hdGlvbiA9IF92YXJzLmNvbnRhaW5lckFuaW1hdGlvbixcbiAgICAgICAgZmFzdFNjcm9sbEVuZCA9IF92YXJzLmZhc3RTY3JvbGxFbmQsXG4gICAgICAgIHByZXZlbnRPdmVybGFwcyA9IF92YXJzLnByZXZlbnRPdmVybGFwcyxcbiAgICAgICAgZGlyZWN0aW9uID0gdmFycy5ob3Jpem9udGFsIHx8IHZhcnMuY29udGFpbmVyQW5pbWF0aW9uICYmIHZhcnMuaG9yaXpvbnRhbCAhPT0gZmFsc2UgPyBfaG9yaXpvbnRhbCA6IF92ZXJ0aWNhbCxcbiAgICAgICAgaXNUb2dnbGUgPSAhc2NydWIgJiYgc2NydWIgIT09IDAsXG4gICAgICAgIHNjcm9sbGVyID0gX2dldFRhcmdldCh2YXJzLnNjcm9sbGVyIHx8IF93aW4pLFxuICAgICAgICBzY3JvbGxlckNhY2hlID0gZ3NhcC5jb3JlLmdldENhY2hlKHNjcm9sbGVyKSxcbiAgICAgICAgaXNWaWV3cG9ydCA9IF9pc1ZpZXdwb3J0KHNjcm9sbGVyKSxcbiAgICAgICAgdXNlRml4ZWRQb3NpdGlvbiA9IChcInBpblR5cGVcIiBpbiB2YXJzID8gdmFycy5waW5UeXBlIDogX2dldFByb3h5UHJvcChzY3JvbGxlciwgXCJwaW5UeXBlXCIpIHx8IGlzVmlld3BvcnQgJiYgXCJmaXhlZFwiKSA9PT0gXCJmaXhlZFwiLFxuICAgICAgICBjYWxsYmFja3MgPSBbdmFycy5vbkVudGVyLCB2YXJzLm9uTGVhdmUsIHZhcnMub25FbnRlckJhY2ssIHZhcnMub25MZWF2ZUJhY2tdLFxuICAgICAgICB0b2dnbGVBY3Rpb25zID0gaXNUb2dnbGUgJiYgdmFycy50b2dnbGVBY3Rpb25zLnNwbGl0KFwiIFwiKSxcbiAgICAgICAgbWFya2VycyA9IFwibWFya2Vyc1wiIGluIHZhcnMgPyB2YXJzLm1hcmtlcnMgOiBfZGVmYXVsdHMubWFya2VycyxcbiAgICAgICAgYm9yZGVyV2lkdGggPSBpc1ZpZXdwb3J0ID8gMCA6IHBhcnNlRmxvYXQoX2dldENvbXB1dGVkU3R5bGUoc2Nyb2xsZXIpW1wiYm9yZGVyXCIgKyBkaXJlY3Rpb24ucDIgKyBfV2lkdGhdKSB8fCAwLFxuICAgICAgICBzZWxmID0gdGhpcyxcbiAgICAgICAgb25SZWZyZXNoSW5pdCA9IHZhcnMub25SZWZyZXNoSW5pdCAmJiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdmFycy5vblJlZnJlc2hJbml0KHNlbGYpO1xuICAgIH0sXG4gICAgICAgIGdldFNjcm9sbGVyU2l6ZSA9IF9nZXRTaXplRnVuYyhzY3JvbGxlciwgaXNWaWV3cG9ydCwgZGlyZWN0aW9uKSxcbiAgICAgICAgZ2V0U2Nyb2xsZXJPZmZzZXRzID0gX2dldE9mZnNldHNGdW5jKHNjcm9sbGVyLCBpc1ZpZXdwb3J0KSxcbiAgICAgICAgbGFzdFNuYXAgPSAwLFxuICAgICAgICBsYXN0UmVmcmVzaCA9IDAsXG4gICAgICAgIHByZXZQcm9ncmVzcyA9IDAsXG4gICAgICAgIHNjcm9sbEZ1bmMgPSBfZ2V0U2Nyb2xsRnVuYyhzY3JvbGxlciwgZGlyZWN0aW9uKSxcbiAgICAgICAgdHdlZW5UbyxcbiAgICAgICAgcGluQ2FjaGUsXG4gICAgICAgIHNuYXBGdW5jLFxuICAgICAgICBzY3JvbGwxLFxuICAgICAgICBzY3JvbGwyLFxuICAgICAgICBzdGFydCxcbiAgICAgICAgZW5kLFxuICAgICAgICBtYXJrZXJTdGFydCxcbiAgICAgICAgbWFya2VyRW5kLFxuICAgICAgICBtYXJrZXJTdGFydFRyaWdnZXIsXG4gICAgICAgIG1hcmtlckVuZFRyaWdnZXIsXG4gICAgICAgIG1hcmtlclZhcnMsXG4gICAgICAgIGV4ZWN1dGluZ09uUmVmcmVzaCxcbiAgICAgICAgY2hhbmdlLFxuICAgICAgICBwaW5PcmlnaW5hbFN0YXRlLFxuICAgICAgICBwaW5BY3RpdmVTdGF0ZSxcbiAgICAgICAgcGluU3RhdGUsXG4gICAgICAgIHNwYWNlcixcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBwaW5HZXR0ZXIsXG4gICAgICAgIHBpblNldHRlcixcbiAgICAgICAgcGluU3RhcnQsXG4gICAgICAgIHBpbkNoYW5nZSxcbiAgICAgICAgc3BhY2luZ1N0YXJ0LFxuICAgICAgICBzcGFjZXJTdGF0ZSxcbiAgICAgICAgbWFya2VyU3RhcnRTZXR0ZXIsXG4gICAgICAgIHBpbk1vdmVzLFxuICAgICAgICBtYXJrZXJFbmRTZXR0ZXIsXG4gICAgICAgIGNzLFxuICAgICAgICBzbmFwMSxcbiAgICAgICAgc25hcDIsXG4gICAgICAgIHNjcnViVHdlZW4sXG4gICAgICAgIHNjcnViU21vb3RoLFxuICAgICAgICBzbmFwRHVyQ2xhbXAsXG4gICAgICAgIHNuYXBEZWxheWVkQ2FsbCxcbiAgICAgICAgcHJldlNjcm9sbCxcbiAgICAgICAgcHJldkFuaW1Qcm9ncmVzcyxcbiAgICAgICAgY2FNYXJrZXJTZXR0ZXIsXG4gICAgICAgIGN1c3RvbVJldmVydFJldHVybjsgLy8gZm9yIHRoZSBzYWtlIG9mIGVmZmljaWVuY3ksIF9zdGFydENsYW1wL19lbmRDbGFtcCBzZXJ2ZSBsaWtlIGEgdHJ1dGh5IHZhbHVlIGluZGljYXRpbmcgdGhhdCBjbGFtcGluZyB3YXMgZW5hYmxlZCBvbiB0aGUgc3RhcnQvZW5kLCBhbmQgQUxTTyBzdG9yZSB0aGUgYWN0dWFsIHByZS1jbGFtcGVkIG51bWVyaWMgdmFsdWUuIFdlIHRhcCBpbnRvIHRoYXQgaW4gU2Nyb2xsU21vb3RoZXIgZm9yIHNwZWVkIGVmZmVjdHMuIFNvIGZvciBleGFtcGxlLCBpZiBzdGFydD1cImNsYW1wKHRvcCBib3R0b20pXCIgcmVzdWx0cyBpbiBhIHN0YXJ0IG9mIC0xMDAgbmF0dXJhbGx5LCBpdCB3b3VsZCBnZXQgY2xhbXBlZCB0byAwIGJ1dCAtMTAwIHdvdWxkIGJlIHN0b3JlZCBpbiBfc3RhcnRDbGFtcC5cblxuXG4gICAgc2VsZi5fc3RhcnRDbGFtcCA9IHNlbGYuX2VuZENsYW1wID0gZmFsc2U7XG4gICAgc2VsZi5fZGlyID0gZGlyZWN0aW9uO1xuICAgIGFudGljaXBhdGVQaW4gKj0gNDU7XG4gICAgc2VsZi5zY3JvbGxlciA9IHNjcm9sbGVyO1xuICAgIHNlbGYuc2Nyb2xsID0gY29udGFpbmVyQW5pbWF0aW9uID8gY29udGFpbmVyQW5pbWF0aW9uLnRpbWUuYmluZChjb250YWluZXJBbmltYXRpb24pIDogc2Nyb2xsRnVuYztcbiAgICBzY3JvbGwxID0gc2Nyb2xsRnVuYygpO1xuICAgIHNlbGYudmFycyA9IHZhcnM7XG4gICAgYW5pbWF0aW9uID0gYW5pbWF0aW9uIHx8IHZhcnMuYW5pbWF0aW9uO1xuXG4gICAgaWYgKFwicmVmcmVzaFByaW9yaXR5XCIgaW4gdmFycykge1xuICAgICAgX3NvcnQgPSAxO1xuICAgICAgdmFycy5yZWZyZXNoUHJpb3JpdHkgPT09IC05OTk5ICYmIChfcHJpbWFyeSA9IHNlbGYpOyAvLyB1c2VkIGJ5IFNjcm9sbFNtb290aGVyXG4gICAgfVxuXG4gICAgc2Nyb2xsZXJDYWNoZS50d2VlblNjcm9sbCA9IHNjcm9sbGVyQ2FjaGUudHdlZW5TY3JvbGwgfHwge1xuICAgICAgdG9wOiBfZ2V0VHdlZW5DcmVhdG9yKHNjcm9sbGVyLCBfdmVydGljYWwpLFxuICAgICAgbGVmdDogX2dldFR3ZWVuQ3JlYXRvcihzY3JvbGxlciwgX2hvcml6b250YWwpXG4gICAgfTtcbiAgICBzZWxmLnR3ZWVuVG8gPSB0d2VlblRvID0gc2Nyb2xsZXJDYWNoZS50d2VlblNjcm9sbFtkaXJlY3Rpb24ucF07XG5cbiAgICBzZWxmLnNjcnViRHVyYXRpb24gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHNjcnViU21vb3RoID0gX2lzTnVtYmVyKHZhbHVlKSAmJiB2YWx1ZTtcblxuICAgICAgaWYgKCFzY3J1YlNtb290aCkge1xuICAgICAgICBzY3J1YlR3ZWVuICYmIHNjcnViVHdlZW4ucHJvZ3Jlc3MoMSkua2lsbCgpO1xuICAgICAgICBzY3J1YlR3ZWVuID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjcnViVHdlZW4gPyBzY3J1YlR3ZWVuLmR1cmF0aW9uKHZhbHVlKSA6IHNjcnViVHdlZW4gPSBnc2FwLnRvKGFuaW1hdGlvbiwge1xuICAgICAgICAgIGVhc2U6IFwiZXhwb1wiLFxuICAgICAgICAgIHRvdGFsUHJvZ3Jlc3M6IFwiKz0wXCIsXG4gICAgICAgICAgZHVyYXRpb246IHNjcnViU21vb3RoLFxuICAgICAgICAgIHBhdXNlZDogdHJ1ZSxcbiAgICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiBvbkNvbXBsZXRlKCkge1xuICAgICAgICAgICAgcmV0dXJuIG9uU2NydWJDb21wbGV0ZSAmJiBvblNjcnViQ29tcGxldGUoc2VsZik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKGFuaW1hdGlvbikge1xuICAgICAgYW5pbWF0aW9uLnZhcnMubGF6eSA9IGZhbHNlO1xuICAgICAgYW5pbWF0aW9uLl9pbml0dGVkICYmICFzZWxmLmlzUmV2ZXJ0ZWQgfHwgYW5pbWF0aW9uLnZhcnMuaW1tZWRpYXRlUmVuZGVyICE9PSBmYWxzZSAmJiB2YXJzLmltbWVkaWF0ZVJlbmRlciAhPT0gZmFsc2UgJiYgYW5pbWF0aW9uLmR1cmF0aW9uKCkgJiYgYW5pbWF0aW9uLnJlbmRlcigwLCB0cnVlLCB0cnVlKTsgLy8gc3BlY2lhbCBjYXNlOiBpZiB0aGlzIFNjcm9sbFRyaWdnZXIgZ2V0cyByZS1pbml0dGVkLCBhIGZyb20oKSB0d2VlbiB3aXRoIGEgc3RhZ2dlciBjb3VsZCBnZXQgaW5pdHRlZCBpbml0aWFsbHkgYW5kIHRoZW4gcmV2ZXJ0ZWQgb24gdGhlIHJlLWluaXQgd2hpY2ggbWVhbnMgaXQnbGwgbmVlZCB0byBnZXQgcmVuZGVyZWQgYWdhaW4gaGVyZSB0byBwcm9wZXJseSBkaXNwbGF5IHRoaW5ncy4gT3RoZXJ3aXNlLCBTZWUgaHR0cHM6Ly9ncmVlbnNvY2suY29tL2ZvcnVtcy90b3BpYy8zNjc3Ny1zY3JvbGxzbW9vdGhlci1zcGxpdHRleHQtbmV4dGpzLyBhbmQgaHR0cHM6Ly9jb2RlcGVuLmlvL0dyZWVuU29jay9wZW4vZVlQeVBwZD9lZGl0b3JzPTAwMTBcblxuICAgICAgc2VsZi5hbmltYXRpb24gPSBhbmltYXRpb24ucGF1c2UoKTtcbiAgICAgIGFuaW1hdGlvbi5zY3JvbGxUcmlnZ2VyID0gc2VsZjtcbiAgICAgIHNlbGYuc2NydWJEdXJhdGlvbihzY3J1Yik7XG4gICAgICBzbmFwMSA9IDA7XG4gICAgICBpZCB8fCAoaWQgPSBhbmltYXRpb24udmFycy5pZCk7XG4gICAgfVxuXG4gICAgaWYgKHNuYXApIHtcbiAgICAgIC8vIFRPRE86IHBvdGVudGlhbCBpZGVhOiB1c2UgbGVnaXRpbWF0ZSBDU1Mgc2Nyb2xsIHNuYXBwaW5nIGJ5IHB1c2hpbmcgaW52aXNpYmxlIGVsZW1lbnRzIGludG8gdGhlIERPTSB0aGF0IHNlcnZlIGFzIHNuYXAgcG9zaXRpb25zLCBhbmQgdG9nZ2xlIHRoZSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnN0eWxlLnNjcm9sbFNuYXBUeXBlIG9uVG9nZ2xlLiBTZWUgaHR0cHM6Ly9jb2RlcGVuLmlvL0dyZWVuU29jay9wZW4vSmpMcmdXTSBmb3IgYSBxdWljayBwcm9vZiBvZiBjb25jZXB0LlxuICAgICAgaWYgKCFfaXNPYmplY3Qoc25hcCkgfHwgc25hcC5wdXNoKSB7XG4gICAgICAgIHNuYXAgPSB7XG4gICAgICAgICAgc25hcFRvOiBzbmFwXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIFwic2Nyb2xsQmVoYXZpb3JcIiBpbiBfYm9keS5zdHlsZSAmJiBnc2FwLnNldChpc1ZpZXdwb3J0ID8gW19ib2R5LCBfZG9jRWxdIDogc2Nyb2xsZXIsIHtcbiAgICAgICAgc2Nyb2xsQmVoYXZpb3I6IFwiYXV0b1wiXG4gICAgICB9KTsgLy8gc21vb3RoIHNjcm9sbGluZyBkb2Vzbid0IHdvcmsgd2l0aCBzbmFwLlxuXG4gICAgICBfc2Nyb2xsZXJzLmZvckVhY2goZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgcmV0dXJuIF9pc0Z1bmN0aW9uKG8pICYmIG8udGFyZ2V0ID09PSAoaXNWaWV3cG9ydCA/IF9kb2Muc2Nyb2xsaW5nRWxlbWVudCB8fCBfZG9jRWwgOiBzY3JvbGxlcikgJiYgKG8uc21vb3RoID0gZmFsc2UpO1xuICAgICAgfSk7IC8vIG5vdGU6IHNldCBzbW9vdGggdG8gZmFsc2Ugb24gYm90aCB0aGUgdmVydGljYWwgYW5kIGhvcml6b250YWwgc2Nyb2xsIGdldHRlcnMvc2V0dGVyc1xuXG5cbiAgICAgIHNuYXBGdW5jID0gX2lzRnVuY3Rpb24oc25hcC5zbmFwVG8pID8gc25hcC5zbmFwVG8gOiBzbmFwLnNuYXBUbyA9PT0gXCJsYWJlbHNcIiA/IF9nZXRDbG9zZXN0TGFiZWwoYW5pbWF0aW9uKSA6IHNuYXAuc25hcFRvID09PSBcImxhYmVsc0RpcmVjdGlvbmFsXCIgPyBfZ2V0TGFiZWxBdERpcmVjdGlvbihhbmltYXRpb24pIDogc25hcC5kaXJlY3Rpb25hbCAhPT0gZmFsc2UgPyBmdW5jdGlvbiAodmFsdWUsIHN0KSB7XG4gICAgICAgIHJldHVybiBfc25hcERpcmVjdGlvbmFsKHNuYXAuc25hcFRvKSh2YWx1ZSwgX2dldFRpbWUoKSAtIGxhc3RSZWZyZXNoIDwgNTAwID8gMCA6IHN0LmRpcmVjdGlvbik7XG4gICAgICB9IDogZ3NhcC51dGlscy5zbmFwKHNuYXAuc25hcFRvKTtcbiAgICAgIHNuYXBEdXJDbGFtcCA9IHNuYXAuZHVyYXRpb24gfHwge1xuICAgICAgICBtaW46IDAuMSxcbiAgICAgICAgbWF4OiAyXG4gICAgICB9O1xuICAgICAgc25hcER1ckNsYW1wID0gX2lzT2JqZWN0KHNuYXBEdXJDbGFtcCkgPyBfY2xhbXAoc25hcER1ckNsYW1wLm1pbiwgc25hcER1ckNsYW1wLm1heCkgOiBfY2xhbXAoc25hcER1ckNsYW1wLCBzbmFwRHVyQ2xhbXApO1xuICAgICAgc25hcERlbGF5ZWRDYWxsID0gZ3NhcC5kZWxheWVkQ2FsbChzbmFwLmRlbGF5IHx8IHNjcnViU21vb3RoIC8gMiB8fCAwLjEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNjcm9sbCA9IHNjcm9sbEZ1bmMoKSxcbiAgICAgICAgICAgIHJlZnJlc2hlZFJlY2VudGx5ID0gX2dldFRpbWUoKSAtIGxhc3RSZWZyZXNoIDwgNTAwLFxuICAgICAgICAgICAgdHdlZW4gPSB0d2VlblRvLnR3ZWVuO1xuXG4gICAgICAgIGlmICgocmVmcmVzaGVkUmVjZW50bHkgfHwgTWF0aC5hYnMoc2VsZi5nZXRWZWxvY2l0eSgpKSA8IDEwKSAmJiAhdHdlZW4gJiYgIV9wb2ludGVySXNEb3duICYmIGxhc3RTbmFwICE9PSBzY3JvbGwpIHtcbiAgICAgICAgICB2YXIgcHJvZ3Jlc3MgPSAoc2Nyb2xsIC0gc3RhcnQpIC8gY2hhbmdlLFxuICAgICAgICAgICAgICB0b3RhbFByb2dyZXNzID0gYW5pbWF0aW9uICYmICFpc1RvZ2dsZSA/IGFuaW1hdGlvbi50b3RhbFByb2dyZXNzKCkgOiBwcm9ncmVzcyxcbiAgICAgICAgICAgICAgdmVsb2NpdHkgPSByZWZyZXNoZWRSZWNlbnRseSA/IDAgOiAodG90YWxQcm9ncmVzcyAtIHNuYXAyKSAvIChfZ2V0VGltZSgpIC0gX3RpbWUyKSAqIDEwMDAgfHwgMCxcbiAgICAgICAgICAgICAgY2hhbmdlMSA9IGdzYXAudXRpbHMuY2xhbXAoLXByb2dyZXNzLCAxIC0gcHJvZ3Jlc3MsIF9hYnModmVsb2NpdHkgLyAyKSAqIHZlbG9jaXR5IC8gMC4xODUpLFxuICAgICAgICAgICAgICBuYXR1cmFsRW5kID0gcHJvZ3Jlc3MgKyAoc25hcC5pbmVydGlhID09PSBmYWxzZSA/IDAgOiBjaGFuZ2UxKSxcbiAgICAgICAgICAgICAgZW5kVmFsdWUgPSBfY2xhbXAoMCwgMSwgc25hcEZ1bmMobmF0dXJhbEVuZCwgc2VsZikpLFxuICAgICAgICAgICAgICBlbmRTY3JvbGwgPSBNYXRoLnJvdW5kKHN0YXJ0ICsgZW5kVmFsdWUgKiBjaGFuZ2UpLFxuICAgICAgICAgICAgICBfc25hcCA9IHNuYXAsXG4gICAgICAgICAgICAgIG9uU3RhcnQgPSBfc25hcC5vblN0YXJ0LFxuICAgICAgICAgICAgICBfb25JbnRlcnJ1cHQgPSBfc25hcC5vbkludGVycnVwdCxcbiAgICAgICAgICAgICAgX29uQ29tcGxldGUgPSBfc25hcC5vbkNvbXBsZXRlO1xuXG4gICAgICAgICAgaWYgKHNjcm9sbCA8PSBlbmQgJiYgc2Nyb2xsID49IHN0YXJ0ICYmIGVuZFNjcm9sbCAhPT0gc2Nyb2xsKSB7XG4gICAgICAgICAgICBpZiAodHdlZW4gJiYgIXR3ZWVuLl9pbml0dGVkICYmIHR3ZWVuLmRhdGEgPD0gX2FicyhlbmRTY3JvbGwgLSBzY3JvbGwpKSB7XG4gICAgICAgICAgICAgIC8vIHRoZXJlJ3MgYW4gb3ZlcmxhcHBpbmcgc25hcCEgU28gd2UgbXVzdCBmaWd1cmUgb3V0IHdoaWNoIG9uZSBpcyBjbG9zZXIgYW5kIGxldCB0aGF0IHR3ZWVuIGxpdmUuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNuYXAuaW5lcnRpYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgY2hhbmdlMSA9IGVuZFZhbHVlIC0gcHJvZ3Jlc3M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHR3ZWVuVG8oZW5kU2Nyb2xsLCB7XG4gICAgICAgICAgICAgIGR1cmF0aW9uOiBzbmFwRHVyQ2xhbXAoX2FicyhNYXRoLm1heChfYWJzKG5hdHVyYWxFbmQgLSB0b3RhbFByb2dyZXNzKSwgX2FicyhlbmRWYWx1ZSAtIHRvdGFsUHJvZ3Jlc3MpKSAqIDAuMTg1IC8gdmVsb2NpdHkgLyAwLjA1IHx8IDApKSxcbiAgICAgICAgICAgICAgZWFzZTogc25hcC5lYXNlIHx8IFwicG93ZXIzXCIsXG4gICAgICAgICAgICAgIGRhdGE6IF9hYnMoZW5kU2Nyb2xsIC0gc2Nyb2xsKSxcbiAgICAgICAgICAgICAgLy8gcmVjb3JkIHRoZSBkaXN0YW5jZSBzbyB0aGF0IGlmIGFub3RoZXIgc25hcCB0d2VlbiBvY2N1cnMgKGNvbmZsaWN0KSB3ZSBjYW4gcHJpb3JpdGl6ZSB0aGUgY2xvc2VzdCBzbmFwLlxuICAgICAgICAgICAgICBvbkludGVycnVwdDogZnVuY3Rpb24gb25JbnRlcnJ1cHQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNuYXBEZWxheWVkQ2FsbC5yZXN0YXJ0KHRydWUpICYmIF9vbkludGVycnVwdCAmJiBfb25JbnRlcnJ1cHQoc2VsZik7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uIG9uQ29tcGxldGUoKSB7XG4gICAgICAgICAgICAgICAgc2VsZi51cGRhdGUoKTtcbiAgICAgICAgICAgICAgICBsYXN0U25hcCA9IHNjcm9sbEZ1bmMoKTtcbiAgICAgICAgICAgICAgICBzbmFwMSA9IHNuYXAyID0gYW5pbWF0aW9uICYmICFpc1RvZ2dsZSA/IGFuaW1hdGlvbi50b3RhbFByb2dyZXNzKCkgOiBzZWxmLnByb2dyZXNzO1xuICAgICAgICAgICAgICAgIG9uU25hcENvbXBsZXRlICYmIG9uU25hcENvbXBsZXRlKHNlbGYpO1xuICAgICAgICAgICAgICAgIF9vbkNvbXBsZXRlICYmIF9vbkNvbXBsZXRlKHNlbGYpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBzY3JvbGwsIGNoYW5nZTEgKiBjaGFuZ2UsIGVuZFNjcm9sbCAtIHNjcm9sbCAtIGNoYW5nZTEgKiBjaGFuZ2UpO1xuICAgICAgICAgICAgb25TdGFydCAmJiBvblN0YXJ0KHNlbGYsIHR3ZWVuVG8udHdlZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzZWxmLmlzQWN0aXZlICYmIGxhc3RTbmFwICE9PSBzY3JvbGwpIHtcbiAgICAgICAgICBzbmFwRGVsYXllZENhbGwucmVzdGFydCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSkucGF1c2UoKTtcbiAgICB9XG5cbiAgICBpZCAmJiAoX2lkc1tpZF0gPSBzZWxmKTtcbiAgICB0cmlnZ2VyID0gc2VsZi50cmlnZ2VyID0gX2dldFRhcmdldCh0cmlnZ2VyIHx8IHBpbiAhPT0gdHJ1ZSAmJiBwaW4pOyAvLyBpZiBhIHRyaWdnZXIgaGFzIHNvbWUga2luZCBvZiBzY3JvbGwtcmVsYXRlZCBlZmZlY3QgYXBwbGllZCB0aGF0IGNvdWxkIGNvbnRhbWluYXRlIHRoZSBcInlcIiBvciBcInhcIiBwb3NpdGlvbiAobGlrZSBhIFNjcm9sbFNtb290aGVyIGVmZmVjdCksIHdlIG5lZWRlZCBhIHdheSB0byB0ZW1wb3JhcmlseSByZXZlcnQgaXQsIHNvIHdlIHVzZSB0aGUgc3RSZXZlcnQgcHJvcGVydHkgb2YgdGhlIGdzQ2FjaGUuIEl0IGNhbiByZXR1cm4gYW5vdGhlciBmdW5jdGlvbiB0aGF0IHdlJ2xsIGNhbGwgYXQgdGhlIGVuZCBzbyBpdCBjYW4gcmV0dXJuIHRvIGl0cyBub3JtYWwgc3RhdGUuXG5cbiAgICBjdXN0b21SZXZlcnRSZXR1cm4gPSB0cmlnZ2VyICYmIHRyaWdnZXIuX2dzYXAgJiYgdHJpZ2dlci5fZ3NhcC5zdFJldmVydDtcbiAgICBjdXN0b21SZXZlcnRSZXR1cm4gJiYgKGN1c3RvbVJldmVydFJldHVybiA9IGN1c3RvbVJldmVydFJldHVybihzZWxmKSk7XG4gICAgcGluID0gcGluID09PSB0cnVlID8gdHJpZ2dlciA6IF9nZXRUYXJnZXQocGluKTtcbiAgICBfaXNTdHJpbmcodG9nZ2xlQ2xhc3MpICYmICh0b2dnbGVDbGFzcyA9IHtcbiAgICAgIHRhcmdldHM6IHRyaWdnZXIsXG4gICAgICBjbGFzc05hbWU6IHRvZ2dsZUNsYXNzXG4gICAgfSk7XG5cbiAgICBpZiAocGluKSB7XG4gICAgICBwaW5TcGFjaW5nID09PSBmYWxzZSB8fCBwaW5TcGFjaW5nID09PSBfbWFyZ2luIHx8IChwaW5TcGFjaW5nID0gIXBpblNwYWNpbmcgJiYgcGluLnBhcmVudE5vZGUgJiYgcGluLnBhcmVudE5vZGUuc3R5bGUgJiYgX2dldENvbXB1dGVkU3R5bGUocGluLnBhcmVudE5vZGUpLmRpc3BsYXkgPT09IFwiZmxleFwiID8gZmFsc2UgOiBfcGFkZGluZyk7IC8vIGlmIHRoZSBwYXJlbnQgaXMgZGlzcGxheTogZmxleCwgZG9uJ3QgYXBwbHkgcGluU3BhY2luZyBieSBkZWZhdWx0LiBXZSBzaG91bGQgY2hlY2sgdGhhdCBwaW4ucGFyZW50Tm9kZSBpcyBhbiBlbGVtZW50IChub3Qgc2hhZG93IGRvbSB3aW5kb3cpXG5cbiAgICAgIHNlbGYucGluID0gcGluO1xuICAgICAgcGluQ2FjaGUgPSBnc2FwLmNvcmUuZ2V0Q2FjaGUocGluKTtcblxuICAgICAgaWYgKCFwaW5DYWNoZS5zcGFjZXIpIHtcbiAgICAgICAgLy8gcmVjb3JkIHRoZSBzcGFjZXIgYW5kIHBpbk9yaWdpbmFsU3RhdGUgb24gdGhlIGNhY2hlIGluIGNhc2Ugc29tZW9uZSB0cmllcyBwaW5uaW5nIHRoZSBzYW1lIGVsZW1lbnQgd2l0aCBNVUxUSVBMRSBTY3JvbGxUcmlnZ2VycyAtIHdlIGRvbid0IHdhbnQgdG8gaGF2ZSBtdWx0aXBsZSBzcGFjZXJzIG9yIHJlY29yZCB0aGUgXCJvcmlnaW5hbFwiIHBpbiBzdGF0ZSBhZnRlciBpdCBoYXMgYWxyZWFkeSBiZWVuIGFmZmVjdGVkIGJ5IGFub3RoZXIgU2Nyb2xsVHJpZ2dlci5cbiAgICAgICAgaWYgKHBpblNwYWNlcikge1xuICAgICAgICAgIHBpblNwYWNlciA9IF9nZXRUYXJnZXQocGluU3BhY2VyKTtcbiAgICAgICAgICBwaW5TcGFjZXIgJiYgIXBpblNwYWNlci5ub2RlVHlwZSAmJiAocGluU3BhY2VyID0gcGluU3BhY2VyLmN1cnJlbnQgfHwgcGluU3BhY2VyLm5hdGl2ZUVsZW1lbnQpOyAvLyBmb3IgUmVhY3QgJiBBbmd1bGFyXG5cbiAgICAgICAgICBwaW5DYWNoZS5zcGFjZXJJc05hdGl2ZSA9ICEhcGluU3BhY2VyO1xuICAgICAgICAgIHBpblNwYWNlciAmJiAocGluQ2FjaGUuc3BhY2VyU3RhdGUgPSBfZ2V0U3RhdGUocGluU3BhY2VyKSk7XG4gICAgICAgIH1cblxuICAgICAgICBwaW5DYWNoZS5zcGFjZXIgPSBzcGFjZXIgPSBwaW5TcGFjZXIgfHwgX2RvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBzcGFjZXIuY2xhc3NMaXN0LmFkZChcInBpbi1zcGFjZXJcIik7XG4gICAgICAgIGlkICYmIHNwYWNlci5jbGFzc0xpc3QuYWRkKFwicGluLXNwYWNlci1cIiArIGlkKTtcbiAgICAgICAgcGluQ2FjaGUucGluU3RhdGUgPSBwaW5PcmlnaW5hbFN0YXRlID0gX2dldFN0YXRlKHBpbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwaW5PcmlnaW5hbFN0YXRlID0gcGluQ2FjaGUucGluU3RhdGU7XG4gICAgICB9XG5cbiAgICAgIHZhcnMuZm9yY2UzRCAhPT0gZmFsc2UgJiYgZ3NhcC5zZXQocGluLCB7XG4gICAgICAgIGZvcmNlM0Q6IHRydWVcbiAgICAgIH0pO1xuICAgICAgc2VsZi5zcGFjZXIgPSBzcGFjZXIgPSBwaW5DYWNoZS5zcGFjZXI7XG4gICAgICBjcyA9IF9nZXRDb21wdXRlZFN0eWxlKHBpbik7XG4gICAgICBzcGFjaW5nU3RhcnQgPSBjc1twaW5TcGFjaW5nICsgZGlyZWN0aW9uLm9zMl07XG4gICAgICBwaW5HZXR0ZXIgPSBnc2FwLmdldFByb3BlcnR5KHBpbik7XG4gICAgICBwaW5TZXR0ZXIgPSBnc2FwLnF1aWNrU2V0dGVyKHBpbiwgZGlyZWN0aW9uLmEsIF9weCk7IC8vIHBpbi5maXJzdENoaWxkICYmICFfbWF4U2Nyb2xsKHBpbiwgZGlyZWN0aW9uKSAmJiAocGluLnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIik7IC8vIHByb3RlY3RzIGZyb20gY29sbGFwc2luZyBtYXJnaW5zLCBidXQgY2FuIGhhdmUgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMgYXMgZGVtb25zdHJhdGVkIGhlcmU6IGh0dHBzOi8vY29kZXBlbi5pby9HcmVlblNvY2svcGVuLzFlNDJjN2E3M2JmYTQwOWQyY2YxZTE4NGU3YTQyNDhkIHNvIGl0IHdhcyByZW1vdmVkIGluIGZhdm9yIG9mIGp1c3QgdGVsbGluZyBwZW9wbGUgdG8gc2V0IHVwIHRoZWlyIENTUyB0byBhdm9pZCB0aGUgY29sbGFwc2luZyBtYXJnaW5zIChvdmVyZmxvdzogaGlkZGVuIHwgYXV0byBpcyBqdXN0IG9uZSBvcHRpb24uIEFub3RoZXIgaXMgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50KS5cblxuICAgICAgX3N3YXBQaW5JbihwaW4sIHNwYWNlciwgY3MpO1xuXG4gICAgICBwaW5TdGF0ZSA9IF9nZXRTdGF0ZShwaW4pO1xuICAgIH1cblxuICAgIGlmIChtYXJrZXJzKSB7XG4gICAgICBtYXJrZXJWYXJzID0gX2lzT2JqZWN0KG1hcmtlcnMpID8gX3NldERlZmF1bHRzKG1hcmtlcnMsIF9tYXJrZXJEZWZhdWx0cykgOiBfbWFya2VyRGVmYXVsdHM7XG4gICAgICBtYXJrZXJTdGFydFRyaWdnZXIgPSBfY3JlYXRlTWFya2VyKFwic2Nyb2xsZXItc3RhcnRcIiwgaWQsIHNjcm9sbGVyLCBkaXJlY3Rpb24sIG1hcmtlclZhcnMsIDApO1xuICAgICAgbWFya2VyRW5kVHJpZ2dlciA9IF9jcmVhdGVNYXJrZXIoXCJzY3JvbGxlci1lbmRcIiwgaWQsIHNjcm9sbGVyLCBkaXJlY3Rpb24sIG1hcmtlclZhcnMsIDAsIG1hcmtlclN0YXJ0VHJpZ2dlcik7XG4gICAgICBvZmZzZXQgPSBtYXJrZXJTdGFydFRyaWdnZXJbXCJvZmZzZXRcIiArIGRpcmVjdGlvbi5vcC5kMl07XG5cbiAgICAgIHZhciBjb250ZW50ID0gX2dldFRhcmdldChfZ2V0UHJveHlQcm9wKHNjcm9sbGVyLCBcImNvbnRlbnRcIikgfHwgc2Nyb2xsZXIpO1xuXG4gICAgICBtYXJrZXJTdGFydCA9IHRoaXMubWFya2VyU3RhcnQgPSBfY3JlYXRlTWFya2VyKFwic3RhcnRcIiwgaWQsIGNvbnRlbnQsIGRpcmVjdGlvbiwgbWFya2VyVmFycywgb2Zmc2V0LCAwLCBjb250YWluZXJBbmltYXRpb24pO1xuICAgICAgbWFya2VyRW5kID0gdGhpcy5tYXJrZXJFbmQgPSBfY3JlYXRlTWFya2VyKFwiZW5kXCIsIGlkLCBjb250ZW50LCBkaXJlY3Rpb24sIG1hcmtlclZhcnMsIG9mZnNldCwgMCwgY29udGFpbmVyQW5pbWF0aW9uKTtcbiAgICAgIGNvbnRhaW5lckFuaW1hdGlvbiAmJiAoY2FNYXJrZXJTZXR0ZXIgPSBnc2FwLnF1aWNrU2V0dGVyKFttYXJrZXJTdGFydCwgbWFya2VyRW5kXSwgZGlyZWN0aW9uLmEsIF9weCkpO1xuXG4gICAgICBpZiAoIXVzZUZpeGVkUG9zaXRpb24gJiYgIShfcHJveGllcy5sZW5ndGggJiYgX2dldFByb3h5UHJvcChzY3JvbGxlciwgXCJmaXhlZE1hcmtlcnNcIikgPT09IHRydWUpKSB7XG4gICAgICAgIF9tYWtlUG9zaXRpb25hYmxlKGlzVmlld3BvcnQgPyBfYm9keSA6IHNjcm9sbGVyKTtcblxuICAgICAgICBnc2FwLnNldChbbWFya2VyU3RhcnRUcmlnZ2VyLCBtYXJrZXJFbmRUcmlnZ2VyXSwge1xuICAgICAgICAgIGZvcmNlM0Q6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIG1hcmtlclN0YXJ0U2V0dGVyID0gZ3NhcC5xdWlja1NldHRlcihtYXJrZXJTdGFydFRyaWdnZXIsIGRpcmVjdGlvbi5hLCBfcHgpO1xuICAgICAgICBtYXJrZXJFbmRTZXR0ZXIgPSBnc2FwLnF1aWNrU2V0dGVyKG1hcmtlckVuZFRyaWdnZXIsIGRpcmVjdGlvbi5hLCBfcHgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb250YWluZXJBbmltYXRpb24pIHtcbiAgICAgIHZhciBvbGRPblVwZGF0ZSA9IGNvbnRhaW5lckFuaW1hdGlvbi52YXJzLm9uVXBkYXRlLFxuICAgICAgICAgIG9sZFBhcmFtcyA9IGNvbnRhaW5lckFuaW1hdGlvbi52YXJzLm9uVXBkYXRlUGFyYW1zO1xuICAgICAgY29udGFpbmVyQW5pbWF0aW9uLmV2ZW50Q2FsbGJhY2soXCJvblVwZGF0ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYudXBkYXRlKDAsIDAsIDEpO1xuICAgICAgICBvbGRPblVwZGF0ZSAmJiBvbGRPblVwZGF0ZS5hcHBseShjb250YWluZXJBbmltYXRpb24sIG9sZFBhcmFtcyB8fCBbXSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzZWxmLnByZXZpb3VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90cmlnZ2Vyc1tfdHJpZ2dlcnMuaW5kZXhPZihzZWxmKSAtIDFdO1xuICAgIH07XG5cbiAgICBzZWxmLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RyaWdnZXJzW190cmlnZ2Vycy5pbmRleE9mKHNlbGYpICsgMV07XG4gICAgfTtcblxuICAgIHNlbGYucmV2ZXJ0ID0gZnVuY3Rpb24gKHJldmVydCwgdGVtcCkge1xuICAgICAgaWYgKCF0ZW1wKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmtpbGwodHJ1ZSk7XG4gICAgICB9IC8vIGZvciBjb21wYXRpYmlsaXR5IHdpdGggZ3NhcC5jb250ZXh0KCkgYW5kIGdzYXAubWF0Y2hNZWRpYSgpIHdoaWNoIGNhbGwgcmV2ZXJ0KClcblxuXG4gICAgICB2YXIgciA9IHJldmVydCAhPT0gZmFsc2UgfHwgIXNlbGYuZW5hYmxlZCxcbiAgICAgICAgICBwcmV2UmVmcmVzaGluZyA9IF9yZWZyZXNoaW5nO1xuXG4gICAgICBpZiAociAhPT0gc2VsZi5pc1JldmVydGVkKSB7XG4gICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgcHJldlNjcm9sbCA9IE1hdGgubWF4KHNjcm9sbEZ1bmMoKSwgc2VsZi5zY3JvbGwucmVjIHx8IDApOyAvLyByZWNvcmQgdGhlIHNjcm9sbCBzbyB3ZSBjYW4gcmV2ZXJ0IGxhdGVyIChyZXBvc2l0aW9uaW5nL3Bpbm5pbmcgdGhpbmdzIGNhbiBhZmZlY3Qgc2Nyb2xsIHBvc2l0aW9uKS4gSW4gdGhlIHN0YXRpYyByZWZyZXNoKCkgbWV0aG9kLCB3ZSBmaXJzdCByZWNvcmQgYWxsIHRoZSBzY3JvbGwgcG9zaXRpb25zIGFzIGEgcmVmZXJlbmNlLlxuXG4gICAgICAgICAgcHJldlByb2dyZXNzID0gc2VsZi5wcm9ncmVzcztcbiAgICAgICAgICBwcmV2QW5pbVByb2dyZXNzID0gYW5pbWF0aW9uICYmIGFuaW1hdGlvbi5wcm9ncmVzcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgbWFya2VyU3RhcnQgJiYgW21hcmtlclN0YXJ0LCBtYXJrZXJFbmQsIG1hcmtlclN0YXJ0VHJpZ2dlciwgbWFya2VyRW5kVHJpZ2dlcl0uZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICAgICAgICAgIHJldHVybiBtLnN0eWxlLmRpc3BsYXkgPSByID8gXCJub25lXCIgOiBcImJsb2NrXCI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgX3JlZnJlc2hpbmcgPSBzZWxmO1xuICAgICAgICAgIHNlbGYudXBkYXRlKHIpOyAvLyBtYWtlIHN1cmUgdGhlIHBpbiBpcyBiYWNrIGluIGl0cyBvcmlnaW5hbCBwb3NpdGlvbiBzbyB0aGF0IGFsbCB0aGUgbWVhc3VyZW1lbnRzIGFyZSBjb3JyZWN0LiBkbyB0aGlzIEJFRk9SRSBzd2FwcGluZyB0aGUgcGluIG91dFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBpbiAmJiAoIXBpblJlcGFyZW50IHx8ICFzZWxmLmlzQWN0aXZlKSkge1xuICAgICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgICBfc3dhcFBpbk91dChwaW4sIHNwYWNlciwgcGluT3JpZ2luYWxTdGF0ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF9zd2FwUGluSW4ocGluLCBzcGFjZXIsIF9nZXRDb21wdXRlZFN0eWxlKHBpbiksIHNwYWNlclN0YXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByIHx8IHNlbGYudXBkYXRlKHIpOyAvLyB3aGVuIHdlJ3JlIHJlc3RvcmluZywgdGhlIHVwZGF0ZSBzaG91bGQgcnVuIEFGVEVSIHN3YXBwaW5nIHRoZSBwaW4gaW50byBpdHMgcGluLXNwYWNlci5cblxuICAgICAgICBfcmVmcmVzaGluZyA9IHByZXZSZWZyZXNoaW5nOyAvLyByZXN0b3JlLiBXZSBzZXQgaXQgdG8gdHJ1ZSBkdXJpbmcgdGhlIHVwZGF0ZSgpIHNvIHRoYXQgdGhpbmdzIGZpcmUgcHJvcGVybHkgaW4gdGhlcmUuXG5cbiAgICAgICAgc2VsZi5pc1JldmVydGVkID0gcjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2VsZi5yZWZyZXNoID0gZnVuY3Rpb24gKHNvZnQsIGZvcmNlLCBwb3NpdGlvbiwgcGluT2Zmc2V0KSB7XG4gICAgICAvLyBwb3NpdGlvbiBpcyB0eXBpY2FsbHkgb25seSBkZWZpbmVkIGlmIGl0J3MgY29taW5nIGZyb20gc2V0UG9zaXRpb25zKCkgLSBpdCdzIGEgd2F5IHRvIHNraXAgdGhlIG5vcm1hbCBwYXJzaW5nLiBwaW5PZmZzZXQgaXMgYWxzbyBvbmx5IGZyb20gc2V0UG9zaXRpb25zKCkgYW5kIGlzIG1vc3RseSByZWxhdGVkIHRvIGZhbmN5IHN0dWZmIHdlIG5lZWQgdG8gZG8gaW4gU2Nyb2xsU21vb3RoZXIgd2l0aCBlZmZlY3RzXG4gICAgICBpZiAoKF9yZWZyZXNoaW5nIHx8ICFzZWxmLmVuYWJsZWQpICYmICFmb3JjZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChwaW4gJiYgc29mdCAmJiBfbGFzdFNjcm9sbFRpbWUpIHtcbiAgICAgICAgX2FkZExpc3RlbmVyKFNjcm9sbFRyaWdnZXIsIFwic2Nyb2xsRW5kXCIsIF9zb2Z0UmVmcmVzaCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAhX3JlZnJlc2hpbmdBbGwgJiYgb25SZWZyZXNoSW5pdCAmJiBvblJlZnJlc2hJbml0KHNlbGYpO1xuICAgICAgX3JlZnJlc2hpbmcgPSBzZWxmO1xuXG4gICAgICBpZiAodHdlZW5Uby50d2VlbiAmJiAhcG9zaXRpb24pIHtcbiAgICAgICAgLy8gd2Ugc2tpcCB0aGlzIGlmIGEgcG9zaXRpb24gaXMgcGFzc2VkIGluIGJlY2F1c2UgdHlwaWNhbGx5IHRoYXQncyBmcm9tIC5zZXRQb3NpdGlvbnMoKSBhbmQgaXQncyBiZXN0IHRvIGFsbG93IGluLXByb2dyZXNzIHNuYXBwaW5nIHRvIGNvbnRpbnVlLlxuICAgICAgICB0d2VlblRvLnR3ZWVuLmtpbGwoKTtcbiAgICAgICAgdHdlZW5Uby50d2VlbiA9IDA7XG4gICAgICB9XG5cbiAgICAgIHNjcnViVHdlZW4gJiYgc2NydWJUd2Vlbi5wYXVzZSgpO1xuICAgICAgaW52YWxpZGF0ZU9uUmVmcmVzaCAmJiBhbmltYXRpb24gJiYgYW5pbWF0aW9uLnJldmVydCh7XG4gICAgICAgIGtpbGw6IGZhbHNlXG4gICAgICB9KS5pbnZhbGlkYXRlKCk7XG4gICAgICBzZWxmLmlzUmV2ZXJ0ZWQgfHwgc2VsZi5yZXZlcnQodHJ1ZSwgdHJ1ZSk7XG4gICAgICBzZWxmLl9zdWJQaW5PZmZzZXQgPSBmYWxzZTsgLy8gd2UnbGwgc2V0IHRoaXMgdG8gdHJ1ZSBpbiB0aGUgc3ViLXBpbnMgaWYgd2UgZmluZCBhbnlcblxuICAgICAgdmFyIHNpemUgPSBnZXRTY3JvbGxlclNpemUoKSxcbiAgICAgICAgICBzY3JvbGxlckJvdW5kcyA9IGdldFNjcm9sbGVyT2Zmc2V0cygpLFxuICAgICAgICAgIG1heCA9IGNvbnRhaW5lckFuaW1hdGlvbiA/IGNvbnRhaW5lckFuaW1hdGlvbi5kdXJhdGlvbigpIDogX21heFNjcm9sbChzY3JvbGxlciwgZGlyZWN0aW9uKSxcbiAgICAgICAgICBpc0ZpcnN0UmVmcmVzaCA9IGNoYW5nZSA8PSAwLjAxLFxuICAgICAgICAgIG9mZnNldCA9IDAsXG4gICAgICAgICAgb3RoZXJQaW5PZmZzZXQgPSBwaW5PZmZzZXQgfHwgMCxcbiAgICAgICAgICBwYXJzZWRFbmQgPSBfaXNPYmplY3QocG9zaXRpb24pID8gcG9zaXRpb24uZW5kIDogdmFycy5lbmQsXG4gICAgICAgICAgcGFyc2VkRW5kVHJpZ2dlciA9IHZhcnMuZW5kVHJpZ2dlciB8fCB0cmlnZ2VyLFxuICAgICAgICAgIHBhcnNlZFN0YXJ0ID0gX2lzT2JqZWN0KHBvc2l0aW9uKSA/IHBvc2l0aW9uLnN0YXJ0IDogdmFycy5zdGFydCB8fCAodmFycy5zdGFydCA9PT0gMCB8fCAhdHJpZ2dlciA/IDAgOiBwaW4gPyBcIjAgMFwiIDogXCIwIDEwMCVcIiksXG4gICAgICAgICAgcGlubmVkQ29udGFpbmVyID0gc2VsZi5waW5uZWRDb250YWluZXIgPSB2YXJzLnBpbm5lZENvbnRhaW5lciAmJiBfZ2V0VGFyZ2V0KHZhcnMucGlubmVkQ29udGFpbmVyLCBzZWxmKSxcbiAgICAgICAgICB0cmlnZ2VySW5kZXggPSB0cmlnZ2VyICYmIE1hdGgubWF4KDAsIF90cmlnZ2Vycy5pbmRleE9mKHNlbGYpKSB8fCAwLFxuICAgICAgICAgIGkgPSB0cmlnZ2VySW5kZXgsXG4gICAgICAgICAgY3MsXG4gICAgICAgICAgYm91bmRzLFxuICAgICAgICAgIHNjcm9sbCxcbiAgICAgICAgICBpc1ZlcnRpY2FsLFxuICAgICAgICAgIG92ZXJyaWRlLFxuICAgICAgICAgIGN1clRyaWdnZXIsXG4gICAgICAgICAgY3VyUGluLFxuICAgICAgICAgIG9wcG9zaXRlU2Nyb2xsLFxuICAgICAgICAgIGluaXR0ZWQsXG4gICAgICAgICAgcmV2ZXJ0ZWRQaW5zLFxuICAgICAgICAgIGZvcmNlZE92ZXJmbG93LFxuICAgICAgICAgIG1hcmtlclN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIG1hcmtlckVuZE9mZnNldDtcblxuICAgICAgaWYgKG1hcmtlcnMgJiYgX2lzT2JqZWN0KHBvc2l0aW9uKSkge1xuICAgICAgICAvLyBpZiB3ZSBhbHRlciB0aGUgc3RhcnQvZW5kIHBvc2l0aW9ucyB3aXRoIC5zZXRQb3NpdGlvbnMoKSwgaXQgZ2VuZXJhbGx5IGZlZWRzIGluIGFic29sdXRlIE5VTUJFUlMgd2hpY2ggZG9uJ3QgY29udmV5IGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIHRvIGxpbmUgdXAgdGhlIG1hcmtlcnMsIHNvIHRvIGtlZXAgaXQgaW50dWl0aXZlLCB3ZSByZWNvcmQgaG93IGZhciB0aGUgdHJpZ2dlciBwb3NpdGlvbnMgc2hpZnQgYWZ0ZXIgYXBwbHlpbmcgdGhlIG5ldyBudW1iZXJzIGFuZCB0aGVuIG9mZnNldCBieSB0aGF0IG11Y2ggaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gV2UgZG8gdGhlIHNhbWUgdG8gdGhlIGFzc29jaWF0ZWQgdHJpZ2dlciBtYXJrZXJzIHRvbyBvZiBjb3Vyc2UuXG4gICAgICAgIG1hcmtlclN0YXJ0T2Zmc2V0ID0gZ3NhcC5nZXRQcm9wZXJ0eShtYXJrZXJTdGFydFRyaWdnZXIsIGRpcmVjdGlvbi5wKTtcbiAgICAgICAgbWFya2VyRW5kT2Zmc2V0ID0gZ3NhcC5nZXRQcm9wZXJ0eShtYXJrZXJFbmRUcmlnZ2VyLCBkaXJlY3Rpb24ucCk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgLy8gdXNlciBtaWdodCB0cnkgdG8gcGluIHRoZSBzYW1lIGVsZW1lbnQgbW9yZSB0aGFuIG9uY2UsIHNvIHdlIG11c3QgZmluZCBhbnkgcHJpb3IgdHJpZ2dlcnMgd2l0aCB0aGUgc2FtZSBwaW4sIHJldmVydCB0aGVtLCBhbmQgZGV0ZXJtaW5lIGhvdyBsb25nIHRoZXkncmUgcGlubmluZyBzbyB0aGF0IHdlIGNhbiBvZmZzZXQgdGhpbmdzIGFwcHJvcHJpYXRlbHkuIE1ha2Ugc3VyZSB3ZSByZXZlcnQgZnJvbSBsYXN0IHRvIGZpcnN0IHNvIHRoYXQgdGhpbmdzIFwicmV3aW5kXCIgcHJvcGVybHkuXG4gICAgICAgIGN1clRyaWdnZXIgPSBfdHJpZ2dlcnNbaV07XG4gICAgICAgIGN1clRyaWdnZXIuZW5kIHx8IGN1clRyaWdnZXIucmVmcmVzaCgwLCAxKSB8fCAoX3JlZnJlc2hpbmcgPSBzZWxmKTsgLy8gaWYgaXQncyBhIHRpbWVsaW5lLWJhc2VkIHRyaWdnZXIgdGhhdCBoYXNuJ3QgYmVlbiBmdWxseSBpbml0aWFsaXplZCB5ZXQgYmVjYXVzZSBpdCdzIHdhaXRpbmcgZm9yIDEgdGljaywganVzdCBmb3JjZSB0aGUgcmVmcmVzaCgpIGhlcmUsIG90aGVyd2lzZSBpZiBpdCBjb250YWlucyBhIHBpbiB0aGF0J3Mgc3VwcG9zZWQgdG8gYWZmZWN0IG90aGVyIFNjcm9sbFRyaWdnZXJzIGZ1cnRoZXIgZG93biB0aGUgcGFnZSwgdGhleSB3b24ndCBiZSBhZGp1c3RlZCBwcm9wZXJseS5cblxuICAgICAgICBjdXJQaW4gPSBjdXJUcmlnZ2VyLnBpbjtcblxuICAgICAgICBpZiAoY3VyUGluICYmIChjdXJQaW4gPT09IHRyaWdnZXIgfHwgY3VyUGluID09PSBwaW4gfHwgY3VyUGluID09PSBwaW5uZWRDb250YWluZXIpICYmICFjdXJUcmlnZ2VyLmlzUmV2ZXJ0ZWQpIHtcbiAgICAgICAgICByZXZlcnRlZFBpbnMgfHwgKHJldmVydGVkUGlucyA9IFtdKTtcbiAgICAgICAgICByZXZlcnRlZFBpbnMudW5zaGlmdChjdXJUcmlnZ2VyKTsgLy8gd2UnbGwgcmV2ZXJ0IGZyb20gZmlyc3QgdG8gbGFzdCB0byBtYWtlIHN1cmUgdGhpbmdzIHJlYWNoIHRoZWlyIGVuZCBzdGF0ZSBwcm9wZXJseVxuXG4gICAgICAgICAgY3VyVHJpZ2dlci5yZXZlcnQodHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VyVHJpZ2dlciAhPT0gX3RyaWdnZXJzW2ldKSB7XG4gICAgICAgICAgLy8gaW4gY2FzZSBpdCBnb3QgcmVtb3ZlZC5cbiAgICAgICAgICB0cmlnZ2VySW5kZXgtLTtcbiAgICAgICAgICBpLS07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX2lzRnVuY3Rpb24ocGFyc2VkU3RhcnQpICYmIChwYXJzZWRTdGFydCA9IHBhcnNlZFN0YXJ0KHNlbGYpKTtcbiAgICAgIHBhcnNlZFN0YXJ0ID0gX3BhcnNlQ2xhbXAocGFyc2VkU3RhcnQsIFwic3RhcnRcIiwgc2VsZik7XG4gICAgICBzdGFydCA9IF9wYXJzZVBvc2l0aW9uKHBhcnNlZFN0YXJ0LCB0cmlnZ2VyLCBzaXplLCBkaXJlY3Rpb24sIHNjcm9sbEZ1bmMoKSwgbWFya2VyU3RhcnQsIG1hcmtlclN0YXJ0VHJpZ2dlciwgc2VsZiwgc2Nyb2xsZXJCb3VuZHMsIGJvcmRlcldpZHRoLCB1c2VGaXhlZFBvc2l0aW9uLCBtYXgsIGNvbnRhaW5lckFuaW1hdGlvbiwgc2VsZi5fc3RhcnRDbGFtcCAmJiBcIl9zdGFydENsYW1wXCIpIHx8IChwaW4gPyAtMC4wMDEgOiAwKTtcbiAgICAgIF9pc0Z1bmN0aW9uKHBhcnNlZEVuZCkgJiYgKHBhcnNlZEVuZCA9IHBhcnNlZEVuZChzZWxmKSk7XG5cbiAgICAgIGlmIChfaXNTdHJpbmcocGFyc2VkRW5kKSAmJiAhcGFyc2VkRW5kLmluZGV4T2YoXCIrPVwiKSkge1xuICAgICAgICBpZiAofnBhcnNlZEVuZC5pbmRleE9mKFwiIFwiKSkge1xuICAgICAgICAgIHBhcnNlZEVuZCA9IChfaXNTdHJpbmcocGFyc2VkU3RhcnQpID8gcGFyc2VkU3RhcnQuc3BsaXQoXCIgXCIpWzBdIDogXCJcIikgKyBwYXJzZWRFbmQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2Zmc2V0ID0gX29mZnNldFRvUHgocGFyc2VkRW5kLnN1YnN0cigyKSwgc2l6ZSk7XG4gICAgICAgICAgcGFyc2VkRW5kID0gX2lzU3RyaW5nKHBhcnNlZFN0YXJ0KSA/IHBhcnNlZFN0YXJ0IDogKGNvbnRhaW5lckFuaW1hdGlvbiA/IGdzYXAudXRpbHMubWFwUmFuZ2UoMCwgY29udGFpbmVyQW5pbWF0aW9uLmR1cmF0aW9uKCksIGNvbnRhaW5lckFuaW1hdGlvbi5zY3JvbGxUcmlnZ2VyLnN0YXJ0LCBjb250YWluZXJBbmltYXRpb24uc2Nyb2xsVHJpZ2dlci5lbmQsIHN0YXJ0KSA6IHN0YXJ0KSArIG9mZnNldDsgLy8gX3BhcnNlUG9zaXRpb24gd29uJ3QgZmFjdG9yIGluIHRoZSBvZmZzZXQgaWYgdGhlIHN0YXJ0IGlzIGEgbnVtYmVyLCBzbyBkbyBpdCBoZXJlLlxuXG4gICAgICAgICAgcGFyc2VkRW5kVHJpZ2dlciA9IHRyaWdnZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcGFyc2VkRW5kID0gX3BhcnNlQ2xhbXAocGFyc2VkRW5kLCBcImVuZFwiLCBzZWxmKTtcbiAgICAgIGVuZCA9IE1hdGgubWF4KHN0YXJ0LCBfcGFyc2VQb3NpdGlvbihwYXJzZWRFbmQgfHwgKHBhcnNlZEVuZFRyaWdnZXIgPyBcIjEwMCUgMFwiIDogbWF4KSwgcGFyc2VkRW5kVHJpZ2dlciwgc2l6ZSwgZGlyZWN0aW9uLCBzY3JvbGxGdW5jKCkgKyBvZmZzZXQsIG1hcmtlckVuZCwgbWFya2VyRW5kVHJpZ2dlciwgc2VsZiwgc2Nyb2xsZXJCb3VuZHMsIGJvcmRlcldpZHRoLCB1c2VGaXhlZFBvc2l0aW9uLCBtYXgsIGNvbnRhaW5lckFuaW1hdGlvbiwgc2VsZi5fZW5kQ2xhbXAgJiYgXCJfZW5kQ2xhbXBcIikpIHx8IC0wLjAwMTtcbiAgICAgIG9mZnNldCA9IDA7XG4gICAgICBpID0gdHJpZ2dlckluZGV4O1xuXG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGN1clRyaWdnZXIgPSBfdHJpZ2dlcnNbaV07XG4gICAgICAgIGN1clBpbiA9IGN1clRyaWdnZXIucGluO1xuXG4gICAgICAgIGlmIChjdXJQaW4gJiYgY3VyVHJpZ2dlci5zdGFydCAtIGN1clRyaWdnZXIuX3BpblB1c2ggPD0gc3RhcnQgJiYgIWNvbnRhaW5lckFuaW1hdGlvbiAmJiBjdXJUcmlnZ2VyLmVuZCA+IDApIHtcbiAgICAgICAgICBjcyA9IGN1clRyaWdnZXIuZW5kIC0gKHNlbGYuX3N0YXJ0Q2xhbXAgPyBNYXRoLm1heCgwLCBjdXJUcmlnZ2VyLnN0YXJ0KSA6IGN1clRyaWdnZXIuc3RhcnQpO1xuXG4gICAgICAgICAgaWYgKChjdXJQaW4gPT09IHRyaWdnZXIgJiYgY3VyVHJpZ2dlci5zdGFydCAtIGN1clRyaWdnZXIuX3BpblB1c2ggPCBzdGFydCB8fCBjdXJQaW4gPT09IHBpbm5lZENvbnRhaW5lcikgJiYgaXNOYU4ocGFyc2VkU3RhcnQpKSB7XG4gICAgICAgICAgICAvLyBudW1lcmljIHN0YXJ0IHZhbHVlcyBzaG91bGRuJ3QgYmUgb2Zmc2V0IGF0IGFsbCAtIHRyZWF0IHRoZW0gYXMgYWJzb2x1dGVcbiAgICAgICAgICAgIG9mZnNldCArPSBjcyAqICgxIC0gY3VyVHJpZ2dlci5wcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VyUGluID09PSBwaW4gJiYgKG90aGVyUGluT2Zmc2V0ICs9IGNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdGFydCArPSBvZmZzZXQ7XG4gICAgICBlbmQgKz0gb2Zmc2V0O1xuICAgICAgc2VsZi5fc3RhcnRDbGFtcCAmJiAoc2VsZi5fc3RhcnRDbGFtcCArPSBvZmZzZXQpO1xuXG4gICAgICBpZiAoc2VsZi5fZW5kQ2xhbXAgJiYgIV9yZWZyZXNoaW5nQWxsKSB7XG4gICAgICAgIHNlbGYuX2VuZENsYW1wID0gZW5kIHx8IC0wLjAwMTtcbiAgICAgICAgZW5kID0gTWF0aC5taW4oZW5kLCBfbWF4U2Nyb2xsKHNjcm9sbGVyLCBkaXJlY3Rpb24pKTtcbiAgICAgIH1cblxuICAgICAgY2hhbmdlID0gZW5kIC0gc3RhcnQgfHwgKHN0YXJ0IC09IDAuMDEpICYmIDAuMDAxO1xuXG4gICAgICBpZiAoaXNGaXJzdFJlZnJlc2gpIHtcbiAgICAgICAgLy8gb24gdGhlIHZlcnkgZmlyc3QgcmVmcmVzaCgpLCB0aGUgcHJldlByb2dyZXNzIGNvdWxkbid0IGhhdmUgYmVlbiBhY2N1cmF0ZSB5ZXQgYmVjYXVzZSB0aGUgc3RhcnQvZW5kIHdlcmUgbmV2ZXIgY2FsY3VsYXRlZCwgc28gd2Ugc2V0IGl0IGhlcmUuIEJlZm9yZSAzLjExLjUsIGl0IGNvdWxkIGxlYWQgdG8gYW4gaW5hY2N1cmF0ZSBzY3JvbGwgcG9zaXRpb24gcmVzdG9yYXRpb24gd2l0aCBzbmFwcGluZy5cbiAgICAgICAgcHJldlByb2dyZXNzID0gZ3NhcC51dGlscy5jbGFtcCgwLCAxLCBnc2FwLnV0aWxzLm5vcm1hbGl6ZShzdGFydCwgZW5kLCBwcmV2U2Nyb2xsKSk7XG4gICAgICB9XG5cbiAgICAgIHNlbGYuX3BpblB1c2ggPSBvdGhlclBpbk9mZnNldDtcblxuICAgICAgaWYgKG1hcmtlclN0YXJ0ICYmIG9mZnNldCkge1xuICAgICAgICAvLyBvZmZzZXQgdGhlIG1hcmtlcnMgaWYgbmVjZXNzYXJ5XG4gICAgICAgIGNzID0ge307XG4gICAgICAgIGNzW2RpcmVjdGlvbi5hXSA9IFwiKz1cIiArIG9mZnNldDtcbiAgICAgICAgcGlubmVkQ29udGFpbmVyICYmIChjc1tkaXJlY3Rpb24ucF0gPSBcIi09XCIgKyBzY3JvbGxGdW5jKCkpO1xuICAgICAgICBnc2FwLnNldChbbWFya2VyU3RhcnQsIG1hcmtlckVuZF0sIGNzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBpbikge1xuICAgICAgICBjcyA9IF9nZXRDb21wdXRlZFN0eWxlKHBpbik7XG4gICAgICAgIGlzVmVydGljYWwgPSBkaXJlY3Rpb24gPT09IF92ZXJ0aWNhbDtcbiAgICAgICAgc2Nyb2xsID0gc2Nyb2xsRnVuYygpOyAvLyByZWNhbGN1bGF0ZSBiZWNhdXNlIHRoZSB0cmlnZ2VycyBjYW4gYWZmZWN0IHRoZSBzY3JvbGxcblxuICAgICAgICBwaW5TdGFydCA9IHBhcnNlRmxvYXQocGluR2V0dGVyKGRpcmVjdGlvbi5hKSkgKyBvdGhlclBpbk9mZnNldDtcblxuICAgICAgICBpZiAoIW1heCAmJiBlbmQgPiAxKSB7XG4gICAgICAgICAgLy8gbWFrZXMgc3VyZSB0aGUgc2Nyb2xsZXIgaGFzIGEgc2Nyb2xsYmFyLCBvdGhlcndpc2UgaWYgc29tZXRoaW5nIGhhcyB3aWR0aDogMTAwJSwgZm9yIGV4YW1wbGUsIGl0IHdvdWxkIGJlIHRvbyBiaWcgKGV4Y2x1ZGUgdGhlIHNjcm9sbGJhcikuIFNlZSBodHRwczovL2dyZWVuc29jay5jb20vZm9ydW1zL3RvcGljLzI1MTgyLXNjcm9sbHRyaWdnZXItd2lkdGgtb2YtcGFnZS1pbmNyZWFzZS13aGVyZS1tYXJrZXJzLWFyZS1zZXQtdG8tZmFsc2UvXG4gICAgICAgICAgZm9yY2VkT3ZlcmZsb3cgPSAoaXNWaWV3cG9ydCA/IF9kb2Muc2Nyb2xsaW5nRWxlbWVudCB8fCBfZG9jRWwgOiBzY3JvbGxlcikuc3R5bGU7XG4gICAgICAgICAgZm9yY2VkT3ZlcmZsb3cgPSB7XG4gICAgICAgICAgICBzdHlsZTogZm9yY2VkT3ZlcmZsb3csXG4gICAgICAgICAgICB2YWx1ZTogZm9yY2VkT3ZlcmZsb3dbXCJvdmVyZmxvd1wiICsgZGlyZWN0aW9uLmEudG9VcHBlckNhc2UoKV1cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKGlzVmlld3BvcnQgJiYgX2dldENvbXB1dGVkU3R5bGUoX2JvZHkpW1wib3ZlcmZsb3dcIiArIGRpcmVjdGlvbi5hLnRvVXBwZXJDYXNlKCldICE9PSBcInNjcm9sbFwiKSB7XG4gICAgICAgICAgICAvLyBhdm9pZCBhbiBleHRyYSBzY3JvbGxiYXIgaWYgQk9USCA8aHRtbD4gYW5kIDxib2R5PiBoYXZlIG92ZXJmbG93IHNldCB0byBcInNjcm9sbFwiXG4gICAgICAgICAgICBmb3JjZWRPdmVyZmxvdy5zdHlsZVtcIm92ZXJmbG93XCIgKyBkaXJlY3Rpb24uYS50b1VwcGVyQ2FzZSgpXSA9IFwic2Nyb2xsXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX3N3YXBQaW5JbihwaW4sIHNwYWNlciwgY3MpO1xuXG4gICAgICAgIHBpblN0YXRlID0gX2dldFN0YXRlKHBpbik7IC8vIHRyYW5zZm9ybXMgd2lsbCBpbnRlcmZlcmUgd2l0aCB0aGUgdG9wL2xlZnQvcmlnaHQvYm90dG9tIHBsYWNlbWVudCwgc28gcmVtb3ZlIHRoZW0gdGVtcG9yYXJpbHkuIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIGZhY3RvcnMgaW4gdHJhbnNmb3Jtcy5cblxuICAgICAgICBib3VuZHMgPSBfZ2V0Qm91bmRzKHBpbiwgdHJ1ZSk7XG4gICAgICAgIG9wcG9zaXRlU2Nyb2xsID0gdXNlRml4ZWRQb3NpdGlvbiAmJiBfZ2V0U2Nyb2xsRnVuYyhzY3JvbGxlciwgaXNWZXJ0aWNhbCA/IF9ob3Jpem9udGFsIDogX3ZlcnRpY2FsKSgpO1xuXG4gICAgICAgIGlmIChwaW5TcGFjaW5nKSB7XG4gICAgICAgICAgc3BhY2VyU3RhdGUgPSBbcGluU3BhY2luZyArIGRpcmVjdGlvbi5vczIsIGNoYW5nZSArIG90aGVyUGluT2Zmc2V0ICsgX3B4XTtcbiAgICAgICAgICBzcGFjZXJTdGF0ZS50ID0gc3BhY2VyO1xuICAgICAgICAgIGkgPSBwaW5TcGFjaW5nID09PSBfcGFkZGluZyA/IF9nZXRTaXplKHBpbiwgZGlyZWN0aW9uKSArIGNoYW5nZSArIG90aGVyUGluT2Zmc2V0IDogMDtcbiAgICAgICAgICBpICYmIHNwYWNlclN0YXRlLnB1c2goZGlyZWN0aW9uLmQsIGkgKyBfcHgpOyAvLyBmb3IgYm94LXNpemluZzogYm9yZGVyLWJveCAobXVzdCBpbmNsdWRlIHBhZGRpbmcpLlxuXG4gICAgICAgICAgX3NldFN0YXRlKHNwYWNlclN0YXRlKTtcblxuICAgICAgICAgIGlmIChwaW5uZWRDb250YWluZXIpIHtcbiAgICAgICAgICAgIC8vIGluIFNjcm9sbFRyaWdnZXIucmVmcmVzaCgpLCB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIHRoZSBwaW5Db250YWluZXIncyBzaXplIGJlY2F1c2UgdGhpcyBwaW5TcGFjaW5nIG1heSBzdHJldGNoIGl0IG91dCwgYnV0IHdlIGNhbid0IGp1c3QgYWRkIHRoZSBleGFjdCBkaXN0YW5jZSBiZWNhdXNlIGRlcGVuZGluZyBvbiBsYXlvdXQsIGl0IG1heSBub3QgcHVzaCB0aGluZ3MgZG93biBvciBpdCBtYXkgb25seSBkbyBzbyBwYXJ0aWFsbHkuXG4gICAgICAgICAgICBfdHJpZ2dlcnMuZm9yRWFjaChmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICBpZiAodC5waW4gPT09IHBpbm5lZENvbnRhaW5lciAmJiB0LnZhcnMucGluU3BhY2luZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0Ll9zdWJQaW5PZmZzZXQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1c2VGaXhlZFBvc2l0aW9uICYmIHNjcm9sbEZ1bmMocHJldlNjcm9sbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXNlRml4ZWRQb3NpdGlvbikge1xuICAgICAgICAgIG92ZXJyaWRlID0ge1xuICAgICAgICAgICAgdG9wOiBib3VuZHMudG9wICsgKGlzVmVydGljYWwgPyBzY3JvbGwgLSBzdGFydCA6IG9wcG9zaXRlU2Nyb2xsKSArIF9weCxcbiAgICAgICAgICAgIGxlZnQ6IGJvdW5kcy5sZWZ0ICsgKGlzVmVydGljYWwgPyBvcHBvc2l0ZVNjcm9sbCA6IHNjcm9sbCAtIHN0YXJ0KSArIF9weCxcbiAgICAgICAgICAgIGJveFNpemluZzogXCJib3JkZXItYm94XCIsXG4gICAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiXG4gICAgICAgICAgfTtcbiAgICAgICAgICBvdmVycmlkZVtfd2lkdGhdID0gb3ZlcnJpZGVbXCJtYXhcIiArIF9XaWR0aF0gPSBNYXRoLmNlaWwoYm91bmRzLndpZHRoKSArIF9weDtcbiAgICAgICAgICBvdmVycmlkZVtfaGVpZ2h0XSA9IG92ZXJyaWRlW1wibWF4XCIgKyBfSGVpZ2h0XSA9IE1hdGguY2VpbChib3VuZHMuaGVpZ2h0KSArIF9weDtcbiAgICAgICAgICBvdmVycmlkZVtfbWFyZ2luXSA9IG92ZXJyaWRlW19tYXJnaW4gKyBfVG9wXSA9IG92ZXJyaWRlW19tYXJnaW4gKyBfUmlnaHRdID0gb3ZlcnJpZGVbX21hcmdpbiArIF9Cb3R0b21dID0gb3ZlcnJpZGVbX21hcmdpbiArIF9MZWZ0XSA9IFwiMFwiO1xuICAgICAgICAgIG92ZXJyaWRlW19wYWRkaW5nXSA9IGNzW19wYWRkaW5nXTtcbiAgICAgICAgICBvdmVycmlkZVtfcGFkZGluZyArIF9Ub3BdID0gY3NbX3BhZGRpbmcgKyBfVG9wXTtcbiAgICAgICAgICBvdmVycmlkZVtfcGFkZGluZyArIF9SaWdodF0gPSBjc1tfcGFkZGluZyArIF9SaWdodF07XG4gICAgICAgICAgb3ZlcnJpZGVbX3BhZGRpbmcgKyBfQm90dG9tXSA9IGNzW19wYWRkaW5nICsgX0JvdHRvbV07XG4gICAgICAgICAgb3ZlcnJpZGVbX3BhZGRpbmcgKyBfTGVmdF0gPSBjc1tfcGFkZGluZyArIF9MZWZ0XTtcbiAgICAgICAgICBwaW5BY3RpdmVTdGF0ZSA9IF9jb3B5U3RhdGUocGluT3JpZ2luYWxTdGF0ZSwgb3ZlcnJpZGUsIHBpblJlcGFyZW50KTtcbiAgICAgICAgICBfcmVmcmVzaGluZ0FsbCAmJiBzY3JvbGxGdW5jKDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFuaW1hdGlvbikge1xuICAgICAgICAgIC8vIHRoZSBhbmltYXRpb24gbWlnaHQgYmUgYWZmZWN0aW5nIHRoZSB0cmFuc2Zvcm0sIHNvIHdlIG11c3QganVtcCB0byB0aGUgZW5kLCBjaGVjayB0aGUgdmFsdWUsIGFuZCBjb21wZW5zYXRlIGFjY29yZGluZ2x5LiBPdGhlcndpc2UsIHdoZW4gaXQgYmVjb21lcyB1bnBpbm5lZCwgdGhlIHBpblNldHRlcigpIHdpbGwgZ2V0IHNldCB0byBhIHZhbHVlIHRoYXQgZG9lc24ndCBpbmNsdWRlIHdoYXRldmVyIHRoZSBhbmltYXRpb24gZGlkLlxuICAgICAgICAgIGluaXR0ZWQgPSBhbmltYXRpb24uX2luaXR0ZWQ7IC8vIGlmIG5vdCwgd2UgbXVzdCBpbnZhbGlkYXRlKCkgYWZ0ZXIgdGhpcyBzdGVwLCBvdGhlcndpc2UgaXQgY291bGQgbG9jayBpbiBzdGFydGluZyB2YWx1ZXMgcHJlbWF0dXJlbHkuXG5cbiAgICAgICAgICBfc3VwcHJlc3NPdmVyd3JpdGVzKDEpO1xuXG4gICAgICAgICAgYW5pbWF0aW9uLnJlbmRlcihhbmltYXRpb24uZHVyYXRpb24oKSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgcGluQ2hhbmdlID0gcGluR2V0dGVyKGRpcmVjdGlvbi5hKSAtIHBpblN0YXJ0ICsgY2hhbmdlICsgb3RoZXJQaW5PZmZzZXQ7XG4gICAgICAgICAgcGluTW92ZXMgPSBNYXRoLmFicyhjaGFuZ2UgLSBwaW5DaGFuZ2UpID4gMTtcbiAgICAgICAgICB1c2VGaXhlZFBvc2l0aW9uICYmIHBpbk1vdmVzICYmIHBpbkFjdGl2ZVN0YXRlLnNwbGljZShwaW5BY3RpdmVTdGF0ZS5sZW5ndGggLSAyLCAyKTsgLy8gdHJhbnNmb3JtIGlzIHRoZSBsYXN0IHByb3BlcnR5L3ZhbHVlIHNldCBpbiB0aGUgc3RhdGUgQXJyYXkuIFNpbmNlIHRoZSBhbmltYXRpb24gaXMgY29udHJvbGxpbmcgdGhhdCwgd2Ugc2hvdWxkIG9taXQgaXQuXG5cbiAgICAgICAgICBhbmltYXRpb24ucmVuZGVyKDAsIHRydWUsIHRydWUpO1xuICAgICAgICAgIGluaXR0ZWQgfHwgYW5pbWF0aW9uLmludmFsaWRhdGUodHJ1ZSk7XG4gICAgICAgICAgYW5pbWF0aW9uLnBhcmVudCB8fCBhbmltYXRpb24udG90YWxUaW1lKGFuaW1hdGlvbi50b3RhbFRpbWUoKSk7IC8vIGlmLCBmb3IgZXhhbXBsZSwgYSB0b2dnbGVBY3Rpb24gY2FsbGVkIHBsYXkoKSBhbmQgdGhlbiByZWZyZXNoKCkgaGFwcGVucyBhbmQgd2hlbiB3ZSByZW5kZXIoMSkgYWJvdmUsIGl0IHdvdWxkIGNhdXNlIHRoZSBhbmltYXRpb24gdG8gY29tcGxldGUgYW5kIGdldCByZW1vdmVkIGZyb20gaXRzIHBhcmVudCwgc28gdGhpcyBtYWtlcyBzdXJlIGl0IGdldHMgcHV0IGJhY2sgaW4uXG5cbiAgICAgICAgICBfc3VwcHJlc3NPdmVyd3JpdGVzKDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBpbkNoYW5nZSA9IGNoYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcmNlZE92ZXJmbG93ICYmIChmb3JjZWRPdmVyZmxvdy52YWx1ZSA/IGZvcmNlZE92ZXJmbG93LnN0eWxlW1wib3ZlcmZsb3dcIiArIGRpcmVjdGlvbi5hLnRvVXBwZXJDYXNlKCldID0gZm9yY2VkT3ZlcmZsb3cudmFsdWUgOiBmb3JjZWRPdmVyZmxvdy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcIm92ZXJmbG93LVwiICsgZGlyZWN0aW9uLmEpKTtcbiAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciAmJiBzY3JvbGxGdW5jKCkgJiYgIWNvbnRhaW5lckFuaW1hdGlvbikge1xuICAgICAgICAvLyBpdCBtYXkgYmUgSU5TSURFIGEgcGlubmVkIGVsZW1lbnQsIHNvIHdhbGsgdXAgdGhlIHRyZWUgYW5kIGxvb2sgZm9yIGFueSBlbGVtZW50cyB3aXRoIF9waW5PZmZzZXQgdG8gY29tcGVuc2F0ZSBiZWNhdXNlIGFueXRoaW5nIHdpdGggcGluU3BhY2luZyB0aGF0J3MgYWxyZWFkeSBzY3JvbGxlZCB3b3VsZCB0aHJvdyBvZmYgdGhlIG1lYXN1cmVtZW50cyBpbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBib3VuZHMgPSB0cmlnZ2VyLnBhcmVudE5vZGU7XG5cbiAgICAgICAgd2hpbGUgKGJvdW5kcyAmJiBib3VuZHMgIT09IF9ib2R5KSB7XG4gICAgICAgICAgaWYgKGJvdW5kcy5fcGluT2Zmc2V0KSB7XG4gICAgICAgICAgICBzdGFydCAtPSBib3VuZHMuX3Bpbk9mZnNldDtcbiAgICAgICAgICAgIGVuZCAtPSBib3VuZHMuX3Bpbk9mZnNldDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBib3VuZHMgPSBib3VuZHMucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXZlcnRlZFBpbnMgJiYgcmV2ZXJ0ZWRQaW5zLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQucmV2ZXJ0KGZhbHNlLCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgc2VsZi5zdGFydCA9IHN0YXJ0O1xuICAgICAgc2VsZi5lbmQgPSBlbmQ7XG4gICAgICBzY3JvbGwxID0gc2Nyb2xsMiA9IF9yZWZyZXNoaW5nQWxsID8gcHJldlNjcm9sbCA6IHNjcm9sbEZ1bmMoKTsgLy8gcmVzZXQgdmVsb2NpdHlcblxuICAgICAgaWYgKCFjb250YWluZXJBbmltYXRpb24gJiYgIV9yZWZyZXNoaW5nQWxsKSB7XG4gICAgICAgIHNjcm9sbDEgPCBwcmV2U2Nyb2xsICYmIHNjcm9sbEZ1bmMocHJldlNjcm9sbCk7XG4gICAgICAgIHNlbGYuc2Nyb2xsLnJlYyA9IDA7XG4gICAgICB9XG5cbiAgICAgIHNlbGYucmV2ZXJ0KGZhbHNlLCB0cnVlKTtcbiAgICAgIGxhc3RSZWZyZXNoID0gX2dldFRpbWUoKTtcblxuICAgICAgaWYgKHNuYXBEZWxheWVkQ2FsbCkge1xuICAgICAgICBsYXN0U25hcCA9IC0xOyAvLyBqdXN0IHNvIHNuYXBwaW5nIGdldHMgcmUtZW5hYmxlZCwgY2xlYXIgb3V0IGFueSByZWNvcmRlZCBsYXN0IHZhbHVlXG4gICAgICAgIC8vIHNlbGYuaXNBY3RpdmUgJiYgc2Nyb2xsRnVuYyhzdGFydCArIGNoYW5nZSAqIHByZXZQcm9ncmVzcyk7IC8vIHByZXZpb3VzbHkgdGhpcyBsaW5lIHdhcyBoZXJlIHRvIGVuc3VyZSB0aGF0IHdoZW4gc25hcHBpbmcga2lja3MgaW4sIGl0J3MgZnJvbSB0aGUgcHJldmlvdXMgcHJvZ3Jlc3MgYnV0IGluIHNvbWUgY2FzZXMgdGhhdCdzIG5vdCBkZXNpcmFibGUsIGxpa2UgYW4gYWxsLXBhZ2UgU2Nyb2xsVHJpZ2dlciB3aGVuIG5ldyBjb250ZW50IGdldHMgYWRkZWQgdG8gdGhlIHBhZ2UsIHRoYXQnZCB0b3RhbGx5IGNoYW5nZSB0aGUgcHJvZ3Jlc3MuXG5cbiAgICAgICAgc25hcERlbGF5ZWRDYWxsLnJlc3RhcnQodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIF9yZWZyZXNoaW5nID0gMDtcbiAgICAgIGFuaW1hdGlvbiAmJiBpc1RvZ2dsZSAmJiAoYW5pbWF0aW9uLl9pbml0dGVkIHx8IHByZXZBbmltUHJvZ3Jlc3MpICYmIGFuaW1hdGlvbi5wcm9ncmVzcygpICE9PSBwcmV2QW5pbVByb2dyZXNzICYmIGFuaW1hdGlvbi5wcm9ncmVzcyhwcmV2QW5pbVByb2dyZXNzIHx8IDAsIHRydWUpLnJlbmRlcihhbmltYXRpb24udGltZSgpLCB0cnVlLCB0cnVlKTsgLy8gbXVzdCBmb3JjZSBhIHJlLXJlbmRlciBiZWNhdXNlIGlmIHNhdmVTdHlsZXMoKSB3YXMgdXNlZCBvbiB0aGUgdGFyZ2V0KHMpLCB0aGUgc3R5bGVzIGNvdWxkIGhhdmUgYmVlbiB3aXBlZCBvdXQgZHVyaW5nIHRoZSByZWZyZXNoKCkuXG5cbiAgICAgIGlmIChpc0ZpcnN0UmVmcmVzaCB8fCBwcmV2UHJvZ3Jlc3MgIT09IHNlbGYucHJvZ3Jlc3MgfHwgY29udGFpbmVyQW5pbWF0aW9uKSB7XG4gICAgICAgIC8vIGVuc3VyZXMgdGhhdCB0aGUgZGlyZWN0aW9uIGlzIHNldCBwcm9wZXJseSAod2hlbiByZWZyZXNoaW5nLCBwcm9ncmVzcyBpcyBzZXQgYmFjayB0byAwIGluaXRpYWxseSwgdGhlbiBiYWNrIGFnYWluIHRvIHdoZXJldmVyIGl0IG5lZWRzIHRvIGJlKSBhbmQgdGhhdCBjYWxsYmFja3MgYXJlIHRyaWdnZXJlZC5cbiAgICAgICAgYW5pbWF0aW9uICYmICFpc1RvZ2dsZSAmJiBhbmltYXRpb24udG90YWxQcm9ncmVzcyhjb250YWluZXJBbmltYXRpb24gJiYgc3RhcnQgPCAtMC4wMDEgJiYgIXByZXZQcm9ncmVzcyA/IGdzYXAudXRpbHMubm9ybWFsaXplKHN0YXJ0LCBlbmQsIDApIDogcHJldlByb2dyZXNzLCB0cnVlKTsgLy8gdG8gYXZvaWQgaXNzdWVzIHdoZXJlIGFuaW1hdGlvbiBjYWxsYmFja3MgbGlrZSBvblN0YXJ0IGFyZW4ndCB0cmlnZ2VyZWQuXG5cbiAgICAgICAgc2VsZi5wcm9ncmVzcyA9IGlzRmlyc3RSZWZyZXNoIHx8IChzY3JvbGwxIC0gc3RhcnQpIC8gY2hhbmdlID09PSBwcmV2UHJvZ3Jlc3MgPyAwIDogcHJldlByb2dyZXNzO1xuICAgICAgfVxuXG4gICAgICBwaW4gJiYgcGluU3BhY2luZyAmJiAoc3BhY2VyLl9waW5PZmZzZXQgPSBNYXRoLnJvdW5kKHNlbGYucHJvZ3Jlc3MgKiBwaW5DaGFuZ2UpKTtcbiAgICAgIHNjcnViVHdlZW4gJiYgc2NydWJUd2Vlbi5pbnZhbGlkYXRlKCk7XG5cbiAgICAgIGlmICghaXNOYU4obWFya2VyU3RhcnRPZmZzZXQpKSB7XG4gICAgICAgIC8vIG51bWJlcnMgd2VyZSBwYXNzZWQgaW4gZm9yIHRoZSBwb3NpdGlvbiB3aGljaCBhcmUgYWJzb2x1dGUsIHNvIGluc3RlYWQgb2YganVzdCBwdXR0aW5nIHRoZSBtYXJrZXJzIGF0IHRoZSB2ZXJ5IGJvdHRvbSBvZiB0aGUgdmlld3BvcnQsIHdlIGZpZ3VyZSBvdXQgaG93IGZhciB0aGV5IHNoaWZ0ZWQgZG93biAoaXQncyBzYWZlIHRvIGFzc3VtZSB0aGV5IHdlcmUgb3JpZ2luYWxseSBwb3NpdGlvbmVkIGluIGNsb3NlciByZWxhdGlvbiB0byB0aGUgdHJpZ2dlciBlbGVtZW50IHdpdGggdmFsdWVzIGxpa2UgXCJ0b3BcIiwgXCJjZW50ZXJcIiwgYSBwZXJjZW50YWdlIG9yIHdoYXRldmVyLCBzbyB3ZSBvZmZzZXQgdGhhdCBtdWNoIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gdG8gYmFzaWNhbGx5IHJldmVydCB0aGVtIHRvIHRoZSByZWxhdGl2ZSBwb3NpdGlvbiB0aHkgd2VyZSBhdCBwcmV2aW91c2x5LlxuICAgICAgICBtYXJrZXJTdGFydE9mZnNldCAtPSBnc2FwLmdldFByb3BlcnR5KG1hcmtlclN0YXJ0VHJpZ2dlciwgZGlyZWN0aW9uLnApO1xuICAgICAgICBtYXJrZXJFbmRPZmZzZXQgLT0gZ3NhcC5nZXRQcm9wZXJ0eShtYXJrZXJFbmRUcmlnZ2VyLCBkaXJlY3Rpb24ucCk7XG5cbiAgICAgICAgX3NoaWZ0TWFya2VyKG1hcmtlclN0YXJ0VHJpZ2dlciwgZGlyZWN0aW9uLCBtYXJrZXJTdGFydE9mZnNldCk7XG5cbiAgICAgICAgX3NoaWZ0TWFya2VyKG1hcmtlclN0YXJ0LCBkaXJlY3Rpb24sIG1hcmtlclN0YXJ0T2Zmc2V0IC0gKHBpbk9mZnNldCB8fCAwKSk7XG5cbiAgICAgICAgX3NoaWZ0TWFya2VyKG1hcmtlckVuZFRyaWdnZXIsIGRpcmVjdGlvbiwgbWFya2VyRW5kT2Zmc2V0KTtcblxuICAgICAgICBfc2hpZnRNYXJrZXIobWFya2VyRW5kLCBkaXJlY3Rpb24sIG1hcmtlckVuZE9mZnNldCAtIChwaW5PZmZzZXQgfHwgMCkpO1xuICAgICAgfVxuXG4gICAgICBpc0ZpcnN0UmVmcmVzaCAmJiAhX3JlZnJlc2hpbmdBbGwgJiYgc2VsZi51cGRhdGUoKTsgLy8gZWRnZSBjYXNlIC0gd2hlbiB5b3UgcmVsb2FkIGEgcGFnZSB3aGVuIGl0J3MgYWxyZWFkeSBzY3JvbGxlZCBkb3duLCBzb21lIGJyb3dzZXJzIGZpcmUgYSBcInNjcm9sbFwiIGV2ZW50IGJlZm9yZSBET01Db250ZW50TG9hZGVkLCB0cmlnZ2VyaW5nIGFuIHVwZGF0ZUFsbCgpLiBJZiB3ZSBkb24ndCB1cGRhdGUgdGhlIHNlbGYucHJvZ3Jlc3MgYXMgcGFydCBvZiByZWZyZXNoKCksIHRoZW4gd2hlbiBpdCBoYXBwZW5zIG5leHQsIGl0IG1heSByZWNvcmQgcHJldlByb2dyZXNzIGFzIDAgd2hlbiBpdCByZWFsbHkgc2hvdWxkbid0LCBwb3RlbnRpYWxseSBjYXVzaW5nIGEgY2FsbGJhY2sgaW4gYW4gYW5pbWF0aW9uIHRvIGZpcmUgYWdhaW4uXG5cbiAgICAgIGlmIChvblJlZnJlc2ggJiYgIV9yZWZyZXNoaW5nQWxsICYmICFleGVjdXRpbmdPblJlZnJlc2gpIHtcbiAgICAgICAgLy8gd2hlbiByZWZyZXNoaW5nIGFsbCwgd2UgZG8gZXh0cmEgd29yayB0byBjb3JyZWN0IHBpbm5lZENvbnRhaW5lciBzaXplcyBhbmQgZW5zdXJlIHRoaW5ncyBkb24ndCBleGNlZWQgdGhlIG1heFNjcm9sbCwgc28gd2Ugc2hvdWxkIGRvIGFsbCB0aGUgcmVmcmVzaGVzIGF0IHRoZSBlbmQgYWZ0ZXIgYWxsIHRoYXQgd29yayBzbyB0aGF0IHRoZSBzdGFydC9lbmQgdmFsdWVzIGFyZSBjb3JyZWN0ZWQuXG4gICAgICAgIGV4ZWN1dGluZ09uUmVmcmVzaCA9IHRydWU7XG4gICAgICAgIG9uUmVmcmVzaChzZWxmKTtcbiAgICAgICAgZXhlY3V0aW5nT25SZWZyZXNoID0gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNlbGYuZ2V0VmVsb2NpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKHNjcm9sbEZ1bmMoKSAtIHNjcm9sbDIpIC8gKF9nZXRUaW1lKCkgLSBfdGltZTIpICogMTAwMCB8fCAwO1xuICAgIH07XG5cbiAgICBzZWxmLmVuZEFuaW1hdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF9lbmRBbmltYXRpb24oc2VsZi5jYWxsYmFja0FuaW1hdGlvbik7XG5cbiAgICAgIGlmIChhbmltYXRpb24pIHtcbiAgICAgICAgc2NydWJUd2VlbiA/IHNjcnViVHdlZW4ucHJvZ3Jlc3MoMSkgOiAhYW5pbWF0aW9uLnBhdXNlZCgpID8gX2VuZEFuaW1hdGlvbihhbmltYXRpb24sIGFuaW1hdGlvbi5yZXZlcnNlZCgpKSA6IGlzVG9nZ2xlIHx8IF9lbmRBbmltYXRpb24oYW5pbWF0aW9uLCBzZWxmLmRpcmVjdGlvbiA8IDAsIDEpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzZWxmLmxhYmVsVG9TY3JvbGwgPSBmdW5jdGlvbiAobGFiZWwpIHtcbiAgICAgIHJldHVybiBhbmltYXRpb24gJiYgYW5pbWF0aW9uLmxhYmVscyAmJiAoc3RhcnQgfHwgc2VsZi5yZWZyZXNoKCkgfHwgc3RhcnQpICsgYW5pbWF0aW9uLmxhYmVsc1tsYWJlbF0gLyBhbmltYXRpb24uZHVyYXRpb24oKSAqIGNoYW5nZSB8fCAwO1xuICAgIH07XG5cbiAgICBzZWxmLmdldFRyYWlsaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBpID0gX3RyaWdnZXJzLmluZGV4T2Yoc2VsZiksXG4gICAgICAgICAgYSA9IHNlbGYuZGlyZWN0aW9uID4gMCA/IF90cmlnZ2Vycy5zbGljZSgwLCBpKS5yZXZlcnNlKCkgOiBfdHJpZ2dlcnMuc2xpY2UoaSArIDEpO1xuXG4gICAgICByZXR1cm4gKF9pc1N0cmluZyhuYW1lKSA/IGEuZmlsdGVyKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0LnZhcnMucHJldmVudE92ZXJsYXBzID09PSBuYW1lO1xuICAgICAgfSkgOiBhKS5maWx0ZXIoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuZGlyZWN0aW9uID4gMCA/IHQuZW5kIDw9IHN0YXJ0IDogdC5zdGFydCA+PSBlbmQ7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgc2VsZi51cGRhdGUgPSBmdW5jdGlvbiAocmVzZXQsIHJlY29yZFZlbG9jaXR5LCBmb3JjZUZha2UpIHtcbiAgICAgIGlmIChjb250YWluZXJBbmltYXRpb24gJiYgIWZvcmNlRmFrZSAmJiAhcmVzZXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2Nyb2xsID0gX3JlZnJlc2hpbmdBbGwgPT09IHRydWUgPyBwcmV2U2Nyb2xsIDogc2VsZi5zY3JvbGwoKSxcbiAgICAgICAgICBwID0gcmVzZXQgPyAwIDogKHNjcm9sbCAtIHN0YXJ0KSAvIGNoYW5nZSxcbiAgICAgICAgICBjbGlwcGVkID0gcCA8IDAgPyAwIDogcCA+IDEgPyAxIDogcCB8fCAwLFxuICAgICAgICAgIHByZXZQcm9ncmVzcyA9IHNlbGYucHJvZ3Jlc3MsXG4gICAgICAgICAgaXNBY3RpdmUsXG4gICAgICAgICAgd2FzQWN0aXZlLFxuICAgICAgICAgIHRvZ2dsZVN0YXRlLFxuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBzdGF0ZUNoYW5nZWQsXG4gICAgICAgICAgdG9nZ2xlZCxcbiAgICAgICAgICBpc0F0TWF4LFxuICAgICAgICAgIGlzVGFraW5nQWN0aW9uO1xuXG4gICAgICBpZiAocmVjb3JkVmVsb2NpdHkpIHtcbiAgICAgICAgc2Nyb2xsMiA9IHNjcm9sbDE7XG4gICAgICAgIHNjcm9sbDEgPSBjb250YWluZXJBbmltYXRpb24gPyBzY3JvbGxGdW5jKCkgOiBzY3JvbGw7XG5cbiAgICAgICAgaWYgKHNuYXApIHtcbiAgICAgICAgICBzbmFwMiA9IHNuYXAxO1xuICAgICAgICAgIHNuYXAxID0gYW5pbWF0aW9uICYmICFpc1RvZ2dsZSA/IGFuaW1hdGlvbi50b3RhbFByb2dyZXNzKCkgOiBjbGlwcGVkO1xuICAgICAgICB9XG4gICAgICB9IC8vIGFudGljaXBhdGUgdGhlIHBpbm5pbmcgYSBmZXcgdGlja3MgYWhlYWQgb2YgdGltZSBiYXNlZCBvbiB2ZWxvY2l0eSB0byBhdm9pZCBhIHZpc3VhbCBnbGl0Y2ggZHVlIHRvIHRoZSBmYWN0IHRoYXQgbW9zdCBicm93c2VycyBkbyBzY3JvbGxpbmcgb24gYSBzZXBhcmF0ZSB0aHJlYWQgKG5vdCBzeW5jZWQgd2l0aCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUpLlxuXG5cbiAgICAgIGFudGljaXBhdGVQaW4gJiYgIWNsaXBwZWQgJiYgcGluICYmICFfcmVmcmVzaGluZyAmJiAhX3N0YXJ0dXAgJiYgX2xhc3RTY3JvbGxUaW1lICYmIHN0YXJ0IDwgc2Nyb2xsICsgKHNjcm9sbCAtIHNjcm9sbDIpIC8gKF9nZXRUaW1lKCkgLSBfdGltZTIpICogYW50aWNpcGF0ZVBpbiAmJiAoY2xpcHBlZCA9IDAuMDAwMSk7XG5cbiAgICAgIGlmIChjbGlwcGVkICE9PSBwcmV2UHJvZ3Jlc3MgJiYgc2VsZi5lbmFibGVkKSB7XG4gICAgICAgIGlzQWN0aXZlID0gc2VsZi5pc0FjdGl2ZSA9ICEhY2xpcHBlZCAmJiBjbGlwcGVkIDwgMTtcbiAgICAgICAgd2FzQWN0aXZlID0gISFwcmV2UHJvZ3Jlc3MgJiYgcHJldlByb2dyZXNzIDwgMTtcbiAgICAgICAgdG9nZ2xlZCA9IGlzQWN0aXZlICE9PSB3YXNBY3RpdmU7XG4gICAgICAgIHN0YXRlQ2hhbmdlZCA9IHRvZ2dsZWQgfHwgISFjbGlwcGVkICE9PSAhIXByZXZQcm9ncmVzczsgLy8gY291bGQgZ28gZnJvbSBzdGFydCBhbGwgdGhlIHdheSB0byBlbmQsIHRodXMgaXQgZGlkbid0IHRvZ2dsZSBidXQgaXQgZGlkIGNoYW5nZSBzdGF0ZSBpbiBhIHNlbnNlIChtYXkgbmVlZCB0byBmaXJlIGEgY2FsbGJhY2spXG5cbiAgICAgICAgc2VsZi5kaXJlY3Rpb24gPSBjbGlwcGVkID4gcHJldlByb2dyZXNzID8gMSA6IC0xO1xuICAgICAgICBzZWxmLnByb2dyZXNzID0gY2xpcHBlZDtcblxuICAgICAgICBpZiAoc3RhdGVDaGFuZ2VkICYmICFfcmVmcmVzaGluZykge1xuICAgICAgICAgIHRvZ2dsZVN0YXRlID0gY2xpcHBlZCAmJiAhcHJldlByb2dyZXNzID8gMCA6IGNsaXBwZWQgPT09IDEgPyAxIDogcHJldlByb2dyZXNzID09PSAxID8gMiA6IDM7IC8vIDAgPSBlbnRlciwgMSA9IGxlYXZlLCAyID0gZW50ZXJCYWNrLCAzID0gbGVhdmVCYWNrICh3ZSBwcmlvcml0aXplIHRoZSBGSVJTVCBlbmNvdW50ZXIsIHRodXMgaWYgeW91IHNjcm9sbCByZWFsbHkgZmFzdCBwYXN0IHRoZSBvbkVudGVyIGFuZCBvbkxlYXZlIGluIG9uZSB0aWNrLCBpdCdkIHByaW9yaXRpemUgb25FbnRlci5cblxuICAgICAgICAgIGlmIChpc1RvZ2dsZSkge1xuICAgICAgICAgICAgYWN0aW9uID0gIXRvZ2dsZWQgJiYgdG9nZ2xlQWN0aW9uc1t0b2dnbGVTdGF0ZSArIDFdICE9PSBcIm5vbmVcIiAmJiB0b2dnbGVBY3Rpb25zW3RvZ2dsZVN0YXRlICsgMV0gfHwgdG9nZ2xlQWN0aW9uc1t0b2dnbGVTdGF0ZV07IC8vIGlmIGl0IGRpZG4ndCB0b2dnbGUsIHRoYXQgbWVhbnMgaXQgc2hvdCByaWdodCBwYXN0IGFuZCBzaW5jZSB3ZSBwcmlvcml0aXplIHRoZSBcImVudGVyXCIgYWN0aW9uLCB3ZSBzaG91bGQgc3dpdGNoIHRvIHRoZSBcImxlYXZlXCIgaW4gdGhpcyBjYXNlIChidXQgb25seSBpZiBvbmUgaXMgZGVmaW5lZClcblxuICAgICAgICAgICAgaXNUYWtpbmdBY3Rpb24gPSBhbmltYXRpb24gJiYgKGFjdGlvbiA9PT0gXCJjb21wbGV0ZVwiIHx8IGFjdGlvbiA9PT0gXCJyZXNldFwiIHx8IGFjdGlvbiBpbiBhbmltYXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZlbnRPdmVybGFwcyAmJiAodG9nZ2xlZCB8fCBpc1Rha2luZ0FjdGlvbikgJiYgKGlzVGFraW5nQWN0aW9uIHx8IHNjcnViIHx8ICFhbmltYXRpb24pICYmIChfaXNGdW5jdGlvbihwcmV2ZW50T3ZlcmxhcHMpID8gcHJldmVudE92ZXJsYXBzKHNlbGYpIDogc2VsZi5nZXRUcmFpbGluZyhwcmV2ZW50T3ZlcmxhcHMpLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByZXR1cm4gdC5lbmRBbmltYXRpb24oKTtcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGlmICghaXNUb2dnbGUpIHtcbiAgICAgICAgICBpZiAoc2NydWJUd2VlbiAmJiAhX3JlZnJlc2hpbmcgJiYgIV9zdGFydHVwKSB7XG4gICAgICAgICAgICBzY3J1YlR3ZWVuLl9kcC5fdGltZSAtIHNjcnViVHdlZW4uX3N0YXJ0ICE9PSBzY3J1YlR3ZWVuLl90aW1lICYmIHNjcnViVHdlZW4ucmVuZGVyKHNjcnViVHdlZW4uX2RwLl90aW1lIC0gc2NydWJUd2Vlbi5fc3RhcnQpOyAvLyBpZiB0aGVyZSdzIGEgc2NydWIgb24gYm90aCB0aGUgY29udGFpbmVyIGFuaW1hdGlvbiBhbmQgdGhpcyBvbmUgKG9yIGEgU2Nyb2xsU21vb3RoZXIpLCB0aGUgdXBkYXRlIG9yZGVyIHdvdWxkIGNhdXNlIHRoaXMgb25lIG5vdCB0byBoYXZlIHJlbmRlcmVkIHlldCwgc28gaXQgd291bGRuJ3QgbWFrZSBhbnkgcHJvZ3Jlc3MgYmVmb3JlIHdlIC5yZXN0YXJ0KCkgaXQgaGVhZGluZyB0b3dhcmQgdGhlIG5ldyBwcm9ncmVzcyBzbyBpdCdkIGFwcGVhciBzdHVjayB0aHVzIHdlIGZvcmNlIGEgcmVuZGVyIGhlcmUuXG5cbiAgICAgICAgICAgIGlmIChzY3J1YlR3ZWVuLnJlc2V0VG8pIHtcbiAgICAgICAgICAgICAgc2NydWJUd2Vlbi5yZXNldFRvKFwidG90YWxQcm9ncmVzc1wiLCBjbGlwcGVkLCBhbmltYXRpb24uX3RUaW1lIC8gYW5pbWF0aW9uLl90RHVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGxlZ2FjeSBzdXBwb3J0IChjb3VydGVzeSksIGJlZm9yZSAzLjEwLjBcbiAgICAgICAgICAgICAgc2NydWJUd2Vlbi52YXJzLnRvdGFsUHJvZ3Jlc3MgPSBjbGlwcGVkO1xuICAgICAgICAgICAgICBzY3J1YlR3ZWVuLmludmFsaWRhdGUoKS5yZXN0YXJ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChhbmltYXRpb24pIHtcbiAgICAgICAgICAgIGFuaW1hdGlvbi50b3RhbFByb2dyZXNzKGNsaXBwZWQsICEhKF9yZWZyZXNoaW5nICYmIChsYXN0UmVmcmVzaCB8fCByZXNldCkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGluKSB7XG4gICAgICAgICAgcmVzZXQgJiYgcGluU3BhY2luZyAmJiAoc3BhY2VyLnN0eWxlW3BpblNwYWNpbmcgKyBkaXJlY3Rpb24ub3MyXSA9IHNwYWNpbmdTdGFydCk7XG5cbiAgICAgICAgICBpZiAoIXVzZUZpeGVkUG9zaXRpb24pIHtcbiAgICAgICAgICAgIHBpblNldHRlcihfcm91bmQocGluU3RhcnQgKyBwaW5DaGFuZ2UgKiBjbGlwcGVkKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZUNoYW5nZWQpIHtcbiAgICAgICAgICAgIGlzQXRNYXggPSAhcmVzZXQgJiYgY2xpcHBlZCA+IHByZXZQcm9ncmVzcyAmJiBlbmQgKyAxID4gc2Nyb2xsICYmIHNjcm9sbCArIDEgPj0gX21heFNjcm9sbChzY3JvbGxlciwgZGlyZWN0aW9uKTsgLy8gaWYgaXQncyBhdCB0aGUgVkVSWSBlbmQgb2YgdGhlIHBhZ2UsIGRvbid0IHN3aXRjaCBhd2F5IGZyb20gcG9zaXRpb246IGZpeGVkIGJlY2F1c2UgaXQncyBwb2ludGxlc3MgYW5kIGl0IGNvdWxkIGNhdXNlIGEgYnJpZWYgZmxhc2ggd2hlbiB0aGUgdXNlciBzY3JvbGxzIGJhY2sgdXAgKHdoZW4gaXQgZ2V0cyBwaW5uZWQgYWdhaW4pXG5cbiAgICAgICAgICAgIGlmIChwaW5SZXBhcmVudCkge1xuICAgICAgICAgICAgICBpZiAoIXJlc2V0ICYmIChpc0FjdGl2ZSB8fCBpc0F0TWF4KSkge1xuICAgICAgICAgICAgICAgIHZhciBib3VuZHMgPSBfZ2V0Qm91bmRzKHBpbiwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIF9vZmZzZXQgPSBzY3JvbGwgLSBzdGFydDtcblxuICAgICAgICAgICAgICAgIF9yZXBhcmVudChwaW4sIF9ib2R5LCBib3VuZHMudG9wICsgKGRpcmVjdGlvbiA9PT0gX3ZlcnRpY2FsID8gX29mZnNldCA6IDApICsgX3B4LCBib3VuZHMubGVmdCArIChkaXJlY3Rpb24gPT09IF92ZXJ0aWNhbCA/IDAgOiBfb2Zmc2V0KSArIF9weCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgX3JlcGFyZW50KHBpbiwgc3BhY2VyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfc2V0U3RhdGUoaXNBY3RpdmUgfHwgaXNBdE1heCA/IHBpbkFjdGl2ZVN0YXRlIDogcGluU3RhdGUpO1xuXG4gICAgICAgICAgICBwaW5Nb3ZlcyAmJiBjbGlwcGVkIDwgMSAmJiBpc0FjdGl2ZSB8fCBwaW5TZXR0ZXIocGluU3RhcnQgKyAoY2xpcHBlZCA9PT0gMSAmJiAhaXNBdE1heCA/IHBpbkNoYW5nZSA6IDApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzbmFwICYmICF0d2VlblRvLnR3ZWVuICYmICFfcmVmcmVzaGluZyAmJiAhX3N0YXJ0dXAgJiYgc25hcERlbGF5ZWRDYWxsLnJlc3RhcnQodHJ1ZSk7XG4gICAgICAgIHRvZ2dsZUNsYXNzICYmICh0b2dnbGVkIHx8IG9uY2UgJiYgY2xpcHBlZCAmJiAoY2xpcHBlZCA8IDEgfHwgIV9saW1pdENhbGxiYWNrcykpICYmIF90b0FycmF5KHRvZ2dsZUNsYXNzLnRhcmdldHMpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgcmV0dXJuIGVsLmNsYXNzTGlzdFtpc0FjdGl2ZSB8fCBvbmNlID8gXCJhZGRcIiA6IFwicmVtb3ZlXCJdKHRvZ2dsZUNsYXNzLmNsYXNzTmFtZSk7XG4gICAgICAgIH0pOyAvLyBjbGFzc2VzIGNvdWxkIGFmZmVjdCBwb3NpdGlvbmluZywgc28gZG8gaXQgZXZlbiBpZiByZXNldCBvciByZWZyZXNoaW5nIGlzIHRydWUuXG5cbiAgICAgICAgb25VcGRhdGUgJiYgIWlzVG9nZ2xlICYmICFyZXNldCAmJiBvblVwZGF0ZShzZWxmKTtcblxuICAgICAgICBpZiAoc3RhdGVDaGFuZ2VkICYmICFfcmVmcmVzaGluZykge1xuICAgICAgICAgIGlmIChpc1RvZ2dsZSkge1xuICAgICAgICAgICAgaWYgKGlzVGFraW5nQWN0aW9uKSB7XG4gICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbi5wYXVzZSgpLnRvdGFsUHJvZ3Jlc3MoMSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSBcInJlc2V0XCIpIHtcbiAgICAgICAgICAgICAgICBhbmltYXRpb24ucmVzdGFydCh0cnVlKS5wYXVzZSgpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJyZXN0YXJ0XCIpIHtcbiAgICAgICAgICAgICAgICBhbmltYXRpb24ucmVzdGFydCh0cnVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbmltYXRpb25bYWN0aW9uXSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9uVXBkYXRlICYmIG9uVXBkYXRlKHNlbGYpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0b2dnbGVkIHx8ICFfbGltaXRDYWxsYmFja3MpIHtcbiAgICAgICAgICAgIC8vIG9uIHN0YXJ0dXAsIHRoZSBwYWdlIGNvdWxkIGJlIHNjcm9sbGVkIGFuZCB3ZSBkb24ndCB3YW50IHRvIGZpcmUgY2FsbGJhY2tzIHRoYXQgZGlkbid0IHRvZ2dsZS4gRm9yIGV4YW1wbGUgb25FbnRlciBzaG91bGRuJ3QgZmlyZSBpZiB0aGUgU2Nyb2xsVHJpZ2dlciBpc24ndCBhY3R1YWxseSBlbnRlcmVkLlxuICAgICAgICAgICAgb25Ub2dnbGUgJiYgdG9nZ2xlZCAmJiBfY2FsbGJhY2soc2VsZiwgb25Ub2dnbGUpO1xuICAgICAgICAgICAgY2FsbGJhY2tzW3RvZ2dsZVN0YXRlXSAmJiBfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2tzW3RvZ2dsZVN0YXRlXSk7XG4gICAgICAgICAgICBvbmNlICYmIChjbGlwcGVkID09PSAxID8gc2VsZi5raWxsKGZhbHNlLCAxKSA6IGNhbGxiYWNrc1t0b2dnbGVTdGF0ZV0gPSAwKTsgLy8gYSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGFnYWluIGlmIG9uY2UgaXMgdHJ1ZS5cblxuICAgICAgICAgICAgaWYgKCF0b2dnbGVkKSB7XG4gICAgICAgICAgICAgIC8vIGl0J3MgcG9zc2libGUgdG8gZ28gY29tcGxldGVseSBwYXN0LCBsaWtlIGZyb20gYmVmb3JlIHRoZSBzdGFydCB0byBhZnRlciB0aGUgZW5kIChvciB2aWNlLXZlcnNhKSBpbiB3aGljaCBjYXNlIEJPVEggY2FsbGJhY2tzIHNob3VsZCBiZSBmaXJlZCBpbiB0aGF0IG9yZGVyXG4gICAgICAgICAgICAgIHRvZ2dsZVN0YXRlID0gY2xpcHBlZCA9PT0gMSA/IDEgOiAzO1xuICAgICAgICAgICAgICBjYWxsYmFja3NbdG9nZ2xlU3RhdGVdICYmIF9jYWxsYmFjayhzZWxmLCBjYWxsYmFja3NbdG9nZ2xlU3RhdGVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmFzdFNjcm9sbEVuZCAmJiAhaXNBY3RpdmUgJiYgTWF0aC5hYnMoc2VsZi5nZXRWZWxvY2l0eSgpKSA+IChfaXNOdW1iZXIoZmFzdFNjcm9sbEVuZCkgPyBmYXN0U2Nyb2xsRW5kIDogMjUwMCkpIHtcbiAgICAgICAgICAgIF9lbmRBbmltYXRpb24oc2VsZi5jYWxsYmFja0FuaW1hdGlvbik7XG5cbiAgICAgICAgICAgIHNjcnViVHdlZW4gPyBzY3J1YlR3ZWVuLnByb2dyZXNzKDEpIDogX2VuZEFuaW1hdGlvbihhbmltYXRpb24sIGFjdGlvbiA9PT0gXCJyZXZlcnNlXCIgPyAxIDogIWNsaXBwZWQsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpc1RvZ2dsZSAmJiBvblVwZGF0ZSAmJiAhX3JlZnJlc2hpbmcpIHtcbiAgICAgICAgICBvblVwZGF0ZShzZWxmKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyB1cGRhdGUgYWJzb2x1dGVseS1wb3NpdGlvbmVkIG1hcmtlcnMgKG9ubHkgaWYgdGhlIHNjcm9sbGVyIGlzbid0IHRoZSB2aWV3cG9ydClcblxuXG4gICAgICBpZiAobWFya2VyRW5kU2V0dGVyKSB7XG4gICAgICAgIHZhciBuID0gY29udGFpbmVyQW5pbWF0aW9uID8gc2Nyb2xsIC8gY29udGFpbmVyQW5pbWF0aW9uLmR1cmF0aW9uKCkgKiAoY29udGFpbmVyQW5pbWF0aW9uLl9jYVNjcm9sbERpc3QgfHwgMCkgOiBzY3JvbGw7XG4gICAgICAgIG1hcmtlclN0YXJ0U2V0dGVyKG4gKyAobWFya2VyU3RhcnRUcmlnZ2VyLl9pc0ZsaXBwZWQgPyAxIDogMCkpO1xuICAgICAgICBtYXJrZXJFbmRTZXR0ZXIobik7XG4gICAgICB9XG5cbiAgICAgIGNhTWFya2VyU2V0dGVyICYmIGNhTWFya2VyU2V0dGVyKC1zY3JvbGwgLyBjb250YWluZXJBbmltYXRpb24uZHVyYXRpb24oKSAqIChjb250YWluZXJBbmltYXRpb24uX2NhU2Nyb2xsRGlzdCB8fCAwKSk7XG4gICAgfTtcblxuICAgIHNlbGYuZW5hYmxlID0gZnVuY3Rpb24gKHJlc2V0LCByZWZyZXNoKSB7XG4gICAgICBpZiAoIXNlbGYuZW5hYmxlZCkge1xuICAgICAgICBzZWxmLmVuYWJsZWQgPSB0cnVlO1xuXG4gICAgICAgIF9hZGRMaXN0ZW5lcihzY3JvbGxlciwgXCJyZXNpemVcIiwgX29uUmVzaXplKTtcblxuICAgICAgICBpc1ZpZXdwb3J0IHx8IF9hZGRMaXN0ZW5lcihzY3JvbGxlciwgXCJzY3JvbGxcIiwgX29uU2Nyb2xsKTtcbiAgICAgICAgb25SZWZyZXNoSW5pdCAmJiBfYWRkTGlzdGVuZXIoU2Nyb2xsVHJpZ2dlciwgXCJyZWZyZXNoSW5pdFwiLCBvblJlZnJlc2hJbml0KTtcblxuICAgICAgICBpZiAocmVzZXQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgc2VsZi5wcm9ncmVzcyA9IHByZXZQcm9ncmVzcyA9IDA7XG4gICAgICAgICAgc2Nyb2xsMSA9IHNjcm9sbDIgPSBsYXN0U25hcCA9IHNjcm9sbEZ1bmMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZnJlc2ggIT09IGZhbHNlICYmIHNlbGYucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzZWxmLmdldFR3ZWVuID0gZnVuY3Rpb24gKHNuYXApIHtcbiAgICAgIHJldHVybiBzbmFwICYmIHR3ZWVuVG8gPyB0d2VlblRvLnR3ZWVuIDogc2NydWJUd2VlbjtcbiAgICB9O1xuXG4gICAgc2VsZi5zZXRQb3NpdGlvbnMgPSBmdW5jdGlvbiAobmV3U3RhcnQsIG5ld0VuZCwga2VlcENsYW1wLCBwaW5PZmZzZXQpIHtcbiAgICAgIC8vIGRvZXNuJ3QgcGVyc2lzdCBhZnRlciByZWZyZXNoKCkhIEludGVuZGVkIHRvIGJlIGEgd2F5IHRvIG92ZXJyaWRlIHZhbHVlcyB0aGF0IHdlcmUgc2V0IGR1cmluZyByZWZyZXNoKCksIGxpa2UgeW91IGNvdWxkIHNldCBpdCBpbiBvblJlZnJlc2goKVxuICAgICAgaWYgKGNvbnRhaW5lckFuaW1hdGlvbikge1xuICAgICAgICAvLyBjb252ZXJ0IHJhdGlvcyBpbnRvIHNjcm9sbCBwb3NpdGlvbnMuIFJlbWVtYmVyLCBzdGFydC9lbmQgdmFsdWVzIG9uIFNjcm9sbFRyaWdnZXJzIHRoYXQgaGF2ZSBhIGNvbnRhaW5lckFuaW1hdGlvbiByZWZlciB0byB0aGUgdGltZSAoaW4gc2Vjb25kcyksIE5PVCBzY3JvbGwgcG9zaXRpb25zLlxuICAgICAgICB2YXIgc3QgPSBjb250YWluZXJBbmltYXRpb24uc2Nyb2xsVHJpZ2dlcixcbiAgICAgICAgICAgIGR1cmF0aW9uID0gY29udGFpbmVyQW5pbWF0aW9uLmR1cmF0aW9uKCksXG4gICAgICAgICAgICBfY2hhbmdlID0gc3QuZW5kIC0gc3Quc3RhcnQ7XG5cbiAgICAgICAgbmV3U3RhcnQgPSBzdC5zdGFydCArIF9jaGFuZ2UgKiBuZXdTdGFydCAvIGR1cmF0aW9uO1xuICAgICAgICBuZXdFbmQgPSBzdC5zdGFydCArIF9jaGFuZ2UgKiBuZXdFbmQgLyBkdXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgc2VsZi5yZWZyZXNoKGZhbHNlLCBmYWxzZSwge1xuICAgICAgICBzdGFydDogX2tlZXBDbGFtcChuZXdTdGFydCwga2VlcENsYW1wICYmICEhc2VsZi5fc3RhcnRDbGFtcCksXG4gICAgICAgIGVuZDogX2tlZXBDbGFtcChuZXdFbmQsIGtlZXBDbGFtcCAmJiAhIXNlbGYuX2VuZENsYW1wKVxuICAgICAgfSwgcGluT2Zmc2V0KTtcbiAgICAgIHNlbGYudXBkYXRlKCk7XG4gICAgfTtcblxuICAgIHNlbGYuYWRqdXN0UGluU3BhY2luZyA9IGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICAgIGlmIChzcGFjZXJTdGF0ZSAmJiBhbW91bnQpIHtcbiAgICAgICAgdmFyIGkgPSBzcGFjZXJTdGF0ZS5pbmRleE9mKGRpcmVjdGlvbi5kKSArIDE7XG4gICAgICAgIHNwYWNlclN0YXRlW2ldID0gcGFyc2VGbG9hdChzcGFjZXJTdGF0ZVtpXSkgKyBhbW91bnQgKyBfcHg7XG4gICAgICAgIHNwYWNlclN0YXRlWzFdID0gcGFyc2VGbG9hdChzcGFjZXJTdGF0ZVsxXSkgKyBhbW91bnQgKyBfcHg7XG5cbiAgICAgICAgX3NldFN0YXRlKHNwYWNlclN0YXRlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2VsZi5kaXNhYmxlID0gZnVuY3Rpb24gKHJlc2V0LCBhbGxvd0FuaW1hdGlvbikge1xuICAgICAgaWYgKHNlbGYuZW5hYmxlZCkge1xuICAgICAgICByZXNldCAhPT0gZmFsc2UgJiYgc2VsZi5yZXZlcnQodHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIHNlbGYuZW5hYmxlZCA9IHNlbGYuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgYWxsb3dBbmltYXRpb24gfHwgc2NydWJUd2VlbiAmJiBzY3J1YlR3ZWVuLnBhdXNlKCk7XG4gICAgICAgIHByZXZTY3JvbGwgPSAwO1xuICAgICAgICBwaW5DYWNoZSAmJiAocGluQ2FjaGUudW5jYWNoZSA9IDEpO1xuICAgICAgICBvblJlZnJlc2hJbml0ICYmIF9yZW1vdmVMaXN0ZW5lcihTY3JvbGxUcmlnZ2VyLCBcInJlZnJlc2hJbml0XCIsIG9uUmVmcmVzaEluaXQpO1xuXG4gICAgICAgIGlmIChzbmFwRGVsYXllZENhbGwpIHtcbiAgICAgICAgICBzbmFwRGVsYXllZENhbGwucGF1c2UoKTtcbiAgICAgICAgICB0d2VlblRvLnR3ZWVuICYmIHR3ZWVuVG8udHdlZW4ua2lsbCgpICYmICh0d2VlblRvLnR3ZWVuID0gMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmlld3BvcnQpIHtcbiAgICAgICAgICB2YXIgaSA9IF90cmlnZ2Vycy5sZW5ndGg7XG5cbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBpZiAoX3RyaWdnZXJzW2ldLnNjcm9sbGVyID09PSBzY3JvbGxlciAmJiBfdHJpZ2dlcnNbaV0gIT09IHNlbGYpIHtcbiAgICAgICAgICAgICAgcmV0dXJuOyAvL2Rvbid0IHJlbW92ZSB0aGUgbGlzdGVuZXJzIGlmIHRoZXJlIGFyZSBzdGlsbCBvdGhlciB0cmlnZ2VycyByZWZlcmVuY2luZyBpdC5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfcmVtb3ZlTGlzdGVuZXIoc2Nyb2xsZXIsIFwicmVzaXplXCIsIF9vblJlc2l6ZSk7XG5cbiAgICAgICAgICBpc1ZpZXdwb3J0IHx8IF9yZW1vdmVMaXN0ZW5lcihzY3JvbGxlciwgXCJzY3JvbGxcIiwgX29uU2Nyb2xsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBzZWxmLmtpbGwgPSBmdW5jdGlvbiAocmV2ZXJ0LCBhbGxvd0FuaW1hdGlvbikge1xuICAgICAgc2VsZi5kaXNhYmxlKHJldmVydCwgYWxsb3dBbmltYXRpb24pO1xuICAgICAgc2NydWJUd2VlbiAmJiAhYWxsb3dBbmltYXRpb24gJiYgc2NydWJUd2Vlbi5raWxsKCk7XG4gICAgICBpZCAmJiBkZWxldGUgX2lkc1tpZF07XG5cbiAgICAgIHZhciBpID0gX3RyaWdnZXJzLmluZGV4T2Yoc2VsZik7XG5cbiAgICAgIGkgPj0gMCAmJiBfdHJpZ2dlcnMuc3BsaWNlKGksIDEpO1xuICAgICAgaSA9PT0gX2kgJiYgX2RpcmVjdGlvbiA+IDAgJiYgX2ktLTsgLy8gaWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHJlZnJlc2goKSBvciB1cGRhdGUoKSwgc3BsaWNpbmcgd291bGQgY2F1c2Ugc2tpcHMgaW4gdGhlIGluZGV4LCBzbyBhZGp1c3QuLi5cbiAgICAgIC8vIGlmIG5vIG90aGVyIFNjcm9sbFRyaWdnZXIgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIHNjcm9sbGVyIGFyZSBmb3VuZCwgd2lwZSBvdXQgYW55IHJlY29yZGVkIHNjcm9sbCBwb3NpdGlvbi4gT3RoZXJ3aXNlLCBpbiBhIHNpbmdsZSBwYWdlIGFwcGxpY2F0aW9uLCBmb3IgZXhhbXBsZSwgaXQgY291bGQgbWFpbnRhaW4gc2Nyb2xsIHBvc2l0aW9uIHdoZW4gaXQgcmVhbGx5IHNob3VsZG4ndC5cblxuICAgICAgaSA9IDA7XG5cbiAgICAgIF90cmlnZ2Vycy5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0LnNjcm9sbGVyID09PSBzZWxmLnNjcm9sbGVyICYmIChpID0gMSk7XG4gICAgICB9KTtcblxuICAgICAgaSB8fCBfcmVmcmVzaGluZ0FsbCB8fCAoc2VsZi5zY3JvbGwucmVjID0gMCk7XG5cbiAgICAgIGlmIChhbmltYXRpb24pIHtcbiAgICAgICAgYW5pbWF0aW9uLnNjcm9sbFRyaWdnZXIgPSBudWxsO1xuICAgICAgICByZXZlcnQgJiYgYW5pbWF0aW9uLnJldmVydCh7XG4gICAgICAgICAga2lsbDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIGFsbG93QW5pbWF0aW9uIHx8IGFuaW1hdGlvbi5raWxsKCk7XG4gICAgICB9XG5cbiAgICAgIG1hcmtlclN0YXJ0ICYmIFttYXJrZXJTdGFydCwgbWFya2VyRW5kLCBtYXJrZXJTdGFydFRyaWdnZXIsIG1hcmtlckVuZFRyaWdnZXJdLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgcmV0dXJuIG0ucGFyZW50Tm9kZSAmJiBtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobSk7XG4gICAgICB9KTtcbiAgICAgIF9wcmltYXJ5ID09PSBzZWxmICYmIChfcHJpbWFyeSA9IDApO1xuXG4gICAgICBpZiAocGluKSB7XG4gICAgICAgIHBpbkNhY2hlICYmIChwaW5DYWNoZS51bmNhY2hlID0gMSk7XG4gICAgICAgIGkgPSAwO1xuXG4gICAgICAgIF90cmlnZ2Vycy5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgcmV0dXJuIHQucGluID09PSBwaW4gJiYgaSsrO1xuICAgICAgICB9KTtcblxuICAgICAgICBpIHx8IChwaW5DYWNoZS5zcGFjZXIgPSAwKTsgLy8gaWYgdGhlcmUgYXJlbid0IGFueSBtb3JlIFNjcm9sbFRyaWdnZXJzIHdpdGggdGhlIHNhbWUgcGluLCByZW1vdmUgdGhlIHNwYWNlciwgb3RoZXJ3aXNlIGl0IGNvdWxkIGJlIGNvbnRhbWluYXRlZCB3aXRoIG9sZC9zdGFsZSB2YWx1ZXMgaWYgdGhlIHVzZXIgcmUtY3JlYXRlcyBhIFNjcm9sbFRyaWdnZXIgZm9yIHRoZSBzYW1lIGVsZW1lbnQuXG4gICAgICB9XG5cbiAgICAgIHZhcnMub25LaWxsICYmIHZhcnMub25LaWxsKHNlbGYpO1xuICAgIH07XG5cbiAgICBfdHJpZ2dlcnMucHVzaChzZWxmKTtcblxuICAgIHNlbGYuZW5hYmxlKGZhbHNlLCBmYWxzZSk7XG4gICAgY3VzdG9tUmV2ZXJ0UmV0dXJuICYmIGN1c3RvbVJldmVydFJldHVybihzZWxmKTtcblxuICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLmFkZCAmJiAhY2hhbmdlKSB7XG4gICAgICAvLyBpZiB0aGUgYW5pbWF0aW9uIGlzIGEgdGltZWxpbmUsIGl0IG1heSBub3QgaGF2ZSBiZWVuIHBvcHVsYXRlZCB5ZXQsIHNvIGl0IHdvdWxkbid0IHJlbmRlciBhdCB0aGUgcHJvcGVyIHBsYWNlIG9uIHRoZSBmaXJzdCByZWZyZXNoKCksIHRodXMgd2Ugc2hvdWxkIHNjaGVkdWxlIG9uZSBmb3IgdGhlIG5leHQgdGljay4gSWYgXCJjaGFuZ2VcIiBpcyBkZWZpbmVkLCB3ZSBrbm93IGl0IG11c3QgYmUgcmUtZW5hYmxpbmcsIHRodXMgd2UgY2FuIHJlZnJlc2goKSByaWdodCBhd2F5LlxuICAgICAgdmFyIHVwZGF0ZUZ1bmMgPSBzZWxmLnVwZGF0ZTsgLy8gc29tZSBicm93c2VycyBtYXkgZmlyZSBhIHNjcm9sbCBldmVudCBCRUZPUkUgYSB0aWNrIGVsYXBzZXMgYW5kL29yIHRoZSBET01Db250ZW50TG9hZGVkIGZpcmVzLiBTbyB0aGVyZSdzIGEgY2hhbmNlIHVwZGF0ZSgpIHdpbGwgYmUgY2FsbGVkIEJFRk9SRSBhIHJlZnJlc2goKSBoYXMgaGFwcGVuZWQgb24gYSBUaW1lbGluZS1hdHRhY2hlZCBTY3JvbGxUcmlnZ2VyIHdoaWNoIG1lYW5zIHRoZSBzdGFydC9lbmQgd29uJ3QgYmUgY2FsY3VsYXRlZCB5ZXQuIFdlIGRvbid0IHdhbnQgdG8gYWRkIGNvbmRpdGlvbmFsIGxvZ2ljIGluc2lkZSB0aGUgdXBkYXRlKCkgbWV0aG9kIChsaWtlIGNoZWNrIHRvIHNlZSBpZiBlbmQgaXMgZGVmaW5lZCBhbmQgaWYgbm90LCBmb3JjZSBhIHJlZnJlc2goKSkgYmVjYXVzZSB0aGF0J3MgYSBmdW5jdGlvbiB0aGF0IGdldHMgaGl0IGEgTE9UIChwZXJmb3JtYW5jZSkuIFNvIHdlIHN3YXAgb3V0IHRoZSByZWFsIHVwZGF0ZSgpIG1ldGhvZCBmb3IgdGhpcyBvbmUgdGhhdCdsbCByZS1hdHRhY2ggaXQgdGhlIGZpcnN0IHRpbWUgaXQgZ2V0cyBjYWxsZWQgYW5kIG9mIGNvdXJzZSBmb3JjZXMgYSByZWZyZXNoKCkuXG5cbiAgICAgIHNlbGYudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLnVwZGF0ZSA9IHVwZGF0ZUZ1bmM7XG4gICAgICAgIHN0YXJ0IHx8IGVuZCB8fCBzZWxmLnJlZnJlc2goKTtcbiAgICAgIH07XG5cbiAgICAgIGdzYXAuZGVsYXllZENhbGwoMC4wMSwgc2VsZi51cGRhdGUpO1xuICAgICAgY2hhbmdlID0gMC4wMTtcbiAgICAgIHN0YXJ0ID0gZW5kID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgcGluICYmIF9xdWV1ZVJlZnJlc2hBbGwoKTsgLy8gcGlubmluZyBjb3VsZCBhZmZlY3QgdGhlIHBvc2l0aW9ucyBvZiBvdGhlciB0aGluZ3MsIHNvIG1ha2Ugc3VyZSB3ZSBxdWV1ZSBhIGZ1bGwgcmVmcmVzaCgpXG4gIH07XG5cbiAgU2Nyb2xsVHJpZ2dlci5yZWdpc3RlciA9IGZ1bmN0aW9uIHJlZ2lzdGVyKGNvcmUpIHtcbiAgICBpZiAoIV9jb3JlSW5pdHRlZCkge1xuICAgICAgZ3NhcCA9IGNvcmUgfHwgX2dldEdTQVAoKTtcbiAgICAgIF93aW5kb3dFeGlzdHMoKSAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgU2Nyb2xsVHJpZ2dlci5lbmFibGUoKTtcbiAgICAgIF9jb3JlSW5pdHRlZCA9IF9lbmFibGVkO1xuICAgIH1cblxuICAgIHJldHVybiBfY29yZUluaXR0ZWQ7XG4gIH07XG5cbiAgU2Nyb2xsVHJpZ2dlci5kZWZhdWx0cyA9IGZ1bmN0aW9uIGRlZmF1bHRzKGNvbmZpZykge1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gY29uZmlnKSB7XG4gICAgICAgIF9kZWZhdWx0c1twXSA9IGNvbmZpZ1twXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gX2RlZmF1bHRzO1xuICB9O1xuXG4gIFNjcm9sbFRyaWdnZXIuZGlzYWJsZSA9IGZ1bmN0aW9uIGRpc2FibGUocmVzZXQsIGtpbGwpIHtcbiAgICBfZW5hYmxlZCA9IDA7XG5cbiAgICBfdHJpZ2dlcnMuZm9yRWFjaChmdW5jdGlvbiAodHJpZ2dlcikge1xuICAgICAgcmV0dXJuIHRyaWdnZXJba2lsbCA/IFwia2lsbFwiIDogXCJkaXNhYmxlXCJdKHJlc2V0KTtcbiAgICB9KTtcblxuICAgIF9yZW1vdmVMaXN0ZW5lcihfd2luLCBcIndoZWVsXCIsIF9vblNjcm9sbCk7XG5cbiAgICBfcmVtb3ZlTGlzdGVuZXIoX2RvYywgXCJzY3JvbGxcIiwgX29uU2Nyb2xsKTtcblxuICAgIGNsZWFySW50ZXJ2YWwoX3N5bmNJbnRlcnZhbCk7XG5cbiAgICBfcmVtb3ZlTGlzdGVuZXIoX2RvYywgXCJ0b3VjaGNhbmNlbFwiLCBfcGFzc1Rocm91Z2gpO1xuXG4gICAgX3JlbW92ZUxpc3RlbmVyKF9ib2R5LCBcInRvdWNoc3RhcnRcIiwgX3Bhc3NUaHJvdWdoKTtcblxuICAgIF9tdWx0aUxpc3RlbmVyKF9yZW1vdmVMaXN0ZW5lciwgX2RvYywgXCJwb2ludGVyZG93bix0b3VjaHN0YXJ0LG1vdXNlZG93blwiLCBfcG9pbnRlckRvd25IYW5kbGVyKTtcblxuICAgIF9tdWx0aUxpc3RlbmVyKF9yZW1vdmVMaXN0ZW5lciwgX2RvYywgXCJwb2ludGVydXAsdG91Y2hlbmQsbW91c2V1cFwiLCBfcG9pbnRlclVwSGFuZGxlcik7XG5cbiAgICBfcmVzaXplRGVsYXkua2lsbCgpO1xuXG4gICAgX2l0ZXJhdGVBdXRvUmVmcmVzaChfcmVtb3ZlTGlzdGVuZXIpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfc2Nyb2xsZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICBfd2hlZWxMaXN0ZW5lcihfcmVtb3ZlTGlzdGVuZXIsIF9zY3JvbGxlcnNbaV0sIF9zY3JvbGxlcnNbaSArIDFdKTtcblxuICAgICAgX3doZWVsTGlzdGVuZXIoX3JlbW92ZUxpc3RlbmVyLCBfc2Nyb2xsZXJzW2ldLCBfc2Nyb2xsZXJzW2kgKyAyXSk7XG4gICAgfVxuICB9O1xuXG4gIFNjcm9sbFRyaWdnZXIuZW5hYmxlID0gZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgIF93aW4gPSB3aW5kb3c7XG4gICAgX2RvYyA9IGRvY3VtZW50O1xuICAgIF9kb2NFbCA9IF9kb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgIF9ib2R5ID0gX2RvYy5ib2R5O1xuXG4gICAgaWYgKGdzYXApIHtcbiAgICAgIF90b0FycmF5ID0gZ3NhcC51dGlscy50b0FycmF5O1xuICAgICAgX2NsYW1wID0gZ3NhcC51dGlscy5jbGFtcDtcbiAgICAgIF9jb250ZXh0ID0gZ3NhcC5jb3JlLmNvbnRleHQgfHwgX3Bhc3NUaHJvdWdoO1xuICAgICAgX3N1cHByZXNzT3ZlcndyaXRlcyA9IGdzYXAuY29yZS5zdXBwcmVzc092ZXJ3cml0ZXMgfHwgX3Bhc3NUaHJvdWdoO1xuICAgICAgX3Njcm9sbFJlc3RvcmF0aW9uID0gX3dpbi5oaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uIHx8IFwiYXV0b1wiO1xuICAgICAgX2xhc3RTY3JvbGwgPSBfd2luLnBhZ2VZT2Zmc2V0O1xuICAgICAgZ3NhcC5jb3JlLmdsb2JhbHMoXCJTY3JvbGxUcmlnZ2VyXCIsIFNjcm9sbFRyaWdnZXIpOyAvLyBtdXN0IHJlZ2lzdGVyIHRoZSBnbG9iYWwgbWFudWFsbHkgYmVjYXVzZSBpbiBJbnRlcm5ldCBFeHBsb3JlciwgZnVuY3Rpb25zIChjbGFzc2VzKSBkb24ndCBoYXZlIGEgXCJuYW1lXCIgcHJvcGVydHkuXG5cbiAgICAgIGlmIChfYm9keSkge1xuICAgICAgICBfZW5hYmxlZCA9IDE7XG4gICAgICAgIF9kaXYxMDB2aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7IC8vIHRvIHNvbHZlIG1vYmlsZSBicm93c2VyIGFkZHJlc3MgYmFyIHNob3cvaGlkZSByZXNpemluZywgd2Ugc2hvdWxkbid0IHJlbHkgb24gd2luZG93LmlubmVySGVpZ2h0LiBJbnN0ZWFkLCB1c2UgYSA8ZGl2PiB3aXRoIGl0cyBoZWlnaHQgc2V0IHRvIDEwMHZoIGFuZCBtZWFzdXJlIHRoYXQgc2luY2UgdGhhdCdzIHdoYXQgdGhlIHNjcm9sbGluZyBpcyBiYXNlZCBvbiBhbnl3YXkgYW5kIGl0J3Mgbm90IGFmZmVjdGVkIGJ5IGFkZHJlc3MgYmFyIHNob3dpbmcvaGlkaW5nLlxuXG4gICAgICAgIF9kaXYxMDB2aC5zdHlsZS5oZWlnaHQgPSBcIjEwMHZoXCI7XG4gICAgICAgIF9kaXYxMDB2aC5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblxuICAgICAgICBfcmVmcmVzaDEwMHZoKCk7XG5cbiAgICAgICAgX3JhZkJ1Z0ZpeCgpO1xuXG4gICAgICAgIE9ic2VydmVyLnJlZ2lzdGVyKGdzYXApOyAvLyBpc1RvdWNoIGlzIDAgaWYgbm8gdG91Y2gsIDEgaWYgT05MWSB0b3VjaCwgYW5kIDIgaWYgaXQgY2FuIGFjY29tbW9kYXRlIHRvdWNoIGJ1dCBhbHNvIG90aGVyIHR5cGVzIGxpa2UgbW91c2UvcG9pbnRlci5cblxuICAgICAgICBTY3JvbGxUcmlnZ2VyLmlzVG91Y2ggPSBPYnNlcnZlci5pc1RvdWNoO1xuICAgICAgICBfZml4SU9TQnVnID0gT2JzZXJ2ZXIuaXNUb3VjaCAmJiAvKGlQYWR8aVBob25lfGlQb2R8TWFjKS9nLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7IC8vIHNpbmNlIDIwMTcsIGlPUyBoYXMgaGFkIGEgYnVnIHRoYXQgY2F1c2VzIGV2ZW50LmNsaWVudFgvWSB0byBiZSBpbmFjY3VyYXRlIHdoZW4gYSBzY3JvbGwgb2NjdXJzLCB0aHVzIHdlIG11c3QgYWx0ZXJuYXRlIGlnbm9yaW5nIGV2ZXJ5IG90aGVyIHRvdWNobW92ZSBldmVudCB0byB3b3JrIGFyb3VuZCBpdC4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE5NTQgYW5kIGh0dHBzOi8vY29kZXBlbi5pby9HcmVlblNvY2svcGVuL0V4YnJQTmEvMDg3Y2VmMTk3ZGMzNTQ0NWEwOTUxZTg5MzVjNDE1MDNcblxuICAgICAgICBfYWRkTGlzdGVuZXIoX3dpbiwgXCJ3aGVlbFwiLCBfb25TY3JvbGwpOyAvLyBtb3N0bHkgZm9yIDNyZCBwYXJ0eSBzbW9vdGggc2Nyb2xsaW5nIGxpYnJhcmllcy5cblxuXG4gICAgICAgIF9yb290ID0gW193aW4sIF9kb2MsIF9kb2NFbCwgX2JvZHldO1xuXG4gICAgICAgIGlmIChnc2FwLm1hdGNoTWVkaWEpIHtcbiAgICAgICAgICBTY3JvbGxUcmlnZ2VyLm1hdGNoTWVkaWEgPSBmdW5jdGlvbiAodmFycykge1xuICAgICAgICAgICAgdmFyIG1tID0gZ3NhcC5tYXRjaE1lZGlhKCksXG4gICAgICAgICAgICAgICAgcDtcblxuICAgICAgICAgICAgZm9yIChwIGluIHZhcnMpIHtcbiAgICAgICAgICAgICAgbW0uYWRkKHAsIHZhcnNbcF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbW07XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGdzYXAuYWRkRXZlbnRMaXN0ZW5lcihcIm1hdGNoTWVkaWFJbml0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmV2ZXJ0QWxsKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZ3NhcC5hZGRFdmVudExpc3RlbmVyKFwibWF0Y2hNZWRpYVJldmVydFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3JldmVydFJlY29yZGVkKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZ3NhcC5hZGRFdmVudExpc3RlbmVyKFwibWF0Y2hNZWRpYVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfcmVmcmVzaEFsbCgwLCAxKTtcblxuICAgICAgICAgICAgX2Rpc3BhdGNoKFwibWF0Y2hNZWRpYVwiKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBnc2FwLm1hdGNoTWVkaWEoXCIob3JpZW50YXRpb246IHBvcnRyYWl0KVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyB3aGVuIG9yaWVudGF0aW9uIGNoYW5nZXMsIHdlIHNob3VsZCB0YWtlIG5ldyBiYXNlIG1lYXN1cmVtZW50cyBmb3IgdGhlIGlnbm9yZU1vYmlsZVJlc2l6ZSBmZWF0dXJlLlxuICAgICAgICAgICAgX3NldEJhc2VEaW1lbnNpb25zKCk7XG5cbiAgICAgICAgICAgIHJldHVybiBfc2V0QmFzZURpbWVuc2lvbnM7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiUmVxdWlyZXMgR1NBUCAzLjExLjAgb3IgbGF0ZXJcIik7XG4gICAgICAgIH1cblxuICAgICAgICBfc2V0QmFzZURpbWVuc2lvbnMoKTtcblxuICAgICAgICBfYWRkTGlzdGVuZXIoX2RvYywgXCJzY3JvbGxcIiwgX29uU2Nyb2xsKTsgLy8gc29tZSBicm93c2VycyAobGlrZSBDaHJvbWUpLCB0aGUgd2luZG93IHN0b3BzIGRpc3BhdGNoaW5nIHNjcm9sbCBldmVudHMgb24gdGhlIHdpbmRvdyBpZiB5b3Ugc2Nyb2xsIHJlYWxseSBmYXN0LCBidXQgaXQncyBjb25zaXN0ZW50IG9uIHRoZSBkb2N1bWVudCFcblxuXG4gICAgICAgIHZhciBib2R5U3R5bGUgPSBfYm9keS5zdHlsZSxcbiAgICAgICAgICAgIGJvcmRlciA9IGJvZHlTdHlsZS5ib3JkZXJUb3BTdHlsZSxcbiAgICAgICAgICAgIEFuaW1hdGlvblByb3RvID0gZ3NhcC5jb3JlLkFuaW1hdGlvbi5wcm90b3R5cGUsXG4gICAgICAgICAgICBib3VuZHMsXG4gICAgICAgICAgICBpO1xuICAgICAgICBBbmltYXRpb25Qcm90by5yZXZlcnQgfHwgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFuaW1hdGlvblByb3RvLCBcInJldmVydFwiLCB7XG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGltZSgtMC4wMSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTsgLy8gb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKEFuaW1hdGlvbi5yZXZlcnQoKSB3YXMgYWRkZWQgYWZ0ZXIgMy4xMC40KVxuXG4gICAgICAgIGJvZHlTdHlsZS5ib3JkZXJUb3BTdHlsZSA9IFwic29saWRcIjsgLy8gd29ya3MgYXJvdW5kIGFuIGlzc3VlIHdoZXJlIGEgbWFyZ2luIG9mIGEgY2hpbGQgZWxlbWVudCBjb3VsZCB0aHJvdyBvZmYgdGhlIGJvdW5kcyBvZiB0aGUgX2JvZHksIG1ha2luZyBpdCBzZWVtIGxpa2UgdGhlcmUncyBhIG1hcmdpbiB3aGVuIHRoZXJlIGFjdHVhbGx5IGlzbid0LiBUaGUgYm9yZGVyIGVuc3VyZXMgdGhhdCB0aGUgYm91bmRzIGFyZSBhY2N1cmF0ZS5cblxuICAgICAgICBib3VuZHMgPSBfZ2V0Qm91bmRzKF9ib2R5KTtcbiAgICAgICAgX3ZlcnRpY2FsLm0gPSBNYXRoLnJvdW5kKGJvdW5kcy50b3AgKyBfdmVydGljYWwuc2MoKSkgfHwgMDsgLy8gYWNjb21tb2RhdGUgdGhlIG9mZnNldCBvZiB0aGUgPGJvZHk+IGNhdXNlZCBieSBtYXJnaW5zIGFuZC9vciBwYWRkaW5nXG5cbiAgICAgICAgX2hvcml6b250YWwubSA9IE1hdGgucm91bmQoYm91bmRzLmxlZnQgKyBfaG9yaXpvbnRhbC5zYygpKSB8fCAwO1xuICAgICAgICBib3JkZXIgPyBib2R5U3R5bGUuYm9yZGVyVG9wU3R5bGUgPSBib3JkZXIgOiBib2R5U3R5bGUucmVtb3ZlUHJvcGVydHkoXCJib3JkZXItdG9wLXN0eWxlXCIpOyAvLyBUT0RPOiAoPykgbWF5YmUgbW92ZSB0byBsZXZlcmFnaW5nIHRoZSB2ZWxvY2l0eSBtZWNoYW5pc20gaW4gT2JzZXJ2ZXIgYW5kIHNraXAgaW50ZXJ2YWxzLlxuXG4gICAgICAgIF9zeW5jSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChfc3luYywgMjUwKTtcbiAgICAgICAgZ3NhcC5kZWxheWVkQ2FsbCgwLjUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3N0YXJ0dXAgPSAwO1xuICAgICAgICB9KTtcblxuICAgICAgICBfYWRkTGlzdGVuZXIoX2RvYywgXCJ0b3VjaGNhbmNlbFwiLCBfcGFzc1Rocm91Z2gpOyAvLyBzb21lIG9sZGVyIEFuZHJvaWQgZGV2aWNlcyBpbnRlcm1pdHRlbnRseSBzdG9wIGRpc3BhdGNoaW5nIFwidG91Y2htb3ZlXCIgZXZlbnRzIGlmIHdlIGRvbid0IGxpc3RlbiBmb3IgXCJ0b3VjaGNhbmNlbFwiIG9uIHRoZSBkb2N1bWVudC5cblxuXG4gICAgICAgIF9hZGRMaXN0ZW5lcihfYm9keSwgXCJ0b3VjaHN0YXJ0XCIsIF9wYXNzVGhyb3VnaCk7IC8vd29ya3MgYXJvdW5kIFNhZmFyaSBidWc6IGh0dHBzOi8vZ3JlZW5zb2NrLmNvbS9mb3J1bXMvdG9waWMvMjE0NTAtZHJhZ2dhYmxlLWluLWlmcmFtZS1vbi1tb2JpbGUtaXMtYnVnZ3kvXG5cblxuICAgICAgICBfbXVsdGlMaXN0ZW5lcihfYWRkTGlzdGVuZXIsIF9kb2MsIFwicG9pbnRlcmRvd24sdG91Y2hzdGFydCxtb3VzZWRvd25cIiwgX3BvaW50ZXJEb3duSGFuZGxlcik7XG5cbiAgICAgICAgX211bHRpTGlzdGVuZXIoX2FkZExpc3RlbmVyLCBfZG9jLCBcInBvaW50ZXJ1cCx0b3VjaGVuZCxtb3VzZXVwXCIsIF9wb2ludGVyVXBIYW5kbGVyKTtcblxuICAgICAgICBfdHJhbnNmb3JtUHJvcCA9IGdzYXAudXRpbHMuY2hlY2tQcmVmaXgoXCJ0cmFuc2Zvcm1cIik7XG5cbiAgICAgICAgX3N0YXRlUHJvcHMucHVzaChfdHJhbnNmb3JtUHJvcCk7XG5cbiAgICAgICAgX2NvcmVJbml0dGVkID0gX2dldFRpbWUoKTtcbiAgICAgICAgX3Jlc2l6ZURlbGF5ID0gZ3NhcC5kZWxheWVkQ2FsbCgwLjIsIF9yZWZyZXNoQWxsKS5wYXVzZSgpO1xuICAgICAgICBfYXV0b1JlZnJlc2ggPSBbX2RvYywgXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgdyA9IF93aW4uaW5uZXJXaWR0aCxcbiAgICAgICAgICAgICAgaCA9IF93aW4uaW5uZXJIZWlnaHQ7XG5cbiAgICAgICAgICBpZiAoX2RvYy5oaWRkZW4pIHtcbiAgICAgICAgICAgIF9wcmV2V2lkdGggPSB3O1xuICAgICAgICAgICAgX3ByZXZIZWlnaHQgPSBoO1xuICAgICAgICAgIH0gZWxzZSBpZiAoX3ByZXZXaWR0aCAhPT0gdyB8fCBfcHJldkhlaWdodCAhPT0gaCkge1xuICAgICAgICAgICAgX29uUmVzaXplKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBfZG9jLCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgX3JlZnJlc2hBbGwsIF93aW4sIFwibG9hZFwiLCBfcmVmcmVzaEFsbCwgX3dpbiwgXCJyZXNpemVcIiwgX29uUmVzaXplXTtcblxuICAgICAgICBfaXRlcmF0ZUF1dG9SZWZyZXNoKF9hZGRMaXN0ZW5lcik7XG5cbiAgICAgICAgX3RyaWdnZXJzLmZvckVhY2goZnVuY3Rpb24gKHRyaWdnZXIpIHtcbiAgICAgICAgICByZXR1cm4gdHJpZ2dlci5lbmFibGUoMCwgMSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBfc2Nyb2xsZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgICAgX3doZWVsTGlzdGVuZXIoX3JlbW92ZUxpc3RlbmVyLCBfc2Nyb2xsZXJzW2ldLCBfc2Nyb2xsZXJzW2kgKyAxXSk7XG5cbiAgICAgICAgICBfd2hlZWxMaXN0ZW5lcihfcmVtb3ZlTGlzdGVuZXIsIF9zY3JvbGxlcnNbaV0sIF9zY3JvbGxlcnNbaSArIDJdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBTY3JvbGxUcmlnZ2VyLmNvbmZpZyA9IGZ1bmN0aW9uIGNvbmZpZyh2YXJzKSB7XG4gICAgXCJsaW1pdENhbGxiYWNrc1wiIGluIHZhcnMgJiYgKF9saW1pdENhbGxiYWNrcyA9ICEhdmFycy5saW1pdENhbGxiYWNrcyk7XG4gICAgdmFyIG1zID0gdmFycy5zeW5jSW50ZXJ2YWw7XG4gICAgbXMgJiYgY2xlYXJJbnRlcnZhbChfc3luY0ludGVydmFsKSB8fCAoX3N5bmNJbnRlcnZhbCA9IG1zKSAmJiBzZXRJbnRlcnZhbChfc3luYywgbXMpO1xuICAgIFwiaWdub3JlTW9iaWxlUmVzaXplXCIgaW4gdmFycyAmJiAoX2lnbm9yZU1vYmlsZVJlc2l6ZSA9IFNjcm9sbFRyaWdnZXIuaXNUb3VjaCA9PT0gMSAmJiB2YXJzLmlnbm9yZU1vYmlsZVJlc2l6ZSk7XG5cbiAgICBpZiAoXCJhdXRvUmVmcmVzaEV2ZW50c1wiIGluIHZhcnMpIHtcbiAgICAgIF9pdGVyYXRlQXV0b1JlZnJlc2goX3JlbW92ZUxpc3RlbmVyKSB8fCBfaXRlcmF0ZUF1dG9SZWZyZXNoKF9hZGRMaXN0ZW5lciwgdmFycy5hdXRvUmVmcmVzaEV2ZW50cyB8fCBcIm5vbmVcIik7XG4gICAgICBfaWdub3JlUmVzaXplID0gKHZhcnMuYXV0b1JlZnJlc2hFdmVudHMgKyBcIlwiKS5pbmRleE9mKFwicmVzaXplXCIpID09PSAtMTtcbiAgICB9XG4gIH07XG5cbiAgU2Nyb2xsVHJpZ2dlci5zY3JvbGxlclByb3h5ID0gZnVuY3Rpb24gc2Nyb2xsZXJQcm94eSh0YXJnZXQsIHZhcnMpIHtcbiAgICB2YXIgdCA9IF9nZXRUYXJnZXQodGFyZ2V0KSxcbiAgICAgICAgaSA9IF9zY3JvbGxlcnMuaW5kZXhPZih0KSxcbiAgICAgICAgaXNWaWV3cG9ydCA9IF9pc1ZpZXdwb3J0KHQpO1xuXG4gICAgaWYgKH5pKSB7XG4gICAgICBfc2Nyb2xsZXJzLnNwbGljZShpLCBpc1ZpZXdwb3J0ID8gNiA6IDIpO1xuICAgIH1cblxuICAgIGlmICh2YXJzKSB7XG4gICAgICBpc1ZpZXdwb3J0ID8gX3Byb3hpZXMudW5zaGlmdChfd2luLCB2YXJzLCBfYm9keSwgdmFycywgX2RvY0VsLCB2YXJzKSA6IF9wcm94aWVzLnVuc2hpZnQodCwgdmFycyk7XG4gICAgfVxuICB9O1xuXG4gIFNjcm9sbFRyaWdnZXIuY2xlYXJNYXRjaE1lZGlhID0gZnVuY3Rpb24gY2xlYXJNYXRjaE1lZGlhKHF1ZXJ5KSB7XG4gICAgX3RyaWdnZXJzLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0Ll9jdHggJiYgdC5fY3R4LnF1ZXJ5ID09PSBxdWVyeSAmJiB0Ll9jdHgua2lsbCh0cnVlLCB0cnVlKTtcbiAgICB9KTtcbiAgfTtcblxuICBTY3JvbGxUcmlnZ2VyLmlzSW5WaWV3cG9ydCA9IGZ1bmN0aW9uIGlzSW5WaWV3cG9ydChlbGVtZW50LCByYXRpbywgaG9yaXpvbnRhbCkge1xuICAgIHZhciBib3VuZHMgPSAoX2lzU3RyaW5nKGVsZW1lbnQpID8gX2dldFRhcmdldChlbGVtZW50KSA6IGVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICBvZmZzZXQgPSBib3VuZHNbaG9yaXpvbnRhbCA/IF93aWR0aCA6IF9oZWlnaHRdICogcmF0aW8gfHwgMDtcbiAgICByZXR1cm4gaG9yaXpvbnRhbCA/IGJvdW5kcy5yaWdodCAtIG9mZnNldCA+IDAgJiYgYm91bmRzLmxlZnQgKyBvZmZzZXQgPCBfd2luLmlubmVyV2lkdGggOiBib3VuZHMuYm90dG9tIC0gb2Zmc2V0ID4gMCAmJiBib3VuZHMudG9wICsgb2Zmc2V0IDwgX3dpbi5pbm5lckhlaWdodDtcbiAgfTtcblxuICBTY3JvbGxUcmlnZ2VyLnBvc2l0aW9uSW5WaWV3cG9ydCA9IGZ1bmN0aW9uIHBvc2l0aW9uSW5WaWV3cG9ydChlbGVtZW50LCByZWZlcmVuY2VQb2ludCwgaG9yaXpvbnRhbCkge1xuICAgIF9pc1N0cmluZyhlbGVtZW50KSAmJiAoZWxlbWVudCA9IF9nZXRUYXJnZXQoZWxlbWVudCkpO1xuICAgIHZhciBib3VuZHMgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICBzaXplID0gYm91bmRzW2hvcml6b250YWwgPyBfd2lkdGggOiBfaGVpZ2h0XSxcbiAgICAgICAgb2Zmc2V0ID0gcmVmZXJlbmNlUG9pbnQgPT0gbnVsbCA/IHNpemUgLyAyIDogcmVmZXJlbmNlUG9pbnQgaW4gX2tleXdvcmRzID8gX2tleXdvcmRzW3JlZmVyZW5jZVBvaW50XSAqIHNpemUgOiB+cmVmZXJlbmNlUG9pbnQuaW5kZXhPZihcIiVcIikgPyBwYXJzZUZsb2F0KHJlZmVyZW5jZVBvaW50KSAqIHNpemUgLyAxMDAgOiBwYXJzZUZsb2F0KHJlZmVyZW5jZVBvaW50KSB8fCAwO1xuICAgIHJldHVybiBob3Jpem9udGFsID8gKGJvdW5kcy5sZWZ0ICsgb2Zmc2V0KSAvIF93aW4uaW5uZXJXaWR0aCA6IChib3VuZHMudG9wICsgb2Zmc2V0KSAvIF93aW4uaW5uZXJIZWlnaHQ7XG4gIH07XG5cbiAgU2Nyb2xsVHJpZ2dlci5raWxsQWxsID0gZnVuY3Rpb24ga2lsbEFsbChhbGxvd0xpc3RlbmVycykge1xuICAgIF90cmlnZ2Vycy5zbGljZSgwKS5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC52YXJzLmlkICE9PSBcIlNjcm9sbFNtb290aGVyXCIgJiYgdC5raWxsKCk7XG4gICAgfSk7XG5cbiAgICBpZiAoYWxsb3dMaXN0ZW5lcnMgIT09IHRydWUpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBfbGlzdGVuZXJzLmtpbGxBbGwgfHwgW107XG4gICAgICBfbGlzdGVuZXJzID0ge307XG4gICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAoZikge1xuICAgICAgICByZXR1cm4gZigpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTY3JvbGxUcmlnZ2VyO1xufSgpO1xuU2Nyb2xsVHJpZ2dlci52ZXJzaW9uID0gXCIzLjEyLjJcIjtcblxuU2Nyb2xsVHJpZ2dlci5zYXZlU3R5bGVzID0gZnVuY3Rpb24gKHRhcmdldHMpIHtcbiAgcmV0dXJuIHRhcmdldHMgPyBfdG9BcnJheSh0YXJnZXRzKS5mb3JFYWNoKGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAvLyBzYXZlZCBzdHlsZXMgYXJlIHJlY29yZGVkIGluIGEgY29uc2VjdXRpdmUgYWx0ZXJuYXRpbmcgQXJyYXksIGxpa2UgW2VsZW1lbnQsIGNzc1RleHQsIHRyYW5zZm9ybSBhdHRyaWJ1dGUsIGNhY2hlLCBtYXRjaE1lZGlhLCAuLi5dXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuc3R5bGUpIHtcbiAgICAgIHZhciBpID0gX3NhdmVkU3R5bGVzLmluZGV4T2YodGFyZ2V0KTtcblxuICAgICAgaSA+PSAwICYmIF9zYXZlZFN0eWxlcy5zcGxpY2UoaSwgNSk7XG5cbiAgICAgIF9zYXZlZFN0eWxlcy5wdXNoKHRhcmdldCwgdGFyZ2V0LnN0eWxlLmNzc1RleHQsIHRhcmdldC5nZXRCQm94ICYmIHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiksIGdzYXAuY29yZS5nZXRDYWNoZSh0YXJnZXQpLCBfY29udGV4dCgpKTtcbiAgICB9XG4gIH0pIDogX3NhdmVkU3R5bGVzO1xufTtcblxuU2Nyb2xsVHJpZ2dlci5yZXZlcnQgPSBmdW5jdGlvbiAoc29mdCwgbWVkaWEpIHtcbiAgcmV0dXJuIF9yZXZlcnRBbGwoIXNvZnQsIG1lZGlhKTtcbn07XG5cblNjcm9sbFRyaWdnZXIuY3JlYXRlID0gZnVuY3Rpb24gKHZhcnMsIGFuaW1hdGlvbikge1xuICByZXR1cm4gbmV3IFNjcm9sbFRyaWdnZXIodmFycywgYW5pbWF0aW9uKTtcbn07XG5cblNjcm9sbFRyaWdnZXIucmVmcmVzaCA9IGZ1bmN0aW9uIChzYWZlKSB7XG4gIHJldHVybiBzYWZlID8gX29uUmVzaXplKCkgOiAoX2NvcmVJbml0dGVkIHx8IFNjcm9sbFRyaWdnZXIucmVnaXN0ZXIoKSkgJiYgX3JlZnJlc2hBbGwodHJ1ZSk7XG59O1xuXG5TY3JvbGxUcmlnZ2VyLnVwZGF0ZSA9IGZ1bmN0aW9uIChmb3JjZSkge1xuICByZXR1cm4gKytfc2Nyb2xsZXJzLmNhY2hlICYmIF91cGRhdGVBbGwoZm9yY2UgPT09IHRydWUgPyAyIDogMCk7XG59O1xuXG5TY3JvbGxUcmlnZ2VyLmNsZWFyU2Nyb2xsTWVtb3J5ID0gX2NsZWFyU2Nyb2xsTWVtb3J5O1xuXG5TY3JvbGxUcmlnZ2VyLm1heFNjcm9sbCA9IGZ1bmN0aW9uIChlbGVtZW50LCBob3Jpem9udGFsKSB7XG4gIHJldHVybiBfbWF4U2Nyb2xsKGVsZW1lbnQsIGhvcml6b250YWwgPyBfaG9yaXpvbnRhbCA6IF92ZXJ0aWNhbCk7XG59O1xuXG5TY3JvbGxUcmlnZ2VyLmdldFNjcm9sbEZ1bmMgPSBmdW5jdGlvbiAoZWxlbWVudCwgaG9yaXpvbnRhbCkge1xuICByZXR1cm4gX2dldFNjcm9sbEZ1bmMoX2dldFRhcmdldChlbGVtZW50KSwgaG9yaXpvbnRhbCA/IF9ob3Jpem9udGFsIDogX3ZlcnRpY2FsKTtcbn07XG5cblNjcm9sbFRyaWdnZXIuZ2V0QnlJZCA9IGZ1bmN0aW9uIChpZCkge1xuICByZXR1cm4gX2lkc1tpZF07XG59O1xuXG5TY3JvbGxUcmlnZ2VyLmdldEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF90cmlnZ2Vycy5maWx0ZXIoZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC52YXJzLmlkICE9PSBcIlNjcm9sbFNtb290aGVyXCI7XG4gIH0pO1xufTsgLy8gaXQncyBjb21tb24gZm9yIHBlb3BsZSB0byBTY3JvbGxUcmlnZ2VyLmdldEFsbCh0ID0+IHQua2lsbCgpKSBvbiBwYWdlIHJvdXRlcywgZm9yIGV4YW1wbGUsIGFuZCB3ZSBkb24ndCB3YW50IGl0IHRvIHJ1aW4gc21vb3RoIHNjcm9sbGluZyBieSBraWxsaW5nIHRoZSBtYWluIFNjcm9sbFNtb290aGVyIG9uZS5cblxuXG5TY3JvbGxUcmlnZ2VyLmlzU2Nyb2xsaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gISFfbGFzdFNjcm9sbFRpbWU7XG59O1xuXG5TY3JvbGxUcmlnZ2VyLnNuYXBEaXJlY3Rpb25hbCA9IF9zbmFwRGlyZWN0aW9uYWw7XG5cblNjcm9sbFRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uICh0eXBlLCBjYWxsYmFjaykge1xuICB2YXIgYSA9IF9saXN0ZW5lcnNbdHlwZV0gfHwgKF9saXN0ZW5lcnNbdHlwZV0gPSBbXSk7XG4gIH5hLmluZGV4T2YoY2FsbGJhY2spIHx8IGEucHVzaChjYWxsYmFjayk7XG59O1xuXG5TY3JvbGxUcmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAodHlwZSwgY2FsbGJhY2spIHtcbiAgdmFyIGEgPSBfbGlzdGVuZXJzW3R5cGVdLFxuICAgICAgaSA9IGEgJiYgYS5pbmRleE9mKGNhbGxiYWNrKTtcbiAgaSA+PSAwICYmIGEuc3BsaWNlKGksIDEpO1xufTtcblxuU2Nyb2xsVHJpZ2dlci5iYXRjaCA9IGZ1bmN0aW9uICh0YXJnZXRzLCB2YXJzKSB7XG4gIHZhciByZXN1bHQgPSBbXSxcbiAgICAgIHZhcnNDb3B5ID0ge30sXG4gICAgICBpbnRlcnZhbCA9IHZhcnMuaW50ZXJ2YWwgfHwgMC4wMTYsXG4gICAgICBiYXRjaE1heCA9IHZhcnMuYmF0Y2hNYXggfHwgMWU5LFxuICAgICAgcHJveHlDYWxsYmFjayA9IGZ1bmN0aW9uIHByb3h5Q2FsbGJhY2sodHlwZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXSxcbiAgICAgICAgdHJpZ2dlcnMgPSBbXSxcbiAgICAgICAgZGVsYXkgPSBnc2FwLmRlbGF5ZWRDYWxsKGludGVydmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayhlbGVtZW50cywgdHJpZ2dlcnMpO1xuICAgICAgZWxlbWVudHMgPSBbXTtcbiAgICAgIHRyaWdnZXJzID0gW107XG4gICAgfSkucGF1c2UoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNlbGYpIHtcbiAgICAgIGVsZW1lbnRzLmxlbmd0aCB8fCBkZWxheS5yZXN0YXJ0KHRydWUpO1xuICAgICAgZWxlbWVudHMucHVzaChzZWxmLnRyaWdnZXIpO1xuICAgICAgdHJpZ2dlcnMucHVzaChzZWxmKTtcbiAgICAgIGJhdGNoTWF4IDw9IGVsZW1lbnRzLmxlbmd0aCAmJiBkZWxheS5wcm9ncmVzcygxKTtcbiAgICB9O1xuICB9LFxuICAgICAgcDtcblxuICBmb3IgKHAgaW4gdmFycykge1xuICAgIHZhcnNDb3B5W3BdID0gcC5zdWJzdHIoMCwgMikgPT09IFwib25cIiAmJiBfaXNGdW5jdGlvbih2YXJzW3BdKSAmJiBwICE9PSBcIm9uUmVmcmVzaEluaXRcIiA/IHByb3h5Q2FsbGJhY2socCwgdmFyc1twXSkgOiB2YXJzW3BdO1xuICB9XG5cbiAgaWYgKF9pc0Z1bmN0aW9uKGJhdGNoTWF4KSkge1xuICAgIGJhdGNoTWF4ID0gYmF0Y2hNYXgoKTtcblxuICAgIF9hZGRMaXN0ZW5lcihTY3JvbGxUcmlnZ2VyLCBcInJlZnJlc2hcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGJhdGNoTWF4ID0gdmFycy5iYXRjaE1heCgpO1xuICAgIH0pO1xuICB9XG5cbiAgX3RvQXJyYXkodGFyZ2V0cykuZm9yRWFjaChmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gICAgZm9yIChwIGluIHZhcnNDb3B5KSB7XG4gICAgICBjb25maWdbcF0gPSB2YXJzQ29weVtwXTtcbiAgICB9XG5cbiAgICBjb25maWcudHJpZ2dlciA9IHRhcmdldDtcbiAgICByZXN1bHQucHVzaChTY3JvbGxUcmlnZ2VyLmNyZWF0ZShjb25maWcpKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07IC8vIHRvIHJlZHVjZSBmaWxlIHNpemUuIGNsYW1wcyB0aGUgc2Nyb2xsIGFuZCBhbHNvIHJldHVybnMgYSBkdXJhdGlvbiBtdWx0aXBsaWVyIHNvIHRoYXQgaWYgdGhlIHNjcm9sbCBnZXRzIGNob3BwZWQgc2hvcnRlciwgdGhlIGR1cmF0aW9uIGdldHMgY3VydGFpbGVkIGFzIHdlbGwgKG90aGVyd2lzZSBpZiB5b3UncmUgdmVyeSBjbG9zZSB0byB0aGUgdG9wIG9mIHRoZSBwYWdlLCBmb3IgZXhhbXBsZSwgYW5kIHN3aXBlIHVwIHJlYWxseSBmYXN0LCBpdCdsbCBzdWRkZW5seSBzbG93IGRvd24gYW5kIHRha2UgYSBsb25nIHRpbWUgdG8gcmVhY2ggdGhlIHRvcCkuXG5cblxudmFyIF9jbGFtcFNjcm9sbEFuZEdldER1cmF0aW9uTXVsdGlwbGllciA9IGZ1bmN0aW9uIF9jbGFtcFNjcm9sbEFuZEdldER1cmF0aW9uTXVsdGlwbGllcihzY3JvbGxGdW5jLCBjdXJyZW50LCBlbmQsIG1heCkge1xuICBjdXJyZW50ID4gbWF4ID8gc2Nyb2xsRnVuYyhtYXgpIDogY3VycmVudCA8IDAgJiYgc2Nyb2xsRnVuYygwKTtcbiAgcmV0dXJuIGVuZCA+IG1heCA/IChtYXggLSBjdXJyZW50KSAvIChlbmQgLSBjdXJyZW50KSA6IGVuZCA8IDAgPyBjdXJyZW50IC8gKGN1cnJlbnQgLSBlbmQpIDogMTtcbn0sXG4gICAgX2FsbG93TmF0aXZlUGFubmluZyA9IGZ1bmN0aW9uIF9hbGxvd05hdGl2ZVBhbm5pbmcodGFyZ2V0LCBkaXJlY3Rpb24pIHtcbiAgaWYgKGRpcmVjdGlvbiA9PT0gdHJ1ZSkge1xuICAgIHRhcmdldC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInRvdWNoLWFjdGlvblwiKTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQuc3R5bGUudG91Y2hBY3Rpb24gPSBkaXJlY3Rpb24gPT09IHRydWUgPyBcImF1dG9cIiA6IGRpcmVjdGlvbiA/IFwicGFuLVwiICsgZGlyZWN0aW9uICsgKE9ic2VydmVyLmlzVG91Y2ggPyBcIiBwaW5jaC16b29tXCIgOiBcIlwiKSA6IFwibm9uZVwiOyAvLyBub3RlOiBGaXJlZm94IGRvZXNuJ3Qgc3VwcG9ydCBpdCBwaW5jaC16b29tIHByb3Blcmx5LCBhdCBsZWFzdCBpbiBhZGRpdGlvbiB0byBhIHBhbi14IG9yIHBhbi15LlxuICB9XG5cbiAgdGFyZ2V0ID09PSBfZG9jRWwgJiYgX2FsbG93TmF0aXZlUGFubmluZyhfYm9keSwgZGlyZWN0aW9uKTtcbn0sXG4gICAgX292ZXJmbG93ID0ge1xuICBhdXRvOiAxLFxuICBzY3JvbGw6IDFcbn0sXG4gICAgX25lc3RlZFNjcm9sbCA9IGZ1bmN0aW9uIF9uZXN0ZWRTY3JvbGwoX3JlZjUpIHtcbiAgdmFyIGV2ZW50ID0gX3JlZjUuZXZlbnQsXG4gICAgICB0YXJnZXQgPSBfcmVmNS50YXJnZXQsXG4gICAgICBheGlzID0gX3JlZjUuYXhpcztcblxuICB2YXIgbm9kZSA9IChldmVudC5jaGFuZ2VkVG91Y2hlcyA/IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdIDogZXZlbnQpLnRhcmdldCxcbiAgICAgIGNhY2hlID0gbm9kZS5fZ3NhcCB8fCBnc2FwLmNvcmUuZ2V0Q2FjaGUobm9kZSksXG4gICAgICB0aW1lID0gX2dldFRpbWUoKSxcbiAgICAgIGNzO1xuXG4gIGlmICghY2FjaGUuX2lzU2Nyb2xsVCB8fCB0aW1lIC0gY2FjaGUuX2lzU2Nyb2xsVCA+IDIwMDApIHtcbiAgICAvLyBjYWNoZSBmb3IgMiBzZWNvbmRzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuXG4gICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPT0gX2JvZHkgJiYgKG5vZGUuc2Nyb2xsSGVpZ2h0IDw9IG5vZGUuY2xpZW50SGVpZ2h0ICYmIG5vZGUuc2Nyb2xsV2lkdGggPD0gbm9kZS5jbGllbnRXaWR0aCB8fCAhKF9vdmVyZmxvd1soY3MgPSBfZ2V0Q29tcHV0ZWRTdHlsZShub2RlKSkub3ZlcmZsb3dZXSB8fCBfb3ZlcmZsb3dbY3Mub3ZlcmZsb3dYXSkpKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cblxuICAgIGNhY2hlLl9pc1Njcm9sbCA9IG5vZGUgJiYgbm9kZSAhPT0gdGFyZ2V0ICYmICFfaXNWaWV3cG9ydChub2RlKSAmJiAoX292ZXJmbG93WyhjcyA9IF9nZXRDb21wdXRlZFN0eWxlKG5vZGUpKS5vdmVyZmxvd1ldIHx8IF9vdmVyZmxvd1tjcy5vdmVyZmxvd1hdKTtcbiAgICBjYWNoZS5faXNTY3JvbGxUID0gdGltZTtcbiAgfVxuXG4gIGlmIChjYWNoZS5faXNTY3JvbGwgfHwgYXhpcyA9PT0gXCJ4XCIpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5fZ3NhcEFsbG93ID0gdHJ1ZTtcbiAgfVxufSxcbiAgICAvLyBjYXB0dXJlIGV2ZW50cyBvbiBzY3JvbGxhYmxlIGVsZW1lbnRzIElOU0lERSB0aGUgPGJvZHk+IGFuZCBhbGxvdyB0aG9zZSBieSBjYWxsaW5nIHN0b3BQcm9wYWdhdGlvbigpIHdoZW4gd2UgZmluZCBhIHNjcm9sbGFibGUgYW5jZXN0b3Jcbl9pbnB1dE9ic2VydmVyID0gZnVuY3Rpb24gX2lucHV0T2JzZXJ2ZXIodGFyZ2V0LCB0eXBlLCBpbnB1dHMsIG5lc3RlZCkge1xuICByZXR1cm4gT2JzZXJ2ZXIuY3JlYXRlKHtcbiAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICBjYXB0dXJlOiB0cnVlLFxuICAgIGRlYm91bmNlOiBmYWxzZSxcbiAgICBsb2NrQXhpczogdHJ1ZSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIG9uV2hlZWw6IG5lc3RlZCA9IG5lc3RlZCAmJiBfbmVzdGVkU2Nyb2xsLFxuICAgIG9uUHJlc3M6IG5lc3RlZCxcbiAgICBvbkRyYWc6IG5lc3RlZCxcbiAgICBvblNjcm9sbDogbmVzdGVkLFxuICAgIG9uRW5hYmxlOiBmdW5jdGlvbiBvbkVuYWJsZSgpIHtcbiAgICAgIHJldHVybiBpbnB1dHMgJiYgX2FkZExpc3RlbmVyKF9kb2MsIE9ic2VydmVyLmV2ZW50VHlwZXNbMF0sIF9jYXB0dXJlSW5wdXRzLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfSxcbiAgICBvbkRpc2FibGU6IGZ1bmN0aW9uIG9uRGlzYWJsZSgpIHtcbiAgICAgIHJldHVybiBfcmVtb3ZlTGlzdGVuZXIoX2RvYywgT2JzZXJ2ZXIuZXZlbnRUeXBlc1swXSwgX2NhcHR1cmVJbnB1dHMsIHRydWUpO1xuICAgIH1cbiAgfSk7XG59LFxuICAgIF9pbnB1dEV4cCA9IC8oaW5wdXR8bGFiZWx8c2VsZWN0fHRleHRhcmVhKS9pLFxuICAgIF9pbnB1dElzRm9jdXNlZCxcbiAgICBfY2FwdHVyZUlucHV0cyA9IGZ1bmN0aW9uIF9jYXB0dXJlSW5wdXRzKGUpIHtcbiAgdmFyIGlzSW5wdXQgPSBfaW5wdXRFeHAudGVzdChlLnRhcmdldC50YWdOYW1lKTtcblxuICBpZiAoaXNJbnB1dCB8fCBfaW5wdXRJc0ZvY3VzZWQpIHtcbiAgICBlLl9nc2FwQWxsb3cgPSB0cnVlO1xuICAgIF9pbnB1dElzRm9jdXNlZCA9IGlzSW5wdXQ7XG4gIH1cbn0sXG4gICAgX2dldFNjcm9sbE5vcm1hbGl6ZXIgPSBmdW5jdGlvbiBfZ2V0U2Nyb2xsTm9ybWFsaXplcih2YXJzKSB7XG4gIF9pc09iamVjdCh2YXJzKSB8fCAodmFycyA9IHt9KTtcbiAgdmFycy5wcmV2ZW50RGVmYXVsdCA9IHZhcnMuaXNOb3JtYWxpemVyID0gdmFycy5hbGxvd0NsaWNrcyA9IHRydWU7XG4gIHZhcnMudHlwZSB8fCAodmFycy50eXBlID0gXCJ3aGVlbCx0b3VjaFwiKTtcbiAgdmFycy5kZWJvdW5jZSA9ICEhdmFycy5kZWJvdW5jZTtcbiAgdmFycy5pZCA9IHZhcnMuaWQgfHwgXCJub3JtYWxpemVyXCI7XG5cbiAgdmFyIF92YXJzMiA9IHZhcnMsXG4gICAgICBub3JtYWxpemVTY3JvbGxYID0gX3ZhcnMyLm5vcm1hbGl6ZVNjcm9sbFgsXG4gICAgICBtb21lbnR1bSA9IF92YXJzMi5tb21lbnR1bSxcbiAgICAgIGFsbG93TmVzdGVkU2Nyb2xsID0gX3ZhcnMyLmFsbG93TmVzdGVkU2Nyb2xsLFxuICAgICAgb25SZWxlYXNlID0gX3ZhcnMyLm9uUmVsZWFzZSxcbiAgICAgIHNlbGYsXG4gICAgICBtYXhZLFxuICAgICAgdGFyZ2V0ID0gX2dldFRhcmdldCh2YXJzLnRhcmdldCkgfHwgX2RvY0VsLFxuICAgICAgc21vb3RoZXIgPSBnc2FwLmNvcmUuZ2xvYmFscygpLlNjcm9sbFNtb290aGVyLFxuICAgICAgc21vb3RoZXJJbnN0YW5jZSA9IHNtb290aGVyICYmIHNtb290aGVyLmdldCgpLFxuICAgICAgY29udGVudCA9IF9maXhJT1NCdWcgJiYgKHZhcnMuY29udGVudCAmJiBfZ2V0VGFyZ2V0KHZhcnMuY29udGVudCkgfHwgc21vb3RoZXJJbnN0YW5jZSAmJiB2YXJzLmNvbnRlbnQgIT09IGZhbHNlICYmICFzbW9vdGhlckluc3RhbmNlLnNtb290aCgpICYmIHNtb290aGVySW5zdGFuY2UuY29udGVudCgpKSxcbiAgICAgIHNjcm9sbEZ1bmNZID0gX2dldFNjcm9sbEZ1bmModGFyZ2V0LCBfdmVydGljYWwpLFxuICAgICAgc2Nyb2xsRnVuY1ggPSBfZ2V0U2Nyb2xsRnVuYyh0YXJnZXQsIF9ob3Jpem9udGFsKSxcbiAgICAgIHNjYWxlID0gMSxcbiAgICAgIGluaXRpYWxTY2FsZSA9IChPYnNlcnZlci5pc1RvdWNoICYmIF93aW4udmlzdWFsVmlld3BvcnQgPyBfd2luLnZpc3VhbFZpZXdwb3J0LnNjYWxlICogX3dpbi52aXN1YWxWaWV3cG9ydC53aWR0aCA6IF93aW4ub3V0ZXJXaWR0aCkgLyBfd2luLmlubmVyV2lkdGgsXG4gICAgICB3aGVlbFJlZnJlc2ggPSAwLFxuICAgICAgcmVzb2x2ZU1vbWVudHVtRHVyYXRpb24gPSBfaXNGdW5jdGlvbihtb21lbnR1bSkgPyBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG1vbWVudHVtKHNlbGYpO1xuICB9IDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBtb21lbnR1bSB8fCAyLjg7XG4gIH0sXG4gICAgICBsYXN0UmVmcmVzaElELFxuICAgICAgc2tpcFRvdWNoTW92ZSxcbiAgICAgIGlucHV0T2JzZXJ2ZXIgPSBfaW5wdXRPYnNlcnZlcih0YXJnZXQsIHZhcnMudHlwZSwgdHJ1ZSwgYWxsb3dOZXN0ZWRTY3JvbGwpLFxuICAgICAgcmVzdW1lVG91Y2hNb3ZlID0gZnVuY3Rpb24gcmVzdW1lVG91Y2hNb3ZlKCkge1xuICAgIHJldHVybiBza2lwVG91Y2hNb3ZlID0gZmFsc2U7XG4gIH0sXG4gICAgICBzY3JvbGxDbGFtcFggPSBfcGFzc1Rocm91Z2gsXG4gICAgICBzY3JvbGxDbGFtcFkgPSBfcGFzc1Rocm91Z2gsXG4gICAgICB1cGRhdGVDbGFtcHMgPSBmdW5jdGlvbiB1cGRhdGVDbGFtcHMoKSB7XG4gICAgbWF4WSA9IF9tYXhTY3JvbGwodGFyZ2V0LCBfdmVydGljYWwpO1xuICAgIHNjcm9sbENsYW1wWSA9IF9jbGFtcChfZml4SU9TQnVnID8gMSA6IDAsIG1heFkpO1xuICAgIG5vcm1hbGl6ZVNjcm9sbFggJiYgKHNjcm9sbENsYW1wWCA9IF9jbGFtcCgwLCBfbWF4U2Nyb2xsKHRhcmdldCwgX2hvcml6b250YWwpKSk7XG4gICAgbGFzdFJlZnJlc2hJRCA9IF9yZWZyZXNoSUQ7XG4gIH0sXG4gICAgICByZW1vdmVDb250ZW50T2Zmc2V0ID0gZnVuY3Rpb24gcmVtb3ZlQ29udGVudE9mZnNldCgpIHtcbiAgICBjb250ZW50Ll9nc2FwLnkgPSBfcm91bmQocGFyc2VGbG9hdChjb250ZW50Ll9nc2FwLnkpICsgc2Nyb2xsRnVuY1kub2Zmc2V0KSArIFwicHhcIjtcbiAgICBjb250ZW50LnN0eWxlLnRyYW5zZm9ybSA9IFwibWF0cml4M2QoMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgXCIgKyBwYXJzZUZsb2F0KGNvbnRlbnQuX2dzYXAueSkgKyBcIiwgMCwgMSlcIjtcbiAgICBzY3JvbGxGdW5jWS5vZmZzZXQgPSBzY3JvbGxGdW5jWS5jYWNoZUlEID0gMDtcbiAgfSxcbiAgICAgIGlnbm9yZURyYWcgPSBmdW5jdGlvbiBpZ25vcmVEcmFnKCkge1xuICAgIGlmIChza2lwVG91Y2hNb3ZlKSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVzdW1lVG91Y2hNb3ZlKTtcblxuICAgICAgdmFyIG9mZnNldCA9IF9yb3VuZChzZWxmLmRlbHRhWSAvIDIpLFxuICAgICAgICAgIHNjcm9sbCA9IHNjcm9sbENsYW1wWShzY3JvbGxGdW5jWS52IC0gb2Zmc2V0KTtcblxuICAgICAgaWYgKGNvbnRlbnQgJiYgc2Nyb2xsICE9PSBzY3JvbGxGdW5jWS52ICsgc2Nyb2xsRnVuY1kub2Zmc2V0KSB7XG4gICAgICAgIHNjcm9sbEZ1bmNZLm9mZnNldCA9IHNjcm9sbCAtIHNjcm9sbEZ1bmNZLnY7XG5cbiAgICAgICAgdmFyIHkgPSBfcm91bmQoKHBhcnNlRmxvYXQoY29udGVudCAmJiBjb250ZW50Ll9nc2FwLnkpIHx8IDApIC0gc2Nyb2xsRnVuY1kub2Zmc2V0KTtcblxuICAgICAgICBjb250ZW50LnN0eWxlLnRyYW5zZm9ybSA9IFwibWF0cml4M2QoMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgXCIgKyB5ICsgXCIsIDAsIDEpXCI7XG4gICAgICAgIGNvbnRlbnQuX2dzYXAueSA9IHkgKyBcInB4XCI7XG4gICAgICAgIHNjcm9sbEZ1bmNZLmNhY2hlSUQgPSBfc2Nyb2xsZXJzLmNhY2hlO1xuXG4gICAgICAgIF91cGRhdGVBbGwoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc2Nyb2xsRnVuY1kub2Zmc2V0ICYmIHJlbW92ZUNvbnRlbnRPZmZzZXQoKTtcbiAgICBza2lwVG91Y2hNb3ZlID0gdHJ1ZTtcbiAgfSxcbiAgICAgIHR3ZWVuLFxuICAgICAgc3RhcnRTY3JvbGxYLFxuICAgICAgc3RhcnRTY3JvbGxZLFxuICAgICAgb25TdG9wRGVsYXllZENhbGwsXG4gICAgICBvblJlc2l6ZSA9IGZ1bmN0aW9uIG9uUmVzaXplKCkge1xuICAgIC8vIGlmIHRoZSB3aW5kb3cgcmVzaXplcywgbGlrZSBvbiBhbiBpUGhvbmUgd2hpY2ggQXBwbGUgRk9SQ0VTIHRoZSBhZGRyZXNzIGJhciB0byBzaG93L2hpZGUgZXZlbiBpZiB3ZSBldmVudC5wcmV2ZW50RGVmYXVsdCgpLCBpdCBtYXkgYmUgc2Nyb2xsaW5nIHRvbyBmYXIgbm93IHRoYXQgdGhlIGFkZHJlc3MgYmFyIGlzIHNob3dpbmcsIHNvIHdlIG11c3QgZHluYW1pY2FsbHkgYWRqdXN0IHRoZSBtb21lbnR1bSB0d2Vlbi5cbiAgICB1cGRhdGVDbGFtcHMoKTtcblxuICAgIGlmICh0d2Vlbi5pc0FjdGl2ZSgpICYmIHR3ZWVuLnZhcnMuc2Nyb2xsWSA+IG1heFkpIHtcbiAgICAgIHNjcm9sbEZ1bmNZKCkgPiBtYXhZID8gdHdlZW4ucHJvZ3Jlc3MoMSkgJiYgc2Nyb2xsRnVuY1kobWF4WSkgOiB0d2Vlbi5yZXNldFRvKFwic2Nyb2xsWVwiLCBtYXhZKTtcbiAgICB9XG4gIH07XG5cbiAgY29udGVudCAmJiBnc2FwLnNldChjb250ZW50LCB7XG4gICAgeTogXCIrPTBcIlxuICB9KTsgLy8gdG8gZW5zdXJlIHRoZXJlJ3MgYSBjYWNoZSAoZWxlbWVudC5fZ3NhcClcblxuICB2YXJzLmlnbm9yZUNoZWNrID0gZnVuY3Rpb24gKGUpIHtcbiAgICByZXR1cm4gX2ZpeElPU0J1ZyAmJiBlLnR5cGUgPT09IFwidG91Y2htb3ZlXCIgJiYgaWdub3JlRHJhZyhlKSB8fCBzY2FsZSA+IDEuMDUgJiYgZS50eXBlICE9PSBcInRvdWNoc3RhcnRcIiB8fCBzZWxmLmlzR2VzdHVyaW5nIHx8IGUudG91Y2hlcyAmJiBlLnRvdWNoZXMubGVuZ3RoID4gMTtcbiAgfTtcblxuICB2YXJzLm9uUHJlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgc2tpcFRvdWNoTW92ZSA9IGZhbHNlO1xuICAgIHZhciBwcmV2U2NhbGUgPSBzY2FsZTtcbiAgICBzY2FsZSA9IF9yb3VuZCgoX3dpbi52aXN1YWxWaWV3cG9ydCAmJiBfd2luLnZpc3VhbFZpZXdwb3J0LnNjYWxlIHx8IDEpIC8gaW5pdGlhbFNjYWxlKTtcbiAgICB0d2Vlbi5wYXVzZSgpO1xuICAgIHByZXZTY2FsZSAhPT0gc2NhbGUgJiYgX2FsbG93TmF0aXZlUGFubmluZyh0YXJnZXQsIHNjYWxlID4gMS4wMSA/IHRydWUgOiBub3JtYWxpemVTY3JvbGxYID8gZmFsc2UgOiBcInhcIik7XG4gICAgc3RhcnRTY3JvbGxYID0gc2Nyb2xsRnVuY1goKTtcbiAgICBzdGFydFNjcm9sbFkgPSBzY3JvbGxGdW5jWSgpO1xuICAgIHVwZGF0ZUNsYW1wcygpO1xuICAgIGxhc3RSZWZyZXNoSUQgPSBfcmVmcmVzaElEO1xuICB9O1xuXG4gIHZhcnMub25SZWxlYXNlID0gdmFycy5vbkdlc3R1cmVTdGFydCA9IGZ1bmN0aW9uIChzZWxmLCB3YXNEcmFnZ2luZykge1xuICAgIHNjcm9sbEZ1bmNZLm9mZnNldCAmJiByZW1vdmVDb250ZW50T2Zmc2V0KCk7XG5cbiAgICBpZiAoIXdhc0RyYWdnaW5nKSB7XG4gICAgICBvblN0b3BEZWxheWVkQ2FsbC5yZXN0YXJ0KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfc2Nyb2xsZXJzLmNhY2hlKys7IC8vIG1ha2Ugc3VyZSB3ZSdyZSBwdWxsaW5nIHRoZSBub24tY2FjaGVkIHZhbHVlXG4gICAgICAvLyBhbHRlcm5hdGUgYWxnb3JpdGhtOiBkdXJYID0gTWF0aC5taW4oNiwgTWF0aC5hYnMoc2VsZi52ZWxvY2l0eVggLyA4MDApKSxcdGR1ciA9IE1hdGgubWF4KGR1clgsIE1hdGgubWluKDYsIE1hdGguYWJzKHNlbGYudmVsb2NpdHlZIC8gODAwKSkpOyBkdXIgPSBkdXIgKiAoMC40ICsgKDEgLSBfcG93ZXI0SW4oZHVyIC8gNikpICogMC42KSkgKiAobW9tZW50dW1TcGVlZCB8fCAxKVxuXG4gICAgICB2YXIgZHVyID0gcmVzb2x2ZU1vbWVudHVtRHVyYXRpb24oKSxcbiAgICAgICAgICBjdXJyZW50U2Nyb2xsLFxuICAgICAgICAgIGVuZFNjcm9sbDtcblxuICAgICAgaWYgKG5vcm1hbGl6ZVNjcm9sbFgpIHtcbiAgICAgICAgY3VycmVudFNjcm9sbCA9IHNjcm9sbEZ1bmNYKCk7XG4gICAgICAgIGVuZFNjcm9sbCA9IGN1cnJlbnRTY3JvbGwgKyBkdXIgKiAwLjA1ICogLXNlbGYudmVsb2NpdHlYIC8gMC4yMjc7IC8vIHRoZSBjb25zdGFudCAuMjI3IGlzIGZyb20gcG93ZXI0KDAuMDUpLiB2ZWxvY2l0eSBpcyBpbnZlcnRlZCBiZWNhdXNlIHNjcm9sbGluZyBnb2VzIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uXG5cbiAgICAgICAgZHVyICo9IF9jbGFtcFNjcm9sbEFuZEdldER1cmF0aW9uTXVsdGlwbGllcihzY3JvbGxGdW5jWCwgY3VycmVudFNjcm9sbCwgZW5kU2Nyb2xsLCBfbWF4U2Nyb2xsKHRhcmdldCwgX2hvcml6b250YWwpKTtcbiAgICAgICAgdHdlZW4udmFycy5zY3JvbGxYID0gc2Nyb2xsQ2xhbXBYKGVuZFNjcm9sbCk7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRTY3JvbGwgPSBzY3JvbGxGdW5jWSgpO1xuICAgICAgZW5kU2Nyb2xsID0gY3VycmVudFNjcm9sbCArIGR1ciAqIDAuMDUgKiAtc2VsZi52ZWxvY2l0eVkgLyAwLjIyNzsgLy8gdGhlIGNvbnN0YW50IC4yMjcgaXMgZnJvbSBwb3dlcjQoMC4wNSlcblxuICAgICAgZHVyICo9IF9jbGFtcFNjcm9sbEFuZEdldER1cmF0aW9uTXVsdGlwbGllcihzY3JvbGxGdW5jWSwgY3VycmVudFNjcm9sbCwgZW5kU2Nyb2xsLCBfbWF4U2Nyb2xsKHRhcmdldCwgX3ZlcnRpY2FsKSk7XG4gICAgICB0d2Vlbi52YXJzLnNjcm9sbFkgPSBzY3JvbGxDbGFtcFkoZW5kU2Nyb2xsKTtcbiAgICAgIHR3ZWVuLmludmFsaWRhdGUoKS5kdXJhdGlvbihkdXIpLnBsYXkoMC4wMSk7XG5cbiAgICAgIGlmIChfZml4SU9TQnVnICYmIHR3ZWVuLnZhcnMuc2Nyb2xsWSA+PSBtYXhZIHx8IGN1cnJlbnRTY3JvbGwgPj0gbWF4WSAtIDEpIHtcbiAgICAgICAgLy8gaU9TIGJ1ZzogaXQnbGwgc2hvdyB0aGUgYWRkcmVzcyBiYXIgYnV0IE5PVCBmaXJlIHRoZSB3aW5kb3cgXCJyZXNpemVcIiBldmVudCB1bnRpbCB0aGUgYW5pbWF0aW9uIGlzIGRvbmUgYnV0IHdlIG11c3QgcHJvdGVjdCBhZ2FpbnN0IG92ZXJzaG9vdCBzbyB3ZSBsZXZlcmFnZSBhbiBvblVwZGF0ZSB0byBkbyBzby5cbiAgICAgICAgZ3NhcC50byh7fSwge1xuICAgICAgICAgIG9uVXBkYXRlOiBvblJlc2l6ZSxcbiAgICAgICAgICBkdXJhdGlvbjogZHVyXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVsZWFzZSAmJiBvblJlbGVhc2Uoc2VsZik7XG4gIH07XG5cbiAgdmFycy5vbldoZWVsID0gZnVuY3Rpb24gKCkge1xuICAgIHR3ZWVuLl90cyAmJiB0d2Vlbi5wYXVzZSgpO1xuXG4gICAgaWYgKF9nZXRUaW1lKCkgLSB3aGVlbFJlZnJlc2ggPiAxMDAwKSB7XG4gICAgICAvLyBhZnRlciAxIHNlY29uZCwgcmVmcmVzaCB0aGUgY2xhbXBzIG90aGVyd2lzZSB0aGF0J2xsIG9ubHkgaGFwcGVuIHdoZW4gU2Nyb2xsVHJpZ2dlci5yZWZyZXNoKCkgaXMgY2FsbGVkIG9yIGZvciB0b3VjaC1zY3JvbGxpbmcuXG4gICAgICBsYXN0UmVmcmVzaElEID0gMDtcbiAgICAgIHdoZWVsUmVmcmVzaCA9IF9nZXRUaW1lKCk7XG4gICAgfVxuICB9O1xuXG4gIHZhcnMub25DaGFuZ2UgPSBmdW5jdGlvbiAoc2VsZiwgZHgsIGR5LCB4QXJyYXksIHlBcnJheSkge1xuICAgIF9yZWZyZXNoSUQgIT09IGxhc3RSZWZyZXNoSUQgJiYgdXBkYXRlQ2xhbXBzKCk7XG4gICAgZHggJiYgbm9ybWFsaXplU2Nyb2xsWCAmJiBzY3JvbGxGdW5jWChzY3JvbGxDbGFtcFgoeEFycmF5WzJdID09PSBkeCA/IHN0YXJ0U2Nyb2xsWCArIChzZWxmLnN0YXJ0WCAtIHNlbGYueCkgOiBzY3JvbGxGdW5jWCgpICsgZHggLSB4QXJyYXlbMV0pKTsgLy8gZm9yIG1vcmUgcHJlY2lzaW9uLCB3ZSB0cmFjayBwb2ludGVyL3RvdWNoIG1vdmVtZW50IGZyb20gdGhlIHN0YXJ0LCBvdGhlcndpc2UgaXQnbGwgZHJpZnQuXG5cbiAgICBpZiAoZHkpIHtcbiAgICAgIHNjcm9sbEZ1bmNZLm9mZnNldCAmJiByZW1vdmVDb250ZW50T2Zmc2V0KCk7XG4gICAgICB2YXIgaXNUb3VjaCA9IHlBcnJheVsyXSA9PT0gZHksXG4gICAgICAgICAgeSA9IGlzVG91Y2ggPyBzdGFydFNjcm9sbFkgKyBzZWxmLnN0YXJ0WSAtIHNlbGYueSA6IHNjcm9sbEZ1bmNZKCkgKyBkeSAtIHlBcnJheVsxXSxcbiAgICAgICAgICB5Q2xhbXBlZCA9IHNjcm9sbENsYW1wWSh5KTtcbiAgICAgIGlzVG91Y2ggJiYgeSAhPT0geUNsYW1wZWQgJiYgKHN0YXJ0U2Nyb2xsWSArPSB5Q2xhbXBlZCAtIHkpO1xuICAgICAgc2Nyb2xsRnVuY1koeUNsYW1wZWQpO1xuICAgIH1cblxuICAgIChkeSB8fCBkeCkgJiYgX3VwZGF0ZUFsbCgpO1xuICB9O1xuXG4gIHZhcnMub25FbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgX2FsbG93TmF0aXZlUGFubmluZyh0YXJnZXQsIG5vcm1hbGl6ZVNjcm9sbFggPyBmYWxzZSA6IFwieFwiKTtcblxuICAgIFNjcm9sbFRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihcInJlZnJlc2hcIiwgb25SZXNpemUpO1xuXG4gICAgX2FkZExpc3RlbmVyKF93aW4sIFwicmVzaXplXCIsIG9uUmVzaXplKTtcblxuICAgIGlmIChzY3JvbGxGdW5jWS5zbW9vdGgpIHtcbiAgICAgIHNjcm9sbEZ1bmNZLnRhcmdldC5zdHlsZS5zY3JvbGxCZWhhdmlvciA9IFwiYXV0b1wiO1xuICAgICAgc2Nyb2xsRnVuY1kuc21vb3RoID0gc2Nyb2xsRnVuY1guc21vb3RoID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaW5wdXRPYnNlcnZlci5lbmFibGUoKTtcbiAgfTtcblxuICB2YXJzLm9uRGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBfYWxsb3dOYXRpdmVQYW5uaW5nKHRhcmdldCwgdHJ1ZSk7XG5cbiAgICBfcmVtb3ZlTGlzdGVuZXIoX3dpbiwgXCJyZXNpemVcIiwgb25SZXNpemUpO1xuXG4gICAgU2Nyb2xsVHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVmcmVzaFwiLCBvblJlc2l6ZSk7XG4gICAgaW5wdXRPYnNlcnZlci5raWxsKCk7XG4gIH07XG5cbiAgdmFycy5sb2NrQXhpcyA9IHZhcnMubG9ja0F4aXMgIT09IGZhbHNlO1xuICBzZWxmID0gbmV3IE9ic2VydmVyKHZhcnMpO1xuICBzZWxmLmlPUyA9IF9maXhJT1NCdWc7IC8vIHVzZWQgaW4gdGhlIE9ic2VydmVyIGdldENhY2hlZFNjcm9sbCgpIGZ1bmN0aW9uIHRvIHdvcmsgYXJvdW5kIGFuIGlPUyBidWcgdGhhdCB3cmVha3MgaGF2b2Mgd2l0aCBUb3VjaEV2ZW50LmNsaWVudFkgaWYgd2UgYWxsb3cgc2Nyb2xsIHRvIGdvIGFsbCB0aGUgd2F5IGJhY2sgdG8gMC5cblxuICBfZml4SU9TQnVnICYmICFzY3JvbGxGdW5jWSgpICYmIHNjcm9sbEZ1bmNZKDEpOyAvLyBpT1MgYnVnIGNhdXNlcyBldmVudC5jbGllbnRZIHZhbHVlcyB0byBmcmVhayBvdXQgKHdpbGRseSBpbmFjY3VyYXRlKSBpZiB0aGUgc2Nyb2xsIHBvc2l0aW9uIGlzIGV4YWN0bHkgMC5cblxuICBfZml4SU9TQnVnICYmIGdzYXAudGlja2VyLmFkZChfcGFzc1Rocm91Z2gpOyAvLyBwcmV2ZW50IHRoZSB0aWNrZXIgZnJvbSBzbGVlcGluZ1xuXG4gIG9uU3RvcERlbGF5ZWRDYWxsID0gc2VsZi5fZGM7XG4gIHR3ZWVuID0gZ3NhcC50byhzZWxmLCB7XG4gICAgZWFzZTogXCJwb3dlcjRcIixcbiAgICBwYXVzZWQ6IHRydWUsXG4gICAgc2Nyb2xsWDogbm9ybWFsaXplU2Nyb2xsWCA/IFwiKz0wLjFcIiA6IFwiKz0wXCIsXG4gICAgc2Nyb2xsWTogXCIrPTAuMVwiLFxuICAgIG1vZGlmaWVyczoge1xuICAgICAgc2Nyb2xsWTogX2ludGVycnVwdGlvblRyYWNrZXIoc2Nyb2xsRnVuY1ksIHNjcm9sbEZ1bmNZKCksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHR3ZWVuLnBhdXNlKCk7XG4gICAgICB9KVxuICAgIH0sXG4gICAgb25VcGRhdGU6IF91cGRhdGVBbGwsXG4gICAgb25Db21wbGV0ZTogb25TdG9wRGVsYXllZENhbGwudmFycy5vbkNvbXBsZXRlXG4gIH0pOyAvLyB3ZSBuZWVkIHRoZSBtb2RpZmllciB0byBzZW5zZSBpZiB0aGUgc2Nyb2xsIHBvc2l0aW9uIGlzIGFsdGVyZWQgb3V0c2lkZSBvZiB0aGUgbW9tZW50dW0gdHdlZW4gKGxpa2Ugd2l0aCBhIHNjcm9sbFRvIHR3ZWVuKSBzbyB3ZSBjYW4gcGF1c2UoKSBpdCB0byBwcmV2ZW50IGNvbmZsaWN0cy5cblxuICByZXR1cm4gc2VsZjtcbn07XG5cblNjcm9sbFRyaWdnZXIuc29ydCA9IGZ1bmN0aW9uIChmdW5jKSB7XG4gIHJldHVybiBfdHJpZ2dlcnMuc29ydChmdW5jIHx8IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIChhLnZhcnMucmVmcmVzaFByaW9yaXR5IHx8IDApICogLTFlNiArIGEuc3RhcnQgLSAoYi5zdGFydCArIChiLnZhcnMucmVmcmVzaFByaW9yaXR5IHx8IDApICogLTFlNik7XG4gIH0pO1xufTtcblxuU2Nyb2xsVHJpZ2dlci5vYnNlcnZlID0gZnVuY3Rpb24gKHZhcnMpIHtcbiAgcmV0dXJuIG5ldyBPYnNlcnZlcih2YXJzKTtcbn07XG5cblNjcm9sbFRyaWdnZXIubm9ybWFsaXplU2Nyb2xsID0gZnVuY3Rpb24gKHZhcnMpIHtcbiAgaWYgKHR5cGVvZiB2YXJzID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIF9ub3JtYWxpemVyO1xuICB9XG5cbiAgaWYgKHZhcnMgPT09IHRydWUgJiYgX25vcm1hbGl6ZXIpIHtcbiAgICByZXR1cm4gX25vcm1hbGl6ZXIuZW5hYmxlKCk7XG4gIH1cblxuICBpZiAodmFycyA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gX25vcm1hbGl6ZXIgJiYgX25vcm1hbGl6ZXIua2lsbCgpO1xuICB9XG5cbiAgdmFyIG5vcm1hbGl6ZXIgPSB2YXJzIGluc3RhbmNlb2YgT2JzZXJ2ZXIgPyB2YXJzIDogX2dldFNjcm9sbE5vcm1hbGl6ZXIodmFycyk7XG4gIF9ub3JtYWxpemVyICYmIF9ub3JtYWxpemVyLnRhcmdldCA9PT0gbm9ybWFsaXplci50YXJnZXQgJiYgX25vcm1hbGl6ZXIua2lsbCgpO1xuICBfaXNWaWV3cG9ydChub3JtYWxpemVyLnRhcmdldCkgJiYgKF9ub3JtYWxpemVyID0gbm9ybWFsaXplcik7XG4gIHJldHVybiBub3JtYWxpemVyO1xufTtcblxuU2Nyb2xsVHJpZ2dlci5jb3JlID0ge1xuICAvLyBzbWFsbGVyIGZpbGUgc2l6ZSB3YXkgdG8gbGV2ZXJhZ2UgaW4gU2Nyb2xsU21vb3RoZXIgYW5kIE9ic2VydmVyXG4gIF9nZXRWZWxvY2l0eVByb3A6IF9nZXRWZWxvY2l0eVByb3AsXG4gIF9pbnB1dE9ic2VydmVyOiBfaW5wdXRPYnNlcnZlcixcbiAgX3Njcm9sbGVyczogX3Njcm9sbGVycyxcbiAgX3Byb3hpZXM6IF9wcm94aWVzLFxuICBicmlkZ2U6IHtcbiAgICAvLyB3aGVuIG5vcm1hbGl6ZVNjcm9sbCBzZXRzIHRoZSBzY3JvbGwgcG9zaXRpb24gKHNzID0gc2V0U2Nyb2xsKVxuICAgIHNzOiBmdW5jdGlvbiBzcygpIHtcbiAgICAgIF9sYXN0U2Nyb2xsVGltZSB8fCBfZGlzcGF0Y2goXCJzY3JvbGxTdGFydFwiKTtcbiAgICAgIF9sYXN0U2Nyb2xsVGltZSA9IF9nZXRUaW1lKCk7XG4gICAgfSxcbiAgICAvLyBhIHdheSB0byBnZXQgdGhlIF9yZWZyZXNoaW5nIHZhbHVlIGluIE9ic2VydmVyXG4gICAgcmVmOiBmdW5jdGlvbiByZWYoKSB7XG4gICAgICByZXR1cm4gX3JlZnJlc2hpbmc7XG4gICAgfVxuICB9XG59O1xuX2dldEdTQVAoKSAmJiBnc2FwLnJlZ2lzdGVyUGx1Z2luKFNjcm9sbFRyaWdnZXIpO1xuZXhwb3J0IHsgU2Nyb2xsVHJpZ2dlciBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpOyBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzczsgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG4vKiFcbiAqIEdTQVAgMy4xMi4yXG4gKiBodHRwczovL2dyZWVuc29jay5jb21cbiAqXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgMjAwOC0yMDIzLCBHcmVlblNvY2suIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhdCBodHRwczovL2dyZWVuc29jay5jb20vc3RhbmRhcmQtbGljZW5zZSBvciBmb3JcbiAqIENsdWIgR3JlZW5Tb2NrIG1lbWJlcnMsIHRoZSBhZ3JlZW1lbnQgaXNzdWVkIHdpdGggdGhhdCBtZW1iZXJzaGlwLlxuICogQGF1dGhvcjogSmFjayBEb3lsZSwgamFja0BncmVlbnNvY2suY29tXG4qL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xudmFyIF9jb25maWcgPSB7XG4gIGF1dG9TbGVlcDogMTIwLFxuICBmb3JjZTNEOiBcImF1dG9cIixcbiAgbnVsbFRhcmdldFdhcm46IDEsXG4gIHVuaXRzOiB7XG4gICAgbGluZUhlaWdodDogXCJcIlxuICB9XG59LFxuICAgIF9kZWZhdWx0cyA9IHtcbiAgZHVyYXRpb246IC41LFxuICBvdmVyd3JpdGU6IGZhbHNlLFxuICBkZWxheTogMFxufSxcbiAgICBfc3VwcHJlc3NPdmVyd3JpdGVzLFxuICAgIF9yZXZlcnRpbmcsXG4gICAgX2NvbnRleHQsXG4gICAgX2JpZ051bSA9IDFlOCxcbiAgICBfdGlueU51bSA9IDEgLyBfYmlnTnVtLFxuICAgIF8yUEkgPSBNYXRoLlBJICogMixcbiAgICBfSEFMRl9QSSA9IF8yUEkgLyA0LFxuICAgIF9nc0lEID0gMCxcbiAgICBfc3FydCA9IE1hdGguc3FydCxcbiAgICBfY29zID0gTWF0aC5jb3MsXG4gICAgX3NpbiA9IE1hdGguc2luLFxuICAgIF9pc1N0cmluZyA9IGZ1bmN0aW9uIF9pc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xufSxcbiAgICBfaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIF9pc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIjtcbn0sXG4gICAgX2lzTnVtYmVyID0gZnVuY3Rpb24gX2lzTnVtYmVyKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XG59LFxuICAgIF9pc1VuZGVmaW5lZCA9IGZ1bmN0aW9uIF9pc1VuZGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiO1xufSxcbiAgICBfaXNPYmplY3QgPSBmdW5jdGlvbiBfaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIjtcbn0sXG4gICAgX2lzTm90RmFsc2UgPSBmdW5jdGlvbiBfaXNOb3RGYWxzZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IGZhbHNlO1xufSxcbiAgICBfd2luZG93RXhpc3RzID0gZnVuY3Rpb24gX3dpbmRvd0V4aXN0cygpIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCI7XG59LFxuICAgIF9pc0Z1bmNPclN0cmluZyA9IGZ1bmN0aW9uIF9pc0Z1bmNPclN0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gX2lzRnVuY3Rpb24odmFsdWUpIHx8IF9pc1N0cmluZyh2YWx1ZSk7XG59LFxuICAgIF9pc1R5cGVkQXJyYXkgPSB0eXBlb2YgQXJyYXlCdWZmZXIgPT09IFwiZnVuY3Rpb25cIiAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcgfHwgZnVuY3Rpb24gKCkge30sXG4gICAgLy8gbm90ZTogSUUxMCBoYXMgQXJyYXlCdWZmZXIsIGJ1dCBOT1QgQXJyYXlCdWZmZXIuaXNWaWV3KCkuXG5faXNBcnJheSA9IEFycmF5LmlzQXJyYXksXG4gICAgX3N0cmljdE51bUV4cCA9IC8oPzotP1xcLj9cXGR8XFwuKSsvZ2ksXG4gICAgLy9vbmx5IG51bWJlcnMgKGluY2x1ZGluZyBuZWdhdGl2ZXMgYW5kIGRlY2ltYWxzKSBidXQgTk9UIHJlbGF0aXZlIHZhbHVlcy5cbl9udW1FeHAgPSAvWy0rPS5dKlxcZCtbLmVcXC0rXSpcXGQqW2VcXC0rXSpcXGQqL2csXG4gICAgLy9maW5kcyBhbnkgbnVtYmVycywgaW5jbHVkaW5nIG9uZXMgdGhhdCBzdGFydCB3aXRoICs9IG9yIC09LCBuZWdhdGl2ZSBudW1iZXJzLCBhbmQgb25lcyBpbiBzY2llbnRpZmljIG5vdGF0aW9uIGxpa2UgMWUtOC5cbl9udW1XaXRoVW5pdEV4cCA9IC9bLSs9Ll0qXFxkK1suZS1dKlxcZCpbYS16JV0qL2csXG4gICAgX2NvbXBsZXhTdHJpbmdOdW1FeHAgPSAvWy0rPS5dKlxcZCtcXC4/XFxkKig/OmUtfGVcXCspP1xcZCovZ2ksXG4gICAgLy9kdXBsaWNhdGUgc28gdGhhdCB3aGlsZSB3ZSdyZSBsb29waW5nIHRocm91Z2ggbWF0Y2hlcyBmcm9tIGV4ZWMoKSwgaXQgZG9lc24ndCBjb250YW1pbmF0ZSB0aGUgbGFzdEluZGV4IG9mIF9udW1FeHAgd2hpY2ggd2UgdXNlIHRvIHNlYXJjaCBmb3IgY29sb3JzIHRvby5cbl9yZWxFeHAgPSAvWystXT0tP1suXFxkXSsvLFxuICAgIF9kZWxpbWl0ZWRWYWx1ZUV4cCA9IC9bXiwnXCJcXFtcXF1cXHNdKy9naSxcbiAgICAvLyBwcmV2aW91c2x5IC9bI1xcLSsuXSpcXGJbYS16XFxkXFwtPSslLl0rL2dpIGJ1dCBkaWRuJ3QgY2F0Y2ggc3BlY2lhbCBjaGFyYWN0ZXJzLlxuX3VuaXRFeHAgPSAvXlsrXFwtPWVcXHNcXGRdKlxcZCtbLlxcZF0qKFthLXpdKnwlKVxccyokL2ksXG4gICAgX2dsb2JhbFRpbWVsaW5lLFxuICAgIF93aW4sXG4gICAgX2NvcmVJbml0dGVkLFxuICAgIF9kb2MsXG4gICAgX2dsb2JhbHMgPSB7fSxcbiAgICBfaW5zdGFsbFNjb3BlID0ge30sXG4gICAgX2NvcmVSZWFkeSxcbiAgICBfaW5zdGFsbCA9IGZ1bmN0aW9uIF9pbnN0YWxsKHNjb3BlKSB7XG4gIHJldHVybiAoX2luc3RhbGxTY29wZSA9IF9tZXJnZShzY29wZSwgX2dsb2JhbHMpKSAmJiBnc2FwO1xufSxcbiAgICBfbWlzc2luZ1BsdWdpbiA9IGZ1bmN0aW9uIF9taXNzaW5nUGx1Z2luKHByb3BlcnR5LCB2YWx1ZSkge1xuICByZXR1cm4gY29uc29sZS53YXJuKFwiSW52YWxpZCBwcm9wZXJ0eVwiLCBwcm9wZXJ0eSwgXCJzZXQgdG9cIiwgdmFsdWUsIFwiTWlzc2luZyBwbHVnaW4/IGdzYXAucmVnaXN0ZXJQbHVnaW4oKVwiKTtcbn0sXG4gICAgX3dhcm4gPSBmdW5jdGlvbiBfd2FybihtZXNzYWdlLCBzdXBwcmVzcykge1xuICByZXR1cm4gIXN1cHByZXNzICYmIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbn0sXG4gICAgX2FkZEdsb2JhbCA9IGZ1bmN0aW9uIF9hZGRHbG9iYWwobmFtZSwgb2JqKSB7XG4gIHJldHVybiBuYW1lICYmIChfZ2xvYmFsc1tuYW1lXSA9IG9iaikgJiYgX2luc3RhbGxTY29wZSAmJiAoX2luc3RhbGxTY29wZVtuYW1lXSA9IG9iaikgfHwgX2dsb2JhbHM7XG59LFxuICAgIF9lbXB0eUZ1bmMgPSBmdW5jdGlvbiBfZW1wdHlGdW5jKCkge1xuICByZXR1cm4gMDtcbn0sXG4gICAgX3N0YXJ0QXRSZXZlcnRDb25maWcgPSB7XG4gIHN1cHByZXNzRXZlbnRzOiB0cnVlLFxuICBpc1N0YXJ0OiB0cnVlLFxuICBraWxsOiBmYWxzZVxufSxcbiAgICBfcmV2ZXJ0Q29uZmlnTm9LaWxsID0ge1xuICBzdXBwcmVzc0V2ZW50czogdHJ1ZSxcbiAga2lsbDogZmFsc2Vcbn0sXG4gICAgX3JldmVydENvbmZpZyA9IHtcbiAgc3VwcHJlc3NFdmVudHM6IHRydWVcbn0sXG4gICAgX3Jlc2VydmVkUHJvcHMgPSB7fSxcbiAgICBfbGF6eVR3ZWVucyA9IFtdLFxuICAgIF9sYXp5TG9va3VwID0ge30sXG4gICAgX2xhc3RSZW5kZXJlZEZyYW1lLFxuICAgIF9wbHVnaW5zID0ge30sXG4gICAgX2VmZmVjdHMgPSB7fSxcbiAgICBfbmV4dEdDRnJhbWUgPSAzMCxcbiAgICBfaGFybmVzc1BsdWdpbnMgPSBbXSxcbiAgICBfY2FsbGJhY2tOYW1lcyA9IFwiXCIsXG4gICAgX2hhcm5lc3MgPSBmdW5jdGlvbiBfaGFybmVzcyh0YXJnZXRzKSB7XG4gIHZhciB0YXJnZXQgPSB0YXJnZXRzWzBdLFxuICAgICAgaGFybmVzc1BsdWdpbixcbiAgICAgIGk7XG4gIF9pc09iamVjdCh0YXJnZXQpIHx8IF9pc0Z1bmN0aW9uKHRhcmdldCkgfHwgKHRhcmdldHMgPSBbdGFyZ2V0c10pO1xuXG4gIGlmICghKGhhcm5lc3NQbHVnaW4gPSAodGFyZ2V0Ll9nc2FwIHx8IHt9KS5oYXJuZXNzKSkge1xuICAgIC8vIGZpbmQgdGhlIGZpcnN0IHRhcmdldCB3aXRoIGEgaGFybmVzcy4gV2UgYXNzdW1lIHRhcmdldHMgcGFzc2VkIGludG8gYW4gYW5pbWF0aW9uIHdpbGwgYmUgb2Ygc2ltaWxhciB0eXBlLCBtZWFuaW5nIHRoZSBzYW1lIGtpbmQgb2YgaGFybmVzcyBjYW4gYmUgdXNlZCBmb3IgdGhlbSBhbGwgKHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbilcbiAgICBpID0gX2hhcm5lc3NQbHVnaW5zLmxlbmd0aDtcblxuICAgIHdoaWxlIChpLS0gJiYgIV9oYXJuZXNzUGx1Z2luc1tpXS50YXJnZXRUZXN0KHRhcmdldCkpIHt9XG5cbiAgICBoYXJuZXNzUGx1Z2luID0gX2hhcm5lc3NQbHVnaW5zW2ldO1xuICB9XG5cbiAgaSA9IHRhcmdldHMubGVuZ3RoO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICB0YXJnZXRzW2ldICYmICh0YXJnZXRzW2ldLl9nc2FwIHx8ICh0YXJnZXRzW2ldLl9nc2FwID0gbmV3IEdTQ2FjaGUodGFyZ2V0c1tpXSwgaGFybmVzc1BsdWdpbikpKSB8fCB0YXJnZXRzLnNwbGljZShpLCAxKTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXRzO1xufSxcbiAgICBfZ2V0Q2FjaGUgPSBmdW5jdGlvbiBfZ2V0Q2FjaGUodGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQuX2dzYXAgfHwgX2hhcm5lc3ModG9BcnJheSh0YXJnZXQpKVswXS5fZ3NhcDtcbn0sXG4gICAgX2dldFByb3BlcnR5ID0gZnVuY3Rpb24gX2dldFByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIHYpIHtcbiAgcmV0dXJuICh2ID0gdGFyZ2V0W3Byb3BlcnR5XSkgJiYgX2lzRnVuY3Rpb24odikgPyB0YXJnZXRbcHJvcGVydHldKCkgOiBfaXNVbmRlZmluZWQodikgJiYgdGFyZ2V0LmdldEF0dHJpYnV0ZSAmJiB0YXJnZXQuZ2V0QXR0cmlidXRlKHByb3BlcnR5KSB8fCB2O1xufSxcbiAgICBfZm9yRWFjaE5hbWUgPSBmdW5jdGlvbiBfZm9yRWFjaE5hbWUobmFtZXMsIGZ1bmMpIHtcbiAgcmV0dXJuIChuYW1lcyA9IG5hbWVzLnNwbGl0KFwiLFwiKSkuZm9yRWFjaChmdW5jKSB8fCBuYW1lcztcbn0sXG4gICAgLy9zcGxpdCBhIGNvbW1hLWRlbGltaXRlZCBsaXN0IG9mIG5hbWVzIGludG8gYW4gYXJyYXksIHRoZW4gcnVuIGEgZm9yRWFjaCgpIGZ1bmN0aW9uIGFuZCByZXR1cm4gdGhlIHNwbGl0IGFycmF5ICh0aGlzIGlzIGp1c3QgYSB3YXkgdG8gY29uc29saWRhdGUvc2hvcnRlbiBzb21lIGNvZGUpLlxuX3JvdW5kID0gZnVuY3Rpb24gX3JvdW5kKHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogMTAwMDAwKSAvIDEwMDAwMCB8fCAwO1xufSxcbiAgICBfcm91bmRQcmVjaXNlID0gZnVuY3Rpb24gX3JvdW5kUHJlY2lzZSh2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDEwMDAwMDAwKSAvIDEwMDAwMDAwIHx8IDA7XG59LFxuICAgIC8vIGluY3JlYXNlZCBwcmVjaXNpb24gbW9zdGx5IGZvciB0aW1pbmcgdmFsdWVzLlxuX3BhcnNlUmVsYXRpdmUgPSBmdW5jdGlvbiBfcGFyc2VSZWxhdGl2ZShzdGFydCwgdmFsdWUpIHtcbiAgdmFyIG9wZXJhdG9yID0gdmFsdWUuY2hhckF0KDApLFxuICAgICAgZW5kID0gcGFyc2VGbG9hdCh2YWx1ZS5zdWJzdHIoMikpO1xuICBzdGFydCA9IHBhcnNlRmxvYXQoc3RhcnQpO1xuICByZXR1cm4gb3BlcmF0b3IgPT09IFwiK1wiID8gc3RhcnQgKyBlbmQgOiBvcGVyYXRvciA9PT0gXCItXCIgPyBzdGFydCAtIGVuZCA6IG9wZXJhdG9yID09PSBcIipcIiA/IHN0YXJ0ICogZW5kIDogc3RhcnQgLyBlbmQ7XG59LFxuICAgIF9hcnJheUNvbnRhaW5zQW55ID0gZnVuY3Rpb24gX2FycmF5Q29udGFpbnNBbnkodG9TZWFyY2gsIHRvRmluZCkge1xuICAvL3NlYXJjaGVzIG9uZSBhcnJheSB0byBmaW5kIG1hdGNoZXMgZm9yIGFueSBvZiB0aGUgaXRlbXMgaW4gdGhlIHRvRmluZCBhcnJheS4gQXMgc29vbiBhcyBvbmUgaXMgZm91bmQsIGl0IHJldHVybnMgdHJ1ZS4gSXQgZG9lcyBOT1QgcmV0dXJuIGFsbCB0aGUgbWF0Y2hlczsgaXQncyBzaW1wbHkgYSBib29sZWFuIHNlYXJjaC5cbiAgdmFyIGwgPSB0b0ZpbmQubGVuZ3RoLFxuICAgICAgaSA9IDA7XG5cbiAgZm9yICg7IHRvU2VhcmNoLmluZGV4T2YodG9GaW5kW2ldKSA8IDAgJiYgKytpIDwgbDspIHt9XG5cbiAgcmV0dXJuIGkgPCBsO1xufSxcbiAgICBfbGF6eVJlbmRlciA9IGZ1bmN0aW9uIF9sYXp5UmVuZGVyKCkge1xuICB2YXIgbCA9IF9sYXp5VHdlZW5zLmxlbmd0aCxcbiAgICAgIGEgPSBfbGF6eVR3ZWVucy5zbGljZSgwKSxcbiAgICAgIGksXG4gICAgICB0d2VlbjtcblxuICBfbGF6eUxvb2t1cCA9IHt9O1xuICBfbGF6eVR3ZWVucy5sZW5ndGggPSAwO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICB0d2VlbiA9IGFbaV07XG4gICAgdHdlZW4gJiYgdHdlZW4uX2xhenkgJiYgKHR3ZWVuLnJlbmRlcih0d2Vlbi5fbGF6eVswXSwgdHdlZW4uX2xhenlbMV0sIHRydWUpLl9sYXp5ID0gMCk7XG4gIH1cbn0sXG4gICAgX2xhenlTYWZlUmVuZGVyID0gZnVuY3Rpb24gX2xhenlTYWZlUmVuZGVyKGFuaW1hdGlvbiwgdGltZSwgc3VwcHJlc3NFdmVudHMsIGZvcmNlKSB7XG4gIF9sYXp5VHdlZW5zLmxlbmd0aCAmJiAhX3JldmVydGluZyAmJiBfbGF6eVJlbmRlcigpO1xuICBhbmltYXRpb24ucmVuZGVyKHRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSB8fCBfcmV2ZXJ0aW5nICYmIHRpbWUgPCAwICYmIChhbmltYXRpb24uX2luaXR0ZWQgfHwgYW5pbWF0aW9uLl9zdGFydEF0KSk7XG4gIF9sYXp5VHdlZW5zLmxlbmd0aCAmJiAhX3JldmVydGluZyAmJiBfbGF6eVJlbmRlcigpOyAvL2luIGNhc2UgcmVuZGVyaW5nIGNhdXNlZCBhbnkgdHdlZW5zIHRvIGxhenktaW5pdCwgd2Ugc2hvdWxkIHJlbmRlciB0aGVtIGJlY2F1c2UgdHlwaWNhbGx5IHdoZW4gc29tZW9uZSBjYWxscyBzZWVrKCkgb3IgdGltZSgpIG9yIHByb2dyZXNzKCksIHRoZXkgZXhwZWN0IGFuIGltbWVkaWF0ZSByZW5kZXIuXG59LFxuICAgIF9udW1lcmljSWZQb3NzaWJsZSA9IGZ1bmN0aW9uIF9udW1lcmljSWZQb3NzaWJsZSh2YWx1ZSkge1xuICB2YXIgbiA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICByZXR1cm4gKG4gfHwgbiA9PT0gMCkgJiYgKHZhbHVlICsgXCJcIikubWF0Y2goX2RlbGltaXRlZFZhbHVlRXhwKS5sZW5ndGggPCAyID8gbiA6IF9pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZS50cmltKCkgOiB2YWx1ZTtcbn0sXG4gICAgX3Bhc3NUaHJvdWdoID0gZnVuY3Rpb24gX3Bhc3NUaHJvdWdoKHApIHtcbiAgcmV0dXJuIHA7XG59LFxuICAgIF9zZXREZWZhdWx0cyA9IGZ1bmN0aW9uIF9zZXREZWZhdWx0cyhvYmosIGRlZmF1bHRzKSB7XG4gIGZvciAodmFyIHAgaW4gZGVmYXVsdHMpIHtcbiAgICBwIGluIG9iaiB8fCAob2JqW3BdID0gZGVmYXVsdHNbcF0pO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn0sXG4gICAgX3NldEtleWZyYW1lRGVmYXVsdHMgPSBmdW5jdGlvbiBfc2V0S2V5ZnJhbWVEZWZhdWx0cyhleGNsdWRlRHVyYXRpb24pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGRlZmF1bHRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBkZWZhdWx0cykge1xuICAgICAgcCBpbiBvYmogfHwgcCA9PT0gXCJkdXJhdGlvblwiICYmIGV4Y2x1ZGVEdXJhdGlvbiB8fCBwID09PSBcImVhc2VcIiB8fCAob2JqW3BdID0gZGVmYXVsdHNbcF0pO1xuICAgIH1cbiAgfTtcbn0sXG4gICAgX21lcmdlID0gZnVuY3Rpb24gX21lcmdlKGJhc2UsIHRvTWVyZ2UpIHtcbiAgZm9yICh2YXIgcCBpbiB0b01lcmdlKSB7XG4gICAgYmFzZVtwXSA9IHRvTWVyZ2VbcF07XG4gIH1cblxuICByZXR1cm4gYmFzZTtcbn0sXG4gICAgX21lcmdlRGVlcCA9IGZ1bmN0aW9uIF9tZXJnZURlZXAoYmFzZSwgdG9NZXJnZSkge1xuICBmb3IgKHZhciBwIGluIHRvTWVyZ2UpIHtcbiAgICBwICE9PSBcIl9fcHJvdG9fX1wiICYmIHAgIT09IFwiY29uc3RydWN0b3JcIiAmJiBwICE9PSBcInByb3RvdHlwZVwiICYmIChiYXNlW3BdID0gX2lzT2JqZWN0KHRvTWVyZ2VbcF0pID8gX21lcmdlRGVlcChiYXNlW3BdIHx8IChiYXNlW3BdID0ge30pLCB0b01lcmdlW3BdKSA6IHRvTWVyZ2VbcF0pO1xuICB9XG5cbiAgcmV0dXJuIGJhc2U7XG59LFxuICAgIF9jb3B5RXhjbHVkaW5nID0gZnVuY3Rpb24gX2NvcHlFeGNsdWRpbmcob2JqLCBleGNsdWRpbmcpIHtcbiAgdmFyIGNvcHkgPSB7fSxcbiAgICAgIHA7XG5cbiAgZm9yIChwIGluIG9iaikge1xuICAgIHAgaW4gZXhjbHVkaW5nIHx8IChjb3B5W3BdID0gb2JqW3BdKTtcbiAgfVxuXG4gIHJldHVybiBjb3B5O1xufSxcbiAgICBfaW5oZXJpdERlZmF1bHRzID0gZnVuY3Rpb24gX2luaGVyaXREZWZhdWx0cyh2YXJzKSB7XG4gIHZhciBwYXJlbnQgPSB2YXJzLnBhcmVudCB8fCBfZ2xvYmFsVGltZWxpbmUsXG4gICAgICBmdW5jID0gdmFycy5rZXlmcmFtZXMgPyBfc2V0S2V5ZnJhbWVEZWZhdWx0cyhfaXNBcnJheSh2YXJzLmtleWZyYW1lcykpIDogX3NldERlZmF1bHRzO1xuXG4gIGlmIChfaXNOb3RGYWxzZSh2YXJzLmluaGVyaXQpKSB7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgZnVuYyh2YXJzLCBwYXJlbnQudmFycy5kZWZhdWx0cyk7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50IHx8IHBhcmVudC5fZHA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcnM7XG59LFxuICAgIF9hcnJheXNNYXRjaCA9IGZ1bmN0aW9uIF9hcnJheXNNYXRjaChhMSwgYTIpIHtcbiAgdmFyIGkgPSBhMS5sZW5ndGgsXG4gICAgICBtYXRjaCA9IGkgPT09IGEyLmxlbmd0aDtcblxuICB3aGlsZSAobWF0Y2ggJiYgaS0tICYmIGExW2ldID09PSBhMltpXSkge31cblxuICByZXR1cm4gaSA8IDA7XG59LFxuICAgIF9hZGRMaW5rZWRMaXN0SXRlbSA9IGZ1bmN0aW9uIF9hZGRMaW5rZWRMaXN0SXRlbShwYXJlbnQsIGNoaWxkLCBmaXJzdFByb3AsIGxhc3RQcm9wLCBzb3J0QnkpIHtcbiAgaWYgKGZpcnN0UHJvcCA9PT0gdm9pZCAwKSB7XG4gICAgZmlyc3RQcm9wID0gXCJfZmlyc3RcIjtcbiAgfVxuXG4gIGlmIChsYXN0UHJvcCA9PT0gdm9pZCAwKSB7XG4gICAgbGFzdFByb3AgPSBcIl9sYXN0XCI7XG4gIH1cblxuICB2YXIgcHJldiA9IHBhcmVudFtsYXN0UHJvcF0sXG4gICAgICB0O1xuXG4gIGlmIChzb3J0QnkpIHtcbiAgICB0ID0gY2hpbGRbc29ydEJ5XTtcblxuICAgIHdoaWxlIChwcmV2ICYmIHByZXZbc29ydEJ5XSA+IHQpIHtcbiAgICAgIHByZXYgPSBwcmV2Ll9wcmV2O1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcmV2KSB7XG4gICAgY2hpbGQuX25leHQgPSBwcmV2Ll9uZXh0O1xuICAgIHByZXYuX25leHQgPSBjaGlsZDtcbiAgfSBlbHNlIHtcbiAgICBjaGlsZC5fbmV4dCA9IHBhcmVudFtmaXJzdFByb3BdO1xuICAgIHBhcmVudFtmaXJzdFByb3BdID0gY2hpbGQ7XG4gIH1cblxuICBpZiAoY2hpbGQuX25leHQpIHtcbiAgICBjaGlsZC5fbmV4dC5fcHJldiA9IGNoaWxkO1xuICB9IGVsc2Uge1xuICAgIHBhcmVudFtsYXN0UHJvcF0gPSBjaGlsZDtcbiAgfVxuXG4gIGNoaWxkLl9wcmV2ID0gcHJldjtcbiAgY2hpbGQucGFyZW50ID0gY2hpbGQuX2RwID0gcGFyZW50O1xuICByZXR1cm4gY2hpbGQ7XG59LFxuICAgIF9yZW1vdmVMaW5rZWRMaXN0SXRlbSA9IGZ1bmN0aW9uIF9yZW1vdmVMaW5rZWRMaXN0SXRlbShwYXJlbnQsIGNoaWxkLCBmaXJzdFByb3AsIGxhc3RQcm9wKSB7XG4gIGlmIChmaXJzdFByb3AgPT09IHZvaWQgMCkge1xuICAgIGZpcnN0UHJvcCA9IFwiX2ZpcnN0XCI7XG4gIH1cblxuICBpZiAobGFzdFByb3AgPT09IHZvaWQgMCkge1xuICAgIGxhc3RQcm9wID0gXCJfbGFzdFwiO1xuICB9XG5cbiAgdmFyIHByZXYgPSBjaGlsZC5fcHJldixcbiAgICAgIG5leHQgPSBjaGlsZC5fbmV4dDtcblxuICBpZiAocHJldikge1xuICAgIHByZXYuX25leHQgPSBuZXh0O1xuICB9IGVsc2UgaWYgKHBhcmVudFtmaXJzdFByb3BdID09PSBjaGlsZCkge1xuICAgIHBhcmVudFtmaXJzdFByb3BdID0gbmV4dDtcbiAgfVxuXG4gIGlmIChuZXh0KSB7XG4gICAgbmV4dC5fcHJldiA9IHByZXY7XG4gIH0gZWxzZSBpZiAocGFyZW50W2xhc3RQcm9wXSA9PT0gY2hpbGQpIHtcbiAgICBwYXJlbnRbbGFzdFByb3BdID0gcHJldjtcbiAgfVxuXG4gIGNoaWxkLl9uZXh0ID0gY2hpbGQuX3ByZXYgPSBjaGlsZC5wYXJlbnQgPSBudWxsOyAvLyBkb24ndCBkZWxldGUgdGhlIF9kcCBqdXN0IHNvIHdlIGNhbiByZXZlcnQgaWYgbmVjZXNzYXJ5LiBCdXQgcGFyZW50IHNob3VsZCBiZSBudWxsIHRvIGluZGljYXRlIHRoZSBpdGVtIGlzbid0IGluIGEgbGlua2VkIGxpc3QuXG59LFxuICAgIF9yZW1vdmVGcm9tUGFyZW50ID0gZnVuY3Rpb24gX3JlbW92ZUZyb21QYXJlbnQoY2hpbGQsIG9ubHlJZlBhcmVudEhhc0F1dG9SZW1vdmUpIHtcbiAgY2hpbGQucGFyZW50ICYmICghb25seUlmUGFyZW50SGFzQXV0b1JlbW92ZSB8fCBjaGlsZC5wYXJlbnQuYXV0b1JlbW92ZUNoaWxkcmVuKSAmJiBjaGlsZC5wYXJlbnQucmVtb3ZlICYmIGNoaWxkLnBhcmVudC5yZW1vdmUoY2hpbGQpO1xuICBjaGlsZC5fYWN0ID0gMDtcbn0sXG4gICAgX3VuY2FjaGUgPSBmdW5jdGlvbiBfdW5jYWNoZShhbmltYXRpb24sIGNoaWxkKSB7XG4gIGlmIChhbmltYXRpb24gJiYgKCFjaGlsZCB8fCBjaGlsZC5fZW5kID4gYW5pbWF0aW9uLl9kdXIgfHwgY2hpbGQuX3N0YXJ0IDwgMCkpIHtcbiAgICAvLyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb246IGlmIGEgY2hpbGQgYW5pbWF0aW9uIGlzIHBhc3NlZCBpbiB3ZSBzaG91bGQgb25seSB1bmNhY2hlIGlmIHRoYXQgY2hpbGQgRVhURU5EUyB0aGUgYW5pbWF0aW9uIChpdHMgZW5kIHRpbWUgaXMgYmV5b25kIHRoZSBlbmQpXG4gICAgdmFyIGEgPSBhbmltYXRpb247XG5cbiAgICB3aGlsZSAoYSkge1xuICAgICAgYS5fZGlydHkgPSAxO1xuICAgICAgYSA9IGEucGFyZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhbmltYXRpb247XG59LFxuICAgIF9yZWNhY2hlQW5jZXN0b3JzID0gZnVuY3Rpb24gX3JlY2FjaGVBbmNlc3RvcnMoYW5pbWF0aW9uKSB7XG4gIHZhciBwYXJlbnQgPSBhbmltYXRpb24ucGFyZW50O1xuXG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50LnBhcmVudCkge1xuICAgIC8vc29tZXRpbWVzIHdlIG11c3QgZm9yY2UgYSByZS1zb3J0IG9mIGFsbCBjaGlsZHJlbiBhbmQgdXBkYXRlIHRoZSBkdXJhdGlvbi90b3RhbER1cmF0aW9uIG9mIGFsbCBhbmNlc3RvciB0aW1lbGluZXMgaW1tZWRpYXRlbHkgaW4gY2FzZSwgZm9yIGV4YW1wbGUsIGluIHRoZSBtaWRkbGUgb2YgYSByZW5kZXIgbG9vcCwgb25lIHR3ZWVuIGFsdGVycyBhbm90aGVyIHR3ZWVuJ3MgdGltZVNjYWxlIHdoaWNoIHNob3ZlcyBpdHMgc3RhcnRUaW1lIGJlZm9yZSAwLCBmb3JjaW5nIHRoZSBwYXJlbnQgdGltZWxpbmUgdG8gc2hpZnQgYXJvdW5kIGFuZCBzaGlmdENoaWxkcmVuKCkgd2hpY2ggY291bGQgYWZmZWN0IHRoYXQgbmV4dCB0d2VlbidzIHJlbmRlciAoc3RhcnRUaW1lKS4gRG9lc24ndCBtYXR0ZXIgZm9yIHRoZSByb290IHRpbWVsaW5lIHRob3VnaC5cbiAgICBwYXJlbnQuX2RpcnR5ID0gMTtcbiAgICBwYXJlbnQudG90YWxEdXJhdGlvbigpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gIH1cblxuICByZXR1cm4gYW5pbWF0aW9uO1xufSxcbiAgICBfcmV3aW5kU3RhcnRBdCA9IGZ1bmN0aW9uIF9yZXdpbmRTdGFydEF0KHR3ZWVuLCB0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSkge1xuICByZXR1cm4gdHdlZW4uX3N0YXJ0QXQgJiYgKF9yZXZlcnRpbmcgPyB0d2Vlbi5fc3RhcnRBdC5yZXZlcnQoX3JldmVydENvbmZpZ05vS2lsbCkgOiB0d2Vlbi52YXJzLmltbWVkaWF0ZVJlbmRlciAmJiAhdHdlZW4udmFycy5hdXRvUmV2ZXJ0IHx8IHR3ZWVuLl9zdGFydEF0LnJlbmRlcih0b3RhbFRpbWUsIHRydWUsIGZvcmNlKSk7XG59LFxuICAgIF9oYXNOb1BhdXNlZEFuY2VzdG9ycyA9IGZ1bmN0aW9uIF9oYXNOb1BhdXNlZEFuY2VzdG9ycyhhbmltYXRpb24pIHtcbiAgcmV0dXJuICFhbmltYXRpb24gfHwgYW5pbWF0aW9uLl90cyAmJiBfaGFzTm9QYXVzZWRBbmNlc3RvcnMoYW5pbWF0aW9uLnBhcmVudCk7XG59LFxuICAgIF9lbGFwc2VkQ3ljbGVEdXJhdGlvbiA9IGZ1bmN0aW9uIF9lbGFwc2VkQ3ljbGVEdXJhdGlvbihhbmltYXRpb24pIHtcbiAgcmV0dXJuIGFuaW1hdGlvbi5fcmVwZWF0ID8gX2FuaW1hdGlvbkN5Y2xlKGFuaW1hdGlvbi5fdFRpbWUsIGFuaW1hdGlvbiA9IGFuaW1hdGlvbi5kdXJhdGlvbigpICsgYW5pbWF0aW9uLl9yRGVsYXkpICogYW5pbWF0aW9uIDogMDtcbn0sXG4gICAgLy8gZmVlZCBpbiB0aGUgdG90YWxUaW1lIGFuZCBjeWNsZUR1cmF0aW9uIGFuZCBpdCdsbCByZXR1cm4gdGhlIGN5Y2xlIChpdGVyYXRpb24gbWludXMgMSkgYW5kIGlmIHRoZSBwbGF5aGVhZCBpcyBleGFjdGx5IGF0IHRoZSB2ZXJ5IEVORCwgaXQgd2lsbCBOT1QgYnVtcCB1cCB0byB0aGUgbmV4dCBjeWNsZS5cbl9hbmltYXRpb25DeWNsZSA9IGZ1bmN0aW9uIF9hbmltYXRpb25DeWNsZSh0VGltZSwgY3ljbGVEdXJhdGlvbikge1xuICB2YXIgd2hvbGUgPSBNYXRoLmZsb29yKHRUaW1lIC89IGN5Y2xlRHVyYXRpb24pO1xuICByZXR1cm4gdFRpbWUgJiYgd2hvbGUgPT09IHRUaW1lID8gd2hvbGUgLSAxIDogd2hvbGU7XG59LFxuICAgIF9wYXJlbnRUb0NoaWxkVG90YWxUaW1lID0gZnVuY3Rpb24gX3BhcmVudFRvQ2hpbGRUb3RhbFRpbWUocGFyZW50VGltZSwgY2hpbGQpIHtcbiAgcmV0dXJuIChwYXJlbnRUaW1lIC0gY2hpbGQuX3N0YXJ0KSAqIGNoaWxkLl90cyArIChjaGlsZC5fdHMgPj0gMCA/IDAgOiBjaGlsZC5fZGlydHkgPyBjaGlsZC50b3RhbER1cmF0aW9uKCkgOiBjaGlsZC5fdER1cik7XG59LFxuICAgIF9zZXRFbmQgPSBmdW5jdGlvbiBfc2V0RW5kKGFuaW1hdGlvbikge1xuICByZXR1cm4gYW5pbWF0aW9uLl9lbmQgPSBfcm91bmRQcmVjaXNlKGFuaW1hdGlvbi5fc3RhcnQgKyAoYW5pbWF0aW9uLl90RHVyIC8gTWF0aC5hYnMoYW5pbWF0aW9uLl90cyB8fCBhbmltYXRpb24uX3J0cyB8fCBfdGlueU51bSkgfHwgMCkpO1xufSxcbiAgICBfYWxpZ25QbGF5aGVhZCA9IGZ1bmN0aW9uIF9hbGlnblBsYXloZWFkKGFuaW1hdGlvbiwgdG90YWxUaW1lKSB7XG4gIC8vIGFkanVzdHMgdGhlIGFuaW1hdGlvbidzIF9zdGFydCBhbmQgX2VuZCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIHRvdGFsVGltZSAob25seSBpZiB0aGUgcGFyZW50J3Mgc21vb3RoQ2hpbGRUaW1pbmcgaXMgdHJ1ZSBhbmQgdGhlIGFuaW1hdGlvbiBpc24ndCBwYXVzZWQpLiBJdCBkb2Vzbid0IGRvIGFueSByZW5kZXJpbmcgb3IgZm9yY2luZyB0aGluZ3MgYmFjayBpbnRvIHBhcmVudCB0aW1lbGluZXMsIGV0Yy4gLSB0aGF0J3Mgd2hhdCB0b3RhbFRpbWUoKSBpcyBmb3IuXG4gIHZhciBwYXJlbnQgPSBhbmltYXRpb24uX2RwO1xuXG4gIGlmIChwYXJlbnQgJiYgcGFyZW50LnNtb290aENoaWxkVGltaW5nICYmIGFuaW1hdGlvbi5fdHMpIHtcbiAgICBhbmltYXRpb24uX3N0YXJ0ID0gX3JvdW5kUHJlY2lzZShwYXJlbnQuX3RpbWUgLSAoYW5pbWF0aW9uLl90cyA+IDAgPyB0b3RhbFRpbWUgLyBhbmltYXRpb24uX3RzIDogKChhbmltYXRpb24uX2RpcnR5ID8gYW5pbWF0aW9uLnRvdGFsRHVyYXRpb24oKSA6IGFuaW1hdGlvbi5fdER1cikgLSB0b3RhbFRpbWUpIC8gLWFuaW1hdGlvbi5fdHMpKTtcblxuICAgIF9zZXRFbmQoYW5pbWF0aW9uKTtcblxuICAgIHBhcmVudC5fZGlydHkgfHwgX3VuY2FjaGUocGFyZW50LCBhbmltYXRpb24pOyAvL2ZvciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4gSWYgdGhlIHBhcmVudCdzIGNhY2hlIGlzIGFscmVhZHkgZGlydHksIGl0IGFscmVhZHkgdG9vayBjYXJlIG9mIG1hcmtpbmcgdGhlIGFuY2VzdG9ycyBhcyBkaXJ0eSB0b28sIHNvIHNraXAgdGhlIGZ1bmN0aW9uIGNhbGwgaGVyZS5cbiAgfVxuXG4gIHJldHVybiBhbmltYXRpb247XG59LFxuXG4vKlxuX3RvdGFsVGltZVRvVGltZSA9IChjbGFtcGVkVG90YWxUaW1lLCBkdXJhdGlvbiwgcmVwZWF0LCByZXBlYXREZWxheSwgeW95bykgPT4ge1xuXHRsZXQgY3ljbGVEdXJhdGlvbiA9IGR1cmF0aW9uICsgcmVwZWF0RGVsYXksXG5cdFx0dGltZSA9IF9yb3VuZChjbGFtcGVkVG90YWxUaW1lICUgY3ljbGVEdXJhdGlvbik7XG5cdGlmICh0aW1lID4gZHVyYXRpb24pIHtcblx0XHR0aW1lID0gZHVyYXRpb247XG5cdH1cblx0cmV0dXJuICh5b3lvICYmICh+fihjbGFtcGVkVG90YWxUaW1lIC8gY3ljbGVEdXJhdGlvbikgJiAxKSkgPyBkdXJhdGlvbiAtIHRpbWUgOiB0aW1lO1xufSxcbiovXG5fcG9zdEFkZENoZWNrcyA9IGZ1bmN0aW9uIF9wb3N0QWRkQ2hlY2tzKHRpbWVsaW5lLCBjaGlsZCkge1xuICB2YXIgdDtcblxuICBpZiAoY2hpbGQuX3RpbWUgfHwgIWNoaWxkLl9kdXIgJiYgY2hpbGQuX2luaXR0ZWQgfHwgY2hpbGQuX3N0YXJ0IDwgdGltZWxpbmUuX3RpbWUgJiYgKGNoaWxkLl9kdXIgfHwgIWNoaWxkLmFkZCkpIHtcbiAgICAvLyBpbiBjYXNlLCBmb3IgZXhhbXBsZSwgdGhlIF9zdGFydCBpcyBtb3ZlZCBvbiBhIHR3ZWVuIHRoYXQgaGFzIGFscmVhZHkgcmVuZGVyZWQsIG9yIGlmIGl0J3MgYmVpbmcgaW5zZXJ0ZWQgaW50byBhIHRpbWVsaW5lIEJFRk9SRSB3aGVyZSB0aGUgcGxheWhlYWQgaXMgY3VycmVudGx5LiBJbWFnaW5lIGl0J3MgYXQgaXRzIGVuZCBzdGF0ZSwgdGhlbiB0aGUgc3RhcnRUaW1lIGlzIG1vdmVkIFdBWSBsYXRlciAoYWZ0ZXIgdGhlIGVuZCBvZiB0aGlzIHRpbWVsaW5lKSwgaXQgc2hvdWxkIHJlbmRlciBhdCBpdHMgYmVnaW5uaW5nLiBTcGVjaWFsIGNhc2U6IGlmIGl0J3MgYSB0aW1lbGluZSAoaGFzIC5hZGQoKSBtZXRob2QpIGFuZCBubyBkdXJhdGlvbiwgd2UgY2FuIHNraXAgcmVuZGVyaW5nIGJlY2F1c2UgdGhlIHVzZXIgbWF5IGJlIHBvcHVsYXRpbmcgaXQgQUZURVIgYWRkaW5nIGl0IHRvIGEgcGFyZW50IHRpbWVsaW5lICh1bmNvbnZlbnRpb25hbCwgYnV0IHBvc3NpYmxlLCBhbmQgd2Ugd291bGRuJ3Qgd2FudCBpdCB0byBnZXQgcmVtb3ZlZCBpZiB0aGUgcGFyZW50J3MgYXV0b1JlbW92ZUNoaWxkcmVuIGlzIHRydWUpLlxuICAgIHQgPSBfcGFyZW50VG9DaGlsZFRvdGFsVGltZSh0aW1lbGluZS5yYXdUaW1lKCksIGNoaWxkKTtcblxuICAgIGlmICghY2hpbGQuX2R1ciB8fCBfY2xhbXAoMCwgY2hpbGQudG90YWxEdXJhdGlvbigpLCB0KSAtIGNoaWxkLl90VGltZSA+IF90aW55TnVtKSB7XG4gICAgICBjaGlsZC5yZW5kZXIodCwgdHJ1ZSk7XG4gICAgfVxuICB9IC8vaWYgdGhlIHRpbWVsaW5lIGhhcyBhbHJlYWR5IGVuZGVkIGJ1dCB0aGUgaW5zZXJ0ZWQgdHdlZW4vdGltZWxpbmUgZXh0ZW5kcyB0aGUgZHVyYXRpb24sIHdlIHNob3VsZCBlbmFibGUgdGhpcyB0aW1lbGluZSBhZ2FpbiBzbyB0aGF0IGl0IHJlbmRlcnMgcHJvcGVybHkuIFdlIHNob3VsZCBhbHNvIGFsaWduIHRoZSBwbGF5aGVhZCB3aXRoIHRoZSBwYXJlbnQgdGltZWxpbmUncyB3aGVuIGFwcHJvcHJpYXRlLlxuXG5cbiAgaWYgKF91bmNhY2hlKHRpbWVsaW5lLCBjaGlsZCkuX2RwICYmIHRpbWVsaW5lLl9pbml0dGVkICYmIHRpbWVsaW5lLl90aW1lID49IHRpbWVsaW5lLl9kdXIgJiYgdGltZWxpbmUuX3RzKSB7XG4gICAgLy9pbiBjYXNlIGFueSBvZiB0aGUgYW5jZXN0b3JzIGhhZCBjb21wbGV0ZWQgYnV0IHNob3VsZCBub3cgYmUgZW5hYmxlZC4uLlxuICAgIGlmICh0aW1lbGluZS5fZHVyIDwgdGltZWxpbmUuZHVyYXRpb24oKSkge1xuICAgICAgdCA9IHRpbWVsaW5lO1xuXG4gICAgICB3aGlsZSAodC5fZHApIHtcbiAgICAgICAgdC5yYXdUaW1lKCkgPj0gMCAmJiB0LnRvdGFsVGltZSh0Ll90VGltZSk7IC8vbW92ZXMgdGhlIHRpbWVsaW5lIChzaGlmdHMgaXRzIHN0YXJ0VGltZSkgaWYgbmVjZXNzYXJ5LCBhbmQgYWxzbyBlbmFibGVzIGl0LiBJZiBpdCdzIGN1cnJlbnRseSB6ZXJvLCB0aG91Z2gsIGl0IG1heSBub3QgYmUgc2NoZWR1bGVkIHRvIHJlbmRlciB1bnRpbCBsYXRlciBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gZm9yY2UgaXQgdG8gYWxpZ24gd2l0aCB0aGUgY3VycmVudCBwbGF5aGVhZCBwb3NpdGlvbi4gT25seSBtb3ZlIHRvIGNhdGNoIHVwIHdpdGggdGhlIHBsYXloZWFkLlxuXG4gICAgICAgIHQgPSB0Ll9kcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aW1lbGluZS5felRpbWUgPSAtX3RpbnlOdW07IC8vIGhlbHBzIGVuc3VyZSB0aGF0IHRoZSBuZXh0IHJlbmRlcigpIHdpbGwgYmUgZm9yY2VkIChjcm9zc2luZ1N0YXJ0ID0gdHJ1ZSBpbiByZW5kZXIoKSksIGV2ZW4gaWYgdGhlIGR1cmF0aW9uIGhhc24ndCBjaGFuZ2VkICh3ZSdyZSBhZGRpbmcgYSBjaGlsZCB3aGljaCB3b3VsZCBuZWVkIHRvIGdldCByZW5kZXJlZCkuIERlZmluaXRlbHkgYW4gZWRnZSBjYXNlLiBOb3RlOiB3ZSBNVVNUIGRvIHRoaXMgQUZURVIgdGhlIGxvb3AgYWJvdmUgd2hlcmUgdGhlIHRvdGFsVGltZSgpIG1pZ2h0IHRyaWdnZXIgYSByZW5kZXIoKSBiZWNhdXNlIHRoaXMgX2FkZFRvVGltZWxpbmUoKSBtZXRob2QgZ2V0cyBjYWxsZWQgZnJvbSB0aGUgQW5pbWF0aW9uIGNvbnN0cnVjdG9yLCBCRUZPUkUgdHdlZW5zIGV2ZW4gcmVjb3JkIHRoZWlyIHRhcmdldHMsIGV0Yy4gc28gd2Ugd291bGRuJ3Qgd2FudCB0aGluZ3MgdG8gZ2V0IHRyaWdnZXJlZCBpbiB0aGUgd3Jvbmcgb3JkZXIuXG4gIH1cbn0sXG4gICAgX2FkZFRvVGltZWxpbmUgPSBmdW5jdGlvbiBfYWRkVG9UaW1lbGluZSh0aW1lbGluZSwgY2hpbGQsIHBvc2l0aW9uLCBza2lwQ2hlY2tzKSB7XG4gIGNoaWxkLnBhcmVudCAmJiBfcmVtb3ZlRnJvbVBhcmVudChjaGlsZCk7XG4gIGNoaWxkLl9zdGFydCA9IF9yb3VuZFByZWNpc2UoKF9pc051bWJlcihwb3NpdGlvbikgPyBwb3NpdGlvbiA6IHBvc2l0aW9uIHx8IHRpbWVsaW5lICE9PSBfZ2xvYmFsVGltZWxpbmUgPyBfcGFyc2VQb3NpdGlvbih0aW1lbGluZSwgcG9zaXRpb24sIGNoaWxkKSA6IHRpbWVsaW5lLl90aW1lKSArIGNoaWxkLl9kZWxheSk7XG4gIGNoaWxkLl9lbmQgPSBfcm91bmRQcmVjaXNlKGNoaWxkLl9zdGFydCArIChjaGlsZC50b3RhbER1cmF0aW9uKCkgLyBNYXRoLmFicyhjaGlsZC50aW1lU2NhbGUoKSkgfHwgMCkpO1xuXG4gIF9hZGRMaW5rZWRMaXN0SXRlbSh0aW1lbGluZSwgY2hpbGQsIFwiX2ZpcnN0XCIsIFwiX2xhc3RcIiwgdGltZWxpbmUuX3NvcnQgPyBcIl9zdGFydFwiIDogMCk7XG5cbiAgX2lzRnJvbU9yRnJvbVN0YXJ0KGNoaWxkKSB8fCAodGltZWxpbmUuX3JlY2VudCA9IGNoaWxkKTtcbiAgc2tpcENoZWNrcyB8fCBfcG9zdEFkZENoZWNrcyh0aW1lbGluZSwgY2hpbGQpO1xuICB0aW1lbGluZS5fdHMgPCAwICYmIF9hbGlnblBsYXloZWFkKHRpbWVsaW5lLCB0aW1lbGluZS5fdFRpbWUpOyAvLyBpZiB0aGUgdGltZWxpbmUgaXMgcmV2ZXJzZWQgYW5kIHRoZSBuZXcgY2hpbGQgbWFrZXMgaXQgbG9uZ2VyLCB3ZSBtYXkgbmVlZCB0byBhZGp1c3QgdGhlIHBhcmVudCdzIF9zdGFydCAocHVzaCBpdCBiYWNrKVxuXG4gIHJldHVybiB0aW1lbGluZTtcbn0sXG4gICAgX3Njcm9sbFRyaWdnZXIgPSBmdW5jdGlvbiBfc2Nyb2xsVHJpZ2dlcihhbmltYXRpb24sIHRyaWdnZXIpIHtcbiAgcmV0dXJuIChfZ2xvYmFscy5TY3JvbGxUcmlnZ2VyIHx8IF9taXNzaW5nUGx1Z2luKFwic2Nyb2xsVHJpZ2dlclwiLCB0cmlnZ2VyKSkgJiYgX2dsb2JhbHMuU2Nyb2xsVHJpZ2dlci5jcmVhdGUodHJpZ2dlciwgYW5pbWF0aW9uKTtcbn0sXG4gICAgX2F0dGVtcHRJbml0VHdlZW4gPSBmdW5jdGlvbiBfYXR0ZW1wdEluaXRUd2Vlbih0d2VlbiwgdGltZSwgZm9yY2UsIHN1cHByZXNzRXZlbnRzLCB0VGltZSkge1xuICBfaW5pdFR3ZWVuKHR3ZWVuLCB0aW1lLCB0VGltZSk7XG5cbiAgaWYgKCF0d2Vlbi5faW5pdHRlZCkge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgaWYgKCFmb3JjZSAmJiB0d2Vlbi5fcHQgJiYgIV9yZXZlcnRpbmcgJiYgKHR3ZWVuLl9kdXIgJiYgdHdlZW4udmFycy5sYXp5ICE9PSBmYWxzZSB8fCAhdHdlZW4uX2R1ciAmJiB0d2Vlbi52YXJzLmxhenkpICYmIF9sYXN0UmVuZGVyZWRGcmFtZSAhPT0gX3RpY2tlci5mcmFtZSkge1xuICAgIF9sYXp5VHdlZW5zLnB1c2godHdlZW4pO1xuXG4gICAgdHdlZW4uX2xhenkgPSBbdFRpbWUsIHN1cHByZXNzRXZlbnRzXTtcbiAgICByZXR1cm4gMTtcbiAgfVxufSxcbiAgICBfcGFyZW50UGxheWhlYWRJc0JlZm9yZVN0YXJ0ID0gZnVuY3Rpb24gX3BhcmVudFBsYXloZWFkSXNCZWZvcmVTdGFydChfcmVmKSB7XG4gIHZhciBwYXJlbnQgPSBfcmVmLnBhcmVudDtcbiAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQuX3RzICYmIHBhcmVudC5faW5pdHRlZCAmJiAhcGFyZW50Ll9sb2NrICYmIChwYXJlbnQucmF3VGltZSgpIDwgMCB8fCBfcGFyZW50UGxheWhlYWRJc0JlZm9yZVN0YXJ0KHBhcmVudCkpO1xufSxcbiAgICAvLyBjaGVjayBwYXJlbnQncyBfbG9jayBiZWNhdXNlIHdoZW4gYSB0aW1lbGluZSByZXBlYXRzL3lveW9zIGFuZCBkb2VzIGl0cyBhcnRpZmljaWFsIHdyYXBwaW5nLCB3ZSBzaG91bGRuJ3QgZm9yY2UgdGhlIHJhdGlvIGJhY2sgdG8gMFxuX2lzRnJvbU9yRnJvbVN0YXJ0ID0gZnVuY3Rpb24gX2lzRnJvbU9yRnJvbVN0YXJ0KF9yZWYyKSB7XG4gIHZhciBkYXRhID0gX3JlZjIuZGF0YTtcbiAgcmV0dXJuIGRhdGEgPT09IFwiaXNGcm9tU3RhcnRcIiB8fCBkYXRhID09PSBcImlzU3RhcnRcIjtcbn0sXG4gICAgX3JlbmRlclplcm9EdXJhdGlvblR3ZWVuID0gZnVuY3Rpb24gX3JlbmRlclplcm9EdXJhdGlvblR3ZWVuKHR3ZWVuLCB0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSkge1xuICB2YXIgcHJldlJhdGlvID0gdHdlZW4ucmF0aW8sXG4gICAgICByYXRpbyA9IHRvdGFsVGltZSA8IDAgfHwgIXRvdGFsVGltZSAmJiAoIXR3ZWVuLl9zdGFydCAmJiBfcGFyZW50UGxheWhlYWRJc0JlZm9yZVN0YXJ0KHR3ZWVuKSAmJiAhKCF0d2Vlbi5faW5pdHRlZCAmJiBfaXNGcm9tT3JGcm9tU3RhcnQodHdlZW4pKSB8fCAodHdlZW4uX3RzIDwgMCB8fCB0d2Vlbi5fZHAuX3RzIDwgMCkgJiYgIV9pc0Zyb21PckZyb21TdGFydCh0d2VlbikpID8gMCA6IDEsXG4gICAgICAvLyBpZiB0aGUgdHdlZW4gb3IgaXRzIHBhcmVudCBpcyByZXZlcnNlZCBhbmQgdGhlIHRvdGFsVGltZSBpcyAwLCB3ZSBzaG91bGQgZ28gdG8gYSByYXRpbyBvZiAwLiBFZGdlIGNhc2U6IGlmIGEgZnJvbSgpIG9yIGZyb21UbygpIHN0YWdnZXIgdHdlZW4gaXMgcGxhY2VkIGxhdGVyIGluIGEgdGltZWxpbmUsIHRoZSBcInN0YXJ0QXRcIiB6ZXJvLWR1cmF0aW9uIHR3ZWVuIGNvdWxkIGluaXRpYWxseSByZW5kZXIgYXQgYSB0aW1lIHdoZW4gdGhlIHBhcmVudCB0aW1lbGluZSdzIHBsYXloZWFkIGlzIHRlY2huaWNhbGx5IEJFRk9SRSB3aGVyZSB0aGlzIHR3ZWVuIGlzLCBzbyBtYWtlIHN1cmUgdGhhdCBhbnkgXCJmcm9tXCIgYW5kIFwiZnJvbVRvXCIgc3RhcnRBdCB0d2VlbnMgYXJlIHJlbmRlcmVkIHRoZSBmaXJzdCB0aW1lIGF0IGEgcmF0aW8gb2YgMS5cbiAgcmVwZWF0RGVsYXkgPSB0d2Vlbi5fckRlbGF5LFxuICAgICAgdFRpbWUgPSAwLFxuICAgICAgcHQsXG4gICAgICBpdGVyYXRpb24sXG4gICAgICBwcmV2SXRlcmF0aW9uO1xuXG4gIGlmIChyZXBlYXREZWxheSAmJiB0d2Vlbi5fcmVwZWF0KSB7XG4gICAgLy8gaW4gY2FzZSB0aGVyZSdzIGEgemVyby1kdXJhdGlvbiB0d2VlbiB0aGF0IGhhcyBhIHJlcGVhdCB3aXRoIGEgcmVwZWF0RGVsYXlcbiAgICB0VGltZSA9IF9jbGFtcCgwLCB0d2Vlbi5fdER1ciwgdG90YWxUaW1lKTtcbiAgICBpdGVyYXRpb24gPSBfYW5pbWF0aW9uQ3ljbGUodFRpbWUsIHJlcGVhdERlbGF5KTtcbiAgICB0d2Vlbi5feW95byAmJiBpdGVyYXRpb24gJiAxICYmIChyYXRpbyA9IDEgLSByYXRpbyk7XG5cbiAgICBpZiAoaXRlcmF0aW9uICE9PSBfYW5pbWF0aW9uQ3ljbGUodHdlZW4uX3RUaW1lLCByZXBlYXREZWxheSkpIHtcbiAgICAgIC8vIGlmIGl0ZXJhdGlvbiBjaGFuZ2VkXG4gICAgICBwcmV2UmF0aW8gPSAxIC0gcmF0aW87XG4gICAgICB0d2Vlbi52YXJzLnJlcGVhdFJlZnJlc2ggJiYgdHdlZW4uX2luaXR0ZWQgJiYgdHdlZW4uaW52YWxpZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyYXRpbyAhPT0gcHJldlJhdGlvIHx8IF9yZXZlcnRpbmcgfHwgZm9yY2UgfHwgdHdlZW4uX3pUaW1lID09PSBfdGlueU51bSB8fCAhdG90YWxUaW1lICYmIHR3ZWVuLl96VGltZSkge1xuICAgIGlmICghdHdlZW4uX2luaXR0ZWQgJiYgX2F0dGVtcHRJbml0VHdlZW4odHdlZW4sIHRvdGFsVGltZSwgZm9yY2UsIHN1cHByZXNzRXZlbnRzLCB0VGltZSkpIHtcbiAgICAgIC8vIGlmIHdlIHJlbmRlciB0aGUgdmVyeSBiZWdpbm5pbmcgKHRpbWUgPT0gMCkgb2YgYSBmcm9tVG8oKSwgd2UgbXVzdCBmb3JjZSB0aGUgcmVuZGVyIChub3JtYWwgdHdlZW5zIHdvdWxkbid0IG5lZWQgdG8gcmVuZGVyIGF0IGEgdGltZSBvZiAwIHdoZW4gdGhlIHByZXZUaW1lIHdhcyBhbHNvIDApLiBUaGlzIGlzIGFsc28gbWFuZGF0b3J5IHRvIG1ha2Ugc3VyZSBvdmVyd3JpdGluZyBraWNrcyBpbiBpbW1lZGlhdGVseS5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcmV2SXRlcmF0aW9uID0gdHdlZW4uX3pUaW1lO1xuICAgIHR3ZWVuLl96VGltZSA9IHRvdGFsVGltZSB8fCAoc3VwcHJlc3NFdmVudHMgPyBfdGlueU51bSA6IDApOyAvLyB3aGVuIHRoZSBwbGF5aGVhZCBhcnJpdmVzIGF0IEVYQUNUTFkgdGltZSAwIChyaWdodCBvbiB0b3ApIG9mIGEgemVyby1kdXJhdGlvbiB0d2Vlbiwgd2UgbmVlZCB0byBkaXNjZXJuIGlmIGV2ZW50cyBhcmUgc3VwcHJlc3NlZCBzbyB0aGF0IHdoZW4gdGhlIHBsYXloZWFkIG1vdmVzIGFnYWluIChuZXh0IHRpbWUpLCBpdCdsbCB0cmlnZ2VyIHRoZSBjYWxsYmFjay4gSWYgZXZlbnRzIGFyZSBOT1Qgc3VwcHJlc3NlZCwgb2J2aW91c2x5IHRoZSBjYWxsYmFjayB3b3VsZCBiZSB0cmlnZ2VyZWQgaW4gdGhpcyByZW5kZXIuIEJhc2ljYWxseSwgdGhlIGNhbGxiYWNrIHNob3VsZCBmaXJlIGVpdGhlciB3aGVuIHRoZSBwbGF5aGVhZCBBUlJJVkVTIG9yIExFQVZFUyB0aGlzIGV4YWN0IHNwb3QsIG5vdCBib3RoLiBJbWFnaW5lIGRvaW5nIGEgdGltZWxpbmUuc2VlaygwKSBhbmQgdGhlcmUncyBhIGNhbGxiYWNrIHRoYXQgc2l0cyBhdCAwLiBTaW5jZSBldmVudHMgYXJlIHN1cHByZXNzZWQgb24gdGhhdCBzZWVrKCkgYnkgZGVmYXVsdCwgbm90aGluZyB3aWxsIGZpcmUsIGJ1dCB3aGVuIHRoZSBwbGF5aGVhZCBtb3ZlcyBvZmYgb2YgdGhhdCBwb3NpdGlvbiwgdGhlIGNhbGxiYWNrIHNob3VsZCBmaXJlLiBUaGlzIGJlaGF2aW9yIGlzIHdoYXQgcGVvcGxlIGludHVpdGl2ZWx5IGV4cGVjdC5cblxuICAgIHN1cHByZXNzRXZlbnRzIHx8IChzdXBwcmVzc0V2ZW50cyA9IHRvdGFsVGltZSAmJiAhcHJldkl0ZXJhdGlvbik7IC8vIGlmIGl0IHdhcyByZW5kZXJlZCBwcmV2aW91c2x5IGF0IGV4YWN0bHkgMCAoX3pUaW1lKSBhbmQgbm93IHRoZSBwbGF5aGVhZCBpcyBtb3ZpbmcgYXdheSwgRE9OJ1QgZmlyZSBjYWxsYmFja3Mgb3RoZXJ3aXNlIHRoZXknbGwgc2VlbSBsaWtlIGR1cGxpY2F0ZXMuXG5cbiAgICB0d2Vlbi5yYXRpbyA9IHJhdGlvO1xuICAgIHR3ZWVuLl9mcm9tICYmIChyYXRpbyA9IDEgLSByYXRpbyk7XG4gICAgdHdlZW4uX3RpbWUgPSAwO1xuICAgIHR3ZWVuLl90VGltZSA9IHRUaW1lO1xuICAgIHB0ID0gdHdlZW4uX3B0O1xuXG4gICAgd2hpbGUgKHB0KSB7XG4gICAgICBwdC5yKHJhdGlvLCBwdC5kKTtcbiAgICAgIHB0ID0gcHQuX25leHQ7XG4gICAgfVxuXG4gICAgdG90YWxUaW1lIDwgMCAmJiBfcmV3aW5kU3RhcnRBdCh0d2VlbiwgdG90YWxUaW1lLCBzdXBwcmVzc0V2ZW50cywgdHJ1ZSk7XG4gICAgdHdlZW4uX29uVXBkYXRlICYmICFzdXBwcmVzc0V2ZW50cyAmJiBfY2FsbGJhY2sodHdlZW4sIFwib25VcGRhdGVcIik7XG4gICAgdFRpbWUgJiYgdHdlZW4uX3JlcGVhdCAmJiAhc3VwcHJlc3NFdmVudHMgJiYgdHdlZW4ucGFyZW50ICYmIF9jYWxsYmFjayh0d2VlbiwgXCJvblJlcGVhdFwiKTtcblxuICAgIGlmICgodG90YWxUaW1lID49IHR3ZWVuLl90RHVyIHx8IHRvdGFsVGltZSA8IDApICYmIHR3ZWVuLnJhdGlvID09PSByYXRpbykge1xuICAgICAgcmF0aW8gJiYgX3JlbW92ZUZyb21QYXJlbnQodHdlZW4sIDEpO1xuXG4gICAgICBpZiAoIXN1cHByZXNzRXZlbnRzICYmICFfcmV2ZXJ0aW5nKSB7XG4gICAgICAgIF9jYWxsYmFjayh0d2VlbiwgcmF0aW8gPyBcIm9uQ29tcGxldGVcIiA6IFwib25SZXZlcnNlQ29tcGxldGVcIiwgdHJ1ZSk7XG5cbiAgICAgICAgdHdlZW4uX3Byb20gJiYgdHdlZW4uX3Byb20oKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoIXR3ZWVuLl96VGltZSkge1xuICAgIHR3ZWVuLl96VGltZSA9IHRvdGFsVGltZTtcbiAgfVxufSxcbiAgICBfZmluZE5leHRQYXVzZVR3ZWVuID0gZnVuY3Rpb24gX2ZpbmROZXh0UGF1c2VUd2VlbihhbmltYXRpb24sIHByZXZUaW1lLCB0aW1lKSB7XG4gIHZhciBjaGlsZDtcblxuICBpZiAodGltZSA+IHByZXZUaW1lKSB7XG4gICAgY2hpbGQgPSBhbmltYXRpb24uX2ZpcnN0O1xuXG4gICAgd2hpbGUgKGNoaWxkICYmIGNoaWxkLl9zdGFydCA8PSB0aW1lKSB7XG4gICAgICBpZiAoY2hpbGQuZGF0YSA9PT0gXCJpc1BhdXNlXCIgJiYgY2hpbGQuX3N0YXJ0ID4gcHJldlRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLl9uZXh0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjaGlsZCA9IGFuaW1hdGlvbi5fbGFzdDtcblxuICAgIHdoaWxlIChjaGlsZCAmJiBjaGlsZC5fc3RhcnQgPj0gdGltZSkge1xuICAgICAgaWYgKGNoaWxkLmRhdGEgPT09IFwiaXNQYXVzZVwiICYmIGNoaWxkLl9zdGFydCA8IHByZXZUaW1lKSB7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5fcHJldjtcbiAgICB9XG4gIH1cbn0sXG4gICAgX3NldER1cmF0aW9uID0gZnVuY3Rpb24gX3NldER1cmF0aW9uKGFuaW1hdGlvbiwgZHVyYXRpb24sIHNraXBVbmNhY2hlLCBsZWF2ZVBsYXloZWFkKSB7XG4gIHZhciByZXBlYXQgPSBhbmltYXRpb24uX3JlcGVhdCxcbiAgICAgIGR1ciA9IF9yb3VuZFByZWNpc2UoZHVyYXRpb24pIHx8IDAsXG4gICAgICB0b3RhbFByb2dyZXNzID0gYW5pbWF0aW9uLl90VGltZSAvIGFuaW1hdGlvbi5fdER1cjtcbiAgdG90YWxQcm9ncmVzcyAmJiAhbGVhdmVQbGF5aGVhZCAmJiAoYW5pbWF0aW9uLl90aW1lICo9IGR1ciAvIGFuaW1hdGlvbi5fZHVyKTtcbiAgYW5pbWF0aW9uLl9kdXIgPSBkdXI7XG4gIGFuaW1hdGlvbi5fdER1ciA9ICFyZXBlYXQgPyBkdXIgOiByZXBlYXQgPCAwID8gMWUxMCA6IF9yb3VuZFByZWNpc2UoZHVyICogKHJlcGVhdCArIDEpICsgYW5pbWF0aW9uLl9yRGVsYXkgKiByZXBlYXQpO1xuICB0b3RhbFByb2dyZXNzID4gMCAmJiAhbGVhdmVQbGF5aGVhZCAmJiBfYWxpZ25QbGF5aGVhZChhbmltYXRpb24sIGFuaW1hdGlvbi5fdFRpbWUgPSBhbmltYXRpb24uX3REdXIgKiB0b3RhbFByb2dyZXNzKTtcbiAgYW5pbWF0aW9uLnBhcmVudCAmJiBfc2V0RW5kKGFuaW1hdGlvbik7XG4gIHNraXBVbmNhY2hlIHx8IF91bmNhY2hlKGFuaW1hdGlvbi5wYXJlbnQsIGFuaW1hdGlvbik7XG4gIHJldHVybiBhbmltYXRpb247XG59LFxuICAgIF9vblVwZGF0ZVRvdGFsRHVyYXRpb24gPSBmdW5jdGlvbiBfb25VcGRhdGVUb3RhbER1cmF0aW9uKGFuaW1hdGlvbikge1xuICByZXR1cm4gYW5pbWF0aW9uIGluc3RhbmNlb2YgVGltZWxpbmUgPyBfdW5jYWNoZShhbmltYXRpb24pIDogX3NldER1cmF0aW9uKGFuaW1hdGlvbiwgYW5pbWF0aW9uLl9kdXIpO1xufSxcbiAgICBfemVyb1Bvc2l0aW9uID0ge1xuICBfc3RhcnQ6IDAsXG4gIGVuZFRpbWU6IF9lbXB0eUZ1bmMsXG4gIHRvdGFsRHVyYXRpb246IF9lbXB0eUZ1bmNcbn0sXG4gICAgX3BhcnNlUG9zaXRpb24gPSBmdW5jdGlvbiBfcGFyc2VQb3NpdGlvbihhbmltYXRpb24sIHBvc2l0aW9uLCBwZXJjZW50QW5pbWF0aW9uKSB7XG4gIHZhciBsYWJlbHMgPSBhbmltYXRpb24ubGFiZWxzLFxuICAgICAgcmVjZW50ID0gYW5pbWF0aW9uLl9yZWNlbnQgfHwgX3plcm9Qb3NpdGlvbixcbiAgICAgIGNsaXBwZWREdXJhdGlvbiA9IGFuaW1hdGlvbi5kdXJhdGlvbigpID49IF9iaWdOdW0gPyByZWNlbnQuZW5kVGltZShmYWxzZSkgOiBhbmltYXRpb24uX2R1cixcbiAgICAgIC8vaW4gY2FzZSB0aGVyZSdzIGEgY2hpbGQgdGhhdCBpbmZpbml0ZWx5IHJlcGVhdHMsIHVzZXJzIGFsbW9zdCBuZXZlciBpbnRlbmQgZm9yIHRoZSBpbnNlcnRpb24gcG9pbnQgb2YgYSBuZXcgY2hpbGQgdG8gYmUgYmFzZWQgb24gYSBTVVBFUiBsb25nIHZhbHVlIGxpa2UgdGhhdCBzbyB3ZSBjbGlwIGl0IGFuZCBhc3N1bWUgdGhlIG1vc3QgcmVjZW50bHktYWRkZWQgY2hpbGQncyBlbmRUaW1lIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuXG4gIGksXG4gICAgICBvZmZzZXQsXG4gICAgICBpc1BlcmNlbnQ7XG5cbiAgaWYgKF9pc1N0cmluZyhwb3NpdGlvbikgJiYgKGlzTmFOKHBvc2l0aW9uKSB8fCBwb3NpdGlvbiBpbiBsYWJlbHMpKSB7XG4gICAgLy9pZiB0aGUgc3RyaW5nIGlzIGEgbnVtYmVyIGxpa2UgXCIxXCIsIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGEgbGFiZWwgd2l0aCB0aGF0IG5hbWUsIG90aGVyd2lzZSBpbnRlcnByZXQgaXQgYXMgYSBudW1iZXIgKGFic29sdXRlIHZhbHVlKS5cbiAgICBvZmZzZXQgPSBwb3NpdGlvbi5jaGFyQXQoMCk7XG4gICAgaXNQZXJjZW50ID0gcG9zaXRpb24uc3Vic3RyKC0xKSA9PT0gXCIlXCI7XG4gICAgaSA9IHBvc2l0aW9uLmluZGV4T2YoXCI9XCIpO1xuXG4gICAgaWYgKG9mZnNldCA9PT0gXCI8XCIgfHwgb2Zmc2V0ID09PSBcIj5cIikge1xuICAgICAgaSA+PSAwICYmIChwb3NpdGlvbiA9IHBvc2l0aW9uLnJlcGxhY2UoLz0vLCBcIlwiKSk7XG4gICAgICByZXR1cm4gKG9mZnNldCA9PT0gXCI8XCIgPyByZWNlbnQuX3N0YXJ0IDogcmVjZW50LmVuZFRpbWUocmVjZW50Ll9yZXBlYXQgPj0gMCkpICsgKHBhcnNlRmxvYXQocG9zaXRpb24uc3Vic3RyKDEpKSB8fCAwKSAqIChpc1BlcmNlbnQgPyAoaSA8IDAgPyByZWNlbnQgOiBwZXJjZW50QW5pbWF0aW9uKS50b3RhbER1cmF0aW9uKCkgLyAxMDAgOiAxKTtcbiAgICB9XG5cbiAgICBpZiAoaSA8IDApIHtcbiAgICAgIHBvc2l0aW9uIGluIGxhYmVscyB8fCAobGFiZWxzW3Bvc2l0aW9uXSA9IGNsaXBwZWREdXJhdGlvbik7XG4gICAgICByZXR1cm4gbGFiZWxzW3Bvc2l0aW9uXTtcbiAgICB9XG5cbiAgICBvZmZzZXQgPSBwYXJzZUZsb2F0KHBvc2l0aW9uLmNoYXJBdChpIC0gMSkgKyBwb3NpdGlvbi5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmIChpc1BlcmNlbnQgJiYgcGVyY2VudEFuaW1hdGlvbikge1xuICAgICAgb2Zmc2V0ID0gb2Zmc2V0IC8gMTAwICogKF9pc0FycmF5KHBlcmNlbnRBbmltYXRpb24pID8gcGVyY2VudEFuaW1hdGlvblswXSA6IHBlcmNlbnRBbmltYXRpb24pLnRvdGFsRHVyYXRpb24oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaSA+IDEgPyBfcGFyc2VQb3NpdGlvbihhbmltYXRpb24sIHBvc2l0aW9uLnN1YnN0cigwLCBpIC0gMSksIHBlcmNlbnRBbmltYXRpb24pICsgb2Zmc2V0IDogY2xpcHBlZER1cmF0aW9uICsgb2Zmc2V0O1xuICB9XG5cbiAgcmV0dXJuIHBvc2l0aW9uID09IG51bGwgPyBjbGlwcGVkRHVyYXRpb24gOiArcG9zaXRpb247XG59LFxuICAgIF9jcmVhdGVUd2VlblR5cGUgPSBmdW5jdGlvbiBfY3JlYXRlVHdlZW5UeXBlKHR5cGUsIHBhcmFtcywgdGltZWxpbmUpIHtcbiAgdmFyIGlzTGVnYWN5ID0gX2lzTnVtYmVyKHBhcmFtc1sxXSksXG4gICAgICB2YXJzSW5kZXggPSAoaXNMZWdhY3kgPyAyIDogMSkgKyAodHlwZSA8IDIgPyAwIDogMSksXG4gICAgICB2YXJzID0gcGFyYW1zW3ZhcnNJbmRleF0sXG4gICAgICBpclZhcnMsXG4gICAgICBwYXJlbnQ7XG5cbiAgaXNMZWdhY3kgJiYgKHZhcnMuZHVyYXRpb24gPSBwYXJhbXNbMV0pO1xuICB2YXJzLnBhcmVudCA9IHRpbWVsaW5lO1xuXG4gIGlmICh0eXBlKSB7XG4gICAgaXJWYXJzID0gdmFycztcbiAgICBwYXJlbnQgPSB0aW1lbGluZTtcblxuICAgIHdoaWxlIChwYXJlbnQgJiYgIShcImltbWVkaWF0ZVJlbmRlclwiIGluIGlyVmFycykpIHtcbiAgICAgIC8vIGluaGVyaXRhbmNlIGhhc24ndCBoYXBwZW5lZCB5ZXQsIGJ1dCBzb21lb25lIG1heSBoYXZlIHNldCBhIGRlZmF1bHQgaW4gYW4gYW5jZXN0b3IgdGltZWxpbmUuIFdlIGNvdWxkIGRvIHZhcnMuaW1tZWRpYXRlUmVuZGVyID0gX2lzTm90RmFsc2UoX2luaGVyaXREZWZhdWx0cyh2YXJzKS5pbW1lZGlhdGVSZW5kZXIpIGJ1dCB0aGF0J2QgZXhhY3QgYSBzbGlnaHQgcGVyZm9ybWFuY2UgcGVuYWx0eSBiZWNhdXNlIF9pbmhlcml0RGVmYXVsdHMoKSBhbHNvIHJ1bnMgaW4gdGhlIFR3ZWVuIGNvbnN0cnVjdG9yLiBXZSdyZSBwYXlpbmcgYSBzbWFsbCBrYiBwcmljZSBoZXJlIHRvIGdhaW4gc3BlZWQuXG4gICAgICBpclZhcnMgPSBwYXJlbnQudmFycy5kZWZhdWx0cyB8fCB7fTtcbiAgICAgIHBhcmVudCA9IF9pc05vdEZhbHNlKHBhcmVudC52YXJzLmluaGVyaXQpICYmIHBhcmVudC5wYXJlbnQ7XG4gICAgfVxuXG4gICAgdmFycy5pbW1lZGlhdGVSZW5kZXIgPSBfaXNOb3RGYWxzZShpclZhcnMuaW1tZWRpYXRlUmVuZGVyKTtcbiAgICB0eXBlIDwgMiA/IHZhcnMucnVuQmFja3dhcmRzID0gMSA6IHZhcnMuc3RhcnRBdCA9IHBhcmFtc1t2YXJzSW5kZXggLSAxXTsgLy8gXCJmcm9tXCIgdmFyc1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUd2VlbihwYXJhbXNbMF0sIHZhcnMsIHBhcmFtc1t2YXJzSW5kZXggKyAxXSk7XG59LFxuICAgIF9jb25kaXRpb25hbFJldHVybiA9IGZ1bmN0aW9uIF9jb25kaXRpb25hbFJldHVybih2YWx1ZSwgZnVuYykge1xuICByZXR1cm4gdmFsdWUgfHwgdmFsdWUgPT09IDAgPyBmdW5jKHZhbHVlKSA6IGZ1bmM7XG59LFxuICAgIF9jbGFtcCA9IGZ1bmN0aW9uIF9jbGFtcChtaW4sIG1heCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIDwgbWluID8gbWluIDogdmFsdWUgPiBtYXggPyBtYXggOiB2YWx1ZTtcbn0sXG4gICAgZ2V0VW5pdCA9IGZ1bmN0aW9uIGdldFVuaXQodmFsdWUsIHYpIHtcbiAgcmV0dXJuICFfaXNTdHJpbmcodmFsdWUpIHx8ICEodiA9IF91bml0RXhwLmV4ZWModmFsdWUpKSA/IFwiXCIgOiB2WzFdO1xufSxcbiAgICAvLyBub3RlOiBwcm90ZWN0IGFnYWluc3QgcGFkZGVkIG51bWJlcnMgYXMgc3RyaW5ncywgbGlrZSBcIjEwMC4xMDBcIi4gVGhhdCBzaG91bGRuJ3QgcmV0dXJuIFwiMDBcIiBhcyB0aGUgdW5pdC4gSWYgaXQncyBudW1lcmljLCByZXR1cm4gbm8gdW5pdC5cbmNsYW1wID0gZnVuY3Rpb24gY2xhbXAobWluLCBtYXgsIHZhbHVlKSB7XG4gIHJldHVybiBfY29uZGl0aW9uYWxSZXR1cm4odmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuIF9jbGFtcChtaW4sIG1heCwgdik7XG4gIH0pO1xufSxcbiAgICBfc2xpY2UgPSBbXS5zbGljZSxcbiAgICBfaXNBcnJheUxpa2UgPSBmdW5jdGlvbiBfaXNBcnJheUxpa2UodmFsdWUsIG5vbkVtcHR5KSB7XG4gIHJldHVybiB2YWx1ZSAmJiBfaXNPYmplY3QodmFsdWUpICYmIFwibGVuZ3RoXCIgaW4gdmFsdWUgJiYgKCFub25FbXB0eSAmJiAhdmFsdWUubGVuZ3RoIHx8IHZhbHVlLmxlbmd0aCAtIDEgaW4gdmFsdWUgJiYgX2lzT2JqZWN0KHZhbHVlWzBdKSkgJiYgIXZhbHVlLm5vZGVUeXBlICYmIHZhbHVlICE9PSBfd2luO1xufSxcbiAgICBfZmxhdHRlbiA9IGZ1bmN0aW9uIF9mbGF0dGVuKGFyLCBsZWF2ZVN0cmluZ3MsIGFjY3VtdWxhdG9yKSB7XG4gIGlmIChhY2N1bXVsYXRvciA9PT0gdm9pZCAwKSB7XG4gICAgYWNjdW11bGF0b3IgPSBbXTtcbiAgfVxuXG4gIHJldHVybiBhci5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHZhciBfYWNjdW11bGF0b3I7XG5cbiAgICByZXR1cm4gX2lzU3RyaW5nKHZhbHVlKSAmJiAhbGVhdmVTdHJpbmdzIHx8IF9pc0FycmF5TGlrZSh2YWx1ZSwgMSkgPyAoX2FjY3VtdWxhdG9yID0gYWNjdW11bGF0b3IpLnB1c2guYXBwbHkoX2FjY3VtdWxhdG9yLCB0b0FycmF5KHZhbHVlKSkgOiBhY2N1bXVsYXRvci5wdXNoKHZhbHVlKTtcbiAgfSkgfHwgYWNjdW11bGF0b3I7XG59LFxuICAgIC8vdGFrZXMgYW55IHZhbHVlIGFuZCByZXR1cm5zIGFuIGFycmF5LiBJZiBpdCdzIGEgc3RyaW5nIChhbmQgbGVhdmVTdHJpbmdzIGlzbid0IHRydWUpLCBpdCdsbCB1c2UgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgpIGFuZCBjb252ZXJ0IHRoYXQgdG8gYW4gYXJyYXkuIEl0J2xsIGFsc28gYWNjZXB0IGl0ZXJhYmxlcyBsaWtlIGpRdWVyeSBvYmplY3RzLlxudG9BcnJheSA9IGZ1bmN0aW9uIHRvQXJyYXkodmFsdWUsIHNjb3BlLCBsZWF2ZVN0cmluZ3MpIHtcbiAgcmV0dXJuIF9jb250ZXh0ICYmICFzY29wZSAmJiBfY29udGV4dC5zZWxlY3RvciA/IF9jb250ZXh0LnNlbGVjdG9yKHZhbHVlKSA6IF9pc1N0cmluZyh2YWx1ZSkgJiYgIWxlYXZlU3RyaW5ncyAmJiAoX2NvcmVJbml0dGVkIHx8ICFfd2FrZSgpKSA/IF9zbGljZS5jYWxsKChzY29wZSB8fCBfZG9jKS5xdWVyeVNlbGVjdG9yQWxsKHZhbHVlKSwgMCkgOiBfaXNBcnJheSh2YWx1ZSkgPyBfZmxhdHRlbih2YWx1ZSwgbGVhdmVTdHJpbmdzKSA6IF9pc0FycmF5TGlrZSh2YWx1ZSkgPyBfc2xpY2UuY2FsbCh2YWx1ZSwgMCkgOiB2YWx1ZSA/IFt2YWx1ZV0gOiBbXTtcbn0sXG4gICAgc2VsZWN0b3IgPSBmdW5jdGlvbiBzZWxlY3Rvcih2YWx1ZSkge1xuICB2YWx1ZSA9IHRvQXJyYXkodmFsdWUpWzBdIHx8IF93YXJuKFwiSW52YWxpZCBzY29wZVwiKSB8fCB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIGVsID0gdmFsdWUuY3VycmVudCB8fCB2YWx1ZS5uYXRpdmVFbGVtZW50IHx8IHZhbHVlO1xuICAgIHJldHVybiB0b0FycmF5KHYsIGVsLnF1ZXJ5U2VsZWN0b3JBbGwgPyBlbCA6IGVsID09PSB2YWx1ZSA/IF93YXJuKFwiSW52YWxpZCBzY29wZVwiKSB8fCBfZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikgOiB2YWx1ZSk7XG4gIH07XG59LFxuICAgIHNodWZmbGUgPSBmdW5jdGlvbiBzaHVmZmxlKGEpIHtcbiAgcmV0dXJuIGEuc29ydChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIC41IC0gTWF0aC5yYW5kb20oKTtcbiAgfSk7XG59LFxuICAgIC8vIGFsdGVybmF0aXZlIHRoYXQncyBhIGJpdCBmYXN0ZXIgYW5kIG1vcmUgcmVsaWFibHkgZGl2ZXJzZSBidXQgYmlnZ2VyOiAgIGZvciAobGV0IGosIHYsIGkgPSBhLmxlbmd0aDsgaTsgaiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGkpLCB2ID0gYVstLWldLCBhW2ldID0gYVtqXSwgYVtqXSA9IHYpOyByZXR1cm4gYTtcbi8vZm9yIGRpc3RyaWJ1dGluZyB2YWx1ZXMgYWNyb3NzIGFuIGFycmF5LiBDYW4gYWNjZXB0IGEgbnVtYmVyLCBhIGZ1bmN0aW9uIG9yIChtb3N0IGNvbW1vbmx5KSBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoge2Jhc2UsIGFtb3VudCwgZnJvbSwgZWFzZSwgZ3JpZCwgYXhpcywgbGVuZ3RoLCBlYWNofS4gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgZXhwZWN0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6IGluZGV4LCB0YXJnZXQsIGFycmF5LiBSZWNvZ25pemVzIHRoZSBmb2xsb3dpbmdcbmRpc3RyaWJ1dGUgPSBmdW5jdGlvbiBkaXN0cmlidXRlKHYpIHtcbiAgaWYgKF9pc0Z1bmN0aW9uKHYpKSB7XG4gICAgcmV0dXJuIHY7XG4gIH1cblxuICB2YXIgdmFycyA9IF9pc09iamVjdCh2KSA/IHYgOiB7XG4gICAgZWFjaDogdlxuICB9LFxuICAgICAgLy9uOjEgaXMganVzdCB0byBpbmRpY2F0ZSB2IHdhcyBhIG51bWJlcjsgd2UgbGV2ZXJhZ2UgdGhhdCBsYXRlciB0byBzZXQgdiBhY2NvcmRpbmcgdG8gdGhlIGxlbmd0aCB3ZSBnZXQuIElmIGEgbnVtYmVyIGlzIHBhc3NlZCBpbiwgd2UgdHJlYXQgaXQgbGlrZSB0aGUgb2xkIHN0YWdnZXIgdmFsdWUgd2hlcmUgMC4xLCBmb3IgZXhhbXBsZSwgd291bGQgbWVhbiB0aGF0IHRoaW5ncyB3b3VsZCBiZSBkaXN0cmlidXRlZCB3aXRoIDAuMSBiZXR3ZWVuIGVhY2ggZWxlbWVudCBpbiB0aGUgYXJyYXkgcmF0aGVyIHRoYW4gYSB0b3RhbCBcImFtb3VudFwiIHRoYXQncyBjaHVua2VkIG91dCBhbW9uZyB0aGVtIGFsbC5cbiAgZWFzZSA9IF9wYXJzZUVhc2UodmFycy5lYXNlKSxcbiAgICAgIGZyb20gPSB2YXJzLmZyb20gfHwgMCxcbiAgICAgIGJhc2UgPSBwYXJzZUZsb2F0KHZhcnMuYmFzZSkgfHwgMCxcbiAgICAgIGNhY2hlID0ge30sXG4gICAgICBpc0RlY2ltYWwgPSBmcm9tID4gMCAmJiBmcm9tIDwgMSxcbiAgICAgIHJhdGlvcyA9IGlzTmFOKGZyb20pIHx8IGlzRGVjaW1hbCxcbiAgICAgIGF4aXMgPSB2YXJzLmF4aXMsXG4gICAgICByYXRpb1ggPSBmcm9tLFxuICAgICAgcmF0aW9ZID0gZnJvbTtcblxuICBpZiAoX2lzU3RyaW5nKGZyb20pKSB7XG4gICAgcmF0aW9YID0gcmF0aW9ZID0ge1xuICAgICAgY2VudGVyOiAuNSxcbiAgICAgIGVkZ2VzOiAuNSxcbiAgICAgIGVuZDogMVxuICAgIH1bZnJvbV0gfHwgMDtcbiAgfSBlbHNlIGlmICghaXNEZWNpbWFsICYmIHJhdGlvcykge1xuICAgIHJhdGlvWCA9IGZyb21bMF07XG4gICAgcmF0aW9ZID0gZnJvbVsxXTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoaSwgdGFyZ2V0LCBhKSB7XG4gICAgdmFyIGwgPSAoYSB8fCB2YXJzKS5sZW5ndGgsXG4gICAgICAgIGRpc3RhbmNlcyA9IGNhY2hlW2xdLFxuICAgICAgICBvcmlnaW5YLFxuICAgICAgICBvcmlnaW5ZLFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBkLFxuICAgICAgICBqLFxuICAgICAgICBtYXgsXG4gICAgICAgIG1pbixcbiAgICAgICAgd3JhcEF0O1xuXG4gICAgaWYgKCFkaXN0YW5jZXMpIHtcbiAgICAgIHdyYXBBdCA9IHZhcnMuZ3JpZCA9PT0gXCJhdXRvXCIgPyAwIDogKHZhcnMuZ3JpZCB8fCBbMSwgX2JpZ051bV0pWzFdO1xuXG4gICAgICBpZiAoIXdyYXBBdCkge1xuICAgICAgICBtYXggPSAtX2JpZ051bTtcblxuICAgICAgICB3aGlsZSAobWF4IDwgKG1heCA9IGFbd3JhcEF0KytdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpICYmIHdyYXBBdCA8IGwpIHt9XG5cbiAgICAgICAgd3JhcEF0LS07XG4gICAgICB9XG5cbiAgICAgIGRpc3RhbmNlcyA9IGNhY2hlW2xdID0gW107XG4gICAgICBvcmlnaW5YID0gcmF0aW9zID8gTWF0aC5taW4od3JhcEF0LCBsKSAqIHJhdGlvWCAtIC41IDogZnJvbSAlIHdyYXBBdDtcbiAgICAgIG9yaWdpblkgPSB3cmFwQXQgPT09IF9iaWdOdW0gPyAwIDogcmF0aW9zID8gbCAqIHJhdGlvWSAvIHdyYXBBdCAtIC41IDogZnJvbSAvIHdyYXBBdCB8IDA7XG4gICAgICBtYXggPSAwO1xuICAgICAgbWluID0gX2JpZ051bTtcblxuICAgICAgZm9yIChqID0gMDsgaiA8IGw7IGorKykge1xuICAgICAgICB4ID0gaiAlIHdyYXBBdCAtIG9yaWdpblg7XG4gICAgICAgIHkgPSBvcmlnaW5ZIC0gKGogLyB3cmFwQXQgfCAwKTtcbiAgICAgICAgZGlzdGFuY2VzW2pdID0gZCA9ICFheGlzID8gX3NxcnQoeCAqIHggKyB5ICogeSkgOiBNYXRoLmFicyhheGlzID09PSBcInlcIiA/IHkgOiB4KTtcbiAgICAgICAgZCA+IG1heCAmJiAobWF4ID0gZCk7XG4gICAgICAgIGQgPCBtaW4gJiYgKG1pbiA9IGQpO1xuICAgICAgfVxuXG4gICAgICBmcm9tID09PSBcInJhbmRvbVwiICYmIHNodWZmbGUoZGlzdGFuY2VzKTtcbiAgICAgIGRpc3RhbmNlcy5tYXggPSBtYXggLSBtaW47XG4gICAgICBkaXN0YW5jZXMubWluID0gbWluO1xuICAgICAgZGlzdGFuY2VzLnYgPSBsID0gKHBhcnNlRmxvYXQodmFycy5hbW91bnQpIHx8IHBhcnNlRmxvYXQodmFycy5lYWNoKSAqICh3cmFwQXQgPiBsID8gbCAtIDEgOiAhYXhpcyA/IE1hdGgubWF4KHdyYXBBdCwgbCAvIHdyYXBBdCkgOiBheGlzID09PSBcInlcIiA/IGwgLyB3cmFwQXQgOiB3cmFwQXQpIHx8IDApICogKGZyb20gPT09IFwiZWRnZXNcIiA/IC0xIDogMSk7XG4gICAgICBkaXN0YW5jZXMuYiA9IGwgPCAwID8gYmFzZSAtIGwgOiBiYXNlO1xuICAgICAgZGlzdGFuY2VzLnUgPSBnZXRVbml0KHZhcnMuYW1vdW50IHx8IHZhcnMuZWFjaCkgfHwgMDsgLy91bml0XG5cbiAgICAgIGVhc2UgPSBlYXNlICYmIGwgPCAwID8gX2ludmVydEVhc2UoZWFzZSkgOiBlYXNlO1xuICAgIH1cblxuICAgIGwgPSAoZGlzdGFuY2VzW2ldIC0gZGlzdGFuY2VzLm1pbikgLyBkaXN0YW5jZXMubWF4IHx8IDA7XG4gICAgcmV0dXJuIF9yb3VuZFByZWNpc2UoZGlzdGFuY2VzLmIgKyAoZWFzZSA/IGVhc2UobCkgOiBsKSAqIGRpc3RhbmNlcy52KSArIGRpc3RhbmNlcy51OyAvL3JvdW5kIGluIG9yZGVyIHRvIHdvcmsgYXJvdW5kIGZsb2F0aW5nIHBvaW50IGVycm9yc1xuICB9O1xufSxcbiAgICBfcm91bmRNb2RpZmllciA9IGZ1bmN0aW9uIF9yb3VuZE1vZGlmaWVyKHYpIHtcbiAgLy9wYXNzIGluIDAuMSBnZXQgYSBmdW5jdGlvbiB0aGF0J2xsIHJvdW5kIHRvIHRoZSBuZWFyZXN0IHRlbnRoLCBvciA1IHRvIHJvdW5kIHRvIHRoZSBjbG9zZXN0IDUsIG9yIDAuMDAxIHRvIHRoZSBjbG9zZXN0IDEwMDB0aCwgZXRjLlxuICB2YXIgcCA9IE1hdGgucG93KDEwLCAoKHYgKyBcIlwiKS5zcGxpdChcIi5cIilbMV0gfHwgXCJcIikubGVuZ3RoKTsgLy90byBhdm9pZCBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAobGlrZSAyNCAqIDAuMSA9PSAyLjQwMDAwMDAwMDAwMDAwMDQpLCB3ZSBjaG9wIG9mZiBhdCBhIHNwZWNpZmljIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyAobXVjaCBmYXN0ZXIgdGhhbiB0b0ZpeGVkKCkpXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChyYXcpIHtcbiAgICB2YXIgbiA9IF9yb3VuZFByZWNpc2UoTWF0aC5yb3VuZChwYXJzZUZsb2F0KHJhdykgLyB2KSAqIHYgKiBwKTtcblxuICAgIHJldHVybiAobiAtIG4gJSAxKSAvIHAgKyAoX2lzTnVtYmVyKHJhdykgPyAwIDogZ2V0VW5pdChyYXcpKTsgLy8gbiAtIG4gJSAxIHJlcGxhY2VzIE1hdGguZmxvb3IoKSBpbiBvcmRlciB0byBoYW5kbGUgbmVnYXRpdmUgdmFsdWVzIHByb3Blcmx5LiBGb3IgZXhhbXBsZSwgTWF0aC5mbG9vcigtMTUwLjAwMDAwMDAwMDAwMDAzKSBpcyAxNTEhXG4gIH07XG59LFxuICAgIHNuYXAgPSBmdW5jdGlvbiBzbmFwKHNuYXBUbywgdmFsdWUpIHtcbiAgdmFyIGlzQXJyYXkgPSBfaXNBcnJheShzbmFwVG8pLFxuICAgICAgcmFkaXVzLFxuICAgICAgaXMyRDtcblxuICBpZiAoIWlzQXJyYXkgJiYgX2lzT2JqZWN0KHNuYXBUbykpIHtcbiAgICByYWRpdXMgPSBpc0FycmF5ID0gc25hcFRvLnJhZGl1cyB8fCBfYmlnTnVtO1xuXG4gICAgaWYgKHNuYXBUby52YWx1ZXMpIHtcbiAgICAgIHNuYXBUbyA9IHRvQXJyYXkoc25hcFRvLnZhbHVlcyk7XG5cbiAgICAgIGlmIChpczJEID0gIV9pc051bWJlcihzbmFwVG9bMF0pKSB7XG4gICAgICAgIHJhZGl1cyAqPSByYWRpdXM7IC8vcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHNvIHdlIGRvbid0IGhhdmUgdG8gTWF0aC5zcXJ0KCkgaW4gdGhlIGxvb3AuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNuYXBUbyA9IF9yb3VuZE1vZGlmaWVyKHNuYXBUby5pbmNyZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfY29uZGl0aW9uYWxSZXR1cm4odmFsdWUsICFpc0FycmF5ID8gX3JvdW5kTW9kaWZpZXIoc25hcFRvKSA6IF9pc0Z1bmN0aW9uKHNuYXBUbykgPyBmdW5jdGlvbiAocmF3KSB7XG4gICAgaXMyRCA9IHNuYXBUbyhyYXcpO1xuICAgIHJldHVybiBNYXRoLmFicyhpczJEIC0gcmF3KSA8PSByYWRpdXMgPyBpczJEIDogcmF3O1xuICB9IDogZnVuY3Rpb24gKHJhdykge1xuICAgIHZhciB4ID0gcGFyc2VGbG9hdChpczJEID8gcmF3LnggOiByYXcpLFxuICAgICAgICB5ID0gcGFyc2VGbG9hdChpczJEID8gcmF3LnkgOiAwKSxcbiAgICAgICAgbWluID0gX2JpZ051bSxcbiAgICAgICAgY2xvc2VzdCA9IDAsXG4gICAgICAgIGkgPSBzbmFwVG8ubGVuZ3RoLFxuICAgICAgICBkeCxcbiAgICAgICAgZHk7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBpZiAoaXMyRCkge1xuICAgICAgICBkeCA9IHNuYXBUb1tpXS54IC0geDtcbiAgICAgICAgZHkgPSBzbmFwVG9baV0ueSAtIHk7XG4gICAgICAgIGR4ID0gZHggKiBkeCArIGR5ICogZHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkeCA9IE1hdGguYWJzKHNuYXBUb1tpXSAtIHgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZHggPCBtaW4pIHtcbiAgICAgICAgbWluID0gZHg7XG4gICAgICAgIGNsb3Nlc3QgPSBpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsb3Nlc3QgPSAhcmFkaXVzIHx8IG1pbiA8PSByYWRpdXMgPyBzbmFwVG9bY2xvc2VzdF0gOiByYXc7XG4gICAgcmV0dXJuIGlzMkQgfHwgY2xvc2VzdCA9PT0gcmF3IHx8IF9pc051bWJlcihyYXcpID8gY2xvc2VzdCA6IGNsb3Nlc3QgKyBnZXRVbml0KHJhdyk7XG4gIH0pO1xufSxcbiAgICByYW5kb20gPSBmdW5jdGlvbiByYW5kb20obWluLCBtYXgsIHJvdW5kaW5nSW5jcmVtZW50LCByZXR1cm5GdW5jdGlvbikge1xuICByZXR1cm4gX2NvbmRpdGlvbmFsUmV0dXJuKF9pc0FycmF5KG1pbikgPyAhbWF4IDogcm91bmRpbmdJbmNyZW1lbnQgPT09IHRydWUgPyAhIShyb3VuZGluZ0luY3JlbWVudCA9IDApIDogIXJldHVybkZ1bmN0aW9uLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9pc0FycmF5KG1pbikgPyBtaW5bfn4oTWF0aC5yYW5kb20oKSAqIG1pbi5sZW5ndGgpXSA6IChyb3VuZGluZ0luY3JlbWVudCA9IHJvdW5kaW5nSW5jcmVtZW50IHx8IDFlLTUpICYmIChyZXR1cm5GdW5jdGlvbiA9IHJvdW5kaW5nSW5jcmVtZW50IDwgMSA/IE1hdGgucG93KDEwLCAocm91bmRpbmdJbmNyZW1lbnQgKyBcIlwiKS5sZW5ndGggLSAyKSA6IDEpICYmIE1hdGguZmxvb3IoTWF0aC5yb3VuZCgobWluIC0gcm91bmRpbmdJbmNyZW1lbnQgLyAyICsgTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyByb3VuZGluZ0luY3JlbWVudCAqIC45OSkpIC8gcm91bmRpbmdJbmNyZW1lbnQpICogcm91bmRpbmdJbmNyZW1lbnQgKiByZXR1cm5GdW5jdGlvbikgLyByZXR1cm5GdW5jdGlvbjtcbiAgfSk7XG59LFxuICAgIHBpcGUgPSBmdW5jdGlvbiBwaXBlKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3Rpb25zID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGZ1bmN0aW9uc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25zLnJlZHVjZShmdW5jdGlvbiAodiwgZikge1xuICAgICAgcmV0dXJuIGYodik7XG4gICAgfSwgdmFsdWUpO1xuICB9O1xufSxcbiAgICB1bml0aXplID0gZnVuY3Rpb24gdW5pdGl6ZShmdW5jLCB1bml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyhwYXJzZUZsb2F0KHZhbHVlKSkgKyAodW5pdCB8fCBnZXRVbml0KHZhbHVlKSk7XG4gIH07XG59LFxuICAgIG5vcm1hbGl6ZSA9IGZ1bmN0aW9uIG5vcm1hbGl6ZShtaW4sIG1heCwgdmFsdWUpIHtcbiAgcmV0dXJuIG1hcFJhbmdlKG1pbiwgbWF4LCAwLCAxLCB2YWx1ZSk7XG59LFxuICAgIF93cmFwQXJyYXkgPSBmdW5jdGlvbiBfd3JhcEFycmF5KGEsIHdyYXBwZXIsIHZhbHVlKSB7XG4gIHJldHVybiBfY29uZGl0aW9uYWxSZXR1cm4odmFsdWUsIGZ1bmN0aW9uIChpbmRleCkge1xuICAgIHJldHVybiBhW35+d3JhcHBlcihpbmRleCldO1xuICB9KTtcbn0sXG4gICAgd3JhcCA9IGZ1bmN0aW9uIHdyYXAobWluLCBtYXgsIHZhbHVlKSB7XG4gIC8vIE5PVEU6IHdyYXAoKSBDQU5OT1QgYmUgYW4gYXJyb3cgZnVuY3Rpb24hIEEgdmVyeSBvZGQgY29tcGlsaW5nIGJ1ZyBjYXVzZXMgcHJvYmxlbXMgKHVucmVsYXRlZCB0byBHU0FQKS5cbiAgdmFyIHJhbmdlID0gbWF4IC0gbWluO1xuICByZXR1cm4gX2lzQXJyYXkobWluKSA/IF93cmFwQXJyYXkobWluLCB3cmFwKDAsIG1pbi5sZW5ndGgpLCBtYXgpIDogX2NvbmRpdGlvbmFsUmV0dXJuKHZhbHVlLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gKHJhbmdlICsgKHZhbHVlIC0gbWluKSAlIHJhbmdlKSAlIHJhbmdlICsgbWluO1xuICB9KTtcbn0sXG4gICAgd3JhcFlveW8gPSBmdW5jdGlvbiB3cmFwWW95byhtaW4sIG1heCwgdmFsdWUpIHtcbiAgdmFyIHJhbmdlID0gbWF4IC0gbWluLFxuICAgICAgdG90YWwgPSByYW5nZSAqIDI7XG4gIHJldHVybiBfaXNBcnJheShtaW4pID8gX3dyYXBBcnJheShtaW4sIHdyYXBZb3lvKDAsIG1pbi5sZW5ndGggLSAxKSwgbWF4KSA6IF9jb25kaXRpb25hbFJldHVybih2YWx1ZSwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFsdWUgPSAodG90YWwgKyAodmFsdWUgLSBtaW4pICUgdG90YWwpICUgdG90YWwgfHwgMDtcbiAgICByZXR1cm4gbWluICsgKHZhbHVlID4gcmFuZ2UgPyB0b3RhbCAtIHZhbHVlIDogdmFsdWUpO1xuICB9KTtcbn0sXG4gICAgX3JlcGxhY2VSYW5kb20gPSBmdW5jdGlvbiBfcmVwbGFjZVJhbmRvbSh2YWx1ZSkge1xuICAvL3JlcGxhY2VzIGFsbCBvY2N1cnJlbmNlcyBvZiByYW5kb20oLi4uKSBpbiBhIHN0cmluZyB3aXRoIHRoZSBjYWxjdWxhdGVkIHJhbmRvbSB2YWx1ZS4gY2FuIGJlIGEgcmFuZ2UgbGlrZSByYW5kb20oLTEwMCwgMTAwLCA1KSBvciBhbiBhcnJheSBsaWtlIHJhbmRvbShbMCwgMTAwLCA1MDBdKVxuICB2YXIgcHJldiA9IDAsXG4gICAgICBzID0gXCJcIixcbiAgICAgIGksXG4gICAgICBudW1zLFxuICAgICAgZW5kLFxuICAgICAgaXNBcnJheTtcblxuICB3aGlsZSAofihpID0gdmFsdWUuaW5kZXhPZihcInJhbmRvbShcIiwgcHJldikpKSB7XG4gICAgZW5kID0gdmFsdWUuaW5kZXhPZihcIilcIiwgaSk7XG4gICAgaXNBcnJheSA9IHZhbHVlLmNoYXJBdChpICsgNykgPT09IFwiW1wiO1xuICAgIG51bXMgPSB2YWx1ZS5zdWJzdHIoaSArIDcsIGVuZCAtIGkgLSA3KS5tYXRjaChpc0FycmF5ID8gX2RlbGltaXRlZFZhbHVlRXhwIDogX3N0cmljdE51bUV4cCk7XG4gICAgcyArPSB2YWx1ZS5zdWJzdHIocHJldiwgaSAtIHByZXYpICsgcmFuZG9tKGlzQXJyYXkgPyBudW1zIDogK251bXNbMF0sIGlzQXJyYXkgPyAwIDogK251bXNbMV0sICtudW1zWzJdIHx8IDFlLTUpO1xuICAgIHByZXYgPSBlbmQgKyAxO1xuICB9XG5cbiAgcmV0dXJuIHMgKyB2YWx1ZS5zdWJzdHIocHJldiwgdmFsdWUubGVuZ3RoIC0gcHJldik7XG59LFxuICAgIG1hcFJhbmdlID0gZnVuY3Rpb24gbWFwUmFuZ2UoaW5NaW4sIGluTWF4LCBvdXRNaW4sIG91dE1heCwgdmFsdWUpIHtcbiAgdmFyIGluUmFuZ2UgPSBpbk1heCAtIGluTWluLFxuICAgICAgb3V0UmFuZ2UgPSBvdXRNYXggLSBvdXRNaW47XG4gIHJldHVybiBfY29uZGl0aW9uYWxSZXR1cm4odmFsdWUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBvdXRNaW4gKyAoKHZhbHVlIC0gaW5NaW4pIC8gaW5SYW5nZSAqIG91dFJhbmdlIHx8IDApO1xuICB9KTtcbn0sXG4gICAgaW50ZXJwb2xhdGUgPSBmdW5jdGlvbiBpbnRlcnBvbGF0ZShzdGFydCwgZW5kLCBwcm9ncmVzcywgbXV0YXRlKSB7XG4gIHZhciBmdW5jID0gaXNOYU4oc3RhcnQgKyBlbmQpID8gMCA6IGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuICgxIC0gcCkgKiBzdGFydCArIHAgKiBlbmQ7XG4gIH07XG5cbiAgaWYgKCFmdW5jKSB7XG4gICAgdmFyIGlzU3RyaW5nID0gX2lzU3RyaW5nKHN0YXJ0KSxcbiAgICAgICAgbWFzdGVyID0ge30sXG4gICAgICAgIHAsXG4gICAgICAgIGksXG4gICAgICAgIGludGVycG9sYXRvcnMsXG4gICAgICAgIGwsXG4gICAgICAgIGlsO1xuXG4gICAgcHJvZ3Jlc3MgPT09IHRydWUgJiYgKG11dGF0ZSA9IDEpICYmIChwcm9ncmVzcyA9IG51bGwpO1xuXG4gICAgaWYgKGlzU3RyaW5nKSB7XG4gICAgICBzdGFydCA9IHtcbiAgICAgICAgcDogc3RhcnRcbiAgICAgIH07XG4gICAgICBlbmQgPSB7XG4gICAgICAgIHA6IGVuZFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKF9pc0FycmF5KHN0YXJ0KSAmJiAhX2lzQXJyYXkoZW5kKSkge1xuICAgICAgaW50ZXJwb2xhdG9ycyA9IFtdO1xuICAgICAgbCA9IHN0YXJ0Lmxlbmd0aDtcbiAgICAgIGlsID0gbCAtIDI7XG5cbiAgICAgIGZvciAoaSA9IDE7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaW50ZXJwb2xhdG9ycy5wdXNoKGludGVycG9sYXRlKHN0YXJ0W2kgLSAxXSwgc3RhcnRbaV0pKTsgLy9idWlsZCB0aGUgaW50ZXJwb2xhdG9ycyB1cCBmcm9udCBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBzbyB0aGF0IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBtYW55IHRpbWVzLCBpdCBjYW4ganVzdCByZXVzZSB0aGVtLlxuICAgICAgfVxuXG4gICAgICBsLS07XG5cbiAgICAgIGZ1bmMgPSBmdW5jdGlvbiBmdW5jKHApIHtcbiAgICAgICAgcCAqPSBsO1xuICAgICAgICB2YXIgaSA9IE1hdGgubWluKGlsLCB+fnApO1xuICAgICAgICByZXR1cm4gaW50ZXJwb2xhdG9yc1tpXShwIC0gaSk7XG4gICAgICB9O1xuXG4gICAgICBwcm9ncmVzcyA9IGVuZDtcbiAgICB9IGVsc2UgaWYgKCFtdXRhdGUpIHtcbiAgICAgIHN0YXJ0ID0gX21lcmdlKF9pc0FycmF5KHN0YXJ0KSA/IFtdIDoge30sIHN0YXJ0KTtcbiAgICB9XG5cbiAgICBpZiAoIWludGVycG9sYXRvcnMpIHtcbiAgICAgIGZvciAocCBpbiBlbmQpIHtcbiAgICAgICAgX2FkZFByb3BUd2Vlbi5jYWxsKG1hc3Rlciwgc3RhcnQsIHAsIFwiZ2V0XCIsIGVuZFtwXSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmMgPSBmdW5jdGlvbiBmdW5jKHApIHtcbiAgICAgICAgcmV0dXJuIF9yZW5kZXJQcm9wVHdlZW5zKHAsIG1hc3RlcikgfHwgKGlzU3RyaW5nID8gc3RhcnQucCA6IHN0YXJ0KTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9jb25kaXRpb25hbFJldHVybihwcm9ncmVzcywgZnVuYyk7XG59LFxuICAgIF9nZXRMYWJlbEluRGlyZWN0aW9uID0gZnVuY3Rpb24gX2dldExhYmVsSW5EaXJlY3Rpb24odGltZWxpbmUsIGZyb21UaW1lLCBiYWNrd2FyZCkge1xuICAvL3VzZWQgZm9yIG5leHRMYWJlbCgpIGFuZCBwcmV2aW91c0xhYmVsKClcbiAgdmFyIGxhYmVscyA9IHRpbWVsaW5lLmxhYmVscyxcbiAgICAgIG1pbiA9IF9iaWdOdW0sXG4gICAgICBwLFxuICAgICAgZGlzdGFuY2UsXG4gICAgICBsYWJlbDtcblxuICBmb3IgKHAgaW4gbGFiZWxzKSB7XG4gICAgZGlzdGFuY2UgPSBsYWJlbHNbcF0gLSBmcm9tVGltZTtcblxuICAgIGlmIChkaXN0YW5jZSA8IDAgPT09ICEhYmFja3dhcmQgJiYgZGlzdGFuY2UgJiYgbWluID4gKGRpc3RhbmNlID0gTWF0aC5hYnMoZGlzdGFuY2UpKSkge1xuICAgICAgbGFiZWwgPSBwO1xuICAgICAgbWluID0gZGlzdGFuY2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxhYmVsO1xufSxcbiAgICBfY2FsbGJhY2sgPSBmdW5jdGlvbiBfY2FsbGJhY2soYW5pbWF0aW9uLCB0eXBlLCBleGVjdXRlTGF6eUZpcnN0KSB7XG4gIHZhciB2ID0gYW5pbWF0aW9uLnZhcnMsXG4gICAgICBjYWxsYmFjayA9IHZbdHlwZV0sXG4gICAgICBwcmV2Q29udGV4dCA9IF9jb250ZXh0LFxuICAgICAgY29udGV4dCA9IGFuaW1hdGlvbi5fY3R4LFxuICAgICAgcGFyYW1zLFxuICAgICAgc2NvcGUsXG4gICAgICByZXN1bHQ7XG5cbiAgaWYgKCFjYWxsYmFjaykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHBhcmFtcyA9IHZbdHlwZSArIFwiUGFyYW1zXCJdO1xuICBzY29wZSA9IHYuY2FsbGJhY2tTY29wZSB8fCBhbmltYXRpb247XG4gIGV4ZWN1dGVMYXp5Rmlyc3QgJiYgX2xhenlUd2VlbnMubGVuZ3RoICYmIF9sYXp5UmVuZGVyKCk7IC8vaW4gY2FzZSByZW5kZXJpbmcgY2F1c2VkIGFueSB0d2VlbnMgdG8gbGF6eS1pbml0LCB3ZSBzaG91bGQgcmVuZGVyIHRoZW0gYmVjYXVzZSB0eXBpY2FsbHkgd2hlbiBhIHRpbWVsaW5lIGZpbmlzaGVzLCB1c2VycyBleHBlY3QgdGhpbmdzIHRvIGhhdmUgcmVuZGVyZWQgZnVsbHkuIEltYWdpbmUgYW4gb25VcGRhdGUgb24gYSB0aW1lbGluZSB0aGF0IHJlcG9ydHMvY2hlY2tzIHR3ZWVuZWQgdmFsdWVzLlxuXG4gIGNvbnRleHQgJiYgKF9jb250ZXh0ID0gY29udGV4dCk7XG4gIHJlc3VsdCA9IHBhcmFtcyA/IGNhbGxiYWNrLmFwcGx5KHNjb3BlLCBwYXJhbXMpIDogY2FsbGJhY2suY2FsbChzY29wZSk7XG4gIF9jb250ZXh0ID0gcHJldkNvbnRleHQ7XG4gIHJldHVybiByZXN1bHQ7XG59LFxuICAgIF9pbnRlcnJ1cHQgPSBmdW5jdGlvbiBfaW50ZXJydXB0KGFuaW1hdGlvbikge1xuICBfcmVtb3ZlRnJvbVBhcmVudChhbmltYXRpb24pO1xuXG4gIGFuaW1hdGlvbi5zY3JvbGxUcmlnZ2VyICYmIGFuaW1hdGlvbi5zY3JvbGxUcmlnZ2VyLmtpbGwoISFfcmV2ZXJ0aW5nKTtcbiAgYW5pbWF0aW9uLnByb2dyZXNzKCkgPCAxICYmIF9jYWxsYmFjayhhbmltYXRpb24sIFwib25JbnRlcnJ1cHRcIik7XG4gIHJldHVybiBhbmltYXRpb247XG59LFxuICAgIF9xdWlja1R3ZWVuLFxuICAgIF9yZWdpc3RlclBsdWdpblF1ZXVlID0gW10sXG4gICAgX2NyZWF0ZVBsdWdpbiA9IGZ1bmN0aW9uIF9jcmVhdGVQbHVnaW4oY29uZmlnKSB7XG4gIGlmIChfd2luZG93RXhpc3RzKCkgJiYgY29uZmlnKSB7XG4gICAgLy8gZWRnZSBjYXNlOiBzb21lIGJ1aWxkIHRvb2xzIG1heSBwYXNzIGluIGEgbnVsbC91bmRlZmluZWQgdmFsdWVcbiAgICBjb25maWcgPSAhY29uZmlnLm5hbWUgJiYgY29uZmlnW1wiZGVmYXVsdFwiXSB8fCBjb25maWc7IC8vVU1EIHBhY2thZ2luZyB3cmFwcyB0aGluZ3Mgb2RkbHksIHNvIGZvciBleGFtcGxlIE1vdGlvblBhdGhIZWxwZXIgYmVjb21lcyB7TW90aW9uUGF0aEhlbHBlcjpNb3Rpb25QYXRoSGVscGVyLCBkZWZhdWx0Ok1vdGlvblBhdGhIZWxwZXJ9LlxuXG4gICAgdmFyIG5hbWUgPSBjb25maWcubmFtZSxcbiAgICAgICAgaXNGdW5jID0gX2lzRnVuY3Rpb24oY29uZmlnKSxcbiAgICAgICAgUGx1Z2luID0gbmFtZSAmJiAhaXNGdW5jICYmIGNvbmZpZy5pbml0ID8gZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5fcHJvcHMgPSBbXTtcbiAgICB9IDogY29uZmlnLFxuICAgICAgICAvL2luIGNhc2Ugc29tZW9uZSBwYXNzZXMgaW4gYW4gb2JqZWN0IHRoYXQncyBub3QgYSBwbHVnaW4sIGxpa2UgQ3VzdG9tRWFzZVxuICAgIGluc3RhbmNlRGVmYXVsdHMgPSB7XG4gICAgICBpbml0OiBfZW1wdHlGdW5jLFxuICAgICAgcmVuZGVyOiBfcmVuZGVyUHJvcFR3ZWVucyxcbiAgICAgIGFkZDogX2FkZFByb3BUd2VlbixcbiAgICAgIGtpbGw6IF9raWxsUHJvcFR3ZWVuc09mLFxuICAgICAgbW9kaWZpZXI6IF9hZGRQbHVnaW5Nb2RpZmllcixcbiAgICAgIHJhd1ZhcnM6IDBcbiAgICB9LFxuICAgICAgICBzdGF0aWNzID0ge1xuICAgICAgdGFyZ2V0VGVzdDogMCxcbiAgICAgIGdldDogMCxcbiAgICAgIGdldFNldHRlcjogX2dldFNldHRlcixcbiAgICAgIGFsaWFzZXM6IHt9LFxuICAgICAgcmVnaXN0ZXI6IDBcbiAgICB9O1xuXG4gICAgX3dha2UoKTtcblxuICAgIGlmIChjb25maWcgIT09IFBsdWdpbikge1xuICAgICAgaWYgKF9wbHVnaW5zW25hbWVdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3NldERlZmF1bHRzKFBsdWdpbiwgX3NldERlZmF1bHRzKF9jb3B5RXhjbHVkaW5nKGNvbmZpZywgaW5zdGFuY2VEZWZhdWx0cyksIHN0YXRpY3MpKTsgLy9zdGF0aWMgbWV0aG9kc1xuXG5cbiAgICAgIF9tZXJnZShQbHVnaW4ucHJvdG90eXBlLCBfbWVyZ2UoaW5zdGFuY2VEZWZhdWx0cywgX2NvcHlFeGNsdWRpbmcoY29uZmlnLCBzdGF0aWNzKSkpOyAvL2luc3RhbmNlIG1ldGhvZHNcblxuXG4gICAgICBfcGx1Z2luc1tQbHVnaW4ucHJvcCA9IG5hbWVdID0gUGx1Z2luO1xuXG4gICAgICBpZiAoY29uZmlnLnRhcmdldFRlc3QpIHtcbiAgICAgICAgX2hhcm5lc3NQbHVnaW5zLnB1c2goUGx1Z2luKTtcblxuICAgICAgICBfcmVzZXJ2ZWRQcm9wc1tuYW1lXSA9IDE7XG4gICAgICB9XG5cbiAgICAgIG5hbWUgPSAobmFtZSA9PT0gXCJjc3NcIiA/IFwiQ1NTXCIgOiBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zdWJzdHIoMSkpICsgXCJQbHVnaW5cIjsgLy9mb3IgdGhlIGdsb2JhbCBuYW1lLiBcIm1vdGlvblBhdGhcIiBzaG91bGQgYmVjb21lIE1vdGlvblBhdGhQbHVnaW5cbiAgICB9XG5cbiAgICBfYWRkR2xvYmFsKG5hbWUsIFBsdWdpbik7XG5cbiAgICBjb25maWcucmVnaXN0ZXIgJiYgY29uZmlnLnJlZ2lzdGVyKGdzYXAsIFBsdWdpbiwgUHJvcFR3ZWVuKTtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcgJiYgX3JlZ2lzdGVyUGx1Z2luUXVldWUucHVzaChjb25maWcpO1xuICB9XG59LFxuXG4vKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENPTE9SU1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXzI1NSA9IDI1NSxcbiAgICBfY29sb3JMb29rdXAgPSB7XG4gIGFxdWE6IFswLCBfMjU1LCBfMjU1XSxcbiAgbGltZTogWzAsIF8yNTUsIDBdLFxuICBzaWx2ZXI6IFsxOTIsIDE5MiwgMTkyXSxcbiAgYmxhY2s6IFswLCAwLCAwXSxcbiAgbWFyb29uOiBbMTI4LCAwLCAwXSxcbiAgdGVhbDogWzAsIDEyOCwgMTI4XSxcbiAgYmx1ZTogWzAsIDAsIF8yNTVdLFxuICBuYXZ5OiBbMCwgMCwgMTI4XSxcbiAgd2hpdGU6IFtfMjU1LCBfMjU1LCBfMjU1XSxcbiAgb2xpdmU6IFsxMjgsIDEyOCwgMF0sXG4gIHllbGxvdzogW18yNTUsIF8yNTUsIDBdLFxuICBvcmFuZ2U6IFtfMjU1LCAxNjUsIDBdLFxuICBncmF5OiBbMTI4LCAxMjgsIDEyOF0sXG4gIHB1cnBsZTogWzEyOCwgMCwgMTI4XSxcbiAgZ3JlZW46IFswLCAxMjgsIDBdLFxuICByZWQ6IFtfMjU1LCAwLCAwXSxcbiAgcGluazogW18yNTUsIDE5MiwgMjAzXSxcbiAgY3lhbjogWzAsIF8yNTUsIF8yNTVdLFxuICB0cmFuc3BhcmVudDogW18yNTUsIF8yNTUsIF8yNTUsIDBdXG59LFxuICAgIC8vIHBvc3NpYmxlIGZ1dHVyZSBpZGVhIHRvIHJlcGxhY2UgdGhlIGhhcmQtY29kZWQgY29sb3IgbmFtZSB2YWx1ZXMgLSBwdXQgdGhpcyBpbiB0aGUgdGlja2VyLndha2UoKSB3aGVyZSB3ZSBzZXQgdGhlIF9kb2M6XG4vLyBsZXQgY3R4ID0gX2RvYy5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLmdldENvbnRleHQoXCIyZFwiKTtcbi8vIF9mb3JFYWNoTmFtZShcImFxdWEsbGltZSxzaWx2ZXIsYmxhY2ssbWFyb29uLHRlYWwsYmx1ZSxuYXZ5LHdoaXRlLG9saXZlLHllbGxvdyxvcmFuZ2UsZ3JheSxwdXJwbGUsZ3JlZW4scmVkLHBpbmssY3lhblwiLCBjb2xvciA9PiB7Y3R4LmZpbGxTdHlsZSA9IGNvbG9yOyBfY29sb3JMb29rdXBbY29sb3JdID0gc3BsaXRDb2xvcihjdHguZmlsbFN0eWxlKX0pO1xuX2h1ZSA9IGZ1bmN0aW9uIF9odWUoaCwgbTEsIG0yKSB7XG4gIGggKz0gaCA8IDAgPyAxIDogaCA+IDEgPyAtMSA6IDA7XG4gIHJldHVybiAoaCAqIDYgPCAxID8gbTEgKyAobTIgLSBtMSkgKiBoICogNiA6IGggPCAuNSA/IG0yIDogaCAqIDMgPCAyID8gbTEgKyAobTIgLSBtMSkgKiAoMiAvIDMgLSBoKSAqIDYgOiBtMSkgKiBfMjU1ICsgLjUgfCAwO1xufSxcbiAgICBzcGxpdENvbG9yID0gZnVuY3Rpb24gc3BsaXRDb2xvcih2LCB0b0hTTCwgZm9yY2VBbHBoYSkge1xuICB2YXIgYSA9ICF2ID8gX2NvbG9yTG9va3VwLmJsYWNrIDogX2lzTnVtYmVyKHYpID8gW3YgPj4gMTYsIHYgPj4gOCAmIF8yNTUsIHYgJiBfMjU1XSA6IDAsXG4gICAgICByLFxuICAgICAgZyxcbiAgICAgIGIsXG4gICAgICBoLFxuICAgICAgcyxcbiAgICAgIGwsXG4gICAgICBtYXgsXG4gICAgICBtaW4sXG4gICAgICBkLFxuICAgICAgd2FzSFNMO1xuXG4gIGlmICghYSkge1xuICAgIGlmICh2LnN1YnN0cigtMSkgPT09IFwiLFwiKSB7XG4gICAgICAvL3NvbWV0aW1lcyBhIHRyYWlsaW5nIGNvbW1hIGlzIGluY2x1ZGVkIGFuZCB3ZSBzaG91bGQgY2hvcCBpdCBvZmYgKHR5cGljYWxseSBmcm9tIGEgY29tbWEtZGVsaW1pdGVkIGxpc3Qgb2YgdmFsdWVzIGxpa2UgYSB0ZXh0U2hhZG93OlwiMnB4IDJweCAycHggYmx1ZSwgNXB4IDVweCA1cHggcmdiKDI1NSwwLDApXCIgLSBpbiB0aGlzIGV4YW1wbGUgXCJibHVlLFwiIGhhcyBhIHRyYWlsaW5nIGNvbW1hLiBXZSBjb3VsZCBzdHJpcCBpdCBvdXQgaW5zaWRlIHBhcnNlQ29tcGxleCgpIGJ1dCB3ZSdkIG5lZWQgdG8gZG8gaXQgdG8gdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIHZhbHVlcyBwbHVzIGl0IHdvdWxkbid0IHByb3ZpZGUgcHJvdGVjdGlvbiBmcm9tIG90aGVyIHBvdGVudGlhbCBzY2VuYXJpb3MgbGlrZSBpZiB0aGUgdXNlciBwYXNzZXMgaW4gYSBzaW1pbGFyIHZhbHVlLlxuICAgICAgdiA9IHYuc3Vic3RyKDAsIHYubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgaWYgKF9jb2xvckxvb2t1cFt2XSkge1xuICAgICAgYSA9IF9jb2xvckxvb2t1cFt2XTtcbiAgICB9IGVsc2UgaWYgKHYuY2hhckF0KDApID09PSBcIiNcIikge1xuICAgICAgaWYgKHYubGVuZ3RoIDwgNikge1xuICAgICAgICAvL2ZvciBzaG9ydGhhbmQgbGlrZSAjOUYwIG9yICM5RjBGIChjb3VsZCBoYXZlIGFscGhhKVxuICAgICAgICByID0gdi5jaGFyQXQoMSk7XG4gICAgICAgIGcgPSB2LmNoYXJBdCgyKTtcbiAgICAgICAgYiA9IHYuY2hhckF0KDMpO1xuICAgICAgICB2ID0gXCIjXCIgKyByICsgciArIGcgKyBnICsgYiArIGIgKyAodi5sZW5ndGggPT09IDUgPyB2LmNoYXJBdCg0KSArIHYuY2hhckF0KDQpIDogXCJcIik7XG4gICAgICB9XG5cbiAgICAgIGlmICh2Lmxlbmd0aCA9PT0gOSkge1xuICAgICAgICAvLyBoZXggd2l0aCBhbHBoYSwgbGlrZSAjZmQ1ZTUzZmZcbiAgICAgICAgYSA9IHBhcnNlSW50KHYuc3Vic3RyKDEsIDYpLCAxNik7XG4gICAgICAgIHJldHVybiBbYSA+PiAxNiwgYSA+PiA4ICYgXzI1NSwgYSAmIF8yNTUsIHBhcnNlSW50KHYuc3Vic3RyKDcpLCAxNikgLyAyNTVdO1xuICAgICAgfVxuXG4gICAgICB2ID0gcGFyc2VJbnQodi5zdWJzdHIoMSksIDE2KTtcbiAgICAgIGEgPSBbdiA+PiAxNiwgdiA+PiA4ICYgXzI1NSwgdiAmIF8yNTVdO1xuICAgIH0gZWxzZSBpZiAodi5zdWJzdHIoMCwgMykgPT09IFwiaHNsXCIpIHtcbiAgICAgIGEgPSB3YXNIU0wgPSB2Lm1hdGNoKF9zdHJpY3ROdW1FeHApO1xuXG4gICAgICBpZiAoIXRvSFNMKSB7XG4gICAgICAgIGggPSArYVswXSAlIDM2MCAvIDM2MDtcbiAgICAgICAgcyA9ICthWzFdIC8gMTAwO1xuICAgICAgICBsID0gK2FbMl0gLyAxMDA7XG4gICAgICAgIGcgPSBsIDw9IC41ID8gbCAqIChzICsgMSkgOiBsICsgcyAtIGwgKiBzO1xuICAgICAgICByID0gbCAqIDIgLSBnO1xuICAgICAgICBhLmxlbmd0aCA+IDMgJiYgKGFbM10gKj0gMSk7IC8vY2FzdCBhcyBudW1iZXJcblxuICAgICAgICBhWzBdID0gX2h1ZShoICsgMSAvIDMsIHIsIGcpO1xuICAgICAgICBhWzFdID0gX2h1ZShoLCByLCBnKTtcbiAgICAgICAgYVsyXSA9IF9odWUoaCAtIDEgLyAzLCByLCBnKTtcbiAgICAgIH0gZWxzZSBpZiAofnYuaW5kZXhPZihcIj1cIikpIHtcbiAgICAgICAgLy9pZiByZWxhdGl2ZSB2YWx1ZXMgYXJlIGZvdW5kLCBqdXN0IHJldHVybiB0aGUgcmF3IHN0cmluZ3Mgd2l0aCB0aGUgcmVsYXRpdmUgcHJlZml4ZXMgaW4gcGxhY2UuXG4gICAgICAgIGEgPSB2Lm1hdGNoKF9udW1FeHApO1xuICAgICAgICBmb3JjZUFscGhhICYmIGEubGVuZ3RoIDwgNCAmJiAoYVszXSA9IDEpO1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IHYubWF0Y2goX3N0cmljdE51bUV4cCkgfHwgX2NvbG9yTG9va3VwLnRyYW5zcGFyZW50O1xuICAgIH1cblxuICAgIGEgPSBhLm1hcChOdW1iZXIpO1xuICB9XG5cbiAgaWYgKHRvSFNMICYmICF3YXNIU0wpIHtcbiAgICByID0gYVswXSAvIF8yNTU7XG4gICAgZyA9IGFbMV0gLyBfMjU1O1xuICAgIGIgPSBhWzJdIC8gXzI1NTtcbiAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcbiAgICBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcbiAgICBsID0gKG1heCArIG1pbikgLyAyO1xuXG4gICAgaWYgKG1heCA9PT0gbWluKSB7XG4gICAgICBoID0gcyA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGQgPSBtYXggLSBtaW47XG4gICAgICBzID0gbCA+IDAuNSA/IGQgLyAoMiAtIG1heCAtIG1pbikgOiBkIC8gKG1heCArIG1pbik7XG4gICAgICBoID0gbWF4ID09PSByID8gKGcgLSBiKSAvIGQgKyAoZyA8IGIgPyA2IDogMCkgOiBtYXggPT09IGcgPyAoYiAtIHIpIC8gZCArIDIgOiAociAtIGcpIC8gZCArIDQ7XG4gICAgICBoICo9IDYwO1xuICAgIH1cblxuICAgIGFbMF0gPSB+fihoICsgLjUpO1xuICAgIGFbMV0gPSB+fihzICogMTAwICsgLjUpO1xuICAgIGFbMl0gPSB+fihsICogMTAwICsgLjUpO1xuICB9XG5cbiAgZm9yY2VBbHBoYSAmJiBhLmxlbmd0aCA8IDQgJiYgKGFbM10gPSAxKTtcbiAgcmV0dXJuIGE7XG59LFxuICAgIF9jb2xvck9yZGVyRGF0YSA9IGZ1bmN0aW9uIF9jb2xvck9yZGVyRGF0YSh2KSB7XG4gIC8vIHN0cmlwcyBvdXQgdGhlIGNvbG9ycyBmcm9tIHRoZSBzdHJpbmcsIGZpbmRzIGFsbCB0aGUgbnVtZXJpYyBzbG90cyAod2l0aCB1bml0cykgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhvc2UuIFRoZSBBcnJheSBhbHNvIGhhcyBhIFwiY1wiIHByb3BlcnR5IHdoaWNoIGlzIGFuIEFycmF5IG9mIHRoZSBpbmRleCB2YWx1ZXMgd2hlcmUgdGhlIGNvbG9ycyBiZWxvbmcuIFRoaXMgaXMgdG8gaGVscCB3b3JrIGFyb3VuZCBpc3N1ZXMgd2hlcmUgdGhlcmUncyBhIG1pcy1tYXRjaGVkIG9yZGVyIG9mIGNvbG9yL251bWVyaWMgZGF0YSBsaWtlIGRyb3Atc2hhZG93KCNmMDAgMHB4IDFweCAycHgpIGFuZCBkcm9wLXNoYWRvdygweCAxcHggMnB4ICNmMDApLiBUaGlzIGlzIGJhc2ljYWxseSBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGluIF9mb3JtYXRDb2xvcnMoKVxuICB2YXIgdmFsdWVzID0gW10sXG4gICAgICBjID0gW10sXG4gICAgICBpID0gLTE7XG4gIHYuc3BsaXQoX2NvbG9yRXhwKS5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIGEgPSB2Lm1hdGNoKF9udW1XaXRoVW5pdEV4cCkgfHwgW107XG4gICAgdmFsdWVzLnB1c2guYXBwbHkodmFsdWVzLCBhKTtcbiAgICBjLnB1c2goaSArPSBhLmxlbmd0aCArIDEpO1xuICB9KTtcbiAgdmFsdWVzLmMgPSBjO1xuICByZXR1cm4gdmFsdWVzO1xufSxcbiAgICBfZm9ybWF0Q29sb3JzID0gZnVuY3Rpb24gX2Zvcm1hdENvbG9ycyhzLCB0b0hTTCwgb3JkZXJNYXRjaERhdGEpIHtcbiAgdmFyIHJlc3VsdCA9IFwiXCIsXG4gICAgICBjb2xvcnMgPSAocyArIHJlc3VsdCkubWF0Y2goX2NvbG9yRXhwKSxcbiAgICAgIHR5cGUgPSB0b0hTTCA/IFwiaHNsYShcIiA6IFwicmdiYShcIixcbiAgICAgIGkgPSAwLFxuICAgICAgYyxcbiAgICAgIHNoZWxsLFxuICAgICAgZCxcbiAgICAgIGw7XG5cbiAgaWYgKCFjb2xvcnMpIHtcbiAgICByZXR1cm4gcztcbiAgfVxuXG4gIGNvbG9ycyA9IGNvbG9ycy5tYXAoZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgcmV0dXJuIChjb2xvciA9IHNwbGl0Q29sb3IoY29sb3IsIHRvSFNMLCAxKSkgJiYgdHlwZSArICh0b0hTTCA/IGNvbG9yWzBdICsgXCIsXCIgKyBjb2xvclsxXSArIFwiJSxcIiArIGNvbG9yWzJdICsgXCIlLFwiICsgY29sb3JbM10gOiBjb2xvci5qb2luKFwiLFwiKSkgKyBcIilcIjtcbiAgfSk7XG5cbiAgaWYgKG9yZGVyTWF0Y2hEYXRhKSB7XG4gICAgZCA9IF9jb2xvck9yZGVyRGF0YShzKTtcbiAgICBjID0gb3JkZXJNYXRjaERhdGEuYztcblxuICAgIGlmIChjLmpvaW4ocmVzdWx0KSAhPT0gZC5jLmpvaW4ocmVzdWx0KSkge1xuICAgICAgc2hlbGwgPSBzLnJlcGxhY2UoX2NvbG9yRXhwLCBcIjFcIikuc3BsaXQoX251bVdpdGhVbml0RXhwKTtcbiAgICAgIGwgPSBzaGVsbC5sZW5ndGggLSAxO1xuXG4gICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgICByZXN1bHQgKz0gc2hlbGxbaV0gKyAofmMuaW5kZXhPZihpKSA/IGNvbG9ycy5zaGlmdCgpIHx8IHR5cGUgKyBcIjAsMCwwLDApXCIgOiAoZC5sZW5ndGggPyBkIDogY29sb3JzLmxlbmd0aCA/IGNvbG9ycyA6IG9yZGVyTWF0Y2hEYXRhKS5zaGlmdCgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIXNoZWxsKSB7XG4gICAgc2hlbGwgPSBzLnNwbGl0KF9jb2xvckV4cCk7XG4gICAgbCA9IHNoZWxsLmxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgcmVzdWx0ICs9IHNoZWxsW2ldICsgY29sb3JzW2ldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQgKyBzaGVsbFtsXTtcbn0sXG4gICAgX2NvbG9yRXhwID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcyA9IFwiKD86XFxcXGIoPzooPzpyZ2J8cmdiYXxoc2x8aHNsYSlcXFxcKC4rP1xcXFwpKXxcXFxcQiMoPzpbMC05YS1mXXszLDR9KXsxLDJ9XFxcXGJcIixcbiAgICAgIC8vd2UnbGwgZHluYW1pY2FsbHkgYnVpbGQgdGhpcyBSZWd1bGFyIEV4cHJlc3Npb24gdG8gY29uc2VydmUgZmlsZSBzaXplLiBBZnRlciBidWlsZGluZyBpdCwgaXQgd2lsbCBiZSBhYmxlIHRvIGZpbmQgcmdiKCksIHJnYmEoKSwgIyAoaGV4YWRlY2ltYWwpLCBhbmQgbmFtZWQgY29sb3IgdmFsdWVzIGxpa2UgcmVkLCBibHVlLCBwdXJwbGUsIGV0Yy4sXG4gIHA7XG5cbiAgZm9yIChwIGluIF9jb2xvckxvb2t1cCkge1xuICAgIHMgKz0gXCJ8XCIgKyBwICsgXCJcXFxcYlwiO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBSZWdFeHAocyArIFwiKVwiLCBcImdpXCIpO1xufSgpLFxuICAgIF9oc2xFeHAgPSAvaHNsW2FdP1xcKC8sXG4gICAgX2NvbG9yU3RyaW5nRmlsdGVyID0gZnVuY3Rpb24gX2NvbG9yU3RyaW5nRmlsdGVyKGEpIHtcbiAgdmFyIGNvbWJpbmVkID0gYS5qb2luKFwiIFwiKSxcbiAgICAgIHRvSFNMO1xuICBfY29sb3JFeHAubGFzdEluZGV4ID0gMDtcblxuICBpZiAoX2NvbG9yRXhwLnRlc3QoY29tYmluZWQpKSB7XG4gICAgdG9IU0wgPSBfaHNsRXhwLnRlc3QoY29tYmluZWQpO1xuICAgIGFbMV0gPSBfZm9ybWF0Q29sb3JzKGFbMV0sIHRvSFNMKTtcbiAgICBhWzBdID0gX2Zvcm1hdENvbG9ycyhhWzBdLCB0b0hTTCwgX2NvbG9yT3JkZXJEYXRhKGFbMV0pKTsgLy8gbWFrZSBzdXJlIHRoZSBvcmRlciBvZiBudW1iZXJzL2NvbG9ycyBtYXRjaCB3aXRoIHRoZSBFTkQgdmFsdWUuXG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufSxcblxuLypcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBUSUNLRVJcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cbl90aWNrZXJBY3RpdmUsXG4gICAgX3RpY2tlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9nZXRUaW1lID0gRGF0ZS5ub3csXG4gICAgICBfbGFnVGhyZXNob2xkID0gNTAwLFxuICAgICAgX2FkanVzdGVkTGFnID0gMzMsXG4gICAgICBfc3RhcnRUaW1lID0gX2dldFRpbWUoKSxcbiAgICAgIF9sYXN0VXBkYXRlID0gX3N0YXJ0VGltZSxcbiAgICAgIF9nYXAgPSAxMDAwIC8gMjQwLFxuICAgICAgX25leHRUaW1lID0gX2dhcCxcbiAgICAgIF9saXN0ZW5lcnMgPSBbXSxcbiAgICAgIF9pZCxcbiAgICAgIF9yZXEsXG4gICAgICBfcmFmLFxuICAgICAgX3NlbGYsXG4gICAgICBfZGVsdGEsXG4gICAgICBfaSxcbiAgICAgIF90aWNrID0gZnVuY3Rpb24gX3RpY2sodikge1xuICAgIHZhciBlbGFwc2VkID0gX2dldFRpbWUoKSAtIF9sYXN0VXBkYXRlLFxuICAgICAgICBtYW51YWwgPSB2ID09PSB0cnVlLFxuICAgICAgICBvdmVybGFwLFxuICAgICAgICBkaXNwYXRjaCxcbiAgICAgICAgdGltZSxcbiAgICAgICAgZnJhbWU7XG5cbiAgICBlbGFwc2VkID4gX2xhZ1RocmVzaG9sZCAmJiAoX3N0YXJ0VGltZSArPSBlbGFwc2VkIC0gX2FkanVzdGVkTGFnKTtcbiAgICBfbGFzdFVwZGF0ZSArPSBlbGFwc2VkO1xuICAgIHRpbWUgPSBfbGFzdFVwZGF0ZSAtIF9zdGFydFRpbWU7XG4gICAgb3ZlcmxhcCA9IHRpbWUgLSBfbmV4dFRpbWU7XG5cbiAgICBpZiAob3ZlcmxhcCA+IDAgfHwgbWFudWFsKSB7XG4gICAgICBmcmFtZSA9ICsrX3NlbGYuZnJhbWU7XG4gICAgICBfZGVsdGEgPSB0aW1lIC0gX3NlbGYudGltZSAqIDEwMDA7XG4gICAgICBfc2VsZi50aW1lID0gdGltZSA9IHRpbWUgLyAxMDAwO1xuICAgICAgX25leHRUaW1lICs9IG92ZXJsYXAgKyAob3ZlcmxhcCA+PSBfZ2FwID8gNCA6IF9nYXAgLSBvdmVybGFwKTtcbiAgICAgIGRpc3BhdGNoID0gMTtcbiAgICB9XG5cbiAgICBtYW51YWwgfHwgKF9pZCA9IF9yZXEoX3RpY2spKTsgLy9tYWtlIHN1cmUgdGhlIHJlcXVlc3QgaXMgbWFkZSBiZWZvcmUgd2UgZGlzcGF0Y2ggdGhlIFwidGlja1wiIGV2ZW50IHNvIHRoYXQgdGltaW5nIGlzIG1haW50YWluZWQuIE90aGVyd2lzZSwgaWYgcHJvY2Vzc2luZyB0aGUgXCJ0aWNrXCIgcmVxdWlyZXMgYSBidW5jaCBvZiB0aW1lIChsaWtlIDE1bXMpIGFuZCB3ZSdyZSB1c2luZyBhIHNldFRpbWVvdXQoKSB0aGF0J3MgYmFzZWQgb24gMTYuN21zLCBpdCdkIHRlY2huaWNhbGx5IHRha2UgMzEuN21zIGJldHdlZW4gZnJhbWVzIG90aGVyd2lzZS5cblxuICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgZm9yIChfaSA9IDA7IF9pIDwgX2xpc3RlbmVycy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgLy8gdXNlIF9pIGFuZCBjaGVjayBfbGlzdGVuZXJzLmxlbmd0aCBpbnN0ZWFkIG9mIGEgdmFyaWFibGUgYmVjYXVzZSBhIGxpc3RlbmVyIGNvdWxkIGdldCByZW1vdmVkIGR1cmluZyB0aGUgbG9vcCwgYW5kIGlmIHRoYXQgaGFwcGVucyB0byBhbiBlbGVtZW50IGxlc3MgdGhhbiB0aGUgY3VycmVudCBpbmRleCwgaXQnZCB0aHJvdyB0aGluZ3Mgb2ZmIGluIHRoZSBsb29wLlxuICAgICAgICBfbGlzdGVuZXJzW19pXSh0aW1lLCBfZGVsdGEsIGZyYW1lLCB2KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgX3NlbGYgPSB7XG4gICAgdGltZTogMCxcbiAgICBmcmFtZTogMCxcbiAgICB0aWNrOiBmdW5jdGlvbiB0aWNrKCkge1xuICAgICAgX3RpY2sodHJ1ZSk7XG4gICAgfSxcbiAgICBkZWx0YVJhdGlvOiBmdW5jdGlvbiBkZWx0YVJhdGlvKGZwcykge1xuICAgICAgcmV0dXJuIF9kZWx0YSAvICgxMDAwIC8gKGZwcyB8fCA2MCkpO1xuICAgIH0sXG4gICAgd2FrZTogZnVuY3Rpb24gd2FrZSgpIHtcbiAgICAgIGlmIChfY29yZVJlYWR5KSB7XG4gICAgICAgIGlmICghX2NvcmVJbml0dGVkICYmIF93aW5kb3dFeGlzdHMoKSkge1xuICAgICAgICAgIF93aW4gPSBfY29yZUluaXR0ZWQgPSB3aW5kb3c7XG4gICAgICAgICAgX2RvYyA9IF93aW4uZG9jdW1lbnQgfHwge307XG4gICAgICAgICAgX2dsb2JhbHMuZ3NhcCA9IGdzYXA7XG4gICAgICAgICAgKF93aW4uZ3NhcFZlcnNpb25zIHx8IChfd2luLmdzYXBWZXJzaW9ucyA9IFtdKSkucHVzaChnc2FwLnZlcnNpb24pO1xuXG4gICAgICAgICAgX2luc3RhbGwoX2luc3RhbGxTY29wZSB8fCBfd2luLkdyZWVuU29ja0dsb2JhbHMgfHwgIV93aW4uZ3NhcCAmJiBfd2luIHx8IHt9KTtcblxuICAgICAgICAgIF9yYWYgPSBfd2luLnJlcXVlc3RBbmltYXRpb25GcmFtZTtcblxuICAgICAgICAgIF9yZWdpc3RlclBsdWdpblF1ZXVlLmZvckVhY2goX2NyZWF0ZVBsdWdpbik7XG4gICAgICAgIH1cblxuICAgICAgICBfaWQgJiYgX3NlbGYuc2xlZXAoKTtcblxuICAgICAgICBfcmVxID0gX3JhZiB8fCBmdW5jdGlvbiAoZikge1xuICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGYsIF9uZXh0VGltZSAtIF9zZWxmLnRpbWUgKiAxMDAwICsgMSB8IDApO1xuICAgICAgICB9O1xuXG4gICAgICAgIF90aWNrZXJBY3RpdmUgPSAxO1xuXG4gICAgICAgIF90aWNrKDIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2xlZXA6IGZ1bmN0aW9uIHNsZWVwKCkge1xuICAgICAgKF9yYWYgPyBfd2luLmNhbmNlbEFuaW1hdGlvbkZyYW1lIDogY2xlYXJUaW1lb3V0KShfaWQpO1xuICAgICAgX3RpY2tlckFjdGl2ZSA9IDA7XG4gICAgICBfcmVxID0gX2VtcHR5RnVuYztcbiAgICB9LFxuICAgIGxhZ1Ntb290aGluZzogZnVuY3Rpb24gbGFnU21vb3RoaW5nKHRocmVzaG9sZCwgYWRqdXN0ZWRMYWcpIHtcbiAgICAgIF9sYWdUaHJlc2hvbGQgPSB0aHJlc2hvbGQgfHwgSW5maW5pdHk7IC8vIHplcm8gc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGJhc2ljYWxseSB1bmxpbWl0ZWRcblxuICAgICAgX2FkanVzdGVkTGFnID0gTWF0aC5taW4oYWRqdXN0ZWRMYWcgfHwgMzMsIF9sYWdUaHJlc2hvbGQpO1xuICAgIH0sXG4gICAgZnBzOiBmdW5jdGlvbiBmcHMoX2Zwcykge1xuICAgICAgX2dhcCA9IDEwMDAgLyAoX2ZwcyB8fCAyNDApO1xuICAgICAgX25leHRUaW1lID0gX3NlbGYudGltZSAqIDEwMDAgKyBfZ2FwO1xuICAgIH0sXG4gICAgYWRkOiBmdW5jdGlvbiBhZGQoY2FsbGJhY2ssIG9uY2UsIHByaW9yaXRpemUpIHtcbiAgICAgIHZhciBmdW5jID0gb25jZSA/IGZ1bmN0aW9uICh0LCBkLCBmLCB2KSB7XG4gICAgICAgIGNhbGxiYWNrKHQsIGQsIGYsIHYpO1xuXG4gICAgICAgIF9zZWxmLnJlbW92ZShmdW5jKTtcbiAgICAgIH0gOiBjYWxsYmFjaztcblxuICAgICAgX3NlbGYucmVtb3ZlKGNhbGxiYWNrKTtcblxuICAgICAgX2xpc3RlbmVyc1twcmlvcml0aXplID8gXCJ1bnNoaWZ0XCIgOiBcInB1c2hcIl0oZnVuYyk7XG5cbiAgICAgIF93YWtlKCk7XG5cbiAgICAgIHJldHVybiBmdW5jO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoY2FsbGJhY2ssIGkpIHtcbiAgICAgIH4oaSA9IF9saXN0ZW5lcnMuaW5kZXhPZihjYWxsYmFjaykpICYmIF9saXN0ZW5lcnMuc3BsaWNlKGksIDEpICYmIF9pID49IGkgJiYgX2ktLTtcbiAgICB9LFxuICAgIF9saXN0ZW5lcnM6IF9saXN0ZW5lcnNcbiAgfTtcbiAgcmV0dXJuIF9zZWxmO1xufSgpLFxuICAgIF93YWtlID0gZnVuY3Rpb24gX3dha2UoKSB7XG4gIHJldHVybiAhX3RpY2tlckFjdGl2ZSAmJiBfdGlja2VyLndha2UoKTtcbn0sXG4gICAgLy9hbHNvIGVuc3VyZXMgdGhlIGNvcmUgY2xhc3NlcyBhcmUgaW5pdGlhbGl6ZWQuXG5cbi8qXG4qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiogRUFTSU5HXG4qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiovXG5fZWFzZU1hcCA9IHt9LFxuICAgIF9jdXN0b21FYXNlRXhwID0gL15bXFxkLlxcLU1dW1xcZC5cXC0sXFxzXS8sXG4gICAgX3F1b3Rlc0V4cCA9IC9bXCInXS9nLFxuICAgIF9wYXJzZU9iamVjdEluU3RyaW5nID0gZnVuY3Rpb24gX3BhcnNlT2JqZWN0SW5TdHJpbmcodmFsdWUpIHtcbiAgLy90YWtlcyBhIHN0cmluZyBsaWtlIFwie3dpZ2dsZXM6MTAsIHR5cGU6YW50aWNpcGF0ZX0pXCIgYW5kIHR1cm5zIGl0IGludG8gYSByZWFsIG9iamVjdC4gTm90aWNlIGl0IGVuZHMgaW4gXCIpXCIgYW5kIGluY2x1ZGVzIHRoZSB7fSB3cmFwcGVycy4gVGhpcyBpcyBiZWNhdXNlIHdlIG9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gZm9yIHBhcnNpbmcgZWFzZSBjb25maWdzIGFuZCBwcmlvcml0aXplZCBvcHRpbWl6YXRpb24gcmF0aGVyIHRoYW4gcmV1c2FiaWxpdHkuXG4gIHZhciBvYmogPSB7fSxcbiAgICAgIHNwbGl0ID0gdmFsdWUuc3Vic3RyKDEsIHZhbHVlLmxlbmd0aCAtIDMpLnNwbGl0KFwiOlwiKSxcbiAgICAgIGtleSA9IHNwbGl0WzBdLFxuICAgICAgaSA9IDEsXG4gICAgICBsID0gc3BsaXQubGVuZ3RoLFxuICAgICAgaW5kZXgsXG4gICAgICB2YWwsXG4gICAgICBwYXJzZWRWYWw7XG5cbiAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICB2YWwgPSBzcGxpdFtpXTtcbiAgICBpbmRleCA9IGkgIT09IGwgLSAxID8gdmFsLmxhc3RJbmRleE9mKFwiLFwiKSA6IHZhbC5sZW5ndGg7XG4gICAgcGFyc2VkVmFsID0gdmFsLnN1YnN0cigwLCBpbmRleCk7XG4gICAgb2JqW2tleV0gPSBpc05hTihwYXJzZWRWYWwpID8gcGFyc2VkVmFsLnJlcGxhY2UoX3F1b3Rlc0V4cCwgXCJcIikudHJpbSgpIDogK3BhcnNlZFZhbDtcbiAgICBrZXkgPSB2YWwuc3Vic3RyKGluZGV4ICsgMSkudHJpbSgpO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn0sXG4gICAgX3ZhbHVlSW5QYXJlbnRoZXNlcyA9IGZ1bmN0aW9uIF92YWx1ZUluUGFyZW50aGVzZXModmFsdWUpIHtcbiAgdmFyIG9wZW4gPSB2YWx1ZS5pbmRleE9mKFwiKFwiKSArIDEsXG4gICAgICBjbG9zZSA9IHZhbHVlLmluZGV4T2YoXCIpXCIpLFxuICAgICAgbmVzdGVkID0gdmFsdWUuaW5kZXhPZihcIihcIiwgb3Blbik7XG4gIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcob3Blbiwgfm5lc3RlZCAmJiBuZXN0ZWQgPCBjbG9zZSA/IHZhbHVlLmluZGV4T2YoXCIpXCIsIGNsb3NlICsgMSkgOiBjbG9zZSk7XG59LFxuICAgIF9jb25maWdFYXNlRnJvbVN0cmluZyA9IGZ1bmN0aW9uIF9jb25maWdFYXNlRnJvbVN0cmluZyhuYW1lKSB7XG4gIC8vbmFtZSBjYW4gYmUgYSBzdHJpbmcgbGlrZSBcImVsYXN0aWMub3V0KDEsMC41KVwiLCBhbmQgcGFzcyBpbiBfZWFzZU1hcCBhcyBvYmogYW5kIGl0J2xsIHBhcnNlIGl0IG91dCBhbmQgY2FsbCB0aGUgYWN0dWFsIGZ1bmN0aW9uIGxpa2UgX2Vhc2VNYXAuRWxhc3RpYy5lYXNlT3V0LmNvbmZpZygxLDAuNSkuIEl0IHdpbGwgYWxzbyBwYXJzZSBjdXN0b20gZWFzZSBzdHJpbmdzIGFzIGxvbmcgYXMgQ3VzdG9tRWFzZSBpcyBsb2FkZWQgYW5kIHJlZ2lzdGVyZWQgKGludGVybmFsbHkgYXMgX2Vhc2VNYXAuX0NFKS5cbiAgdmFyIHNwbGl0ID0gKG5hbWUgKyBcIlwiKS5zcGxpdChcIihcIiksXG4gICAgICBlYXNlID0gX2Vhc2VNYXBbc3BsaXRbMF1dO1xuICByZXR1cm4gZWFzZSAmJiBzcGxpdC5sZW5ndGggPiAxICYmIGVhc2UuY29uZmlnID8gZWFzZS5jb25maWcuYXBwbHkobnVsbCwgfm5hbWUuaW5kZXhPZihcIntcIikgPyBbX3BhcnNlT2JqZWN0SW5TdHJpbmcoc3BsaXRbMV0pXSA6IF92YWx1ZUluUGFyZW50aGVzZXMobmFtZSkuc3BsaXQoXCIsXCIpLm1hcChfbnVtZXJpY0lmUG9zc2libGUpKSA6IF9lYXNlTWFwLl9DRSAmJiBfY3VzdG9tRWFzZUV4cC50ZXN0KG5hbWUpID8gX2Vhc2VNYXAuX0NFKFwiXCIsIG5hbWUpIDogZWFzZTtcbn0sXG4gICAgX2ludmVydEVhc2UgPSBmdW5jdGlvbiBfaW52ZXJ0RWFzZShlYXNlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAxIC0gZWFzZSgxIC0gcCk7XG4gIH07XG59LFxuICAgIC8vIGFsbG93IHlveW9FYXNlIHRvIGJlIHNldCBpbiBjaGlsZHJlbiBhbmQgaGF2ZSB0aG9zZSBhZmZlY3RlZCB3aGVuIHRoZSBwYXJlbnQvYW5jZXN0b3IgdGltZWxpbmUgeW95b3MuXG5fcHJvcGFnYXRlWW95b0Vhc2UgPSBmdW5jdGlvbiBfcHJvcGFnYXRlWW95b0Vhc2UodGltZWxpbmUsIGlzWW95bykge1xuICB2YXIgY2hpbGQgPSB0aW1lbGluZS5fZmlyc3QsXG4gICAgICBlYXNlO1xuXG4gIHdoaWxlIChjaGlsZCkge1xuICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFRpbWVsaW5lKSB7XG4gICAgICBfcHJvcGFnYXRlWW95b0Vhc2UoY2hpbGQsIGlzWW95byk7XG4gICAgfSBlbHNlIGlmIChjaGlsZC52YXJzLnlveW9FYXNlICYmICghY2hpbGQuX3lveW8gfHwgIWNoaWxkLl9yZXBlYXQpICYmIGNoaWxkLl95b3lvICE9PSBpc1lveW8pIHtcbiAgICAgIGlmIChjaGlsZC50aW1lbGluZSkge1xuICAgICAgICBfcHJvcGFnYXRlWW95b0Vhc2UoY2hpbGQudGltZWxpbmUsIGlzWW95byk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlYXNlID0gY2hpbGQuX2Vhc2U7XG4gICAgICAgIGNoaWxkLl9lYXNlID0gY2hpbGQuX3lFYXNlO1xuICAgICAgICBjaGlsZC5feUVhc2UgPSBlYXNlO1xuICAgICAgICBjaGlsZC5feW95byA9IGlzWW95bztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGlsZCA9IGNoaWxkLl9uZXh0O1xuICB9XG59LFxuICAgIF9wYXJzZUVhc2UgPSBmdW5jdGlvbiBfcGFyc2VFYXNlKGVhc2UsIGRlZmF1bHRFYXNlKSB7XG4gIHJldHVybiAhZWFzZSA/IGRlZmF1bHRFYXNlIDogKF9pc0Z1bmN0aW9uKGVhc2UpID8gZWFzZSA6IF9lYXNlTWFwW2Vhc2VdIHx8IF9jb25maWdFYXNlRnJvbVN0cmluZyhlYXNlKSkgfHwgZGVmYXVsdEVhc2U7XG59LFxuICAgIF9pbnNlcnRFYXNlID0gZnVuY3Rpb24gX2luc2VydEVhc2UobmFtZXMsIGVhc2VJbiwgZWFzZU91dCwgZWFzZUluT3V0KSB7XG4gIGlmIChlYXNlT3V0ID09PSB2b2lkIDApIHtcbiAgICBlYXNlT3V0ID0gZnVuY3Rpb24gZWFzZU91dChwKSB7XG4gICAgICByZXR1cm4gMSAtIGVhc2VJbigxIC0gcCk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChlYXNlSW5PdXQgPT09IHZvaWQgMCkge1xuICAgIGVhc2VJbk91dCA9IGZ1bmN0aW9uIGVhc2VJbk91dChwKSB7XG4gICAgICByZXR1cm4gcCA8IC41ID8gZWFzZUluKHAgKiAyKSAvIDIgOiAxIC0gZWFzZUluKCgxIC0gcCkgKiAyKSAvIDI7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBlYXNlID0ge1xuICAgIGVhc2VJbjogZWFzZUluLFxuICAgIGVhc2VPdXQ6IGVhc2VPdXQsXG4gICAgZWFzZUluT3V0OiBlYXNlSW5PdXRcbiAgfSxcbiAgICAgIGxvd2VyY2FzZU5hbWU7XG5cbiAgX2ZvckVhY2hOYW1lKG5hbWVzLCBmdW5jdGlvbiAobmFtZSkge1xuICAgIF9lYXNlTWFwW25hbWVdID0gX2dsb2JhbHNbbmFtZV0gPSBlYXNlO1xuICAgIF9lYXNlTWFwW2xvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCldID0gZWFzZU91dDtcblxuICAgIGZvciAodmFyIHAgaW4gZWFzZSkge1xuICAgICAgX2Vhc2VNYXBbbG93ZXJjYXNlTmFtZSArIChwID09PSBcImVhc2VJblwiID8gXCIuaW5cIiA6IHAgPT09IFwiZWFzZU91dFwiID8gXCIub3V0XCIgOiBcIi5pbk91dFwiKV0gPSBfZWFzZU1hcFtuYW1lICsgXCIuXCIgKyBwXSA9IGVhc2VbcF07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWFzZTtcbn0sXG4gICAgX2Vhc2VJbk91dEZyb21PdXQgPSBmdW5jdGlvbiBfZWFzZUluT3V0RnJvbU91dChlYXNlT3V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBwIDwgLjUgPyAoMSAtIGVhc2VPdXQoMSAtIHAgKiAyKSkgLyAyIDogLjUgKyBlYXNlT3V0KChwIC0gLjUpICogMikgLyAyO1xuICB9O1xufSxcbiAgICBfY29uZmlnRWxhc3RpYyA9IGZ1bmN0aW9uIF9jb25maWdFbGFzdGljKHR5cGUsIGFtcGxpdHVkZSwgcGVyaW9kKSB7XG4gIHZhciBwMSA9IGFtcGxpdHVkZSA+PSAxID8gYW1wbGl0dWRlIDogMSxcbiAgICAgIC8vbm90ZTogaWYgYW1wbGl0dWRlIGlzIDwgMSwgd2Ugc2ltcGx5IGFkanVzdCB0aGUgcGVyaW9kIGZvciBhIG1vcmUgbmF0dXJhbCBmZWVsLiBPdGhlcndpc2UgdGhlIG1hdGggZG9lc24ndCB3b3JrIHJpZ2h0IGFuZCB0aGUgY3VydmUgc3RhcnRzIGF0IDEuXG4gIHAyID0gKHBlcmlvZCB8fCAodHlwZSA/IC4zIDogLjQ1KSkgLyAoYW1wbGl0dWRlIDwgMSA/IGFtcGxpdHVkZSA6IDEpLFxuICAgICAgcDMgPSBwMiAvIF8yUEkgKiAoTWF0aC5hc2luKDEgLyBwMSkgfHwgMCksXG4gICAgICBlYXNlT3V0ID0gZnVuY3Rpb24gZWFzZU91dChwKSB7XG4gICAgcmV0dXJuIHAgPT09IDEgPyAxIDogcDEgKiBNYXRoLnBvdygyLCAtMTAgKiBwKSAqIF9zaW4oKHAgLSBwMykgKiBwMikgKyAxO1xuICB9LFxuICAgICAgZWFzZSA9IHR5cGUgPT09IFwib3V0XCIgPyBlYXNlT3V0IDogdHlwZSA9PT0gXCJpblwiID8gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gMSAtIGVhc2VPdXQoMSAtIHApO1xuICB9IDogX2Vhc2VJbk91dEZyb21PdXQoZWFzZU91dCk7XG5cbiAgcDIgPSBfMlBJIC8gcDI7IC8vcHJlY2FsY3VsYXRlIHRvIG9wdGltaXplXG5cbiAgZWFzZS5jb25maWcgPSBmdW5jdGlvbiAoYW1wbGl0dWRlLCBwZXJpb2QpIHtcbiAgICByZXR1cm4gX2NvbmZpZ0VsYXN0aWModHlwZSwgYW1wbGl0dWRlLCBwZXJpb2QpO1xuICB9O1xuXG4gIHJldHVybiBlYXNlO1xufSxcbiAgICBfY29uZmlnQmFjayA9IGZ1bmN0aW9uIF9jb25maWdCYWNrKHR5cGUsIG92ZXJzaG9vdCkge1xuICBpZiAob3ZlcnNob290ID09PSB2b2lkIDApIHtcbiAgICBvdmVyc2hvb3QgPSAxLjcwMTU4O1xuICB9XG5cbiAgdmFyIGVhc2VPdXQgPSBmdW5jdGlvbiBlYXNlT3V0KHApIHtcbiAgICByZXR1cm4gcCA/IC0tcCAqIHAgKiAoKG92ZXJzaG9vdCArIDEpICogcCArIG92ZXJzaG9vdCkgKyAxIDogMDtcbiAgfSxcbiAgICAgIGVhc2UgPSB0eXBlID09PSBcIm91dFwiID8gZWFzZU91dCA6IHR5cGUgPT09IFwiaW5cIiA/IGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIDEgLSBlYXNlT3V0KDEgLSBwKTtcbiAgfSA6IF9lYXNlSW5PdXRGcm9tT3V0KGVhc2VPdXQpO1xuXG4gIGVhc2UuY29uZmlnID0gZnVuY3Rpb24gKG92ZXJzaG9vdCkge1xuICAgIHJldHVybiBfY29uZmlnQmFjayh0eXBlLCBvdmVyc2hvb3QpO1xuICB9O1xuXG4gIHJldHVybiBlYXNlO1xufTsgLy8gYSBjaGVhcGVyIChrYiBhbmQgY3B1KSBidXQgbW9yZSBtaWxkIHdheSB0byBnZXQgYSBwYXJhbWV0ZXJpemVkIHdlaWdodGVkIGVhc2UgYnkgZmVlZGluZyBpbiBhIHZhbHVlIGJldHdlZW4gLTEgKGVhc2VJbikgYW5kIDEgKGVhc2VPdXQpIHdoZXJlIDAgaXMgbGluZWFyLlxuLy8gX3dlaWdodGVkRWFzZSA9IHJhdGlvID0+IHtcbi8vIFx0bGV0IHkgPSAwLjUgKyByYXRpbyAvIDI7XG4vLyBcdHJldHVybiBwID0+ICgyICogKDEgLSBwKSAqIHAgKiB5ICsgcCAqIHApO1xuLy8gfSxcbi8vIGEgc3Ryb25nZXIgKGJ1dCBtb3JlIGV4cGVuc2l2ZSBrYi9jcHUpIHBhcmFtZXRlcml6ZWQgd2VpZ2h0ZWQgZWFzZSB0aGF0IGxldHMgeW91IGZlZWQgaW4gYSB2YWx1ZSBiZXR3ZWVuIC0xIChlYXNlSW4pIGFuZCAxIChlYXNlT3V0KSB3aGVyZSAwIGlzIGxpbmVhci5cbi8vIF93ZWlnaHRlZEVhc2VTdHJvbmcgPSByYXRpbyA9PiB7XG4vLyBcdHJhdGlvID0gLjUgKyByYXRpbyAvIDI7XG4vLyBcdGxldCBvID0gMSAvIDMgKiAocmF0aW8gPCAuNSA/IHJhdGlvIDogMSAtIHJhdGlvKSxcbi8vIFx0XHRiID0gcmF0aW8gLSBvLFxuLy8gXHRcdGMgPSByYXRpbyArIG87XG4vLyBcdHJldHVybiBwID0+IHAgPT09IDEgPyBwIDogMyAqIGIgKiAoMSAtIHApICogKDEgLSBwKSAqIHAgKyAzICogYyAqICgxIC0gcCkgKiBwICogcCArIHAgKiBwICogcDtcbi8vIH07XG5cblxuX2ZvckVhY2hOYW1lKFwiTGluZWFyLFF1YWQsQ3ViaWMsUXVhcnQsUXVpbnQsU3Ryb25nXCIsIGZ1bmN0aW9uIChuYW1lLCBpKSB7XG4gIHZhciBwb3dlciA9IGkgPCA1ID8gaSArIDEgOiBpO1xuXG4gIF9pbnNlcnRFYXNlKG5hbWUgKyBcIixQb3dlclwiICsgKHBvd2VyIC0gMSksIGkgPyBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBNYXRoLnBvdyhwLCBwb3dlcik7XG4gIH0gOiBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBwO1xuICB9LCBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAxIC0gTWF0aC5wb3coMSAtIHAsIHBvd2VyKTtcbiAgfSwgZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gcCA8IC41ID8gTWF0aC5wb3cocCAqIDIsIHBvd2VyKSAvIDIgOiAxIC0gTWF0aC5wb3coKDEgLSBwKSAqIDIsIHBvd2VyKSAvIDI7XG4gIH0pO1xufSk7XG5cbl9lYXNlTWFwLkxpbmVhci5lYXNlTm9uZSA9IF9lYXNlTWFwLm5vbmUgPSBfZWFzZU1hcC5MaW5lYXIuZWFzZUluO1xuXG5faW5zZXJ0RWFzZShcIkVsYXN0aWNcIiwgX2NvbmZpZ0VsYXN0aWMoXCJpblwiKSwgX2NvbmZpZ0VsYXN0aWMoXCJvdXRcIiksIF9jb25maWdFbGFzdGljKCkpO1xuXG4oZnVuY3Rpb24gKG4sIGMpIHtcbiAgdmFyIG4xID0gMSAvIGMsXG4gICAgICBuMiA9IDIgKiBuMSxcbiAgICAgIG4zID0gMi41ICogbjEsXG4gICAgICBlYXNlT3V0ID0gZnVuY3Rpb24gZWFzZU91dChwKSB7XG4gICAgcmV0dXJuIHAgPCBuMSA/IG4gKiBwICogcCA6IHAgPCBuMiA/IG4gKiBNYXRoLnBvdyhwIC0gMS41IC8gYywgMikgKyAuNzUgOiBwIDwgbjMgPyBuICogKHAgLT0gMi4yNSAvIGMpICogcCArIC45Mzc1IDogbiAqIE1hdGgucG93KHAgLSAyLjYyNSAvIGMsIDIpICsgLjk4NDM3NTtcbiAgfTtcblxuICBfaW5zZXJ0RWFzZShcIkJvdW5jZVwiLCBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAxIC0gZWFzZU91dCgxIC0gcCk7XG4gIH0sIGVhc2VPdXQpO1xufSkoNy41NjI1LCAyLjc1KTtcblxuX2luc2VydEVhc2UoXCJFeHBvXCIsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwID8gTWF0aC5wb3coMiwgMTAgKiAocCAtIDEpKSA6IDA7XG59KTtcblxuX2luc2VydEVhc2UoXCJDaXJjXCIsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiAtKF9zcXJ0KDEgLSBwICogcCkgLSAxKTtcbn0pO1xuXG5faW5zZXJ0RWFzZShcIlNpbmVcIiwgZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIHAgPT09IDEgPyAxIDogLV9jb3MocCAqIF9IQUxGX1BJKSArIDE7XG59KTtcblxuX2luc2VydEVhc2UoXCJCYWNrXCIsIF9jb25maWdCYWNrKFwiaW5cIiksIF9jb25maWdCYWNrKFwib3V0XCIpLCBfY29uZmlnQmFjaygpKTtcblxuX2Vhc2VNYXAuU3RlcHBlZEVhc2UgPSBfZWFzZU1hcC5zdGVwcyA9IF9nbG9iYWxzLlN0ZXBwZWRFYXNlID0ge1xuICBjb25maWc6IGZ1bmN0aW9uIGNvbmZpZyhzdGVwcywgaW1tZWRpYXRlU3RhcnQpIHtcbiAgICBpZiAoc3RlcHMgPT09IHZvaWQgMCkge1xuICAgICAgc3RlcHMgPSAxO1xuICAgIH1cblxuICAgIHZhciBwMSA9IDEgLyBzdGVwcyxcbiAgICAgICAgcDIgPSBzdGVwcyArIChpbW1lZGlhdGVTdGFydCA/IDAgOiAxKSxcbiAgICAgICAgcDMgPSBpbW1lZGlhdGVTdGFydCA/IDEgOiAwLFxuICAgICAgICBtYXggPSAxIC0gX3RpbnlOdW07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwKSB7XG4gICAgICByZXR1cm4gKChwMiAqIF9jbGFtcCgwLCBtYXgsIHApIHwgMCkgKyBwMykgKiBwMTtcbiAgICB9O1xuICB9XG59O1xuX2RlZmF1bHRzLmVhc2UgPSBfZWFzZU1hcFtcInF1YWQub3V0XCJdO1xuXG5fZm9yRWFjaE5hbWUoXCJvbkNvbXBsZXRlLG9uVXBkYXRlLG9uU3RhcnQsb25SZXBlYXQsb25SZXZlcnNlQ29tcGxldGUsb25JbnRlcnJ1cHRcIiwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIF9jYWxsYmFja05hbWVzICs9IG5hbWUgKyBcIixcIiArIG5hbWUgKyBcIlBhcmFtcyxcIjtcbn0pO1xuLypcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDQUNIRVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbmV4cG9ydCB2YXIgR1NDYWNoZSA9IGZ1bmN0aW9uIEdTQ2FjaGUodGFyZ2V0LCBoYXJuZXNzKSB7XG4gIHRoaXMuaWQgPSBfZ3NJRCsrO1xuICB0YXJnZXQuX2dzYXAgPSB0aGlzO1xuICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgdGhpcy5oYXJuZXNzID0gaGFybmVzcztcbiAgdGhpcy5nZXQgPSBoYXJuZXNzID8gaGFybmVzcy5nZXQgOiBfZ2V0UHJvcGVydHk7XG4gIHRoaXMuc2V0ID0gaGFybmVzcyA/IGhhcm5lc3MuZ2V0U2V0dGVyIDogX2dldFNldHRlcjtcbn07XG4vKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEFOSU1BVElPTlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5leHBvcnQgdmFyIEFuaW1hdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEFuaW1hdGlvbih2YXJzKSB7XG4gICAgdGhpcy52YXJzID0gdmFycztcbiAgICB0aGlzLl9kZWxheSA9ICt2YXJzLmRlbGF5IHx8IDA7XG5cbiAgICBpZiAodGhpcy5fcmVwZWF0ID0gdmFycy5yZXBlYXQgPT09IEluZmluaXR5ID8gLTIgOiB2YXJzLnJlcGVhdCB8fCAwKSB7XG4gICAgICAvLyBUT0RPOiByZXBlYXQ6IEluZmluaXR5IG9uIGEgdGltZWxpbmUncyBjaGlsZHJlbiBtdXN0IGZsYWcgdGhhdCB0aW1lbGluZSBpbnRlcm5hbGx5IGFuZCBhZmZlY3QgaXRzIHRvdGFsRHVyYXRpb24sIG90aGVyd2lzZSBpdCdsbCBzdG9wIGluIHRoZSBuZWdhdGl2ZSBkaXJlY3Rpb24gd2hlbiByZWFjaGluZyB0aGUgc3RhcnQuXG4gICAgICB0aGlzLl9yRGVsYXkgPSB2YXJzLnJlcGVhdERlbGF5IHx8IDA7XG4gICAgICB0aGlzLl95b3lvID0gISF2YXJzLnlveW8gfHwgISF2YXJzLnlveW9FYXNlO1xuICAgIH1cblxuICAgIHRoaXMuX3RzID0gMTtcblxuICAgIF9zZXREdXJhdGlvbih0aGlzLCArdmFycy5kdXJhdGlvbiwgMSwgMSk7XG5cbiAgICB0aGlzLmRhdGEgPSB2YXJzLmRhdGE7XG5cbiAgICBpZiAoX2NvbnRleHQpIHtcbiAgICAgIHRoaXMuX2N0eCA9IF9jb250ZXh0O1xuXG4gICAgICBfY29udGV4dC5kYXRhLnB1c2godGhpcyk7XG4gICAgfVxuXG4gICAgX3RpY2tlckFjdGl2ZSB8fCBfdGlja2VyLndha2UoKTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBBbmltYXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5kZWxheSA9IGZ1bmN0aW9uIGRlbGF5KHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlIHx8IHZhbHVlID09PSAwKSB7XG4gICAgICB0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5zbW9vdGhDaGlsZFRpbWluZyAmJiB0aGlzLnN0YXJ0VGltZSh0aGlzLl9zdGFydCArIHZhbHVlIC0gdGhpcy5fZGVsYXkpO1xuICAgICAgdGhpcy5fZGVsYXkgPSB2YWx1ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9kZWxheTtcbiAgfTtcblxuICBfcHJvdG8uZHVyYXRpb24gPSBmdW5jdGlvbiBkdXJhdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gdGhpcy50b3RhbER1cmF0aW9uKHRoaXMuX3JlcGVhdCA+IDAgPyB2YWx1ZSArICh2YWx1ZSArIHRoaXMuX3JEZWxheSkgKiB0aGlzLl9yZXBlYXQgOiB2YWx1ZSkgOiB0aGlzLnRvdGFsRHVyYXRpb24oKSAmJiB0aGlzLl9kdXI7XG4gIH07XG5cbiAgX3Byb3RvLnRvdGFsRHVyYXRpb24gPSBmdW5jdGlvbiB0b3RhbER1cmF0aW9uKHZhbHVlKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdER1cjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXJ0eSA9IDA7XG4gICAgcmV0dXJuIF9zZXREdXJhdGlvbih0aGlzLCB0aGlzLl9yZXBlYXQgPCAwID8gdmFsdWUgOiAodmFsdWUgLSB0aGlzLl9yZXBlYXQgKiB0aGlzLl9yRGVsYXkpIC8gKHRoaXMuX3JlcGVhdCArIDEpKTtcbiAgfTtcblxuICBfcHJvdG8udG90YWxUaW1lID0gZnVuY3Rpb24gdG90YWxUaW1lKF90b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzKSB7XG4gICAgX3dha2UoKTtcblxuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RUaW1lO1xuICAgIH1cblxuICAgIHZhciBwYXJlbnQgPSB0aGlzLl9kcDtcblxuICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnNtb290aENoaWxkVGltaW5nICYmIHRoaXMuX3RzKSB7XG4gICAgICBfYWxpZ25QbGF5aGVhZCh0aGlzLCBfdG90YWxUaW1lKTtcblxuICAgICAgIXBhcmVudC5fZHAgfHwgcGFyZW50LnBhcmVudCB8fCBfcG9zdEFkZENoZWNrcyhwYXJlbnQsIHRoaXMpOyAvLyBlZGdlIGNhc2U6IGlmIHRoaXMgaXMgYSBjaGlsZCBvZiBhIHRpbWVsaW5lIHRoYXQgYWxyZWFkeSBjb21wbGV0ZWQsIGZvciBleGFtcGxlLCB3ZSBtdXN0IHJlLWFjdGl2YXRlIHRoZSBwYXJlbnQuXG4gICAgICAvL2luIGNhc2UgYW55IG9mIHRoZSBhbmNlc3RvciB0aW1lbGluZXMgaGFkIGNvbXBsZXRlZCBidXQgc2hvdWxkIG5vdyBiZSBlbmFibGVkLCB3ZSBzaG91bGQgcmVzZXQgdGhlaXIgdG90YWxUaW1lKCkgd2hpY2ggd2lsbCBhbHNvIGVuc3VyZSB0aGF0IHRoZXkncmUgbGluZWQgdXAgcHJvcGVybHkgYW5kIGVuYWJsZWQuIFNraXAgZm9yIGFuaW1hdGlvbnMgdGhhdCBhcmUgb24gdGhlIHJvb3QgKHdhc3RlZnVsKS4gRXhhbXBsZTogYSBUaW1lbGluZUxpdGUuZXhwb3J0Um9vdCgpIGlzIHBlcmZvcm1lZCB3aGVuIHRoZXJlJ3MgYSBwYXVzZWQgdHdlZW4gb24gdGhlIHJvb3QsIHRoZSBleHBvcnQgd2lsbCBub3QgY29tcGxldGUgdW50aWwgdGhhdCB0d2VlbiBpcyB1bnBhdXNlZCwgYnV0IGltYWdpbmUgYSBjaGlsZCBnZXRzIHJlc3RhcnRlZCBsYXRlciwgYWZ0ZXIgYWxsIFt1bnBhdXNlZF0gdHdlZW5zIGhhdmUgY29tcGxldGVkLiBUaGUgc3RhcnQgb2YgdGhhdCBjaGlsZCB3b3VsZCBnZXQgcHVzaGVkIG91dCwgYnV0IG9uZSBvZiB0aGUgYW5jZXN0b3JzIG1heSBoYXZlIGNvbXBsZXRlZC5cblxuICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQucGFyZW50KSB7XG4gICAgICAgIGlmIChwYXJlbnQucGFyZW50Ll90aW1lICE9PSBwYXJlbnQuX3N0YXJ0ICsgKHBhcmVudC5fdHMgPj0gMCA/IHBhcmVudC5fdFRpbWUgLyBwYXJlbnQuX3RzIDogKHBhcmVudC50b3RhbER1cmF0aW9uKCkgLSBwYXJlbnQuX3RUaW1lKSAvIC1wYXJlbnQuX3RzKSkge1xuICAgICAgICAgIHBhcmVudC50b3RhbFRpbWUocGFyZW50Ll90VGltZSwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMucGFyZW50ICYmIHRoaXMuX2RwLmF1dG9SZW1vdmVDaGlsZHJlbiAmJiAodGhpcy5fdHMgPiAwICYmIF90b3RhbFRpbWUgPCB0aGlzLl90RHVyIHx8IHRoaXMuX3RzIDwgMCAmJiBfdG90YWxUaW1lID4gMCB8fCAhdGhpcy5fdER1ciAmJiAhX3RvdGFsVGltZSkpIHtcbiAgICAgICAgLy9pZiB0aGUgYW5pbWF0aW9uIGRvZXNuJ3QgaGF2ZSBhIHBhcmVudCwgcHV0IGl0IGJhY2sgaW50byBpdHMgbGFzdCBwYXJlbnQgKHJlY29yZGVkIGFzIF9kcCBmb3IgZXhhY3RseSBjYXNlcyBsaWtlIHRoaXMpLiBMaW1pdCB0byBwYXJlbnRzIHdpdGggYXV0b1JlbW92ZUNoaWxkcmVuIChsaWtlIGdsb2JhbFRpbWVsaW5lKSBzbyB0aGF0IGlmIHRoZSB1c2VyIG1hbnVhbGx5IHJlbW92ZXMgYW4gYW5pbWF0aW9uIGZyb20gYSB0aW1lbGluZSBhbmQgdGhlbiBhbHRlcnMgaXRzIHBsYXloZWFkLCBpdCBkb2Vzbid0IGdldCBhZGRlZCBiYWNrIGluLlxuICAgICAgICBfYWRkVG9UaW1lbGluZSh0aGlzLl9kcCwgdGhpcywgdGhpcy5fc3RhcnQgLSB0aGlzLl9kZWxheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3RUaW1lICE9PSBfdG90YWxUaW1lIHx8ICF0aGlzLl9kdXIgJiYgIXN1cHByZXNzRXZlbnRzIHx8IHRoaXMuX2luaXR0ZWQgJiYgTWF0aC5hYnModGhpcy5felRpbWUpID09PSBfdGlueU51bSB8fCAhX3RvdGFsVGltZSAmJiAhdGhpcy5faW5pdHRlZCAmJiAodGhpcy5hZGQgfHwgdGhpcy5fcHRMb29rdXApKSB7XG4gICAgICAvLyBjaGVjayBmb3IgX3B0TG9va3VwIG9uIGEgVHdlZW4gaW5zdGFuY2UgdG8gZW5zdXJlIGl0IGhhcyBhY3R1YWxseSBmaW5pc2hlZCBiZWluZyBpbnN0YW50aWF0ZWQsIG90aGVyd2lzZSBpZiB0aGlzLnJldmVyc2UoKSBnZXRzIGNhbGxlZCBpbiB0aGUgQW5pbWF0aW9uIGNvbnN0cnVjdG9yLCBpdCBjb3VsZCB0cmlnZ2VyIGEgcmVuZGVyKCkgaGVyZSBldmVuIHRob3VnaCB0aGUgX3RhcmdldHMgd2VyZW4ndCBwb3B1bGF0ZWQsIHRodXMgd2hlbiBfaW5pdCgpIGlzIGNhbGxlZCB0aGVyZSB3b24ndCBiZSBhbnkgUHJvcFR3ZWVucyAoaXQnbGwgYWN0IGxpa2UgdGhlIHR3ZWVuIGlzIG5vbi1mdW5jdGlvbmFsKVxuICAgICAgdGhpcy5fdHMgfHwgKHRoaXMuX3BUaW1lID0gX3RvdGFsVGltZSk7IC8vIG90aGVyd2lzZSwgaWYgYW4gYW5pbWF0aW9uIGlzIHBhdXNlZCwgdGhlbiB0aGUgcGxheWhlYWQgaXMgbW92ZWQgYmFjayB0byB6ZXJvLCB0aGVuIHJlc3VtZWQsIGl0J2QgcmV2ZXJ0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIHRpbWUgYXQgdGhlIHBhdXNlXG4gICAgICAvL2lmICghdGhpcy5fbG9jaykgeyAvLyBhdm9pZCBlbmRsZXNzIHJlY3Vyc2lvbiAobm90IHN1cmUgd2UgbmVlZCB0aGlzIHlldCBvciBpZiBpdCdzIHdvcnRoIHRoZSBwZXJmb3JtYW5jZSBoaXQpXG4gICAgICAvLyAgIHRoaXMuX2xvY2sgPSAxO1xuXG4gICAgICBfbGF6eVNhZmVSZW5kZXIodGhpcywgX3RvdGFsVGltZSwgc3VwcHJlc3NFdmVudHMpOyAvLyAgIHRoaXMuX2xvY2sgPSAwO1xuICAgICAgLy99XG5cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8udGltZSA9IGZ1bmN0aW9uIHRpbWUodmFsdWUsIHN1cHByZXNzRXZlbnRzKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyB0aGlzLnRvdGFsVGltZShNYXRoLm1pbih0aGlzLnRvdGFsRHVyYXRpb24oKSwgdmFsdWUgKyBfZWxhcHNlZEN5Y2xlRHVyYXRpb24odGhpcykpICUgKHRoaXMuX2R1ciArIHRoaXMuX3JEZWxheSkgfHwgKHZhbHVlID8gdGhpcy5fZHVyIDogMCksIHN1cHByZXNzRXZlbnRzKSA6IHRoaXMuX3RpbWU7IC8vIG5vdGU6IGlmIHRoZSBtb2R1bHVzIHJlc3VsdHMgaW4gMCwgdGhlIHBsYXloZWFkIGNvdWxkIGJlIGV4YWN0bHkgYXQgdGhlIGVuZCBvciB0aGUgYmVnaW5uaW5nLCBhbmQgd2UgYWx3YXlzIGRlZmVyIHRvIHRoZSBFTkQgd2l0aCBhIG5vbi16ZXJvIHZhbHVlLCBvdGhlcndpc2UgaWYgeW91IHNldCB0aGUgdGltZSgpIHRvIHRoZSB2ZXJ5IGVuZCAoZHVyYXRpb24oKSksIGl0IHdvdWxkIHJlbmRlciBhdCB0aGUgU1RBUlQhXG4gIH07XG5cbiAgX3Byb3RvLnRvdGFsUHJvZ3Jlc3MgPSBmdW5jdGlvbiB0b3RhbFByb2dyZXNzKHZhbHVlLCBzdXBwcmVzc0V2ZW50cykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gdGhpcy50b3RhbFRpbWUodGhpcy50b3RhbER1cmF0aW9uKCkgKiB2YWx1ZSwgc3VwcHJlc3NFdmVudHMpIDogdGhpcy50b3RhbER1cmF0aW9uKCkgPyBNYXRoLm1pbigxLCB0aGlzLl90VGltZSAvIHRoaXMuX3REdXIpIDogdGhpcy5yYXRpbztcbiAgfTtcblxuICBfcHJvdG8ucHJvZ3Jlc3MgPSBmdW5jdGlvbiBwcm9ncmVzcyh2YWx1ZSwgc3VwcHJlc3NFdmVudHMpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHRoaXMudG90YWxUaW1lKHRoaXMuZHVyYXRpb24oKSAqICh0aGlzLl95b3lvICYmICEodGhpcy5pdGVyYXRpb24oKSAmIDEpID8gMSAtIHZhbHVlIDogdmFsdWUpICsgX2VsYXBzZWRDeWNsZUR1cmF0aW9uKHRoaXMpLCBzdXBwcmVzc0V2ZW50cykgOiB0aGlzLmR1cmF0aW9uKCkgPyBNYXRoLm1pbigxLCB0aGlzLl90aW1lIC8gdGhpcy5fZHVyKSA6IHRoaXMucmF0aW87XG4gIH07XG5cbiAgX3Byb3RvLml0ZXJhdGlvbiA9IGZ1bmN0aW9uIGl0ZXJhdGlvbih2YWx1ZSwgc3VwcHJlc3NFdmVudHMpIHtcbiAgICB2YXIgY3ljbGVEdXJhdGlvbiA9IHRoaXMuZHVyYXRpb24oKSArIHRoaXMuX3JEZWxheTtcblxuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gdGhpcy50b3RhbFRpbWUodGhpcy5fdGltZSArICh2YWx1ZSAtIDEpICogY3ljbGVEdXJhdGlvbiwgc3VwcHJlc3NFdmVudHMpIDogdGhpcy5fcmVwZWF0ID8gX2FuaW1hdGlvbkN5Y2xlKHRoaXMuX3RUaW1lLCBjeWNsZUR1cmF0aW9uKSArIDEgOiAxO1xuICB9IC8vIHBvdGVudGlhbCBmdXR1cmUgYWRkaXRpb246XG4gIC8vIGlzUGxheWluZ0JhY2t3YXJkcygpIHtcbiAgLy8gXHRsZXQgYW5pbWF0aW9uID0gdGhpcyxcbiAgLy8gXHRcdG9yaWVudGF0aW9uID0gMTsgLy8gMSA9IGZvcndhcmQsIC0xID0gYmFja3dhcmRcbiAgLy8gXHR3aGlsZSAoYW5pbWF0aW9uKSB7XG4gIC8vIFx0XHRvcmllbnRhdGlvbiAqPSBhbmltYXRpb24ucmV2ZXJzZWQoKSB8fCAoYW5pbWF0aW9uLnJlcGVhdCgpICYmICEoYW5pbWF0aW9uLml0ZXJhdGlvbigpICYgMSkpID8gLTEgOiAxO1xuICAvLyBcdFx0YW5pbWF0aW9uID0gYW5pbWF0aW9uLnBhcmVudDtcbiAgLy8gXHR9XG4gIC8vIFx0cmV0dXJuIG9yaWVudGF0aW9uIDwgMDtcbiAgLy8gfVxuICA7XG5cbiAgX3Byb3RvLnRpbWVTY2FsZSA9IGZ1bmN0aW9uIHRpbWVTY2FsZSh2YWx1ZSkge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3J0cyA9PT0gLV90aW55TnVtID8gMCA6IHRoaXMuX3J0czsgLy8gcmVjb3JkZWQgdGltZVNjYWxlLiBTcGVjaWFsIGNhc2U6IGlmIHNvbWVvbmUgY2FsbHMgcmV2ZXJzZSgpIG9uIGFuIGFuaW1hdGlvbiB3aXRoIHRpbWVTY2FsZSBvZiAwLCB3ZSBhc3NpZ24gaXQgLV90aW55TnVtIHRvIHJlbWVtYmVyIGl0J3MgcmV2ZXJzZWQuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3J0cyA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciB0VGltZSA9IHRoaXMucGFyZW50ICYmIHRoaXMuX3RzID8gX3BhcmVudFRvQ2hpbGRUb3RhbFRpbWUodGhpcy5wYXJlbnQuX3RpbWUsIHRoaXMpIDogdGhpcy5fdFRpbWU7IC8vIG1ha2Ugc3VyZSB0byBkbyB0aGUgcGFyZW50VG9DaGlsZFRvdGFsVGltZSgpIEJFRk9SRSBzZXR0aW5nIHRoZSBuZXcgX3RzIGJlY2F1c2UgdGhlIG9sZCBvbmUgbXVzdCBiZSB1c2VkIGluIHRoYXQgY2FsY3VsYXRpb24uXG4gICAgLy8gZnV0dXJlIGFkZGl0aW9uPyBVcCBzaWRlOiBmYXN0IGFuZCBtaW5pbWFsIGZpbGUgc2l6ZS4gRG93biBzaWRlOiBvbmx5IHdvcmtzIG9uIHRoaXMgYW5pbWF0aW9uOyBpZiBhIHRpbWVsaW5lIGlzIHJldmVyc2VkLCBmb3IgZXhhbXBsZSwgaXRzIGNoaWxkcmVucycgb25SZXZlcnNlIHdvdWxkbid0IGdldCBjYWxsZWQuXG4gICAgLy8oK3ZhbHVlIDwgMCAmJiB0aGlzLl9ydHMgPj0gMCkgJiYgX2NhbGxiYWNrKHRoaXMsIFwib25SZXZlcnNlXCIsIHRydWUpO1xuICAgIC8vIHByaW9yaXRpemUgcmVuZGVyaW5nIHdoZXJlIHRoZSBwYXJlbnQncyBwbGF5aGVhZCBsaW5lcyB1cCBpbnN0ZWFkIG9mIHRoaXMuX3RUaW1lIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgYSB0d2VlbiB0aGF0J3MgYW5pbWF0aW5nIGFub3RoZXIgdHdlZW4ncyB0aW1lU2NhbGUgaW4gdGhlIHNhbWUgcmVuZGVyaW5nIGxvb3AgKHNhbWUgcGFyZW50KSwgdGh1cyBpZiB0aGUgdGltZVNjYWxlIHR3ZWVuIHJlbmRlcnMgZmlyc3QsIGl0IHdvdWxkIGFsdGVyIF9zdGFydCBCRUZPUkUgX3RUaW1lIHdhcyBzZXQgb24gdGhhdCB0aWNrIChpbiB0aGUgcmVuZGVyaW5nIGxvb3ApLCBlZmZlY3RpdmVseSBmcmVlemluZyBpdCB1bnRpbCB0aGUgdGltZVNjYWxlIHR3ZWVuIGZpbmlzaGVzLlxuXG4gICAgdGhpcy5fcnRzID0gK3ZhbHVlIHx8IDA7XG4gICAgdGhpcy5fdHMgPSB0aGlzLl9wcyB8fCB2YWx1ZSA9PT0gLV90aW55TnVtID8gMCA6IHRoaXMuX3J0czsgLy8gX3RzIGlzIHRoZSBmdW5jdGlvbmFsIHRpbWVTY2FsZSB3aGljaCB3b3VsZCBiZSAwIGlmIHRoZSBhbmltYXRpb24gaXMgcGF1c2VkLlxuXG4gICAgdGhpcy50b3RhbFRpbWUoX2NsYW1wKC1NYXRoLmFicyh0aGlzLl9kZWxheSksIHRoaXMuX3REdXIsIHRUaW1lKSwgdHJ1ZSk7XG5cbiAgICBfc2V0RW5kKHRoaXMpOyAvLyBpZiBwYXJlbnQuc21vb3RoQ2hpbGRUaW1pbmcgd2FzIGZhbHNlLCB0aGUgZW5kIHRpbWUgZGlkbid0IGdldCB1cGRhdGVkIGluIHRoZSBfYWxpZ25QbGF5aGVhZCgpIG1ldGhvZCwgc28gZG8gaXQgaGVyZS5cblxuXG4gICAgcmV0dXJuIF9yZWNhY2hlQW5jZXN0b3JzKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90by5wYXVzZWQgPSBmdW5jdGlvbiBwYXVzZWQodmFsdWUpIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcHMgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl9wcyA9IHZhbHVlO1xuXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fcFRpbWUgPSB0aGlzLl90VGltZSB8fCBNYXRoLm1heCgtdGhpcy5fZGVsYXksIHRoaXMucmF3VGltZSgpKTsgLy8gaWYgdGhlIHBhdXNlIG9jY3VycyBkdXJpbmcgdGhlIGRlbGF5IHBoYXNlLCBtYWtlIHN1cmUgdGhhdCdzIGZhY3RvcmVkIGluIHdoZW4gcmVzdW1pbmcuXG5cbiAgICAgICAgdGhpcy5fdHMgPSB0aGlzLl9hY3QgPSAwOyAvLyBfdHMgaXMgdGhlIGZ1bmN0aW9uYWwgdGltZVNjYWxlLCBzbyBhIHBhdXNlZCB0d2VlbiB3b3VsZCBlZmZlY3RpdmVseSBoYXZlIGEgdGltZVNjYWxlIG9mIDAuIFdlIHJlY29yZCB0aGUgXCJyZWFsXCIgdGltZVNjYWxlIGFzIF9ydHMgKHJlY29yZGVkIHRpbWUgc2NhbGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfd2FrZSgpO1xuXG4gICAgICAgIHRoaXMuX3RzID0gdGhpcy5fcnRzOyAvL29ubHkgZGVmZXIgdG8gX3BUaW1lIChwYXVzZVRpbWUpIGlmIHRUaW1lIGlzIHplcm8uIFJlbWVtYmVyLCBzb21lb25lIGNvdWxkIHBhdXNlKCkgYW4gYW5pbWF0aW9uLCB0aGVuIHNjcnViIHRoZSBwbGF5aGVhZCBhbmQgcmVzdW1lKCkuIElmIHRoZSBwYXJlbnQgZG9lc24ndCBoYXZlIHNtb290aENoaWxkVGltaW5nLCB3ZSByZW5kZXIgYXQgdGhlIHJhd1RpbWUoKSBiZWNhdXNlIHRoZSBzdGFydFRpbWUgd29uJ3QgZ2V0IHVwZGF0ZWQuXG5cbiAgICAgICAgdGhpcy50b3RhbFRpbWUodGhpcy5wYXJlbnQgJiYgIXRoaXMucGFyZW50LnNtb290aENoaWxkVGltaW5nID8gdGhpcy5yYXdUaW1lKCkgOiB0aGlzLl90VGltZSB8fCB0aGlzLl9wVGltZSwgdGhpcy5wcm9ncmVzcygpID09PSAxICYmIE1hdGguYWJzKHRoaXMuX3pUaW1lKSAhPT0gX3RpbnlOdW0gJiYgKHRoaXMuX3RUaW1lIC09IF90aW55TnVtKSk7IC8vIGVkZ2UgY2FzZTogYW5pbWF0aW9uLnByb2dyZXNzKDEpLnBhdXNlKCkucGxheSgpIHdvdWxkbid0IHJlbmRlciBhZ2FpbiBiZWNhdXNlIHRoZSBwbGF5aGVhZCBpcyBhbHJlYWR5IGF0IHRoZSBlbmQsIGJ1dCB0aGUgY2FsbCB0byB0b3RhbFRpbWUoKSBiZWxvdyB3aWxsIGFkZCBpdCBiYWNrIHRvIGl0cyBwYXJlbnQuLi5hbmQgbm90IHJlbW92ZSBpdCBhZ2FpbiAoc2luY2UgcmVtb3Zpbmcgb25seSBoYXBwZW5zIHVwb24gcmVuZGVyaW5nIGF0IGEgbmV3IHRpbWUpLiBPZmZzZXR0aW5nIHRoZSBfdFRpbWUgc2xpZ2h0bHkgaXMgZG9uZSBzaW1wbHkgdG8gY2F1c2UgdGhlIGZpbmFsIHJlbmRlciBpbiB0b3RhbFRpbWUoKSB0aGF0J2xsIHBvcCBpdCBvZmYgaXRzIHRpbWVsaW5lIChpZiBhdXRvUmVtb3ZlQ2hpbGRyZW4gaXMgdHJ1ZSwgb2YgY291cnNlKS4gQ2hlY2sgdG8gbWFrZSBzdXJlIF96VGltZSBpc24ndCAtX3RpbnlOdW0gdG8gYXZvaWQgYW4gZWRnZSBjYXNlIHdoZXJlIHRoZSBwbGF5aGVhZCBpcyBwdXNoZWQgdG8gdGhlIGVuZCBidXQgSU5TSURFIGEgdHdlZW4vY2FsbGJhY2ssIHRoZSB0aW1lbGluZSBpdHNlbGYgaXMgcGF1c2VkIHRodXMgaGFsdGluZyByZW5kZXJpbmcgYW5kIGxlYXZpbmcgYSBmZXcgdW5yZW5kZXJlZC4gV2hlbiByZXN1bWluZywgaXQgd291bGRuJ3QgcmVuZGVyIHRob3NlIG90aGVyd2lzZS5cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8uc3RhcnRUaW1lID0gZnVuY3Rpb24gc3RhcnRUaW1lKHZhbHVlKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3N0YXJ0ID0gdmFsdWU7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQgfHwgdGhpcy5fZHA7XG4gICAgICBwYXJlbnQgJiYgKHBhcmVudC5fc29ydCB8fCAhdGhpcy5wYXJlbnQpICYmIF9hZGRUb1RpbWVsaW5lKHBhcmVudCwgdGhpcywgdmFsdWUgLSB0aGlzLl9kZWxheSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc3RhcnQ7XG4gIH07XG5cbiAgX3Byb3RvLmVuZFRpbWUgPSBmdW5jdGlvbiBlbmRUaW1lKGluY2x1ZGVSZXBlYXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0ICsgKF9pc05vdEZhbHNlKGluY2x1ZGVSZXBlYXRzKSA/IHRoaXMudG90YWxEdXJhdGlvbigpIDogdGhpcy5kdXJhdGlvbigpKSAvIE1hdGguYWJzKHRoaXMuX3RzIHx8IDEpO1xuICB9O1xuXG4gIF9wcm90by5yYXdUaW1lID0gZnVuY3Rpb24gcmF3VGltZSh3cmFwUmVwZWF0cykge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCB8fCB0aGlzLl9kcDsgLy8gX2RwID0gZGV0YWNoZWQgcGFyZW50XG5cbiAgICByZXR1cm4gIXBhcmVudCA/IHRoaXMuX3RUaW1lIDogd3JhcFJlcGVhdHMgJiYgKCF0aGlzLl90cyB8fCB0aGlzLl9yZXBlYXQgJiYgdGhpcy5fdGltZSAmJiB0aGlzLnRvdGFsUHJvZ3Jlc3MoKSA8IDEpID8gdGhpcy5fdFRpbWUgJSAodGhpcy5fZHVyICsgdGhpcy5fckRlbGF5KSA6ICF0aGlzLl90cyA/IHRoaXMuX3RUaW1lIDogX3BhcmVudFRvQ2hpbGRUb3RhbFRpbWUocGFyZW50LnJhd1RpbWUod3JhcFJlcGVhdHMpLCB0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8ucmV2ZXJ0ID0gZnVuY3Rpb24gcmV2ZXJ0KGNvbmZpZykge1xuICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkge1xuICAgICAgY29uZmlnID0gX3JldmVydENvbmZpZztcbiAgICB9XG5cbiAgICB2YXIgcHJldklzUmV2ZXJ0aW5nID0gX3JldmVydGluZztcbiAgICBfcmV2ZXJ0aW5nID0gY29uZmlnO1xuXG4gICAgaWYgKHRoaXMuX2luaXR0ZWQgfHwgdGhpcy5fc3RhcnRBdCkge1xuICAgICAgdGhpcy50aW1lbGluZSAmJiB0aGlzLnRpbWVsaW5lLnJldmVydChjb25maWcpO1xuICAgICAgdGhpcy50b3RhbFRpbWUoLTAuMDEsIGNvbmZpZy5zdXBwcmVzc0V2ZW50cyk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhICE9PSBcIm5lc3RlZFwiICYmIGNvbmZpZy5raWxsICE9PSBmYWxzZSAmJiB0aGlzLmtpbGwoKTtcbiAgICBfcmV2ZXJ0aW5nID0gcHJldklzUmV2ZXJ0aW5nO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90by5nbG9iYWxUaW1lID0gZnVuY3Rpb24gZ2xvYmFsVGltZShyYXdUaW1lKSB7XG4gICAgdmFyIGFuaW1hdGlvbiA9IHRoaXMsXG4gICAgICAgIHRpbWUgPSBhcmd1bWVudHMubGVuZ3RoID8gcmF3VGltZSA6IGFuaW1hdGlvbi5yYXdUaW1lKCk7XG5cbiAgICB3aGlsZSAoYW5pbWF0aW9uKSB7XG4gICAgICB0aW1lID0gYW5pbWF0aW9uLl9zdGFydCArIHRpbWUgLyAoYW5pbWF0aW9uLl90cyB8fCAxKTtcbiAgICAgIGFuaW1hdGlvbiA9IGFuaW1hdGlvbi5fZHA7XG4gICAgfVxuXG4gICAgcmV0dXJuICF0aGlzLnBhcmVudCAmJiB0aGlzLl9zYXQgPyB0aGlzLl9zYXQudmFycy5pbW1lZGlhdGVSZW5kZXIgPyAtSW5maW5pdHkgOiB0aGlzLl9zYXQuZ2xvYmFsVGltZShyYXdUaW1lKSA6IHRpbWU7IC8vIHRoZSBfc3RhcnRBdCB0d2VlbnMgZm9yIC5mcm9tVG8oKSBhbmQgLmZyb20oKSB0aGF0IGhhdmUgaW1tZWRpYXRlUmVuZGVyIHNob3VsZCBhbHdheXMgYmUgRklSU1QgaW4gdGhlIHRpbWVsaW5lIChpbXBvcnRhbnQgZm9yIGNvbnRleHQucmV2ZXJ0KCkpLiBcIl9zYXRcIiBzdGFuZHMgZm9yIF9zdGFydEF0VHdlZW4sIHJlZmVycmluZyB0byB0aGUgcGFyZW50IHR3ZWVuIHRoYXQgY3JlYXRlZCB0aGUgX3N0YXJ0QXQuIFdlIG11c3QgZGlzY2VybiBpZiB0aGF0IHR3ZWVuIGhhZCBpbW1lZGlhdGVSZW5kZXIgc28gdGhhdCB3ZSBjYW4ga25vdyB3aGV0aGVyIG9yIG5vdCB0byBwcmlvcml0aXplIGl0IGluIHJldmVydCgpLlxuICB9O1xuXG4gIF9wcm90by5yZXBlYXQgPSBmdW5jdGlvbiByZXBlYXQodmFsdWUpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fcmVwZWF0ID0gdmFsdWUgPT09IEluZmluaXR5ID8gLTIgOiB2YWx1ZTtcbiAgICAgIHJldHVybiBfb25VcGRhdGVUb3RhbER1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9yZXBlYXQgPT09IC0yID8gSW5maW5pdHkgOiB0aGlzLl9yZXBlYXQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlcGVhdERlbGF5ID0gZnVuY3Rpb24gcmVwZWF0RGVsYXkodmFsdWUpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgdmFyIHRpbWUgPSB0aGlzLl90aW1lO1xuICAgICAgdGhpcy5fckRlbGF5ID0gdmFsdWU7XG5cbiAgICAgIF9vblVwZGF0ZVRvdGFsRHVyYXRpb24odGhpcyk7XG5cbiAgICAgIHJldHVybiB0aW1lID8gdGhpcy50aW1lKHRpbWUpIDogdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fckRlbGF5O1xuICB9O1xuXG4gIF9wcm90by55b3lvID0gZnVuY3Rpb24geW95byh2YWx1ZSkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl95b3lvID0gdmFsdWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5feW95bztcbiAgfTtcblxuICBfcHJvdG8uc2VlayA9IGZ1bmN0aW9uIHNlZWsocG9zaXRpb24sIHN1cHByZXNzRXZlbnRzKSB7XG4gICAgcmV0dXJuIHRoaXMudG90YWxUaW1lKF9wYXJzZVBvc2l0aW9uKHRoaXMsIHBvc2l0aW9uKSwgX2lzTm90RmFsc2Uoc3VwcHJlc3NFdmVudHMpKTtcbiAgfTtcblxuICBfcHJvdG8ucmVzdGFydCA9IGZ1bmN0aW9uIHJlc3RhcnQoaW5jbHVkZURlbGF5LCBzdXBwcmVzc0V2ZW50cykge1xuICAgIHJldHVybiB0aGlzLnBsYXkoKS50b3RhbFRpbWUoaW5jbHVkZURlbGF5ID8gLXRoaXMuX2RlbGF5IDogMCwgX2lzTm90RmFsc2Uoc3VwcHJlc3NFdmVudHMpKTtcbiAgfTtcblxuICBfcHJvdG8ucGxheSA9IGZ1bmN0aW9uIHBsYXkoZnJvbSwgc3VwcHJlc3NFdmVudHMpIHtcbiAgICBmcm9tICE9IG51bGwgJiYgdGhpcy5zZWVrKGZyb20sIHN1cHByZXNzRXZlbnRzKTtcbiAgICByZXR1cm4gdGhpcy5yZXZlcnNlZChmYWxzZSkucGF1c2VkKGZhbHNlKTtcbiAgfTtcblxuICBfcHJvdG8ucmV2ZXJzZSA9IGZ1bmN0aW9uIHJldmVyc2UoZnJvbSwgc3VwcHJlc3NFdmVudHMpIHtcbiAgICBmcm9tICE9IG51bGwgJiYgdGhpcy5zZWVrKGZyb20gfHwgdGhpcy50b3RhbER1cmF0aW9uKCksIHN1cHByZXNzRXZlbnRzKTtcbiAgICByZXR1cm4gdGhpcy5yZXZlcnNlZCh0cnVlKS5wYXVzZWQoZmFsc2UpO1xuICB9O1xuXG4gIF9wcm90by5wYXVzZSA9IGZ1bmN0aW9uIHBhdXNlKGF0VGltZSwgc3VwcHJlc3NFdmVudHMpIHtcbiAgICBhdFRpbWUgIT0gbnVsbCAmJiB0aGlzLnNlZWsoYXRUaW1lLCBzdXBwcmVzc0V2ZW50cyk7XG4gICAgcmV0dXJuIHRoaXMucGF1c2VkKHRydWUpO1xuICB9O1xuXG4gIF9wcm90by5yZXN1bWUgPSBmdW5jdGlvbiByZXN1bWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGF1c2VkKGZhbHNlKTtcbiAgfTtcblxuICBfcHJvdG8ucmV2ZXJzZWQgPSBmdW5jdGlvbiByZXZlcnNlZCh2YWx1ZSkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAhIXZhbHVlICE9PSB0aGlzLnJldmVyc2VkKCkgJiYgdGhpcy50aW1lU2NhbGUoLXRoaXMuX3J0cyB8fCAodmFsdWUgPyAtX3RpbnlOdW0gOiAwKSk7IC8vIGluIGNhc2UgdGltZVNjYWxlIGlzIHplcm8sIHJldmVyc2luZyB3b3VsZCBoYXZlIG5vIGVmZmVjdCBzbyB3ZSB1c2UgX3RpbnlOdW0uXG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9ydHMgPCAwO1xuICB9O1xuXG4gIF9wcm90by5pbnZhbGlkYXRlID0gZnVuY3Rpb24gaW52YWxpZGF0ZSgpIHtcbiAgICB0aGlzLl9pbml0dGVkID0gdGhpcy5fYWN0ID0gMDtcbiAgICB0aGlzLl96VGltZSA9IC1fdGlueU51bTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8uaXNBY3RpdmUgPSBmdW5jdGlvbiBpc0FjdGl2ZSgpIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQgfHwgdGhpcy5fZHAsXG4gICAgICAgIHN0YXJ0ID0gdGhpcy5fc3RhcnQsXG4gICAgICAgIHJhd1RpbWU7XG4gICAgcmV0dXJuICEhKCFwYXJlbnQgfHwgdGhpcy5fdHMgJiYgdGhpcy5faW5pdHRlZCAmJiBwYXJlbnQuaXNBY3RpdmUoKSAmJiAocmF3VGltZSA9IHBhcmVudC5yYXdUaW1lKHRydWUpKSA+PSBzdGFydCAmJiByYXdUaW1lIDwgdGhpcy5lbmRUaW1lKHRydWUpIC0gX3RpbnlOdW0pO1xuICB9O1xuXG4gIF9wcm90by5ldmVudENhbGxiYWNrID0gZnVuY3Rpb24gZXZlbnRDYWxsYmFjayh0eXBlLCBjYWxsYmFjaywgcGFyYW1zKSB7XG4gICAgdmFyIHZhcnMgPSB0aGlzLnZhcnM7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgZGVsZXRlIHZhcnNbdHlwZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXJzW3R5cGVdID0gY2FsbGJhY2s7XG4gICAgICAgIHBhcmFtcyAmJiAodmFyc1t0eXBlICsgXCJQYXJhbXNcIl0gPSBwYXJhbXMpO1xuICAgICAgICB0eXBlID09PSBcIm9uVXBkYXRlXCIgJiYgKHRoaXMuX29uVXBkYXRlID0gY2FsbGJhY2spO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4gdmFyc1t0eXBlXTtcbiAgfTtcblxuICBfcHJvdG8udGhlbiA9IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICB2YXIgZiA9IF9pc0Z1bmN0aW9uKG9uRnVsZmlsbGVkKSA/IG9uRnVsZmlsbGVkIDogX3Bhc3NUaHJvdWdoLFxuICAgICAgICAgIF9yZXNvbHZlID0gZnVuY3Rpb24gX3Jlc29sdmUoKSB7XG4gICAgICAgIHZhciBfdGhlbiA9IHNlbGYudGhlbjtcbiAgICAgICAgc2VsZi50aGVuID0gbnVsbDsgLy8gdGVtcG9yYXJpbHkgbnVsbCB0aGUgdGhlbigpIG1ldGhvZCB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dyZWVuc29jay9HU0FQL2lzc3Vlcy8zMjIpXG5cbiAgICAgICAgX2lzRnVuY3Rpb24oZikgJiYgKGYgPSBmKHNlbGYpKSAmJiAoZi50aGVuIHx8IGYgPT09IHNlbGYpICYmIChzZWxmLnRoZW4gPSBfdGhlbik7XG4gICAgICAgIHJlc29sdmUoZik7XG4gICAgICAgIHNlbGYudGhlbiA9IF90aGVuO1xuICAgICAgfTtcblxuICAgICAgaWYgKHNlbGYuX2luaXR0ZWQgJiYgc2VsZi50b3RhbFByb2dyZXNzKCkgPT09IDEgJiYgc2VsZi5fdHMgPj0gMCB8fCAhc2VsZi5fdFRpbWUgJiYgc2VsZi5fdHMgPCAwKSB7XG4gICAgICAgIF9yZXNvbHZlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLl9wcm9tID0gX3Jlc29sdmU7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmtpbGwgPSBmdW5jdGlvbiBraWxsKCkge1xuICAgIF9pbnRlcnJ1cHQodGhpcyk7XG4gIH07XG5cbiAgcmV0dXJuIEFuaW1hdGlvbjtcbn0oKTtcblxuX3NldERlZmF1bHRzKEFuaW1hdGlvbi5wcm90b3R5cGUsIHtcbiAgX3RpbWU6IDAsXG4gIF9zdGFydDogMCxcbiAgX2VuZDogMCxcbiAgX3RUaW1lOiAwLFxuICBfdER1cjogMCxcbiAgX2RpcnR5OiAwLFxuICBfcmVwZWF0OiAwLFxuICBfeW95bzogZmFsc2UsXG4gIHBhcmVudDogbnVsbCxcbiAgX2luaXR0ZWQ6IGZhbHNlLFxuICBfckRlbGF5OiAwLFxuICBfdHM6IDEsXG4gIF9kcDogMCxcbiAgcmF0aW86IDAsXG4gIF96VGltZTogLV90aW55TnVtLFxuICBfcHJvbTogMCxcbiAgX3BzOiBmYWxzZSxcbiAgX3J0czogMVxufSk7XG4vKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogVElNRUxJTkVcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbmV4cG9ydCB2YXIgVGltZWxpbmUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9BbmltYXRpb24pIHtcbiAgX2luaGVyaXRzTG9vc2UoVGltZWxpbmUsIF9BbmltYXRpb24pO1xuXG4gIGZ1bmN0aW9uIFRpbWVsaW5lKHZhcnMsIHBvc2l0aW9uKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKHZhcnMgPT09IHZvaWQgMCkge1xuICAgICAgdmFycyA9IHt9O1xuICAgIH1cblxuICAgIF90aGlzID0gX0FuaW1hdGlvbi5jYWxsKHRoaXMsIHZhcnMpIHx8IHRoaXM7XG4gICAgX3RoaXMubGFiZWxzID0ge307XG4gICAgX3RoaXMuc21vb3RoQ2hpbGRUaW1pbmcgPSAhIXZhcnMuc21vb3RoQ2hpbGRUaW1pbmc7XG4gICAgX3RoaXMuYXV0b1JlbW92ZUNoaWxkcmVuID0gISF2YXJzLmF1dG9SZW1vdmVDaGlsZHJlbjtcbiAgICBfdGhpcy5fc29ydCA9IF9pc05vdEZhbHNlKHZhcnMuc29ydENoaWxkcmVuKTtcbiAgICBfZ2xvYmFsVGltZWxpbmUgJiYgX2FkZFRvVGltZWxpbmUodmFycy5wYXJlbnQgfHwgX2dsb2JhbFRpbWVsaW5lLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgcG9zaXRpb24pO1xuICAgIHZhcnMucmV2ZXJzZWQgJiYgX3RoaXMucmV2ZXJzZSgpO1xuICAgIHZhcnMucGF1c2VkICYmIF90aGlzLnBhdXNlZCh0cnVlKTtcbiAgICB2YXJzLnNjcm9sbFRyaWdnZXIgJiYgX3Njcm9sbFRyaWdnZXIoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIHZhcnMuc2Nyb2xsVHJpZ2dlcik7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90bzIgPSBUaW1lbGluZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMi50byA9IGZ1bmN0aW9uIHRvKHRhcmdldHMsIHZhcnMsIHBvc2l0aW9uKSB7XG4gICAgX2NyZWF0ZVR3ZWVuVHlwZSgwLCBhcmd1bWVudHMsIHRoaXMpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvMi5mcm9tID0gZnVuY3Rpb24gZnJvbSh0YXJnZXRzLCB2YXJzLCBwb3NpdGlvbikge1xuICAgIF9jcmVhdGVUd2VlblR5cGUoMSwgYXJndW1lbnRzLCB0aGlzKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90bzIuZnJvbVRvID0gZnVuY3Rpb24gZnJvbVRvKHRhcmdldHMsIGZyb21WYXJzLCB0b1ZhcnMsIHBvc2l0aW9uKSB7XG4gICAgX2NyZWF0ZVR3ZWVuVHlwZSgyLCBhcmd1bWVudHMsIHRoaXMpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvMi5zZXQgPSBmdW5jdGlvbiBzZXQodGFyZ2V0cywgdmFycywgcG9zaXRpb24pIHtcbiAgICB2YXJzLmR1cmF0aW9uID0gMDtcbiAgICB2YXJzLnBhcmVudCA9IHRoaXM7XG4gICAgX2luaGVyaXREZWZhdWx0cyh2YXJzKS5yZXBlYXREZWxheSB8fCAodmFycy5yZXBlYXQgPSAwKTtcbiAgICB2YXJzLmltbWVkaWF0ZVJlbmRlciA9ICEhdmFycy5pbW1lZGlhdGVSZW5kZXI7XG4gICAgbmV3IFR3ZWVuKHRhcmdldHMsIHZhcnMsIF9wYXJzZVBvc2l0aW9uKHRoaXMsIHBvc2l0aW9uKSwgMSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvMi5jYWxsID0gZnVuY3Rpb24gY2FsbChjYWxsYmFjaywgcGFyYW1zLCBwb3NpdGlvbikge1xuICAgIHJldHVybiBfYWRkVG9UaW1lbGluZSh0aGlzLCBUd2Vlbi5kZWxheWVkQ2FsbCgwLCBjYWxsYmFjaywgcGFyYW1zKSwgcG9zaXRpb24pO1xuICB9IC8vT05MWSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSEgTWF5YmUgZGVsZXRlP1xuICA7XG5cbiAgX3Byb3RvMi5zdGFnZ2VyVG8gPSBmdW5jdGlvbiBzdGFnZ2VyVG8odGFyZ2V0cywgZHVyYXRpb24sIHZhcnMsIHN0YWdnZXIsIHBvc2l0aW9uLCBvbkNvbXBsZXRlQWxsLCBvbkNvbXBsZXRlQWxsUGFyYW1zKSB7XG4gICAgdmFycy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICAgIHZhcnMuc3RhZ2dlciA9IHZhcnMuc3RhZ2dlciB8fCBzdGFnZ2VyO1xuICAgIHZhcnMub25Db21wbGV0ZSA9IG9uQ29tcGxldGVBbGw7XG4gICAgdmFycy5vbkNvbXBsZXRlUGFyYW1zID0gb25Db21wbGV0ZUFsbFBhcmFtcztcbiAgICB2YXJzLnBhcmVudCA9IHRoaXM7XG4gICAgbmV3IFR3ZWVuKHRhcmdldHMsIHZhcnMsIF9wYXJzZVBvc2l0aW9uKHRoaXMsIHBvc2l0aW9uKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvMi5zdGFnZ2VyRnJvbSA9IGZ1bmN0aW9uIHN0YWdnZXJGcm9tKHRhcmdldHMsIGR1cmF0aW9uLCB2YXJzLCBzdGFnZ2VyLCBwb3NpdGlvbiwgb25Db21wbGV0ZUFsbCwgb25Db21wbGV0ZUFsbFBhcmFtcykge1xuICAgIHZhcnMucnVuQmFja3dhcmRzID0gMTtcbiAgICBfaW5oZXJpdERlZmF1bHRzKHZhcnMpLmltbWVkaWF0ZVJlbmRlciA9IF9pc05vdEZhbHNlKHZhcnMuaW1tZWRpYXRlUmVuZGVyKTtcbiAgICByZXR1cm4gdGhpcy5zdGFnZ2VyVG8odGFyZ2V0cywgZHVyYXRpb24sIHZhcnMsIHN0YWdnZXIsIHBvc2l0aW9uLCBvbkNvbXBsZXRlQWxsLCBvbkNvbXBsZXRlQWxsUGFyYW1zKTtcbiAgfTtcblxuICBfcHJvdG8yLnN0YWdnZXJGcm9tVG8gPSBmdW5jdGlvbiBzdGFnZ2VyRnJvbVRvKHRhcmdldHMsIGR1cmF0aW9uLCBmcm9tVmFycywgdG9WYXJzLCBzdGFnZ2VyLCBwb3NpdGlvbiwgb25Db21wbGV0ZUFsbCwgb25Db21wbGV0ZUFsbFBhcmFtcykge1xuICAgIHRvVmFycy5zdGFydEF0ID0gZnJvbVZhcnM7XG4gICAgX2luaGVyaXREZWZhdWx0cyh0b1ZhcnMpLmltbWVkaWF0ZVJlbmRlciA9IF9pc05vdEZhbHNlKHRvVmFycy5pbW1lZGlhdGVSZW5kZXIpO1xuICAgIHJldHVybiB0aGlzLnN0YWdnZXJUbyh0YXJnZXRzLCBkdXJhdGlvbiwgdG9WYXJzLCBzdGFnZ2VyLCBwb3NpdGlvbiwgb25Db21wbGV0ZUFsbCwgb25Db21wbGV0ZUFsbFBhcmFtcyk7XG4gIH07XG5cbiAgX3Byb3RvMi5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIodG90YWxUaW1lLCBzdXBwcmVzc0V2ZW50cywgZm9yY2UpIHtcbiAgICB2YXIgcHJldlRpbWUgPSB0aGlzLl90aW1lLFxuICAgICAgICB0RHVyID0gdGhpcy5fZGlydHkgPyB0aGlzLnRvdGFsRHVyYXRpb24oKSA6IHRoaXMuX3REdXIsXG4gICAgICAgIGR1ciA9IHRoaXMuX2R1cixcbiAgICAgICAgdFRpbWUgPSB0b3RhbFRpbWUgPD0gMCA/IDAgOiBfcm91bmRQcmVjaXNlKHRvdGFsVGltZSksXG4gICAgICAgIC8vIGlmIGEgcGF1c2VkIHRpbWVsaW5lIGlzIHJlc3VtZWQgKG9yIGl0cyBfc3RhcnQgaXMgdXBkYXRlZCBmb3IgYW5vdGhlciByZWFzb24uLi53aGljaCByb3VuZHMgaXQpLCB0aGF0IGNvdWxkIHJlc3VsdCBpbiB0aGUgcGxheWhlYWQgc2hpZnRpbmcgYSAqKnRpbnkqKiBhbW91bnQgYW5kIGEgemVyby1kdXJhdGlvbiBjaGlsZCBhdCB0aGF0IHNwb3QgbWF5IGdldCByZW5kZXJlZCBhdCBhIGRpZmZlcmVudCByYXRpbywgbGlrZSBpdHMgdG90YWxUaW1lIGluIHJlbmRlcigpIG1heSBiZSAxZS0xNyBpbnN0ZWFkIG9mIDAsIGZvciBleGFtcGxlLlxuICAgIGNyb3NzaW5nU3RhcnQgPSB0aGlzLl96VGltZSA8IDAgIT09IHRvdGFsVGltZSA8IDAgJiYgKHRoaXMuX2luaXR0ZWQgfHwgIWR1ciksXG4gICAgICAgIHRpbWUsXG4gICAgICAgIGNoaWxkLFxuICAgICAgICBuZXh0LFxuICAgICAgICBpdGVyYXRpb24sXG4gICAgICAgIGN5Y2xlRHVyYXRpb24sXG4gICAgICAgIHByZXZQYXVzZWQsXG4gICAgICAgIHBhdXNlVHdlZW4sXG4gICAgICAgIHRpbWVTY2FsZSxcbiAgICAgICAgcHJldlN0YXJ0LFxuICAgICAgICBwcmV2SXRlcmF0aW9uLFxuICAgICAgICB5b3lvLFxuICAgICAgICBpc1lveW87XG4gICAgdGhpcyAhPT0gX2dsb2JhbFRpbWVsaW5lICYmIHRUaW1lID4gdER1ciAmJiB0b3RhbFRpbWUgPj0gMCAmJiAodFRpbWUgPSB0RHVyKTtcblxuICAgIGlmICh0VGltZSAhPT0gdGhpcy5fdFRpbWUgfHwgZm9yY2UgfHwgY3Jvc3NpbmdTdGFydCkge1xuICAgICAgaWYgKHByZXZUaW1lICE9PSB0aGlzLl90aW1lICYmIGR1cikge1xuICAgICAgICAvL2lmIHRvdGFsRHVyYXRpb24oKSBmaW5kcyBhIGNoaWxkIHdpdGggYSBuZWdhdGl2ZSBzdGFydFRpbWUgYW5kIHNtb290aENoaWxkVGltaW5nIGlzIHRydWUsIHRoaW5ncyBnZXQgc2hpZnRlZCBhcm91bmQgaW50ZXJuYWxseSBzbyB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgdGltZSBhY2NvcmRpbmdseS4gRm9yIGV4YW1wbGUsIGlmIGEgdHdlZW4gc3RhcnRzIGF0IC0zMCB3ZSBtdXN0IHNoaWZ0IEVWRVJZVEhJTkcgZm9yd2FyZCAzMCBzZWNvbmRzIGFuZCBtb3ZlIHRoaXMgdGltZWxpbmUncyBzdGFydFRpbWUgYmFja3dhcmQgYnkgMzAgc2Vjb25kcyBzbyB0aGF0IHRoaW5ncyBhbGlnbiB3aXRoIHRoZSBwbGF5aGVhZCAobm8ganVtcCkuXG4gICAgICAgIHRUaW1lICs9IHRoaXMuX3RpbWUgLSBwcmV2VGltZTtcbiAgICAgICAgdG90YWxUaW1lICs9IHRoaXMuX3RpbWUgLSBwcmV2VGltZTtcbiAgICAgIH1cblxuICAgICAgdGltZSA9IHRUaW1lO1xuICAgICAgcHJldlN0YXJ0ID0gdGhpcy5fc3RhcnQ7XG4gICAgICB0aW1lU2NhbGUgPSB0aGlzLl90cztcbiAgICAgIHByZXZQYXVzZWQgPSAhdGltZVNjYWxlO1xuXG4gICAgICBpZiAoY3Jvc3NpbmdTdGFydCkge1xuICAgICAgICBkdXIgfHwgKHByZXZUaW1lID0gdGhpcy5felRpbWUpOyAvL3doZW4gdGhlIHBsYXloZWFkIGFycml2ZXMgYXQgRVhBQ1RMWSB0aW1lIDAgKHJpZ2h0IG9uIHRvcCkgb2YgYSB6ZXJvLWR1cmF0aW9uIHRpbWVsaW5lLCB3ZSBuZWVkIHRvIGRpc2Nlcm4gaWYgZXZlbnRzIGFyZSBzdXBwcmVzc2VkIHNvIHRoYXQgd2hlbiB0aGUgcGxheWhlYWQgbW92ZXMgYWdhaW4gKG5leHQgdGltZSksIGl0J2xsIHRyaWdnZXIgdGhlIGNhbGxiYWNrLiBJZiBldmVudHMgYXJlIE5PVCBzdXBwcmVzc2VkLCBvYnZpb3VzbHkgdGhlIGNhbGxiYWNrIHdvdWxkIGJlIHRyaWdnZXJlZCBpbiB0aGlzIHJlbmRlci4gQmFzaWNhbGx5LCB0aGUgY2FsbGJhY2sgc2hvdWxkIGZpcmUgZWl0aGVyIHdoZW4gdGhlIHBsYXloZWFkIEFSUklWRVMgb3IgTEVBVkVTIHRoaXMgZXhhY3Qgc3BvdCwgbm90IGJvdGguIEltYWdpbmUgZG9pbmcgYSB0aW1lbGluZS5zZWVrKDApIGFuZCB0aGVyZSdzIGEgY2FsbGJhY2sgdGhhdCBzaXRzIGF0IDAuIFNpbmNlIGV2ZW50cyBhcmUgc3VwcHJlc3NlZCBvbiB0aGF0IHNlZWsoKSBieSBkZWZhdWx0LCBub3RoaW5nIHdpbGwgZmlyZSwgYnV0IHdoZW4gdGhlIHBsYXloZWFkIG1vdmVzIG9mZiBvZiB0aGF0IHBvc2l0aW9uLCB0aGUgY2FsbGJhY2sgc2hvdWxkIGZpcmUuIFRoaXMgYmVoYXZpb3IgaXMgd2hhdCBwZW9wbGUgaW50dWl0aXZlbHkgZXhwZWN0LlxuXG4gICAgICAgICh0b3RhbFRpbWUgfHwgIXN1cHByZXNzRXZlbnRzKSAmJiAodGhpcy5felRpbWUgPSB0b3RhbFRpbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fcmVwZWF0KSB7XG4gICAgICAgIC8vYWRqdXN0IHRoZSB0aW1lIGZvciByZXBlYXRzIGFuZCB5b3lvc1xuICAgICAgICB5b3lvID0gdGhpcy5feW95bztcbiAgICAgICAgY3ljbGVEdXJhdGlvbiA9IGR1ciArIHRoaXMuX3JEZWxheTtcblxuICAgICAgICBpZiAodGhpcy5fcmVwZWF0IDwgLTEgJiYgdG90YWxUaW1lIDwgMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRvdGFsVGltZShjeWNsZUR1cmF0aW9uICogMTAwICsgdG90YWxUaW1lLCBzdXBwcmVzc0V2ZW50cywgZm9yY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGltZSA9IF9yb3VuZFByZWNpc2UodFRpbWUgJSBjeWNsZUR1cmF0aW9uKTsgLy9yb3VuZCB0byBhdm9pZCBmbG9hdGluZyBwb2ludCBlcnJvcnMuICg0ICUgMC44IHNob3VsZCBiZSAwIGJ1dCBzb21lIGJyb3dzZXJzIHJlcG9ydCBpdCBhcyAwLjc5OTk5OTk5ISlcblxuICAgICAgICBpZiAodFRpbWUgPT09IHREdXIpIHtcbiAgICAgICAgICAvLyB0aGUgdER1ciA9PT0gdFRpbWUgaXMgZm9yIGVkZ2UgY2FzZXMgd2hlcmUgdGhlcmUncyBhIGxlbmd0aHkgZGVjaW1hbCBvbiB0aGUgZHVyYXRpb24gYW5kIGl0IG1heSByZWFjaCB0aGUgdmVyeSBlbmQgYnV0IHRoZSB0aW1lIGlzIHJlbmRlcmVkIGFzIG5vdC1xdWl0ZS10aGVyZSAocmVtZW1iZXIsIHREdXIgaXMgcm91bmRlZCB0byA0IGRlY2ltYWxzIHdoZXJlYXMgZHVyIGlzbid0KVxuICAgICAgICAgIGl0ZXJhdGlvbiA9IHRoaXMuX3JlcGVhdDtcbiAgICAgICAgICB0aW1lID0gZHVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZXJhdGlvbiA9IH5+KHRUaW1lIC8gY3ljbGVEdXJhdGlvbik7XG5cbiAgICAgICAgICBpZiAoaXRlcmF0aW9uICYmIGl0ZXJhdGlvbiA9PT0gdFRpbWUgLyBjeWNsZUR1cmF0aW9uKSB7XG4gICAgICAgICAgICB0aW1lID0gZHVyO1xuICAgICAgICAgICAgaXRlcmF0aW9uLS07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGltZSA+IGR1ciAmJiAodGltZSA9IGR1cik7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2SXRlcmF0aW9uID0gX2FuaW1hdGlvbkN5Y2xlKHRoaXMuX3RUaW1lLCBjeWNsZUR1cmF0aW9uKTtcbiAgICAgICAgIXByZXZUaW1lICYmIHRoaXMuX3RUaW1lICYmIHByZXZJdGVyYXRpb24gIT09IGl0ZXJhdGlvbiAmJiB0aGlzLl90VGltZSAtIHByZXZJdGVyYXRpb24gKiBjeWNsZUR1cmF0aW9uIC0gdGhpcy5fZHVyIDw9IDAgJiYgKHByZXZJdGVyYXRpb24gPSBpdGVyYXRpb24pOyAvLyBlZGdlIGNhc2UgLSBpZiBzb21lb25lIGRvZXMgYWRkUGF1c2UoKSBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgYSByZXBlYXRpbmcgdGltZWxpbmUsIHRoYXQgcGF1c2UgaXMgdGVjaG5pY2FsbHkgYXQgdGhlIHNhbWUgc3BvdCBhcyB0aGUgZW5kIHdoaWNoIGNhdXNlcyB0aGlzLl90aW1lIHRvIGdldCBzZXQgdG8gMCB3aGVuIHRoZSB0b3RhbFRpbWUgd291bGQgbm9ybWFsbHkgcGxhY2UgdGhlIHBsYXloZWFkIGF0IHRoZSBlbmQuIFNlZSBodHRwczovL2dyZWVuc29jay5jb20vZm9ydW1zL3RvcGljLzIzODIzLWNsb3NpbmctbmF2LWFuaW1hdGlvbi1ub3Qtd29ya2luZy1vbi1pZS1hbmQtaXBob25lLTYtbWF5YmUtb3RoZXItb2xkZXItYnJvd3Nlci8/dGFiPWNvbW1lbnRzI2NvbW1lbnQtMTEzMDA1IGFsc28sIHRoaXMuX3RUaW1lIC0gcHJldkl0ZXJhdGlvbiAqIGN5Y2xlRHVyYXRpb24gLSB0aGlzLl9kdXIgPD0gMCBqdXN0IGNoZWNrcyB0byBtYWtlIHN1cmUgaXQgd2Fzbid0IHByZXZpb3VzbHkgaW4gdGhlIFwicmVwZWF0RGVsYXlcIiBwb3J0aW9uXG5cbiAgICAgICAgaWYgKHlveW8gJiYgaXRlcmF0aW9uICYgMSkge1xuICAgICAgICAgIHRpbWUgPSBkdXIgLSB0aW1lO1xuICAgICAgICAgIGlzWW95byA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgLypcbiAgICAgICAgbWFrZSBzdXJlIGNoaWxkcmVuIGF0IHRoZSBlbmQvYmVnaW5uaW5nIG9mIHRoZSB0aW1lbGluZSBhcmUgcmVuZGVyZWQgcHJvcGVybHkuIElmLCBmb3IgZXhhbXBsZSxcbiAgICAgICAgYSAzLXNlY29uZCBsb25nIHRpbWVsaW5lIHJlbmRlcmVkIGF0IDIuOSBzZWNvbmRzIHByZXZpb3VzbHksIGFuZCBub3cgcmVuZGVycyBhdCAzLjIgc2Vjb25kcyAod2hpY2hcbiAgICAgICAgd291bGQgZ2V0IHRyYW5zbGF0ZWQgdG8gMi44IHNlY29uZHMgaWYgdGhlIHRpbWVsaW5lIHlveW9zIG9yIDAuMiBzZWNvbmRzIGlmIGl0IGp1c3QgcmVwZWF0cyksIHRoZXJlXG4gICAgICAgIGNvdWxkIGJlIGEgY2FsbGJhY2sgb3IgYSBzaG9ydCB0d2VlbiB0aGF0J3MgYXQgMi45NSBvciAzIHNlY29uZHMgaW4gd2hpY2ggd291bGRuJ3QgcmVuZGVyLiBTb1xuICAgICAgICB3ZSBuZWVkIHRvIHB1c2ggdGhlIHRpbWVsaW5lIHRvIHRoZSBlbmQgKGFuZC9vciBiZWdpbm5pbmcgZGVwZW5kaW5nIG9uIGl0cyB5b3lvIHZhbHVlKS4gQWxzbyB3ZSBtdXN0XG4gICAgICAgIGVuc3VyZSB0aGF0IHplcm8tZHVyYXRpb24gdHdlZW5zIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvciBlbmQgb2YgdGhlIFRpbWVsaW5lIHdvcmsuXG4gICAgICAgICovXG5cblxuICAgICAgICBpZiAoaXRlcmF0aW9uICE9PSBwcmV2SXRlcmF0aW9uICYmICF0aGlzLl9sb2NrKSB7XG4gICAgICAgICAgdmFyIHJld2luZGluZyA9IHlveW8gJiYgcHJldkl0ZXJhdGlvbiAmIDEsXG4gICAgICAgICAgICAgIGRvZXNXcmFwID0gcmV3aW5kaW5nID09PSAoeW95byAmJiBpdGVyYXRpb24gJiAxKTtcbiAgICAgICAgICBpdGVyYXRpb24gPCBwcmV2SXRlcmF0aW9uICYmIChyZXdpbmRpbmcgPSAhcmV3aW5kaW5nKTtcbiAgICAgICAgICBwcmV2VGltZSA9IHJld2luZGluZyA/IDAgOiB0VGltZSAlIGR1ciA/IGR1ciA6IHRUaW1lOyAvLyBpZiB0aGUgcGxheWhlYWQgaXMgbGFuZGluZyBleGFjdGx5IGF0IHRoZSBlbmQgb2YgYW4gaXRlcmF0aW9uLCB1c2UgdGhhdCB0b3RhbFRpbWUgcmF0aGVyIHRoYW4gb25seSB0aGUgZHVyYXRpb24sIG90aGVyd2lzZSBpdCdsbCBza2lwIHRoZSAybmQgcmVuZGVyIHNpbmNlIGl0J3MgZWZmZWN0aXZlbHkgYXQgdGhlIHNhbWUgdGltZS5cblxuICAgICAgICAgIHRoaXMuX2xvY2sgPSAxO1xuICAgICAgICAgIHRoaXMucmVuZGVyKHByZXZUaW1lIHx8IChpc1lveW8gPyAwIDogX3JvdW5kUHJlY2lzZShpdGVyYXRpb24gKiBjeWNsZUR1cmF0aW9uKSksIHN1cHByZXNzRXZlbnRzLCAhZHVyKS5fbG9jayA9IDA7XG4gICAgICAgICAgdGhpcy5fdFRpbWUgPSB0VGltZTsgLy8gaWYgYSB1c2VyIGdldHMgdGhlIGl0ZXJhdGlvbigpIGluc2lkZSB0aGUgb25SZXBlYXQsIGZvciBleGFtcGxlLCBpdCBzaG91bGQgYmUgYWNjdXJhdGUuXG5cbiAgICAgICAgICAhc3VwcHJlc3NFdmVudHMgJiYgdGhpcy5wYXJlbnQgJiYgX2NhbGxiYWNrKHRoaXMsIFwib25SZXBlYXRcIik7XG4gICAgICAgICAgdGhpcy52YXJzLnJlcGVhdFJlZnJlc2ggJiYgIWlzWW95byAmJiAodGhpcy5pbnZhbGlkYXRlKCkuX2xvY2sgPSAxKTtcblxuICAgICAgICAgIGlmIChwcmV2VGltZSAmJiBwcmV2VGltZSAhPT0gdGhpcy5fdGltZSB8fCBwcmV2UGF1c2VkICE9PSAhdGhpcy5fdHMgfHwgdGhpcy52YXJzLm9uUmVwZWF0ICYmICF0aGlzLnBhcmVudCAmJiAhdGhpcy5fYWN0KSB7XG4gICAgICAgICAgICAvLyBpZiBwcmV2VGltZSBpcyAwIGFuZCB3ZSByZW5kZXIgYXQgdGhlIHZlcnkgZW5kLCBfdGltZSB3aWxsIGJlIHRoZSBlbmQsIHRodXMgd29uJ3QgbWF0Y2guIFNvIGluIHRoaXMgZWRnZSBjYXNlLCBwcmV2VGltZSB3b24ndCBtYXRjaCBfdGltZSBidXQgdGhhdCdzIG9rYXkuIElmIGl0IGdldHMga2lsbGVkIGluIHRoZSBvblJlcGVhdCwgZWplY3QgYXMgd2VsbC5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGR1ciA9IHRoaXMuX2R1cjsgLy8gaW4gY2FzZSB0aGUgZHVyYXRpb24gY2hhbmdlZCBpbiB0aGUgb25SZXBlYXRcblxuICAgICAgICAgIHREdXIgPSB0aGlzLl90RHVyO1xuXG4gICAgICAgICAgaWYgKGRvZXNXcmFwKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2NrID0gMjtcbiAgICAgICAgICAgIHByZXZUaW1lID0gcmV3aW5kaW5nID8gZHVyIDogLTAuMDAwMTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKHByZXZUaW1lLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMudmFycy5yZXBlYXRSZWZyZXNoICYmICFpc1lveW8gJiYgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fbG9jayA9IDA7XG5cbiAgICAgICAgICBpZiAoIXRoaXMuX3RzICYmICFwcmV2UGF1c2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICB9IC8vaW4gb3JkZXIgZm9yIHlveW9FYXNlIHRvIHdvcmsgcHJvcGVybHkgd2hlbiB0aGVyZSdzIGEgc3RhZ2dlciwgd2UgbXVzdCBzd2FwIG91dCB0aGUgZWFzZSBpbiBlYWNoIHN1Yi10d2Vlbi5cblxuXG4gICAgICAgICAgX3Byb3BhZ2F0ZVlveW9FYXNlKHRoaXMsIGlzWW95byk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2hhc1BhdXNlICYmICF0aGlzLl9mb3JjaW5nICYmIHRoaXMuX2xvY2sgPCAyKSB7XG4gICAgICAgIHBhdXNlVHdlZW4gPSBfZmluZE5leHRQYXVzZVR3ZWVuKHRoaXMsIF9yb3VuZFByZWNpc2UocHJldlRpbWUpLCBfcm91bmRQcmVjaXNlKHRpbWUpKTtcblxuICAgICAgICBpZiAocGF1c2VUd2Vlbikge1xuICAgICAgICAgIHRUaW1lIC09IHRpbWUgLSAodGltZSA9IHBhdXNlVHdlZW4uX3N0YXJ0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl90VGltZSA9IHRUaW1lO1xuICAgICAgdGhpcy5fdGltZSA9IHRpbWU7XG4gICAgICB0aGlzLl9hY3QgPSAhdGltZVNjYWxlOyAvL2FzIGxvbmcgYXMgaXQncyBub3QgcGF1c2VkLCBmb3JjZSBpdCB0byBiZSBhY3RpdmUgc28gdGhhdCBpZiB0aGUgdXNlciByZW5kZXJzIGluZGVwZW5kZW50IG9mIHRoZSBwYXJlbnQgdGltZWxpbmUsIGl0J2xsIGJlIGZvcmNlZCB0byByZS1yZW5kZXIgb24gdGhlIG5leHQgdGljay5cblxuICAgICAgaWYgKCF0aGlzLl9pbml0dGVkKSB7XG4gICAgICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy52YXJzLm9uVXBkYXRlO1xuICAgICAgICB0aGlzLl9pbml0dGVkID0gMTtcbiAgICAgICAgdGhpcy5felRpbWUgPSB0b3RhbFRpbWU7XG4gICAgICAgIHByZXZUaW1lID0gMDsgLy8gdXBvbiBpbml0LCB0aGUgcGxheWhlYWQgc2hvdWxkIGFsd2F5cyBnbyBmb3J3YXJkOyBzb21lb25lIGNvdWxkIGludmFsaWRhdGUoKSBhIGNvbXBsZXRlZCB0aW1lbGluZSBhbmQgdGhlbiBpZiB0aGV5IHJlc3RhcnQoKSwgdGhhdCB3b3VsZCBtYWtlIGNoaWxkIHR3ZWVucyByZW5kZXIgaW4gcmV2ZXJzZSBvcmRlciB3aGljaCBjb3VsZCBsb2NrIGluIHRoZSB3cm9uZyBzdGFydGluZyB2YWx1ZXMgaWYgdGhleSBidWlsZCBvbiBlYWNoIG90aGVyLCBsaWtlIHRsLnRvKG9iaiwge3g6IDEwMH0pLnRvKG9iaiwge3g6IDB9KS5cbiAgICAgIH1cblxuICAgICAgaWYgKCFwcmV2VGltZSAmJiB0aW1lICYmICFzdXBwcmVzc0V2ZW50cyAmJiAhaXRlcmF0aW9uKSB7XG4gICAgICAgIF9jYWxsYmFjayh0aGlzLCBcIm9uU3RhcnRcIik7XG5cbiAgICAgICAgaWYgKHRoaXMuX3RUaW1lICE9PSB0VGltZSkge1xuICAgICAgICAgIC8vIGluIGNhc2UgdGhlIG9uU3RhcnQgdHJpZ2dlcmVkIGEgcmVuZGVyIGF0IGEgZGlmZmVyZW50IHNwb3QsIGVqZWN0LiBMaWtlIGlmIHNvbWVvbmUgZGlkIGFuaW1hdGlvbi5wYXVzZSgwLjUpIG9yIHNvbWV0aGluZyBpbnNpZGUgdGhlIG9uU3RhcnQuXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRpbWUgPj0gcHJldlRpbWUgJiYgdG90YWxUaW1lID49IDApIHtcbiAgICAgICAgY2hpbGQgPSB0aGlzLl9maXJzdDtcblxuICAgICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgICBuZXh0ID0gY2hpbGQuX25leHQ7XG5cbiAgICAgICAgICBpZiAoKGNoaWxkLl9hY3QgfHwgdGltZSA+PSBjaGlsZC5fc3RhcnQpICYmIGNoaWxkLl90cyAmJiBwYXVzZVR3ZWVuICE9PSBjaGlsZCkge1xuICAgICAgICAgICAgaWYgKGNoaWxkLnBhcmVudCAhPT0gdGhpcykge1xuICAgICAgICAgICAgICAvLyBhbiBleHRyZW1lIGVkZ2UgY2FzZSAtIHRoZSBjaGlsZCdzIHJlbmRlciBjb3VsZCBkbyBzb21ldGhpbmcgbGlrZSBraWxsKCkgdGhlIFwibmV4dFwiIG9uZSBpbiB0aGUgbGlua2VkIGxpc3QsIG9yIHJlcGFyZW50IGl0LiBJbiB0aGF0IGNhc2Ugd2UgbXVzdCByZS1pbml0aWF0ZSB0aGUgd2hvbGUgcmVuZGVyIHRvIGJlIHNhZmUuXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcih0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkLnJlbmRlcihjaGlsZC5fdHMgPiAwID8gKHRpbWUgLSBjaGlsZC5fc3RhcnQpICogY2hpbGQuX3RzIDogKGNoaWxkLl9kaXJ0eSA/IGNoaWxkLnRvdGFsRHVyYXRpb24oKSA6IGNoaWxkLl90RHVyKSArICh0aW1lIC0gY2hpbGQuX3N0YXJ0KSAqIGNoaWxkLl90cywgc3VwcHJlc3NFdmVudHMsIGZvcmNlKTtcblxuICAgICAgICAgICAgaWYgKHRpbWUgIT09IHRoaXMuX3RpbWUgfHwgIXRoaXMuX3RzICYmICFwcmV2UGF1c2VkKSB7XG4gICAgICAgICAgICAgIC8vaW4gY2FzZSBhIHR3ZWVuIHBhdXNlcyBvciBzZWVrcyB0aGUgdGltZWxpbmUgd2hlbiByZW5kZXJpbmcsIGxpa2UgaW5zaWRlIG9mIGFuIG9uVXBkYXRlL29uQ29tcGxldGVcbiAgICAgICAgICAgICAgcGF1c2VUd2VlbiA9IDA7XG4gICAgICAgICAgICAgIG5leHQgJiYgKHRUaW1lICs9IHRoaXMuX3pUaW1lID0gLV90aW55TnVtKTsgLy8gaXQgZGlkbid0IGZpbmlzaCByZW5kZXJpbmcsIHNvIGZsYWcgelRpbWUgYXMgbmVnYXRpdmUgc28gdGhhdCBzbyB0aGF0IHRoZSBuZXh0IHRpbWUgcmVuZGVyKCkgaXMgY2FsbGVkIGl0J2xsIGJlIGZvcmNlZCAodG8gcmVuZGVyIGFueSByZW1haW5pbmcgY2hpbGRyZW4pXG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2hpbGQgPSBuZXh0O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZCA9IHRoaXMuX2xhc3Q7XG4gICAgICAgIHZhciBhZGp1c3RlZFRpbWUgPSB0b3RhbFRpbWUgPCAwID8gdG90YWxUaW1lIDogdGltZTsgLy93aGVuIHRoZSBwbGF5aGVhZCBnb2VzIGJhY2t3YXJkIGJleW9uZCB0aGUgc3RhcnQgb2YgdGhpcyB0aW1lbGluZSwgd2UgbXVzdCBwYXNzIHRoYXQgaW5mb3JtYXRpb24gZG93biB0byB0aGUgY2hpbGQgYW5pbWF0aW9ucyBzbyB0aGF0IHplcm8tZHVyYXRpb24gdHdlZW5zIGtub3cgd2hldGhlciB0byByZW5kZXIgdGhlaXIgc3RhcnRpbmcgb3IgZW5kaW5nIHZhbHVlcy5cblxuICAgICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgICBuZXh0ID0gY2hpbGQuX3ByZXY7XG5cbiAgICAgICAgICBpZiAoKGNoaWxkLl9hY3QgfHwgYWRqdXN0ZWRUaW1lIDw9IGNoaWxkLl9lbmQpICYmIGNoaWxkLl90cyAmJiBwYXVzZVR3ZWVuICE9PSBjaGlsZCkge1xuICAgICAgICAgICAgaWYgKGNoaWxkLnBhcmVudCAhPT0gdGhpcykge1xuICAgICAgICAgICAgICAvLyBhbiBleHRyZW1lIGVkZ2UgY2FzZSAtIHRoZSBjaGlsZCdzIHJlbmRlciBjb3VsZCBkbyBzb21ldGhpbmcgbGlrZSBraWxsKCkgdGhlIFwibmV4dFwiIG9uZSBpbiB0aGUgbGlua2VkIGxpc3QsIG9yIHJlcGFyZW50IGl0LiBJbiB0aGF0IGNhc2Ugd2UgbXVzdCByZS1pbml0aWF0ZSB0aGUgd2hvbGUgcmVuZGVyIHRvIGJlIHNhZmUuXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcih0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkLnJlbmRlcihjaGlsZC5fdHMgPiAwID8gKGFkanVzdGVkVGltZSAtIGNoaWxkLl9zdGFydCkgKiBjaGlsZC5fdHMgOiAoY2hpbGQuX2RpcnR5ID8gY2hpbGQudG90YWxEdXJhdGlvbigpIDogY2hpbGQuX3REdXIpICsgKGFkanVzdGVkVGltZSAtIGNoaWxkLl9zdGFydCkgKiBjaGlsZC5fdHMsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSB8fCBfcmV2ZXJ0aW5nICYmIChjaGlsZC5faW5pdHRlZCB8fCBjaGlsZC5fc3RhcnRBdCkpOyAvLyBpZiByZXZlcnRpbmcsIHdlIHNob3VsZCBhbHdheXMgZm9yY2UgcmVuZGVycyBvZiBpbml0dGVkIHR3ZWVucyAoYnV0IHJlbWVtYmVyIHRoYXQgLmZyb21UbygpIG9yIC5mcm9tKCkgbWF5IGhhdmUgYSBfc3RhcnRBdCBidXQgbm90IF9pbml0dGVkIHlldCkuIElmLCBmb3IgZXhhbXBsZSwgYSAuZnJvbVRvKCkgdHdlZW4gd2l0aCBhIHN0YWdnZXIgKHdoaWNoIGNyZWF0ZXMgYW4gaW50ZXJuYWwgdGltZWxpbmUpIGdldHMgcmV2ZXJ0ZWQgQkVGT1JFIHNvbWUgb2YgaXRzIGNoaWxkIHR3ZWVucyByZW5kZXIgZm9yIHRoZSBmaXJzdCB0aW1lLCBpdCBtYXkgbm90IHByb3Blcmx5IHRyaWdnZXIgdGhlbSB0byByZXZlcnQuXG5cbiAgICAgICAgICAgIGlmICh0aW1lICE9PSB0aGlzLl90aW1lIHx8ICF0aGlzLl90cyAmJiAhcHJldlBhdXNlZCkge1xuICAgICAgICAgICAgICAvL2luIGNhc2UgYSB0d2VlbiBwYXVzZXMgb3Igc2Vla3MgdGhlIHRpbWVsaW5lIHdoZW4gcmVuZGVyaW5nLCBsaWtlIGluc2lkZSBvZiBhbiBvblVwZGF0ZS9vbkNvbXBsZXRlXG4gICAgICAgICAgICAgIHBhdXNlVHdlZW4gPSAwO1xuICAgICAgICAgICAgICBuZXh0ICYmICh0VGltZSArPSB0aGlzLl96VGltZSA9IGFkanVzdGVkVGltZSA/IC1fdGlueU51bSA6IF90aW55TnVtKTsgLy8gaXQgZGlkbid0IGZpbmlzaCByZW5kZXJpbmcsIHNvIGFkanVzdCB6VGltZSBzbyB0aGF0IHNvIHRoYXQgdGhlIG5leHQgdGltZSByZW5kZXIoKSBpcyBjYWxsZWQgaXQnbGwgYmUgZm9yY2VkICh0byByZW5kZXIgYW55IHJlbWFpbmluZyBjaGlsZHJlbilcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGlsZCA9IG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhdXNlVHdlZW4gJiYgIXN1cHByZXNzRXZlbnRzKSB7XG4gICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgICAgcGF1c2VUd2Vlbi5yZW5kZXIodGltZSA+PSBwcmV2VGltZSA/IDAgOiAtX3RpbnlOdW0pLl96VGltZSA9IHRpbWUgPj0gcHJldlRpbWUgPyAxIDogLTE7XG5cbiAgICAgICAgaWYgKHRoaXMuX3RzKSB7XG4gICAgICAgICAgLy90aGUgY2FsbGJhY2sgcmVzdW1lZCBwbGF5YmFjayEgU28gc2luY2Ugd2UgbWF5IGhhdmUgaGVsZCBiYWNrIHRoZSBwbGF5aGVhZCBkdWUgdG8gd2hlcmUgdGhlIHBhdXNlIGlzIHBvc2l0aW9uZWQsIGdvIGFoZWFkIGFuZCBqdW1wIHRvIHdoZXJlIGl0J3MgU1VQUE9TRUQgdG8gYmUgKGlmIG5vIHBhdXNlIGhhcHBlbmVkKS5cbiAgICAgICAgICB0aGlzLl9zdGFydCA9IHByZXZTdGFydDsgLy9pZiB0aGUgcGF1c2Ugd2FzIGF0IGFuIGVhcmxpZXIgdGltZSBhbmQgdGhlIHVzZXIgcmVzdW1lZCBpbiB0aGUgY2FsbGJhY2ssIGl0IGNvdWxkIHJlcG9zaXRpb24gdGhlIHRpbWVsaW5lIChjaGFuZ2luZyBpdHMgc3RhcnRUaW1lKSwgdGhyb3dpbmcgdGhpbmdzIG9mZiBzbGlnaHRseSwgc28gd2UgbWFrZSBzdXJlIHRoZSBfc3RhcnQgZG9lc24ndCBzaGlmdC5cblxuICAgICAgICAgIF9zZXRFbmQodGhpcyk7XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXIodG90YWxUaW1lLCBzdXBwcmVzc0V2ZW50cywgZm9yY2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX29uVXBkYXRlICYmICFzdXBwcmVzc0V2ZW50cyAmJiBfY2FsbGJhY2sodGhpcywgXCJvblVwZGF0ZVwiLCB0cnVlKTtcbiAgICAgIGlmICh0VGltZSA9PT0gdER1ciAmJiB0aGlzLl90VGltZSA+PSB0aGlzLnRvdGFsRHVyYXRpb24oKSB8fCAhdFRpbWUgJiYgcHJldlRpbWUpIGlmIChwcmV2U3RhcnQgPT09IHRoaXMuX3N0YXJ0IHx8IE1hdGguYWJzKHRpbWVTY2FsZSkgIT09IE1hdGguYWJzKHRoaXMuX3RzKSkgaWYgKCF0aGlzLl9sb2NrKSB7XG4gICAgICAgIC8vIHJlbWVtYmVyLCBhIGNoaWxkJ3MgY2FsbGJhY2sgbWF5IGFsdGVyIHRoaXMgdGltZWxpbmUncyBwbGF5aGVhZCBvciB0aW1lU2NhbGUgd2hpY2ggaXMgd2h5IHdlIG5lZWQgdG8gYWRkIHNvbWUgb2YgdGhlc2UgY2hlY2tzLlxuICAgICAgICAodG90YWxUaW1lIHx8ICFkdXIpICYmICh0VGltZSA9PT0gdER1ciAmJiB0aGlzLl90cyA+IDAgfHwgIXRUaW1lICYmIHRoaXMuX3RzIDwgMCkgJiYgX3JlbW92ZUZyb21QYXJlbnQodGhpcywgMSk7IC8vIGRvbid0IHJlbW92ZSBpZiB0aGUgdGltZWxpbmUgaXMgcmV2ZXJzZWQgYW5kIHRoZSBwbGF5aGVhZCBpc24ndCBhdCAwLCBvdGhlcndpc2UgdGwucHJvZ3Jlc3MoMSkucmV2ZXJzZSgpIHdvbid0IHdvcmsuIE9ubHkgcmVtb3ZlIGlmIHRoZSBwbGF5aGVhZCBpcyBhdCB0aGUgZW5kIGFuZCB0aW1lU2NhbGUgaXMgcG9zaXRpdmUsIG9yIGlmIHRoZSBwbGF5aGVhZCBpcyBhdCAwIGFuZCB0aGUgdGltZVNjYWxlIGlzIG5lZ2F0aXZlLlxuXG4gICAgICAgIGlmICghc3VwcHJlc3NFdmVudHMgJiYgISh0b3RhbFRpbWUgPCAwICYmICFwcmV2VGltZSkgJiYgKHRUaW1lIHx8IHByZXZUaW1lIHx8ICF0RHVyKSkge1xuICAgICAgICAgIF9jYWxsYmFjayh0aGlzLCB0VGltZSA9PT0gdER1ciAmJiB0b3RhbFRpbWUgPj0gMCA/IFwib25Db21wbGV0ZVwiIDogXCJvblJldmVyc2VDb21wbGV0ZVwiLCB0cnVlKTtcblxuICAgICAgICAgIHRoaXMuX3Byb20gJiYgISh0VGltZSA8IHREdXIgJiYgdGhpcy50aW1lU2NhbGUoKSA+IDApICYmIHRoaXMuX3Byb20oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90bzIuYWRkID0gZnVuY3Rpb24gYWRkKGNoaWxkLCBwb3NpdGlvbikge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgX2lzTnVtYmVyKHBvc2l0aW9uKSB8fCAocG9zaXRpb24gPSBfcGFyc2VQb3NpdGlvbih0aGlzLCBwb3NpdGlvbiwgY2hpbGQpKTtcblxuICAgIGlmICghKGNoaWxkIGluc3RhbmNlb2YgQW5pbWF0aW9uKSkge1xuICAgICAgaWYgKF9pc0FycmF5KGNoaWxkKSkge1xuICAgICAgICBjaGlsZC5mb3JFYWNoKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLmFkZChvYmosIHBvc2l0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBpZiAoX2lzU3RyaW5nKGNoaWxkKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRMYWJlbChjaGlsZCwgcG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoX2lzRnVuY3Rpb24oY2hpbGQpKSB7XG4gICAgICAgIGNoaWxkID0gVHdlZW4uZGVsYXllZENhbGwoMCwgY2hpbGQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMgIT09IGNoaWxkID8gX2FkZFRvVGltZWxpbmUodGhpcywgY2hpbGQsIHBvc2l0aW9uKSA6IHRoaXM7IC8vZG9uJ3QgYWxsb3cgYSB0aW1lbGluZSB0byBiZSBhZGRlZCB0byBpdHNlbGYgYXMgYSBjaGlsZCFcbiAgfTtcblxuICBfcHJvdG8yLmdldENoaWxkcmVuID0gZnVuY3Rpb24gZ2V0Q2hpbGRyZW4obmVzdGVkLCB0d2VlbnMsIHRpbWVsaW5lcywgaWdub3JlQmVmb3JlVGltZSkge1xuICAgIGlmIChuZXN0ZWQgPT09IHZvaWQgMCkge1xuICAgICAgbmVzdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHdlZW5zID09PSB2b2lkIDApIHtcbiAgICAgIHR3ZWVucyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRpbWVsaW5lcyA9PT0gdm9pZCAwKSB7XG4gICAgICB0aW1lbGluZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpZ25vcmVCZWZvcmVUaW1lID09PSB2b2lkIDApIHtcbiAgICAgIGlnbm9yZUJlZm9yZVRpbWUgPSAtX2JpZ051bTtcbiAgICB9XG5cbiAgICB2YXIgYSA9IFtdLFxuICAgICAgICBjaGlsZCA9IHRoaXMuX2ZpcnN0O1xuXG4gICAgd2hpbGUgKGNoaWxkKSB7XG4gICAgICBpZiAoY2hpbGQuX3N0YXJ0ID49IGlnbm9yZUJlZm9yZVRpbWUpIHtcbiAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgVHdlZW4pIHtcbiAgICAgICAgICB0d2VlbnMgJiYgYS5wdXNoKGNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aW1lbGluZXMgJiYgYS5wdXNoKGNoaWxkKTtcbiAgICAgICAgICBuZXN0ZWQgJiYgYS5wdXNoLmFwcGx5KGEsIGNoaWxkLmdldENoaWxkcmVuKHRydWUsIHR3ZWVucywgdGltZWxpbmVzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5fbmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfTtcblxuICBfcHJvdG8yLmdldEJ5SWQgPSBmdW5jdGlvbiBnZXRCeUlkKGlkKSB7XG4gICAgdmFyIGFuaW1hdGlvbnMgPSB0aGlzLmdldENoaWxkcmVuKDEsIDEsIDEpLFxuICAgICAgICBpID0gYW5pbWF0aW9ucy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBpZiAoYW5pbWF0aW9uc1tpXS52YXJzLmlkID09PSBpZCkge1xuICAgICAgICByZXR1cm4gYW5pbWF0aW9uc1tpXTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvMi5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoY2hpbGQpIHtcbiAgICBpZiAoX2lzU3RyaW5nKGNoaWxkKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlTGFiZWwoY2hpbGQpO1xuICAgIH1cblxuICAgIGlmIChfaXNGdW5jdGlvbihjaGlsZCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmtpbGxUd2VlbnNPZihjaGlsZCk7XG4gICAgfVxuXG4gICAgX3JlbW92ZUxpbmtlZExpc3RJdGVtKHRoaXMsIGNoaWxkKTtcblxuICAgIGlmIChjaGlsZCA9PT0gdGhpcy5fcmVjZW50KSB7XG4gICAgICB0aGlzLl9yZWNlbnQgPSB0aGlzLl9sYXN0O1xuICAgIH1cblxuICAgIHJldHVybiBfdW5jYWNoZSh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8yLnRvdGFsVGltZSA9IGZ1bmN0aW9uIHRvdGFsVGltZShfdG90YWxUaW1lMiwgc3VwcHJlc3NFdmVudHMpIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl90VGltZTtcbiAgICB9XG5cbiAgICB0aGlzLl9mb3JjaW5nID0gMTtcblxuICAgIGlmICghdGhpcy5fZHAgJiYgdGhpcy5fdHMpIHtcbiAgICAgIC8vc3BlY2lhbCBjYXNlIGZvciB0aGUgZ2xvYmFsIHRpbWVsaW5lIChvciBhbnkgb3RoZXIgdGhhdCBoYXMgbm8gcGFyZW50IG9yIGRldGFjaGVkIHBhcmVudCkuXG4gICAgICB0aGlzLl9zdGFydCA9IF9yb3VuZFByZWNpc2UoX3RpY2tlci50aW1lIC0gKHRoaXMuX3RzID4gMCA/IF90b3RhbFRpbWUyIC8gdGhpcy5fdHMgOiAodGhpcy50b3RhbER1cmF0aW9uKCkgLSBfdG90YWxUaW1lMikgLyAtdGhpcy5fdHMpKTtcbiAgICB9XG5cbiAgICBfQW5pbWF0aW9uLnByb3RvdHlwZS50b3RhbFRpbWUuY2FsbCh0aGlzLCBfdG90YWxUaW1lMiwgc3VwcHJlc3NFdmVudHMpO1xuXG4gICAgdGhpcy5fZm9yY2luZyA9IDA7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvMi5hZGRMYWJlbCA9IGZ1bmN0aW9uIGFkZExhYmVsKGxhYmVsLCBwb3NpdGlvbikge1xuICAgIHRoaXMubGFiZWxzW2xhYmVsXSA9IF9wYXJzZVBvc2l0aW9uKHRoaXMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8yLnJlbW92ZUxhYmVsID0gZnVuY3Rpb24gcmVtb3ZlTGFiZWwobGFiZWwpIHtcbiAgICBkZWxldGUgdGhpcy5sYWJlbHNbbGFiZWxdO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90bzIuYWRkUGF1c2UgPSBmdW5jdGlvbiBhZGRQYXVzZShwb3NpdGlvbiwgY2FsbGJhY2ssIHBhcmFtcykge1xuICAgIHZhciB0ID0gVHdlZW4uZGVsYXllZENhbGwoMCwgY2FsbGJhY2sgfHwgX2VtcHR5RnVuYywgcGFyYW1zKTtcbiAgICB0LmRhdGEgPSBcImlzUGF1c2VcIjtcbiAgICB0aGlzLl9oYXNQYXVzZSA9IDE7XG4gICAgcmV0dXJuIF9hZGRUb1RpbWVsaW5lKHRoaXMsIHQsIF9wYXJzZVBvc2l0aW9uKHRoaXMsIHBvc2l0aW9uKSk7XG4gIH07XG5cbiAgX3Byb3RvMi5yZW1vdmVQYXVzZSA9IGZ1bmN0aW9uIHJlbW92ZVBhdXNlKHBvc2l0aW9uKSB7XG4gICAgdmFyIGNoaWxkID0gdGhpcy5fZmlyc3Q7XG4gICAgcG9zaXRpb24gPSBfcGFyc2VQb3NpdGlvbih0aGlzLCBwb3NpdGlvbik7XG5cbiAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgIGlmIChjaGlsZC5fc3RhcnQgPT09IHBvc2l0aW9uICYmIGNoaWxkLmRhdGEgPT09IFwiaXNQYXVzZVwiKSB7XG4gICAgICAgIF9yZW1vdmVGcm9tUGFyZW50KGNoaWxkKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5fbmV4dDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvMi5raWxsVHdlZW5zT2YgPSBmdW5jdGlvbiBraWxsVHdlZW5zT2YodGFyZ2V0cywgcHJvcHMsIG9ubHlBY3RpdmUpIHtcbiAgICB2YXIgdHdlZW5zID0gdGhpcy5nZXRUd2VlbnNPZih0YXJnZXRzLCBvbmx5QWN0aXZlKSxcbiAgICAgICAgaSA9IHR3ZWVucy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBfb3ZlcndyaXRpbmdUd2VlbiAhPT0gdHdlZW5zW2ldICYmIHR3ZWVuc1tpXS5raWxsKHRhcmdldHMsIHByb3BzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8yLmdldFR3ZWVuc09mID0gZnVuY3Rpb24gZ2V0VHdlZW5zT2YodGFyZ2V0cywgb25seUFjdGl2ZSkge1xuICAgIHZhciBhID0gW10sXG4gICAgICAgIHBhcnNlZFRhcmdldHMgPSB0b0FycmF5KHRhcmdldHMpLFxuICAgICAgICBjaGlsZCA9IHRoaXMuX2ZpcnN0LFxuICAgICAgICBpc0dsb2JhbFRpbWUgPSBfaXNOdW1iZXIob25seUFjdGl2ZSksXG4gICAgICAgIC8vIGEgbnVtYmVyIGlzIGludGVycHJldGVkIGFzIGEgZ2xvYmFsIHRpbWUuIElmIHRoZSBhbmltYXRpb24gc3BhbnNcbiAgICBjaGlsZHJlbjtcblxuICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgVHdlZW4pIHtcbiAgICAgICAgaWYgKF9hcnJheUNvbnRhaW5zQW55KGNoaWxkLl90YXJnZXRzLCBwYXJzZWRUYXJnZXRzKSAmJiAoaXNHbG9iYWxUaW1lID8gKCFfb3ZlcndyaXRpbmdUd2VlbiB8fCBjaGlsZC5faW5pdHRlZCAmJiBjaGlsZC5fdHMpICYmIGNoaWxkLmdsb2JhbFRpbWUoMCkgPD0gb25seUFjdGl2ZSAmJiBjaGlsZC5nbG9iYWxUaW1lKGNoaWxkLnRvdGFsRHVyYXRpb24oKSkgPiBvbmx5QWN0aXZlIDogIW9ubHlBY3RpdmUgfHwgY2hpbGQuaXNBY3RpdmUoKSkpIHtcbiAgICAgICAgICAvLyBub3RlOiBpZiB0aGlzIGlzIGZvciBvdmVyd3JpdGluZywgaXQgc2hvdWxkIG9ubHkgYmUgZm9yIHR3ZWVucyB0aGF0IGFyZW4ndCBwYXVzZWQgYW5kIGFyZSBpbml0dGVkLlxuICAgICAgICAgIGEucHVzaChjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKGNoaWxkcmVuID0gY2hpbGQuZ2V0VHdlZW5zT2YocGFyc2VkVGFyZ2V0cywgb25seUFjdGl2ZSkpLmxlbmd0aCkge1xuICAgICAgICBhLnB1c2guYXBwbHkoYSwgY2hpbGRyZW4pO1xuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLl9uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBhO1xuICB9IC8vIHBvdGVudGlhbCBmdXR1cmUgZmVhdHVyZSAtIHRhcmdldHMoKSBvbiB0aW1lbGluZXNcbiAgLy8gdGFyZ2V0cygpIHtcbiAgLy8gXHRsZXQgcmVzdWx0ID0gW107XG4gIC8vIFx0dGhpcy5nZXRDaGlsZHJlbih0cnVlLCB0cnVlLCBmYWxzZSkuZm9yRWFjaCh0ID0+IHJlc3VsdC5wdXNoKC4uLnQudGFyZ2V0cygpKSk7XG4gIC8vIFx0cmV0dXJuIHJlc3VsdC5maWx0ZXIoKHYsIGkpID0+IHJlc3VsdC5pbmRleE9mKHYpID09PSBpKTtcbiAgLy8gfVxuICA7XG5cbiAgX3Byb3RvMi50d2VlblRvID0gZnVuY3Rpb24gdHdlZW5Ubyhwb3NpdGlvbiwgdmFycykge1xuICAgIHZhcnMgPSB2YXJzIHx8IHt9O1xuXG4gICAgdmFyIHRsID0gdGhpcyxcbiAgICAgICAgZW5kVGltZSA9IF9wYXJzZVBvc2l0aW9uKHRsLCBwb3NpdGlvbiksXG4gICAgICAgIF92YXJzID0gdmFycyxcbiAgICAgICAgc3RhcnRBdCA9IF92YXJzLnN0YXJ0QXQsXG4gICAgICAgIF9vblN0YXJ0ID0gX3ZhcnMub25TdGFydCxcbiAgICAgICAgb25TdGFydFBhcmFtcyA9IF92YXJzLm9uU3RhcnRQYXJhbXMsXG4gICAgICAgIGltbWVkaWF0ZVJlbmRlciA9IF92YXJzLmltbWVkaWF0ZVJlbmRlcixcbiAgICAgICAgaW5pdHRlZCxcbiAgICAgICAgdHdlZW4gPSBUd2Vlbi50byh0bCwgX3NldERlZmF1bHRzKHtcbiAgICAgIGVhc2U6IHZhcnMuZWFzZSB8fCBcIm5vbmVcIixcbiAgICAgIGxhenk6IGZhbHNlLFxuICAgICAgaW1tZWRpYXRlUmVuZGVyOiBmYWxzZSxcbiAgICAgIHRpbWU6IGVuZFRpbWUsXG4gICAgICBvdmVyd3JpdGU6IFwiYXV0b1wiLFxuICAgICAgZHVyYXRpb246IHZhcnMuZHVyYXRpb24gfHwgTWF0aC5hYnMoKGVuZFRpbWUgLSAoc3RhcnRBdCAmJiBcInRpbWVcIiBpbiBzdGFydEF0ID8gc3RhcnRBdC50aW1lIDogdGwuX3RpbWUpKSAvIHRsLnRpbWVTY2FsZSgpKSB8fCBfdGlueU51bSxcbiAgICAgIG9uU3RhcnQ6IGZ1bmN0aW9uIG9uU3RhcnQoKSB7XG4gICAgICAgIHRsLnBhdXNlKCk7XG5cbiAgICAgICAgaWYgKCFpbml0dGVkKSB7XG4gICAgICAgICAgdmFyIGR1cmF0aW9uID0gdmFycy5kdXJhdGlvbiB8fCBNYXRoLmFicygoZW5kVGltZSAtIChzdGFydEF0ICYmIFwidGltZVwiIGluIHN0YXJ0QXQgPyBzdGFydEF0LnRpbWUgOiB0bC5fdGltZSkpIC8gdGwudGltZVNjYWxlKCkpO1xuICAgICAgICAgIHR3ZWVuLl9kdXIgIT09IGR1cmF0aW9uICYmIF9zZXREdXJhdGlvbih0d2VlbiwgZHVyYXRpb24sIDAsIDEpLnJlbmRlcih0d2Vlbi5fdGltZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgaW5pdHRlZCA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBfb25TdGFydCAmJiBfb25TdGFydC5hcHBseSh0d2Vlbiwgb25TdGFydFBhcmFtcyB8fCBbXSk7IC8vaW4gY2FzZSB0aGUgdXNlciBoYWQgYW4gb25TdGFydCBpbiB0aGUgdmFycyAtIHdlIGRvbid0IHdhbnQgdG8gb3ZlcndyaXRlIGl0LlxuICAgICAgfVxuICAgIH0sIHZhcnMpKTtcblxuICAgIHJldHVybiBpbW1lZGlhdGVSZW5kZXIgPyB0d2Vlbi5yZW5kZXIoMCkgOiB0d2VlbjtcbiAgfTtcblxuICBfcHJvdG8yLnR3ZWVuRnJvbVRvID0gZnVuY3Rpb24gdHdlZW5Gcm9tVG8oZnJvbVBvc2l0aW9uLCB0b1Bvc2l0aW9uLCB2YXJzKSB7XG4gICAgcmV0dXJuIHRoaXMudHdlZW5Ubyh0b1Bvc2l0aW9uLCBfc2V0RGVmYXVsdHMoe1xuICAgICAgc3RhcnRBdDoge1xuICAgICAgICB0aW1lOiBfcGFyc2VQb3NpdGlvbih0aGlzLCBmcm9tUG9zaXRpb24pXG4gICAgICB9XG4gICAgfSwgdmFycykpO1xuICB9O1xuXG4gIF9wcm90bzIucmVjZW50ID0gZnVuY3Rpb24gcmVjZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWNlbnQ7XG4gIH07XG5cbiAgX3Byb3RvMi5uZXh0TGFiZWwgPSBmdW5jdGlvbiBuZXh0TGFiZWwoYWZ0ZXJUaW1lKSB7XG4gICAgaWYgKGFmdGVyVGltZSA9PT0gdm9pZCAwKSB7XG4gICAgICBhZnRlclRpbWUgPSB0aGlzLl90aW1lO1xuICAgIH1cblxuICAgIHJldHVybiBfZ2V0TGFiZWxJbkRpcmVjdGlvbih0aGlzLCBfcGFyc2VQb3NpdGlvbih0aGlzLCBhZnRlclRpbWUpKTtcbiAgfTtcblxuICBfcHJvdG8yLnByZXZpb3VzTGFiZWwgPSBmdW5jdGlvbiBwcmV2aW91c0xhYmVsKGJlZm9yZVRpbWUpIHtcbiAgICBpZiAoYmVmb3JlVGltZSA9PT0gdm9pZCAwKSB7XG4gICAgICBiZWZvcmVUaW1lID0gdGhpcy5fdGltZTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2dldExhYmVsSW5EaXJlY3Rpb24odGhpcywgX3BhcnNlUG9zaXRpb24odGhpcywgYmVmb3JlVGltZSksIDEpO1xuICB9O1xuXG4gIF9wcm90bzIuY3VycmVudExhYmVsID0gZnVuY3Rpb24gY3VycmVudExhYmVsKHZhbHVlKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyB0aGlzLnNlZWsodmFsdWUsIHRydWUpIDogdGhpcy5wcmV2aW91c0xhYmVsKHRoaXMuX3RpbWUgKyBfdGlueU51bSk7XG4gIH07XG5cbiAgX3Byb3RvMi5zaGlmdENoaWxkcmVuID0gZnVuY3Rpb24gc2hpZnRDaGlsZHJlbihhbW91bnQsIGFkanVzdExhYmVscywgaWdub3JlQmVmb3JlVGltZSkge1xuICAgIGlmIChpZ25vcmVCZWZvcmVUaW1lID09PSB2b2lkIDApIHtcbiAgICAgIGlnbm9yZUJlZm9yZVRpbWUgPSAwO1xuICAgIH1cblxuICAgIHZhciBjaGlsZCA9IHRoaXMuX2ZpcnN0LFxuICAgICAgICBsYWJlbHMgPSB0aGlzLmxhYmVscyxcbiAgICAgICAgcDtcblxuICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgaWYgKGNoaWxkLl9zdGFydCA+PSBpZ25vcmVCZWZvcmVUaW1lKSB7XG4gICAgICAgIGNoaWxkLl9zdGFydCArPSBhbW91bnQ7XG4gICAgICAgIGNoaWxkLl9lbmQgKz0gYW1vdW50O1xuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLl9uZXh0O1xuICAgIH1cblxuICAgIGlmIChhZGp1c3RMYWJlbHMpIHtcbiAgICAgIGZvciAocCBpbiBsYWJlbHMpIHtcbiAgICAgICAgaWYgKGxhYmVsc1twXSA+PSBpZ25vcmVCZWZvcmVUaW1lKSB7XG4gICAgICAgICAgbGFiZWxzW3BdICs9IGFtb3VudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBfdW5jYWNoZSh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8yLmludmFsaWRhdGUgPSBmdW5jdGlvbiBpbnZhbGlkYXRlKHNvZnQpIHtcbiAgICB2YXIgY2hpbGQgPSB0aGlzLl9maXJzdDtcbiAgICB0aGlzLl9sb2NrID0gMDtcblxuICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgY2hpbGQuaW52YWxpZGF0ZShzb2Z0KTtcbiAgICAgIGNoaWxkID0gY2hpbGQuX25leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BbmltYXRpb24ucHJvdG90eXBlLmludmFsaWRhdGUuY2FsbCh0aGlzLCBzb2Z0KTtcbiAgfTtcblxuICBfcHJvdG8yLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoaW5jbHVkZUxhYmVscykge1xuICAgIGlmIChpbmNsdWRlTGFiZWxzID09PSB2b2lkIDApIHtcbiAgICAgIGluY2x1ZGVMYWJlbHMgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBjaGlsZCA9IHRoaXMuX2ZpcnN0LFxuICAgICAgICBuZXh0O1xuXG4gICAgd2hpbGUgKGNoaWxkKSB7XG4gICAgICBuZXh0ID0gY2hpbGQuX25leHQ7XG4gICAgICB0aGlzLnJlbW92ZShjaGlsZCk7XG4gICAgICBjaGlsZCA9IG5leHQ7XG4gICAgfVxuXG4gICAgdGhpcy5fZHAgJiYgKHRoaXMuX3RpbWUgPSB0aGlzLl90VGltZSA9IHRoaXMuX3BUaW1lID0gMCk7XG4gICAgaW5jbHVkZUxhYmVscyAmJiAodGhpcy5sYWJlbHMgPSB7fSk7XG4gICAgcmV0dXJuIF91bmNhY2hlKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90bzIudG90YWxEdXJhdGlvbiA9IGZ1bmN0aW9uIHRvdGFsRHVyYXRpb24odmFsdWUpIHtcbiAgICB2YXIgbWF4ID0gMCxcbiAgICAgICAgc2VsZiA9IHRoaXMsXG4gICAgICAgIGNoaWxkID0gc2VsZi5fbGFzdCxcbiAgICAgICAgcHJldlN0YXJ0ID0gX2JpZ051bSxcbiAgICAgICAgcHJldixcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHBhcmVudDtcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gc2VsZi50aW1lU2NhbGUoKHNlbGYuX3JlcGVhdCA8IDAgPyBzZWxmLmR1cmF0aW9uKCkgOiBzZWxmLnRvdGFsRHVyYXRpb24oKSkgLyAoc2VsZi5yZXZlcnNlZCgpID8gLXZhbHVlIDogdmFsdWUpKTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZi5fZGlydHkpIHtcbiAgICAgIHBhcmVudCA9IHNlbGYucGFyZW50O1xuXG4gICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgcHJldiA9IGNoaWxkLl9wcmV2OyAvL3JlY29yZCBpdCBoZXJlIGluIGNhc2UgdGhlIHR3ZWVuIGNoYW5nZXMgcG9zaXRpb24gaW4gdGhlIHNlcXVlbmNlLi4uXG5cbiAgICAgICAgY2hpbGQuX2RpcnR5ICYmIGNoaWxkLnRvdGFsRHVyYXRpb24oKTsgLy9jb3VsZCBjaGFuZ2UgdGhlIHR3ZWVuLl9zdGFydFRpbWUsIHNvIG1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uJ3MgY2FjaGUgaXMgY2xlYW4gYmVmb3JlIGFuYWx5emluZyBpdC5cblxuICAgICAgICBzdGFydCA9IGNoaWxkLl9zdGFydDtcblxuICAgICAgICBpZiAoc3RhcnQgPiBwcmV2U3RhcnQgJiYgc2VsZi5fc29ydCAmJiBjaGlsZC5fdHMgJiYgIXNlbGYuX2xvY2spIHtcbiAgICAgICAgICAvL2luIGNhc2Ugb25lIG9mIHRoZSB0d2VlbnMgc2hpZnRlZCBvdXQgb2Ygb3JkZXIsIGl0IG5lZWRzIHRvIGJlIHJlLWluc2VydGVkIGludG8gdGhlIGNvcnJlY3QgcG9zaXRpb24gaW4gdGhlIHNlcXVlbmNlXG4gICAgICAgICAgc2VsZi5fbG9jayA9IDE7IC8vcHJldmVudCBlbmRsZXNzIHJlY3Vyc2l2ZSBjYWxscyAtIHRoZXJlIGFyZSBtZXRob2RzIHRoYXQgZ2V0IHRyaWdnZXJlZCB0aGF0IGNoZWNrIGR1cmF0aW9uL3RvdGFsRHVyYXRpb24gd2hlbiB3ZSBhZGQoKS5cblxuICAgICAgICAgIF9hZGRUb1RpbWVsaW5lKHNlbGYsIGNoaWxkLCBzdGFydCAtIGNoaWxkLl9kZWxheSwgMSkuX2xvY2sgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZTdGFydCA9IHN0YXJ0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXJ0IDwgMCAmJiBjaGlsZC5fdHMpIHtcbiAgICAgICAgICAvL2NoaWxkcmVuIGFyZW4ndCBhbGxvd2VkIHRvIGhhdmUgbmVnYXRpdmUgc3RhcnRUaW1lcyB1bmxlc3Mgc21vb3RoQ2hpbGRUaW1pbmcgaXMgdHJ1ZSwgc28gYWRqdXN0IGhlcmUgaWYgb25lIGlzIGZvdW5kLlxuICAgICAgICAgIG1heCAtPSBzdGFydDtcblxuICAgICAgICAgIGlmICghcGFyZW50ICYmICFzZWxmLl9kcCB8fCBwYXJlbnQgJiYgcGFyZW50LnNtb290aENoaWxkVGltaW5nKSB7XG4gICAgICAgICAgICBzZWxmLl9zdGFydCArPSBzdGFydCAvIHNlbGYuX3RzO1xuICAgICAgICAgICAgc2VsZi5fdGltZSAtPSBzdGFydDtcbiAgICAgICAgICAgIHNlbGYuX3RUaW1lIC09IHN0YXJ0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNlbGYuc2hpZnRDaGlsZHJlbigtc3RhcnQsIGZhbHNlLCAtMWU5OTkpO1xuICAgICAgICAgIHByZXZTdGFydCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5fZW5kID4gbWF4ICYmIGNoaWxkLl90cyAmJiAobWF4ID0gY2hpbGQuX2VuZCk7XG4gICAgICAgIGNoaWxkID0gcHJldjtcbiAgICAgIH1cblxuICAgICAgX3NldER1cmF0aW9uKHNlbGYsIHNlbGYgPT09IF9nbG9iYWxUaW1lbGluZSAmJiBzZWxmLl90aW1lID4gbWF4ID8gc2VsZi5fdGltZSA6IG1heCwgMSwgMSk7XG5cbiAgICAgIHNlbGYuX2RpcnR5ID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZi5fdER1cjtcbiAgfTtcblxuICBUaW1lbGluZS51cGRhdGVSb290ID0gZnVuY3Rpb24gdXBkYXRlUm9vdCh0aW1lKSB7XG4gICAgaWYgKF9nbG9iYWxUaW1lbGluZS5fdHMpIHtcbiAgICAgIF9sYXp5U2FmZVJlbmRlcihfZ2xvYmFsVGltZWxpbmUsIF9wYXJlbnRUb0NoaWxkVG90YWxUaW1lKHRpbWUsIF9nbG9iYWxUaW1lbGluZSkpO1xuXG4gICAgICBfbGFzdFJlbmRlcmVkRnJhbWUgPSBfdGlja2VyLmZyYW1lO1xuICAgIH1cblxuICAgIGlmIChfdGlja2VyLmZyYW1lID49IF9uZXh0R0NGcmFtZSkge1xuICAgICAgX25leHRHQ0ZyYW1lICs9IF9jb25maWcuYXV0b1NsZWVwIHx8IDEyMDtcbiAgICAgIHZhciBjaGlsZCA9IF9nbG9iYWxUaW1lbGluZS5fZmlyc3Q7XG4gICAgICBpZiAoIWNoaWxkIHx8ICFjaGlsZC5fdHMpIGlmIChfY29uZmlnLmF1dG9TbGVlcCAmJiBfdGlja2VyLl9saXN0ZW5lcnMubGVuZ3RoIDwgMikge1xuICAgICAgICB3aGlsZSAoY2hpbGQgJiYgIWNoaWxkLl90cykge1xuICAgICAgICAgIGNoaWxkID0gY2hpbGQuX25leHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCB8fCBfdGlja2VyLnNsZWVwKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBUaW1lbGluZTtcbn0oQW5pbWF0aW9uKTtcblxuX3NldERlZmF1bHRzKFRpbWVsaW5lLnByb3RvdHlwZSwge1xuICBfbG9jazogMCxcbiAgX2hhc1BhdXNlOiAwLFxuICBfZm9yY2luZzogMFxufSk7XG5cbnZhciBfYWRkQ29tcGxleFN0cmluZ1Byb3BUd2VlbiA9IGZ1bmN0aW9uIF9hZGRDb21wbGV4U3RyaW5nUHJvcFR3ZWVuKHRhcmdldCwgcHJvcCwgc3RhcnQsIGVuZCwgc2V0dGVyLCBzdHJpbmdGaWx0ZXIsIGZ1bmNQYXJhbSkge1xuICAvL25vdGU6IHdlIGNhbGwgX2FkZENvbXBsZXhTdHJpbmdQcm9wVHdlZW4uY2FsbCh0d2Vlbkluc3RhbmNlLi4uKSB0byBlbnN1cmUgdGhhdCBpdCdzIHNjb3BlZCBwcm9wZXJseS4gV2UgbWF5IGNhbGwgaXQgZnJvbSB3aXRoaW4gYSBwbHVnaW4gdG9vLCB0aHVzIFwidGhpc1wiIHdvdWxkIHJlZmVyIHRvIHRoZSBwbHVnaW4uXG4gIHZhciBwdCA9IG5ldyBQcm9wVHdlZW4odGhpcy5fcHQsIHRhcmdldCwgcHJvcCwgMCwgMSwgX3JlbmRlckNvbXBsZXhTdHJpbmcsIG51bGwsIHNldHRlciksXG4gICAgICBpbmRleCA9IDAsXG4gICAgICBtYXRjaEluZGV4ID0gMCxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHN0YXJ0TnVtcyxcbiAgICAgIGNvbG9yLFxuICAgICAgZW5kTnVtLFxuICAgICAgY2h1bmssXG4gICAgICBzdGFydE51bSxcbiAgICAgIGhhc1JhbmRvbSxcbiAgICAgIGE7XG4gIHB0LmIgPSBzdGFydDtcbiAgcHQuZSA9IGVuZDtcbiAgc3RhcnQgKz0gXCJcIjsgLy9lbnN1cmUgdmFsdWVzIGFyZSBzdHJpbmdzXG5cbiAgZW5kICs9IFwiXCI7XG5cbiAgaWYgKGhhc1JhbmRvbSA9IH5lbmQuaW5kZXhPZihcInJhbmRvbShcIikpIHtcbiAgICBlbmQgPSBfcmVwbGFjZVJhbmRvbShlbmQpO1xuICB9XG5cbiAgaWYgKHN0cmluZ0ZpbHRlcikge1xuICAgIGEgPSBbc3RhcnQsIGVuZF07XG4gICAgc3RyaW5nRmlsdGVyKGEsIHRhcmdldCwgcHJvcCk7IC8vcGFzcyBhbiBhcnJheSB3aXRoIHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIHZhbHVlcyBhbmQgbGV0IHRoZSBmaWx0ZXIgZG8gd2hhdGV2ZXIgaXQgbmVlZHMgdG8gdGhlIHZhbHVlcy5cblxuICAgIHN0YXJ0ID0gYVswXTtcbiAgICBlbmQgPSBhWzFdO1xuICB9XG5cbiAgc3RhcnROdW1zID0gc3RhcnQubWF0Y2goX2NvbXBsZXhTdHJpbmdOdW1FeHApIHx8IFtdO1xuXG4gIHdoaWxlIChyZXN1bHQgPSBfY29tcGxleFN0cmluZ051bUV4cC5leGVjKGVuZCkpIHtcbiAgICBlbmROdW0gPSByZXN1bHRbMF07XG4gICAgY2h1bmsgPSBlbmQuc3Vic3RyaW5nKGluZGV4LCByZXN1bHQuaW5kZXgpO1xuXG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICBjb2xvciA9IChjb2xvciArIDEpICUgNTtcbiAgICB9IGVsc2UgaWYgKGNodW5rLnN1YnN0cigtNSkgPT09IFwicmdiYShcIikge1xuICAgICAgY29sb3IgPSAxO1xuICAgIH1cblxuICAgIGlmIChlbmROdW0gIT09IHN0YXJ0TnVtc1ttYXRjaEluZGV4KytdKSB7XG4gICAgICBzdGFydE51bSA9IHBhcnNlRmxvYXQoc3RhcnROdW1zW21hdGNoSW5kZXggLSAxXSkgfHwgMDsgLy90aGVzZSBuZXN0ZWQgUHJvcFR3ZWVucyBhcmUgaGFuZGxlZCBpbiBhIHNwZWNpYWwgd2F5IC0gd2UnbGwgbmV2ZXIgYWN0dWFsbHkgY2FsbCBhIHJlbmRlciBvciBzZXR0ZXIgbWV0aG9kIG9uIHRoZW0uIFdlJ2xsIGp1c3QgbG9vcCB0aHJvdWdoIHRoZW0gaW4gdGhlIHBhcmVudCBjb21wbGV4IHN0cmluZyBQcm9wVHdlZW4ncyByZW5kZXIgbWV0aG9kLlxuXG4gICAgICBwdC5fcHQgPSB7XG4gICAgICAgIF9uZXh0OiBwdC5fcHQsXG4gICAgICAgIHA6IGNodW5rIHx8IG1hdGNoSW5kZXggPT09IDEgPyBjaHVuayA6IFwiLFwiLFxuICAgICAgICAvL25vdGU6IFNWRyBzcGVjIGFsbG93cyBvbWlzc2lvbiBvZiBjb21tYS9zcGFjZSB3aGVuIGEgbmVnYXRpdmUgc2lnbiBpcyB3ZWRnZWQgYmV0d2VlbiB0d28gbnVtYmVycywgbGlrZSAyLjUtNS4zIGluc3RlYWQgb2YgMi41LC01LjMgYnV0IHdoZW4gdHdlZW5pbmcsIHRoZSBuZWdhdGl2ZSB2YWx1ZSBtYXkgc3dpdGNoIHRvIHBvc2l0aXZlLCBzbyB3ZSBpbnNlcnQgdGhlIGNvbW1hIGp1c3QgaW4gY2FzZS5cbiAgICAgICAgczogc3RhcnROdW0sXG4gICAgICAgIGM6IGVuZE51bS5jaGFyQXQoMSkgPT09IFwiPVwiID8gX3BhcnNlUmVsYXRpdmUoc3RhcnROdW0sIGVuZE51bSkgLSBzdGFydE51bSA6IHBhcnNlRmxvYXQoZW5kTnVtKSAtIHN0YXJ0TnVtLFxuICAgICAgICBtOiBjb2xvciAmJiBjb2xvciA8IDQgPyBNYXRoLnJvdW5kIDogMFxuICAgICAgfTtcbiAgICAgIGluZGV4ID0gX2NvbXBsZXhTdHJpbmdOdW1FeHAubGFzdEluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHB0LmMgPSBpbmRleCA8IGVuZC5sZW5ndGggPyBlbmQuc3Vic3RyaW5nKGluZGV4LCBlbmQubGVuZ3RoKSA6IFwiXCI7IC8vd2UgdXNlIHRoZSBcImNcIiBvZiB0aGUgUHJvcFR3ZWVuIHRvIHN0b3JlIHRoZSBmaW5hbCBwYXJ0IG9mIHRoZSBzdHJpbmcgKGFmdGVyIHRoZSBsYXN0IG51bWJlcilcblxuICBwdC5mcCA9IGZ1bmNQYXJhbTtcblxuICBpZiAoX3JlbEV4cC50ZXN0KGVuZCkgfHwgaGFzUmFuZG9tKSB7XG4gICAgcHQuZSA9IDA7IC8vaWYgdGhlIGVuZCBzdHJpbmcgY29udGFpbnMgcmVsYXRpdmUgdmFsdWVzIG9yIGR5bmFtaWMgcmFuZG9tKC4uLikgdmFsdWVzLCBkZWxldGUgdGhlIGVuZCBpdCBzbyB0aGF0IG9uIHRoZSBmaW5hbCByZW5kZXIgd2UgZG9uJ3QgYWN0dWFsbHkgc2V0IGl0IHRvIHRoZSBzdHJpbmcgd2l0aCArPSBvciAtPSBjaGFyYWN0ZXJzIChmb3JjZXMgaXQgdG8gdXNlIHRoZSBjYWxjdWxhdGVkIHZhbHVlKS5cbiAgfVxuXG4gIHRoaXMuX3B0ID0gcHQ7IC8vc3RhcnQgdGhlIGxpbmtlZCBsaXN0IHdpdGggdGhpcyBuZXcgUHJvcFR3ZWVuLiBSZW1lbWJlciwgd2UgY2FsbCBfYWRkQ29tcGxleFN0cmluZ1Byb3BUd2Vlbi5jYWxsKHR3ZWVuSW5zdGFuY2UuLi4pIHRvIGVuc3VyZSB0aGF0IGl0J3Mgc2NvcGVkIHByb3Blcmx5LiBXZSBtYXkgY2FsbCBpdCBmcm9tIHdpdGhpbiBhIHBsdWdpbiB0b28sIHRodXMgXCJ0aGlzXCIgd291bGQgcmVmZXIgdG8gdGhlIHBsdWdpbi5cblxuICByZXR1cm4gcHQ7XG59LFxuICAgIF9hZGRQcm9wVHdlZW4gPSBmdW5jdGlvbiBfYWRkUHJvcFR3ZWVuKHRhcmdldCwgcHJvcCwgc3RhcnQsIGVuZCwgaW5kZXgsIHRhcmdldHMsIG1vZGlmaWVyLCBzdHJpbmdGaWx0ZXIsIGZ1bmNQYXJhbSwgb3B0aW9uYWwpIHtcbiAgX2lzRnVuY3Rpb24oZW5kKSAmJiAoZW5kID0gZW5kKGluZGV4IHx8IDAsIHRhcmdldCwgdGFyZ2V0cykpO1xuICB2YXIgY3VycmVudFZhbHVlID0gdGFyZ2V0W3Byb3BdLFxuICAgICAgcGFyc2VkU3RhcnQgPSBzdGFydCAhPT0gXCJnZXRcIiA/IHN0YXJ0IDogIV9pc0Z1bmN0aW9uKGN1cnJlbnRWYWx1ZSkgPyBjdXJyZW50VmFsdWUgOiBmdW5jUGFyYW0gPyB0YXJnZXRbcHJvcC5pbmRleE9mKFwic2V0XCIpIHx8ICFfaXNGdW5jdGlvbih0YXJnZXRbXCJnZXRcIiArIHByb3Auc3Vic3RyKDMpXSkgPyBwcm9wIDogXCJnZXRcIiArIHByb3Auc3Vic3RyKDMpXShmdW5jUGFyYW0pIDogdGFyZ2V0W3Byb3BdKCksXG4gICAgICBzZXR0ZXIgPSAhX2lzRnVuY3Rpb24oY3VycmVudFZhbHVlKSA/IF9zZXR0ZXJQbGFpbiA6IGZ1bmNQYXJhbSA/IF9zZXR0ZXJGdW5jV2l0aFBhcmFtIDogX3NldHRlckZ1bmMsXG4gICAgICBwdDtcblxuICBpZiAoX2lzU3RyaW5nKGVuZCkpIHtcbiAgICBpZiAofmVuZC5pbmRleE9mKFwicmFuZG9tKFwiKSkge1xuICAgICAgZW5kID0gX3JlcGxhY2VSYW5kb20oZW5kKTtcbiAgICB9XG5cbiAgICBpZiAoZW5kLmNoYXJBdCgxKSA9PT0gXCI9XCIpIHtcbiAgICAgIHB0ID0gX3BhcnNlUmVsYXRpdmUocGFyc2VkU3RhcnQsIGVuZCkgKyAoZ2V0VW5pdChwYXJzZWRTdGFydCkgfHwgMCk7XG5cbiAgICAgIGlmIChwdCB8fCBwdCA9PT0gMCkge1xuICAgICAgICAvLyB0byBhdm9pZCBpc05hTiwgbGlrZSBpZiBzb21lb25lIHBhc3NlcyBpbiBhIHZhbHVlIGxpa2UgXCIhPSB3aGF0ZXZlclwiXG4gICAgICAgIGVuZCA9IHB0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghb3B0aW9uYWwgfHwgcGFyc2VkU3RhcnQgIT09IGVuZCB8fCBfZm9yY2VBbGxQcm9wVHdlZW5zKSB7XG4gICAgaWYgKCFpc05hTihwYXJzZWRTdGFydCAqIGVuZCkgJiYgZW5kICE9PSBcIlwiKSB7XG4gICAgICAvLyBmdW4gZmFjdDogYW55IG51bWJlciBtdWx0aXBsaWVkIGJ5IFwiXCIgaXMgZXZhbHVhdGVkIGFzIHRoZSBudW1iZXIgMCFcbiAgICAgIHB0ID0gbmV3IFByb3BUd2Vlbih0aGlzLl9wdCwgdGFyZ2V0LCBwcm9wLCArcGFyc2VkU3RhcnQgfHwgMCwgZW5kIC0gKHBhcnNlZFN0YXJ0IHx8IDApLCB0eXBlb2YgY3VycmVudFZhbHVlID09PSBcImJvb2xlYW5cIiA/IF9yZW5kZXJCb29sZWFuIDogX3JlbmRlclBsYWluLCAwLCBzZXR0ZXIpO1xuICAgICAgZnVuY1BhcmFtICYmIChwdC5mcCA9IGZ1bmNQYXJhbSk7XG4gICAgICBtb2RpZmllciAmJiBwdC5tb2RpZmllcihtb2RpZmllciwgdGhpcywgdGFyZ2V0KTtcbiAgICAgIHJldHVybiB0aGlzLl9wdCA9IHB0O1xuICAgIH1cblxuICAgICFjdXJyZW50VmFsdWUgJiYgIShwcm9wIGluIHRhcmdldCkgJiYgX21pc3NpbmdQbHVnaW4ocHJvcCwgZW5kKTtcbiAgICByZXR1cm4gX2FkZENvbXBsZXhTdHJpbmdQcm9wVHdlZW4uY2FsbCh0aGlzLCB0YXJnZXQsIHByb3AsIHBhcnNlZFN0YXJ0LCBlbmQsIHNldHRlciwgc3RyaW5nRmlsdGVyIHx8IF9jb25maWcuc3RyaW5nRmlsdGVyLCBmdW5jUGFyYW0pO1xuICB9XG59LFxuICAgIC8vY3JlYXRlcyBhIGNvcHkgb2YgdGhlIHZhcnMgb2JqZWN0IGFuZCBwcm9jZXNzZXMgYW55IGZ1bmN0aW9uLWJhc2VkIHZhbHVlcyAocHV0dGluZyB0aGUgcmVzdWx0aW5nIHZhbHVlcyBkaXJlY3RseSBpbnRvIHRoZSBjb3B5KSBhcyB3ZWxsIGFzIHN0cmluZ3Mgd2l0aCBcInJhbmRvbSgpXCIgaW4gdGhlbS4gSXQgZG9lcyBOT1QgcHJvY2VzcyByZWxhdGl2ZSB2YWx1ZXMuXG5fcHJvY2Vzc1ZhcnMgPSBmdW5jdGlvbiBfcHJvY2Vzc1ZhcnModmFycywgaW5kZXgsIHRhcmdldCwgdGFyZ2V0cywgdHdlZW4pIHtcbiAgX2lzRnVuY3Rpb24odmFycykgJiYgKHZhcnMgPSBfcGFyc2VGdW5jT3JTdHJpbmcodmFycywgdHdlZW4sIGluZGV4LCB0YXJnZXQsIHRhcmdldHMpKTtcblxuICBpZiAoIV9pc09iamVjdCh2YXJzKSB8fCB2YXJzLnN0eWxlICYmIHZhcnMubm9kZVR5cGUgfHwgX2lzQXJyYXkodmFycykgfHwgX2lzVHlwZWRBcnJheSh2YXJzKSkge1xuICAgIHJldHVybiBfaXNTdHJpbmcodmFycykgPyBfcGFyc2VGdW5jT3JTdHJpbmcodmFycywgdHdlZW4sIGluZGV4LCB0YXJnZXQsIHRhcmdldHMpIDogdmFycztcbiAgfVxuXG4gIHZhciBjb3B5ID0ge30sXG4gICAgICBwO1xuXG4gIGZvciAocCBpbiB2YXJzKSB7XG4gICAgY29weVtwXSA9IF9wYXJzZUZ1bmNPclN0cmluZyh2YXJzW3BdLCB0d2VlbiwgaW5kZXgsIHRhcmdldCwgdGFyZ2V0cyk7XG4gIH1cblxuICByZXR1cm4gY29weTtcbn0sXG4gICAgX2NoZWNrUGx1Z2luID0gZnVuY3Rpb24gX2NoZWNrUGx1Z2luKHByb3BlcnR5LCB2YXJzLCB0d2VlbiwgaW5kZXgsIHRhcmdldCwgdGFyZ2V0cykge1xuICB2YXIgcGx1Z2luLCBwdCwgcHRMb29rdXAsIGk7XG5cbiAgaWYgKF9wbHVnaW5zW3Byb3BlcnR5XSAmJiAocGx1Z2luID0gbmV3IF9wbHVnaW5zW3Byb3BlcnR5XSgpKS5pbml0KHRhcmdldCwgcGx1Z2luLnJhd1ZhcnMgPyB2YXJzW3Byb3BlcnR5XSA6IF9wcm9jZXNzVmFycyh2YXJzW3Byb3BlcnR5XSwgaW5kZXgsIHRhcmdldCwgdGFyZ2V0cywgdHdlZW4pLCB0d2VlbiwgaW5kZXgsIHRhcmdldHMpICE9PSBmYWxzZSkge1xuICAgIHR3ZWVuLl9wdCA9IHB0ID0gbmV3IFByb3BUd2Vlbih0d2Vlbi5fcHQsIHRhcmdldCwgcHJvcGVydHksIDAsIDEsIHBsdWdpbi5yZW5kZXIsIHBsdWdpbiwgMCwgcGx1Z2luLnByaW9yaXR5KTtcblxuICAgIGlmICh0d2VlbiAhPT0gX3F1aWNrVHdlZW4pIHtcbiAgICAgIHB0TG9va3VwID0gdHdlZW4uX3B0TG9va3VwW3R3ZWVuLl90YXJnZXRzLmluZGV4T2YodGFyZ2V0KV07IC8vbm90ZTogd2UgY2FuJ3QgdXNlIHR3ZWVuLl9wdExvb2t1cFtpbmRleF0gYmVjYXVzZSBmb3Igc3RhZ2dlcmVkIHR3ZWVucywgdGhlIGluZGV4IGZyb20gdGhlIGZ1bGxUYXJnZXRzIGFycmF5IHdvbid0IG1hdGNoIHdoYXQgaXQgaXMgaW4gZWFjaCBpbmRpdmlkdWFsIHR3ZWVuIHRoYXQgc3Bhd25zIGZyb20gdGhlIHN0YWdnZXIuXG5cbiAgICAgIGkgPSBwbHVnaW4uX3Byb3BzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICBwdExvb2t1cFtwbHVnaW4uX3Byb3BzW2ldXSA9IHB0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwbHVnaW47XG59LFxuICAgIF9vdmVyd3JpdGluZ1R3ZWVuLFxuICAgIC8vc3RvcmUgYSByZWZlcmVuY2UgdGVtcG9yYXJpbHkgc28gd2UgY2FuIGF2b2lkIG92ZXJ3cml0aW5nIGl0c2VsZi5cbl9mb3JjZUFsbFByb3BUd2VlbnMsXG4gICAgX2luaXRUd2VlbiA9IGZ1bmN0aW9uIF9pbml0VHdlZW4odHdlZW4sIHRpbWUsIHRUaW1lKSB7XG4gIHZhciB2YXJzID0gdHdlZW4udmFycyxcbiAgICAgIGVhc2UgPSB2YXJzLmVhc2UsXG4gICAgICBzdGFydEF0ID0gdmFycy5zdGFydEF0LFxuICAgICAgaW1tZWRpYXRlUmVuZGVyID0gdmFycy5pbW1lZGlhdGVSZW5kZXIsXG4gICAgICBsYXp5ID0gdmFycy5sYXp5LFxuICAgICAgb25VcGRhdGUgPSB2YXJzLm9uVXBkYXRlLFxuICAgICAgb25VcGRhdGVQYXJhbXMgPSB2YXJzLm9uVXBkYXRlUGFyYW1zLFxuICAgICAgY2FsbGJhY2tTY29wZSA9IHZhcnMuY2FsbGJhY2tTY29wZSxcbiAgICAgIHJ1bkJhY2t3YXJkcyA9IHZhcnMucnVuQmFja3dhcmRzLFxuICAgICAgeW95b0Vhc2UgPSB2YXJzLnlveW9FYXNlLFxuICAgICAga2V5ZnJhbWVzID0gdmFycy5rZXlmcmFtZXMsXG4gICAgICBhdXRvUmV2ZXJ0ID0gdmFycy5hdXRvUmV2ZXJ0LFxuICAgICAgZHVyID0gdHdlZW4uX2R1cixcbiAgICAgIHByZXZTdGFydEF0ID0gdHdlZW4uX3N0YXJ0QXQsXG4gICAgICB0YXJnZXRzID0gdHdlZW4uX3RhcmdldHMsXG4gICAgICBwYXJlbnQgPSB0d2Vlbi5wYXJlbnQsXG4gICAgICBmdWxsVGFyZ2V0cyA9IHBhcmVudCAmJiBwYXJlbnQuZGF0YSA9PT0gXCJuZXN0ZWRcIiA/IHBhcmVudC52YXJzLnRhcmdldHMgOiB0YXJnZXRzLFxuICAgICAgYXV0b092ZXJ3cml0ZSA9IHR3ZWVuLl9vdmVyd3JpdGUgPT09IFwiYXV0b1wiICYmICFfc3VwcHJlc3NPdmVyd3JpdGVzLFxuICAgICAgdGwgPSB0d2Vlbi50aW1lbGluZSxcbiAgICAgIGNsZWFuVmFycyxcbiAgICAgIGksXG4gICAgICBwLFxuICAgICAgcHQsXG4gICAgICB0YXJnZXQsXG4gICAgICBoYXNQcmlvcml0eSxcbiAgICAgIGdzRGF0YSxcbiAgICAgIGhhcm5lc3MsXG4gICAgICBwbHVnaW4sXG4gICAgICBwdExvb2t1cCxcbiAgICAgIGluZGV4LFxuICAgICAgaGFybmVzc1ZhcnMsXG4gICAgICBvdmVyd3JpdHRlbjtcbiAgdGwgJiYgKCFrZXlmcmFtZXMgfHwgIWVhc2UpICYmIChlYXNlID0gXCJub25lXCIpO1xuICB0d2Vlbi5fZWFzZSA9IF9wYXJzZUVhc2UoZWFzZSwgX2RlZmF1bHRzLmVhc2UpO1xuICB0d2Vlbi5feUVhc2UgPSB5b3lvRWFzZSA/IF9pbnZlcnRFYXNlKF9wYXJzZUVhc2UoeW95b0Vhc2UgPT09IHRydWUgPyBlYXNlIDogeW95b0Vhc2UsIF9kZWZhdWx0cy5lYXNlKSkgOiAwO1xuXG4gIGlmICh5b3lvRWFzZSAmJiB0d2Vlbi5feW95byAmJiAhdHdlZW4uX3JlcGVhdCkge1xuICAgIC8vdGhlcmUgbXVzdCBoYXZlIGJlZW4gYSBwYXJlbnQgdGltZWxpbmUgd2l0aCB5b3lvOnRydWUgdGhhdCBpcyBjdXJyZW50bHkgaW4gaXRzIHlveW8gcGhhc2UsIHNvIGZsaXAgdGhlIGVhc2VzLlxuICAgIHlveW9FYXNlID0gdHdlZW4uX3lFYXNlO1xuICAgIHR3ZWVuLl95RWFzZSA9IHR3ZWVuLl9lYXNlO1xuICAgIHR3ZWVuLl9lYXNlID0geW95b0Vhc2U7XG4gIH1cblxuICB0d2Vlbi5fZnJvbSA9ICF0bCAmJiAhIXZhcnMucnVuQmFja3dhcmRzOyAvL25lc3RlZCB0aW1lbGluZXMgc2hvdWxkIG5ldmVyIHJ1biBiYWNrd2FyZHMgLSB0aGUgYmFja3dhcmRzLW5lc3MgaXMgaW4gdGhlIGNoaWxkIHR3ZWVucy5cblxuICBpZiAoIXRsIHx8IGtleWZyYW1lcyAmJiAhdmFycy5zdGFnZ2VyKSB7XG4gICAgLy9pZiB0aGVyZSdzIGFuIGludGVybmFsIHRpbWVsaW5lLCBza2lwIGFsbCB0aGUgcGFyc2luZyBiZWNhdXNlIHdlIHBhc3NlZCB0aGF0IHRhc2sgZG93biB0aGUgY2hhaW4uXG4gICAgaGFybmVzcyA9IHRhcmdldHNbMF0gPyBfZ2V0Q2FjaGUodGFyZ2V0c1swXSkuaGFybmVzcyA6IDA7XG4gICAgaGFybmVzc1ZhcnMgPSBoYXJuZXNzICYmIHZhcnNbaGFybmVzcy5wcm9wXTsgLy9zb21lb25lIG1heSBuZWVkIHRvIHNwZWNpZnkgQ1NTLXNwZWNpZmljIHZhbHVlcyBBTkQgbm9uLUNTUyB2YWx1ZXMsIGxpa2UgaWYgdGhlIGVsZW1lbnQgaGFzIGFuIFwieFwiIHByb3BlcnR5IHBsdXMgaXQncyBhIHN0YW5kYXJkIERPTSBlbGVtZW50LiBXZSBhbGxvdyBwZW9wbGUgdG8gZGlzdGluZ3Vpc2ggYnkgd3JhcHBpbmcgcGx1Z2luLXNwZWNpZmljIHN0dWZmIGluIGEgY3NzOnt9IG9iamVjdCBmb3IgZXhhbXBsZS5cblxuICAgIGNsZWFuVmFycyA9IF9jb3B5RXhjbHVkaW5nKHZhcnMsIF9yZXNlcnZlZFByb3BzKTtcblxuICAgIGlmIChwcmV2U3RhcnRBdCkge1xuICAgICAgcHJldlN0YXJ0QXQuX3pUaW1lIDwgMCAmJiBwcmV2U3RhcnRBdC5wcm9ncmVzcygxKTsgLy8gaW4gY2FzZSBpdCdzIGEgbGF6eSBzdGFydEF0IHRoYXQgaGFzbid0IHJlbmRlcmVkIHlldC5cblxuICAgICAgdGltZSA8IDAgJiYgcnVuQmFja3dhcmRzICYmIGltbWVkaWF0ZVJlbmRlciAmJiAhYXV0b1JldmVydCA/IHByZXZTdGFydEF0LnJlbmRlcigtMSwgdHJ1ZSkgOiBwcmV2U3RhcnRBdC5yZXZlcnQocnVuQmFja3dhcmRzICYmIGR1ciA/IF9yZXZlcnRDb25maWdOb0tpbGwgOiBfc3RhcnRBdFJldmVydENvbmZpZyk7IC8vIGlmIGl0J3MgYSBcInN0YXJ0QXRcIiAobm90IFwiZnJvbSgpXCIgb3IgcnVuQmFja3dhcmRzOiB0cnVlKSwgd2Ugb25seSBuZWVkIHRvIGRvIGEgc2hhbGxvdyByZXZlcnQgKGtlZXAgdHJhbnNmb3JtcyBjYWNoZWQgaW4gQ1NTUGx1Z2luKVxuICAgICAgLy8gZG9uJ3QganVzdCBfcmVtb3ZlRnJvbVBhcmVudChwcmV2U3RhcnRBdC5yZW5kZXIoLTEsIHRydWUpKSBiZWNhdXNlIHRoYXQnbGwgbGVhdmUgaW5saW5lIHN0eWxlcy4gV2UncmUgY3JlYXRpbmcgYSBuZXcgX3N0YXJ0QXQgZm9yIFwic3RhcnRBdFwiIHR3ZWVucyB0aGF0IHJlLWNhcHR1cmUgdGhpbmdzIHRvIGVuc3VyZSB0aGF0IGlmIHRoZSBwcmUtdHdlZW4gdmFsdWVzIGNoYW5nZWQgc2luY2UgdGhlIHR3ZWVuIHdhcyBjcmVhdGVkLCB0aGV5J3JlIHJlY29yZGVkLlxuXG4gICAgICBwcmV2U3RhcnRBdC5fbGF6eSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0QXQpIHtcbiAgICAgIF9yZW1vdmVGcm9tUGFyZW50KHR3ZWVuLl9zdGFydEF0ID0gVHdlZW4uc2V0KHRhcmdldHMsIF9zZXREZWZhdWx0cyh7XG4gICAgICAgIGRhdGE6IFwiaXNTdGFydFwiLFxuICAgICAgICBvdmVyd3JpdGU6IGZhbHNlLFxuICAgICAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICAgICAgaW1tZWRpYXRlUmVuZGVyOiB0cnVlLFxuICAgICAgICBsYXp5OiAhcHJldlN0YXJ0QXQgJiYgX2lzTm90RmFsc2UobGF6eSksXG4gICAgICAgIHN0YXJ0QXQ6IG51bGwsXG4gICAgICAgIGRlbGF5OiAwLFxuICAgICAgICBvblVwZGF0ZTogb25VcGRhdGUsXG4gICAgICAgIG9uVXBkYXRlUGFyYW1zOiBvblVwZGF0ZVBhcmFtcyxcbiAgICAgICAgY2FsbGJhY2tTY29wZTogY2FsbGJhY2tTY29wZSxcbiAgICAgICAgc3RhZ2dlcjogMFxuICAgICAgfSwgc3RhcnRBdCkpKTsgLy9jb3B5IHRoZSBwcm9wZXJ0aWVzL3ZhbHVlcyBpbnRvIGEgbmV3IG9iamVjdCB0byBhdm9pZCBjb2xsaXNpb25zLCBsaWtlIHZhciB0byA9IHt4OjB9LCBmcm9tID0ge3g6NTAwfTsgdGltZWxpbmUuZnJvbVRvKGUsIGZyb20sIHRvKS5mcm9tVG8oZSwgdG8sIGZyb20pO1xuXG5cbiAgICAgIHR3ZWVuLl9zdGFydEF0Ll9kcCA9IDA7IC8vIGRvbid0IGFsbG93IGl0IHRvIGdldCBwdXQgYmFjayBpbnRvIHJvb3QgdGltZWxpbmUhIExpa2Ugd2hlbiByZXZlcnQoKSBpcyBjYWxsZWQgYW5kIHRvdGFsVGltZSgpIGdldHMgc2V0LlxuXG4gICAgICB0d2Vlbi5fc3RhcnRBdC5fc2F0ID0gdHdlZW47IC8vIHVzZWQgaW4gZ2xvYmFsVGltZSgpLiBfc2F0IHN0YW5kcyBmb3IgX3N0YXJ0QXRUd2VlblxuXG4gICAgICB0aW1lIDwgMCAmJiAoX3JldmVydGluZyB8fCAhaW1tZWRpYXRlUmVuZGVyICYmICFhdXRvUmV2ZXJ0KSAmJiB0d2Vlbi5fc3RhcnRBdC5yZXZlcnQoX3JldmVydENvbmZpZ05vS2lsbCk7IC8vIHJhcmUgZWRnZSBjYXNlLCBsaWtlIGlmIGEgcmVuZGVyIGlzIGZvcmNlZCBpbiB0aGUgbmVnYXRpdmUgZGlyZWN0aW9uIG9mIGEgbm9uLWluaXR0ZWQgdHdlZW4uXG5cbiAgICAgIGlmIChpbW1lZGlhdGVSZW5kZXIpIHtcbiAgICAgICAgaWYgKGR1ciAmJiB0aW1lIDw9IDAgJiYgdFRpbWUgPD0gMCkge1xuICAgICAgICAgIC8vIGNoZWNrIHRUaW1lIGhlcmUgYmVjYXVzZSBpbiB0aGUgY2FzZSBvZiBhIHlveW8gdHdlZW4gd2hvc2UgcGxheWhlYWQgZ2V0cyBwdXNoZWQgdG8gdGhlIGVuZCBsaWtlIHR3ZWVuLnByb2dyZXNzKDEpLCB3ZSBzaG91bGQgYWxsb3cgaXQgdGhyb3VnaCBzbyB0aGF0IHRoZSBvbkNvbXBsZXRlIGdldHMgZmlyZWQgcHJvcGVybHkuXG4gICAgICAgICAgdGltZSAmJiAodHdlZW4uX3pUaW1lID0gdGltZSk7XG4gICAgICAgICAgcmV0dXJuOyAvL3dlIHNraXAgaW5pdGlhbGl6YXRpb24gaGVyZSBzbyB0aGF0IG92ZXJ3cml0aW5nIGRvZXNuJ3Qgb2NjdXIgdW50aWwgdGhlIHR3ZWVuIGFjdHVhbGx5IGJlZ2lucy4gT3RoZXJ3aXNlLCBpZiB5b3UgY3JlYXRlIHNldmVyYWwgaW1tZWRpYXRlUmVuZGVyOnRydWUgdHdlZW5zIG9mIHRoZSBzYW1lIHRhcmdldC9wcm9wZXJ0aWVzIHRvIGRyb3AgaW50byBhIFRpbWVsaW5lLCB0aGUgbGFzdCBvbmUgY3JlYXRlZCB3b3VsZCBvdmVyd3JpdGUgdGhlIGZpcnN0IG9uZXMgYmVjYXVzZSB0aGV5IGRpZG4ndCBnZXQgcGxhY2VkIGludG8gdGhlIHRpbWVsaW5lIHlldCBiZWZvcmUgdGhlIGZpcnN0IHJlbmRlciBvY2N1cnMgYW5kIGtpY2tzIGluIG92ZXJ3cml0aW5nLlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChydW5CYWNrd2FyZHMgJiYgZHVyKSB7XG4gICAgICAvL2Zyb20oKSB0d2VlbnMgbXVzdCBiZSBoYW5kbGVkIHVuaXF1ZWx5OiB0aGVpciBiZWdpbm5pbmcgdmFsdWVzIG11c3QgYmUgcmVuZGVyZWQgYnV0IHdlIGRvbid0IHdhbnQgb3ZlcndyaXRpbmcgdG8gb2NjdXIgeWV0ICh3aGVuIHRpbWUgaXMgc3RpbGwgMCkuIFdhaXQgdW50aWwgdGhlIHR3ZWVuIGFjdHVhbGx5IGJlZ2lucyBiZWZvcmUgZG9pbmcgYWxsIHRoZSByb3V0aW5lcyBsaWtlIG92ZXJ3cml0aW5nLiBBdCB0aGF0IHRpbWUsIHdlIHNob3VsZCByZW5kZXIgYXQgdGhlIEVORCBvZiB0aGUgdHdlZW4gdG8gZW5zdXJlIHRoYXQgdGhpbmdzIGluaXRpYWxpemUgY29ycmVjdGx5IChyZW1lbWJlciwgZnJvbSgpIHR3ZWVucyBnbyBiYWNrd2FyZHMpXG4gICAgICBpZiAoIXByZXZTdGFydEF0KSB7XG4gICAgICAgIHRpbWUgJiYgKGltbWVkaWF0ZVJlbmRlciA9IGZhbHNlKTsgLy9pbiByYXJlIGNhc2VzIChsaWtlIGlmIGEgZnJvbSgpIHR3ZWVuIHJ1bnMgYW5kIHRoZW4gaXMgaW52YWxpZGF0ZSgpLWVkKSwgaW1tZWRpYXRlUmVuZGVyIGNvdWxkIGJlIHRydWUgYnV0IHRoZSBpbml0aWFsIGZvcmNlZC1yZW5kZXIgZ2V0cyBza2lwcGVkLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gZm9yY2UgdGhlIHJlbmRlciBpbiB0aGlzIGNvbnRleHQgd2hlbiB0aGUgX3RpbWUgaXMgZ3JlYXRlciB0aGFuIDBcblxuICAgICAgICBwID0gX3NldERlZmF1bHRzKHtcbiAgICAgICAgICBvdmVyd3JpdGU6IGZhbHNlLFxuICAgICAgICAgIGRhdGE6IFwiaXNGcm9tU3RhcnRcIixcbiAgICAgICAgICAvL3dlIHRhZyB0aGUgdHdlZW4gd2l0aCBhcyBcImlzRnJvbVN0YXJ0XCIgc28gdGhhdCBpZiBbaW5zaWRlIGEgcGx1Z2luXSB3ZSBuZWVkIHRvIG9ubHkgZG8gc29tZXRoaW5nIGF0IHRoZSB2ZXJ5IEVORCBvZiBhIHR3ZWVuLCB3ZSBoYXZlIGEgd2F5IG9mIGlkZW50aWZ5aW5nIHRoaXMgdHdlZW4gYXMgbWVyZWx5IHRoZSBvbmUgdGhhdCdzIHNldHRpbmcgdGhlIGJlZ2lubmluZyB2YWx1ZXMgZm9yIGEgXCJmcm9tKClcIiB0d2Vlbi4gRm9yIGV4YW1wbGUsIGNsZWFyUHJvcHMgaW4gQ1NTUGx1Z2luIHNob3VsZCBvbmx5IGdldCBhcHBsaWVkIGF0IHRoZSB2ZXJ5IEVORCBvZiBhIHR3ZWVuIGFuZCB3aXRob3V0IHRoaXMgdGFnLCBmcm9tKC4uLntoZWlnaHQ6MTAwLCBjbGVhclByb3BzOlwiaGVpZ2h0XCIsIGRlbGF5OjF9KSB3b3VsZCB3aXBlIHRoZSBoZWlnaHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHdlZW4gYW5kIGFmdGVyIDEgc2Vjb25kLCBpdCdkIGtpY2sgYmFjayBpbi5cbiAgICAgICAgICBsYXp5OiBpbW1lZGlhdGVSZW5kZXIgJiYgIXByZXZTdGFydEF0ICYmIF9pc05vdEZhbHNlKGxhenkpLFxuICAgICAgICAgIGltbWVkaWF0ZVJlbmRlcjogaW1tZWRpYXRlUmVuZGVyLFxuICAgICAgICAgIC8vemVyby1kdXJhdGlvbiB0d2VlbnMgcmVuZGVyIGltbWVkaWF0ZWx5IGJ5IGRlZmF1bHQsIGJ1dCBpZiB3ZSdyZSBub3Qgc3BlY2lmaWNhbGx5IGluc3RydWN0ZWQgdG8gcmVuZGVyIHRoaXMgdHdlZW4gaW1tZWRpYXRlbHksIHdlIHNob3VsZCBza2lwIHRoaXMgYW5kIG1lcmVseSBfaW5pdCgpIHRvIHJlY29yZCB0aGUgc3RhcnRpbmcgdmFsdWVzIChyZW5kZXJpbmcgdGhlbSBpbW1lZGlhdGVseSB3b3VsZCBwdXNoIHRoZW0gdG8gY29tcGxldGlvbiB3aGljaCBpcyB3YXN0ZWZ1bCBpbiB0aGF0IGNhc2UgLSB3ZSdkIGhhdmUgdG8gcmVuZGVyKC0xKSBpbW1lZGlhdGVseSBhZnRlcilcbiAgICAgICAgICBzdGFnZ2VyOiAwLFxuICAgICAgICAgIHBhcmVudDogcGFyZW50IC8vZW5zdXJlcyB0aGF0IG5lc3RlZCB0d2VlbnMgdGhhdCBoYWQgYSBzdGFnZ2VyIGFyZSBoYW5kbGVkIHByb3Blcmx5LCBsaWtlIGdzYXAuZnJvbShcIi5jbGFzc1wiLCB7eTogZ3NhcC51dGlscy53cmFwKFstMTAwLDEwMF0pLCBzdGFnZ2VyOiAwLjV9KVxuXG4gICAgICAgIH0sIGNsZWFuVmFycyk7XG4gICAgICAgIGhhcm5lc3NWYXJzICYmIChwW2hhcm5lc3MucHJvcF0gPSBoYXJuZXNzVmFycyk7IC8vIGluIGNhc2Ugc29tZW9uZSBkb2VzIHNvbWV0aGluZyBsaWtlIC5mcm9tKC4uLiwge2Nzczp7fX0pXG5cbiAgICAgICAgX3JlbW92ZUZyb21QYXJlbnQodHdlZW4uX3N0YXJ0QXQgPSBUd2Vlbi5zZXQodGFyZ2V0cywgcCkpO1xuXG4gICAgICAgIHR3ZWVuLl9zdGFydEF0Ll9kcCA9IDA7IC8vIGRvbid0IGFsbG93IGl0IHRvIGdldCBwdXQgYmFjayBpbnRvIHJvb3QgdGltZWxpbmUhXG5cbiAgICAgICAgdHdlZW4uX3N0YXJ0QXQuX3NhdCA9IHR3ZWVuOyAvLyB1c2VkIGluIGdsb2JhbFRpbWUoKVxuXG4gICAgICAgIHRpbWUgPCAwICYmIChfcmV2ZXJ0aW5nID8gdHdlZW4uX3N0YXJ0QXQucmV2ZXJ0KF9yZXZlcnRDb25maWdOb0tpbGwpIDogdHdlZW4uX3N0YXJ0QXQucmVuZGVyKC0xLCB0cnVlKSk7XG4gICAgICAgIHR3ZWVuLl96VGltZSA9IHRpbWU7XG5cbiAgICAgICAgaWYgKCFpbW1lZGlhdGVSZW5kZXIpIHtcbiAgICAgICAgICBfaW5pdFR3ZWVuKHR3ZWVuLl9zdGFydEF0LCBfdGlueU51bSwgX3RpbnlOdW0pOyAvL2Vuc3VyZXMgdGhhdCB0aGUgaW5pdGlhbCB2YWx1ZXMgYXJlIHJlY29yZGVkXG5cbiAgICAgICAgfSBlbHNlIGlmICghdGltZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHR3ZWVuLl9wdCA9IHR3ZWVuLl9wdENhY2hlID0gMDtcbiAgICBsYXp5ID0gZHVyICYmIF9pc05vdEZhbHNlKGxhenkpIHx8IGxhenkgJiYgIWR1cjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0YXJnZXQgPSB0YXJnZXRzW2ldO1xuICAgICAgZ3NEYXRhID0gdGFyZ2V0Ll9nc2FwIHx8IF9oYXJuZXNzKHRhcmdldHMpW2ldLl9nc2FwO1xuICAgICAgdHdlZW4uX3B0TG9va3VwW2ldID0gcHRMb29rdXAgPSB7fTtcbiAgICAgIF9sYXp5TG9va3VwW2dzRGF0YS5pZF0gJiYgX2xhenlUd2VlbnMubGVuZ3RoICYmIF9sYXp5UmVuZGVyKCk7IC8vaWYgb3RoZXIgdHdlZW5zIG9mIHRoZSBzYW1lIHRhcmdldCBoYXZlIHJlY2VudGx5IGluaXR0ZWQgYnV0IGhhdmVuJ3QgcmVuZGVyZWQgeWV0LCB3ZSd2ZSBnb3QgdG8gZm9yY2UgdGhlIHJlbmRlciBzbyB0aGF0IHRoZSBzdGFydGluZyB2YWx1ZXMgYXJlIGNvcnJlY3QgKGltYWdpbmUgcG9wdWxhdGluZyBhIHRpbWVsaW5lIHdpdGggYSBidW5jaCBvZiBzZXF1ZW50aWFsIHR3ZWVucyBhbmQgdGhlbiBqdW1waW5nIHRvIHRoZSBlbmQpXG5cbiAgICAgIGluZGV4ID0gZnVsbFRhcmdldHMgPT09IHRhcmdldHMgPyBpIDogZnVsbFRhcmdldHMuaW5kZXhPZih0YXJnZXQpO1xuXG4gICAgICBpZiAoaGFybmVzcyAmJiAocGx1Z2luID0gbmV3IGhhcm5lc3MoKSkuaW5pdCh0YXJnZXQsIGhhcm5lc3NWYXJzIHx8IGNsZWFuVmFycywgdHdlZW4sIGluZGV4LCBmdWxsVGFyZ2V0cykgIT09IGZhbHNlKSB7XG4gICAgICAgIHR3ZWVuLl9wdCA9IHB0ID0gbmV3IFByb3BUd2Vlbih0d2Vlbi5fcHQsIHRhcmdldCwgcGx1Z2luLm5hbWUsIDAsIDEsIHBsdWdpbi5yZW5kZXIsIHBsdWdpbiwgMCwgcGx1Z2luLnByaW9yaXR5KTtcblxuICAgICAgICBwbHVnaW4uX3Byb3BzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICBwdExvb2t1cFtuYW1lXSA9IHB0O1xuICAgICAgICB9KTtcblxuICAgICAgICBwbHVnaW4ucHJpb3JpdHkgJiYgKGhhc1ByaW9yaXR5ID0gMSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFybmVzcyB8fCBoYXJuZXNzVmFycykge1xuICAgICAgICBmb3IgKHAgaW4gY2xlYW5WYXJzKSB7XG4gICAgICAgICAgaWYgKF9wbHVnaW5zW3BdICYmIChwbHVnaW4gPSBfY2hlY2tQbHVnaW4ocCwgY2xlYW5WYXJzLCB0d2VlbiwgaW5kZXgsIHRhcmdldCwgZnVsbFRhcmdldHMpKSkge1xuICAgICAgICAgICAgcGx1Z2luLnByaW9yaXR5ICYmIChoYXNQcmlvcml0eSA9IDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwdExvb2t1cFtwXSA9IHB0ID0gX2FkZFByb3BUd2Vlbi5jYWxsKHR3ZWVuLCB0YXJnZXQsIHAsIFwiZ2V0XCIsIGNsZWFuVmFyc1twXSwgaW5kZXgsIGZ1bGxUYXJnZXRzLCAwLCB2YXJzLnN0cmluZ0ZpbHRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHR3ZWVuLl9vcCAmJiB0d2Vlbi5fb3BbaV0gJiYgdHdlZW4ua2lsbCh0YXJnZXQsIHR3ZWVuLl9vcFtpXSk7XG5cbiAgICAgIGlmIChhdXRvT3ZlcndyaXRlICYmIHR3ZWVuLl9wdCkge1xuICAgICAgICBfb3ZlcndyaXRpbmdUd2VlbiA9IHR3ZWVuO1xuXG4gICAgICAgIF9nbG9iYWxUaW1lbGluZS5raWxsVHdlZW5zT2YodGFyZ2V0LCBwdExvb2t1cCwgdHdlZW4uZ2xvYmFsVGltZSh0aW1lKSk7IC8vIG1ha2Ugc3VyZSB0aGUgb3ZlcndyaXRpbmcgZG9lc24ndCBvdmVyd3JpdGUgVEhJUyB0d2VlbiEhIVxuXG5cbiAgICAgICAgb3ZlcndyaXR0ZW4gPSAhdHdlZW4ucGFyZW50O1xuICAgICAgICBfb3ZlcndyaXRpbmdUd2VlbiA9IDA7XG4gICAgICB9XG5cbiAgICAgIHR3ZWVuLl9wdCAmJiBsYXp5ICYmIChfbGF6eUxvb2t1cFtnc0RhdGEuaWRdID0gMSk7XG4gICAgfVxuXG4gICAgaGFzUHJpb3JpdHkgJiYgX3NvcnRQcm9wVHdlZW5zQnlQcmlvcml0eSh0d2Vlbik7XG4gICAgdHdlZW4uX29uSW5pdCAmJiB0d2Vlbi5fb25Jbml0KHR3ZWVuKTsgLy9wbHVnaW5zIGxpa2UgUm91bmRQcm9wcyBtdXN0IHdhaXQgdW50aWwgQUxMIG9mIHRoZSBQcm9wVHdlZW5zIGFyZSBpbnN0YW50aWF0ZWQuIEluIHRoZSBwbHVnaW4ncyBpbml0KCkgZnVuY3Rpb24sIGl0IHNldHMgdGhlIF9vbkluaXQgb24gdGhlIHR3ZWVuIGluc3RhbmNlLiBNYXkgbm90IGJlIHByZXR0eS9pbnR1aXRpdmUsIGJ1dCBpdCdzIGZhc3QgYW5kIGtlZXBzIGZpbGUgc2l6ZSBkb3duLlxuICB9XG5cbiAgdHdlZW4uX29uVXBkYXRlID0gb25VcGRhdGU7XG4gIHR3ZWVuLl9pbml0dGVkID0gKCF0d2Vlbi5fb3AgfHwgdHdlZW4uX3B0KSAmJiAhb3ZlcndyaXR0ZW47IC8vIGlmIG92ZXJ3cml0dGVuUHJvcHMgcmVzdWx0ZWQgaW4gdGhlIGVudGlyZSB0d2VlbiBiZWluZyBraWxsZWQsIGRvIE5PVCBmbGFnIGl0IGFzIGluaXR0ZWQgb3IgZWxzZSBpdCBtYXkgcmVuZGVyIGZvciBvbmUgdGljay5cblxuICBrZXlmcmFtZXMgJiYgdGltZSA8PSAwICYmIHRsLnJlbmRlcihfYmlnTnVtLCB0cnVlLCB0cnVlKTsgLy8gaWYgdGhlcmUncyBhIDAlIGtleWZyYW1lLCBpdCdsbCByZW5kZXIgaW4gdGhlIFwiYmVmb3JlXCIgc3RhdGUgZm9yIGFueSBzdGFnZ2VyZWQvZGVsYXllZCBhbmltYXRpb25zIHRodXMgd2hlbiB0aGUgZm9sbG93aW5nIHR3ZWVuIGluaXRpYWxpemVzLCBpdCdsbCB1c2UgdGhlIFwiYmVmb3JlXCIgc3RhdGUgaW5zdGVhZCBvZiB0aGUgXCJhZnRlclwiIHN0YXRlIGFzIHRoZSBpbml0aWFsIHZhbHVlcy5cbn0sXG4gICAgX3VwZGF0ZVByb3BUd2VlbnMgPSBmdW5jdGlvbiBfdXBkYXRlUHJvcFR3ZWVucyh0d2VlbiwgcHJvcGVydHksIHZhbHVlLCBzdGFydCwgc3RhcnRJc1JlbGF0aXZlLCByYXRpbywgdGltZSkge1xuICB2YXIgcHRDYWNoZSA9ICh0d2Vlbi5fcHQgJiYgdHdlZW4uX3B0Q2FjaGUgfHwgKHR3ZWVuLl9wdENhY2hlID0ge30pKVtwcm9wZXJ0eV0sXG4gICAgICBwdCxcbiAgICAgIHJvb3RQVCxcbiAgICAgIGxvb2t1cCxcbiAgICAgIGk7XG5cbiAgaWYgKCFwdENhY2hlKSB7XG4gICAgcHRDYWNoZSA9IHR3ZWVuLl9wdENhY2hlW3Byb3BlcnR5XSA9IFtdO1xuICAgIGxvb2t1cCA9IHR3ZWVuLl9wdExvb2t1cDtcbiAgICBpID0gdHdlZW4uX3RhcmdldHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgcHQgPSBsb29rdXBbaV1bcHJvcGVydHldO1xuXG4gICAgICBpZiAocHQgJiYgcHQuZCAmJiBwdC5kLl9wdCkge1xuICAgICAgICAvLyBpdCdzIGEgcGx1Z2luLCBzbyBmaW5kIHRoZSBuZXN0ZWQgUHJvcFR3ZWVuXG4gICAgICAgIHB0ID0gcHQuZC5fcHQ7XG5cbiAgICAgICAgd2hpbGUgKHB0ICYmIHB0LnAgIT09IHByb3BlcnR5ICYmIHB0LmZwICE9PSBwcm9wZXJ0eSkge1xuICAgICAgICAgIC8vIFwiZnBcIiBpcyBmdW5jdGlvblBhcmFtIGZvciB0aGluZ3MgbGlrZSBzZXR0aW5nIENTUyB2YXJpYWJsZXMgd2hpY2ggcmVxdWlyZSAuc2V0UHJvcGVydHkoXCItLXZhci1uYW1lXCIsIHZhbHVlKVxuICAgICAgICAgIHB0ID0gcHQuX25leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFwdCkge1xuICAgICAgICAvLyB0aGVyZSBpcyBubyBQcm9wVHdlZW4gYXNzb2NpYXRlZCB3aXRoIHRoYXQgcHJvcGVydHksIHNvIHdlIG11c3QgRk9SQ0Ugb25lIHRvIGJlIGNyZWF0ZWQgYW5kIGRpdGNoIG91dCBvZiB0aGlzXG4gICAgICAgIC8vIGlmIHRoZSB0d2VlbiBoYXMgb3RoZXIgcHJvcGVydGllcyB0aGF0IGFscmVhZHkgcmVuZGVyZWQgYXQgbmV3IHBvc2l0aW9ucywgd2UnZCBub3JtYWxseSBoYXZlIHRvIHJld2luZCB0byBwdXQgdGhlbSBiYWNrIGxpa2UgdHdlZW4ucmVuZGVyKDAsIHRydWUpIGJlZm9yZSBmb3JjaW5nIGFuIF9pbml0VHdlZW4oKSwgYnV0IHRoYXQgY2FuIGNyZWF0ZSBhbm90aGVyIGVkZ2UgY2FzZSBsaWtlIHR3ZWVuaW5nIGEgdGltZWxpbmUncyBwcm9ncmVzcyB3b3VsZCB0cmlnZ2VyIG9uVXBkYXRlcyB0byBmaXJlIHdoaWNoIGNvdWxkIG1vdmUgb3RoZXIgdGhpbmdzIGFyb3VuZC4gSXQncyBiZXR0ZXIgdG8ganVzdCBpbmZvcm0gdXNlcnMgdGhhdCAucmVzZXRUbygpIHNob3VsZCBPTkxZIGJlIHVzZWQgZm9yIHR3ZWVucyB0aGF0IGFscmVhZHkgaGF2ZSB0aGF0IHByb3BlcnR5LiBGb3IgZXhhbXBsZSwgeW91IGNhbid0IGdzYXAudG8oLi4ueyB5OiAwIH0pIGFuZCB0aGVuIHR3ZWVuLnJlc3RUbyhcInhcIiwgMjAwKSBmb3IgZXhhbXBsZS5cbiAgICAgICAgX2ZvcmNlQWxsUHJvcFR3ZWVucyA9IDE7IC8vIG90aGVyd2lzZSwgd2hlbiB3ZSBfYWRkUHJvcFR3ZWVuKCkgYW5kIGl0IGZpbmRzIG5vIGNoYW5nZSBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIHZhbHVlcywgaXQgc2tpcHMgY3JlYXRpbmcgYSBQcm9wVHdlZW4gKGZvciBlZmZpY2llbmN5Li4ud2h5IHR3ZWVuIHdoZW4gdGhlcmUncyBubyBkaWZmZXJlbmNlPykgYnV0IGluIHRoaXMgY2FzZSB3ZSBORUVEIHRoYXQgUHJvcFR3ZWVuIGNyZWF0ZWQgc28gd2UgY2FuIGVkaXQgaXQuXG5cbiAgICAgICAgdHdlZW4udmFyc1twcm9wZXJ0eV0gPSBcIis9MFwiO1xuXG4gICAgICAgIF9pbml0VHdlZW4odHdlZW4sIHRpbWUpO1xuXG4gICAgICAgIF9mb3JjZUFsbFByb3BUd2VlbnMgPSAwO1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cblxuICAgICAgcHRDYWNoZS5wdXNoKHB0KTtcbiAgICB9XG4gIH1cblxuICBpID0gcHRDYWNoZS5sZW5ndGg7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIHJvb3RQVCA9IHB0Q2FjaGVbaV07XG4gICAgcHQgPSByb290UFQuX3B0IHx8IHJvb3RQVDsgLy8gY29tcGxleCB2YWx1ZXMgbWF5IGhhdmUgbmVzdGVkIFByb3BUd2VlbnMuIFdlIG9ubHkgYWNjb21tb2RhdGUgdGhlIEZJUlNUIHZhbHVlLlxuXG4gICAgcHQucyA9IChzdGFydCB8fCBzdGFydCA9PT0gMCkgJiYgIXN0YXJ0SXNSZWxhdGl2ZSA/IHN0YXJ0IDogcHQucyArIChzdGFydCB8fCAwKSArIHJhdGlvICogcHQuYztcbiAgICBwdC5jID0gdmFsdWUgLSBwdC5zO1xuICAgIHJvb3RQVC5lICYmIChyb290UFQuZSA9IF9yb3VuZCh2YWx1ZSkgKyBnZXRVbml0KHJvb3RQVC5lKSk7IC8vIG1haW5seSBmb3IgQ1NTUGx1Z2luIChlbmQgdmFsdWUpXG5cbiAgICByb290UFQuYiAmJiAocm9vdFBULmIgPSBwdC5zICsgZ2V0VW5pdChyb290UFQuYikpOyAvLyAoYmVnaW5uaW5nIHZhbHVlKVxuICB9XG59LFxuICAgIF9hZGRBbGlhc2VzVG9WYXJzID0gZnVuY3Rpb24gX2FkZEFsaWFzZXNUb1ZhcnModGFyZ2V0cywgdmFycykge1xuICB2YXIgaGFybmVzcyA9IHRhcmdldHNbMF0gPyBfZ2V0Q2FjaGUodGFyZ2V0c1swXSkuaGFybmVzcyA6IDAsXG4gICAgICBwcm9wZXJ0eUFsaWFzZXMgPSBoYXJuZXNzICYmIGhhcm5lc3MuYWxpYXNlcyxcbiAgICAgIGNvcHksXG4gICAgICBwLFxuICAgICAgaSxcbiAgICAgIGFsaWFzZXM7XG5cbiAgaWYgKCFwcm9wZXJ0eUFsaWFzZXMpIHtcbiAgICByZXR1cm4gdmFycztcbiAgfVxuXG4gIGNvcHkgPSBfbWVyZ2Uoe30sIHZhcnMpO1xuXG4gIGZvciAocCBpbiBwcm9wZXJ0eUFsaWFzZXMpIHtcbiAgICBpZiAocCBpbiBjb3B5KSB7XG4gICAgICBhbGlhc2VzID0gcHJvcGVydHlBbGlhc2VzW3BdLnNwbGl0KFwiLFwiKTtcbiAgICAgIGkgPSBhbGlhc2VzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICBjb3B5W2FsaWFzZXNbaV1dID0gY29weVtwXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29weTtcbn0sXG4gICAgLy8gcGFyc2VzIG11bHRpcGxlIGZvcm1hdHMsIGxpa2Uge1wiMCVcIjoge3g6IDEwMH0sIHtcIjUwJVwiOiB7eDogLTIwfX0gYW5kIHsgeDoge1wiMCVcIjogMTAwLCBcIjUwJVwiOiAtMjB9IH0sIGFuZCBhbiBcImVhc2VcIiBjYW4gYmUgc2V0IG9uIGFueSBvYmplY3QuIFdlIHBvcHVsYXRlIGFuIFwiYWxsUHJvcHNcIiBvYmplY3Qgd2l0aCBhbiBBcnJheSBmb3IgZWFjaCBwcm9wZXJ0eSwgbGlrZSB7eDogW3t9LCB7fV0sIHk6W3t9LCB7fV19IHdpdGggZGF0YSBmb3IgZWFjaCBwcm9wZXJ0eSB0d2Vlbi4gVGhlIG9iamVjdHMgaGF2ZSBhIFwidFwiICh0aW1lKSwgXCJ2XCIsICh2YWx1ZSksIGFuZCBcImVcIiAoZWFzZSkgcHJvcGVydHkuIFRoaXMgYWxsb3dzIHVzIHRvIHBpZWNlIHRvZ2V0aGVyIGEgdGltZWxpbmUgbGF0ZXIuXG5fcGFyc2VLZXlmcmFtZSA9IGZ1bmN0aW9uIF9wYXJzZUtleWZyYW1lKHByb3AsIG9iaiwgYWxsUHJvcHMsIGVhc2VFYWNoKSB7XG4gIHZhciBlYXNlID0gb2JqLmVhc2UgfHwgZWFzZUVhY2ggfHwgXCJwb3dlcjEuaW5PdXRcIixcbiAgICAgIHAsXG4gICAgICBhO1xuXG4gIGlmIChfaXNBcnJheShvYmopKSB7XG4gICAgYSA9IGFsbFByb3BzW3Byb3BdIHx8IChhbGxQcm9wc1twcm9wXSA9IFtdKTsgLy8gdCA9IHRpbWUgKG91dCBvZiAxMDApLCB2ID0gdmFsdWUsIGUgPSBlYXNlXG5cbiAgICBvYmouZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGkpIHtcbiAgICAgIHJldHVybiBhLnB1c2goe1xuICAgICAgICB0OiBpIC8gKG9iai5sZW5ndGggLSAxKSAqIDEwMCxcbiAgICAgICAgdjogdmFsdWUsXG4gICAgICAgIGU6IGVhc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGZvciAocCBpbiBvYmopIHtcbiAgICAgIGEgPSBhbGxQcm9wc1twXSB8fCAoYWxsUHJvcHNbcF0gPSBbXSk7XG4gICAgICBwID09PSBcImVhc2VcIiB8fCBhLnB1c2goe1xuICAgICAgICB0OiBwYXJzZUZsb2F0KHByb3ApLFxuICAgICAgICB2OiBvYmpbcF0sXG4gICAgICAgIGU6IGVhc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSxcbiAgICBfcGFyc2VGdW5jT3JTdHJpbmcgPSBmdW5jdGlvbiBfcGFyc2VGdW5jT3JTdHJpbmcodmFsdWUsIHR3ZWVuLCBpLCB0YXJnZXQsIHRhcmdldHMpIHtcbiAgcmV0dXJuIF9pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmNhbGwodHdlZW4sIGksIHRhcmdldCwgdGFyZ2V0cykgOiBfaXNTdHJpbmcodmFsdWUpICYmIH52YWx1ZS5pbmRleE9mKFwicmFuZG9tKFwiKSA/IF9yZXBsYWNlUmFuZG9tKHZhbHVlKSA6IHZhbHVlO1xufSxcbiAgICBfc3RhZ2dlclR3ZWVuUHJvcHMgPSBfY2FsbGJhY2tOYW1lcyArIFwicmVwZWF0LHJlcGVhdERlbGF5LHlveW8scmVwZWF0UmVmcmVzaCx5b3lvRWFzZSxhdXRvUmV2ZXJ0XCIsXG4gICAgX3N0YWdnZXJQcm9wc1RvU2tpcCA9IHt9O1xuXG5fZm9yRWFjaE5hbWUoX3N0YWdnZXJUd2VlblByb3BzICsgXCIsaWQsc3RhZ2dlcixkZWxheSxkdXJhdGlvbixwYXVzZWQsc2Nyb2xsVHJpZ2dlclwiLCBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gX3N0YWdnZXJQcm9wc1RvU2tpcFtuYW1lXSA9IDE7XG59KTtcbi8qXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogVFdFRU5cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG5leHBvcnQgdmFyIFR3ZWVuID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQW5pbWF0aW9uMikge1xuICBfaW5oZXJpdHNMb29zZShUd2VlbiwgX0FuaW1hdGlvbjIpO1xuXG4gIGZ1bmN0aW9uIFR3ZWVuKHRhcmdldHMsIHZhcnMsIHBvc2l0aW9uLCBza2lwSW5oZXJpdCkge1xuICAgIHZhciBfdGhpczM7XG5cbiAgICBpZiAodHlwZW9mIHZhcnMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHBvc2l0aW9uLmR1cmF0aW9uID0gdmFycztcbiAgICAgIHZhcnMgPSBwb3NpdGlvbjtcbiAgICAgIHBvc2l0aW9uID0gbnVsbDtcbiAgICB9XG5cbiAgICBfdGhpczMgPSBfQW5pbWF0aW9uMi5jYWxsKHRoaXMsIHNraXBJbmhlcml0ID8gdmFycyA6IF9pbmhlcml0RGVmYXVsdHModmFycykpIHx8IHRoaXM7XG4gICAgdmFyIF90aGlzMyR2YXJzID0gX3RoaXMzLnZhcnMsXG4gICAgICAgIGR1cmF0aW9uID0gX3RoaXMzJHZhcnMuZHVyYXRpb24sXG4gICAgICAgIGRlbGF5ID0gX3RoaXMzJHZhcnMuZGVsYXksXG4gICAgICAgIGltbWVkaWF0ZVJlbmRlciA9IF90aGlzMyR2YXJzLmltbWVkaWF0ZVJlbmRlcixcbiAgICAgICAgc3RhZ2dlciA9IF90aGlzMyR2YXJzLnN0YWdnZXIsXG4gICAgICAgIG92ZXJ3cml0ZSA9IF90aGlzMyR2YXJzLm92ZXJ3cml0ZSxcbiAgICAgICAga2V5ZnJhbWVzID0gX3RoaXMzJHZhcnMua2V5ZnJhbWVzLFxuICAgICAgICBkZWZhdWx0cyA9IF90aGlzMyR2YXJzLmRlZmF1bHRzLFxuICAgICAgICBzY3JvbGxUcmlnZ2VyID0gX3RoaXMzJHZhcnMuc2Nyb2xsVHJpZ2dlcixcbiAgICAgICAgeW95b0Vhc2UgPSBfdGhpczMkdmFycy55b3lvRWFzZSxcbiAgICAgICAgcGFyZW50ID0gdmFycy5wYXJlbnQgfHwgX2dsb2JhbFRpbWVsaW5lLFxuICAgICAgICBwYXJzZWRUYXJnZXRzID0gKF9pc0FycmF5KHRhcmdldHMpIHx8IF9pc1R5cGVkQXJyYXkodGFyZ2V0cykgPyBfaXNOdW1iZXIodGFyZ2V0c1swXSkgOiBcImxlbmd0aFwiIGluIHZhcnMpID8gW3RhcmdldHNdIDogdG9BcnJheSh0YXJnZXRzKSxcbiAgICAgICAgdGwsXG4gICAgICAgIGksXG4gICAgICAgIGNvcHksXG4gICAgICAgIGwsXG4gICAgICAgIHAsXG4gICAgICAgIGN1clRhcmdldCxcbiAgICAgICAgc3RhZ2dlckZ1bmMsXG4gICAgICAgIHN0YWdnZXJWYXJzVG9NZXJnZTtcbiAgICBfdGhpczMuX3RhcmdldHMgPSBwYXJzZWRUYXJnZXRzLmxlbmd0aCA/IF9oYXJuZXNzKHBhcnNlZFRhcmdldHMpIDogX3dhcm4oXCJHU0FQIHRhcmdldCBcIiArIHRhcmdldHMgKyBcIiBub3QgZm91bmQuIGh0dHBzOi8vZ3JlZW5zb2NrLmNvbVwiLCAhX2NvbmZpZy5udWxsVGFyZ2V0V2FybikgfHwgW107XG4gICAgX3RoaXMzLl9wdExvb2t1cCA9IFtdOyAvL1Byb3BUd2VlbiBsb29rdXAuIEFuIGFycmF5IGNvbnRhaW5pbmcgYW4gb2JqZWN0IGZvciBlYWNoIHRhcmdldCwgaGF2aW5nIGtleXMgZm9yIGVhY2ggdHdlZW5pbmcgcHJvcGVydHlcblxuICAgIF90aGlzMy5fb3ZlcndyaXRlID0gb3ZlcndyaXRlO1xuXG4gICAgaWYgKGtleWZyYW1lcyB8fCBzdGFnZ2VyIHx8IF9pc0Z1bmNPclN0cmluZyhkdXJhdGlvbikgfHwgX2lzRnVuY09yU3RyaW5nKGRlbGF5KSkge1xuICAgICAgdmFycyA9IF90aGlzMy52YXJzO1xuICAgICAgdGwgPSBfdGhpczMudGltZWxpbmUgPSBuZXcgVGltZWxpbmUoe1xuICAgICAgICBkYXRhOiBcIm5lc3RlZFwiLFxuICAgICAgICBkZWZhdWx0czogZGVmYXVsdHMgfHwge30sXG4gICAgICAgIHRhcmdldHM6IHBhcmVudCAmJiBwYXJlbnQuZGF0YSA9PT0gXCJuZXN0ZWRcIiA/IHBhcmVudC52YXJzLnRhcmdldHMgOiBwYXJzZWRUYXJnZXRzXG4gICAgICB9KTsgLy8gd2UgbmVlZCB0byBzdG9yZSB0aGUgdGFyZ2V0cyBiZWNhdXNlIGZvciBzdGFnZ2VycyBhbmQga2V5ZnJhbWVzLCB3ZSBlbmQgdXAgY3JlYXRpbmcgYW4gaW5kaXZpZHVhbCB0d2VlbiBmb3IgZWFjaCBidXQgZnVuY3Rpb24tYmFzZWQgdmFsdWVzIG5lZWQgdG8ga25vdyB0aGUgaW5kZXggYW5kIHRoZSB3aG9sZSBBcnJheSBvZiB0YXJnZXRzLlxuXG4gICAgICB0bC5raWxsKCk7XG4gICAgICB0bC5wYXJlbnQgPSB0bC5fZHAgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzMyk7XG4gICAgICB0bC5fc3RhcnQgPSAwO1xuXG4gICAgICBpZiAoc3RhZ2dlciB8fCBfaXNGdW5jT3JTdHJpbmcoZHVyYXRpb24pIHx8IF9pc0Z1bmNPclN0cmluZyhkZWxheSkpIHtcbiAgICAgICAgbCA9IHBhcnNlZFRhcmdldHMubGVuZ3RoO1xuICAgICAgICBzdGFnZ2VyRnVuYyA9IHN0YWdnZXIgJiYgZGlzdHJpYnV0ZShzdGFnZ2VyKTtcblxuICAgICAgICBpZiAoX2lzT2JqZWN0KHN0YWdnZXIpKSB7XG4gICAgICAgICAgLy91c2VycyBjYW4gcGFzcyBpbiBjYWxsYmFja3MgbGlrZSBvblN0YXJ0L29uQ29tcGxldGUgaW4gdGhlIHN0YWdnZXIgb2JqZWN0LiBUaGVzZSBzaG91bGQgZmlyZSB3aXRoIGVhY2ggaW5kaXZpZHVhbCB0d2Vlbi5cbiAgICAgICAgICBmb3IgKHAgaW4gc3RhZ2dlcikge1xuICAgICAgICAgICAgaWYgKH5fc3RhZ2dlclR3ZWVuUHJvcHMuaW5kZXhPZihwKSkge1xuICAgICAgICAgICAgICBzdGFnZ2VyVmFyc1RvTWVyZ2UgfHwgKHN0YWdnZXJWYXJzVG9NZXJnZSA9IHt9KTtcbiAgICAgICAgICAgICAgc3RhZ2dlclZhcnNUb01lcmdlW3BdID0gc3RhZ2dlcltwXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgY29weSA9IF9jb3B5RXhjbHVkaW5nKHZhcnMsIF9zdGFnZ2VyUHJvcHNUb1NraXApO1xuICAgICAgICAgIGNvcHkuc3RhZ2dlciA9IDA7XG4gICAgICAgICAgeW95b0Vhc2UgJiYgKGNvcHkueW95b0Vhc2UgPSB5b3lvRWFzZSk7XG4gICAgICAgICAgc3RhZ2dlclZhcnNUb01lcmdlICYmIF9tZXJnZShjb3B5LCBzdGFnZ2VyVmFyc1RvTWVyZ2UpO1xuICAgICAgICAgIGN1clRhcmdldCA9IHBhcnNlZFRhcmdldHNbaV07IC8vZG9uJ3QganVzdCBjb3B5IGR1cmF0aW9uIG9yIGRlbGF5IGJlY2F1c2UgaWYgdGhleSdyZSBhIHN0cmluZyBvciBmdW5jdGlvbiwgd2UnZCBlbmQgdXAgaW4gYW4gaW5maW5pdGUgbG9vcCBiZWNhdXNlIF9pc0Z1bmNPclN0cmluZygpIHdvdWxkIGV2YWx1YXRlIGFzIHRydWUgaW4gdGhlIGNoaWxkIHR3ZWVucywgZW50ZXJpbmcgdGhpcyBsb29wLCBldGMuIFNvIHdlIHBhcnNlIHRoZSB2YWx1ZSBzdHJhaWdodCBmcm9tIHZhcnMgYW5kIGRlZmF1bHQgdG8gMC5cblxuICAgICAgICAgIGNvcHkuZHVyYXRpb24gPSArX3BhcnNlRnVuY09yU3RyaW5nKGR1cmF0aW9uLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzMyksIGksIGN1clRhcmdldCwgcGFyc2VkVGFyZ2V0cyk7XG4gICAgICAgICAgY29weS5kZWxheSA9ICgrX3BhcnNlRnVuY09yU3RyaW5nKGRlbGF5LCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzMyksIGksIGN1clRhcmdldCwgcGFyc2VkVGFyZ2V0cykgfHwgMCkgLSBfdGhpczMuX2RlbGF5O1xuXG4gICAgICAgICAgaWYgKCFzdGFnZ2VyICYmIGwgPT09IDEgJiYgY29weS5kZWxheSkge1xuICAgICAgICAgICAgLy8gaWYgc29tZW9uZSBkb2VzIGRlbGF5OlwicmFuZG9tKDEsIDUpXCIsIHJlcGVhdDotMSwgZm9yIGV4YW1wbGUsIHRoZSBkZWxheSBzaG91bGRuJ3QgYmUgaW5zaWRlIHRoZSByZXBlYXQuXG4gICAgICAgICAgICBfdGhpczMuX2RlbGF5ID0gZGVsYXkgPSBjb3B5LmRlbGF5O1xuICAgICAgICAgICAgX3RoaXMzLl9zdGFydCArPSBkZWxheTtcbiAgICAgICAgICAgIGNvcHkuZGVsYXkgPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRsLnRvKGN1clRhcmdldCwgY29weSwgc3RhZ2dlckZ1bmMgPyBzdGFnZ2VyRnVuYyhpLCBjdXJUYXJnZXQsIHBhcnNlZFRhcmdldHMpIDogMCk7XG4gICAgICAgICAgdGwuX2Vhc2UgPSBfZWFzZU1hcC5ub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgdGwuZHVyYXRpb24oKSA/IGR1cmF0aW9uID0gZGVsYXkgPSAwIDogX3RoaXMzLnRpbWVsaW5lID0gMDsgLy8gaWYgdGhlIHRpbWVsaW5lJ3MgZHVyYXRpb24gaXMgMCwgd2UgZG9uJ3QgbmVlZCBhIHRpbWVsaW5lIGludGVybmFsbHkhXG4gICAgICB9IGVsc2UgaWYgKGtleWZyYW1lcykge1xuICAgICAgICBfaW5oZXJpdERlZmF1bHRzKF9zZXREZWZhdWx0cyh0bC52YXJzLmRlZmF1bHRzLCB7XG4gICAgICAgICAgZWFzZTogXCJub25lXCJcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRsLl9lYXNlID0gX3BhcnNlRWFzZShrZXlmcmFtZXMuZWFzZSB8fCB2YXJzLmVhc2UgfHwgXCJub25lXCIpO1xuICAgICAgICB2YXIgdGltZSA9IDAsXG4gICAgICAgICAgICBhLFxuICAgICAgICAgICAga2YsXG4gICAgICAgICAgICB2O1xuXG4gICAgICAgIGlmIChfaXNBcnJheShrZXlmcmFtZXMpKSB7XG4gICAgICAgICAga2V5ZnJhbWVzLmZvckVhY2goZnVuY3Rpb24gKGZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGwudG8ocGFyc2VkVGFyZ2V0cywgZnJhbWUsIFwiPlwiKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0bC5kdXJhdGlvbigpOyAvLyB0byBlbnN1cmUgdGwuX2R1ciBpcyBjYWNoZWQgYmVjYXVzZSB3ZSB0YXAgaW50byBpdCBmb3IgcGVyZm9ybWFuY2UgcHVycG9zZXMgaW4gdGhlIHJlbmRlcigpIG1ldGhvZC5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb3B5ID0ge307XG5cbiAgICAgICAgICBmb3IgKHAgaW4ga2V5ZnJhbWVzKSB7XG4gICAgICAgICAgICBwID09PSBcImVhc2VcIiB8fCBwID09PSBcImVhc2VFYWNoXCIgfHwgX3BhcnNlS2V5ZnJhbWUocCwga2V5ZnJhbWVzW3BdLCBjb3B5LCBrZXlmcmFtZXMuZWFzZUVhY2gpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAocCBpbiBjb3B5KSB7XG4gICAgICAgICAgICBhID0gY29weVtwXS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhLnQgLSBiLnQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRpbWUgPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBrZiA9IGFbaV07XG4gICAgICAgICAgICAgIHYgPSB7XG4gICAgICAgICAgICAgICAgZWFzZToga2YuZSxcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogKGtmLnQgLSAoaSA/IGFbaSAtIDFdLnQgOiAwKSkgLyAxMDAgKiBkdXJhdGlvblxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB2W3BdID0ga2YudjtcbiAgICAgICAgICAgICAgdGwudG8ocGFyc2VkVGFyZ2V0cywgdiwgdGltZSk7XG4gICAgICAgICAgICAgIHRpbWUgKz0gdi5kdXJhdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0bC5kdXJhdGlvbigpIDwgZHVyYXRpb24gJiYgdGwudG8oe30sIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbiAtIHRsLmR1cmF0aW9uKClcbiAgICAgICAgICB9KTsgLy8gaW4gY2FzZSBrZXlmcmFtZXMgZGlkbid0IGdvIHRvIDEwMCVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkdXJhdGlvbiB8fCBfdGhpczMuZHVyYXRpb24oZHVyYXRpb24gPSB0bC5kdXJhdGlvbigpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3RoaXMzLnRpbWVsaW5lID0gMDsgLy9zcGVlZCBvcHRpbWl6YXRpb24sIGZhc3RlciBsb29rdXBzIChubyBnb2luZyB1cCB0aGUgcHJvdG90eXBlIGNoYWluKVxuICAgIH1cblxuICAgIGlmIChvdmVyd3JpdGUgPT09IHRydWUgJiYgIV9zdXBwcmVzc092ZXJ3cml0ZXMpIHtcbiAgICAgIF9vdmVyd3JpdGluZ1R3ZWVuID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpczMpO1xuXG4gICAgICBfZ2xvYmFsVGltZWxpbmUua2lsbFR3ZWVuc09mKHBhcnNlZFRhcmdldHMpO1xuXG4gICAgICBfb3ZlcndyaXRpbmdUd2VlbiA9IDA7XG4gICAgfVxuXG4gICAgX2FkZFRvVGltZWxpbmUocGFyZW50LCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzMyksIHBvc2l0aW9uKTtcblxuICAgIHZhcnMucmV2ZXJzZWQgJiYgX3RoaXMzLnJldmVyc2UoKTtcbiAgICB2YXJzLnBhdXNlZCAmJiBfdGhpczMucGF1c2VkKHRydWUpO1xuXG4gICAgaWYgKGltbWVkaWF0ZVJlbmRlciB8fCAhZHVyYXRpb24gJiYgIWtleWZyYW1lcyAmJiBfdGhpczMuX3N0YXJ0ID09PSBfcm91bmRQcmVjaXNlKHBhcmVudC5fdGltZSkgJiYgX2lzTm90RmFsc2UoaW1tZWRpYXRlUmVuZGVyKSAmJiBfaGFzTm9QYXVzZWRBbmNlc3RvcnMoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpczMpKSAmJiBwYXJlbnQuZGF0YSAhPT0gXCJuZXN0ZWRcIikge1xuICAgICAgX3RoaXMzLl90VGltZSA9IC1fdGlueU51bTsgLy9mb3JjZXMgYSByZW5kZXIgd2l0aG91dCBoYXZpbmcgdG8gc2V0IHRoZSByZW5kZXIoKSBcImZvcmNlXCIgcGFyYW1ldGVyIHRvIHRydWUgYmVjYXVzZSB3ZSB3YW50IHRvIGFsbG93IGxhenlpbmcgYnkgZGVmYXVsdCAodXNpbmcgdGhlIFwiZm9yY2VcIiBwYXJhbWV0ZXIgYWx3YXlzIGZvcmNlcyBhbiBpbW1lZGlhdGUgZnVsbCByZW5kZXIpXG5cbiAgICAgIF90aGlzMy5yZW5kZXIoTWF0aC5tYXgoMCwgLWRlbGF5KSB8fCAwKTsgLy9pbiBjYXNlIGRlbGF5IGlzIG5lZ2F0aXZlXG5cbiAgICB9XG5cbiAgICBzY3JvbGxUcmlnZ2VyICYmIF9zY3JvbGxUcmlnZ2VyKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMzKSwgc2Nyb2xsVHJpZ2dlcik7XG4gICAgcmV0dXJuIF90aGlzMztcbiAgfVxuXG4gIHZhciBfcHJvdG8zID0gVHdlZW4ucHJvdG90eXBlO1xuXG4gIF9wcm90bzMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKHRvdGFsVGltZSwgc3VwcHJlc3NFdmVudHMsIGZvcmNlKSB7XG4gICAgdmFyIHByZXZUaW1lID0gdGhpcy5fdGltZSxcbiAgICAgICAgdER1ciA9IHRoaXMuX3REdXIsXG4gICAgICAgIGR1ciA9IHRoaXMuX2R1cixcbiAgICAgICAgaXNOZWdhdGl2ZSA9IHRvdGFsVGltZSA8IDAsXG4gICAgICAgIHRUaW1lID0gdG90YWxUaW1lID4gdER1ciAtIF90aW55TnVtICYmICFpc05lZ2F0aXZlID8gdER1ciA6IHRvdGFsVGltZSA8IF90aW55TnVtID8gMCA6IHRvdGFsVGltZSxcbiAgICAgICAgdGltZSxcbiAgICAgICAgcHQsXG4gICAgICAgIGl0ZXJhdGlvbixcbiAgICAgICAgY3ljbGVEdXJhdGlvbixcbiAgICAgICAgcHJldkl0ZXJhdGlvbixcbiAgICAgICAgaXNZb3lvLFxuICAgICAgICByYXRpbyxcbiAgICAgICAgdGltZWxpbmUsXG4gICAgICAgIHlveW9FYXNlO1xuXG4gICAgaWYgKCFkdXIpIHtcbiAgICAgIF9yZW5kZXJaZXJvRHVyYXRpb25Ud2Vlbih0aGlzLCB0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSk7XG4gICAgfSBlbHNlIGlmICh0VGltZSAhPT0gdGhpcy5fdFRpbWUgfHwgIXRvdGFsVGltZSB8fCBmb3JjZSB8fCAhdGhpcy5faW5pdHRlZCAmJiB0aGlzLl90VGltZSB8fCB0aGlzLl9zdGFydEF0ICYmIHRoaXMuX3pUaW1lIDwgMCAhPT0gaXNOZWdhdGl2ZSkge1xuICAgICAgLy90aGlzIHNlbnNlcyBpZiB3ZSdyZSBjcm9zc2luZyBvdmVyIHRoZSBzdGFydCB0aW1lLCBpbiB3aGljaCBjYXNlIHdlIG11c3QgcmVjb3JkIF96VGltZSBhbmQgZm9yY2UgdGhlIHJlbmRlciwgYnV0IHdlIGRvIGl0IGluIHRoaXMgbGVuZ3RoeSBjb25kaXRpb25hbCB3YXkgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgKHVzdWFsbHkgd2UgY2FuIHNraXAgdGhlIGNhbGN1bGF0aW9ucyk6IHRoaXMuX2luaXR0ZWQgJiYgKHRoaXMuX3pUaW1lIDwgMCkgIT09ICh0b3RhbFRpbWUgPCAwKVxuICAgICAgdGltZSA9IHRUaW1lO1xuICAgICAgdGltZWxpbmUgPSB0aGlzLnRpbWVsaW5lO1xuXG4gICAgICBpZiAodGhpcy5fcmVwZWF0KSB7XG4gICAgICAgIC8vYWRqdXN0IHRoZSB0aW1lIGZvciByZXBlYXRzIGFuZCB5b3lvc1xuICAgICAgICBjeWNsZUR1cmF0aW9uID0gZHVyICsgdGhpcy5fckRlbGF5O1xuXG4gICAgICAgIGlmICh0aGlzLl9yZXBlYXQgPCAtMSAmJiBpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudG90YWxUaW1lKGN5Y2xlRHVyYXRpb24gKiAxMDAgKyB0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aW1lID0gX3JvdW5kUHJlY2lzZSh0VGltZSAlIGN5Y2xlRHVyYXRpb24pOyAvL3JvdW5kIHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IGVycm9ycy4gKDQgJSAwLjggc2hvdWxkIGJlIDAgYnV0IHNvbWUgYnJvd3NlcnMgcmVwb3J0IGl0IGFzIDAuNzk5OTk5OTkhKVxuXG4gICAgICAgIGlmICh0VGltZSA9PT0gdER1cikge1xuICAgICAgICAgIC8vIHRoZSB0RHVyID09PSB0VGltZSBpcyBmb3IgZWRnZSBjYXNlcyB3aGVyZSB0aGVyZSdzIGEgbGVuZ3RoeSBkZWNpbWFsIG9uIHRoZSBkdXJhdGlvbiBhbmQgaXQgbWF5IHJlYWNoIHRoZSB2ZXJ5IGVuZCBidXQgdGhlIHRpbWUgaXMgcmVuZGVyZWQgYXMgbm90LXF1aXRlLXRoZXJlIChyZW1lbWJlciwgdER1ciBpcyByb3VuZGVkIHRvIDQgZGVjaW1hbHMgd2hlcmVhcyBkdXIgaXNuJ3QpXG4gICAgICAgICAgaXRlcmF0aW9uID0gdGhpcy5fcmVwZWF0O1xuICAgICAgICAgIHRpbWUgPSBkdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlcmF0aW9uID0gfn4odFRpbWUgLyBjeWNsZUR1cmF0aW9uKTtcblxuICAgICAgICAgIGlmIChpdGVyYXRpb24gJiYgaXRlcmF0aW9uID09PSB0VGltZSAvIGN5Y2xlRHVyYXRpb24pIHtcbiAgICAgICAgICAgIHRpbWUgPSBkdXI7XG4gICAgICAgICAgICBpdGVyYXRpb24tLTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aW1lID4gZHVyICYmICh0aW1lID0gZHVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlzWW95byA9IHRoaXMuX3lveW8gJiYgaXRlcmF0aW9uICYgMTtcblxuICAgICAgICBpZiAoaXNZb3lvKSB7XG4gICAgICAgICAgeW95b0Vhc2UgPSB0aGlzLl95RWFzZTtcbiAgICAgICAgICB0aW1lID0gZHVyIC0gdGltZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZJdGVyYXRpb24gPSBfYW5pbWF0aW9uQ3ljbGUodGhpcy5fdFRpbWUsIGN5Y2xlRHVyYXRpb24pO1xuXG4gICAgICAgIGlmICh0aW1lID09PSBwcmV2VGltZSAmJiAhZm9yY2UgJiYgdGhpcy5faW5pdHRlZCkge1xuICAgICAgICAgIC8vY291bGQgYmUgZHVyaW5nIHRoZSByZXBlYXREZWxheSBwYXJ0LiBObyBuZWVkIHRvIHJlbmRlciBhbmQgZmlyZSBjYWxsYmFja3MuXG4gICAgICAgICAgdGhpcy5fdFRpbWUgPSB0VGltZTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVyYXRpb24gIT09IHByZXZJdGVyYXRpb24pIHtcbiAgICAgICAgICB0aW1lbGluZSAmJiB0aGlzLl95RWFzZSAmJiBfcHJvcGFnYXRlWW95b0Vhc2UodGltZWxpbmUsIGlzWW95byk7IC8vcmVwZWF0UmVmcmVzaCBmdW5jdGlvbmFsaXR5XG5cbiAgICAgICAgICBpZiAodGhpcy52YXJzLnJlcGVhdFJlZnJlc2ggJiYgIWlzWW95byAmJiAhdGhpcy5fbG9jaykge1xuICAgICAgICAgICAgdGhpcy5fbG9jayA9IGZvcmNlID0gMTsgLy9mb3JjZSwgb3RoZXJ3aXNlIGlmIGxhenkgaXMgdHJ1ZSwgdGhlIF9hdHRlbXB0SW5pdFR3ZWVuKCkgd2lsbCByZXR1cm4gYW5kIHdlJ2xsIGp1bXAgb3V0IGFuZCBnZXQgY2F1Z2h0IGJvdW5jaW5nIG9uIGVhY2ggdGljay5cblxuICAgICAgICAgICAgdGhpcy5yZW5kZXIoX3JvdW5kUHJlY2lzZShjeWNsZUR1cmF0aW9uICogaXRlcmF0aW9uKSwgdHJ1ZSkuaW52YWxpZGF0ZSgpLl9sb2NrID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLl9pbml0dGVkKSB7XG4gICAgICAgIGlmIChfYXR0ZW1wdEluaXRUd2Vlbih0aGlzLCBpc05lZ2F0aXZlID8gdG90YWxUaW1lIDogdGltZSwgZm9yY2UsIHN1cHByZXNzRXZlbnRzLCB0VGltZSkpIHtcbiAgICAgICAgICB0aGlzLl90VGltZSA9IDA7IC8vIGluIGNvbnN0cnVjdG9yIGlmIGltbWVkaWF0ZVJlbmRlciBpcyB0cnVlLCB3ZSBzZXQgX3RUaW1lIHRvIC1fdGlueU51bSB0byBoYXZlIHRoZSBwbGF5aGVhZCBjcm9zcyB0aGUgc3RhcnRpbmcgcG9pbnQgYnV0IHdlIGNhbid0IGxlYXZlIF90VGltZSBhcyBhIG5lZ2F0aXZlIG51bWJlci5cblxuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZUaW1lICE9PSB0aGlzLl90aW1lKSB7XG4gICAgICAgICAgLy8gcmFyZSBlZGdlIGNhc2UgLSBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGFuIG9uVXBkYXRlIGluIHRoZSBfc3RhcnRBdCAoLmZyb21UbygpKSBtaWdodCBmb3JjZSB0aGlzIHR3ZWVuIHRvIHJlbmRlciBhdCBhIGRpZmZlcmVudCBzcG90IGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIGRpdGNoIHRoaXMgcmVuZGVyKCkgY2FsbCBzbyB0aGF0IGl0IGRvZXNuJ3QgcmV2ZXJ0IHRoZSB2YWx1ZXMuXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZHVyICE9PSB0aGlzLl9kdXIpIHtcbiAgICAgICAgICAvLyB3aGlsZSBpbml0dGluZywgYSBwbHVnaW4gbGlrZSBJbmVydGlhUGx1Z2luIG1pZ2h0IGFsdGVyIHRoZSBkdXJhdGlvbiwgc28gcmVydW4gZnJvbSB0aGUgc3RhcnQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgcmVuZGVycyBhcyBpdCBzaG91bGQuXG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKHRvdGFsVGltZSwgc3VwcHJlc3NFdmVudHMsIGZvcmNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl90VGltZSA9IHRUaW1lO1xuICAgICAgdGhpcy5fdGltZSA9IHRpbWU7XG5cbiAgICAgIGlmICghdGhpcy5fYWN0ICYmIHRoaXMuX3RzKSB7XG4gICAgICAgIHRoaXMuX2FjdCA9IDE7IC8vYXMgbG9uZyBhcyBpdCdzIG5vdCBwYXVzZWQsIGZvcmNlIGl0IHRvIGJlIGFjdGl2ZSBzbyB0aGF0IGlmIHRoZSB1c2VyIHJlbmRlcnMgaW5kZXBlbmRlbnQgb2YgdGhlIHBhcmVudCB0aW1lbGluZSwgaXQnbGwgYmUgZm9yY2VkIHRvIHJlLXJlbmRlciBvbiB0aGUgbmV4dCB0aWNrLlxuXG4gICAgICAgIHRoaXMuX2xhenkgPSAwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJhdGlvID0gcmF0aW8gPSAoeW95b0Vhc2UgfHwgdGhpcy5fZWFzZSkodGltZSAvIGR1cik7XG5cbiAgICAgIGlmICh0aGlzLl9mcm9tKSB7XG4gICAgICAgIHRoaXMucmF0aW8gPSByYXRpbyA9IDEgLSByYXRpbztcbiAgICAgIH1cblxuICAgICAgaWYgKHRpbWUgJiYgIXByZXZUaW1lICYmICFzdXBwcmVzc0V2ZW50cyAmJiAhaXRlcmF0aW9uKSB7XG4gICAgICAgIF9jYWxsYmFjayh0aGlzLCBcIm9uU3RhcnRcIik7XG5cbiAgICAgICAgaWYgKHRoaXMuX3RUaW1lICE9PSB0VGltZSkge1xuICAgICAgICAgIC8vIGluIGNhc2UgdGhlIG9uU3RhcnQgdHJpZ2dlcmVkIGEgcmVuZGVyIGF0IGEgZGlmZmVyZW50IHNwb3QsIGVqZWN0LiBMaWtlIGlmIHNvbWVvbmUgZGlkIGFuaW1hdGlvbi5wYXVzZSgwLjUpIG9yIHNvbWV0aGluZyBpbnNpZGUgdGhlIG9uU3RhcnQuXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHQgPSB0aGlzLl9wdDtcblxuICAgICAgd2hpbGUgKHB0KSB7XG4gICAgICAgIHB0LnIocmF0aW8sIHB0LmQpO1xuICAgICAgICBwdCA9IHB0Ll9uZXh0O1xuICAgICAgfVxuXG4gICAgICB0aW1lbGluZSAmJiB0aW1lbGluZS5yZW5kZXIodG90YWxUaW1lIDwgMCA/IHRvdGFsVGltZSA6ICF0aW1lICYmIGlzWW95byA/IC1fdGlueU51bSA6IHRpbWVsaW5lLl9kdXIgKiB0aW1lbGluZS5fZWFzZSh0aW1lIC8gdGhpcy5fZHVyKSwgc3VwcHJlc3NFdmVudHMsIGZvcmNlKSB8fCB0aGlzLl9zdGFydEF0ICYmICh0aGlzLl96VGltZSA9IHRvdGFsVGltZSk7XG5cbiAgICAgIGlmICh0aGlzLl9vblVwZGF0ZSAmJiAhc3VwcHJlc3NFdmVudHMpIHtcbiAgICAgICAgaXNOZWdhdGl2ZSAmJiBfcmV3aW5kU3RhcnRBdCh0aGlzLCB0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSk7IC8vbm90ZTogZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHdlIHR1Y2sgdGhpcyBjb25kaXRpb25hbCBsb2dpYyBpbnNpZGUgbGVzcyB0cmF2ZWxlZCBhcmVhcyAobW9zdCB0d2VlbnMgZG9uJ3QgaGF2ZSBhbiBvblVwZGF0ZSkuIFdlJ2QganVzdCBoYXZlIGl0IGF0IHRoZSBlbmQgYmVmb3JlIHRoZSBvbkNvbXBsZXRlLCBidXQgdGhlIHZhbHVlcyBzaG91bGQgYmUgdXBkYXRlZCBiZWZvcmUgYW55IG9uVXBkYXRlIGlzIGNhbGxlZCwgc28gd2UgQUxTTyBwdXQgaXQgaGVyZSBhbmQgdGhlbiBpZiBpdCdzIG5vdCBjYWxsZWQsIHdlIGRvIHNvIGxhdGVyIG5lYXIgdGhlIG9uQ29tcGxldGUuXG5cbiAgICAgICAgX2NhbGxiYWNrKHRoaXMsIFwib25VcGRhdGVcIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3JlcGVhdCAmJiBpdGVyYXRpb24gIT09IHByZXZJdGVyYXRpb24gJiYgdGhpcy52YXJzLm9uUmVwZWF0ICYmICFzdXBwcmVzc0V2ZW50cyAmJiB0aGlzLnBhcmVudCAmJiBfY2FsbGJhY2sodGhpcywgXCJvblJlcGVhdFwiKTtcblxuICAgICAgaWYgKCh0VGltZSA9PT0gdGhpcy5fdER1ciB8fCAhdFRpbWUpICYmIHRoaXMuX3RUaW1lID09PSB0VGltZSkge1xuICAgICAgICBpc05lZ2F0aXZlICYmICF0aGlzLl9vblVwZGF0ZSAmJiBfcmV3aW5kU3RhcnRBdCh0aGlzLCB0b3RhbFRpbWUsIHRydWUsIHRydWUpO1xuICAgICAgICAodG90YWxUaW1lIHx8ICFkdXIpICYmICh0VGltZSA9PT0gdGhpcy5fdER1ciAmJiB0aGlzLl90cyA+IDAgfHwgIXRUaW1lICYmIHRoaXMuX3RzIDwgMCkgJiYgX3JlbW92ZUZyb21QYXJlbnQodGhpcywgMSk7IC8vIGRvbid0IHJlbW92ZSBpZiB3ZSdyZSByZW5kZXJpbmcgYXQgZXhhY3RseSBhIHRpbWUgb2YgMCwgYXMgdGhlcmUgY291bGQgYmUgYXV0b1JldmVydCB2YWx1ZXMgdGhhdCBzaG91bGQgZ2V0IHNldCBvbiB0aGUgbmV4dCB0aWNrIChpZiB0aGUgcGxheWhlYWQgZ29lcyBiYWNrd2FyZCBiZXlvbmQgdGhlIHN0YXJ0VGltZSwgbmVnYXRpdmUgdG90YWxUaW1lKS4gRG9uJ3QgcmVtb3ZlIGlmIHRoZSB0aW1lbGluZSBpcyByZXZlcnNlZCBhbmQgdGhlIHBsYXloZWFkIGlzbid0IGF0IDAsIG90aGVyd2lzZSB0bC5wcm9ncmVzcygxKS5yZXZlcnNlKCkgd29uJ3Qgd29yay4gT25seSByZW1vdmUgaWYgdGhlIHBsYXloZWFkIGlzIGF0IHRoZSBlbmQgYW5kIHRpbWVTY2FsZSBpcyBwb3NpdGl2ZSwgb3IgaWYgdGhlIHBsYXloZWFkIGlzIGF0IDAgYW5kIHRoZSB0aW1lU2NhbGUgaXMgbmVnYXRpdmUuXG5cbiAgICAgICAgaWYgKCFzdXBwcmVzc0V2ZW50cyAmJiAhKGlzTmVnYXRpdmUgJiYgIXByZXZUaW1lKSAmJiAodFRpbWUgfHwgcHJldlRpbWUgfHwgaXNZb3lvKSkge1xuICAgICAgICAgIC8vIGlmIHByZXZUaW1lIGFuZCB0VGltZSBhcmUgemVybywgd2Ugc2hvdWxkbid0IGZpcmUgdGhlIG9uUmV2ZXJzZUNvbXBsZXRlLiBUaGlzIGNvdWxkIGhhcHBlbiBpZiB5b3UgZ3NhcC50byguLi4ge3BhdXNlZDp0cnVlfSkucGxheSgpO1xuICAgICAgICAgIF9jYWxsYmFjayh0aGlzLCB0VGltZSA9PT0gdER1ciA/IFwib25Db21wbGV0ZVwiIDogXCJvblJldmVyc2VDb21wbGV0ZVwiLCB0cnVlKTtcblxuICAgICAgICAgIHRoaXMuX3Byb20gJiYgISh0VGltZSA8IHREdXIgJiYgdGhpcy50aW1lU2NhbGUoKSA+IDApICYmIHRoaXMuX3Byb20oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90bzMudGFyZ2V0cyA9IGZ1bmN0aW9uIHRhcmdldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhcmdldHM7XG4gIH07XG5cbiAgX3Byb3RvMy5pbnZhbGlkYXRlID0gZnVuY3Rpb24gaW52YWxpZGF0ZShzb2Z0KSB7XG4gICAgLy8gXCJzb2Z0XCIgZ2l2ZXMgdXMgYSB3YXkgdG8gY2xlYXIgb3V0IGV2ZXJ5dGhpbmcgRVhDRVBUIHRoZSByZWNvcmRlZCBwcmUtXCJmcm9tXCIgcG9ydGlvbiBvZiBmcm9tKCkgdHdlZW5zLiBPdGhlcndpc2UsIGZvciBleGFtcGxlLCBpZiB5b3UgdHdlZW4ucHJvZ3Jlc3MoMSkucmVuZGVyKDAsIHRydWUgdHJ1ZSkuaW52YWxpZGF0ZSgpLCB0aGUgXCJmcm9tXCIgdmFsdWVzIHdvdWxkIHBlcnNpc3QgYW5kIHRoZW4gb24gdGhlIG5leHQgcmVuZGVyLCB0aGUgZnJvbSgpIHR3ZWVucyB3b3VsZCBpbml0aWFsaXplIGFuZCB0aGUgY3VycmVudCB2YWx1ZSB3b3VsZCBtYXRjaCB0aGUgXCJmcm9tXCIgdmFsdWVzLCB0aHVzIGFuaW1hdGUgZnJvbSB0aGUgc2FtZSB2YWx1ZSB0byB0aGUgc2FtZSB2YWx1ZSAobm8gYW5pbWF0aW9uKS4gV2UgdGFwIGludG8gdGhpcyBpbiBTY3JvbGxUcmlnZ2VyJ3MgcmVmcmVzaCgpIHdoZXJlIHdlIG11c3QgcHVzaCBhIHR3ZWVuIHRvIGNvbXBsZXRpb24gYW5kIHRoZW4gYmFjayBhZ2FpbiBidXQgaG9ub3IgaXRzIGluaXQgc3RhdGUgaW4gY2FzZSB0aGUgdHdlZW4gaXMgZGVwZW5kZW50IG9uIGFub3RoZXIgdHdlZW4gZnVydGhlciB1cCBvbiB0aGUgcGFnZS5cbiAgICAoIXNvZnQgfHwgIXRoaXMudmFycy5ydW5CYWNrd2FyZHMpICYmICh0aGlzLl9zdGFydEF0ID0gMCk7XG4gICAgdGhpcy5fcHQgPSB0aGlzLl9vcCA9IHRoaXMuX29uVXBkYXRlID0gdGhpcy5fbGF6eSA9IHRoaXMucmF0aW8gPSAwO1xuICAgIHRoaXMuX3B0TG9va3VwID0gW107XG4gICAgdGhpcy50aW1lbGluZSAmJiB0aGlzLnRpbWVsaW5lLmludmFsaWRhdGUoc29mdCk7XG4gICAgcmV0dXJuIF9BbmltYXRpb24yLnByb3RvdHlwZS5pbnZhbGlkYXRlLmNhbGwodGhpcywgc29mdCk7XG4gIH07XG5cbiAgX3Byb3RvMy5yZXNldFRvID0gZnVuY3Rpb24gcmVzZXRUbyhwcm9wZXJ0eSwgdmFsdWUsIHN0YXJ0LCBzdGFydElzUmVsYXRpdmUpIHtcbiAgICBfdGlja2VyQWN0aXZlIHx8IF90aWNrZXIud2FrZSgpO1xuICAgIHRoaXMuX3RzIHx8IHRoaXMucGxheSgpO1xuICAgIHZhciB0aW1lID0gTWF0aC5taW4odGhpcy5fZHVyLCAodGhpcy5fZHAuX3RpbWUgLSB0aGlzLl9zdGFydCkgKiB0aGlzLl90cyksXG4gICAgICAgIHJhdGlvO1xuICAgIHRoaXMuX2luaXR0ZWQgfHwgX2luaXRUd2Vlbih0aGlzLCB0aW1lKTtcbiAgICByYXRpbyA9IHRoaXMuX2Vhc2UodGltZSAvIHRoaXMuX2R1cik7IC8vIGRvbid0IGp1c3QgZ2V0IHR3ZWVuLnJhdGlvIGJlY2F1c2UgaXQgbWF5IG5vdCBoYXZlIHJlbmRlcmVkIHlldC5cbiAgICAvLyBwb3NzaWJsZSBmdXR1cmUgYWRkaXRpb24gdG8gYWxsb3cgYW4gb2JqZWN0IHdpdGggbXVsdGlwbGUgdmFsdWVzIHRvIHVwZGF0ZSwgbGlrZSB0d2Vlbi5yZXNldFRvKHt4OiAxMDAsIHk6IDIwMH0pOyBBdCB0aGlzIHBvaW50LCBpdCBkb2Vzbid0IHNlZW0gd29ydGggdGhlIGFkZGVkIGtiIGdpdmVuIHRoZSBmYWN0IHRoYXQgbW9zdCB1c2VycyB3aWxsIGxpa2VseSBvcHQgZm9yIHRoZSBjb252ZW5pZW50IGdzYXAucXVpY2tUbygpIHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIHRoaXMgbWV0aG9kLlxuICAgIC8vIGlmIChfaXNPYmplY3QocHJvcGVydHkpKSB7IC8vIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvblxuICAgIC8vIFx0Zm9yIChwIGluIHByb3BlcnR5KSB7XG4gICAgLy8gXHRcdGlmIChfdXBkYXRlUHJvcFR3ZWVucyh0aGlzLCBwLCBwcm9wZXJ0eVtwXSwgdmFsdWUgPyB2YWx1ZVtwXSA6IG51bGwsIHN0YXJ0LCByYXRpbywgdGltZSkpIHtcbiAgICAvLyBcdFx0XHRyZXR1cm4gdGhpcy5yZXNldFRvKHByb3BlcnR5LCB2YWx1ZSwgc3RhcnQsIHN0YXJ0SXNSZWxhdGl2ZSk7IC8vIGlmIGEgUHJvcFR3ZWVuIHdhc24ndCBmb3VuZCBmb3IgdGhlIHByb3BlcnR5LCBpdCdsbCBnZXQgZm9yY2VkIHdpdGggYSByZS1pbml0aWFsaXphdGlvbiBzbyB3ZSBuZWVkIHRvIGp1bXAgb3V0IGFuZCBzdGFydCBvdmVyIGFnYWluLlxuICAgIC8vIFx0XHR9XG4gICAgLy8gXHR9XG4gICAgLy8gfSBlbHNlIHtcblxuICAgIGlmIChfdXBkYXRlUHJvcFR3ZWVucyh0aGlzLCBwcm9wZXJ0eSwgdmFsdWUsIHN0YXJ0LCBzdGFydElzUmVsYXRpdmUsIHJhdGlvLCB0aW1lKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzZXRUbyhwcm9wZXJ0eSwgdmFsdWUsIHN0YXJ0LCBzdGFydElzUmVsYXRpdmUpOyAvLyBpZiBhIFByb3BUd2VlbiB3YXNuJ3QgZm91bmQgZm9yIHRoZSBwcm9wZXJ0eSwgaXQnbGwgZ2V0IGZvcmNlZCB3aXRoIGEgcmUtaW5pdGlhbGl6YXRpb24gc28gd2UgbmVlZCB0byBqdW1wIG91dCBhbmQgc3RhcnQgb3ZlciBhZ2Fpbi5cbiAgICB9IC8vfVxuXG5cbiAgICBfYWxpZ25QbGF5aGVhZCh0aGlzLCAwKTtcblxuICAgIHRoaXMucGFyZW50IHx8IF9hZGRMaW5rZWRMaXN0SXRlbSh0aGlzLl9kcCwgdGhpcywgXCJfZmlyc3RcIiwgXCJfbGFzdFwiLCB0aGlzLl9kcC5fc29ydCA/IFwiX3N0YXJ0XCIgOiAwKTtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXIoMCk7XG4gIH07XG5cbiAgX3Byb3RvMy5raWxsID0gZnVuY3Rpb24ga2lsbCh0YXJnZXRzLCB2YXJzKSB7XG4gICAgaWYgKHZhcnMgPT09IHZvaWQgMCkge1xuICAgICAgdmFycyA9IFwiYWxsXCI7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRzICYmICghdmFycyB8fCB2YXJzID09PSBcImFsbFwiKSkge1xuICAgICAgdGhpcy5fbGF6eSA9IHRoaXMuX3B0ID0gMDtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudCA/IF9pbnRlcnJ1cHQodGhpcykgOiB0aGlzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XG4gICAgICB2YXIgdER1ciA9IHRoaXMudGltZWxpbmUudG90YWxEdXJhdGlvbigpO1xuICAgICAgdGhpcy50aW1lbGluZS5raWxsVHdlZW5zT2YodGFyZ2V0cywgdmFycywgX292ZXJ3cml0aW5nVHdlZW4gJiYgX292ZXJ3cml0aW5nVHdlZW4udmFycy5vdmVyd3JpdGUgIT09IHRydWUpLl9maXJzdCB8fCBfaW50ZXJydXB0KHRoaXMpOyAvLyBpZiBub3RoaW5nIGlzIGxlZnQgdHdlZW5pbmcsIGludGVycnVwdC5cblxuICAgICAgdGhpcy5wYXJlbnQgJiYgdER1ciAhPT0gdGhpcy50aW1lbGluZS50b3RhbER1cmF0aW9uKCkgJiYgX3NldER1cmF0aW9uKHRoaXMsIHRoaXMuX2R1ciAqIHRoaXMudGltZWxpbmUuX3REdXIgLyB0RHVyLCAwLCAxKTsgLy8gaWYgYSBuZXN0ZWQgdHdlZW4gaXMga2lsbGVkIHRoYXQgY2hhbmdlcyB0aGUgZHVyYXRpb24sIGl0IHNob3VsZCBhZmZlY3QgdGhpcyB0d2VlbidzIGR1cmF0aW9uLiBXZSBtdXN0IHVzZSB0aGUgcmF0aW8sIHRob3VnaCwgYmVjYXVzZSBzb21ldGltZXMgdGhlIGludGVybmFsIHRpbWVsaW5lIGlzIHN0cmV0Y2hlZCBsaWtlIGZvciBrZXlmcmFtZXMgd2hlcmUgdGhleSBkb24ndCBhbGwgYWRkIHVwIHRvIHdoYXRldmVyIHRoZSBwYXJlbnQgdHdlZW4ncyBkdXJhdGlvbiB3YXMgc2V0IHRvLlxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgcGFyc2VkVGFyZ2V0cyA9IHRoaXMuX3RhcmdldHMsXG4gICAgICAgIGtpbGxpbmdUYXJnZXRzID0gdGFyZ2V0cyA/IHRvQXJyYXkodGFyZ2V0cykgOiBwYXJzZWRUYXJnZXRzLFxuICAgICAgICBwcm9wVHdlZW5Mb29rdXAgPSB0aGlzLl9wdExvb2t1cCxcbiAgICAgICAgZmlyc3RQVCA9IHRoaXMuX3B0LFxuICAgICAgICBvdmVyd3JpdHRlblByb3BzLFxuICAgICAgICBjdXJMb29rdXAsXG4gICAgICAgIGN1ck92ZXJ3cml0ZVByb3BzLFxuICAgICAgICBwcm9wcyxcbiAgICAgICAgcCxcbiAgICAgICAgcHQsXG4gICAgICAgIGk7XG5cbiAgICBpZiAoKCF2YXJzIHx8IHZhcnMgPT09IFwiYWxsXCIpICYmIF9hcnJheXNNYXRjaChwYXJzZWRUYXJnZXRzLCBraWxsaW5nVGFyZ2V0cykpIHtcbiAgICAgIHZhcnMgPT09IFwiYWxsXCIgJiYgKHRoaXMuX3B0ID0gMCk7XG4gICAgICByZXR1cm4gX2ludGVycnVwdCh0aGlzKTtcbiAgICB9XG5cbiAgICBvdmVyd3JpdHRlblByb3BzID0gdGhpcy5fb3AgPSB0aGlzLl9vcCB8fCBbXTtcblxuICAgIGlmICh2YXJzICE9PSBcImFsbFwiKSB7XG4gICAgICAvL3NvIHBlb3BsZSBjYW4gcGFzcyBpbiBhIGNvbW1hLWRlbGltaXRlZCBsaXN0IG9mIHByb3BlcnR5IG5hbWVzXG4gICAgICBpZiAoX2lzU3RyaW5nKHZhcnMpKSB7XG4gICAgICAgIHAgPSB7fTtcblxuICAgICAgICBfZm9yRWFjaE5hbWUodmFycywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gcFtuYW1lXSA9IDE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhcnMgPSBwO1xuICAgICAgfVxuXG4gICAgICB2YXJzID0gX2FkZEFsaWFzZXNUb1ZhcnMocGFyc2VkVGFyZ2V0cywgdmFycyk7XG4gICAgfVxuXG4gICAgaSA9IHBhcnNlZFRhcmdldHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgaWYgKH5raWxsaW5nVGFyZ2V0cy5pbmRleE9mKHBhcnNlZFRhcmdldHNbaV0pKSB7XG4gICAgICAgIGN1ckxvb2t1cCA9IHByb3BUd2Vlbkxvb2t1cFtpXTtcblxuICAgICAgICBpZiAodmFycyA9PT0gXCJhbGxcIikge1xuICAgICAgICAgIG92ZXJ3cml0dGVuUHJvcHNbaV0gPSB2YXJzO1xuICAgICAgICAgIHByb3BzID0gY3VyTG9va3VwO1xuICAgICAgICAgIGN1ck92ZXJ3cml0ZVByb3BzID0ge307XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VyT3ZlcndyaXRlUHJvcHMgPSBvdmVyd3JpdHRlblByb3BzW2ldID0gb3ZlcndyaXR0ZW5Qcm9wc1tpXSB8fCB7fTtcbiAgICAgICAgICBwcm9wcyA9IHZhcnM7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHAgaW4gcHJvcHMpIHtcbiAgICAgICAgICBwdCA9IGN1ckxvb2t1cCAmJiBjdXJMb29rdXBbcF07XG5cbiAgICAgICAgICBpZiAocHQpIHtcbiAgICAgICAgICAgIGlmICghKFwia2lsbFwiIGluIHB0LmQpIHx8IHB0LmQua2lsbChwKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBfcmVtb3ZlTGlua2VkTGlzdEl0ZW0odGhpcywgcHQsIFwiX3B0XCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWxldGUgY3VyTG9va3VwW3BdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjdXJPdmVyd3JpdGVQcm9wcyAhPT0gXCJhbGxcIikge1xuICAgICAgICAgICAgY3VyT3ZlcndyaXRlUHJvcHNbcF0gPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2luaXR0ZWQgJiYgIXRoaXMuX3B0ICYmIGZpcnN0UFQgJiYgX2ludGVycnVwdCh0aGlzKTsgLy9pZiBhbGwgdHdlZW5pbmcgcHJvcGVydGllcyBhcmUga2lsbGVkLCBraWxsIHRoZSB0d2Vlbi4gV2l0aG91dCB0aGlzIGxpbmUsIGlmIHRoZXJlJ3MgYSB0d2VlbiB3aXRoIG11bHRpcGxlIHRhcmdldHMgYW5kIHRoZW4geW91IGtpbGxUd2VlbnNPZigpIGVhY2ggdGFyZ2V0IGluZGl2aWR1YWxseSwgdGhlIHR3ZWVuIHdvdWxkIHRlY2huaWNhbGx5IHN0aWxsIHJlbWFpbiBhY3RpdmUgYW5kIGZpcmUgaXRzIG9uQ29tcGxldGUgZXZlbiB0aG91Z2ggdGhlcmUgYXJlbid0IGFueSBtb3JlIHByb3BlcnRpZXMgdHdlZW5pbmcuXG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBUd2Vlbi50byA9IGZ1bmN0aW9uIHRvKHRhcmdldHMsIHZhcnMpIHtcbiAgICByZXR1cm4gbmV3IFR3ZWVuKHRhcmdldHMsIHZhcnMsIGFyZ3VtZW50c1syXSk7XG4gIH07XG5cbiAgVHdlZW4uZnJvbSA9IGZ1bmN0aW9uIGZyb20odGFyZ2V0cywgdmFycykge1xuICAgIHJldHVybiBfY3JlYXRlVHdlZW5UeXBlKDEsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgVHdlZW4uZGVsYXllZENhbGwgPSBmdW5jdGlvbiBkZWxheWVkQ2FsbChkZWxheSwgY2FsbGJhY2ssIHBhcmFtcywgc2NvcGUpIHtcbiAgICByZXR1cm4gbmV3IFR3ZWVuKGNhbGxiYWNrLCAwLCB7XG4gICAgICBpbW1lZGlhdGVSZW5kZXI6IGZhbHNlLFxuICAgICAgbGF6eTogZmFsc2UsXG4gICAgICBvdmVyd3JpdGU6IGZhbHNlLFxuICAgICAgZGVsYXk6IGRlbGF5LFxuICAgICAgb25Db21wbGV0ZTogY2FsbGJhY2ssXG4gICAgICBvblJldmVyc2VDb21wbGV0ZTogY2FsbGJhY2ssXG4gICAgICBvbkNvbXBsZXRlUGFyYW1zOiBwYXJhbXMsXG4gICAgICBvblJldmVyc2VDb21wbGV0ZVBhcmFtczogcGFyYW1zLFxuICAgICAgY2FsbGJhY2tTY29wZTogc2NvcGVcbiAgICB9KTsgLy8gd2UgbXVzdCB1c2Ugb25SZXZlcnNlQ29tcGxldGUgdG9vIGZvciB0aGluZ3MgbGlrZSB0aW1lbGluZS5hZGQoKCkgPT4gey4uLn0pIHdoaWNoIHNob3VsZCBiZSB0cmlnZ2VyZWQgaW4gQk9USCBkaXJlY3Rpb25zIChmb3J3YXJkIGFuZCByZXZlcnNlKVxuICB9O1xuXG4gIFR3ZWVuLmZyb21UbyA9IGZ1bmN0aW9uIGZyb21Ubyh0YXJnZXRzLCBmcm9tVmFycywgdG9WYXJzKSB7XG4gICAgcmV0dXJuIF9jcmVhdGVUd2VlblR5cGUoMiwgYXJndW1lbnRzKTtcbiAgfTtcblxuICBUd2Vlbi5zZXQgPSBmdW5jdGlvbiBzZXQodGFyZ2V0cywgdmFycykge1xuICAgIHZhcnMuZHVyYXRpb24gPSAwO1xuICAgIHZhcnMucmVwZWF0RGVsYXkgfHwgKHZhcnMucmVwZWF0ID0gMCk7XG4gICAgcmV0dXJuIG5ldyBUd2Vlbih0YXJnZXRzLCB2YXJzKTtcbiAgfTtcblxuICBUd2Vlbi5raWxsVHdlZW5zT2YgPSBmdW5jdGlvbiBraWxsVHdlZW5zT2YodGFyZ2V0cywgcHJvcHMsIG9ubHlBY3RpdmUpIHtcbiAgICByZXR1cm4gX2dsb2JhbFRpbWVsaW5lLmtpbGxUd2VlbnNPZih0YXJnZXRzLCBwcm9wcywgb25seUFjdGl2ZSk7XG4gIH07XG5cbiAgcmV0dXJuIFR3ZWVuO1xufShBbmltYXRpb24pO1xuXG5fc2V0RGVmYXVsdHMoVHdlZW4ucHJvdG90eXBlLCB7XG4gIF90YXJnZXRzOiBbXSxcbiAgX2xhenk6IDAsXG4gIF9zdGFydEF0OiAwLFxuICBfb3A6IDAsXG4gIF9vbkluaXQ6IDBcbn0pOyAvL2FkZCB0aGUgcGVydGluZW50IHRpbWVsaW5lIG1ldGhvZHMgdG8gVHdlZW4gaW5zdGFuY2VzIHNvIHRoYXQgdXNlcnMgY2FuIGNoYWluIGNvbnZlbmllbnRseSBhbmQgY3JlYXRlIGEgdGltZWxpbmUgYXV0b21hdGljYWxseS4gKHJlbW92ZWQgZHVlIHRvIGNvbmNlcm5zIHRoYXQgaXQnZCB1bHRpbWF0ZWx5IGFkZCB0byBtb3JlIGNvbmZ1c2lvbiBlc3BlY2lhbGx5IGZvciBiZWdpbm5lcnMpXG4vLyBfZm9yRWFjaE5hbWUoXCJ0byxmcm9tLGZyb21UbyxzZXQsY2FsbCxhZGQsYWRkTGFiZWwsYWRkUGF1c2VcIiwgbmFtZSA9PiB7XG4vLyBcdFR3ZWVuLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuLy8gXHRcdGxldCB0bCA9IG5ldyBUaW1lbGluZSgpO1xuLy8gXHRcdHJldHVybiBfYWRkVG9UaW1lbGluZSh0bCwgdGhpcylbbmFtZV0uYXBwbHkodGwsIHRvQXJyYXkoYXJndW1lbnRzKSk7XG4vLyBcdH1cbi8vIH0pO1xuLy9mb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gTGV2ZXJhZ2UgdGhlIHRpbWVsaW5lIGNhbGxzLlxuXG5cbl9mb3JFYWNoTmFtZShcInN0YWdnZXJUbyxzdGFnZ2VyRnJvbSxzdGFnZ2VyRnJvbVRvXCIsIGZ1bmN0aW9uIChuYW1lKSB7XG4gIFR3ZWVuW25hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB0bCA9IG5ldyBUaW1lbGluZSgpLFxuICAgICAgICBwYXJhbXMgPSBfc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgcGFyYW1zLnNwbGljZShuYW1lID09PSBcInN0YWdnZXJGcm9tVG9cIiA/IDUgOiA0LCAwLCAwKTtcbiAgICByZXR1cm4gdGxbbmFtZV0uYXBwbHkodGwsIHBhcmFtcyk7XG4gIH07XG59KTtcbi8qXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogUFJPUFRXRUVOXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxudmFyIF9zZXR0ZXJQbGFpbiA9IGZ1bmN0aW9uIF9zZXR0ZXJQbGFpbih0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSkge1xuICByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5XSA9IHZhbHVlO1xufSxcbiAgICBfc2V0dGVyRnVuYyA9IGZ1bmN0aW9uIF9zZXR0ZXJGdW5jKHRhcmdldCwgcHJvcGVydHksIHZhbHVlKSB7XG4gIHJldHVybiB0YXJnZXRbcHJvcGVydHldKHZhbHVlKTtcbn0sXG4gICAgX3NldHRlckZ1bmNXaXRoUGFyYW0gPSBmdW5jdGlvbiBfc2V0dGVyRnVuY1dpdGhQYXJhbSh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSwgZGF0YSkge1xuICByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5XShkYXRhLmZwLCB2YWx1ZSk7XG59LFxuICAgIF9zZXR0ZXJBdHRyaWJ1dGUgPSBmdW5jdGlvbiBfc2V0dGVyQXR0cmlidXRlKHRhcmdldCwgcHJvcGVydHksIHZhbHVlKSB7XG4gIHJldHVybiB0YXJnZXQuc2V0QXR0cmlidXRlKHByb3BlcnR5LCB2YWx1ZSk7XG59LFxuICAgIF9nZXRTZXR0ZXIgPSBmdW5jdGlvbiBfZ2V0U2V0dGVyKHRhcmdldCwgcHJvcGVydHkpIHtcbiAgcmV0dXJuIF9pc0Z1bmN0aW9uKHRhcmdldFtwcm9wZXJ0eV0pID8gX3NldHRlckZ1bmMgOiBfaXNVbmRlZmluZWQodGFyZ2V0W3Byb3BlcnR5XSkgJiYgdGFyZ2V0LnNldEF0dHJpYnV0ZSA/IF9zZXR0ZXJBdHRyaWJ1dGUgOiBfc2V0dGVyUGxhaW47XG59LFxuICAgIF9yZW5kZXJQbGFpbiA9IGZ1bmN0aW9uIF9yZW5kZXJQbGFpbihyYXRpbywgZGF0YSkge1xuICByZXR1cm4gZGF0YS5zZXQoZGF0YS50LCBkYXRhLnAsIE1hdGgucm91bmQoKGRhdGEucyArIGRhdGEuYyAqIHJhdGlvKSAqIDEwMDAwMDApIC8gMTAwMDAwMCwgZGF0YSk7XG59LFxuICAgIF9yZW5kZXJCb29sZWFuID0gZnVuY3Rpb24gX3JlbmRlckJvb2xlYW4ocmF0aW8sIGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEuc2V0KGRhdGEudCwgZGF0YS5wLCAhIShkYXRhLnMgKyBkYXRhLmMgKiByYXRpbyksIGRhdGEpO1xufSxcbiAgICBfcmVuZGVyQ29tcGxleFN0cmluZyA9IGZ1bmN0aW9uIF9yZW5kZXJDb21wbGV4U3RyaW5nKHJhdGlvLCBkYXRhKSB7XG4gIHZhciBwdCA9IGRhdGEuX3B0LFxuICAgICAgcyA9IFwiXCI7XG5cbiAgaWYgKCFyYXRpbyAmJiBkYXRhLmIpIHtcbiAgICAvL2IgPSBiZWdpbm5pbmcgc3RyaW5nXG4gICAgcyA9IGRhdGEuYjtcbiAgfSBlbHNlIGlmIChyYXRpbyA9PT0gMSAmJiBkYXRhLmUpIHtcbiAgICAvL2UgPSBlbmRpbmcgc3RyaW5nXG4gICAgcyA9IGRhdGEuZTtcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAocHQpIHtcbiAgICAgIHMgPSBwdC5wICsgKHB0Lm0gPyBwdC5tKHB0LnMgKyBwdC5jICogcmF0aW8pIDogTWF0aC5yb3VuZCgocHQucyArIHB0LmMgKiByYXRpbykgKiAxMDAwMCkgLyAxMDAwMCkgKyBzOyAvL3dlIHVzZSB0aGUgXCJwXCIgcHJvcGVydHkgZm9yIHRoZSB0ZXh0IGluYmV0d2VlbiAobGlrZSBhIHN1ZmZpeCkuIEFuZCBpbiB0aGUgY29udGV4dCBvZiBhIGNvbXBsZXggc3RyaW5nLCB0aGUgbW9kaWZpZXIgKG0pIGlzIHR5cGljYWxseSBqdXN0IE1hdGgucm91bmQoKSwgbGlrZSBmb3IgUkdCIGNvbG9ycy5cblxuICAgICAgcHQgPSBwdC5fbmV4dDtcbiAgICB9XG5cbiAgICBzICs9IGRhdGEuYzsgLy93ZSB1c2UgdGhlIFwiY1wiIG9mIHRoZSBQcm9wVHdlZW4gdG8gc3RvcmUgdGhlIGZpbmFsIGNodW5rIG9mIG5vbi1udW1lcmljIHRleHQuXG4gIH1cblxuICBkYXRhLnNldChkYXRhLnQsIGRhdGEucCwgcywgZGF0YSk7XG59LFxuICAgIF9yZW5kZXJQcm9wVHdlZW5zID0gZnVuY3Rpb24gX3JlbmRlclByb3BUd2VlbnMocmF0aW8sIGRhdGEpIHtcbiAgdmFyIHB0ID0gZGF0YS5fcHQ7XG5cbiAgd2hpbGUgKHB0KSB7XG4gICAgcHQucihyYXRpbywgcHQuZCk7XG4gICAgcHQgPSBwdC5fbmV4dDtcbiAgfVxufSxcbiAgICBfYWRkUGx1Z2luTW9kaWZpZXIgPSBmdW5jdGlvbiBfYWRkUGx1Z2luTW9kaWZpZXIobW9kaWZpZXIsIHR3ZWVuLCB0YXJnZXQsIHByb3BlcnR5KSB7XG4gIHZhciBwdCA9IHRoaXMuX3B0LFxuICAgICAgbmV4dDtcblxuICB3aGlsZSAocHQpIHtcbiAgICBuZXh0ID0gcHQuX25leHQ7XG4gICAgcHQucCA9PT0gcHJvcGVydHkgJiYgcHQubW9kaWZpZXIobW9kaWZpZXIsIHR3ZWVuLCB0YXJnZXQpO1xuICAgIHB0ID0gbmV4dDtcbiAgfVxufSxcbiAgICBfa2lsbFByb3BUd2VlbnNPZiA9IGZ1bmN0aW9uIF9raWxsUHJvcFR3ZWVuc09mKHByb3BlcnR5KSB7XG4gIHZhciBwdCA9IHRoaXMuX3B0LFxuICAgICAgaGFzTm9uRGVwZW5kZW50UmVtYWluaW5nLFxuICAgICAgbmV4dDtcblxuICB3aGlsZSAocHQpIHtcbiAgICBuZXh0ID0gcHQuX25leHQ7XG5cbiAgICBpZiAocHQucCA9PT0gcHJvcGVydHkgJiYgIXB0Lm9wIHx8IHB0Lm9wID09PSBwcm9wZXJ0eSkge1xuICAgICAgX3JlbW92ZUxpbmtlZExpc3RJdGVtKHRoaXMsIHB0LCBcIl9wdFwiKTtcbiAgICB9IGVsc2UgaWYgKCFwdC5kZXApIHtcbiAgICAgIGhhc05vbkRlcGVuZGVudFJlbWFpbmluZyA9IDE7XG4gICAgfVxuXG4gICAgcHQgPSBuZXh0O1xuICB9XG5cbiAgcmV0dXJuICFoYXNOb25EZXBlbmRlbnRSZW1haW5pbmc7XG59LFxuICAgIF9zZXR0ZXJXaXRoTW9kaWZpZXIgPSBmdW5jdGlvbiBfc2V0dGVyV2l0aE1vZGlmaWVyKHRhcmdldCwgcHJvcGVydHksIHZhbHVlLCBkYXRhKSB7XG4gIGRhdGEubVNldCh0YXJnZXQsIHByb3BlcnR5LCBkYXRhLm0uY2FsbChkYXRhLnR3ZWVuLCB2YWx1ZSwgZGF0YS5tdCksIGRhdGEpO1xufSxcbiAgICBfc29ydFByb3BUd2VlbnNCeVByaW9yaXR5ID0gZnVuY3Rpb24gX3NvcnRQcm9wVHdlZW5zQnlQcmlvcml0eShwYXJlbnQpIHtcbiAgdmFyIHB0ID0gcGFyZW50Ll9wdCxcbiAgICAgIG5leHQsXG4gICAgICBwdDIsXG4gICAgICBmaXJzdCxcbiAgICAgIGxhc3Q7IC8vc29ydHMgdGhlIFByb3BUd2VlbiBsaW5rZWQgbGlzdCBpbiBvcmRlciBvZiBwcmlvcml0eSBiZWNhdXNlIHNvbWUgcGx1Z2lucyBuZWVkIHRvIGRvIHRoZWlyIHdvcmsgYWZ0ZXIgQUxMIG9mIHRoZSBQcm9wVHdlZW5zIHdlcmUgY3JlYXRlZCAobGlrZSBSb3VuZFByb3BzUGx1Z2luIGFuZCBNb2RpZmllcnNQbHVnaW4pXG5cbiAgd2hpbGUgKHB0KSB7XG4gICAgbmV4dCA9IHB0Ll9uZXh0O1xuICAgIHB0MiA9IGZpcnN0O1xuXG4gICAgd2hpbGUgKHB0MiAmJiBwdDIucHIgPiBwdC5wcikge1xuICAgICAgcHQyID0gcHQyLl9uZXh0O1xuICAgIH1cblxuICAgIGlmIChwdC5fcHJldiA9IHB0MiA/IHB0Mi5fcHJldiA6IGxhc3QpIHtcbiAgICAgIHB0Ll9wcmV2Ll9uZXh0ID0gcHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpcnN0ID0gcHQ7XG4gICAgfVxuXG4gICAgaWYgKHB0Ll9uZXh0ID0gcHQyKSB7XG4gICAgICBwdDIuX3ByZXYgPSBwdDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdCA9IHB0O1xuICAgIH1cblxuICAgIHB0ID0gbmV4dDtcbiAgfVxuXG4gIHBhcmVudC5fcHQgPSBmaXJzdDtcbn07IC8vUHJvcFR3ZWVuIGtleTogdCA9IHRhcmdldCwgcCA9IHByb3AsIHIgPSByZW5kZXJlciwgZCA9IGRhdGEsIHMgPSBzdGFydCwgYyA9IGNoYW5nZSwgb3AgPSBvdmVyd3JpdGVQcm9wZXJ0eSAoT05MWSBwb3B1bGF0ZWQgd2hlbiBpdCdzIGRpZmZlcmVudCB0aGFuIHApLCBwciA9IHByaW9yaXR5LCBfbmV4dC9fcHJldiBmb3IgdGhlIGxpbmtlZCBsaXN0IHNpYmxpbmdzLCBzZXQgPSBzZXR0ZXIsIG0gPSBtb2RpZmllciwgbVNldCA9IG1vZGlmaWVyU2V0dGVyICh0aGUgb3JpZ2luYWwgc2V0dGVyLCBiZWZvcmUgYSBtb2RpZmllciB3YXMgYWRkZWQpXG5cblxuZXhwb3J0IHZhciBQcm9wVHdlZW4gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQcm9wVHdlZW4obmV4dCwgdGFyZ2V0LCBwcm9wLCBzdGFydCwgY2hhbmdlLCByZW5kZXJlciwgZGF0YSwgc2V0dGVyLCBwcmlvcml0eSkge1xuICAgIHRoaXMudCA9IHRhcmdldDtcbiAgICB0aGlzLnMgPSBzdGFydDtcbiAgICB0aGlzLmMgPSBjaGFuZ2U7XG4gICAgdGhpcy5wID0gcHJvcDtcbiAgICB0aGlzLnIgPSByZW5kZXJlciB8fCBfcmVuZGVyUGxhaW47XG4gICAgdGhpcy5kID0gZGF0YSB8fCB0aGlzO1xuICAgIHRoaXMuc2V0ID0gc2V0dGVyIHx8IF9zZXR0ZXJQbGFpbjtcbiAgICB0aGlzLnByID0gcHJpb3JpdHkgfHwgMDtcbiAgICB0aGlzLl9uZXh0ID0gbmV4dDtcblxuICAgIGlmIChuZXh0KSB7XG4gICAgICBuZXh0Ll9wcmV2ID0gdGhpcztcbiAgICB9XG4gIH1cblxuICB2YXIgX3Byb3RvNCA9IFByb3BUd2Vlbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvNC5tb2RpZmllciA9IGZ1bmN0aW9uIG1vZGlmaWVyKGZ1bmMsIHR3ZWVuLCB0YXJnZXQpIHtcbiAgICB0aGlzLm1TZXQgPSB0aGlzLm1TZXQgfHwgdGhpcy5zZXQ7IC8vaW4gY2FzZSBpdCB3YXMgYWxyZWFkeSBzZXQgKGEgUHJvcFR3ZWVuIGNhbiBvbmx5IGhhdmUgb25lIG1vZGlmaWVyKVxuXG4gICAgdGhpcy5zZXQgPSBfc2V0dGVyV2l0aE1vZGlmaWVyO1xuICAgIHRoaXMubSA9IGZ1bmM7XG4gICAgdGhpcy5tdCA9IHRhcmdldDsgLy9tb2RpZmllciB0YXJnZXRcblxuICAgIHRoaXMudHdlZW4gPSB0d2VlbjtcbiAgfTtcblxuICByZXR1cm4gUHJvcFR3ZWVuO1xufSgpOyAvL0luaXRpYWxpemF0aW9uIHRhc2tzXG5cbl9mb3JFYWNoTmFtZShfY2FsbGJhY2tOYW1lcyArIFwicGFyZW50LGR1cmF0aW9uLGVhc2UsZGVsYXksb3ZlcndyaXRlLHJ1bkJhY2t3YXJkcyxzdGFydEF0LHlveW8saW1tZWRpYXRlUmVuZGVyLHJlcGVhdCxyZXBlYXREZWxheSxkYXRhLHBhdXNlZCxyZXZlcnNlZCxsYXp5LGNhbGxiYWNrU2NvcGUsc3RyaW5nRmlsdGVyLGlkLHlveW9FYXNlLHN0YWdnZXIsaW5oZXJpdCxyZXBlYXRSZWZyZXNoLGtleWZyYW1lcyxhdXRvUmV2ZXJ0LHNjcm9sbFRyaWdnZXJcIiwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIF9yZXNlcnZlZFByb3BzW25hbWVdID0gMTtcbn0pO1xuXG5fZ2xvYmFscy5Ud2Vlbk1heCA9IF9nbG9iYWxzLlR3ZWVuTGl0ZSA9IFR3ZWVuO1xuX2dsb2JhbHMuVGltZWxpbmVMaXRlID0gX2dsb2JhbHMuVGltZWxpbmVNYXggPSBUaW1lbGluZTtcbl9nbG9iYWxUaW1lbGluZSA9IG5ldyBUaW1lbGluZSh7XG4gIHNvcnRDaGlsZHJlbjogZmFsc2UsXG4gIGRlZmF1bHRzOiBfZGVmYXVsdHMsXG4gIGF1dG9SZW1vdmVDaGlsZHJlbjogdHJ1ZSxcbiAgaWQ6IFwicm9vdFwiLFxuICBzbW9vdGhDaGlsZFRpbWluZzogdHJ1ZVxufSk7XG5fY29uZmlnLnN0cmluZ0ZpbHRlciA9IF9jb2xvclN0cmluZ0ZpbHRlcjtcblxudmFyIF9tZWRpYSA9IFtdLFxuICAgIF9saXN0ZW5lcnMgPSB7fSxcbiAgICBfZW1wdHlBcnJheSA9IFtdLFxuICAgIF9sYXN0TWVkaWFUaW1lID0gMCxcbiAgICBfY29udGV4dElEID0gMCxcbiAgICBfZGlzcGF0Y2ggPSBmdW5jdGlvbiBfZGlzcGF0Y2godHlwZSkge1xuICByZXR1cm4gKF9saXN0ZW5lcnNbdHlwZV0gfHwgX2VtcHR5QXJyYXkpLm1hcChmdW5jdGlvbiAoZikge1xuICAgIHJldHVybiBmKCk7XG4gIH0pO1xufSxcbiAgICBfb25NZWRpYUNoYW5nZSA9IGZ1bmN0aW9uIF9vbk1lZGlhQ2hhbmdlKCkge1xuICB2YXIgdGltZSA9IERhdGUubm93KCksXG4gICAgICBtYXRjaGVzID0gW107XG5cbiAgaWYgKHRpbWUgLSBfbGFzdE1lZGlhVGltZSA+IDIpIHtcbiAgICBfZGlzcGF0Y2goXCJtYXRjaE1lZGlhSW5pdFwiKTtcblxuICAgIF9tZWRpYS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICB2YXIgcXVlcmllcyA9IGMucXVlcmllcyxcbiAgICAgICAgICBjb25kaXRpb25zID0gYy5jb25kaXRpb25zLFxuICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgIHAsXG4gICAgICAgICAgYW55TWF0Y2gsXG4gICAgICAgICAgdG9nZ2xlZDtcblxuICAgICAgZm9yIChwIGluIHF1ZXJpZXMpIHtcbiAgICAgICAgbWF0Y2ggPSBfd2luLm1hdGNoTWVkaWEocXVlcmllc1twXSkubWF0Y2hlczsgLy8gRmlyZWZveCBkb2Vzbid0IHVwZGF0ZSB0aGUgXCJtYXRjaGVzXCIgcHJvcGVydHkgb2YgdGhlIE1lZGlhUXVlcnlMaXN0IG9iamVjdCBjb3JyZWN0bHkgLSBpdCBvbmx5IGRvZXMgc28gYXMgaXQgY2FsbHMgaXRzIGNoYW5nZSBoYW5kbGVyIC0gc28gd2UgbXVzdCByZS1jcmVhdGUgYSBtZWRpYSBxdWVyeSBoZXJlIHRvIGVuc3VyZSBpdCdzIGFjY3VyYXRlLlxuXG4gICAgICAgIG1hdGNoICYmIChhbnlNYXRjaCA9IDEpO1xuXG4gICAgICAgIGlmIChtYXRjaCAhPT0gY29uZGl0aW9uc1twXSkge1xuICAgICAgICAgIGNvbmRpdGlvbnNbcF0gPSBtYXRjaDtcbiAgICAgICAgICB0b2dnbGVkID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodG9nZ2xlZCkge1xuICAgICAgICBjLnJldmVydCgpO1xuICAgICAgICBhbnlNYXRjaCAmJiBtYXRjaGVzLnB1c2goYyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGlzcGF0Y2goXCJtYXRjaE1lZGlhUmV2ZXJ0XCIpO1xuXG4gICAgbWF0Y2hlcy5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gYy5vbk1hdGNoKGMpO1xuICAgIH0pO1xuICAgIF9sYXN0TWVkaWFUaW1lID0gdGltZTtcblxuICAgIF9kaXNwYXRjaChcIm1hdGNoTWVkaWFcIik7XG4gIH1cbn07XG5cbnZhciBDb250ZXh0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ29udGV4dChmdW5jLCBzY29wZSkge1xuICAgIHRoaXMuc2VsZWN0b3IgPSBzY29wZSAmJiBzZWxlY3RvcihzY29wZSk7XG4gICAgdGhpcy5kYXRhID0gW107XG4gICAgdGhpcy5fciA9IFtdOyAvLyByZXR1cm5lZC9jbGVhbnVwIGZ1bmN0aW9uc1xuXG4gICAgdGhpcy5pc1JldmVydGVkID0gZmFsc2U7XG4gICAgdGhpcy5pZCA9IF9jb250ZXh0SUQrKzsgLy8gdG8gd29yayBhcm91bmQgaXNzdWVzIHRoYXQgZnJhbWV3b3JrcyBsaWtlIFZ1ZSBjYXVzZSBieSBtYWtpbmcgdGhpbmdzIGludG8gUHJveGllcyB3aGljaCBtYWtlIGl0IGltcG9zc2libGUgdG8gZG8gc29tZXRoaW5nIGxpa2UgX21lZGlhLmluZGV4T2YodGhpcykgYmVjYXVzZSBcInRoaXNcIiB3b3VsZCBubyBsb25nZXIgcmVmZXIgdG8gdGhlIENvbnRleHQgaW5zdGFuY2UgaXRzZWxmIC0gaXQnZCByZWZlciB0byBhIFByb3h5ISBXZSBuZWVkZWQgYSB3YXkgdG8gaWRlbnRpZnkgdGhlIGNvbnRleHQgdW5pcXVlbHlcblxuICAgIGZ1bmMgJiYgdGhpcy5hZGQoZnVuYyk7XG4gIH1cblxuICB2YXIgX3Byb3RvNSA9IENvbnRleHQucHJvdG90eXBlO1xuXG4gIF9wcm90bzUuYWRkID0gZnVuY3Rpb24gYWRkKG5hbWUsIGZ1bmMsIHNjb3BlKSB7XG4gICAgLy8gcG9zc2libGUgZnV0dXJlIGFkZGl0aW9uIGlmIHdlIG5lZWQgdGhlIGFiaWxpdHkgdG8gYWRkKCkgYW4gYW5pbWF0aW9uIHRvIGEgY29udGV4dCBhbmQgZm9yIHdoYXRldmVyIHJlYXNvbiBjYW5ub3QgY3JlYXRlIHRoYXQgYW5pbWF0aW9uIGluc2lkZSBvZiBhIGNvbnRleHQuYWRkKCgpID0+IHsuLi59KSBmdW5jdGlvbi5cbiAgICAvLyBpZiAobmFtZSAmJiBfaXNGdW5jdGlvbihuYW1lLnJldmVydCkpIHtcbiAgICAvLyBcdHRoaXMuZGF0YS5wdXNoKG5hbWUpO1xuICAgIC8vIFx0cmV0dXJuIChuYW1lLl9jdHggPSB0aGlzKTtcbiAgICAvLyB9XG4gICAgaWYgKF9pc0Z1bmN0aW9uKG5hbWUpKSB7XG4gICAgICBzY29wZSA9IGZ1bmM7XG4gICAgICBmdW5jID0gbmFtZTtcbiAgICAgIG5hbWUgPSBfaXNGdW5jdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgIGYgPSBmdW5jdGlvbiBmKCkge1xuICAgICAgdmFyIHByZXYgPSBfY29udGV4dCxcbiAgICAgICAgICBwcmV2U2VsZWN0b3IgPSBzZWxmLnNlbGVjdG9yLFxuICAgICAgICAgIHJlc3VsdDtcbiAgICAgIHByZXYgJiYgcHJldiAhPT0gc2VsZiAmJiBwcmV2LmRhdGEucHVzaChzZWxmKTtcbiAgICAgIHNjb3BlICYmIChzZWxmLnNlbGVjdG9yID0gc2VsZWN0b3Ioc2NvcGUpKTtcbiAgICAgIF9jb250ZXh0ID0gc2VsZjtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoc2VsZiwgYXJndW1lbnRzKTtcbiAgICAgIF9pc0Z1bmN0aW9uKHJlc3VsdCkgJiYgc2VsZi5fci5wdXNoKHJlc3VsdCk7XG4gICAgICBfY29udGV4dCA9IHByZXY7XG4gICAgICBzZWxmLnNlbGVjdG9yID0gcHJldlNlbGVjdG9yO1xuICAgICAgc2VsZi5pc1JldmVydGVkID0gZmFsc2U7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBzZWxmLmxhc3QgPSBmO1xuICAgIHJldHVybiBuYW1lID09PSBfaXNGdW5jdGlvbiA/IGYoc2VsZikgOiBuYW1lID8gc2VsZltuYW1lXSA9IGYgOiBmO1xuICB9O1xuXG4gIF9wcm90bzUuaWdub3JlID0gZnVuY3Rpb24gaWdub3JlKGZ1bmMpIHtcbiAgICB2YXIgcHJldiA9IF9jb250ZXh0O1xuICAgIF9jb250ZXh0ID0gbnVsbDtcbiAgICBmdW5jKHRoaXMpO1xuICAgIF9jb250ZXh0ID0gcHJldjtcbiAgfTtcblxuICBfcHJvdG81LmdldFR3ZWVucyA9IGZ1bmN0aW9uIGdldFR3ZWVucygpIHtcbiAgICB2YXIgYSA9IFtdO1xuICAgIHRoaXMuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gZSBpbnN0YW5jZW9mIENvbnRleHQgPyBhLnB1c2guYXBwbHkoYSwgZS5nZXRUd2VlbnMoKSkgOiBlIGluc3RhbmNlb2YgVHdlZW4gJiYgIShlLnBhcmVudCAmJiBlLnBhcmVudC5kYXRhID09PSBcIm5lc3RlZFwiKSAmJiBhLnB1c2goZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGE7XG4gIH07XG5cbiAgX3Byb3RvNS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHRoaXMuX3IubGVuZ3RoID0gdGhpcy5kYXRhLmxlbmd0aCA9IDA7XG4gIH07XG5cbiAgX3Byb3RvNS5raWxsID0gZnVuY3Rpb24ga2lsbChyZXZlcnQsIG1hdGNoTWVkaWEpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIGlmIChyZXZlcnQpIHtcbiAgICAgIHZhciB0d2VlbnMgPSB0aGlzLmdldFR3ZWVucygpO1xuICAgICAgdGhpcy5kYXRhLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgLy8gRmxpcCBwbHVnaW4gdHdlZW5zIGFyZSB2ZXJ5IGRpZmZlcmVudCBpbiB0aGF0IHRoZXkgc2hvdWxkIGFjdHVhbGx5IGJlIHB1c2hlZCB0byB0aGVpciBlbmQuIFRoZSBwbHVnaW4gcmVwbGFjZXMgdGhlIHRpbWVsaW5lJ3MgLnJldmVydCgpIG1ldGhvZCB0byBkbyBleGFjdGx5IHRoYXQuIEJ1dCB3ZSBhbHNvIG5lZWQgdG8gcmVtb3ZlIGFueSBvZiB0aG9zZSBuZXN0ZWQgdHdlZW5zIGluc2lkZSB0aGUgZmxpcCB0aW1lbGluZSBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluZGl2aWR1YWxseSByZXZlcnRlZC5cbiAgICAgICAgaWYgKHQuZGF0YSA9PT0gXCJpc0ZsaXBcIikge1xuICAgICAgICAgIHQucmV2ZXJ0KCk7XG4gICAgICAgICAgdC5nZXRDaGlsZHJlbih0cnVlLCB0cnVlLCBmYWxzZSkuZm9yRWFjaChmdW5jdGlvbiAodHdlZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0d2VlbnMuc3BsaWNlKHR3ZWVucy5pbmRleE9mKHR3ZWVuKSwgMSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pOyAvLyBzYXZlIGFzIGFuIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBjYWNoZSB0aGUgZ2xvYmFsVGltZSBmb3IgZWFjaCB0d2VlbiB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBkdXJpbmcgdGhlIHNvcnRcblxuICAgICAgdHdlZW5zLm1hcChmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGc6IHQuZ2xvYmFsVGltZSgwKSxcbiAgICAgICAgICB0OiB0XG4gICAgICAgIH07XG4gICAgICB9KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBiLmcgLSBhLmcgfHwgLUluZmluaXR5O1xuICAgICAgfSkuZm9yRWFjaChmdW5jdGlvbiAobykge1xuICAgICAgICByZXR1cm4gby50LnJldmVydChyZXZlcnQpO1xuICAgICAgfSk7IC8vIG5vdGU6IGFsbCBvZiB0aGUgX3N0YXJ0QXQgdHdlZW5zIHNob3VsZCBiZSByZXZlcnRlZCBpbiByZXZlcnNlIG9yZGVyIHRoYXQgdGhleSB3ZXJlIGNyZWF0ZWQsIGFuZCB0aGV5J2xsIGFsbCBoYXZlIHRoZSBzYW1lIGdsb2JhbFRpbWUgKC0xKSBzbyB0aGUgXCIgfHwgLTFcIiBpbiB0aGUgc29ydCBrZWVwcyB0aGUgb3JkZXIgcHJvcGVybHkuXG5cbiAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiAhKGUgaW5zdGFuY2VvZiBUd2VlbikgJiYgZS5yZXZlcnQgJiYgZS5yZXZlcnQocmV2ZXJ0KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9yLmZvckVhY2goZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgcmV0dXJuIGYocmV2ZXJ0LCBfdGhpczQpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXNSZXZlcnRlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBlLmtpbGwgJiYgZS5raWxsKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICBpZiAobWF0Y2hNZWRpYSkge1xuICAgICAgdmFyIGkgPSBfbWVkaWEubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIC8vIHByZXZpb3VzbHksIHdlIGNoZWNrZWQgX21lZGlhLmluZGV4T2YodGhpcyksIGJ1dCBzb21lIGZyYW1ld29ya3MgbGlrZSBWdWUgZW5mb3JjZSBQcm94eSBvYmplY3RzIHRoYXQgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIGdldCB0aGUgcHJvcGVyIHJlc3VsdCB0aGF0IHdheSwgc28gd2UgbXVzdCB1c2UgYSB1bmlxdWUgSUQgbnVtYmVyIGluc3RlYWQuXG4gICAgICAgIF9tZWRpYVtpXS5pZCA9PT0gdGhpcy5pZCAmJiBfbWVkaWEuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG81LnJldmVydCA9IGZ1bmN0aW9uIHJldmVydChjb25maWcpIHtcbiAgICB0aGlzLmtpbGwoY29uZmlnIHx8IHt9KTtcbiAgfTtcblxuICByZXR1cm4gQ29udGV4dDtcbn0oKTtcblxudmFyIE1hdGNoTWVkaWEgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNYXRjaE1lZGlhKHNjb3BlKSB7XG4gICAgdGhpcy5jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgfVxuXG4gIHZhciBfcHJvdG82ID0gTWF0Y2hNZWRpYS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvNi5hZGQgPSBmdW5jdGlvbiBhZGQoY29uZGl0aW9ucywgZnVuYywgc2NvcGUpIHtcbiAgICBfaXNPYmplY3QoY29uZGl0aW9ucykgfHwgKGNvbmRpdGlvbnMgPSB7XG4gICAgICBtYXRjaGVzOiBjb25kaXRpb25zXG4gICAgfSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCgwLCBzY29wZSB8fCB0aGlzLnNjb3BlKSxcbiAgICAgICAgY29uZCA9IGNvbnRleHQuY29uZGl0aW9ucyA9IHt9LFxuICAgICAgICBtcSxcbiAgICAgICAgcCxcbiAgICAgICAgYWN0aXZlO1xuICAgIF9jb250ZXh0ICYmICFjb250ZXh0LnNlbGVjdG9yICYmIChjb250ZXh0LnNlbGVjdG9yID0gX2NvbnRleHQuc2VsZWN0b3IpOyAvLyBpbiBjYXNlIGEgY29udGV4dCBpcyBjcmVhdGVkIGluc2lkZSBhIGNvbnRleHQuIExpa2UgYSBnc2FwLm1hdGNoTWVkaWEoKSB0aGF0J3MgaW5zaWRlIGEgc2NvcGVkIGdzYXAuY29udGV4dCgpXG5cbiAgICB0aGlzLmNvbnRleHRzLnB1c2goY29udGV4dCk7XG4gICAgZnVuYyA9IGNvbnRleHQuYWRkKFwib25NYXRjaFwiLCBmdW5jKTtcbiAgICBjb250ZXh0LnF1ZXJpZXMgPSBjb25kaXRpb25zO1xuXG4gICAgZm9yIChwIGluIGNvbmRpdGlvbnMpIHtcbiAgICAgIGlmIChwID09PSBcImFsbFwiKSB7XG4gICAgICAgIGFjdGl2ZSA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtcSA9IF93aW4ubWF0Y2hNZWRpYShjb25kaXRpb25zW3BdKTtcblxuICAgICAgICBpZiAobXEpIHtcbiAgICAgICAgICBfbWVkaWEuaW5kZXhPZihjb250ZXh0KSA8IDAgJiYgX21lZGlhLnB1c2goY29udGV4dCk7XG4gICAgICAgICAgKGNvbmRbcF0gPSBtcS5tYXRjaGVzKSAmJiAoYWN0aXZlID0gMSk7XG4gICAgICAgICAgbXEuYWRkTGlzdGVuZXIgPyBtcS5hZGRMaXN0ZW5lcihfb25NZWRpYUNoYW5nZSkgOiBtcS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIF9vbk1lZGlhQ2hhbmdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGFjdGl2ZSAmJiBmdW5jKGNvbnRleHQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9IC8vIHJlZnJlc2goKSB7XG4gIC8vIFx0bGV0IHRpbWUgPSBfbGFzdE1lZGlhVGltZSxcbiAgLy8gXHRcdG1lZGlhID0gX21lZGlhO1xuICAvLyBcdF9sYXN0TWVkaWFUaW1lID0gLTE7XG4gIC8vIFx0X21lZGlhID0gdGhpcy5jb250ZXh0cztcbiAgLy8gXHRfb25NZWRpYUNoYW5nZSgpO1xuICAvLyBcdF9sYXN0TWVkaWFUaW1lID0gdGltZTtcbiAgLy8gXHRfbWVkaWEgPSBtZWRpYTtcbiAgLy8gfVxuICA7XG5cbiAgX3Byb3RvNi5yZXZlcnQgPSBmdW5jdGlvbiByZXZlcnQoY29uZmlnKSB7XG4gICAgdGhpcy5raWxsKGNvbmZpZyB8fCB7fSk7XG4gIH07XG5cbiAgX3Byb3RvNi5raWxsID0gZnVuY3Rpb24ga2lsbChyZXZlcnQpIHtcbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICAgIHJldHVybiBjLmtpbGwocmV2ZXJ0LCB0cnVlKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTWF0Y2hNZWRpYTtcbn0oKTtcbi8qXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogR1NBUFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbnZhciBfZ3NhcCA9IHtcbiAgcmVnaXN0ZXJQbHVnaW46IGZ1bmN0aW9uIHJlZ2lzdGVyUGx1Z2luKCkge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIGFyZ3MuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICByZXR1cm4gX2NyZWF0ZVBsdWdpbihjb25maWcpO1xuICAgIH0pO1xuICB9LFxuICB0aW1lbGluZTogZnVuY3Rpb24gdGltZWxpbmUodmFycykge1xuICAgIHJldHVybiBuZXcgVGltZWxpbmUodmFycyk7XG4gIH0sXG4gIGdldFR3ZWVuc09mOiBmdW5jdGlvbiBnZXRUd2VlbnNPZih0YXJnZXRzLCBvbmx5QWN0aXZlKSB7XG4gICAgcmV0dXJuIF9nbG9iYWxUaW1lbGluZS5nZXRUd2VlbnNPZih0YXJnZXRzLCBvbmx5QWN0aXZlKTtcbiAgfSxcbiAgZ2V0UHJvcGVydHk6IGZ1bmN0aW9uIGdldFByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIHVuaXQsIHVuY2FjaGUpIHtcbiAgICBfaXNTdHJpbmcodGFyZ2V0KSAmJiAodGFyZ2V0ID0gdG9BcnJheSh0YXJnZXQpWzBdKTsgLy9pbiBjYXNlIHNlbGVjdG9yIHRleHQgb3IgYW4gYXJyYXkgaXMgcGFzc2VkIGluXG5cbiAgICB2YXIgZ2V0dGVyID0gX2dldENhY2hlKHRhcmdldCB8fCB7fSkuZ2V0LFxuICAgICAgICBmb3JtYXQgPSB1bml0ID8gX3Bhc3NUaHJvdWdoIDogX251bWVyaWNJZlBvc3NpYmxlO1xuXG4gICAgdW5pdCA9PT0gXCJuYXRpdmVcIiAmJiAodW5pdCA9IFwiXCIpO1xuICAgIHJldHVybiAhdGFyZ2V0ID8gdGFyZ2V0IDogIXByb3BlcnR5ID8gZnVuY3Rpb24gKHByb3BlcnR5LCB1bml0LCB1bmNhY2hlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0KChfcGx1Z2luc1twcm9wZXJ0eV0gJiYgX3BsdWdpbnNbcHJvcGVydHldLmdldCB8fCBnZXR0ZXIpKHRhcmdldCwgcHJvcGVydHksIHVuaXQsIHVuY2FjaGUpKTtcbiAgICB9IDogZm9ybWF0KChfcGx1Z2luc1twcm9wZXJ0eV0gJiYgX3BsdWdpbnNbcHJvcGVydHldLmdldCB8fCBnZXR0ZXIpKHRhcmdldCwgcHJvcGVydHksIHVuaXQsIHVuY2FjaGUpKTtcbiAgfSxcbiAgcXVpY2tTZXR0ZXI6IGZ1bmN0aW9uIHF1aWNrU2V0dGVyKHRhcmdldCwgcHJvcGVydHksIHVuaXQpIHtcbiAgICB0YXJnZXQgPSB0b0FycmF5KHRhcmdldCk7XG5cbiAgICBpZiAodGFyZ2V0Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHZhciBzZXR0ZXJzID0gdGFyZ2V0Lm1hcChmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gZ3NhcC5xdWlja1NldHRlcih0LCBwcm9wZXJ0eSwgdW5pdCk7XG4gICAgICB9KSxcbiAgICAgICAgICBsID0gc2V0dGVycy5sZW5ndGg7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBpID0gbDtcblxuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgc2V0dGVyc1tpXSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGFyZ2V0ID0gdGFyZ2V0WzBdIHx8IHt9O1xuXG4gICAgdmFyIFBsdWdpbiA9IF9wbHVnaW5zW3Byb3BlcnR5XSxcbiAgICAgICAgY2FjaGUgPSBfZ2V0Q2FjaGUodGFyZ2V0KSxcbiAgICAgICAgcCA9IGNhY2hlLmhhcm5lc3MgJiYgKGNhY2hlLmhhcm5lc3MuYWxpYXNlcyB8fCB7fSlbcHJvcGVydHldIHx8IHByb3BlcnR5LFxuICAgICAgICAvLyBpbiBjYXNlIGl0J3MgYW4gYWxpYXMsIGxpa2UgXCJyb3RhdGVcIiBmb3IgXCJyb3RhdGlvblwiLlxuICAgIHNldHRlciA9IFBsdWdpbiA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyIHAgPSBuZXcgUGx1Z2luKCk7XG4gICAgICBfcXVpY2tUd2Vlbi5fcHQgPSAwO1xuICAgICAgcC5pbml0KHRhcmdldCwgdW5pdCA/IHZhbHVlICsgdW5pdCA6IHZhbHVlLCBfcXVpY2tUd2VlbiwgMCwgW3RhcmdldF0pO1xuICAgICAgcC5yZW5kZXIoMSwgcCk7XG4gICAgICBfcXVpY2tUd2Vlbi5fcHQgJiYgX3JlbmRlclByb3BUd2VlbnMoMSwgX3F1aWNrVHdlZW4pO1xuICAgIH0gOiBjYWNoZS5zZXQodGFyZ2V0LCBwKTtcblxuICAgIHJldHVybiBQbHVnaW4gPyBzZXR0ZXIgOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBzZXR0ZXIodGFyZ2V0LCBwLCB1bml0ID8gdmFsdWUgKyB1bml0IDogdmFsdWUsIGNhY2hlLCAxKTtcbiAgICB9O1xuICB9LFxuICBxdWlja1RvOiBmdW5jdGlvbiBxdWlja1RvKHRhcmdldCwgcHJvcGVydHksIHZhcnMpIHtcbiAgICB2YXIgX21lcmdlMjtcblxuICAgIHZhciB0d2VlbiA9IGdzYXAudG8odGFyZ2V0LCBfbWVyZ2UoKF9tZXJnZTIgPSB7fSwgX21lcmdlMltwcm9wZXJ0eV0gPSBcIis9MC4xXCIsIF9tZXJnZTIucGF1c2VkID0gdHJ1ZSwgX21lcmdlMiksIHZhcnMgfHwge30pKSxcbiAgICAgICAgZnVuYyA9IGZ1bmN0aW9uIGZ1bmModmFsdWUsIHN0YXJ0LCBzdGFydElzUmVsYXRpdmUpIHtcbiAgICAgIHJldHVybiB0d2Vlbi5yZXNldFRvKHByb3BlcnR5LCB2YWx1ZSwgc3RhcnQsIHN0YXJ0SXNSZWxhdGl2ZSk7XG4gICAgfTtcblxuICAgIGZ1bmMudHdlZW4gPSB0d2VlbjtcbiAgICByZXR1cm4gZnVuYztcbiAgfSxcbiAgaXNUd2VlbmluZzogZnVuY3Rpb24gaXNUd2VlbmluZyh0YXJnZXRzKSB7XG4gICAgcmV0dXJuIF9nbG9iYWxUaW1lbGluZS5nZXRUd2VlbnNPZih0YXJnZXRzLCB0cnVlKS5sZW5ndGggPiAwO1xuICB9LFxuICBkZWZhdWx0czogZnVuY3Rpb24gZGVmYXVsdHModmFsdWUpIHtcbiAgICB2YWx1ZSAmJiB2YWx1ZS5lYXNlICYmICh2YWx1ZS5lYXNlID0gX3BhcnNlRWFzZSh2YWx1ZS5lYXNlLCBfZGVmYXVsdHMuZWFzZSkpO1xuICAgIHJldHVybiBfbWVyZ2VEZWVwKF9kZWZhdWx0cywgdmFsdWUgfHwge30pO1xuICB9LFxuICBjb25maWc6IGZ1bmN0aW9uIGNvbmZpZyh2YWx1ZSkge1xuICAgIHJldHVybiBfbWVyZ2VEZWVwKF9jb25maWcsIHZhbHVlIHx8IHt9KTtcbiAgfSxcbiAgcmVnaXN0ZXJFZmZlY3Q6IGZ1bmN0aW9uIHJlZ2lzdGVyRWZmZWN0KF9yZWYzKSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmMy5uYW1lLFxuICAgICAgICBlZmZlY3QgPSBfcmVmMy5lZmZlY3QsXG4gICAgICAgIHBsdWdpbnMgPSBfcmVmMy5wbHVnaW5zLFxuICAgICAgICBkZWZhdWx0cyA9IF9yZWYzLmRlZmF1bHRzLFxuICAgICAgICBleHRlbmRUaW1lbGluZSA9IF9yZWYzLmV4dGVuZFRpbWVsaW5lO1xuICAgIChwbHVnaW5zIHx8IFwiXCIpLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChwbHVnaW5OYW1lKSB7XG4gICAgICByZXR1cm4gcGx1Z2luTmFtZSAmJiAhX3BsdWdpbnNbcGx1Z2luTmFtZV0gJiYgIV9nbG9iYWxzW3BsdWdpbk5hbWVdICYmIF93YXJuKG5hbWUgKyBcIiBlZmZlY3QgcmVxdWlyZXMgXCIgKyBwbHVnaW5OYW1lICsgXCIgcGx1Z2luLlwiKTtcbiAgICB9KTtcblxuICAgIF9lZmZlY3RzW25hbWVdID0gZnVuY3Rpb24gKHRhcmdldHMsIHZhcnMsIHRsKSB7XG4gICAgICByZXR1cm4gZWZmZWN0KHRvQXJyYXkodGFyZ2V0cyksIF9zZXREZWZhdWx0cyh2YXJzIHx8IHt9LCBkZWZhdWx0cyksIHRsKTtcbiAgICB9O1xuXG4gICAgaWYgKGV4dGVuZFRpbWVsaW5lKSB7XG4gICAgICBUaW1lbGluZS5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbiAodGFyZ2V0cywgdmFycywgcG9zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkKF9lZmZlY3RzW25hbWVdKHRhcmdldHMsIF9pc09iamVjdCh2YXJzKSA/IHZhcnMgOiAocG9zaXRpb24gPSB2YXJzKSAmJiB7fSwgdGhpcyksIHBvc2l0aW9uKTtcbiAgICAgIH07XG4gICAgfVxuICB9LFxuICByZWdpc3RlckVhc2U6IGZ1bmN0aW9uIHJlZ2lzdGVyRWFzZShuYW1lLCBlYXNlKSB7XG4gICAgX2Vhc2VNYXBbbmFtZV0gPSBfcGFyc2VFYXNlKGVhc2UpO1xuICB9LFxuICBwYXJzZUVhc2U6IGZ1bmN0aW9uIHBhcnNlRWFzZShlYXNlLCBkZWZhdWx0RWFzZSkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gX3BhcnNlRWFzZShlYXNlLCBkZWZhdWx0RWFzZSkgOiBfZWFzZU1hcDtcbiAgfSxcbiAgZ2V0QnlJZDogZnVuY3Rpb24gZ2V0QnlJZChpZCkge1xuICAgIHJldHVybiBfZ2xvYmFsVGltZWxpbmUuZ2V0QnlJZChpZCk7XG4gIH0sXG4gIGV4cG9ydFJvb3Q6IGZ1bmN0aW9uIGV4cG9ydFJvb3QodmFycywgaW5jbHVkZURlbGF5ZWRDYWxscykge1xuICAgIGlmICh2YXJzID09PSB2b2lkIDApIHtcbiAgICAgIHZhcnMgPSB7fTtcbiAgICB9XG5cbiAgICB2YXIgdGwgPSBuZXcgVGltZWxpbmUodmFycyksXG4gICAgICAgIGNoaWxkLFxuICAgICAgICBuZXh0O1xuICAgIHRsLnNtb290aENoaWxkVGltaW5nID0gX2lzTm90RmFsc2UodmFycy5zbW9vdGhDaGlsZFRpbWluZyk7XG5cbiAgICBfZ2xvYmFsVGltZWxpbmUucmVtb3ZlKHRsKTtcblxuICAgIHRsLl9kcCA9IDA7IC8vb3RoZXJ3aXNlIGl0J2xsIGdldCByZS1hY3RpdmF0ZWQgd2hlbiBhZGRpbmcgY2hpbGRyZW4gYW5kIGJlIHJlLWludHJvZHVjZWQgaW50byBfZ2xvYmFsVGltZWxpbmUncyBsaW5rZWQgbGlzdCAodGhlbiBhZGRlZCB0byBpdHNlbGYpLlxuXG4gICAgdGwuX3RpbWUgPSB0bC5fdFRpbWUgPSBfZ2xvYmFsVGltZWxpbmUuX3RpbWU7XG4gICAgY2hpbGQgPSBfZ2xvYmFsVGltZWxpbmUuX2ZpcnN0O1xuXG4gICAgd2hpbGUgKGNoaWxkKSB7XG4gICAgICBuZXh0ID0gY2hpbGQuX25leHQ7XG5cbiAgICAgIGlmIChpbmNsdWRlRGVsYXllZENhbGxzIHx8ICEoIWNoaWxkLl9kdXIgJiYgY2hpbGQgaW5zdGFuY2VvZiBUd2VlbiAmJiBjaGlsZC52YXJzLm9uQ29tcGxldGUgPT09IGNoaWxkLl90YXJnZXRzWzBdKSkge1xuICAgICAgICBfYWRkVG9UaW1lbGluZSh0bCwgY2hpbGQsIGNoaWxkLl9zdGFydCAtIGNoaWxkLl9kZWxheSk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkID0gbmV4dDtcbiAgICB9XG5cbiAgICBfYWRkVG9UaW1lbGluZShfZ2xvYmFsVGltZWxpbmUsIHRsLCAwKTtcblxuICAgIHJldHVybiB0bDtcbiAgfSxcbiAgY29udGV4dDogZnVuY3Rpb24gY29udGV4dChmdW5jLCBzY29wZSkge1xuICAgIHJldHVybiBmdW5jID8gbmV3IENvbnRleHQoZnVuYywgc2NvcGUpIDogX2NvbnRleHQ7XG4gIH0sXG4gIG1hdGNoTWVkaWE6IGZ1bmN0aW9uIG1hdGNoTWVkaWEoc2NvcGUpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoTWVkaWEoc2NvcGUpO1xuICB9LFxuICBtYXRjaE1lZGlhUmVmcmVzaDogZnVuY3Rpb24gbWF0Y2hNZWRpYVJlZnJlc2goKSB7XG4gICAgcmV0dXJuIF9tZWRpYS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICB2YXIgY29uZCA9IGMuY29uZGl0aW9ucyxcbiAgICAgICAgICBmb3VuZCxcbiAgICAgICAgICBwO1xuXG4gICAgICBmb3IgKHAgaW4gY29uZCkge1xuICAgICAgICBpZiAoY29uZFtwXSkge1xuICAgICAgICAgIGNvbmRbcF0gPSBmYWxzZTtcbiAgICAgICAgICBmb3VuZCA9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm91bmQgJiYgYy5yZXZlcnQoKTtcbiAgICB9KSB8fCBfb25NZWRpYUNoYW5nZSgpO1xuICB9LFxuICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGEgPSBfbGlzdGVuZXJzW3R5cGVdIHx8IChfbGlzdGVuZXJzW3R5cGVdID0gW10pO1xuICAgIH5hLmluZGV4T2YoY2FsbGJhY2spIHx8IGEucHVzaChjYWxsYmFjayk7XG4gIH0sXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgYSA9IF9saXN0ZW5lcnNbdHlwZV0sXG4gICAgICAgIGkgPSBhICYmIGEuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgaSA+PSAwICYmIGEuc3BsaWNlKGksIDEpO1xuICB9LFxuICB1dGlsczoge1xuICAgIHdyYXA6IHdyYXAsXG4gICAgd3JhcFlveW86IHdyYXBZb3lvLFxuICAgIGRpc3RyaWJ1dGU6IGRpc3RyaWJ1dGUsXG4gICAgcmFuZG9tOiByYW5kb20sXG4gICAgc25hcDogc25hcCxcbiAgICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcbiAgICBnZXRVbml0OiBnZXRVbml0LFxuICAgIGNsYW1wOiBjbGFtcCxcbiAgICBzcGxpdENvbG9yOiBzcGxpdENvbG9yLFxuICAgIHRvQXJyYXk6IHRvQXJyYXksXG4gICAgc2VsZWN0b3I6IHNlbGVjdG9yLFxuICAgIG1hcFJhbmdlOiBtYXBSYW5nZSxcbiAgICBwaXBlOiBwaXBlLFxuICAgIHVuaXRpemU6IHVuaXRpemUsXG4gICAgaW50ZXJwb2xhdGU6IGludGVycG9sYXRlLFxuICAgIHNodWZmbGU6IHNodWZmbGVcbiAgfSxcbiAgaW5zdGFsbDogX2luc3RhbGwsXG4gIGVmZmVjdHM6IF9lZmZlY3RzLFxuICB0aWNrZXI6IF90aWNrZXIsXG4gIHVwZGF0ZVJvb3Q6IFRpbWVsaW5lLnVwZGF0ZVJvb3QsXG4gIHBsdWdpbnM6IF9wbHVnaW5zLFxuICBnbG9iYWxUaW1lbGluZTogX2dsb2JhbFRpbWVsaW5lLFxuICBjb3JlOiB7XG4gICAgUHJvcFR3ZWVuOiBQcm9wVHdlZW4sXG4gICAgZ2xvYmFsczogX2FkZEdsb2JhbCxcbiAgICBUd2VlbjogVHdlZW4sXG4gICAgVGltZWxpbmU6IFRpbWVsaW5lLFxuICAgIEFuaW1hdGlvbjogQW5pbWF0aW9uLFxuICAgIGdldENhY2hlOiBfZ2V0Q2FjaGUsXG4gICAgX3JlbW92ZUxpbmtlZExpc3RJdGVtOiBfcmVtb3ZlTGlua2VkTGlzdEl0ZW0sXG4gICAgcmV2ZXJ0aW5nOiBmdW5jdGlvbiByZXZlcnRpbmcoKSB7XG4gICAgICByZXR1cm4gX3JldmVydGluZztcbiAgICB9LFxuICAgIGNvbnRleHQ6IGZ1bmN0aW9uIGNvbnRleHQodG9BZGQpIHtcbiAgICAgIGlmICh0b0FkZCAmJiBfY29udGV4dCkge1xuICAgICAgICBfY29udGV4dC5kYXRhLnB1c2godG9BZGQpO1xuXG4gICAgICAgIHRvQWRkLl9jdHggPSBfY29udGV4dDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9jb250ZXh0O1xuICAgIH0sXG4gICAgc3VwcHJlc3NPdmVyd3JpdGVzOiBmdW5jdGlvbiBzdXBwcmVzc092ZXJ3cml0ZXModmFsdWUpIHtcbiAgICAgIHJldHVybiBfc3VwcHJlc3NPdmVyd3JpdGVzID0gdmFsdWU7XG4gICAgfVxuICB9XG59O1xuXG5fZm9yRWFjaE5hbWUoXCJ0byxmcm9tLGZyb21UbyxkZWxheWVkQ2FsbCxzZXQsa2lsbFR3ZWVuc09mXCIsIGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBfZ3NhcFtuYW1lXSA9IFR3ZWVuW25hbWVdO1xufSk7XG5cbl90aWNrZXIuYWRkKFRpbWVsaW5lLnVwZGF0ZVJvb3QpO1xuXG5fcXVpY2tUd2VlbiA9IF9nc2FwLnRvKHt9LCB7XG4gIGR1cmF0aW9uOiAwXG59KTsgLy8gLS0tLSBFWFRSQSBQTFVHSU5TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBfZ2V0UGx1Z2luUHJvcFR3ZWVuID0gZnVuY3Rpb24gX2dldFBsdWdpblByb3BUd2VlbihwbHVnaW4sIHByb3ApIHtcbiAgdmFyIHB0ID0gcGx1Z2luLl9wdDtcblxuICB3aGlsZSAocHQgJiYgcHQucCAhPT0gcHJvcCAmJiBwdC5vcCAhPT0gcHJvcCAmJiBwdC5mcCAhPT0gcHJvcCkge1xuICAgIHB0ID0gcHQuX25leHQ7XG4gIH1cblxuICByZXR1cm4gcHQ7XG59LFxuICAgIF9hZGRNb2RpZmllcnMgPSBmdW5jdGlvbiBfYWRkTW9kaWZpZXJzKHR3ZWVuLCBtb2RpZmllcnMpIHtcbiAgdmFyIHRhcmdldHMgPSB0d2Vlbi5fdGFyZ2V0cyxcbiAgICAgIHAsXG4gICAgICBpLFxuICAgICAgcHQ7XG5cbiAgZm9yIChwIGluIG1vZGlmaWVycykge1xuICAgIGkgPSB0YXJnZXRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHB0ID0gdHdlZW4uX3B0TG9va3VwW2ldW3BdO1xuXG4gICAgICBpZiAocHQgJiYgKHB0ID0gcHQuZCkpIHtcbiAgICAgICAgaWYgKHB0Ll9wdCkge1xuICAgICAgICAgIC8vIGlzIGEgcGx1Z2luXG4gICAgICAgICAgcHQgPSBfZ2V0UGx1Z2luUHJvcFR3ZWVuKHB0LCBwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB0ICYmIHB0Lm1vZGlmaWVyICYmIHB0Lm1vZGlmaWVyKG1vZGlmaWVyc1twXSwgdHdlZW4sIHRhcmdldHNbaV0sIHApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSxcbiAgICBfYnVpbGRNb2RpZmllclBsdWdpbiA9IGZ1bmN0aW9uIF9idWlsZE1vZGlmaWVyUGx1Z2luKG5hbWUsIG1vZGlmaWVyKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICByYXdWYXJzOiAxLFxuICAgIC8vZG9uJ3QgcHJlLXByb2Nlc3MgZnVuY3Rpb24tYmFzZWQgdmFsdWVzIG9yIFwicmFuZG9tKClcIiBzdHJpbmdzLlxuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQodGFyZ2V0LCB2YXJzLCB0d2Vlbikge1xuICAgICAgdHdlZW4uX29uSW5pdCA9IGZ1bmN0aW9uICh0d2Vlbikge1xuICAgICAgICB2YXIgdGVtcCwgcDtcblxuICAgICAgICBpZiAoX2lzU3RyaW5nKHZhcnMpKSB7XG4gICAgICAgICAgdGVtcCA9IHt9O1xuXG4gICAgICAgICAgX2ZvckVhY2hOYW1lKHZhcnMsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGVtcFtuYW1lXSA9IDE7XG4gICAgICAgICAgfSk7IC8vaWYgdGhlIHVzZXIgcGFzc2VzIGluIGEgY29tbWEtZGVsaW1pdGVkIGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMgdG8gcm91bmRQcm9wcywgbGlrZSBcIngseVwiLCB3ZSByb3VuZCB0byB3aG9sZSBudW1iZXJzLlxuXG5cbiAgICAgICAgICB2YXJzID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RpZmllcikge1xuICAgICAgICAgIHRlbXAgPSB7fTtcblxuICAgICAgICAgIGZvciAocCBpbiB2YXJzKSB7XG4gICAgICAgICAgICB0ZW1wW3BdID0gbW9kaWZpZXIodmFyc1twXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFycyA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICBfYWRkTW9kaWZpZXJzKHR3ZWVuLCB2YXJzKTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xufTsgLy9yZWdpc3RlciBjb3JlIHBsdWdpbnNcblxuXG5leHBvcnQgdmFyIGdzYXAgPSBfZ3NhcC5yZWdpc3RlclBsdWdpbih7XG4gIG5hbWU6IFwiYXR0clwiLFxuICBpbml0OiBmdW5jdGlvbiBpbml0KHRhcmdldCwgdmFycywgdHdlZW4sIGluZGV4LCB0YXJnZXRzKSB7XG4gICAgdmFyIHAsIHB0LCB2O1xuICAgIHRoaXMudHdlZW4gPSB0d2VlbjtcblxuICAgIGZvciAocCBpbiB2YXJzKSB7XG4gICAgICB2ID0gdGFyZ2V0LmdldEF0dHJpYnV0ZShwKSB8fCBcIlwiO1xuICAgICAgcHQgPSB0aGlzLmFkZCh0YXJnZXQsIFwic2V0QXR0cmlidXRlXCIsICh2IHx8IDApICsgXCJcIiwgdmFyc1twXSwgaW5kZXgsIHRhcmdldHMsIDAsIDAsIHApO1xuICAgICAgcHQub3AgPSBwO1xuICAgICAgcHQuYiA9IHY7IC8vIHJlY29yZCB0aGUgYmVnaW5uaW5nIHZhbHVlIHNvIHdlIGNhbiByZXZlcnQoKVxuXG4gICAgICB0aGlzLl9wcm9wcy5wdXNoKHApO1xuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIocmF0aW8sIGRhdGEpIHtcbiAgICB2YXIgcHQgPSBkYXRhLl9wdDtcblxuICAgIHdoaWxlIChwdCkge1xuICAgICAgX3JldmVydGluZyA/IHB0LnNldChwdC50LCBwdC5wLCBwdC5iLCBwdCkgOiBwdC5yKHJhdGlvLCBwdC5kKTsgLy8gaWYgcmV2ZXJ0aW5nLCBnbyBiYWNrIHRvIHRoZSBvcmlnaW5hbCAocHQuYilcblxuICAgICAgcHQgPSBwdC5fbmV4dDtcbiAgICB9XG4gIH1cbn0sIHtcbiAgbmFtZTogXCJlbmRBcnJheVwiLFxuICBpbml0OiBmdW5jdGlvbiBpbml0KHRhcmdldCwgdmFsdWUpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmxlbmd0aDtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHRoaXMuYWRkKHRhcmdldCwgaSwgdGFyZ2V0W2ldIHx8IDAsIHZhbHVlW2ldLCAwLCAwLCAwLCAwLCAwLCAxKTtcbiAgICB9XG4gIH1cbn0sIF9idWlsZE1vZGlmaWVyUGx1Z2luKFwicm91bmRQcm9wc1wiLCBfcm91bmRNb2RpZmllciksIF9idWlsZE1vZGlmaWVyUGx1Z2luKFwibW9kaWZpZXJzXCIpLCBfYnVpbGRNb2RpZmllclBsdWdpbihcInNuYXBcIiwgc25hcCkpIHx8IF9nc2FwOyAvL3RvIHByZXZlbnQgdGhlIGNvcmUgcGx1Z2lucyBmcm9tIGJlaW5nIGRyb3BwZWQgdmlhIGFnZ3Jlc3NpdmUgdHJlZSBzaGFraW5nLCB3ZSBtdXN0IGluY2x1ZGUgdGhlbSBpbiB0aGUgdmFyaWFibGUgZGVjbGFyYXRpb24gaW4gdGhpcyB3YXkuXG5cblR3ZWVuLnZlcnNpb24gPSBUaW1lbGluZS52ZXJzaW9uID0gZ3NhcC52ZXJzaW9uID0gXCIzLjEyLjJcIjtcbl9jb3JlUmVhZHkgPSAxO1xuX3dpbmRvd0V4aXN0cygpICYmIF93YWtlKCk7XG52YXIgUG93ZXIwID0gX2Vhc2VNYXAuUG93ZXIwLFxuICAgIFBvd2VyMSA9IF9lYXNlTWFwLlBvd2VyMSxcbiAgICBQb3dlcjIgPSBfZWFzZU1hcC5Qb3dlcjIsXG4gICAgUG93ZXIzID0gX2Vhc2VNYXAuUG93ZXIzLFxuICAgIFBvd2VyNCA9IF9lYXNlTWFwLlBvd2VyNCxcbiAgICBMaW5lYXIgPSBfZWFzZU1hcC5MaW5lYXIsXG4gICAgUXVhZCA9IF9lYXNlTWFwLlF1YWQsXG4gICAgQ3ViaWMgPSBfZWFzZU1hcC5DdWJpYyxcbiAgICBRdWFydCA9IF9lYXNlTWFwLlF1YXJ0LFxuICAgIFF1aW50ID0gX2Vhc2VNYXAuUXVpbnQsXG4gICAgU3Ryb25nID0gX2Vhc2VNYXAuU3Ryb25nLFxuICAgIEVsYXN0aWMgPSBfZWFzZU1hcC5FbGFzdGljLFxuICAgIEJhY2sgPSBfZWFzZU1hcC5CYWNrLFxuICAgIFN0ZXBwZWRFYXNlID0gX2Vhc2VNYXAuU3RlcHBlZEVhc2UsXG4gICAgQm91bmNlID0gX2Vhc2VNYXAuQm91bmNlLFxuICAgIFNpbmUgPSBfZWFzZU1hcC5TaW5lLFxuICAgIEV4cG8gPSBfZWFzZU1hcC5FeHBvLFxuICAgIENpcmMgPSBfZWFzZU1hcC5DaXJjO1xuZXhwb3J0IHsgUG93ZXIwLCBQb3dlcjEsIFBvd2VyMiwgUG93ZXIzLCBQb3dlcjQsIExpbmVhciwgUXVhZCwgQ3ViaWMsIFF1YXJ0LCBRdWludCwgU3Ryb25nLCBFbGFzdGljLCBCYWNrLCBTdGVwcGVkRWFzZSwgQm91bmNlLCBTaW5lLCBFeHBvLCBDaXJjIH07XG5leHBvcnQgeyBUd2VlbiBhcyBUd2Vlbk1heCwgVHdlZW4gYXMgVHdlZW5MaXRlLCBUaW1lbGluZSBhcyBUaW1lbGluZU1heCwgVGltZWxpbmUgYXMgVGltZWxpbmVMaXRlLCBnc2FwIGFzIGRlZmF1bHQsIHdyYXAsIHdyYXBZb3lvLCBkaXN0cmlidXRlLCByYW5kb20sIHNuYXAsIG5vcm1hbGl6ZSwgZ2V0VW5pdCwgY2xhbXAsIHNwbGl0Q29sb3IsIHRvQXJyYXksIHNlbGVjdG9yLCBtYXBSYW5nZSwgcGlwZSwgdW5pdGl6ZSwgaW50ZXJwb2xhdGUsIHNodWZmbGUgfTsgLy9leHBvcnQgc29tZSBpbnRlcm5hbCBtZXRob2RzL29yb2plY3RzIGZvciB1c2UgaW4gQ1NTUGx1Z2luIHNvIHRoYXQgd2UgY2FuIGV4dGVybmFsaXplIHRoYXQgZmlsZSBhbmQgYWxsb3cgY3VzdG9tIGJ1aWxkcyB0aGF0IGV4Y2x1ZGUgaXQuXG5cbmV4cG9ydCB7IF9nZXRQcm9wZXJ0eSwgX251bUV4cCwgX251bVdpdGhVbml0RXhwLCBfaXNTdHJpbmcsIF9pc1VuZGVmaW5lZCwgX3JlbmRlckNvbXBsZXhTdHJpbmcsIF9yZWxFeHAsIF9zZXREZWZhdWx0cywgX3JlbW92ZUxpbmtlZExpc3RJdGVtLCBfZm9yRWFjaE5hbWUsIF9zb3J0UHJvcFR3ZWVuc0J5UHJpb3JpdHksIF9jb2xvclN0cmluZ0ZpbHRlciwgX3JlcGxhY2VSYW5kb20sIF9jaGVja1BsdWdpbiwgX3BsdWdpbnMsIF90aWNrZXIsIF9jb25maWcsIF9yb3VuZE1vZGlmaWVyLCBfcm91bmQsIF9taXNzaW5nUGx1Z2luLCBfZ2V0U2V0dGVyLCBfZ2V0Q2FjaGUsIF9jb2xvckV4cCwgX3BhcnNlUmVsYXRpdmUgfTsiLCIvKiFcbiAqIENTU1BsdWdpbiAzLjEyLjJcbiAqIGh0dHBzOi8vZ3JlZW5zb2NrLmNvbVxuICpcbiAqIENvcHlyaWdodCAyMDA4LTIwMjMsIEdyZWVuU29jay4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFN1YmplY3QgdG8gdGhlIHRlcm1zIGF0IGh0dHBzOi8vZ3JlZW5zb2NrLmNvbS9zdGFuZGFyZC1saWNlbnNlIG9yIGZvclxuICogQ2x1YiBHcmVlblNvY2sgbWVtYmVycywgdGhlIGFncmVlbWVudCBpc3N1ZWQgd2l0aCB0aGF0IG1lbWJlcnNoaXAuXG4gKiBAYXV0aG9yOiBKYWNrIERveWxlLCBqYWNrQGdyZWVuc29jay5jb21cbiovXG5cbi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBnc2FwLCBfZ2V0UHJvcGVydHksIF9udW1FeHAsIF9udW1XaXRoVW5pdEV4cCwgZ2V0VW5pdCwgX2lzU3RyaW5nLCBfaXNVbmRlZmluZWQsIF9yZW5kZXJDb21wbGV4U3RyaW5nLCBfcmVsRXhwLCBfZm9yRWFjaE5hbWUsIF9zb3J0UHJvcFR3ZWVuc0J5UHJpb3JpdHksIF9jb2xvclN0cmluZ0ZpbHRlciwgX2NoZWNrUGx1Z2luLCBfcmVwbGFjZVJhbmRvbSwgX3BsdWdpbnMsIEdTQ2FjaGUsIFByb3BUd2VlbiwgX2NvbmZpZywgX3RpY2tlciwgX3JvdW5kLCBfbWlzc2luZ1BsdWdpbiwgX2dldFNldHRlciwgX2dldENhY2hlLCBfY29sb3JFeHAsIF9wYXJzZVJlbGF0aXZlLCBfc2V0RGVmYXVsdHMsIF9yZW1vdmVMaW5rZWRMaXN0SXRlbSAvL2ZvciB0aGUgY29tbWVudGVkLW91dCBjbGFzc05hbWUgZmVhdHVyZS5cbn0gZnJvbSBcIi4vZ3NhcC1jb3JlLmpzXCI7XG5cbnZhciBfd2luLFxuICAgIF9kb2MsXG4gICAgX2RvY0VsZW1lbnQsXG4gICAgX3BsdWdpbkluaXR0ZWQsXG4gICAgX3RlbXBEaXYsXG4gICAgX3RlbXBEaXZTdHlsZXIsXG4gICAgX3JlY2VudFNldHRlclBsdWdpbixcbiAgICBfcmV2ZXJ0aW5nLFxuICAgIF93aW5kb3dFeGlzdHMgPSBmdW5jdGlvbiBfd2luZG93RXhpc3RzKCkge1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIjtcbn0sXG4gICAgX3RyYW5zZm9ybVByb3BzID0ge30sXG4gICAgX1JBRDJERUcgPSAxODAgLyBNYXRoLlBJLFxuICAgIF9ERUcyUkFEID0gTWF0aC5QSSAvIDE4MCxcbiAgICBfYXRhbjIgPSBNYXRoLmF0YW4yLFxuICAgIF9iaWdOdW0gPSAxZTgsXG4gICAgX2NhcHNFeHAgPSAvKFtBLVpdKS9nLFxuICAgIF9ob3Jpem9udGFsRXhwID0gLyhsZWZ0fHJpZ2h0fHdpZHRofG1hcmdpbnxwYWRkaW5nfHgpL2ksXG4gICAgX2NvbXBsZXhFeHAgPSAvW1xccyxcXChdXFxTLyxcbiAgICBfcHJvcGVydHlBbGlhc2VzID0ge1xuICBhdXRvQWxwaGE6IFwib3BhY2l0eSx2aXNpYmlsaXR5XCIsXG4gIHNjYWxlOiBcInNjYWxlWCxzY2FsZVlcIixcbiAgYWxwaGE6IFwib3BhY2l0eVwiXG59LFxuICAgIF9yZW5kZXJDU1NQcm9wID0gZnVuY3Rpb24gX3JlbmRlckNTU1Byb3AocmF0aW8sIGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEuc2V0KGRhdGEudCwgZGF0YS5wLCBNYXRoLnJvdW5kKChkYXRhLnMgKyBkYXRhLmMgKiByYXRpbykgKiAxMDAwMCkgLyAxMDAwMCArIGRhdGEudSwgZGF0YSk7XG59LFxuICAgIF9yZW5kZXJQcm9wV2l0aEVuZCA9IGZ1bmN0aW9uIF9yZW5kZXJQcm9wV2l0aEVuZChyYXRpbywgZGF0YSkge1xuICByZXR1cm4gZGF0YS5zZXQoZGF0YS50LCBkYXRhLnAsIHJhdGlvID09PSAxID8gZGF0YS5lIDogTWF0aC5yb3VuZCgoZGF0YS5zICsgZGF0YS5jICogcmF0aW8pICogMTAwMDApIC8gMTAwMDAgKyBkYXRhLnUsIGRhdGEpO1xufSxcbiAgICBfcmVuZGVyQ1NTUHJvcFdpdGhCZWdpbm5pbmcgPSBmdW5jdGlvbiBfcmVuZGVyQ1NTUHJvcFdpdGhCZWdpbm5pbmcocmF0aW8sIGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEuc2V0KGRhdGEudCwgZGF0YS5wLCByYXRpbyA/IE1hdGgucm91bmQoKGRhdGEucyArIGRhdGEuYyAqIHJhdGlvKSAqIDEwMDAwKSAvIDEwMDAwICsgZGF0YS51IDogZGF0YS5iLCBkYXRhKTtcbn0sXG4gICAgLy9pZiB1bml0cyBjaGFuZ2UsIHdlIG5lZWQgYSB3YXkgdG8gcmVuZGVyIHRoZSBvcmlnaW5hbCB1bml0L3ZhbHVlIHdoZW4gdGhlIHR3ZWVuIGdvZXMgYWxsIHRoZSB3YXkgYmFjayB0byB0aGUgYmVnaW5uaW5nIChyYXRpbzowKVxuX3JlbmRlclJvdW5kZWRDU1NQcm9wID0gZnVuY3Rpb24gX3JlbmRlclJvdW5kZWRDU1NQcm9wKHJhdGlvLCBkYXRhKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGEucyArIGRhdGEuYyAqIHJhdGlvO1xuICBkYXRhLnNldChkYXRhLnQsIGRhdGEucCwgfn4odmFsdWUgKyAodmFsdWUgPCAwID8gLS41IDogLjUpKSArIGRhdGEudSwgZGF0YSk7XG59LFxuICAgIF9yZW5kZXJOb25Ud2VlbmluZ1ZhbHVlID0gZnVuY3Rpb24gX3JlbmRlck5vblR3ZWVuaW5nVmFsdWUocmF0aW8sIGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEuc2V0KGRhdGEudCwgZGF0YS5wLCByYXRpbyA/IGRhdGEuZSA6IGRhdGEuYiwgZGF0YSk7XG59LFxuICAgIF9yZW5kZXJOb25Ud2VlbmluZ1ZhbHVlT25seUF0RW5kID0gZnVuY3Rpb24gX3JlbmRlck5vblR3ZWVuaW5nVmFsdWVPbmx5QXRFbmQocmF0aW8sIGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEuc2V0KGRhdGEudCwgZGF0YS5wLCByYXRpbyAhPT0gMSA/IGRhdGEuYiA6IGRhdGEuZSwgZGF0YSk7XG59LFxuICAgIF9zZXR0ZXJDU1NTdHlsZSA9IGZ1bmN0aW9uIF9zZXR0ZXJDU1NTdHlsZSh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSkge1xuICByZXR1cm4gdGFyZ2V0LnN0eWxlW3Byb3BlcnR5XSA9IHZhbHVlO1xufSxcbiAgICBfc2V0dGVyQ1NTUHJvcCA9IGZ1bmN0aW9uIF9zZXR0ZXJDU1NQcm9wKHRhcmdldCwgcHJvcGVydHksIHZhbHVlKSB7XG4gIHJldHVybiB0YXJnZXQuc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHksIHZhbHVlKTtcbn0sXG4gICAgX3NldHRlclRyYW5zZm9ybSA9IGZ1bmN0aW9uIF9zZXR0ZXJUcmFuc2Zvcm0odGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgcmV0dXJuIHRhcmdldC5fZ3NhcFtwcm9wZXJ0eV0gPSB2YWx1ZTtcbn0sXG4gICAgX3NldHRlclNjYWxlID0gZnVuY3Rpb24gX3NldHRlclNjYWxlKHRhcmdldCwgcHJvcGVydHksIHZhbHVlKSB7XG4gIHJldHVybiB0YXJnZXQuX2dzYXAuc2NhbGVYID0gdGFyZ2V0Ll9nc2FwLnNjYWxlWSA9IHZhbHVlO1xufSxcbiAgICBfc2V0dGVyU2NhbGVXaXRoUmVuZGVyID0gZnVuY3Rpb24gX3NldHRlclNjYWxlV2l0aFJlbmRlcih0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSwgZGF0YSwgcmF0aW8pIHtcbiAgdmFyIGNhY2hlID0gdGFyZ2V0Ll9nc2FwO1xuICBjYWNoZS5zY2FsZVggPSBjYWNoZS5zY2FsZVkgPSB2YWx1ZTtcbiAgY2FjaGUucmVuZGVyVHJhbnNmb3JtKHJhdGlvLCBjYWNoZSk7XG59LFxuICAgIF9zZXR0ZXJUcmFuc2Zvcm1XaXRoUmVuZGVyID0gZnVuY3Rpb24gX3NldHRlclRyYW5zZm9ybVdpdGhSZW5kZXIodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUsIGRhdGEsIHJhdGlvKSB7XG4gIHZhciBjYWNoZSA9IHRhcmdldC5fZ3NhcDtcbiAgY2FjaGVbcHJvcGVydHldID0gdmFsdWU7XG4gIGNhY2hlLnJlbmRlclRyYW5zZm9ybShyYXRpbywgY2FjaGUpO1xufSxcbiAgICBfdHJhbnNmb3JtUHJvcCA9IFwidHJhbnNmb3JtXCIsXG4gICAgX3RyYW5zZm9ybU9yaWdpblByb3AgPSBfdHJhbnNmb3JtUHJvcCArIFwiT3JpZ2luXCIsXG4gICAgX3NhdmVTdHlsZSA9IGZ1bmN0aW9uIF9zYXZlU3R5bGUocHJvcGVydHksIGlzTm90Q1NTKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0LFxuICAgICAgc3R5bGUgPSB0YXJnZXQuc3R5bGU7XG5cbiAgaWYgKHByb3BlcnR5IGluIF90cmFuc2Zvcm1Qcm9wcyAmJiBzdHlsZSkge1xuICAgIHRoaXMudGZtID0gdGhpcy50Zm0gfHwge307XG5cbiAgICBpZiAocHJvcGVydHkgIT09IFwidHJhbnNmb3JtXCIpIHtcbiAgICAgIHByb3BlcnR5ID0gX3Byb3BlcnR5QWxpYXNlc1twcm9wZXJ0eV0gfHwgcHJvcGVydHk7XG4gICAgICB+cHJvcGVydHkuaW5kZXhPZihcIixcIikgPyBwcm9wZXJ0eS5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gX3RoaXMudGZtW2FdID0gX2dldCh0YXJnZXQsIGEpO1xuICAgICAgfSkgOiB0aGlzLnRmbVtwcm9wZXJ0eV0gPSB0YXJnZXQuX2dzYXAueCA/IHRhcmdldC5fZ3NhcFtwcm9wZXJ0eV0gOiBfZ2V0KHRhcmdldCwgcHJvcGVydHkpOyAvLyBub3RlOiBzY2FsZSB3b3VsZCBtYXAgdG8gXCJzY2FsZVgsc2NhbGVZXCIsIHRodXMgd2UgbG9vcCBhbmQgYXBwbHkgdGhlbSBib3RoLlxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gX3Byb3BlcnR5QWxpYXNlcy50cmFuc2Zvcm0uc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgICAgICAgcmV0dXJuIF9zYXZlU3R5bGUuY2FsbChfdGhpcywgcCwgaXNOb3RDU1MpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuaW5kZXhPZihfdHJhbnNmb3JtUHJvcCkgPj0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0YXJnZXQuX2dzYXAuc3ZnKSB7XG4gICAgICB0aGlzLnN2Z28gPSB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1zdmctb3JpZ2luXCIpO1xuICAgICAgdGhpcy5wcm9wcy5wdXNoKF90cmFuc2Zvcm1PcmlnaW5Qcm9wLCBpc05vdENTUywgXCJcIik7XG4gICAgfVxuXG4gICAgcHJvcGVydHkgPSBfdHJhbnNmb3JtUHJvcDtcbiAgfVxuXG4gIChzdHlsZSB8fCBpc05vdENTUykgJiYgdGhpcy5wcm9wcy5wdXNoKHByb3BlcnR5LCBpc05vdENTUywgc3R5bGVbcHJvcGVydHldKTtcbn0sXG4gICAgX3JlbW92ZUluZGVwZW5kZW50VHJhbnNmb3JtcyA9IGZ1bmN0aW9uIF9yZW1vdmVJbmRlcGVuZGVudFRyYW5zZm9ybXMoc3R5bGUpIHtcbiAgaWYgKHN0eWxlLnRyYW5zbGF0ZSkge1xuICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KFwidHJhbnNsYXRlXCIpO1xuICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KFwic2NhbGVcIik7XG4gICAgc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJyb3RhdGVcIik7XG4gIH1cbn0sXG4gICAgX3JldmVydFN0eWxlID0gZnVuY3Rpb24gX3JldmVydFN0eWxlKCkge1xuICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgdGFyZ2V0ID0gdGhpcy50YXJnZXQsXG4gICAgICBzdHlsZSA9IHRhcmdldC5zdHlsZSxcbiAgICAgIGNhY2hlID0gdGFyZ2V0Ll9nc2FwLFxuICAgICAgaSxcbiAgICAgIHA7XG5cbiAgZm9yIChpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgLy8gc3RvcmVkIGxpa2UgdGhpczogcHJvcGVydHksIGlzTm90Q1NTLCB2YWx1ZVxuICAgIHByb3BzW2kgKyAxXSA/IHRhcmdldFtwcm9wc1tpXV0gPSBwcm9wc1tpICsgMl0gOiBwcm9wc1tpICsgMl0gPyBzdHlsZVtwcm9wc1tpXV0gPSBwcm9wc1tpICsgMl0gOiBzdHlsZS5yZW1vdmVQcm9wZXJ0eShwcm9wc1tpXS5zdWJzdHIoMCwgMikgPT09IFwiLS1cIiA/IHByb3BzW2ldIDogcHJvcHNbaV0ucmVwbGFjZShfY2Fwc0V4cCwgXCItJDFcIikudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICBpZiAodGhpcy50Zm0pIHtcbiAgICBmb3IgKHAgaW4gdGhpcy50Zm0pIHtcbiAgICAgIGNhY2hlW3BdID0gdGhpcy50Zm1bcF07XG4gICAgfVxuXG4gICAgaWYgKGNhY2hlLnN2Zykge1xuICAgICAgY2FjaGUucmVuZGVyVHJhbnNmb3JtKCk7XG4gICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKFwiZGF0YS1zdmctb3JpZ2luXCIsIHRoaXMuc3ZnbyB8fCBcIlwiKTtcbiAgICB9XG5cbiAgICBpID0gX3JldmVydGluZygpO1xuXG4gICAgaWYgKCghaSB8fCAhaS5pc1N0YXJ0KSAmJiAhc3R5bGVbX3RyYW5zZm9ybVByb3BdKSB7XG4gICAgICBfcmVtb3ZlSW5kZXBlbmRlbnRUcmFuc2Zvcm1zKHN0eWxlKTtcblxuICAgICAgY2FjaGUudW5jYWNoZSA9IDE7IC8vIGlmIGl0J3MgYSBzdGFydEF0IHRoYXQncyBiZWluZyByZXZlcnRlZCBpbiB0aGUgX2luaXRUd2VlbigpIG9mIHRoZSBjb3JlLCB3ZSBkb24ndCBuZWVkIHRvIHVuY2FjaGUgdHJhbnNmb3Jtcy4gVGhpcyBpcyBwdXJlbHkgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uXG4gICAgfVxuICB9XG59LFxuICAgIF9nZXRTdHlsZVNhdmVyID0gZnVuY3Rpb24gX2dldFN0eWxlU2F2ZXIodGFyZ2V0LCBwcm9wZXJ0aWVzKSB7XG4gIHZhciBzYXZlciA9IHtcbiAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICBwcm9wczogW10sXG4gICAgcmV2ZXJ0OiBfcmV2ZXJ0U3R5bGUsXG4gICAgc2F2ZTogX3NhdmVTdHlsZVxuICB9O1xuICB0YXJnZXQuX2dzYXAgfHwgZ3NhcC5jb3JlLmdldENhY2hlKHRhcmdldCk7IC8vIGp1c3QgbWFrZSBzdXJlIHRoZXJlJ3MgYSBfZ3NhcCBjYWNoZSBkZWZpbmVkIGJlY2F1c2Ugd2UgcmVhZCBmcm9tIGl0IGluIF9zYXZlU3R5bGUoKSBhbmQgaXQncyBtb3JlIGVmZmljaWVudCB0byBqdXN0IGNoZWNrIGl0IGhlcmUgb25jZS5cblxuICBwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gc2F2ZXIuc2F2ZShwKTtcbiAgfSk7XG4gIHJldHVybiBzYXZlcjtcbn0sXG4gICAgX3N1cHBvcnRzM0QsXG4gICAgX2NyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiBfY3JlYXRlRWxlbWVudCh0eXBlLCBucykge1xuICB2YXIgZSA9IF9kb2MuY3JlYXRlRWxlbWVudE5TID8gX2RvYy5jcmVhdGVFbGVtZW50TlMoKG5zIHx8IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKS5yZXBsYWNlKC9eaHR0cHMvLCBcImh0dHBcIiksIHR5cGUpIDogX2RvYy5jcmVhdGVFbGVtZW50KHR5cGUpOyAvL3NvbWUgc2VydmVycyBzd2FwIGluIGh0dHBzIGZvciBodHRwIGluIHRoZSBuYW1lc3BhY2Ugd2hpY2ggY2FuIGJyZWFrIHRoaW5ncywgbWFraW5nIFwic3R5bGVcIiBpbmFjY2Vzc2libGUuXG5cbiAgcmV0dXJuIGUuc3R5bGUgPyBlIDogX2RvYy5jcmVhdGVFbGVtZW50KHR5cGUpOyAvL3NvbWUgZW52aXJvbm1lbnRzIHdvbid0IGFsbG93IGFjY2VzcyB0byB0aGUgZWxlbWVudCdzIHN0eWxlIHdoZW4gY3JlYXRlZCB3aXRoIGEgbmFtZXNwYWNlIGluIHdoaWNoIGNhc2Ugd2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgY3JlYXRlRWxlbWVudCgpIHRvIHdvcmsgYXJvdW5kIHRoZSBpc3N1ZS4gQWxzbyBub3RlIHRoYXQgd2hlbiBHU0FQIGlzIGVtYmVkZGVkIGRpcmVjdGx5IGluc2lkZSBhbiBTVkcgZmlsZSwgY3JlYXRlRWxlbWVudCgpIHdvbid0IGFsbG93IGFjY2VzcyB0byB0aGUgc3R5bGUgb2JqZWN0IGluIEZpcmVmb3ggKHNlZSBodHRwczovL2dyZWVuc29jay5jb20vZm9ydW1zL3RvcGljLzIwMjE1LXByb2JsZW0tdXNpbmctdHdlZW5tYXgtaW4tc3RhbmRhbG9uZS1zZWxmLWNvbnRhaW5pbmctc3ZnLWZpbGUtZXJyLWNhbm5vdC1zZXQtcHJvcGVydHktY3NzdGV4dC1vZi11bmRlZmluZWQvKS5cbn0sXG4gICAgX2dldENvbXB1dGVkUHJvcGVydHkgPSBmdW5jdGlvbiBfZ2V0Q29tcHV0ZWRQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCBza2lwUHJlZml4RmFsbGJhY2spIHtcbiAgdmFyIGNzID0gZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpO1xuICByZXR1cm4gY3NbcHJvcGVydHldIHx8IGNzLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkucmVwbGFjZShfY2Fwc0V4cCwgXCItJDFcIikudG9Mb3dlckNhc2UoKSkgfHwgY3MuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eSkgfHwgIXNraXBQcmVmaXhGYWxsYmFjayAmJiBfZ2V0Q29tcHV0ZWRQcm9wZXJ0eSh0YXJnZXQsIF9jaGVja1Byb3BQcmVmaXgocHJvcGVydHkpIHx8IHByb3BlcnR5LCAxKSB8fCBcIlwiOyAvL2NzcyB2YXJpYWJsZXMgbWF5IG5vdCBuZWVkIGNhcHMgc3dhcHBlZCBvdXQgZm9yIGRhc2hlcyBhbmQgbG93ZXJjYXNlLlxufSxcbiAgICBfcHJlZml4ZXMgPSBcIk8sTW96LG1zLE1zLFdlYmtpdFwiLnNwbGl0KFwiLFwiKSxcbiAgICBfY2hlY2tQcm9wUHJlZml4ID0gZnVuY3Rpb24gX2NoZWNrUHJvcFByZWZpeChwcm9wZXJ0eSwgZWxlbWVudCwgcHJlZmVyUHJlZml4KSB7XG4gIHZhciBlID0gZWxlbWVudCB8fCBfdGVtcERpdixcbiAgICAgIHMgPSBlLnN0eWxlLFxuICAgICAgaSA9IDU7XG5cbiAgaWYgKHByb3BlcnR5IGluIHMgJiYgIXByZWZlclByZWZpeCkge1xuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfVxuXG4gIHByb3BlcnR5ID0gcHJvcGVydHkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zdWJzdHIoMSk7XG5cbiAgd2hpbGUgKGktLSAmJiAhKF9wcmVmaXhlc1tpXSArIHByb3BlcnR5IGluIHMpKSB7fVxuXG4gIHJldHVybiBpIDwgMCA/IG51bGwgOiAoaSA9PT0gMyA/IFwibXNcIiA6IGkgPj0gMCA/IF9wcmVmaXhlc1tpXSA6IFwiXCIpICsgcHJvcGVydHk7XG59LFxuICAgIF9pbml0Q29yZSA9IGZ1bmN0aW9uIF9pbml0Q29yZSgpIHtcbiAgaWYgKF93aW5kb3dFeGlzdHMoKSAmJiB3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICBfd2luID0gd2luZG93O1xuICAgIF9kb2MgPSBfd2luLmRvY3VtZW50O1xuICAgIF9kb2NFbGVtZW50ID0gX2RvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgX3RlbXBEaXYgPSBfY3JlYXRlRWxlbWVudChcImRpdlwiKSB8fCB7XG4gICAgICBzdHlsZToge31cbiAgICB9O1xuICAgIF90ZW1wRGl2U3R5bGVyID0gX2NyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgX3RyYW5zZm9ybVByb3AgPSBfY2hlY2tQcm9wUHJlZml4KF90cmFuc2Zvcm1Qcm9wKTtcbiAgICBfdHJhbnNmb3JtT3JpZ2luUHJvcCA9IF90cmFuc2Zvcm1Qcm9wICsgXCJPcmlnaW5cIjtcbiAgICBfdGVtcERpdi5zdHlsZS5jc3NUZXh0ID0gXCJib3JkZXItd2lkdGg6MDtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOmFic29sdXRlO3BhZGRpbmc6MFwiOyAvL21ha2Ugc3VyZSB0byBvdmVycmlkZSBjZXJ0YWluIHByb3BlcnRpZXMgdGhhdCBtYXkgY29udGFtaW5hdGUgbWVhc3VyZW1lbnRzLCBpbiBjYXNlIHRoZSB1c2VyIGhhcyBvdmVycmVhY2hpbmcgc3R5bGUgc2hlZXRzLlxuXG4gICAgX3N1cHBvcnRzM0QgPSAhIV9jaGVja1Byb3BQcmVmaXgoXCJwZXJzcGVjdGl2ZVwiKTtcbiAgICBfcmV2ZXJ0aW5nID0gZ3NhcC5jb3JlLnJldmVydGluZztcbiAgICBfcGx1Z2luSW5pdHRlZCA9IDE7XG4gIH1cbn0sXG4gICAgX2dldEJCb3hIYWNrID0gZnVuY3Rpb24gX2dldEJCb3hIYWNrKHN3YXBJZlBvc3NpYmxlKSB7XG4gIC8vd29ya3MgYXJvdW5kIGlzc3VlcyBpbiBzb21lIGJyb3dzZXJzIChsaWtlIEZpcmVmb3gpIHRoYXQgZG9uJ3QgY29ycmVjdGx5IHJlcG9ydCBnZXRCQm94KCkgb24gU1ZHIGVsZW1lbnRzIGluc2lkZSBhIDxkZWZzPiBlbGVtZW50IGFuZC9vciA8bWFzaz4uIFdlIHRyeSBjcmVhdGluZyBhbiBTVkcsIGFkZGluZyBpdCB0byB0aGUgZG9jdW1lbnRFbGVtZW50IGFuZCB0b3NzIHRoZSBlbGVtZW50IGluIHRoZXJlIHNvIHRoYXQgaXQncyBkZWZpbml0ZWx5IHBhcnQgb2YgdGhlIHJlbmRlcmluZyB0cmVlLCB0aGVuIGdyYWIgdGhlIGJib3ggYW5kIGlmIGl0IHdvcmtzLCB3ZSBhY3R1YWxseSBzd2FwIG91dCB0aGUgb3JpZ2luYWwgZ2V0QkJveCgpIG1ldGhvZCBmb3Igb3VyIG93biB0aGF0IGRvZXMgdGhlc2UgZXh0cmEgc3RlcHMgd2hlbmV2ZXIgZ2V0QkJveCBpcyBuZWVkZWQuIFRoaXMgaGVscHMgZW5zdXJlIHRoYXQgcGVyZm9ybWFuY2UgaXMgb3B0aW1hbCAob25seSBkbyBhbGwgdGhlc2UgZXh0cmEgc3RlcHMgd2hlbiBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4uLm1vc3QgZWxlbWVudHMgZG9uJ3QgbmVlZCBpdCkuXG4gIHZhciBzdmcgPSBfY3JlYXRlRWxlbWVudChcInN2Z1wiLCB0aGlzLm93bmVyU1ZHRWxlbWVudCAmJiB0aGlzLm93bmVyU1ZHRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ4bWxuc1wiKSB8fCBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIpLFxuICAgICAgb2xkUGFyZW50ID0gdGhpcy5wYXJlbnROb2RlLFxuICAgICAgb2xkU2libGluZyA9IHRoaXMubmV4dFNpYmxpbmcsXG4gICAgICBvbGRDU1MgPSB0aGlzLnN0eWxlLmNzc1RleHQsXG4gICAgICBiYm94O1xuXG4gIF9kb2NFbGVtZW50LmFwcGVuZENoaWxkKHN2Zyk7XG5cbiAgc3ZnLmFwcGVuZENoaWxkKHRoaXMpO1xuICB0aGlzLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cbiAgaWYgKHN3YXBJZlBvc3NpYmxlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGJib3ggPSB0aGlzLmdldEJCb3goKTtcbiAgICAgIHRoaXMuX2dzYXBCQm94ID0gdGhpcy5nZXRCQm94OyAvL3N0b3JlIHRoZSBvcmlnaW5hbFxuXG4gICAgICB0aGlzLmdldEJCb3ggPSBfZ2V0QkJveEhhY2s7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfSBlbHNlIGlmICh0aGlzLl9nc2FwQkJveCkge1xuICAgIGJib3ggPSB0aGlzLl9nc2FwQkJveCgpO1xuICB9XG5cbiAgaWYgKG9sZFBhcmVudCkge1xuICAgIGlmIChvbGRTaWJsaW5nKSB7XG4gICAgICBvbGRQYXJlbnQuaW5zZXJ0QmVmb3JlKHRoaXMsIG9sZFNpYmxpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGRQYXJlbnQuYXBwZW5kQ2hpbGQodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgX2RvY0VsZW1lbnQucmVtb3ZlQ2hpbGQoc3ZnKTtcblxuICB0aGlzLnN0eWxlLmNzc1RleHQgPSBvbGRDU1M7XG4gIHJldHVybiBiYm94O1xufSxcbiAgICBfZ2V0QXR0cmlidXRlRmFsbGJhY2tzID0gZnVuY3Rpb24gX2dldEF0dHJpYnV0ZUZhbGxiYWNrcyh0YXJnZXQsIGF0dHJpYnV0ZXNBcnJheSkge1xuICB2YXIgaSA9IGF0dHJpYnV0ZXNBcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIGlmICh0YXJnZXQuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZXNBcnJheVtpXSkpIHtcbiAgICAgIHJldHVybiB0YXJnZXQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZXNBcnJheVtpXSk7XG4gICAgfVxuICB9XG59LFxuICAgIF9nZXRCQm94ID0gZnVuY3Rpb24gX2dldEJCb3godGFyZ2V0KSB7XG4gIHZhciBib3VuZHM7XG5cbiAgdHJ5IHtcbiAgICBib3VuZHMgPSB0YXJnZXQuZ2V0QkJveCgpOyAvL0ZpcmVmb3ggdGhyb3dzIGVycm9ycyBpZiB5b3UgdHJ5IGNhbGxpbmcgZ2V0QkJveCgpIG9uIGFuIFNWRyBlbGVtZW50IHRoYXQncyBub3QgcmVuZGVyZWQgKGxpa2UgaW4gYSA8c3ltYm9sPiBvciA8ZGVmcz4pLiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02MTIxMThcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBib3VuZHMgPSBfZ2V0QkJveEhhY2suY2FsbCh0YXJnZXQsIHRydWUpO1xuICB9XG5cbiAgYm91bmRzICYmIChib3VuZHMud2lkdGggfHwgYm91bmRzLmhlaWdodCkgfHwgdGFyZ2V0LmdldEJCb3ggPT09IF9nZXRCQm94SGFjayB8fCAoYm91bmRzID0gX2dldEJCb3hIYWNrLmNhbGwodGFyZ2V0LCB0cnVlKSk7IC8vc29tZSBicm93c2VycyAobGlrZSBGaXJlZm94KSBtaXNyZXBvcnQgdGhlIGJvdW5kcyBpZiB0aGUgZWxlbWVudCBoYXMgemVybyB3aWR0aCBhbmQgaGVpZ2h0IChpdCBqdXN0IGFzc3VtZXMgaXQncyBhdCB4OjAsIHk6MCksIHRodXMgd2UgbmVlZCB0byBtYW51YWxseSBncmFiIHRoZSBwb3NpdGlvbiBpbiB0aGF0IGNhc2UuXG5cbiAgcmV0dXJuIGJvdW5kcyAmJiAhYm91bmRzLndpZHRoICYmICFib3VuZHMueCAmJiAhYm91bmRzLnkgPyB7XG4gICAgeDogK19nZXRBdHRyaWJ1dGVGYWxsYmFja3ModGFyZ2V0LCBbXCJ4XCIsIFwiY3hcIiwgXCJ4MVwiXSkgfHwgMCxcbiAgICB5OiArX2dldEF0dHJpYnV0ZUZhbGxiYWNrcyh0YXJnZXQsIFtcInlcIiwgXCJjeVwiLCBcInkxXCJdKSB8fCAwLFxuICAgIHdpZHRoOiAwLFxuICAgIGhlaWdodDogMFxuICB9IDogYm91bmRzO1xufSxcbiAgICBfaXNTVkcgPSBmdW5jdGlvbiBfaXNTVkcoZSkge1xuICByZXR1cm4gISEoZS5nZXRDVE0gJiYgKCFlLnBhcmVudE5vZGUgfHwgZS5vd25lclNWR0VsZW1lbnQpICYmIF9nZXRCQm94KGUpKTtcbn0sXG4gICAgLy9yZXBvcnRzIGlmIHRoZSBlbGVtZW50IGlzIGFuIFNWRyBvbiB3aGljaCBnZXRCQm94KCkgYWN0dWFsbHkgd29ya3Ncbl9yZW1vdmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIF9yZW1vdmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5KSB7XG4gIGlmIChwcm9wZXJ0eSkge1xuICAgIHZhciBzdHlsZSA9IHRhcmdldC5zdHlsZTtcblxuICAgIGlmIChwcm9wZXJ0eSBpbiBfdHJhbnNmb3JtUHJvcHMgJiYgcHJvcGVydHkgIT09IF90cmFuc2Zvcm1PcmlnaW5Qcm9wKSB7XG4gICAgICBwcm9wZXJ0eSA9IF90cmFuc2Zvcm1Qcm9wO1xuICAgIH1cblxuICAgIGlmIChzdHlsZS5yZW1vdmVQcm9wZXJ0eSkge1xuICAgICAgaWYgKHByb3BlcnR5LnN1YnN0cigwLCAyKSA9PT0gXCJtc1wiIHx8IHByb3BlcnR5LnN1YnN0cigwLCA2KSA9PT0gXCJ3ZWJraXRcIikge1xuICAgICAgICAvL01pY3Jvc29mdCBhbmQgc29tZSBXZWJraXQgYnJvd3NlcnMgZG9uJ3QgY29uZm9ybSB0byB0aGUgc3RhbmRhcmQgb2YgY2FwaXRhbGl6aW5nIHRoZSBmaXJzdCBwcmVmaXggY2hhcmFjdGVyLCBzbyB3ZSBhZGp1c3Qgc28gdGhhdCB3aGVuIHdlIHByZWZpeCB0aGUgY2FwcyB3aXRoIGEgZGFzaCwgaXQncyBjb3JyZWN0IChvdGhlcndpc2UgaXQnZCBiZSBcIm1zLXRyYW5zZm9ybVwiIGluc3RlYWQgb2YgXCItbXMtdHJhbnNmb3JtXCIgZm9yIElFOSwgZm9yIGV4YW1wbGUpXG4gICAgICAgIHByb3BlcnR5ID0gXCItXCIgKyBwcm9wZXJ0eTtcbiAgICAgIH1cblxuICAgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkocHJvcGVydHkucmVwbGFjZShfY2Fwc0V4cCwgXCItJDFcIikudG9Mb3dlckNhc2UoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vbm90ZTogb2xkIHZlcnNpb25zIG9mIElFIHVzZSBcInJlbW92ZUF0dHJpYnV0ZSgpXCIgaW5zdGVhZCBvZiBcInJlbW92ZVByb3BlcnR5KClcIlxuICAgICAgc3R5bGUucmVtb3ZlQXR0cmlidXRlKHByb3BlcnR5KTtcbiAgICB9XG4gIH1cbn0sXG4gICAgX2FkZE5vblR3ZWVuaW5nUFQgPSBmdW5jdGlvbiBfYWRkTm9uVHdlZW5pbmdQVChwbHVnaW4sIHRhcmdldCwgcHJvcGVydHksIGJlZ2lubmluZywgZW5kLCBvbmx5U2V0QXRFbmQpIHtcbiAgdmFyIHB0ID0gbmV3IFByb3BUd2VlbihwbHVnaW4uX3B0LCB0YXJnZXQsIHByb3BlcnR5LCAwLCAxLCBvbmx5U2V0QXRFbmQgPyBfcmVuZGVyTm9uVHdlZW5pbmdWYWx1ZU9ubHlBdEVuZCA6IF9yZW5kZXJOb25Ud2VlbmluZ1ZhbHVlKTtcbiAgcGx1Z2luLl9wdCA9IHB0O1xuICBwdC5iID0gYmVnaW5uaW5nO1xuICBwdC5lID0gZW5kO1xuXG4gIHBsdWdpbi5fcHJvcHMucHVzaChwcm9wZXJ0eSk7XG5cbiAgcmV0dXJuIHB0O1xufSxcbiAgICBfbm9uQ29udmVydGlibGVVbml0cyA9IHtcbiAgZGVnOiAxLFxuICByYWQ6IDEsXG4gIHR1cm46IDFcbn0sXG4gICAgX25vblN0YW5kYXJkTGF5b3V0cyA9IHtcbiAgZ3JpZDogMSxcbiAgZmxleDogMVxufSxcbiAgICAvL3Rha2VzIGEgc2luZ2xlIHZhbHVlIGxpa2UgMjBweCBhbmQgY29udmVydHMgaXQgdG8gdGhlIHVuaXQgc3BlY2lmaWVkLCBsaWtlIFwiJVwiLCByZXR1cm5pbmcgb25seSB0aGUgbnVtZXJpYyBhbW91bnQuXG5fY29udmVydFRvVW5pdCA9IGZ1bmN0aW9uIF9jb252ZXJ0VG9Vbml0KHRhcmdldCwgcHJvcGVydHksIHZhbHVlLCB1bml0KSB7XG4gIHZhciBjdXJWYWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpIHx8IDAsXG4gICAgICBjdXJVbml0ID0gKHZhbHVlICsgXCJcIikudHJpbSgpLnN1YnN0cigoY3VyVmFsdWUgKyBcIlwiKS5sZW5ndGgpIHx8IFwicHhcIixcbiAgICAgIC8vIHNvbWUgYnJvd3NlcnMgbGVhdmUgZXh0cmEgd2hpdGVzcGFjZSBhdCB0aGUgYmVnaW5uaW5nIG9mIENTUyB2YXJpYWJsZXMsIGhlbmNlIHRoZSBuZWVkIHRvIHRyaW0oKVxuICBzdHlsZSA9IF90ZW1wRGl2LnN0eWxlLFxuICAgICAgaG9yaXpvbnRhbCA9IF9ob3Jpem9udGFsRXhwLnRlc3QocHJvcGVydHkpLFxuICAgICAgaXNSb290U1ZHID0gdGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJzdmdcIixcbiAgICAgIG1lYXN1cmVQcm9wZXJ0eSA9IChpc1Jvb3RTVkcgPyBcImNsaWVudFwiIDogXCJvZmZzZXRcIikgKyAoaG9yaXpvbnRhbCA/IFwiV2lkdGhcIiA6IFwiSGVpZ2h0XCIpLFxuICAgICAgYW1vdW50ID0gMTAwLFxuICAgICAgdG9QaXhlbHMgPSB1bml0ID09PSBcInB4XCIsXG4gICAgICB0b1BlcmNlbnQgPSB1bml0ID09PSBcIiVcIixcbiAgICAgIHB4LFxuICAgICAgcGFyZW50LFxuICAgICAgY2FjaGUsXG4gICAgICBpc1NWRztcblxuICBpZiAodW5pdCA9PT0gY3VyVW5pdCB8fCAhY3VyVmFsdWUgfHwgX25vbkNvbnZlcnRpYmxlVW5pdHNbdW5pdF0gfHwgX25vbkNvbnZlcnRpYmxlVW5pdHNbY3VyVW5pdF0pIHtcbiAgICByZXR1cm4gY3VyVmFsdWU7XG4gIH1cblxuICBjdXJVbml0ICE9PSBcInB4XCIgJiYgIXRvUGl4ZWxzICYmIChjdXJWYWx1ZSA9IF9jb252ZXJ0VG9Vbml0KHRhcmdldCwgcHJvcGVydHksIHZhbHVlLCBcInB4XCIpKTtcbiAgaXNTVkcgPSB0YXJnZXQuZ2V0Q1RNICYmIF9pc1NWRyh0YXJnZXQpO1xuXG4gIGlmICgodG9QZXJjZW50IHx8IGN1clVuaXQgPT09IFwiJVwiKSAmJiAoX3RyYW5zZm9ybVByb3BzW3Byb3BlcnR5XSB8fCB+cHJvcGVydHkuaW5kZXhPZihcImFkaXVzXCIpKSkge1xuICAgIHB4ID0gaXNTVkcgPyB0YXJnZXQuZ2V0QkJveCgpW2hvcml6b250YWwgPyBcIndpZHRoXCIgOiBcImhlaWdodFwiXSA6IHRhcmdldFttZWFzdXJlUHJvcGVydHldO1xuICAgIHJldHVybiBfcm91bmQodG9QZXJjZW50ID8gY3VyVmFsdWUgLyBweCAqIGFtb3VudCA6IGN1clZhbHVlIC8gMTAwICogcHgpO1xuICB9XG5cbiAgc3R5bGVbaG9yaXpvbnRhbCA/IFwid2lkdGhcIiA6IFwiaGVpZ2h0XCJdID0gYW1vdW50ICsgKHRvUGl4ZWxzID8gY3VyVW5pdCA6IHVuaXQpO1xuICBwYXJlbnQgPSB+cHJvcGVydHkuaW5kZXhPZihcImFkaXVzXCIpIHx8IHVuaXQgPT09IFwiZW1cIiAmJiB0YXJnZXQuYXBwZW5kQ2hpbGQgJiYgIWlzUm9vdFNWRyA/IHRhcmdldCA6IHRhcmdldC5wYXJlbnROb2RlO1xuXG4gIGlmIChpc1NWRykge1xuICAgIHBhcmVudCA9ICh0YXJnZXQub3duZXJTVkdFbGVtZW50IHx8IHt9KS5wYXJlbnROb2RlO1xuICB9XG5cbiAgaWYgKCFwYXJlbnQgfHwgcGFyZW50ID09PSBfZG9jIHx8ICFwYXJlbnQuYXBwZW5kQ2hpbGQpIHtcbiAgICBwYXJlbnQgPSBfZG9jLmJvZHk7XG4gIH1cblxuICBjYWNoZSA9IHBhcmVudC5fZ3NhcDtcblxuICBpZiAoY2FjaGUgJiYgdG9QZXJjZW50ICYmIGNhY2hlLndpZHRoICYmIGhvcml6b250YWwgJiYgY2FjaGUudGltZSA9PT0gX3RpY2tlci50aW1lICYmICFjYWNoZS51bmNhY2hlKSB7XG4gICAgcmV0dXJuIF9yb3VuZChjdXJWYWx1ZSAvIGNhY2hlLndpZHRoICogYW1vdW50KTtcbiAgfSBlbHNlIHtcbiAgICAodG9QZXJjZW50IHx8IGN1clVuaXQgPT09IFwiJVwiKSAmJiAhX25vblN0YW5kYXJkTGF5b3V0c1tfZ2V0Q29tcHV0ZWRQcm9wZXJ0eShwYXJlbnQsIFwiZGlzcGxheVwiKV0gJiYgKHN0eWxlLnBvc2l0aW9uID0gX2dldENvbXB1dGVkUHJvcGVydHkodGFyZ2V0LCBcInBvc2l0aW9uXCIpKTtcbiAgICBwYXJlbnQgPT09IHRhcmdldCAmJiAoc3R5bGUucG9zaXRpb24gPSBcInN0YXRpY1wiKTsgLy8gbGlrZSBmb3IgYm9yZGVyUmFkaXVzLCBpZiBpdCdzIGEgJSB3ZSBtdXN0IGhhdmUgaXQgcmVsYXRpdmUgdG8gdGhlIHRhcmdldCBpdHNlbGYgYnV0IHRoYXQgbWF5IG5vdCBoYXZlIHBvc2l0aW9uOiByZWxhdGl2ZSBvciBwb3NpdGlvbjogYWJzb2x1dGUgaW4gd2hpY2ggY2FzZSBpdCdkIGdvIHVwIHRoZSBjaGFpbiB1bnRpbCBpdCBmaW5kcyBpdHMgb2Zmc2V0UGFyZW50IChiYWQpLiBwb3NpdGlvbjogc3RhdGljIHByb3RlY3RzIGFnYWluc3QgdGhhdC5cblxuICAgIHBhcmVudC5hcHBlbmRDaGlsZChfdGVtcERpdik7XG4gICAgcHggPSBfdGVtcERpdlttZWFzdXJlUHJvcGVydHldO1xuICAgIHBhcmVudC5yZW1vdmVDaGlsZChfdGVtcERpdik7XG4gICAgc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cbiAgICBpZiAoaG9yaXpvbnRhbCAmJiB0b1BlcmNlbnQpIHtcbiAgICAgIGNhY2hlID0gX2dldENhY2hlKHBhcmVudCk7XG4gICAgICBjYWNoZS50aW1lID0gX3RpY2tlci50aW1lO1xuICAgICAgY2FjaGUud2lkdGggPSBwYXJlbnRbbWVhc3VyZVByb3BlcnR5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX3JvdW5kKHRvUGl4ZWxzID8gcHggKiBjdXJWYWx1ZSAvIGFtb3VudCA6IHB4ICYmIGN1clZhbHVlID8gYW1vdW50IC8gcHggKiBjdXJWYWx1ZSA6IDApO1xufSxcbiAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCB1bml0LCB1bmNhY2hlKSB7XG4gIHZhciB2YWx1ZTtcbiAgX3BsdWdpbkluaXR0ZWQgfHwgX2luaXRDb3JlKCk7XG5cbiAgaWYgKHByb3BlcnR5IGluIF9wcm9wZXJ0eUFsaWFzZXMgJiYgcHJvcGVydHkgIT09IFwidHJhbnNmb3JtXCIpIHtcbiAgICBwcm9wZXJ0eSA9IF9wcm9wZXJ0eUFsaWFzZXNbcHJvcGVydHldO1xuXG4gICAgaWYgKH5wcm9wZXJ0eS5pbmRleE9mKFwiLFwiKSkge1xuICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eS5zcGxpdChcIixcIilbMF07XG4gICAgfVxuICB9XG5cbiAgaWYgKF90cmFuc2Zvcm1Qcm9wc1twcm9wZXJ0eV0gJiYgcHJvcGVydHkgIT09IFwidHJhbnNmb3JtXCIpIHtcbiAgICB2YWx1ZSA9IF9wYXJzZVRyYW5zZm9ybSh0YXJnZXQsIHVuY2FjaGUpO1xuICAgIHZhbHVlID0gcHJvcGVydHkgIT09IFwidHJhbnNmb3JtT3JpZ2luXCIgPyB2YWx1ZVtwcm9wZXJ0eV0gOiB2YWx1ZS5zdmcgPyB2YWx1ZS5vcmlnaW4gOiBfZmlyc3RUd29Pbmx5KF9nZXRDb21wdXRlZFByb3BlcnR5KHRhcmdldCwgX3RyYW5zZm9ybU9yaWdpblByb3ApKSArIFwiIFwiICsgdmFsdWUuek9yaWdpbiArIFwicHhcIjtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IHRhcmdldC5zdHlsZVtwcm9wZXJ0eV07XG5cbiAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09PSBcImF1dG9cIiB8fCB1bmNhY2hlIHx8IH4odmFsdWUgKyBcIlwiKS5pbmRleE9mKFwiY2FsYyhcIikpIHtcbiAgICAgIHZhbHVlID0gX3NwZWNpYWxQcm9wc1twcm9wZXJ0eV0gJiYgX3NwZWNpYWxQcm9wc1twcm9wZXJ0eV0odGFyZ2V0LCBwcm9wZXJ0eSwgdW5pdCkgfHwgX2dldENvbXB1dGVkUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSkgfHwgX2dldFByb3BlcnR5KHRhcmdldCwgcHJvcGVydHkpIHx8IChwcm9wZXJ0eSA9PT0gXCJvcGFjaXR5XCIgPyAxIDogMCk7IC8vIG5vdGU6IHNvbWUgYnJvd3NlcnMsIGxpa2UgRmlyZWZveCwgZG9uJ3QgcmVwb3J0IGJvcmRlclJhZGl1cyBjb3JyZWN0bHkhIEluc3RlYWQsIGl0IG9ubHkgcmVwb3J0cyBldmVyeSBjb3JuZXIgbGlrZSAgYm9yZGVyVG9wTGVmdFJhZGl1c1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bml0ICYmICF+KHZhbHVlICsgXCJcIikudHJpbSgpLmluZGV4T2YoXCIgXCIpID8gX2NvbnZlcnRUb1VuaXQodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUsIHVuaXQpICsgdW5pdCA6IHZhbHVlO1xufSxcbiAgICBfdHdlZW5Db21wbGV4Q1NTU3RyaW5nID0gZnVuY3Rpb24gX3R3ZWVuQ29tcGxleENTU1N0cmluZyh0YXJnZXQsIHByb3AsIHN0YXJ0LCBlbmQpIHtcbiAgLy8gbm90ZTogd2UgY2FsbCBfdHdlZW5Db21wbGV4Q1NTU3RyaW5nLmNhbGwocGx1Z2luSW5zdGFuY2UuLi4pIHRvIGVuc3VyZSB0aGF0IGl0J3Mgc2NvcGVkIHByb3Blcmx5LiBXZSBtYXkgY2FsbCBpdCBmcm9tIHdpdGhpbiBhIHBsdWdpbiB0b28sIHRodXMgXCJ0aGlzXCIgd291bGQgcmVmZXIgdG8gdGhlIHBsdWdpbi5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA9PT0gXCJub25lXCIpIHtcbiAgICAvLyBzb21lIGJyb3dzZXJzIGxpa2UgU2FmYXJpIGFjdHVhbGx5IFBSRUZFUiB0aGUgcHJlZml4ZWQgcHJvcGVydHkgYW5kIG1pcy1yZXBvcnQgdGhlIHVucHJlZml4ZWQgdmFsdWUgbGlrZSBjbGlwUGF0aCAoQlVHKS4gSW4gb3RoZXIgd29yZHMsIGV2ZW4gdGhvdWdoIGNsaXBQYXRoIGV4aXN0cyBpbiB0aGUgc3R5bGUgKFwiY2xpcFBhdGhcIiBpbiB0YXJnZXQuc3R5bGUpIGFuZCBpdCdzIHNldCBpbiB0aGUgQ1NTIHByb3Blcmx5IChhbG9uZyB3aXRoIC13ZWJraXQtY2xpcC1wYXRoKSwgU2FmYXJpIHJlcG9ydHMgY2xpcFBhdGggYXMgXCJub25lXCIgd2hlcmVhcyBXZWJraXRDbGlwUGF0aCByZXBvcnRzIGFjY3VyYXRlbHkgbGlrZSBcImVsbGlwc2UoMTAwJSAwJSBhdCA1MCUgMCUpXCIsIHNvIGluIHRoaXMgY2FzZSB3ZSBtdXN0IFNXSVRDSCB0byB1c2luZyB0aGUgcHJlZml4ZWQgcHJvcGVydHkgaW5zdGVhZC4gU2VlIGh0dHBzOi8vZ3JlZW5zb2NrLmNvbS9mb3J1bXMvdG9waWMvMTgzMTAtY2xpcHBhdGgtZG9lc250LXdvcmstb24taW9zL1xuICAgIHZhciBwID0gX2NoZWNrUHJvcFByZWZpeChwcm9wLCB0YXJnZXQsIDEpLFxuICAgICAgICBzID0gcCAmJiBfZ2V0Q29tcHV0ZWRQcm9wZXJ0eSh0YXJnZXQsIHAsIDEpO1xuXG4gICAgaWYgKHMgJiYgcyAhPT0gc3RhcnQpIHtcbiAgICAgIHByb3AgPSBwO1xuICAgICAgc3RhcnQgPSBzO1xuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gXCJib3JkZXJDb2xvclwiKSB7XG4gICAgICBzdGFydCA9IF9nZXRDb21wdXRlZFByb3BlcnR5KHRhcmdldCwgXCJib3JkZXJUb3BDb2xvclwiKTsgLy8gRmlyZWZveCBidWc6IGFsd2F5cyByZXBvcnRzIFwiYm9yZGVyQ29sb3JcIiBhcyBcIlwiLCBzbyB3ZSBtdXN0IGZhbGwgYmFjayB0byBib3JkZXJUb3BDb2xvci4gU2VlIGh0dHBzOi8vZ3JlZW5zb2NrLmNvbS9mb3J1bXMvdG9waWMvMjQ1ODMtaG93LXRvLXJldHVybi1jb2xvcnMtdGhhdC1pLWhhZC1hZnRlci1yZXZlcnNlL1xuICAgIH1cbiAgfVxuXG4gIHZhciBwdCA9IG5ldyBQcm9wVHdlZW4odGhpcy5fcHQsIHRhcmdldC5zdHlsZSwgcHJvcCwgMCwgMSwgX3JlbmRlckNvbXBsZXhTdHJpbmcpLFxuICAgICAgaW5kZXggPSAwLFxuICAgICAgbWF0Y2hJbmRleCA9IDAsXG4gICAgICBhLFxuICAgICAgcmVzdWx0LFxuICAgICAgc3RhcnRWYWx1ZXMsXG4gICAgICBzdGFydE51bSxcbiAgICAgIGNvbG9yLFxuICAgICAgc3RhcnRWYWx1ZSxcbiAgICAgIGVuZFZhbHVlLFxuICAgICAgZW5kTnVtLFxuICAgICAgY2h1bmssXG4gICAgICBlbmRVbml0LFxuICAgICAgc3RhcnRVbml0LFxuICAgICAgZW5kVmFsdWVzO1xuICBwdC5iID0gc3RhcnQ7XG4gIHB0LmUgPSBlbmQ7XG4gIHN0YXJ0ICs9IFwiXCI7IC8vIGVuc3VyZSB2YWx1ZXMgYXJlIHN0cmluZ3NcblxuICBlbmQgKz0gXCJcIjtcblxuICBpZiAoZW5kID09PSBcImF1dG9cIikge1xuICAgIHRhcmdldC5zdHlsZVtwcm9wXSA9IGVuZDtcbiAgICBlbmQgPSBfZ2V0Q29tcHV0ZWRQcm9wZXJ0eSh0YXJnZXQsIHByb3ApIHx8IGVuZDtcbiAgICB0YXJnZXQuc3R5bGVbcHJvcF0gPSBzdGFydDtcbiAgfVxuXG4gIGEgPSBbc3RhcnQsIGVuZF07XG5cbiAgX2NvbG9yU3RyaW5nRmlsdGVyKGEpOyAvLyBwYXNzIGFuIGFycmF5IHdpdGggdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgdmFsdWVzIGFuZCBsZXQgdGhlIGZpbHRlciBkbyB3aGF0ZXZlciBpdCBuZWVkcyB0byB0aGUgdmFsdWVzLiBJZiBjb2xvcnMgYXJlIGZvdW5kLCBpdCByZXR1cm5zIHRydWUgYW5kIHRoZW4gd2UgbXVzdCBtYXRjaCB3aGVyZSB0aGUgY29sb3Igc2hvd3MgdXAgb3JkZXItd2lzZSBiZWNhdXNlIGZvciB0aGluZ3MgbGlrZSBib3hTaGFkb3csIHNvbWV0aW1lcyB0aGUgYnJvd3NlciBwcm92aWRlcyB0aGUgY29tcHV0ZWQgdmFsdWVzIHdpdGggdGhlIGNvbG9yIEZJUlNULCBidXQgdGhlIHVzZXIgcHJvdmlkZXMgaXQgd2l0aCB0aGUgY29sb3IgTEFTVCwgc28gZmxpcCB0aGVtIGlmIG5lY2Vzc2FyeS4gU2FtZSBmb3IgZHJvcC1zaGFkb3coKS5cblxuXG4gIHN0YXJ0ID0gYVswXTtcbiAgZW5kID0gYVsxXTtcbiAgc3RhcnRWYWx1ZXMgPSBzdGFydC5tYXRjaChfbnVtV2l0aFVuaXRFeHApIHx8IFtdO1xuICBlbmRWYWx1ZXMgPSBlbmQubWF0Y2goX251bVdpdGhVbml0RXhwKSB8fCBbXTtcblxuICBpZiAoZW5kVmFsdWVzLmxlbmd0aCkge1xuICAgIHdoaWxlIChyZXN1bHQgPSBfbnVtV2l0aFVuaXRFeHAuZXhlYyhlbmQpKSB7XG4gICAgICBlbmRWYWx1ZSA9IHJlc3VsdFswXTtcbiAgICAgIGNodW5rID0gZW5kLnN1YnN0cmluZyhpbmRleCwgcmVzdWx0LmluZGV4KTtcblxuICAgICAgaWYgKGNvbG9yKSB7XG4gICAgICAgIGNvbG9yID0gKGNvbG9yICsgMSkgJSA1O1xuICAgICAgfSBlbHNlIGlmIChjaHVuay5zdWJzdHIoLTUpID09PSBcInJnYmEoXCIgfHwgY2h1bmsuc3Vic3RyKC01KSA9PT0gXCJoc2xhKFwiKSB7XG4gICAgICAgIGNvbG9yID0gMTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuZFZhbHVlICE9PSAoc3RhcnRWYWx1ZSA9IHN0YXJ0VmFsdWVzW21hdGNoSW5kZXgrK10gfHwgXCJcIikpIHtcbiAgICAgICAgc3RhcnROdW0gPSBwYXJzZUZsb2F0KHN0YXJ0VmFsdWUpIHx8IDA7XG4gICAgICAgIHN0YXJ0VW5pdCA9IHN0YXJ0VmFsdWUuc3Vic3RyKChzdGFydE51bSArIFwiXCIpLmxlbmd0aCk7XG4gICAgICAgIGVuZFZhbHVlLmNoYXJBdCgxKSA9PT0gXCI9XCIgJiYgKGVuZFZhbHVlID0gX3BhcnNlUmVsYXRpdmUoc3RhcnROdW0sIGVuZFZhbHVlKSArIHN0YXJ0VW5pdCk7XG4gICAgICAgIGVuZE51bSA9IHBhcnNlRmxvYXQoZW5kVmFsdWUpO1xuICAgICAgICBlbmRVbml0ID0gZW5kVmFsdWUuc3Vic3RyKChlbmROdW0gKyBcIlwiKS5sZW5ndGgpO1xuICAgICAgICBpbmRleCA9IF9udW1XaXRoVW5pdEV4cC5sYXN0SW5kZXggLSBlbmRVbml0Lmxlbmd0aDtcblxuICAgICAgICBpZiAoIWVuZFVuaXQpIHtcbiAgICAgICAgICAvL2lmIHNvbWV0aGluZyBsaWtlIFwicGVyc3BlY3RpdmU6MzAwXCIgaXMgcGFzc2VkIGluIGFuZCB3ZSBtdXN0IGFkZCBhIHVuaXQgdG8gdGhlIGVuZFxuICAgICAgICAgIGVuZFVuaXQgPSBlbmRVbml0IHx8IF9jb25maWcudW5pdHNbcHJvcF0gfHwgc3RhcnRVbml0O1xuXG4gICAgICAgICAgaWYgKGluZGV4ID09PSBlbmQubGVuZ3RoKSB7XG4gICAgICAgICAgICBlbmQgKz0gZW5kVW5pdDtcbiAgICAgICAgICAgIHB0LmUgKz0gZW5kVW5pdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhcnRVbml0ICE9PSBlbmRVbml0KSB7XG4gICAgICAgICAgc3RhcnROdW0gPSBfY29udmVydFRvVW5pdCh0YXJnZXQsIHByb3AsIHN0YXJ0VmFsdWUsIGVuZFVuaXQpIHx8IDA7XG4gICAgICAgIH0gLy8gdGhlc2UgbmVzdGVkIFByb3BUd2VlbnMgYXJlIGhhbmRsZWQgaW4gYSBzcGVjaWFsIHdheSAtIHdlJ2xsIG5ldmVyIGFjdHVhbGx5IGNhbGwgYSByZW5kZXIgb3Igc2V0dGVyIG1ldGhvZCBvbiB0aGVtLiBXZSdsbCBqdXN0IGxvb3AgdGhyb3VnaCB0aGVtIGluIHRoZSBwYXJlbnQgY29tcGxleCBzdHJpbmcgUHJvcFR3ZWVuJ3MgcmVuZGVyIG1ldGhvZC5cblxuXG4gICAgICAgIHB0Ll9wdCA9IHtcbiAgICAgICAgICBfbmV4dDogcHQuX3B0LFxuICAgICAgICAgIHA6IGNodW5rIHx8IG1hdGNoSW5kZXggPT09IDEgPyBjaHVuayA6IFwiLFwiLFxuICAgICAgICAgIC8vbm90ZTogU1ZHIHNwZWMgYWxsb3dzIG9taXNzaW9uIG9mIGNvbW1hL3NwYWNlIHdoZW4gYSBuZWdhdGl2ZSBzaWduIGlzIHdlZGdlZCBiZXR3ZWVuIHR3byBudW1iZXJzLCBsaWtlIDIuNS01LjMgaW5zdGVhZCBvZiAyLjUsLTUuMyBidXQgd2hlbiB0d2VlbmluZywgdGhlIG5lZ2F0aXZlIHZhbHVlIG1heSBzd2l0Y2ggdG8gcG9zaXRpdmUsIHNvIHdlIGluc2VydCB0aGUgY29tbWEganVzdCBpbiBjYXNlLlxuICAgICAgICAgIHM6IHN0YXJ0TnVtLFxuICAgICAgICAgIGM6IGVuZE51bSAtIHN0YXJ0TnVtLFxuICAgICAgICAgIG06IGNvbG9yICYmIGNvbG9yIDwgNCB8fCBwcm9wID09PSBcInpJbmRleFwiID8gTWF0aC5yb3VuZCA6IDBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdC5jID0gaW5kZXggPCBlbmQubGVuZ3RoID8gZW5kLnN1YnN0cmluZyhpbmRleCwgZW5kLmxlbmd0aCkgOiBcIlwiOyAvL3dlIHVzZSB0aGUgXCJjXCIgb2YgdGhlIFByb3BUd2VlbiB0byBzdG9yZSB0aGUgZmluYWwgcGFydCBvZiB0aGUgc3RyaW5nIChhZnRlciB0aGUgbGFzdCBudW1iZXIpXG4gIH0gZWxzZSB7XG4gICAgcHQuciA9IHByb3AgPT09IFwiZGlzcGxheVwiICYmIGVuZCA9PT0gXCJub25lXCIgPyBfcmVuZGVyTm9uVHdlZW5pbmdWYWx1ZU9ubHlBdEVuZCA6IF9yZW5kZXJOb25Ud2VlbmluZ1ZhbHVlO1xuICB9XG5cbiAgX3JlbEV4cC50ZXN0KGVuZCkgJiYgKHB0LmUgPSAwKTsgLy9pZiB0aGUgZW5kIHN0cmluZyBjb250YWlucyByZWxhdGl2ZSB2YWx1ZXMgb3IgZHluYW1pYyByYW5kb20oLi4uKSB2YWx1ZXMsIGRlbGV0ZSB0aGUgZW5kIGl0IHNvIHRoYXQgb24gdGhlIGZpbmFsIHJlbmRlciB3ZSBkb24ndCBhY3R1YWxseSBzZXQgaXQgdG8gdGhlIHN0cmluZyB3aXRoICs9IG9yIC09IGNoYXJhY3RlcnMgKGZvcmNlcyBpdCB0byB1c2UgdGhlIGNhbGN1bGF0ZWQgdmFsdWUpLlxuXG4gIHRoaXMuX3B0ID0gcHQ7IC8vc3RhcnQgdGhlIGxpbmtlZCBsaXN0IHdpdGggdGhpcyBuZXcgUHJvcFR3ZWVuLiBSZW1lbWJlciwgd2UgY2FsbCBfdHdlZW5Db21wbGV4Q1NTU3RyaW5nLmNhbGwocGx1Z2luSW5zdGFuY2UuLi4pIHRvIGVuc3VyZSB0aGF0IGl0J3Mgc2NvcGVkIHByb3Blcmx5LiBXZSBtYXkgY2FsbCBpdCBmcm9tIHdpdGhpbiBhbm90aGVyIHBsdWdpbiB0b28sIHRodXMgXCJ0aGlzXCIgd291bGQgcmVmZXIgdG8gdGhlIHBsdWdpbi5cblxuICByZXR1cm4gcHQ7XG59LFxuICAgIF9rZXl3b3JkVG9QZXJjZW50ID0ge1xuICB0b3A6IFwiMCVcIixcbiAgYm90dG9tOiBcIjEwMCVcIixcbiAgbGVmdDogXCIwJVwiLFxuICByaWdodDogXCIxMDAlXCIsXG4gIGNlbnRlcjogXCI1MCVcIlxufSxcbiAgICBfY29udmVydEtleXdvcmRzVG9QZXJjZW50YWdlcyA9IGZ1bmN0aW9uIF9jb252ZXJ0S2V5d29yZHNUb1BlcmNlbnRhZ2VzKHZhbHVlKSB7XG4gIHZhciBzcGxpdCA9IHZhbHVlLnNwbGl0KFwiIFwiKSxcbiAgICAgIHggPSBzcGxpdFswXSxcbiAgICAgIHkgPSBzcGxpdFsxXSB8fCBcIjUwJVwiO1xuXG4gIGlmICh4ID09PSBcInRvcFwiIHx8IHggPT09IFwiYm90dG9tXCIgfHwgeSA9PT0gXCJsZWZ0XCIgfHwgeSA9PT0gXCJyaWdodFwiKSB7XG4gICAgLy90aGUgdXNlciBwcm92aWRlZCB0aGVtIGluIHRoZSB3cm9uZyBvcmRlciwgc28gZmxpcCB0aGVtXG4gICAgdmFsdWUgPSB4O1xuICAgIHggPSB5O1xuICAgIHkgPSB2YWx1ZTtcbiAgfVxuXG4gIHNwbGl0WzBdID0gX2tleXdvcmRUb1BlcmNlbnRbeF0gfHwgeDtcbiAgc3BsaXRbMV0gPSBfa2V5d29yZFRvUGVyY2VudFt5XSB8fCB5O1xuICByZXR1cm4gc3BsaXQuam9pbihcIiBcIik7XG59LFxuICAgIF9yZW5kZXJDbGVhclByb3BzID0gZnVuY3Rpb24gX3JlbmRlckNsZWFyUHJvcHMocmF0aW8sIGRhdGEpIHtcbiAgaWYgKGRhdGEudHdlZW4gJiYgZGF0YS50d2Vlbi5fdGltZSA9PT0gZGF0YS50d2Vlbi5fZHVyKSB7XG4gICAgdmFyIHRhcmdldCA9IGRhdGEudCxcbiAgICAgICAgc3R5bGUgPSB0YXJnZXQuc3R5bGUsXG4gICAgICAgIHByb3BzID0gZGF0YS51LFxuICAgICAgICBjYWNoZSA9IHRhcmdldC5fZ3NhcCxcbiAgICAgICAgcHJvcCxcbiAgICAgICAgY2xlYXJUcmFuc2Zvcm1zLFxuICAgICAgICBpO1xuXG4gICAgaWYgKHByb3BzID09PSBcImFsbFwiIHx8IHByb3BzID09PSB0cnVlKSB7XG4gICAgICBzdHlsZS5jc3NUZXh0ID0gXCJcIjtcbiAgICAgIGNsZWFyVHJhbnNmb3JtcyA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3BzID0gcHJvcHMuc3BsaXQoXCIsXCIpO1xuICAgICAgaSA9IHByb3BzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKC0taSA+IC0xKSB7XG4gICAgICAgIHByb3AgPSBwcm9wc1tpXTtcblxuICAgICAgICBpZiAoX3RyYW5zZm9ybVByb3BzW3Byb3BdKSB7XG4gICAgICAgICAgY2xlYXJUcmFuc2Zvcm1zID0gMTtcbiAgICAgICAgICBwcm9wID0gcHJvcCA9PT0gXCJ0cmFuc2Zvcm1PcmlnaW5cIiA/IF90cmFuc2Zvcm1PcmlnaW5Qcm9wIDogX3RyYW5zZm9ybVByb3A7XG4gICAgICAgIH1cblxuICAgICAgICBfcmVtb3ZlUHJvcGVydHkodGFyZ2V0LCBwcm9wKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xlYXJUcmFuc2Zvcm1zKSB7XG4gICAgICBfcmVtb3ZlUHJvcGVydHkodGFyZ2V0LCBfdHJhbnNmb3JtUHJvcCk7XG5cbiAgICAgIGlmIChjYWNoZSkge1xuICAgICAgICBjYWNoZS5zdmcgJiYgdGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKTtcblxuICAgICAgICBfcGFyc2VUcmFuc2Zvcm0odGFyZ2V0LCAxKTsgLy8gZm9yY2UgYWxsIHRoZSBjYWNoZWQgdmFsdWVzIGJhY2sgdG8gXCJub3JtYWxcIi9pZGVudGl0eSwgb3RoZXJ3aXNlIGlmIHRoZXJlJ3MgYW5vdGhlciB0d2VlbiB0aGF0J3MgYWxyZWFkeSBzZXQgdG8gcmVuZGVyIHRyYW5zZm9ybXMgb24gdGhpcyBlbGVtZW50LCBpdCBjb3VsZCBkaXNwbGF5IHRoZSB3cm9uZyB2YWx1ZXMuXG5cblxuICAgICAgICBjYWNoZS51bmNhY2hlID0gMTtcblxuICAgICAgICBfcmVtb3ZlSW5kZXBlbmRlbnRUcmFuc2Zvcm1zKHN0eWxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0sXG4gICAgLy8gbm90ZTogc3BlY2lhbFByb3BzIHNob3VsZCByZXR1cm4gMSBpZiAoYW5kIG9ubHkgaWYpIHRoZXkgaGF2ZSBhIG5vbi16ZXJvIHByaW9yaXR5LiBJdCBpbmRpY2F0ZXMgd2UgbmVlZCB0byBzb3J0IHRoZSBsaW5rZWQgbGlzdC5cbl9zcGVjaWFsUHJvcHMgPSB7XG4gIGNsZWFyUHJvcHM6IGZ1bmN0aW9uIGNsZWFyUHJvcHMocGx1Z2luLCB0YXJnZXQsIHByb3BlcnR5LCBlbmRWYWx1ZSwgdHdlZW4pIHtcbiAgICBpZiAodHdlZW4uZGF0YSAhPT0gXCJpc0Zyb21TdGFydFwiKSB7XG4gICAgICB2YXIgcHQgPSBwbHVnaW4uX3B0ID0gbmV3IFByb3BUd2VlbihwbHVnaW4uX3B0LCB0YXJnZXQsIHByb3BlcnR5LCAwLCAwLCBfcmVuZGVyQ2xlYXJQcm9wcyk7XG4gICAgICBwdC51ID0gZW5kVmFsdWU7XG4gICAgICBwdC5wciA9IC0xMDtcbiAgICAgIHB0LnR3ZWVuID0gdHdlZW47XG5cbiAgICAgIHBsdWdpbi5fcHJvcHMucHVzaChwcm9wZXJ0eSk7XG5cbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuICAvKiBjbGFzc05hbWUgZmVhdHVyZSAoYWJvdXQgMC40a2IgZ3ppcHBlZCkuXG4gICwgY2xhc3NOYW1lKHBsdWdpbiwgdGFyZ2V0LCBwcm9wZXJ0eSwgZW5kVmFsdWUsIHR3ZWVuKSB7XG4gIFx0bGV0IF9yZW5kZXJDbGFzc05hbWUgPSAocmF0aW8sIGRhdGEpID0+IHtcbiAgXHRcdFx0ZGF0YS5jc3MucmVuZGVyKHJhdGlvLCBkYXRhLmNzcyk7XG4gIFx0XHRcdGlmICghcmF0aW8gfHwgcmF0aW8gPT09IDEpIHtcbiAgXHRcdFx0XHRsZXQgaW5saW5lID0gZGF0YS5ybXYsXG4gIFx0XHRcdFx0XHR0YXJnZXQgPSBkYXRhLnQsXG4gIFx0XHRcdFx0XHRwO1xuICBcdFx0XHRcdHRhcmdldC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCByYXRpbyA/IGRhdGEuZSA6IGRhdGEuYik7XG4gIFx0XHRcdFx0Zm9yIChwIGluIGlubGluZSkge1xuICBcdFx0XHRcdFx0X3JlbW92ZVByb3BlcnR5KHRhcmdldCwgcCk7XG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9XG4gIFx0XHR9LFxuICBcdFx0X2dldEFsbFN0eWxlcyA9ICh0YXJnZXQpID0+IHtcbiAgXHRcdFx0bGV0IHN0eWxlcyA9IHt9LFxuICBcdFx0XHRcdGNvbXB1dGVkID0gZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLFxuICBcdFx0XHRcdHA7XG4gIFx0XHRcdGZvciAocCBpbiBjb21wdXRlZCkge1xuICBcdFx0XHRcdGlmIChpc05hTihwKSAmJiBwICE9PSBcImNzc1RleHRcIiAmJiBwICE9PSBcImxlbmd0aFwiKSB7XG4gIFx0XHRcdFx0XHRzdHlsZXNbcF0gPSBjb21wdXRlZFtwXTtcbiAgXHRcdFx0XHR9XG4gIFx0XHRcdH1cbiAgXHRcdFx0X3NldERlZmF1bHRzKHN0eWxlcywgX3BhcnNlVHJhbnNmb3JtKHRhcmdldCwgMSkpO1xuICBcdFx0XHRyZXR1cm4gc3R5bGVzO1xuICBcdFx0fSxcbiAgXHRcdHN0YXJ0Q2xhc3NMaXN0ID0gdGFyZ2V0LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpLFxuICBcdFx0c3R5bGUgPSB0YXJnZXQuc3R5bGUsXG4gIFx0XHRjc3NUZXh0ID0gc3R5bGUuY3NzVGV4dCxcbiAgXHRcdGNhY2hlID0gdGFyZ2V0Ll9nc2FwLFxuICBcdFx0Y2xhc3NQVCA9IGNhY2hlLmNsYXNzUFQsXG4gIFx0XHRpbmxpbmVUb1JlbW92ZUF0RW5kID0ge30sXG4gIFx0XHRkYXRhID0ge3Q6dGFyZ2V0LCBwbHVnaW46cGx1Z2luLCBybXY6aW5saW5lVG9SZW1vdmVBdEVuZCwgYjpzdGFydENsYXNzTGlzdCwgZTooZW5kVmFsdWUuY2hhckF0KDEpICE9PSBcIj1cIikgPyBlbmRWYWx1ZSA6IHN0YXJ0Q2xhc3NMaXN0LnJlcGxhY2UobmV3IFJlZ0V4cChcIig/OlxcXFxzfF4pXCIgKyBlbmRWYWx1ZS5zdWJzdHIoMikgKyBcIig/IVtcXFxcdy1dKVwiKSwgXCJcIikgKyAoKGVuZFZhbHVlLmNoYXJBdCgwKSA9PT0gXCIrXCIpID8gXCIgXCIgKyBlbmRWYWx1ZS5zdWJzdHIoMikgOiBcIlwiKX0sXG4gIFx0XHRjaGFuZ2luZ1ZhcnMgPSB7fSxcbiAgXHRcdHN0YXJ0VmFycyA9IF9nZXRBbGxTdHlsZXModGFyZ2V0KSxcbiAgXHRcdHRyYW5zZm9ybVJlbGF0ZWQgPSAvKHRyYW5zZm9ybXxwZXJzcGVjdGl2ZSkvaSxcbiAgXHRcdGVuZFZhcnMsIHA7XG4gIFx0aWYgKGNsYXNzUFQpIHtcbiAgXHRcdGNsYXNzUFQucigxLCBjbGFzc1BULmQpO1xuICBcdFx0X3JlbW92ZUxpbmtlZExpc3RJdGVtKGNsYXNzUFQuZC5wbHVnaW4sIGNsYXNzUFQsIFwiX3B0XCIpO1xuICBcdH1cbiAgXHR0YXJnZXQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgZGF0YS5lKTtcbiAgXHRlbmRWYXJzID0gX2dldEFsbFN0eWxlcyh0YXJnZXQsIHRydWUpO1xuICBcdHRhcmdldC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBzdGFydENsYXNzTGlzdCk7XG4gIFx0Zm9yIChwIGluIGVuZFZhcnMpIHtcbiAgXHRcdGlmIChlbmRWYXJzW3BdICE9PSBzdGFydFZhcnNbcF0gJiYgIXRyYW5zZm9ybVJlbGF0ZWQudGVzdChwKSkge1xuICBcdFx0XHRjaGFuZ2luZ1ZhcnNbcF0gPSBlbmRWYXJzW3BdO1xuICBcdFx0XHRpZiAoIXN0eWxlW3BdICYmIHN0eWxlW3BdICE9PSBcIjBcIikge1xuICBcdFx0XHRcdGlubGluZVRvUmVtb3ZlQXRFbmRbcF0gPSAxO1xuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0fVxuICBcdGNhY2hlLmNsYXNzUFQgPSBwbHVnaW4uX3B0ID0gbmV3IFByb3BUd2VlbihwbHVnaW4uX3B0LCB0YXJnZXQsIFwiY2xhc3NOYW1lXCIsIDAsIDAsIF9yZW5kZXJDbGFzc05hbWUsIGRhdGEsIDAsIC0xMSk7XG4gIFx0aWYgKHN0eWxlLmNzc1RleHQgIT09IGNzc1RleHQpIHsgLy9vbmx5IGFwcGx5IGlmIHRoaW5ncyBjaGFuZ2UuIE90aGVyd2lzZSwgaW4gY2FzZXMgbGlrZSBhIGJhY2tncm91bmQtaW1hZ2UgdGhhdCdzIHB1bGxlZCBkeW5hbWljYWxseSwgaXQgY291bGQgY2F1c2UgYSByZWZyZXNoLiBTZWUgaHR0cHM6Ly9ncmVlbnNvY2suY29tL2ZvcnVtcy90b3BpYy8yMDM2OC1wb3NzaWJsZS1nc2FwLWJ1Zy1zd2l0Y2hpbmctY2xhc3NuYW1lcy1pbi1jaHJvbWUvLlxuICBcdFx0c3R5bGUuY3NzVGV4dCA9IGNzc1RleHQ7IC8vd2UgcmVjb3JkZWQgY3NzVGV4dCBiZWZvcmUgd2Ugc3dhcHBlZCBjbGFzc2VzIGFuZCByYW4gX2dldEFsbFN0eWxlcygpIGJlY2F1c2UgaW4gY2FzZXMgd2hlbiBhIGNsYXNzTmFtZSB0d2VlbiBpcyBvdmVyd3JpdHRlbiwgd2UgcmVtb3ZlIGFsbCB0aGUgcmVsYXRlZCB0d2VlbmluZyBwcm9wZXJ0aWVzIGZyb20gdGhhdCBjbGFzcyBjaGFuZ2UgKG90aGVyd2lzZSBjbGFzcy1zcGVjaWZpYyBzdHVmZiBjYW4ndCBvdmVycmlkZSBwcm9wZXJ0aWVzIHdlJ3ZlIGRpcmVjdGx5IHNldCBvbiB0aGUgdGFyZ2V0J3Mgc3R5bGUgb2JqZWN0IGR1ZSB0byBzcGVjaWZpY2l0eSkuXG4gIFx0fVxuICBcdF9wYXJzZVRyYW5zZm9ybSh0YXJnZXQsIHRydWUpOyAvL3RvIGNsZWFyIHRoZSBjYWNoaW5nIG9mIHRyYW5zZm9ybXNcbiAgXHRkYXRhLmNzcyA9IG5ldyBnc2FwLnBsdWdpbnMuY3NzKCk7XG4gIFx0ZGF0YS5jc3MuaW5pdCh0YXJnZXQsIGNoYW5naW5nVmFycywgdHdlZW4pO1xuICBcdHBsdWdpbi5fcHJvcHMucHVzaCguLi5kYXRhLmNzcy5fcHJvcHMpO1xuICBcdHJldHVybiAxO1xuICB9XG4gICovXG5cbn0sXG5cbi8qXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogVFJBTlNGT1JNU1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuX2lkZW50aXR5MkRNYXRyaXggPSBbMSwgMCwgMCwgMSwgMCwgMF0sXG4gICAgX3JvdGF0aW9uYWxQcm9wZXJ0aWVzID0ge30sXG4gICAgX2lzTnVsbFRyYW5zZm9ybSA9IGZ1bmN0aW9uIF9pc051bGxUcmFuc2Zvcm0odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBcIm1hdHJpeCgxLCAwLCAwLCAxLCAwLCAwKVwiIHx8IHZhbHVlID09PSBcIm5vbmVcIiB8fCAhdmFsdWU7XG59LFxuICAgIF9nZXRDb21wdXRlZFRyYW5zZm9ybU1hdHJpeEFzQXJyYXkgPSBmdW5jdGlvbiBfZ2V0Q29tcHV0ZWRUcmFuc2Zvcm1NYXRyaXhBc0FycmF5KHRhcmdldCkge1xuICB2YXIgbWF0cml4U3RyaW5nID0gX2dldENvbXB1dGVkUHJvcGVydHkodGFyZ2V0LCBfdHJhbnNmb3JtUHJvcCk7XG5cbiAgcmV0dXJuIF9pc051bGxUcmFuc2Zvcm0obWF0cml4U3RyaW5nKSA/IF9pZGVudGl0eTJETWF0cml4IDogbWF0cml4U3RyaW5nLnN1YnN0cig3KS5tYXRjaChfbnVtRXhwKS5tYXAoX3JvdW5kKTtcbn0sXG4gICAgX2dldE1hdHJpeCA9IGZ1bmN0aW9uIF9nZXRNYXRyaXgodGFyZ2V0LCBmb3JjZTJEKSB7XG4gIHZhciBjYWNoZSA9IHRhcmdldC5fZ3NhcCB8fCBfZ2V0Q2FjaGUodGFyZ2V0KSxcbiAgICAgIHN0eWxlID0gdGFyZ2V0LnN0eWxlLFxuICAgICAgbWF0cml4ID0gX2dldENvbXB1dGVkVHJhbnNmb3JtTWF0cml4QXNBcnJheSh0YXJnZXQpLFxuICAgICAgcGFyZW50LFxuICAgICAgbmV4dFNpYmxpbmcsXG4gICAgICB0ZW1wLFxuICAgICAgYWRkZWRUb0RPTTtcblxuICBpZiAoY2FjaGUuc3ZnICYmIHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIikpIHtcbiAgICB0ZW1wID0gdGFyZ2V0LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkubWF0cml4OyAvL2Vuc3VyZXMgdGhhdCBldmVuIGNvbXBsZXggdmFsdWVzIGxpa2UgXCJ0cmFuc2xhdGUoNTAsNjApIHJvdGF0ZSgxMzUsMCwwKVwiIGFyZSBwYXJzZWQgYmVjYXVzZSBpdCBtYXNoZXMgaXQgaW50byBhIG1hdHJpeC5cblxuICAgIG1hdHJpeCA9IFt0ZW1wLmEsIHRlbXAuYiwgdGVtcC5jLCB0ZW1wLmQsIHRlbXAuZSwgdGVtcC5mXTtcbiAgICByZXR1cm4gbWF0cml4LmpvaW4oXCIsXCIpID09PSBcIjEsMCwwLDEsMCwwXCIgPyBfaWRlbnRpdHkyRE1hdHJpeCA6IG1hdHJpeDtcbiAgfSBlbHNlIGlmIChtYXRyaXggPT09IF9pZGVudGl0eTJETWF0cml4ICYmICF0YXJnZXQub2Zmc2V0UGFyZW50ICYmIHRhcmdldCAhPT0gX2RvY0VsZW1lbnQgJiYgIWNhY2hlLnN2Zykge1xuICAgIC8vbm90ZTogaWYgb2Zmc2V0UGFyZW50IGlzIG51bGwsIHRoYXQgbWVhbnMgdGhlIGVsZW1lbnQgaXNuJ3QgaW4gdGhlIG5vcm1hbCBkb2N1bWVudCBmbG93LCBsaWtlIGlmIGl0IGhhcyBkaXNwbGF5Om5vbmUgb3Igb25lIG9mIGl0cyBhbmNlc3RvcnMgaGFzIGRpc3BsYXk6bm9uZSkuIEZpcmVmb3ggcmV0dXJucyBudWxsIGZvciBnZXRDb21wdXRlZFN0eWxlKCkgaWYgdGhlIGVsZW1lbnQgaXMgaW4gYW4gaWZyYW1lIHRoYXQgaGFzIGRpc3BsYXk6bm9uZS4gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ4Mzk3XG4gICAgLy9icm93c2VycyBkb24ndCByZXBvcnQgdHJhbnNmb3JtcyBhY2N1cmF0ZWx5IHVubGVzcyB0aGUgZWxlbWVudCBpcyBpbiB0aGUgRE9NIGFuZCBoYXMgYSBkaXNwbGF5IHZhbHVlIHRoYXQncyBub3QgXCJub25lXCIuIEZpcmVmb3ggYW5kIE1pY3Jvc29mdCBicm93c2VycyBoYXZlIGEgcGFydGlhbCBidWcgd2hlcmUgdGhleSdsbCByZXBvcnQgdHJhbnNmb3JtcyBldmVuIGlmIGRpc3BsYXk6bm9uZSBCVVQgbm90IGFueSBwZXJjZW50YWdlLWJhc2VkIHZhbHVlcyBsaWtlIHRyYW5zbGF0ZSgtNTAlLCA4cHgpIHdpbGwgYmUgcmVwb3J0ZWQgYXMgaWYgaXQncyB0cmFuc2xhdGUoMCwgOHB4KS5cbiAgICB0ZW1wID0gc3R5bGUuZGlzcGxheTtcbiAgICBzdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIHBhcmVudCA9IHRhcmdldC5wYXJlbnROb2RlO1xuXG4gICAgaWYgKCFwYXJlbnQgfHwgIXRhcmdldC5vZmZzZXRQYXJlbnQpIHtcbiAgICAgIC8vIG5vdGU6IGluIDMuMy4wIHdlIHN3aXRjaGVkIHRhcmdldC5vZmZzZXRQYXJlbnQgdG8gX2RvYy5ib2R5LmNvbnRhaW5zKHRhcmdldCkgdG8gYXZvaWQgW3NvbWV0aW1lcyB1bm5lY2Vzc2FyeV0gTXV0YXRpb25PYnNlcnZlciBjYWxscyBidXQgdGhhdCB3YXNuJ3QgYWRlcXVhdGUgYmVjYXVzZSB0aGVyZSBhcmUgZWRnZSBjYXNlcyB3aGVyZSBuZXN0ZWQgcG9zaXRpb246IGZpeGVkIGVsZW1lbnRzIG5lZWQgdG8gZ2V0IHJlcGFyZW50ZWQgdG8gYWNjdXJhdGVseSBzZW5zZSB0cmFuc2Zvcm1zLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2dyZWVuc29jay9HU0FQL2lzc3Vlcy8zODggYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9ncmVlbnNvY2svR1NBUC9pc3N1ZXMvMzc1XG4gICAgICBhZGRlZFRvRE9NID0gMTsgLy9mbGFnXG5cbiAgICAgIG5leHRTaWJsaW5nID0gdGFyZ2V0Lm5leHRFbGVtZW50U2libGluZztcblxuICAgICAgX2RvY0VsZW1lbnQuYXBwZW5kQ2hpbGQodGFyZ2V0KTsgLy93ZSBtdXN0IGFkZCBpdCB0byB0aGUgRE9NIGluIG9yZGVyIHRvIGdldCB2YWx1ZXMgcHJvcGVybHlcblxuICAgIH1cblxuICAgIG1hdHJpeCA9IF9nZXRDb21wdXRlZFRyYW5zZm9ybU1hdHJpeEFzQXJyYXkodGFyZ2V0KTtcbiAgICB0ZW1wID8gc3R5bGUuZGlzcGxheSA9IHRlbXAgOiBfcmVtb3ZlUHJvcGVydHkodGFyZ2V0LCBcImRpc3BsYXlcIik7XG5cbiAgICBpZiAoYWRkZWRUb0RPTSkge1xuICAgICAgbmV4dFNpYmxpbmcgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKHRhcmdldCwgbmV4dFNpYmxpbmcpIDogcGFyZW50ID8gcGFyZW50LmFwcGVuZENoaWxkKHRhcmdldCkgOiBfZG9jRWxlbWVudC5yZW1vdmVDaGlsZCh0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb3JjZTJEICYmIG1hdHJpeC5sZW5ndGggPiA2ID8gW21hdHJpeFswXSwgbWF0cml4WzFdLCBtYXRyaXhbNF0sIG1hdHJpeFs1XSwgbWF0cml4WzEyXSwgbWF0cml4WzEzXV0gOiBtYXRyaXg7XG59LFxuICAgIF9hcHBseVNWR09yaWdpbiA9IGZ1bmN0aW9uIF9hcHBseVNWR09yaWdpbih0YXJnZXQsIG9yaWdpbiwgb3JpZ2luSXNBYnNvbHV0ZSwgc21vb3RoLCBtYXRyaXhBcnJheSwgcGx1Z2luVG9BZGRQcm9wVHdlZW5zVG8pIHtcbiAgdmFyIGNhY2hlID0gdGFyZ2V0Ll9nc2FwLFxuICAgICAgbWF0cml4ID0gbWF0cml4QXJyYXkgfHwgX2dldE1hdHJpeCh0YXJnZXQsIHRydWUpLFxuICAgICAgeE9yaWdpbk9sZCA9IGNhY2hlLnhPcmlnaW4gfHwgMCxcbiAgICAgIHlPcmlnaW5PbGQgPSBjYWNoZS55T3JpZ2luIHx8IDAsXG4gICAgICB4T2Zmc2V0T2xkID0gY2FjaGUueE9mZnNldCB8fCAwLFxuICAgICAgeU9mZnNldE9sZCA9IGNhY2hlLnlPZmZzZXQgfHwgMCxcbiAgICAgIGEgPSBtYXRyaXhbMF0sXG4gICAgICBiID0gbWF0cml4WzFdLFxuICAgICAgYyA9IG1hdHJpeFsyXSxcbiAgICAgIGQgPSBtYXRyaXhbM10sXG4gICAgICB0eCA9IG1hdHJpeFs0XSxcbiAgICAgIHR5ID0gbWF0cml4WzVdLFxuICAgICAgb3JpZ2luU3BsaXQgPSBvcmlnaW4uc3BsaXQoXCIgXCIpLFxuICAgICAgeE9yaWdpbiA9IHBhcnNlRmxvYXQob3JpZ2luU3BsaXRbMF0pIHx8IDAsXG4gICAgICB5T3JpZ2luID0gcGFyc2VGbG9hdChvcmlnaW5TcGxpdFsxXSkgfHwgMCxcbiAgICAgIGJvdW5kcyxcbiAgICAgIGRldGVybWluYW50LFxuICAgICAgeCxcbiAgICAgIHk7XG5cbiAgaWYgKCFvcmlnaW5Jc0Fic29sdXRlKSB7XG4gICAgYm91bmRzID0gX2dldEJCb3godGFyZ2V0KTtcbiAgICB4T3JpZ2luID0gYm91bmRzLnggKyAofm9yaWdpblNwbGl0WzBdLmluZGV4T2YoXCIlXCIpID8geE9yaWdpbiAvIDEwMCAqIGJvdW5kcy53aWR0aCA6IHhPcmlnaW4pO1xuICAgIHlPcmlnaW4gPSBib3VuZHMueSArICh+KG9yaWdpblNwbGl0WzFdIHx8IG9yaWdpblNwbGl0WzBdKS5pbmRleE9mKFwiJVwiKSA/IHlPcmlnaW4gLyAxMDAgKiBib3VuZHMuaGVpZ2h0IDogeU9yaWdpbik7XG4gIH0gZWxzZSBpZiAobWF0cml4ICE9PSBfaWRlbnRpdHkyRE1hdHJpeCAmJiAoZGV0ZXJtaW5hbnQgPSBhICogZCAtIGIgKiBjKSkge1xuICAgIC8vaWYgaXQncyB6ZXJvIChsaWtlIGlmIHNjYWxlWCBhbmQgc2NhbGVZIGFyZSB6ZXJvKSwgc2tpcCBpdCB0byBhdm9pZCBlcnJvcnMgd2l0aCBkaXZpZGluZyBieSB6ZXJvLlxuICAgIHggPSB4T3JpZ2luICogKGQgLyBkZXRlcm1pbmFudCkgKyB5T3JpZ2luICogKC1jIC8gZGV0ZXJtaW5hbnQpICsgKGMgKiB0eSAtIGQgKiB0eCkgLyBkZXRlcm1pbmFudDtcbiAgICB5ID0geE9yaWdpbiAqICgtYiAvIGRldGVybWluYW50KSArIHlPcmlnaW4gKiAoYSAvIGRldGVybWluYW50KSAtIChhICogdHkgLSBiICogdHgpIC8gZGV0ZXJtaW5hbnQ7XG4gICAgeE9yaWdpbiA9IHg7XG4gICAgeU9yaWdpbiA9IHk7XG4gIH1cblxuICBpZiAoc21vb3RoIHx8IHNtb290aCAhPT0gZmFsc2UgJiYgY2FjaGUuc21vb3RoKSB7XG4gICAgdHggPSB4T3JpZ2luIC0geE9yaWdpbk9sZDtcbiAgICB0eSA9IHlPcmlnaW4gLSB5T3JpZ2luT2xkO1xuICAgIGNhY2hlLnhPZmZzZXQgPSB4T2Zmc2V0T2xkICsgKHR4ICogYSArIHR5ICogYykgLSB0eDtcbiAgICBjYWNoZS55T2Zmc2V0ID0geU9mZnNldE9sZCArICh0eCAqIGIgKyB0eSAqIGQpIC0gdHk7XG4gIH0gZWxzZSB7XG4gICAgY2FjaGUueE9mZnNldCA9IGNhY2hlLnlPZmZzZXQgPSAwO1xuICB9XG5cbiAgY2FjaGUueE9yaWdpbiA9IHhPcmlnaW47XG4gIGNhY2hlLnlPcmlnaW4gPSB5T3JpZ2luO1xuICBjYWNoZS5zbW9vdGggPSAhIXNtb290aDtcbiAgY2FjaGUub3JpZ2luID0gb3JpZ2luO1xuICBjYWNoZS5vcmlnaW5Jc0Fic29sdXRlID0gISFvcmlnaW5Jc0Fic29sdXRlO1xuICB0YXJnZXQuc3R5bGVbX3RyYW5zZm9ybU9yaWdpblByb3BdID0gXCIwcHggMHB4XCI7IC8vb3RoZXJ3aXNlLCBpZiBzb21lb25lIHNldHMgIGFuIG9yaWdpbiB2aWEgQ1NTLCBpdCB3aWxsIGxpa2VseSBpbnRlcmZlcmUgd2l0aCB0aGUgU1ZHIHRyYW5zZm9ybSBhdHRyaWJ1dGUgb25lcyAoYmVjYXVzZSByZW1lbWJlciwgd2UncmUgYmFraW5nIHRoZSBvcmlnaW4gaW50byB0aGUgbWF0cml4KCkgdmFsdWUpLlxuXG4gIGlmIChwbHVnaW5Ub0FkZFByb3BUd2VlbnNUbykge1xuICAgIF9hZGROb25Ud2VlbmluZ1BUKHBsdWdpblRvQWRkUHJvcFR3ZWVuc1RvLCBjYWNoZSwgXCJ4T3JpZ2luXCIsIHhPcmlnaW5PbGQsIHhPcmlnaW4pO1xuXG4gICAgX2FkZE5vblR3ZWVuaW5nUFQocGx1Z2luVG9BZGRQcm9wVHdlZW5zVG8sIGNhY2hlLCBcInlPcmlnaW5cIiwgeU9yaWdpbk9sZCwgeU9yaWdpbik7XG5cbiAgICBfYWRkTm9uVHdlZW5pbmdQVChwbHVnaW5Ub0FkZFByb3BUd2VlbnNUbywgY2FjaGUsIFwieE9mZnNldFwiLCB4T2Zmc2V0T2xkLCBjYWNoZS54T2Zmc2V0KTtcblxuICAgIF9hZGROb25Ud2VlbmluZ1BUKHBsdWdpblRvQWRkUHJvcFR3ZWVuc1RvLCBjYWNoZSwgXCJ5T2Zmc2V0XCIsIHlPZmZzZXRPbGQsIGNhY2hlLnlPZmZzZXQpO1xuICB9XG5cbiAgdGFyZ2V0LnNldEF0dHJpYnV0ZShcImRhdGEtc3ZnLW9yaWdpblwiLCB4T3JpZ2luICsgXCIgXCIgKyB5T3JpZ2luKTtcbn0sXG4gICAgX3BhcnNlVHJhbnNmb3JtID0gZnVuY3Rpb24gX3BhcnNlVHJhbnNmb3JtKHRhcmdldCwgdW5jYWNoZSkge1xuICB2YXIgY2FjaGUgPSB0YXJnZXQuX2dzYXAgfHwgbmV3IEdTQ2FjaGUodGFyZ2V0KTtcblxuICBpZiAoXCJ4XCIgaW4gY2FjaGUgJiYgIXVuY2FjaGUgJiYgIWNhY2hlLnVuY2FjaGUpIHtcbiAgICByZXR1cm4gY2FjaGU7XG4gIH1cblxuICB2YXIgc3R5bGUgPSB0YXJnZXQuc3R5bGUsXG4gICAgICBpbnZlcnRlZFNjYWxlWCA9IGNhY2hlLnNjYWxlWCA8IDAsXG4gICAgICBweCA9IFwicHhcIixcbiAgICAgIGRlZyA9IFwiZGVnXCIsXG4gICAgICBjcyA9IGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KSxcbiAgICAgIG9yaWdpbiA9IF9nZXRDb21wdXRlZFByb3BlcnR5KHRhcmdldCwgX3RyYW5zZm9ybU9yaWdpblByb3ApIHx8IFwiMFwiLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICB6LFxuICAgICAgc2NhbGVYLFxuICAgICAgc2NhbGVZLFxuICAgICAgcm90YXRpb24sXG4gICAgICByb3RhdGlvblgsXG4gICAgICByb3RhdGlvblksXG4gICAgICBza2V3WCxcbiAgICAgIHNrZXdZLFxuICAgICAgcGVyc3BlY3RpdmUsXG4gICAgICB4T3JpZ2luLFxuICAgICAgeU9yaWdpbixcbiAgICAgIG1hdHJpeCxcbiAgICAgIGFuZ2xlLFxuICAgICAgY29zLFxuICAgICAgc2luLFxuICAgICAgYSxcbiAgICAgIGIsXG4gICAgICBjLFxuICAgICAgZCxcbiAgICAgIGExMixcbiAgICAgIGEyMixcbiAgICAgIHQxLFxuICAgICAgdDIsXG4gICAgICB0MyxcbiAgICAgIGExMyxcbiAgICAgIGEyMyxcbiAgICAgIGEzMyxcbiAgICAgIGE0MixcbiAgICAgIGE0MyxcbiAgICAgIGEzMjtcbiAgeCA9IHkgPSB6ID0gcm90YXRpb24gPSByb3RhdGlvblggPSByb3RhdGlvblkgPSBza2V3WCA9IHNrZXdZID0gcGVyc3BlY3RpdmUgPSAwO1xuICBzY2FsZVggPSBzY2FsZVkgPSAxO1xuICBjYWNoZS5zdmcgPSAhISh0YXJnZXQuZ2V0Q1RNICYmIF9pc1NWRyh0YXJnZXQpKTtcblxuICBpZiAoY3MudHJhbnNsYXRlKSB7XG4gICAgLy8gYWNjb21tb2RhdGUgaW5kZXBlbmRlbnQgdHJhbnNmb3JtcyBieSBjb21iaW5pbmcgdGhlbSBpbnRvIG5vcm1hbCBvbmVzLlxuICAgIGlmIChjcy50cmFuc2xhdGUgIT09IFwibm9uZVwiIHx8IGNzLnNjYWxlICE9PSBcIm5vbmVcIiB8fCBjcy5yb3RhdGUgIT09IFwibm9uZVwiKSB7XG4gICAgICBzdHlsZVtfdHJhbnNmb3JtUHJvcF0gPSAoY3MudHJhbnNsYXRlICE9PSBcIm5vbmVcIiA/IFwidHJhbnNsYXRlM2QoXCIgKyAoY3MudHJhbnNsYXRlICsgXCIgMCAwXCIpLnNwbGl0KFwiIFwiKS5zbGljZSgwLCAzKS5qb2luKFwiLCBcIikgKyBcIikgXCIgOiBcIlwiKSArIChjcy5yb3RhdGUgIT09IFwibm9uZVwiID8gXCJyb3RhdGUoXCIgKyBjcy5yb3RhdGUgKyBcIikgXCIgOiBcIlwiKSArIChjcy5zY2FsZSAhPT0gXCJub25lXCIgPyBcInNjYWxlKFwiICsgY3Muc2NhbGUuc3BsaXQoXCIgXCIpLmpvaW4oXCIsXCIpICsgXCIpIFwiIDogXCJcIikgKyAoY3NbX3RyYW5zZm9ybVByb3BdICE9PSBcIm5vbmVcIiA/IGNzW190cmFuc2Zvcm1Qcm9wXSA6IFwiXCIpO1xuICAgIH1cblxuICAgIHN0eWxlLnNjYWxlID0gc3R5bGUucm90YXRlID0gc3R5bGUudHJhbnNsYXRlID0gXCJub25lXCI7XG4gIH1cblxuICBtYXRyaXggPSBfZ2V0TWF0cml4KHRhcmdldCwgY2FjaGUuc3ZnKTtcblxuICBpZiAoY2FjaGUuc3ZnKSB7XG4gICAgaWYgKGNhY2hlLnVuY2FjaGUpIHtcbiAgICAgIC8vIGlmIGNhY2hlLnVuY2FjaGUgaXMgdHJ1ZSAoYW5kIG1heWJlIGlmIG9yaWdpbiBpcyAwLDApLCB3ZSBuZWVkIHRvIHNldCBlbGVtZW50LnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IChjYWNoZS54T3JpZ2luIC0gYmJveC54KSArIFwicHggXCIgKyAoY2FjaGUueU9yaWdpbiAtIGJib3gueSkgKyBcInB4XCIuIFByZXZpb3VzbHkgd2UgbGV0IHRoZSBkYXRhLXN2Zy1vcmlnaW4gc3RheSBpbnN0ZWFkLCBidXQgd2hlbiBpbnRyb2R1Y2luZyByZXZlcnQoKSwgaXQgY29tcGxpY2F0ZWQgdGhpbmdzLlxuICAgICAgdDIgPSB0YXJnZXQuZ2V0QkJveCgpO1xuICAgICAgb3JpZ2luID0gY2FjaGUueE9yaWdpbiAtIHQyLnggKyBcInB4IFwiICsgKGNhY2hlLnlPcmlnaW4gLSB0Mi55KSArIFwicHhcIjtcbiAgICAgIHQxID0gXCJcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgdDEgPSAhdW5jYWNoZSAmJiB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1zdmctb3JpZ2luXCIpOyAvLyAgUmVtZW1iZXIsIHRvIHdvcmsgYXJvdW5kIGJyb3dzZXIgaW5jb25zaXN0ZW5jaWVzIHdlIGFsd2F5cyBmb3JjZSBTVkcgZWxlbWVudHMnIHRyYW5zZm9ybU9yaWdpbiB0byAwLDAgYW5kIG9mZnNldCB0aGUgdHJhbnNsYXRpb24gYWNjb3JkaW5nbHkuXG4gICAgfVxuXG4gICAgX2FwcGx5U1ZHT3JpZ2luKHRhcmdldCwgdDEgfHwgb3JpZ2luLCAhIXQxIHx8IGNhY2hlLm9yaWdpbklzQWJzb2x1dGUsIGNhY2hlLnNtb290aCAhPT0gZmFsc2UsIG1hdHJpeCk7XG4gIH1cblxuICB4T3JpZ2luID0gY2FjaGUueE9yaWdpbiB8fCAwO1xuICB5T3JpZ2luID0gY2FjaGUueU9yaWdpbiB8fCAwO1xuXG4gIGlmIChtYXRyaXggIT09IF9pZGVudGl0eTJETWF0cml4KSB7XG4gICAgYSA9IG1hdHJpeFswXTsgLy9hMTFcblxuICAgIGIgPSBtYXRyaXhbMV07IC8vYTIxXG5cbiAgICBjID0gbWF0cml4WzJdOyAvL2EzMVxuXG4gICAgZCA9IG1hdHJpeFszXTsgLy9hNDFcblxuICAgIHggPSBhMTIgPSBtYXRyaXhbNF07XG4gICAgeSA9IGEyMiA9IG1hdHJpeFs1XTsgLy8yRCBtYXRyaXhcblxuICAgIGlmIChtYXRyaXgubGVuZ3RoID09PSA2KSB7XG4gICAgICBzY2FsZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG4gICAgICBzY2FsZVkgPSBNYXRoLnNxcnQoZCAqIGQgKyBjICogYyk7XG4gICAgICByb3RhdGlvbiA9IGEgfHwgYiA/IF9hdGFuMihiLCBhKSAqIF9SQUQyREVHIDogMDsgLy9ub3RlOiBpZiBzY2FsZVggaXMgMCwgd2UgY2Fubm90IGFjY3VyYXRlbHkgbWVhc3VyZSByb3RhdGlvbi4gU2FtZSBmb3Igc2tld1ggd2l0aCBhIHNjYWxlWSBvZiAwLiBUaGVyZWZvcmUsIHdlIGRlZmF1bHQgdG8gdGhlIHByZXZpb3VzbHkgcmVjb3JkZWQgdmFsdWUgKG9yIHplcm8gaWYgdGhhdCBkb2Vzbid0IGV4aXN0KS5cblxuICAgICAgc2tld1ggPSBjIHx8IGQgPyBfYXRhbjIoYywgZCkgKiBfUkFEMkRFRyArIHJvdGF0aW9uIDogMDtcbiAgICAgIHNrZXdYICYmIChzY2FsZVkgKj0gTWF0aC5hYnMoTWF0aC5jb3Moc2tld1ggKiBfREVHMlJBRCkpKTtcblxuICAgICAgaWYgKGNhY2hlLnN2Zykge1xuICAgICAgICB4IC09IHhPcmlnaW4gLSAoeE9yaWdpbiAqIGEgKyB5T3JpZ2luICogYyk7XG4gICAgICAgIHkgLT0geU9yaWdpbiAtICh4T3JpZ2luICogYiArIHlPcmlnaW4gKiBkKTtcbiAgICAgIH0gLy8zRCBtYXRyaXhcblxuICAgIH0gZWxzZSB7XG4gICAgICBhMzIgPSBtYXRyaXhbNl07XG4gICAgICBhNDIgPSBtYXRyaXhbN107XG4gICAgICBhMTMgPSBtYXRyaXhbOF07XG4gICAgICBhMjMgPSBtYXRyaXhbOV07XG4gICAgICBhMzMgPSBtYXRyaXhbMTBdO1xuICAgICAgYTQzID0gbWF0cml4WzExXTtcbiAgICAgIHggPSBtYXRyaXhbMTJdO1xuICAgICAgeSA9IG1hdHJpeFsxM107XG4gICAgICB6ID0gbWF0cml4WzE0XTtcbiAgICAgIGFuZ2xlID0gX2F0YW4yKGEzMiwgYTMzKTtcbiAgICAgIHJvdGF0aW9uWCA9IGFuZ2xlICogX1JBRDJERUc7IC8vcm90YXRpb25YXG5cbiAgICAgIGlmIChhbmdsZSkge1xuICAgICAgICBjb3MgPSBNYXRoLmNvcygtYW5nbGUpO1xuICAgICAgICBzaW4gPSBNYXRoLnNpbigtYW5nbGUpO1xuICAgICAgICB0MSA9IGExMiAqIGNvcyArIGExMyAqIHNpbjtcbiAgICAgICAgdDIgPSBhMjIgKiBjb3MgKyBhMjMgKiBzaW47XG4gICAgICAgIHQzID0gYTMyICogY29zICsgYTMzICogc2luO1xuICAgICAgICBhMTMgPSBhMTIgKiAtc2luICsgYTEzICogY29zO1xuICAgICAgICBhMjMgPSBhMjIgKiAtc2luICsgYTIzICogY29zO1xuICAgICAgICBhMzMgPSBhMzIgKiAtc2luICsgYTMzICogY29zO1xuICAgICAgICBhNDMgPSBhNDIgKiAtc2luICsgYTQzICogY29zO1xuICAgICAgICBhMTIgPSB0MTtcbiAgICAgICAgYTIyID0gdDI7XG4gICAgICAgIGEzMiA9IHQzO1xuICAgICAgfSAvL3JvdGF0aW9uWVxuXG5cbiAgICAgIGFuZ2xlID0gX2F0YW4yKC1jLCBhMzMpO1xuICAgICAgcm90YXRpb25ZID0gYW5nbGUgKiBfUkFEMkRFRztcblxuICAgICAgaWYgKGFuZ2xlKSB7XG4gICAgICAgIGNvcyA9IE1hdGguY29zKC1hbmdsZSk7XG4gICAgICAgIHNpbiA9IE1hdGguc2luKC1hbmdsZSk7XG4gICAgICAgIHQxID0gYSAqIGNvcyAtIGExMyAqIHNpbjtcbiAgICAgICAgdDIgPSBiICogY29zIC0gYTIzICogc2luO1xuICAgICAgICB0MyA9IGMgKiBjb3MgLSBhMzMgKiBzaW47XG4gICAgICAgIGE0MyA9IGQgKiBzaW4gKyBhNDMgKiBjb3M7XG4gICAgICAgIGEgPSB0MTtcbiAgICAgICAgYiA9IHQyO1xuICAgICAgICBjID0gdDM7XG4gICAgICB9IC8vcm90YXRpb25aXG5cblxuICAgICAgYW5nbGUgPSBfYXRhbjIoYiwgYSk7XG4gICAgICByb3RhdGlvbiA9IGFuZ2xlICogX1JBRDJERUc7XG5cbiAgICAgIGlmIChhbmdsZSkge1xuICAgICAgICBjb3MgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIHNpbiA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICAgICAgdDEgPSBhICogY29zICsgYiAqIHNpbjtcbiAgICAgICAgdDIgPSBhMTIgKiBjb3MgKyBhMjIgKiBzaW47XG4gICAgICAgIGIgPSBiICogY29zIC0gYSAqIHNpbjtcbiAgICAgICAgYTIyID0gYTIyICogY29zIC0gYTEyICogc2luO1xuICAgICAgICBhID0gdDE7XG4gICAgICAgIGExMiA9IHQyO1xuICAgICAgfVxuXG4gICAgICBpZiAocm90YXRpb25YICYmIE1hdGguYWJzKHJvdGF0aW9uWCkgKyBNYXRoLmFicyhyb3RhdGlvbikgPiAzNTkuOSkge1xuICAgICAgICAvL3doZW4gcm90YXRpb25ZIGlzIHNldCwgaXQgd2lsbCBvZnRlbiBiZSBwYXJzZWQgYXMgMTgwIGRlZ3JlZXMgZGlmZmVyZW50IHRoYW4gaXQgc2hvdWxkIGJlLCBhbmQgcm90YXRpb25YIGFuZCByb3RhdGlvbiBib3RoIGJlaW5nIDE4MCAoaXQgbG9va3MgdGhlIHNhbWUpLCBzbyB3ZSBhZGp1c3QgZm9yIHRoYXQgaGVyZS5cbiAgICAgICAgcm90YXRpb25YID0gcm90YXRpb24gPSAwO1xuICAgICAgICByb3RhdGlvblkgPSAxODAgLSByb3RhdGlvblk7XG4gICAgICB9XG5cbiAgICAgIHNjYWxlWCA9IF9yb3VuZChNYXRoLnNxcnQoYSAqIGEgKyBiICogYiArIGMgKiBjKSk7XG4gICAgICBzY2FsZVkgPSBfcm91bmQoTWF0aC5zcXJ0KGEyMiAqIGEyMiArIGEzMiAqIGEzMikpO1xuICAgICAgYW5nbGUgPSBfYXRhbjIoYTEyLCBhMjIpO1xuICAgICAgc2tld1ggPSBNYXRoLmFicyhhbmdsZSkgPiAwLjAwMDIgPyBhbmdsZSAqIF9SQUQyREVHIDogMDtcbiAgICAgIHBlcnNwZWN0aXZlID0gYTQzID8gMSAvIChhNDMgPCAwID8gLWE0MyA6IGE0MykgOiAwO1xuICAgIH1cblxuICAgIGlmIChjYWNoZS5zdmcpIHtcbiAgICAgIC8vc2Vuc2UgaWYgdGhlcmUgYXJlIENTUyB0cmFuc2Zvcm1zIGFwcGxpZWQgb24gYW4gU1ZHIGVsZW1lbnQgaW4gd2hpY2ggY2FzZSB3ZSBtdXN0IG92ZXJ3cml0ZSB0aGVtIHdoZW4gcmVuZGVyaW5nLiBUaGUgdHJhbnNmb3JtIGF0dHJpYnV0ZSBpcyBtb3JlIHJlbGlhYmxlIGNyb3NzLWJyb3dzZXIsIGJ1dCB3ZSBjYW4ndCBqdXN0IHJlbW92ZSB0aGUgQ1NTIG9uZXMgYmVjYXVzZSB0aGV5IG1heSBiZSBhcHBsaWVkIGluIGEgQ1NTIHJ1bGUgc29tZXdoZXJlIChub3QganVzdCBpbmxpbmUpLlxuICAgICAgdDEgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIpO1xuICAgICAgY2FjaGUuZm9yY2VDU1MgPSB0YXJnZXQuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIFwiXCIpIHx8ICFfaXNOdWxsVHJhbnNmb3JtKF9nZXRDb21wdXRlZFByb3BlcnR5KHRhcmdldCwgX3RyYW5zZm9ybVByb3ApKTtcbiAgICAgIHQxICYmIHRhcmdldC5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgdDEpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChNYXRoLmFicyhza2V3WCkgPiA5MCAmJiBNYXRoLmFicyhza2V3WCkgPCAyNzApIHtcbiAgICBpZiAoaW52ZXJ0ZWRTY2FsZVgpIHtcbiAgICAgIHNjYWxlWCAqPSAtMTtcbiAgICAgIHNrZXdYICs9IHJvdGF0aW9uIDw9IDAgPyAxODAgOiAtMTgwO1xuICAgICAgcm90YXRpb24gKz0gcm90YXRpb24gPD0gMCA/IDE4MCA6IC0xODA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjYWxlWSAqPSAtMTtcbiAgICAgIHNrZXdYICs9IHNrZXdYIDw9IDAgPyAxODAgOiAtMTgwO1xuICAgIH1cbiAgfVxuXG4gIHVuY2FjaGUgPSB1bmNhY2hlIHx8IGNhY2hlLnVuY2FjaGU7XG4gIGNhY2hlLnggPSB4IC0gKChjYWNoZS54UGVyY2VudCA9IHggJiYgKCF1bmNhY2hlICYmIGNhY2hlLnhQZXJjZW50IHx8IChNYXRoLnJvdW5kKHRhcmdldC5vZmZzZXRXaWR0aCAvIDIpID09PSBNYXRoLnJvdW5kKC14KSA/IC01MCA6IDApKSkgPyB0YXJnZXQub2Zmc2V0V2lkdGggKiBjYWNoZS54UGVyY2VudCAvIDEwMCA6IDApICsgcHg7XG4gIGNhY2hlLnkgPSB5IC0gKChjYWNoZS55UGVyY2VudCA9IHkgJiYgKCF1bmNhY2hlICYmIGNhY2hlLnlQZXJjZW50IHx8IChNYXRoLnJvdW5kKHRhcmdldC5vZmZzZXRIZWlnaHQgLyAyKSA9PT0gTWF0aC5yb3VuZCgteSkgPyAtNTAgOiAwKSkpID8gdGFyZ2V0Lm9mZnNldEhlaWdodCAqIGNhY2hlLnlQZXJjZW50IC8gMTAwIDogMCkgKyBweDtcbiAgY2FjaGUueiA9IHogKyBweDtcbiAgY2FjaGUuc2NhbGVYID0gX3JvdW5kKHNjYWxlWCk7XG4gIGNhY2hlLnNjYWxlWSA9IF9yb3VuZChzY2FsZVkpO1xuICBjYWNoZS5yb3RhdGlvbiA9IF9yb3VuZChyb3RhdGlvbikgKyBkZWc7XG4gIGNhY2hlLnJvdGF0aW9uWCA9IF9yb3VuZChyb3RhdGlvblgpICsgZGVnO1xuICBjYWNoZS5yb3RhdGlvblkgPSBfcm91bmQocm90YXRpb25ZKSArIGRlZztcbiAgY2FjaGUuc2tld1ggPSBza2V3WCArIGRlZztcbiAgY2FjaGUuc2tld1kgPSBza2V3WSArIGRlZztcbiAgY2FjaGUudHJhbnNmb3JtUGVyc3BlY3RpdmUgPSBwZXJzcGVjdGl2ZSArIHB4O1xuXG4gIGlmIChjYWNoZS56T3JpZ2luID0gcGFyc2VGbG9hdChvcmlnaW4uc3BsaXQoXCIgXCIpWzJdKSB8fCAwKSB7XG4gICAgc3R5bGVbX3RyYW5zZm9ybU9yaWdpblByb3BdID0gX2ZpcnN0VHdvT25seShvcmlnaW4pO1xuICB9XG5cbiAgY2FjaGUueE9mZnNldCA9IGNhY2hlLnlPZmZzZXQgPSAwO1xuICBjYWNoZS5mb3JjZTNEID0gX2NvbmZpZy5mb3JjZTNEO1xuICBjYWNoZS5yZW5kZXJUcmFuc2Zvcm0gPSBjYWNoZS5zdmcgPyBfcmVuZGVyU1ZHVHJhbnNmb3JtcyA6IF9zdXBwb3J0czNEID8gX3JlbmRlckNTU1RyYW5zZm9ybXMgOiBfcmVuZGVyTm9uM0RUcmFuc2Zvcm1zO1xuICBjYWNoZS51bmNhY2hlID0gMDtcbiAgcmV0dXJuIGNhY2hlO1xufSxcbiAgICBfZmlyc3RUd29Pbmx5ID0gZnVuY3Rpb24gX2ZpcnN0VHdvT25seSh2YWx1ZSkge1xuICByZXR1cm4gKHZhbHVlID0gdmFsdWUuc3BsaXQoXCIgXCIpKVswXSArIFwiIFwiICsgdmFsdWVbMV07XG59LFxuICAgIC8vZm9yIGhhbmRsaW5nIHRyYW5zZm9ybU9yaWdpbiB2YWx1ZXMsIHN0cmlwcGluZyBvdXQgdGhlIDNyZCBkaW1lbnNpb25cbl9hZGRQeFRyYW5zbGF0ZSA9IGZ1bmN0aW9uIF9hZGRQeFRyYW5zbGF0ZSh0YXJnZXQsIHN0YXJ0LCB2YWx1ZSkge1xuICB2YXIgdW5pdCA9IGdldFVuaXQoc3RhcnQpO1xuICByZXR1cm4gX3JvdW5kKHBhcnNlRmxvYXQoc3RhcnQpICsgcGFyc2VGbG9hdChfY29udmVydFRvVW5pdCh0YXJnZXQsIFwieFwiLCB2YWx1ZSArIFwicHhcIiwgdW5pdCkpKSArIHVuaXQ7XG59LFxuICAgIF9yZW5kZXJOb24zRFRyYW5zZm9ybXMgPSBmdW5jdGlvbiBfcmVuZGVyTm9uM0RUcmFuc2Zvcm1zKHJhdGlvLCBjYWNoZSkge1xuICBjYWNoZS56ID0gXCIwcHhcIjtcbiAgY2FjaGUucm90YXRpb25ZID0gY2FjaGUucm90YXRpb25YID0gXCIwZGVnXCI7XG4gIGNhY2hlLmZvcmNlM0QgPSAwO1xuXG4gIF9yZW5kZXJDU1NUcmFuc2Zvcm1zKHJhdGlvLCBjYWNoZSk7XG59LFxuICAgIF96ZXJvRGVnID0gXCIwZGVnXCIsXG4gICAgX3plcm9QeCA9IFwiMHB4XCIsXG4gICAgX2VuZFBhcmVudGhlc2lzID0gXCIpIFwiLFxuICAgIF9yZW5kZXJDU1NUcmFuc2Zvcm1zID0gZnVuY3Rpb24gX3JlbmRlckNTU1RyYW5zZm9ybXMocmF0aW8sIGNhY2hlKSB7XG4gIHZhciBfcmVmID0gY2FjaGUgfHwgdGhpcyxcbiAgICAgIHhQZXJjZW50ID0gX3JlZi54UGVyY2VudCxcbiAgICAgIHlQZXJjZW50ID0gX3JlZi55UGVyY2VudCxcbiAgICAgIHggPSBfcmVmLngsXG4gICAgICB5ID0gX3JlZi55LFxuICAgICAgeiA9IF9yZWYueixcbiAgICAgIHJvdGF0aW9uID0gX3JlZi5yb3RhdGlvbixcbiAgICAgIHJvdGF0aW9uWSA9IF9yZWYucm90YXRpb25ZLFxuICAgICAgcm90YXRpb25YID0gX3JlZi5yb3RhdGlvblgsXG4gICAgICBza2V3WCA9IF9yZWYuc2tld1gsXG4gICAgICBza2V3WSA9IF9yZWYuc2tld1ksXG4gICAgICBzY2FsZVggPSBfcmVmLnNjYWxlWCxcbiAgICAgIHNjYWxlWSA9IF9yZWYuc2NhbGVZLFxuICAgICAgdHJhbnNmb3JtUGVyc3BlY3RpdmUgPSBfcmVmLnRyYW5zZm9ybVBlcnNwZWN0aXZlLFxuICAgICAgZm9yY2UzRCA9IF9yZWYuZm9yY2UzRCxcbiAgICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgICAgek9yaWdpbiA9IF9yZWYuek9yaWdpbixcbiAgICAgIHRyYW5zZm9ybXMgPSBcIlwiLFxuICAgICAgdXNlM0QgPSBmb3JjZTNEID09PSBcImF1dG9cIiAmJiByYXRpbyAmJiByYXRpbyAhPT0gMSB8fCBmb3JjZTNEID09PSB0cnVlOyAvLyBTYWZhcmkgaGFzIGEgYnVnIHRoYXQgY2F1c2VzIGl0IG5vdCB0byByZW5kZXIgM0QgdHJhbnNmb3JtLW9yaWdpbiB2YWx1ZXMgcHJvcGVybHksIHNvIHdlIGZvcmNlIHRoZSB6IG9yaWdpbiB0byAwLCByZWNvcmQgaXQgaW4gdGhlIGNhY2hlLCBhbmQgdGhlbiBkbyB0aGUgbWF0aCBoZXJlIHRvIG9mZnNldCB0aGUgdHJhbnNsYXRlIHZhbHVlcyBhY2NvcmRpbmdseSAoYmFzaWNhbGx5IGRvIHRoZSAzRCB0cmFuc2Zvcm0tb3JpZ2luIHBhcnQgbWFudWFsbHkpXG5cblxuICBpZiAoek9yaWdpbiAmJiAocm90YXRpb25YICE9PSBfemVyb0RlZyB8fCByb3RhdGlvblkgIT09IF96ZXJvRGVnKSkge1xuICAgIHZhciBhbmdsZSA9IHBhcnNlRmxvYXQocm90YXRpb25ZKSAqIF9ERUcyUkFELFxuICAgICAgICBhMTMgPSBNYXRoLnNpbihhbmdsZSksXG4gICAgICAgIGEzMyA9IE1hdGguY29zKGFuZ2xlKSxcbiAgICAgICAgY29zO1xuXG4gICAgYW5nbGUgPSBwYXJzZUZsb2F0KHJvdGF0aW9uWCkgKiBfREVHMlJBRDtcbiAgICBjb3MgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgeCA9IF9hZGRQeFRyYW5zbGF0ZSh0YXJnZXQsIHgsIGExMyAqIGNvcyAqIC16T3JpZ2luKTtcbiAgICB5ID0gX2FkZFB4VHJhbnNsYXRlKHRhcmdldCwgeSwgLU1hdGguc2luKGFuZ2xlKSAqIC16T3JpZ2luKTtcbiAgICB6ID0gX2FkZFB4VHJhbnNsYXRlKHRhcmdldCwgeiwgYTMzICogY29zICogLXpPcmlnaW4gKyB6T3JpZ2luKTtcbiAgfVxuXG4gIGlmICh0cmFuc2Zvcm1QZXJzcGVjdGl2ZSAhPT0gX3plcm9QeCkge1xuICAgIHRyYW5zZm9ybXMgKz0gXCJwZXJzcGVjdGl2ZShcIiArIHRyYW5zZm9ybVBlcnNwZWN0aXZlICsgX2VuZFBhcmVudGhlc2lzO1xuICB9XG5cbiAgaWYgKHhQZXJjZW50IHx8IHlQZXJjZW50KSB7XG4gICAgdHJhbnNmb3JtcyArPSBcInRyYW5zbGF0ZShcIiArIHhQZXJjZW50ICsgXCIlLCBcIiArIHlQZXJjZW50ICsgXCIlKSBcIjtcbiAgfVxuXG4gIGlmICh1c2UzRCB8fCB4ICE9PSBfemVyb1B4IHx8IHkgIT09IF96ZXJvUHggfHwgeiAhPT0gX3plcm9QeCkge1xuICAgIHRyYW5zZm9ybXMgKz0geiAhPT0gX3plcm9QeCB8fCB1c2UzRCA/IFwidHJhbnNsYXRlM2QoXCIgKyB4ICsgXCIsIFwiICsgeSArIFwiLCBcIiArIHogKyBcIikgXCIgOiBcInRyYW5zbGF0ZShcIiArIHggKyBcIiwgXCIgKyB5ICsgX2VuZFBhcmVudGhlc2lzO1xuICB9XG5cbiAgaWYgKHJvdGF0aW9uICE9PSBfemVyb0RlZykge1xuICAgIHRyYW5zZm9ybXMgKz0gXCJyb3RhdGUoXCIgKyByb3RhdGlvbiArIF9lbmRQYXJlbnRoZXNpcztcbiAgfVxuXG4gIGlmIChyb3RhdGlvblkgIT09IF96ZXJvRGVnKSB7XG4gICAgdHJhbnNmb3JtcyArPSBcInJvdGF0ZVkoXCIgKyByb3RhdGlvblkgKyBfZW5kUGFyZW50aGVzaXM7XG4gIH1cblxuICBpZiAocm90YXRpb25YICE9PSBfemVyb0RlZykge1xuICAgIHRyYW5zZm9ybXMgKz0gXCJyb3RhdGVYKFwiICsgcm90YXRpb25YICsgX2VuZFBhcmVudGhlc2lzO1xuICB9XG5cbiAgaWYgKHNrZXdYICE9PSBfemVyb0RlZyB8fCBza2V3WSAhPT0gX3plcm9EZWcpIHtcbiAgICB0cmFuc2Zvcm1zICs9IFwic2tldyhcIiArIHNrZXdYICsgXCIsIFwiICsgc2tld1kgKyBfZW5kUGFyZW50aGVzaXM7XG4gIH1cblxuICBpZiAoc2NhbGVYICE9PSAxIHx8IHNjYWxlWSAhPT0gMSkge1xuICAgIHRyYW5zZm9ybXMgKz0gXCJzY2FsZShcIiArIHNjYWxlWCArIFwiLCBcIiArIHNjYWxlWSArIF9lbmRQYXJlbnRoZXNpcztcbiAgfVxuXG4gIHRhcmdldC5zdHlsZVtfdHJhbnNmb3JtUHJvcF0gPSB0cmFuc2Zvcm1zIHx8IFwidHJhbnNsYXRlKDAsIDApXCI7XG59LFxuICAgIF9yZW5kZXJTVkdUcmFuc2Zvcm1zID0gZnVuY3Rpb24gX3JlbmRlclNWR1RyYW5zZm9ybXMocmF0aW8sIGNhY2hlKSB7XG4gIHZhciBfcmVmMiA9IGNhY2hlIHx8IHRoaXMsXG4gICAgICB4UGVyY2VudCA9IF9yZWYyLnhQZXJjZW50LFxuICAgICAgeVBlcmNlbnQgPSBfcmVmMi55UGVyY2VudCxcbiAgICAgIHggPSBfcmVmMi54LFxuICAgICAgeSA9IF9yZWYyLnksXG4gICAgICByb3RhdGlvbiA9IF9yZWYyLnJvdGF0aW9uLFxuICAgICAgc2tld1ggPSBfcmVmMi5za2V3WCxcbiAgICAgIHNrZXdZID0gX3JlZjIuc2tld1ksXG4gICAgICBzY2FsZVggPSBfcmVmMi5zY2FsZVgsXG4gICAgICBzY2FsZVkgPSBfcmVmMi5zY2FsZVksXG4gICAgICB0YXJnZXQgPSBfcmVmMi50YXJnZXQsXG4gICAgICB4T3JpZ2luID0gX3JlZjIueE9yaWdpbixcbiAgICAgIHlPcmlnaW4gPSBfcmVmMi55T3JpZ2luLFxuICAgICAgeE9mZnNldCA9IF9yZWYyLnhPZmZzZXQsXG4gICAgICB5T2Zmc2V0ID0gX3JlZjIueU9mZnNldCxcbiAgICAgIGZvcmNlQ1NTID0gX3JlZjIuZm9yY2VDU1MsXG4gICAgICB0eCA9IHBhcnNlRmxvYXQoeCksXG4gICAgICB0eSA9IHBhcnNlRmxvYXQoeSksXG4gICAgICBhMTEsXG4gICAgICBhMjEsXG4gICAgICBhMTIsXG4gICAgICBhMjIsXG4gICAgICB0ZW1wO1xuXG4gIHJvdGF0aW9uID0gcGFyc2VGbG9hdChyb3RhdGlvbik7XG4gIHNrZXdYID0gcGFyc2VGbG9hdChza2V3WCk7XG4gIHNrZXdZID0gcGFyc2VGbG9hdChza2V3WSk7XG5cbiAgaWYgKHNrZXdZKSB7XG4gICAgLy9mb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgd2UgY29tYmluZSBhbGwgc2tld2luZyBpbnRvIHRoZSBza2V3WCBhbmQgcm90YXRpb24gdmFsdWVzLiBSZW1lbWJlciwgYSBza2V3WSBvZiAxMCBkZWdyZWVzIGxvb2tzIHRoZSBzYW1lIGFzIGEgcm90YXRpb24gb2YgMTAgZGVncmVlcyBwbHVzIGEgc2tld1ggb2YgMTAgZGVncmVlcy5cbiAgICBza2V3WSA9IHBhcnNlRmxvYXQoc2tld1kpO1xuICAgIHNrZXdYICs9IHNrZXdZO1xuICAgIHJvdGF0aW9uICs9IHNrZXdZO1xuICB9XG5cbiAgaWYgKHJvdGF0aW9uIHx8IHNrZXdYKSB7XG4gICAgcm90YXRpb24gKj0gX0RFRzJSQUQ7XG4gICAgc2tld1ggKj0gX0RFRzJSQUQ7XG4gICAgYTExID0gTWF0aC5jb3Mocm90YXRpb24pICogc2NhbGVYO1xuICAgIGEyMSA9IE1hdGguc2luKHJvdGF0aW9uKSAqIHNjYWxlWDtcbiAgICBhMTIgPSBNYXRoLnNpbihyb3RhdGlvbiAtIHNrZXdYKSAqIC1zY2FsZVk7XG4gICAgYTIyID0gTWF0aC5jb3Mocm90YXRpb24gLSBza2V3WCkgKiBzY2FsZVk7XG5cbiAgICBpZiAoc2tld1gpIHtcbiAgICAgIHNrZXdZICo9IF9ERUcyUkFEO1xuICAgICAgdGVtcCA9IE1hdGgudGFuKHNrZXdYIC0gc2tld1kpO1xuICAgICAgdGVtcCA9IE1hdGguc3FydCgxICsgdGVtcCAqIHRlbXApO1xuICAgICAgYTEyICo9IHRlbXA7XG4gICAgICBhMjIgKj0gdGVtcDtcblxuICAgICAgaWYgKHNrZXdZKSB7XG4gICAgICAgIHRlbXAgPSBNYXRoLnRhbihza2V3WSk7XG4gICAgICAgIHRlbXAgPSBNYXRoLnNxcnQoMSArIHRlbXAgKiB0ZW1wKTtcbiAgICAgICAgYTExICo9IHRlbXA7XG4gICAgICAgIGEyMSAqPSB0ZW1wO1xuICAgICAgfVxuICAgIH1cblxuICAgIGExMSA9IF9yb3VuZChhMTEpO1xuICAgIGEyMSA9IF9yb3VuZChhMjEpO1xuICAgIGExMiA9IF9yb3VuZChhMTIpO1xuICAgIGEyMiA9IF9yb3VuZChhMjIpO1xuICB9IGVsc2Uge1xuICAgIGExMSA9IHNjYWxlWDtcbiAgICBhMjIgPSBzY2FsZVk7XG4gICAgYTIxID0gYTEyID0gMDtcbiAgfVxuXG4gIGlmICh0eCAmJiAhfih4ICsgXCJcIikuaW5kZXhPZihcInB4XCIpIHx8IHR5ICYmICF+KHkgKyBcIlwiKS5pbmRleE9mKFwicHhcIikpIHtcbiAgICB0eCA9IF9jb252ZXJ0VG9Vbml0KHRhcmdldCwgXCJ4XCIsIHgsIFwicHhcIik7XG4gICAgdHkgPSBfY29udmVydFRvVW5pdCh0YXJnZXQsIFwieVwiLCB5LCBcInB4XCIpO1xuICB9XG5cbiAgaWYgKHhPcmlnaW4gfHwgeU9yaWdpbiB8fCB4T2Zmc2V0IHx8IHlPZmZzZXQpIHtcbiAgICB0eCA9IF9yb3VuZCh0eCArIHhPcmlnaW4gLSAoeE9yaWdpbiAqIGExMSArIHlPcmlnaW4gKiBhMTIpICsgeE9mZnNldCk7XG4gICAgdHkgPSBfcm91bmQodHkgKyB5T3JpZ2luIC0gKHhPcmlnaW4gKiBhMjEgKyB5T3JpZ2luICogYTIyKSArIHlPZmZzZXQpO1xuICB9XG5cbiAgaWYgKHhQZXJjZW50IHx8IHlQZXJjZW50KSB7XG4gICAgLy9UaGUgU1ZHIHNwZWMgZG9lc24ndCBzdXBwb3J0IHBlcmNlbnRhZ2UtYmFzZWQgdHJhbnNsYXRpb24gaW4gdGhlIFwidHJhbnNmb3JtXCIgYXR0cmlidXRlLCBzbyB3ZSBtZXJnZSBpdCBpbnRvIHRoZSB0cmFuc2xhdGlvbiB0byBzaW11bGF0ZSBpdC5cbiAgICB0ZW1wID0gdGFyZ2V0LmdldEJCb3goKTtcbiAgICB0eCA9IF9yb3VuZCh0eCArIHhQZXJjZW50IC8gMTAwICogdGVtcC53aWR0aCk7XG4gICAgdHkgPSBfcm91bmQodHkgKyB5UGVyY2VudCAvIDEwMCAqIHRlbXAuaGVpZ2h0KTtcbiAgfVxuXG4gIHRlbXAgPSBcIm1hdHJpeChcIiArIGExMSArIFwiLFwiICsgYTIxICsgXCIsXCIgKyBhMTIgKyBcIixcIiArIGEyMiArIFwiLFwiICsgdHggKyBcIixcIiArIHR5ICsgXCIpXCI7XG4gIHRhcmdldC5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgdGVtcCk7XG4gIGZvcmNlQ1NTICYmICh0YXJnZXQuc3R5bGVbX3RyYW5zZm9ybVByb3BdID0gdGVtcCk7IC8vc29tZSBicm93c2VycyBwcmlvcml0aXplIENTUyB0cmFuc2Zvcm1zIG92ZXIgdGhlIHRyYW5zZm9ybSBhdHRyaWJ1dGUuIFdoZW4gd2Ugc2Vuc2UgdGhhdCB0aGUgdXNlciBoYXMgQ1NTIHRyYW5zZm9ybXMgYXBwbGllZCwgd2UgbXVzdCBvdmVyd3JpdGUgdGhlbSB0aGlzIHdheSAob3RoZXJ3aXNlIHNvbWUgYnJvd3NlciBzaW1wbHkgd29uJ3QgcmVuZGVyIHRoZSB0cmFuc2Zvcm0gYXR0cmlidXRlIGNoYW5nZXMhKVxufSxcbiAgICBfYWRkUm90YXRpb25hbFByb3BUd2VlbiA9IGZ1bmN0aW9uIF9hZGRSb3RhdGlvbmFsUHJvcFR3ZWVuKHBsdWdpbiwgdGFyZ2V0LCBwcm9wZXJ0eSwgc3RhcnROdW0sIGVuZFZhbHVlKSB7XG4gIHZhciBjYXAgPSAzNjAsXG4gICAgICBpc1N0cmluZyA9IF9pc1N0cmluZyhlbmRWYWx1ZSksXG4gICAgICBlbmROdW0gPSBwYXJzZUZsb2F0KGVuZFZhbHVlKSAqIChpc1N0cmluZyAmJiB+ZW5kVmFsdWUuaW5kZXhPZihcInJhZFwiKSA/IF9SQUQyREVHIDogMSksXG4gICAgICBjaGFuZ2UgPSBlbmROdW0gLSBzdGFydE51bSxcbiAgICAgIGZpbmFsVmFsdWUgPSBzdGFydE51bSArIGNoYW5nZSArIFwiZGVnXCIsXG4gICAgICBkaXJlY3Rpb24sXG4gICAgICBwdDtcblxuICBpZiAoaXNTdHJpbmcpIHtcbiAgICBkaXJlY3Rpb24gPSBlbmRWYWx1ZS5zcGxpdChcIl9cIilbMV07XG5cbiAgICBpZiAoZGlyZWN0aW9uID09PSBcInNob3J0XCIpIHtcbiAgICAgIGNoYW5nZSAlPSBjYXA7XG5cbiAgICAgIGlmIChjaGFuZ2UgIT09IGNoYW5nZSAlIChjYXAgLyAyKSkge1xuICAgICAgICBjaGFuZ2UgKz0gY2hhbmdlIDwgMCA/IGNhcCA6IC1jYXA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gXCJjd1wiICYmIGNoYW5nZSA8IDApIHtcbiAgICAgIGNoYW5nZSA9IChjaGFuZ2UgKyBjYXAgKiBfYmlnTnVtKSAlIGNhcCAtIH5+KGNoYW5nZSAvIGNhcCkgKiBjYXA7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IFwiY2N3XCIgJiYgY2hhbmdlID4gMCkge1xuICAgICAgY2hhbmdlID0gKGNoYW5nZSAtIGNhcCAqIF9iaWdOdW0pICUgY2FwIC0gfn4oY2hhbmdlIC8gY2FwKSAqIGNhcDtcbiAgICB9XG4gIH1cblxuICBwbHVnaW4uX3B0ID0gcHQgPSBuZXcgUHJvcFR3ZWVuKHBsdWdpbi5fcHQsIHRhcmdldCwgcHJvcGVydHksIHN0YXJ0TnVtLCBjaGFuZ2UsIF9yZW5kZXJQcm9wV2l0aEVuZCk7XG4gIHB0LmUgPSBmaW5hbFZhbHVlO1xuICBwdC51ID0gXCJkZWdcIjtcblxuICBwbHVnaW4uX3Byb3BzLnB1c2gocHJvcGVydHkpO1xuXG4gIHJldHVybiBwdDtcbn0sXG4gICAgX2Fzc2lnbiA9IGZ1bmN0aW9uIF9hc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHtcbiAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgZG9lc24ndCBoYXZlIE9iamVjdC5hc3NpZ24oKSwgc28gd2UgcmVjcmVhdGUgaXQgaGVyZS5cbiAgZm9yICh2YXIgcCBpbiBzb3VyY2UpIHtcbiAgICB0YXJnZXRbcF0gPSBzb3VyY2VbcF07XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufSxcbiAgICBfYWRkUmF3VHJhbnNmb3JtUFRzID0gZnVuY3Rpb24gX2FkZFJhd1RyYW5zZm9ybVBUcyhwbHVnaW4sIHRyYW5zZm9ybXMsIHRhcmdldCkge1xuICAvL2ZvciBoYW5kbGluZyBjYXNlcyB3aGVyZSBzb21lb25lIHBhc3NlcyBpbiBhIHdob2xlIHRyYW5zZm9ybSBzdHJpbmcsIGxpa2UgdHJhbnNmb3JtOiBcInNjYWxlKDIsIDMpIHJvdGF0ZSgyMGRlZykgdHJhbnNsYXRlWSgzMGVtKVwiXG4gIHZhciBzdGFydENhY2hlID0gX2Fzc2lnbih7fSwgdGFyZ2V0Ll9nc2FwKSxcbiAgICAgIGV4Y2x1ZGUgPSBcInBlcnNwZWN0aXZlLGZvcmNlM0QsdHJhbnNmb3JtT3JpZ2luLHN2Z09yaWdpblwiLFxuICAgICAgc3R5bGUgPSB0YXJnZXQuc3R5bGUsXG4gICAgICBlbmRDYWNoZSxcbiAgICAgIHAsXG4gICAgICBzdGFydFZhbHVlLFxuICAgICAgZW5kVmFsdWUsXG4gICAgICBzdGFydE51bSxcbiAgICAgIGVuZE51bSxcbiAgICAgIHN0YXJ0VW5pdCxcbiAgICAgIGVuZFVuaXQ7XG5cbiAgaWYgKHN0YXJ0Q2FjaGUuc3ZnKSB7XG4gICAgc3RhcnRWYWx1ZSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIik7XG4gICAgdGFyZ2V0LnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCBcIlwiKTtcbiAgICBzdHlsZVtfdHJhbnNmb3JtUHJvcF0gPSB0cmFuc2Zvcm1zO1xuICAgIGVuZENhY2hlID0gX3BhcnNlVHJhbnNmb3JtKHRhcmdldCwgMSk7XG5cbiAgICBfcmVtb3ZlUHJvcGVydHkodGFyZ2V0LCBfdHJhbnNmb3JtUHJvcCk7XG5cbiAgICB0YXJnZXQuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIHN0YXJ0VmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHN0YXJ0VmFsdWUgPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldClbX3RyYW5zZm9ybVByb3BdO1xuICAgIHN0eWxlW190cmFuc2Zvcm1Qcm9wXSA9IHRyYW5zZm9ybXM7XG4gICAgZW5kQ2FjaGUgPSBfcGFyc2VUcmFuc2Zvcm0odGFyZ2V0LCAxKTtcbiAgICBzdHlsZVtfdHJhbnNmb3JtUHJvcF0gPSBzdGFydFZhbHVlO1xuICB9XG5cbiAgZm9yIChwIGluIF90cmFuc2Zvcm1Qcm9wcykge1xuICAgIHN0YXJ0VmFsdWUgPSBzdGFydENhY2hlW3BdO1xuICAgIGVuZFZhbHVlID0gZW5kQ2FjaGVbcF07XG5cbiAgICBpZiAoc3RhcnRWYWx1ZSAhPT0gZW5kVmFsdWUgJiYgZXhjbHVkZS5pbmRleE9mKHApIDwgMCkge1xuICAgICAgLy90d2VlbmluZyB0byBubyBwZXJzcGVjdGl2ZSBnaXZlcyB2ZXJ5IHVuaW50dWl0aXZlIHJlc3VsdHMgLSBqdXN0IGtlZXAgdGhlIHNhbWUgcGVyc3BlY3RpdmUgaW4gdGhhdCBjYXNlLlxuICAgICAgc3RhcnRVbml0ID0gZ2V0VW5pdChzdGFydFZhbHVlKTtcbiAgICAgIGVuZFVuaXQgPSBnZXRVbml0KGVuZFZhbHVlKTtcbiAgICAgIHN0YXJ0TnVtID0gc3RhcnRVbml0ICE9PSBlbmRVbml0ID8gX2NvbnZlcnRUb1VuaXQodGFyZ2V0LCBwLCBzdGFydFZhbHVlLCBlbmRVbml0KSA6IHBhcnNlRmxvYXQoc3RhcnRWYWx1ZSk7XG4gICAgICBlbmROdW0gPSBwYXJzZUZsb2F0KGVuZFZhbHVlKTtcbiAgICAgIHBsdWdpbi5fcHQgPSBuZXcgUHJvcFR3ZWVuKHBsdWdpbi5fcHQsIGVuZENhY2hlLCBwLCBzdGFydE51bSwgZW5kTnVtIC0gc3RhcnROdW0sIF9yZW5kZXJDU1NQcm9wKTtcbiAgICAgIHBsdWdpbi5fcHQudSA9IGVuZFVuaXQgfHwgMDtcblxuICAgICAgcGx1Z2luLl9wcm9wcy5wdXNoKHApO1xuICAgIH1cbiAgfVxuXG4gIF9hc3NpZ24oZW5kQ2FjaGUsIHN0YXJ0Q2FjaGUpO1xufTsgLy8gaGFuZGxlIHNwbGl0dGluZyBhcGFydCBwYWRkaW5nLCBtYXJnaW4sIGJvcmRlcldpZHRoLCBhbmQgYm9yZGVyUmFkaXVzIGludG8gdGhlaXIgNCBjb21wb25lbnRzLiBGaXJlZm94LCBmb3IgZXhhbXBsZSwgd29uJ3QgcmVwb3J0IGJvcmRlclJhZGl1cyBjb3JyZWN0bHkgLSBpdCB3aWxsIG9ubHkgZG8gYm9yZGVyVG9wTGVmdFJhZGl1cyBhbmQgdGhlIG90aGVyIGNvcm5lcnMuIFdlIGFsc28gd2FudCB0byBoYW5kbGUgcGFkZGluZ1RvcCwgbWFyZ2luTGVmdCwgYm9yZGVyUmlnaHRXaWR0aCwgZXRjLlxuXG5cbl9mb3JFYWNoTmFtZShcInBhZGRpbmcsbWFyZ2luLFdpZHRoLFJhZGl1c1wiLCBmdW5jdGlvbiAobmFtZSwgaW5kZXgpIHtcbiAgdmFyIHQgPSBcIlRvcFwiLFxuICAgICAgciA9IFwiUmlnaHRcIixcbiAgICAgIGIgPSBcIkJvdHRvbVwiLFxuICAgICAgbCA9IFwiTGVmdFwiLFxuICAgICAgcHJvcHMgPSAoaW5kZXggPCAzID8gW3QsIHIsIGIsIGxdIDogW3QgKyBsLCB0ICsgciwgYiArIHIsIGIgKyBsXSkubWFwKGZ1bmN0aW9uIChzaWRlKSB7XG4gICAgcmV0dXJuIGluZGV4IDwgMiA/IG5hbWUgKyBzaWRlIDogXCJib3JkZXJcIiArIHNpZGUgKyBuYW1lO1xuICB9KTtcblxuICBfc3BlY2lhbFByb3BzW2luZGV4ID4gMSA/IFwiYm9yZGVyXCIgKyBuYW1lIDogbmFtZV0gPSBmdW5jdGlvbiAocGx1Z2luLCB0YXJnZXQsIHByb3BlcnR5LCBlbmRWYWx1ZSwgdHdlZW4pIHtcbiAgICB2YXIgYSwgdmFycztcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgNCkge1xuICAgICAgLy8gZ2V0dGVyLCBwYXNzZWQgdGFyZ2V0LCBwcm9wZXJ0eSwgYW5kIHVuaXQgKGZyb20gX2dldCgpKVxuICAgICAgYSA9IHByb3BzLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICByZXR1cm4gX2dldChwbHVnaW4sIHByb3AsIHByb3BlcnR5KTtcbiAgICAgIH0pO1xuICAgICAgdmFycyA9IGEuam9pbihcIiBcIik7XG4gICAgICByZXR1cm4gdmFycy5zcGxpdChhWzBdKS5sZW5ndGggPT09IDUgPyBhWzBdIDogdmFycztcbiAgICB9XG5cbiAgICBhID0gKGVuZFZhbHVlICsgXCJcIikuc3BsaXQoXCIgXCIpO1xuICAgIHZhcnMgPSB7fTtcbiAgICBwcm9wcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wLCBpKSB7XG4gICAgICByZXR1cm4gdmFyc1twcm9wXSA9IGFbaV0gPSBhW2ldIHx8IGFbKGkgLSAxKSAvIDIgfCAwXTtcbiAgICB9KTtcbiAgICBwbHVnaW4uaW5pdCh0YXJnZXQsIHZhcnMsIHR3ZWVuKTtcbiAgfTtcbn0pO1xuXG5leHBvcnQgdmFyIENTU1BsdWdpbiA9IHtcbiAgbmFtZTogXCJjc3NcIixcbiAgcmVnaXN0ZXI6IF9pbml0Q29yZSxcbiAgdGFyZ2V0VGVzdDogZnVuY3Rpb24gdGFyZ2V0VGVzdCh0YXJnZXQpIHtcbiAgICByZXR1cm4gdGFyZ2V0LnN0eWxlICYmIHRhcmdldC5ub2RlVHlwZTtcbiAgfSxcbiAgaW5pdDogZnVuY3Rpb24gaW5pdCh0YXJnZXQsIHZhcnMsIHR3ZWVuLCBpbmRleCwgdGFyZ2V0cykge1xuICAgIHZhciBwcm9wcyA9IHRoaXMuX3Byb3BzLFxuICAgICAgICBzdHlsZSA9IHRhcmdldC5zdHlsZSxcbiAgICAgICAgc3RhcnRBdCA9IHR3ZWVuLnZhcnMuc3RhcnRBdCxcbiAgICAgICAgc3RhcnRWYWx1ZSxcbiAgICAgICAgZW5kVmFsdWUsXG4gICAgICAgIGVuZE51bSxcbiAgICAgICAgc3RhcnROdW0sXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHNwZWNpYWxQcm9wLFxuICAgICAgICBwLFxuICAgICAgICBzdGFydFVuaXQsXG4gICAgICAgIGVuZFVuaXQsXG4gICAgICAgIHJlbGF0aXZlLFxuICAgICAgICBpc1RyYW5zZm9ybVJlbGF0ZWQsXG4gICAgICAgIHRyYW5zZm9ybVByb3BUd2VlbixcbiAgICAgICAgY2FjaGUsXG4gICAgICAgIHNtb290aCxcbiAgICAgICAgaGFzUHJpb3JpdHksXG4gICAgICAgIGlubGluZVByb3BzO1xuICAgIF9wbHVnaW5Jbml0dGVkIHx8IF9pbml0Q29yZSgpOyAvLyB3ZSBtYXkgY2FsbCBpbml0KCkgbXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUgcGx1Z2luIGluc3RhbmNlLCBsaWtlIHdoZW4gYWRkaW5nIHNwZWNpYWwgcHJvcGVydGllcywgc28gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSB0aGUgcmV2ZXJ0IGRhdGEgb3IgaW5saW5lUHJvcHNcblxuICAgIHRoaXMuc3R5bGVzID0gdGhpcy5zdHlsZXMgfHwgX2dldFN0eWxlU2F2ZXIodGFyZ2V0KTtcbiAgICBpbmxpbmVQcm9wcyA9IHRoaXMuc3R5bGVzLnByb3BzO1xuICAgIHRoaXMudHdlZW4gPSB0d2VlbjtcblxuICAgIGZvciAocCBpbiB2YXJzKSB7XG4gICAgICBpZiAocCA9PT0gXCJhdXRvUm91bmRcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZW5kVmFsdWUgPSB2YXJzW3BdO1xuXG4gICAgICBpZiAoX3BsdWdpbnNbcF0gJiYgX2NoZWNrUGx1Z2luKHAsIHZhcnMsIHR3ZWVuLCBpbmRleCwgdGFyZ2V0LCB0YXJnZXRzKSkge1xuICAgICAgICAvLyBwbHVnaW5zXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0eXBlID0gdHlwZW9mIGVuZFZhbHVlO1xuICAgICAgc3BlY2lhbFByb3AgPSBfc3BlY2lhbFByb3BzW3BdO1xuXG4gICAgICBpZiAodHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGVuZFZhbHVlID0gZW5kVmFsdWUuY2FsbCh0d2VlbiwgaW5kZXgsIHRhcmdldCwgdGFyZ2V0cyk7XG4gICAgICAgIHR5cGUgPSB0eXBlb2YgZW5kVmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiICYmIH5lbmRWYWx1ZS5pbmRleE9mKFwicmFuZG9tKFwiKSkge1xuICAgICAgICBlbmRWYWx1ZSA9IF9yZXBsYWNlUmFuZG9tKGVuZFZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNwZWNpYWxQcm9wKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wKHRoaXMsIHRhcmdldCwgcCwgZW5kVmFsdWUsIHR3ZWVuKSAmJiAoaGFzUHJpb3JpdHkgPSAxKTtcbiAgICAgIH0gZWxzZSBpZiAocC5zdWJzdHIoMCwgMikgPT09IFwiLS1cIikge1xuICAgICAgICAvL0NTUyB2YXJpYWJsZVxuICAgICAgICBzdGFydFZhbHVlID0gKGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5nZXRQcm9wZXJ0eVZhbHVlKHApICsgXCJcIikudHJpbSgpO1xuICAgICAgICBlbmRWYWx1ZSArPSBcIlwiO1xuICAgICAgICBfY29sb3JFeHAubGFzdEluZGV4ID0gMDtcblxuICAgICAgICBpZiAoIV9jb2xvckV4cC50ZXN0KHN0YXJ0VmFsdWUpKSB7XG4gICAgICAgICAgLy8gY29sb3JzIGRvbid0IGhhdmUgdW5pdHNcbiAgICAgICAgICBzdGFydFVuaXQgPSBnZXRVbml0KHN0YXJ0VmFsdWUpO1xuICAgICAgICAgIGVuZFVuaXQgPSBnZXRVbml0KGVuZFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVuZFVuaXQgPyBzdGFydFVuaXQgIT09IGVuZFVuaXQgJiYgKHN0YXJ0VmFsdWUgPSBfY29udmVydFRvVW5pdCh0YXJnZXQsIHAsIHN0YXJ0VmFsdWUsIGVuZFVuaXQpICsgZW5kVW5pdCkgOiBzdGFydFVuaXQgJiYgKGVuZFZhbHVlICs9IHN0YXJ0VW5pdCk7XG4gICAgICAgIHRoaXMuYWRkKHN0eWxlLCBcInNldFByb3BlcnR5XCIsIHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBpbmRleCwgdGFyZ2V0cywgMCwgMCwgcCk7XG4gICAgICAgIHByb3BzLnB1c2gocCk7XG4gICAgICAgIGlubGluZVByb3BzLnB1c2gocCwgMCwgc3R5bGVbcF0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmIChzdGFydEF0ICYmIHAgaW4gc3RhcnRBdCkge1xuICAgICAgICAgIC8vIGluIGNhc2Ugc29tZW9uZSBoYXJkLWNvZGVzIGEgY29tcGxleCB2YWx1ZSBhcyB0aGUgc3RhcnQsIGxpa2UgdG9wOiBcImNhbGMoMnZoIC8gMilcIi4gV2l0aG91dCB0aGlzLCBpdCdkIHVzZSB0aGUgY29tcHV0ZWQgdmFsdWUgKGFsd2F5cyBpbiBweClcbiAgICAgICAgICBzdGFydFZhbHVlID0gdHlwZW9mIHN0YXJ0QXRbcF0gPT09IFwiZnVuY3Rpb25cIiA/IHN0YXJ0QXRbcF0uY2FsbCh0d2VlbiwgaW5kZXgsIHRhcmdldCwgdGFyZ2V0cykgOiBzdGFydEF0W3BdO1xuICAgICAgICAgIF9pc1N0cmluZyhzdGFydFZhbHVlKSAmJiB+c3RhcnRWYWx1ZS5pbmRleE9mKFwicmFuZG9tKFwiKSAmJiAoc3RhcnRWYWx1ZSA9IF9yZXBsYWNlUmFuZG9tKHN0YXJ0VmFsdWUpKTtcbiAgICAgICAgICBnZXRVbml0KHN0YXJ0VmFsdWUgKyBcIlwiKSB8fCAoc3RhcnRWYWx1ZSArPSBfY29uZmlnLnVuaXRzW3BdIHx8IGdldFVuaXQoX2dldCh0YXJnZXQsIHApKSB8fCBcIlwiKTsgLy8gZm9yIGNhc2VzIHdoZW4gc29tZW9uZSBwYXNzZXMgaW4gYSB1bml0bGVzcyB2YWx1ZSBsaWtlIHt4OiAxMDB9OyBpZiB3ZSB0cnkgc2V0dGluZyB0cmFuc2xhdGUoMTAwLCAwcHgpIGl0IHdvbid0IHdvcmsuXG5cbiAgICAgICAgICAoc3RhcnRWYWx1ZSArIFwiXCIpLmNoYXJBdCgxKSA9PT0gXCI9XCIgJiYgKHN0YXJ0VmFsdWUgPSBfZ2V0KHRhcmdldCwgcCkpOyAvLyBjYW4ndCB3b3JrIHdpdGggcmVsYXRpdmUgdmFsdWVzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnRWYWx1ZSA9IF9nZXQodGFyZ2V0LCBwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0TnVtID0gcGFyc2VGbG9hdChzdGFydFZhbHVlKTtcbiAgICAgICAgcmVsYXRpdmUgPSB0eXBlID09PSBcInN0cmluZ1wiICYmIGVuZFZhbHVlLmNoYXJBdCgxKSA9PT0gXCI9XCIgJiYgZW5kVmFsdWUuc3Vic3RyKDAsIDIpO1xuICAgICAgICByZWxhdGl2ZSAmJiAoZW5kVmFsdWUgPSBlbmRWYWx1ZS5zdWJzdHIoMikpO1xuICAgICAgICBlbmROdW0gPSBwYXJzZUZsb2F0KGVuZFZhbHVlKTtcblxuICAgICAgICBpZiAocCBpbiBfcHJvcGVydHlBbGlhc2VzKSB7XG4gICAgICAgICAgaWYgKHAgPT09IFwiYXV0b0FscGhhXCIpIHtcbiAgICAgICAgICAgIC8vc3BlY2lhbCBjYXNlIHdoZXJlIHdlIGNvbnRyb2wgdGhlIHZpc2liaWxpdHkgYWxvbmcgd2l0aCBvcGFjaXR5LiBXZSBzdGlsbCBhbGxvdyB0aGUgb3BhY2l0eSB2YWx1ZSB0byBwYXNzIHRocm91Z2ggYW5kIGdldCB0d2VlbmVkLlxuICAgICAgICAgICAgaWYgKHN0YXJ0TnVtID09PSAxICYmIF9nZXQodGFyZ2V0LCBcInZpc2liaWxpdHlcIikgPT09IFwiaGlkZGVuXCIgJiYgZW5kTnVtKSB7XG4gICAgICAgICAgICAgIC8vaWYgdmlzaWJpbGl0eSBpcyBpbml0aWFsbHkgc2V0IHRvIFwiaGlkZGVuXCIsIHdlIHNob3VsZCBpbnRlcnByZXQgdGhhdCBhcyBpbnRlbnQgdG8gbWFrZSBvcGFjaXR5IDAgKGEgY29udmVuaWVuY2UpXG4gICAgICAgICAgICAgIHN0YXJ0TnVtID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5saW5lUHJvcHMucHVzaChcInZpc2liaWxpdHlcIiwgMCwgc3R5bGUudmlzaWJpbGl0eSk7XG5cbiAgICAgICAgICAgIF9hZGROb25Ud2VlbmluZ1BUKHRoaXMsIHN0eWxlLCBcInZpc2liaWxpdHlcIiwgc3RhcnROdW0gPyBcImluaGVyaXRcIiA6IFwiaGlkZGVuXCIsIGVuZE51bSA/IFwiaW5oZXJpdFwiIDogXCJoaWRkZW5cIiwgIWVuZE51bSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHAgIT09IFwic2NhbGVcIiAmJiBwICE9PSBcInRyYW5zZm9ybVwiKSB7XG4gICAgICAgICAgICBwID0gX3Byb3BlcnR5QWxpYXNlc1twXTtcbiAgICAgICAgICAgIH5wLmluZGV4T2YoXCIsXCIpICYmIChwID0gcC5zcGxpdChcIixcIilbMF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlzVHJhbnNmb3JtUmVsYXRlZCA9IHAgaW4gX3RyYW5zZm9ybVByb3BzOyAvLy0tLSBUUkFOU0ZPUk0tUkVMQVRFRCAtLS1cblxuICAgICAgICBpZiAoaXNUcmFuc2Zvcm1SZWxhdGVkKSB7XG4gICAgICAgICAgdGhpcy5zdHlsZXMuc2F2ZShwKTtcblxuICAgICAgICAgIGlmICghdHJhbnNmb3JtUHJvcFR3ZWVuKSB7XG4gICAgICAgICAgICBjYWNoZSA9IHRhcmdldC5fZ3NhcDtcbiAgICAgICAgICAgIGNhY2hlLnJlbmRlclRyYW5zZm9ybSAmJiAhdmFycy5wYXJzZVRyYW5zZm9ybSB8fCBfcGFyc2VUcmFuc2Zvcm0odGFyZ2V0LCB2YXJzLnBhcnNlVHJhbnNmb3JtKTsgLy8gaWYsIGZvciBleGFtcGxlLCBnc2FwLnNldCguLi4ge3RyYW5zZm9ybTpcInRyYW5zbGF0ZVgoNTB2dylcIn0pLCB0aGUgX2dldCgpIGNhbGwgZG9lc24ndCBwYXJzZSB0aGUgdHJhbnNmb3JtLCB0aHVzIGNhY2hlLnJlbmRlclRyYW5zZm9ybSB3b24ndCBiZSBzZXQgeWV0IHNvIGZvcmNlIHRoZSBwYXJzaW5nIG9mIHRoZSB0cmFuc2Zvcm0gaGVyZS5cblxuICAgICAgICAgICAgc21vb3RoID0gdmFycy5zbW9vdGhPcmlnaW4gIT09IGZhbHNlICYmIGNhY2hlLnNtb290aDtcbiAgICAgICAgICAgIHRyYW5zZm9ybVByb3BUd2VlbiA9IHRoaXMuX3B0ID0gbmV3IFByb3BUd2Vlbih0aGlzLl9wdCwgc3R5bGUsIF90cmFuc2Zvcm1Qcm9wLCAwLCAxLCBjYWNoZS5yZW5kZXJUcmFuc2Zvcm0sIGNhY2hlLCAwLCAtMSk7IC8vdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCwgY3JlYXRlIHRoZSByZW5kZXJpbmcgUHJvcFR3ZWVuIHNvIHRoYXQgaXQgcnVucyBMQVNUIChpbiB0aGUgbGlua2VkIGxpc3QsIHdlIGtlZXAgYWRkaW5nIHRvIHRoZSBiZWdpbm5pbmcpXG5cbiAgICAgICAgICAgIHRyYW5zZm9ybVByb3BUd2Vlbi5kZXAgPSAxOyAvL2ZsYWcgaXQgYXMgZGVwZW5kZW50IHNvIHRoYXQgaWYgdGhpbmdzIGdldCBraWxsZWQvb3ZlcndyaXR0ZW4gYW5kIHRoaXMgaXMgdGhlIG9ubHkgUHJvcFR3ZWVuIGxlZnQsIHdlIGNhbiBzYWZlbHkga2lsbCB0aGUgd2hvbGUgdHdlZW4uXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHAgPT09IFwic2NhbGVcIikge1xuICAgICAgICAgICAgdGhpcy5fcHQgPSBuZXcgUHJvcFR3ZWVuKHRoaXMuX3B0LCBjYWNoZSwgXCJzY2FsZVlcIiwgY2FjaGUuc2NhbGVZLCAocmVsYXRpdmUgPyBfcGFyc2VSZWxhdGl2ZShjYWNoZS5zY2FsZVksIHJlbGF0aXZlICsgZW5kTnVtKSA6IGVuZE51bSkgLSBjYWNoZS5zY2FsZVkgfHwgMCwgX3JlbmRlckNTU1Byb3ApO1xuICAgICAgICAgICAgdGhpcy5fcHQudSA9IDA7XG4gICAgICAgICAgICBwcm9wcy5wdXNoKFwic2NhbGVZXCIsIHApO1xuICAgICAgICAgICAgcCArPSBcIlhcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHAgPT09IFwidHJhbnNmb3JtT3JpZ2luXCIpIHtcbiAgICAgICAgICAgIGlubGluZVByb3BzLnB1c2goX3RyYW5zZm9ybU9yaWdpblByb3AsIDAsIHN0eWxlW190cmFuc2Zvcm1PcmlnaW5Qcm9wXSk7XG4gICAgICAgICAgICBlbmRWYWx1ZSA9IF9jb252ZXJ0S2V5d29yZHNUb1BlcmNlbnRhZ2VzKGVuZFZhbHVlKTsgLy9pbiBjYXNlIHNvbWV0aGluZyBsaWtlIFwibGVmdCB0b3BcIiBvciBcImJvdHRvbSByaWdodFwiIGlzIHBhc3NlZCBpbi4gQ29udmVydCB0byBwZXJjZW50YWdlcy5cblxuICAgICAgICAgICAgaWYgKGNhY2hlLnN2Zykge1xuICAgICAgICAgICAgICBfYXBwbHlTVkdPcmlnaW4odGFyZ2V0LCBlbmRWYWx1ZSwgMCwgc21vb3RoLCAwLCB0aGlzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZFVuaXQgPSBwYXJzZUZsb2F0KGVuZFZhbHVlLnNwbGl0KFwiIFwiKVsyXSkgfHwgMDsgLy9oYW5kbGUgdGhlIHpPcmlnaW4gc2VwYXJhdGVseSFcblxuICAgICAgICAgICAgICBlbmRVbml0ICE9PSBjYWNoZS56T3JpZ2luICYmIF9hZGROb25Ud2VlbmluZ1BUKHRoaXMsIGNhY2hlLCBcInpPcmlnaW5cIiwgY2FjaGUuek9yaWdpbiwgZW5kVW5pdCk7XG5cbiAgICAgICAgICAgICAgX2FkZE5vblR3ZWVuaW5nUFQodGhpcywgc3R5bGUsIHAsIF9maXJzdFR3b09ubHkoc3RhcnRWYWx1ZSksIF9maXJzdFR3b09ubHkoZW5kVmFsdWUpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChwID09PSBcInN2Z09yaWdpblwiKSB7XG4gICAgICAgICAgICBfYXBwbHlTVkdPcmlnaW4odGFyZ2V0LCBlbmRWYWx1ZSwgMSwgc21vb3RoLCAwLCB0aGlzKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChwIGluIF9yb3RhdGlvbmFsUHJvcGVydGllcykge1xuICAgICAgICAgICAgX2FkZFJvdGF0aW9uYWxQcm9wVHdlZW4odGhpcywgY2FjaGUsIHAsIHN0YXJ0TnVtLCByZWxhdGl2ZSA/IF9wYXJzZVJlbGF0aXZlKHN0YXJ0TnVtLCByZWxhdGl2ZSArIGVuZFZhbHVlKSA6IGVuZFZhbHVlKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChwID09PSBcInNtb290aE9yaWdpblwiKSB7XG4gICAgICAgICAgICBfYWRkTm9uVHdlZW5pbmdQVCh0aGlzLCBjYWNoZSwgXCJzbW9vdGhcIiwgY2FjaGUuc21vb3RoLCBlbmRWYWx1ZSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocCA9PT0gXCJmb3JjZTNEXCIpIHtcbiAgICAgICAgICAgIGNhY2hlW3BdID0gZW5kVmFsdWU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHAgPT09IFwidHJhbnNmb3JtXCIpIHtcbiAgICAgICAgICAgIF9hZGRSYXdUcmFuc2Zvcm1QVHModGhpcywgZW5kVmFsdWUsIHRhcmdldCk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghKHAgaW4gc3R5bGUpKSB7XG4gICAgICAgICAgcCA9IF9jaGVja1Byb3BQcmVmaXgocCkgfHwgcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1RyYW5zZm9ybVJlbGF0ZWQgfHwgKGVuZE51bSB8fCBlbmROdW0gPT09IDApICYmIChzdGFydE51bSB8fCBzdGFydE51bSA9PT0gMCkgJiYgIV9jb21wbGV4RXhwLnRlc3QoZW5kVmFsdWUpICYmIHAgaW4gc3R5bGUpIHtcbiAgICAgICAgICBzdGFydFVuaXQgPSAoc3RhcnRWYWx1ZSArIFwiXCIpLnN1YnN0cigoc3RhcnROdW0gKyBcIlwiKS5sZW5ndGgpO1xuICAgICAgICAgIGVuZE51bSB8fCAoZW5kTnVtID0gMCk7IC8vIHByb3RlY3QgYWdhaW5zdCBOYU5cblxuICAgICAgICAgIGVuZFVuaXQgPSBnZXRVbml0KGVuZFZhbHVlKSB8fCAocCBpbiBfY29uZmlnLnVuaXRzID8gX2NvbmZpZy51bml0c1twXSA6IHN0YXJ0VW5pdCk7XG4gICAgICAgICAgc3RhcnRVbml0ICE9PSBlbmRVbml0ICYmIChzdGFydE51bSA9IF9jb252ZXJ0VG9Vbml0KHRhcmdldCwgcCwgc3RhcnRWYWx1ZSwgZW5kVW5pdCkpO1xuICAgICAgICAgIHRoaXMuX3B0ID0gbmV3IFByb3BUd2Vlbih0aGlzLl9wdCwgaXNUcmFuc2Zvcm1SZWxhdGVkID8gY2FjaGUgOiBzdHlsZSwgcCwgc3RhcnROdW0sIChyZWxhdGl2ZSA/IF9wYXJzZVJlbGF0aXZlKHN0YXJ0TnVtLCByZWxhdGl2ZSArIGVuZE51bSkgOiBlbmROdW0pIC0gc3RhcnROdW0sICFpc1RyYW5zZm9ybVJlbGF0ZWQgJiYgKGVuZFVuaXQgPT09IFwicHhcIiB8fCBwID09PSBcInpJbmRleFwiKSAmJiB2YXJzLmF1dG9Sb3VuZCAhPT0gZmFsc2UgPyBfcmVuZGVyUm91bmRlZENTU1Byb3AgOiBfcmVuZGVyQ1NTUHJvcCk7XG4gICAgICAgICAgdGhpcy5fcHQudSA9IGVuZFVuaXQgfHwgMDtcblxuICAgICAgICAgIGlmIChzdGFydFVuaXQgIT09IGVuZFVuaXQgJiYgZW5kVW5pdCAhPT0gXCIlXCIpIHtcbiAgICAgICAgICAgIC8vd2hlbiB0aGUgdHdlZW4gZ29lcyBhbGwgdGhlIHdheSBiYWNrIHRvIHRoZSBiZWdpbm5pbmcsIHdlIG5lZWQgdG8gcmV2ZXJ0IGl0IHRvIHRoZSBPTEQvT1JJR0lOQUwgdmFsdWUgKHdpdGggdGhvc2UgdW5pdHMpLiBXZSByZWNvcmQgdGhhdCBhcyBhIFwiYlwiIChiZWdpbm5pbmcpIHByb3BlcnR5IGFuZCBwb2ludCB0byBhIHJlbmRlciBtZXRob2QgdGhhdCBoYW5kbGVzIHRoYXQuIChwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24pXG4gICAgICAgICAgICB0aGlzLl9wdC5iID0gc3RhcnRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3B0LnIgPSBfcmVuZGVyQ1NTUHJvcFdpdGhCZWdpbm5pbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCEocCBpbiBzdHlsZSkpIHtcbiAgICAgICAgICBpZiAocCBpbiB0YXJnZXQpIHtcbiAgICAgICAgICAgIC8vbWF5YmUgaXQncyBub3QgYSBzdHlsZSAtIGl0IGNvdWxkIGJlIGEgcHJvcGVydHkgYWRkZWQgZGlyZWN0bHkgdG8gYW4gZWxlbWVudCBpbiB3aGljaCBjYXNlIHdlJ2xsIHRyeSB0byBhbmltYXRlIHRoYXQuXG4gICAgICAgICAgICB0aGlzLmFkZCh0YXJnZXQsIHAsIHN0YXJ0VmFsdWUgfHwgdGFyZ2V0W3BdLCByZWxhdGl2ZSA/IHJlbGF0aXZlICsgZW5kVmFsdWUgOiBlbmRWYWx1ZSwgaW5kZXgsIHRhcmdldHMpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocCAhPT0gXCJwYXJzZVRyYW5zZm9ybVwiKSB7XG4gICAgICAgICAgICBfbWlzc2luZ1BsdWdpbihwLCBlbmRWYWx1ZSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdHdlZW5Db21wbGV4Q1NTU3RyaW5nLmNhbGwodGhpcywgdGFyZ2V0LCBwLCBzdGFydFZhbHVlLCByZWxhdGl2ZSA/IHJlbGF0aXZlICsgZW5kVmFsdWUgOiBlbmRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpc1RyYW5zZm9ybVJlbGF0ZWQgfHwgKHAgaW4gc3R5bGUgPyBpbmxpbmVQcm9wcy5wdXNoKHAsIDAsIHN0eWxlW3BdKSA6IGlubGluZVByb3BzLnB1c2gocCwgMSwgc3RhcnRWYWx1ZSB8fCB0YXJnZXRbcF0pKTtcbiAgICAgICAgcHJvcHMucHVzaChwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoYXNQcmlvcml0eSAmJiBfc29ydFByb3BUd2VlbnNCeVByaW9yaXR5KHRoaXMpO1xuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihyYXRpbywgZGF0YSkge1xuICAgIGlmIChkYXRhLnR3ZWVuLl90aW1lIHx8ICFfcmV2ZXJ0aW5nKCkpIHtcbiAgICAgIHZhciBwdCA9IGRhdGEuX3B0O1xuXG4gICAgICB3aGlsZSAocHQpIHtcbiAgICAgICAgcHQucihyYXRpbywgcHQuZCk7XG4gICAgICAgIHB0ID0gcHQuX25leHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEuc3R5bGVzLnJldmVydCgpO1xuICAgIH1cbiAgfSxcbiAgZ2V0OiBfZ2V0LFxuICBhbGlhc2VzOiBfcHJvcGVydHlBbGlhc2VzLFxuICBnZXRTZXR0ZXI6IGZ1bmN0aW9uIGdldFNldHRlcih0YXJnZXQsIHByb3BlcnR5LCBwbHVnaW4pIHtcbiAgICAvL3JldHVybnMgYSBzZXR0ZXIgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRhcmdldCwgcHJvcGVydHksIHZhbHVlIGFuZCBhcHBsaWVzIGl0IGFjY29yZGluZ2x5LiBSZW1lbWJlciwgcHJvcGVydGllcyBsaWtlIFwieFwiIGFyZW4ndCBhcyBzaW1wbGUgYXMgdGFyZ2V0LnN0eWxlLnByb3BlcnR5ID0gdmFsdWUgYmVjYXVzZSB0aGV5J3ZlIGdvdCB0byBiZSBhcHBsaWVkIHRvIGEgcHJveHkgb2JqZWN0IGFuZCB0aGVuIG1lcmdlZCBpbnRvIGEgdHJhbnNmb3JtIHN0cmluZyBpbiBhIHJlbmRlcmVyLlxuICAgIHZhciBwID0gX3Byb3BlcnR5QWxpYXNlc1twcm9wZXJ0eV07XG4gICAgcCAmJiBwLmluZGV4T2YoXCIsXCIpIDwgMCAmJiAocHJvcGVydHkgPSBwKTtcbiAgICByZXR1cm4gcHJvcGVydHkgaW4gX3RyYW5zZm9ybVByb3BzICYmIHByb3BlcnR5ICE9PSBfdHJhbnNmb3JtT3JpZ2luUHJvcCAmJiAodGFyZ2V0Ll9nc2FwLnggfHwgX2dldCh0YXJnZXQsIFwieFwiKSkgPyBwbHVnaW4gJiYgX3JlY2VudFNldHRlclBsdWdpbiA9PT0gcGx1Z2luID8gcHJvcGVydHkgPT09IFwic2NhbGVcIiA/IF9zZXR0ZXJTY2FsZSA6IF9zZXR0ZXJUcmFuc2Zvcm0gOiAoX3JlY2VudFNldHRlclBsdWdpbiA9IHBsdWdpbiB8fCB7fSkgJiYgKHByb3BlcnR5ID09PSBcInNjYWxlXCIgPyBfc2V0dGVyU2NhbGVXaXRoUmVuZGVyIDogX3NldHRlclRyYW5zZm9ybVdpdGhSZW5kZXIpIDogdGFyZ2V0LnN0eWxlICYmICFfaXNVbmRlZmluZWQodGFyZ2V0LnN0eWxlW3Byb3BlcnR5XSkgPyBfc2V0dGVyQ1NTU3R5bGUgOiB+cHJvcGVydHkuaW5kZXhPZihcIi1cIikgPyBfc2V0dGVyQ1NTUHJvcCA6IF9nZXRTZXR0ZXIodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gIH0sXG4gIGNvcmU6IHtcbiAgICBfcmVtb3ZlUHJvcGVydHk6IF9yZW1vdmVQcm9wZXJ0eSxcbiAgICBfZ2V0TWF0cml4OiBfZ2V0TWF0cml4XG4gIH1cbn07XG5nc2FwLnV0aWxzLmNoZWNrUHJlZml4ID0gX2NoZWNrUHJvcFByZWZpeDtcbmdzYXAuY29yZS5nZXRTdHlsZVNhdmVyID0gX2dldFN0eWxlU2F2ZXI7XG5cbihmdW5jdGlvbiAocG9zaXRpb25BbmRTY2FsZSwgcm90YXRpb24sIG90aGVycywgYWxpYXNlcykge1xuICB2YXIgYWxsID0gX2ZvckVhY2hOYW1lKHBvc2l0aW9uQW5kU2NhbGUgKyBcIixcIiArIHJvdGF0aW9uICsgXCIsXCIgKyBvdGhlcnMsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgX3RyYW5zZm9ybVByb3BzW25hbWVdID0gMTtcbiAgfSk7XG5cbiAgX2ZvckVhY2hOYW1lKHJvdGF0aW9uLCBmdW5jdGlvbiAobmFtZSkge1xuICAgIF9jb25maWcudW5pdHNbbmFtZV0gPSBcImRlZ1wiO1xuICAgIF9yb3RhdGlvbmFsUHJvcGVydGllc1tuYW1lXSA9IDE7XG4gIH0pO1xuXG4gIF9wcm9wZXJ0eUFsaWFzZXNbYWxsWzEzXV0gPSBwb3NpdGlvbkFuZFNjYWxlICsgXCIsXCIgKyByb3RhdGlvbjtcblxuICBfZm9yRWFjaE5hbWUoYWxpYXNlcywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgc3BsaXQgPSBuYW1lLnNwbGl0KFwiOlwiKTtcbiAgICBfcHJvcGVydHlBbGlhc2VzW3NwbGl0WzFdXSA9IGFsbFtzcGxpdFswXV07XG4gIH0pO1xufSkoXCJ4LHkseixzY2FsZSxzY2FsZVgsc2NhbGVZLHhQZXJjZW50LHlQZXJjZW50XCIsIFwicm90YXRpb24scm90YXRpb25YLHJvdGF0aW9uWSxza2V3WCxza2V3WVwiLCBcInRyYW5zZm9ybSx0cmFuc2Zvcm1PcmlnaW4sc3ZnT3JpZ2luLGZvcmNlM0Qsc21vb3RoT3JpZ2luLHRyYW5zZm9ybVBlcnNwZWN0aXZlXCIsIFwiMDp0cmFuc2xhdGVYLDE6dHJhbnNsYXRlWSwyOnRyYW5zbGF0ZVosODpyb3RhdGUsODpyb3RhdGlvblosODpyb3RhdGVaLDk6cm90YXRlWCwxMDpyb3RhdGVZXCIpO1xuXG5fZm9yRWFjaE5hbWUoXCJ4LHkseix0b3AscmlnaHQsYm90dG9tLGxlZnQsd2lkdGgsaGVpZ2h0LGZvbnRTaXplLHBhZGRpbmcsbWFyZ2luLHBlcnNwZWN0aXZlXCIsIGZ1bmN0aW9uIChuYW1lKSB7XG4gIF9jb25maWcudW5pdHNbbmFtZV0gPSBcInB4XCI7XG59KTtcblxuZ3NhcC5yZWdpc3RlclBsdWdpbihDU1NQbHVnaW4pO1xuZXhwb3J0IHsgQ1NTUGx1Z2luIGFzIGRlZmF1bHQsIF9nZXRCQm94LCBfY3JlYXRlRWxlbWVudCwgX2NoZWNrUHJvcFByZWZpeCBhcyBjaGVja1ByZWZpeCB9OyIsImltcG9ydCB7IGdzYXAsIFBvd2VyMCwgUG93ZXIxLCBQb3dlcjIsIFBvd2VyMywgUG93ZXI0LCBMaW5lYXIsIFF1YWQsIEN1YmljLCBRdWFydCwgUXVpbnQsIFN0cm9uZywgRWxhc3RpYywgQmFjaywgU3RlcHBlZEVhc2UsIEJvdW5jZSwgU2luZSwgRXhwbywgQ2lyYywgVHdlZW5MaXRlLCBUaW1lbGluZUxpdGUsIFRpbWVsaW5lTWF4IH0gZnJvbSBcIi4vZ3NhcC1jb3JlLmpzXCI7XG5pbXBvcnQgeyBDU1NQbHVnaW4gfSBmcm9tIFwiLi9DU1NQbHVnaW4uanNcIjtcbnZhciBnc2FwV2l0aENTUyA9IGdzYXAucmVnaXN0ZXJQbHVnaW4oQ1NTUGx1Z2luKSB8fCBnc2FwLFxuICAgIC8vIHRvIHByb3RlY3QgZnJvbSB0cmVlIHNoYWtpbmdcblR3ZWVuTWF4V2l0aENTUyA9IGdzYXBXaXRoQ1NTLmNvcmUuVHdlZW47XG5leHBvcnQgeyBnc2FwV2l0aENTUyBhcyBnc2FwLCBnc2FwV2l0aENTUyBhcyBkZWZhdWx0LCBDU1NQbHVnaW4sIFR3ZWVuTWF4V2l0aENTUyBhcyBUd2Vlbk1heCwgVHdlZW5MaXRlLCBUaW1lbGluZU1heCwgVGltZWxpbmVMaXRlLCBQb3dlcjAsIFBvd2VyMSwgUG93ZXIyLCBQb3dlcjMsIFBvd2VyNCwgTGluZWFyLCBRdWFkLCBDdWJpYywgUXVhcnQsIFF1aW50LCBTdHJvbmcsIEVsYXN0aWMsIEJhY2ssIFN0ZXBwZWRFYXNlLCBCb3VuY2UsIFNpbmUsIEV4cG8sIENpcmMgfTsiLCIvKiFcbiAqIGltYWdlc0xvYWRlZCB2NS4wLjBcbiAqIEphdmFTY3JpcHQgaXMgYWxsIGxpa2UgXCJZb3UgaW1hZ2VzIGFyZSBkb25lIHlldCBvciB3aGF0P1wiXG4gKiBNSVQgTGljZW5zZVxuICovXG5cbiggZnVuY3Rpb24oIHdpbmRvdywgZmFjdG9yeSApIHtcbiAgLy8gdW5pdmVyc2FsIG1vZHVsZSBkZWZpbml0aW9uXG4gIGlmICggdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cyApIHtcbiAgICAvLyBDb21tb25KU1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSggd2luZG93LCByZXF1aXJlKCdldi1lbWl0dGVyJykgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBicm93c2VyIGdsb2JhbFxuICAgIHdpbmRvdy5pbWFnZXNMb2FkZWQgPSBmYWN0b3J5KCB3aW5kb3csIHdpbmRvdy5FdkVtaXR0ZXIgKTtcbiAgfVxuXG59ICkoIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdGhpcyxcbiAgICBmdW5jdGlvbiBmYWN0b3J5KCB3aW5kb3csIEV2RW1pdHRlciApIHtcblxubGV0ICQgPSB3aW5kb3cualF1ZXJ5O1xubGV0IGNvbnNvbGUgPSB3aW5kb3cuY29uc29sZTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4vLyB0dXJuIGVsZW1lbnQgb3Igbm9kZUxpc3QgaW50byBhbiBhcnJheVxuZnVuY3Rpb24gbWFrZUFycmF5KCBvYmogKSB7XG4gIC8vIHVzZSBvYmplY3QgaWYgYWxyZWFkeSBhbiBhcnJheVxuICBpZiAoIEFycmF5LmlzQXJyYXkoIG9iaiApICkgcmV0dXJuIG9iajtcblxuICBsZXQgaXNBcnJheUxpa2UgPSB0eXBlb2Ygb2JqID09ICdvYmplY3QnICYmIHR5cGVvZiBvYmoubGVuZ3RoID09ICdudW1iZXInO1xuICAvLyBjb252ZXJ0IG5vZGVMaXN0IHRvIGFycmF5XG4gIGlmICggaXNBcnJheUxpa2UgKSByZXR1cm4gWyAuLi5vYmogXTtcblxuICAvLyBhcnJheSBvZiBzaW5nbGUgaW5kZXhcbiAgcmV0dXJuIFsgb2JqIF07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGltYWdlc0xvYWRlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4vKipcbiAqIEBwYXJhbSB7W0FycmF5LCBFbGVtZW50LCBOb2RlTGlzdCwgU3RyaW5nXX0gZWxlbVxuICogQHBhcmFtIHtbT2JqZWN0LCBGdW5jdGlvbl19IG9wdGlvbnMgLSBpZiBmdW5jdGlvbiwgdXNlIGFzIGNhbGxiYWNrXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkFsd2F5cyAtIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7SW1hZ2VzTG9hZGVkfVxuICovXG5mdW5jdGlvbiBJbWFnZXNMb2FkZWQoIGVsZW0sIG9wdGlvbnMsIG9uQWx3YXlzICkge1xuICAvLyBjb2VyY2UgSW1hZ2VzTG9hZGVkKCkgd2l0aG91dCBuZXcsIHRvIGJlIG5ldyBJbWFnZXNMb2FkZWQoKVxuICBpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBJbWFnZXNMb2FkZWQgKSApIHtcbiAgICByZXR1cm4gbmV3IEltYWdlc0xvYWRlZCggZWxlbSwgb3B0aW9ucywgb25BbHdheXMgKTtcbiAgfVxuICAvLyB1c2UgZWxlbSBhcyBzZWxlY3RvciBzdHJpbmdcbiAgbGV0IHF1ZXJ5RWxlbSA9IGVsZW07XG4gIGlmICggdHlwZW9mIGVsZW0gPT0gJ3N0cmluZycgKSB7XG4gICAgcXVlcnlFbGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggZWxlbSApO1xuICB9XG4gIC8vIGJhaWwgaWYgYmFkIGVsZW1lbnRcbiAgaWYgKCAhcXVlcnlFbGVtICkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEJhZCBlbGVtZW50IGZvciBpbWFnZXNMb2FkZWQgJHtxdWVyeUVsZW0gfHwgZWxlbX1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLmVsZW1lbnRzID0gbWFrZUFycmF5KCBxdWVyeUVsZW0gKTtcbiAgdGhpcy5vcHRpb25zID0ge307XG4gIC8vIHNoaWZ0IGFyZ3VtZW50cyBpZiBubyBvcHRpb25zIHNldFxuICBpZiAoIHR5cGVvZiBvcHRpb25zID09ICdmdW5jdGlvbicgKSB7XG4gICAgb25BbHdheXMgPSBvcHRpb25zO1xuICB9IGVsc2Uge1xuICAgIE9iamVjdC5hc3NpZ24oIHRoaXMub3B0aW9ucywgb3B0aW9ucyApO1xuICB9XG5cbiAgaWYgKCBvbkFsd2F5cyApIHRoaXMub24oICdhbHdheXMnLCBvbkFsd2F5cyApO1xuXG4gIHRoaXMuZ2V0SW1hZ2VzKCk7XG4gIC8vIGFkZCBqUXVlcnkgRGVmZXJyZWQgb2JqZWN0XG4gIGlmICggJCApIHRoaXMuanFEZWZlcnJlZCA9IG5ldyAkLkRlZmVycmVkKCk7XG5cbiAgLy8gSEFDSyBjaGVjayBhc3luYyB0byBhbGxvdyB0aW1lIHRvIGJpbmQgbGlzdGVuZXJzXG4gIHNldFRpbWVvdXQoIHRoaXMuY2hlY2suYmluZCggdGhpcyApICk7XG59XG5cbkltYWdlc0xvYWRlZC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBFdkVtaXR0ZXIucHJvdG90eXBlICk7XG5cbkltYWdlc0xvYWRlZC5wcm90b3R5cGUuZ2V0SW1hZ2VzID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuaW1hZ2VzID0gW107XG5cbiAgLy8gZmlsdGVyICYgZmluZCBpdGVtcyBpZiB3ZSBoYXZlIGFuIGl0ZW0gc2VsZWN0b3JcbiAgdGhpcy5lbGVtZW50cy5mb3JFYWNoKCB0aGlzLmFkZEVsZW1lbnRJbWFnZXMsIHRoaXMgKTtcbn07XG5cbmNvbnN0IGVsZW1lbnROb2RlVHlwZXMgPSBbIDEsIDksIDExIF07XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlfSBlbGVtXG4gKi9cbkltYWdlc0xvYWRlZC5wcm90b3R5cGUuYWRkRWxlbWVudEltYWdlcyA9IGZ1bmN0aW9uKCBlbGVtICkge1xuICAvLyBmaWx0ZXIgc2libGluZ3NcbiAgaWYgKCBlbGVtLm5vZGVOYW1lID09PSAnSU1HJyApIHtcbiAgICB0aGlzLmFkZEltYWdlKCBlbGVtICk7XG4gIH1cbiAgLy8gZ2V0IGJhY2tncm91bmQgaW1hZ2Ugb24gZWxlbWVudFxuICBpZiAoIHRoaXMub3B0aW9ucy5iYWNrZ3JvdW5kID09PSB0cnVlICkge1xuICAgIHRoaXMuYWRkRWxlbWVudEJhY2tncm91bmRJbWFnZXMoIGVsZW0gKTtcbiAgfVxuXG4gIC8vIGZpbmQgY2hpbGRyZW5cbiAgLy8gbm8gbm9uLWVsZW1lbnQgbm9kZXMsICMxNDNcbiAgbGV0IHsgbm9kZVR5cGUgfSA9IGVsZW07XG4gIGlmICggIW5vZGVUeXBlIHx8ICFlbGVtZW50Tm9kZVR5cGVzLmluY2x1ZGVzKCBub2RlVHlwZSApICkgcmV0dXJuO1xuXG4gIGxldCBjaGlsZEltZ3MgPSBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpO1xuICAvLyBjb25jYXQgY2hpbGRFbGVtcyB0byBmaWx0ZXJGb3VuZCBhcnJheVxuICBmb3IgKCBsZXQgaW1nIG9mIGNoaWxkSW1ncyApIHtcbiAgICB0aGlzLmFkZEltYWdlKCBpbWcgKTtcbiAgfVxuXG4gIC8vIGdldCBjaGlsZCBiYWNrZ3JvdW5kIGltYWdlc1xuICBpZiAoIHR5cGVvZiB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZCA9PSAnc3RyaW5nJyApIHtcbiAgICBsZXQgY2hpbGRyZW4gPSBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoIHRoaXMub3B0aW9ucy5iYWNrZ3JvdW5kICk7XG4gICAgZm9yICggbGV0IGNoaWxkIG9mIGNoaWxkcmVuICkge1xuICAgICAgdGhpcy5hZGRFbGVtZW50QmFja2dyb3VuZEltYWdlcyggY2hpbGQgKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IHJlVVJMID0gL3VybFxcKChbJ1wiXSk/KC4qPylcXDFcXCkvZ2k7XG5cbkltYWdlc0xvYWRlZC5wcm90b3R5cGUuYWRkRWxlbWVudEJhY2tncm91bmRJbWFnZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcbiAgbGV0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApO1xuICAvLyBGaXJlZm94IHJldHVybnMgbnVsbCBpZiBpbiBhIGhpZGRlbiBpZnJhbWUgaHR0cHM6Ly9idWd6aWwubGEvNTQ4Mzk3XG4gIGlmICggIXN0eWxlICkgcmV0dXJuO1xuXG4gIC8vIGdldCB1cmwgaW5zaWRlIHVybChcIi4uLlwiKVxuICBsZXQgbWF0Y2hlcyA9IHJlVVJMLmV4ZWMoIHN0eWxlLmJhY2tncm91bmRJbWFnZSApO1xuICB3aGlsZSAoIG1hdGNoZXMgIT09IG51bGwgKSB7XG4gICAgbGV0IHVybCA9IG1hdGNoZXMgJiYgbWF0Y2hlc1syXTtcbiAgICBpZiAoIHVybCApIHtcbiAgICAgIHRoaXMuYWRkQmFja2dyb3VuZCggdXJsLCBlbGVtICk7XG4gICAgfVxuICAgIG1hdGNoZXMgPSByZVVSTC5leGVjKCBzdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge0ltYWdlfSBpbWdcbiAqL1xuSW1hZ2VzTG9hZGVkLnByb3RvdHlwZS5hZGRJbWFnZSA9IGZ1bmN0aW9uKCBpbWcgKSB7XG4gIGxldCBsb2FkaW5nSW1hZ2UgPSBuZXcgTG9hZGluZ0ltYWdlKCBpbWcgKTtcbiAgdGhpcy5pbWFnZXMucHVzaCggbG9hZGluZ0ltYWdlICk7XG59O1xuXG5JbWFnZXNMb2FkZWQucHJvdG90eXBlLmFkZEJhY2tncm91bmQgPSBmdW5jdGlvbiggdXJsLCBlbGVtICkge1xuICBsZXQgYmFja2dyb3VuZCA9IG5ldyBCYWNrZ3JvdW5kKCB1cmwsIGVsZW0gKTtcbiAgdGhpcy5pbWFnZXMucHVzaCggYmFja2dyb3VuZCApO1xufTtcblxuSW1hZ2VzTG9hZGVkLnByb3RvdHlwZS5jaGVjayA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnByb2dyZXNzZWRDb3VudCA9IDA7XG4gIHRoaXMuaGFzQW55QnJva2VuID0gZmFsc2U7XG4gIC8vIGNvbXBsZXRlIGlmIG5vIGltYWdlc1xuICBpZiAoICF0aGlzLmltYWdlcy5sZW5ndGggKSB7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLXN0eWxlICovXG4gIGxldCBvblByb2dyZXNzID0gKCBpbWFnZSwgZWxlbSwgbWVzc2FnZSApID0+IHtcbiAgICAvLyBIQUNLIC0gQ2hyb21lIHRyaWdnZXJzIGV2ZW50IGJlZm9yZSBvYmplY3QgcHJvcGVydGllcyBoYXZlIGNoYW5nZWQuICM4M1xuICAgIHNldFRpbWVvdXQoICgpID0+IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3MoIGltYWdlLCBlbGVtLCBtZXNzYWdlICk7XG4gICAgfSApO1xuICB9O1xuXG4gIHRoaXMuaW1hZ2VzLmZvckVhY2goIGZ1bmN0aW9uKCBsb2FkaW5nSW1hZ2UgKSB7XG4gICAgbG9hZGluZ0ltYWdlLm9uY2UoICdwcm9ncmVzcycsIG9uUHJvZ3Jlc3MgKTtcbiAgICBsb2FkaW5nSW1hZ2UuY2hlY2soKTtcbiAgfSApO1xufTtcblxuSW1hZ2VzTG9hZGVkLnByb3RvdHlwZS5wcm9ncmVzcyA9IGZ1bmN0aW9uKCBpbWFnZSwgZWxlbSwgbWVzc2FnZSApIHtcbiAgdGhpcy5wcm9ncmVzc2VkQ291bnQrKztcbiAgdGhpcy5oYXNBbnlCcm9rZW4gPSB0aGlzLmhhc0FueUJyb2tlbiB8fCAhaW1hZ2UuaXNMb2FkZWQ7XG4gIC8vIHByb2dyZXNzIGV2ZW50XG4gIHRoaXMuZW1pdEV2ZW50KCAncHJvZ3Jlc3MnLCBbIHRoaXMsIGltYWdlLCBlbGVtIF0gKTtcbiAgaWYgKCB0aGlzLmpxRGVmZXJyZWQgJiYgdGhpcy5qcURlZmVycmVkLm5vdGlmeSApIHtcbiAgICB0aGlzLmpxRGVmZXJyZWQubm90aWZ5KCB0aGlzLCBpbWFnZSApO1xuICB9XG4gIC8vIGNoZWNrIGlmIGNvbXBsZXRlZFxuICBpZiAoIHRoaXMucHJvZ3Jlc3NlZENvdW50ID09PSB0aGlzLmltYWdlcy5sZW5ndGggKSB7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xuICB9XG5cbiAgaWYgKCB0aGlzLm9wdGlvbnMuZGVidWcgJiYgY29uc29sZSApIHtcbiAgICBjb25zb2xlLmxvZyggYHByb2dyZXNzOiAke21lc3NhZ2V9YCwgaW1hZ2UsIGVsZW0gKTtcbiAgfVxufTtcblxuSW1hZ2VzTG9hZGVkLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICBsZXQgZXZlbnROYW1lID0gdGhpcy5oYXNBbnlCcm9rZW4gPyAnZmFpbCcgOiAnZG9uZSc7XG4gIHRoaXMuaXNDb21wbGV0ZSA9IHRydWU7XG4gIHRoaXMuZW1pdEV2ZW50KCBldmVudE5hbWUsIFsgdGhpcyBdICk7XG4gIHRoaXMuZW1pdEV2ZW50KCAnYWx3YXlzJywgWyB0aGlzIF0gKTtcbiAgaWYgKCB0aGlzLmpxRGVmZXJyZWQgKSB7XG4gICAgbGV0IGpxTWV0aG9kID0gdGhpcy5oYXNBbnlCcm9rZW4gPyAncmVqZWN0JyA6ICdyZXNvbHZlJztcbiAgICB0aGlzLmpxRGVmZXJyZWRbIGpxTWV0aG9kIF0oIHRoaXMgKTtcbiAgfVxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbmZ1bmN0aW9uIExvYWRpbmdJbWFnZSggaW1nICkge1xuICB0aGlzLmltZyA9IGltZztcbn1cblxuTG9hZGluZ0ltYWdlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEV2RW1pdHRlci5wcm90b3R5cGUgKTtcblxuTG9hZGluZ0ltYWdlLnByb3RvdHlwZS5jaGVjayA9IGZ1bmN0aW9uKCkge1xuICAvLyBJZiBjb21wbGV0ZSBpcyB0cnVlIGFuZCBicm93c2VyIHN1cHBvcnRzIG5hdHVyYWwgc2l6ZXMsXG4gIC8vIHRyeSB0byBjaGVjayBmb3IgaW1hZ2Ugc3RhdHVzIG1hbnVhbGx5LlxuICBsZXQgaXNDb21wbGV0ZSA9IHRoaXMuZ2V0SXNJbWFnZUNvbXBsZXRlKCk7XG4gIGlmICggaXNDb21wbGV0ZSApIHtcbiAgICAvLyByZXBvcnQgYmFzZWQgb24gbmF0dXJhbFdpZHRoXG4gICAgdGhpcy5jb25maXJtKCB0aGlzLmltZy5uYXR1cmFsV2lkdGggIT09IDAsICduYXR1cmFsV2lkdGgnICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgbm9uZSBvZiB0aGUgY2hlY2tzIGFib3ZlIG1hdGNoZWQsIHNpbXVsYXRlIGxvYWRpbmcgb24gZGV0YWNoZWQgZWxlbWVudC5cbiAgdGhpcy5wcm94eUltYWdlID0gbmV3IEltYWdlKCk7XG4gIC8vIGFkZCBjcm9zc09yaWdpbiBhdHRyaWJ1dGUuICMyMDRcbiAgaWYgKCB0aGlzLmltZy5jcm9zc09yaWdpbiApIHtcbiAgICB0aGlzLnByb3h5SW1hZ2UuY3Jvc3NPcmlnaW4gPSB0aGlzLmltZy5jcm9zc09yaWdpbjtcbiAgfVxuICB0aGlzLnByb3h5SW1hZ2UuYWRkRXZlbnRMaXN0ZW5lciggJ2xvYWQnLCB0aGlzICk7XG4gIHRoaXMucHJveHlJbWFnZS5hZGRFdmVudExpc3RlbmVyKCAnZXJyb3InLCB0aGlzICk7XG4gIC8vIGJpbmQgdG8gaW1hZ2UgYXMgd2VsbCBmb3IgRmlyZWZveC4gIzE5MVxuICB0aGlzLmltZy5hZGRFdmVudExpc3RlbmVyKCAnbG9hZCcsIHRoaXMgKTtcbiAgdGhpcy5pbWcuYWRkRXZlbnRMaXN0ZW5lciggJ2Vycm9yJywgdGhpcyApO1xuICB0aGlzLnByb3h5SW1hZ2Uuc3JjID0gdGhpcy5pbWcuY3VycmVudFNyYyB8fCB0aGlzLmltZy5zcmM7XG59O1xuXG5Mb2FkaW5nSW1hZ2UucHJvdG90eXBlLmdldElzSW1hZ2VDb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAvLyBjaGVjayBmb3Igbm9uLXplcm8sIG5vbi11bmRlZmluZWQgbmF0dXJhbFdpZHRoXG4gIC8vIGZpeGVzIFNhZmFyaStJbmZpbml0ZVNjcm9sbCtNYXNvbnJ5IGJ1ZyBpbmZpbml0ZS1zY3JvbGwjNjcxXG4gIHJldHVybiB0aGlzLmltZy5jb21wbGV0ZSAmJiB0aGlzLmltZy5uYXR1cmFsV2lkdGg7XG59O1xuXG5Mb2FkaW5nSW1hZ2UucHJvdG90eXBlLmNvbmZpcm0gPSBmdW5jdGlvbiggaXNMb2FkZWQsIG1lc3NhZ2UgKSB7XG4gIHRoaXMuaXNMb2FkZWQgPSBpc0xvYWRlZDtcbiAgbGV0IHsgcGFyZW50Tm9kZSB9ID0gdGhpcy5pbWc7XG4gIC8vIGVtaXQgcHJvZ3Jlc3Mgd2l0aCBwYXJlbnQgPHBpY3R1cmU+IG9yIHNlbGYgPGltZz5cbiAgbGV0IGVsZW0gPSBwYXJlbnROb2RlLm5vZGVOYW1lID09PSAnUElDVFVSRScgPyBwYXJlbnROb2RlIDogdGhpcy5pbWc7XG4gIHRoaXMuZW1pdEV2ZW50KCAncHJvZ3Jlc3MnLCBbIHRoaXMsIGVsZW0sIG1lc3NhZ2UgXSApO1xufTtcblxuLy8gLS0tLS0gZXZlbnRzIC0tLS0tIC8vXG5cbi8vIHRyaWdnZXIgc3BlY2lmaWVkIGhhbmRsZXIgZm9yIGV2ZW50IHR5cGVcbkxvYWRpbmdJbWFnZS5wcm90b3R5cGUuaGFuZGxlRXZlbnQgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG4gIGxldCBtZXRob2QgPSAnb24nICsgZXZlbnQudHlwZTtcbiAgaWYgKCB0aGlzWyBtZXRob2QgXSApIHtcbiAgICB0aGlzWyBtZXRob2QgXSggZXZlbnQgKTtcbiAgfVxufTtcblxuTG9hZGluZ0ltYWdlLnByb3RvdHlwZS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5jb25maXJtKCB0cnVlLCAnb25sb2FkJyApO1xuICB0aGlzLnVuYmluZEV2ZW50cygpO1xufTtcblxuTG9hZGluZ0ltYWdlLnByb3RvdHlwZS5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuY29uZmlybSggZmFsc2UsICdvbmVycm9yJyApO1xuICB0aGlzLnVuYmluZEV2ZW50cygpO1xufTtcblxuTG9hZGluZ0ltYWdlLnByb3RvdHlwZS51bmJpbmRFdmVudHMgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5wcm94eUltYWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdsb2FkJywgdGhpcyApO1xuICB0aGlzLnByb3h5SW1hZ2UucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2Vycm9yJywgdGhpcyApO1xuICB0aGlzLmltZy5yZW1vdmVFdmVudExpc3RlbmVyKCAnbG9hZCcsIHRoaXMgKTtcbiAgdGhpcy5pbWcucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2Vycm9yJywgdGhpcyApO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQmFja2dyb3VuZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG5mdW5jdGlvbiBCYWNrZ3JvdW5kKCB1cmwsIGVsZW1lbnQgKSB7XG4gIHRoaXMudXJsID0gdXJsO1xuICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICB0aGlzLmltZyA9IG5ldyBJbWFnZSgpO1xufVxuXG4vLyBpbmhlcml0IExvYWRpbmdJbWFnZSBwcm90b3R5cGVcbkJhY2tncm91bmQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTG9hZGluZ0ltYWdlLnByb3RvdHlwZSApO1xuXG5CYWNrZ3JvdW5kLnByb3RvdHlwZS5jaGVjayA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmltZy5hZGRFdmVudExpc3RlbmVyKCAnbG9hZCcsIHRoaXMgKTtcbiAgdGhpcy5pbWcuYWRkRXZlbnRMaXN0ZW5lciggJ2Vycm9yJywgdGhpcyApO1xuICB0aGlzLmltZy5zcmMgPSB0aGlzLnVybDtcbiAgLy8gY2hlY2sgaWYgaW1hZ2UgaXMgYWxyZWFkeSBjb21wbGV0ZVxuICBsZXQgaXNDb21wbGV0ZSA9IHRoaXMuZ2V0SXNJbWFnZUNvbXBsZXRlKCk7XG4gIGlmICggaXNDb21wbGV0ZSApIHtcbiAgICB0aGlzLmNvbmZpcm0oIHRoaXMuaW1nLm5hdHVyYWxXaWR0aCAhPT0gMCwgJ25hdHVyYWxXaWR0aCcgKTtcbiAgICB0aGlzLnVuYmluZEV2ZW50cygpO1xuICB9XG59O1xuXG5CYWNrZ3JvdW5kLnByb3RvdHlwZS51bmJpbmRFdmVudHMgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5pbWcucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2xvYWQnLCB0aGlzICk7XG4gIHRoaXMuaW1nLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdlcnJvcicsIHRoaXMgKTtcbn07XG5cbkJhY2tncm91bmQucHJvdG90eXBlLmNvbmZpcm0gPSBmdW5jdGlvbiggaXNMb2FkZWQsIG1lc3NhZ2UgKSB7XG4gIHRoaXMuaXNMb2FkZWQgPSBpc0xvYWRlZDtcbiAgdGhpcy5lbWl0RXZlbnQoICdwcm9ncmVzcycsIFsgdGhpcywgdGhpcy5lbGVtZW50LCBtZXNzYWdlIF0gKTtcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGpRdWVyeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG5JbWFnZXNMb2FkZWQubWFrZUpRdWVyeVBsdWdpbiA9IGZ1bmN0aW9uKCBqUXVlcnkgKSB7XG4gIGpRdWVyeSA9IGpRdWVyeSB8fCB3aW5kb3cualF1ZXJ5O1xuICBpZiAoICFqUXVlcnkgKSByZXR1cm47XG5cbiAgLy8gc2V0IGxvY2FsIHZhcmlhYmxlXG4gICQgPSBqUXVlcnk7XG4gIC8vICQoKS5pbWFnZXNMb2FkZWQoKVxuICAkLmZuLmltYWdlc0xvYWRlZCA9IGZ1bmN0aW9uKCBvcHRpb25zLCBvbkFsd2F5cyApIHtcbiAgICBsZXQgaW5zdGFuY2UgPSBuZXcgSW1hZ2VzTG9hZGVkKCB0aGlzLCBvcHRpb25zLCBvbkFsd2F5cyApO1xuICAgIHJldHVybiBpbnN0YW5jZS5qcURlZmVycmVkLnByb21pc2UoICQoIHRoaXMgKSApO1xuICB9O1xufTtcbi8vIHRyeSBtYWtpbmcgcGx1Z2luXG5JbWFnZXNMb2FkZWQubWFrZUpRdWVyeVBsdWdpbigpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxucmV0dXJuIEltYWdlc0xvYWRlZDtcblxufSApO1xuIiwiLyoqXG4gKiBTU1IgV2luZG93IDQuMC4yXG4gKiBCZXR0ZXIgaGFuZGxpbmcgZm9yIHdpbmRvdyBvYmplY3QgaW4gU1NSIGVudmlyb25tZW50XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbm9saW1pdHM0d2ViL3Nzci13aW5kb3dcbiAqXG4gKiBDb3B5cmlnaHQgMjAyMSwgVmxhZGltaXIgS2hhcmxhbXBpZGlcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBNSVRcbiAqXG4gKiBSZWxlYXNlZCBvbjogRGVjZW1iZXIgMTMsIDIwMjFcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICAgIHJldHVybiAob2JqICE9PSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmXG4gICAgICAgICdjb25zdHJ1Y3RvcicgaW4gb2JqICYmXG4gICAgICAgIG9iai5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KTtcbn1cbmZ1bmN0aW9uIGV4dGVuZCh0YXJnZXQgPSB7fSwgc3JjID0ge30pIHtcbiAgICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHRhcmdldFtrZXldID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KHNyY1trZXldKSAmJlxuICAgICAgICAgICAgaXNPYmplY3QodGFyZ2V0W2tleV0pICYmXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhzcmNba2V5XSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZXh0ZW5kKHRhcmdldFtrZXldLCBzcmNba2V5XSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuY29uc3Qgc3NyRG9jdW1lbnQgPSB7XG4gICAgYm9keToge30sXG4gICAgYWRkRXZlbnRMaXN0ZW5lcigpIHsgfSxcbiAgICByZW1vdmVFdmVudExpc3RlbmVyKCkgeyB9LFxuICAgIGFjdGl2ZUVsZW1lbnQ6IHtcbiAgICAgICAgYmx1cigpIHsgfSxcbiAgICAgICAgbm9kZU5hbWU6ICcnLFxuICAgIH0sXG4gICAgcXVlcnlTZWxlY3RvcigpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBxdWVyeVNlbGVjdG9yQWxsKCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfSxcbiAgICBnZXRFbGVtZW50QnlJZCgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBjcmVhdGVFdmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluaXRFdmVudCgpIHsgfSxcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGNyZWF0ZUVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICBjaGlsZE5vZGVzOiBbXSxcbiAgICAgICAgICAgIHN0eWxlOiB7fSxcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZSgpIHsgfSxcbiAgICAgICAgICAgIGdldEVsZW1lbnRzQnlUYWdOYW1lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBjcmVhdGVFbGVtZW50TlMoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9LFxuICAgIGltcG9ydE5vZGUoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgbG9jYXRpb246IHtcbiAgICAgICAgaGFzaDogJycsXG4gICAgICAgIGhvc3Q6ICcnLFxuICAgICAgICBob3N0bmFtZTogJycsXG4gICAgICAgIGhyZWY6ICcnLFxuICAgICAgICBvcmlnaW46ICcnLFxuICAgICAgICBwYXRobmFtZTogJycsXG4gICAgICAgIHByb3RvY29sOiAnJyxcbiAgICAgICAgc2VhcmNoOiAnJyxcbiAgICB9LFxufTtcbmZ1bmN0aW9uIGdldERvY3VtZW50KCkge1xuICAgIGNvbnN0IGRvYyA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHt9O1xuICAgIGV4dGVuZChkb2MsIHNzckRvY3VtZW50KTtcbiAgICByZXR1cm4gZG9jO1xufVxuXG5jb25zdCBzc3JXaW5kb3cgPSB7XG4gICAgZG9jdW1lbnQ6IHNzckRvY3VtZW50LFxuICAgIG5hdmlnYXRvcjoge1xuICAgICAgICB1c2VyQWdlbnQ6ICcnLFxuICAgIH0sXG4gICAgbG9jYXRpb246IHtcbiAgICAgICAgaGFzaDogJycsXG4gICAgICAgIGhvc3Q6ICcnLFxuICAgICAgICBob3N0bmFtZTogJycsXG4gICAgICAgIGhyZWY6ICcnLFxuICAgICAgICBvcmlnaW46ICcnLFxuICAgICAgICBwYXRobmFtZTogJycsXG4gICAgICAgIHByb3RvY29sOiAnJyxcbiAgICAgICAgc2VhcmNoOiAnJyxcbiAgICB9LFxuICAgIGhpc3Rvcnk6IHtcbiAgICAgICAgcmVwbGFjZVN0YXRlKCkgeyB9LFxuICAgICAgICBwdXNoU3RhdGUoKSB7IH0sXG4gICAgICAgIGdvKCkgeyB9LFxuICAgICAgICBiYWNrKCkgeyB9LFxuICAgIH0sXG4gICAgQ3VzdG9tRXZlbnQ6IGZ1bmN0aW9uIEN1c3RvbUV2ZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGFkZEV2ZW50TGlzdGVuZXIoKSB7IH0sXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcigpIHsgfSxcbiAgICBnZXRDb21wdXRlZFN0eWxlKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0UHJvcGVydHlWYWx1ZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgSW1hZ2UoKSB7IH0sXG4gICAgRGF0ZSgpIHsgfSxcbiAgICBzY3JlZW46IHt9LFxuICAgIHNldFRpbWVvdXQoKSB7IH0sXG4gICAgY2xlYXJUaW1lb3V0KCkgeyB9LFxuICAgIG1hdGNoTWVkaWEoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9LFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICAgIH0sXG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgfSxcbn07XG5mdW5jdGlvbiBnZXRXaW5kb3coKSB7XG4gICAgY29uc3Qgd2luID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB7fTtcbiAgICBleHRlbmQod2luLCBzc3JXaW5kb3cpO1xuICAgIHJldHVybiB3aW47XG59XG5cbmV4cG9ydCB7IGV4dGVuZCwgZ2V0RG9jdW1lbnQsIGdldFdpbmRvdywgc3NyRG9jdW1lbnQsIHNzcldpbmRvdyB9O1xuIiwiLyoqXG4gKiBEb203IDQuMC42XG4gKiBNaW5pbWFsaXN0aWMgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBET00gbWFuaXB1bGF0aW9uLCB3aXRoIGEgalF1ZXJ5LWNvbXBhdGlibGUgQVBJXG4gKiBodHRwczovL2ZyYW1ld29yazcuaW8vZG9jcy9kb203Lmh0bWxcbiAqXG4gKiBDb3B5cmlnaHQgMjAyMywgVmxhZGltaXIgS2hhcmxhbXBpZGlcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBNSVRcbiAqXG4gKiBSZWxlYXNlZCBvbjogRmVicnVhcnkgMiwgMjAyM1xuICovXG5pbXBvcnQgeyBnZXRXaW5kb3csIGdldERvY3VtZW50IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5mdW5jdGlvbiBtYWtlUmVhY3RpdmUob2JqKSB7XG4gIGNvbnN0IHByb3RvID0gb2JqLl9fcHJvdG9fXztcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ19fcHJvdG9fXycsIHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gcHJvdG87XG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgcHJvdG8uX19wcm90b19fID0gdmFsdWU7XG4gICAgfVxuXG4gIH0pO1xufVxuXG5jbGFzcyBEb203IGV4dGVuZHMgQXJyYXkge1xuICBjb25zdHJ1Y3RvcihpdGVtcykge1xuICAgIGlmICh0eXBlb2YgaXRlbXMgPT09ICdudW1iZXInKSB7XG4gICAgICBzdXBlcihpdGVtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyKC4uLihpdGVtcyB8fCBbXSkpO1xuICAgICAgbWFrZVJlYWN0aXZlKHRoaXMpO1xuICAgIH1cbiAgfVxuXG59XG5cbmZ1bmN0aW9uIGFycmF5RmxhdChhcnIgPSBbXSkge1xuICBjb25zdCByZXMgPSBbXTtcbiAgYXJyLmZvckVhY2goZWwgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGVsKSkge1xuICAgICAgcmVzLnB1c2goLi4uYXJyYXlGbGF0KGVsKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcy5wdXNoKGVsKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyLCBjYWxsYmFjaykge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGFyciwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gYXJyYXlVbmlxdWUoYXJyKSB7XG4gIGNvbnN0IHVuaXF1ZUFycmF5ID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAodW5pcXVlQXJyYXkuaW5kZXhPZihhcnJbaV0pID09PSAtMSkgdW5pcXVlQXJyYXkucHVzaChhcnJbaV0pO1xuICB9XG5cbiAgcmV0dXJuIHVuaXF1ZUFycmF5O1xufVxuZnVuY3Rpb24gdG9DYW1lbENhc2Uoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8tKC4pL2csIChtYXRjaCwgZ3JvdXApID0+IGdyb3VwLnRvVXBwZXJDYXNlKCkpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblxuZnVuY3Rpb24gcXNhKHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gIGlmICh0eXBlb2Ygc2VsZWN0b3IgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIFtzZWxlY3Rvcl07XG4gIH1cblxuICBjb25zdCBhID0gW107XG4gIGNvbnN0IHJlcyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBhLnB1c2gocmVzW2ldKTtcbiAgfVxuXG4gIHJldHVybiBhO1xufVxuXG5mdW5jdGlvbiAkKHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gIGxldCBhcnIgPSBbXTtcblxuICBpZiAoIWNvbnRleHQgJiYgc2VsZWN0b3IgaW5zdGFuY2VvZiBEb203KSB7XG4gICAgcmV0dXJuIHNlbGVjdG9yO1xuICB9XG5cbiAgaWYgKCFzZWxlY3Rvcikge1xuICAgIHJldHVybiBuZXcgRG9tNyhhcnIpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBodG1sID0gc2VsZWN0b3IudHJpbSgpO1xuXG4gICAgaWYgKGh0bWwuaW5kZXhPZignPCcpID49IDAgJiYgaHRtbC5pbmRleE9mKCc+JykgPj0gMCkge1xuICAgICAgbGV0IHRvQ3JlYXRlID0gJ2Rpdic7XG4gICAgICBpZiAoaHRtbC5pbmRleE9mKCc8bGknKSA9PT0gMCkgdG9DcmVhdGUgPSAndWwnO1xuICAgICAgaWYgKGh0bWwuaW5kZXhPZignPHRyJykgPT09IDApIHRvQ3JlYXRlID0gJ3Rib2R5JztcbiAgICAgIGlmIChodG1sLmluZGV4T2YoJzx0ZCcpID09PSAwIHx8IGh0bWwuaW5kZXhPZignPHRoJykgPT09IDApIHRvQ3JlYXRlID0gJ3RyJztcbiAgICAgIGlmIChodG1sLmluZGV4T2YoJzx0Ym9keScpID09PSAwKSB0b0NyZWF0ZSA9ICd0YWJsZSc7XG4gICAgICBpZiAoaHRtbC5pbmRleE9mKCc8b3B0aW9uJykgPT09IDApIHRvQ3JlYXRlID0gJ3NlbGVjdCc7XG4gICAgICBjb25zdCB0ZW1wUGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0b0NyZWF0ZSk7XG4gICAgICB0ZW1wUGFyZW50LmlubmVySFRNTCA9IGh0bWw7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVtcFBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGFyci5wdXNoKHRlbXBQYXJlbnQuY2hpbGROb2Rlc1tpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyciA9IHFzYShzZWxlY3Rvci50cmltKCksIGNvbnRleHQgfHwgZG9jdW1lbnQpO1xuICAgIH0gLy8gYXJyID0gcXNhKHNlbGVjdG9yLCBkb2N1bWVudCk7XG5cbiAgfSBlbHNlIGlmIChzZWxlY3Rvci5ub2RlVHlwZSB8fCBzZWxlY3RvciA9PT0gd2luZG93IHx8IHNlbGVjdG9yID09PSBkb2N1bWVudCkge1xuICAgIGFyci5wdXNoKHNlbGVjdG9yKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdG9yKSkge1xuICAgIGlmIChzZWxlY3RvciBpbnN0YW5jZW9mIERvbTcpIHJldHVybiBzZWxlY3RvcjtcbiAgICBhcnIgPSBzZWxlY3RvcjtcbiAgfVxuXG4gIHJldHVybiBuZXcgRG9tNyhhcnJheVVuaXF1ZShhcnIpKTtcbn1cblxuJC5mbiA9IERvbTcucHJvdG90eXBlO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblxuZnVuY3Rpb24gYWRkQ2xhc3MoLi4uY2xhc3Nlcykge1xuICBjb25zdCBjbGFzc05hbWVzID0gYXJyYXlGbGF0KGNsYXNzZXMubWFwKGMgPT4gYy5zcGxpdCgnICcpKSk7XG4gIHRoaXMuZm9yRWFjaChlbCA9PiB7XG4gICAgZWwuY2xhc3NMaXN0LmFkZCguLi5jbGFzc05hbWVzKTtcbiAgfSk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDbGFzcyguLi5jbGFzc2VzKSB7XG4gIGNvbnN0IGNsYXNzTmFtZXMgPSBhcnJheUZsYXQoY2xhc3Nlcy5tYXAoYyA9PiBjLnNwbGl0KCcgJykpKTtcbiAgdGhpcy5mb3JFYWNoKGVsID0+IHtcbiAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKC4uLmNsYXNzTmFtZXMpO1xuICB9KTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZUNsYXNzKC4uLmNsYXNzZXMpIHtcbiAgY29uc3QgY2xhc3NOYW1lcyA9IGFycmF5RmxhdChjbGFzc2VzLm1hcChjID0+IGMuc3BsaXQoJyAnKSkpO1xuICB0aGlzLmZvckVhY2goZWwgPT4ge1xuICAgIGNsYXNzTmFtZXMuZm9yRWFjaChjbGFzc05hbWUgPT4ge1xuICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZShjbGFzc05hbWUpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGFzQ2xhc3MoLi4uY2xhc3Nlcykge1xuICBjb25zdCBjbGFzc05hbWVzID0gYXJyYXlGbGF0KGNsYXNzZXMubWFwKGMgPT4gYy5zcGxpdCgnICcpKSk7XG4gIHJldHVybiBhcnJheUZpbHRlcih0aGlzLCBlbCA9PiB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZXMuZmlsdGVyKGNsYXNzTmFtZSA9PiBlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkubGVuZ3RoID4gMDtcbiAgfSkubGVuZ3RoID4gMDtcbn1cblxuZnVuY3Rpb24gYXR0cihhdHRycywgdmFsdWUpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGF0dHJzID09PSAnc3RyaW5nJykge1xuICAgIC8vIEdldCBhdHRyXG4gICAgaWYgKHRoaXNbMF0pIHJldHVybiB0aGlzWzBdLmdldEF0dHJpYnV0ZShhdHRycyk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSAvLyBTZXQgYXR0cnNcblxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBTdHJpbmdcbiAgICAgIHRoaXNbaV0uc2V0QXR0cmlidXRlKGF0dHJzLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE9iamVjdFxuICAgICAgZm9yIChjb25zdCBhdHRyTmFtZSBpbiBhdHRycykge1xuICAgICAgICB0aGlzW2ldW2F0dHJOYW1lXSA9IGF0dHJzW2F0dHJOYW1lXTtcbiAgICAgICAgdGhpc1tpXS5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUsIGF0dHJzW2F0dHJOYW1lXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUF0dHIoYXR0cikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGlzW2ldLnJlbW92ZUF0dHJpYnV0ZShhdHRyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBwcm9wKHByb3BzLCB2YWx1ZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgcHJvcHMgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gR2V0IHByb3BcbiAgICBpZiAodGhpc1swXSkgcmV0dXJuIHRoaXNbMF1bcHJvcHNdO1xuICB9IGVsc2Uge1xuICAgIC8vIFNldCBwcm9wc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgLy8gU3RyaW5nXG4gICAgICAgIHRoaXNbaV1bcHJvcHNdID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgZm9yIChjb25zdCBwcm9wTmFtZSBpbiBwcm9wcykge1xuICAgICAgICAgIHRoaXNbaV1bcHJvcE5hbWVdID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gZGF0YShrZXksIHZhbHVlKSB7XG4gIGxldCBlbDtcblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIGVsID0gdGhpc1swXTtcbiAgICBpZiAoIWVsKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBHZXQgdmFsdWVcblxuICAgIGlmIChlbC5kb203RWxlbWVudERhdGFTdG9yYWdlICYmIGtleSBpbiBlbC5kb203RWxlbWVudERhdGFTdG9yYWdlKSB7XG4gICAgICByZXR1cm4gZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZVtrZXldO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGFLZXkgPSBlbC5nZXRBdHRyaWJ1dGUoYGRhdGEtJHtrZXl9YCk7XG5cbiAgICBpZiAoZGF0YUtleSkge1xuICAgICAgcmV0dXJuIGRhdGFLZXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSAvLyBTZXQgdmFsdWVcblxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGVsID0gdGhpc1tpXTtcbiAgICBpZiAoIWVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2UpIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2UgPSB7fTtcbiAgICBlbC5kb203RWxlbWVudERhdGFTdG9yYWdlW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiByZW1vdmVEYXRhKGtleSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBlbCA9IHRoaXNbaV07XG5cbiAgICBpZiAoZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZSAmJiBlbC5kb203RWxlbWVudERhdGFTdG9yYWdlW2tleV0pIHtcbiAgICAgIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2Vba2V5XSA9IG51bGw7XG4gICAgICBkZWxldGUgZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZVtrZXldO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkYXRhc2V0KCkge1xuICBjb25zdCBlbCA9IHRoaXNbMF07XG4gIGlmICghZWwpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGRhdGFzZXQgPSB7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIGlmIChlbC5kYXRhc2V0KSB7XG4gICAgZm9yIChjb25zdCBkYXRhS2V5IGluIGVsLmRhdGFzZXQpIHtcbiAgICAgIGRhdGFzZXRbZGF0YUtleV0gPSBlbC5kYXRhc2V0W2RhdGFLZXldO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsLmF0dHJpYnV0ZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IGF0dHIgPSBlbC5hdHRyaWJ1dGVzW2ldO1xuXG4gICAgICBpZiAoYXR0ci5uYW1lLmluZGV4T2YoJ2RhdGEtJykgPj0gMCkge1xuICAgICAgICBkYXRhc2V0W3RvQ2FtZWxDYXNlKGF0dHIubmFtZS5zcGxpdCgnZGF0YS0nKVsxXSldID0gYXR0ci52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhc2V0KSB7XG4gICAgaWYgKGRhdGFzZXRba2V5XSA9PT0gJ2ZhbHNlJykgZGF0YXNldFtrZXldID0gZmFsc2U7ZWxzZSBpZiAoZGF0YXNldFtrZXldID09PSAndHJ1ZScpIGRhdGFzZXRba2V5XSA9IHRydWU7ZWxzZSBpZiAocGFyc2VGbG9hdChkYXRhc2V0W2tleV0pID09PSBkYXRhc2V0W2tleV0gKiAxKSBkYXRhc2V0W2tleV0gKj0gMTtcbiAgfVxuXG4gIHJldHVybiBkYXRhc2V0O1xufVxuXG5mdW5jdGlvbiB2YWwodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBnZXQgdmFsdWVcbiAgICBjb25zdCBlbCA9IHRoaXNbMF07XG4gICAgaWYgKCFlbCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGlmIChlbC5tdWx0aXBsZSAmJiBlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnc2VsZWN0Jykge1xuICAgICAgY29uc3QgdmFsdWVzID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWwuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKGVsLnNlbGVjdGVkT3B0aW9uc1tpXS52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsLnZhbHVlO1xuICB9IC8vIHNldCB2YWx1ZVxuXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3QgZWwgPSB0aGlzW2ldO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIGVsLm11bHRpcGxlICYmIGVsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzZWxlY3QnKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsLm9wdGlvbnMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgZWwub3B0aW9uc1tqXS5zZWxlY3RlZCA9IHZhbHVlLmluZGV4T2YoZWwub3B0aW9uc1tqXS52YWx1ZSkgPj0gMDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWwudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gdmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMudmFsKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtKHRyYW5zZm9ybSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGlzW2ldLnN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiB0cmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoaXNbaV0uc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uICE9PSAnc3RyaW5nJyA/IGAke2R1cmF0aW9ufW1zYCA6IGR1cmF0aW9uO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIG9uKC4uLmFyZ3MpIHtcbiAgbGV0IFtldmVudFR5cGUsIHRhcmdldFNlbGVjdG9yLCBsaXN0ZW5lciwgY2FwdHVyZV0gPSBhcmdzO1xuXG4gIGlmICh0eXBlb2YgYXJnc1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFtldmVudFR5cGUsIGxpc3RlbmVyLCBjYXB0dXJlXSA9IGFyZ3M7XG4gICAgdGFyZ2V0U2VsZWN0b3IgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoIWNhcHR1cmUpIGNhcHR1cmUgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBoYW5kbGVMaXZlRXZlbnQoZSkge1xuICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0O1xuICAgIGlmICghdGFyZ2V0KSByZXR1cm47XG4gICAgY29uc3QgZXZlbnREYXRhID0gZS50YXJnZXQuZG9tN0V2ZW50RGF0YSB8fCBbXTtcblxuICAgIGlmIChldmVudERhdGEuaW5kZXhPZihlKSA8IDApIHtcbiAgICAgIGV2ZW50RGF0YS51bnNoaWZ0KGUpO1xuICAgIH1cblxuICAgIGlmICgkKHRhcmdldCkuaXModGFyZ2V0U2VsZWN0b3IpKSBsaXN0ZW5lci5hcHBseSh0YXJnZXQsIGV2ZW50RGF0YSk7ZWxzZSB7XG4gICAgICBjb25zdCBwYXJlbnRzID0gJCh0YXJnZXQpLnBhcmVudHMoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IHBhcmVudHMubGVuZ3RoOyBrICs9IDEpIHtcbiAgICAgICAgaWYgKCQocGFyZW50c1trXSkuaXModGFyZ2V0U2VsZWN0b3IpKSBsaXN0ZW5lci5hcHBseShwYXJlbnRzW2tdLCBldmVudERhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUV2ZW50KGUpIHtcbiAgICBjb25zdCBldmVudERhdGEgPSBlICYmIGUudGFyZ2V0ID8gZS50YXJnZXQuZG9tN0V2ZW50RGF0YSB8fCBbXSA6IFtdO1xuXG4gICAgaWYgKGV2ZW50RGF0YS5pbmRleE9mKGUpIDwgMCkge1xuICAgICAgZXZlbnREYXRhLnVuc2hpZnQoZSk7XG4gICAgfVxuXG4gICAgbGlzdGVuZXIuYXBwbHkodGhpcywgZXZlbnREYXRhKTtcbiAgfVxuXG4gIGNvbnN0IGV2ZW50cyA9IGV2ZW50VHlwZS5zcGxpdCgnICcpO1xuICBsZXQgajtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBlbCA9IHRoaXNbaV07XG5cbiAgICBpZiAoIXRhcmdldFNlbGVjdG9yKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgZXZlbnRzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2pdO1xuICAgICAgICBpZiAoIWVsLmRvbTdMaXN0ZW5lcnMpIGVsLmRvbTdMaXN0ZW5lcnMgPSB7fTtcbiAgICAgICAgaWYgKCFlbC5kb203TGlzdGVuZXJzW2V2ZW50XSkgZWwuZG9tN0xpc3RlbmVyc1tldmVudF0gPSBbXTtcbiAgICAgICAgZWwuZG9tN0xpc3RlbmVyc1tldmVudF0ucHVzaCh7XG4gICAgICAgICAgbGlzdGVuZXIsXG4gICAgICAgICAgcHJveHlMaXN0ZW5lcjogaGFuZGxlRXZlbnRcbiAgICAgICAgfSk7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZUV2ZW50LCBjYXB0dXJlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGl2ZSBldmVudHNcbiAgICAgIGZvciAoaiA9IDA7IGogPCBldmVudHMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBldmVudHNbal07XG4gICAgICAgIGlmICghZWwuZG9tN0xpdmVMaXN0ZW5lcnMpIGVsLmRvbTdMaXZlTGlzdGVuZXJzID0ge307XG4gICAgICAgIGlmICghZWwuZG9tN0xpdmVMaXN0ZW5lcnNbZXZlbnRdKSBlbC5kb203TGl2ZUxpc3RlbmVyc1tldmVudF0gPSBbXTtcbiAgICAgICAgZWwuZG9tN0xpdmVMaXN0ZW5lcnNbZXZlbnRdLnB1c2goe1xuICAgICAgICAgIGxpc3RlbmVyLFxuICAgICAgICAgIHByb3h5TGlzdGVuZXI6IGhhbmRsZUxpdmVFdmVudFxuICAgICAgICB9KTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlTGl2ZUV2ZW50LCBjYXB0dXJlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gb2ZmKC4uLmFyZ3MpIHtcbiAgbGV0IFtldmVudFR5cGUsIHRhcmdldFNlbGVjdG9yLCBsaXN0ZW5lciwgY2FwdHVyZV0gPSBhcmdzO1xuXG4gIGlmICh0eXBlb2YgYXJnc1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFtldmVudFR5cGUsIGxpc3RlbmVyLCBjYXB0dXJlXSA9IGFyZ3M7XG4gICAgdGFyZ2V0U2VsZWN0b3IgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoIWNhcHR1cmUpIGNhcHR1cmUgPSBmYWxzZTtcbiAgY29uc3QgZXZlbnRzID0gZXZlbnRUeXBlLnNwbGl0KCcgJyk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBldmVudCA9IGV2ZW50c1tpXTtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgY29uc3QgZWwgPSB0aGlzW2pdO1xuICAgICAgbGV0IGhhbmRsZXJzO1xuXG4gICAgICBpZiAoIXRhcmdldFNlbGVjdG9yICYmIGVsLmRvbTdMaXN0ZW5lcnMpIHtcbiAgICAgICAgaGFuZGxlcnMgPSBlbC5kb203TGlzdGVuZXJzW2V2ZW50XTtcbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0U2VsZWN0b3IgJiYgZWwuZG9tN0xpdmVMaXN0ZW5lcnMpIHtcbiAgICAgICAgaGFuZGxlcnMgPSBlbC5kb203TGl2ZUxpc3RlbmVyc1tldmVudF07XG4gICAgICB9XG5cbiAgICAgIGlmIChoYW5kbGVycyAmJiBoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChsZXQgayA9IGhhbmRsZXJzLmxlbmd0aCAtIDE7IGsgPj0gMDsgayAtPSAxKSB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJzW2tdO1xuXG4gICAgICAgICAgaWYgKGxpc3RlbmVyICYmIGhhbmRsZXIubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLnByb3h5TGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgICAgICAgICAgaGFuZGxlcnMuc3BsaWNlKGssIDEpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobGlzdGVuZXIgJiYgaGFuZGxlci5saXN0ZW5lciAmJiBoYW5kbGVyLmxpc3RlbmVyLmRvbTdwcm94eSAmJiBoYW5kbGVyLmxpc3RlbmVyLmRvbTdwcm94eSA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIucHJveHlMaXN0ZW5lciwgY2FwdHVyZSk7XG4gICAgICAgICAgICBoYW5kbGVycy5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgfSBlbHNlIGlmICghbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIucHJveHlMaXN0ZW5lciwgY2FwdHVyZSk7XG4gICAgICAgICAgICBoYW5kbGVycy5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIG9uY2UoLi4uYXJncykge1xuICBjb25zdCBkb20gPSB0aGlzO1xuICBsZXQgW2V2ZW50TmFtZSwgdGFyZ2V0U2VsZWN0b3IsIGxpc3RlbmVyLCBjYXB0dXJlXSA9IGFyZ3M7XG5cbiAgaWYgKHR5cGVvZiBhcmdzWzFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgW2V2ZW50TmFtZSwgbGlzdGVuZXIsIGNhcHR1cmVdID0gYXJncztcbiAgICB0YXJnZXRTZWxlY3RvciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uY2VIYW5kbGVyKC4uLmV2ZW50QXJncykge1xuICAgIGxpc3RlbmVyLmFwcGx5KHRoaXMsIGV2ZW50QXJncyk7XG4gICAgZG9tLm9mZihldmVudE5hbWUsIHRhcmdldFNlbGVjdG9yLCBvbmNlSGFuZGxlciwgY2FwdHVyZSk7XG5cbiAgICBpZiAob25jZUhhbmRsZXIuZG9tN3Byb3h5KSB7XG4gICAgICBkZWxldGUgb25jZUhhbmRsZXIuZG9tN3Byb3h5O1xuICAgIH1cbiAgfVxuXG4gIG9uY2VIYW5kbGVyLmRvbTdwcm94eSA9IGxpc3RlbmVyO1xuICByZXR1cm4gZG9tLm9uKGV2ZW50TmFtZSwgdGFyZ2V0U2VsZWN0b3IsIG9uY2VIYW5kbGVyLCBjYXB0dXJlKTtcbn1cblxuZnVuY3Rpb24gdHJpZ2dlciguLi5hcmdzKSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBjb25zdCBldmVudHMgPSBhcmdzWzBdLnNwbGl0KCcgJyk7XG4gIGNvbnN0IGV2ZW50RGF0YSA9IGFyZ3NbMV07XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBldmVudCA9IGV2ZW50c1tpXTtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgY29uc3QgZWwgPSB0aGlzW2pdO1xuXG4gICAgICBpZiAod2luZG93LkN1c3RvbUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGV2dCA9IG5ldyB3aW5kb3cuQ3VzdG9tRXZlbnQoZXZlbnQsIHtcbiAgICAgICAgICBkZXRhaWw6IGV2ZW50RGF0YSxcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGVsLmRvbTdFdmVudERhdGEgPSBhcmdzLmZpbHRlcigoZGF0YSwgZGF0YUluZGV4KSA9PiBkYXRhSW5kZXggPiAwKTtcbiAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgICAgICBlbC5kb203RXZlbnREYXRhID0gW107XG4gICAgICAgIGRlbGV0ZSBlbC5kb203RXZlbnREYXRhO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiB0cmFuc2l0aW9uU3RhcnQoY2FsbGJhY2spIHtcbiAgY29uc3QgZG9tID0gdGhpcztcblxuICBmdW5jdGlvbiBmaXJlQ2FsbEJhY2soZSkge1xuICAgIGlmIChlLnRhcmdldCAhPT0gdGhpcykgcmV0dXJuO1xuICAgIGNhbGxiYWNrLmNhbGwodGhpcywgZSk7XG4gICAgZG9tLm9mZigndHJhbnNpdGlvbnN0YXJ0JywgZmlyZUNhbGxCYWNrKTtcbiAgfVxuXG4gIGlmIChjYWxsYmFjaykge1xuICAgIGRvbS5vbigndHJhbnNpdGlvbnN0YXJ0JywgZmlyZUNhbGxCYWNrKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiB0cmFuc2l0aW9uRW5kKGNhbGxiYWNrKSB7XG4gIGNvbnN0IGRvbSA9IHRoaXM7XG5cbiAgZnVuY3Rpb24gZmlyZUNhbGxCYWNrKGUpIHtcbiAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMpIHJldHVybjtcbiAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGUpO1xuICAgIGRvbS5vZmYoJ3RyYW5zaXRpb25lbmQnLCBmaXJlQ2FsbEJhY2spO1xuICB9XG5cbiAgaWYgKGNhbGxiYWNrKSB7XG4gICAgZG9tLm9uKCd0cmFuc2l0aW9uZW5kJywgZmlyZUNhbGxCYWNrKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBhbmltYXRpb25FbmQoY2FsbGJhY2spIHtcbiAgY29uc3QgZG9tID0gdGhpcztcblxuICBmdW5jdGlvbiBmaXJlQ2FsbEJhY2soZSkge1xuICAgIGlmIChlLnRhcmdldCAhPT0gdGhpcykgcmV0dXJuO1xuICAgIGNhbGxiYWNrLmNhbGwodGhpcywgZSk7XG4gICAgZG9tLm9mZignYW5pbWF0aW9uZW5kJywgZmlyZUNhbGxCYWNrKTtcbiAgfVxuXG4gIGlmIChjYWxsYmFjaykge1xuICAgIGRvbS5vbignYW5pbWF0aW9uZW5kJywgZmlyZUNhbGxCYWNrKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiB3aWR0aCgpIHtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG5cbiAgaWYgKHRoaXNbMF0gPT09IHdpbmRvdykge1xuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgfVxuXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh0aGlzLmNzcygnd2lkdGgnKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gb3V0ZXJXaWR0aChpbmNsdWRlTWFyZ2lucykge1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKGluY2x1ZGVNYXJnaW5zKSB7XG4gICAgICBjb25zdCBzdHlsZXMgPSB0aGlzLnN0eWxlcygpO1xuICAgICAgcmV0dXJuIHRoaXNbMF0ub2Zmc2V0V2lkdGggKyBwYXJzZUZsb2F0KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJnaW4tcmlnaHQnKSkgKyBwYXJzZUZsb2F0KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJnaW4tbGVmdCcpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRXaWR0aDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBoZWlnaHQoKSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuXG4gIGlmICh0aGlzWzBdID09PSB3aW5kb3cpIHtcbiAgICByZXR1cm4gd2luZG93LmlubmVySGVpZ2h0O1xuICB9XG5cbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHRoaXMuY3NzKCdoZWlnaHQnKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gb3V0ZXJIZWlnaHQoaW5jbHVkZU1hcmdpbnMpIHtcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIGlmIChpbmNsdWRlTWFyZ2lucykge1xuICAgICAgY29uc3Qgc3R5bGVzID0gdGhpcy5zdHlsZXMoKTtcbiAgICAgIHJldHVybiB0aGlzWzBdLm9mZnNldEhlaWdodCArIHBhcnNlRmxvYXQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi10b3AnKSkgKyBwYXJzZUZsb2F0KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJnaW4tYm90dG9tJykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzWzBdLm9mZnNldEhlaWdodDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBvZmZzZXQoKSB7XG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICBjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgY29uc3QgZWwgPSB0aGlzWzBdO1xuICAgIGNvbnN0IGJveCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgIGNvbnN0IGNsaWVudFRvcCA9IGVsLmNsaWVudFRvcCB8fCBib2R5LmNsaWVudFRvcCB8fCAwO1xuICAgIGNvbnN0IGNsaWVudExlZnQgPSBlbC5jbGllbnRMZWZ0IHx8IGJvZHkuY2xpZW50TGVmdCB8fCAwO1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9IGVsID09PSB3aW5kb3cgPyB3aW5kb3cuc2Nyb2xsWSA6IGVsLnNjcm9sbFRvcDtcbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gZWwgPT09IHdpbmRvdyA/IHdpbmRvdy5zY3JvbGxYIDogZWwuc2Nyb2xsTGVmdDtcbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiBib3gudG9wICsgc2Nyb2xsVG9wIC0gY2xpZW50VG9wLFxuICAgICAgbGVmdDogYm94LmxlZnQgKyBzY3JvbGxMZWZ0IC0gY2xpZW50TGVmdFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaGlkZSgpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhpc1tpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHNob3coKSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IGVsID0gdGhpc1tpXTtcblxuICAgIGlmIChlbC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICB9XG5cbiAgICBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2Rpc3BsYXknKSA9PT0gJ25vbmUnKSB7XG4gICAgICAvLyBTdGlsbCBub3QgdmlzaWJsZVxuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHN0eWxlcygpIHtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIGlmICh0aGlzWzBdKSByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpc1swXSwgbnVsbCk7XG4gIHJldHVybiB7fTtcbn1cblxuZnVuY3Rpb24gY3NzKHByb3BzLCB2YWx1ZSkge1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgbGV0IGk7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAodHlwZW9mIHByb3BzID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gLmNzcygnd2lkdGgnKVxuICAgICAgaWYgKHRoaXNbMF0pIHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzWzBdLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gLmNzcyh7IHdpZHRoOiAnMTAwcHgnIH0pXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gcHJvcHMpIHtcbiAgICAgICAgICB0aGlzW2ldLnN0eWxlW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgdHlwZW9mIHByb3BzID09PSAnc3RyaW5nJykge1xuICAgIC8vIC5jc3MoJ3dpZHRoJywgJzEwMHB4JylcbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdGhpc1tpXS5zdHlsZVtwcm9wc10gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBlYWNoKGNhbGxiYWNrKSB7XG4gIGlmICghY2FsbGJhY2spIHJldHVybiB0aGlzO1xuICB0aGlzLmZvckVhY2goKGVsLCBpbmRleCkgPT4ge1xuICAgIGNhbGxiYWNrLmFwcGx5KGVsLCBbZWwsIGluZGV4XSk7XG4gIH0pO1xuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrKSB7XG4gIGNvbnN0IHJlc3VsdCA9IGFycmF5RmlsdGVyKHRoaXMsIGNhbGxiYWNrKTtcbiAgcmV0dXJuICQocmVzdWx0KTtcbn1cblxuZnVuY3Rpb24gaHRtbChodG1sKSB7XG4gIGlmICh0eXBlb2YgaHRtbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdGhpc1swXSA/IHRoaXNbMF0uaW5uZXJIVE1MIDogbnVsbDtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoaXNbaV0uaW5uZXJIVE1MID0gaHRtbDtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiB0ZXh0KHRleHQpIHtcbiAgaWYgKHR5cGVvZiB0ZXh0ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0aGlzWzBdID8gdGhpc1swXS50ZXh0Q29udGVudC50cmltKCkgOiBudWxsO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhpc1tpXS50ZXh0Q29udGVudCA9IHRleHQ7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gaXMoc2VsZWN0b3IpIHtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgY29uc3QgZWwgPSB0aGlzWzBdO1xuICBsZXQgY29tcGFyZVdpdGg7XG4gIGxldCBpO1xuICBpZiAoIWVsIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgIGlmIChlbC5tYXRjaGVzKSByZXR1cm4gZWwubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgaWYgKGVsLndlYmtpdE1hdGNoZXNTZWxlY3RvcikgcmV0dXJuIGVsLndlYmtpdE1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgaWYgKGVsLm1zTWF0Y2hlc1NlbGVjdG9yKSByZXR1cm4gZWwubXNNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIGNvbXBhcmVXaXRoID0gJChzZWxlY3Rvcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgY29tcGFyZVdpdGgubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmIChjb21wYXJlV2l0aFtpXSA9PT0gZWwpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzZWxlY3RvciA9PT0gZG9jdW1lbnQpIHtcbiAgICByZXR1cm4gZWwgPT09IGRvY3VtZW50O1xuICB9XG5cbiAgaWYgKHNlbGVjdG9yID09PSB3aW5kb3cpIHtcbiAgICByZXR1cm4gZWwgPT09IHdpbmRvdztcbiAgfVxuXG4gIGlmIChzZWxlY3Rvci5ub2RlVHlwZSB8fCBzZWxlY3RvciBpbnN0YW5jZW9mIERvbTcpIHtcbiAgICBjb21wYXJlV2l0aCA9IHNlbGVjdG9yLm5vZGVUeXBlID8gW3NlbGVjdG9yXSA6IHNlbGVjdG9yO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGNvbXBhcmVXaXRoLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAoY29tcGFyZVdpdGhbaV0gPT09IGVsKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGluZGV4KCkge1xuICBsZXQgY2hpbGQgPSB0aGlzWzBdO1xuICBsZXQgaTtcblxuICBpZiAoY2hpbGQpIHtcbiAgICBpID0gMDsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cbiAgICB3aGlsZSAoKGNoaWxkID0gY2hpbGQucHJldmlvdXNTaWJsaW5nKSAhPT0gbnVsbCkge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxKSBpICs9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGk7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBlcShpbmRleCkge1xuICBpZiAodHlwZW9mIGluZGV4ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIHRoaXM7XG4gIGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXG4gIGlmIChpbmRleCA+IGxlbmd0aCAtIDEpIHtcbiAgICByZXR1cm4gJChbXSk7XG4gIH1cblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgY29uc3QgcmV0dXJuSW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBpZiAocmV0dXJuSW5kZXggPCAwKSByZXR1cm4gJChbXSk7XG4gICAgcmV0dXJuICQoW3RoaXNbcmV0dXJuSW5kZXhdXSk7XG4gIH1cblxuICByZXR1cm4gJChbdGhpc1tpbmRleF1dKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kKC4uLmVscykge1xuICBsZXQgbmV3Q2hpbGQ7XG4gIGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuICBmb3IgKGxldCBrID0gMDsgayA8IGVscy5sZW5ndGg7IGsgKz0gMSkge1xuICAgIG5ld0NoaWxkID0gZWxzW2tdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gbmV3Q2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKHRlbXBEaXYuZmlyc3RDaGlsZCkge1xuICAgICAgICAgIHRoaXNbaV0uYXBwZW5kQ2hpbGQodGVtcERpdi5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChuZXdDaGlsZCBpbnN0YW5jZW9mIERvbTcpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuZXdDaGlsZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgIHRoaXNbaV0uYXBwZW5kQ2hpbGQobmV3Q2hpbGRbal0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2ldLmFwcGVuZENoaWxkKG5ld0NoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gYXBwZW5kVG8ocGFyZW50KSB7XG4gICQocGFyZW50KS5hcHBlbmQodGhpcyk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBwcmVwZW5kKG5ld0NoaWxkKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgbGV0IGk7XG4gIGxldCBqO1xuXG4gIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gbmV3Q2hpbGQ7XG5cbiAgICAgIGZvciAoaiA9IHRlbXBEaXYuY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBqID49IDA7IGogLT0gMSkge1xuICAgICAgICB0aGlzW2ldLmluc2VydEJlZm9yZSh0ZW1wRGl2LmNoaWxkTm9kZXNbal0sIHRoaXNbaV0uY2hpbGROb2Rlc1swXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXdDaGlsZCBpbnN0YW5jZW9mIERvbTcpIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBuZXdDaGlsZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICB0aGlzW2ldLmluc2VydEJlZm9yZShuZXdDaGlsZFtqXSwgdGhpc1tpXS5jaGlsZE5vZGVzWzBdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1tpXS5pbnNlcnRCZWZvcmUobmV3Q2hpbGQsIHRoaXNbaV0uY2hpbGROb2Rlc1swXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHByZXBlbmRUbyhwYXJlbnQpIHtcbiAgJChwYXJlbnQpLnByZXBlbmQodGhpcyk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRCZWZvcmUoc2VsZWN0b3IpIHtcbiAgY29uc3QgYmVmb3JlID0gJChzZWxlY3Rvcik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGJlZm9yZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGJlZm9yZVswXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzW2ldLCBiZWZvcmVbMF0pO1xuICAgIH0gZWxzZSBpZiAoYmVmb3JlLmxlbmd0aCA+IDEpIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYmVmb3JlLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGJlZm9yZVtqXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzW2ldLmNsb25lTm9kZSh0cnVlKSwgYmVmb3JlW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0QWZ0ZXIoc2VsZWN0b3IpIHtcbiAgY29uc3QgYWZ0ZXIgPSAkKHNlbGVjdG9yKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoYWZ0ZXIubGVuZ3RoID09PSAxKSB7XG4gICAgICBhZnRlclswXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzW2ldLCBhZnRlclswXS5uZXh0U2libGluZyk7XG4gICAgfSBlbHNlIGlmIChhZnRlci5sZW5ndGggPiAxKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFmdGVyLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGFmdGVyW2pdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXNbaV0uY2xvbmVOb2RlKHRydWUpLCBhZnRlcltqXS5uZXh0U2libGluZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG5leHQoc2VsZWN0b3IpIHtcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgaWYgKHRoaXNbMF0ubmV4dEVsZW1lbnRTaWJsaW5nICYmICQodGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmcpLmlzKHNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gJChbdGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmddKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICQoW10pO1xuICAgIH1cblxuICAgIGlmICh0aGlzWzBdLm5leHRFbGVtZW50U2libGluZykgcmV0dXJuICQoW3RoaXNbMF0ubmV4dEVsZW1lbnRTaWJsaW5nXSk7XG4gICAgcmV0dXJuICQoW10pO1xuICB9XG5cbiAgcmV0dXJuICQoW10pO1xufVxuXG5mdW5jdGlvbiBuZXh0QWxsKHNlbGVjdG9yKSB7XG4gIGNvbnN0IG5leHRFbHMgPSBbXTtcbiAgbGV0IGVsID0gdGhpc1swXTtcbiAgaWYgKCFlbCkgcmV0dXJuICQoW10pO1xuXG4gIHdoaWxlIChlbC5uZXh0RWxlbWVudFNpYmxpbmcpIHtcbiAgICBjb25zdCBuZXh0ID0gZWwubmV4dEVsZW1lbnRTaWJsaW5nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIGlmICgkKG5leHQpLmlzKHNlbGVjdG9yKSkgbmV4dEVscy5wdXNoKG5leHQpO1xuICAgIH0gZWxzZSBuZXh0RWxzLnB1c2gobmV4dCk7XG5cbiAgICBlbCA9IG5leHQ7XG4gIH1cblxuICByZXR1cm4gJChuZXh0RWxzKTtcbn1cblxuZnVuY3Rpb24gcHJldihzZWxlY3Rvcikge1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZWwgPSB0aGlzWzBdO1xuXG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICBpZiAoZWwucHJldmlvdXNFbGVtZW50U2libGluZyAmJiAkKGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpLmlzKHNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gJChbZWwucHJldmlvdXNFbGVtZW50U2libGluZ10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJChbXSk7XG4gICAgfVxuXG4gICAgaWYgKGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHJldHVybiAkKFtlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXSk7XG4gICAgcmV0dXJuICQoW10pO1xuICB9XG5cbiAgcmV0dXJuICQoW10pO1xufVxuXG5mdW5jdGlvbiBwcmV2QWxsKHNlbGVjdG9yKSB7XG4gIGNvbnN0IHByZXZFbHMgPSBbXTtcbiAgbGV0IGVsID0gdGhpc1swXTtcbiAgaWYgKCFlbCkgcmV0dXJuICQoW10pO1xuXG4gIHdoaWxlIChlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XG4gICAgY29uc3QgcHJldiA9IGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgaWYgKCQocHJldikuaXMoc2VsZWN0b3IpKSBwcmV2RWxzLnB1c2gocHJldik7XG4gICAgfSBlbHNlIHByZXZFbHMucHVzaChwcmV2KTtcblxuICAgIGVsID0gcHJldjtcbiAgfVxuXG4gIHJldHVybiAkKHByZXZFbHMpO1xufVxuXG5mdW5jdGlvbiBzaWJsaW5ncyhzZWxlY3Rvcikge1xuICByZXR1cm4gdGhpcy5uZXh0QWxsKHNlbGVjdG9yKS5hZGQodGhpcy5wcmV2QWxsKHNlbGVjdG9yKSk7XG59XG5cbmZ1bmN0aW9uIHBhcmVudChzZWxlY3Rvcikge1xuICBjb25zdCBwYXJlbnRzID0gW107IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAodGhpc1tpXS5wYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKCQodGhpc1tpXS5wYXJlbnROb2RlKS5pcyhzZWxlY3RvcikpIHBhcmVudHMucHVzaCh0aGlzW2ldLnBhcmVudE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50cy5wdXNoKHRoaXNbaV0ucGFyZW50Tm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICQocGFyZW50cyk7XG59XG5cbmZ1bmN0aW9uIHBhcmVudHMoc2VsZWN0b3IpIHtcbiAgY29uc3QgcGFyZW50cyA9IFtdOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgbGV0IHBhcmVudCA9IHRoaXNbaV0ucGFyZW50Tm9kZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIGlmICgkKHBhcmVudCkuaXMoc2VsZWN0b3IpKSBwYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudHMucHVzaChwYXJlbnQpO1xuICAgICAgfVxuXG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJChwYXJlbnRzKTtcbn1cblxuZnVuY3Rpb24gY2xvc2VzdChzZWxlY3Rvcikge1xuICBsZXQgY2xvc2VzdCA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAkKFtdKTtcbiAgfVxuXG4gIGlmICghY2xvc2VzdC5pcyhzZWxlY3RvcikpIHtcbiAgICBjbG9zZXN0ID0gY2xvc2VzdC5wYXJlbnRzKHNlbGVjdG9yKS5lcSgwKTtcbiAgfVxuXG4gIHJldHVybiBjbG9zZXN0O1xufVxuXG5mdW5jdGlvbiBmaW5kKHNlbGVjdG9yKSB7XG4gIGNvbnN0IGZvdW5kRWxlbWVudHMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBmb3VuZCA9IHRoaXNbaV0ucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGZvdW5kLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICBmb3VuZEVsZW1lbnRzLnB1c2goZm91bmRbal0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAkKGZvdW5kRWxlbWVudHMpO1xufVxuXG5mdW5jdGlvbiBjaGlsZHJlbihzZWxlY3Rvcikge1xuICBjb25zdCBjaGlsZHJlbiA9IFtdOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXNbaV0uY2hpbGRyZW47XG5cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNoaWxkTm9kZXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgIGlmICghc2VsZWN0b3IgfHwgJChjaGlsZE5vZGVzW2pdKS5pcyhzZWxlY3RvcikpIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZE5vZGVzW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJChjaGlsZHJlbik7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHRoaXNbaV0ucGFyZW50Tm9kZSkgdGhpc1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIGRldGFjaCgpIHtcbiAgcmV0dXJuIHRoaXMucmVtb3ZlKCk7XG59XG5cbmZ1bmN0aW9uIGFkZCguLi5lbHMpIHtcbiAgY29uc3QgZG9tID0gdGhpcztcbiAgbGV0IGk7XG4gIGxldCBqO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCB0b0FkZCA9ICQoZWxzW2ldKTtcblxuICAgIGZvciAoaiA9IDA7IGogPCB0b0FkZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgZG9tLnB1c2godG9BZGRbal0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkb207XG59XG5cbmZ1bmN0aW9uIGVtcHR5KCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBlbCA9IHRoaXNbaV07XG5cbiAgICBpZiAoZWwubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICBpZiAoZWwuY2hpbGROb2Rlc1tqXS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgZWwuY2hpbGROb2Rlc1tqXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsLmNoaWxkTm9kZXNbal0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVsLnRleHRDb250ZW50ID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuXG5mdW5jdGlvbiBzY3JvbGxUbyguLi5hcmdzKSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBsZXQgW2xlZnQsIHRvcCwgZHVyYXRpb24sIGVhc2luZywgY2FsbGJhY2tdID0gYXJncztcblxuICBpZiAoYXJncy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIGVhc2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gZWFzaW5nO1xuICAgIFtsZWZ0LCB0b3AsIGR1cmF0aW9uLCBjYWxsYmFjaywgZWFzaW5nXSA9IGFyZ3M7XG4gIH1cblxuICBpZiAodHlwZW9mIGVhc2luZyA9PT0gJ3VuZGVmaW5lZCcpIGVhc2luZyA9ICdzd2luZyc7XG4gIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gYW5pbWF0ZSgpIHtcbiAgICBjb25zdCBlbCA9IHRoaXM7XG4gICAgbGV0IGN1cnJlbnRUb3A7XG4gICAgbGV0IGN1cnJlbnRMZWZ0O1xuICAgIGxldCBtYXhUb3A7XG4gICAgbGV0IG1heExlZnQ7XG4gICAgbGV0IG5ld1RvcDtcbiAgICBsZXQgbmV3TGVmdDtcbiAgICBsZXQgc2Nyb2xsVG9wOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBsZXQgc2Nyb2xsTGVmdDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgbGV0IGFuaW1hdGVUb3AgPSB0b3AgPiAwIHx8IHRvcCA9PT0gMDtcbiAgICBsZXQgYW5pbWF0ZUxlZnQgPSBsZWZ0ID4gMCB8fCBsZWZ0ID09PSAwO1xuXG4gICAgaWYgKHR5cGVvZiBlYXNpbmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBlYXNpbmcgPSAnc3dpbmcnO1xuICAgIH1cblxuICAgIGlmIChhbmltYXRlVG9wKSB7XG4gICAgICBjdXJyZW50VG9wID0gZWwuc2Nyb2xsVG9wO1xuXG4gICAgICBpZiAoIWR1cmF0aW9uKSB7XG4gICAgICAgIGVsLnNjcm9sbFRvcCA9IHRvcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYW5pbWF0ZUxlZnQpIHtcbiAgICAgIGN1cnJlbnRMZWZ0ID0gZWwuc2Nyb2xsTGVmdDtcblxuICAgICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgICBlbC5zY3JvbGxMZWZ0ID0gbGVmdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWR1cmF0aW9uKSByZXR1cm47XG5cbiAgICBpZiAoYW5pbWF0ZVRvcCkge1xuICAgICAgbWF4VG9wID0gZWwuc2Nyb2xsSGVpZ2h0IC0gZWwub2Zmc2V0SGVpZ2h0O1xuICAgICAgbmV3VG9wID0gTWF0aC5tYXgoTWF0aC5taW4odG9wLCBtYXhUb3ApLCAwKTtcbiAgICB9XG5cbiAgICBpZiAoYW5pbWF0ZUxlZnQpIHtcbiAgICAgIG1heExlZnQgPSBlbC5zY3JvbGxXaWR0aCAtIGVsLm9mZnNldFdpZHRoO1xuICAgICAgbmV3TGVmdCA9IE1hdGgubWF4KE1hdGgubWluKGxlZnQsIG1heExlZnQpLCAwKTtcbiAgICB9XG5cbiAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICBpZiAoYW5pbWF0ZVRvcCAmJiBuZXdUb3AgPT09IGN1cnJlbnRUb3ApIGFuaW1hdGVUb3AgPSBmYWxzZTtcbiAgICBpZiAoYW5pbWF0ZUxlZnQgJiYgbmV3TGVmdCA9PT0gY3VycmVudExlZnQpIGFuaW1hdGVMZWZ0ID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiByZW5kZXIodGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpKSB7XG4gICAgICBpZiAoc3RhcnRUaW1lID09PSBudWxsKSB7XG4gICAgICAgIHN0YXJ0VGltZSA9IHRpbWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb2dyZXNzID0gTWF0aC5tYXgoTWF0aC5taW4oKHRpbWUgLSBzdGFydFRpbWUpIC8gZHVyYXRpb24sIDEpLCAwKTtcbiAgICAgIGNvbnN0IGVhc2VQcm9ncmVzcyA9IGVhc2luZyA9PT0gJ2xpbmVhcicgPyBwcm9ncmVzcyA6IDAuNSAtIE1hdGguY29zKHByb2dyZXNzICogTWF0aC5QSSkgLyAyO1xuICAgICAgbGV0IGRvbmU7XG4gICAgICBpZiAoYW5pbWF0ZVRvcCkgc2Nyb2xsVG9wID0gY3VycmVudFRvcCArIGVhc2VQcm9ncmVzcyAqIChuZXdUb3AgLSBjdXJyZW50VG9wKTtcbiAgICAgIGlmIChhbmltYXRlTGVmdCkgc2Nyb2xsTGVmdCA9IGN1cnJlbnRMZWZ0ICsgZWFzZVByb2dyZXNzICogKG5ld0xlZnQgLSBjdXJyZW50TGVmdCk7XG5cbiAgICAgIGlmIChhbmltYXRlVG9wICYmIG5ld1RvcCA+IGN1cnJlbnRUb3AgJiYgc2Nyb2xsVG9wID49IG5ld1RvcCkge1xuICAgICAgICBlbC5zY3JvbGxUb3AgPSBuZXdUb3A7XG4gICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoYW5pbWF0ZVRvcCAmJiBuZXdUb3AgPCBjdXJyZW50VG9wICYmIHNjcm9sbFRvcCA8PSBuZXdUb3ApIHtcbiAgICAgICAgZWwuc2Nyb2xsVG9wID0gbmV3VG9wO1xuICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFuaW1hdGVMZWZ0ICYmIG5ld0xlZnQgPiBjdXJyZW50TGVmdCAmJiBzY3JvbGxMZWZ0ID49IG5ld0xlZnQpIHtcbiAgICAgICAgZWwuc2Nyb2xsTGVmdCA9IG5ld0xlZnQ7XG4gICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoYW5pbWF0ZUxlZnQgJiYgbmV3TGVmdCA8IGN1cnJlbnRMZWZ0ICYmIHNjcm9sbExlZnQgPD0gbmV3TGVmdCkge1xuICAgICAgICBlbC5zY3JvbGxMZWZ0ID0gbmV3TGVmdDtcbiAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoYW5pbWF0ZVRvcCkgZWwuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAgICAgaWYgKGFuaW1hdGVMZWZ0KSBlbC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVuZGVyKTtcbiAgICB9XG5cbiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlbmRlcik7XG4gIH0pO1xufSAvLyBzY3JvbGxUb3AodG9wLCBkdXJhdGlvbiwgZWFzaW5nLCBjYWxsYmFjaykge1xuXG5cbmZ1bmN0aW9uIHNjcm9sbFRvcCguLi5hcmdzKSB7XG4gIGxldCBbdG9wLCBkdXJhdGlvbiwgZWFzaW5nLCBjYWxsYmFja10gPSBhcmdzO1xuXG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2YgZWFzaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgW3RvcCwgZHVyYXRpb24sIGNhbGxiYWNrLCBlYXNpbmddID0gYXJncztcbiAgfVxuXG4gIGNvbnN0IGRvbSA9IHRoaXM7XG5cbiAgaWYgKHR5cGVvZiB0b3AgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKGRvbS5sZW5ndGggPiAwKSByZXR1cm4gZG9tWzBdLnNjcm9sbFRvcDtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBkb20uc2Nyb2xsVG8odW5kZWZpbmVkLCB0b3AsIGR1cmF0aW9uLCBlYXNpbmcsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsTGVmdCguLi5hcmdzKSB7XG4gIGxldCBbbGVmdCwgZHVyYXRpb24sIGVhc2luZywgY2FsbGJhY2tdID0gYXJncztcblxuICBpZiAoYXJncy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIGVhc2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFtsZWZ0LCBkdXJhdGlvbiwgY2FsbGJhY2ssIGVhc2luZ10gPSBhcmdzO1xuICB9XG5cbiAgY29uc3QgZG9tID0gdGhpcztcblxuICBpZiAodHlwZW9mIGxlZnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKGRvbS5sZW5ndGggPiAwKSByZXR1cm4gZG9tWzBdLnNjcm9sbExlZnQ7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZG9tLnNjcm9sbFRvKGxlZnQsIHVuZGVmaW5lZCwgZHVyYXRpb24sIGVhc2luZywgY2FsbGJhY2spO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblxuZnVuY3Rpb24gYW5pbWF0ZShpbml0aWFsUHJvcHMsIGluaXRpYWxQYXJhbXMpIHtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIGNvbnN0IGVscyA9IHRoaXM7XG4gIGNvbnN0IGEgPSB7XG4gICAgcHJvcHM6IE9iamVjdC5hc3NpZ24oe30sIGluaXRpYWxQcm9wcyksXG4gICAgcGFyYW1zOiBPYmplY3QuYXNzaWduKHtcbiAgICAgIGR1cmF0aW9uOiAzMDAsXG4gICAgICBlYXNpbmc6ICdzd2luZycgLy8gb3IgJ2xpbmVhcidcblxuICAgICAgLyogQ2FsbGJhY2tzXG4gICAgICBiZWdpbihlbGVtZW50cylcbiAgICAgIGNvbXBsZXRlKGVsZW1lbnRzKVxuICAgICAgcHJvZ3Jlc3MoZWxlbWVudHMsIGNvbXBsZXRlLCByZW1haW5pbmcsIHN0YXJ0LCB0d2VlblZhbHVlKVxuICAgICAgKi9cblxuICAgIH0sIGluaXRpYWxQYXJhbXMpLFxuICAgIGVsZW1lbnRzOiBlbHMsXG4gICAgYW5pbWF0aW5nOiBmYWxzZSxcbiAgICBxdWU6IFtdLFxuXG4gICAgZWFzaW5nUHJvZ3Jlc3MoZWFzaW5nLCBwcm9ncmVzcykge1xuICAgICAgaWYgKGVhc2luZyA9PT0gJ3N3aW5nJykge1xuICAgICAgICByZXR1cm4gMC41IC0gTWF0aC5jb3MocHJvZ3Jlc3MgKiBNYXRoLlBJKSAvIDI7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZWFzaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBlYXNpbmcocHJvZ3Jlc3MpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gICAgfSxcblxuICAgIHN0b3AoKSB7XG4gICAgICBpZiAoYS5mcmFtZUlkKSB7XG4gICAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShhLmZyYW1lSWQpO1xuICAgICAgfVxuXG4gICAgICBhLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgYS5lbGVtZW50cy5lYWNoKGVsID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGVsO1xuICAgICAgICBkZWxldGUgZWxlbWVudC5kb203QW5pbWF0ZUluc3RhbmNlO1xuICAgICAgfSk7XG4gICAgICBhLnF1ZSA9IFtdO1xuICAgIH0sXG5cbiAgICBkb25lKGNvbXBsZXRlKSB7XG4gICAgICBhLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgYS5lbGVtZW50cy5lYWNoKGVsID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGVsO1xuICAgICAgICBkZWxldGUgZWxlbWVudC5kb203QW5pbWF0ZUluc3RhbmNlO1xuICAgICAgfSk7XG4gICAgICBpZiAoY29tcGxldGUpIGNvbXBsZXRlKGVscyk7XG5cbiAgICAgIGlmIChhLnF1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHF1ZSA9IGEucXVlLnNoaWZ0KCk7XG4gICAgICAgIGEuYW5pbWF0ZShxdWVbMF0sIHF1ZVsxXSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFuaW1hdGUocHJvcHMsIHBhcmFtcykge1xuICAgICAgaWYgKGEuYW5pbWF0aW5nKSB7XG4gICAgICAgIGEucXVlLnB1c2goW3Byb3BzLCBwYXJhbXNdKTtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gW107IC8vIERlZmluZSAmIENhY2hlIEluaXRpYWxzICYgVW5pdHNcblxuICAgICAgYS5lbGVtZW50cy5lYWNoKChlbCwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IGluaXRpYWxGdWxsVmFsdWU7XG4gICAgICAgIGxldCBpbml0aWFsVmFsdWU7XG4gICAgICAgIGxldCB1bml0O1xuICAgICAgICBsZXQgZmluYWxWYWx1ZTtcbiAgICAgICAgbGV0IGZpbmFsRnVsbFZhbHVlO1xuICAgICAgICBpZiAoIWVsLmRvbTdBbmltYXRlSW5zdGFuY2UpIGEuZWxlbWVudHNbaW5kZXhdLmRvbTdBbmltYXRlSW5zdGFuY2UgPSBhO1xuICAgICAgICBlbGVtZW50c1tpbmRleF0gPSB7XG4gICAgICAgICAgY29udGFpbmVyOiBlbFxuICAgICAgICB9O1xuICAgICAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICBpbml0aWFsRnVsbFZhbHVlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpLmdldFByb3BlcnR5VmFsdWUocHJvcCkucmVwbGFjZSgnLCcsICcuJyk7XG4gICAgICAgICAgaW5pdGlhbFZhbHVlID0gcGFyc2VGbG9hdChpbml0aWFsRnVsbFZhbHVlKTtcbiAgICAgICAgICB1bml0ID0gaW5pdGlhbEZ1bGxWYWx1ZS5yZXBsYWNlKGluaXRpYWxWYWx1ZSwgJycpO1xuICAgICAgICAgIGZpbmFsVmFsdWUgPSBwYXJzZUZsb2F0KHByb3BzW3Byb3BdKTtcbiAgICAgICAgICBmaW5hbEZ1bGxWYWx1ZSA9IHByb3BzW3Byb3BdICsgdW5pdDtcbiAgICAgICAgICBlbGVtZW50c1tpbmRleF1bcHJvcF0gPSB7XG4gICAgICAgICAgICBpbml0aWFsRnVsbFZhbHVlLFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlLFxuICAgICAgICAgICAgdW5pdCxcbiAgICAgICAgICAgIGZpbmFsVmFsdWUsXG4gICAgICAgICAgICBmaW5hbEZ1bGxWYWx1ZSxcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogaW5pdGlhbFZhbHVlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGxldCBzdGFydFRpbWUgPSBudWxsO1xuICAgICAgbGV0IHRpbWU7XG4gICAgICBsZXQgZWxlbWVudHNEb25lID0gMDtcbiAgICAgIGxldCBwcm9wc0RvbmUgPSAwO1xuICAgICAgbGV0IGRvbmU7XG4gICAgICBsZXQgYmVnYW4gPSBmYWxzZTtcbiAgICAgIGEuYW5pbWF0aW5nID0gdHJ1ZTtcblxuICAgICAgZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICB0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIGxldCBwcm9ncmVzcztcbiAgICAgICAgbGV0IGVhc2VQcm9ncmVzczsgLy8gbGV0IGVsO1xuXG4gICAgICAgIGlmICghYmVnYW4pIHtcbiAgICAgICAgICBiZWdhbiA9IHRydWU7XG4gICAgICAgICAgaWYgKHBhcmFtcy5iZWdpbikgcGFyYW1zLmJlZ2luKGVscyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhcnRUaW1lID09PSBudWxsKSB7XG4gICAgICAgICAgc3RhcnRUaW1lID0gdGltZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJhbXMucHJvZ3Jlc3MpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICBwYXJhbXMucHJvZ3Jlc3MoZWxzLCBNYXRoLm1heChNYXRoLm1pbigodGltZSAtIHN0YXJ0VGltZSkgLyBwYXJhbXMuZHVyYXRpb24sIDEpLCAwKSwgc3RhcnRUaW1lICsgcGFyYW1zLmR1cmF0aW9uIC0gdGltZSA8IDAgPyAwIDogc3RhcnRUaW1lICsgcGFyYW1zLmR1cmF0aW9uIC0gdGltZSwgc3RhcnRUaW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgY29uc3QgZWwgPSBlbGVtZW50O1xuICAgICAgICAgIGlmIChkb25lIHx8IGVsLmRvbmUpIHJldHVybjtcbiAgICAgICAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICAgIGlmIChkb25lIHx8IGVsLmRvbmUpIHJldHVybjtcbiAgICAgICAgICAgIHByb2dyZXNzID0gTWF0aC5tYXgoTWF0aC5taW4oKHRpbWUgLSBzdGFydFRpbWUpIC8gcGFyYW1zLmR1cmF0aW9uLCAxKSwgMCk7XG4gICAgICAgICAgICBlYXNlUHJvZ3Jlc3MgPSBhLmVhc2luZ1Byb2dyZXNzKHBhcmFtcy5lYXNpbmcsIHByb2dyZXNzKTtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlLFxuICAgICAgICAgICAgICBmaW5hbFZhbHVlLFxuICAgICAgICAgICAgICB1bml0XG4gICAgICAgICAgICB9ID0gZWxbcHJvcF07XG4gICAgICAgICAgICBlbFtwcm9wXS5jdXJyZW50VmFsdWUgPSBpbml0aWFsVmFsdWUgKyBlYXNlUHJvZ3Jlc3MgKiAoZmluYWxWYWx1ZSAtIGluaXRpYWxWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBlbFtwcm9wXS5jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChmaW5hbFZhbHVlID4gaW5pdGlhbFZhbHVlICYmIGN1cnJlbnRWYWx1ZSA+PSBmaW5hbFZhbHVlIHx8IGZpbmFsVmFsdWUgPCBpbml0aWFsVmFsdWUgJiYgY3VycmVudFZhbHVlIDw9IGZpbmFsVmFsdWUpIHtcbiAgICAgICAgICAgICAgZWwuY29udGFpbmVyLnN0eWxlW3Byb3BdID0gZmluYWxWYWx1ZSArIHVuaXQ7XG4gICAgICAgICAgICAgIHByb3BzRG9uZSArPSAxO1xuXG4gICAgICAgICAgICAgIGlmIChwcm9wc0RvbmUgPT09IE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBlbC5kb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBlbGVtZW50c0RvbmUgKz0gMTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50c0RvbmUgPT09IGVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgIGEuZG9uZShwYXJhbXMuY29tcGxldGUpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsLmNvbnRhaW5lci5zdHlsZVtwcm9wXSA9IGN1cnJlbnRWYWx1ZSArIHVuaXQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZG9uZSkgcmV0dXJuOyAvLyBUaGVuIGNhbGxcblxuICAgICAgICBhLmZyYW1lSWQgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlbmRlcik7XG4gICAgICB9XG5cbiAgICAgIGEuZnJhbWVJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVuZGVyKTtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICB9O1xuXG4gIGlmIChhLmVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBlbHM7XG4gIH1cblxuICBsZXQgYW5pbWF0ZUluc3RhbmNlO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYS5lbGVtZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChhLmVsZW1lbnRzW2ldLmRvbTdBbmltYXRlSW5zdGFuY2UpIHtcbiAgICAgIGFuaW1hdGVJbnN0YW5jZSA9IGEuZWxlbWVudHNbaV0uZG9tN0FuaW1hdGVJbnN0YW5jZTtcbiAgICB9IGVsc2UgYS5lbGVtZW50c1tpXS5kb203QW5pbWF0ZUluc3RhbmNlID0gYTtcbiAgfVxuXG4gIGlmICghYW5pbWF0ZUluc3RhbmNlKSB7XG4gICAgYW5pbWF0ZUluc3RhbmNlID0gYTtcbiAgfVxuXG4gIGlmIChpbml0aWFsUHJvcHMgPT09ICdzdG9wJykge1xuICAgIGFuaW1hdGVJbnN0YW5jZS5zdG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgYW5pbWF0ZUluc3RhbmNlLmFuaW1hdGUoYS5wcm9wcywgYS5wYXJhbXMpO1xuICB9XG5cbiAgcmV0dXJuIGVscztcbn1cblxuZnVuY3Rpb24gc3RvcCgpIHtcbiAgY29uc3QgZWxzID0gdGhpcztcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChlbHNbaV0uZG9tN0FuaW1hdGVJbnN0YW5jZSkge1xuICAgICAgZWxzW2ldLmRvbTdBbmltYXRlSW5zdGFuY2Uuc3RvcCgpO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBub1RyaWdnZXIgPSAncmVzaXplIHNjcm9sbCcuc3BsaXQoJyAnKTtcblxuZnVuY3Rpb24gc2hvcnRjdXQobmFtZSkge1xuICBmdW5jdGlvbiBldmVudEhhbmRsZXIoLi4uYXJncykge1xuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAobm9UcmlnZ2VyLmluZGV4T2YobmFtZSkgPCAwKSB7XG4gICAgICAgICAgaWYgKG5hbWUgaW4gdGhpc1tpXSkgdGhpc1tpXVtuYW1lXSgpO2Vsc2Uge1xuICAgICAgICAgICAgJCh0aGlzW2ldKS50cmlnZ2VyKG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5vbihuYW1lLCAuLi5hcmdzKTtcbiAgfVxuXG4gIHJldHVybiBldmVudEhhbmRsZXI7XG59XG5cbmNvbnN0IGNsaWNrID0gc2hvcnRjdXQoJ2NsaWNrJyk7XG5jb25zdCBibHVyID0gc2hvcnRjdXQoJ2JsdXInKTtcbmNvbnN0IGZvY3VzID0gc2hvcnRjdXQoJ2ZvY3VzJyk7XG5jb25zdCBmb2N1c2luID0gc2hvcnRjdXQoJ2ZvY3VzaW4nKTtcbmNvbnN0IGZvY3Vzb3V0ID0gc2hvcnRjdXQoJ2ZvY3Vzb3V0Jyk7XG5jb25zdCBrZXl1cCA9IHNob3J0Y3V0KCdrZXl1cCcpO1xuY29uc3Qga2V5ZG93biA9IHNob3J0Y3V0KCdrZXlkb3duJyk7XG5jb25zdCBrZXlwcmVzcyA9IHNob3J0Y3V0KCdrZXlwcmVzcycpO1xuY29uc3Qgc3VibWl0ID0gc2hvcnRjdXQoJ3N1Ym1pdCcpO1xuY29uc3QgY2hhbmdlID0gc2hvcnRjdXQoJ2NoYW5nZScpO1xuY29uc3QgbW91c2Vkb3duID0gc2hvcnRjdXQoJ21vdXNlZG93bicpO1xuY29uc3QgbW91c2Vtb3ZlID0gc2hvcnRjdXQoJ21vdXNlbW92ZScpO1xuY29uc3QgbW91c2V1cCA9IHNob3J0Y3V0KCdtb3VzZXVwJyk7XG5jb25zdCBtb3VzZWVudGVyID0gc2hvcnRjdXQoJ21vdXNlZW50ZXInKTtcbmNvbnN0IG1vdXNlbGVhdmUgPSBzaG9ydGN1dCgnbW91c2VsZWF2ZScpO1xuY29uc3QgbW91c2VvdXQgPSBzaG9ydGN1dCgnbW91c2VvdXQnKTtcbmNvbnN0IG1vdXNlb3ZlciA9IHNob3J0Y3V0KCdtb3VzZW92ZXInKTtcbmNvbnN0IHRvdWNoc3RhcnQgPSBzaG9ydGN1dCgndG91Y2hzdGFydCcpO1xuY29uc3QgdG91Y2hlbmQgPSBzaG9ydGN1dCgndG91Y2hlbmQnKTtcbmNvbnN0IHRvdWNobW92ZSA9IHNob3J0Y3V0KCd0b3VjaG1vdmUnKTtcbmNvbnN0IHJlc2l6ZSA9IHNob3J0Y3V0KCdyZXNpemUnKTtcbmNvbnN0IHNjcm9sbCA9IHNob3J0Y3V0KCdzY3JvbGwnKTtcblxuZXhwb3J0IGRlZmF1bHQgJDtcbmV4cG9ydCB7ICQsIGFkZCwgYWRkQ2xhc3MsIGFuaW1hdGUsIGFuaW1hdGlvbkVuZCwgYXBwZW5kLCBhcHBlbmRUbywgYXR0ciwgYmx1ciwgY2hhbmdlLCBjaGlsZHJlbiwgY2xpY2ssIGNsb3Nlc3QsIGNzcywgZGF0YSwgZGF0YXNldCwgZGV0YWNoLCBlYWNoLCBlbXB0eSwgZXEsIGZpbHRlciwgZmluZCwgZm9jdXMsIGZvY3VzaW4sIGZvY3Vzb3V0LCBoYXNDbGFzcywgaGVpZ2h0LCBoaWRlLCBodG1sLCBpbmRleCwgaW5zZXJ0QWZ0ZXIsIGluc2VydEJlZm9yZSwgaXMsIGtleWRvd24sIGtleXByZXNzLCBrZXl1cCwgbW91c2Vkb3duLCBtb3VzZWVudGVyLCBtb3VzZWxlYXZlLCBtb3VzZW1vdmUsIG1vdXNlb3V0LCBtb3VzZW92ZXIsIG1vdXNldXAsIG5leHQsIG5leHRBbGwsIG9mZiwgb2Zmc2V0LCBvbiwgb25jZSwgb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGgsIHBhcmVudCwgcGFyZW50cywgcHJlcGVuZCwgcHJlcGVuZFRvLCBwcmV2LCBwcmV2QWxsLCBwcm9wLCByZW1vdmUsIHJlbW92ZUF0dHIsIHJlbW92ZUNsYXNzLCByZW1vdmVEYXRhLCByZXNpemUsIHNjcm9sbCwgc2Nyb2xsTGVmdCwgc2Nyb2xsVG8sIHNjcm9sbFRvcCwgc2hvdywgc2libGluZ3MsIHN0b3AsIHN0eWxlcywgc3VibWl0LCB0ZXh0LCB0b2dnbGVDbGFzcywgdG91Y2hlbmQsIHRvdWNobW92ZSwgdG91Y2hzdGFydCwgdHJhbnNmb3JtLCB0cmFuc2l0aW9uLCB0cmFuc2l0aW9uRW5kLCB0cmFuc2l0aW9uU3RhcnQsIHRyaWdnZXIsIHZhbCwgdmFsdWUsIHdpZHRoIH07XG4iLCJpbXBvcnQgeyAkLCBhZGRDbGFzcywgcmVtb3ZlQ2xhc3MsIGhhc0NsYXNzLCB0b2dnbGVDbGFzcywgYXR0ciwgcmVtb3ZlQXR0ciwgdHJhbnNmb3JtLCB0cmFuc2l0aW9uLCBvbiwgb2ZmLCB0cmlnZ2VyLCB0cmFuc2l0aW9uRW5kLCBvdXRlcldpZHRoLCBvdXRlckhlaWdodCwgc3R5bGVzLCBvZmZzZXQsIGNzcywgZWFjaCwgaHRtbCwgdGV4dCwgaXMsIGluZGV4LCBlcSwgYXBwZW5kLCBwcmVwZW5kLCBuZXh0LCBuZXh0QWxsLCBwcmV2LCBwcmV2QWxsLCBwYXJlbnQsIHBhcmVudHMsIGNsb3Nlc3QsIGZpbmQsIGNoaWxkcmVuLCBmaWx0ZXIsIHJlbW92ZSB9IGZyb20gJ2RvbTcnO1xuY29uc3QgTWV0aG9kcyA9IHtcbiAgYWRkQ2xhc3MsXG4gIHJlbW92ZUNsYXNzLFxuICBoYXNDbGFzcyxcbiAgdG9nZ2xlQ2xhc3MsXG4gIGF0dHIsXG4gIHJlbW92ZUF0dHIsXG4gIHRyYW5zZm9ybSxcbiAgdHJhbnNpdGlvbixcbiAgb24sXG4gIG9mZixcbiAgdHJpZ2dlcixcbiAgdHJhbnNpdGlvbkVuZCxcbiAgb3V0ZXJXaWR0aCxcbiAgb3V0ZXJIZWlnaHQsXG4gIHN0eWxlcyxcbiAgb2Zmc2V0LFxuICBjc3MsXG4gIGVhY2gsXG4gIGh0bWwsXG4gIHRleHQsXG4gIGlzLFxuICBpbmRleCxcbiAgZXEsXG4gIGFwcGVuZCxcbiAgcHJlcGVuZCxcbiAgbmV4dCxcbiAgbmV4dEFsbCxcbiAgcHJldixcbiAgcHJldkFsbCxcbiAgcGFyZW50LFxuICBwYXJlbnRzLFxuICBjbG9zZXN0LFxuICBmaW5kLFxuICBjaGlsZHJlbixcbiAgZmlsdGVyLFxuICByZW1vdmVcbn07XG5PYmplY3Qua2V5cyhNZXRob2RzKS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoJC5mbiwgbWV0aG9kTmFtZSwge1xuICAgIHZhbHVlOiBNZXRob2RzW21ldGhvZE5hbWVdLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pO1xufSk7XG5leHBvcnQgZGVmYXVsdCAkOyIsImltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuXG5mdW5jdGlvbiBkZWxldGVQcm9wcyhvYmopIHtcbiAgY29uc3Qgb2JqZWN0ID0gb2JqO1xuICBPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goa2V5ID0+IHtcbiAgICB0cnkge1xuICAgICAgb2JqZWN0W2tleV0gPSBudWxsO1xuICAgIH0gY2F0Y2ggKGUpIHsvLyBubyBnZXR0ZXIgZm9yIG9iamVjdFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBkZWxldGUgb2JqZWN0W2tleV07XG4gICAgfSBjYXRjaCAoZSkgey8vIHNvbWV0aGluZyBnb3Qgd3JvbmdcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBuZXh0VGljayhjYWxsYmFjaywgZGVsYXkgPSAwKSB7XG4gIHJldHVybiBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSk7XG59XG5cbmZ1bmN0aW9uIG5vdygpIHtcbiAgcmV0dXJuIERhdGUubm93KCk7XG59XG5cbmZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWwpIHtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIGxldCBzdHlsZTtcblxuICBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUpIHtcbiAgICBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsLCBudWxsKTtcbiAgfVxuXG4gIGlmICghc3R5bGUgJiYgZWwuY3VycmVudFN0eWxlKSB7XG4gICAgc3R5bGUgPSBlbC5jdXJyZW50U3R5bGU7XG4gIH1cblxuICBpZiAoIXN0eWxlKSB7XG4gICAgc3R5bGUgPSBlbC5zdHlsZTtcbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhbnNsYXRlKGVsLCBheGlzID0gJ3gnKSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBsZXQgbWF0cml4O1xuICBsZXQgY3VyVHJhbnNmb3JtO1xuICBsZXQgdHJhbnNmb3JtTWF0cml4O1xuICBjb25zdCBjdXJTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpO1xuXG4gIGlmICh3aW5kb3cuV2ViS2l0Q1NTTWF0cml4KSB7XG4gICAgY3VyVHJhbnNmb3JtID0gY3VyU3R5bGUudHJhbnNmb3JtIHx8IGN1clN0eWxlLndlYmtpdFRyYW5zZm9ybTtcblxuICAgIGlmIChjdXJUcmFuc2Zvcm0uc3BsaXQoJywnKS5sZW5ndGggPiA2KSB7XG4gICAgICBjdXJUcmFuc2Zvcm0gPSBjdXJUcmFuc2Zvcm0uc3BsaXQoJywgJykubWFwKGEgPT4gYS5yZXBsYWNlKCcsJywgJy4nKSkuam9pbignLCAnKTtcbiAgICB9IC8vIFNvbWUgb2xkIHZlcnNpb25zIG9mIFdlYmtpdCBjaG9rZSB3aGVuICdub25lJyBpcyBwYXNzZWQ7IHBhc3NcbiAgICAvLyBlbXB0eSBzdHJpbmcgaW5zdGVhZCBpbiB0aGlzIGNhc2VcblxuXG4gICAgdHJhbnNmb3JtTWF0cml4ID0gbmV3IHdpbmRvdy5XZWJLaXRDU1NNYXRyaXgoY3VyVHJhbnNmb3JtID09PSAnbm9uZScgPyAnJyA6IGN1clRyYW5zZm9ybSk7XG4gIH0gZWxzZSB7XG4gICAgdHJhbnNmb3JtTWF0cml4ID0gY3VyU3R5bGUuTW96VHJhbnNmb3JtIHx8IGN1clN0eWxlLk9UcmFuc2Zvcm0gfHwgY3VyU3R5bGUuTXNUcmFuc2Zvcm0gfHwgY3VyU3R5bGUubXNUcmFuc2Zvcm0gfHwgY3VyU3R5bGUudHJhbnNmb3JtIHx8IGN1clN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3RyYW5zZm9ybScpLnJlcGxhY2UoJ3RyYW5zbGF0ZSgnLCAnbWF0cml4KDEsIDAsIDAsIDEsJyk7XG4gICAgbWF0cml4ID0gdHJhbnNmb3JtTWF0cml4LnRvU3RyaW5nKCkuc3BsaXQoJywnKTtcbiAgfVxuXG4gIGlmIChheGlzID09PSAneCcpIHtcbiAgICAvLyBMYXRlc3QgQ2hyb21lIGFuZCB3ZWJraXRzIEZpeFxuICAgIGlmICh3aW5kb3cuV2ViS2l0Q1NTTWF0cml4KSBjdXJUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1NYXRyaXgubTQxOyAvLyBDcmF6eSBJRTEwIE1hdHJpeFxuICAgIGVsc2UgaWYgKG1hdHJpeC5sZW5ndGggPT09IDE2KSBjdXJUcmFuc2Zvcm0gPSBwYXJzZUZsb2F0KG1hdHJpeFsxMl0pOyAvLyBOb3JtYWwgQnJvd3NlcnNcbiAgICBlbHNlIGN1clRyYW5zZm9ybSA9IHBhcnNlRmxvYXQobWF0cml4WzRdKTtcbiAgfVxuXG4gIGlmIChheGlzID09PSAneScpIHtcbiAgICAvLyBMYXRlc3QgQ2hyb21lIGFuZCB3ZWJraXRzIEZpeFxuICAgIGlmICh3aW5kb3cuV2ViS2l0Q1NTTWF0cml4KSBjdXJUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1NYXRyaXgubTQyOyAvLyBDcmF6eSBJRTEwIE1hdHJpeFxuICAgIGVsc2UgaWYgKG1hdHJpeC5sZW5ndGggPT09IDE2KSBjdXJUcmFuc2Zvcm0gPSBwYXJzZUZsb2F0KG1hdHJpeFsxM10pOyAvLyBOb3JtYWwgQnJvd3NlcnNcbiAgICBlbHNlIGN1clRyYW5zZm9ybSA9IHBhcnNlRmxvYXQobWF0cml4WzVdKTtcbiAgfVxuXG4gIHJldHVybiBjdXJUcmFuc2Zvcm0gfHwgMDtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3Qobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIG8gIT09IG51bGwgJiYgby5jb25zdHJ1Y3RvciAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpID09PSAnT2JqZWN0Jztcbn1cblxuZnVuY3Rpb24gaXNOb2RlKG5vZGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LkhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gbm9kZSAmJiAobm9kZS5ub2RlVHlwZSA9PT0gMSB8fCBub2RlLm5vZGVUeXBlID09PSAxMSk7XG59XG5cbmZ1bmN0aW9uIGV4dGVuZCguLi5hcmdzKSB7XG4gIGNvbnN0IHRvID0gT2JqZWN0KGFyZ3NbMF0pO1xuICBjb25zdCBub0V4dGVuZCA9IFsnX19wcm90b19fJywgJ2NvbnN0cnVjdG9yJywgJ3Byb3RvdHlwZSddO1xuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IG5leHRTb3VyY2UgPSBhcmdzW2ldO1xuXG4gICAgaWYgKG5leHRTb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBuZXh0U291cmNlICE9PSBudWxsICYmICFpc05vZGUobmV4dFNvdXJjZSkpIHtcbiAgICAgIGNvbnN0IGtleXNBcnJheSA9IE9iamVjdC5rZXlzKE9iamVjdChuZXh0U291cmNlKSkuZmlsdGVyKGtleSA9PiBub0V4dGVuZC5pbmRleE9mKGtleSkgPCAwKTtcblxuICAgICAgZm9yIChsZXQgbmV4dEluZGV4ID0gMCwgbGVuID0ga2V5c0FycmF5Lmxlbmd0aDsgbmV4dEluZGV4IDwgbGVuOyBuZXh0SW5kZXggKz0gMSkge1xuICAgICAgICBjb25zdCBuZXh0S2V5ID0ga2V5c0FycmF5W25leHRJbmRleF07XG4gICAgICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5leHRTb3VyY2UsIG5leHRLZXkpO1xuXG4gICAgICAgIGlmIChkZXNjICE9PSB1bmRlZmluZWQgJiYgZGVzYy5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgaWYgKGlzT2JqZWN0KHRvW25leHRLZXldKSAmJiBpc09iamVjdChuZXh0U291cmNlW25leHRLZXldKSkge1xuICAgICAgICAgICAgaWYgKG5leHRTb3VyY2VbbmV4dEtleV0uX19zd2lwZXJfXykge1xuICAgICAgICAgICAgICB0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBleHRlbmQodG9bbmV4dEtleV0sIG5leHRTb3VyY2VbbmV4dEtleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIWlzT2JqZWN0KHRvW25leHRLZXldKSAmJiBpc09iamVjdChuZXh0U291cmNlW25leHRLZXldKSkge1xuICAgICAgICAgICAgdG9bbmV4dEtleV0gPSB7fTtcblxuICAgICAgICAgICAgaWYgKG5leHRTb3VyY2VbbmV4dEtleV0uX19zd2lwZXJfXykge1xuICAgICAgICAgICAgICB0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBleHRlbmQodG9bbmV4dEtleV0sIG5leHRTb3VyY2VbbmV4dEtleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRvO1xufVxuXG5mdW5jdGlvbiBzZXRDU1NQcm9wZXJ0eShlbCwgdmFyTmFtZSwgdmFyVmFsdWUpIHtcbiAgZWwuc3R5bGUuc2V0UHJvcGVydHkodmFyTmFtZSwgdmFyVmFsdWUpO1xufVxuXG5mdW5jdGlvbiBhbmltYXRlQ1NTTW9kZVNjcm9sbCh7XG4gIHN3aXBlcixcbiAgdGFyZ2V0UG9zaXRpb24sXG4gIHNpZGVcbn0pIHtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSAtc3dpcGVyLnRyYW5zbGF0ZTtcbiAgbGV0IHN0YXJ0VGltZSA9IG51bGw7XG4gIGxldCB0aW1lO1xuICBjb25zdCBkdXJhdGlvbiA9IHN3aXBlci5wYXJhbXMuc3BlZWQ7XG4gIHN3aXBlci53cmFwcGVyRWwuc3R5bGUuc2Nyb2xsU25hcFR5cGUgPSAnbm9uZSc7XG4gIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShzd2lwZXIuY3NzTW9kZUZyYW1lSUQpO1xuICBjb25zdCBkaXIgPSB0YXJnZXRQb3NpdGlvbiA+IHN0YXJ0UG9zaXRpb24gPyAnbmV4dCcgOiAncHJldic7XG5cbiAgY29uc3QgaXNPdXRPZkJvdW5kID0gKGN1cnJlbnQsIHRhcmdldCkgPT4ge1xuICAgIHJldHVybiBkaXIgPT09ICduZXh0JyAmJiBjdXJyZW50ID49IHRhcmdldCB8fCBkaXIgPT09ICdwcmV2JyAmJiBjdXJyZW50IDw9IHRhcmdldDtcbiAgfTtcblxuICBjb25zdCBhbmltYXRlID0gKCkgPT4ge1xuICAgIHRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuICAgIGlmIChzdGFydFRpbWUgPT09IG51bGwpIHtcbiAgICAgIHN0YXJ0VGltZSA9IHRpbWU7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLm1heChNYXRoLm1pbigodGltZSAtIHN0YXJ0VGltZSkgLyBkdXJhdGlvbiwgMSksIDApO1xuICAgIGNvbnN0IGVhc2VQcm9ncmVzcyA9IDAuNSAtIE1hdGguY29zKHByb2dyZXNzICogTWF0aC5QSSkgLyAyO1xuICAgIGxldCBjdXJyZW50UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgZWFzZVByb2dyZXNzICogKHRhcmdldFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbik7XG5cbiAgICBpZiAoaXNPdXRPZkJvdW5kKGN1cnJlbnRQb3NpdGlvbiwgdGFyZ2V0UG9zaXRpb24pKSB7XG4gICAgICBjdXJyZW50UG9zaXRpb24gPSB0YXJnZXRQb3NpdGlvbjtcbiAgICB9XG5cbiAgICBzd2lwZXIud3JhcHBlckVsLnNjcm9sbFRvKHtcbiAgICAgIFtzaWRlXTogY3VycmVudFBvc2l0aW9uXG4gICAgfSk7XG5cbiAgICBpZiAoaXNPdXRPZkJvdW5kKGN1cnJlbnRQb3NpdGlvbiwgdGFyZ2V0UG9zaXRpb24pKSB7XG4gICAgICBzd2lwZXIud3JhcHBlckVsLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICBzd2lwZXIud3JhcHBlckVsLnN0eWxlLnNjcm9sbFNuYXBUeXBlID0gJyc7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc3dpcGVyLndyYXBwZXJFbC5zdHlsZS5vdmVyZmxvdyA9ICcnO1xuICAgICAgICBzd2lwZXIud3JhcHBlckVsLnNjcm9sbFRvKHtcbiAgICAgICAgICBbc2lkZV06IGN1cnJlbnRQb3NpdGlvblxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHN3aXBlci5jc3NNb2RlRnJhbWVJRCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpcGVyLmNzc01vZGVGcmFtZUlEID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAgfTtcblxuICBhbmltYXRlKCk7XG59XG5cbmV4cG9ydCB7IGFuaW1hdGVDU1NNb2RlU2Nyb2xsLCBkZWxldGVQcm9wcywgbmV4dFRpY2ssIG5vdywgZ2V0VHJhbnNsYXRlLCBpc09iamVjdCwgZXh0ZW5kLCBnZXRDb21wdXRlZFN0eWxlLCBzZXRDU1NQcm9wZXJ0eSB9OyIsImltcG9ydCB7IGdldFdpbmRvdywgZ2V0RG9jdW1lbnQgfSBmcm9tICdzc3Itd2luZG93JztcbmxldCBzdXBwb3J0O1xuXG5mdW5jdGlvbiBjYWxjU3VwcG9ydCgpIHtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgcmV0dXJuIHtcbiAgICBzbW9vdGhTY3JvbGw6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAnc2Nyb2xsQmVoYXZpb3InIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSxcbiAgICB0b3VjaDogISEoJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8IHdpbmRvdy5Eb2N1bWVudFRvdWNoICYmIGRvY3VtZW50IGluc3RhbmNlb2Ygd2luZG93LkRvY3VtZW50VG91Y2gpLFxuICAgIHBhc3NpdmVMaXN0ZW5lcjogZnVuY3Rpb24gY2hlY2tQYXNzaXZlTGlzdGVuZXIoKSB7XG4gICAgICBsZXQgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdwYXNzaXZlJywge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHN1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdFBhc3NpdmVMaXN0ZW5lcicsIG51bGwsIG9wdHMpO1xuICAgICAgfSBjYXRjaCAoZSkgey8vIE5vIHN1cHBvcnRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN1cHBvcnRzUGFzc2l2ZTtcbiAgICB9KCksXG4gICAgZ2VzdHVyZXM6IGZ1bmN0aW9uIGNoZWNrR2VzdHVyZXMoKSB7XG4gICAgICByZXR1cm4gJ29uZ2VzdHVyZXN0YXJ0JyBpbiB3aW5kb3c7XG4gICAgfSgpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFN1cHBvcnQoKSB7XG4gIGlmICghc3VwcG9ydCkge1xuICAgIHN1cHBvcnQgPSBjYWxjU3VwcG9ydCgpO1xuICB9XG5cbiAgcmV0dXJuIHN1cHBvcnQ7XG59XG5cbmV4cG9ydCB7IGdldFN1cHBvcnQgfTsiLCJpbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tICdzc3Itd2luZG93JztcbmltcG9ydCB7IGdldFN1cHBvcnQgfSBmcm9tICcuL2dldC1zdXBwb3J0LmpzJztcbmxldCBkZXZpY2VDYWNoZWQ7XG5cbmZ1bmN0aW9uIGNhbGNEZXZpY2Uoe1xuICB1c2VyQWdlbnRcbn0gPSB7fSkge1xuICBjb25zdCBzdXBwb3J0ID0gZ2V0U3VwcG9ydCgpO1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgY29uc3QgcGxhdGZvcm0gPSB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtO1xuICBjb25zdCB1YSA9IHVzZXJBZ2VudCB8fCB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgY29uc3QgZGV2aWNlID0ge1xuICAgIGlvczogZmFsc2UsXG4gICAgYW5kcm9pZDogZmFsc2VcbiAgfTtcbiAgY29uc3Qgc2NyZWVuV2lkdGggPSB3aW5kb3cuc2NyZWVuLndpZHRoO1xuICBjb25zdCBzY3JlZW5IZWlnaHQgPSB3aW5kb3cuc2NyZWVuLmhlaWdodDtcbiAgY29uc3QgYW5kcm9pZCA9IHVhLm1hdGNoKC8oQW5kcm9pZCk7P1tcXHNcXC9dKyhbXFxkLl0rKT8vKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIGxldCBpcGFkID0gdWEubWF0Y2goLyhpUGFkKS4qT1NcXHMoW1xcZF9dKykvKTtcbiAgY29uc3QgaXBvZCA9IHVhLm1hdGNoKC8oaVBvZCkoLipPU1xccyhbXFxkX10rKSk/Lyk7XG4gIGNvbnN0IGlwaG9uZSA9ICFpcGFkICYmIHVhLm1hdGNoKC8oaVBob25lXFxzT1N8aU9TKVxccyhbXFxkX10rKS8pO1xuICBjb25zdCB3aW5kb3dzID0gcGxhdGZvcm0gPT09ICdXaW4zMic7XG4gIGxldCBtYWNvcyA9IHBsYXRmb3JtID09PSAnTWFjSW50ZWwnOyAvLyBpUGFkT3MgMTMgZml4XG5cbiAgY29uc3QgaVBhZFNjcmVlbnMgPSBbJzEwMjR4MTM2NicsICcxMzY2eDEwMjQnLCAnODM0eDExOTQnLCAnMTE5NHg4MzQnLCAnODM0eDExMTInLCAnMTExMng4MzQnLCAnNzY4eDEwMjQnLCAnMTAyNHg3NjgnLCAnODIweDExODAnLCAnMTE4MHg4MjAnLCAnODEweDEwODAnLCAnMTA4MHg4MTAnXTtcblxuICBpZiAoIWlwYWQgJiYgbWFjb3MgJiYgc3VwcG9ydC50b3VjaCAmJiBpUGFkU2NyZWVucy5pbmRleE9mKGAke3NjcmVlbldpZHRofXgke3NjcmVlbkhlaWdodH1gKSA+PSAwKSB7XG4gICAgaXBhZCA9IHVhLm1hdGNoKC8oVmVyc2lvbilcXC8oW1xcZC5dKykvKTtcbiAgICBpZiAoIWlwYWQpIGlwYWQgPSBbMCwgMSwgJzEzXzBfMCddO1xuICAgIG1hY29zID0gZmFsc2U7XG4gIH0gLy8gQW5kcm9pZFxuXG5cbiAgaWYgKGFuZHJvaWQgJiYgIXdpbmRvd3MpIHtcbiAgICBkZXZpY2Uub3MgPSAnYW5kcm9pZCc7XG4gICAgZGV2aWNlLmFuZHJvaWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGlwYWQgfHwgaXBob25lIHx8IGlwb2QpIHtcbiAgICBkZXZpY2Uub3MgPSAnaW9zJztcbiAgICBkZXZpY2UuaW9zID0gdHJ1ZTtcbiAgfSAvLyBFeHBvcnQgb2JqZWN0XG5cblxuICByZXR1cm4gZGV2aWNlO1xufVxuXG5mdW5jdGlvbiBnZXREZXZpY2Uob3ZlcnJpZGVzID0ge30pIHtcbiAgaWYgKCFkZXZpY2VDYWNoZWQpIHtcbiAgICBkZXZpY2VDYWNoZWQgPSBjYWxjRGV2aWNlKG92ZXJyaWRlcyk7XG4gIH1cblxuICByZXR1cm4gZGV2aWNlQ2FjaGVkO1xufVxuXG5leHBvcnQgeyBnZXREZXZpY2UgfTsiLCJpbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tICdzc3Itd2luZG93JztcbmxldCBicm93c2VyO1xuXG5mdW5jdGlvbiBjYWxjQnJvd3NlcigpIHtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG5cbiAgZnVuY3Rpb24gaXNTYWZhcmkoKSB7XG4gICAgY29uc3QgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB1YS5pbmRleE9mKCdzYWZhcmknKSA+PSAwICYmIHVhLmluZGV4T2YoJ2Nocm9tZScpIDwgMCAmJiB1YS5pbmRleE9mKCdhbmRyb2lkJykgPCAwO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpc1NhZmFyaTogaXNTYWZhcmkoKSxcbiAgICBpc1dlYlZpZXc6IC8oaVBob25lfGlQb2R8aVBhZCkuKkFwcGxlV2ViS2l0KD8hLipTYWZhcmkpL2kudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QnJvd3NlcigpIHtcbiAgaWYgKCFicm93c2VyKSB7XG4gICAgYnJvd3NlciA9IGNhbGNCcm93c2VyKCk7XG4gIH1cblxuICByZXR1cm4gYnJvd3Nlcjtcbn1cblxuZXhwb3J0IHsgZ2V0QnJvd3NlciB9OyIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9uKGV2ZW50cywgaGFuZGxlciwgcHJpb3JpdHkpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzIHx8IHNlbGYuZGVzdHJveWVkKSByZXR1cm4gc2VsZjtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHJldHVybiBzZWxmO1xuICAgIGNvbnN0IG1ldGhvZCA9IHByaW9yaXR5ID8gJ3Vuc2hpZnQnIDogJ3B1c2gnO1xuICAgIGV2ZW50cy5zcGxpdCgnICcpLmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0pIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSA9IFtdO1xuICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdW21ldGhvZF0oaGFuZGxlcik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH0sXG5cbiAgb25jZShldmVudHMsIGhhbmRsZXIsIHByaW9yaXR5KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycyB8fCBzZWxmLmRlc3Ryb3llZCkgcmV0dXJuIHNlbGY7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gc2VsZjtcblxuICAgIGZ1bmN0aW9uIG9uY2VIYW5kbGVyKC4uLmFyZ3MpIHtcbiAgICAgIHNlbGYub2ZmKGV2ZW50cywgb25jZUhhbmRsZXIpO1xuXG4gICAgICBpZiAob25jZUhhbmRsZXIuX19lbWl0dGVyUHJveHkpIHtcbiAgICAgICAgZGVsZXRlIG9uY2VIYW5kbGVyLl9fZW1pdHRlclByb3h5O1xuICAgICAgfVxuXG4gICAgICBoYW5kbGVyLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIH1cblxuICAgIG9uY2VIYW5kbGVyLl9fZW1pdHRlclByb3h5ID0gaGFuZGxlcjtcbiAgICByZXR1cm4gc2VsZi5vbihldmVudHMsIG9uY2VIYW5kbGVyLCBwcmlvcml0eSk7XG4gIH0sXG5cbiAgb25BbnkoaGFuZGxlciwgcHJpb3JpdHkpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzIHx8IHNlbGYuZGVzdHJveWVkKSByZXR1cm4gc2VsZjtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHJldHVybiBzZWxmO1xuICAgIGNvbnN0IG1ldGhvZCA9IHByaW9yaXR5ID8gJ3Vuc2hpZnQnIDogJ3B1c2gnO1xuXG4gICAgaWYgKHNlbGYuZXZlbnRzQW55TGlzdGVuZXJzLmluZGV4T2YoaGFuZGxlcikgPCAwKSB7XG4gICAgICBzZWxmLmV2ZW50c0FueUxpc3RlbmVyc1ttZXRob2RdKGhhbmRsZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxmO1xuICB9LFxuXG4gIG9mZkFueShoYW5kbGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycyB8fCBzZWxmLmRlc3Ryb3llZCkgcmV0dXJuIHNlbGY7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0FueUxpc3RlbmVycykgcmV0dXJuIHNlbGY7XG4gICAgY29uc3QgaW5kZXggPSBzZWxmLmV2ZW50c0FueUxpc3RlbmVycy5pbmRleE9mKGhhbmRsZXIpO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHNlbGYuZXZlbnRzQW55TGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGY7XG4gIH0sXG5cbiAgb2ZmKGV2ZW50cywgaGFuZGxlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnMgfHwgc2VsZi5kZXN0cm95ZWQpIHJldHVybiBzZWxmO1xuICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnMpIHJldHVybiBzZWxmO1xuICAgIGV2ZW50cy5zcGxpdCgnICcpLmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0gPSBbXTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdKSB7XG4gICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XS5mb3JFYWNoKChldmVudEhhbmRsZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50SGFuZGxlciA9PT0gaGFuZGxlciB8fCBldmVudEhhbmRsZXIuX19lbWl0dGVyUHJveHkgJiYgZXZlbnRIYW5kbGVyLl9fZW1pdHRlclByb3h5ID09PSBoYW5kbGVyKSB7XG4gICAgICAgICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZWxmO1xuICB9LFxuXG4gIGVtaXQoLi4uYXJncykge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnMgfHwgc2VsZi5kZXN0cm95ZWQpIHJldHVybiBzZWxmO1xuICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnMpIHJldHVybiBzZWxmO1xuICAgIGxldCBldmVudHM7XG4gICAgbGV0IGRhdGE7XG4gICAgbGV0IGNvbnRleHQ7XG5cbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkoYXJnc1swXSkpIHtcbiAgICAgIGV2ZW50cyA9IGFyZ3NbMF07XG4gICAgICBkYXRhID0gYXJncy5zbGljZSgxLCBhcmdzLmxlbmd0aCk7XG4gICAgICBjb250ZXh0ID0gc2VsZjtcbiAgICB9IGVsc2Uge1xuICAgICAgZXZlbnRzID0gYXJnc1swXS5ldmVudHM7XG4gICAgICBkYXRhID0gYXJnc1swXS5kYXRhO1xuICAgICAgY29udGV4dCA9IGFyZ3NbMF0uY29udGV4dCB8fCBzZWxmO1xuICAgIH1cblxuICAgIGRhdGEudW5zaGlmdChjb250ZXh0KTtcbiAgICBjb25zdCBldmVudHNBcnJheSA9IEFycmF5LmlzQXJyYXkoZXZlbnRzKSA/IGV2ZW50cyA6IGV2ZW50cy5zcGxpdCgnICcpO1xuICAgIGV2ZW50c0FycmF5LmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgaWYgKHNlbGYuZXZlbnRzQW55TGlzdGVuZXJzICYmIHNlbGYuZXZlbnRzQW55TGlzdGVuZXJzLmxlbmd0aCkge1xuICAgICAgICBzZWxmLmV2ZW50c0FueUxpc3RlbmVycy5mb3JFYWNoKGV2ZW50SGFuZGxlciA9PiB7XG4gICAgICAgICAgZXZlbnRIYW5kbGVyLmFwcGx5KGNvbnRleHQsIFtldmVudCwgLi4uZGF0YV0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGYuZXZlbnRzTGlzdGVuZXJzICYmIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0uZm9yRWFjaChldmVudEhhbmRsZXIgPT4ge1xuICAgICAgICAgIGV2ZW50SGFuZGxlci5hcHBseShjb250ZXh0LCBkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH1cblxufTsiLCJpbXBvcnQgdXBkYXRlU2l6ZSBmcm9tICcuL3VwZGF0ZVNpemUuanMnO1xuaW1wb3J0IHVwZGF0ZVNsaWRlcyBmcm9tICcuL3VwZGF0ZVNsaWRlcy5qcyc7XG5pbXBvcnQgdXBkYXRlQXV0b0hlaWdodCBmcm9tICcuL3VwZGF0ZUF1dG9IZWlnaHQuanMnO1xuaW1wb3J0IHVwZGF0ZVNsaWRlc09mZnNldCBmcm9tICcuL3VwZGF0ZVNsaWRlc09mZnNldC5qcyc7XG5pbXBvcnQgdXBkYXRlU2xpZGVzUHJvZ3Jlc3MgZnJvbSAnLi91cGRhdGVTbGlkZXNQcm9ncmVzcy5qcyc7XG5pbXBvcnQgdXBkYXRlUHJvZ3Jlc3MgZnJvbSAnLi91cGRhdGVQcm9ncmVzcy5qcyc7XG5pbXBvcnQgdXBkYXRlU2xpZGVzQ2xhc3NlcyBmcm9tICcuL3VwZGF0ZVNsaWRlc0NsYXNzZXMuanMnO1xuaW1wb3J0IHVwZGF0ZUFjdGl2ZUluZGV4IGZyb20gJy4vdXBkYXRlQWN0aXZlSW5kZXguanMnO1xuaW1wb3J0IHVwZGF0ZUNsaWNrZWRTbGlkZSBmcm9tICcuL3VwZGF0ZUNsaWNrZWRTbGlkZS5qcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gIHVwZGF0ZVNpemUsXG4gIHVwZGF0ZVNsaWRlcyxcbiAgdXBkYXRlQXV0b0hlaWdodCxcbiAgdXBkYXRlU2xpZGVzT2Zmc2V0LFxuICB1cGRhdGVTbGlkZXNQcm9ncmVzcyxcbiAgdXBkYXRlUHJvZ3Jlc3MsXG4gIHVwZGF0ZVNsaWRlc0NsYXNzZXMsXG4gIHVwZGF0ZUFjdGl2ZUluZGV4LFxuICB1cGRhdGVDbGlja2VkU2xpZGVcbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlU2l6ZSgpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgbGV0IHdpZHRoO1xuICBsZXQgaGVpZ2h0O1xuICBjb25zdCAkZWwgPSBzd2lwZXIuJGVsO1xuXG4gIGlmICh0eXBlb2Ygc3dpcGVyLnBhcmFtcy53aWR0aCAhPT0gJ3VuZGVmaW5lZCcgJiYgc3dpcGVyLnBhcmFtcy53aWR0aCAhPT0gbnVsbCkge1xuICAgIHdpZHRoID0gc3dpcGVyLnBhcmFtcy53aWR0aDtcbiAgfSBlbHNlIHtcbiAgICB3aWR0aCA9ICRlbFswXS5jbGllbnRXaWR0aDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3dpcGVyLnBhcmFtcy5oZWlnaHQgIT09ICd1bmRlZmluZWQnICYmIHN3aXBlci5wYXJhbXMuaGVpZ2h0ICE9PSBudWxsKSB7XG4gICAgaGVpZ2h0ID0gc3dpcGVyLnBhcmFtcy5oZWlnaHQ7XG4gIH0gZWxzZSB7XG4gICAgaGVpZ2h0ID0gJGVsWzBdLmNsaWVudEhlaWdodDtcbiAgfVxuXG4gIGlmICh3aWR0aCA9PT0gMCAmJiBzd2lwZXIuaXNIb3Jpem9udGFsKCkgfHwgaGVpZ2h0ID09PSAwICYmIHN3aXBlci5pc1ZlcnRpY2FsKCkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gU3VidHJhY3QgcGFkZGluZ3NcblxuXG4gIHdpZHRoID0gd2lkdGggLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLWxlZnQnKSB8fCAwLCAxMCkgLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLXJpZ2h0JykgfHwgMCwgMTApO1xuICBoZWlnaHQgPSBoZWlnaHQgLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLXRvcCcpIHx8IDAsIDEwKSAtIHBhcnNlSW50KCRlbC5jc3MoJ3BhZGRpbmctYm90dG9tJykgfHwgMCwgMTApO1xuICBpZiAoTnVtYmVyLmlzTmFOKHdpZHRoKSkgd2lkdGggPSAwO1xuICBpZiAoTnVtYmVyLmlzTmFOKGhlaWdodCkpIGhlaWdodCA9IDA7XG4gIE9iamVjdC5hc3NpZ24oc3dpcGVyLCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHNpemU6IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHdpZHRoIDogaGVpZ2h0XG4gIH0pO1xufSIsImltcG9ydCB7IHNldENTU1Byb3BlcnR5IH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZVNsaWRlcygpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcblxuICBmdW5jdGlvbiBnZXREaXJlY3Rpb25MYWJlbChwcm9wZXJ0eSkge1xuICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9IC8vIHByZXR0aWVyLWlnbm9yZVxuXG5cbiAgICByZXR1cm4ge1xuICAgICAgJ3dpZHRoJzogJ2hlaWdodCcsXG4gICAgICAnbWFyZ2luLXRvcCc6ICdtYXJnaW4tbGVmdCcsXG4gICAgICAnbWFyZ2luLWJvdHRvbSAnOiAnbWFyZ2luLXJpZ2h0JyxcbiAgICAgICdtYXJnaW4tbGVmdCc6ICdtYXJnaW4tdG9wJyxcbiAgICAgICdtYXJnaW4tcmlnaHQnOiAnbWFyZ2luLWJvdHRvbScsXG4gICAgICAncGFkZGluZy1sZWZ0JzogJ3BhZGRpbmctdG9wJyxcbiAgICAgICdwYWRkaW5nLXJpZ2h0JzogJ3BhZGRpbmctYm90dG9tJyxcbiAgICAgICdtYXJnaW5SaWdodCc6ICdtYXJnaW5Cb3R0b20nXG4gICAgfVtwcm9wZXJ0eV07XG4gIH1cblxuICBmdW5jdGlvbiBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKG5vZGUsIGxhYmVsKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobm9kZS5nZXRQcm9wZXJ0eVZhbHVlKGdldERpcmVjdGlvbkxhYmVsKGxhYmVsKSkgfHwgMCk7XG4gIH1cblxuICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICBjb25zdCB7XG4gICAgJHdyYXBwZXJFbCxcbiAgICBzaXplOiBzd2lwZXJTaXplLFxuICAgIHJ0bFRyYW5zbGF0ZTogcnRsLFxuICAgIHdyb25nUlRMXG4gIH0gPSBzd2lwZXI7XG4gIGNvbnN0IGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gIGNvbnN0IHByZXZpb3VzU2xpZGVzTGVuZ3RoID0gaXNWaXJ0dWFsID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCA6IHN3aXBlci5zbGlkZXMubGVuZ3RoO1xuICBjb25zdCBzbGlkZXMgPSAkd3JhcHBlckVsLmNoaWxkcmVuKGAuJHtzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3N9YCk7XG4gIGNvbnN0IHNsaWRlc0xlbmd0aCA9IGlzVmlydHVhbCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggOiBzbGlkZXMubGVuZ3RoO1xuICBsZXQgc25hcEdyaWQgPSBbXTtcbiAgY29uc3Qgc2xpZGVzR3JpZCA9IFtdO1xuICBjb25zdCBzbGlkZXNTaXplc0dyaWQgPSBbXTtcbiAgbGV0IG9mZnNldEJlZm9yZSA9IHBhcmFtcy5zbGlkZXNPZmZzZXRCZWZvcmU7XG5cbiAgaWYgKHR5cGVvZiBvZmZzZXRCZWZvcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvZmZzZXRCZWZvcmUgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QmVmb3JlLmNhbGwoc3dpcGVyKTtcbiAgfVxuXG4gIGxldCBvZmZzZXRBZnRlciA9IHBhcmFtcy5zbGlkZXNPZmZzZXRBZnRlcjtcblxuICBpZiAodHlwZW9mIG9mZnNldEFmdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgb2Zmc2V0QWZ0ZXIgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QWZ0ZXIuY2FsbChzd2lwZXIpO1xuICB9XG5cbiAgY29uc3QgcHJldmlvdXNTbmFwR3JpZExlbmd0aCA9IHN3aXBlci5zbmFwR3JpZC5sZW5ndGg7XG4gIGNvbnN0IHByZXZpb3VzU2xpZGVzR3JpZExlbmd0aCA9IHN3aXBlci5zbGlkZXNHcmlkLmxlbmd0aDtcbiAgbGV0IHNwYWNlQmV0d2VlbiA9IHBhcmFtcy5zcGFjZUJldHdlZW47XG4gIGxldCBzbGlkZVBvc2l0aW9uID0gLW9mZnNldEJlZm9yZTtcbiAgbGV0IHByZXZTbGlkZVNpemUgPSAwO1xuICBsZXQgaW5kZXggPSAwO1xuXG4gIGlmICh0eXBlb2Ygc3dpcGVyU2l6ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIHNwYWNlQmV0d2VlbiA9PT0gJ3N0cmluZycgJiYgc3BhY2VCZXR3ZWVuLmluZGV4T2YoJyUnKSA+PSAwKSB7XG4gICAgc3BhY2VCZXR3ZWVuID0gcGFyc2VGbG9hdChzcGFjZUJldHdlZW4ucmVwbGFjZSgnJScsICcnKSkgLyAxMDAgKiBzd2lwZXJTaXplO1xuICB9XG5cbiAgc3dpcGVyLnZpcnR1YWxTaXplID0gLXNwYWNlQmV0d2VlbjsgLy8gcmVzZXQgbWFyZ2luc1xuXG4gIGlmIChydGwpIHNsaWRlcy5jc3Moe1xuICAgIG1hcmdpbkxlZnQ6ICcnLFxuICAgIG1hcmdpbkJvdHRvbTogJycsXG4gICAgbWFyZ2luVG9wOiAnJ1xuICB9KTtlbHNlIHNsaWRlcy5jc3Moe1xuICAgIG1hcmdpblJpZ2h0OiAnJyxcbiAgICBtYXJnaW5Cb3R0b206ICcnLFxuICAgIG1hcmdpblRvcDogJydcbiAgfSk7IC8vIHJlc2V0IGNzc01vZGUgb2Zmc2V0c1xuXG4gIGlmIChwYXJhbXMuY2VudGVyZWRTbGlkZXMgJiYgcGFyYW1zLmNzc01vZGUpIHtcbiAgICBzZXRDU1NQcm9wZXJ0eShzd2lwZXIud3JhcHBlckVsLCAnLS1zd2lwZXItY2VudGVyZWQtb2Zmc2V0LWJlZm9yZScsICcnKTtcbiAgICBzZXRDU1NQcm9wZXJ0eShzd2lwZXIud3JhcHBlckVsLCAnLS1zd2lwZXItY2VudGVyZWQtb2Zmc2V0LWFmdGVyJywgJycpO1xuICB9XG5cbiAgY29uc3QgZ3JpZEVuYWJsZWQgPSBwYXJhbXMuZ3JpZCAmJiBwYXJhbXMuZ3JpZC5yb3dzID4gMSAmJiBzd2lwZXIuZ3JpZDtcblxuICBpZiAoZ3JpZEVuYWJsZWQpIHtcbiAgICBzd2lwZXIuZ3JpZC5pbml0U2xpZGVzKHNsaWRlc0xlbmd0aCk7XG4gIH0gLy8gQ2FsYyBzbGlkZXNcblxuXG4gIGxldCBzbGlkZVNpemU7XG4gIGNvbnN0IHNob3VsZFJlc2V0U2xpZGVTaXplID0gcGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyAmJiBwYXJhbXMuYnJlYWtwb2ludHMgJiYgT2JqZWN0LmtleXMocGFyYW1zLmJyZWFrcG9pbnRzKS5maWx0ZXIoa2V5ID0+IHtcbiAgICByZXR1cm4gdHlwZW9mIHBhcmFtcy5icmVha3BvaW50c1trZXldLnNsaWRlc1BlclZpZXcgIT09ICd1bmRlZmluZWQnO1xuICB9KS5sZW5ndGggPiAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpZGVzTGVuZ3RoOyBpICs9IDEpIHtcbiAgICBzbGlkZVNpemUgPSAwO1xuICAgIGNvbnN0IHNsaWRlID0gc2xpZGVzLmVxKGkpO1xuXG4gICAgaWYgKGdyaWRFbmFibGVkKSB7XG4gICAgICBzd2lwZXIuZ3JpZC51cGRhdGVTbGlkZShpLCBzbGlkZSwgc2xpZGVzTGVuZ3RoLCBnZXREaXJlY3Rpb25MYWJlbCk7XG4gICAgfVxuXG4gICAgaWYgKHNsaWRlLmNzcygnZGlzcGxheScpID09PSAnbm9uZScpIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJykge1xuICAgICAgaWYgKHNob3VsZFJlc2V0U2xpZGVTaXplKSB7XG4gICAgICAgIHNsaWRlc1tpXS5zdHlsZVtnZXREaXJlY3Rpb25MYWJlbCgnd2lkdGgnKV0gPSBgYDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2xpZGVTdHlsZXMgPSBnZXRDb21wdXRlZFN0eWxlKHNsaWRlWzBdKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRUcmFuc2Zvcm0gPSBzbGlkZVswXS5zdHlsZS50cmFuc2Zvcm07XG4gICAgICBjb25zdCBjdXJyZW50V2ViS2l0VHJhbnNmb3JtID0gc2xpZGVbMF0uc3R5bGUud2Via2l0VHJhbnNmb3JtO1xuXG4gICAgICBpZiAoY3VycmVudFRyYW5zZm9ybSkge1xuICAgICAgICBzbGlkZVswXS5zdHlsZS50cmFuc2Zvcm0gPSAnbm9uZSc7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50V2ViS2l0VHJhbnNmb3JtKSB7XG4gICAgICAgIHNsaWRlWzBdLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9ICdub25lJztcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHtcbiAgICAgICAgc2xpZGVTaXplID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gc2xpZGUub3V0ZXJXaWR0aCh0cnVlKSA6IHNsaWRlLm91dGVySGVpZ2h0KHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIGNvbnN0IHdpZHRoID0gZ2V0RGlyZWN0aW9uUHJvcGVydHlWYWx1ZShzbGlkZVN0eWxlcywgJ3dpZHRoJyk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdMZWZ0ID0gZ2V0RGlyZWN0aW9uUHJvcGVydHlWYWx1ZShzbGlkZVN0eWxlcywgJ3BhZGRpbmctbGVmdCcpO1xuICAgICAgICBjb25zdCBwYWRkaW5nUmlnaHQgPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAncGFkZGluZy1yaWdodCcpO1xuICAgICAgICBjb25zdCBtYXJnaW5MZWZ0ID0gZ2V0RGlyZWN0aW9uUHJvcGVydHlWYWx1ZShzbGlkZVN0eWxlcywgJ21hcmdpbi1sZWZ0Jyk7XG4gICAgICAgIGNvbnN0IG1hcmdpblJpZ2h0ID0gZ2V0RGlyZWN0aW9uUHJvcGVydHlWYWx1ZShzbGlkZVN0eWxlcywgJ21hcmdpbi1yaWdodCcpO1xuICAgICAgICBjb25zdCBib3hTaXppbmcgPSBzbGlkZVN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3gtc2l6aW5nJyk7XG5cbiAgICAgICAgaWYgKGJveFNpemluZyAmJiBib3hTaXppbmcgPT09ICdib3JkZXItYm94Jykge1xuICAgICAgICAgIHNsaWRlU2l6ZSA9IHdpZHRoICsgbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGNsaWVudFdpZHRoLFxuICAgICAgICAgICAgb2Zmc2V0V2lkdGhcbiAgICAgICAgICB9ID0gc2xpZGVbMF07XG4gICAgICAgICAgc2xpZGVTaXplID0gd2lkdGggKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIG1hcmdpbkxlZnQgKyBtYXJnaW5SaWdodCArIChvZmZzZXRXaWR0aCAtIGNsaWVudFdpZHRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY3VycmVudFRyYW5zZm9ybSkge1xuICAgICAgICBzbGlkZVswXS5zdHlsZS50cmFuc2Zvcm0gPSBjdXJyZW50VHJhbnNmb3JtO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3VycmVudFdlYktpdFRyYW5zZm9ybSkge1xuICAgICAgICBzbGlkZVswXS5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSBjdXJyZW50V2ViS2l0VHJhbnNmb3JtO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykgc2xpZGVTaXplID0gTWF0aC5mbG9vcihzbGlkZVNpemUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbGlkZVNpemUgPSAoc3dpcGVyU2l6ZSAtIChwYXJhbXMuc2xpZGVzUGVyVmlldyAtIDEpICogc3BhY2VCZXR3ZWVuKSAvIHBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHNsaWRlU2l6ZSA9IE1hdGguZmxvb3Ioc2xpZGVTaXplKTtcblxuICAgICAgaWYgKHNsaWRlc1tpXSkge1xuICAgICAgICBzbGlkZXNbaV0uc3R5bGVbZ2V0RGlyZWN0aW9uTGFiZWwoJ3dpZHRoJyldID0gYCR7c2xpZGVTaXplfXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2xpZGVzW2ldKSB7XG4gICAgICBzbGlkZXNbaV0uc3dpcGVyU2xpZGVTaXplID0gc2xpZGVTaXplO1xuICAgIH1cblxuICAgIHNsaWRlc1NpemVzR3JpZC5wdXNoKHNsaWRlU2l6ZSk7XG5cbiAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICBzbGlkZVBvc2l0aW9uID0gc2xpZGVQb3NpdGlvbiArIHNsaWRlU2l6ZSAvIDIgKyBwcmV2U2xpZGVTaXplIC8gMiArIHNwYWNlQmV0d2VlbjtcbiAgICAgIGlmIChwcmV2U2xpZGVTaXplID09PSAwICYmIGkgIT09IDApIHNsaWRlUG9zaXRpb24gPSBzbGlkZVBvc2l0aW9uIC0gc3dpcGVyU2l6ZSAvIDIgLSBzcGFjZUJldHdlZW47XG4gICAgICBpZiAoaSA9PT0gMCkgc2xpZGVQb3NpdGlvbiA9IHNsaWRlUG9zaXRpb24gLSBzd2lwZXJTaXplIC8gMiAtIHNwYWNlQmV0d2VlbjtcbiAgICAgIGlmIChNYXRoLmFicyhzbGlkZVBvc2l0aW9uKSA8IDEgLyAxMDAwKSBzbGlkZVBvc2l0aW9uID0gMDtcbiAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBzbGlkZVBvc2l0aW9uID0gTWF0aC5mbG9vcihzbGlkZVBvc2l0aW9uKTtcbiAgICAgIGlmIChpbmRleCAlIHBhcmFtcy5zbGlkZXNQZXJHcm91cCA9PT0gMCkgc25hcEdyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICAgIHNsaWRlc0dyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHNsaWRlUG9zaXRpb24gPSBNYXRoLmZsb29yKHNsaWRlUG9zaXRpb24pO1xuICAgICAgaWYgKChpbmRleCAtIE1hdGgubWluKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwLCBpbmRleCkpICUgc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCA9PT0gMCkgc25hcEdyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICAgIHNsaWRlc0dyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICAgIHNsaWRlUG9zaXRpb24gPSBzbGlkZVBvc2l0aW9uICsgc2xpZGVTaXplICsgc3BhY2VCZXR3ZWVuO1xuICAgIH1cblxuICAgIHN3aXBlci52aXJ0dWFsU2l6ZSArPSBzbGlkZVNpemUgKyBzcGFjZUJldHdlZW47XG4gICAgcHJldlNsaWRlU2l6ZSA9IHNsaWRlU2l6ZTtcbiAgICBpbmRleCArPSAxO1xuICB9XG5cbiAgc3dpcGVyLnZpcnR1YWxTaXplID0gTWF0aC5tYXgoc3dpcGVyLnZpcnR1YWxTaXplLCBzd2lwZXJTaXplKSArIG9mZnNldEFmdGVyO1xuXG4gIGlmIChydGwgJiYgd3JvbmdSVEwgJiYgKHBhcmFtcy5lZmZlY3QgPT09ICdzbGlkZScgfHwgcGFyYW1zLmVmZmVjdCA9PT0gJ2NvdmVyZmxvdycpKSB7XG4gICAgJHdyYXBwZXJFbC5jc3Moe1xuICAgICAgd2lkdGg6IGAke3N3aXBlci52aXJ0dWFsU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW59cHhgXG4gICAgfSk7XG4gIH1cblxuICBpZiAocGFyYW1zLnNldFdyYXBwZXJTaXplKSB7XG4gICAgJHdyYXBwZXJFbC5jc3Moe1xuICAgICAgW2dldERpcmVjdGlvbkxhYmVsKCd3aWR0aCcpXTogYCR7c3dpcGVyLnZpcnR1YWxTaXplICsgcGFyYW1zLnNwYWNlQmV0d2Vlbn1weGBcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChncmlkRW5hYmxlZCkge1xuICAgIHN3aXBlci5ncmlkLnVwZGF0ZVdyYXBwZXJTaXplKHNsaWRlU2l6ZSwgc25hcEdyaWQsIGdldERpcmVjdGlvbkxhYmVsKTtcbiAgfSAvLyBSZW1vdmUgbGFzdCBncmlkIGVsZW1lbnRzIGRlcGVuZGluZyBvbiB3aWR0aFxuXG5cbiAgaWYgKCFwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICBjb25zdCBuZXdTbGlkZXNHcmlkID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNuYXBHcmlkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBsZXQgc2xpZGVzR3JpZEl0ZW0gPSBzbmFwR3JpZFtpXTtcbiAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBzbGlkZXNHcmlkSXRlbSA9IE1hdGguZmxvb3Ioc2xpZGVzR3JpZEl0ZW0pO1xuXG4gICAgICBpZiAoc25hcEdyaWRbaV0gPD0gc3dpcGVyLnZpcnR1YWxTaXplIC0gc3dpcGVyU2l6ZSkge1xuICAgICAgICBuZXdTbGlkZXNHcmlkLnB1c2goc2xpZGVzR3JpZEl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNuYXBHcmlkID0gbmV3U2xpZGVzR3JpZDtcblxuICAgIGlmIChNYXRoLmZsb29yKHN3aXBlci52aXJ0dWFsU2l6ZSAtIHN3aXBlclNpemUpIC0gTWF0aC5mbG9vcihzbmFwR3JpZFtzbmFwR3JpZC5sZW5ndGggLSAxXSkgPiAxKSB7XG4gICAgICBzbmFwR3JpZC5wdXNoKHN3aXBlci52aXJ0dWFsU2l6ZSAtIHN3aXBlclNpemUpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzbmFwR3JpZC5sZW5ndGggPT09IDApIHNuYXBHcmlkID0gWzBdO1xuXG4gIGlmIChwYXJhbXMuc3BhY2VCZXR3ZWVuICE9PSAwKSB7XG4gICAgY29uc3Qga2V5ID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpICYmIHJ0bCA/ICdtYXJnaW5MZWZ0JyA6IGdldERpcmVjdGlvbkxhYmVsKCdtYXJnaW5SaWdodCcpO1xuICAgIHNsaWRlcy5maWx0ZXIoKF8sIHNsaWRlSW5kZXgpID0+IHtcbiAgICAgIGlmICghcGFyYW1zLmNzc01vZGUpIHJldHVybiB0cnVlO1xuXG4gICAgICBpZiAoc2xpZGVJbmRleCA9PT0gc2xpZGVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KS5jc3Moe1xuICAgICAgW2tleV06IGAke3NwYWNlQmV0d2Vlbn1weGBcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuY2VudGVyZWRTbGlkZXMgJiYgcGFyYW1zLmNlbnRlcmVkU2xpZGVzQm91bmRzKSB7XG4gICAgbGV0IGFsbFNsaWRlc1NpemUgPSAwO1xuICAgIHNsaWRlc1NpemVzR3JpZC5mb3JFYWNoKHNsaWRlU2l6ZVZhbHVlID0+IHtcbiAgICAgIGFsbFNsaWRlc1NpemUgKz0gc2xpZGVTaXplVmFsdWUgKyAocGFyYW1zLnNwYWNlQmV0d2VlbiA/IHBhcmFtcy5zcGFjZUJldHdlZW4gOiAwKTtcbiAgICB9KTtcbiAgICBhbGxTbGlkZXNTaXplIC09IHBhcmFtcy5zcGFjZUJldHdlZW47XG4gICAgY29uc3QgbWF4U25hcCA9IGFsbFNsaWRlc1NpemUgLSBzd2lwZXJTaXplO1xuICAgIHNuYXBHcmlkID0gc25hcEdyaWQubWFwKHNuYXAgPT4ge1xuICAgICAgaWYgKHNuYXAgPCAwKSByZXR1cm4gLW9mZnNldEJlZm9yZTtcbiAgICAgIGlmIChzbmFwID4gbWF4U25hcCkgcmV0dXJuIG1heFNuYXAgKyBvZmZzZXRBZnRlcjtcbiAgICAgIHJldHVybiBzbmFwO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5jZW50ZXJJbnN1ZmZpY2llbnRTbGlkZXMpIHtcbiAgICBsZXQgYWxsU2xpZGVzU2l6ZSA9IDA7XG4gICAgc2xpZGVzU2l6ZXNHcmlkLmZvckVhY2goc2xpZGVTaXplVmFsdWUgPT4ge1xuICAgICAgYWxsU2xpZGVzU2l6ZSArPSBzbGlkZVNpemVWYWx1ZSArIChwYXJhbXMuc3BhY2VCZXR3ZWVuID8gcGFyYW1zLnNwYWNlQmV0d2VlbiA6IDApO1xuICAgIH0pO1xuICAgIGFsbFNsaWRlc1NpemUgLT0gcGFyYW1zLnNwYWNlQmV0d2VlbjtcblxuICAgIGlmIChhbGxTbGlkZXNTaXplIDwgc3dpcGVyU2l6ZSkge1xuICAgICAgY29uc3QgYWxsU2xpZGVzT2Zmc2V0ID0gKHN3aXBlclNpemUgLSBhbGxTbGlkZXNTaXplKSAvIDI7XG4gICAgICBzbmFwR3JpZC5mb3JFYWNoKChzbmFwLCBzbmFwSW5kZXgpID0+IHtcbiAgICAgICAgc25hcEdyaWRbc25hcEluZGV4XSA9IHNuYXAgLSBhbGxTbGlkZXNPZmZzZXQ7XG4gICAgICB9KTtcbiAgICAgIHNsaWRlc0dyaWQuZm9yRWFjaCgoc25hcCwgc25hcEluZGV4KSA9PiB7XG4gICAgICAgIHNsaWRlc0dyaWRbc25hcEluZGV4XSA9IHNuYXAgKyBhbGxTbGlkZXNPZmZzZXQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBPYmplY3QuYXNzaWduKHN3aXBlciwge1xuICAgIHNsaWRlcyxcbiAgICBzbmFwR3JpZCxcbiAgICBzbGlkZXNHcmlkLFxuICAgIHNsaWRlc1NpemVzR3JpZFxuICB9KTtcblxuICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzICYmIHBhcmFtcy5jc3NNb2RlICYmICFwYXJhbXMuY2VudGVyZWRTbGlkZXNCb3VuZHMpIHtcbiAgICBzZXRDU1NQcm9wZXJ0eShzd2lwZXIud3JhcHBlckVsLCAnLS1zd2lwZXItY2VudGVyZWQtb2Zmc2V0LWJlZm9yZScsIGAkey1zbmFwR3JpZFswXX1weGApO1xuICAgIHNldENTU1Byb3BlcnR5KHN3aXBlci53cmFwcGVyRWwsICctLXN3aXBlci1jZW50ZXJlZC1vZmZzZXQtYWZ0ZXInLCBgJHtzd2lwZXIuc2l6ZSAvIDIgLSBzbGlkZXNTaXplc0dyaWRbc2xpZGVzU2l6ZXNHcmlkLmxlbmd0aCAtIDFdIC8gMn1weGApO1xuICAgIGNvbnN0IGFkZFRvU25hcEdyaWQgPSAtc3dpcGVyLnNuYXBHcmlkWzBdO1xuICAgIGNvbnN0IGFkZFRvU2xpZGVzR3JpZCA9IC1zd2lwZXIuc2xpZGVzR3JpZFswXTtcbiAgICBzd2lwZXIuc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQubWFwKHYgPT4gdiArIGFkZFRvU25hcEdyaWQpO1xuICAgIHN3aXBlci5zbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQubWFwKHYgPT4gdiArIGFkZFRvU2xpZGVzR3JpZCk7XG4gIH1cblxuICBpZiAoc2xpZGVzTGVuZ3RoICE9PSBwcmV2aW91c1NsaWRlc0xlbmd0aCkge1xuICAgIHN3aXBlci5lbWl0KCdzbGlkZXNMZW5ndGhDaGFuZ2UnKTtcbiAgfVxuXG4gIGlmIChzbmFwR3JpZC5sZW5ndGggIT09IHByZXZpb3VzU25hcEdyaWRMZW5ndGgpIHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93KSBzd2lwZXIuY2hlY2tPdmVyZmxvdygpO1xuICAgIHN3aXBlci5lbWl0KCdzbmFwR3JpZExlbmd0aENoYW5nZScpO1xuICB9XG5cbiAgaWYgKHNsaWRlc0dyaWQubGVuZ3RoICE9PSBwcmV2aW91c1NsaWRlc0dyaWRMZW5ndGgpIHtcbiAgICBzd2lwZXIuZW1pdCgnc2xpZGVzR3JpZExlbmd0aENoYW5nZScpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzKSB7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlc09mZnNldCgpO1xuICB9XG5cbiAgaWYgKCFpc1ZpcnR1YWwgJiYgIXBhcmFtcy5jc3NNb2RlICYmIChwYXJhbXMuZWZmZWN0ID09PSAnc2xpZGUnIHx8IHBhcmFtcy5lZmZlY3QgPT09ICdmYWRlJykpIHtcbiAgICBjb25zdCBiYWNrRmFjZUhpZGRlbkNsYXNzID0gYCR7cGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9YmFja2ZhY2UtaGlkZGVuYDtcbiAgICBjb25zdCBoYXNDbGFzc0JhY2tmYWNlQ2xhc3NBZGRlZCA9IHN3aXBlci4kZWwuaGFzQ2xhc3MoYmFja0ZhY2VIaWRkZW5DbGFzcyk7XG5cbiAgICBpZiAoc2xpZGVzTGVuZ3RoIDw9IHBhcmFtcy5tYXhCYWNrZmFjZUhpZGRlblNsaWRlcykge1xuICAgICAgaWYgKCFoYXNDbGFzc0JhY2tmYWNlQ2xhc3NBZGRlZCkgc3dpcGVyLiRlbC5hZGRDbGFzcyhiYWNrRmFjZUhpZGRlbkNsYXNzKTtcbiAgICB9IGVsc2UgaWYgKGhhc0NsYXNzQmFja2ZhY2VDbGFzc0FkZGVkKSB7XG4gICAgICBzd2lwZXIuJGVsLnJlbW92ZUNsYXNzKGJhY2tGYWNlSGlkZGVuQ2xhc3MpO1xuICAgIH1cbiAgfVxufSIsImltcG9ydCAkIGZyb20gJy4uLy4uL3NoYXJlZC9kb20uanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlQXV0b0hlaWdodChzcGVlZCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCBhY3RpdmVTbGlkZXMgPSBbXTtcbiAgY29uc3QgaXNWaXJ0dWFsID0gc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gIGxldCBuZXdIZWlnaHQgPSAwO1xuICBsZXQgaTtcblxuICBpZiAodHlwZW9mIHNwZWVkID09PSAnbnVtYmVyJykge1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKHNwZWVkKTtcbiAgfSBlbHNlIGlmIChzcGVlZCA9PT0gdHJ1ZSkge1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKHN3aXBlci5wYXJhbXMuc3BlZWQpO1xuICB9XG5cbiAgY29uc3QgZ2V0U2xpZGVCeUluZGV4ID0gaW5kZXggPT4ge1xuICAgIGlmIChpc1ZpcnR1YWwpIHtcbiAgICAgIHJldHVybiBzd2lwZXIuc2xpZGVzLmZpbHRlcihlbCA9PiBwYXJzZUludChlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JyksIDEwKSA9PT0gaW5kZXgpWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBzd2lwZXIuc2xpZGVzLmVxKGluZGV4KVswXTtcbiAgfTsgLy8gRmluZCBzbGlkZXMgY3VycmVudGx5IGluIHZpZXdcblxuXG4gIGlmIChzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgIT09ICdhdXRvJyAmJiBzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPiAxKSB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgIChzd2lwZXIudmlzaWJsZVNsaWRlcyB8fCAkKFtdKSkuZWFjaChzbGlkZSA9PiB7XG4gICAgICAgIGFjdGl2ZVNsaWRlcy5wdXNoKHNsaWRlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgTWF0aC5jZWlsKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyk7IGkgKz0gMSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCArIGk7XG4gICAgICAgIGlmIChpbmRleCA+IHN3aXBlci5zbGlkZXMubGVuZ3RoICYmICFpc1ZpcnR1YWwpIGJyZWFrO1xuICAgICAgICBhY3RpdmVTbGlkZXMucHVzaChnZXRTbGlkZUJ5SW5kZXgoaW5kZXgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYWN0aXZlU2xpZGVzLnB1c2goZ2V0U2xpZGVCeUluZGV4KHN3aXBlci5hY3RpdmVJbmRleCkpO1xuICB9IC8vIEZpbmQgbmV3IGhlaWdodCBmcm9tIGhpZ2hlc3Qgc2xpZGUgaW4gdmlld1xuXG5cbiAgZm9yIChpID0gMDsgaSA8IGFjdGl2ZVNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmICh0eXBlb2YgYWN0aXZlU2xpZGVzW2ldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgaGVpZ2h0ID0gYWN0aXZlU2xpZGVzW2ldLm9mZnNldEhlaWdodDtcbiAgICAgIG5ld0hlaWdodCA9IGhlaWdodCA+IG5ld0hlaWdodCA/IGhlaWdodCA6IG5ld0hlaWdodDtcbiAgICB9XG4gIH0gLy8gVXBkYXRlIEhlaWdodFxuXG5cbiAgaWYgKG5ld0hlaWdodCB8fCBuZXdIZWlnaHQgPT09IDApIHN3aXBlci4kd3JhcHBlckVsLmNzcygnaGVpZ2h0JywgYCR7bmV3SGVpZ2h0fXB4YCk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlU2xpZGVzT2Zmc2V0KCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgc2xpZGVzW2ldLnN3aXBlclNsaWRlT2Zmc2V0ID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gc2xpZGVzW2ldLm9mZnNldExlZnQgOiBzbGlkZXNbaV0ub2Zmc2V0VG9wO1xuICB9XG59IiwiaW1wb3J0ICQgZnJvbSAnLi4vLi4vc2hhcmVkL2RvbS5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1cGRhdGVTbGlkZXNQcm9ncmVzcyh0cmFuc2xhdGUgPSB0aGlzICYmIHRoaXMudHJhbnNsYXRlIHx8IDApIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgY29uc3Qge1xuICAgIHNsaWRlcyxcbiAgICBydGxUcmFuc2xhdGU6IHJ0bCxcbiAgICBzbmFwR3JpZFxuICB9ID0gc3dpcGVyO1xuICBpZiAoc2xpZGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBpZiAodHlwZW9mIHNsaWRlc1swXS5zd2lwZXJTbGlkZU9mZnNldCA9PT0gJ3VuZGVmaW5lZCcpIHN3aXBlci51cGRhdGVTbGlkZXNPZmZzZXQoKTtcbiAgbGV0IG9mZnNldENlbnRlciA9IC10cmFuc2xhdGU7XG4gIGlmIChydGwpIG9mZnNldENlbnRlciA9IHRyYW5zbGF0ZTsgLy8gVmlzaWJsZSBTbGlkZXNcblxuICBzbGlkZXMucmVtb3ZlQ2xhc3MocGFyYW1zLnNsaWRlVmlzaWJsZUNsYXNzKTtcbiAgc3dpcGVyLnZpc2libGVTbGlkZXNJbmRleGVzID0gW107XG4gIHN3aXBlci52aXNpYmxlU2xpZGVzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBzbGlkZSA9IHNsaWRlc1tpXTtcbiAgICBsZXQgc2xpZGVPZmZzZXQgPSBzbGlkZS5zd2lwZXJTbGlkZU9mZnNldDtcblxuICAgIGlmIChwYXJhbXMuY3NzTW9kZSAmJiBwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgIHNsaWRlT2Zmc2V0IC09IHNsaWRlc1swXS5zd2lwZXJTbGlkZU9mZnNldDtcbiAgICB9XG5cbiAgICBjb25zdCBzbGlkZVByb2dyZXNzID0gKG9mZnNldENlbnRlciArIChwYXJhbXMuY2VudGVyZWRTbGlkZXMgPyBzd2lwZXIubWluVHJhbnNsYXRlKCkgOiAwKSAtIHNsaWRlT2Zmc2V0KSAvIChzbGlkZS5zd2lwZXJTbGlkZVNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVuKTtcbiAgICBjb25zdCBvcmlnaW5hbFNsaWRlUHJvZ3Jlc3MgPSAob2Zmc2V0Q2VudGVyIC0gc25hcEdyaWRbMF0gKyAocGFyYW1zLmNlbnRlcmVkU2xpZGVzID8gc3dpcGVyLm1pblRyYW5zbGF0ZSgpIDogMCkgLSBzbGlkZU9mZnNldCkgLyAoc2xpZGUuc3dpcGVyU2xpZGVTaXplICsgcGFyYW1zLnNwYWNlQmV0d2Vlbik7XG4gICAgY29uc3Qgc2xpZGVCZWZvcmUgPSAtKG9mZnNldENlbnRlciAtIHNsaWRlT2Zmc2V0KTtcbiAgICBjb25zdCBzbGlkZUFmdGVyID0gc2xpZGVCZWZvcmUgKyBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkW2ldO1xuICAgIGNvbnN0IGlzVmlzaWJsZSA9IHNsaWRlQmVmb3JlID49IDAgJiYgc2xpZGVCZWZvcmUgPCBzd2lwZXIuc2l6ZSAtIDEgfHwgc2xpZGVBZnRlciA+IDEgJiYgc2xpZGVBZnRlciA8PSBzd2lwZXIuc2l6ZSB8fCBzbGlkZUJlZm9yZSA8PSAwICYmIHNsaWRlQWZ0ZXIgPj0gc3dpcGVyLnNpemU7XG5cbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICBzd2lwZXIudmlzaWJsZVNsaWRlcy5wdXNoKHNsaWRlKTtcbiAgICAgIHN3aXBlci52aXNpYmxlU2xpZGVzSW5kZXhlcy5wdXNoKGkpO1xuICAgICAgc2xpZGVzLmVxKGkpLmFkZENsYXNzKHBhcmFtcy5zbGlkZVZpc2libGVDbGFzcyk7XG4gICAgfVxuXG4gICAgc2xpZGUucHJvZ3Jlc3MgPSBydGwgPyAtc2xpZGVQcm9ncmVzcyA6IHNsaWRlUHJvZ3Jlc3M7XG4gICAgc2xpZGUub3JpZ2luYWxQcm9ncmVzcyA9IHJ0bCA/IC1vcmlnaW5hbFNsaWRlUHJvZ3Jlc3MgOiBvcmlnaW5hbFNsaWRlUHJvZ3Jlc3M7XG4gIH1cblxuICBzd2lwZXIudmlzaWJsZVNsaWRlcyA9ICQoc3dpcGVyLnZpc2libGVTbGlkZXMpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZVByb2dyZXNzKHRyYW5zbGF0ZSkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgdHJhbnNsYXRlID09PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IG11bHRpcGxpZXIgPSBzd2lwZXIucnRsVHJhbnNsYXRlID8gLTEgOiAxOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblxuICAgIHRyYW5zbGF0ZSA9IHN3aXBlciAmJiBzd2lwZXIudHJhbnNsYXRlICYmIHN3aXBlci50cmFuc2xhdGUgKiBtdWx0aXBsaWVyIHx8IDA7XG4gIH1cblxuICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICBjb25zdCB0cmFuc2xhdGVzRGlmZiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgbGV0IHtcbiAgICBwcm9ncmVzcyxcbiAgICBpc0JlZ2lubmluZyxcbiAgICBpc0VuZFxuICB9ID0gc3dpcGVyO1xuICBjb25zdCB3YXNCZWdpbm5pbmcgPSBpc0JlZ2lubmluZztcbiAgY29uc3Qgd2FzRW5kID0gaXNFbmQ7XG5cbiAgaWYgKHRyYW5zbGF0ZXNEaWZmID09PSAwKSB7XG4gICAgcHJvZ3Jlc3MgPSAwO1xuICAgIGlzQmVnaW5uaW5nID0gdHJ1ZTtcbiAgICBpc0VuZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcHJvZ3Jlc3MgPSAodHJhbnNsYXRlIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSAvIHRyYW5zbGF0ZXNEaWZmO1xuICAgIGlzQmVnaW5uaW5nID0gcHJvZ3Jlc3MgPD0gMDtcbiAgICBpc0VuZCA9IHByb2dyZXNzID49IDE7XG4gIH1cblxuICBPYmplY3QuYXNzaWduKHN3aXBlciwge1xuICAgIHByb2dyZXNzLFxuICAgIGlzQmVnaW5uaW5nLFxuICAgIGlzRW5kXG4gIH0pO1xuICBpZiAocGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgfHwgcGFyYW1zLmNlbnRlcmVkU2xpZGVzICYmIHBhcmFtcy5hdXRvSGVpZ2h0KSBzd2lwZXIudXBkYXRlU2xpZGVzUHJvZ3Jlc3ModHJhbnNsYXRlKTtcblxuICBpZiAoaXNCZWdpbm5pbmcgJiYgIXdhc0JlZ2lubmluZykge1xuICAgIHN3aXBlci5lbWl0KCdyZWFjaEJlZ2lubmluZyB0b0VkZ2UnKTtcbiAgfVxuXG4gIGlmIChpc0VuZCAmJiAhd2FzRW5kKSB7XG4gICAgc3dpcGVyLmVtaXQoJ3JlYWNoRW5kIHRvRWRnZScpO1xuICB9XG5cbiAgaWYgKHdhc0JlZ2lubmluZyAmJiAhaXNCZWdpbm5pbmcgfHwgd2FzRW5kICYmICFpc0VuZCkge1xuICAgIHN3aXBlci5lbWl0KCdmcm9tRWRnZScpO1xuICB9XG5cbiAgc3dpcGVyLmVtaXQoJ3Byb2dyZXNzJywgcHJvZ3Jlc3MpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZVNsaWRlc0NsYXNzZXMoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICBzbGlkZXMsXG4gICAgcGFyYW1zLFxuICAgICR3cmFwcGVyRWwsXG4gICAgYWN0aXZlSW5kZXgsXG4gICAgcmVhbEluZGV4XG4gIH0gPSBzd2lwZXI7XG4gIGNvbnN0IGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gIHNsaWRlcy5yZW1vdmVDbGFzcyhgJHtwYXJhbXMuc2xpZGVBY3RpdmVDbGFzc30gJHtwYXJhbXMuc2xpZGVOZXh0Q2xhc3N9ICR7cGFyYW1zLnNsaWRlUHJldkNsYXNzfSAke3BhcmFtcy5zbGlkZUR1cGxpY2F0ZUFjdGl2ZUNsYXNzfSAke3BhcmFtcy5zbGlkZUR1cGxpY2F0ZU5leHRDbGFzc30gJHtwYXJhbXMuc2xpZGVEdXBsaWNhdGVQcmV2Q2xhc3N9YCk7XG4gIGxldCBhY3RpdmVTbGlkZTtcblxuICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgYWN0aXZlU2xpZGUgPSBzd2lwZXIuJHdyYXBwZXJFbC5maW5kKGAuJHtwYXJhbXMuc2xpZGVDbGFzc31bZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke2FjdGl2ZUluZGV4fVwiXWApO1xuICB9IGVsc2Uge1xuICAgIGFjdGl2ZVNsaWRlID0gc2xpZGVzLmVxKGFjdGl2ZUluZGV4KTtcbiAgfSAvLyBBY3RpdmUgY2xhc3Nlc1xuXG5cbiAgYWN0aXZlU2xpZGUuYWRkQ2xhc3MocGFyYW1zLnNsaWRlQWN0aXZlQ2xhc3MpO1xuXG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIC8vIER1cGxpY2F0ZSB0byBhbGwgbG9vcGVkIHNsaWRlc1xuICAgIGlmIChhY3RpdmVTbGlkZS5oYXNDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICR3cmFwcGVyRWwuY2hpbGRyZW4oYC4ke3BhcmFtcy5zbGlkZUNsYXNzfTpub3QoLiR7cGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3N9KVtkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cIiR7cmVhbEluZGV4fVwiXWApLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUFjdGl2ZUNsYXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJHdyYXBwZXJFbC5jaGlsZHJlbihgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9LiR7cGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3N9W2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVwiJHtyZWFsSW5kZXh9XCJdYCkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQWN0aXZlQ2xhc3MpO1xuICAgIH1cbiAgfSAvLyBOZXh0IFNsaWRlXG5cblxuICBsZXQgbmV4dFNsaWRlID0gYWN0aXZlU2xpZGUubmV4dEFsbChgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9YCkuZXEoMCkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlTmV4dENsYXNzKTtcblxuICBpZiAocGFyYW1zLmxvb3AgJiYgbmV4dFNsaWRlLmxlbmd0aCA9PT0gMCkge1xuICAgIG5leHRTbGlkZSA9IHNsaWRlcy5lcSgwKTtcbiAgICBuZXh0U2xpZGUuYWRkQ2xhc3MocGFyYW1zLnNsaWRlTmV4dENsYXNzKTtcbiAgfSAvLyBQcmV2IFNsaWRlXG5cblxuICBsZXQgcHJldlNsaWRlID0gYWN0aXZlU2xpZGUucHJldkFsbChgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9YCkuZXEoMCkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlUHJldkNsYXNzKTtcblxuICBpZiAocGFyYW1zLmxvb3AgJiYgcHJldlNsaWRlLmxlbmd0aCA9PT0gMCkge1xuICAgIHByZXZTbGlkZSA9IHNsaWRlcy5lcSgtMSk7XG4gICAgcHJldlNsaWRlLmFkZENsYXNzKHBhcmFtcy5zbGlkZVByZXZDbGFzcyk7XG4gIH1cblxuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAvLyBEdXBsaWNhdGUgdG8gYWxsIGxvb3BlZCBzbGlkZXNcbiAgICBpZiAobmV4dFNsaWRlLmhhc0NsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkge1xuICAgICAgJHdyYXBwZXJFbC5jaGlsZHJlbihgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9Om5vdCguJHtwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzc30pW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVwiJHtuZXh0U2xpZGUuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKX1cIl1gKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVOZXh0Q2xhc3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkd3JhcHBlckVsLmNoaWxkcmVuKGAuJHtwYXJhbXMuc2xpZGVDbGFzc30uJHtwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzc31bZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke25leHRTbGlkZS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpfVwiXWApLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZU5leHRDbGFzcyk7XG4gICAgfVxuXG4gICAgaWYgKHByZXZTbGlkZS5oYXNDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICR3cmFwcGVyRWwuY2hpbGRyZW4oYC4ke3BhcmFtcy5zbGlkZUNsYXNzfTpub3QoLiR7cGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3N9KVtkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cIiR7cHJldlNsaWRlLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyl9XCJdYCkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlUHJldkNsYXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJHdyYXBwZXJFbC5jaGlsZHJlbihgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9LiR7cGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3N9W2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVwiJHtwcmV2U2xpZGUuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKX1cIl1gKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVQcmV2Q2xhc3MpO1xuICAgIH1cbiAgfVxuXG4gIHN3aXBlci5lbWl0U2xpZGVzQ2xhc3NlcygpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZUFjdGl2ZUluZGV4KG5ld0FjdGl2ZUluZGV4KSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyBzd2lwZXIudHJhbnNsYXRlIDogLXN3aXBlci50cmFuc2xhdGU7XG4gIGNvbnN0IHtcbiAgICBzbGlkZXNHcmlkLFxuICAgIHNuYXBHcmlkLFxuICAgIHBhcmFtcyxcbiAgICBhY3RpdmVJbmRleDogcHJldmlvdXNJbmRleCxcbiAgICByZWFsSW5kZXg6IHByZXZpb3VzUmVhbEluZGV4LFxuICAgIHNuYXBJbmRleDogcHJldmlvdXNTbmFwSW5kZXhcbiAgfSA9IHN3aXBlcjtcbiAgbGV0IGFjdGl2ZUluZGV4ID0gbmV3QWN0aXZlSW5kZXg7XG4gIGxldCBzbmFwSW5kZXg7XG5cbiAgaWYgKHR5cGVvZiBhY3RpdmVJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlc0dyaWQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2xpZGVzR3JpZFtpICsgMV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmICh0cmFuc2xhdGUgPj0gc2xpZGVzR3JpZFtpXSAmJiB0cmFuc2xhdGUgPCBzbGlkZXNHcmlkW2kgKyAxXSAtIChzbGlkZXNHcmlkW2kgKyAxXSAtIHNsaWRlc0dyaWRbaV0pIC8gMikge1xuICAgICAgICAgIGFjdGl2ZUluZGV4ID0gaTtcbiAgICAgICAgfSBlbHNlIGlmICh0cmFuc2xhdGUgPj0gc2xpZGVzR3JpZFtpXSAmJiB0cmFuc2xhdGUgPCBzbGlkZXNHcmlkW2kgKyAxXSkge1xuICAgICAgICAgIGFjdGl2ZUluZGV4ID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHJhbnNsYXRlID49IHNsaWRlc0dyaWRbaV0pIHtcbiAgICAgICAgYWN0aXZlSW5kZXggPSBpO1xuICAgICAgfVxuICAgIH0gLy8gTm9ybWFsaXplIHNsaWRlSW5kZXhcblxuXG4gICAgaWYgKHBhcmFtcy5ub3JtYWxpemVTbGlkZUluZGV4KSB7XG4gICAgICBpZiAoYWN0aXZlSW5kZXggPCAwIHx8IHR5cGVvZiBhY3RpdmVJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIGFjdGl2ZUluZGV4ID0gMDtcbiAgICB9XG4gIH1cblxuICBpZiAoc25hcEdyaWQuaW5kZXhPZih0cmFuc2xhdGUpID49IDApIHtcbiAgICBzbmFwSW5kZXggPSBzbmFwR3JpZC5pbmRleE9mKHRyYW5zbGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc2tpcCA9IE1hdGgubWluKHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAsIGFjdGl2ZUluZGV4KTtcbiAgICBzbmFwSW5kZXggPSBza2lwICsgTWF0aC5mbG9vcigoYWN0aXZlSW5kZXggLSBza2lwKSAvIHBhcmFtcy5zbGlkZXNQZXJHcm91cCk7XG4gIH1cblxuICBpZiAoc25hcEluZGV4ID49IHNuYXBHcmlkLmxlbmd0aCkgc25hcEluZGV4ID0gc25hcEdyaWQubGVuZ3RoIC0gMTtcblxuICBpZiAoYWN0aXZlSW5kZXggPT09IHByZXZpb3VzSW5kZXgpIHtcbiAgICBpZiAoc25hcEluZGV4ICE9PSBwcmV2aW91c1NuYXBJbmRleCkge1xuICAgICAgc3dpcGVyLnNuYXBJbmRleCA9IHNuYXBJbmRleDtcbiAgICAgIHN3aXBlci5lbWl0KCdzbmFwSW5kZXhDaGFuZ2UnKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH0gLy8gR2V0IHJlYWwgaW5kZXhcblxuXG4gIGNvbnN0IHJlYWxJbmRleCA9IHBhcnNlSW50KHN3aXBlci5zbGlkZXMuZXEoYWN0aXZlSW5kZXgpLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykgfHwgYWN0aXZlSW5kZXgsIDEwKTtcbiAgT2JqZWN0LmFzc2lnbihzd2lwZXIsIHtcbiAgICBzbmFwSW5kZXgsXG4gICAgcmVhbEluZGV4LFxuICAgIHByZXZpb3VzSW5kZXgsXG4gICAgYWN0aXZlSW5kZXhcbiAgfSk7XG4gIHN3aXBlci5lbWl0KCdhY3RpdmVJbmRleENoYW5nZScpO1xuICBzd2lwZXIuZW1pdCgnc25hcEluZGV4Q2hhbmdlJyk7XG5cbiAgaWYgKHByZXZpb3VzUmVhbEluZGV4ICE9PSByZWFsSW5kZXgpIHtcbiAgICBzd2lwZXIuZW1pdCgncmVhbEluZGV4Q2hhbmdlJyk7XG4gIH1cblxuICBpZiAoc3dpcGVyLmluaXRpYWxpemVkIHx8IHN3aXBlci5wYXJhbXMucnVuQ2FsbGJhY2tzT25Jbml0KSB7XG4gICAgc3dpcGVyLmVtaXQoJ3NsaWRlQ2hhbmdlJyk7XG4gIH1cbn0iLCJpbXBvcnQgJCBmcm9tICcuLi8uLi9zaGFyZWQvZG9tLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZUNsaWNrZWRTbGlkZShlKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gIGNvbnN0IHNsaWRlID0gJChlKS5jbG9zZXN0KGAuJHtwYXJhbXMuc2xpZGVDbGFzc31gKVswXTtcbiAgbGV0IHNsaWRlRm91bmQgPSBmYWxzZTtcbiAgbGV0IHNsaWRlSW5kZXg7XG5cbiAgaWYgKHNsaWRlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAoc3dpcGVyLnNsaWRlc1tpXSA9PT0gc2xpZGUpIHtcbiAgICAgICAgc2xpZGVGb3VuZCA9IHRydWU7XG4gICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc2xpZGUgJiYgc2xpZGVGb3VuZCkge1xuICAgIHN3aXBlci5jbGlja2VkU2xpZGUgPSBzbGlkZTtcblxuICAgIGlmIChzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCkge1xuICAgICAgc3dpcGVyLmNsaWNrZWRJbmRleCA9IHBhcnNlSW50KCQoc2xpZGUpLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JyksIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLmNsaWNrZWRJbmRleCA9IHNsaWRlSW5kZXg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN3aXBlci5jbGlja2VkU2xpZGUgPSB1bmRlZmluZWQ7XG4gICAgc3dpcGVyLmNsaWNrZWRJbmRleCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocGFyYW1zLnNsaWRlVG9DbGlja2VkU2xpZGUgJiYgc3dpcGVyLmNsaWNrZWRJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN3aXBlci5jbGlja2VkSW5kZXggIT09IHN3aXBlci5hY3RpdmVJbmRleCkge1xuICAgIHN3aXBlci5zbGlkZVRvQ2xpY2tlZFNsaWRlKCk7XG4gIH1cbn0iLCJpbXBvcnQgZ2V0VHJhbnNsYXRlIGZyb20gJy4vZ2V0VHJhbnNsYXRlLmpzJztcbmltcG9ydCBzZXRUcmFuc2xhdGUgZnJvbSAnLi9zZXRUcmFuc2xhdGUuanMnO1xuaW1wb3J0IG1pblRyYW5zbGF0ZSBmcm9tICcuL21pblRyYW5zbGF0ZS5qcyc7XG5pbXBvcnQgbWF4VHJhbnNsYXRlIGZyb20gJy4vbWF4VHJhbnNsYXRlLmpzJztcbmltcG9ydCB0cmFuc2xhdGVUbyBmcm9tICcuL3RyYW5zbGF0ZVRvLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0VHJhbnNsYXRlLFxuICBzZXRUcmFuc2xhdGUsXG4gIG1pblRyYW5zbGF0ZSxcbiAgbWF4VHJhbnNsYXRlLFxuICB0cmFuc2xhdGVUb1xufTsiLCJpbXBvcnQgeyBnZXRUcmFuc2xhdGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U3dpcGVyVHJhbnNsYXRlKGF4aXMgPSB0aGlzLmlzSG9yaXpvbnRhbCgpID8gJ3gnIDogJ3knKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXMsXG4gICAgcnRsVHJhbnNsYXRlOiBydGwsXG4gICAgdHJhbnNsYXRlLFxuICAgICR3cmFwcGVyRWxcbiAgfSA9IHN3aXBlcjtcblxuICBpZiAocGFyYW1zLnZpcnR1YWxUcmFuc2xhdGUpIHtcbiAgICByZXR1cm4gcnRsID8gLXRyYW5zbGF0ZSA6IHRyYW5zbGF0ZTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgIHJldHVybiB0cmFuc2xhdGU7XG4gIH1cblxuICBsZXQgY3VycmVudFRyYW5zbGF0ZSA9IGdldFRyYW5zbGF0ZSgkd3JhcHBlckVsWzBdLCBheGlzKTtcbiAgaWYgKHJ0bCkgY3VycmVudFRyYW5zbGF0ZSA9IC1jdXJyZW50VHJhbnNsYXRlO1xuICByZXR1cm4gY3VycmVudFRyYW5zbGF0ZSB8fCAwO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSh0cmFuc2xhdGUsIGJ5Q29udHJvbGxlcikge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgcnRsVHJhbnNsYXRlOiBydGwsXG4gICAgcGFyYW1zLFxuICAgICR3cmFwcGVyRWwsXG4gICAgd3JhcHBlckVsLFxuICAgIHByb2dyZXNzXG4gIH0gPSBzd2lwZXI7XG4gIGxldCB4ID0gMDtcbiAgbGV0IHkgPSAwO1xuICBjb25zdCB6ID0gMDtcblxuICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgeCA9IHJ0bCA/IC10cmFuc2xhdGUgOiB0cmFuc2xhdGU7XG4gIH0gZWxzZSB7XG4gICAgeSA9IHRyYW5zbGF0ZTtcbiAgfVxuXG4gIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSB7XG4gICAgeCA9IE1hdGguZmxvb3IoeCk7XG4gICAgeSA9IE1hdGguZmxvb3IoeSk7XG4gIH1cblxuICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICB3cmFwcGVyRWxbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gLXggOiAteTtcbiAgfSBlbHNlIGlmICghcGFyYW1zLnZpcnR1YWxUcmFuc2xhdGUpIHtcbiAgICAkd3JhcHBlckVsLnRyYW5zZm9ybShgdHJhbnNsYXRlM2QoJHt4fXB4LCAke3l9cHgsICR7en1weClgKTtcbiAgfVxuXG4gIHN3aXBlci5wcmV2aW91c1RyYW5zbGF0ZSA9IHN3aXBlci50cmFuc2xhdGU7XG4gIHN3aXBlci50cmFuc2xhdGUgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB4IDogeTsgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byB1cGRhdGUgcHJvZ3Jlc3NcblxuICBsZXQgbmV3UHJvZ3Jlc3M7XG4gIGNvbnN0IHRyYW5zbGF0ZXNEaWZmID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuXG4gIGlmICh0cmFuc2xhdGVzRGlmZiA9PT0gMCkge1xuICAgIG5ld1Byb2dyZXNzID0gMDtcbiAgfSBlbHNlIHtcbiAgICBuZXdQcm9ncmVzcyA9ICh0cmFuc2xhdGUgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIC8gdHJhbnNsYXRlc0RpZmY7XG4gIH1cblxuICBpZiAobmV3UHJvZ3Jlc3MgIT09IHByb2dyZXNzKSB7XG4gICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKHRyYW5zbGF0ZSk7XG4gIH1cblxuICBzd2lwZXIuZW1pdCgnc2V0VHJhbnNsYXRlJywgc3dpcGVyLnRyYW5zbGF0ZSwgYnlDb250cm9sbGVyKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtaW5UcmFuc2xhdGUoKSB7XG4gIHJldHVybiAtdGhpcy5zbmFwR3JpZFswXTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXhUcmFuc2xhdGUoKSB7XG4gIHJldHVybiAtdGhpcy5zbmFwR3JpZFt0aGlzLnNuYXBHcmlkLmxlbmd0aCAtIDFdO1xufSIsImltcG9ydCB7IGFuaW1hdGVDU1NNb2RlU2Nyb2xsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zbGF0ZVRvKHRyYW5zbGF0ZSA9IDAsIHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQsIHJ1bkNhbGxiYWNrcyA9IHRydWUsIHRyYW5zbGF0ZUJvdW5kcyA9IHRydWUsIGludGVybmFsKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXMsXG4gICAgd3JhcHBlckVsXG4gIH0gPSBzd2lwZXI7XG5cbiAgaWYgKHN3aXBlci5hbmltYXRpbmcgJiYgcGFyYW1zLnByZXZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG1pblRyYW5zbGF0ZSA9IHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgY29uc3QgbWF4VHJhbnNsYXRlID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpO1xuICBsZXQgbmV3VHJhbnNsYXRlO1xuICBpZiAodHJhbnNsYXRlQm91bmRzICYmIHRyYW5zbGF0ZSA+IG1pblRyYW5zbGF0ZSkgbmV3VHJhbnNsYXRlID0gbWluVHJhbnNsYXRlO2Vsc2UgaWYgKHRyYW5zbGF0ZUJvdW5kcyAmJiB0cmFuc2xhdGUgPCBtYXhUcmFuc2xhdGUpIG5ld1RyYW5zbGF0ZSA9IG1heFRyYW5zbGF0ZTtlbHNlIG5ld1RyYW5zbGF0ZSA9IHRyYW5zbGF0ZTsgLy8gVXBkYXRlIHByb2dyZXNzXG5cbiAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKG5ld1RyYW5zbGF0ZSk7XG5cbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgY29uc3QgaXNIID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpO1xuXG4gICAgaWYgKHNwZWVkID09PSAwKSB7XG4gICAgICB3cmFwcGVyRWxbaXNIID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gLW5ld1RyYW5zbGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFzd2lwZXIuc3VwcG9ydC5zbW9vdGhTY3JvbGwpIHtcbiAgICAgICAgYW5pbWF0ZUNTU01vZGVTY3JvbGwoe1xuICAgICAgICAgIHN3aXBlcixcbiAgICAgICAgICB0YXJnZXRQb3NpdGlvbjogLW5ld1RyYW5zbGF0ZSxcbiAgICAgICAgICBzaWRlOiBpc0ggPyAnbGVmdCcgOiAndG9wJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHdyYXBwZXJFbC5zY3JvbGxUbyh7XG4gICAgICAgIFtpc0ggPyAnbGVmdCcgOiAndG9wJ106IC1uZXdUcmFuc2xhdGUsXG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoc3BlZWQgPT09IDApIHtcbiAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcbiAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1RyYW5zbGF0ZSk7XG5cbiAgICBpZiAocnVuQ2FsbGJhY2tzKSB7XG4gICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlVHJhbnNpdGlvblN0YXJ0Jywgc3BlZWQsIGludGVybmFsKTtcbiAgICAgIHN3aXBlci5lbWl0KCd0cmFuc2l0aW9uRW5kJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKHNwZWVkKTtcbiAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1RyYW5zbGF0ZSk7XG5cbiAgICBpZiAocnVuQ2FsbGJhY2tzKSB7XG4gICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlVHJhbnNpdGlvblN0YXJ0Jywgc3BlZWQsIGludGVybmFsKTtcbiAgICAgIHN3aXBlci5lbWl0KCd0cmFuc2l0aW9uU3RhcnQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXN3aXBlci5hbmltYXRpbmcpIHtcbiAgICAgIHN3aXBlci5hbmltYXRpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAoIXN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpIHtcbiAgICAgICAgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQoZSkge1xuICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgICAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMpIHJldHVybjtcbiAgICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQgPSBudWxsO1xuICAgICAgICAgIGRlbGV0ZSBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kO1xuXG4gICAgICAgICAgaWYgKHJ1bkNhbGxiYWNrcykge1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ3RyYW5zaXRpb25FbmQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2l0aW9uRW1pdCh7XG4gIHN3aXBlcixcbiAgcnVuQ2FsbGJhY2tzLFxuICBkaXJlY3Rpb24sXG4gIHN0ZXBcbn0pIHtcbiAgY29uc3Qge1xuICAgIGFjdGl2ZUluZGV4LFxuICAgIHByZXZpb3VzSW5kZXhcbiAgfSA9IHN3aXBlcjtcbiAgbGV0IGRpciA9IGRpcmVjdGlvbjtcblxuICBpZiAoIWRpcikge1xuICAgIGlmIChhY3RpdmVJbmRleCA+IHByZXZpb3VzSW5kZXgpIGRpciA9ICduZXh0JztlbHNlIGlmIChhY3RpdmVJbmRleCA8IHByZXZpb3VzSW5kZXgpIGRpciA9ICdwcmV2JztlbHNlIGRpciA9ICdyZXNldCc7XG4gIH1cblxuICBzd2lwZXIuZW1pdChgdHJhbnNpdGlvbiR7c3RlcH1gKTtcblxuICBpZiAocnVuQ2FsbGJhY2tzICYmIGFjdGl2ZUluZGV4ICE9PSBwcmV2aW91c0luZGV4KSB7XG4gICAgaWYgKGRpciA9PT0gJ3Jlc2V0Jykge1xuICAgICAgc3dpcGVyLmVtaXQoYHNsaWRlUmVzZXRUcmFuc2l0aW9uJHtzdGVwfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KGBzbGlkZUNoYW5nZVRyYW5zaXRpb24ke3N0ZXB9YCk7XG5cbiAgICBpZiAoZGlyID09PSAnbmV4dCcpIHtcbiAgICAgIHN3aXBlci5lbWl0KGBzbGlkZU5leHRUcmFuc2l0aW9uJHtzdGVwfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuZW1pdChgc2xpZGVQcmV2VHJhbnNpdGlvbiR7c3RlcH1gKTtcbiAgICB9XG4gIH1cbn0iLCJpbXBvcnQgc2xpZGVUbyBmcm9tICcuL3NsaWRlVG8uanMnO1xuaW1wb3J0IHNsaWRlVG9Mb29wIGZyb20gJy4vc2xpZGVUb0xvb3AuanMnO1xuaW1wb3J0IHNsaWRlTmV4dCBmcm9tICcuL3NsaWRlTmV4dC5qcyc7XG5pbXBvcnQgc2xpZGVQcmV2IGZyb20gJy4vc2xpZGVQcmV2LmpzJztcbmltcG9ydCBzbGlkZVJlc2V0IGZyb20gJy4vc2xpZGVSZXNldC5qcyc7XG5pbXBvcnQgc2xpZGVUb0Nsb3Nlc3QgZnJvbSAnLi9zbGlkZVRvQ2xvc2VzdC5qcyc7XG5pbXBvcnQgc2xpZGVUb0NsaWNrZWRTbGlkZSBmcm9tICcuL3NsaWRlVG9DbGlja2VkU2xpZGUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICBzbGlkZVRvLFxuICBzbGlkZVRvTG9vcCxcbiAgc2xpZGVOZXh0LFxuICBzbGlkZVByZXYsXG4gIHNsaWRlUmVzZXQsXG4gIHNsaWRlVG9DbG9zZXN0LFxuICBzbGlkZVRvQ2xpY2tlZFNsaWRlXG59OyIsImltcG9ydCB7IGFuaW1hdGVDU1NNb2RlU2Nyb2xsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNsaWRlVG8oaW5kZXggPSAwLCBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkLCBydW5DYWxsYmFja3MgPSB0cnVlLCBpbnRlcm5hbCwgaW5pdGlhbCkge1xuICBpZiAodHlwZW9mIGluZGV4ICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgaW5kZXggIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJ2luZGV4JyBhcmd1bWVudCBjYW5ub3QgaGF2ZSB0eXBlIG90aGVyIHRoYW4gJ251bWJlcicgb3IgJ3N0cmluZycuIFske3R5cGVvZiBpbmRleH1dIGdpdmVuLmApO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbmRleCA9PT0gJ3N0cmluZycpIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYGluZGV4YCBhcmd1bWVudCBjb252ZXJ0ZWQgZnJvbSBgc3RyaW5nYCB0byBgbnVtYmVyYC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGNvbnN0IGluZGV4QXNOdW1iZXIgPSBwYXJzZUludChpbmRleCwgMTApO1xuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgYGluZGV4YCBhcmd1bWVudCBpcyBhIHZhbGlkIGBudW1iZXJgXG4gICAgICogYWZ0ZXIgYmVpbmcgY29udmVydGVkIGZyb20gdGhlIGBzdHJpbmdgIHR5cGUuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG5cbiAgICBjb25zdCBpc1ZhbGlkTnVtYmVyID0gaXNGaW5pdGUoaW5kZXhBc051bWJlcik7XG5cbiAgICBpZiAoIWlzVmFsaWROdW1iZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHBhc3NlZC1pbiAnaW5kZXgnIChzdHJpbmcpIGNvdWxkbid0IGJlIGNvbnZlcnRlZCB0byAnbnVtYmVyJy4gWyR7aW5kZXh9XSBnaXZlbi5gKTtcbiAgICB9IC8vIEtub3dpbmcgdGhhdCB0aGUgY29udmVydGVkIGBpbmRleGAgaXMgYSB2YWxpZCBudW1iZXIsXG4gICAgLy8gd2UgY2FuIHVwZGF0ZSB0aGUgb3JpZ2luYWwgYXJndW1lbnQncyB2YWx1ZS5cblxuXG4gICAgaW5kZXggPSBpbmRleEFzTnVtYmVyO1xuICB9XG5cbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgbGV0IHNsaWRlSW5kZXggPSBpbmRleDtcbiAgaWYgKHNsaWRlSW5kZXggPCAwKSBzbGlkZUluZGV4ID0gMDtcbiAgY29uc3Qge1xuICAgIHBhcmFtcyxcbiAgICBzbmFwR3JpZCxcbiAgICBzbGlkZXNHcmlkLFxuICAgIHByZXZpb3VzSW5kZXgsXG4gICAgYWN0aXZlSW5kZXgsXG4gICAgcnRsVHJhbnNsYXRlOiBydGwsXG4gICAgd3JhcHBlckVsLFxuICAgIGVuYWJsZWRcbiAgfSA9IHN3aXBlcjtcblxuICBpZiAoc3dpcGVyLmFuaW1hdGluZyAmJiBwYXJhbXMucHJldmVudEludGVyYWN0aW9uT25UcmFuc2l0aW9uIHx8ICFlbmFibGVkICYmICFpbnRlcm5hbCAmJiAhaW5pdGlhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHNraXAgPSBNYXRoLm1pbihzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCwgc2xpZGVJbmRleCk7XG4gIGxldCBzbmFwSW5kZXggPSBza2lwICsgTWF0aC5mbG9vcigoc2xpZGVJbmRleCAtIHNraXApIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCk7XG4gIGlmIChzbmFwSW5kZXggPj0gc25hcEdyaWQubGVuZ3RoKSBzbmFwSW5kZXggPSBzbmFwR3JpZC5sZW5ndGggLSAxO1xuICBjb25zdCB0cmFuc2xhdGUgPSAtc25hcEdyaWRbc25hcEluZGV4XTsgLy8gTm9ybWFsaXplIHNsaWRlSW5kZXhcblxuICBpZiAocGFyYW1zLm5vcm1hbGl6ZVNsaWRlSW5kZXgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlc0dyaWQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUcmFuc2xhdGUgPSAtTWF0aC5mbG9vcih0cmFuc2xhdGUgKiAxMDApO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEdyaWQgPSBNYXRoLmZsb29yKHNsaWRlc0dyaWRbaV0gKiAxMDApO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEdyaWROZXh0ID0gTWF0aC5mbG9vcihzbGlkZXNHcmlkW2kgKyAxXSAqIDEwMCk7XG5cbiAgICAgIGlmICh0eXBlb2Ygc2xpZGVzR3JpZFtpICsgMV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmIChub3JtYWxpemVkVHJhbnNsYXRlID49IG5vcm1hbGl6ZWRHcmlkICYmIG5vcm1hbGl6ZWRUcmFuc2xhdGUgPCBub3JtYWxpemVkR3JpZE5leHQgLSAobm9ybWFsaXplZEdyaWROZXh0IC0gbm9ybWFsaXplZEdyaWQpIC8gMikge1xuICAgICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWRUcmFuc2xhdGUgPj0gbm9ybWFsaXplZEdyaWQgJiYgbm9ybWFsaXplZFRyYW5zbGF0ZSA8IG5vcm1hbGl6ZWRHcmlkTmV4dCkge1xuICAgICAgICAgIHNsaWRlSW5kZXggPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkVHJhbnNsYXRlID49IG5vcm1hbGl6ZWRHcmlkKSB7XG4gICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBEaXJlY3Rpb25zIGxvY2tzXG5cblxuICBpZiAoc3dpcGVyLmluaXRpYWxpemVkICYmIHNsaWRlSW5kZXggIT09IGFjdGl2ZUluZGV4KSB7XG4gICAgaWYgKCFzd2lwZXIuYWxsb3dTbGlkZU5leHQgJiYgdHJhbnNsYXRlIDwgc3dpcGVyLnRyYW5zbGF0ZSAmJiB0cmFuc2xhdGUgPCBzd2lwZXIubWluVHJhbnNsYXRlKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlUHJldiAmJiB0cmFuc2xhdGUgPiBzd2lwZXIudHJhbnNsYXRlICYmIHRyYW5zbGF0ZSA+IHN3aXBlci5tYXhUcmFuc2xhdGUoKSkge1xuICAgICAgaWYgKChhY3RpdmVJbmRleCB8fCAwKSAhPT0gc2xpZGVJbmRleCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzbGlkZUluZGV4ICE9PSAocHJldmlvdXNJbmRleCB8fCAwKSAmJiBydW5DYWxsYmFja3MpIHtcbiAgICBzd2lwZXIuZW1pdCgnYmVmb3JlU2xpZGVDaGFuZ2VTdGFydCcpO1xuICB9IC8vIFVwZGF0ZSBwcm9ncmVzc1xuXG5cbiAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKHRyYW5zbGF0ZSk7XG4gIGxldCBkaXJlY3Rpb247XG4gIGlmIChzbGlkZUluZGV4ID4gYWN0aXZlSW5kZXgpIGRpcmVjdGlvbiA9ICduZXh0JztlbHNlIGlmIChzbGlkZUluZGV4IDwgYWN0aXZlSW5kZXgpIGRpcmVjdGlvbiA9ICdwcmV2JztlbHNlIGRpcmVjdGlvbiA9ICdyZXNldCc7IC8vIFVwZGF0ZSBJbmRleFxuXG4gIGlmIChydGwgJiYgLXRyYW5zbGF0ZSA9PT0gc3dpcGVyLnRyYW5zbGF0ZSB8fCAhcnRsICYmIHRyYW5zbGF0ZSA9PT0gc3dpcGVyLnRyYW5zbGF0ZSkge1xuICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleChzbGlkZUluZGV4KTsgLy8gVXBkYXRlIEhlaWdodFxuXG4gICAgaWYgKHBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICBzd2lwZXIudXBkYXRlQXV0b0hlaWdodCgpO1xuICAgIH1cblxuICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG5cbiAgICBpZiAocGFyYW1zLmVmZmVjdCAhPT0gJ3NsaWRlJykge1xuICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZSh0cmFuc2xhdGUpO1xuICAgIH1cblxuICAgIGlmIChkaXJlY3Rpb24gIT09ICdyZXNldCcpIHtcbiAgICAgIHN3aXBlci50cmFuc2l0aW9uU3RhcnQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgIGNvbnN0IGlzSCA9IHN3aXBlci5pc0hvcml6b250YWwoKTtcbiAgICBjb25zdCB0ID0gcnRsID8gdHJhbnNsYXRlIDogLXRyYW5zbGF0ZTtcblxuICAgIGlmIChzcGVlZCA9PT0gMCkge1xuICAgICAgY29uc3QgaXNWaXJ0dWFsID0gc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG5cbiAgICAgIGlmIChpc1ZpcnR1YWwpIHtcbiAgICAgICAgc3dpcGVyLndyYXBwZXJFbC5zdHlsZS5zY3JvbGxTbmFwVHlwZSA9ICdub25lJztcbiAgICAgICAgc3dpcGVyLl9pbW1lZGlhdGVWaXJ0dWFsID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgd3JhcHBlckVsW2lzSCA/ICdzY3JvbGxMZWZ0JyA6ICdzY3JvbGxUb3AnXSA9IHQ7XG5cbiAgICAgIGlmIChpc1ZpcnR1YWwpIHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBzd2lwZXIud3JhcHBlckVsLnN0eWxlLnNjcm9sbFNuYXBUeXBlID0gJyc7XG4gICAgICAgICAgc3dpcGVyLl9zd2lwZXJJbW1lZGlhdGVWaXJ0dWFsID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXN3aXBlci5zdXBwb3J0LnNtb290aFNjcm9sbCkge1xuICAgICAgICBhbmltYXRlQ1NTTW9kZVNjcm9sbCh7XG4gICAgICAgICAgc3dpcGVyLFxuICAgICAgICAgIHRhcmdldFBvc2l0aW9uOiB0LFxuICAgICAgICAgIHNpZGU6IGlzSCA/ICdsZWZ0JyA6ICd0b3AnXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgd3JhcHBlckVsLnNjcm9sbFRvKHtcbiAgICAgICAgW2lzSCA/ICdsZWZ0JyA6ICd0b3AnXTogdCxcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN3aXBlci5zZXRUcmFuc2l0aW9uKHNwZWVkKTtcbiAgc3dpcGVyLnNldFRyYW5zbGF0ZSh0cmFuc2xhdGUpO1xuICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoc2xpZGVJbmRleCk7XG4gIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gIHN3aXBlci5lbWl0KCdiZWZvcmVUcmFuc2l0aW9uU3RhcnQnLCBzcGVlZCwgaW50ZXJuYWwpO1xuICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcblxuICBpZiAoc3BlZWQgPT09IDApIHtcbiAgICBzd2lwZXIudHJhbnNpdGlvbkVuZChydW5DYWxsYmFja3MsIGRpcmVjdGlvbik7XG4gIH0gZWxzZSBpZiAoIXN3aXBlci5hbmltYXRpbmcpIHtcbiAgICBzd2lwZXIuYW5pbWF0aW5nID0gdHJ1ZTtcblxuICAgIGlmICghc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKSB7XG4gICAgICBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kKGUpIHtcbiAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMpIHJldHVybjtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQgPSBudWxsO1xuICAgICAgICBkZWxldGUgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kO1xuICAgICAgICBzd2lwZXIudHJhbnNpdGlvbkVuZChydW5DYWxsYmFja3MsIGRpcmVjdGlvbik7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2xpZGVUb0xvb3AoaW5kZXggPSAwLCBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkLCBydW5DYWxsYmFja3MgPSB0cnVlLCBpbnRlcm5hbCkge1xuICBpZiAodHlwZW9mIGluZGV4ID09PSAnc3RyaW5nJykge1xuICAgIC8qKlxuICAgICAqIFRoZSBgaW5kZXhgIGFyZ3VtZW50IGNvbnZlcnRlZCBmcm9tIGBzdHJpbmdgIHRvIGBudW1iZXJgLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgY29uc3QgaW5kZXhBc051bWJlciA9IHBhcnNlSW50KGluZGV4LCAxMCk7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBgaW5kZXhgIGFyZ3VtZW50IGlzIGEgdmFsaWQgYG51bWJlcmBcbiAgICAgKiBhZnRlciBiZWluZyBjb252ZXJ0ZWQgZnJvbSB0aGUgYHN0cmluZ2AgdHlwZS5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cblxuICAgIGNvbnN0IGlzVmFsaWROdW1iZXIgPSBpc0Zpbml0ZShpbmRleEFzTnVtYmVyKTtcblxuICAgIGlmICghaXNWYWxpZE51bWJlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcGFzc2VkLWluICdpbmRleCcgKHN0cmluZykgY291bGRuJ3QgYmUgY29udmVydGVkIHRvICdudW1iZXInLiBbJHtpbmRleH1dIGdpdmVuLmApO1xuICAgIH0gLy8gS25vd2luZyB0aGF0IHRoZSBjb252ZXJ0ZWQgYGluZGV4YCBpcyBhIHZhbGlkIG51bWJlcixcbiAgICAvLyB3ZSBjYW4gdXBkYXRlIHRoZSBvcmlnaW5hbCBhcmd1bWVudCdzIHZhbHVlLlxuXG5cbiAgICBpbmRleCA9IGluZGV4QXNOdW1iZXI7XG4gIH1cblxuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBsZXQgbmV3SW5kZXggPSBpbmRleDtcblxuICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgbmV3SW5kZXggKz0gc3dpcGVyLmxvb3BlZFNsaWRlcztcbiAgfVxuXG4gIHJldHVybiBzd2lwZXIuc2xpZGVUbyhuZXdJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xufSIsIi8qIGVzbGludCBuby11bnVzZWQtdmFyczogXCJvZmZcIiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2xpZGVOZXh0KHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQsIHJ1bkNhbGxiYWNrcyA9IHRydWUsIGludGVybmFsKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICBhbmltYXRpbmcsXG4gICAgZW5hYmxlZCxcbiAgICBwYXJhbXNcbiAgfSA9IHN3aXBlcjtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm4gc3dpcGVyO1xuICBsZXQgcGVyR3JvdXAgPSBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG5cbiAgaWYgKHBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycgJiYgcGFyYW1zLnNsaWRlc1Blckdyb3VwID09PSAxICYmIHBhcmFtcy5zbGlkZXNQZXJHcm91cEF1dG8pIHtcbiAgICBwZXJHcm91cCA9IE1hdGgubWF4KHN3aXBlci5zbGlkZXNQZXJWaWV3RHluYW1pYygnY3VycmVudCcsIHRydWUpLCAxKTtcbiAgfVxuXG4gIGNvbnN0IGluY3JlbWVudCA9IHN3aXBlci5hY3RpdmVJbmRleCA8IHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAgPyAxIDogcGVyR3JvdXA7XG5cbiAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgaWYgKGFuaW1hdGluZyAmJiBwYXJhbXMubG9vcFByZXZlbnRzU2xpZGUpIHJldHVybiBmYWxzZTtcbiAgICBzd2lwZXIubG9vcEZpeCgpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblxuICAgIHN3aXBlci5fY2xpZW50TGVmdCA9IHN3aXBlci4kd3JhcHBlckVsWzBdLmNsaWVudExlZnQ7XG4gIH1cblxuICBpZiAocGFyYW1zLnJld2luZCAmJiBzd2lwZXIuaXNFbmQpIHtcbiAgICByZXR1cm4gc3dpcGVyLnNsaWRlVG8oMCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCArIGluY3JlbWVudCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xufSIsIi8qIGVzbGludCBuby11bnVzZWQtdmFyczogXCJvZmZcIiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2xpZGVQcmV2KHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQsIHJ1bkNhbGxiYWNrcyA9IHRydWUsIGludGVybmFsKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXMsXG4gICAgYW5pbWF0aW5nLFxuICAgIHNuYXBHcmlkLFxuICAgIHNsaWRlc0dyaWQsXG4gICAgcnRsVHJhbnNsYXRlLFxuICAgIGVuYWJsZWRcbiAgfSA9IHN3aXBlcjtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm4gc3dpcGVyO1xuXG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIGlmIChhbmltYXRpbmcgJiYgcGFyYW1zLmxvb3BQcmV2ZW50c1NsaWRlKSByZXR1cm4gZmFsc2U7XG4gICAgc3dpcGVyLmxvb3BGaXgoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cbiAgICBzd2lwZXIuX2NsaWVudExlZnQgPSBzd2lwZXIuJHdyYXBwZXJFbFswXS5jbGllbnRMZWZ0O1xuICB9XG5cbiAgY29uc3QgdHJhbnNsYXRlID0gcnRsVHJhbnNsYXRlID8gc3dpcGVyLnRyYW5zbGF0ZSA6IC1zd2lwZXIudHJhbnNsYXRlO1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZSh2YWwpIHtcbiAgICBpZiAodmFsIDwgMCkgcmV0dXJuIC1NYXRoLmZsb29yKE1hdGguYWJzKHZhbCkpO1xuICAgIHJldHVybiBNYXRoLmZsb29yKHZhbCk7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkVHJhbnNsYXRlID0gbm9ybWFsaXplKHRyYW5zbGF0ZSk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRTbmFwR3JpZCA9IHNuYXBHcmlkLm1hcCh2YWwgPT4gbm9ybWFsaXplKHZhbCkpO1xuICBsZXQgcHJldlNuYXAgPSBzbmFwR3JpZFtub3JtYWxpemVkU25hcEdyaWQuaW5kZXhPZihub3JtYWxpemVkVHJhbnNsYXRlKSAtIDFdO1xuXG4gIGlmICh0eXBlb2YgcHJldlNuYXAgPT09ICd1bmRlZmluZWQnICYmIHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgbGV0IHByZXZTbmFwSW5kZXg7XG4gICAgc25hcEdyaWQuZm9yRWFjaCgoc25hcCwgc25hcEluZGV4KSA9PiB7XG4gICAgICBpZiAobm9ybWFsaXplZFRyYW5zbGF0ZSA+PSBzbmFwKSB7XG4gICAgICAgIC8vIHByZXZTbmFwID0gc25hcDtcbiAgICAgICAgcHJldlNuYXBJbmRleCA9IHNuYXBJbmRleDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0eXBlb2YgcHJldlNuYXBJbmRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHByZXZTbmFwID0gc25hcEdyaWRbcHJldlNuYXBJbmRleCA+IDAgPyBwcmV2U25hcEluZGV4IC0gMSA6IHByZXZTbmFwSW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIGxldCBwcmV2SW5kZXggPSAwO1xuXG4gIGlmICh0eXBlb2YgcHJldlNuYXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcHJldkluZGV4ID0gc2xpZGVzR3JpZC5pbmRleE9mKHByZXZTbmFwKTtcbiAgICBpZiAocHJldkluZGV4IDwgMCkgcHJldkluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4IC0gMTtcblxuICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nICYmIHBhcmFtcy5zbGlkZXNQZXJHcm91cCA9PT0gMSAmJiBwYXJhbXMuc2xpZGVzUGVyR3JvdXBBdXRvKSB7XG4gICAgICBwcmV2SW5kZXggPSBwcmV2SW5kZXggLSBzd2lwZXIuc2xpZGVzUGVyVmlld0R5bmFtaWMoJ3ByZXZpb3VzJywgdHJ1ZSkgKyAxO1xuICAgICAgcHJldkluZGV4ID0gTWF0aC5tYXgocHJldkluZGV4LCAwKTtcbiAgICB9XG4gIH1cblxuICBpZiAocGFyYW1zLnJld2luZCAmJiBzd2lwZXIuaXNCZWdpbm5pbmcpIHtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBzd2lwZXIucGFyYW1zLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQgJiYgc3dpcGVyLnZpcnR1YWwgPyBzd2lwZXIudmlydHVhbC5zbGlkZXMubGVuZ3RoIC0gMSA6IHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gc3dpcGVyLnNsaWRlVG8obGFzdEluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG4gIH1cblxuICByZXR1cm4gc3dpcGVyLnNsaWRlVG8ocHJldkluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG59IiwiLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzbGlkZVJlc2V0KHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQsIHJ1bkNhbGxiYWNrcyA9IHRydWUsIGludGVybmFsKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIHJldHVybiBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKTtcbn0iLCIvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFwib2ZmXCIgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNsaWRlVG9DbG9zZXN0KHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQsIHJ1bkNhbGxiYWNrcyA9IHRydWUsIGludGVybmFsLCB0aHJlc2hvbGQgPSAwLjUpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgbGV0IGluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICBjb25zdCBza2lwID0gTWF0aC5taW4oc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAsIGluZGV4KTtcbiAgY29uc3Qgc25hcEluZGV4ID0gc2tpcCArIE1hdGguZmxvb3IoKGluZGV4IC0gc2tpcCkgLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgOiAtc3dpcGVyLnRyYW5zbGF0ZTtcblxuICBpZiAodHJhbnNsYXRlID49IHN3aXBlci5zbmFwR3JpZFtzbmFwSW5kZXhdKSB7XG4gICAgLy8gVGhlIGN1cnJlbnQgdHJhbnNsYXRlIGlzIG9uIG9yIGFmdGVyIHRoZSBjdXJyZW50IHNuYXAgaW5kZXgsIHNvIHRoZSBjaG9pY2VcbiAgICAvLyBpcyBiZXR3ZWVuIHRoZSBjdXJyZW50IGluZGV4IGFuZCB0aGUgb25lIGFmdGVyIGl0LlxuICAgIGNvbnN0IGN1cnJlbnRTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleF07XG4gICAgY29uc3QgbmV4dFNuYXAgPSBzd2lwZXIuc25hcEdyaWRbc25hcEluZGV4ICsgMV07XG5cbiAgICBpZiAodHJhbnNsYXRlIC0gY3VycmVudFNuYXAgPiAobmV4dFNuYXAgLSBjdXJyZW50U25hcCkgKiB0aHJlc2hvbGQpIHtcbiAgICAgIGluZGV4ICs9IHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoZSBjdXJyZW50IHRyYW5zbGF0ZSBpcyBiZWZvcmUgdGhlIGN1cnJlbnQgc25hcCBpbmRleCwgc28gdGhlIGNob2ljZVxuICAgIC8vIGlzIGJldHdlZW4gdGhlIGN1cnJlbnQgaW5kZXggYW5kIHRoZSBvbmUgYmVmb3JlIGl0LlxuICAgIGNvbnN0IHByZXZTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleCAtIDFdO1xuICAgIGNvbnN0IGN1cnJlbnRTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleF07XG5cbiAgICBpZiAodHJhbnNsYXRlIC0gcHJldlNuYXAgPD0gKGN1cnJlbnRTbmFwIC0gcHJldlNuYXApICogdGhyZXNob2xkKSB7XG4gICAgICBpbmRleCAtPSBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICAgIH1cbiAgfVxuXG4gIGluZGV4ID0gTWF0aC5tYXgoaW5kZXgsIDApO1xuICBpbmRleCA9IE1hdGgubWluKGluZGV4LCBzd2lwZXIuc2xpZGVzR3JpZC5sZW5ndGggLSAxKTtcbiAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKGluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG59IiwiaW1wb3J0ICQgZnJvbSAnLi4vLi4vc2hhcmVkL2RvbS5qcyc7XG5pbXBvcnQgeyBuZXh0VGljayB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzbGlkZVRvQ2xpY2tlZFNsaWRlKCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgcGFyYW1zLFxuICAgICR3cmFwcGVyRWxcbiAgfSA9IHN3aXBlcjtcbiAgY29uc3Qgc2xpZGVzUGVyVmlldyA9IHBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycgPyBzd2lwZXIuc2xpZGVzUGVyVmlld0R5bmFtaWMoKSA6IHBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuICBsZXQgc2xpZGVUb0luZGV4ID0gc3dpcGVyLmNsaWNrZWRJbmRleDtcbiAgbGV0IHJlYWxJbmRleDtcblxuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICBpZiAoc3dpcGVyLmFuaW1hdGluZykgcmV0dXJuO1xuICAgIHJlYWxJbmRleCA9IHBhcnNlSW50KCQoc3dpcGVyLmNsaWNrZWRTbGlkZSkuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSwgMTApO1xuXG4gICAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgaWYgKHNsaWRlVG9JbmRleCA8IHN3aXBlci5sb29wZWRTbGlkZXMgLSBzbGlkZXNQZXJWaWV3IC8gMiB8fCBzbGlkZVRvSW5kZXggPiBzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIHN3aXBlci5sb29wZWRTbGlkZXMgKyBzbGlkZXNQZXJWaWV3IC8gMikge1xuICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICBzbGlkZVRvSW5kZXggPSAkd3JhcHBlckVsLmNoaWxkcmVuKGAuJHtwYXJhbXMuc2xpZGVDbGFzc31bZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke3JlYWxJbmRleH1cIl06bm90KC4ke3BhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzfSlgKS5lcSgwKS5pbmRleCgpO1xuICAgICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2xpZGVUb0luZGV4ID4gc3dpcGVyLnNsaWRlcy5sZW5ndGggLSBzbGlkZXNQZXJWaWV3KSB7XG4gICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgc2xpZGVUb0luZGV4ID0gJHdyYXBwZXJFbC5jaGlsZHJlbihgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9W2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVwiJHtyZWFsSW5kZXh9XCJdOm5vdCguJHtwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzc30pYCkuZXEoMCkuaW5kZXgoKTtcbiAgICAgIG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICB9XG59IiwiaW1wb3J0IGxvb3BDcmVhdGUgZnJvbSAnLi9sb29wQ3JlYXRlLmpzJztcbmltcG9ydCBsb29wRml4IGZyb20gJy4vbG9vcEZpeC5qcyc7XG5pbXBvcnQgbG9vcERlc3Ryb3kgZnJvbSAnLi9sb29wRGVzdHJveS5qcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gIGxvb3BDcmVhdGUsXG4gIGxvb3BGaXgsXG4gIGxvb3BEZXN0cm95XG59OyIsImltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICcuLi8uLi9zaGFyZWQvZG9tLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvb3BDcmVhdGUoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgY29uc3Qge1xuICAgIHBhcmFtcyxcbiAgICAkd3JhcHBlckVsXG4gIH0gPSBzd2lwZXI7IC8vIFJlbW92ZSBkdXBsaWNhdGVkIHNsaWRlc1xuXG4gIGNvbnN0ICRzZWxlY3RvciA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oKS5sZW5ndGggPiAwID8gJCgkd3JhcHBlckVsLmNoaWxkcmVuKClbMF0ucGFyZW50Tm9kZSkgOiAkd3JhcHBlckVsO1xuICAkc2VsZWN0b3IuY2hpbGRyZW4oYC4ke3BhcmFtcy5zbGlkZUNsYXNzfS4ke3BhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzfWApLnJlbW92ZSgpO1xuICBsZXQgc2xpZGVzID0gJHNlbGVjdG9yLmNoaWxkcmVuKGAuJHtwYXJhbXMuc2xpZGVDbGFzc31gKTtcblxuICBpZiAocGFyYW1zLmxvb3BGaWxsR3JvdXBXaXRoQmxhbmspIHtcbiAgICBjb25zdCBibGFua1NsaWRlc051bSA9IHBhcmFtcy5zbGlkZXNQZXJHcm91cCAtIHNsaWRlcy5sZW5ndGggJSBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG5cbiAgICBpZiAoYmxhbmtTbGlkZXNOdW0gIT09IHBhcmFtcy5zbGlkZXNQZXJHcm91cCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBibGFua1NsaWRlc051bTsgaSArPSAxKSB7XG4gICAgICAgIGNvbnN0IGJsYW5rTm9kZSA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpLmFkZENsYXNzKGAke3BhcmFtcy5zbGlkZUNsYXNzfSAke3BhcmFtcy5zbGlkZUJsYW5rQ2xhc3N9YCk7XG4gICAgICAgICRzZWxlY3Rvci5hcHBlbmQoYmxhbmtOb2RlKTtcbiAgICAgIH1cblxuICAgICAgc2xpZGVzID0gJHNlbGVjdG9yLmNoaWxkcmVuKGAuJHtwYXJhbXMuc2xpZGVDbGFzc31gKTtcbiAgICB9XG4gIH1cblxuICBpZiAocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyAmJiAhcGFyYW1zLmxvb3BlZFNsaWRlcykgcGFyYW1zLmxvb3BlZFNsaWRlcyA9IHNsaWRlcy5sZW5ndGg7XG4gIHN3aXBlci5sb29wZWRTbGlkZXMgPSBNYXRoLmNlaWwocGFyc2VGbG9hdChwYXJhbXMubG9vcGVkU2xpZGVzIHx8IHBhcmFtcy5zbGlkZXNQZXJWaWV3LCAxMCkpO1xuICBzd2lwZXIubG9vcGVkU2xpZGVzICs9IHBhcmFtcy5sb29wQWRkaXRpb25hbFNsaWRlcztcblxuICBpZiAoc3dpcGVyLmxvb3BlZFNsaWRlcyA+IHNsaWRlcy5sZW5ndGggJiYgc3dpcGVyLnBhcmFtcy5sb29wZWRTbGlkZXNMaW1pdCkge1xuICAgIHN3aXBlci5sb29wZWRTbGlkZXMgPSBzbGlkZXMubGVuZ3RoO1xuICB9XG5cbiAgY29uc3QgcHJlcGVuZFNsaWRlcyA9IFtdO1xuICBjb25zdCBhcHBlbmRTbGlkZXMgPSBbXTtcbiAgc2xpZGVzLmVhY2goKGVsLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHNsaWRlID0gJChlbCk7XG4gICAgc2xpZGUuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnLCBpbmRleCk7XG4gIH0pO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3dpcGVyLmxvb3BlZFNsaWRlczsgaSArPSAxKSB7XG4gICAgY29uc3QgaW5kZXggPSBpIC0gTWF0aC5mbG9vcihpIC8gc2xpZGVzLmxlbmd0aCkgKiBzbGlkZXMubGVuZ3RoO1xuICAgIGFwcGVuZFNsaWRlcy5wdXNoKHNsaWRlcy5lcShpbmRleClbMF0pO1xuICAgIHByZXBlbmRTbGlkZXMudW5zaGlmdChzbGlkZXMuZXEoc2xpZGVzLmxlbmd0aCAtIGluZGV4IC0gMSlbMF0pO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcHBlbmRTbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAkc2VsZWN0b3IuYXBwZW5kKCQoYXBwZW5kU2xpZGVzW2ldLmNsb25lTm9kZSh0cnVlKSkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBwcmVwZW5kU2xpZGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtPSAxKSB7XG4gICAgJHNlbGVjdG9yLnByZXBlbmQoJChwcmVwZW5kU2xpZGVzW2ldLmNsb25lTm9kZSh0cnVlKSkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvb3BGaXgoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIHN3aXBlci5lbWl0KCdiZWZvcmVMb29wRml4Jyk7XG4gIGNvbnN0IHtcbiAgICBhY3RpdmVJbmRleCxcbiAgICBzbGlkZXMsXG4gICAgbG9vcGVkU2xpZGVzLFxuICAgIGFsbG93U2xpZGVQcmV2LFxuICAgIGFsbG93U2xpZGVOZXh0LFxuICAgIHNuYXBHcmlkLFxuICAgIHJ0bFRyYW5zbGF0ZTogcnRsXG4gIH0gPSBzd2lwZXI7XG4gIGxldCBuZXdJbmRleDtcbiAgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID0gdHJ1ZTtcbiAgc3dpcGVyLmFsbG93U2xpZGVOZXh0ID0gdHJ1ZTtcbiAgY29uc3Qgc25hcFRyYW5zbGF0ZSA9IC1zbmFwR3JpZFthY3RpdmVJbmRleF07XG4gIGNvbnN0IGRpZmYgPSBzbmFwVHJhbnNsYXRlIC0gc3dpcGVyLmdldFRyYW5zbGF0ZSgpOyAvLyBGaXggRm9yIE5lZ2F0aXZlIE92ZXJzbGlkaW5nXG5cbiAgaWYgKGFjdGl2ZUluZGV4IDwgbG9vcGVkU2xpZGVzKSB7XG4gICAgbmV3SW5kZXggPSBzbGlkZXMubGVuZ3RoIC0gbG9vcGVkU2xpZGVzICogMyArIGFjdGl2ZUluZGV4O1xuICAgIG5ld0luZGV4ICs9IGxvb3BlZFNsaWRlcztcbiAgICBjb25zdCBzbGlkZUNoYW5nZWQgPSBzd2lwZXIuc2xpZGVUbyhuZXdJbmRleCwgMCwgZmFsc2UsIHRydWUpO1xuXG4gICAgaWYgKHNsaWRlQ2hhbmdlZCAmJiBkaWZmICE9PSAwKSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKChydGwgPyAtc3dpcGVyLnRyYW5zbGF0ZSA6IHN3aXBlci50cmFuc2xhdGUpIC0gZGlmZik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGFjdGl2ZUluZGV4ID49IHNsaWRlcy5sZW5ndGggLSBsb29wZWRTbGlkZXMpIHtcbiAgICAvLyBGaXggRm9yIFBvc2l0aXZlIE92ZXJzbGlkaW5nXG4gICAgbmV3SW5kZXggPSAtc2xpZGVzLmxlbmd0aCArIGFjdGl2ZUluZGV4ICsgbG9vcGVkU2xpZGVzO1xuICAgIG5ld0luZGV4ICs9IGxvb3BlZFNsaWRlcztcbiAgICBjb25zdCBzbGlkZUNoYW5nZWQgPSBzd2lwZXIuc2xpZGVUbyhuZXdJbmRleCwgMCwgZmFsc2UsIHRydWUpO1xuXG4gICAgaWYgKHNsaWRlQ2hhbmdlZCAmJiBkaWZmICE9PSAwKSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKChydGwgPyAtc3dpcGVyLnRyYW5zbGF0ZSA6IHN3aXBlci50cmFuc2xhdGUpIC0gZGlmZik7XG4gICAgfVxuICB9XG5cbiAgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID0gYWxsb3dTbGlkZVByZXY7XG4gIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IGFsbG93U2xpZGVOZXh0O1xuICBzd2lwZXIuZW1pdCgnbG9vcEZpeCcpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvb3BEZXN0cm95KCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgJHdyYXBwZXJFbCxcbiAgICBwYXJhbXMsXG4gICAgc2xpZGVzXG4gIH0gPSBzd2lwZXI7XG4gICR3cmFwcGVyRWwuY2hpbGRyZW4oYC4ke3BhcmFtcy5zbGlkZUNsYXNzfS4ke3BhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzfSwuJHtwYXJhbXMuc2xpZGVDbGFzc30uJHtwYXJhbXMuc2xpZGVCbGFua0NsYXNzfWApLnJlbW92ZSgpO1xuICBzbGlkZXMucmVtb3ZlQXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKTtcbn0iLCJpbXBvcnQgeyBnZXRXaW5kb3csIGdldERvY3VtZW50IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICcuLi8uLi9zaGFyZWQvZG9tLmpzJztcbmltcG9ydCB7IG5vdyB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy5qcyc7IC8vIE1vZGlmaWVkIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTQ1MjA1NTQvY3VzdG9tLWVsZW1lbnQtZ2V0cm9vdG5vZGUtY2xvc2VzdC1mdW5jdGlvbi1jcm9zc2luZy1tdWx0aXBsZS1wYXJlbnQtc2hhZG93ZFxuXG5mdW5jdGlvbiBjbG9zZXN0RWxlbWVudChzZWxlY3RvciwgYmFzZSA9IHRoaXMpIHtcbiAgZnVuY3Rpb24gX19jbG9zZXN0RnJvbShlbCkge1xuICAgIGlmICghZWwgfHwgZWwgPT09IGdldERvY3VtZW50KCkgfHwgZWwgPT09IGdldFdpbmRvdygpKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoZWwuYXNzaWduZWRTbG90KSBlbCA9IGVsLmFzc2lnbmVkU2xvdDtcbiAgICBjb25zdCBmb3VuZCA9IGVsLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuXG4gICAgaWYgKCFmb3VuZCAmJiAhZWwuZ2V0Um9vdE5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBmb3VuZCB8fCBfX2Nsb3Nlc3RGcm9tKGVsLmdldFJvb3ROb2RlKCkuaG9zdCk7XG4gIH1cblxuICByZXR1cm4gX19jbG9zZXN0RnJvbShiYXNlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb25Ub3VjaFN0YXJ0KGV2ZW50KSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIGNvbnN0IGRhdGEgPSBzd2lwZXIudG91Y2hFdmVudHNEYXRhO1xuICBjb25zdCB7XG4gICAgcGFyYW1zLFxuICAgIHRvdWNoZXMsXG4gICAgZW5hYmxlZFxuICB9ID0gc3dpcGVyO1xuICBpZiAoIWVuYWJsZWQpIHJldHVybjtcblxuICBpZiAoc3dpcGVyLmFuaW1hdGluZyAmJiBwYXJhbXMucHJldmVudEludGVyYWN0aW9uT25UcmFuc2l0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFzd2lwZXIuYW5pbWF0aW5nICYmIHBhcmFtcy5jc3NNb2RlICYmIHBhcmFtcy5sb29wKSB7XG4gICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgfVxuXG4gIGxldCBlID0gZXZlbnQ7XG4gIGlmIChlLm9yaWdpbmFsRXZlbnQpIGUgPSBlLm9yaWdpbmFsRXZlbnQ7XG4gIGxldCAkdGFyZ2V0RWwgPSAkKGUudGFyZ2V0KTtcblxuICBpZiAocGFyYW1zLnRvdWNoRXZlbnRzVGFyZ2V0ID09PSAnd3JhcHBlcicpIHtcbiAgICBpZiAoISR0YXJnZXRFbC5jbG9zZXN0KHN3aXBlci53cmFwcGVyRWwpLmxlbmd0aCkgcmV0dXJuO1xuICB9XG5cbiAgZGF0YS5pc1RvdWNoRXZlbnQgPSBlLnR5cGUgPT09ICd0b3VjaHN0YXJ0JztcbiAgaWYgKCFkYXRhLmlzVG91Y2hFdmVudCAmJiAnd2hpY2gnIGluIGUgJiYgZS53aGljaCA9PT0gMykgcmV0dXJuO1xuICBpZiAoIWRhdGEuaXNUb3VjaEV2ZW50ICYmICdidXR0b24nIGluIGUgJiYgZS5idXR0b24gPiAwKSByZXR1cm47XG4gIGlmIChkYXRhLmlzVG91Y2hlZCAmJiBkYXRhLmlzTW92ZWQpIHJldHVybjsgLy8gY2hhbmdlIHRhcmdldCBlbCBmb3Igc2hhZG93IHJvb3QgY29tcG9uZW50XG5cbiAgY29uc3Qgc3dpcGluZ0NsYXNzSGFzVmFsdWUgPSAhIXBhcmFtcy5ub1N3aXBpbmdDbGFzcyAmJiBwYXJhbXMubm9Td2lwaW5nQ2xhc3MgIT09ICcnOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblxuICBjb25zdCBldmVudFBhdGggPSBldmVudC5jb21wb3NlZFBhdGggPyBldmVudC5jb21wb3NlZFBhdGgoKSA6IGV2ZW50LnBhdGg7XG5cbiAgaWYgKHN3aXBpbmdDbGFzc0hhc1ZhbHVlICYmIGUudGFyZ2V0ICYmIGUudGFyZ2V0LnNoYWRvd1Jvb3QgJiYgZXZlbnRQYXRoKSB7XG4gICAgJHRhcmdldEVsID0gJChldmVudFBhdGhbMF0pO1xuICB9XG5cbiAgY29uc3Qgbm9Td2lwaW5nU2VsZWN0b3IgPSBwYXJhbXMubm9Td2lwaW5nU2VsZWN0b3IgPyBwYXJhbXMubm9Td2lwaW5nU2VsZWN0b3IgOiBgLiR7cGFyYW1zLm5vU3dpcGluZ0NsYXNzfWA7XG4gIGNvbnN0IGlzVGFyZ2V0U2hhZG93ID0gISEoZS50YXJnZXQgJiYgZS50YXJnZXQuc2hhZG93Um9vdCk7IC8vIHVzZSBjbG9zZXN0RWxlbWVudCBmb3Igc2hhZG93IHJvb3QgZWxlbWVudCB0byBnZXQgdGhlIGFjdHVhbCBjbG9zZXN0IGZvciBuZXN0ZWQgc2hhZG93IHJvb3QgZWxlbWVudFxuXG4gIGlmIChwYXJhbXMubm9Td2lwaW5nICYmIChpc1RhcmdldFNoYWRvdyA/IGNsb3Nlc3RFbGVtZW50KG5vU3dpcGluZ1NlbGVjdG9yLCAkdGFyZ2V0RWxbMF0pIDogJHRhcmdldEVsLmNsb3Nlc3Qobm9Td2lwaW5nU2VsZWN0b3IpWzBdKSkge1xuICAgIHN3aXBlci5hbGxvd0NsaWNrID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocGFyYW1zLnN3aXBlSGFuZGxlcikge1xuICAgIGlmICghJHRhcmdldEVsLmNsb3Nlc3QocGFyYW1zLnN3aXBlSGFuZGxlcilbMF0pIHJldHVybjtcbiAgfVxuXG4gIHRvdWNoZXMuY3VycmVudFggPSBlLnR5cGUgPT09ICd0b3VjaHN0YXJ0JyA/IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWCA6IGUucGFnZVg7XG4gIHRvdWNoZXMuY3VycmVudFkgPSBlLnR5cGUgPT09ICd0b3VjaHN0YXJ0JyA/IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWSA6IGUucGFnZVk7XG4gIGNvbnN0IHN0YXJ0WCA9IHRvdWNoZXMuY3VycmVudFg7XG4gIGNvbnN0IHN0YXJ0WSA9IHRvdWNoZXMuY3VycmVudFk7IC8vIERvIE5PVCBzdGFydCBpZiBpT1MgZWRnZSBzd2lwZSBpcyBkZXRlY3RlZC4gT3RoZXJ3aXNlIGlPUyBhcHAgY2Fubm90IHN3aXBlLXRvLWdvLWJhY2sgYW55bW9yZVxuXG4gIGNvbnN0IGVkZ2VTd2lwZURldGVjdGlvbiA9IHBhcmFtcy5lZGdlU3dpcGVEZXRlY3Rpb24gfHwgcGFyYW1zLmlPU0VkZ2VTd2lwZURldGVjdGlvbjtcbiAgY29uc3QgZWRnZVN3aXBlVGhyZXNob2xkID0gcGFyYW1zLmVkZ2VTd2lwZVRocmVzaG9sZCB8fCBwYXJhbXMuaU9TRWRnZVN3aXBlVGhyZXNob2xkO1xuXG4gIGlmIChlZGdlU3dpcGVEZXRlY3Rpb24gJiYgKHN0YXJ0WCA8PSBlZGdlU3dpcGVUaHJlc2hvbGQgfHwgc3RhcnRYID49IHdpbmRvdy5pbm5lcldpZHRoIC0gZWRnZVN3aXBlVGhyZXNob2xkKSkge1xuICAgIGlmIChlZGdlU3dpcGVEZXRlY3Rpb24gPT09ICdwcmV2ZW50Jykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIE9iamVjdC5hc3NpZ24oZGF0YSwge1xuICAgIGlzVG91Y2hlZDogdHJ1ZSxcbiAgICBpc01vdmVkOiBmYWxzZSxcbiAgICBhbGxvd1RvdWNoQ2FsbGJhY2tzOiB0cnVlLFxuICAgIGlzU2Nyb2xsaW5nOiB1bmRlZmluZWQsXG4gICAgc3RhcnRNb3Zpbmc6IHVuZGVmaW5lZFxuICB9KTtcbiAgdG91Y2hlcy5zdGFydFggPSBzdGFydFg7XG4gIHRvdWNoZXMuc3RhcnRZID0gc3RhcnRZO1xuICBkYXRhLnRvdWNoU3RhcnRUaW1lID0gbm93KCk7XG4gIHN3aXBlci5hbGxvd0NsaWNrID0gdHJ1ZTtcbiAgc3dpcGVyLnVwZGF0ZVNpemUoKTtcbiAgc3dpcGVyLnN3aXBlRGlyZWN0aW9uID0gdW5kZWZpbmVkO1xuICBpZiAocGFyYW1zLnRocmVzaG9sZCA+IDApIGRhdGEuYWxsb3dUaHJlc2hvbGRNb3ZlID0gZmFsc2U7XG5cbiAgaWYgKGUudHlwZSAhPT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgbGV0IHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcblxuICAgIGlmICgkdGFyZ2V0RWwuaXMoZGF0YS5mb2N1c2FibGVFbGVtZW50cykpIHtcbiAgICAgIHByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG5cbiAgICAgIGlmICgkdGFyZ2V0RWxbMF0ubm9kZU5hbWUgPT09ICdTRUxFQ1QnKSB7XG4gICAgICAgIGRhdGEuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5pcyhkYXRhLmZvY3VzYWJsZUVsZW1lbnRzKSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSAkdGFyZ2V0RWxbMF0pIHtcbiAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFByZXZlbnREZWZhdWx0ID0gcHJldmVudERlZmF1bHQgJiYgc3dpcGVyLmFsbG93VG91Y2hNb3ZlICYmIHBhcmFtcy50b3VjaFN0YXJ0UHJldmVudERlZmF1bHQ7XG5cbiAgICBpZiAoKHBhcmFtcy50b3VjaFN0YXJ0Rm9yY2VQcmV2ZW50RGVmYXVsdCB8fCBzaG91bGRQcmV2ZW50RGVmYXVsdCkgJiYgISR0YXJnZXRFbFswXS5pc0NvbnRlbnRFZGl0YWJsZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzd2lwZXIucGFyYW1zLmZyZWVNb2RlICYmIHN3aXBlci5wYXJhbXMuZnJlZU1vZGUuZW5hYmxlZCAmJiBzd2lwZXIuZnJlZU1vZGUgJiYgc3dpcGVyLmFuaW1hdGluZyAmJiAhcGFyYW1zLmNzc01vZGUpIHtcbiAgICBzd2lwZXIuZnJlZU1vZGUub25Ub3VjaFN0YXJ0KCk7XG4gIH1cblxuICBzd2lwZXIuZW1pdCgndG91Y2hTdGFydCcsIGUpO1xufSIsImltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICcuLi8uLi9zaGFyZWQvZG9tLmpzJztcbmltcG9ydCB7IG5vdyB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvblRvdWNoTW92ZShldmVudCkge1xuICBjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IGRhdGEgPSBzd2lwZXIudG91Y2hFdmVudHNEYXRhO1xuICBjb25zdCB7XG4gICAgcGFyYW1zLFxuICAgIHRvdWNoZXMsXG4gICAgcnRsVHJhbnNsYXRlOiBydGwsXG4gICAgZW5hYmxlZFxuICB9ID0gc3dpcGVyO1xuICBpZiAoIWVuYWJsZWQpIHJldHVybjtcbiAgbGV0IGUgPSBldmVudDtcbiAgaWYgKGUub3JpZ2luYWxFdmVudCkgZSA9IGUub3JpZ2luYWxFdmVudDtcblxuICBpZiAoIWRhdGEuaXNUb3VjaGVkKSB7XG4gICAgaWYgKGRhdGEuc3RhcnRNb3ZpbmcgJiYgZGF0YS5pc1Njcm9sbGluZykge1xuICAgICAgc3dpcGVyLmVtaXQoJ3RvdWNoTW92ZU9wcG9zaXRlJywgZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGRhdGEuaXNUb3VjaEV2ZW50ICYmIGUudHlwZSAhPT0gJ3RvdWNobW92ZScpIHJldHVybjtcbiAgY29uc3QgdGFyZ2V0VG91Y2ggPSBlLnR5cGUgPT09ICd0b3VjaG1vdmUnICYmIGUudGFyZ2V0VG91Y2hlcyAmJiAoZS50YXJnZXRUb3VjaGVzWzBdIHx8IGUuY2hhbmdlZFRvdWNoZXNbMF0pO1xuICBjb25zdCBwYWdlWCA9IGUudHlwZSA9PT0gJ3RvdWNobW92ZScgPyB0YXJnZXRUb3VjaC5wYWdlWCA6IGUucGFnZVg7XG4gIGNvbnN0IHBhZ2VZID0gZS50eXBlID09PSAndG91Y2htb3ZlJyA/IHRhcmdldFRvdWNoLnBhZ2VZIDogZS5wYWdlWTtcblxuICBpZiAoZS5wcmV2ZW50ZWRCeU5lc3RlZFN3aXBlcikge1xuICAgIHRvdWNoZXMuc3RhcnRYID0gcGFnZVg7XG4gICAgdG91Y2hlcy5zdGFydFkgPSBwYWdlWTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXN3aXBlci5hbGxvd1RvdWNoTW92ZSkge1xuICAgIGlmICghJChlLnRhcmdldCkuaXMoZGF0YS5mb2N1c2FibGVFbGVtZW50cykpIHtcbiAgICAgIHN3aXBlci5hbGxvd0NsaWNrID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuaXNUb3VjaGVkKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRvdWNoZXMsIHtcbiAgICAgICAgc3RhcnRYOiBwYWdlWCxcbiAgICAgICAgc3RhcnRZOiBwYWdlWSxcbiAgICAgICAgY3VycmVudFg6IHBhZ2VYLFxuICAgICAgICBjdXJyZW50WTogcGFnZVlcbiAgICAgIH0pO1xuICAgICAgZGF0YS50b3VjaFN0YXJ0VGltZSA9IG5vdygpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChkYXRhLmlzVG91Y2hFdmVudCAmJiBwYXJhbXMudG91Y2hSZWxlYXNlT25FZGdlcyAmJiAhcGFyYW1zLmxvb3ApIHtcbiAgICBpZiAoc3dpcGVyLmlzVmVydGljYWwoKSkge1xuICAgICAgLy8gVmVydGljYWxcbiAgICAgIGlmIChwYWdlWSA8IHRvdWNoZXMuc3RhcnRZICYmIHN3aXBlci50cmFuc2xhdGUgPD0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIHx8IHBhZ2VZID4gdG91Y2hlcy5zdGFydFkgJiYgc3dpcGVyLnRyYW5zbGF0ZSA+PSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIHtcbiAgICAgICAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICAgICAgZGF0YS5pc01vdmVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHBhZ2VYIDwgdG91Y2hlcy5zdGFydFggJiYgc3dpcGVyLnRyYW5zbGF0ZSA8PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgfHwgcGFnZVggPiB0b3VjaGVzLnN0YXJ0WCAmJiBzd2lwZXIudHJhbnNsYXRlID49IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkYXRhLmlzVG91Y2hFdmVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgaWYgKGUudGFyZ2V0ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmICQoZS50YXJnZXQpLmlzKGRhdGEuZm9jdXNhYmxlRWxlbWVudHMpKSB7XG4gICAgICBkYXRhLmlzTW92ZWQgPSB0cnVlO1xuICAgICAgc3dpcGVyLmFsbG93Q2xpY2sgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoZGF0YS5hbGxvd1RvdWNoQ2FsbGJhY2tzKSB7XG4gICAgc3dpcGVyLmVtaXQoJ3RvdWNoTW92ZScsIGUpO1xuICB9XG5cbiAgaWYgKGUudGFyZ2V0VG91Y2hlcyAmJiBlLnRhcmdldFRvdWNoZXMubGVuZ3RoID4gMSkgcmV0dXJuO1xuICB0b3VjaGVzLmN1cnJlbnRYID0gcGFnZVg7XG4gIHRvdWNoZXMuY3VycmVudFkgPSBwYWdlWTtcbiAgY29uc3QgZGlmZlggPSB0b3VjaGVzLmN1cnJlbnRYIC0gdG91Y2hlcy5zdGFydFg7XG4gIGNvbnN0IGRpZmZZID0gdG91Y2hlcy5jdXJyZW50WSAtIHRvdWNoZXMuc3RhcnRZO1xuICBpZiAoc3dpcGVyLnBhcmFtcy50aHJlc2hvbGQgJiYgTWF0aC5zcXJ0KGRpZmZYICoqIDIgKyBkaWZmWSAqKiAyKSA8IHN3aXBlci5wYXJhbXMudGhyZXNob2xkKSByZXR1cm47XG5cbiAgaWYgKHR5cGVvZiBkYXRhLmlzU2Nyb2xsaW5nID09PSAndW5kZWZpbmVkJykge1xuICAgIGxldCB0b3VjaEFuZ2xlO1xuXG4gICAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSAmJiB0b3VjaGVzLmN1cnJlbnRZID09PSB0b3VjaGVzLnN0YXJ0WSB8fCBzd2lwZXIuaXNWZXJ0aWNhbCgpICYmIHRvdWNoZXMuY3VycmVudFggPT09IHRvdWNoZXMuc3RhcnRYKSB7XG4gICAgICBkYXRhLmlzU2Nyb2xsaW5nID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgaWYgKGRpZmZYICogZGlmZlggKyBkaWZmWSAqIGRpZmZZID49IDI1KSB7XG4gICAgICAgIHRvdWNoQW5nbGUgPSBNYXRoLmF0YW4yKE1hdGguYWJzKGRpZmZZKSwgTWF0aC5hYnMoZGlmZlgpKSAqIDE4MCAvIE1hdGguUEk7XG4gICAgICAgIGRhdGEuaXNTY3JvbGxpbmcgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB0b3VjaEFuZ2xlID4gcGFyYW1zLnRvdWNoQW5nbGUgOiA5MCAtIHRvdWNoQW5nbGUgPiBwYXJhbXMudG91Y2hBbmdsZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZGF0YS5pc1Njcm9sbGluZykge1xuICAgIHN3aXBlci5lbWl0KCd0b3VjaE1vdmVPcHBvc2l0ZScsIGUpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBkYXRhLnN0YXJ0TW92aW5nID09PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0b3VjaGVzLmN1cnJlbnRYICE9PSB0b3VjaGVzLnN0YXJ0WCB8fCB0b3VjaGVzLmN1cnJlbnRZICE9PSB0b3VjaGVzLnN0YXJ0WSkge1xuICAgICAgZGF0YS5zdGFydE1vdmluZyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRhdGEuaXNTY3JvbGxpbmcpIHtcbiAgICBkYXRhLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghZGF0YS5zdGFydE1vdmluZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN3aXBlci5hbGxvd0NsaWNrID0gZmFsc2U7XG5cbiAgaWYgKCFwYXJhbXMuY3NzTW9kZSAmJiBlLmNhbmNlbGFibGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBpZiAocGFyYW1zLnRvdWNoTW92ZVN0b3BQcm9wYWdhdGlvbiAmJiAhcGFyYW1zLm5lc3RlZCkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBpZiAoIWRhdGEuaXNNb3ZlZCkge1xuICAgIGlmIChwYXJhbXMubG9vcCAmJiAhcGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgfVxuXG4gICAgZGF0YS5zdGFydFRyYW5zbGF0ZSA9IHN3aXBlci5nZXRUcmFuc2xhdGUoKTtcbiAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcblxuICAgIGlmIChzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbC50cmlnZ2VyKCd3ZWJraXRUcmFuc2l0aW9uRW5kIHRyYW5zaXRpb25lbmQnKTtcbiAgICB9XG5cbiAgICBkYXRhLmFsbG93TW9tZW50dW1Cb3VuY2UgPSBmYWxzZTsgLy8gR3JhYiBDdXJzb3JcblxuICAgIGlmIChwYXJhbXMuZ3JhYkN1cnNvciAmJiAoc3dpcGVyLmFsbG93U2xpZGVOZXh0ID09PSB0cnVlIHx8IHN3aXBlci5hbGxvd1NsaWRlUHJldiA9PT0gdHJ1ZSkpIHtcbiAgICAgIHN3aXBlci5zZXRHcmFiQ3Vyc29yKHRydWUpO1xuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCdzbGlkZXJGaXJzdE1vdmUnLCBlKTtcbiAgfVxuXG4gIHN3aXBlci5lbWl0KCdzbGlkZXJNb3ZlJywgZSk7XG4gIGRhdGEuaXNNb3ZlZCA9IHRydWU7XG4gIGxldCBkaWZmID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gZGlmZlggOiBkaWZmWTtcbiAgdG91Y2hlcy5kaWZmID0gZGlmZjtcbiAgZGlmZiAqPSBwYXJhbXMudG91Y2hSYXRpbztcbiAgaWYgKHJ0bCkgZGlmZiA9IC1kaWZmO1xuICBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPSBkaWZmID4gMCA/ICdwcmV2JyA6ICduZXh0JztcbiAgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gZGlmZiArIGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gIGxldCBkaXNhYmxlUGFyZW50U3dpcGVyID0gdHJ1ZTtcbiAgbGV0IHJlc2lzdGFuY2VSYXRpbyA9IHBhcmFtcy5yZXNpc3RhbmNlUmF0aW87XG5cbiAgaWYgKHBhcmFtcy50b3VjaFJlbGVhc2VPbkVkZ2VzKSB7XG4gICAgcmVzaXN0YW5jZVJhdGlvID0gMDtcbiAgfVxuXG4gIGlmIChkaWZmID4gMCAmJiBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPiBzd2lwZXIubWluVHJhbnNsYXRlKCkpIHtcbiAgICBkaXNhYmxlUGFyZW50U3dpcGVyID0gZmFsc2U7XG4gICAgaWYgKHBhcmFtcy5yZXNpc3RhbmNlKSBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBzd2lwZXIubWluVHJhbnNsYXRlKCkgLSAxICsgKC1zd2lwZXIubWluVHJhbnNsYXRlKCkgKyBkYXRhLnN0YXJ0VHJhbnNsYXRlICsgZGlmZikgKiogcmVzaXN0YW5jZVJhdGlvO1xuICB9IGVsc2UgaWYgKGRpZmYgPCAwICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA8IHN3aXBlci5tYXhUcmFuc2xhdGUoKSkge1xuICAgIGRpc2FibGVQYXJlbnRTd2lwZXIgPSBmYWxzZTtcbiAgICBpZiAocGFyYW1zLnJlc2lzdGFuY2UpIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSArIDEgLSAoc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gZGF0YS5zdGFydFRyYW5zbGF0ZSAtIGRpZmYpICoqIHJlc2lzdGFuY2VSYXRpbztcbiAgfVxuXG4gIGlmIChkaXNhYmxlUGFyZW50U3dpcGVyKSB7XG4gICAgZS5wcmV2ZW50ZWRCeU5lc3RlZFN3aXBlciA9IHRydWU7XG4gIH0gLy8gRGlyZWN0aW9ucyBsb2Nrc1xuXG5cbiAgaWYgKCFzd2lwZXIuYWxsb3dTbGlkZU5leHQgJiYgc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAnbmV4dCcgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlIDwgZGF0YS5zdGFydFRyYW5zbGF0ZSkge1xuICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gIH1cblxuICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlUHJldiAmJiBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPT09ICdwcmV2JyAmJiBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPiBkYXRhLnN0YXJ0VHJhbnNsYXRlKSB7XG4gICAgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgfVxuXG4gIGlmICghc3dpcGVyLmFsbG93U2xpZGVQcmV2ICYmICFzd2lwZXIuYWxsb3dTbGlkZU5leHQpIHtcbiAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkYXRhLnN0YXJ0VHJhbnNsYXRlO1xuICB9IC8vIFRocmVzaG9sZFxuXG5cbiAgaWYgKHBhcmFtcy50aHJlc2hvbGQgPiAwKSB7XG4gICAgaWYgKE1hdGguYWJzKGRpZmYpID4gcGFyYW1zLnRocmVzaG9sZCB8fCBkYXRhLmFsbG93VGhyZXNob2xkTW92ZSkge1xuICAgICAgaWYgKCFkYXRhLmFsbG93VGhyZXNob2xkTW92ZSkge1xuICAgICAgICBkYXRhLmFsbG93VGhyZXNob2xkTW92ZSA9IHRydWU7XG4gICAgICAgIHRvdWNoZXMuc3RhcnRYID0gdG91Y2hlcy5jdXJyZW50WDtcbiAgICAgICAgdG91Y2hlcy5zdGFydFkgPSB0b3VjaGVzLmN1cnJlbnRZO1xuICAgICAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkYXRhLnN0YXJ0VHJhbnNsYXRlO1xuICAgICAgICB0b3VjaGVzLmRpZmYgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB0b3VjaGVzLmN1cnJlbnRYIC0gdG91Y2hlcy5zdGFydFggOiB0b3VjaGVzLmN1cnJlbnRZIC0gdG91Y2hlcy5zdGFydFk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIXBhcmFtcy5mb2xsb3dGaW5nZXIgfHwgcGFyYW1zLmNzc01vZGUpIHJldHVybjsgLy8gVXBkYXRlIGFjdGl2ZSBpbmRleCBpbiBmcmVlIG1vZGVcblxuICBpZiAocGFyYW1zLmZyZWVNb2RlICYmIHBhcmFtcy5mcmVlTW9kZS5lbmFibGVkICYmIHN3aXBlci5mcmVlTW9kZSB8fCBwYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcykge1xuICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gIH1cblxuICBpZiAoc3dpcGVyLnBhcmFtcy5mcmVlTW9kZSAmJiBwYXJhbXMuZnJlZU1vZGUuZW5hYmxlZCAmJiBzd2lwZXIuZnJlZU1vZGUpIHtcbiAgICBzd2lwZXIuZnJlZU1vZGUub25Ub3VjaE1vdmUoKTtcbiAgfSAvLyBVcGRhdGUgcHJvZ3Jlc3NcblxuXG4gIHN3aXBlci51cGRhdGVQcm9ncmVzcyhkYXRhLmN1cnJlbnRUcmFuc2xhdGUpOyAvLyBVcGRhdGUgdHJhbnNsYXRlXG5cbiAgc3dpcGVyLnNldFRyYW5zbGF0ZShkYXRhLmN1cnJlbnRUcmFuc2xhdGUpO1xufSIsImltcG9ydCB7IG5vdywgbmV4dFRpY2sgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb25Ub3VjaEVuZChldmVudCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCBkYXRhID0gc3dpcGVyLnRvdWNoRXZlbnRzRGF0YTtcbiAgY29uc3Qge1xuICAgIHBhcmFtcyxcbiAgICB0b3VjaGVzLFxuICAgIHJ0bFRyYW5zbGF0ZTogcnRsLFxuICAgIHNsaWRlc0dyaWQsXG4gICAgZW5hYmxlZFxuICB9ID0gc3dpcGVyO1xuICBpZiAoIWVuYWJsZWQpIHJldHVybjtcbiAgbGV0IGUgPSBldmVudDtcbiAgaWYgKGUub3JpZ2luYWxFdmVudCkgZSA9IGUub3JpZ2luYWxFdmVudDtcblxuICBpZiAoZGF0YS5hbGxvd1RvdWNoQ2FsbGJhY2tzKSB7XG4gICAgc3dpcGVyLmVtaXQoJ3RvdWNoRW5kJywgZSk7XG4gIH1cblxuICBkYXRhLmFsbG93VG91Y2hDYWxsYmFja3MgPSBmYWxzZTtcblxuICBpZiAoIWRhdGEuaXNUb3VjaGVkKSB7XG4gICAgaWYgKGRhdGEuaXNNb3ZlZCAmJiBwYXJhbXMuZ3JhYkN1cnNvcikge1xuICAgICAgc3dpcGVyLnNldEdyYWJDdXJzb3IoZmFsc2UpO1xuICAgIH1cblxuICAgIGRhdGEuaXNNb3ZlZCA9IGZhbHNlO1xuICAgIGRhdGEuc3RhcnRNb3ZpbmcgPSBmYWxzZTtcbiAgICByZXR1cm47XG4gIH0gLy8gUmV0dXJuIEdyYWIgQ3Vyc29yXG5cblxuICBpZiAocGFyYW1zLmdyYWJDdXJzb3IgJiYgZGF0YS5pc01vdmVkICYmIGRhdGEuaXNUb3VjaGVkICYmIChzd2lwZXIuYWxsb3dTbGlkZU5leHQgPT09IHRydWUgfHwgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID09PSB0cnVlKSkge1xuICAgIHN3aXBlci5zZXRHcmFiQ3Vyc29yKGZhbHNlKTtcbiAgfSAvLyBUaW1lIGRpZmZcblxuXG4gIGNvbnN0IHRvdWNoRW5kVGltZSA9IG5vdygpO1xuICBjb25zdCB0aW1lRGlmZiA9IHRvdWNoRW5kVGltZSAtIGRhdGEudG91Y2hTdGFydFRpbWU7IC8vIFRhcCwgZG91YmxlVGFwLCBDbGlja1xuXG4gIGlmIChzd2lwZXIuYWxsb3dDbGljaykge1xuICAgIGNvbnN0IHBhdGhUcmVlID0gZS5wYXRoIHx8IGUuY29tcG9zZWRQYXRoICYmIGUuY29tcG9zZWRQYXRoKCk7XG4gICAgc3dpcGVyLnVwZGF0ZUNsaWNrZWRTbGlkZShwYXRoVHJlZSAmJiBwYXRoVHJlZVswXSB8fCBlLnRhcmdldCk7XG4gICAgc3dpcGVyLmVtaXQoJ3RhcCBjbGljaycsIGUpO1xuXG4gICAgaWYgKHRpbWVEaWZmIDwgMzAwICYmIHRvdWNoRW5kVGltZSAtIGRhdGEubGFzdENsaWNrVGltZSA8IDMwMCkge1xuICAgICAgc3dpcGVyLmVtaXQoJ2RvdWJsZVRhcCBkb3VibGVDbGljaycsIGUpO1xuICAgIH1cbiAgfVxuXG4gIGRhdGEubGFzdENsaWNrVGltZSA9IG5vdygpO1xuICBuZXh0VGljaygoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIuZGVzdHJveWVkKSBzd2lwZXIuYWxsb3dDbGljayA9IHRydWU7XG4gIH0pO1xuXG4gIGlmICghZGF0YS5pc1RvdWNoZWQgfHwgIWRhdGEuaXNNb3ZlZCB8fCAhc3dpcGVyLnN3aXBlRGlyZWN0aW9uIHx8IHRvdWNoZXMuZGlmZiA9PT0gMCB8fCBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPT09IGRhdGEuc3RhcnRUcmFuc2xhdGUpIHtcbiAgICBkYXRhLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgIGRhdGEuaXNNb3ZlZCA9IGZhbHNlO1xuICAgIGRhdGEuc3RhcnRNb3ZpbmcgPSBmYWxzZTtcbiAgICByZXR1cm47XG4gIH1cblxuICBkYXRhLmlzVG91Y2hlZCA9IGZhbHNlO1xuICBkYXRhLmlzTW92ZWQgPSBmYWxzZTtcbiAgZGF0YS5zdGFydE1vdmluZyA9IGZhbHNlO1xuICBsZXQgY3VycmVudFBvcztcblxuICBpZiAocGFyYW1zLmZvbGxvd0Zpbmdlcikge1xuICAgIGN1cnJlbnRQb3MgPSBydGwgPyBzd2lwZXIudHJhbnNsYXRlIDogLXN3aXBlci50cmFuc2xhdGU7XG4gIH0gZWxzZSB7XG4gICAgY3VycmVudFBvcyA9IC1kYXRhLmN1cnJlbnRUcmFuc2xhdGU7XG4gIH1cblxuICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc3dpcGVyLnBhcmFtcy5mcmVlTW9kZSAmJiBwYXJhbXMuZnJlZU1vZGUuZW5hYmxlZCkge1xuICAgIHN3aXBlci5mcmVlTW9kZS5vblRvdWNoRW5kKHtcbiAgICAgIGN1cnJlbnRQb3NcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH0gLy8gRmluZCBjdXJyZW50IHNsaWRlXG5cblxuICBsZXQgc3RvcEluZGV4ID0gMDtcbiAgbGV0IGdyb3VwU2l6ZSA9IHN3aXBlci5zbGlkZXNTaXplc0dyaWRbMF07XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGlkZXNHcmlkLmxlbmd0aDsgaSArPSBpIDwgcGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCA/IDEgOiBwYXJhbXMuc2xpZGVzUGVyR3JvdXApIHtcbiAgICBjb25zdCBpbmNyZW1lbnQgPSBpIDwgcGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCAtIDEgPyAxIDogcGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuXG4gICAgaWYgKHR5cGVvZiBzbGlkZXNHcmlkW2kgKyBpbmNyZW1lbnRdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKGN1cnJlbnRQb3MgPj0gc2xpZGVzR3JpZFtpXSAmJiBjdXJyZW50UG9zIDwgc2xpZGVzR3JpZFtpICsgaW5jcmVtZW50XSkge1xuICAgICAgICBzdG9wSW5kZXggPSBpO1xuICAgICAgICBncm91cFNpemUgPSBzbGlkZXNHcmlkW2kgKyBpbmNyZW1lbnRdIC0gc2xpZGVzR3JpZFtpXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRQb3MgPj0gc2xpZGVzR3JpZFtpXSkge1xuICAgICAgc3RvcEluZGV4ID0gaTtcbiAgICAgIGdyb3VwU2l6ZSA9IHNsaWRlc0dyaWRbc2xpZGVzR3JpZC5sZW5ndGggLSAxXSAtIHNsaWRlc0dyaWRbc2xpZGVzR3JpZC5sZW5ndGggLSAyXTtcbiAgICB9XG4gIH1cblxuICBsZXQgcmV3aW5kRmlyc3RJbmRleCA9IG51bGw7XG4gIGxldCByZXdpbmRMYXN0SW5kZXggPSBudWxsO1xuXG4gIGlmIChwYXJhbXMucmV3aW5kKSB7XG4gICAgaWYgKHN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgcmV3aW5kTGFzdEluZGV4ID0gc3dpcGVyLnBhcmFtcy52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkICYmIHN3aXBlci52aXJ0dWFsID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCAtIDEgOiBzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDE7XG4gICAgfSBlbHNlIGlmIChzd2lwZXIuaXNFbmQpIHtcbiAgICAgIHJld2luZEZpcnN0SW5kZXggPSAwO1xuICAgIH1cbiAgfSAvLyBGaW5kIGN1cnJlbnQgc2xpZGUgc2l6ZVxuXG5cbiAgY29uc3QgcmF0aW8gPSAoY3VycmVudFBvcyAtIHNsaWRlc0dyaWRbc3RvcEluZGV4XSkgLyBncm91cFNpemU7XG4gIGNvbnN0IGluY3JlbWVudCA9IHN0b3BJbmRleCA8IHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAgLSAxID8gMSA6IHBhcmFtcy5zbGlkZXNQZXJHcm91cDtcblxuICBpZiAodGltZURpZmYgPiBwYXJhbXMubG9uZ1N3aXBlc01zKSB7XG4gICAgLy8gTG9uZyB0b3VjaGVzXG4gICAgaWYgKCFwYXJhbXMubG9uZ1N3aXBlcykge1xuICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAnbmV4dCcpIHtcbiAgICAgIGlmIChyYXRpbyA+PSBwYXJhbXMubG9uZ1N3aXBlc1JhdGlvKSBzd2lwZXIuc2xpZGVUbyhwYXJhbXMucmV3aW5kICYmIHN3aXBlci5pc0VuZCA/IHJld2luZEZpcnN0SW5kZXggOiBzdG9wSW5kZXggKyBpbmNyZW1lbnQpO2Vsc2Ugc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4KTtcbiAgICB9XG5cbiAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAncHJldicpIHtcbiAgICAgIGlmIChyYXRpbyA+IDEgLSBwYXJhbXMubG9uZ1N3aXBlc1JhdGlvKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCArIGluY3JlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKHJld2luZExhc3RJbmRleCAhPT0gbnVsbCAmJiByYXRpbyA8IDAgJiYgTWF0aC5hYnMocmF0aW8pID4gcGFyYW1zLmxvbmdTd2lwZXNSYXRpbykge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhyZXdpbmRMYXN0SW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gU2hvcnQgc3dpcGVzXG4gICAgaWYgKCFwYXJhbXMuc2hvcnRTd2lwZXMpIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXNOYXZCdXR0b25UYXJnZXQgPSBzd2lwZXIubmF2aWdhdGlvbiAmJiAoZS50YXJnZXQgPT09IHN3aXBlci5uYXZpZ2F0aW9uLm5leHRFbCB8fCBlLnRhcmdldCA9PT0gc3dpcGVyLm5hdmlnYXRpb24ucHJldkVsKTtcblxuICAgIGlmICghaXNOYXZCdXR0b25UYXJnZXQpIHtcbiAgICAgIGlmIChzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPT09ICduZXh0Jykge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhyZXdpbmRGaXJzdEluZGV4ICE9PSBudWxsID8gcmV3aW5kRmlyc3RJbmRleCA6IHN0b3BJbmRleCArIGluY3JlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPT09ICdwcmV2Jykge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhyZXdpbmRMYXN0SW5kZXggIT09IG51bGwgPyByZXdpbmRMYXN0SW5kZXggOiBzdG9wSW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZS50YXJnZXQgPT09IHN3aXBlci5uYXZpZ2F0aW9uLm5leHRFbCkge1xuICAgICAgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4ICsgaW5jcmVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4KTtcbiAgICB9XG4gIH1cbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvblJlc2l6ZSgpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qge1xuICAgIHBhcmFtcyxcbiAgICBlbFxuICB9ID0gc3dpcGVyO1xuICBpZiAoZWwgJiYgZWwub2Zmc2V0V2lkdGggPT09IDApIHJldHVybjsgLy8gQnJlYWtwb2ludHNcblxuICBpZiAocGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgc3dpcGVyLnNldEJyZWFrcG9pbnQoKTtcbiAgfSAvLyBTYXZlIGxvY2tzXG5cblxuICBjb25zdCB7XG4gICAgYWxsb3dTbGlkZU5leHQsXG4gICAgYWxsb3dTbGlkZVByZXYsXG4gICAgc25hcEdyaWRcbiAgfSA9IHN3aXBlcjsgLy8gRGlzYWJsZSBsb2NrcyBvbiByZXNpemVcblxuICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSB0cnVlO1xuICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSB0cnVlO1xuICBzd2lwZXIudXBkYXRlU2l6ZSgpO1xuICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG4gIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG5cbiAgaWYgKChwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nIHx8IHBhcmFtcy5zbGlkZXNQZXJWaWV3ID4gMSkgJiYgc3dpcGVyLmlzRW5kICYmICFzd2lwZXIuaXNCZWdpbm5pbmcgJiYgIXN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEsIDAsIGZhbHNlLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChzd2lwZXIuYXV0b3BsYXkgJiYgc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcgJiYgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCkge1xuICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgfSAvLyBSZXR1cm4gbG9ja3MgYWZ0ZXIgcmVzaXplXG5cblxuICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSBhbGxvd1NsaWRlUHJldjtcbiAgc3dpcGVyLmFsbG93U2xpZGVOZXh0ID0gYWxsb3dTbGlkZU5leHQ7XG5cbiAgaWYgKHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzbmFwR3JpZCAhPT0gc3dpcGVyLnNuYXBHcmlkKSB7XG4gICAgc3dpcGVyLmNoZWNrT3ZlcmZsb3coKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBpZiAoIXN3aXBlci5lbmFibGVkKSByZXR1cm47XG5cbiAgaWYgKCFzd2lwZXIuYWxsb3dDbGljaykge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLnByZXZlbnRDbGlja3MpIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmIChzd2lwZXIucGFyYW1zLnByZXZlbnRDbGlja3NQcm9wYWdhdGlvbiAmJiBzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvblNjcm9sbCgpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qge1xuICAgIHdyYXBwZXJFbCxcbiAgICBydGxUcmFuc2xhdGUsXG4gICAgZW5hYmxlZFxuICB9ID0gc3dpcGVyO1xuICBpZiAoIWVuYWJsZWQpIHJldHVybjtcbiAgc3dpcGVyLnByZXZpb3VzVHJhbnNsYXRlID0gc3dpcGVyLnRyYW5zbGF0ZTtcblxuICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgc3dpcGVyLnRyYW5zbGF0ZSA9IC13cmFwcGVyRWwuc2Nyb2xsTGVmdDtcbiAgfSBlbHNlIHtcbiAgICBzd2lwZXIudHJhbnNsYXRlID0gLXdyYXBwZXJFbC5zY3JvbGxUb3A7XG4gIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cblxuICBpZiAoc3dpcGVyLnRyYW5zbGF0ZSA9PT0gMCkgc3dpcGVyLnRyYW5zbGF0ZSA9IDA7XG4gIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICBsZXQgbmV3UHJvZ3Jlc3M7XG4gIGNvbnN0IHRyYW5zbGF0ZXNEaWZmID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuXG4gIGlmICh0cmFuc2xhdGVzRGlmZiA9PT0gMCkge1xuICAgIG5ld1Byb2dyZXNzID0gMDtcbiAgfSBlbHNlIHtcbiAgICBuZXdQcm9ncmVzcyA9IChzd2lwZXIudHJhbnNsYXRlIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSAvIHRyYW5zbGF0ZXNEaWZmO1xuICB9XG5cbiAgaWYgKG5ld1Byb2dyZXNzICE9PSBzd2lwZXIucHJvZ3Jlc3MpIHtcbiAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MocnRsVHJhbnNsYXRlID8gLXN3aXBlci50cmFuc2xhdGUgOiBzd2lwZXIudHJhbnNsYXRlKTtcbiAgfVxuXG4gIHN3aXBlci5lbWl0KCdzZXRUcmFuc2xhdGUnLCBzd2lwZXIudHJhbnNsYXRlLCBmYWxzZSk7XG59IiwiaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tICdzc3Itd2luZG93JztcbmltcG9ydCBvblRvdWNoU3RhcnQgZnJvbSAnLi9vblRvdWNoU3RhcnQuanMnO1xuaW1wb3J0IG9uVG91Y2hNb3ZlIGZyb20gJy4vb25Ub3VjaE1vdmUuanMnO1xuaW1wb3J0IG9uVG91Y2hFbmQgZnJvbSAnLi9vblRvdWNoRW5kLmpzJztcbmltcG9ydCBvblJlc2l6ZSBmcm9tICcuL29uUmVzaXplLmpzJztcbmltcG9ydCBvbkNsaWNrIGZyb20gJy4vb25DbGljay5qcyc7XG5pbXBvcnQgb25TY3JvbGwgZnJvbSAnLi9vblNjcm9sbC5qcyc7XG5sZXQgZHVtbXlFdmVudEF0dGFjaGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGR1bW15RXZlbnRMaXN0ZW5lcigpIHt9XG5cbmNvbnN0IGV2ZW50cyA9IChzd2lwZXIsIG1ldGhvZCkgPT4ge1xuICBjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXMsXG4gICAgdG91Y2hFdmVudHMsXG4gICAgZWwsXG4gICAgd3JhcHBlckVsLFxuICAgIGRldmljZSxcbiAgICBzdXBwb3J0XG4gIH0gPSBzd2lwZXI7XG4gIGNvbnN0IGNhcHR1cmUgPSAhIXBhcmFtcy5uZXN0ZWQ7XG4gIGNvbnN0IGRvbU1ldGhvZCA9IG1ldGhvZCA9PT0gJ29uJyA/ICdhZGRFdmVudExpc3RlbmVyJyA6ICdyZW1vdmVFdmVudExpc3RlbmVyJztcbiAgY29uc3Qgc3dpcGVyTWV0aG9kID0gbWV0aG9kOyAvLyBUb3VjaCBFdmVudHNcblxuICBpZiAoIXN1cHBvcnQudG91Y2gpIHtcbiAgICBlbFtkb21NZXRob2RdKHRvdWNoRXZlbnRzLnN0YXJ0LCBzd2lwZXIub25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG4gICAgZG9jdW1lbnRbZG9tTWV0aG9kXSh0b3VjaEV2ZW50cy5tb3ZlLCBzd2lwZXIub25Ub3VjaE1vdmUsIGNhcHR1cmUpO1xuICAgIGRvY3VtZW50W2RvbU1ldGhvZF0odG91Y2hFdmVudHMuZW5kLCBzd2lwZXIub25Ub3VjaEVuZCwgZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHBhc3NpdmVMaXN0ZW5lciA9IHRvdWNoRXZlbnRzLnN0YXJ0ID09PSAndG91Y2hzdGFydCcgJiYgc3VwcG9ydC5wYXNzaXZlTGlzdGVuZXIgJiYgcGFyYW1zLnBhc3NpdmVMaXN0ZW5lcnMgPyB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgY2FwdHVyZTogZmFsc2VcbiAgICB9IDogZmFsc2U7XG4gICAgZWxbZG9tTWV0aG9kXSh0b3VjaEV2ZW50cy5zdGFydCwgc3dpcGVyLm9uVG91Y2hTdGFydCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICBlbFtkb21NZXRob2RdKHRvdWNoRXZlbnRzLm1vdmUsIHN3aXBlci5vblRvdWNoTW92ZSwgc3VwcG9ydC5wYXNzaXZlTGlzdGVuZXIgPyB7XG4gICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgIGNhcHR1cmVcbiAgICB9IDogY2FwdHVyZSk7XG4gICAgZWxbZG9tTWV0aG9kXSh0b3VjaEV2ZW50cy5lbmQsIHN3aXBlci5vblRvdWNoRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuXG4gICAgaWYgKHRvdWNoRXZlbnRzLmNhbmNlbCkge1xuICAgICAgZWxbZG9tTWV0aG9kXSh0b3VjaEV2ZW50cy5jYW5jZWwsIHN3aXBlci5vblRvdWNoRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgIH1cbiAgfSAvLyBQcmV2ZW50IExpbmtzIENsaWNrc1xuXG5cbiAgaWYgKHBhcmFtcy5wcmV2ZW50Q2xpY2tzIHx8IHBhcmFtcy5wcmV2ZW50Q2xpY2tzUHJvcGFnYXRpb24pIHtcbiAgICBlbFtkb21NZXRob2RdKCdjbGljaycsIHN3aXBlci5vbkNsaWNrLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgIHdyYXBwZXJFbFtkb21NZXRob2RdKCdzY3JvbGwnLCBzd2lwZXIub25TY3JvbGwpO1xuICB9IC8vIFJlc2l6ZSBoYW5kbGVyXG5cblxuICBpZiAocGFyYW1zLnVwZGF0ZU9uV2luZG93UmVzaXplKSB7XG4gICAgc3dpcGVyW3N3aXBlck1ldGhvZF0oZGV2aWNlLmlvcyB8fCBkZXZpY2UuYW5kcm9pZCA/ICdyZXNpemUgb3JpZW50YXRpb25jaGFuZ2Ugb2JzZXJ2ZXJVcGRhdGUnIDogJ3Jlc2l6ZSBvYnNlcnZlclVwZGF0ZScsIG9uUmVzaXplLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBzd2lwZXJbc3dpcGVyTWV0aG9kXSgnb2JzZXJ2ZXJVcGRhdGUnLCBvblJlc2l6ZSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGF0dGFjaEV2ZW50cygpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICBjb25zdCB7XG4gICAgcGFyYW1zLFxuICAgIHN1cHBvcnRcbiAgfSA9IHN3aXBlcjtcbiAgc3dpcGVyLm9uVG91Y2hTdGFydCA9IG9uVG91Y2hTdGFydC5iaW5kKHN3aXBlcik7XG4gIHN3aXBlci5vblRvdWNoTW92ZSA9IG9uVG91Y2hNb3ZlLmJpbmQoc3dpcGVyKTtcbiAgc3dpcGVyLm9uVG91Y2hFbmQgPSBvblRvdWNoRW5kLmJpbmQoc3dpcGVyKTtcblxuICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICBzd2lwZXIub25TY3JvbGwgPSBvblNjcm9sbC5iaW5kKHN3aXBlcik7XG4gIH1cblxuICBzd2lwZXIub25DbGljayA9IG9uQ2xpY2suYmluZChzd2lwZXIpO1xuXG4gIGlmIChzdXBwb3J0LnRvdWNoICYmICFkdW1teUV2ZW50QXR0YWNoZWQpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgZHVtbXlFdmVudExpc3RlbmVyKTtcbiAgICBkdW1teUV2ZW50QXR0YWNoZWQgPSB0cnVlO1xuICB9XG5cbiAgZXZlbnRzKHN3aXBlciwgJ29uJyk7XG59XG5cbmZ1bmN0aW9uIGRldGFjaEV2ZW50cygpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgZXZlbnRzKHN3aXBlciwgJ29mZicpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGF0dGFjaEV2ZW50cyxcbiAgZGV0YWNoRXZlbnRzXG59OyIsImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy5qcyc7XG5cbmNvbnN0IGlzR3JpZEVuYWJsZWQgPSAoc3dpcGVyLCBwYXJhbXMpID0+IHtcbiAgcmV0dXJuIHN3aXBlci5ncmlkICYmIHBhcmFtcy5ncmlkICYmIHBhcmFtcy5ncmlkLnJvd3MgPiAxO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0QnJlYWtwb2ludCgpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qge1xuICAgIGFjdGl2ZUluZGV4LFxuICAgIGluaXRpYWxpemVkLFxuICAgIGxvb3BlZFNsaWRlcyA9IDAsXG4gICAgcGFyYW1zLFxuICAgICRlbFxuICB9ID0gc3dpcGVyO1xuICBjb25zdCBicmVha3BvaW50cyA9IHBhcmFtcy5icmVha3BvaW50cztcbiAgaWYgKCFicmVha3BvaW50cyB8fCBicmVha3BvaW50cyAmJiBPYmplY3Qua2V5cyhicmVha3BvaW50cykubGVuZ3RoID09PSAwKSByZXR1cm47IC8vIEdldCBicmVha3BvaW50IGZvciB3aW5kb3cgd2lkdGggYW5kIHVwZGF0ZSBwYXJhbWV0ZXJzXG5cbiAgY29uc3QgYnJlYWtwb2ludCA9IHN3aXBlci5nZXRCcmVha3BvaW50KGJyZWFrcG9pbnRzLCBzd2lwZXIucGFyYW1zLmJyZWFrcG9pbnRzQmFzZSwgc3dpcGVyLmVsKTtcbiAgaWYgKCFicmVha3BvaW50IHx8IHN3aXBlci5jdXJyZW50QnJlYWtwb2ludCA9PT0gYnJlYWtwb2ludCkgcmV0dXJuO1xuICBjb25zdCBicmVha3BvaW50T25seVBhcmFtcyA9IGJyZWFrcG9pbnQgaW4gYnJlYWtwb2ludHMgPyBicmVha3BvaW50c1ticmVha3BvaW50XSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgYnJlYWtwb2ludFBhcmFtcyA9IGJyZWFrcG9pbnRPbmx5UGFyYW1zIHx8IHN3aXBlci5vcmlnaW5hbFBhcmFtcztcbiAgY29uc3Qgd2FzTXVsdGlSb3cgPSBpc0dyaWRFbmFibGVkKHN3aXBlciwgcGFyYW1zKTtcbiAgY29uc3QgaXNNdWx0aVJvdyA9IGlzR3JpZEVuYWJsZWQoc3dpcGVyLCBicmVha3BvaW50UGFyYW1zKTtcbiAgY29uc3Qgd2FzRW5hYmxlZCA9IHBhcmFtcy5lbmFibGVkO1xuXG4gIGlmICh3YXNNdWx0aVJvdyAmJiAhaXNNdWx0aVJvdykge1xuICAgICRlbC5yZW1vdmVDbGFzcyhgJHtwYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzc31ncmlkICR7cGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9Z3JpZC1jb2x1bW5gKTtcbiAgICBzd2lwZXIuZW1pdENvbnRhaW5lckNsYXNzZXMoKTtcbiAgfSBlbHNlIGlmICghd2FzTXVsdGlSb3cgJiYgaXNNdWx0aVJvdykge1xuICAgICRlbC5hZGRDbGFzcyhgJHtwYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzc31ncmlkYCk7XG5cbiAgICBpZiAoYnJlYWtwb2ludFBhcmFtcy5ncmlkLmZpbGwgJiYgYnJlYWtwb2ludFBhcmFtcy5ncmlkLmZpbGwgPT09ICdjb2x1bW4nIHx8ICFicmVha3BvaW50UGFyYW1zLmdyaWQuZmlsbCAmJiBwYXJhbXMuZ3JpZC5maWxsID09PSAnY29sdW1uJykge1xuICAgICAgJGVsLmFkZENsYXNzKGAke3BhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzfWdyaWQtY29sdW1uYCk7XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXRDb250YWluZXJDbGFzc2VzKCk7XG4gIH0gLy8gVG9nZ2xlIG5hdmlnYXRpb24sIHBhZ2luYXRpb24sIHNjcm9sbGJhclxuXG5cbiAgWyduYXZpZ2F0aW9uJywgJ3BhZ2luYXRpb24nLCAnc2Nyb2xsYmFyJ10uZm9yRWFjaChwcm9wID0+IHtcbiAgICBjb25zdCB3YXNNb2R1bGVFbmFibGVkID0gcGFyYW1zW3Byb3BdICYmIHBhcmFtc1twcm9wXS5lbmFibGVkO1xuICAgIGNvbnN0IGlzTW9kdWxlRW5hYmxlZCA9IGJyZWFrcG9pbnRQYXJhbXNbcHJvcF0gJiYgYnJlYWtwb2ludFBhcmFtc1twcm9wXS5lbmFibGVkO1xuXG4gICAgaWYgKHdhc01vZHVsZUVuYWJsZWQgJiYgIWlzTW9kdWxlRW5hYmxlZCkge1xuICAgICAgc3dpcGVyW3Byb3BdLmRpc2FibGUoKTtcbiAgICB9XG5cbiAgICBpZiAoIXdhc01vZHVsZUVuYWJsZWQgJiYgaXNNb2R1bGVFbmFibGVkKSB7XG4gICAgICBzd2lwZXJbcHJvcF0uZW5hYmxlKCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgZGlyZWN0aW9uQ2hhbmdlZCA9IGJyZWFrcG9pbnRQYXJhbXMuZGlyZWN0aW9uICYmIGJyZWFrcG9pbnRQYXJhbXMuZGlyZWN0aW9uICE9PSBwYXJhbXMuZGlyZWN0aW9uO1xuICBjb25zdCBuZWVkc1JlTG9vcCA9IHBhcmFtcy5sb29wICYmIChicmVha3BvaW50UGFyYW1zLnNsaWRlc1BlclZpZXcgIT09IHBhcmFtcy5zbGlkZXNQZXJWaWV3IHx8IGRpcmVjdGlvbkNoYW5nZWQpO1xuXG4gIGlmIChkaXJlY3Rpb25DaGFuZ2VkICYmIGluaXRpYWxpemVkKSB7XG4gICAgc3dpcGVyLmNoYW5nZURpcmVjdGlvbigpO1xuICB9XG5cbiAgZXh0ZW5kKHN3aXBlci5wYXJhbXMsIGJyZWFrcG9pbnRQYXJhbXMpO1xuICBjb25zdCBpc0VuYWJsZWQgPSBzd2lwZXIucGFyYW1zLmVuYWJsZWQ7XG4gIE9iamVjdC5hc3NpZ24oc3dpcGVyLCB7XG4gICAgYWxsb3dUb3VjaE1vdmU6IHN3aXBlci5wYXJhbXMuYWxsb3dUb3VjaE1vdmUsXG4gICAgYWxsb3dTbGlkZU5leHQ6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZU5leHQsXG4gICAgYWxsb3dTbGlkZVByZXY6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZVByZXZcbiAgfSk7XG5cbiAgaWYgKHdhc0VuYWJsZWQgJiYgIWlzRW5hYmxlZCkge1xuICAgIHN3aXBlci5kaXNhYmxlKCk7XG4gIH0gZWxzZSBpZiAoIXdhc0VuYWJsZWQgJiYgaXNFbmFibGVkKSB7XG4gICAgc3dpcGVyLmVuYWJsZSgpO1xuICB9XG5cbiAgc3dpcGVyLmN1cnJlbnRCcmVha3BvaW50ID0gYnJlYWtwb2ludDtcbiAgc3dpcGVyLmVtaXQoJ19iZWZvcmVCcmVha3BvaW50JywgYnJlYWtwb2ludFBhcmFtcyk7XG5cbiAgaWYgKG5lZWRzUmVMb29wICYmIGluaXRpYWxpemVkKSB7XG4gICAgc3dpcGVyLmxvb3BEZXN0cm95KCk7XG4gICAgc3dpcGVyLmxvb3BDcmVhdGUoKTtcbiAgICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG4gICAgc3dpcGVyLnNsaWRlVG8oYWN0aXZlSW5kZXggLSBsb29wZWRTbGlkZXMgKyBzd2lwZXIubG9vcGVkU2xpZGVzLCAwLCBmYWxzZSk7XG4gIH1cblxuICBzd2lwZXIuZW1pdCgnYnJlYWtwb2ludCcsIGJyZWFrcG9pbnRQYXJhbXMpO1xufSIsImltcG9ydCBzZXRCcmVha3BvaW50IGZyb20gJy4vc2V0QnJlYWtwb2ludC5qcyc7XG5pbXBvcnQgZ2V0QnJlYWtwb2ludCBmcm9tICcuL2dldEJyZWFrcG9pbnQuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICBzZXRCcmVha3BvaW50LFxuICBnZXRCcmVha3BvaW50XG59OyIsImltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QnJlYWtwb2ludChicmVha3BvaW50cywgYmFzZSA9ICd3aW5kb3cnLCBjb250YWluZXJFbCkge1xuICBpZiAoIWJyZWFrcG9pbnRzIHx8IGJhc2UgPT09ICdjb250YWluZXInICYmICFjb250YWluZXJFbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgbGV0IGJyZWFrcG9pbnQgPSBmYWxzZTtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIGNvbnN0IGN1cnJlbnRIZWlnaHQgPSBiYXNlID09PSAnd2luZG93JyA/IHdpbmRvdy5pbm5lckhlaWdodCA6IGNvbnRhaW5lckVsLmNsaWVudEhlaWdodDtcbiAgY29uc3QgcG9pbnRzID0gT2JqZWN0LmtleXMoYnJlYWtwb2ludHMpLm1hcChwb2ludCA9PiB7XG4gICAgaWYgKHR5cGVvZiBwb2ludCA9PT0gJ3N0cmluZycgJiYgcG9pbnQuaW5kZXhPZignQCcpID09PSAwKSB7XG4gICAgICBjb25zdCBtaW5SYXRpbyA9IHBhcnNlRmxvYXQocG9pbnQuc3Vic3RyKDEpKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gY3VycmVudEhlaWdodCAqIG1pblJhdGlvO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHBvaW50XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogcG9pbnQsXG4gICAgICBwb2ludFxuICAgIH07XG4gIH0pO1xuICBwb2ludHMuc29ydCgoYSwgYikgPT4gcGFyc2VJbnQoYS52YWx1ZSwgMTApIC0gcGFyc2VJbnQoYi52YWx1ZSwgMTApKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHBvaW50LFxuICAgICAgdmFsdWVcbiAgICB9ID0gcG9pbnRzW2ldO1xuXG4gICAgaWYgKGJhc2UgPT09ICd3aW5kb3cnKSB7XG4gICAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEoYChtaW4td2lkdGg6ICR7dmFsdWV9cHgpYCkubWF0Y2hlcykge1xuICAgICAgICBicmVha3BvaW50ID0gcG9pbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA8PSBjb250YWluZXJFbC5jbGllbnRXaWR0aCkge1xuICAgICAgYnJlYWtwb2ludCA9IHBvaW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBicmVha3BvaW50IHx8ICdtYXgnO1xufSIsImltcG9ydCBhZGRDbGFzc2VzIGZyb20gJy4vYWRkQ2xhc3Nlcy5qcyc7XG5pbXBvcnQgcmVtb3ZlQ2xhc3NlcyBmcm9tICcuL3JlbW92ZUNsYXNzZXMuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICBhZGRDbGFzc2VzLFxuICByZW1vdmVDbGFzc2VzXG59OyIsImZ1bmN0aW9uIHByZXBhcmVDbGFzc2VzKGVudHJpZXMsIHByZWZpeCkge1xuICBjb25zdCByZXN1bHRDbGFzc2VzID0gW107XG4gIGVudHJpZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyhpdGVtKS5mb3JFYWNoKGNsYXNzTmFtZXMgPT4ge1xuICAgICAgICBpZiAoaXRlbVtjbGFzc05hbWVzXSkge1xuICAgICAgICAgIHJlc3VsdENsYXNzZXMucHVzaChwcmVmaXggKyBjbGFzc05hbWVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlc3VsdENsYXNzZXMucHVzaChwcmVmaXggKyBpdGVtKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0Q2xhc3Nlcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkQ2xhc3NlcygpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZXMsXG4gICAgcGFyYW1zLFxuICAgIHJ0bCxcbiAgICAkZWwsXG4gICAgZGV2aWNlLFxuICAgIHN1cHBvcnRcbiAgfSA9IHN3aXBlcjsgLy8gcHJldHRpZXItaWdub3JlXG5cbiAgY29uc3Qgc3VmZml4ZXMgPSBwcmVwYXJlQ2xhc3NlcyhbJ2luaXRpYWxpemVkJywgcGFyYW1zLmRpcmVjdGlvbiwge1xuICAgICdwb2ludGVyLWV2ZW50cyc6ICFzdXBwb3J0LnRvdWNoXG4gIH0sIHtcbiAgICAnZnJlZS1tb2RlJzogc3dpcGVyLnBhcmFtcy5mcmVlTW9kZSAmJiBwYXJhbXMuZnJlZU1vZGUuZW5hYmxlZFxuICB9LCB7XG4gICAgJ2F1dG9oZWlnaHQnOiBwYXJhbXMuYXV0b0hlaWdodFxuICB9LCB7XG4gICAgJ3J0bCc6IHJ0bFxuICB9LCB7XG4gICAgJ2dyaWQnOiBwYXJhbXMuZ3JpZCAmJiBwYXJhbXMuZ3JpZC5yb3dzID4gMVxuICB9LCB7XG4gICAgJ2dyaWQtY29sdW1uJzogcGFyYW1zLmdyaWQgJiYgcGFyYW1zLmdyaWQucm93cyA+IDEgJiYgcGFyYW1zLmdyaWQuZmlsbCA9PT0gJ2NvbHVtbidcbiAgfSwge1xuICAgICdhbmRyb2lkJzogZGV2aWNlLmFuZHJvaWRcbiAgfSwge1xuICAgICdpb3MnOiBkZXZpY2UuaW9zXG4gIH0sIHtcbiAgICAnY3NzLW1vZGUnOiBwYXJhbXMuY3NzTW9kZVxuICB9LCB7XG4gICAgJ2NlbnRlcmVkJzogcGFyYW1zLmNzc01vZGUgJiYgcGFyYW1zLmNlbnRlcmVkU2xpZGVzXG4gIH0sIHtcbiAgICAnd2F0Y2gtcHJvZ3Jlc3MnOiBwYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzc1xuICB9XSwgcGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MpO1xuICBjbGFzc05hbWVzLnB1c2goLi4uc3VmZml4ZXMpO1xuICAkZWwuYWRkQ2xhc3MoWy4uLmNsYXNzTmFtZXNdLmpvaW4oJyAnKSk7XG4gIHN3aXBlci5lbWl0Q29udGFpbmVyQ2xhc3NlcygpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbW92ZUNsYXNzZXMoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICAkZWwsXG4gICAgY2xhc3NOYW1lc1xuICB9ID0gc3dpcGVyO1xuICAkZWwucmVtb3ZlQ2xhc3MoY2xhc3NOYW1lcy5qb2luKCcgJykpO1xuICBzd2lwZXIuZW1pdENvbnRhaW5lckNsYXNzZXMoKTtcbn0iLCJmdW5jdGlvbiBjaGVja092ZXJmbG93KCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgaXNMb2NrZWQ6IHdhc0xvY2tlZCxcbiAgICBwYXJhbXNcbiAgfSA9IHN3aXBlcjtcbiAgY29uc3Qge1xuICAgIHNsaWRlc09mZnNldEJlZm9yZVxuICB9ID0gcGFyYW1zO1xuXG4gIGlmIChzbGlkZXNPZmZzZXRCZWZvcmUpIHtcbiAgICBjb25zdCBsYXN0U2xpZGVJbmRleCA9IHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBsYXN0U2xpZGVSaWdodEVkZ2UgPSBzd2lwZXIuc2xpZGVzR3JpZFtsYXN0U2xpZGVJbmRleF0gKyBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkW2xhc3RTbGlkZUluZGV4XSArIHNsaWRlc09mZnNldEJlZm9yZSAqIDI7XG4gICAgc3dpcGVyLmlzTG9ja2VkID0gc3dpcGVyLnNpemUgPiBsYXN0U2xpZGVSaWdodEVkZ2U7XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyLmlzTG9ja2VkID0gc3dpcGVyLnNuYXBHcmlkLmxlbmd0aCA9PT0gMTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuYWxsb3dTbGlkZU5leHQgPT09IHRydWUpIHtcbiAgICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSAhc3dpcGVyLmlzTG9ja2VkO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5hbGxvd1NsaWRlUHJldiA9PT0gdHJ1ZSkge1xuICAgIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9ICFzd2lwZXIuaXNMb2NrZWQ7XG4gIH1cblxuICBpZiAod2FzTG9ja2VkICYmIHdhc0xvY2tlZCAhPT0gc3dpcGVyLmlzTG9ja2VkKSB7XG4gICAgc3dpcGVyLmlzRW5kID0gZmFsc2U7XG4gIH1cblxuICBpZiAod2FzTG9ja2VkICE9PSBzd2lwZXIuaXNMb2NrZWQpIHtcbiAgICBzd2lwZXIuZW1pdChzd2lwZXIuaXNMb2NrZWQgPyAnbG9jaycgOiAndW5sb2NrJyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjaGVja092ZXJmbG93XG59OyIsImV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogdHJ1ZSxcbiAgZGlyZWN0aW9uOiAnaG9yaXpvbnRhbCcsXG4gIHRvdWNoRXZlbnRzVGFyZ2V0OiAnd3JhcHBlcicsXG4gIGluaXRpYWxTbGlkZTogMCxcbiAgc3BlZWQ6IDMwMCxcbiAgY3NzTW9kZTogZmFsc2UsXG4gIHVwZGF0ZU9uV2luZG93UmVzaXplOiB0cnVlLFxuICByZXNpemVPYnNlcnZlcjogdHJ1ZSxcbiAgbmVzdGVkOiBmYWxzZSxcbiAgY3JlYXRlRWxlbWVudHM6IGZhbHNlLFxuICBlbmFibGVkOiB0cnVlLFxuICBmb2N1c2FibGVFbGVtZW50czogJ2lucHV0LCBzZWxlY3QsIG9wdGlvbiwgdGV4dGFyZWEsIGJ1dHRvbiwgdmlkZW8sIGxhYmVsJyxcbiAgLy8gT3ZlcnJpZGVzXG4gIHdpZHRoOiBudWxsLFxuICBoZWlnaHQ6IG51bGwsXG4gIC8vXG4gIHByZXZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbjogZmFsc2UsXG4gIC8vIHNzclxuICB1c2VyQWdlbnQ6IG51bGwsXG4gIHVybDogbnVsbCxcbiAgLy8gVG8gc3VwcG9ydCBpT1MncyBzd2lwZS10by1nby1iYWNrIGdlc3R1cmUgKHdoZW4gYmVpbmcgdXNlZCBpbi1hcHApLlxuICBlZGdlU3dpcGVEZXRlY3Rpb246IGZhbHNlLFxuICBlZGdlU3dpcGVUaHJlc2hvbGQ6IDIwLFxuICAvLyBBdXRvaGVpZ2h0XG4gIGF1dG9IZWlnaHQ6IGZhbHNlLFxuICAvLyBTZXQgd3JhcHBlciB3aWR0aFxuICBzZXRXcmFwcGVyU2l6ZTogZmFsc2UsXG4gIC8vIFZpcnR1YWwgVHJhbnNsYXRlXG4gIHZpcnR1YWxUcmFuc2xhdGU6IGZhbHNlLFxuICAvLyBFZmZlY3RzXG4gIGVmZmVjdDogJ3NsaWRlJyxcbiAgLy8gJ3NsaWRlJyBvciAnZmFkZScgb3IgJ2N1YmUnIG9yICdjb3ZlcmZsb3cnIG9yICdmbGlwJ1xuICAvLyBCcmVha3BvaW50c1xuICBicmVha3BvaW50czogdW5kZWZpbmVkLFxuICBicmVha3BvaW50c0Jhc2U6ICd3aW5kb3cnLFxuICAvLyBTbGlkZXMgZ3JpZFxuICBzcGFjZUJldHdlZW46IDAsXG4gIHNsaWRlc1BlclZpZXc6IDEsXG4gIHNsaWRlc1Blckdyb3VwOiAxLFxuICBzbGlkZXNQZXJHcm91cFNraXA6IDAsXG4gIHNsaWRlc1Blckdyb3VwQXV0bzogZmFsc2UsXG4gIGNlbnRlcmVkU2xpZGVzOiBmYWxzZSxcbiAgY2VudGVyZWRTbGlkZXNCb3VuZHM6IGZhbHNlLFxuICBzbGlkZXNPZmZzZXRCZWZvcmU6IDAsXG4gIC8vIGluIHB4XG4gIHNsaWRlc09mZnNldEFmdGVyOiAwLFxuICAvLyBpbiBweFxuICBub3JtYWxpemVTbGlkZUluZGV4OiB0cnVlLFxuICBjZW50ZXJJbnN1ZmZpY2llbnRTbGlkZXM6IGZhbHNlLFxuICAvLyBEaXNhYmxlIHN3aXBlciBhbmQgaGlkZSBuYXZpZ2F0aW9uIHdoZW4gY29udGFpbmVyIG5vdCBvdmVyZmxvd1xuICB3YXRjaE92ZXJmbG93OiB0cnVlLFxuICAvLyBSb3VuZCBsZW5ndGhcbiAgcm91bmRMZW5ndGhzOiBmYWxzZSxcbiAgLy8gVG91Y2hlc1xuICB0b3VjaFJhdGlvOiAxLFxuICB0b3VjaEFuZ2xlOiA0NSxcbiAgc2ltdWxhdGVUb3VjaDogdHJ1ZSxcbiAgc2hvcnRTd2lwZXM6IHRydWUsXG4gIGxvbmdTd2lwZXM6IHRydWUsXG4gIGxvbmdTd2lwZXNSYXRpbzogMC41LFxuICBsb25nU3dpcGVzTXM6IDMwMCxcbiAgZm9sbG93RmluZ2VyOiB0cnVlLFxuICBhbGxvd1RvdWNoTW92ZTogdHJ1ZSxcbiAgdGhyZXNob2xkOiAwLFxuICB0b3VjaE1vdmVTdG9wUHJvcGFnYXRpb246IGZhbHNlLFxuICB0b3VjaFN0YXJ0UHJldmVudERlZmF1bHQ6IHRydWUsXG4gIHRvdWNoU3RhcnRGb3JjZVByZXZlbnREZWZhdWx0OiBmYWxzZSxcbiAgdG91Y2hSZWxlYXNlT25FZGdlczogZmFsc2UsXG4gIC8vIFVuaXF1ZSBOYXZpZ2F0aW9uIEVsZW1lbnRzXG4gIHVuaXF1ZU5hdkVsZW1lbnRzOiB0cnVlLFxuICAvLyBSZXNpc3RhbmNlXG4gIHJlc2lzdGFuY2U6IHRydWUsXG4gIHJlc2lzdGFuY2VSYXRpbzogMC44NSxcbiAgLy8gUHJvZ3Jlc3NcbiAgd2F0Y2hTbGlkZXNQcm9ncmVzczogZmFsc2UsXG4gIC8vIEN1cnNvclxuICBncmFiQ3Vyc29yOiBmYWxzZSxcbiAgLy8gQ2xpY2tzXG4gIHByZXZlbnRDbGlja3M6IHRydWUsXG4gIHByZXZlbnRDbGlja3NQcm9wYWdhdGlvbjogdHJ1ZSxcbiAgc2xpZGVUb0NsaWNrZWRTbGlkZTogZmFsc2UsXG4gIC8vIEltYWdlc1xuICBwcmVsb2FkSW1hZ2VzOiB0cnVlLFxuICB1cGRhdGVPbkltYWdlc1JlYWR5OiB0cnVlLFxuICAvLyBsb29wXG4gIGxvb3A6IGZhbHNlLFxuICBsb29wQWRkaXRpb25hbFNsaWRlczogMCxcbiAgbG9vcGVkU2xpZGVzOiBudWxsLFxuICBsb29wZWRTbGlkZXNMaW1pdDogdHJ1ZSxcbiAgbG9vcEZpbGxHcm91cFdpdGhCbGFuazogZmFsc2UsXG4gIGxvb3BQcmV2ZW50c1NsaWRlOiB0cnVlLFxuICAvLyByZXdpbmRcbiAgcmV3aW5kOiBmYWxzZSxcbiAgLy8gU3dpcGluZy9ubyBzd2lwaW5nXG4gIGFsbG93U2xpZGVQcmV2OiB0cnVlLFxuICBhbGxvd1NsaWRlTmV4dDogdHJ1ZSxcbiAgc3dpcGVIYW5kbGVyOiBudWxsLFxuICAvLyAnLnN3aXBlLWhhbmRsZXInLFxuICBub1N3aXBpbmc6IHRydWUsXG4gIG5vU3dpcGluZ0NsYXNzOiAnc3dpcGVyLW5vLXN3aXBpbmcnLFxuICBub1N3aXBpbmdTZWxlY3RvcjogbnVsbCxcbiAgLy8gUGFzc2l2ZSBMaXN0ZW5lcnNcbiAgcGFzc2l2ZUxpc3RlbmVyczogdHJ1ZSxcbiAgbWF4QmFja2ZhY2VIaWRkZW5TbGlkZXM6IDEwLFxuICAvLyBOU1xuICBjb250YWluZXJNb2RpZmllckNsYXNzOiAnc3dpcGVyLScsXG4gIC8vIE5FV1xuICBzbGlkZUNsYXNzOiAnc3dpcGVyLXNsaWRlJyxcbiAgc2xpZGVCbGFua0NsYXNzOiAnc3dpcGVyLXNsaWRlLWludmlzaWJsZS1ibGFuaycsXG4gIHNsaWRlQWN0aXZlQ2xhc3M6ICdzd2lwZXItc2xpZGUtYWN0aXZlJyxcbiAgc2xpZGVEdXBsaWNhdGVBY3RpdmVDbGFzczogJ3N3aXBlci1zbGlkZS1kdXBsaWNhdGUtYWN0aXZlJyxcbiAgc2xpZGVWaXNpYmxlQ2xhc3M6ICdzd2lwZXItc2xpZGUtdmlzaWJsZScsXG4gIHNsaWRlRHVwbGljYXRlQ2xhc3M6ICdzd2lwZXItc2xpZGUtZHVwbGljYXRlJyxcbiAgc2xpZGVOZXh0Q2xhc3M6ICdzd2lwZXItc2xpZGUtbmV4dCcsXG4gIHNsaWRlRHVwbGljYXRlTmV4dENsYXNzOiAnc3dpcGVyLXNsaWRlLWR1cGxpY2F0ZS1uZXh0JyxcbiAgc2xpZGVQcmV2Q2xhc3M6ICdzd2lwZXItc2xpZGUtcHJldicsXG4gIHNsaWRlRHVwbGljYXRlUHJldkNsYXNzOiAnc3dpcGVyLXNsaWRlLWR1cGxpY2F0ZS1wcmV2JyxcbiAgd3JhcHBlckNsYXNzOiAnc3dpcGVyLXdyYXBwZXInLFxuICAvLyBDYWxsYmFja3NcbiAgcnVuQ2FsbGJhY2tzT25Jbml0OiB0cnVlLFxuICAvLyBJbnRlcm5hbHNcbiAgX2VtaXRDbGFzc2VzOiBmYWxzZVxufTsiLCJpbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbW9kdWxlRXh0ZW5kUGFyYW1zKHBhcmFtcywgYWxsTW9kdWxlc1BhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24gZXh0ZW5kUGFyYW1zKG9iaiA9IHt9KSB7XG4gICAgY29uc3QgbW9kdWxlUGFyYW1OYW1lID0gT2JqZWN0LmtleXMob2JqKVswXTtcbiAgICBjb25zdCBtb2R1bGVQYXJhbXMgPSBvYmpbbW9kdWxlUGFyYW1OYW1lXTtcblxuICAgIGlmICh0eXBlb2YgbW9kdWxlUGFyYW1zICE9PSAnb2JqZWN0JyB8fCBtb2R1bGVQYXJhbXMgPT09IG51bGwpIHtcbiAgICAgIGV4dGVuZChhbGxNb2R1bGVzUGFyYW1zLCBvYmopO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChbJ25hdmlnYXRpb24nLCAncGFnaW5hdGlvbicsICdzY3JvbGxiYXInXS5pbmRleE9mKG1vZHVsZVBhcmFtTmFtZSkgPj0gMCAmJiBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9PT0gdHJ1ZSkge1xuICAgICAgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPSB7XG4gICAgICAgIGF1dG86IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCEobW9kdWxlUGFyYW1OYW1lIGluIHBhcmFtcyAmJiAnZW5hYmxlZCcgaW4gbW9kdWxlUGFyYW1zKSkge1xuICAgICAgZXh0ZW5kKGFsbE1vZHVsZXNQYXJhbXMsIG9iaik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID09PSB0cnVlKSB7XG4gICAgICBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID09PSAnb2JqZWN0JyAmJiAhKCdlbmFibGVkJyBpbiBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSkpIHtcbiAgICAgIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdLmVuYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0pIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID0ge1xuICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICB9O1xuICAgIGV4dGVuZChhbGxNb2R1bGVzUGFyYW1zLCBvYmopO1xuICB9O1xufSIsIi8qIGVzbGludCBuby1wYXJhbS1yZWFzc2lnbjogXCJvZmZcIiAqL1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tICdzc3Itd2luZG93JztcbmltcG9ydCAkIGZyb20gJy4uL3NoYXJlZC9kb20uanMnO1xuaW1wb3J0IHsgZXh0ZW5kLCBub3csIGRlbGV0ZVByb3BzIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzLmpzJztcbmltcG9ydCB7IGdldFN1cHBvcnQgfSBmcm9tICcuLi9zaGFyZWQvZ2V0LXN1cHBvcnQuanMnO1xuaW1wb3J0IHsgZ2V0RGV2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2dldC1kZXZpY2UuanMnO1xuaW1wb3J0IHsgZ2V0QnJvd3NlciB9IGZyb20gJy4uL3NoYXJlZC9nZXQtYnJvd3Nlci5qcyc7XG5pbXBvcnQgUmVzaXplIGZyb20gJy4vbW9kdWxlcy9yZXNpemUvcmVzaXplLmpzJztcbmltcG9ydCBPYnNlcnZlciBmcm9tICcuL21vZHVsZXMvb2JzZXJ2ZXIvb2JzZXJ2ZXIuanMnO1xuaW1wb3J0IGV2ZW50c0VtaXR0ZXIgZnJvbSAnLi9ldmVudHMtZW1pdHRlci5qcyc7XG5pbXBvcnQgdXBkYXRlIGZyb20gJy4vdXBkYXRlL2luZGV4LmpzJztcbmltcG9ydCB0cmFuc2xhdGUgZnJvbSAnLi90cmFuc2xhdGUvaW5kZXguanMnO1xuaW1wb3J0IHRyYW5zaXRpb24gZnJvbSAnLi90cmFuc2l0aW9uL2luZGV4LmpzJztcbmltcG9ydCBzbGlkZSBmcm9tICcuL3NsaWRlL2luZGV4LmpzJztcbmltcG9ydCBsb29wIGZyb20gJy4vbG9vcC9pbmRleC5qcyc7XG5pbXBvcnQgZ3JhYkN1cnNvciBmcm9tICcuL2dyYWItY3Vyc29yL2luZGV4LmpzJztcbmltcG9ydCBldmVudHMgZnJvbSAnLi9ldmVudHMvaW5kZXguanMnO1xuaW1wb3J0IGJyZWFrcG9pbnRzIGZyb20gJy4vYnJlYWtwb2ludHMvaW5kZXguanMnO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSAnLi9jbGFzc2VzL2luZGV4LmpzJztcbmltcG9ydCBpbWFnZXMgZnJvbSAnLi9pbWFnZXMvaW5kZXguanMnO1xuaW1wb3J0IGNoZWNrT3ZlcmZsb3cgZnJvbSAnLi9jaGVjay1vdmVyZmxvdy9pbmRleC5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cy5qcyc7XG5pbXBvcnQgbW9kdWxlRXh0ZW5kUGFyYW1zIGZyb20gJy4vbW9kdWxlRXh0ZW5kUGFyYW1zLmpzJztcbmNvbnN0IHByb3RvdHlwZXMgPSB7XG4gIGV2ZW50c0VtaXR0ZXIsXG4gIHVwZGF0ZSxcbiAgdHJhbnNsYXRlLFxuICB0cmFuc2l0aW9uLFxuICBzbGlkZSxcbiAgbG9vcCxcbiAgZ3JhYkN1cnNvcixcbiAgZXZlbnRzLFxuICBicmVha3BvaW50cyxcbiAgY2hlY2tPdmVyZmxvdyxcbiAgY2xhc3NlcyxcbiAgaW1hZ2VzXG59O1xuY29uc3QgZXh0ZW5kZWREZWZhdWx0cyA9IHt9O1xuXG5jbGFzcyBTd2lwZXIge1xuICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgbGV0IGVsO1xuICAgIGxldCBwYXJhbXM7XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgYXJnc1swXS5jb25zdHJ1Y3RvciAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnc1swXSkuc2xpY2UoOCwgLTEpID09PSAnT2JqZWN0Jykge1xuICAgICAgcGFyYW1zID0gYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgW2VsLCBwYXJhbXNdID0gYXJncztcbiAgICB9XG5cbiAgICBpZiAoIXBhcmFtcykgcGFyYW1zID0ge307XG4gICAgcGFyYW1zID0gZXh0ZW5kKHt9LCBwYXJhbXMpO1xuICAgIGlmIChlbCAmJiAhcGFyYW1zLmVsKSBwYXJhbXMuZWwgPSBlbDtcblxuICAgIGlmIChwYXJhbXMuZWwgJiYgJChwYXJhbXMuZWwpLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IHN3aXBlcnMgPSBbXTtcbiAgICAgICQocGFyYW1zLmVsKS5lYWNoKGNvbnRhaW5lckVsID0+IHtcbiAgICAgICAgY29uc3QgbmV3UGFyYW1zID0gZXh0ZW5kKHt9LCBwYXJhbXMsIHtcbiAgICAgICAgICBlbDogY29udGFpbmVyRWxcbiAgICAgICAgfSk7XG4gICAgICAgIHN3aXBlcnMucHVzaChuZXcgU3dpcGVyKG5ld1BhcmFtcykpO1xuICAgICAgfSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdHJ1Y3Rvci1yZXR1cm5cblxuICAgICAgcmV0dXJuIHN3aXBlcnM7XG4gICAgfSAvLyBTd2lwZXIgSW5zdGFuY2VcblxuXG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBzd2lwZXIuX19zd2lwZXJfXyA9IHRydWU7XG4gICAgc3dpcGVyLnN1cHBvcnQgPSBnZXRTdXBwb3J0KCk7XG4gICAgc3dpcGVyLmRldmljZSA9IGdldERldmljZSh7XG4gICAgICB1c2VyQWdlbnQ6IHBhcmFtcy51c2VyQWdlbnRcbiAgICB9KTtcbiAgICBzd2lwZXIuYnJvd3NlciA9IGdldEJyb3dzZXIoKTtcbiAgICBzd2lwZXIuZXZlbnRzTGlzdGVuZXJzID0ge307XG4gICAgc3dpcGVyLmV2ZW50c0FueUxpc3RlbmVycyA9IFtdO1xuICAgIHN3aXBlci5tb2R1bGVzID0gWy4uLnN3aXBlci5fX21vZHVsZXNfX107XG5cbiAgICBpZiAocGFyYW1zLm1vZHVsZXMgJiYgQXJyYXkuaXNBcnJheShwYXJhbXMubW9kdWxlcykpIHtcbiAgICAgIHN3aXBlci5tb2R1bGVzLnB1c2goLi4ucGFyYW1zLm1vZHVsZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbE1vZHVsZXNQYXJhbXMgPSB7fTtcbiAgICBzd2lwZXIubW9kdWxlcy5mb3JFYWNoKG1vZCA9PiB7XG4gICAgICBtb2Qoe1xuICAgICAgICBzd2lwZXIsXG4gICAgICAgIGV4dGVuZFBhcmFtczogbW9kdWxlRXh0ZW5kUGFyYW1zKHBhcmFtcywgYWxsTW9kdWxlc1BhcmFtcyksXG4gICAgICAgIG9uOiBzd2lwZXIub24uYmluZChzd2lwZXIpLFxuICAgICAgICBvbmNlOiBzd2lwZXIub25jZS5iaW5kKHN3aXBlciksXG4gICAgICAgIG9mZjogc3dpcGVyLm9mZi5iaW5kKHN3aXBlciksXG4gICAgICAgIGVtaXQ6IHN3aXBlci5lbWl0LmJpbmQoc3dpcGVyKVxuICAgICAgfSk7XG4gICAgfSk7IC8vIEV4dGVuZCBkZWZhdWx0cyB3aXRoIG1vZHVsZXMgcGFyYW1zXG5cbiAgICBjb25zdCBzd2lwZXJQYXJhbXMgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBhbGxNb2R1bGVzUGFyYW1zKTsgLy8gRXh0ZW5kIGRlZmF1bHRzIHdpdGggcGFzc2VkIHBhcmFtc1xuXG4gICAgc3dpcGVyLnBhcmFtcyA9IGV4dGVuZCh7fSwgc3dpcGVyUGFyYW1zLCBleHRlbmRlZERlZmF1bHRzLCBwYXJhbXMpO1xuICAgIHN3aXBlci5vcmlnaW5hbFBhcmFtcyA9IGV4dGVuZCh7fSwgc3dpcGVyLnBhcmFtcyk7XG4gICAgc3dpcGVyLnBhc3NlZFBhcmFtcyA9IGV4dGVuZCh7fSwgcGFyYW1zKTsgLy8gYWRkIGV2ZW50IGxpc3RlbmVyc1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMgJiYgc3dpcGVyLnBhcmFtcy5vbikge1xuICAgICAgT2JqZWN0LmtleXMoc3dpcGVyLnBhcmFtcy5vbikuZm9yRWFjaChldmVudE5hbWUgPT4ge1xuICAgICAgICBzd2lwZXIub24oZXZlbnROYW1lLCBzd2lwZXIucGFyYW1zLm9uW2V2ZW50TmFtZV0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMgJiYgc3dpcGVyLnBhcmFtcy5vbkFueSkge1xuICAgICAgc3dpcGVyLm9uQW55KHN3aXBlci5wYXJhbXMub25BbnkpO1xuICAgIH0gLy8gU2F2ZSBEb20gbGliXG5cblxuICAgIHN3aXBlci4kID0gJDsgLy8gRXh0ZW5kIFN3aXBlclxuXG4gICAgT2JqZWN0LmFzc2lnbihzd2lwZXIsIHtcbiAgICAgIGVuYWJsZWQ6IHN3aXBlci5wYXJhbXMuZW5hYmxlZCxcbiAgICAgIGVsLFxuICAgICAgLy8gQ2xhc3Nlc1xuICAgICAgY2xhc3NOYW1lczogW10sXG4gICAgICAvLyBTbGlkZXNcbiAgICAgIHNsaWRlczogJCgpLFxuICAgICAgc2xpZGVzR3JpZDogW10sXG4gICAgICBzbmFwR3JpZDogW10sXG4gICAgICBzbGlkZXNTaXplc0dyaWQ6IFtdLFxuXG4gICAgICAvLyBpc0RpcmVjdGlvblxuICAgICAgaXNIb3Jpem9udGFsKCkge1xuICAgICAgICByZXR1cm4gc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJztcbiAgICAgIH0sXG5cbiAgICAgIGlzVmVydGljYWwoKSB7XG4gICAgICAgIHJldHVybiBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJztcbiAgICAgIH0sXG5cbiAgICAgIC8vIEluZGV4ZXNcbiAgICAgIGFjdGl2ZUluZGV4OiAwLFxuICAgICAgcmVhbEluZGV4OiAwLFxuICAgICAgLy9cbiAgICAgIGlzQmVnaW5uaW5nOiB0cnVlLFxuICAgICAgaXNFbmQ6IGZhbHNlLFxuICAgICAgLy8gUHJvcHNcbiAgICAgIHRyYW5zbGF0ZTogMCxcbiAgICAgIHByZXZpb3VzVHJhbnNsYXRlOiAwLFxuICAgICAgcHJvZ3Jlc3M6IDAsXG4gICAgICB2ZWxvY2l0eTogMCxcbiAgICAgIGFuaW1hdGluZzogZmFsc2UsXG4gICAgICAvLyBMb2Nrc1xuICAgICAgYWxsb3dTbGlkZU5leHQ6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZU5leHQsXG4gICAgICBhbGxvd1NsaWRlUHJldjogc3dpcGVyLnBhcmFtcy5hbGxvd1NsaWRlUHJldixcbiAgICAgIC8vIFRvdWNoIEV2ZW50c1xuICAgICAgdG91Y2hFdmVudHM6IGZ1bmN0aW9uIHRvdWNoRXZlbnRzKCkge1xuICAgICAgICBjb25zdCB0b3VjaCA9IFsndG91Y2hzdGFydCcsICd0b3VjaG1vdmUnLCAndG91Y2hlbmQnLCAndG91Y2hjYW5jZWwnXTtcbiAgICAgICAgY29uc3QgZGVza3RvcCA9IFsncG9pbnRlcmRvd24nLCAncG9pbnRlcm1vdmUnLCAncG9pbnRlcnVwJ107XG4gICAgICAgIHN3aXBlci50b3VjaEV2ZW50c1RvdWNoID0ge1xuICAgICAgICAgIHN0YXJ0OiB0b3VjaFswXSxcbiAgICAgICAgICBtb3ZlOiB0b3VjaFsxXSxcbiAgICAgICAgICBlbmQ6IHRvdWNoWzJdLFxuICAgICAgICAgIGNhbmNlbDogdG91Y2hbM11cbiAgICAgICAgfTtcbiAgICAgICAgc3dpcGVyLnRvdWNoRXZlbnRzRGVza3RvcCA9IHtcbiAgICAgICAgICBzdGFydDogZGVza3RvcFswXSxcbiAgICAgICAgICBtb3ZlOiBkZXNrdG9wWzFdLFxuICAgICAgICAgIGVuZDogZGVza3RvcFsyXVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc3dpcGVyLnN1cHBvcnQudG91Y2ggfHwgIXN3aXBlci5wYXJhbXMuc2ltdWxhdGVUb3VjaCA/IHN3aXBlci50b3VjaEV2ZW50c1RvdWNoIDogc3dpcGVyLnRvdWNoRXZlbnRzRGVza3RvcDtcbiAgICAgIH0oKSxcbiAgICAgIHRvdWNoRXZlbnRzRGF0YToge1xuICAgICAgICBpc1RvdWNoZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNNb3ZlZDogdW5kZWZpbmVkLFxuICAgICAgICBhbGxvd1RvdWNoQ2FsbGJhY2tzOiB1bmRlZmluZWQsXG4gICAgICAgIHRvdWNoU3RhcnRUaW1lOiB1bmRlZmluZWQsXG4gICAgICAgIGlzU2Nyb2xsaW5nOiB1bmRlZmluZWQsXG4gICAgICAgIGN1cnJlbnRUcmFuc2xhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhcnRUcmFuc2xhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgYWxsb3dUaHJlc2hvbGRNb3ZlOiB1bmRlZmluZWQsXG4gICAgICAgIC8vIEZvcm0gZWxlbWVudHMgdG8gbWF0Y2hcbiAgICAgICAgZm9jdXNhYmxlRWxlbWVudHM6IHN3aXBlci5wYXJhbXMuZm9jdXNhYmxlRWxlbWVudHMsXG4gICAgICAgIC8vIExhc3QgY2xpY2sgdGltZVxuICAgICAgICBsYXN0Q2xpY2tUaW1lOiBub3coKSxcbiAgICAgICAgY2xpY2tUaW1lb3V0OiB1bmRlZmluZWQsXG4gICAgICAgIC8vIFZlbG9jaXRpZXNcbiAgICAgICAgdmVsb2NpdGllczogW10sXG4gICAgICAgIGFsbG93TW9tZW50dW1Cb3VuY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNUb3VjaEV2ZW50OiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXJ0TW92aW5nOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICAvLyBDbGlja3NcbiAgICAgIGFsbG93Q2xpY2s6IHRydWUsXG4gICAgICAvLyBUb3VjaGVzXG4gICAgICBhbGxvd1RvdWNoTW92ZTogc3dpcGVyLnBhcmFtcy5hbGxvd1RvdWNoTW92ZSxcbiAgICAgIHRvdWNoZXM6IHtcbiAgICAgICAgc3RhcnRYOiAwLFxuICAgICAgICBzdGFydFk6IDAsXG4gICAgICAgIGN1cnJlbnRYOiAwLFxuICAgICAgICBjdXJyZW50WTogMCxcbiAgICAgICAgZGlmZjogMFxuICAgICAgfSxcbiAgICAgIC8vIEltYWdlc1xuICAgICAgaW1hZ2VzVG9Mb2FkOiBbXSxcbiAgICAgIGltYWdlc0xvYWRlZDogMFxuICAgIH0pO1xuICAgIHN3aXBlci5lbWl0KCdfc3dpcGVyJyk7IC8vIEluaXRcblxuICAgIGlmIChzd2lwZXIucGFyYW1zLmluaXQpIHtcbiAgICAgIHN3aXBlci5pbml0KCk7XG4gICAgfSAvLyBSZXR1cm4gYXBwIGluc3RhbmNlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuXG5cbiAgICByZXR1cm4gc3dpcGVyO1xuICB9XG5cbiAgZW5hYmxlKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKHN3aXBlci5lbmFibGVkKSByZXR1cm47XG4gICAgc3dpcGVyLmVuYWJsZWQgPSB0cnVlO1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMuZ3JhYkN1cnNvcikge1xuICAgICAgc3dpcGVyLnNldEdyYWJDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBzd2lwZXIuZW1pdCgnZW5hYmxlJyk7XG4gIH1cblxuICBkaXNhYmxlKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKCFzd2lwZXIuZW5hYmxlZCkgcmV0dXJuO1xuICAgIHN3aXBlci5lbmFibGVkID0gZmFsc2U7XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5ncmFiQ3Vyc29yKSB7XG4gICAgICBzd2lwZXIudW5zZXRHcmFiQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ2Rpc2FibGUnKTtcbiAgfVxuXG4gIHNldFByb2dyZXNzKHByb2dyZXNzLCBzcGVlZCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgcHJvZ3Jlc3MgPSBNYXRoLm1pbihNYXRoLm1heChwcm9ncmVzcywgMCksIDEpO1xuICAgIGNvbnN0IG1pbiA9IHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgICBjb25zdCBtYXggPSBzd2lwZXIubWF4VHJhbnNsYXRlKCk7XG4gICAgY29uc3QgY3VycmVudCA9IChtYXggLSBtaW4pICogcHJvZ3Jlc3MgKyBtaW47XG4gICAgc3dpcGVyLnRyYW5zbGF0ZVRvKGN1cnJlbnQsIHR5cGVvZiBzcGVlZCA9PT0gJ3VuZGVmaW5lZCcgPyAwIDogc3BlZWQpO1xuICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gIH1cblxuICBlbWl0Q29udGFpbmVyQ2xhc3NlcygpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5fZW1pdENsYXNzZXMgfHwgIXN3aXBlci5lbCkgcmV0dXJuO1xuICAgIGNvbnN0IGNscyA9IHN3aXBlci5lbC5jbGFzc05hbWUuc3BsaXQoJyAnKS5maWx0ZXIoY2xhc3NOYW1lID0+IHtcbiAgICAgIHJldHVybiBjbGFzc05hbWUuaW5kZXhPZignc3dpcGVyJykgPT09IDAgfHwgY2xhc3NOYW1lLmluZGV4T2Yoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSA9PT0gMDtcbiAgICB9KTtcbiAgICBzd2lwZXIuZW1pdCgnX2NvbnRhaW5lckNsYXNzZXMnLCBjbHMuam9pbignICcpKTtcbiAgfVxuXG4gIGdldFNsaWRlQ2xhc3NlcyhzbGlkZUVsKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuICcnO1xuICAgIHJldHVybiBzbGlkZUVsLmNsYXNzTmFtZS5zcGxpdCgnICcpLmZpbHRlcihjbGFzc05hbWUgPT4ge1xuICAgICAgcmV0dXJuIGNsYXNzTmFtZS5pbmRleE9mKCdzd2lwZXItc2xpZGUnKSA9PT0gMCB8fCBjbGFzc05hbWUuaW5kZXhPZihzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpID09PSAwO1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGVtaXRTbGlkZXNDbGFzc2VzKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLl9lbWl0Q2xhc3NlcyB8fCAhc3dpcGVyLmVsKSByZXR1cm47XG4gICAgY29uc3QgdXBkYXRlcyA9IFtdO1xuICAgIHN3aXBlci5zbGlkZXMuZWFjaChzbGlkZUVsID0+IHtcbiAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBzd2lwZXIuZ2V0U2xpZGVDbGFzc2VzKHNsaWRlRWwpO1xuICAgICAgdXBkYXRlcy5wdXNoKHtcbiAgICAgICAgc2xpZGVFbCxcbiAgICAgICAgY2xhc3NOYW1lc1xuICAgICAgfSk7XG4gICAgICBzd2lwZXIuZW1pdCgnX3NsaWRlQ2xhc3MnLCBzbGlkZUVsLCBjbGFzc05hbWVzKTtcbiAgICB9KTtcbiAgICBzd2lwZXIuZW1pdCgnX3NsaWRlQ2xhc3NlcycsIHVwZGF0ZXMpO1xuICB9XG5cbiAgc2xpZGVzUGVyVmlld0R5bmFtaWModmlldyA9ICdjdXJyZW50JywgZXhhY3QgPSBmYWxzZSkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3Qge1xuICAgICAgcGFyYW1zLFxuICAgICAgc2xpZGVzLFxuICAgICAgc2xpZGVzR3JpZCxcbiAgICAgIHNsaWRlc1NpemVzR3JpZCxcbiAgICAgIHNpemU6IHN3aXBlclNpemUsXG4gICAgICBhY3RpdmVJbmRleFxuICAgIH0gPSBzd2lwZXI7XG4gICAgbGV0IHNwdiA9IDE7XG5cbiAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICBsZXQgc2xpZGVTaXplID0gc2xpZGVzW2FjdGl2ZUluZGV4XS5zd2lwZXJTbGlkZVNpemU7XG4gICAgICBsZXQgYnJlYWtMb29wO1xuXG4gICAgICBmb3IgKGxldCBpID0gYWN0aXZlSW5kZXggKyAxOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzbGlkZXNbaV0gJiYgIWJyZWFrTG9vcCkge1xuICAgICAgICAgIHNsaWRlU2l6ZSArPSBzbGlkZXNbaV0uc3dpcGVyU2xpZGVTaXplO1xuICAgICAgICAgIHNwdiArPSAxO1xuICAgICAgICAgIGlmIChzbGlkZVNpemUgPiBzd2lwZXJTaXplKSBicmVha0xvb3AgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSBhY3RpdmVJbmRleCAtIDE7IGkgPj0gMDsgaSAtPSAxKSB7XG4gICAgICAgIGlmIChzbGlkZXNbaV0gJiYgIWJyZWFrTG9vcCkge1xuICAgICAgICAgIHNsaWRlU2l6ZSArPSBzbGlkZXNbaV0uc3dpcGVyU2xpZGVTaXplO1xuICAgICAgICAgIHNwdiArPSAxO1xuICAgICAgICAgIGlmIChzbGlkZVNpemUgPiBzd2lwZXJTaXplKSBicmVha0xvb3AgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgaWYgKHZpZXcgPT09ICdjdXJyZW50Jykge1xuICAgICAgICBmb3IgKGxldCBpID0gYWN0aXZlSW5kZXggKyAxOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgY29uc3Qgc2xpZGVJblZpZXcgPSBleGFjdCA/IHNsaWRlc0dyaWRbaV0gKyBzbGlkZXNTaXplc0dyaWRbaV0gLSBzbGlkZXNHcmlkW2FjdGl2ZUluZGV4XSA8IHN3aXBlclNpemUgOiBzbGlkZXNHcmlkW2ldIC0gc2xpZGVzR3JpZFthY3RpdmVJbmRleF0gPCBzd2lwZXJTaXplO1xuXG4gICAgICAgICAgaWYgKHNsaWRlSW5WaWV3KSB7XG4gICAgICAgICAgICBzcHYgKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHByZXZpb3VzXG4gICAgICAgIGZvciAobGV0IGkgPSBhY3RpdmVJbmRleCAtIDE7IGkgPj0gMDsgaSAtPSAxKSB7XG4gICAgICAgICAgY29uc3Qgc2xpZGVJblZpZXcgPSBzbGlkZXNHcmlkW2FjdGl2ZUluZGV4XSAtIHNsaWRlc0dyaWRbaV0gPCBzd2lwZXJTaXplO1xuXG4gICAgICAgICAgaWYgKHNsaWRlSW5WaWV3KSB7XG4gICAgICAgICAgICBzcHYgKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3B2O1xuICB9XG5cbiAgdXBkYXRlKCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHNuYXBHcmlkLFxuICAgICAgcGFyYW1zXG4gICAgfSA9IHN3aXBlcjsgLy8gQnJlYWtwb2ludHNcblxuICAgIGlmIChwYXJhbXMuYnJlYWtwb2ludHMpIHtcbiAgICAgIHN3aXBlci5zZXRCcmVha3BvaW50KCk7XG4gICAgfVxuXG4gICAgc3dpcGVyLnVwZGF0ZVNpemUoKTtcbiAgICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG4gICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcblxuICAgIGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZVZhbHVlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgKiAtMSA6IHN3aXBlci50cmFuc2xhdGU7XG4gICAgICBjb25zdCBuZXdUcmFuc2xhdGUgPSBNYXRoLm1pbihNYXRoLm1heCh0cmFuc2xhdGVWYWx1ZSwgc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSwgc3dpcGVyLm1pblRyYW5zbGF0ZSgpKTtcbiAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUobmV3VHJhbnNsYXRlKTtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICB9XG5cbiAgICBsZXQgdHJhbnNsYXRlZDtcblxuICAgIGlmIChzd2lwZXIucGFyYW1zLmZyZWVNb2RlICYmIHN3aXBlci5wYXJhbXMuZnJlZU1vZGUuZW5hYmxlZCkge1xuICAgICAgc2V0VHJhbnNsYXRlKCk7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZUF1dG9IZWlnaHQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKChzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyB8fCBzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPiAxKSAmJiBzd2lwZXIuaXNFbmQgJiYgIXN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgdHJhbnNsYXRlZCA9IHN3aXBlci5zbGlkZVRvKHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNsYXRlZCA9IHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRyYW5zbGF0ZWQpIHtcbiAgICAgICAgc2V0VHJhbnNsYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHNuYXBHcmlkICE9PSBzd2lwZXIuc25hcEdyaWQpIHtcbiAgICAgIHN3aXBlci5jaGVja092ZXJmbG93KCk7XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ3VwZGF0ZScpO1xuICB9XG5cbiAgY2hhbmdlRGlyZWN0aW9uKG5ld0RpcmVjdGlvbiwgbmVlZFVwZGF0ZSA9IHRydWUpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IGN1cnJlbnREaXJlY3Rpb24gPSBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbjtcblxuICAgIGlmICghbmV3RGlyZWN0aW9uKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIG5ld0RpcmVjdGlvbiA9IGN1cnJlbnREaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCc7XG4gICAgfVxuXG4gICAgaWYgKG5ld0RpcmVjdGlvbiA9PT0gY3VycmVudERpcmVjdGlvbiB8fCBuZXdEaXJlY3Rpb24gIT09ICdob3Jpem9udGFsJyAmJiBuZXdEaXJlY3Rpb24gIT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgIHJldHVybiBzd2lwZXI7XG4gICAgfVxuXG4gICAgc3dpcGVyLiRlbC5yZW1vdmVDbGFzcyhgJHtzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9JHtjdXJyZW50RGlyZWN0aW9ufWApLmFkZENsYXNzKGAke3N3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzc30ke25ld0RpcmVjdGlvbn1gKTtcbiAgICBzd2lwZXIuZW1pdENvbnRhaW5lckNsYXNzZXMoKTtcbiAgICBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbiA9IG5ld0RpcmVjdGlvbjtcbiAgICBzd2lwZXIuc2xpZGVzLmVhY2goc2xpZGVFbCA9PiB7XG4gICAgICBpZiAobmV3RGlyZWN0aW9uID09PSAndmVydGljYWwnKSB7XG4gICAgICAgIHNsaWRlRWwuc3R5bGUud2lkdGggPSAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsaWRlRWwuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgICB9XG4gICAgfSk7XG4gICAgc3dpcGVyLmVtaXQoJ2NoYW5nZURpcmVjdGlvbicpO1xuICAgIGlmIChuZWVkVXBkYXRlKSBzd2lwZXIudXBkYXRlKCk7XG4gICAgcmV0dXJuIHN3aXBlcjtcbiAgfVxuXG4gIGNoYW5nZUxhbmd1YWdlRGlyZWN0aW9uKGRpcmVjdGlvbikge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKHN3aXBlci5ydGwgJiYgZGlyZWN0aW9uID09PSAncnRsJyB8fCAhc3dpcGVyLnJ0bCAmJiBkaXJlY3Rpb24gPT09ICdsdHInKSByZXR1cm47XG4gICAgc3dpcGVyLnJ0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgc3dpcGVyLnJ0bFRyYW5zbGF0ZSA9IHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgJiYgc3dpcGVyLnJ0bDtcblxuICAgIGlmIChzd2lwZXIucnRsKSB7XG4gICAgICBzd2lwZXIuJGVsLmFkZENsYXNzKGAke3N3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzc31ydGxgKTtcbiAgICAgIHN3aXBlci5lbC5kaXIgPSAncnRsJztcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLiRlbC5yZW1vdmVDbGFzcyhgJHtzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9cnRsYCk7XG4gICAgICBzd2lwZXIuZWwuZGlyID0gJ2x0cic7XG4gICAgfVxuXG4gICAgc3dpcGVyLnVwZGF0ZSgpO1xuICB9XG5cbiAgbW91bnQoZWwpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmIChzd2lwZXIubW91bnRlZCkgcmV0dXJuIHRydWU7IC8vIEZpbmQgZWxcblxuICAgIGNvbnN0ICRlbCA9ICQoZWwgfHwgc3dpcGVyLnBhcmFtcy5lbCk7XG4gICAgZWwgPSAkZWxbMF07XG5cbiAgICBpZiAoIWVsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZWwuc3dpcGVyID0gc3dpcGVyO1xuXG4gICAgY29uc3QgZ2V0V3JhcHBlclNlbGVjdG9yID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGAuJHsoc3dpcGVyLnBhcmFtcy53cmFwcGVyQ2xhc3MgfHwgJycpLnRyaW0oKS5zcGxpdCgnICcpLmpvaW4oJy4nKX1gO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRXcmFwcGVyID0gKCkgPT4ge1xuICAgICAgaWYgKGVsICYmIGVsLnNoYWRvd1Jvb3QgJiYgZWwuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9ICQoZWwuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGdldFdyYXBwZXJTZWxlY3RvcigpKSk7IC8vIENoaWxkcmVuIG5lZWRzIHRvIHJldHVybiBzbG90IGl0ZW1zXG5cbiAgICAgICAgcmVzLmNoaWxkcmVuID0gb3B0aW9ucyA9PiAkZWwuY2hpbGRyZW4ob3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cblxuICAgICAgaWYgKCEkZWwuY2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuICQoJGVsKS5jaGlsZHJlbihnZXRXcmFwcGVyU2VsZWN0b3IoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAkZWwuY2hpbGRyZW4oZ2V0V3JhcHBlclNlbGVjdG9yKCkpO1xuICAgIH07IC8vIEZpbmQgV3JhcHBlclxuXG5cbiAgICBsZXQgJHdyYXBwZXJFbCA9IGdldFdyYXBwZXIoKTtcblxuICAgIGlmICgkd3JhcHBlckVsLmxlbmd0aCA9PT0gMCAmJiBzd2lwZXIucGFyYW1zLmNyZWF0ZUVsZW1lbnRzKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAkd3JhcHBlckVsID0gJCh3cmFwcGVyKTtcbiAgICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gc3dpcGVyLnBhcmFtcy53cmFwcGVyQ2xhc3M7XG4gICAgICAkZWwuYXBwZW5kKHdyYXBwZXIpO1xuICAgICAgJGVsLmNoaWxkcmVuKGAuJHtzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3N9YCkuZWFjaChzbGlkZUVsID0+IHtcbiAgICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVFbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKHN3aXBlciwge1xuICAgICAgJGVsLFxuICAgICAgZWwsXG4gICAgICAkd3JhcHBlckVsLFxuICAgICAgd3JhcHBlckVsOiAkd3JhcHBlckVsWzBdLFxuICAgICAgbW91bnRlZDogdHJ1ZSxcbiAgICAgIC8vIFJUTFxuICAgICAgcnRsOiBlbC5kaXIudG9Mb3dlckNhc2UoKSA9PT0gJ3J0bCcgfHwgJGVsLmNzcygnZGlyZWN0aW9uJykgPT09ICdydGwnLFxuICAgICAgcnRsVHJhbnNsYXRlOiBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnICYmIChlbC5kaXIudG9Mb3dlckNhc2UoKSA9PT0gJ3J0bCcgfHwgJGVsLmNzcygnZGlyZWN0aW9uJykgPT09ICdydGwnKSxcbiAgICAgIHdyb25nUlRMOiAkd3JhcHBlckVsLmNzcygnZGlzcGxheScpID09PSAnLXdlYmtpdC1ib3gnXG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpbml0KGVsKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoc3dpcGVyLmluaXRpYWxpemVkKSByZXR1cm4gc3dpcGVyO1xuICAgIGNvbnN0IG1vdW50ZWQgPSBzd2lwZXIubW91bnQoZWwpO1xuICAgIGlmIChtb3VudGVkID09PSBmYWxzZSkgcmV0dXJuIHN3aXBlcjtcbiAgICBzd2lwZXIuZW1pdCgnYmVmb3JlSW5pdCcpOyAvLyBTZXQgYnJlYWtwb2ludFxuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMuYnJlYWtwb2ludHMpIHtcbiAgICAgIHN3aXBlci5zZXRCcmVha3BvaW50KCk7XG4gICAgfSAvLyBBZGQgQ2xhc3Nlc1xuXG5cbiAgICBzd2lwZXIuYWRkQ2xhc3NlcygpOyAvLyBDcmVhdGUgbG9vcFxuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLmxvb3BDcmVhdGUoKTtcbiAgICB9IC8vIFVwZGF0ZSBzaXplXG5cblxuICAgIHN3aXBlci51cGRhdGVTaXplKCk7IC8vIFVwZGF0ZSBzbGlkZXNcblxuICAgIHN3aXBlci51cGRhdGVTbGlkZXMoKTtcblxuICAgIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cpIHtcbiAgICAgIHN3aXBlci5jaGVja092ZXJmbG93KCk7XG4gICAgfSAvLyBTZXQgR3JhYiBDdXJzb3JcblxuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMuZ3JhYkN1cnNvciAmJiBzd2lwZXIuZW5hYmxlZCkge1xuICAgICAgc3dpcGVyLnNldEdyYWJDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5wcmVsb2FkSW1hZ2VzKSB7XG4gICAgICBzd2lwZXIucHJlbG9hZEltYWdlcygpO1xuICAgIH0gLy8gU2xpZGUgVG8gSW5pdGlhbCBTbGlkZVxuXG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIucGFyYW1zLmluaXRpYWxTbGlkZSArIHN3aXBlci5sb29wZWRTbGlkZXMsIDAsIHN3aXBlci5wYXJhbXMucnVuQ2FsbGJhY2tzT25Jbml0LCBmYWxzZSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5wYXJhbXMuaW5pdGlhbFNsaWRlLCAwLCBzd2lwZXIucGFyYW1zLnJ1bkNhbGxiYWNrc09uSW5pdCwgZmFsc2UsIHRydWUpO1xuICAgIH0gLy8gQXR0YWNoIGV2ZW50c1xuXG5cbiAgICBzd2lwZXIuYXR0YWNoRXZlbnRzKCk7IC8vIEluaXQgRmxhZ1xuXG4gICAgc3dpcGVyLmluaXRpYWxpemVkID0gdHJ1ZTsgLy8gRW1pdFxuXG4gICAgc3dpcGVyLmVtaXQoJ2luaXQnKTtcbiAgICBzd2lwZXIuZW1pdCgnYWZ0ZXJJbml0Jyk7XG4gICAgcmV0dXJuIHN3aXBlcjtcbiAgfVxuXG4gIGRlc3Ryb3koZGVsZXRlSW5zdGFuY2UgPSB0cnVlLCBjbGVhblN0eWxlcyA9IHRydWUpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IHtcbiAgICAgIHBhcmFtcyxcbiAgICAgICRlbCxcbiAgICAgICR3cmFwcGVyRWwsXG4gICAgICBzbGlkZXNcbiAgICB9ID0gc3dpcGVyO1xuXG4gICAgaWYgKHR5cGVvZiBzd2lwZXIucGFyYW1zID09PSAndW5kZWZpbmVkJyB8fCBzd2lwZXIuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzd2lwZXIuZW1pdCgnYmVmb3JlRGVzdHJveScpOyAvLyBJbml0IEZsYWdcblxuICAgIHN3aXBlci5pbml0aWFsaXplZCA9IGZhbHNlOyAvLyBEZXRhY2ggZXZlbnRzXG5cbiAgICBzd2lwZXIuZGV0YWNoRXZlbnRzKCk7IC8vIERlc3Ryb3kgbG9vcFxuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgICB9IC8vIENsZWFudXAgc3R5bGVzXG5cblxuICAgIGlmIChjbGVhblN0eWxlcykge1xuICAgICAgc3dpcGVyLnJlbW92ZUNsYXNzZXMoKTtcbiAgICAgICRlbC5yZW1vdmVBdHRyKCdzdHlsZScpO1xuICAgICAgJHdyYXBwZXJFbC5yZW1vdmVBdHRyKCdzdHlsZScpO1xuXG4gICAgICBpZiAoc2xpZGVzICYmIHNsaWRlcy5sZW5ndGgpIHtcbiAgICAgICAgc2xpZGVzLnJlbW92ZUNsYXNzKFtwYXJhbXMuc2xpZGVWaXNpYmxlQ2xhc3MsIHBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzLCBwYXJhbXMuc2xpZGVOZXh0Q2xhc3MsIHBhcmFtcy5zbGlkZVByZXZDbGFzc10uam9pbignICcpKS5yZW1vdmVBdHRyKCdzdHlsZScpLnJlbW92ZUF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ2Rlc3Ryb3knKTsgLy8gRGV0YWNoIGVtaXR0ZXIgZXZlbnRzXG5cbiAgICBPYmplY3Qua2V5cyhzd2lwZXIuZXZlbnRzTGlzdGVuZXJzKS5mb3JFYWNoKGV2ZW50TmFtZSA9PiB7XG4gICAgICBzd2lwZXIub2ZmKGV2ZW50TmFtZSk7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVsZXRlSW5zdGFuY2UgIT09IGZhbHNlKSB7XG4gICAgICBzd2lwZXIuJGVsWzBdLnN3aXBlciA9IG51bGw7XG4gICAgICBkZWxldGVQcm9wcyhzd2lwZXIpO1xuICAgIH1cblxuICAgIHN3aXBlci5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGV4dGVuZERlZmF1bHRzKG5ld0RlZmF1bHRzKSB7XG4gICAgZXh0ZW5kKGV4dGVuZGVkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZXh0ZW5kZWREZWZhdWx0cygpIHtcbiAgICByZXR1cm4gZXh0ZW5kZWREZWZhdWx0cztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdHMoKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRzO1xuICB9XG5cbiAgc3RhdGljIGluc3RhbGxNb2R1bGUobW9kKSB7XG4gICAgaWYgKCFTd2lwZXIucHJvdG90eXBlLl9fbW9kdWxlc19fKSBTd2lwZXIucHJvdG90eXBlLl9fbW9kdWxlc19fID0gW107XG4gICAgY29uc3QgbW9kdWxlcyA9IFN3aXBlci5wcm90b3R5cGUuX19tb2R1bGVzX187XG5cbiAgICBpZiAodHlwZW9mIG1vZCA9PT0gJ2Z1bmN0aW9uJyAmJiBtb2R1bGVzLmluZGV4T2YobW9kKSA8IDApIHtcbiAgICAgIG1vZHVsZXMucHVzaChtb2QpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB1c2UobW9kdWxlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobW9kdWxlKSkge1xuICAgICAgbW9kdWxlLmZvckVhY2gobSA9PiBTd2lwZXIuaW5zdGFsbE1vZHVsZShtKSk7XG4gICAgICByZXR1cm4gU3dpcGVyO1xuICAgIH1cblxuICAgIFN3aXBlci5pbnN0YWxsTW9kdWxlKG1vZHVsZSk7XG4gICAgcmV0dXJuIFN3aXBlcjtcbiAgfVxuXG59XG5cbk9iamVjdC5rZXlzKHByb3RvdHlwZXMpLmZvckVhY2gocHJvdG90eXBlR3JvdXAgPT4ge1xuICBPYmplY3Qua2V5cyhwcm90b3R5cGVzW3Byb3RvdHlwZUdyb3VwXSkuZm9yRWFjaChwcm90b01ldGhvZCA9PiB7XG4gICAgU3dpcGVyLnByb3RvdHlwZVtwcm90b01ldGhvZF0gPSBwcm90b3R5cGVzW3Byb3RvdHlwZUdyb3VwXVtwcm90b01ldGhvZF07XG4gIH0pO1xufSk7XG5Td2lwZXIudXNlKFtSZXNpemUsIE9ic2VydmVyXSk7XG5leHBvcnQgZGVmYXVsdCBTd2lwZXI7IiwiaW1wb3J0IHNldFRyYW5zaXRpb24gZnJvbSAnLi9zZXRUcmFuc2l0aW9uLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uU3RhcnQgZnJvbSAnLi90cmFuc2l0aW9uU3RhcnQuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25FbmQgZnJvbSAnLi90cmFuc2l0aW9uRW5kLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2V0VHJhbnNpdGlvbixcbiAgdHJhbnNpdGlvblN0YXJ0LFxuICB0cmFuc2l0aW9uRW5kXG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24sIGJ5Q29udHJvbGxlcikge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuXG4gIGlmICghc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgc3dpcGVyLiR3cmFwcGVyRWwudHJhbnNpdGlvbihkdXJhdGlvbik7XG4gIH1cblxuICBzd2lwZXIuZW1pdCgnc2V0VHJhbnNpdGlvbicsIGR1cmF0aW9uLCBieUNvbnRyb2xsZXIpO1xufSIsImltcG9ydCB0cmFuc2l0aW9uRW1pdCBmcm9tICcuL3RyYW5zaXRpb25FbWl0LmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zaXRpb25TdGFydChydW5DYWxsYmFja3MgPSB0cnVlLCBkaXJlY3Rpb24pIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qge1xuICAgIHBhcmFtc1xuICB9ID0gc3dpcGVyO1xuICBpZiAocGFyYW1zLmNzc01vZGUpIHJldHVybjtcblxuICBpZiAocGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICBzd2lwZXIudXBkYXRlQXV0b0hlaWdodCgpO1xuICB9XG5cbiAgdHJhbnNpdGlvbkVtaXQoe1xuICAgIHN3aXBlcixcbiAgICBydW5DYWxsYmFja3MsXG4gICAgZGlyZWN0aW9uLFxuICAgIHN0ZXA6ICdTdGFydCdcbiAgfSk7XG59IiwiaW1wb3J0IHRyYW5zaXRpb25FbWl0IGZyb20gJy4vdHJhbnNpdGlvbkVtaXQuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNpdGlvbkVuZChydW5DYWxsYmFja3MgPSB0cnVlLCBkaXJlY3Rpb24pIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qge1xuICAgIHBhcmFtc1xuICB9ID0gc3dpcGVyO1xuICBzd2lwZXIuYW5pbWF0aW5nID0gZmFsc2U7XG4gIGlmIChwYXJhbXMuY3NzTW9kZSkgcmV0dXJuO1xuICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcbiAgdHJhbnNpdGlvbkVtaXQoe1xuICAgIHN3aXBlcixcbiAgICBydW5DYWxsYmFja3MsXG4gICAgZGlyZWN0aW9uLFxuICAgIHN0ZXA6ICdFbmQnXG4gIH0pO1xufSIsImltcG9ydCBzZXRHcmFiQ3Vyc29yIGZyb20gJy4vc2V0R3JhYkN1cnNvci5qcyc7XG5pbXBvcnQgdW5zZXRHcmFiQ3Vyc29yIGZyb20gJy4vdW5zZXRHcmFiQ3Vyc29yLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2V0R3JhYkN1cnNvcixcbiAgdW5zZXRHcmFiQ3Vyc29yXG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldEdyYWJDdXJzb3IobW92aW5nKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGlmIChzd2lwZXIuc3VwcG9ydC50b3VjaCB8fCAhc3dpcGVyLnBhcmFtcy5zaW11bGF0ZVRvdWNoIHx8IHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzd2lwZXIuaXNMb2NrZWQgfHwgc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSByZXR1cm47XG4gIGNvbnN0IGVsID0gc3dpcGVyLnBhcmFtcy50b3VjaEV2ZW50c1RhcmdldCA9PT0gJ2NvbnRhaW5lcicgPyBzd2lwZXIuZWwgOiBzd2lwZXIud3JhcHBlckVsO1xuICBlbC5zdHlsZS5jdXJzb3IgPSAnbW92ZSc7XG4gIGVsLnN0eWxlLmN1cnNvciA9IG1vdmluZyA/ICdncmFiYmluZycgOiAnZ3JhYic7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5zZXRHcmFiQ3Vyc29yKCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuXG4gIGlmIChzd2lwZXIuc3VwcG9ydC50b3VjaCB8fCBzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmlzTG9ja2VkIHx8IHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN3aXBlcltzd2lwZXIucGFyYW1zLnRvdWNoRXZlbnRzVGFyZ2V0ID09PSAnY29udGFpbmVyJyA/ICdlbCcgOiAnd3JhcHBlckVsJ10uc3R5bGUuY3Vyc29yID0gJyc7XG59IiwiaW1wb3J0IGxvYWRJbWFnZSBmcm9tICcuL2xvYWRJbWFnZS5qcyc7XG5pbXBvcnQgcHJlbG9hZEltYWdlcyBmcm9tICcuL3ByZWxvYWRJbWFnZXMuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICBsb2FkSW1hZ2UsXG4gIHByZWxvYWRJbWFnZXNcbn07IiwiaW1wb3J0IHsgZ2V0V2luZG93IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICcuLi8uLi9zaGFyZWQvZG9tLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvYWRJbWFnZShpbWFnZUVsLCBzcmMsIHNyY3NldCwgc2l6ZXMsIGNoZWNrRm9yQ29tcGxldGUsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBsZXQgaW1hZ2U7XG5cbiAgZnVuY3Rpb24gb25SZWFkeSgpIHtcbiAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XG4gIH1cblxuICBjb25zdCBpc1BpY3R1cmUgPSAkKGltYWdlRWwpLnBhcmVudCgncGljdHVyZScpWzBdO1xuXG4gIGlmICghaXNQaWN0dXJlICYmICghaW1hZ2VFbC5jb21wbGV0ZSB8fCAhY2hlY2tGb3JDb21wbGV0ZSkpIHtcbiAgICBpZiAoc3JjKSB7XG4gICAgICBpbWFnZSA9IG5ldyB3aW5kb3cuSW1hZ2UoKTtcbiAgICAgIGltYWdlLm9ubG9hZCA9IG9uUmVhZHk7XG4gICAgICBpbWFnZS5vbmVycm9yID0gb25SZWFkeTtcblxuICAgICAgaWYgKHNpemVzKSB7XG4gICAgICAgIGltYWdlLnNpemVzID0gc2l6ZXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcmNzZXQpIHtcbiAgICAgICAgaW1hZ2Uuc3Jjc2V0ID0gc3Jjc2V0O1xuICAgICAgfVxuXG4gICAgICBpZiAoc3JjKSB7XG4gICAgICAgIGltYWdlLnNyYyA9IHNyYztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb25SZWFkeSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBpbWFnZSBhbHJlYWR5IGxvYWRlZC4uLlxuICAgIG9uUmVhZHkoKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHByZWxvYWRJbWFnZXMoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIHN3aXBlci5pbWFnZXNUb0xvYWQgPSBzd2lwZXIuJGVsLmZpbmQoJ2ltZycpO1xuXG4gIGZ1bmN0aW9uIG9uUmVhZHkoKSB7XG4gICAgaWYgKHR5cGVvZiBzd2lwZXIgPT09ICd1bmRlZmluZWQnIHx8IHN3aXBlciA9PT0gbnVsbCB8fCAhc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICBpZiAoc3dpcGVyLmltYWdlc0xvYWRlZCAhPT0gdW5kZWZpbmVkKSBzd2lwZXIuaW1hZ2VzTG9hZGVkICs9IDE7XG5cbiAgICBpZiAoc3dpcGVyLmltYWdlc0xvYWRlZCA9PT0gc3dpcGVyLmltYWdlc1RvTG9hZC5sZW5ndGgpIHtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnVwZGF0ZU9uSW1hZ2VzUmVhZHkpIHN3aXBlci51cGRhdGUoKTtcbiAgICAgIHN3aXBlci5lbWl0KCdpbWFnZXNSZWFkeScpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3dpcGVyLmltYWdlc1RvTG9hZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IGltYWdlRWwgPSBzd2lwZXIuaW1hZ2VzVG9Mb2FkW2ldO1xuICAgIHN3aXBlci5sb2FkSW1hZ2UoaW1hZ2VFbCwgaW1hZ2VFbC5jdXJyZW50U3JjIHx8IGltYWdlRWwuZ2V0QXR0cmlidXRlKCdzcmMnKSwgaW1hZ2VFbC5zcmNzZXQgfHwgaW1hZ2VFbC5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpLCBpbWFnZUVsLnNpemVzIHx8IGltYWdlRWwuZ2V0QXR0cmlidXRlKCdzaXplcycpLCB0cnVlLCBvblJlYWR5KTtcbiAgfVxufSIsImltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplKHtcbiAgc3dpcGVyLFxuICBvbixcbiAgZW1pdFxufSkge1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgbGV0IG9ic2VydmVyID0gbnVsbDtcbiAgbGV0IGFuaW1hdGlvbkZyYW1lID0gbnVsbDtcblxuICBjb25zdCByZXNpemVIYW5kbGVyID0gKCkgPT4ge1xuICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci5pbml0aWFsaXplZCkgcmV0dXJuO1xuICAgIGVtaXQoJ2JlZm9yZVJlc2l6ZScpO1xuICAgIGVtaXQoJ3Jlc2l6ZScpO1xuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZU9ic2VydmVyID0gKCkgPT4ge1xuICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci5pbml0aWFsaXplZCkgcmV0dXJuO1xuICAgIG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgYW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodFxuICAgICAgICB9ID0gc3dpcGVyO1xuICAgICAgICBsZXQgbmV3V2lkdGggPSB3aWR0aDtcbiAgICAgICAgbGV0IG5ld0hlaWdodCA9IGhlaWdodDtcbiAgICAgICAgZW50cmllcy5mb3JFYWNoKCh7XG4gICAgICAgICAgY29udGVudEJveFNpemUsXG4gICAgICAgICAgY29udGVudFJlY3QsXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH0pID0+IHtcbiAgICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCAhPT0gc3dpcGVyLmVsKSByZXR1cm47XG4gICAgICAgICAgbmV3V2lkdGggPSBjb250ZW50UmVjdCA/IGNvbnRlbnRSZWN0LndpZHRoIDogKGNvbnRlbnRCb3hTaXplWzBdIHx8IGNvbnRlbnRCb3hTaXplKS5pbmxpbmVTaXplO1xuICAgICAgICAgIG5ld0hlaWdodCA9IGNvbnRlbnRSZWN0ID8gY29udGVudFJlY3QuaGVpZ2h0IDogKGNvbnRlbnRCb3hTaXplWzBdIHx8IGNvbnRlbnRCb3hTaXplKS5ibG9ja1NpemU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChuZXdXaWR0aCAhPT0gd2lkdGggfHwgbmV3SGVpZ2h0ICE9PSBoZWlnaHQpIHtcbiAgICAgICAgICByZXNpemVIYW5kbGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoc3dpcGVyLmVsKTtcbiAgfTtcblxuICBjb25zdCByZW1vdmVPYnNlcnZlciA9ICgpID0+IHtcbiAgICBpZiAoYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShhbmltYXRpb25GcmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKG9ic2VydmVyICYmIG9ic2VydmVyLnVub2JzZXJ2ZSAmJiBzd2lwZXIuZWwpIHtcbiAgICAgIG9ic2VydmVyLnVub2JzZXJ2ZShzd2lwZXIuZWwpO1xuICAgICAgb2JzZXJ2ZXIgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBvcmllbnRhdGlvbkNoYW5nZUhhbmRsZXIgPSAoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhc3dpcGVyLmluaXRpYWxpemVkKSByZXR1cm47XG4gICAgZW1pdCgnb3JpZW50YXRpb25jaGFuZ2UnKTtcbiAgfTtcblxuICBvbignaW5pdCcsICgpID0+IHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5yZXNpemVPYnNlcnZlciAmJiB0eXBlb2Ygd2luZG93LlJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY3JlYXRlT2JzZXJ2ZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcmVzaXplSGFuZGxlcik7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29yaWVudGF0aW9uY2hhbmdlJywgb3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKTtcbiAgfSk7XG4gIG9uKCdkZXN0cm95JywgKCkgPT4ge1xuICAgIHJlbW92ZU9ic2VydmVyKCk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHJlc2l6ZUhhbmRsZXIpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIG9yaWVudGF0aW9uQ2hhbmdlSGFuZGxlcik7XG4gIH0pO1xufSIsImltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gT2JzZXJ2ZXIoe1xuICBzd2lwZXIsXG4gIGV4dGVuZFBhcmFtcyxcbiAgb24sXG4gIGVtaXRcbn0pIHtcbiAgY29uc3Qgb2JzZXJ2ZXJzID0gW107XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuXG4gIGNvbnN0IGF0dGFjaCA9ICh0YXJnZXQsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IE9ic2VydmVyRnVuYyA9IHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyIHx8IHdpbmRvdy5XZWJraXRNdXRhdGlvbk9ic2VydmVyO1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE9ic2VydmVyRnVuYyhtdXRhdGlvbnMgPT4ge1xuICAgICAgLy8gVGhlIG9ic2VydmVyVXBkYXRlIGV2ZW50IHNob3VsZCBvbmx5IGJlIHRyaWdnZXJlZFxuICAgICAgLy8gb25jZSBkZXNwaXRlIHRoZSBudW1iZXIgb2YgbXV0YXRpb25zLiAgQWRkaXRpb25hbFxuICAgICAgLy8gdHJpZ2dlcnMgYXJlIHJlZHVuZGFudCBhbmQgYXJlIHZlcnkgY29zdGx5XG4gICAgICBpZiAobXV0YXRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBlbWl0KCdvYnNlcnZlclVwZGF0ZScsIG11dGF0aW9uc1swXSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2JzZXJ2ZXJVcGRhdGUgPSBmdW5jdGlvbiBvYnNlcnZlclVwZGF0ZSgpIHtcbiAgICAgICAgZW1pdCgnb2JzZXJ2ZXJVcGRhdGUnLCBtdXRhdGlvbnNbMF0pO1xuICAgICAgfTtcblxuICAgICAgaWYgKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShvYnNlcnZlclVwZGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cuc2V0VGltZW91dChvYnNlcnZlclVwZGF0ZSwgMCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXQsIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHR5cGVvZiBvcHRpb25zLmF0dHJpYnV0ZXMgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IG9wdGlvbnMuYXR0cmlidXRlcyxcbiAgICAgIGNoaWxkTGlzdDogdHlwZW9mIG9wdGlvbnMuY2hpbGRMaXN0ID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBvcHRpb25zLmNoaWxkTGlzdCxcbiAgICAgIGNoYXJhY3RlckRhdGE6IHR5cGVvZiBvcHRpb25zLmNoYXJhY3RlckRhdGEgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IG9wdGlvbnMuY2hhcmFjdGVyRGF0YVxuICAgIH0pO1xuICAgIG9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgfTtcblxuICBjb25zdCBpbml0ID0gKCkgPT4ge1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5vYnNlcnZlcikgcmV0dXJuO1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMub2JzZXJ2ZVBhcmVudHMpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lclBhcmVudHMgPSBzd2lwZXIuJGVsLnBhcmVudHMoKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250YWluZXJQYXJlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGF0dGFjaChjb250YWluZXJQYXJlbnRzW2ldKTtcbiAgICAgIH1cbiAgICB9IC8vIE9ic2VydmUgY29udGFpbmVyXG5cblxuICAgIGF0dGFjaChzd2lwZXIuJGVsWzBdLCB7XG4gICAgICBjaGlsZExpc3Q6IHN3aXBlci5wYXJhbXMub2JzZXJ2ZVNsaWRlQ2hpbGRyZW5cbiAgICB9KTsgLy8gT2JzZXJ2ZSB3cmFwcGVyXG5cbiAgICBhdHRhY2goc3dpcGVyLiR3cmFwcGVyRWxbMF0sIHtcbiAgICAgIGF0dHJpYnV0ZXM6IGZhbHNlXG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgZGVzdHJveSA9ICgpID0+IHtcbiAgICBvYnNlcnZlcnMuZm9yRWFjaChvYnNlcnZlciA9PiB7XG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXJzLnNwbGljZSgwLCBvYnNlcnZlcnMubGVuZ3RoKTtcbiAgfTtcblxuICBleHRlbmRQYXJhbXMoe1xuICAgIG9ic2VydmVyOiBmYWxzZSxcbiAgICBvYnNlcnZlUGFyZW50czogZmFsc2UsXG4gICAgb2JzZXJ2ZVNsaWRlQ2hpbGRyZW46IGZhbHNlXG4gIH0pO1xuICBvbignaW5pdCcsIGluaXQpO1xuICBvbignZGVzdHJveScsIGRlc3Ryb3kpO1xufSIsImltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVFbGVtZW50SWZOb3REZWZpbmVkKHN3aXBlciwgb3JpZ2luYWxQYXJhbXMsIHBhcmFtcywgY2hlY2tQcm9wcykge1xuICBjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cbiAgaWYgKHN3aXBlci5wYXJhbXMuY3JlYXRlRWxlbWVudHMpIHtcbiAgICBPYmplY3Qua2V5cyhjaGVja1Byb3BzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIXBhcmFtc1trZXldICYmIHBhcmFtcy5hdXRvID09PSB0cnVlKSB7XG4gICAgICAgIGxldCBlbGVtZW50ID0gc3dpcGVyLiRlbC5jaGlsZHJlbihgLiR7Y2hlY2tQcm9wc1trZXldfWApWzBdO1xuXG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGNoZWNrUHJvcHNba2V5XTtcbiAgICAgICAgICBzd2lwZXIuJGVsLmFwcGVuZChlbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmFtc1trZXldID0gZWxlbWVudDtcbiAgICAgICAgb3JpZ2luYWxQYXJhbXNba2V5XSA9IGVsZW1lbnQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcGFyYW1zO1xufSIsImltcG9ydCBjcmVhdGVFbGVtZW50SWZOb3REZWZpbmVkIGZyb20gJy4uLy4uL3NoYXJlZC9jcmVhdGUtZWxlbWVudC1pZi1ub3QtZGVmaW5lZC5qcyc7XG5pbXBvcnQgJCBmcm9tICcuLi8uLi9zaGFyZWQvZG9tLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE5hdmlnYXRpb24oe1xuICBzd2lwZXIsXG4gIGV4dGVuZFBhcmFtcyxcbiAgb24sXG4gIGVtaXRcbn0pIHtcbiAgZXh0ZW5kUGFyYW1zKHtcbiAgICBuYXZpZ2F0aW9uOiB7XG4gICAgICBuZXh0RWw6IG51bGwsXG4gICAgICBwcmV2RWw6IG51bGwsXG4gICAgICBoaWRlT25DbGljazogZmFsc2UsXG4gICAgICBkaXNhYmxlZENsYXNzOiAnc3dpcGVyLWJ1dHRvbi1kaXNhYmxlZCcsXG4gICAgICBoaWRkZW5DbGFzczogJ3N3aXBlci1idXR0b24taGlkZGVuJyxcbiAgICAgIGxvY2tDbGFzczogJ3N3aXBlci1idXR0b24tbG9jaycsXG4gICAgICBuYXZpZ2F0aW9uRGlzYWJsZWRDbGFzczogJ3N3aXBlci1uYXZpZ2F0aW9uLWRpc2FibGVkJ1xuICAgIH1cbiAgfSk7XG4gIHN3aXBlci5uYXZpZ2F0aW9uID0ge1xuICAgIG5leHRFbDogbnVsbCxcbiAgICAkbmV4dEVsOiBudWxsLFxuICAgIHByZXZFbDogbnVsbCxcbiAgICAkcHJldkVsOiBudWxsXG4gIH07XG5cbiAgZnVuY3Rpb24gZ2V0RWwoZWwpIHtcbiAgICBsZXQgJGVsO1xuXG4gICAgaWYgKGVsKSB7XG4gICAgICAkZWwgPSAkKGVsKTtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudW5pcXVlTmF2RWxlbWVudHMgJiYgdHlwZW9mIGVsID09PSAnc3RyaW5nJyAmJiAkZWwubGVuZ3RoID4gMSAmJiBzd2lwZXIuJGVsLmZpbmQoZWwpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAkZWwgPSBzd2lwZXIuJGVsLmZpbmQoZWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAkZWw7XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVFbCgkZWwsIGRpc2FibGVkKSB7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uO1xuXG4gICAgaWYgKCRlbCAmJiAkZWwubGVuZ3RoID4gMCkge1xuICAgICAgJGVsW2Rpc2FibGVkID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKHBhcmFtcy5kaXNhYmxlZENsYXNzKTtcbiAgICAgIGlmICgkZWxbMF0gJiYgJGVsWzBdLnRhZ05hbWUgPT09ICdCVVRUT04nKSAkZWxbMF0uZGlzYWJsZWQgPSBkaXNhYmxlZDtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzd2lwZXIuZW5hYmxlZCkge1xuICAgICAgICAkZWxbc3dpcGVyLmlzTG9ja2VkID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKHBhcmFtcy5sb2NrQ2xhc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAvLyBVcGRhdGUgTmF2aWdhdGlvbiBCdXR0b25zXG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgICRuZXh0RWwsXG4gICAgICAkcHJldkVsXG4gICAgfSA9IHN3aXBlci5uYXZpZ2F0aW9uO1xuICAgIHRvZ2dsZUVsKCRwcmV2RWwsIHN3aXBlci5pc0JlZ2lubmluZyAmJiAhc3dpcGVyLnBhcmFtcy5yZXdpbmQpO1xuICAgIHRvZ2dsZUVsKCRuZXh0RWwsIHN3aXBlci5pc0VuZCAmJiAhc3dpcGVyLnBhcmFtcy5yZXdpbmQpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25QcmV2Q2xpY2soZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoc3dpcGVyLmlzQmVnaW5uaW5nICYmICFzd2lwZXIucGFyYW1zLmxvb3AgJiYgIXN3aXBlci5wYXJhbXMucmV3aW5kKSByZXR1cm47XG4gICAgc3dpcGVyLnNsaWRlUHJldigpO1xuICAgIGVtaXQoJ25hdmlnYXRpb25QcmV2Jyk7XG4gIH1cblxuICBmdW5jdGlvbiBvbk5leHRDbGljayhlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChzd2lwZXIuaXNFbmQgJiYgIXN3aXBlci5wYXJhbXMubG9vcCAmJiAhc3dpcGVyLnBhcmFtcy5yZXdpbmQpIHJldHVybjtcbiAgICBzd2lwZXIuc2xpZGVOZXh0KCk7XG4gICAgZW1pdCgnbmF2aWdhdGlvbk5leHQnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uO1xuICAgIHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbiA9IGNyZWF0ZUVsZW1lbnRJZk5vdERlZmluZWQoc3dpcGVyLCBzd2lwZXIub3JpZ2luYWxQYXJhbXMubmF2aWdhdGlvbiwgc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLCB7XG4gICAgICBuZXh0RWw6ICdzd2lwZXItYnV0dG9uLW5leHQnLFxuICAgICAgcHJldkVsOiAnc3dpcGVyLWJ1dHRvbi1wcmV2J1xuICAgIH0pO1xuICAgIGlmICghKHBhcmFtcy5uZXh0RWwgfHwgcGFyYW1zLnByZXZFbCkpIHJldHVybjtcbiAgICBjb25zdCAkbmV4dEVsID0gZ2V0RWwocGFyYW1zLm5leHRFbCk7XG4gICAgY29uc3QgJHByZXZFbCA9IGdldEVsKHBhcmFtcy5wcmV2RWwpO1xuXG4gICAgaWYgKCRuZXh0RWwgJiYgJG5leHRFbC5sZW5ndGggPiAwKSB7XG4gICAgICAkbmV4dEVsLm9uKCdjbGljaycsIG9uTmV4dENsaWNrKTtcbiAgICB9XG5cbiAgICBpZiAoJHByZXZFbCAmJiAkcHJldkVsLmxlbmd0aCA+IDApIHtcbiAgICAgICRwcmV2RWwub24oJ2NsaWNrJywgb25QcmV2Q2xpY2spO1xuICAgIH1cblxuICAgIE9iamVjdC5hc3NpZ24oc3dpcGVyLm5hdmlnYXRpb24sIHtcbiAgICAgICRuZXh0RWwsXG4gICAgICBuZXh0RWw6ICRuZXh0RWwgJiYgJG5leHRFbFswXSxcbiAgICAgICRwcmV2RWwsXG4gICAgICBwcmV2RWw6ICRwcmV2RWwgJiYgJHByZXZFbFswXVxuICAgIH0pO1xuXG4gICAgaWYgKCFzd2lwZXIuZW5hYmxlZCkge1xuICAgICAgaWYgKCRuZXh0RWwpICRuZXh0RWwuYWRkQ2xhc3MocGFyYW1zLmxvY2tDbGFzcyk7XG4gICAgICBpZiAoJHByZXZFbCkgJHByZXZFbC5hZGRDbGFzcyhwYXJhbXMubG9ja0NsYXNzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIGNvbnN0IHtcbiAgICAgICRuZXh0RWwsXG4gICAgICAkcHJldkVsXG4gICAgfSA9IHN3aXBlci5uYXZpZ2F0aW9uO1xuXG4gICAgaWYgKCRuZXh0RWwgJiYgJG5leHRFbC5sZW5ndGgpIHtcbiAgICAgICRuZXh0RWwub2ZmKCdjbGljaycsIG9uTmV4dENsaWNrKTtcbiAgICAgICRuZXh0RWwucmVtb3ZlQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmRpc2FibGVkQ2xhc3MpO1xuICAgIH1cblxuICAgIGlmICgkcHJldkVsICYmICRwcmV2RWwubGVuZ3RoKSB7XG4gICAgICAkcHJldkVsLm9mZignY2xpY2snLCBvblByZXZDbGljayk7XG4gICAgICAkcHJldkVsLnJlbW92ZUNsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5kaXNhYmxlZENsYXNzKTtcbiAgICB9XG4gIH1cblxuICBvbignaW5pdCcsICgpID0+IHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmVuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5pdCgpO1xuICAgICAgdXBkYXRlKCk7XG4gICAgfVxuICB9KTtcbiAgb24oJ3RvRWRnZSBmcm9tRWRnZSBsb2NrIHVubG9jaycsICgpID0+IHtcbiAgICB1cGRhdGUoKTtcbiAgfSk7XG4gIG9uKCdkZXN0cm95JywgKCkgPT4ge1xuICAgIGRlc3Ryb3koKTtcbiAgfSk7XG4gIG9uKCdlbmFibGUgZGlzYWJsZScsICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAkbmV4dEVsLFxuICAgICAgJHByZXZFbFxuICAgIH0gPSBzd2lwZXIubmF2aWdhdGlvbjtcblxuICAgIGlmICgkbmV4dEVsKSB7XG4gICAgICAkbmV4dEVsW3N3aXBlci5lbmFibGVkID8gJ3JlbW92ZUNsYXNzJyA6ICdhZGRDbGFzcyddKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5sb2NrQ2xhc3MpO1xuICAgIH1cblxuICAgIGlmICgkcHJldkVsKSB7XG4gICAgICAkcHJldkVsW3N3aXBlci5lbmFibGVkID8gJ3JlbW92ZUNsYXNzJyA6ICdhZGRDbGFzcyddKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5sb2NrQ2xhc3MpO1xuICAgIH1cbiAgfSk7XG4gIG9uKCdjbGljaycsIChfcywgZSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICRuZXh0RWwsXG4gICAgICAkcHJldkVsXG4gICAgfSA9IHN3aXBlci5uYXZpZ2F0aW9uO1xuICAgIGNvbnN0IHRhcmdldEVsID0gZS50YXJnZXQ7XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGVPbkNsaWNrICYmICEkKHRhcmdldEVsKS5pcygkcHJldkVsKSAmJiAhJCh0YXJnZXRFbCkuaXMoJG5leHRFbCkpIHtcbiAgICAgIGlmIChzd2lwZXIucGFnaW5hdGlvbiAmJiBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24gJiYgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmNsaWNrYWJsZSAmJiAoc3dpcGVyLnBhZ2luYXRpb24uZWwgPT09IHRhcmdldEVsIHx8IHN3aXBlci5wYWdpbmF0aW9uLmVsLmNvbnRhaW5zKHRhcmdldEVsKSkpIHJldHVybjtcbiAgICAgIGxldCBpc0hpZGRlbjtcblxuICAgICAgaWYgKCRuZXh0RWwpIHtcbiAgICAgICAgaXNIaWRkZW4gPSAkbmV4dEVsLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICB9IGVsc2UgaWYgKCRwcmV2RWwpIHtcbiAgICAgICAgaXNIaWRkZW4gPSAkcHJldkVsLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0hpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICBlbWl0KCduYXZpZ2F0aW9uU2hvdycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW1pdCgnbmF2aWdhdGlvbkhpZGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCRuZXh0RWwpIHtcbiAgICAgICAgJG5leHRFbC50b2dnbGVDbGFzcyhzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uaGlkZGVuQ2xhc3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoJHByZXZFbCkge1xuICAgICAgICAkcHJldkVsLnRvZ2dsZUNsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBlbmFibGUgPSAoKSA9PiB7XG4gICAgc3dpcGVyLiRlbC5yZW1vdmVDbGFzcyhzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24ubmF2aWdhdGlvbkRpc2FibGVkQ2xhc3MpO1xuICAgIGluaXQoKTtcbiAgICB1cGRhdGUoKTtcbiAgfTtcblxuICBjb25zdCBkaXNhYmxlID0gKCkgPT4ge1xuICAgIHN3aXBlci4kZWwuYWRkQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLm5hdmlnYXRpb25EaXNhYmxlZENsYXNzKTtcbiAgICBkZXN0cm95KCk7XG4gIH07XG5cbiAgT2JqZWN0LmFzc2lnbihzd2lwZXIubmF2aWdhdGlvbiwge1xuICAgIGVuYWJsZSxcbiAgICBkaXNhYmxlLFxuICAgIHVwZGF0ZSxcbiAgICBpbml0LFxuICAgIGRlc3Ryb3lcbiAgfSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xhc3Nlc1RvU2VsZWN0b3IoY2xhc3NlcyA9ICcnKSB7XG4gIHJldHVybiBgLiR7Y2xhc3Nlcy50cmltKCkucmVwbGFjZSgvKFtcXC46IVxcL10pL2csICdcXFxcJDEnKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIC5yZXBsYWNlKC8gL2csICcuJyl9YDtcbn0iLCJpbXBvcnQgJCBmcm9tICcuLi8uLi9zaGFyZWQvZG9tLmpzJztcbmltcG9ydCBjbGFzc2VzVG9TZWxlY3RvciBmcm9tICcuLi8uLi9zaGFyZWQvY2xhc3Nlcy10by1zZWxlY3Rvci5qcyc7XG5pbXBvcnQgY3JlYXRlRWxlbWVudElmTm90RGVmaW5lZCBmcm9tICcuLi8uLi9zaGFyZWQvY3JlYXRlLWVsZW1lbnQtaWYtbm90LWRlZmluZWQuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUGFnaW5hdGlvbih7XG4gIHN3aXBlcixcbiAgZXh0ZW5kUGFyYW1zLFxuICBvbixcbiAgZW1pdFxufSkge1xuICBjb25zdCBwZnggPSAnc3dpcGVyLXBhZ2luYXRpb24nO1xuICBleHRlbmRQYXJhbXMoe1xuICAgIHBhZ2luYXRpb246IHtcbiAgICAgIGVsOiBudWxsLFxuICAgICAgYnVsbGV0RWxlbWVudDogJ3NwYW4nLFxuICAgICAgY2xpY2thYmxlOiBmYWxzZSxcbiAgICAgIGhpZGVPbkNsaWNrOiBmYWxzZSxcbiAgICAgIHJlbmRlckJ1bGxldDogbnVsbCxcbiAgICAgIHJlbmRlclByb2dyZXNzYmFyOiBudWxsLFxuICAgICAgcmVuZGVyRnJhY3Rpb246IG51bGwsXG4gICAgICByZW5kZXJDdXN0b206IG51bGwsXG4gICAgICBwcm9ncmVzc2Jhck9wcG9zaXRlOiBmYWxzZSxcbiAgICAgIHR5cGU6ICdidWxsZXRzJyxcbiAgICAgIC8vICdidWxsZXRzJyBvciAncHJvZ3Jlc3NiYXInIG9yICdmcmFjdGlvbicgb3IgJ2N1c3RvbSdcbiAgICAgIGR5bmFtaWNCdWxsZXRzOiBmYWxzZSxcbiAgICAgIGR5bmFtaWNNYWluQnVsbGV0czogMSxcbiAgICAgIGZvcm1hdEZyYWN0aW9uQ3VycmVudDogbnVtYmVyID0+IG51bWJlcixcbiAgICAgIGZvcm1hdEZyYWN0aW9uVG90YWw6IG51bWJlciA9PiBudW1iZXIsXG4gICAgICBidWxsZXRDbGFzczogYCR7cGZ4fS1idWxsZXRgLFxuICAgICAgYnVsbGV0QWN0aXZlQ2xhc3M6IGAke3BmeH0tYnVsbGV0LWFjdGl2ZWAsXG4gICAgICBtb2RpZmllckNsYXNzOiBgJHtwZnh9LWAsXG4gICAgICBjdXJyZW50Q2xhc3M6IGAke3BmeH0tY3VycmVudGAsXG4gICAgICB0b3RhbENsYXNzOiBgJHtwZnh9LXRvdGFsYCxcbiAgICAgIGhpZGRlbkNsYXNzOiBgJHtwZnh9LWhpZGRlbmAsXG4gICAgICBwcm9ncmVzc2JhckZpbGxDbGFzczogYCR7cGZ4fS1wcm9ncmVzc2Jhci1maWxsYCxcbiAgICAgIHByb2dyZXNzYmFyT3Bwb3NpdGVDbGFzczogYCR7cGZ4fS1wcm9ncmVzc2Jhci1vcHBvc2l0ZWAsXG4gICAgICBjbGlja2FibGVDbGFzczogYCR7cGZ4fS1jbGlja2FibGVgLFxuICAgICAgbG9ja0NsYXNzOiBgJHtwZnh9LWxvY2tgLFxuICAgICAgaG9yaXpvbnRhbENsYXNzOiBgJHtwZnh9LWhvcml6b250YWxgLFxuICAgICAgdmVydGljYWxDbGFzczogYCR7cGZ4fS12ZXJ0aWNhbGAsXG4gICAgICBwYWdpbmF0aW9uRGlzYWJsZWRDbGFzczogYCR7cGZ4fS1kaXNhYmxlZGBcbiAgICB9XG4gIH0pO1xuICBzd2lwZXIucGFnaW5hdGlvbiA9IHtcbiAgICBlbDogbnVsbCxcbiAgICAkZWw6IG51bGwsXG4gICAgYnVsbGV0czogW11cbiAgfTtcbiAgbGV0IGJ1bGxldFNpemU7XG4gIGxldCBkeW5hbWljQnVsbGV0SW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIGlzUGFnaW5hdGlvbkRpc2FibGVkKCkge1xuICAgIHJldHVybiAhc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmVsIHx8ICFzd2lwZXIucGFnaW5hdGlvbi5lbCB8fCAhc3dpcGVyLnBhZ2luYXRpb24uJGVsIHx8IHN3aXBlci5wYWdpbmF0aW9uLiRlbC5sZW5ndGggPT09IDA7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRTaWRlQnVsbGV0cygkYnVsbGV0RWwsIHBvc2l0aW9uKSB7XG4gICAgY29uc3Qge1xuICAgICAgYnVsbGV0QWN0aXZlQ2xhc3NcbiAgICB9ID0gc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uO1xuICAgICRidWxsZXRFbFtwb3NpdGlvbl0oKS5hZGRDbGFzcyhgJHtidWxsZXRBY3RpdmVDbGFzc30tJHtwb3NpdGlvbn1gKVtwb3NpdGlvbl0oKS5hZGRDbGFzcyhgJHtidWxsZXRBY3RpdmVDbGFzc30tJHtwb3NpdGlvbn0tJHtwb3NpdGlvbn1gKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAvLyBSZW5kZXIgfHwgVXBkYXRlIFBhZ2luYXRpb24gYnVsbGV0cy9pdGVtc1xuICAgIGNvbnN0IHJ0bCA9IHN3aXBlci5ydGw7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uO1xuICAgIGlmIChpc1BhZ2luYXRpb25EaXNhYmxlZCgpKSByZXR1cm47XG4gICAgY29uc3Qgc2xpZGVzTGVuZ3RoID0gc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQgPyBzd2lwZXIudmlydHVhbC5zbGlkZXMubGVuZ3RoIDogc3dpcGVyLnNsaWRlcy5sZW5ndGg7XG4gICAgY29uc3QgJGVsID0gc3dpcGVyLnBhZ2luYXRpb24uJGVsOyAvLyBDdXJyZW50L1RvdGFsXG5cbiAgICBsZXQgY3VycmVudDtcbiAgICBjb25zdCB0b3RhbCA9IHN3aXBlci5wYXJhbXMubG9vcCA/IE1hdGguY2VpbCgoc2xpZGVzTGVuZ3RoIC0gc3dpcGVyLmxvb3BlZFNsaWRlcyAqIDIpIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCkgOiBzd2lwZXIuc25hcEdyaWQubGVuZ3RoO1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgY3VycmVudCA9IE1hdGguY2VpbCgoc3dpcGVyLmFjdGl2ZUluZGV4IC0gc3dpcGVyLmxvb3BlZFNsaWRlcykgLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcblxuICAgICAgaWYgKGN1cnJlbnQgPiBzbGlkZXNMZW5ndGggLSAxIC0gc3dpcGVyLmxvb3BlZFNsaWRlcyAqIDIpIHtcbiAgICAgICAgY3VycmVudCAtPSBzbGlkZXNMZW5ndGggLSBzd2lwZXIubG9vcGVkU2xpZGVzICogMjtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnQgPiB0b3RhbCAtIDEpIGN1cnJlbnQgLT0gdG90YWw7XG4gICAgICBpZiAoY3VycmVudCA8IDAgJiYgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uVHlwZSAhPT0gJ2J1bGxldHMnKSBjdXJyZW50ID0gdG90YWwgKyBjdXJyZW50O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHN3aXBlci5zbmFwSW5kZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjdXJyZW50ID0gc3dpcGVyLnNuYXBJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudCA9IHN3aXBlci5hY3RpdmVJbmRleCB8fCAwO1xuICAgIH0gLy8gVHlwZXNcblxuXG4gICAgaWYgKHBhcmFtcy50eXBlID09PSAnYnVsbGV0cycgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cyAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGJ1bGxldHMgPSBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzO1xuICAgICAgbGV0IGZpcnN0SW5kZXg7XG4gICAgICBsZXQgbGFzdEluZGV4O1xuICAgICAgbGV0IG1pZEluZGV4O1xuXG4gICAgICBpZiAocGFyYW1zLmR5bmFtaWNCdWxsZXRzKSB7XG4gICAgICAgIGJ1bGxldFNpemUgPSBidWxsZXRzLmVxKDApW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdvdXRlcldpZHRoJyA6ICdvdXRlckhlaWdodCddKHRydWUpO1xuICAgICAgICAkZWwuY3NzKHN3aXBlci5pc0hvcml6b250YWwoKSA/ICd3aWR0aCcgOiAnaGVpZ2h0JywgYCR7YnVsbGV0U2l6ZSAqIChwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzICsgNCl9cHhgKTtcblxuICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyA+IDEgJiYgc3dpcGVyLnByZXZpb3VzSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGR5bmFtaWNCdWxsZXRJbmRleCArPSBjdXJyZW50IC0gKHN3aXBlci5wcmV2aW91c0luZGV4IC0gc3dpcGVyLmxvb3BlZFNsaWRlcyB8fCAwKTtcblxuICAgICAgICAgIGlmIChkeW5hbWljQnVsbGV0SW5kZXggPiBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzIC0gMSkge1xuICAgICAgICAgICAgZHluYW1pY0J1bGxldEluZGV4ID0gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChkeW5hbWljQnVsbGV0SW5kZXggPCAwKSB7XG4gICAgICAgICAgICBkeW5hbWljQnVsbGV0SW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZpcnN0SW5kZXggPSBNYXRoLm1heChjdXJyZW50IC0gZHluYW1pY0J1bGxldEluZGV4LCAwKTtcbiAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJbmRleCArIChNYXRoLm1pbihidWxsZXRzLmxlbmd0aCwgcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cykgLSAxKTtcbiAgICAgICAgbWlkSW5kZXggPSAobGFzdEluZGV4ICsgZmlyc3RJbmRleCkgLyAyO1xuICAgICAgfVxuXG4gICAgICBidWxsZXRzLnJlbW92ZUNsYXNzKFsnJywgJy1uZXh0JywgJy1uZXh0LW5leHQnLCAnLXByZXYnLCAnLXByZXYtcHJldicsICctbWFpbiddLm1hcChzdWZmaXggPT4gYCR7cGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzfSR7c3VmZml4fWApLmpvaW4oJyAnKSk7XG5cbiAgICAgIGlmICgkZWwubGVuZ3RoID4gMSkge1xuICAgICAgICBidWxsZXRzLmVhY2goYnVsbGV0ID0+IHtcbiAgICAgICAgICBjb25zdCAkYnVsbGV0ID0gJChidWxsZXQpO1xuICAgICAgICAgIGNvbnN0IGJ1bGxldEluZGV4ID0gJGJ1bGxldC5pbmRleCgpO1xuXG4gICAgICAgICAgaWYgKGJ1bGxldEluZGV4ID09PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAkYnVsbGV0LmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICAgICAgaWYgKGJ1bGxldEluZGV4ID49IGZpcnN0SW5kZXggJiYgYnVsbGV0SW5kZXggPD0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICRidWxsZXQuYWRkQ2xhc3MoYCR7cGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzfS1tYWluYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChidWxsZXRJbmRleCA9PT0gZmlyc3RJbmRleCkge1xuICAgICAgICAgICAgICBzZXRTaWRlQnVsbGV0cygkYnVsbGV0LCAncHJldicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYnVsbGV0SW5kZXggPT09IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgICBzZXRTaWRlQnVsbGV0cygkYnVsbGV0LCAnbmV4dCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCAkYnVsbGV0ID0gYnVsbGV0cy5lcShjdXJyZW50KTtcbiAgICAgICAgY29uc3QgYnVsbGV0SW5kZXggPSAkYnVsbGV0LmluZGV4KCk7XG4gICAgICAgICRidWxsZXQuYWRkQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKTtcblxuICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNCdWxsZXRzKSB7XG4gICAgICAgICAgY29uc3QgJGZpcnN0RGlzcGxheWVkQnVsbGV0ID0gYnVsbGV0cy5lcShmaXJzdEluZGV4KTtcbiAgICAgICAgICBjb25zdCAkbGFzdERpc3BsYXllZEJ1bGxldCA9IGJ1bGxldHMuZXEobGFzdEluZGV4KTtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSBmaXJzdEluZGV4OyBpIDw9IGxhc3RJbmRleDsgaSArPSAxKSB7XG4gICAgICAgICAgICBidWxsZXRzLmVxKGkpLmFkZENsYXNzKGAke3BhcmFtcy5idWxsZXRBY3RpdmVDbGFzc30tbWFpbmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgICAgIGlmIChidWxsZXRJbmRleCA+PSBidWxsZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0czsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICAgICAgICAgICAgICBidWxsZXRzLmVxKGJ1bGxldHMubGVuZ3RoIC0gaSkuYWRkQ2xhc3MoYCR7cGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzfS1tYWluYCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBidWxsZXRzLmVxKGJ1bGxldHMubGVuZ3RoIC0gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyAtIDEpLmFkZENsYXNzKGAke3BhcmFtcy5idWxsZXRBY3RpdmVDbGFzc30tcHJldmApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2V0U2lkZUJ1bGxldHMoJGZpcnN0RGlzcGxheWVkQnVsbGV0LCAncHJldicpO1xuICAgICAgICAgICAgICBzZXRTaWRlQnVsbGV0cygkbGFzdERpc3BsYXllZEJ1bGxldCwgJ25leHQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0U2lkZUJ1bGxldHMoJGZpcnN0RGlzcGxheWVkQnVsbGV0LCAncHJldicpO1xuICAgICAgICAgICAgc2V0U2lkZUJ1bGxldHMoJGxhc3REaXNwbGF5ZWRCdWxsZXQsICduZXh0Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMuZHluYW1pY0J1bGxldHMpIHtcbiAgICAgICAgY29uc3QgZHluYW1pY0J1bGxldHNMZW5ndGggPSBNYXRoLm1pbihidWxsZXRzLmxlbmd0aCwgcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyArIDQpO1xuICAgICAgICBjb25zdCBidWxsZXRzT2Zmc2V0ID0gKGJ1bGxldFNpemUgKiBkeW5hbWljQnVsbGV0c0xlbmd0aCAtIGJ1bGxldFNpemUpIC8gMiAtIG1pZEluZGV4ICogYnVsbGV0U2l6ZTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0UHJvcCA9IHJ0bCA/ICdyaWdodCcgOiAnbGVmdCc7XG4gICAgICAgIGJ1bGxldHMuY3NzKHN3aXBlci5pc0hvcml6b250YWwoKSA/IG9mZnNldFByb3AgOiAndG9wJywgYCR7YnVsbGV0c09mZnNldH1weGApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2ZyYWN0aW9uJykge1xuICAgICAgJGVsLmZpbmQoY2xhc3Nlc1RvU2VsZWN0b3IocGFyYW1zLmN1cnJlbnRDbGFzcykpLnRleHQocGFyYW1zLmZvcm1hdEZyYWN0aW9uQ3VycmVudChjdXJyZW50ICsgMSkpO1xuICAgICAgJGVsLmZpbmQoY2xhc3Nlc1RvU2VsZWN0b3IocGFyYW1zLnRvdGFsQ2xhc3MpKS50ZXh0KHBhcmFtcy5mb3JtYXRGcmFjdGlvblRvdGFsKHRvdGFsKSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy50eXBlID09PSAncHJvZ3Jlc3NiYXInKSB7XG4gICAgICBsZXQgcHJvZ3Jlc3NiYXJEaXJlY3Rpb247XG5cbiAgICAgIGlmIChwYXJhbXMucHJvZ3Jlc3NiYXJPcHBvc2l0ZSkge1xuICAgICAgICBwcm9ncmVzc2JhckRpcmVjdGlvbiA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9ncmVzc2JhckRpcmVjdGlvbiA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/ICdob3Jpem9udGFsJyA6ICd2ZXJ0aWNhbCc7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNjYWxlID0gKGN1cnJlbnQgKyAxKSAvIHRvdGFsO1xuICAgICAgbGV0IHNjYWxlWCA9IDE7XG4gICAgICBsZXQgc2NhbGVZID0gMTtcblxuICAgICAgaWYgKHByb2dyZXNzYmFyRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgc2NhbGVYID0gc2NhbGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2FsZVkgPSBzY2FsZTtcbiAgICAgIH1cblxuICAgICAgJGVsLmZpbmQoY2xhc3Nlc1RvU2VsZWN0b3IocGFyYW1zLnByb2dyZXNzYmFyRmlsbENsYXNzKSkudHJhbnNmb3JtKGB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGVYKCR7c2NhbGVYfSkgc2NhbGVZKCR7c2NhbGVZfSlgKS50cmFuc2l0aW9uKHN3aXBlci5wYXJhbXMuc3BlZWQpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2N1c3RvbScgJiYgcGFyYW1zLnJlbmRlckN1c3RvbSkge1xuICAgICAgJGVsLmh0bWwocGFyYW1zLnJlbmRlckN1c3RvbShzd2lwZXIsIGN1cnJlbnQgKyAxLCB0b3RhbCkpO1xuICAgICAgZW1pdCgncGFnaW5hdGlvblJlbmRlcicsICRlbFswXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXQoJ3BhZ2luYXRpb25VcGRhdGUnLCAkZWxbMF0pO1xuICAgIH1cblxuICAgIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmVuYWJsZWQpIHtcbiAgICAgICRlbFtzd2lwZXIuaXNMb2NrZWQgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10ocGFyYW1zLmxvY2tDbGFzcyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIC8vIFJlbmRlciBDb250YWluZXJcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgaWYgKGlzUGFnaW5hdGlvbkRpc2FibGVkKCkpIHJldHVybjtcbiAgICBjb25zdCBzbGlkZXNMZW5ndGggPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggOiBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcbiAgICBjb25zdCAkZWwgPSBzd2lwZXIucGFnaW5hdGlvbi4kZWw7XG4gICAgbGV0IHBhZ2luYXRpb25IVE1MID0gJyc7XG5cbiAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdidWxsZXRzJykge1xuICAgICAgbGV0IG51bWJlck9mQnVsbGV0cyA9IHN3aXBlci5wYXJhbXMubG9vcCA/IE1hdGguY2VpbCgoc2xpZGVzTGVuZ3RoIC0gc3dpcGVyLmxvb3BlZFNsaWRlcyAqIDIpIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCkgOiBzd2lwZXIuc25hcEdyaWQubGVuZ3RoO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5mcmVlTW9kZSAmJiBzd2lwZXIucGFyYW1zLmZyZWVNb2RlLmVuYWJsZWQgJiYgIXN3aXBlci5wYXJhbXMubG9vcCAmJiBudW1iZXJPZkJ1bGxldHMgPiBzbGlkZXNMZW5ndGgpIHtcbiAgICAgICAgbnVtYmVyT2ZCdWxsZXRzID0gc2xpZGVzTGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mQnVsbGV0czsgaSArPSAxKSB7XG4gICAgICAgIGlmIChwYXJhbXMucmVuZGVyQnVsbGV0KSB7XG4gICAgICAgICAgcGFnaW5hdGlvbkhUTUwgKz0gcGFyYW1zLnJlbmRlckJ1bGxldC5jYWxsKHN3aXBlciwgaSwgcGFyYW1zLmJ1bGxldENsYXNzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYWdpbmF0aW9uSFRNTCArPSBgPCR7cGFyYW1zLmJ1bGxldEVsZW1lbnR9IGNsYXNzPVwiJHtwYXJhbXMuYnVsbGV0Q2xhc3N9XCI+PC8ke3BhcmFtcy5idWxsZXRFbGVtZW50fT5gO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICRlbC5odG1sKHBhZ2luYXRpb25IVE1MKTtcbiAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMgPSAkZWwuZmluZChjbGFzc2VzVG9TZWxlY3RvcihwYXJhbXMuYnVsbGV0Q2xhc3MpKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdmcmFjdGlvbicpIHtcbiAgICAgIGlmIChwYXJhbXMucmVuZGVyRnJhY3Rpb24pIHtcbiAgICAgICAgcGFnaW5hdGlvbkhUTUwgPSBwYXJhbXMucmVuZGVyRnJhY3Rpb24uY2FsbChzd2lwZXIsIHBhcmFtcy5jdXJyZW50Q2xhc3MsIHBhcmFtcy50b3RhbENsYXNzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhZ2luYXRpb25IVE1MID0gYDxzcGFuIGNsYXNzPVwiJHtwYXJhbXMuY3VycmVudENsYXNzfVwiPjwvc3Bhbj5gICsgJyAvICcgKyBgPHNwYW4gY2xhc3M9XCIke3BhcmFtcy50b3RhbENsYXNzfVwiPjwvc3Bhbj5gO1xuICAgICAgfVxuXG4gICAgICAkZWwuaHRtbChwYWdpbmF0aW9uSFRNTCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy50eXBlID09PSAncHJvZ3Jlc3NiYXInKSB7XG4gICAgICBpZiAocGFyYW1zLnJlbmRlclByb2dyZXNzYmFyKSB7XG4gICAgICAgIHBhZ2luYXRpb25IVE1MID0gcGFyYW1zLnJlbmRlclByb2dyZXNzYmFyLmNhbGwoc3dpcGVyLCBwYXJhbXMucHJvZ3Jlc3NiYXJGaWxsQ2xhc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFnaW5hdGlvbkhUTUwgPSBgPHNwYW4gY2xhc3M9XCIke3BhcmFtcy5wcm9ncmVzc2JhckZpbGxDbGFzc31cIj48L3NwYW4+YDtcbiAgICAgIH1cblxuICAgICAgJGVsLmh0bWwocGFnaW5hdGlvbkhUTUwpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMudHlwZSAhPT0gJ2N1c3RvbScpIHtcbiAgICAgIGVtaXQoJ3BhZ2luYXRpb25SZW5kZXInLCBzd2lwZXIucGFnaW5hdGlvbi4kZWxbMF0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uID0gY3JlYXRlRWxlbWVudElmTm90RGVmaW5lZChzd2lwZXIsIHN3aXBlci5vcmlnaW5hbFBhcmFtcy5wYWdpbmF0aW9uLCBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24sIHtcbiAgICAgIGVsOiAnc3dpcGVyLXBhZ2luYXRpb24nXG4gICAgfSk7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uO1xuICAgIGlmICghcGFyYW1zLmVsKSByZXR1cm47XG4gICAgbGV0ICRlbCA9ICQocGFyYW1zLmVsKTtcbiAgICBpZiAoJGVsLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMudW5pcXVlTmF2RWxlbWVudHMgJiYgdHlwZW9mIHBhcmFtcy5lbCA9PT0gJ3N0cmluZycgJiYgJGVsLmxlbmd0aCA+IDEpIHtcbiAgICAgICRlbCA9IHN3aXBlci4kZWwuZmluZChwYXJhbXMuZWwpOyAvLyBjaGVjayBpZiBpdCBiZWxvbmdzIHRvIGFub3RoZXIgbmVzdGVkIFN3aXBlclxuXG4gICAgICBpZiAoJGVsLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgJGVsID0gJGVsLmZpbHRlcihlbCA9PiB7XG4gICAgICAgICAgaWYgKCQoZWwpLnBhcmVudHMoJy5zd2lwZXInKVswXSAhPT0gc3dpcGVyLmVsKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2J1bGxldHMnICYmIHBhcmFtcy5jbGlja2FibGUpIHtcbiAgICAgICRlbC5hZGRDbGFzcyhwYXJhbXMuY2xpY2thYmxlQ2xhc3MpO1xuICAgIH1cblxuICAgICRlbC5hZGRDbGFzcyhwYXJhbXMubW9kaWZpZXJDbGFzcyArIHBhcmFtcy50eXBlKTtcbiAgICAkZWwuYWRkQ2xhc3Moc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gcGFyYW1zLmhvcml6b250YWxDbGFzcyA6IHBhcmFtcy52ZXJ0aWNhbENsYXNzKTtcblxuICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2J1bGxldHMnICYmIHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgJGVsLmFkZENsYXNzKGAke3BhcmFtcy5tb2RpZmllckNsYXNzfSR7cGFyYW1zLnR5cGV9LWR5bmFtaWNgKTtcbiAgICAgIGR5bmFtaWNCdWxsZXRJbmRleCA9IDA7XG5cbiAgICAgIGlmIChwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzIDwgMSkge1xuICAgICAgICBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzID0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdwcm9ncmVzc2JhcicgJiYgcGFyYW1zLnByb2dyZXNzYmFyT3Bwb3NpdGUpIHtcbiAgICAgICRlbC5hZGRDbGFzcyhwYXJhbXMucHJvZ3Jlc3NiYXJPcHBvc2l0ZUNsYXNzKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmNsaWNrYWJsZSkge1xuICAgICAgJGVsLm9uKCdjbGljaycsIGNsYXNzZXNUb1NlbGVjdG9yKHBhcmFtcy5idWxsZXRDbGFzcyksIGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCBpbmRleCA9ICQodGhpcykuaW5kZXgoKSAqIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIGluZGV4ICs9IHN3aXBlci5sb29wZWRTbGlkZXM7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKGluZGV4KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9iamVjdC5hc3NpZ24oc3dpcGVyLnBhZ2luYXRpb24sIHtcbiAgICAgICRlbCxcbiAgICAgIGVsOiAkZWxbMF1cbiAgICB9KTtcblxuICAgIGlmICghc3dpcGVyLmVuYWJsZWQpIHtcbiAgICAgICRlbC5hZGRDbGFzcyhwYXJhbXMubG9ja0NsYXNzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbjtcbiAgICBpZiAoaXNQYWdpbmF0aW9uRGlzYWJsZWQoKSkgcmV0dXJuO1xuICAgIGNvbnN0ICRlbCA9IHN3aXBlci5wYWdpbmF0aW9uLiRlbDtcbiAgICAkZWwucmVtb3ZlQ2xhc3MocGFyYW1zLmhpZGRlbkNsYXNzKTtcbiAgICAkZWwucmVtb3ZlQ2xhc3MocGFyYW1zLm1vZGlmaWVyQ2xhc3MgKyBwYXJhbXMudHlwZSk7XG4gICAgJGVsLnJlbW92ZUNsYXNzKHN3aXBlci5pc0hvcml6b250YWwoKSA/IHBhcmFtcy5ob3Jpem9udGFsQ2xhc3MgOiBwYXJhbXMudmVydGljYWxDbGFzcyk7XG4gICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5yZW1vdmVDbGFzcykgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5yZW1vdmVDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpO1xuXG4gICAgaWYgKHBhcmFtcy5jbGlja2FibGUpIHtcbiAgICAgICRlbC5vZmYoJ2NsaWNrJywgY2xhc3Nlc1RvU2VsZWN0b3IocGFyYW1zLmJ1bGxldENsYXNzKSk7XG4gICAgfVxuICB9XG5cbiAgb24oJ2luaXQnLCAoKSA9PiB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5lbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBkaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluaXQoKTtcbiAgICAgIHJlbmRlcigpO1xuICAgICAgdXBkYXRlKCk7XG4gICAgfVxuICB9KTtcbiAgb24oJ2FjdGl2ZUluZGV4Q2hhbmdlJywgKCkgPT4ge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHN3aXBlci5zbmFwSW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gIH0pO1xuICBvbignc25hcEluZGV4Q2hhbmdlJywgKCkgPT4ge1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gIH0pO1xuICBvbignc2xpZGVzTGVuZ3RoQ2hhbmdlJywgKCkgPT4ge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgIHJlbmRlcigpO1xuICAgICAgdXBkYXRlKCk7XG4gICAgfVxuICB9KTtcbiAgb24oJ3NuYXBHcmlkTGVuZ3RoQ2hhbmdlJywgKCkgPT4ge1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICByZW5kZXIoKTtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH1cbiAgfSk7XG4gIG9uKCdkZXN0cm95JywgKCkgPT4ge1xuICAgIGRlc3Ryb3koKTtcbiAgfSk7XG4gIG9uKCdlbmFibGUgZGlzYWJsZScsICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAkZWxcbiAgICB9ID0gc3dpcGVyLnBhZ2luYXRpb247XG5cbiAgICBpZiAoJGVsKSB7XG4gICAgICAkZWxbc3dpcGVyLmVuYWJsZWQgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmxvY2tDbGFzcyk7XG4gICAgfVxuICB9KTtcbiAgb24oJ2xvY2sgdW5sb2NrJywgKCkgPT4ge1xuICAgIHVwZGF0ZSgpO1xuICB9KTtcbiAgb24oJ2NsaWNrJywgKF9zLCBlKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0RWwgPSBlLnRhcmdldDtcbiAgICBjb25zdCB7XG4gICAgICAkZWxcbiAgICB9ID0gc3dpcGVyLnBhZ2luYXRpb247XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmVsICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5oaWRlT25DbGljayAmJiAkZWwgJiYgJGVsLmxlbmd0aCA+IDAgJiYgISQodGFyZ2V0RWwpLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5idWxsZXRDbGFzcykpIHtcbiAgICAgIGlmIChzd2lwZXIubmF2aWdhdGlvbiAmJiAoc3dpcGVyLm5hdmlnYXRpb24ubmV4dEVsICYmIHRhcmdldEVsID09PSBzd2lwZXIubmF2aWdhdGlvbi5uZXh0RWwgfHwgc3dpcGVyLm5hdmlnYXRpb24ucHJldkVsICYmIHRhcmdldEVsID09PSBzd2lwZXIubmF2aWdhdGlvbi5wcmV2RWwpKSByZXR1cm47XG4gICAgICBjb25zdCBpc0hpZGRlbiA9ICRlbC5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uaGlkZGVuQ2xhc3MpO1xuXG4gICAgICBpZiAoaXNIaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgZW1pdCgncGFnaW5hdGlvblNob3cnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVtaXQoJ3BhZ2luYXRpb25IaWRlJyk7XG4gICAgICB9XG5cbiAgICAgICRlbC50b2dnbGVDbGFzcyhzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uaGlkZGVuQ2xhc3MpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgZW5hYmxlID0gKCkgPT4ge1xuICAgIHN3aXBlci4kZWwucmVtb3ZlQ2xhc3Moc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLnBhZ2luYXRpb25EaXNhYmxlZENsYXNzKTtcblxuICAgIGlmIChzd2lwZXIucGFnaW5hdGlvbi4kZWwpIHtcbiAgICAgIHN3aXBlci5wYWdpbmF0aW9uLiRlbC5yZW1vdmVDbGFzcyhzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24ucGFnaW5hdGlvbkRpc2FibGVkQ2xhc3MpO1xuICAgIH1cblxuICAgIGluaXQoKTtcbiAgICByZW5kZXIoKTtcbiAgICB1cGRhdGUoKTtcbiAgfTtcblxuICBjb25zdCBkaXNhYmxlID0gKCkgPT4ge1xuICAgIHN3aXBlci4kZWwuYWRkQ2xhc3Moc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLnBhZ2luYXRpb25EaXNhYmxlZENsYXNzKTtcblxuICAgIGlmIChzd2lwZXIucGFnaW5hdGlvbi4kZWwpIHtcbiAgICAgIHN3aXBlci5wYWdpbmF0aW9uLiRlbC5hZGRDbGFzcyhzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24ucGFnaW5hdGlvbkRpc2FibGVkQ2xhc3MpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTtcbiAgfTtcblxuICBPYmplY3QuYXNzaWduKHN3aXBlci5wYWdpbmF0aW9uLCB7XG4gICAgZW5hYmxlLFxuICAgIGRpc2FibGUsXG4gICAgcmVuZGVyLFxuICAgIHVwZGF0ZSxcbiAgICBpbml0LFxuICAgIGRlc3Ryb3lcbiAgfSk7XG59IiwiaW1wb3J0IGNsYXNzZXNUb1NlbGVjdG9yIGZyb20gJy4uLy4uL3NoYXJlZC9jbGFzc2VzLXRvLXNlbGVjdG9yLmpzJztcbmltcG9ydCAkIGZyb20gJy4uLy4uL3NoYXJlZC9kb20uanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQTExeSh7XG4gIHN3aXBlcixcbiAgZXh0ZW5kUGFyYW1zLFxuICBvblxufSkge1xuICBleHRlbmRQYXJhbXMoe1xuICAgIGExMXk6IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBub3RpZmljYXRpb25DbGFzczogJ3N3aXBlci1ub3RpZmljYXRpb24nLFxuICAgICAgcHJldlNsaWRlTWVzc2FnZTogJ1ByZXZpb3VzIHNsaWRlJyxcbiAgICAgIG5leHRTbGlkZU1lc3NhZ2U6ICdOZXh0IHNsaWRlJyxcbiAgICAgIGZpcnN0U2xpZGVNZXNzYWdlOiAnVGhpcyBpcyB0aGUgZmlyc3Qgc2xpZGUnLFxuICAgICAgbGFzdFNsaWRlTWVzc2FnZTogJ1RoaXMgaXMgdGhlIGxhc3Qgc2xpZGUnLFxuICAgICAgcGFnaW5hdGlvbkJ1bGxldE1lc3NhZ2U6ICdHbyB0byBzbGlkZSB7e2luZGV4fX0nLFxuICAgICAgc2xpZGVMYWJlbE1lc3NhZ2U6ICd7e2luZGV4fX0gLyB7e3NsaWRlc0xlbmd0aH19JyxcbiAgICAgIGNvbnRhaW5lck1lc3NhZ2U6IG51bGwsXG4gICAgICBjb250YWluZXJSb2xlRGVzY3JpcHRpb25NZXNzYWdlOiBudWxsLFxuICAgICAgaXRlbVJvbGVEZXNjcmlwdGlvbk1lc3NhZ2U6IG51bGwsXG4gICAgICBzbGlkZVJvbGU6ICdncm91cCcsXG4gICAgICBpZDogbnVsbFxuICAgIH1cbiAgfSk7XG4gIHN3aXBlci5hMTF5ID0ge1xuICAgIGNsaWNrZWQ6IGZhbHNlXG4gIH07XG4gIGxldCBsaXZlUmVnaW9uID0gbnVsbDtcblxuICBmdW5jdGlvbiBub3RpZnkobWVzc2FnZSkge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IGxpdmVSZWdpb247XG4gICAgaWYgKG5vdGlmaWNhdGlvbi5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBub3RpZmljYXRpb24uaHRtbCgnJyk7XG4gICAgbm90aWZpY2F0aW9uLmh0bWwobWVzc2FnZSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRSYW5kb21OdW1iZXIoc2l6ZSA9IDE2KSB7XG4gICAgY29uc3QgcmFuZG9tQ2hhciA9ICgpID0+IE1hdGgucm91bmQoMTYgKiBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygxNik7XG5cbiAgICByZXR1cm4gJ3gnLnJlcGVhdChzaXplKS5yZXBsYWNlKC94L2csIHJhbmRvbUNoYXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFrZUVsRm9jdXNhYmxlKCRlbCkge1xuICAgICRlbC5hdHRyKCd0YWJJbmRleCcsICcwJyk7XG4gIH1cblxuICBmdW5jdGlvbiBtYWtlRWxOb3RGb2N1c2FibGUoJGVsKSB7XG4gICAgJGVsLmF0dHIoJ3RhYkluZGV4JywgJy0xJyk7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRFbFJvbGUoJGVsLCByb2xlKSB7XG4gICAgJGVsLmF0dHIoJ3JvbGUnLCByb2xlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEVsUm9sZURlc2NyaXB0aW9uKCRlbCwgZGVzY3JpcHRpb24pIHtcbiAgICAkZWwuYXR0cignYXJpYS1yb2xlZGVzY3JpcHRpb24nLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRFbENvbnRyb2xzKCRlbCwgY29udHJvbHMpIHtcbiAgICAkZWwuYXR0cignYXJpYS1jb250cm9scycsIGNvbnRyb2xzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEVsTGFiZWwoJGVsLCBsYWJlbCkge1xuICAgICRlbC5hdHRyKCdhcmlhLWxhYmVsJywgbGFiZWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkRWxJZCgkZWwsIGlkKSB7XG4gICAgJGVsLmF0dHIoJ2lkJywgaWQpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkRWxMaXZlKCRlbCwgbGl2ZSkge1xuICAgICRlbC5hdHRyKCdhcmlhLWxpdmUnLCBsaXZlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc2FibGVFbCgkZWwpIHtcbiAgICAkZWwuYXR0cignYXJpYS1kaXNhYmxlZCcsIHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZW5hYmxlRWwoJGVsKSB7XG4gICAgJGVsLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCBmYWxzZSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkVudGVyT3JTcGFjZUtleShlKSB7XG4gICAgaWYgKGUua2V5Q29kZSAhPT0gMTMgJiYgZS5rZXlDb2RlICE9PSAzMikgcmV0dXJuO1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuYTExeTtcbiAgICBjb25zdCAkdGFyZ2V0RWwgPSAkKGUudGFyZ2V0KTtcblxuICAgIGlmIChzd2lwZXIubmF2aWdhdGlvbiAmJiBzd2lwZXIubmF2aWdhdGlvbi4kbmV4dEVsICYmICR0YXJnZXRFbC5pcyhzd2lwZXIubmF2aWdhdGlvbi4kbmV4dEVsKSkge1xuICAgICAgaWYgKCEoc3dpcGVyLmlzRW5kICYmICFzd2lwZXIucGFyYW1zLmxvb3ApKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZU5leHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN3aXBlci5pc0VuZCkge1xuICAgICAgICBub3RpZnkocGFyYW1zLmxhc3RTbGlkZU1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm90aWZ5KHBhcmFtcy5uZXh0U2xpZGVNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbCAmJiAkdGFyZ2V0RWwuaXMoc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbCkpIHtcbiAgICAgIGlmICghKHN3aXBlci5pc0JlZ2lubmluZyAmJiAhc3dpcGVyLnBhcmFtcy5sb29wKSkge1xuICAgICAgICBzd2lwZXIuc2xpZGVQcmV2KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIuaXNCZWdpbm5pbmcpIHtcbiAgICAgICAgbm90aWZ5KHBhcmFtcy5maXJzdFNsaWRlTWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3RpZnkocGFyYW1zLnByZXZTbGlkZU1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzd2lwZXIucGFnaW5hdGlvbiAmJiAkdGFyZ2V0RWwuaXMoY2xhc3Nlc1RvU2VsZWN0b3Ioc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldENsYXNzKSkpIHtcbiAgICAgICR0YXJnZXRFbFswXS5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZU5hdmlnYXRpb24oKSB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCB8fCBzd2lwZXIucGFyYW1zLnJld2luZCB8fCAhc3dpcGVyLm5hdmlnYXRpb24pIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICAkbmV4dEVsLFxuICAgICAgJHByZXZFbFxuICAgIH0gPSBzd2lwZXIubmF2aWdhdGlvbjtcblxuICAgIGlmICgkcHJldkVsICYmICRwcmV2RWwubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgICBkaXNhYmxlRWwoJHByZXZFbCk7XG4gICAgICAgIG1ha2VFbE5vdEZvY3VzYWJsZSgkcHJldkVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVuYWJsZUVsKCRwcmV2RWwpO1xuICAgICAgICBtYWtlRWxGb2N1c2FibGUoJHByZXZFbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRuZXh0RWwgJiYgJG5leHRFbC5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoc3dpcGVyLmlzRW5kKSB7XG4gICAgICAgIGRpc2FibGVFbCgkbmV4dEVsKTtcbiAgICAgICAgbWFrZUVsTm90Rm9jdXNhYmxlKCRuZXh0RWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5hYmxlRWwoJG5leHRFbCk7XG4gICAgICAgIG1ha2VFbEZvY3VzYWJsZSgkbmV4dEVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYXNQYWdpbmF0aW9uKCkge1xuICAgIHJldHVybiBzd2lwZXIucGFnaW5hdGlvbiAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMubGVuZ3RoO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFzQ2xpY2thYmxlUGFnaW5hdGlvbigpIHtcbiAgICByZXR1cm4gaGFzUGFnaW5hdGlvbigpICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5jbGlja2FibGU7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVQYWdpbmF0aW9uKCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuYTExeTtcbiAgICBpZiAoIWhhc1BhZ2luYXRpb24oKSkgcmV0dXJuO1xuICAgIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMuZWFjaChidWxsZXRFbCA9PiB7XG4gICAgICBjb25zdCAkYnVsbGV0RWwgPSAkKGJ1bGxldEVsKTtcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5jbGlja2FibGUpIHtcbiAgICAgICAgbWFrZUVsRm9jdXNhYmxlKCRidWxsZXRFbCk7XG5cbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24ucmVuZGVyQnVsbGV0KSB7XG4gICAgICAgICAgYWRkRWxSb2xlKCRidWxsZXRFbCwgJ2J1dHRvbicpO1xuICAgICAgICAgIGFkZEVsTGFiZWwoJGJ1bGxldEVsLCBwYXJhbXMucGFnaW5hdGlvbkJ1bGxldE1lc3NhZ2UucmVwbGFjZSgvXFx7XFx7aW5kZXhcXH1cXH0vLCAkYnVsbGV0RWwuaW5kZXgoKSArIDEpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoJGJ1bGxldEVsLmlzKGAuJHtzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uYnVsbGV0QWN0aXZlQ2xhc3N9YCkpIHtcbiAgICAgICAgJGJ1bGxldEVsLmF0dHIoJ2FyaWEtY3VycmVudCcsICd0cnVlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkYnVsbGV0RWwucmVtb3ZlQXR0cignYXJpYS1jdXJyZW50Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBpbml0TmF2RWwgPSAoJGVsLCB3cmFwcGVySWQsIG1lc3NhZ2UpID0+IHtcbiAgICBtYWtlRWxGb2N1c2FibGUoJGVsKTtcblxuICAgIGlmICgkZWxbMF0udGFnTmFtZSAhPT0gJ0JVVFRPTicpIHtcbiAgICAgIGFkZEVsUm9sZSgkZWwsICdidXR0b24nKTtcbiAgICAgICRlbC5vbigna2V5ZG93bicsIG9uRW50ZXJPclNwYWNlS2V5KTtcbiAgICB9XG5cbiAgICBhZGRFbExhYmVsKCRlbCwgbWVzc2FnZSk7XG4gICAgYWRkRWxDb250cm9scygkZWwsIHdyYXBwZXJJZCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUG9pbnRlckRvd24gPSAoKSA9PiB7XG4gICAgc3dpcGVyLmExMXkuY2xpY2tlZCA9IHRydWU7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUG9pbnRlclVwID0gKCkgPT4ge1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBpZiAoIXN3aXBlci5kZXN0cm95ZWQpIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5jbGlja2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gZSA9PiB7XG4gICAgaWYgKHN3aXBlci5hMTF5LmNsaWNrZWQpIHJldHVybjtcbiAgICBjb25zdCBzbGlkZUVsID0gZS50YXJnZXQuY2xvc2VzdChgLiR7c3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzfWApO1xuICAgIGlmICghc2xpZGVFbCB8fCAhc3dpcGVyLnNsaWRlcy5pbmNsdWRlcyhzbGlkZUVsKSkgcmV0dXJuO1xuICAgIGNvbnN0IGlzQWN0aXZlID0gc3dpcGVyLnNsaWRlcy5pbmRleE9mKHNsaWRlRWwpID09PSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgY29uc3QgaXNWaXNpYmxlID0gc3dpcGVyLnBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzICYmIHN3aXBlci52aXNpYmxlU2xpZGVzICYmIHN3aXBlci52aXNpYmxlU2xpZGVzLmluY2x1ZGVzKHNsaWRlRWwpO1xuICAgIGlmIChpc0FjdGl2ZSB8fCBpc1Zpc2libGUpIHJldHVybjtcbiAgICBpZiAoZS5zb3VyY2VDYXBhYmlsaXRpZXMgJiYgZS5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50cykgcmV0dXJuO1xuXG4gICAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgc3dpcGVyLmVsLnNjcm9sbExlZnQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuZWwuc2Nyb2xsVG9wID0gMDtcbiAgICB9XG5cbiAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmluZGV4T2Yoc2xpZGVFbCksIDApO1xuICB9O1xuXG4gIGNvbnN0IGluaXRTbGlkZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5hMTF5O1xuXG4gICAgaWYgKHBhcmFtcy5pdGVtUm9sZURlc2NyaXB0aW9uTWVzc2FnZSkge1xuICAgICAgYWRkRWxSb2xlRGVzY3JpcHRpb24oJChzd2lwZXIuc2xpZGVzKSwgcGFyYW1zLml0ZW1Sb2xlRGVzY3JpcHRpb25NZXNzYWdlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnNsaWRlUm9sZSkge1xuICAgICAgYWRkRWxSb2xlKCQoc3dpcGVyLnNsaWRlcyksIHBhcmFtcy5zbGlkZVJvbGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHNsaWRlc0xlbmd0aCA9IHN3aXBlci5wYXJhbXMubG9vcCA/IHN3aXBlci5zbGlkZXMuZmlsdGVyKGVsID0+ICFlbC5jbGFzc0xpc3QuY29udGFpbnMoc3dpcGVyLnBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkubGVuZ3RoIDogc3dpcGVyLnNsaWRlcy5sZW5ndGg7XG5cbiAgICBpZiAocGFyYW1zLnNsaWRlTGFiZWxNZXNzYWdlKSB7XG4gICAgICBzd2lwZXIuc2xpZGVzLmVhY2goKHNsaWRlRWwsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0ICRzbGlkZUVsID0gJChzbGlkZUVsKTtcbiAgICAgICAgY29uc3Qgc2xpZGVJbmRleCA9IHN3aXBlci5wYXJhbXMubG9vcCA/IHBhcnNlSW50KCRzbGlkZUVsLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JyksIDEwKSA6IGluZGV4O1xuICAgICAgICBjb25zdCBhcmlhTGFiZWxNZXNzYWdlID0gcGFyYW1zLnNsaWRlTGFiZWxNZXNzYWdlLnJlcGxhY2UoL1xce1xce2luZGV4XFx9XFx9Lywgc2xpZGVJbmRleCArIDEpLnJlcGxhY2UoL1xce1xce3NsaWRlc0xlbmd0aFxcfVxcfS8sIHNsaWRlc0xlbmd0aCk7XG4gICAgICAgIGFkZEVsTGFiZWwoJHNsaWRlRWwsIGFyaWFMYWJlbE1lc3NhZ2UpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGluaXQgPSAoKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5hMTF5O1xuICAgIHN3aXBlci4kZWwuYXBwZW5kKGxpdmVSZWdpb24pOyAvLyBDb250YWluZXJcblxuICAgIGNvbnN0ICRjb250YWluZXJFbCA9IHN3aXBlci4kZWw7XG5cbiAgICBpZiAocGFyYW1zLmNvbnRhaW5lclJvbGVEZXNjcmlwdGlvbk1lc3NhZ2UpIHtcbiAgICAgIGFkZEVsUm9sZURlc2NyaXB0aW9uKCRjb250YWluZXJFbCwgcGFyYW1zLmNvbnRhaW5lclJvbGVEZXNjcmlwdGlvbk1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuY29udGFpbmVyTWVzc2FnZSkge1xuICAgICAgYWRkRWxMYWJlbCgkY29udGFpbmVyRWwsIHBhcmFtcy5jb250YWluZXJNZXNzYWdlKTtcbiAgICB9IC8vIFdyYXBwZXJcblxuXG4gICAgY29uc3QgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgIGNvbnN0IHdyYXBwZXJJZCA9IHBhcmFtcy5pZCB8fCAkd3JhcHBlckVsLmF0dHIoJ2lkJykgfHwgYHN3aXBlci13cmFwcGVyLSR7Z2V0UmFuZG9tTnVtYmVyKDE2KX1gO1xuICAgIGNvbnN0IGxpdmUgPSBzd2lwZXIucGFyYW1zLmF1dG9wbGF5ICYmIHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZW5hYmxlZCA/ICdvZmYnIDogJ3BvbGl0ZSc7XG4gICAgYWRkRWxJZCgkd3JhcHBlckVsLCB3cmFwcGVySWQpO1xuICAgIGFkZEVsTGl2ZSgkd3JhcHBlckVsLCBsaXZlKTsgLy8gU2xpZGVcblxuICAgIGluaXRTbGlkZXMoKTsgLy8gTmF2aWdhdGlvblxuXG4gICAgbGV0ICRuZXh0RWw7XG4gICAgbGV0ICRwcmV2RWw7XG5cbiAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgc3dpcGVyLm5hdmlnYXRpb24uJG5leHRFbCkge1xuICAgICAgJG5leHRFbCA9IHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWw7XG4gICAgfVxuXG4gICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWwpIHtcbiAgICAgICRwcmV2RWwgPSBzd2lwZXIubmF2aWdhdGlvbi4kcHJldkVsO1xuICAgIH1cblxuICAgIGlmICgkbmV4dEVsICYmICRuZXh0RWwubGVuZ3RoKSB7XG4gICAgICBpbml0TmF2RWwoJG5leHRFbCwgd3JhcHBlcklkLCBwYXJhbXMubmV4dFNsaWRlTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgaWYgKCRwcmV2RWwgJiYgJHByZXZFbC5sZW5ndGgpIHtcbiAgICAgIGluaXROYXZFbCgkcHJldkVsLCB3cmFwcGVySWQsIHBhcmFtcy5wcmV2U2xpZGVNZXNzYWdlKTtcbiAgICB9IC8vIFBhZ2luYXRpb25cblxuXG4gICAgaWYgKGhhc0NsaWNrYWJsZVBhZ2luYXRpb24oKSkge1xuICAgICAgc3dpcGVyLnBhZ2luYXRpb24uJGVsLm9uKCdrZXlkb3duJywgY2xhc3Nlc1RvU2VsZWN0b3Ioc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldENsYXNzKSwgb25FbnRlck9yU3BhY2VLZXkpO1xuICAgIH0gLy8gVGFiIGZvY3VzXG5cblxuICAgIHN3aXBlci4kZWwub24oJ2ZvY3VzJywgaGFuZGxlRm9jdXMsIHRydWUpO1xuICAgIHN3aXBlci4kZWwub24oJ3BvaW50ZXJkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICAgIHN3aXBlci4kZWwub24oJ3BvaW50ZXJ1cCcsIGhhbmRsZVBvaW50ZXJVcCwgdHJ1ZSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICBpZiAobGl2ZVJlZ2lvbiAmJiBsaXZlUmVnaW9uLmxlbmd0aCA+IDApIGxpdmVSZWdpb24ucmVtb3ZlKCk7XG4gICAgbGV0ICRuZXh0RWw7XG4gICAgbGV0ICRwcmV2RWw7XG5cbiAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgc3dpcGVyLm5hdmlnYXRpb24uJG5leHRFbCkge1xuICAgICAgJG5leHRFbCA9IHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWw7XG4gICAgfVxuXG4gICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWwpIHtcbiAgICAgICRwcmV2RWwgPSBzd2lwZXIubmF2aWdhdGlvbi4kcHJldkVsO1xuICAgIH1cblxuICAgIGlmICgkbmV4dEVsKSB7XG4gICAgICAkbmV4dEVsLm9mZigna2V5ZG93bicsIG9uRW50ZXJPclNwYWNlS2V5KTtcbiAgICB9XG5cbiAgICBpZiAoJHByZXZFbCkge1xuICAgICAgJHByZXZFbC5vZmYoJ2tleWRvd24nLCBvbkVudGVyT3JTcGFjZUtleSk7XG4gICAgfSAvLyBQYWdpbmF0aW9uXG5cblxuICAgIGlmIChoYXNDbGlja2FibGVQYWdpbmF0aW9uKCkpIHtcbiAgICAgIHN3aXBlci5wYWdpbmF0aW9uLiRlbC5vZmYoJ2tleWRvd24nLCBjbGFzc2VzVG9TZWxlY3Rvcihzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uYnVsbGV0Q2xhc3MpLCBvbkVudGVyT3JTcGFjZUtleSk7XG4gICAgfSAvLyBUYWIgZm9jdXNcblxuXG4gICAgc3dpcGVyLiRlbC5vZmYoJ2ZvY3VzJywgaGFuZGxlRm9jdXMsIHRydWUpO1xuICAgIHN3aXBlci4kZWwub2ZmKCdwb2ludGVyZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgICBzd2lwZXIuJGVsLm9mZigncG9pbnRlcnVwJywgaGFuZGxlUG9pbnRlclVwLCB0cnVlKTtcbiAgfVxuXG4gIG9uKCdiZWZvcmVJbml0JywgKCkgPT4ge1xuICAgIGxpdmVSZWdpb24gPSAkKGA8c3BhbiBjbGFzcz1cIiR7c3dpcGVyLnBhcmFtcy5hMTF5Lm5vdGlmaWNhdGlvbkNsYXNzfVwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiPjwvc3Bhbj5gKTtcbiAgfSk7XG4gIG9uKCdhZnRlckluaXQnLCAoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLmExMXkuZW5hYmxlZCkgcmV0dXJuO1xuICAgIGluaXQoKTtcbiAgfSk7XG4gIG9uKCdzbGlkZXNMZW5ndGhDaGFuZ2Ugc25hcEdyaWRMZW5ndGhDaGFuZ2Ugc2xpZGVzR3JpZExlbmd0aENoYW5nZScsICgpID0+IHtcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMuYTExeS5lbmFibGVkKSByZXR1cm47XG4gICAgaW5pdFNsaWRlcygpO1xuICB9KTtcbiAgb24oJ2Zyb21FZGdlIHRvRWRnZSBhZnRlckluaXQgbG9jayB1bmxvY2snLCAoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLmExMXkuZW5hYmxlZCkgcmV0dXJuO1xuICAgIHVwZGF0ZU5hdmlnYXRpb24oKTtcbiAgfSk7XG4gIG9uKCdwYWdpbmF0aW9uVXBkYXRlJywgKCkgPT4ge1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHJldHVybjtcbiAgICB1cGRhdGVQYWdpbmF0aW9uKCk7XG4gIH0pO1xuICBvbignZGVzdHJveScsICgpID0+IHtcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMuYTExeS5lbmFibGVkKSByZXR1cm47XG4gICAgZGVzdHJveSgpO1xuICB9KTtcbn0iXSwibmFtZXMiOlsiZ2xvYmFsIiwiZmFjdG9yeSIsIndpbmRvdyIsInRoaXMiLCJFdkVtaXR0ZXIiLCJwcm90byIsInByb3RvdHlwZSIsIm9uIiwiZXZlbnROYW1lIiwibGlzdGVuZXIiLCJldmVudHMiLCJfZXZlbnRzIiwibGlzdGVuZXJzIiwiaW5jbHVkZXMiLCJwdXNoIiwib25jZSIsIm9uY2VFdmVudHMiLCJfb25jZUV2ZW50cyIsIm9mZiIsImxlbmd0aCIsImluZGV4IiwiaW5kZXhPZiIsInNwbGljZSIsImVtaXRFdmVudCIsImFyZ3MiLCJzbGljZSIsIm9uY2VMaXN0ZW5lcnMiLCJhcHBseSIsImFsbE9mZiIsIm1vZHVsZSIsImV4cG9ydHMiLCJnc2FwIiwiX3RvQXJyYXkiLCJfd2luIiwiX2lzRWRnZSIsIl9jb3JlSW5pdHRlZCIsIl93YXJuZWQiLCJfZ2V0U3R5bGVTYXZlciIsIl9yZXZlcnRpbmciLCJfd2luZG93RXhpc3RzIiwiX2dldEdTQVAiLCJyZWdpc3RlclBsdWdpbiIsIl9udW1FeHAiLCJfdHlwZXMiLCJyZWN0IiwiY2lyY2xlIiwiZWxsaXBzZSIsImxpbmUiLCJfcm91bmQiLCJ2YWx1ZSIsIk1hdGgiLCJyb3VuZCIsIl9wYXJzZU51bSIsInBhcnNlRmxvYXQiLCJfcGFyc2VTaW5nbGVWYWwiLCJudW0iLCJfZ2V0QXR0cmlidXRlQXNOdW1iZXIiLCJ0YXJnZXQiLCJhdHRyIiwiZ2V0QXR0cmlidXRlIiwiX3NxcnQiLCJzcXJ0IiwiX2dldERpc3RhbmNlIiwieDEiLCJ5MSIsIngyIiwieTIiLCJzY2FsZVgiLCJzY2FsZVkiLCJwb3ciLCJfd2FybiIsIm1lc3NhZ2UiLCJjb25zb2xlIiwid2FybiIsIl9oYXNOb25TY2FsaW5nU3Ryb2tlIiwiX2dldExlbmd0aCIsImJib3giLCJwb2ludHMiLCJwcmV2UG9pbnQiLCJpIiwicngiLCJyeSIsInR5cGUiLCJ0YWdOYW1lIiwidG9Mb3dlckNhc2UiLCJzdHlsZSIsImdldFNjcmVlbkNUTSIsImEiLCJiIiwiZCIsImMiLCJnZXRCQm94IiwiZSIsIl9yZWYiLCJ4IiwieSIsIndpZHRoIiwiaGVpZ2h0IiwiYWJzIiwic3Ryb2tlRGFzaGFycmF5IiwiZ2V0VG90YWxMZW5ndGgiLCJtYXRjaCIsIlBJIiwiX2dldFBvc2l0aW9uIiwiY3MiLCJnZXRDb21wdXRlZFN0eWxlIiwiZGFzaCIsIm9mZnNldCIsInN0cm9rZURhc2hvZmZzZXQiLCJzdWJzdHIiLCJfaW5pdENvcmUiLCJkb2N1bWVudCIsInV0aWxzIiwidG9BcnJheSIsImNvcmUiLCJnZXRTdHlsZVNhdmVyIiwicmV2ZXJ0aW5nIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiRHJhd1NWR1BsdWdpbiIsInZlcnNpb24iLCJuYW1lIiwicmVnaXN0ZXIiLCJpbml0IiwidHdlZW4iLCJ0YXJnZXRzIiwic3RhcnQiLCJlbmQiLCJzdHlsZXMiLCJfc3R5bGUiLCJfdGFyZ2V0IiwiZGVmYXVsdFN0YXJ0IiwicyIsInVuZGVmaW5lZCIsIl9wYXJzZSIsIl9sZW5ndGgiLCJfZGFzaCIsIl9vZmZzZXQiLCJfZGFzaFBUIiwiYWRkIiwiX29mZnNldFBUIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlTWl0ZXJsaW1pdCIsIl9saXZlIiwiX25vd3JhcCIsIl9wcm9wcyIsInJlbmRlciIsInJhdGlvIiwiZGF0YSIsIl90aW1lIiwibGVuZ3RoUmF0aW8iLCJwdCIsIl9wdCIsInIiLCJfbmV4dCIsInJldmVydCIsImdldExlbmd0aCIsImdldFBvc2l0aW9uIiwiX3N2Z1BhdGhFeHAiLCJfbnVtYmVyc0V4cCIsIl9zY2llbnRpZmljIiwiX3NlbGVjdG9yRXhwIiwiX0RFRzJSQUQiLCJfUkFEMkRFRyIsIl9zaW4iLCJzaW4iLCJfY29zIiwiY29zIiwiX2FicyIsIl9hdGFuMiIsImF0YW4yIiwiX2xhcmdlTnVtIiwiX2lzU3RyaW5nIiwiX2lzTnVtYmVyIiwiX3RlbXAiLCJfdGVtcDIiLCJfcm91bmRpbmdOdW0iLCJfd3JhcFByb2dyZXNzIiwicHJvZ3Jlc3MiLCJfcm91bmRQcmVjaXNlIiwiX3NwbGl0U2VnbWVudCIsInJhd1BhdGgiLCJzZWdJbmRleCIsInQiLCJzZWdtZW50Iiwic2hpZnQiLCJzdWJkaXZpZGVTZWdtZW50IiwiX2dldFNhbXBsZUluZGV4Iiwic2FtcGxlcyIsImwiLCJfY29weU1ldGFEYXRhIiwic291cmNlIiwiY29weSIsInRvdGFsTGVuZ3RoIiwibG9va3VwIiwibWluTGVuZ3RoIiwicmVzb2x1dGlvbiIsInRvdGFsUG9pbnRzIiwiX2FwcGVuZE9yTWVyZ2UiLCJwcmV2U2VnIiwiY29uY2F0IiwiZ2V0UmF3UGF0aCIsInRlc3QiLCJxdWVyeVNlbGVjdG9yIiwiX2dzUGF0aCIsIl9kaXJ0eSIsInN0cmluZ1RvUmF3UGF0aCIsInJldmVyc2VTZWdtZW50IiwicmV2ZXJzZSIsInJldmVyc2VkIiwiX3R5cGVBdHRycyIsImVsZW1lbnQiLCJzd2FwIiwicGF0aCIsInJjaXJjIiwicnljaXJjIiwidyIsImgiLCJ4MyIsIng0IiwieDUiLCJ4NiIsInkzIiwieTQiLCJ5NSIsInk2IiwiY2lyYyIsImlnbm9yZSIsImNyZWF0ZUVsZW1lbnROUyIsImNhbGwiLCJhdHRyaWJ1dGVzIiwibm9kZU5hbWUiLCJzZXRBdHRyaWJ1dGVOUyIsIm5vZGVWYWx1ZSIsIl9jcmVhdGVQYXRoIiwiYXR0cnMiLCJwcm9wcyIsInNwbGl0Iiwib2JqIiwiX2F0dHJUb09iaiIsImpvaW4iLCJjeCIsImN5Iiwic2V0QXR0cmlidXRlIiwicmF3UGF0aFRvU3RyaW5nIiwiX2dzUmF3UGF0aCIsInBhcmVudE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJyZW1vdmVDaGlsZCIsImdldFJvdGF0aW9uQXRCZXppZXJUIiwic2xpY2VSYXdQYXRoIiwibG9vcHMiLCJtYXgiLCJjb3B5UmF3UGF0aCIsInNraXBPdXRlciIsIl9yZXZlcnNlUmF3UGF0aCIsIm1pbiIsImNhY2hlUmF3UGF0aE1lYXN1cmVtZW50cyIsIndyYXBzQmVoaW5kIiwic1NoaWZ0IiwiZVNoaWZ0IiwidG90YWxTZWdtZW50cyIsImoiLCJ3cmFwIiwiZ2V0UHJvZ3Jlc3NEYXRhIiwiZVNlZyIsInNTZWciLCJlU2VnSW5kZXgiLCJzU2VnSW5kZXgiLCJlaSIsInNpIiwic2FtZVNlZ21lbnQiLCJzYW1lQmV6aWVyIiwiYW5nbGUiLCJtZWFzdXJlU2VnbWVudCIsInN0YXJ0SW5kZXgiLCJiZXppZXJRdHkiLCJ4ZCIsInhkMSIsInlkIiwieWQxIiwiaW52IiwibGVuZ3RoSW5kZXgiLCJzZWdMZW5ndGgiLCJpbmMiLCJlbmRJbmRleCIsInNhbXBsZXNJbmRleCIsInByZXZMZW5ndGgiLCJwYXRoTGVuZ3RoIiwiYXgiLCJheSIsImNwMXgiLCJjcDF5IiwiY3AyeCIsImNwMnkiLCJ4MWEiLCJ5MWEiLCJ4MmEiLCJ5MmEiLCJkZWNvcmF0ZWUiLCJwdXNoVG9OZXh0SWZBdEVuZCIsImdldFBvc2l0aW9uT25QYXRoIiwiaW5jbHVkZUFuZ2xlIiwicG9pbnQiLCJyZXN1bHQiLCJ0cmFuc2Zvcm1SYXdQYXRoIiwidHgiLCJ0eSIsImFyY1RvU2VnbWVudCIsImxhc3RYIiwibGFzdFkiLCJsYXJnZUFyY0ZsYWciLCJzd2VlcEZsYWciLCJhbmdsZVJhZCIsImNvc0FuZ2xlIiwic2luQW5nbGUiLCJUV09QSSIsImR4MiIsImR5MiIsIngxX3NxIiwieTFfc3EiLCJyYWRpaUNoZWNrIiwicnhfc3EiLCJyeV9zcSIsInNxIiwiY29lZiIsImN4MSIsImN5MSIsInV4IiwidXkiLCJ2eCIsInZ5IiwidGVtcCIsImFuZ2xlU3RhcnQiLCJhY29zIiwiYW5nbGVFeHRlbnQiLCJpc05hTiIsInNlZ21lbnRzIiwiY2VpbCIsImFuZ2xlSW5jcmVtZW50IiwiY29udHJvbExlbmd0aCIsIm1hIiwibWIiLCJtYyIsIm1kIiwiY29tbWFuZCIsImlzUmVsYXRpdmUiLCJzdGFydFgiLCJzdGFydFkiLCJkaWZYIiwiZGlmWSIsImJlemllcnMiLCJwcmV2Q29tbWFuZCIsImZsYWcxIiwiZmxhZzIiLCJyZXBsYWNlIiwibSIsIm4iLCJyZWxhdGl2ZVgiLCJyZWxhdGl2ZVkiLCJ0d29UaGlyZHMiLCJlbGVtZW50cyIsImVycm9yTWVzc2FnZSIsInN4Iiwic3kiLCJleCIsImV5IiwibG9nIiwidG9VcHBlckNhc2UiLCJjbG9zZWQiLCJjaGFyQXQiLCJwb3AiLCJmbGF0UG9pbnRzVG9TZWdtZW50IiwiY3VydmluZXNzIiwicG9pbnRzVG9TZWdtZW50IiwicHJldlgiLCJwcmV2WSIsImR4MSIsImR5MSIsInIxIiwicjIiLCJ0bCIsIm14MSIsIm14MiIsIm14bSIsIm15MSIsIm15MiIsIm15bSIsIm5leHRYIiwibmV4dFkiLCJ1bnNoaWZ0Iiwic2wiLCJfZG9jIiwiX2RvY0VsZW1lbnQiLCJfYm9keSIsIl9kaXZDb250YWluZXIiLCJfc3ZnQ29udGFpbmVyIiwiX2lkZW50aXR5TWF0cml4IiwiX2dFbCIsIl9oYXNPZmZzZXRCdWciLCJfdHJhbnNmb3JtUHJvcCIsIl90cmFuc2Zvcm1PcmlnaW5Qcm9wIiwiX3NldERvYyIsImRvYyIsIm93bmVyRG9jdW1lbnQiLCJNYXRyaXgyRCIsImRvY3VtZW50RWxlbWVudCIsImJvZHkiLCJ0cmFuc2Zvcm0iLCJkMSIsImNyZWF0ZUVsZW1lbnQiLCJkMiIsImFwcGVuZENoaWxkIiwicG9zaXRpb24iLCJvZmZzZXRQYXJlbnQiLCJfc3ZnVGVtcHMiLCJfZGl2VGVtcHMiLCJfc3ZnT3duZXIiLCJvd25lclNWR0VsZW1lbnQiLCJfaXNGaXhlZCIsIm5vZGVUeXBlIiwiX2NyZWF0ZVNpYmxpbmciLCJzdmciLCJucyIsImNzcyIsImNzc1RleHQiLCJfcGxhY2VTaWJsaW5ncyIsImFkanVzdEdPZmZzZXQiLCJjb250YWluZXIiLCJpc1Jvb3RTVkciLCJzaWJsaW5ncyIsInBhcmVudCIsImdldENUTSIsInJlbW92ZVByb3BlcnR5IiwiY2xvbmUiLCJfZ2V0Q1RNIiwiZiIsImJhc2VWYWwiLCJudW1iZXJPZkl0ZW1zIiwibXVsdGlwbHkiLCJnZXRJdGVtIiwibWF0cml4IiwiX2NvbnNvbGlkYXRlIiwib2Zmc2V0TGVmdCIsIm9mZnNldFRvcCIsInNjcm9sbExlZnQiLCJzY3JvbGxUb3AiLCJ0b3AiLCJsZWZ0IiwiX3NldE1hdHJpeCIsIl9wcm90byIsImludmVyc2UiLCJkZXRlcm1pbmFudCIsImEyIiwiYjIiLCJjMiIsImUyIiwiZjIiLCJlcXVhbHMiLCJnZXRHbG9iYWxNYXRyaXgiLCJpbmNsdWRlU2Nyb2xsSW5GaXhlZCIsInplcm9TY2FsZXMiLCJjYWNoZSIsIl9nc2FwIiwidW5jYWNoZSIsImdldCIsInJlbmRlclRyYW5zZm9ybSIsIl9mb3JjZU5vblplcm9TY2FsZSIsInRlbXBzIiwiYjEiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJiMyIsImlzRml4ZWQiLCJwYWdlWE9mZnNldCIsInBhZ2VZT2Zmc2V0IiwiUHJvcFR3ZWVuIiwiX2dldFVuaXQiLCJfeFByb3BzIiwiX3lQcm9wcyIsIl9wb3B1bGF0ZVNlZ21lbnRGcm9tQXJyYXkiLCJ2YWx1ZXMiLCJwcm9wZXJ0eSIsIm1vZGUiLCJfZ2V0UHJvcE51bSIsInByb3AiLCJ1bml0IiwiX3JlbGF0aXZpemUiLCJfc2VnbWVudFRvUmF3UGF0aCIsInBsdWdpbiIsInNsaWNlciIsInZhcnMiLCJ1bml0WCIsInVuaXRZIiwiZnJvbUN1cnJlbnQiLCJyZWxhdGl2ZSIsIl9hbGlnbiIsIl9hZGREaW1lbnNpb25hbFByb3BUd2VlbiIsIl9lbXB0eUZ1bmMiLCJ2IiwiX29yaWdpblRvUG9pbnQiLCJvcmlnaW4iLCJwYXJlbnRNYXRyaXgiLCJ2aWV3Qm94Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJfZ2V0QWxpZ25NYXRyaXgiLCJmcm9tRWxlbWVudCIsInRvRWxlbWVudCIsImZyb21PcmlnaW4iLCJ0b09yaWdpbiIsInAiLCJmcm9tUG9pbnQiLCJfb3JpZ2luVG9Qb2ludDIiLCJhbGlnblRhcmdldCIsImFsaWduIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJhbGlnbk9yaWdpbiIsImN1clgiLCJjdXJZIiwic2V0IiwidHJhbnNmb3JtT3JpZ2luIiwicGF0aFByb3BlcnR5IiwiZm9yY2VVbml0IiwiaGFybmVzcyIsImFsaWFzIiwiYWxpYXNlcyIsInUiLCJwcCIsIk1vdGlvblBhdGhQbHVnaW4iLCJQbHVnaW4iLCJwcm9wVHdlZW4iLCJnZXRVbml0IiwicmF3UGF0aHMiLCJfdmFycyIsImF1dG9Sb3RhdGUiLCJmaXJzdE9iaiIsInJvdGF0ZSIsInJPZmZzZXQiLCJyYWRpYW5zIiwidXNlUmFkaWFucyIsInJQcm9wIiwicm90YXRpb24iLCJyU2V0IiwicnUiLCJBcnJheSIsImlzQXJyYXkiLCJjb252ZXJ0VG9QYXRoIiwibWFwIiwiY29udmVydENvb3JkaW5hdGVzIiwiZ2V0QWxpZ25NYXRyaXgiLCJnZXRSZWxhdGl2ZVBvc2l0aW9uIiwiYXJyYXlUb1Jhd1BhdGgiLCJfd2luZG93IiwiX2RvY0VsIiwiX2NvbmZpZyIsIlNjcm9sbFRyaWdnZXIiLCJfaXNGdW5jdGlvbiIsIl9tYXgiLCJheGlzIiwiZGltIiwic2Nyb2xsIiwiY2xpZW50IiwiX2J1aWxkR2V0dGVyIiwiX2dldE9mZnNldCIsImlzUm9vdCIsImNSZWN0IiwiY2xpZW50VG9wIiwiY2xpZW50TGVmdCIsIm9mZnNldHMiLCJfcGFyc2VWYWwiLCJjdXJyZW50VmFsIiwiY29uZmlnIiwiYXV0b0tpbGxUaHJlc2hvbGQiLCJTY3JvbGxUb1BsdWdpbiIsInJhd1ZhcnMiLCJzbmFwVHlwZSIsImdldFByb3BlcnR5IiwiaXNXaW4iLCJfY2xlYW4iLCJhdXRvS2lsbCIsImdldFgiLCJnZXRZIiwieFByZXYiLCJ5UHJldiIsImdsb2JhbHMiLCJzY3JvbGxCZWhhdmlvciIsInNuYXAiLCJzbmFwSW5saW5lIiwic2Nyb2xsU25hcFR5cGUiLCJza2lwWCIsInNraXBZIiwieURpZiIsInhEaWYiLCJ0aHJlc2hvbGQiLCJraWxsIiwib25BdXRvS2lsbCIsIm9uQXV0b0tpbGxQYXJhbXMiLCJzY3JvbGxUbyIsInVwZGF0ZSIsImJvdGgiLCJnZXRPZmZzZXQiLCJidWlsZEdldHRlciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5Iiwia2V5IiwiX2lzVG91Y2giLCJfcG9pbnRlclR5cGUiLCJfcm9vdCIsIl9ub3JtYWxpemVyIiwiX2V2ZW50VHlwZXMiLCJfY29udGV4dCIsIl9zdGFydHVwIiwiX29ic2VydmVycyIsIl9zY3JvbGxlcnMiLCJfcHJveGllcyIsIl9nZXRUaW1lIiwiRGF0ZSIsIm5vdyIsIl9icmlkZ2UiLCJfZ2V0UHJveHlQcm9wIiwiX2lzVmlld3BvcnQiLCJlbCIsIl9hZGRMaXN0ZW5lciIsImZ1bmMiLCJub25QYXNzaXZlIiwiY2FwdHVyZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJwYXNzaXZlIiwiX3JlbW92ZUxpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9zY3JvbGxMZWZ0IiwiX3Njcm9sbFRvcCIsIl9vblNjcm9sbCIsImlzUHJlc3NlZCIsIl9zY3JvbGxDYWNoZUZ1bmMiLCJkb05vdENhY2hlIiwiY2FjaGluZ0Z1bmMiLCJoaXN0b3J5Iiwic2Nyb2xsUmVzdG9yYXRpb24iLCJpc05vcm1hbGl6aW5nIiwiaU9TIiwiY2FjaGVJRCIsIl9ob3Jpem9udGFsIiwicDIiLCJvcyIsIm9zMiIsInNjIiwiYXJndW1lbnRzIiwiX3ZlcnRpY2FsIiwib3AiLCJfZ2V0VGFyZ2V0Iiwic2VsZiIsIl9jdHgiLCJzZWxlY3RvciIsIm51bGxUYXJnZXRXYXJuIiwiX2dldFNjcm9sbEZ1bmMiLCJzY3JvbGxpbmdFbGVtZW50IiwicHJldiIsInNtb290aCIsIl9nZXRWZWxvY2l0eVByb3AiLCJtaW5UaW1lUmVmcmVzaCIsInVzZURlbHRhIiwidjEiLCJ2MiIsInQxIiwidDIiLCJkcm9wVG9aZXJvVGltZSIsImZvcmNlIiwicmVzZXQiLCJnZXRWZWxvY2l0eSIsImxhdGVzdFZhbHVlIiwidE9sZCIsInZPbGQiLCJfZ2V0RXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsIl9nc2FwQWxsb3ciLCJjaGFuZ2VkVG91Y2hlcyIsIl9nZXRBYnNvbHV0ZU1heCIsIl9zZXRTY3JvbGxUcmlnZ2VyIiwic2Nyb2xsZXJzIiwicHJveGllcyIsImJyaWRnZSIsImNsYW1wIiwiY29udGV4dCIsIk9ic2VydmVyIiwiaXNUb3VjaCIsIm1hdGNoTWVkaWEiLCJtYXRjaGVzIiwibWF4VG91Y2hQb2ludHMiLCJtc01heFRvdWNoUG9pbnRzIiwiZXZlbnRUeXBlcyIsInNldFRpbWVvdXQiLCJDb25zdHJ1Y3RvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsInRvbGVyYW5jZSIsImRyYWdNaW5pbXVtIiwibGluZUhlaWdodCIsImRlYm91bmNlIiwib25TdG9wIiwib25TdG9wRGVsYXkiLCJ3aGVlbFNwZWVkIiwiZXZlbnQiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ0VuZCIsIm9uRHJhZyIsIm9uUHJlc3MiLCJvblJlbGVhc2UiLCJvblJpZ2h0Iiwib25MZWZ0Iiwib25VcCIsIm9uRG93biIsIm9uQ2hhbmdlWCIsIm9uQ2hhbmdlWSIsIm9uQ2hhbmdlIiwib25Ub2dnbGVYIiwib25Ub2dnbGVZIiwib25Ib3ZlciIsIm9uSG92ZXJFbmQiLCJvbk1vdmUiLCJpZ25vcmVDaGVjayIsImlzTm9ybWFsaXplciIsIm9uR2VzdHVyZVN0YXJ0Iiwib25HZXN0dXJlRW5kIiwib25XaGVlbCIsIm9uRW5hYmxlIiwib25EaXNhYmxlIiwib25DbGljayIsInNjcm9sbFNwZWVkIiwiYWxsb3dDbGlja3MiLCJsb2NrQXhpcyIsIm9uTG9ja0F4aXMiLCJpZCIsIm9uU3RvcERlbGF5ZWRDYWxsIiwiZHJhZ2dlZCIsIm1vdmVkIiwid2hlZWxlZCIsImxvY2tlZCIsInByZXZEZWx0YVgiLCJwcmV2RGVsdGFZIiwic2Nyb2xsRnVuY1giLCJzY3JvbGxGdW5jWSIsInNjcm9sbFgiLCJzY3JvbGxZIiwibGltaXRUb1RvdWNoIiwiaXNWaWV3cG9ydCIsIm93bmVyRG9jIiwiZGVsdGFYIiwiZGVsdGFZIiwib25DbGlja1RpbWUiLCJjbGlja0NhcHR1cmUiLCJfaWdub3JlQ2hlY2siLCJpc1BvaW50ZXJPclRvdWNoIiwicG9pbnRlclR5cGUiLCJkeCIsImR5IiwiY2hhbmdlZFgiLCJjaGFuZ2VkWSIsIm9uRGVsdGEiLCJfdngiLCJfdnkiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJvblRvdWNoT3JQb2ludGVyRGVsdGEiLCJfb25EcmFnIiwiY2xpZW50WCIsImNsaWVudFkiLCJpc0RyYWdnaW5nIiwiX29uUHJlc3MiLCJidXR0b24iLCJwYXVzZSIsIl9vblJlbGVhc2UiLCJpc1RyYWNraW5nRHJhZyIsIndhc0RyYWdnaW5nIiwiZXZlbnREYXRhIiwiZGVsYXllZENhbGwiLCJkZWZhdWx0UHJldmVudGVkIiwiY2xpY2siLCJjcmVhdGVFdmVudCIsInN5bnRoZXRpY0V2ZW50IiwiaW5pdE1vdXNlRXZlbnQiLCJzY3JlZW5YIiwic2NyZWVuWSIsImRpc3BhdGNoRXZlbnQiLCJpc0dlc3R1cmluZyIsInJlc3RhcnQiLCJfb25HZXN0dXJlU3RhcnQiLCJ0b3VjaGVzIiwiX29uR2VzdHVyZUVuZCIsIm9uU2Nyb2xsIiwiX29uV2hlZWwiLCJtdWx0aXBsaWVyIiwiZGVsdGFNb2RlIiwiaW5uZXJIZWlnaHQiLCJfb25Nb3ZlIiwiX29uSG92ZXIiLCJfb25Ib3ZlckVuZCIsIl9vbkNsaWNrIiwiX2RjIiwiZW5hYmxlIiwiaXNFbmFibGVkIiwiZGlzYWJsZSIsImZpbHRlciIsIm8iLCJjcmVhdGUiLCJnZXRBbGwiLCJnZXRCeUlkIiwiX3Jlc2l6ZURlbGF5IiwiX3RpbWUyIiwiX3N5bmNJbnRlcnZhbCIsIl9yZWZyZXNoaW5nIiwiX3BvaW50ZXJJc0Rvd24iLCJfaSIsIl9wcmV2V2lkdGgiLCJfcHJldkhlaWdodCIsIl9hdXRvUmVmcmVzaCIsIl9zb3J0IiwiX3N1cHByZXNzT3ZlcndyaXRlcyIsIl9pZ25vcmVSZXNpemUiLCJfaWdub3JlTW9iaWxlUmVzaXplIiwiX2Jhc2VTY3JlZW5IZWlnaHQiLCJfYmFzZVNjcmVlbldpZHRoIiwiX2ZpeElPU0J1ZyIsIl9zY3JvbGxSZXN0b3JhdGlvbiIsIl9kaXYxMDB2aCIsIl8xMDB2aCIsIl9saW1pdENhbGxiYWNrcyIsIl9yYWZJRCIsIl9yZWZyZXNoaW5nQWxsIiwiX3F1ZXVlUmVmcmVzaElEIiwiX3ByaW1hcnkiLCJfdGltZTEiLCJfbGFzdFNjcm9sbFRpbWUiLCJfZW5hYmxlZCIsIl9wYXJzZUNsYW1wIiwiX2tlZXBDbGFtcCIsIl9yYWZCdWdGaXgiLCJfcG9pbnRlckRvd25IYW5kbGVyIiwiX3BvaW50ZXJVcEhhbmRsZXIiLCJfcGFzc1Rocm91Z2giLCJfZ2V0Vmlld3BvcnREaW1lbnNpb24iLCJkaW1lbnNpb25Qcm9wZXJ0eSIsIl9nZXRCb3VuZHNGdW5jIiwiX3dpbk9mZnNldHMiLCJpbm5lcldpZHRoIiwiX2dldEJvdW5kcyIsIl9tYXhTY3JvbGwiLCJfcmVmMiIsIl9pdGVyYXRlQXV0b1JlZnJlc2giLCJfaXNPYmplY3QiLCJfZW5kQW5pbWF0aW9uIiwiYW5pbWF0aW9uIiwiX2NhbGxiYWNrIiwiZW5hYmxlZCIsInRvdGFsVGltZSIsImNhbGxiYWNrQW5pbWF0aW9uIiwiX2xlZnQiLCJfcmlnaHQiLCJfYm90dG9tIiwiX3dpZHRoIiwiX2hlaWdodCIsIl9SaWdodCIsIl9MZWZ0IiwiX1RvcCIsIl9Cb3R0b20iLCJfcGFkZGluZyIsIl9tYXJnaW4iLCJfV2lkdGgiLCJfSGVpZ2h0IiwiX3B4IiwiX2dldENvbXB1dGVkU3R5bGUiLCJfc2V0RGVmYXVsdHMiLCJkZWZhdWx0cyIsIndpdGhvdXRUcmFuc2Zvcm1zIiwidG8iLCJ4UGVyY2VudCIsInlQZXJjZW50Iiwicm90YXRpb25YIiwicm90YXRpb25ZIiwic2NhbGUiLCJza2V3WCIsInNrZXdZIiwiYm91bmRzIiwiX2dldFNpemUiLCJfcmVmMyIsIl9nZXRMYWJlbFJhdGlvQXJyYXkiLCJ0aW1lbGluZSIsImxhYmVscyIsImR1cmF0aW9uIiwiX3NuYXBEaXJlY3Rpb25hbCIsInNuYXBJbmNyZW1lbnRPckFycmF5Iiwic29ydCIsImRpcmVjdGlvbiIsInNuYXBwZWQiLCJfbXVsdGlMaXN0ZW5lciIsInR5cGVzIiwiY2FsbGJhY2siLCJmb3JFYWNoIiwiX3doZWVsTGlzdGVuZXIiLCJzY3JvbGxGdW5jIiwid2hlZWxIYW5kbGVyIiwiX21hcmtlckRlZmF1bHRzIiwic3RhcnRDb2xvciIsImVuZENvbG9yIiwiaW5kZW50IiwiZm9udFNpemUiLCJmb250V2VpZ2h0IiwiX2RlZmF1bHRzIiwidG9nZ2xlQWN0aW9ucyIsImFudGljaXBhdGVQaW4iLCJfa2V5d29yZHMiLCJjZW50ZXIiLCJib3R0b20iLCJyaWdodCIsIl9vZmZzZXRUb1B4Iiwic2l6ZSIsImVxSW5kZXgiLCJfY3JlYXRlTWFya2VyIiwiX3JlZjQiLCJtYXRjaFdpZHRoRWwiLCJjb250YWluZXJBbmltYXRpb24iLCJ1c2VGaXhlZFBvc2l0aW9uIiwiaXNTY3JvbGxlciIsImlzU3RhcnQiLCJjb2xvciIsIl9pc1N0YXJ0IiwiaW5uZXJUZXh0IiwiY2hpbGRyZW4iLCJfcG9zaXRpb25NYXJrZXIiLCJtYXJrZXIiLCJmbGlwcGVkIiwiZGlzcGxheSIsInNpZGUiLCJvcHBvc2l0ZVNpZGUiLCJfaXNGbGlwcGVkIiwiX3RyaWdnZXJzIiwiX2lkcyIsIl9zeW5jIiwiX3VwZGF0ZUFsbCIsImNsaWVudFdpZHRoIiwiX2Rpc3BhdGNoIiwiX3NldEJhc2VEaW1lbnNpb25zIiwiX29uUmVzaXplIiwiZnVsbHNjcmVlbkVsZW1lbnQiLCJ3ZWJraXRGdWxsc2NyZWVuRWxlbWVudCIsIl9saXN0ZW5lcnMiLCJfZW1wdHlBcnJheSIsIl9zb2Z0UmVmcmVzaCIsIl9yZWZyZXNoQWxsIiwiX3NhdmVkU3R5bGVzIiwiX3JldmVydFJlY29yZGVkIiwibWVkaWEiLCJxdWVyeSIsIl9yZXZlcnRBbGwiLCJ0cmlnZ2VyIiwiX2NsZWFyU2Nyb2xsTWVtb3J5IiwicmVjIiwiX3JlZnJlc2hJRCIsIl9yZWZyZXNoMTAwdmgiLCJza2lwUmV2ZXJ0IiwiaXNSZWZyZXNoaW5nIiwicmVmcmVzaEluaXRzIiwicmVmcmVzaCIsIl9zdWJQaW5PZmZzZXQiLCJwaW4iLCJob3Jpem9udGFsIiwib3JpZ2luYWwiLCJhZGp1c3RQaW5TcGFjaW5nIiwic2Nyb2xsZXIiLCJfZGlyIiwiX2VuZENsYW1wIiwic2V0UG9zaXRpb25zIiwib25SZWZyZXNoIiwiX2xhc3RTY3JvbGwiLCJfZGlyZWN0aW9uIiwiaXNVcGRhdGluZyIsInRpbWUiLCJyZWNvcmRWZWxvY2l0eSIsIl9wcm9wTmFtZXNUb0NvcHkiLCJfc3RhdGVQcm9wcyIsIl9zd2FwUGluSW4iLCJzcGFjZXIiLCJzcGFjZXJTdGF0ZSIsInN3YXBwZWRJbiIsInNwYWNlclN0eWxlIiwicGluU3R5bGUiLCJmbGV4QmFzaXMiLCJvdmVyZmxvdyIsImJveFNpemluZyIsIl9zZXRTdGF0ZSIsIl9jYXBzRXhwIiwic3RhdGUiLCJnZXRDYWNoZSIsIl9nZXRTdGF0ZSIsIl9wYXJzZVBvc2l0aW9uIiwic2Nyb2xsZXJTaXplIiwibWFya2VyU2Nyb2xsZXIiLCJzY3JvbGxlckJvdW5kcyIsImJvcmRlcldpZHRoIiwic2Nyb2xsZXJNYXgiLCJjbGFtcFplcm9Qcm9wIiwicDEiLCJzZWVrIiwibWFwUmFuZ2UiLCJzY3JvbGxUcmlnZ2VyIiwibG9jYWxPZmZzZXQiLCJnbG9iYWxPZmZzZXQiLCJfY2FTY3JvbGxEaXN0IiwiX3ByZWZpeEV4cCIsIl9yZXBhcmVudCIsIl9zdE9yaWciLCJfaW50ZXJydXB0aW9uVHJhY2tlciIsImdldFZhbHVlRnVuYyIsImluaXRpYWxWYWx1ZSIsIm9uSW50ZXJydXB0IiwibGFzdDEiLCJsYXN0MiIsImN1cnJlbnQiLCJfc2hpZnRNYXJrZXIiLCJfZ2V0VHdlZW5DcmVhdG9yIiwiZ2V0U2Nyb2xsIiwiZ2V0VHdlZW4iLCJjaGFuZ2UxIiwiY2hhbmdlMiIsIm9uQ29tcGxldGUiLCJtb2RpZmllcnMiLCJjaGVja0ZvckludGVycnVwdGlvbiIsIm9uVXBkYXRlIiwidHdlZW5UbyIsInBpbkNhY2hlIiwic25hcEZ1bmMiLCJzY3JvbGwxIiwic2Nyb2xsMiIsIm1hcmtlclN0YXJ0IiwibWFya2VyRW5kIiwibWFya2VyU3RhcnRUcmlnZ2VyIiwibWFya2VyRW5kVHJpZ2dlciIsIm1hcmtlclZhcnMiLCJleGVjdXRpbmdPblJlZnJlc2giLCJjaGFuZ2UiLCJwaW5PcmlnaW5hbFN0YXRlIiwicGluQWN0aXZlU3RhdGUiLCJwaW5TdGF0ZSIsInBpbkdldHRlciIsInBpblNldHRlciIsInBpblN0YXJ0IiwicGluQ2hhbmdlIiwic3BhY2luZ1N0YXJ0IiwibWFya2VyU3RhcnRTZXR0ZXIiLCJwaW5Nb3ZlcyIsIm1hcmtlckVuZFNldHRlciIsInNuYXAxIiwic25hcDIiLCJzY3J1YlR3ZWVuIiwic2NydWJTbW9vdGgiLCJzbmFwRHVyQ2xhbXAiLCJzbmFwRGVsYXllZENhbGwiLCJwcmV2U2Nyb2xsIiwicHJldkFuaW1Qcm9ncmVzcyIsImNhTWFya2VyU2V0dGVyIiwiY3VzdG9tUmV2ZXJ0UmV0dXJuIiwidG9nZ2xlQ2xhc3MiLCJvblRvZ2dsZSIsInNjcnViIiwicGluU3BhY2luZyIsImludmFsaWRhdGVPblJlZnJlc2giLCJvblNjcnViQ29tcGxldGUiLCJvblNuYXBDb21wbGV0ZSIsInBpblJlcGFyZW50IiwicGluU3BhY2VyIiwiZmFzdFNjcm9sbEVuZCIsInByZXZlbnRPdmVybGFwcyIsImlzVG9nZ2xlIiwic2Nyb2xsZXJDYWNoZSIsInBpblR5cGUiLCJjYWxsYmFja3MiLCJvbkVudGVyIiwib25MZWF2ZSIsIm9uRW50ZXJCYWNrIiwib25MZWF2ZUJhY2siLCJtYXJrZXJzIiwib25SZWZyZXNoSW5pdCIsImdldFNjcm9sbGVyU2l6ZSIsIl9nZXRTaXplRnVuYyIsImdldFNjcm9sbGVyT2Zmc2V0cyIsIl9nZXRPZmZzZXRzRnVuYyIsImxhc3RTbmFwIiwibGFzdFJlZnJlc2giLCJwcmV2UHJvZ3Jlc3MiLCJfc3RhcnRDbGFtcCIsImJpbmQiLCJyZWZyZXNoUHJpb3JpdHkiLCJ0d2VlblNjcm9sbCIsInNjcnViRHVyYXRpb24iLCJlYXNlIiwidG90YWxQcm9ncmVzcyIsInBhdXNlZCIsImxhenkiLCJfaW5pdHRlZCIsImlzUmV2ZXJ0ZWQiLCJpbW1lZGlhdGVSZW5kZXIiLCJzbmFwVG8iLCJfZ2V0Q2xvc2VzdExhYmVsIiwic3QiLCJkaXJlY3Rpb25hbCIsImRlbGF5IiwicmVmcmVzaGVkUmVjZW50bHkiLCJpc0FjdGl2ZSIsInZlbG9jaXR5IiwibmF0dXJhbEVuZCIsImluZXJ0aWEiLCJlbmRWYWx1ZSIsImVuZFNjcm9sbCIsIl9zbmFwIiwib25TdGFydCIsIl9vbkludGVycnVwdCIsIl9vbkNvbXBsZXRlIiwic3RSZXZlcnQiLCJjbGFzc05hbWUiLCJuYXRpdmVFbGVtZW50Iiwic3BhY2VySXNOYXRpdmUiLCJjbGFzc0xpc3QiLCJmb3JjZTNEIiwicXVpY2tTZXR0ZXIiLCJjb250ZW50Iiwib2xkT25VcGRhdGUiLCJvbGRQYXJhbXMiLCJvblVwZGF0ZVBhcmFtcyIsImV2ZW50Q2FsbGJhY2siLCJwcmV2aW91cyIsIm5leHQiLCJwcmV2UmVmcmVzaGluZyIsIl9zd2FwUGluT3V0Iiwic29mdCIsInBpbk9mZnNldCIsImludmFsaWRhdGUiLCJpc1ZlcnRpY2FsIiwib3ZlcnJpZGUiLCJjdXJUcmlnZ2VyIiwiY3VyUGluIiwib3Bwb3NpdGVTY3JvbGwiLCJpbml0dGVkIiwicmV2ZXJ0ZWRQaW5zIiwiZm9yY2VkT3ZlcmZsb3ciLCJtYXJrZXJTdGFydE9mZnNldCIsIm1hcmtlckVuZE9mZnNldCIsImlzRmlyc3RSZWZyZXNoIiwib3RoZXJQaW5PZmZzZXQiLCJwYXJzZWRFbmQiLCJwYXJzZWRFbmRUcmlnZ2VyIiwiZW5kVHJpZ2dlciIsInBhcnNlZFN0YXJ0IiwicGlubmVkQ29udGFpbmVyIiwidHJpZ2dlckluZGV4IiwiX3BpblB1c2giLCJub3JtYWxpemUiLCJvbWl0T2Zmc2V0cyIsIl9jb3B5U3RhdGUiLCJfcGluT2Zmc2V0IiwiZW5kQW5pbWF0aW9uIiwibGFiZWxUb1Njcm9sbCIsImxhYmVsIiwiZ2V0VHJhaWxpbmciLCJmb3JjZUZha2UiLCJ0b2dnbGVTdGF0ZSIsImFjdGlvbiIsInN0YXRlQ2hhbmdlZCIsInRvZ2dsZWQiLCJpc0F0TWF4IiwiaXNUYWtpbmdBY3Rpb24iLCJjbGlwcGVkIiwiX2RwIiwiX3N0YXJ0IiwicmVzZXRUbyIsIl90VGltZSIsIl90RHVyIiwibmV3U3RhcnQiLCJuZXdFbmQiLCJrZWVwQ2xhbXAiLCJfY2hhbmdlIiwiYW1vdW50IiwiYWxsb3dBbmltYXRpb24iLCJvbktpbGwiLCJ1cGRhdGVGdW5jIiwiX3F1ZXVlUmVmcmVzaEFsbCIsImNsZWFySW50ZXJ2YWwiLCJzdXBwcmVzc092ZXJ3cml0ZXMiLCJtbSIsImJvZHlTdHlsZSIsImJvcmRlciIsImJvcmRlclRvcFN0eWxlIiwiQW5pbWF0aW9uUHJvdG8iLCJBbmltYXRpb24iLCJzZXRJbnRlcnZhbCIsImNoZWNrUHJlZml4IiwiaGlkZGVuIiwibGltaXRDYWxsYmFja3MiLCJtcyIsInN5bmNJbnRlcnZhbCIsImlnbm9yZU1vYmlsZVJlc2l6ZSIsImF1dG9SZWZyZXNoRXZlbnRzIiwic2Nyb2xsZXJQcm94eSIsImNsZWFyTWF0Y2hNZWRpYSIsImlzSW5WaWV3cG9ydCIsInBvc2l0aW9uSW5WaWV3cG9ydCIsInJlZmVyZW5jZVBvaW50Iiwia2lsbEFsbCIsImFsbG93TGlzdGVuZXJzIiwic2F2ZVN0eWxlcyIsInNhZmUiLCJjbGVhclNjcm9sbE1lbW9yeSIsIm1heFNjcm9sbCIsImdldFNjcm9sbEZ1bmMiLCJpc1Njcm9sbGluZyIsInNuYXBEaXJlY3Rpb25hbCIsImJhdGNoIiwidmFyc0NvcHkiLCJpbnRlcnZhbCIsImJhdGNoTWF4IiwicHJveHlDYWxsYmFjayIsInRyaWdnZXJzIiwiX2lucHV0SXNGb2N1c2VkIiwiX2NsYW1wU2Nyb2xsQW5kR2V0RHVyYXRpb25NdWx0aXBsaWVyIiwiX2FsbG93TmF0aXZlUGFubmluZyIsInRvdWNoQWN0aW9uIiwiX292ZXJmbG93IiwiYXV0byIsIl9uZXN0ZWRTY3JvbGwiLCJfcmVmNSIsIm5vZGUiLCJfaXNTY3JvbGxUIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0Iiwic2Nyb2xsV2lkdGgiLCJvdmVyZmxvd1kiLCJvdmVyZmxvd1giLCJfaXNTY3JvbGwiLCJzdG9wUHJvcGFnYXRpb24iLCJfaW5wdXRPYnNlcnZlciIsImlucHV0cyIsIm5lc3RlZCIsIl9jYXB0dXJlSW5wdXRzIiwiX2lucHV0RXhwIiwiaXNJbnB1dCIsIl9nZXRTY3JvbGxOb3JtYWxpemVyIiwibWF4WSIsImxhc3RSZWZyZXNoSUQiLCJza2lwVG91Y2hNb3ZlIiwic3RhcnRTY3JvbGxYIiwic3RhcnRTY3JvbGxZIiwiX3ZhcnMyIiwibm9ybWFsaXplU2Nyb2xsWCIsIm1vbWVudHVtIiwiYWxsb3dOZXN0ZWRTY3JvbGwiLCJzbW9vdGhlciIsIlNjcm9sbFNtb290aGVyIiwic21vb3RoZXJJbnN0YW5jZSIsImluaXRpYWxTY2FsZSIsInZpc3VhbFZpZXdwb3J0Iiwib3V0ZXJXaWR0aCIsIndoZWVsUmVmcmVzaCIsInJlc29sdmVNb21lbnR1bUR1cmF0aW9uIiwiaW5wdXRPYnNlcnZlciIsInJlc3VtZVRvdWNoTW92ZSIsInNjcm9sbENsYW1wWCIsInNjcm9sbENsYW1wWSIsInVwZGF0ZUNsYW1wcyIsInJlbW92ZUNvbnRlbnRPZmZzZXQiLCJvblJlc2l6ZSIsImlnbm9yZURyYWciLCJwcmV2U2NhbGUiLCJjdXJyZW50U2Nyb2xsIiwiZHVyIiwidmVsb2NpdHlYIiwidmVsb2NpdHlZIiwicGxheSIsIl90cyIsInhBcnJheSIsInlBcnJheSIsInlDbGFtcGVkIiwidGlja2VyIiwib2JzZXJ2ZSIsIm5vcm1hbGl6ZVNjcm9sbCIsIm5vcm1hbGl6ZXIiLCJzcyIsInJlZiIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJSZWZlcmVuY2VFcnJvciIsIl9pbmhlcml0c0xvb3NlIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiY29uc3RydWN0b3IiLCJfX3Byb3RvX18iLCJfZ2xvYmFsVGltZWxpbmUiLCJfY29yZVJlYWR5IiwiX2xhc3RSZW5kZXJlZEZyYW1lIiwiX3F1aWNrVHdlZW4iLCJfdGlja2VyQWN0aXZlIiwibjEiLCJlYXNlT3V0IiwiYXV0b1NsZWVwIiwidW5pdHMiLCJvdmVyd3JpdGUiLCJfYmlnTnVtIiwiX3RpbnlOdW0iLCJfMlBJIiwiX0hBTEZfUEkiLCJfZ3NJRCIsIl9pc1VuZGVmaW5lZCIsIl9pc05vdEZhbHNlIiwiX2lzRnVuY09yU3RyaW5nIiwiX2lzVHlwZWRBcnJheSIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiX2lzQXJyYXkiLCJfc3RyaWN0TnVtRXhwIiwiX251bVdpdGhVbml0RXhwIiwiX2NvbXBsZXhTdHJpbmdOdW1FeHAiLCJfcmVsRXhwIiwiX2RlbGltaXRlZFZhbHVlRXhwIiwiX3VuaXRFeHAiLCJfZ2xvYmFscyIsIl9pbnN0YWxsU2NvcGUiLCJfaW5zdGFsbCIsInNjb3BlIiwiX21lcmdlIiwiX21pc3NpbmdQbHVnaW4iLCJzdXBwcmVzcyIsIl9hZGRHbG9iYWwiLCJfc3RhcnRBdFJldmVydENvbmZpZyIsInN1cHByZXNzRXZlbnRzIiwiX3JldmVydENvbmZpZ05vS2lsbCIsIl9yZXZlcnRDb25maWciLCJfcmVzZXJ2ZWRQcm9wcyIsIl9sYXp5VHdlZW5zIiwiX2xhenlMb29rdXAiLCJfcGx1Z2lucyIsIl9lZmZlY3RzIiwiX25leHRHQ0ZyYW1lIiwiX2hhcm5lc3NQbHVnaW5zIiwiX2NhbGxiYWNrTmFtZXMiLCJfaGFybmVzcyIsImhhcm5lc3NQbHVnaW4iLCJ0YXJnZXRUZXN0IiwiR1NDYWNoZSIsIl9nZXRDYWNoZSIsIl9nZXRQcm9wZXJ0eSIsIl9mb3JFYWNoTmFtZSIsIm5hbWVzIiwiX3BhcnNlUmVsYXRpdmUiLCJvcGVyYXRvciIsIl9hcnJheUNvbnRhaW5zQW55IiwidG9TZWFyY2giLCJ0b0ZpbmQiLCJfbGF6eVJlbmRlciIsIl9sYXp5IiwiX2xhenlTYWZlUmVuZGVyIiwiX3N0YXJ0QXQiLCJfbnVtZXJpY0lmUG9zc2libGUiLCJ0cmltIiwiYmFzZSIsInRvTWVyZ2UiLCJfbWVyZ2VEZWVwIiwiX2NvcHlFeGNsdWRpbmciLCJleGNsdWRpbmciLCJfaW5oZXJpdERlZmF1bHRzIiwiZXhjbHVkZUR1cmF0aW9uIiwia2V5ZnJhbWVzIiwiaW5oZXJpdCIsIl9hZGRMaW5rZWRMaXN0SXRlbSIsImNoaWxkIiwiZmlyc3RQcm9wIiwibGFzdFByb3AiLCJzb3J0QnkiLCJfcHJldiIsIl9yZW1vdmVMaW5rZWRMaXN0SXRlbSIsIl9yZW1vdmVGcm9tUGFyZW50Iiwib25seUlmUGFyZW50SGFzQXV0b1JlbW92ZSIsImF1dG9SZW1vdmVDaGlsZHJlbiIsInJlbW92ZSIsIl9hY3QiLCJfdW5jYWNoZSIsIl9lbmQiLCJfZHVyIiwiX3Jld2luZFN0YXJ0QXQiLCJhdXRvUmV2ZXJ0IiwiX2hhc05vUGF1c2VkQW5jZXN0b3JzIiwiX2VsYXBzZWRDeWNsZUR1cmF0aW9uIiwiX3JlcGVhdCIsIl9hbmltYXRpb25DeWNsZSIsIl9yRGVsYXkiLCJ0VGltZSIsImN5Y2xlRHVyYXRpb24iLCJ3aG9sZSIsImZsb29yIiwiX3BhcmVudFRvQ2hpbGRUb3RhbFRpbWUiLCJwYXJlbnRUaW1lIiwidG90YWxEdXJhdGlvbiIsIl9zZXRFbmQiLCJfcnRzIiwiX2FsaWduUGxheWhlYWQiLCJzbW9vdGhDaGlsZFRpbWluZyIsIl9wb3N0QWRkQ2hlY2tzIiwicmF3VGltZSIsIl9jbGFtcCIsIl96VGltZSIsIl9hZGRUb1RpbWVsaW5lIiwic2tpcENoZWNrcyIsIl9kZWxheSIsInRpbWVTY2FsZSIsIl9pc0Zyb21PckZyb21TdGFydCIsIl9yZWNlbnQiLCJfc2Nyb2xsVHJpZ2dlciIsIl9hdHRlbXB0SW5pdFR3ZWVuIiwiX2luaXRUd2VlbiIsIl90aWNrZXIiLCJmcmFtZSIsIl9wYXJlbnRQbGF5aGVhZElzQmVmb3JlU3RhcnQiLCJfbG9jayIsIl9zZXREdXJhdGlvbiIsInNraXBVbmNhY2hlIiwibGVhdmVQbGF5aGVhZCIsInJlcGVhdCIsIl9vblVwZGF0ZVRvdGFsRHVyYXRpb24iLCJUaW1lbGluZSIsIl96ZXJvUG9zaXRpb24iLCJlbmRUaW1lIiwicGVyY2VudEFuaW1hdGlvbiIsImlzUGVyY2VudCIsInJlY2VudCIsImNsaXBwZWREdXJhdGlvbiIsIl9jcmVhdGVUd2VlblR5cGUiLCJwYXJhbXMiLCJpclZhcnMiLCJpc0xlZ2FjeSIsInZhcnNJbmRleCIsInJ1bkJhY2t3YXJkcyIsInN0YXJ0QXQiLCJUd2VlbiIsIl9jb25kaXRpb25hbFJldHVybiIsImV4ZWMiLCJfc2xpY2UiLCJfaXNBcnJheUxpa2UiLCJub25FbXB0eSIsIl9mbGF0dGVuIiwiYXIiLCJsZWF2ZVN0cmluZ3MiLCJhY2N1bXVsYXRvciIsIl9hY2N1bXVsYXRvciIsIl93YWtlIiwicXVlcnlTZWxlY3RvckFsbCIsInNodWZmbGUiLCJyYW5kb20iLCJkaXN0cmlidXRlIiwiZWFjaCIsIl9wYXJzZUVhc2UiLCJmcm9tIiwiaXNEZWNpbWFsIiwicmF0aW9zIiwicmF0aW9YIiwicmF0aW9ZIiwiZWRnZXMiLCJvcmlnaW5YIiwib3JpZ2luWSIsIndyYXBBdCIsImRpc3RhbmNlcyIsImdyaWQiLCJfaW52ZXJ0RWFzZSIsIl9yb3VuZE1vZGlmaWVyIiwicmF3IiwicmFkaXVzIiwiaXMyRCIsImluY3JlbWVudCIsImNsb3Nlc3QiLCJyb3VuZGluZ0luY3JlbWVudCIsInJldHVybkZ1bmN0aW9uIiwiX3dyYXBBcnJheSIsIndyYXBwZXIiLCJfcmVwbGFjZVJhbmRvbSIsIm51bXMiLCJpbk1pbiIsImluTWF4Iiwib3V0TWluIiwib3V0TWF4IiwiaW5SYW5nZSIsIm91dFJhbmdlIiwiX2dldExhYmVsSW5EaXJlY3Rpb24iLCJmcm9tVGltZSIsImJhY2t3YXJkIiwiZGlzdGFuY2UiLCJleGVjdXRlTGF6eUZpcnN0IiwicHJldkNvbnRleHQiLCJjYWxsYmFja1Njb3BlIiwiX2ludGVycnVwdCIsIl9yZWdpc3RlclBsdWdpblF1ZXVlIiwiX2NyZWF0ZVBsdWdpbiIsImlzRnVuYyIsImluc3RhbmNlRGVmYXVsdHMiLCJfcmVuZGVyUHJvcFR3ZWVucyIsIl9hZGRQcm9wVHdlZW4iLCJfa2lsbFByb3BUd2VlbnNPZiIsIm1vZGlmaWVyIiwiX2FkZFBsdWdpbk1vZGlmaWVyIiwic3RhdGljcyIsImdldFNldHRlciIsIl9nZXRTZXR0ZXIiLCJfMjU1IiwiX2NvbG9yTG9va3VwIiwiYXF1YSIsImxpbWUiLCJzaWx2ZXIiLCJibGFjayIsIm1hcm9vbiIsInRlYWwiLCJibHVlIiwibmF2eSIsIndoaXRlIiwib2xpdmUiLCJ5ZWxsb3ciLCJvcmFuZ2UiLCJncmF5IiwicHVycGxlIiwiZ3JlZW4iLCJyZWQiLCJwaW5rIiwiY3lhbiIsInRyYW5zcGFyZW50IiwiX2h1ZSIsIm0xIiwibTIiLCJzcGxpdENvbG9yIiwidG9IU0wiLCJmb3JjZUFscGhhIiwiZyIsIndhc0hTTCIsInBhcnNlSW50IiwiTnVtYmVyIiwiX2NvbG9yT3JkZXJEYXRhIiwiX2NvbG9yRXhwIiwiX2Zvcm1hdENvbG9ycyIsIm9yZGVyTWF0Y2hEYXRhIiwic2hlbGwiLCJjb2xvcnMiLCJSZWdFeHAiLCJfaHNsRXhwIiwiX2NvbG9yU3RyaW5nRmlsdGVyIiwiY29tYmluZWQiLCJsYXN0SW5kZXgiLCJfaWQiLCJfcmVxIiwiX3JhZiIsIl9zZWxmIiwiX2RlbHRhIiwiX2xhZ1RocmVzaG9sZCIsIl9hZGp1c3RlZExhZyIsIl9zdGFydFRpbWUiLCJfbGFzdFVwZGF0ZSIsIl9nYXAiLCJfbmV4dFRpbWUiLCJfdGljayIsIm92ZXJsYXAiLCJkaXNwYXRjaCIsImVsYXBzZWQiLCJtYW51YWwiLCJ0aWNrIiwiZGVsdGFSYXRpbyIsImZwcyIsIndha2UiLCJnc2FwVmVyc2lvbnMiLCJHcmVlblNvY2tHbG9iYWxzIiwic2xlZXAiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImNsZWFyVGltZW91dCIsImxhZ1Ntb290aGluZyIsImFkanVzdGVkTGFnIiwiSW5maW5pdHkiLCJfZnBzIiwicHJpb3JpdGl6ZSIsIl9lYXNlTWFwIiwiX2N1c3RvbUVhc2VFeHAiLCJfcXVvdGVzRXhwIiwiX3BhcnNlT2JqZWN0SW5TdHJpbmciLCJ2YWwiLCJwYXJzZWRWYWwiLCJsYXN0SW5kZXhPZiIsIl9wcm9wYWdhdGVZb3lvRWFzZSIsImlzWW95byIsIl9maXJzdCIsInlveW9FYXNlIiwiX3lveW8iLCJfZWFzZSIsIl95RWFzZSIsImRlZmF1bHRFYXNlIiwib3BlbiIsImNsb3NlIiwic3Vic3RyaW5nIiwiX0NFIiwiX2NvbmZpZ0Vhc2VGcm9tU3RyaW5nIiwiX2luc2VydEVhc2UiLCJlYXNlSW4iLCJlYXNlSW5PdXQiLCJsb3dlcmNhc2VOYW1lIiwiX2Vhc2VJbk91dEZyb21PdXQiLCJfY29uZmlnRWxhc3RpYyIsImFtcGxpdHVkZSIsInBlcmlvZCIsInAzIiwiYXNpbiIsIl9jb25maWdCYWNrIiwib3ZlcnNob290IiwicG93ZXIiLCJMaW5lYXIiLCJlYXNlTm9uZSIsIm5vbmUiLCJTdGVwcGVkRWFzZSIsInN0ZXBzIiwiaW1tZWRpYXRlU3RhcnQiLCJyZXBlYXREZWxheSIsInlveW8iLCJzdGFydFRpbWUiLCJfdG90YWxUaW1lIiwiX3B0TG9va3VwIiwiX3BUaW1lIiwiaXRlcmF0aW9uIiwiX3BzIiwiX3JlY2FjaGVBbmNlc3RvcnMiLCJpbmNsdWRlUmVwZWF0cyIsIndyYXBSZXBlYXRzIiwicHJldklzUmV2ZXJ0aW5nIiwiZ2xvYmFsVGltZSIsIl9zYXQiLCJpbmNsdWRlRGVsYXkiLCJhdFRpbWUiLCJyZXN1bWUiLCJfb25VcGRhdGUiLCJ0aGVuIiwib25GdWxmaWxsZWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9yZXNvbHZlIiwiX3RoZW4iLCJfcHJvbSIsIl9BbmltYXRpb24iLCJfdGhpcyIsInNvcnRDaGlsZHJlbiIsIl9wcm90bzIiLCJmcm9tVG8iLCJmcm9tVmFycyIsInRvVmFycyIsInN0YWdnZXJUbyIsInN0YWdnZXIiLCJvbkNvbXBsZXRlQWxsIiwib25Db21wbGV0ZUFsbFBhcmFtcyIsIm9uQ29tcGxldGVQYXJhbXMiLCJzdGFnZ2VyRnJvbSIsInN0YWdnZXJGcm9tVG8iLCJwcmV2UGF1c2VkIiwicGF1c2VUd2VlbiIsInByZXZTdGFydCIsInByZXZJdGVyYXRpb24iLCJwcmV2VGltZSIsInREdXIiLCJjcm9zc2luZ1N0YXJ0IiwicmV3aW5kaW5nIiwiZG9lc1dyYXAiLCJyZXBlYXRSZWZyZXNoIiwib25SZXBlYXQiLCJfaGFzUGF1c2UiLCJfZm9yY2luZyIsIl9sYXN0IiwiX2ZpbmROZXh0UGF1c2VUd2VlbiIsImFkanVzdGVkVGltZSIsIl90aGlzMiIsImFkZExhYmVsIiwiZ2V0Q2hpbGRyZW4iLCJ0d2VlbnMiLCJ0aW1lbGluZXMiLCJpZ25vcmVCZWZvcmVUaW1lIiwiYW5pbWF0aW9ucyIsInJlbW92ZUxhYmVsIiwia2lsbFR3ZWVuc09mIiwiX3RvdGFsVGltZTIiLCJhZGRQYXVzZSIsInJlbW92ZVBhdXNlIiwib25seUFjdGl2ZSIsImdldFR3ZWVuc09mIiwiX292ZXJ3cml0aW5nVHdlZW4iLCJwYXJzZWRUYXJnZXRzIiwiaXNHbG9iYWxUaW1lIiwiX3RhcmdldHMiLCJfb25TdGFydCIsIm9uU3RhcnRQYXJhbXMiLCJ0d2VlbkZyb21UbyIsImZyb21Qb3NpdGlvbiIsInRvUG9zaXRpb24iLCJuZXh0TGFiZWwiLCJhZnRlclRpbWUiLCJwcmV2aW91c0xhYmVsIiwiYmVmb3JlVGltZSIsImN1cnJlbnRMYWJlbCIsInNoaWZ0Q2hpbGRyZW4iLCJhZGp1c3RMYWJlbHMiLCJjbGVhciIsImluY2x1ZGVMYWJlbHMiLCJ1cGRhdGVSb290IiwiX2ZvcmNlQWxsUHJvcFR3ZWVucyIsIl9hZGRDb21wbGV4U3RyaW5nUHJvcFR3ZWVuIiwic2V0dGVyIiwic3RyaW5nRmlsdGVyIiwiZnVuY1BhcmFtIiwic3RhcnROdW1zIiwiZW5kTnVtIiwiY2h1bmsiLCJzdGFydE51bSIsImhhc1JhbmRvbSIsIl9yZW5kZXJDb21wbGV4U3RyaW5nIiwibWF0Y2hJbmRleCIsImZwIiwib3B0aW9uYWwiLCJjdXJyZW50VmFsdWUiLCJfc2V0dGVyRnVuY1dpdGhQYXJhbSIsIl9zZXR0ZXJGdW5jIiwiX3NldHRlclBsYWluIiwiX3JlbmRlckJvb2xlYW4iLCJfcmVuZGVyUGxhaW4iLCJfY2hlY2tQbHVnaW4iLCJwdExvb2t1cCIsIl9wYXJzZUZ1bmNPclN0cmluZyIsIl9wcm9jZXNzVmFycyIsInByaW9yaXR5IiwiY2xlYW5WYXJzIiwiaGFzUHJpb3JpdHkiLCJnc0RhdGEiLCJoYXJuZXNzVmFycyIsIm92ZXJ3cml0dGVuIiwicHJldlN0YXJ0QXQiLCJmdWxsVGFyZ2V0cyIsImF1dG9PdmVyd3JpdGUiLCJfb3ZlcndyaXRlIiwiX2Zyb20iLCJfcHRDYWNoZSIsIl9vcCIsIl9zb3J0UHJvcFR3ZWVuc0J5UHJpb3JpdHkiLCJfb25Jbml0IiwiX3BhcnNlS2V5ZnJhbWUiLCJhbGxQcm9wcyIsImVhc2VFYWNoIiwiX3N0YWdnZXJUd2VlblByb3BzIiwiX3N0YWdnZXJQcm9wc1RvU2tpcCIsIl9BbmltYXRpb24yIiwic2tpcEluaGVyaXQiLCJfdGhpczMiLCJjdXJUYXJnZXQiLCJzdGFnZ2VyRnVuYyIsInN0YWdnZXJWYXJzVG9NZXJnZSIsIl90aGlzMyR2YXJzIiwia2YiLCJfcHJvdG8zIiwiaXNOZWdhdGl2ZSIsInByZXZSYXRpbyIsIl9yZW5kZXJaZXJvRHVyYXRpb25Ud2VlbiIsInN0YXJ0SXNSZWxhdGl2ZSIsInJvb3RQVCIsInB0Q2FjaGUiLCJfdXBkYXRlUHJvcFR3ZWVucyIsIm92ZXJ3cml0dGVuUHJvcHMiLCJjdXJMb29rdXAiLCJjdXJPdmVyd3JpdGVQcm9wcyIsImtpbGxpbmdUYXJnZXRzIiwicHJvcFR3ZWVuTG9va3VwIiwiZmlyc3RQVCIsImExIiwiX2FycmF5c01hdGNoIiwicHJvcGVydHlBbGlhc2VzIiwiX2FkZEFsaWFzZXNUb1ZhcnMiLCJvblJldmVyc2VDb21wbGV0ZSIsIm9uUmV2ZXJzZUNvbXBsZXRlUGFyYW1zIiwiX3NldHRlckF0dHJpYnV0ZSIsImhhc05vbkRlcGVuZGVudFJlbWFpbmluZyIsImRlcCIsIl9zZXR0ZXJXaXRoTW9kaWZpZXIiLCJtU2V0IiwibXQiLCJwdDIiLCJmaXJzdCIsImxhc3QiLCJwciIsInJlbmRlcmVyIiwiVHdlZW5NYXgiLCJUd2VlbkxpdGUiLCJUaW1lbGluZUxpdGUiLCJUaW1lbGluZU1heCIsIl9tZWRpYSIsIl9sYXN0TWVkaWFUaW1lIiwiX2NvbnRleHRJRCIsIl9vbk1lZGlhQ2hhbmdlIiwiYW55TWF0Y2giLCJxdWVyaWVzIiwiY29uZGl0aW9ucyIsIm9uTWF0Y2giLCJDb250ZXh0IiwiX3IiLCJfcHJvdG81IiwicHJldlNlbGVjdG9yIiwiZ2V0VHdlZW5zIiwiX3RoaXM0IiwiTWF0Y2hNZWRpYSIsImNvbnRleHRzIiwiX3Byb3RvNiIsIm1xIiwiYWN0aXZlIiwiY29uZCIsImFkZExpc3RlbmVyIiwiX2xlbjIiLCJfa2V5MiIsImdldHRlciIsImZvcm1hdCIsInNldHRlcnMiLCJxdWlja1RvIiwiX21lcmdlMiIsImlzVHdlZW5pbmciLCJyZWdpc3RlckVmZmVjdCIsImVmZmVjdCIsInBsdWdpbnMiLCJleHRlbmRUaW1lbGluZSIsInBsdWdpbk5hbWUiLCJyZWdpc3RlckVhc2UiLCJwYXJzZUVhc2UiLCJleHBvcnRSb290IiwiaW5jbHVkZURlbGF5ZWRDYWxscyIsIm1hdGNoTWVkaWFSZWZyZXNoIiwiZm91bmQiLCJyYW5nZSIsIndyYXBZb3lvIiwidG90YWwiLCJwaXBlIiwiX2xlbiIsImZ1bmN0aW9ucyIsIl9rZXkiLCJyZWR1Y2UiLCJ1bml0aXplIiwiaW50ZXJwb2xhdGUiLCJtdXRhdGUiLCJpbnRlcnBvbGF0b3JzIiwiaWwiLCJpc1N0cmluZyIsIm1hc3RlciIsImluc3RhbGwiLCJlZmZlY3RzIiwiZ2xvYmFsVGltZWxpbmUiLCJ0b0FkZCIsIl9nZXRQbHVnaW5Qcm9wVHdlZW4iLCJfYnVpbGRNb2RpZmllclBsdWdpbiIsIl9hZGRNb2RpZmllcnMiLCJQb3dlcjAiLCJQb3dlcjEiLCJQb3dlcjIiLCJQb3dlcjMiLCJQb3dlcjQiLCJRdWFkIiwiQ3ViaWMiLCJRdWFydCIsIlF1aW50IiwiU3Ryb25nIiwiRWxhc3RpYyIsIkJhY2siLCJCb3VuY2UiLCJTaW5lIiwiRXhwbyIsIkNpcmMiLCJfcGx1Z2luSW5pdHRlZCIsIl90ZW1wRGl2IiwiX3JlY2VudFNldHRlclBsdWdpbiIsIl9zdXBwb3J0czNEIiwiX3RyYW5zZm9ybVByb3BzIiwiX2hvcml6b250YWxFeHAiLCJfY29tcGxleEV4cCIsIl9wcm9wZXJ0eUFsaWFzZXMiLCJhdXRvQWxwaGEiLCJhbHBoYSIsIl9yZW5kZXJDU1NQcm9wIiwiX3JlbmRlclByb3BXaXRoRW5kIiwiX3JlbmRlckNTU1Byb3BXaXRoQmVnaW5uaW5nIiwiX3JlbmRlclJvdW5kZWRDU1NQcm9wIiwiX3JlbmRlck5vblR3ZWVuaW5nVmFsdWUiLCJfcmVuZGVyTm9uVHdlZW5pbmdWYWx1ZU9ubHlBdEVuZCIsIl9zZXR0ZXJDU1NTdHlsZSIsIl9zZXR0ZXJDU1NQcm9wIiwic2V0UHJvcGVydHkiLCJfc2V0dGVyVHJhbnNmb3JtIiwiX3NldHRlclNjYWxlIiwiX3NldHRlclNjYWxlV2l0aFJlbmRlciIsIl9zZXR0ZXJUcmFuc2Zvcm1XaXRoUmVuZGVyIiwiX3NhdmVTdHlsZSIsImlzTm90Q1NTIiwidGZtIiwiX2dldCIsInN2Z28iLCJfcmVtb3ZlSW5kZXBlbmRlbnRUcmFuc2Zvcm1zIiwidHJhbnNsYXRlIiwiX3JldmVydFN0eWxlIiwicHJvcGVydGllcyIsInNhdmVyIiwic2F2ZSIsIl9jcmVhdGVFbGVtZW50IiwiX2dldENvbXB1dGVkUHJvcGVydHkiLCJza2lwUHJlZml4RmFsbGJhY2siLCJnZXRQcm9wZXJ0eVZhbHVlIiwiX2NoZWNrUHJvcFByZWZpeCIsIl9wcmVmaXhlcyIsInByZWZlclByZWZpeCIsIl9nZXRCQm94SGFjayIsInN3YXBJZlBvc3NpYmxlIiwib2xkUGFyZW50Iiwib2xkU2libGluZyIsIm5leHRTaWJsaW5nIiwib2xkQ1NTIiwiX2dzYXBCQm94IiwiX2dldEF0dHJpYnV0ZUZhbGxiYWNrcyIsImF0dHJpYnV0ZXNBcnJheSIsImhhc0F0dHJpYnV0ZSIsIl9nZXRCQm94IiwiZXJyb3IiLCJfaXNTVkciLCJfcmVtb3ZlUHJvcGVydHkiLCJyZW1vdmVBdHRyaWJ1dGUiLCJfYWRkTm9uVHdlZW5pbmdQVCIsImJlZ2lubmluZyIsIm9ubHlTZXRBdEVuZCIsIl9ub25Db252ZXJ0aWJsZVVuaXRzIiwiZGVnIiwicmFkIiwidHVybiIsIl9ub25TdGFuZGFyZExheW91dHMiLCJmbGV4IiwiX2NvbnZlcnRUb1VuaXQiLCJweCIsImlzU1ZHIiwiY3VyVmFsdWUiLCJjdXJVbml0IiwibWVhc3VyZVByb3BlcnR5IiwidG9QaXhlbHMiLCJ0b1BlcmNlbnQiLCJfcGFyc2VUcmFuc2Zvcm0iLCJfZmlyc3RUd29Pbmx5Iiwiek9yaWdpbiIsIl9zcGVjaWFsUHJvcHMiLCJfdHdlZW5Db21wbGV4Q1NTU3RyaW5nIiwic3RhcnRWYWx1ZXMiLCJzdGFydFZhbHVlIiwiZW5kVW5pdCIsInN0YXJ0VW5pdCIsIl9rZXl3b3JkVG9QZXJjZW50IiwiX3JlbmRlckNsZWFyUHJvcHMiLCJjbGVhclRyYW5zZm9ybXMiLCJjbGVhclByb3BzIiwiX2lkZW50aXR5MkRNYXRyaXgiLCJfcm90YXRpb25hbFByb3BlcnRpZXMiLCJfaXNOdWxsVHJhbnNmb3JtIiwiX2dldENvbXB1dGVkVHJhbnNmb3JtTWF0cml4QXNBcnJheSIsIm1hdHJpeFN0cmluZyIsIl9nZXRNYXRyaXgiLCJmb3JjZTJEIiwiYWRkZWRUb0RPTSIsImNvbnNvbGlkYXRlIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiX2FwcGx5U1ZHT3JpZ2luIiwib3JpZ2luSXNBYnNvbHV0ZSIsIm1hdHJpeEFycmF5IiwicGx1Z2luVG9BZGRQcm9wVHdlZW5zVG8iLCJ4T3JpZ2luT2xkIiwieE9yaWdpbiIsInlPcmlnaW5PbGQiLCJ5T3JpZ2luIiwieE9mZnNldE9sZCIsInhPZmZzZXQiLCJ5T2Zmc2V0T2xkIiwieU9mZnNldCIsIm9yaWdpblNwbGl0IiwieiIsInBlcnNwZWN0aXZlIiwiYTEyIiwiYTIyIiwidDMiLCJhMTMiLCJhMjMiLCJhMzMiLCJhNDIiLCJhNDMiLCJhMzIiLCJpbnZlcnRlZFNjYWxlWCIsImZvcmNlQ1NTIiwidHJhbnNmb3JtUGVyc3BlY3RpdmUiLCJfcmVuZGVyU1ZHVHJhbnNmb3JtcyIsIl9yZW5kZXJDU1NUcmFuc2Zvcm1zIiwiX3JlbmRlck5vbjNEVHJhbnNmb3JtcyIsIl9hZGRQeFRyYW5zbGF0ZSIsIl96ZXJvRGVnIiwiX3plcm9QeCIsIl9lbmRQYXJlbnRoZXNpcyIsInRyYW5zZm9ybXMiLCJ1c2UzRCIsImExMSIsImEyMSIsInRhbiIsIl9hZGRSb3RhdGlvbmFsUHJvcFR3ZWVuIiwiY2FwIiwiZmluYWxWYWx1ZSIsIl9hc3NpZ24iLCJfYWRkUmF3VHJhbnNmb3JtUFRzIiwiZW5kQ2FjaGUiLCJzdGFydENhY2hlIiwicG9zaXRpb25BbmRTY2FsZSIsImFsbCIsIkNTU1BsdWdpbiIsInNwZWNpYWxQcm9wIiwiaXNUcmFuc2Zvcm1SZWxhdGVkIiwidHJhbnNmb3JtUHJvcFR3ZWVuIiwiaW5saW5lUHJvcHMiLCJ2aXNpYmlsaXR5IiwicGFyc2VUcmFuc2Zvcm0iLCJzbW9vdGhPcmlnaW4iLCJhdXRvUm91bmQiLCJnc2FwV2l0aENTUyIsImltYWdlc0xvYWRlZCIsIiQiLCJqUXVlcnkiLCJJbWFnZXNMb2FkZWQiLCJlbGVtIiwib3B0aW9ucyIsIm9uQWx3YXlzIiwicXVlcnlFbGVtIiwiYXNzaWduIiwiZ2V0SW1hZ2VzIiwianFEZWZlcnJlZCIsIkRlZmVycmVkIiwiY2hlY2siLCJpbWFnZXMiLCJhZGRFbGVtZW50SW1hZ2VzIiwiZWxlbWVudE5vZGVUeXBlcyIsImFkZEltYWdlIiwiYmFja2dyb3VuZCIsImFkZEVsZW1lbnRCYWNrZ3JvdW5kSW1hZ2VzIiwiY2hpbGRJbWdzIiwiaW1nIiwicmVVUkwiLCJMb2FkaW5nSW1hZ2UiLCJCYWNrZ3JvdW5kIiwidXJsIiwiSW1hZ2UiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJhZGRCYWNrZ3JvdW5kIiwibG9hZGluZ0ltYWdlIiwicHJvZ3Jlc3NlZENvdW50IiwiaGFzQW55QnJva2VuIiwiY29tcGxldGUiLCJvblByb2dyZXNzIiwiaW1hZ2UiLCJpc0xvYWRlZCIsIm5vdGlmeSIsImRlYnVnIiwiaXNDb21wbGV0ZSIsImpxTWV0aG9kIiwiZ2V0SXNJbWFnZUNvbXBsZXRlIiwiY29uZmlybSIsIm5hdHVyYWxXaWR0aCIsInByb3h5SW1hZ2UiLCJjcm9zc09yaWdpbiIsInNyYyIsImN1cnJlbnRTcmMiLCJoYW5kbGVFdmVudCIsIm1ldGhvZCIsIm9ubG9hZCIsInVuYmluZEV2ZW50cyIsIm9uZXJyb3IiLCJtYWtlSlF1ZXJ5UGx1Z2luIiwiZm4iLCJwcm9taXNlIiwiZXh0ZW5kIiwia2V5cyIsInNzckRvY3VtZW50IiwiYWN0aXZlRWxlbWVudCIsImJsdXIiLCJnZXRFbGVtZW50QnlJZCIsImluaXRFdmVudCIsImNoaWxkTm9kZXMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImltcG9ydE5vZGUiLCJsb2NhdGlvbiIsImhhc2giLCJob3N0IiwiaG9zdG5hbWUiLCJocmVmIiwicGF0aG5hbWUiLCJwcm90b2NvbCIsInNlYXJjaCIsInNzcldpbmRvdyIsInJlcGxhY2VTdGF0ZSIsInB1c2hTdGF0ZSIsImdvIiwiYmFjayIsIkN1c3RvbUV2ZW50Iiwic2NyZWVuIiwid2luIiwiRG9tNyIsIml0ZW1zIiwic3VwZXIiLCJtYWtlUmVhY3RpdmUiLCJhcnJheUZsYXQiLCJhcnIiLCJyZXMiLCJhcnJheUZpbHRlciIsImh0bWwiLCJ0b0NyZWF0ZSIsInRlbXBQYXJlbnQiLCJpbm5lckhUTUwiLCJxc2EiLCJ1bmlxdWVBcnJheSIsImFycmF5VW5pcXVlIiwibm9UcmlnZ2VyIiwic2hvcnRjdXQiLCJNZXRob2RzIiwiYWRkQ2xhc3MiLCJjbGFzc2VzIiwiY2xhc3NOYW1lcyIsInJlbW92ZUNsYXNzIiwiaGFzQ2xhc3MiLCJjb250YWlucyIsInRvZ2dsZSIsImF0dHJOYW1lIiwicmVtb3ZlQXR0ciIsInRyYW5zaXRpb24iLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJldmVudFR5cGUiLCJ0YXJnZXRTZWxlY3RvciIsImhhbmRsZUxpdmVFdmVudCIsImRvbTdFdmVudERhdGEiLCJpcyIsInBhcmVudHMiLCJrIiwiZG9tN0xpdmVMaXN0ZW5lcnMiLCJwcm94eUxpc3RlbmVyIiwiZG9tN0xpc3RlbmVycyIsImhhbmRsZXJzIiwiaGFuZGxlciIsImRvbTdwcm94eSIsImV2dCIsImRldGFpbCIsImJ1YmJsZXMiLCJjYW5jZWxhYmxlIiwiZGF0YUluZGV4IiwidHJhbnNpdGlvbkVuZCIsImRvbSIsImZpcmVDYWxsQmFjayIsImluY2x1ZGVNYXJnaW5zIiwib3V0ZXJIZWlnaHQiLCJib3giLCJ0ZXh0IiwidGV4dENvbnRlbnQiLCJjb21wYXJlV2l0aCIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsIm1zTWF0Y2hlc1NlbGVjdG9yIiwicHJldmlvdXNTaWJsaW5nIiwiZXEiLCJyZXR1cm5JbmRleCIsImFwcGVuZCIsImVscyIsIm5ld0NoaWxkIiwidGVtcERpdiIsImZpcnN0Q2hpbGQiLCJwcmVwZW5kIiwibmV4dEFsbCIsIm5leHRFbHMiLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwicHJldkFsbCIsInByZXZFbHMiLCJmaW5kIiwiZm91bmRFbGVtZW50cyIsIm1ldGhvZE5hbWUiLCJjdXJUcmFuc2Zvcm0iLCJ0cmFuc2Zvcm1NYXRyaXgiLCJjdXJTdHlsZSIsImN1cnJlbnRTdHlsZSIsIldlYktpdENTU01hdHJpeCIsIndlYmtpdFRyYW5zZm9ybSIsIk1velRyYW5zZm9ybSIsIk9UcmFuc2Zvcm0iLCJNc1RyYW5zZm9ybSIsIm1zVHJhbnNmb3JtIiwidG9TdHJpbmciLCJtNDEiLCJtNDIiLCJub0V4dGVuZCIsIm5leHRTb3VyY2UiLCJIVE1MRWxlbWVudCIsImtleXNBcnJheSIsIm5leHRJbmRleCIsImxlbiIsIm5leHRLZXkiLCJkZXNjIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX19zd2lwZXJfXyIsInZhck5hbWUiLCJ2YXJWYWx1ZSIsImFuaW1hdGVDU1NNb2RlU2Nyb2xsIiwic3dpcGVyIiwidGFyZ2V0UG9zaXRpb24iLCJzdGFydFBvc2l0aW9uIiwic3BlZWQiLCJ3cmFwcGVyRWwiLCJjc3NNb2RlRnJhbWVJRCIsImRpciIsImlzT3V0T2ZCb3VuZCIsImFuaW1hdGUiLCJnZXRUaW1lIiwiZWFzZVByb2dyZXNzIiwiY3VycmVudFBvc2l0aW9uIiwic3VwcG9ydCIsImRldmljZUNhY2hlZCIsImJyb3dzZXIiLCJnZXRTdXBwb3J0Iiwic21vb3RoU2Nyb2xsIiwidG91Y2giLCJEb2N1bWVudFRvdWNoIiwicGFzc2l2ZUxpc3RlbmVyIiwic3VwcG9ydHNQYXNzaXZlIiwib3B0cyIsImdlc3R1cmVzIiwiY2FsY1N1cHBvcnQiLCJnZXREZXZpY2UiLCJvdmVycmlkZXMiLCJwbGF0Zm9ybSIsInVhIiwiZGV2aWNlIiwiaW9zIiwiYW5kcm9pZCIsInNjcmVlbldpZHRoIiwic2NyZWVuSGVpZ2h0IiwiaXBhZCIsImlwb2QiLCJpcGhvbmUiLCJ3aW5kb3dzIiwibWFjb3MiLCJjYWxjRGV2aWNlIiwiZ2V0QnJvd3NlciIsImlzU2FmYXJpIiwiaXNXZWJWaWV3IiwiY2FsY0Jyb3dzZXIiLCJldmVudHNMaXN0ZW5lcnMiLCJkZXN0cm95ZWQiLCJvbmNlSGFuZGxlciIsIl9fZW1pdHRlclByb3h5Iiwib25BbnkiLCJldmVudHNBbnlMaXN0ZW5lcnMiLCJvZmZBbnkiLCJldmVudEhhbmRsZXIiLCJlbWl0IiwidXBkYXRlU2l6ZSIsIiRlbCIsImlzSG9yaXpvbnRhbCIsInVwZGF0ZVNsaWRlcyIsImdldERpcmVjdGlvbkxhYmVsIiwiZ2V0RGlyZWN0aW9uUHJvcGVydHlWYWx1ZSIsIiR3cmFwcGVyRWwiLCJzd2lwZXJTaXplIiwicnRsVHJhbnNsYXRlIiwicnRsIiwid3JvbmdSVEwiLCJpc1ZpcnR1YWwiLCJ2aXJ0dWFsIiwicHJldmlvdXNTbGlkZXNMZW5ndGgiLCJzbGlkZXMiLCJzbGlkZUNsYXNzIiwic2xpZGVzTGVuZ3RoIiwic25hcEdyaWQiLCJzbGlkZXNHcmlkIiwic2xpZGVzU2l6ZXNHcmlkIiwib2Zmc2V0QmVmb3JlIiwic2xpZGVzT2Zmc2V0QmVmb3JlIiwib2Zmc2V0QWZ0ZXIiLCJzbGlkZXNPZmZzZXRBZnRlciIsInByZXZpb3VzU25hcEdyaWRMZW5ndGgiLCJwcmV2aW91c1NsaWRlc0dyaWRMZW5ndGgiLCJzcGFjZUJldHdlZW4iLCJzbGlkZVBvc2l0aW9uIiwicHJldlNsaWRlU2l6ZSIsInZpcnR1YWxTaXplIiwibWFyZ2luTGVmdCIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblRvcCIsIm1hcmdpblJpZ2h0IiwiY2VudGVyZWRTbGlkZXMiLCJjc3NNb2RlIiwiZ3JpZEVuYWJsZWQiLCJyb3dzIiwic2xpZGVTaXplIiwiaW5pdFNsaWRlcyIsInNob3VsZFJlc2V0U2xpZGVTaXplIiwic2xpZGVzUGVyVmlldyIsImJyZWFrcG9pbnRzIiwic2xpZGUiLCJ1cGRhdGVTbGlkZSIsInNsaWRlU3R5bGVzIiwiY3VycmVudFRyYW5zZm9ybSIsImN1cnJlbnRXZWJLaXRUcmFuc2Zvcm0iLCJyb3VuZExlbmd0aHMiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsInN3aXBlclNsaWRlU2l6ZSIsInNsaWRlc1Blckdyb3VwIiwic2xpZGVzUGVyR3JvdXBTa2lwIiwic2V0V3JhcHBlclNpemUiLCJ1cGRhdGVXcmFwcGVyU2l6ZSIsIm5ld1NsaWRlc0dyaWQiLCJzbGlkZXNHcmlkSXRlbSIsIl8iLCJzbGlkZUluZGV4IiwiY2VudGVyZWRTbGlkZXNCb3VuZHMiLCJhbGxTbGlkZXNTaXplIiwic2xpZGVTaXplVmFsdWUiLCJtYXhTbmFwIiwiY2VudGVySW5zdWZmaWNpZW50U2xpZGVzIiwiYWxsU2xpZGVzT2Zmc2V0Iiwic25hcEluZGV4IiwiYWRkVG9TbmFwR3JpZCIsImFkZFRvU2xpZGVzR3JpZCIsIndhdGNoT3ZlcmZsb3ciLCJjaGVja092ZXJmbG93Iiwid2F0Y2hTbGlkZXNQcm9ncmVzcyIsInVwZGF0ZVNsaWRlc09mZnNldCIsImJhY2tGYWNlSGlkZGVuQ2xhc3MiLCJjb250YWluZXJNb2RpZmllckNsYXNzIiwiaGFzQ2xhc3NCYWNrZmFjZUNsYXNzQWRkZWQiLCJtYXhCYWNrZmFjZUhpZGRlblNsaWRlcyIsInVwZGF0ZUF1dG9IZWlnaHQiLCJhY3RpdmVTbGlkZXMiLCJuZXdIZWlnaHQiLCJzZXRUcmFuc2l0aW9uIiwiZ2V0U2xpZGVCeUluZGV4IiwidmlzaWJsZVNsaWRlcyIsImFjdGl2ZUluZGV4Iiwic3dpcGVyU2xpZGVPZmZzZXQiLCJ1cGRhdGVTbGlkZXNQcm9ncmVzcyIsIm9mZnNldENlbnRlciIsInNsaWRlVmlzaWJsZUNsYXNzIiwidmlzaWJsZVNsaWRlc0luZGV4ZXMiLCJzbGlkZU9mZnNldCIsInNsaWRlUHJvZ3Jlc3MiLCJtaW5UcmFuc2xhdGUiLCJvcmlnaW5hbFNsaWRlUHJvZ3Jlc3MiLCJzbGlkZUJlZm9yZSIsInNsaWRlQWZ0ZXIiLCJvcmlnaW5hbFByb2dyZXNzIiwidXBkYXRlUHJvZ3Jlc3MiLCJ0cmFuc2xhdGVzRGlmZiIsIm1heFRyYW5zbGF0ZSIsImlzQmVnaW5uaW5nIiwiaXNFbmQiLCJ3YXNCZWdpbm5pbmciLCJ3YXNFbmQiLCJhdXRvSGVpZ2h0IiwidXBkYXRlU2xpZGVzQ2xhc3NlcyIsInJlYWxJbmRleCIsImFjdGl2ZVNsaWRlIiwic2xpZGVBY3RpdmVDbGFzcyIsInNsaWRlTmV4dENsYXNzIiwic2xpZGVQcmV2Q2xhc3MiLCJzbGlkZUR1cGxpY2F0ZUFjdGl2ZUNsYXNzIiwic2xpZGVEdXBsaWNhdGVOZXh0Q2xhc3MiLCJzbGlkZUR1cGxpY2F0ZVByZXZDbGFzcyIsImxvb3AiLCJzbGlkZUR1cGxpY2F0ZUNsYXNzIiwibmV4dFNsaWRlIiwicHJldlNsaWRlIiwiZW1pdFNsaWRlc0NsYXNzZXMiLCJ1cGRhdGVBY3RpdmVJbmRleCIsIm5ld0FjdGl2ZUluZGV4IiwicHJldmlvdXNJbmRleCIsInByZXZpb3VzUmVhbEluZGV4IiwicHJldmlvdXNTbmFwSW5kZXgiLCJub3JtYWxpemVTbGlkZUluZGV4Iiwic2tpcCIsImluaXRpYWxpemVkIiwicnVuQ2FsbGJhY2tzT25Jbml0IiwidXBkYXRlQ2xpY2tlZFNsaWRlIiwic2xpZGVGb3VuZCIsImNsaWNrZWRTbGlkZSIsImNsaWNrZWRJbmRleCIsInNsaWRlVG9DbGlja2VkU2xpZGUiLCJnZXRUcmFuc2xhdGUiLCJ2aXJ0dWFsVHJhbnNsYXRlIiwiY3VycmVudFRyYW5zbGF0ZSIsInNldFRyYW5zbGF0ZSIsImJ5Q29udHJvbGxlciIsIm5ld1Byb2dyZXNzIiwicHJldmlvdXNUcmFuc2xhdGUiLCJ0cmFuc2xhdGVUbyIsInJ1bkNhbGxiYWNrcyIsInRyYW5zbGF0ZUJvdW5kcyIsImludGVybmFsIiwiYW5pbWF0aW5nIiwicHJldmVudEludGVyYWN0aW9uT25UcmFuc2l0aW9uIiwibmV3VHJhbnNsYXRlIiwiaXNIIiwiYmVoYXZpb3IiLCJvblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQiLCJ0cmFuc2l0aW9uRW1pdCIsInN0ZXAiLCJzbGlkZVRvIiwiaW5pdGlhbCIsIkVycm9yIiwiaW5kZXhBc051bWJlciIsImlzRmluaXRlIiwibm9ybWFsaXplZFRyYW5zbGF0ZSIsIm5vcm1hbGl6ZWRHcmlkIiwibm9ybWFsaXplZEdyaWROZXh0IiwiYWxsb3dTbGlkZU5leHQiLCJhbGxvd1NsaWRlUHJldiIsInRyYW5zaXRpb25TdGFydCIsIl9pbW1lZGlhdGVWaXJ0dWFsIiwiX3N3aXBlckltbWVkaWF0ZVZpcnR1YWwiLCJvblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCIsInNsaWRlVG9Mb29wIiwibmV3SW5kZXgiLCJsb29wZWRTbGlkZXMiLCJzbGlkZU5leHQiLCJwZXJHcm91cCIsInNsaWRlc1Blckdyb3VwQXV0byIsInNsaWRlc1BlclZpZXdEeW5hbWljIiwibG9vcFByZXZlbnRzU2xpZGUiLCJsb29wRml4IiwiX2NsaWVudExlZnQiLCJyZXdpbmQiLCJzbGlkZVByZXYiLCJub3JtYWxpemVkU25hcEdyaWQiLCJwcmV2U25hcCIsInByZXZTbmFwSW5kZXgiLCJwcmV2SW5kZXgiLCJzbGlkZVJlc2V0Iiwic2xpZGVUb0Nsb3Nlc3QiLCJjdXJyZW50U25hcCIsInNsaWRlVG9JbmRleCIsImxvb3BDcmVhdGUiLCIkc2VsZWN0b3IiLCJsb29wRmlsbEdyb3VwV2l0aEJsYW5rIiwiYmxhbmtTbGlkZXNOdW0iLCJibGFua05vZGUiLCJzbGlkZUJsYW5rQ2xhc3MiLCJsb29wQWRkaXRpb25hbFNsaWRlcyIsImxvb3BlZFNsaWRlc0xpbWl0IiwicHJlcGVuZFNsaWRlcyIsImFwcGVuZFNsaWRlcyIsImNsb25lTm9kZSIsImRpZmYiLCJsb29wRGVzdHJveSIsIm9uVG91Y2hTdGFydCIsInRvdWNoRXZlbnRzRGF0YSIsIm9yaWdpbmFsRXZlbnQiLCIkdGFyZ2V0RWwiLCJ0b3VjaEV2ZW50c1RhcmdldCIsImlzVG91Y2hFdmVudCIsIndoaWNoIiwiaXNUb3VjaGVkIiwiaXNNb3ZlZCIsInN3aXBpbmdDbGFzc0hhc1ZhbHVlIiwibm9Td2lwaW5nQ2xhc3MiLCJldmVudFBhdGgiLCJjb21wb3NlZFBhdGgiLCJzaGFkb3dSb290Iiwibm9Td2lwaW5nU2VsZWN0b3IiLCJpc1RhcmdldFNoYWRvdyIsIm5vU3dpcGluZyIsIl9fY2xvc2VzdEZyb20iLCJhc3NpZ25lZFNsb3QiLCJnZXRSb290Tm9kZSIsImNsb3Nlc3RFbGVtZW50IiwiYWxsb3dDbGljayIsInN3aXBlSGFuZGxlciIsImN1cnJlbnRYIiwidGFyZ2V0VG91Y2hlcyIsInBhZ2VYIiwiY3VycmVudFkiLCJwYWdlWSIsImVkZ2VTd2lwZURldGVjdGlvbiIsImlPU0VkZ2VTd2lwZURldGVjdGlvbiIsImVkZ2VTd2lwZVRocmVzaG9sZCIsImlPU0VkZ2VTd2lwZVRocmVzaG9sZCIsImFsbG93VG91Y2hDYWxsYmFja3MiLCJzdGFydE1vdmluZyIsInRvdWNoU3RhcnRUaW1lIiwic3dpcGVEaXJlY3Rpb24iLCJhbGxvd1RocmVzaG9sZE1vdmUiLCJmb2N1c2FibGVFbGVtZW50cyIsInNob3VsZFByZXZlbnREZWZhdWx0IiwiYWxsb3dUb3VjaE1vdmUiLCJ0b3VjaFN0YXJ0UHJldmVudERlZmF1bHQiLCJ0b3VjaFN0YXJ0Rm9yY2VQcmV2ZW50RGVmYXVsdCIsImlzQ29udGVudEVkaXRhYmxlIiwiZnJlZU1vZGUiLCJvblRvdWNoTW92ZSIsInRhcmdldFRvdWNoIiwicHJldmVudGVkQnlOZXN0ZWRTd2lwZXIiLCJ0b3VjaFJlbGVhc2VPbkVkZ2VzIiwiZGlmZlgiLCJkaWZmWSIsInRvdWNoQW5nbGUiLCJ0b3VjaE1vdmVTdG9wUHJvcGFnYXRpb24iLCJzdGFydFRyYW5zbGF0ZSIsImFsbG93TW9tZW50dW1Cb3VuY2UiLCJncmFiQ3Vyc29yIiwic2V0R3JhYkN1cnNvciIsInRvdWNoUmF0aW8iLCJkaXNhYmxlUGFyZW50U3dpcGVyIiwicmVzaXN0YW5jZVJhdGlvIiwicmVzaXN0YW5jZSIsImZvbGxvd0ZpbmdlciIsIm9uVG91Y2hFbmQiLCJ0b3VjaEVuZFRpbWUiLCJ0aW1lRGlmZiIsInBhdGhUcmVlIiwibGFzdENsaWNrVGltZSIsImN1cnJlbnRQb3MiLCJzdG9wSW5kZXgiLCJncm91cFNpemUiLCJyZXdpbmRGaXJzdEluZGV4IiwicmV3aW5kTGFzdEluZGV4IiwibG9uZ1N3aXBlc01zIiwibG9uZ1N3aXBlcyIsImxvbmdTd2lwZXNSYXRpbyIsInNob3J0U3dpcGVzIiwibmF2aWdhdGlvbiIsIm5leHRFbCIsInByZXZFbCIsInNldEJyZWFrcG9pbnQiLCJhdXRvcGxheSIsInJ1bm5pbmciLCJydW4iLCJwcmV2ZW50Q2xpY2tzIiwicHJldmVudENsaWNrc1Byb3BhZ2F0aW9uIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwiZHVtbXlFdmVudEF0dGFjaGVkIiwiZHVtbXlFdmVudExpc3RlbmVyIiwidG91Y2hFdmVudHMiLCJkb21NZXRob2QiLCJzd2lwZXJNZXRob2QiLCJwYXNzaXZlTGlzdGVuZXJzIiwibW92ZSIsImNhbmNlbCIsInVwZGF0ZU9uV2luZG93UmVzaXplIiwiYXR0YWNoRXZlbnRzIiwiZGV0YWNoRXZlbnRzIiwiaXNHcmlkRW5hYmxlZCIsImJyZWFrcG9pbnQiLCJnZXRCcmVha3BvaW50IiwiYnJlYWtwb2ludHNCYXNlIiwiY3VycmVudEJyZWFrcG9pbnQiLCJicmVha3BvaW50UGFyYW1zIiwib3JpZ2luYWxQYXJhbXMiLCJ3YXNNdWx0aVJvdyIsImlzTXVsdGlSb3ciLCJ3YXNFbmFibGVkIiwiZW1pdENvbnRhaW5lckNsYXNzZXMiLCJmaWxsIiwid2FzTW9kdWxlRW5hYmxlZCIsImlzTW9kdWxlRW5hYmxlZCIsImRpcmVjdGlvbkNoYW5nZWQiLCJuZWVkc1JlTG9vcCIsImNoYW5nZURpcmVjdGlvbiIsImNvbnRhaW5lckVsIiwiY3VycmVudEhlaWdodCIsIm1pblJhdGlvIiwiYWRkQ2xhc3NlcyIsInN1ZmZpeGVzIiwiZW50cmllcyIsInByZWZpeCIsInJlc3VsdENsYXNzZXMiLCJpdGVtIiwicHJlcGFyZUNsYXNzZXMiLCJyZW1vdmVDbGFzc2VzIiwiaW5pdGlhbFNsaWRlIiwicmVzaXplT2JzZXJ2ZXIiLCJjcmVhdGVFbGVtZW50cyIsInNpbXVsYXRlVG91Y2giLCJ1bmlxdWVOYXZFbGVtZW50cyIsInByZWxvYWRJbWFnZXMiLCJ1cGRhdGVPbkltYWdlc1JlYWR5Iiwid3JhcHBlckNsYXNzIiwiX2VtaXRDbGFzc2VzIiwibW9kdWxlRXh0ZW5kUGFyYW1zIiwiYWxsTW9kdWxlc1BhcmFtcyIsIm1vZHVsZVBhcmFtTmFtZSIsIm1vZHVsZVBhcmFtcyIsInByb3RvdHlwZXMiLCJldmVudHNFbWl0dGVyIiwibW92aW5nIiwiaXNMb2NrZWQiLCJjdXJzb3IiLCJ1bnNldEdyYWJDdXJzb3IiLCJ3YXNMb2NrZWQiLCJsYXN0U2xpZGVJbmRleCIsImxhc3RTbGlkZVJpZ2h0RWRnZSIsImxvYWRJbWFnZSIsImltYWdlRWwiLCJzcmNzZXQiLCJzaXplcyIsImNoZWNrRm9yQ29tcGxldGUiLCJvblJlYWR5IiwiaW1hZ2VzVG9Mb2FkIiwiZXh0ZW5kZWREZWZhdWx0cyIsIlN3aXBlciIsInN3aXBlcnMiLCJuZXdQYXJhbXMiLCJtb2R1bGVzIiwiX19tb2R1bGVzX18iLCJtb2QiLCJleHRlbmRQYXJhbXMiLCJzd2lwZXJQYXJhbXMiLCJwYXNzZWRQYXJhbXMiLCJkZXNrdG9wIiwidG91Y2hFdmVudHNUb3VjaCIsInRvdWNoRXZlbnRzRGVza3RvcCIsImNsaWNrVGltZW91dCIsInZlbG9jaXRpZXMiLCJzZXRQcm9ncmVzcyIsImNscyIsImdldFNsaWRlQ2xhc3NlcyIsInNsaWRlRWwiLCJ1cGRhdGVzIiwidmlldyIsImV4YWN0Iiwic3B2IiwiYnJlYWtMb29wIiwidHJhbnNsYXRlVmFsdWUiLCJ0cmFuc2xhdGVkIiwibmV3RGlyZWN0aW9uIiwibmVlZFVwZGF0ZSIsImN1cnJlbnREaXJlY3Rpb24iLCJjaGFuZ2VMYW5ndWFnZURpcmVjdGlvbiIsIm1vdW50IiwibW91bnRlZCIsImdldFdyYXBwZXJTZWxlY3RvciIsImdldFdyYXBwZXIiLCJkZXN0cm95IiwiZGVsZXRlSW5zdGFuY2UiLCJjbGVhblN0eWxlcyIsIm9iamVjdCIsImRlbGV0ZVByb3BzIiwiZXh0ZW5kRGVmYXVsdHMiLCJuZXdEZWZhdWx0cyIsImluc3RhbGxNb2R1bGUiLCJ1c2UiLCJwcm90b3R5cGVHcm91cCIsInByb3RvTWV0aG9kIiwib2JzZXJ2ZXIiLCJhbmltYXRpb25GcmFtZSIsInJlc2l6ZUhhbmRsZXIiLCJvcmllbnRhdGlvbkNoYW5nZUhhbmRsZXIiLCJSZXNpemVPYnNlcnZlciIsIm5ld1dpZHRoIiwiY29udGVudEJveFNpemUiLCJjb250ZW50UmVjdCIsImlubGluZVNpemUiLCJibG9ja1NpemUiLCJ1bm9ic2VydmUiLCJvYnNlcnZlcnMiLCJhdHRhY2giLCJNdXRhdGlvbk9ic2VydmVyIiwiV2Via2l0TXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsIm9ic2VydmVyVXBkYXRlIiwiY2hpbGRMaXN0IiwiY2hhcmFjdGVyRGF0YSIsIm9ic2VydmVQYXJlbnRzIiwib2JzZXJ2ZVNsaWRlQ2hpbGRyZW4iLCJjb250YWluZXJQYXJlbnRzIiwiZGlzY29ubmVjdCIsImNoZWNrUHJvcHMiLCJOYXZpZ2F0aW9uIiwiZ2V0RWwiLCJ0b2dnbGVFbCIsImRpc2FibGVkIiwiZGlzYWJsZWRDbGFzcyIsImxvY2tDbGFzcyIsIiRuZXh0RWwiLCIkcHJldkVsIiwib25QcmV2Q2xpY2siLCJvbk5leHRDbGljayIsImhpZGVPbkNsaWNrIiwiaGlkZGVuQ2xhc3MiLCJuYXZpZ2F0aW9uRGlzYWJsZWRDbGFzcyIsIl9zIiwidGFyZ2V0RWwiLCJwYWdpbmF0aW9uIiwiY2xpY2thYmxlIiwiaXNIaWRkZW4iLCJjbGFzc2VzVG9TZWxlY3RvciIsIlBhZ2luYXRpb24iLCJwZngiLCJidWxsZXRTaXplIiwiYnVsbGV0RWxlbWVudCIsInJlbmRlckJ1bGxldCIsInJlbmRlclByb2dyZXNzYmFyIiwicmVuZGVyRnJhY3Rpb24iLCJyZW5kZXJDdXN0b20iLCJwcm9ncmVzc2Jhck9wcG9zaXRlIiwiZHluYW1pY0J1bGxldHMiLCJkeW5hbWljTWFpbkJ1bGxldHMiLCJmb3JtYXRGcmFjdGlvbkN1cnJlbnQiLCJudW1iZXIiLCJmb3JtYXRGcmFjdGlvblRvdGFsIiwiYnVsbGV0Q2xhc3MiLCJidWxsZXRBY3RpdmVDbGFzcyIsIm1vZGlmaWVyQ2xhc3MiLCJjdXJyZW50Q2xhc3MiLCJ0b3RhbENsYXNzIiwicHJvZ3Jlc3NiYXJGaWxsQ2xhc3MiLCJwcm9ncmVzc2Jhck9wcG9zaXRlQ2xhc3MiLCJjbGlja2FibGVDbGFzcyIsImhvcml6b250YWxDbGFzcyIsInZlcnRpY2FsQ2xhc3MiLCJwYWdpbmF0aW9uRGlzYWJsZWRDbGFzcyIsImJ1bGxldHMiLCJkeW5hbWljQnVsbGV0SW5kZXgiLCJpc1BhZ2luYXRpb25EaXNhYmxlZCIsInNldFNpZGVCdWxsZXRzIiwiJGJ1bGxldEVsIiwicGFnaW5hdGlvblR5cGUiLCJmaXJzdEluZGV4IiwibWlkSW5kZXgiLCJzdWZmaXgiLCJidWxsZXQiLCIkYnVsbGV0IiwiYnVsbGV0SW5kZXgiLCIkZmlyc3REaXNwbGF5ZWRCdWxsZXQiLCIkbGFzdERpc3BsYXllZEJ1bGxldCIsImR5bmFtaWNCdWxsZXRzTGVuZ3RoIiwiYnVsbGV0c09mZnNldCIsIm9mZnNldFByb3AiLCJwcm9ncmVzc2JhckRpcmVjdGlvbiIsInBhZ2luYXRpb25IVE1MIiwibnVtYmVyT2ZCdWxsZXRzIiwiQTExeSIsImExMXkiLCJub3RpZmljYXRpb25DbGFzcyIsInByZXZTbGlkZU1lc3NhZ2UiLCJuZXh0U2xpZGVNZXNzYWdlIiwiZmlyc3RTbGlkZU1lc3NhZ2UiLCJsYXN0U2xpZGVNZXNzYWdlIiwicGFnaW5hdGlvbkJ1bGxldE1lc3NhZ2UiLCJzbGlkZUxhYmVsTWVzc2FnZSIsImNvbnRhaW5lck1lc3NhZ2UiLCJjb250YWluZXJSb2xlRGVzY3JpcHRpb25NZXNzYWdlIiwiaXRlbVJvbGVEZXNjcmlwdGlvbk1lc3NhZ2UiLCJzbGlkZVJvbGUiLCJjbGlja2VkIiwibGl2ZVJlZ2lvbiIsIm5vdGlmaWNhdGlvbiIsIm1ha2VFbEZvY3VzYWJsZSIsIm1ha2VFbE5vdEZvY3VzYWJsZSIsImFkZEVsUm9sZSIsInJvbGUiLCJhZGRFbFJvbGVEZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwiYWRkRWxMYWJlbCIsImRpc2FibGVFbCIsImVuYWJsZUVsIiwib25FbnRlck9yU3BhY2VLZXkiLCJrZXlDb2RlIiwiaGFzUGFnaW5hdGlvbiIsImhhc0NsaWNrYWJsZVBhZ2luYXRpb24iLCJpbml0TmF2RWwiLCJ3cmFwcGVySWQiLCJjb250cm9scyIsImFkZEVsQ29udHJvbHMiLCJoYW5kbGVQb2ludGVyRG93biIsImhhbmRsZVBvaW50ZXJVcCIsImhhbmRsZUZvY3VzIiwiaXNWaXNpYmxlIiwic291cmNlQ2FwYWJpbGl0aWVzIiwiZmlyZXNUb3VjaEV2ZW50cyIsIiRzbGlkZUVsIiwiJGNvbnRhaW5lckVsIiwiZ2V0UmFuZG9tTnVtYmVyIiwibGl2ZSIsImFkZEVsTGl2ZSIsInVwZGF0ZU5hdmlnYXRpb24iLCJidWxsZXRFbCIsInVwZGF0ZVBhZ2luYXRpb24iXSwic291cmNlUm9vdCI6IiJ9