Automatically save\n values to localStorage
on exit.\n\n
The values saved to localStorage
will\n override those passed to dat.GUI
\'s constructor. This makes it\n easier to work incrementally, but localStorage
is fragile,\n and your friends may not see the same values you do.\n\n
\n\n \n\n'),this.parent)throw new Error("You can only call remember on a top level GUI.");var e=this;o.each(Array.prototype.slice.call(arguments),function(t){0===e.__rememberedObjects.length&&function(e){var t=e.__save_row=document.createElement("li");C.addClass(e.domElement,"has-save"),e.__ul.insertBefore(t,e.__ul.firstChild),C.addClass(t,"save-row");var n=document.createElement("span");n.innerHTML=" ",C.addClass(n,"button gears");var i=document.createElement("span");i.innerHTML="Save",C.addClass(i,"button"),C.addClass(i,"save");var r=document.createElement("span");r.innerHTML="New",C.addClass(r,"button"),C.addClass(r,"save-as");var a=document.createElement("span");a.innerHTML="Revert",C.addClass(a,"button"),C.addClass(a,"revert");var s=e.__preset_select=document.createElement("select");e.load&&e.load.remembered?o.each(e.load.remembered,function(t,n){te(e,n,n===e.preset)}):te(e,z,!1);if(C.bind(s,"change",function(){for(var t=0;t0&&(e.preset=this.preset,e.remembered||(e.remembered={}),e.remembered[this.preset]=re(this)),e.folders={},o.each(this.__folders,function(t,n){e.folders[n]=t.getSaveObject()}),e},save:function(){this.load.remembered||(this.load.remembered={}),this.load.remembered[this.preset]=re(this),J(this,!1),this.saveToLocalStorageIfPossible()},saveAs:function(e){this.load.remembered||(this.load.remembered={},this.load.remembered[z]=re(this,!0)),this.load.remembered[e]=re(this),this.preset=e,te(this,e,!0),this.saveToLocalStorageIfPossible()},revert:function(e){o.each(this.__controllers,function(t){this.getRoot().load.remembered?Z(e||this.getRoot(),t):t.setValue(t.initialValue),t.__onFinishChange&&t.__onFinishChange.call(t,t.getValue())},this),o.each(this.__folders,function(e){e.revert(e)}),e||J(this.getRoot(),!1)},listen:function(e){var t=0===this.__listening.length;this.__listening.push(e),t&&function e(t){0!==t.length&&H.call(window,function(){e(t)});o.each(t,function(e){e.updateDisplay()})}(this.__listening)},updateDisplay:function(){o.each(this.__controllers,function(e){e.updateDisplay()}),o.each(this.__folders,function(e){e.updateDisplay()})}});var ae={Color:g,math:u,interpret:l},se={Controller:b,BooleanController:k,OptionController:A,StringController:S,NumberController:O,NumberControllerBox:T,NumberControllerSlider:P,FunctionController:F,ColorController:L},le={dom:C},ce={GUI:K},ue=K,de={color:ae,controllers:se,dom:le,gui:ce,GUI:ue};e.color=ae,e.controllers=se,e.dom=le,e.gui=ce,e.GUI=ue,e.default=de,Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof n&&void 0!==t?o(n):"function"==typeof define&&define.amd?define(["exports"],o):o(i.dat={})},{}],7:[function(e,t,n){t.exports=function(){for(var e=0;e=s;)e/=2,t/=2,i>>>=1;return(e+i)/t}},t.exports.resetGlobal=function(){Math.random=c},d(Math.random(),i)}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],9:[function(e,t,n){!function(){"use strict";var e=.5*(Math.sqrt(3)-1),i=(3-Math.sqrt(3))/6,o=1/6,r=(Math.sqrt(5)-1)/4,a=(5-Math.sqrt(5))/20;function s(e){var t;t="function"==typeof e?e:e?function(){var e=0,t=0,n=0,i=1,o=(r=4022871197,function(e){e=e.toString();for(var t=0;t>>0,r=(n*=r)>>>0,r+=4294967296*(n-=r)}return 2.3283064365386963e-10*(r>>>0)});var r;e=o(" "),t=o(" "),n=o(" ");for(var a=0;ag?(o=1,r=0):(o=0,r=1);var y=_-o+i,v=g-r+i,b=_-1+2*i,w=g-1+2*i,x=255&p,E=255&f,C=.5-_*_-g*g;if(C>=0){var k=3*a[x+s[E]];c=(C*=C)*C*(l[k]*_+l[k+1]*g)}var A=.5-y*y-v*v;if(A>=0){var S=3*a[x+o+s[E+r]];u=(A*=A)*A*(l[S]*y+l[S+1]*v)}var M=.5-b*b-w*w;if(M>=0){var O=3*a[x+1+s[E+1]];d=(M*=M)*M*(l[O]*b+l[O+1]*w)}return 70*(c+u+d)},noise3D:function(e,t,n){var i,r,a,s,l,c,u,d,h,p,f=this.permMod12,m=this.perm,_=this.grad3,g=(e+t+n)*(1/3),y=Math.floor(e+g),v=Math.floor(t+g),b=Math.floor(n+g),w=(y+v+b)*o,x=e-(y-w),E=t-(v-w),C=n-(b-w);x>=E?E>=C?(l=1,c=0,u=0,d=1,h=1,p=0):x>=C?(l=1,c=0,u=0,d=1,h=0,p=1):(l=0,c=0,u=1,d=1,h=0,p=1):EP?N++:D++,R>F?N++:I++,R>L?N++:j++,P>F?D++:I++,P>L?D++:j++,F>L?I++:j++;var H=R-(d=N>=3?1:0)+a,B=P-(h=D>=3?1:0)+a,z=F-(p=I>=3?1:0)+a,U=L-(f=j>=3?1:0)+a,V=R-(m=N>=2?1:0)+2*a,G=P-(_=D>=2?1:0)+2*a,W=F-(g=I>=2?1:0)+2*a,Y=L-(y=j>=2?1:0)+2*a,X=R-(v=N>=1?1:0)+3*a,K=P-(b=D>=1?1:0)+3*a,q=F-(w=I>=1?1:0)+3*a,Q=L-(x=j>=1?1:0)+3*a,J=R-1+4*a,Z=P-1+4*a,$=F-1+4*a,ee=L-1+4*a,te=255&A,ne=255&S,ie=255&M,oe=255&O,re=.6-R*R-P*P-F*F-L*L;if(re<0)o=0;else{var ae=E[te+E[ne+E[ie+E[oe]]]]%32*4;o=(re*=re)*re*(C[ae]*R+C[ae+1]*P+C[ae+2]*F+C[ae+3]*L)}var se=.6-H*H-B*B-z*z-U*U;if(se<0)s=0;else{var le=E[te+d+E[ne+h+E[ie+p+E[oe+f]]]]%32*4;s=(se*=se)*se*(C[le]*H+C[le+1]*B+C[le+2]*z+C[le+3]*U)}var ce=.6-V*V-G*G-W*W-Y*Y;if(ce<0)l=0;else{var ue=E[te+m+E[ne+_+E[ie+g+E[oe+y]]]]%32*4;l=(ce*=ce)*ce*(C[ue]*V+C[ue+1]*G+C[ue+2]*W+C[ue+3]*Y)}var de=.6-X*X-K*K-q*q-Q*Q;if(de<0)c=0;else{var he=E[te+v+E[ne+b+E[ie+w+E[oe+x]]]]%32*4;c=(de*=de)*de*(C[he]*X+C[he+1]*K+C[he+2]*q+C[he+3]*Q)}var pe=.6-J*J-Z*Z-$*$-ee*ee;if(pe<0)u=0;else{var fe=E[te+1+E[ne+1+E[ie+1+E[oe+1]]]]%32*4;u=(pe*=pe)*pe*(C[fe]*J+C[fe+1]*Z+C[fe+2]*$+C[fe+3]*ee)}return 27*(o+s+l+c+u)}},s._buildPermutationTable=l,"undefined"!=typeof define&&define.amd&&define(function(){return s}),void 0!==n?n.SimplexNoise=s:"undefined"!=typeof window&&(window.SimplexNoise=s),void 0!==t&&(t.exports=s)}()},{}],10:[function(e,t,n){"use strict";var i=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=o();if(t&&t.has(e))return t.get(e);var n={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){var a=i?Object.getOwnPropertyDescriptor(e,r):null;a&&(a.get||a.set)?Object.defineProperty(n,r,a):n[r]=e[r]}n.default=e,t&&t.set(e,n);return n}(e("dat.gui"));function o(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return o=function(){return e},e}const r=e("canvas-sketch"),{lerp:a}=e("canvas-sketch-util/math"),s=e("canvas-sketch-util/random"),l={gridColumns:13,gridRows:14,maxColumnsMerge:4,maxRowsMerge:4,allowLight:!1,DEBUG:!1,counter:null,message:"Hit space to regenerate",render:()=>{}};let c;const u={dimensions:[2048,2048],animate:!1,data:l},d=()=>{const e=[{dark:"#2ba85a",light:"#aadcbd"},{dark:"#2d93fc",light:"#abd4fe"},{dark:"#9669f2",light:"#d5c3fa"},{dark:"#fcdb32",light:"#fef1ad"},{dark:"#e82f2f",light:"#f6acac"},{dark:"#f076b6",light:"#f9c8e2"}];return e[Math.round(s.value()*(e.length-1))]},h=e=>{const t={1:["CIRCLE_FULL","CIRCLE_QUARTER","TRIANGLE"],.5:["CIRCLE_QUARTER","CIRCLE_HALF_UP"],2:["CIRCLE_HALF_DOWN"]};let n=t[e];return n||(n=e>1?["PILL_SHAPE_DOWN"]:["PILL_SHAPE_UP","NONE"]),n[Math.round(s.value()*(n.length-1))]},p=()=>{let e=[],t=[];const n=()=>{console.log("setup");const{gridColumns:n,gridRows:i,maxColumnsMerge:o,maxRowsMerge:r}=l,a=t=>e.filter(e=>e.getXIndex()===t),c=(e,t)=>t.filter(t=>t.getYIndex()===e),u=(e,t)=>{const n=a(e),i=a(t),o={points:[...n,...i],color:d(),lt:n[0],rt:i[0],lb:n[n.length-1],rb:i[i.length-1]},r=(o.rt.index.column-o.lt.index.column)/(o.lb.index.row-o.lt.index.row);return o.ratio=r,o.shapeType=h(r),o},p=(e,t,n)=>{const i=c(e,n),o=c(t,n),r={points:[...i,...o],color:d(),lt:i[0],rt:i[1],lb:o[i.length-2],rb:o[o.length-1]},a=(r.rt.index.column-r.lt.index.column)/(r.lb.index.row-r.lt.index.row);return r.ratio=a,r.shapeType=h(a),r};e=(()=>{const e=[];for(let t=0;to,getYIndex:()=>t,colour:(s.value(),"#fcdb32")})}return e})(),t=[];let f=0;for(let e=0;e{console.log({e:e}),"Space"===e.code&&(l.counter=l.counter+1,n(),c&&(c.render(),m=l.counter))}),({context:l,width:c,height:d,data:h})=>{h.gridColumns===i&&h.gridRows===o&&h.maxColumnsMerge===r&&h.maxRowsMerge===u&&h.DEBUG===p&&h.allowLight===f&&h.counter===m||(i=h.gridColumns,o=h.gridRows,r=h.maxColumnsMerge,u=h.maxRowsMerge,p=h.DEBUG,m=h.counter,f=h.allowLight,n());const _=.15*c,g=(e,t)=>{return{x:a(_,c-_,e/(i-1)),y:a(_,d-_,t/(i-1))}};l.clearRect(0,0,c,d),l.fillStyle="transparent",l.fillRect(0,0,c,d),l.fillStyle="black",l.textAlign="center",l.textBaseline="middle",l.font='40px "Helvetica"',l.moveTo(0,0),l.beginPath(),t.forEach(({lt:e,rb:t,rt:n,lb:i,color:o,shapeType:r,ratio:a},c)=>{const u=g(e.getXIndex(),e.getYIndex()),d=g(n.getXIndex(),n.getYIndex()),h=g(t.getXIndex(),t.getYIndex()),m=g(i.getXIndex(),i.getYIndex()),_=[u,d,h,m],y=_[0],v=d.x-u.x,b=m.y-u.y,w={x:u.x+v/2,y:u.y+b/2};l.fillStyle=s.value()>.5&&f?o.light:o.dark,l.beginPath();let x=0,E=0;const C=Math.min(v,b)/2;switch(r){case"CIRCLE_FULL":l.arc(w.x,w.y,C,0,2*Math.PI);break;case"CIRCLE_QUARTER":x=Math.PI/180*90,E=Math.PI/180*180,l.moveTo(d.x,d.y),l.arc(d.x,d.y,2*C,x,E,!1);break;case"CIRCLE_HALF_UP":x=Math.PI/180*90,E=Math.PI/180*270,l.arc(d.x,w.y,b/2,x,E);break;case"CIRCLE_HALF_DOWN":x=Math.PI/180*-180,E=Math.PI/180*0,l.arc(w.x,m.y,v/2,x,E);break;case"PILL_SHAPE_UP":l.fillStyle=o.light,l.arc(w.x,u.y+C,C,0,2*Math.PI),l.rect(u.x,u.y+C,2*C,m.y-2*C-u.y),l.arc(w.x,m.y-C,C,0,2*Math.PI),l.fill(),l.fillStyle=o.dark,l.beginPath(),l.moveTo(0,0),l.arc(w.x,u.y+C,C,0,2*Math.PI),l.fill(),l.closePath();break;case"PILL_SHAPE_DOWN":l.fillStyle=o.light,l.arc(u.x+C,w.y,C,0,2*Math.PI),l.rect(u.x+C,u.y,d.x-C-(u.x+C),2*C),l.arc(d.x-C,m.y-C,C,0,2*Math.PI),l.fill(),l.fillStyle=o.dark,l.beginPath(),l.moveTo(0,0),l.arc(u.x+C,u.y+C,C,0,2*Math.PI),l.fill(),l.closePath();break;case"TRIANGLE":l.beginPath(),l.moveTo(d.x,d.y),l.lineTo(d.x,h.y),l.lineTo(u.x,h.y),l.fill()}l.closePath(),l.fill(),l.fillStyle="black",p&&(l.strokeStyle="black",l.fillText(`ratio:${a},1`,w.x,w.y-20),_.forEach(({x:e,y:t},n)=>{0==n&&l.moveTo(y.x,y.y),l.lineTo(e,t)}),l.lineTo(y.x,y.y),l.stroke())}),p&&e.forEach(({position:e,getXIndex:t,getYIndex:n,index:i})=>{l.fillStyle="black";const[o,r]=e,{x:a,y:s}=g(t(),n());l.fillText(`${i.column},${i.row}`,a,s)})}};(async()=>{c=await r(p,u);{const t=new i.GUI;t.add(l,"gridColumns",2,25,1).onChange(e),t.add(l,"gridRows",2,25,1).onChange(e),t.add(l,"maxColumnsMerge",1,25,1).onChange(e),t.add(l,"maxRowsMerge",1,25,1).onChange(e),t.add(l,"allowLight").onChange(e),t.add(l,"DEBUG").onChange(e),t.add(l,"message")}function e(){c.render()}})()},{"canvas-sketch":4,"canvas-sketch-util/math":2,"canvas-sketch-util/random":3,"dat.gui":6}],11:[function(e,t,n){(function(e){(function(){e.CANVAS_SKETCH_DEFAULT_STORAGE_KEY=window.location.href}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[10,11]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9saWIvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtY2xpL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi93cmFwLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9tYXRoLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9yYW5kb20uanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kZWZpbmVkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL3JpZ2h0LW5vdy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvaXMtcHJvbWlzZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2lzLWRvbS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL3V0aWwuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9yZXBlYXQtc3RyaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGVlcC1lcXVhbC9saWIva2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvbGliL2lzX2FyZ3VtZW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kYXRlZm9ybWF0L2xpYi9kYXRlZm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvcGFkLWxlZnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9zYXZlLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvYWNjZXNzaWJpbGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL3BhcGVyLXNpemVzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvZGlzdGFuY2VzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY29yZS9yZXNpemVDYW52YXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9nZXQtY2FudmFzLWNvbnRleHQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL2NyZWF0ZUNhbnZhcy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUvU2tldGNoTWFuYWdlci5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUva2V5Ym9hcmRTaG9ydGN1dHMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jYW52YXMtc2tldGNoLmpzIiwibm9kZV9tb2R1bGVzL2NvbnZlcnQtbGVuZ3RoL2NvbnZlcnQtbGVuZ3RoLmpzIiwibm9kZV9tb2R1bGVzL2RhdC5ndWkvYnVpbGQvZGF0Lmd1aS5qcyIsIm5vZGVfbW9kdWxlcy9kZWZpbmVkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NlZWQtcmFuZG9tL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NpbXBsZXgtbm9pc2Uvc2ltcGxleC1ub2lzZS5qcyIsInNrZXRjaC5qcyIsImNhbnZhcy1za2V0Y2gtY2xpL2luamVjdGVkL3N0b3JhZ2Uta2V5LmpzIl0sIm5hbWVzIjpbInIiLCJlIiwibiIsInQiLCJvIiwiaSIsImYiLCJjIiwicmVxdWlyZSIsInUiLCJhIiwiRXJyb3IiLCJjb2RlIiwicCIsImV4cG9ydHMiLCJjYWxsIiwibGVuZ3RoIiwiMSIsIm1vZHVsZSIsInZhbHVlIiwiZnJvbSIsInRvIiwiVHlwZUVycm9yIiwiY3ljbGUiLCJNYXRoIiwiZmxvb3IiLCJkZWZpbmVkIiwid3JhcCIsIkVQU0lMT04iLCJOdW1iZXIiLCJjbGFtcCIsIm1pbiIsIm1heCIsImxlcnAiLCJpbnZlcnNlTGVycCIsImFicyIsInRvRmluaXRlIiwiZGVmYXVsdFZhbHVlIiwiaXNGaW5pdGUiLCJleHBhbmRWZWN0b3IiLCJkaW1zIiwic2NhbGFyIiwib3V0IiwibGVycEFycmF5IiwibmV3QXJyYXkiLCJpbml0aWFsVmFsdWUiLCJwdXNoIiwibW9kIiwiYiIsImRhbXAiLCJsYW1iZGEiLCJkdCIsImV4cCIsImZyYWN0Iiwic2lnbiIsImRlZ1RvUmFkIiwiUEkiLCJyYWRUb0RlZyIsInBpbmdQb25nIiwibGluc3BhY2UiLCJvcHRzIiwiZW5kcG9pbnQiLCJvZmZzZXQiLCJtYXAiLCJfIiwibGVycEZyYW1lcyIsInZhbHVlcyIsImxlbiIsIndob2xlIiwiZnJhbWUiLCJuZXh0RnJhbWUiLCJBcnJheSIsImlzQXJyYXkiLCJjbGFtcDAxIiwidiIsInNtb290aHN0ZXAiLCJ4IiwiZGFtcEFycmF5IiwibWFwUmFuZ2UiLCJpbnB1dE1pbiIsImlucHV0TWF4Iiwib3V0cHV0TWluIiwib3V0cHV0TWF4Iiwib3V0VmFsIiwiZXhwYW5kMkQiLCJleHBhbmQzRCIsImV4cGFuZDREIiwic2VlZFJhbmRvbSIsIlNpbXBsZXhOb2lzZSIsImNyZWF0ZVJhbmRvbSIsImRlZmF1bHRTZWVkIiwiY3VycmVudFNlZWQiLCJjdXJyZW50UmFuZG9tIiwibm9pc2VHZW5lcmF0b3IiLCJkZWZhdWx0UmFuZG9tIiwicmFuZG9tIiwiX25leHRHYXVzc2lhbiIsIl9oYXNOZXh0R2F1c3NpYW4iLCJzZXRTZWVkIiwiZ2V0U2VlZCIsImdldFJhbmRvbVNlZWQiLCJTdHJpbmciLCJ2YWx1ZU5vblplcm8iLCJwZXJtdXRlTm9pc2UiLCJjcmVhdGVOb2lzZSIsIm5vaXNlMUQiLCJmcmVxdWVuY3kiLCJhbXBsaXR1ZGUiLCJub2lzZTJEIiwieSIsIm5vaXNlM0QiLCJ6Iiwibm9pc2U0RCIsInciLCJib29sZWFuIiwiY2hhbmNlIiwicmFuZ2UiLCJyYW5nZUZsb29yIiwicGljayIsImFycmF5Iiwic2h1ZmZsZSIsImFyciIsInJhbmQiLCJ0bXAiLCJyZXQiLCJzbGljZSIsIm9uQ2lyY2xlIiwiaW5zaWRlQ2lyY2xlIiwicmFkaXVzIiwic3FydCIsIm9uU3BoZXJlIiwicGhpIiwidGhldGEiLCJhY29zIiwic2luIiwiY29zIiwiaW5zaWRlU3BoZXJlIiwiayIsImNicnQiLCJxdWF0ZXJuaW9uIiwidTEiLCJ1MiIsInUzIiwic3ExIiwic3EyIiwidGhldGExIiwidGhldGEyIiwid2VpZ2h0ZWQiLCJ3ZWlnaHRlZFNldCIsInNldCIsIndlaWdodGVkU2V0SW5kZXgiLCJnYXVzc2lhbiIsIm1lYW4iLCJzdGFuZGFyZERlcml2YXRpb24iLCJyZXN1bHQiLCJ2MSIsInYyIiwicyIsIm11bHRpcGxpZXIiLCJsb2ciLCJzZWVkIiwib3B0IiwidW5kZWZpbmVkIiwid2VpZ2h0Iiwid2VpZ2h0cyIsInRvdGFsV2VpZ2h0IiwiYXJndW1lbnRzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJwcm90b3R5cGUiLCJwcm9wSXNFbnVtZXJhYmxlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJvYmplY3RBc3NpZ24iLCJhc3NpZ24iLCJ0ZXN0MSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ0ZXN0MiIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJ0ZXN0MyIsInNwbGl0IiwiZm9yRWFjaCIsImxldHRlciIsImtleXMiLCJlcnIiLCJzaG91bGRVc2VOYXRpdmUiLCJ0YXJnZXQiLCJzb3VyY2UiLCJzeW1ib2xzIiwidmFsIiwidG9PYmplY3QiLCJrZXkiLCJicm93c2VyIiwiY29tbW9uanNHbG9iYWwiLCJwZXJmb3JtYW5jZSIsIm5vdyIsIkRhdGUiLCJpc1Byb21pc2VfMSIsIm9iaiIsInRoZW4iLCJpc0RvbSIsIndpbmRvdyIsIk5vZGUiLCJub2RlVHlwZSIsIm5vZGVOYW1lIiwiZ2V0Q2xpZW50QVBJIiwiaXNCcm93c2VyIiwiZG9jdW1lbnQiLCJjYWNoZSIsInNoaW0iLCJzdXBwb3J0c0FyZ3VtZW50c0NsYXNzIiwidG9TdHJpbmciLCJzdXBwb3J0ZWQiLCJvYmplY3QiLCJ1bnN1cHBvcnRlZCIsInBTbGljZSIsImRlZXBFcXVhbCIsImFjdHVhbCIsImV4cGVjdGVkIiwiZ2V0VGltZSIsInN0cmljdCIsImlzVW5kZWZpbmVkT3JOdWxsIiwiaXNfYXJndW1lbnRzIiwiaXNCdWZmZXIiLCJrYSIsImtiIiwic29ydCIsIm9iakVxdWl2IiwiY29weSIsImdsb2JhbCIsInRva2VuIiwidGltZXpvbmUiLCJ0aW1lem9uZUNsaXAiLCJkYXRlRm9ybWF0IiwiZGF0ZSIsIm1hc2siLCJ1dGMiLCJnbXQiLCJ0b0xvd2VyQ2FzZSIsInRlc3QiLCJpc05hTiIsIm1hc2tTbGljZSIsIm1hc2tzIiwiZCIsIkQiLCJtIiwiSCIsIk0iLCJMIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJXIiwidGFyZ2V0VGh1cnNkYXkiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInNldERhdGUiLCJnZXREYXkiLCJmaXJzdFRodXJzZGF5IiwiZHMiLCJzZXRIb3VycyIsImdldEhvdXJzIiwiZ2V0V2VlayIsIk4iLCJkb3ciLCJnZXREYXlPZldlZWsiLCJmbGFncyIsImRkIiwicGFkIiwiZGRkIiwiaTE4biIsImRheU5hbWVzIiwiZGRkZCIsIm1tIiwibW1tIiwibW9udGhOYW1lcyIsIm1tbW0iLCJ5eSIsInl5eXkiLCJoIiwiaGgiLCJISCIsIk1NIiwic3MiLCJsIiwicm91bmQiLCJ0aW1lTmFtZXMiLCJ0dCIsIlQiLCJUVCIsIloiLCJtYXRjaCIsInBvcCIsInJlcGxhY2UiLCJTIiwiZGVmYXVsdCIsInNob3J0RGF0ZSIsIm1lZGl1bURhdGUiLCJsb25nRGF0ZSIsImZ1bGxEYXRlIiwic2hvcnRUaW1lIiwibWVkaXVtVGltZSIsImxvbmdUaW1lIiwiaXNvRGF0ZSIsImlzb1RpbWUiLCJpc29EYXRlVGltZSIsImlzb1V0Y0RhdGVUaW1lIiwiZXhwaXJlc0hlYWRlckZvcm1hdCIsInJlcyIsInJlcGVhdFN0cmluZyIsInN0ciIsIm51bSIsInN1YnN0ciIsImxpbmsiLCJwYWRMZWZ0IiwiY2giLCJub29wIiwic3VwcG9ydGVkRW5jb2RpbmdzIiwic2F2ZURhdGFVUkwiLCJkYXRhVVJMIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzcGxpdEluZGV4IiwiaW5kZXhPZiIsImJhc2U2NCIsImJ5dGVTdHJpbmciLCJhdG9iIiwibWltZU1hdGNoIiwiZXhlYyIsIm1pbWUiLCJhYiIsIkFycmF5QnVmZmVyIiwiaWEiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsIkJsb2IiLCJ0eXBlIiwiY3JlYXRlQmxvYkZyb21EYXRhVVJMIiwiYmxvYiIsInNhdmVCbG9iIiwiZmlsZW5hbWUiLCJmaWxlIiwiZXh0ZW5zaW9uIiwidG90YWxGcmFtZXMiLCJsYXllclN0ciIsInRvdGFsTGF5ZXJzIiwibGF5ZXIiLCJmaWx0ZXIiLCJCb29sZWFuIiwiZGVmYXVsdEZpbGVOYW1lIiwidGltZVN0YW1wIiwicHJlZml4IiwibmFtZSIsImhhc2giLCJzdWZmaXgiLCJyZXNvbHZlRmlsZW5hbWUiLCJjbGllbnQiLCJvdXRwdXQiLCJldiIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsInZpc2liaWxpdHkiLCJkb3dubG9hZCIsImhyZWYiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJvbmNsaWNrIiwic2V0VGltZW91dCIsInJldm9rZU9iamVjdFVSTCIsInJlbW92ZUNoaWxkIiwicmVtb3ZlQXR0cmlidXRlIiwiY2xpY2siLCJjb21tb25UeXBvcyIsImRpbWVuc2lvbiIsImFuaW1hdGVkIiwiYW5pbWF0aW5nIiwidW5pdCIsIlA1IiwicGl4ZWxsYXRlZCIsImxvb3BpbmciLCJwaXhlbFBlckluY2giLCJhbGxLZXlzIiwiY2hlY2tTZXR0aW5ncyIsInNldHRpbmdzIiwiY29uc29sZSIsIndhcm4iLCJpbmNsdWRlcyIsInBhcGVyU2l6ZXMiLCJyZWR1Y2UiLCJkaWN0IiwicHJlc2V0IiwiaXRlbSIsInVuaXRzIiwiZGltZW5zaW9ucyIsImNvbnZlcnREaXN0YW5jZSIsInVuaXRzRnJvbSIsInVuaXRzVG8iLCJwaXhlbHNQZXJJbmNoIiwiY29udmVydExlbmd0aCIsInByZWNpc2lvbiIsInJvdW5kUGl4ZWwiLCJyZXNpemVDYW52YXMiLCJwcm9wcyIsIndpZHRoIiwiaGVpZ2h0Iiwic3R5bGVXaWR0aCIsInN0eWxlSGVpZ2h0IiwiY2FudmFzV2lkdGgiLCJjYW52YXNIZWlnaHQiLCJoYXNEaW1lbnNpb25zIiwiY2hlY2tJZkhhc0RpbWVuc2lvbnMiLCJleHBvcnRpbmciLCJzY2FsZVRvRml0Iiwic2NhbGVUb1ZpZXciLCJwaXhlbFJhdGlvIiwiZXhwb3J0UGl4ZWxSYXRpbyIsImJsZWVkIiwiZGV2aWNlUGl4ZWxSYXRpbyIsImJhc2VQaXhlbFJhdGlvIiwibWF4UGl4ZWxSYXRpbyIsInRyaW1XaWR0aCIsInRyaW1IZWlnaHQiLCJyZWYiLCJlbGVtZW50IiwicGFyZW50IiwiaW5uZXJXaWR0aCIsImlubmVySGVpZ2h0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0UGFyZW50U2l6ZSIsInBhcmVudFdpZHRoIiwicGFyZW50SGVpZ2h0IiwiZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQiLCJoaWdoZXN0IiwibG93ZXN0Iiwib3JpZW50YXRpb24iLCJsYW5kc2NhcGUiLCJyZWFsV2lkdGgiLCJyZWFsSGVpZ2h0IiwiYXNwZWN0Iiwid2luZG93QXNwZWN0Iiwic2NhbGVUb0ZpdFBhZGRpbmciLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsImdldENhbnZhc0NvbnRleHRfMSIsImNhbnZhcyIsImdsIiwiYXR0cmlicyIsIm5hbWVzIiwiZ2V0Q29udGV4dCIsImNyZWF0ZUNhbnZhcyIsImNvbnRleHQiLCJvd25zQ2FudmFzIiwibmV3Q2FudmFzIiwiY3JlYXRlQ2FudmFzRWxlbWVudCIsImF0dHJpYnV0ZXMiLCJwaXhlbGF0ZWQiLCJpbWFnZVNtb290aGluZ0VuYWJsZWQiLCJtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQiLCJvSW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwid2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwibXNJbWFnZVNtb290aGluZ0VuYWJsZWQiLCJTa2V0Y2hNYW5hZ2VyIiwiX3NldHRpbmdzIiwiX3Byb3BzIiwiX3NrZXRjaCIsIl9yYWYiLCJfbGFzdFJlZHJhd1Jlc3VsdCIsIl9pc1A1UmVzaXppbmciLCJfa2V5Ym9hcmRTaG9ydGN1dHMiLCJoYW5kbGVyIiwiZW5hYmxlZCIsImtleUNvZGUiLCJhbHRLZXkiLCJtZXRhS2V5IiwiY3RybEtleSIsInRvZ2dsZVBsYXkiLCJwcmV2ZW50RGVmYXVsdCIsImNvbW1pdCIsInNhdmUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImtleWJvYXJkU2hvcnRjdXRzIiwidGhpcyQxIiwiaG90a2V5cyIsInNoaWZ0S2V5IiwicmVjb3JkaW5nIiwiZW5kUmVjb3JkIiwicnVuIiwicmVjb3JkIiwiZXhwb3J0RnJhbWUiLCJwbGF5aW5nIiwicGF1c2UiLCJwbGF5IiwiX2FuaW1hdGVIYW5kbGVyIiwiYW5pbWF0ZSIsIl9yZXNpemVIYW5kbGVyIiwicmVzaXplIiwicmVuZGVyIiwic2tldGNoIiwiZ2V0IiwidGhpcyIsIl9jb21wdXRlUGxheWhlYWQiLCJjdXJyZW50VGltZSIsImR1cmF0aW9uIiwiX2NvbXB1dGVGcmFtZSIsInBsYXloZWFkIiwidGltZSIsImZwcyIsIl9jb21wdXRlQ3VycmVudEZyYW1lIiwiX2dldFNpemVQcm9wcyIsInZpZXdwb3J0V2lkdGgiLCJ2aWV3cG9ydEhlaWdodCIsImRpc3Bvc2UiLCJzdGFydGVkIiwiX3NpZ25hbEJlZ2luIiwidGljayIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiX2xhc3RUaW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZXJyb3IiLCJzdG9wIiwiZGVsdGFUaW1lIiwiZnJhbWVJbnRlcnZhbCIsIl9zaWduYWxFbmQiLCJiZWdpbiIsIl93cmFwQ29udGV4dFNjYWxlIiwiZW5kIiwiYWxsIiwicHJlRXhwb3J0IiwiZXhwb3J0T3B0cyIsInNlcXVlbmNlIiwiZW5jb2RpbmciLCJlbmNvZGluZ1F1YWxpdHkiLCJkYXRlZm9ybWF0IiwiY29tbWl0T3B0cyIsIl9kb0V4cG9ydEZyYW1lIiwiZHJhd1Jlc3VsdCIsImNvbmNhdCIsImhhc0RhdGFPYmplY3QiLCJkYXRhIiwidG9EYXRhVVJMIiwiZXhwb3J0Q2FudmFzIiwibGF5ZXJMaXN0IiwiY3VyT3B0IiwicGFydHMiLCJzYXZlRmlsZSIsImV2ZW50V2l0aE91dHB1dCIsImZpbmQiLCJvdXRwdXROYW1lIiwiaXNDbGllbnQiLCJzb21lIiwib2ZTZXEiLCJwb3N0RXhwb3J0IiwiY2IiLCJfcHJlUmVuZGVyIiwiX3Bvc3RSZW5kZXIiLCJwNSIsInNjYWxlIiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVDb250ZXh0IiwicmVzdG9yZSIsImZsdXNoIiwicmVkcmF3Iiwic3VibWl0RHJhd0NhbGwiLCJ1cGRhdGUiLCJub3RZZXRTdXBwb3J0ZWQiLCJvbGRDYW52YXMiLCJvbGRDb250ZXh0IiwidGltZU9wdHMiLCJ0aW1lUHJvcHMiLCJnZXRUaW1lUHJvcHMiLCJfc2V0dXBHTEtleSIsIl9hcHBlbmRDYW52YXNJZk5lZWRlZCIsImRyYXciLCJvbGRTaXplcyIsIm5ld1Byb3BzIiwicGl4ZWxEZW5zaXR5Iiwic3R5bGVDYW52YXMiLCJuZXdTaXplcyIsImNoYW5nZWQiLCJkZWVwRXF1YWxfMSIsIl9zaXplQ2hhbmdlZCIsImZyYW1lSW50ZXJ2YWxNUyIsImRlbHRhVGltZU1TIiwiaGFzRHVyYXRpb24iLCJpc05ld0ZyYW1lIiwicGxheWJhY2tSYXRlIiwibmV3VGltZSIsInRpbWVTY2FsZSIsImlzRmluaXNoZWQiLCJpc0xvb3BTdGFydCIsImxvb3AiLCJsYXN0RnJhbWUiLCJkaXNwYXRjaCIsIm1vdW50IiwidW5tb3VudCIsImRldGFjaCIsInBhcmVudEVsZW1lbnQiLCJjdHgiLCJjbGVhciIsImNsZWFyQ29sb3IiLCJidWZmZXJEYXRhIiwiaGFzVG90YWxGcmFtZXMiLCJ0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiIsImR1cmF0aW9uRnJvbVRvdGFsRnJhbWVzIiwiSW5maW5pdHkiLCJzdGFydFRpbWUiLCJzdGFydEZyYW1lIiwiaGFzU3RhcnRUaW1lIiwiaGFzU3RhcnRGcmFtZSIsInNldHVwIiwibG9hZEFuZFJ1biIsImNhbnZhc1NrZXRjaCIsIm5ld1NldHRpbmdzIiwibG9hZCIsInVubG9hZCIsImRlc3Ryb3kiLCJjcmVhdGVTa2V0Y2giLCJwcmVsb2FkIiwiUDVDb25zdHJ1Y3RvciIsInA1U2tldGNoIiwiaXNHTCIsInJlbmRlcmVyIiwiV0VCR0wiLCJQMkQiLCJub0xvb3AiLCJzZXRBdHRyaWJ1dGVzIiwiX3JlbmRlcmVyIiwiZHJhd2luZ0NvbnRleHQiLCJsb2FkZXIiLCJhdHRhY2giLCJjYXRjaCIsIm1lc3NhZ2UiLCJDQUNIRSIsInJ1bnRpbWVDb2xsaXNpb25zIiwiaG90SUQiLCJpc0hvdCIsImhvdCIsImlkIiwiaXNJbmplY3RpbmciLCJwcmV2aW91c0RhdGEiLCJjYWNoZUdldCIsIm5leHQiLCJvbGRNYW5hZ2VyIiwibWFuYWdlciIsIlBhcGVyU2l6ZXMiLCJjb252ZXJzaW9ucyIsInN5c3RlbSIsImZhY3RvciIsImNtIiwicHQiLCJwYyIsImluIiwiZnQiLCJhbmNob3JzIiwibWV0cmljIiwicmF0aW8iLCJpbXBlcmlhbCIsImZyb21Vbml0IiwidG9Vbml0IiwidG9GYWN0b3IiLCJmcm9tRmFjdG9yIiwiaXNUb1BpeGVsIiwiZnJvbVVuaXREYXRhIiwidG9Vbml0RGF0YSIsImFuY2hvciIsImRlY2ltYWxzIiwiZmFjdG9yeSIsImNvbG9yVG9TdHJpbmciLCJjb2xvciIsImZvcmNlQ1NTSGV4IiwiY29sb3JGb3JtYXQiLCJfX3N0YXRlIiwiY29udmVyc2lvbk5hbWUiLCJnIiwidG9GaXhlZCIsImhleCIsIkFSUl9FQUNIIiwiQVJSX1NMSUNFIiwiQ29tbW9uIiwiQlJFQUsiLCJleHRlbmQiLCJlYWNoIiwiaXNPYmplY3QiLCJpc1VuZGVmaW5lZCIsImJpbmQiLCJkZWZhdWx0cyIsImNvbXBvc2UiLCJ0b0NhbGwiLCJhcmdzIiwiYXBwbHkiLCJpdHIiLCJzY29wZSIsIl9rZXkiLCJkZWZlciIsImZuYyIsImRlYm91bmNlIiwiZnVuYyIsInRocmVzaG9sZCIsImNhbGxJbW1lZGlhdGVseSIsInRpbWVvdXQiLCJjYWxsTm93IiwiY2xlYXJUaW1lb3V0IiwidG9BcnJheSIsImlzTnVsbCIsIl9pc05hTiIsIl94IiwiY29uc3RydWN0b3IiLCJpc051bWJlciIsImlzU3RyaW5nIiwiaXNCb29sZWFuIiwiaXNGdW5jdGlvbiIsIkZ1bmN0aW9uIiwiSU5URVJQUkVUQVRJT05TIiwibGl0bXVzIiwiVEhSRUVfQ0hBUl9IRVgiLCJyZWFkIiwib3JpZ2luYWwiLCJzcGFjZSIsInBhcnNlSW50Iiwid3JpdGUiLCJTSVhfQ0hBUl9IRVgiLCJDU1NfUkdCIiwicGFyc2VGbG9hdCIsIkNTU19SR0JBIiwiSEVYIiwiUkdCX0FSUkFZIiwiUkdCQV9BUlJBWSIsIlJHQkFfT0JKIiwiUkdCX09CSiIsIkhTVkFfT0JKIiwiSFNWX09CSiIsInRvUmV0dXJuIiwiaW50ZXJwcmV0IiwiZmFtaWx5IiwiY29udmVyc2lvbiIsInRtcENvbXBvbmVudCIsIkNvbG9yTWF0aCIsImhzdl90b19yZ2IiLCJoaSIsInEiLCJyZ2JfdG9faHN2IiwiZGVsdGEiLCJOYU4iLCJyZ2JfdG9faGV4IiwiaGV4X3dpdGhfY29tcG9uZW50IiwiY29tcG9uZW50X2Zyb21faGV4IiwiY29tcG9uZW50SW5kZXgiLCJfdHlwZW9mIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiQ29uc3RydWN0b3IiLCJjcmVhdGVDbGFzcyIsImRlZmluZVByb3BlcnRpZXMiLCJkZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiZGVmaW5lUHJvcGVydHkiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJwcm9wZXJ0eSIsInJlY2VpdmVyIiwiZGVzYyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldFByb3RvdHlwZU9mIiwiZ2V0dGVyIiwiaW5oZXJpdHMiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJjcmVhdGUiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsInBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJzZWxmIiwiUmVmZXJlbmNlRXJyb3IiLCJDb2xvciIsImRlZmluZVJHQkNvbXBvbmVudCIsImNvbXBvbmVudCIsImNvbXBvbmVudEhleEluZGV4IiwicmVjYWxjdWxhdGVSR0IiLCJkZWZpbmVIU1ZDb21wb25lbnQiLCJyZWNhbGN1bGF0ZUhTViIsIkNPTVBPTkVOVFMiLCJDb250cm9sbGVyIiwiZG9tRWxlbWVudCIsIl9fb25DaGFuZ2UiLCJfX29uRmluaXNoQ2hhbmdlIiwibmV3VmFsdWUiLCJ1cGRhdGVEaXNwbGF5IiwiZ2V0VmFsdWUiLCJFVkVOVF9NQVBfSU5WIiwiSFRNTEV2ZW50cyIsIk1vdXNlRXZlbnRzIiwiS2V5Ym9hcmRFdmVudHMiLCJDU1NfVkFMVUVfUElYRUxTIiwiY3NzVmFsdWVUb1BpeGVscyIsImRvbSIsIm1ha2VTZWxlY3RhYmxlIiwiZWxlbSIsInNlbGVjdGFibGUiLCJvbnNlbGVjdHN0YXJ0IiwiTW96VXNlclNlbGVjdCIsIktodG1sVXNlclNlbGVjdCIsInVuc2VsZWN0YWJsZSIsIm1ha2VGdWxsc2NyZWVuIiwiaG9yIiwidmVydCIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsInBvc2l0aW9uIiwibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiZmFrZUV2ZW50IiwiZXZlbnRUeXBlIiwicGFycyIsImF1eCIsInBhcmFtcyIsImNsYXNzTmFtZSIsImV2dCIsImNyZWF0ZUV2ZW50IiwiaW5pdE1vdXNlRXZlbnQiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsImNsaWNrQ291bnQiLCJjbGllbnRYIiwiY2xpZW50WSIsImluaXQiLCJpbml0S2V5Ym9hcmRFdmVudCIsImluaXRLZXlFdmVudCIsImNoYXJDb2RlIiwiaW5pdEV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsImV2ZW50IiwibmV3Qm9vbCIsImF0dGFjaEV2ZW50IiwidW5iaW5kIiwiZGV0YWNoRXZlbnQiLCJhZGRDbGFzcyIsImNsYXNzZXMiLCJyZW1vdmVDbGFzcyIsImluZGV4Iiwic3BsaWNlIiwiaGFzQ2xhc3MiLCJSZWdFeHAiLCJnZXRXaWR0aCIsImdldENvbXB1dGVkU3R5bGUiLCJnZXRIZWlnaHQiLCJnZXRPZmZzZXQiLCJlbCIsIm9mZnNldFBhcmVudCIsIm9mZnNldExlZnQiLCJvZmZzZXRUb3AiLCJpc0FjdGl2ZSIsImFjdGl2ZUVsZW1lbnQiLCJCb29sZWFuQ29udHJvbGxlciIsIl9Db250cm9sbGVyIiwiX3RoaXMyIiwiX3RoaXMiLCJfX3ByZXYiLCJfX2NoZWNrYm94Iiwic2V0QXR0cmlidXRlIiwic2V0VmFsdWUiLCJjaGVja2VkIiwiT3B0aW9uQ29udHJvbGxlciIsIm9wdGlvbnMiLCJfX3NlbGVjdCIsImlubmVySFRNTCIsInNlbGVjdGVkSW5kZXgiLCJTdHJpbmdDb250cm9sbGVyIiwib25DaGFuZ2UiLCJfX2lucHV0IiwiYmx1ciIsIm51bURlY2ltYWxzIiwiTnVtYmVyQ29udHJvbGxlciIsIl9wYXJhbXMiLCJfX21pbiIsIl9fbWF4IiwiX19zdGVwIiwic3RlcCIsIl9faW1wbGllZFN0ZXAiLCJwb3ciLCJMTjEwIiwiX19wcmVjaXNpb24iLCJfdiIsIm1pblZhbHVlIiwibWF4VmFsdWUiLCJzdGVwVmFsdWUiLCJOdW1iZXJDb250cm9sbGVyQm94IiwiX051bWJlckNvbnRyb2xsZXIiLCJfX3RydW5jYXRpb25TdXNwZW5kZWQiLCJwcmV2WSIsIm9uRmluaXNoIiwib25Nb3VzZURyYWciLCJkaWZmIiwib25Nb3VzZVVwIiwiYXR0ZW1wdGVkIiwidGVuVG8iLCJpMSIsImkyIiwibzEiLCJvMiIsIk51bWJlckNvbnRyb2xsZXJTbGlkZXIiLCJiZ1JlY3QiLCJfX2JhY2tncm91bmQiLCJvblRvdWNoTW92ZSIsInRvdWNoZXMiLCJvblRvdWNoRW5kIiwiX19mb3JlZ3JvdW5kIiwicGN0IiwiRnVuY3Rpb25Db250cm9sbGVyIiwidGV4dCIsIl9fYnV0dG9uIiwiZmlyZSIsIkNvbG9yQ29udHJvbGxlciIsIl9fY29sb3IiLCJfX3RlbXAiLCJfX3NlbGVjdG9yIiwiX19zYXR1cmF0aW9uX2ZpZWxkIiwiX19maWVsZF9rbm9iIiwiX19maWVsZF9rbm9iX2JvcmRlciIsIl9faHVlX2tub2IiLCJfX2h1ZV9maWVsZCIsIl9faW5wdXRfdGV4dFNoYWRvdyIsIm9uQmx1ciIsInZhbHVlRmllbGQiLCJmaWVsZERvd24iLCJzZXRTViIsImZpZWxkVXBTViIsImZpZWxkRG93bkgiLCJzZXRIIiwiZmllbGRVcEgiLCJ0b09yaWdpbmFsIiwiZmllbGRSZWN0IiwiX3JlZiIsInBhZGRpbmciLCJiYWNrZ3JvdW5kQ29sb3IiLCJib3hTaGFkb3ciLCJib3JkZXIiLCJib3JkZXJSYWRpdXMiLCJ6SW5kZXgiLCJib3JkZXJSaWdodCIsIm1hcmdpblJpZ2h0IiwiZGlzcGxheSIsImN1cnNvciIsImJhY2tncm91bmQiLCJsaW5lYXJHcmFkaWVudCIsImNzc1RleHQiLCJvdXRsaW5lIiwidGV4dEFsaWduIiwiZm9udFdlaWdodCIsInRleHRTaGFkb3ciLCJtaXNtYXRjaCIsImZsaXAiLCJfZmxpcCIsIm1hcmdpbkxlZnQiLCJtYXJnaW5Ub3AiLCJ0b0hleFN0cmluZyIsInZlbmRvcnMiLCJ2ZW5kb3IiLCJjc3MiLCJjc3NDb250ZW50IiwiaW5kb2MiLCJkb2MiLCJpbmplY3RlZCIsImhlYWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIkNvbnRyb2xsZXJGYWN0b3J5IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lJDEiLCJ3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJtb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJvUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwibXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjYWxsYmFjayIsIkNlbnRlcmVkRGl2IiwiYmFja2dyb3VuZEVsZW1lbnQiLCJvcGFjaXR5IiwiV2Via2l0VHJhbnNpdGlvbiIsInRyYW5zaXRpb24iLCJoaWRlIiwid2Via2l0VHJhbnNmb3JtIiwibGF5b3V0IiwiX19fJGluc2VydFN0eWxlIiwiREVGQVVMVF9ERUZBVUxUX1BSRVNFVF9OQU1FIiwiU1VQUE9SVFNfTE9DQUxfU1RPUkFHRSIsImxvY2FsU3RvcmFnZSIsIlNBVkVfRElBTE9HVUUiLCJhdXRvUGxhY2VWaXJnaW4iLCJhdXRvUGxhY2VDb250YWluZXIiLCJoaWRlYWJsZUd1aXMiLCJHVUkiLCJfX3VsIiwiX19mb2xkZXJzIiwiX19jb250cm9sbGVycyIsIl9fcmVtZW1iZXJlZE9iamVjdHMiLCJfX3JlbWVtYmVyZWRPYmplY3RJbmRlY2VzVG9Db250cm9sbGVycyIsIl9fbGlzdGVuaW5nIiwiY2xvc2VPblRvcCIsImF1dG9QbGFjZSIsIkRFRkFVTFRfV0lEVEgiLCJyZXNpemFibGUiLCJoaWRlYWJsZSIsInNjcm9sbGFibGUiLCJyb290IiwidXNlTG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsImdldExvY2FsU3RvcmFnZUhhc2giLCJzYXZlVG9Mb2NhbFN0b3JhZ2UiLCJ0aXRsZVJvdyIsImdldFJvb3QiLCJndWkiLCJfX3ByZXNldF9zZWxlY3QiLCJzZXRQcmVzZXRTZWxlY3RJbmRleCIsInJldmVydCIsInNldFdpZHRoIiwiY2xvc2VkIiwiQ0xBU1NfQ0xPU0VEIiwib25SZXNpemUiLCJfX2Nsb3NlQnV0dG9uIiwiVEVYVF9PUEVOIiwiVEVYVF9DTE9TRUQiLCJib29sIiwic2V0SXRlbSIsIkNMQVNTX01BSU4iLCJzYXZlZEd1aSIsIkpTT04iLCJwYXJzZSIsIkNMQVNTX0NMT1NFX0JVVFRPTiIsIkNMQVNTX0NMT1NFX1RPUCIsImluc2VydEJlZm9yZSIsImNoaWxkTm9kZXMiLCJDTEFTU19DTE9TRV9CT1RUT00iLCJ0aXRsZVJvd05hbWUiLCJjcmVhdGVUZXh0Tm9kZSIsImFkZFJvdyIsIkNMQVNTX0FVVE9fUExBQ0VfQ09OVEFJTkVSIiwiQ0xBU1NfQVVUT19QTEFDRSIsIl9fcmVzaXplSGFuZGxlciIsIm9uUmVzaXplRGVib3VuY2VkIiwiYWRkUmVzaXplSGFuZGxlIiwic2F2ZVRvTG9jYWxTdG9yYWdlSWZQb3NzaWJsZSIsInN0cmluZ2lmeSIsImdldFNhdmVPYmplY3QiLCJuZXdEb20iLCJsaUJlZm9yZSIsImxpIiwicmVtb3ZlTGlzdGVuZXJzIiwibWFya1ByZXNldE1vZGlmaWVkIiwibW9kaWZpZWQiLCJyZWNhbGxTYXZlZFZhbHVlIiwiY29udHJvbGxlciIsIm1hdGNoZWRJbmRleCIsImNvbnRyb2xsZXJNYXAiLCJyZW1lbWJlcmVkIiwicHJlc2V0TWFwIiwiX2FkZCIsImZhY3RvcnlBcmdzIiwiYmVmb3JlIiwiX19saSIsImNvbnRhaW5lciIsIkNMQVNTX0NPTlRST0xMRVJfUk9XIiwiX19ndWkiLCJfb3B0aW9ucyIsIm5leHRTaWJsaW5nIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwicmVtb3ZlIiwiX25leHRTaWJsaW5nIiwiX25hbWUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImxpc3RlbiIsImJveCIsIm1ldGhvZCIsInBiIiwicmV0dXJuZWQiLCJvbGROYW1lIiwid2FzTGlzdGVuaW5nIiwibmV3Q29udHJvbGxlciIsInN0b3BQcm9wYWdhdGlvbiIsImJvcmRlckxlZnRDb2xvciIsImlzTW9kaWZpZWQiLCJhdWdtZW50Q29udHJvbGxlciIsImxvY2F0aW9uIiwiYWRkUHJlc2V0T3B0aW9uIiwic2V0U2VsZWN0ZWQiLCJzaG93SGlkZUV4cGxhaW4iLCJleHBsYWluIiwicG1vdXNlWCIsImRyYWciLCJkcmFnU3RvcCIsIkNMQVNTX0RSQUciLCJkcmFnU3RhcnQiLCJfX3Jlc2l6ZV9oYW5kbGUiLCJfX3NhdmVfcm93IiwiZ2V0Q3VycmVudFByZXNldCIsInVzZUluaXRpYWxWYWx1ZXMiLCJzYXZlZFZhbHVlcyIsInRvZ2dsZUhpZGUiLCJDTEFTU19UT09fVEFMTCIsIl9rZXlkb3duSGFuZGxlciIsIndoaWNoIiwiYWRkIiwiYWRkQ29sb3IiLCJzdWJmb2xkZXIiLCJyZW1vdmVGb2xkZXIiLCJhZGRGb2xkZXIiLCJuZXdHdWlQYXJhbXMiLCJmb2xkZXJzIiwiZm9sZGVyIiwib3BlbiIsImNsb3NlIiwic2hvdyIsIm5vZGUiLCJvZmZzZXRIZWlnaHQiLCJyZW1lbWJlciIsImRpdiIsImZpcnN0Q2hpbGQiLCJnZWFycyIsImJ1dHRvbiIsImJ1dHRvbjIiLCJidXR0b24zIiwic2VsZWN0IiwiZ2V0RWxlbWVudEJ5SWQiLCJsb2NhbFN0b3JhZ2VDaGVja0JveCIsInNhdmVMb2NhbGx5IiwibmV3Q29uc3RydWN0b3JUZXh0QXJlYSIsImZvY3VzIiwicHJlc2V0TmFtZSIsInByb21wdCIsInNhdmVBcyIsImFkZFNhdmVNZW51IiwidXBkYXRlRGlzcGxheXMiLCJjb250cm9sbGVyQXJyYXkiLCJtYXRoIiwiY29udHJvbGxlcnMiLCJkb20kMSIsIkdVSSQxIiwiZGVmaW5lIiwiYW1kIiwiZGF0IiwicG9vbCIsIkdMT0JBTCIsInN0YXJ0ZGVub20iLCJzaWduaWZpY2FuY2UiLCJvdmVyZmxvdyIsIm9sZFJhbmRvbSIsIkFSQzQiLCJrZXlsZW4iLCJtZSIsImoiLCJjb3VudCIsIm1peGtleSIsInNtZWFyIiwic3RyaW5nc2VlZCIsInRvc3RyaW5nIiwiYXJjNCIsImZsYXR0ZW4iLCJkZXB0aCIsInByb3AiLCJ0eXAiLCJlbnRyb3B5IiwiY3J5cHRvIiwiZ2V0UmFuZG9tVmFsdWVzIiwibmF2aWdhdG9yIiwicGx1Z2lucyIsInNjcmVlbiIsImF1dG9zZWVkIiwicmVzZXRHbG9iYWwiLCJGMiIsIkcyIiwiRzMiLCJGNCIsIkc0IiwicmFuZG9tT3JTZWVkIiwiczAiLCJzMSIsInMyIiwibWFzaCIsImFsZWEiLCJidWlsZFBlcm11dGF0aW9uVGFibGUiLCJwZXJtIiwicGVybU1vZDEyIiwiZ3JhZDMiLCJGbG9hdDMyQXJyYXkiLCJncmFkNCIsInhpbiIsInlpbiIsImoxIiwibjAiLCJuMSIsIm4yIiwieDAiLCJ5MCIsIngxIiwieTEiLCJ4MiIsInkyIiwiaWkiLCJqaiIsInQwIiwiZ2kwIiwidDEiLCJnaTEiLCJ0MiIsImdpMiIsInppbiIsIm4zIiwiazEiLCJqMiIsImsyIiwiejAiLCJ6MSIsInoyIiwieDMiLCJ5MyIsInozIiwia2siLCJ0MyIsImdpMyIsIm40IiwibDEiLCJsMiIsImkzIiwiajMiLCJrMyIsImwzIiwidzAiLCJyYW5reCIsInJhbmt5IiwicmFua3oiLCJyYW5rdyIsIncxIiwidzIiLCJ3MyIsIng0IiwieTQiLCJ6NCIsInc0IiwibGwiLCJ0NCIsImdpNCIsIl9idWlsZFBlcm11dGF0aW9uVGFibGUiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsImdyaWRDb2x1bW5zIiwiZ3JpZFJvd3MiLCJtYXhDb2x1bW5zTWVyZ2UiLCJtYXhSb3dzTWVyZ2UiLCJhbGxvd0xpZ2h0IiwiREVCVUciLCJjb3VudGVyIiwiZ2V0UmFuZG9tQ29sb3IiLCJjb2xvcnMiLCJkYXJrIiwibGlnaHQiLCJnZXRSYW5kb21TaGFwZVR5cGVCeVJhdGlvIiwiMC41IiwiMiIsInN0ZW5jaWxzIiwicG9pbnRzIiwibWVyZ2VkQ2VsbHMiLCJnZXRDZWxsc0J5WEluZGV4IiwiY29sIiwicG9pbnQiLCJnZXRYSW5kZXgiLCJnZXRDZWxsc0J5WUluZGV4Iiwicm93IiwicG9pbnRzVG9GaWx0ZXIiLCJnZXRZSW5kZXgiLCJjcmVhdGVQaWxsYXIiLCJzdGFydENvbElEIiwiZW5kQ29sSUQiLCJwb2ludHNJbkNvbEEiLCJwb2ludHNJbkNvbEIiLCJjZWxsIiwibHQiLCJydCIsImxiIiwicmIiLCJjb2x1bW4iLCJzaGFwZVR5cGUiLCJjcmVhdGVSb3ciLCJzdGFydFJvd0lEIiwiZW5kUm93SUQiLCJwb2ludHNSYW5nZSIsInBvaW50c0luUm93QSIsInBvaW50c0luUm93QiIsInNpemUiLCJub2lzZU9mZnNldCIsImNvbG91ciIsImNyZWF0ZVBvaW50cyIsImNvbEFtb3VudCIsImNvbEluZGV4Iiwic3RhcnRJbmRleCIsInRvdGFsUm93c0xlZnQiLCJhbW91bnRUb01lcmdlIiwiY2VpbCIsImVuZEluZGV4IiwicGlsbGFyQSIsInJvd0Ftb3VudCIsInJvd3NQaWxsYXJBIiwiY3VycmVudENvbHMiLCJjdXJyZW50Um93cyIsImN1cnJlbnRNYXhDb2x1bW5zTWVyZ2UiLCJjdXJyZW50TWF4Um93c01lcmdlIiwiY3VycmVudERlYnVnIiwiY3VycmVudEFsbG93TGlnaHQiLCJjdXJyZW50Q291bnRlciIsIm1hcmdpbiIsImNvbnZlcnRUb1Bvc2l0aW9uT25DYW52YXMiLCJ4SW5kZXgiLCJ5SW5kZXgiLCJjbGVhclJlY3QiLCJmaWxsU3R5bGUiLCJmaWxsUmVjdCIsInRleHRCYXNlbGluZSIsImZvbnQiLCJtb3ZlVG8iLCJiZWdpblBhdGgiLCJ0b3BMZWZ0IiwidG9wUmlnaHQiLCJib3R0b21SaWdodCIsImJvdHRvbUxlZnQiLCJmaXJzdFBvaW50IiwiY2VudGVyIiwic3RhcnRBbmdsZSIsImVuZEFuZ2xlIiwidmlzdWFsV2lkdGgiLCJhcmMiLCJyZWN0IiwiZmlsbCIsImNsb3NlUGF0aCIsImxpbmVUbyIsInN0cm9rZVN0eWxlIiwiZmlsbFRleHQiLCJzdHJva2UiLCJDQU5WQVNfU0tFVENIX0RFRkFVTFRfU1RPUkFHRV9LRVkiXSwibWFwcGluZ3MiOiJDQUFBLFdBQUEsT0FBQSxTQUFBQSxFQUFBQyxFQUFBQyxFQUFBQyxHQUFBLFNBQUFDLEVBQUFDLEVBQUFDLEdBQUEsSUFBQUosRUFBQUcsR0FBQSxDQUFBLElBQUFKLEVBQUFJLEdBQUEsQ0FBQSxJQUFBRSxFQUFBLG1CQUFBQyxTQUFBQSxRQUFBLElBQUFGLEdBQUFDLEVBQUEsT0FBQUEsRUFBQUYsR0FBQSxHQUFBLEdBQUFJLEVBQUEsT0FBQUEsRUFBQUosR0FBQSxHQUFBLElBQUFLLEVBQUEsSUFBQUMsTUFBQSx1QkFBQU4sRUFBQSxLQUFBLE1BQUFLLEVBQUFFLEtBQUEsbUJBQUFGLEVBQUEsSUFBQUcsRUFBQVgsRUFBQUcsR0FBQSxDQUFBUyxRQUFBLElBQUFiLEVB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QUFJdGpCLEVBQU0sY0FBZSxFQUFHLEdBQUksR0FBR2dWLFNBQVMxWCxHQUNoRHNnQixFQUFJMEYsSUFBSXRqQixFQUFNLFdBQVksRUFBRyxHQUFJLEdBQUdnVixTQUFTMVgsR0FDN0NzZ0IsRUFBSTBGLElBQUl0akIsRUFBTSxrQkFBbUIsRUFBRyxHQUFJLEdBQUdnVixTQUFTMVgsR0FDcERzZ0IsRUFBSTBGLElBQUl0akIsRUFBTSxlQUFnQixFQUFHLEdBQUksR0FBR2dWLFNBQVMxWCxHQUNqRHNnQixFQUFJMEYsSUFBSXRqQixFQUFNLGNBQWNnVixTQUFTMVgsR0FDckNzZ0IsRUFBSTBGLElBQUl0akIsRUFBTSxTQUFTZ1YsU0FBUzFYLEdBQ2hDc2dCLEVBQUkwRixJQUFJdGpCLEVBQU0sV0FHaEIsU0FBUzFDLElBQ1BvSixFQUFRcEosV0F6QlosNElDN2NBN1EsRUFBQXVsQyxrQ0FBQW5uQyxPQUFBczNCLFNBQUFydEIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwibW9kdWxlLmV4cG9ydHMgPSB3cmFwO1xuZnVuY3Rpb24gd3JhcCAodmFsdWUsIGZyb20sIHRvKSB7XG4gIGlmICh0eXBlb2YgZnJvbSAhPT0gJ251bWJlcicgfHwgdHlwZW9mIHRvICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ011c3Qgc3BlY2lmeSBcInRvXCIgYW5kIFwiZnJvbVwiIGFyZ3VtZW50cyBhcyBudW1iZXJzJyk7XG4gIH1cbiAgLy8gYWxnb3JpdGhtIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTg1MjYyOC81OTk4ODRcbiAgaWYgKGZyb20gPiB0bykge1xuICAgIHZhciB0ID0gZnJvbTtcbiAgICBmcm9tID0gdG87XG4gICAgdG8gPSB0O1xuICB9XG4gIHZhciBjeWNsZSA9IHRvIC0gZnJvbTtcbiAgaWYgKGN5Y2xlID09PSAwKSB7XG4gICAgcmV0dXJuIHRvO1xuICB9XG4gIHJldHVybiB2YWx1ZSAtIGN5Y2xlICogTWF0aC5mbG9vcigodmFsdWUgLSBmcm9tKSAvIGN5Y2xlKTtcbn1cbiIsInZhciBkZWZpbmVkID0gcmVxdWlyZSgnZGVmaW5lZCcpO1xudmFyIHdyYXAgPSByZXF1aXJlKCcuL2xpYi93cmFwJyk7XG52YXIgRVBTSUxPTiA9IE51bWJlci5FUFNJTE9OO1xuXG5mdW5jdGlvbiBjbGFtcCAodmFsdWUsIG1pbiwgbWF4KSB7XG4gIHJldHVybiBtaW4gPCBtYXhcbiAgICA/ICh2YWx1ZSA8IG1pbiA/IG1pbiA6IHZhbHVlID4gbWF4ID8gbWF4IDogdmFsdWUpXG4gICAgOiAodmFsdWUgPCBtYXggPyBtYXggOiB2YWx1ZSA+IG1pbiA/IG1pbiA6IHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gY2xhbXAwMSAodikge1xuICByZXR1cm4gY2xhbXAodiwgMCwgMSk7XG59XG5cbmZ1bmN0aW9uIGxlcnAgKG1pbiwgbWF4LCB0KSB7XG4gIHJldHVybiBtaW4gKiAoMSAtIHQpICsgbWF4ICogdDtcbn1cblxuZnVuY3Rpb24gaW52ZXJzZUxlcnAgKG1pbiwgbWF4LCB0KSB7XG4gIGlmIChNYXRoLmFicyhtaW4gLSBtYXgpIDwgRVBTSUxPTikgcmV0dXJuIDA7XG4gIGVsc2UgcmV0dXJuICh0IC0gbWluKSAvIChtYXggLSBtaW4pO1xufVxuXG5mdW5jdGlvbiBzbW9vdGhzdGVwIChtaW4sIG1heCwgdCkge1xuICB2YXIgeCA9IGNsYW1wKGludmVyc2VMZXJwKG1pbiwgbWF4LCB0KSwgMCwgMSk7XG4gIHJldHVybiB4ICogeCAqICgzIC0gMiAqIHgpO1xufVxuXG5mdW5jdGlvbiB0b0Zpbml0ZSAobiwgZGVmYXVsdFZhbHVlKSB7XG4gIGRlZmF1bHRWYWx1ZSA9IGRlZmluZWQoZGVmYXVsdFZhbHVlLCAwKTtcbiAgcmV0dXJuIHR5cGVvZiBuID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShuKSA/IG4gOiBkZWZhdWx0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFZlY3RvciAoZGltcykge1xuICBpZiAodHlwZW9mIGRpbXMgIT09ICdudW1iZXInKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBkaW1zIGFyZ3VtZW50Jyk7XG4gIHJldHVybiBmdW5jdGlvbiAocCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgZGVmYXVsdFZhbHVlID0gZGVmaW5lZChkZWZhdWx0VmFsdWUsIDApO1xuICAgIHZhciBzY2FsYXI7XG4gICAgaWYgKHAgPT0gbnVsbCkge1xuICAgICAgLy8gTm8gdmVjdG9yLCBjcmVhdGUgYSBkZWZhdWx0IG9uZVxuICAgICAgc2NhbGFyID0gZGVmYXVsdFZhbHVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHAgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHApKSB7XG4gICAgICAvLyBFeHBhbmQgc2luZ2xlIGNoYW5uZWwgdG8gbXVsdGlwbGUgdmVjdG9yXG4gICAgICBzY2FsYXIgPSBwO1xuICAgIH1cblxuICAgIHZhciBvdXQgPSBbXTtcbiAgICB2YXIgaTtcbiAgICBpZiAoc2NhbGFyID09IG51bGwpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBkaW1zOyBpKyspIHtcbiAgICAgICAgb3V0W2ldID0gdG9GaW5pdGUocFtpXSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGRpbXM7IGkrKykge1xuICAgICAgICBvdXRbaV0gPSBzY2FsYXI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGxlcnBBcnJheSAobWluLCBtYXgsIHQsIG91dCkge1xuICBvdXQgPSBvdXQgfHwgW107XG4gIGlmIChtaW4ubGVuZ3RoICE9PSBtYXgubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWluIGFuZCBtYXggYXJyYXkgYXJlIGV4cGVjdGVkIHRvIGhhdmUgdGhlIHNhbWUgbGVuZ3RoJyk7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaW4ubGVuZ3RoOyBpKyspIHtcbiAgICBvdXRbaV0gPSBsZXJwKG1pbltpXSwgbWF4W2ldLCB0KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBuZXdBcnJheSAobiwgaW5pdGlhbFZhbHVlKSB7XG4gIG4gPSBkZWZpbmVkKG4sIDApO1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBuIGFyZ3VtZW50IHRvIGJlIGEgbnVtYmVyJyk7XG4gIHZhciBvdXQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIG91dC5wdXNoKGluaXRpYWxWYWx1ZSk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIGxpbnNwYWNlIChuLCBvcHRzKSB7XG4gIG4gPSBkZWZpbmVkKG4sIDApO1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBuIGFyZ3VtZW50IHRvIGJlIGEgbnVtYmVyJyk7XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdib29sZWFuJykge1xuICAgIG9wdHMgPSB7IGVuZHBvaW50OiB0cnVlIH07XG4gIH1cbiAgdmFyIG9mZnNldCA9IGRlZmluZWQob3B0cy5vZmZzZXQsIDApO1xuICBpZiAob3B0cy5lbmRwb2ludCkge1xuICAgIHJldHVybiBuZXdBcnJheShuKS5tYXAoZnVuY3Rpb24gKF8sIGkpIHtcbiAgICAgIHJldHVybiBuIDw9IDEgPyAwIDogKChpICsgb2Zmc2V0KSAvIChuIC0gMSkpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXdBcnJheShuKS5tYXAoZnVuY3Rpb24gKF8sIGkpIHtcbiAgICAgIHJldHVybiAoaSArIG9mZnNldCkgLyBuO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxlcnBGcmFtZXMgKHZhbHVlcywgdCwgb3V0KSB7XG4gIHQgPSBjbGFtcCh0LCAwLCAxKTtcblxuICB2YXIgbGVuID0gdmFsdWVzLmxlbmd0aCAtIDE7XG4gIHZhciB3aG9sZSA9IHQgKiBsZW47XG4gIHZhciBmcmFtZSA9IE1hdGguZmxvb3Iod2hvbGUpO1xuICB2YXIgZnJhY3QgPSB3aG9sZSAtIGZyYW1lO1xuXG4gIHZhciBuZXh0RnJhbWUgPSBNYXRoLm1pbihmcmFtZSArIDEsIGxlbik7XG4gIHZhciBhID0gdmFsdWVzW2ZyYW1lICUgdmFsdWVzLmxlbmd0aF07XG4gIHZhciBiID0gdmFsdWVzW25leHRGcmFtZSAlIHZhbHVlcy5sZW5ndGhdO1xuICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIHR5cGVvZiBiID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBsZXJwKGEsIGIsIGZyYWN0KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGEpICYmIEFycmF5LmlzQXJyYXkoYikpIHtcbiAgICByZXR1cm4gbGVycEFycmF5KGEsIGIsIGZyYWN0LCBvdXQpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01pc21hdGNoIGluIHZhbHVlIHR5cGUgb2YgdHdvIGFycmF5IGVsZW1lbnRzOiAnICsgZnJhbWUgKyAnIGFuZCAnICsgbmV4dEZyYW1lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb2QgKGEsIGIpIHtcbiAgcmV0dXJuICgoYSAlIGIpICsgYikgJSBiO1xufVxuXG5mdW5jdGlvbiBkZWdUb1JhZCAobikge1xuICByZXR1cm4gbiAqIE1hdGguUEkgLyAxODA7XG59XG5cbmZ1bmN0aW9uIHJhZFRvRGVnIChuKSB7XG4gIHJldHVybiBuICogMTgwIC8gTWF0aC5QSTtcbn1cblxuZnVuY3Rpb24gZnJhY3QgKG4pIHtcbiAgcmV0dXJuIG4gLSBNYXRoLmZsb29yKG4pO1xufVxuXG5mdW5jdGlvbiBzaWduIChuKSB7XG4gIGlmIChuID4gMCkgcmV0dXJuIDE7XG4gIGVsc2UgaWYgKG4gPCAwKSByZXR1cm4gLTE7XG4gIGVsc2UgcmV0dXJuIDA7XG59XG5cbi8vIFNwZWNpZmljIGZ1bmN0aW9uIGZyb20gVW5pdHkgLyBvZk1hdGgsIG5vdCBzdXJlIGl0cyBuZWVkZWQ/XG4vLyBmdW5jdGlvbiBsZXJwV3JhcCAoYSwgYiwgdCwgbWluLCBtYXgpIHtcbi8vICAgcmV0dXJuIHdyYXAoYSArIHdyYXAoYiAtIGEsIG1pbiwgbWF4KSAqIHQsIG1pbiwgbWF4KVxuLy8gfVxuXG5mdW5jdGlvbiBwaW5nUG9uZyAodCwgbGVuZ3RoKSB7XG4gIHQgPSBtb2QodCwgbGVuZ3RoICogMik7XG4gIHJldHVybiBsZW5ndGggLSBNYXRoLmFicyh0IC0gbGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gZGFtcCAoYSwgYiwgbGFtYmRhLCBkdCkge1xuICByZXR1cm4gbGVycChhLCBiLCAxIC0gTWF0aC5leHAoLWxhbWJkYSAqIGR0KSk7XG59XG5cbmZ1bmN0aW9uIGRhbXBBcnJheSAoYSwgYiwgbGFtYmRhLCBkdCwgb3V0KSB7XG4gIG91dCA9IG91dCB8fCBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0W2ldID0gZGFtcChhW2ldLCBiW2ldLCBsYW1iZGEsIGR0KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBtYXBSYW5nZSAodmFsdWUsIGlucHV0TWluLCBpbnB1dE1heCwgb3V0cHV0TWluLCBvdXRwdXRNYXgsIGNsYW1wKSB7XG4gIC8vIFJlZmVyZW5jZTpcbiAgLy8gaHR0cHM6Ly9vcGVuZnJhbWV3b3Jrcy5jYy9kb2N1bWVudGF0aW9uL21hdGgvb2ZNYXRoL1xuICBpZiAoTWF0aC5hYnMoaW5wdXRNaW4gLSBpbnB1dE1heCkgPCBFUFNJTE9OKSB7XG4gICAgcmV0dXJuIG91dHB1dE1pbjtcbiAgfSBlbHNlIHtcbiAgICB2YXIgb3V0VmFsID0gKCh2YWx1ZSAtIGlucHV0TWluKSAvIChpbnB1dE1heCAtIGlucHV0TWluKSAqIChvdXRwdXRNYXggLSBvdXRwdXRNaW4pICsgb3V0cHV0TWluKTtcbiAgICBpZiAoY2xhbXApIHtcbiAgICAgIGlmIChvdXRwdXRNYXggPCBvdXRwdXRNaW4pIHtcbiAgICAgICAgaWYgKG91dFZhbCA8IG91dHB1dE1heCkgb3V0VmFsID0gb3V0cHV0TWF4O1xuICAgICAgICBlbHNlIGlmIChvdXRWYWwgPiBvdXRwdXRNaW4pIG91dFZhbCA9IG91dHB1dE1pbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvdXRWYWwgPiBvdXRwdXRNYXgpIG91dFZhbCA9IG91dHB1dE1heDtcbiAgICAgICAgZWxzZSBpZiAob3V0VmFsIDwgb3V0cHV0TWluKSBvdXRWYWwgPSBvdXRwdXRNaW47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRWYWw7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1vZDogbW9kLFxuICBmcmFjdDogZnJhY3QsXG4gIHNpZ246IHNpZ24sXG4gIGRlZ1RvUmFkOiBkZWdUb1JhZCxcbiAgcmFkVG9EZWc6IHJhZFRvRGVnLFxuICB3cmFwOiB3cmFwLFxuICBwaW5nUG9uZzogcGluZ1BvbmcsXG4gIGxpbnNwYWNlOiBsaW5zcGFjZSxcbiAgbGVycDogbGVycCxcbiAgbGVycEFycmF5OiBsZXJwQXJyYXksXG4gIGludmVyc2VMZXJwOiBpbnZlcnNlTGVycCxcbiAgbGVycEZyYW1lczogbGVycEZyYW1lcyxcbiAgY2xhbXA6IGNsYW1wLFxuICBjbGFtcDAxOiBjbGFtcDAxLFxuICBzbW9vdGhzdGVwOiBzbW9vdGhzdGVwLFxuICBkYW1wOiBkYW1wLFxuICBkYW1wQXJyYXk6IGRhbXBBcnJheSxcbiAgbWFwUmFuZ2U6IG1hcFJhbmdlLFxuICBleHBhbmQyRDogZXhwYW5kVmVjdG9yKDIpLFxuICBleHBhbmQzRDogZXhwYW5kVmVjdG9yKDMpLFxuICBleHBhbmQ0RDogZXhwYW5kVmVjdG9yKDQpXG59O1xuIiwidmFyIHNlZWRSYW5kb20gPSByZXF1aXJlKCdzZWVkLXJhbmRvbScpO1xudmFyIFNpbXBsZXhOb2lzZSA9IHJlcXVpcmUoJ3NpbXBsZXgtbm9pc2UnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnZGVmaW5lZCcpO1xuXG5mdW5jdGlvbiBjcmVhdGVSYW5kb20gKGRlZmF1bHRTZWVkKSB7XG4gIGRlZmF1bHRTZWVkID0gZGVmaW5lZChkZWZhdWx0U2VlZCwgbnVsbCk7XG4gIHZhciBkZWZhdWx0UmFuZG9tID0gTWF0aC5yYW5kb207XG4gIHZhciBjdXJyZW50U2VlZDtcbiAgdmFyIGN1cnJlbnRSYW5kb207XG4gIHZhciBub2lzZUdlbmVyYXRvcjtcbiAgdmFyIF9uZXh0R2F1c3NpYW4gPSBudWxsO1xuICB2YXIgX2hhc05leHRHYXVzc2lhbiA9IGZhbHNlO1xuXG4gIHNldFNlZWQoZGVmYXVsdFNlZWQpO1xuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGNyZWF0ZVJhbmRvbTogZnVuY3Rpb24gKGRlZmF1bHRTZWVkKSB7XG4gICAgICByZXR1cm4gY3JlYXRlUmFuZG9tKGRlZmF1bHRTZWVkKTtcbiAgICB9LFxuICAgIHNldFNlZWQ6IHNldFNlZWQsXG4gICAgZ2V0U2VlZDogZ2V0U2VlZCxcbiAgICBnZXRSYW5kb21TZWVkOiBnZXRSYW5kb21TZWVkLFxuICAgIHZhbHVlTm9uWmVybzogdmFsdWVOb25aZXJvLFxuICAgIHBlcm11dGVOb2lzZTogcGVybXV0ZU5vaXNlLFxuICAgIG5vaXNlMUQ6IG5vaXNlMUQsXG4gICAgbm9pc2UyRDogbm9pc2UyRCxcbiAgICBub2lzZTNEOiBub2lzZTNELFxuICAgIG5vaXNlNEQ6IG5vaXNlNEQsXG4gICAgc2lnbjogc2lnbixcbiAgICBib29sZWFuOiBib29sZWFuLFxuICAgIGNoYW5jZTogY2hhbmNlLFxuICAgIHJhbmdlOiByYW5nZSxcbiAgICByYW5nZUZsb29yOiByYW5nZUZsb29yLFxuICAgIHBpY2s6IHBpY2ssXG4gICAgc2h1ZmZsZTogc2h1ZmZsZSxcbiAgICBvbkNpcmNsZTogb25DaXJjbGUsXG4gICAgaW5zaWRlQ2lyY2xlOiBpbnNpZGVDaXJjbGUsXG4gICAgb25TcGhlcmU6IG9uU3BoZXJlLFxuICAgIGluc2lkZVNwaGVyZTogaW5zaWRlU3BoZXJlLFxuICAgIHF1YXRlcm5pb246IHF1YXRlcm5pb24sXG4gICAgd2VpZ2h0ZWQ6IHdlaWdodGVkLFxuICAgIHdlaWdodGVkU2V0OiB3ZWlnaHRlZFNldCxcbiAgICB3ZWlnaHRlZFNldEluZGV4OiB3ZWlnaHRlZFNldEluZGV4LFxuICAgIGdhdXNzaWFuOiBnYXVzc2lhblxuICB9O1xuXG4gIGZ1bmN0aW9uIHNldFNlZWQgKHNlZWQsIG9wdCkge1xuICAgIGlmICh0eXBlb2Ygc2VlZCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHNlZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjdXJyZW50U2VlZCA9IHNlZWQ7XG4gICAgICBjdXJyZW50UmFuZG9tID0gc2VlZFJhbmRvbShjdXJyZW50U2VlZCwgb3B0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudFNlZWQgPSB1bmRlZmluZWQ7XG4gICAgICBjdXJyZW50UmFuZG9tID0gZGVmYXVsdFJhbmRvbTtcbiAgICB9XG4gICAgbm9pc2VHZW5lcmF0b3IgPSBjcmVhdGVOb2lzZSgpO1xuICAgIF9uZXh0R2F1c3NpYW4gPSBudWxsO1xuICAgIF9oYXNOZXh0R2F1c3NpYW4gPSBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbHVlICgpIHtcbiAgICByZXR1cm4gY3VycmVudFJhbmRvbSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsdWVOb25aZXJvICgpIHtcbiAgICB2YXIgdSA9IDA7XG4gICAgd2hpbGUgKHUgPT09IDApIHUgPSB2YWx1ZSgpO1xuICAgIHJldHVybiB1O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U2VlZCAoKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRTZWVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UmFuZG9tU2VlZCAoKSB7XG4gICAgdmFyIHNlZWQgPSBTdHJpbmcoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMCkpO1xuICAgIHJldHVybiBzZWVkO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9pc2UgKCkge1xuICAgIHJldHVybiBuZXcgU2ltcGxleE5vaXNlKGN1cnJlbnRSYW5kb20pO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVybXV0ZU5vaXNlICgpIHtcbiAgICBub2lzZUdlbmVyYXRvciA9IGNyZWF0ZU5vaXNlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBub2lzZTFEICh4LCBmcmVxdWVuY3ksIGFtcGxpdHVkZSkge1xuICAgIGlmICghaXNGaW5pdGUoeCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ggY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgZnJlcXVlbmN5ID0gZGVmaW5lZChmcmVxdWVuY3ksIDEpO1xuICAgIGFtcGxpdHVkZSA9IGRlZmluZWQoYW1wbGl0dWRlLCAxKTtcbiAgICByZXR1cm4gYW1wbGl0dWRlICogbm9pc2VHZW5lcmF0b3Iubm9pc2UyRCh4ICogZnJlcXVlbmN5LCAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vaXNlMkQgKHgsIHksIGZyZXF1ZW5jeSwgYW1wbGl0dWRlKSB7XG4gICAgaWYgKCFpc0Zpbml0ZSh4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneCBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd5IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGZyZXF1ZW5jeSA9IGRlZmluZWQoZnJlcXVlbmN5LCAxKTtcbiAgICBhbXBsaXR1ZGUgPSBkZWZpbmVkKGFtcGxpdHVkZSwgMSk7XG4gICAgcmV0dXJuIGFtcGxpdHVkZSAqIG5vaXNlR2VuZXJhdG9yLm5vaXNlMkQoeCAqIGZyZXF1ZW5jeSwgeSAqIGZyZXF1ZW5jeSk7XG4gIH1cblxuICBmdW5jdGlvbiBub2lzZTNEICh4LCB5LCB6LCBmcmVxdWVuY3ksIGFtcGxpdHVkZSkge1xuICAgIGlmICghaXNGaW5pdGUoeCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ggY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh5KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneSBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHopKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd6IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGZyZXF1ZW5jeSA9IGRlZmluZWQoZnJlcXVlbmN5LCAxKTtcbiAgICBhbXBsaXR1ZGUgPSBkZWZpbmVkKGFtcGxpdHVkZSwgMSk7XG4gICAgcmV0dXJuIGFtcGxpdHVkZSAqIG5vaXNlR2VuZXJhdG9yLm5vaXNlM0QoXG4gICAgICB4ICogZnJlcXVlbmN5LFxuICAgICAgeSAqIGZyZXF1ZW5jeSxcbiAgICAgIHogKiBmcmVxdWVuY3lcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9pc2U0RCAoeCwgeSwgeiwgdywgZnJlcXVlbmN5LCBhbXBsaXR1ZGUpIHtcbiAgICBpZiAoIWlzRmluaXRlKHgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd4IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3kgY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh6KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneiBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHcpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd3IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGZyZXF1ZW5jeSA9IGRlZmluZWQoZnJlcXVlbmN5LCAxKTtcbiAgICBhbXBsaXR1ZGUgPSBkZWZpbmVkKGFtcGxpdHVkZSwgMSk7XG4gICAgcmV0dXJuIGFtcGxpdHVkZSAqIG5vaXNlR2VuZXJhdG9yLm5vaXNlNEQoXG4gICAgICB4ICogZnJlcXVlbmN5LFxuICAgICAgeSAqIGZyZXF1ZW5jeSxcbiAgICAgIHogKiBmcmVxdWVuY3ksXG4gICAgICB3ICogZnJlcXVlbmN5XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ24gKCkge1xuICAgIHJldHVybiBib29sZWFuKCkgPyAxIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBib29sZWFuICgpIHtcbiAgICByZXR1cm4gdmFsdWUoKSA+IDAuNTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoYW5jZSAobikge1xuICAgIG4gPSBkZWZpbmVkKG4sIDAuNSk7XG4gICAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhwZWN0ZWQgbiB0byBiZSBhIG51bWJlcicpO1xuICAgIHJldHVybiB2YWx1ZSgpIDwgbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJhbmdlIChtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgbWF4ID0gbWluO1xuICAgICAgbWluID0gMDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1pbiAhPT0gJ251bWJlcicgfHwgdHlwZW9mIG1heCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFsbCBhcmd1bWVudHMgdG8gYmUgbnVtYmVycycpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZSgpICogKG1heCAtIG1pbikgKyBtaW47XG4gIH1cblxuICBmdW5jdGlvbiByYW5nZUZsb29yIChtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgbWF4ID0gbWluO1xuICAgICAgbWluID0gMDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1pbiAhPT0gJ251bWJlcicgfHwgdHlwZW9mIG1heCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFsbCBhcmd1bWVudHMgdG8gYmUgbnVtYmVycycpO1xuICAgIH1cblxuICAgIHJldHVybiBNYXRoLmZsb29yKHJhbmdlKG1pbiwgbWF4KSk7XG4gIH1cblxuICBmdW5jdGlvbiBwaWNrIChhcnJheSkge1xuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGFycmF5W3JhbmdlRmxvb3IoMCwgYXJyYXkubGVuZ3RoKV07XG4gIH1cblxuICBmdW5jdGlvbiBzaHVmZmxlIChhcnIpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgQXJyYXksIGdvdCAnICsgdHlwZW9mIGFycik7XG4gICAgfVxuXG4gICAgdmFyIHJhbmQ7XG4gICAgdmFyIHRtcDtcbiAgICB2YXIgbGVuID0gYXJyLmxlbmd0aDtcbiAgICB2YXIgcmV0ID0gYXJyLnNsaWNlKCk7XG4gICAgd2hpbGUgKGxlbikge1xuICAgICAgcmFuZCA9IE1hdGguZmxvb3IodmFsdWUoKSAqIGxlbi0tKTtcbiAgICAgIHRtcCA9IHJldFtsZW5dO1xuICAgICAgcmV0W2xlbl0gPSByZXRbcmFuZF07XG4gICAgICByZXRbcmFuZF0gPSB0bXA7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNpcmNsZSAocmFkaXVzLCBvdXQpIHtcbiAgICByYWRpdXMgPSBkZWZpbmVkKHJhZGl1cywgMSk7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIHZhciB0aGV0YSA9IHZhbHVlKCkgKiAyLjAgKiBNYXRoLlBJO1xuICAgIG91dFswXSA9IHJhZGl1cyAqIE1hdGguY29zKHRoZXRhKTtcbiAgICBvdXRbMV0gPSByYWRpdXMgKiBNYXRoLnNpbih0aGV0YSk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2lkZUNpcmNsZSAocmFkaXVzLCBvdXQpIHtcbiAgICByYWRpdXMgPSBkZWZpbmVkKHJhZGl1cywgMSk7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIG9uQ2lyY2xlKDEsIG91dCk7XG4gICAgdmFyIHIgPSByYWRpdXMgKiBNYXRoLnNxcnQodmFsdWUoKSk7XG4gICAgb3V0WzBdICo9IHI7XG4gICAgb3V0WzFdICo9IHI7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uU3BoZXJlIChyYWRpdXMsIG91dCkge1xuICAgIHJhZGl1cyA9IGRlZmluZWQocmFkaXVzLCAxKTtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgdmFyIHUgPSB2YWx1ZSgpICogTWF0aC5QSSAqIDI7XG4gICAgdmFyIHYgPSB2YWx1ZSgpICogMiAtIDE7XG4gICAgdmFyIHBoaSA9IHU7XG4gICAgdmFyIHRoZXRhID0gTWF0aC5hY29zKHYpO1xuICAgIG91dFswXSA9IHJhZGl1cyAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguY29zKHBoaSk7XG4gICAgb3V0WzFdID0gcmFkaXVzICogTWF0aC5zaW4odGhldGEpICogTWF0aC5zaW4ocGhpKTtcbiAgICBvdXRbMl0gPSByYWRpdXMgKiBNYXRoLmNvcyh0aGV0YSk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2lkZVNwaGVyZSAocmFkaXVzLCBvdXQpIHtcbiAgICByYWRpdXMgPSBkZWZpbmVkKHJhZGl1cywgMSk7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIHZhciB1ID0gdmFsdWUoKSAqIE1hdGguUEkgKiAyO1xuICAgIHZhciB2ID0gdmFsdWUoKSAqIDIgLSAxO1xuICAgIHZhciBrID0gdmFsdWUoKTtcblxuICAgIHZhciBwaGkgPSB1O1xuICAgIHZhciB0aGV0YSA9IE1hdGguYWNvcyh2KTtcbiAgICB2YXIgciA9IHJhZGl1cyAqIE1hdGguY2JydChrKTtcbiAgICBvdXRbMF0gPSByICogTWF0aC5zaW4odGhldGEpICogTWF0aC5jb3MocGhpKTtcbiAgICBvdXRbMV0gPSByICogTWF0aC5zaW4odGhldGEpICogTWF0aC5zaW4ocGhpKTtcbiAgICBvdXRbMl0gPSByICogTWF0aC5jb3ModGhldGEpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBxdWF0ZXJuaW9uIChvdXQpIHtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgdmFyIHUxID0gdmFsdWUoKTtcbiAgICB2YXIgdTIgPSB2YWx1ZSgpO1xuICAgIHZhciB1MyA9IHZhbHVlKCk7XG5cbiAgICB2YXIgc3ExID0gTWF0aC5zcXJ0KDEgLSB1MSk7XG4gICAgdmFyIHNxMiA9IE1hdGguc3FydCh1MSk7XG5cbiAgICB2YXIgdGhldGExID0gTWF0aC5QSSAqIDIgKiB1MjtcbiAgICB2YXIgdGhldGEyID0gTWF0aC5QSSAqIDIgKiB1MztcblxuICAgIHZhciB4ID0gTWF0aC5zaW4odGhldGExKSAqIHNxMTtcbiAgICB2YXIgeSA9IE1hdGguY29zKHRoZXRhMSkgKiBzcTE7XG4gICAgdmFyIHogPSBNYXRoLnNpbih0aGV0YTIpICogc3EyO1xuICAgIHZhciB3ID0gTWF0aC5jb3ModGhldGEyKSAqIHNxMjtcbiAgICBvdXRbMF0gPSB4O1xuICAgIG91dFsxXSA9IHk7XG4gICAgb3V0WzJdID0gejtcbiAgICBvdXRbM10gPSB3O1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiB3ZWlnaHRlZFNldCAoc2V0KSB7XG4gICAgc2V0ID0gc2V0IHx8IFtdO1xuICAgIGlmIChzZXQubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gc2V0W3dlaWdodGVkU2V0SW5kZXgoc2V0KV0udmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiB3ZWlnaHRlZFNldEluZGV4IChzZXQpIHtcbiAgICBzZXQgPSBzZXQgfHwgW107XG4gICAgaWYgKHNldC5sZW5ndGggPT09IDApIHJldHVybiAtMTtcbiAgICByZXR1cm4gd2VpZ2h0ZWQoc2V0Lm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHMud2VpZ2h0O1xuICAgIH0pKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdlaWdodGVkICh3ZWlnaHRzKSB7XG4gICAgd2VpZ2h0cyA9IHdlaWdodHMgfHwgW107XG4gICAgaWYgKHdlaWdodHMubGVuZ3RoID09PSAwKSByZXR1cm4gLTE7XG4gICAgdmFyIHRvdGFsV2VpZ2h0ID0gMDtcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWlnaHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0b3RhbFdlaWdodCArPSB3ZWlnaHRzW2ldO1xuICAgIH1cblxuICAgIGlmICh0b3RhbFdlaWdodCA8PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ1dlaWdodHMgbXVzdCBzdW0gdG8gPiAwJyk7XG5cbiAgICB2YXIgcmFuZG9tID0gdmFsdWUoKSAqIHRvdGFsV2VpZ2h0O1xuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWlnaHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmFuZG9tIDwgd2VpZ2h0c1tpXSkge1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cbiAgICAgIHJhbmRvbSAtPSB3ZWlnaHRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdhdXNzaWFuIChtZWFuLCBzdGFuZGFyZERlcml2YXRpb24pIHtcbiAgICBtZWFuID0gZGVmaW5lZChtZWFuLCAwKTtcbiAgICBzdGFuZGFyZERlcml2YXRpb24gPSBkZWZpbmVkKHN0YW5kYXJkRGVyaXZhdGlvbiwgMSk7XG5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vb3Blbmpkay1taXJyb3IvamRrN3UtamRrL2Jsb2IvZjRkODA5NTdlODlhMTlhMjliYjlmOTgwN2QyYTI4MzUxZWQ3ZjdkZi9zcmMvc2hhcmUvY2xhc3Nlcy9qYXZhL3V0aWwvUmFuZG9tLmphdmEjTDQ5NlxuICAgIGlmIChfaGFzTmV4dEdhdXNzaWFuKSB7XG4gICAgICBfaGFzTmV4dEdhdXNzaWFuID0gZmFsc2U7XG4gICAgICB2YXIgcmVzdWx0ID0gX25leHRHYXVzc2lhbjtcbiAgICAgIF9uZXh0R2F1c3NpYW4gPSBudWxsO1xuICAgICAgcmV0dXJuIG1lYW4gKyBzdGFuZGFyZERlcml2YXRpb24gKiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB2MSA9IDA7XG4gICAgICB2YXIgdjIgPSAwO1xuICAgICAgdmFyIHMgPSAwO1xuICAgICAgZG8ge1xuICAgICAgICB2MSA9IHZhbHVlKCkgKiAyIC0gMTsgLy8gYmV0d2VlbiAtMSBhbmQgMVxuICAgICAgICB2MiA9IHZhbHVlKCkgKiAyIC0gMTsgLy8gYmV0d2VlbiAtMSBhbmQgMVxuICAgICAgICBzID0gdjEgKiB2MSArIHYyICogdjI7XG4gICAgICB9IHdoaWxlIChzID49IDEgfHwgcyA9PT0gMCk7XG4gICAgICB2YXIgbXVsdGlwbGllciA9IE1hdGguc3FydCgtMiAqIE1hdGgubG9nKHMpIC8gcyk7XG4gICAgICBfbmV4dEdhdXNzaWFuID0gKHYyICogbXVsdGlwbGllcik7XG4gICAgICBfaGFzTmV4dEdhdXNzaWFuID0gdHJ1ZTtcbiAgICAgIHJldHVybiBtZWFuICsgc3RhbmRhcmREZXJpdmF0aW9uICogKHYxICogbXVsdGlwbGllcik7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmFuZG9tKCk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYXJndW1lbnRzW2ldICE9PSB1bmRlZmluZWQpIHJldHVybiBhcmd1bWVudHNbaV07XG4gICAgfVxufTtcbiIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9XG4gIGdsb2JhbC5wZXJmb3JtYW5jZSAmJlxuICBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID8gZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKVxuICB9IDogRGF0ZS5ub3cgfHwgZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiArbmV3IERhdGVcbiAgfVxuIiwibW9kdWxlLmV4cG9ydHMgPSBpc1Byb21pc2U7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZShvYmopIHtcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzTm9kZVxuXG5mdW5jdGlvbiBpc05vZGUgKHZhbCkge1xuICByZXR1cm4gKCF2YWwgfHwgdHlwZW9mIHZhbCAhPT0gJ29iamVjdCcpXG4gICAgPyBmYWxzZVxuICAgIDogKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnICYmIHR5cGVvZiB3aW5kb3cuTm9kZSA9PT0gJ29iamVjdCcpXG4gICAgICA/ICh2YWwgaW5zdGFuY2VvZiB3aW5kb3cuTm9kZSlcbiAgICAgIDogKHR5cGVvZiB2YWwubm9kZVR5cGUgPT09ICdudW1iZXInKSAmJlxuICAgICAgICAodHlwZW9mIHZhbC5ub2RlTmFtZSA9PT0gJ3N0cmluZycpXG59XG4iLCIvLyBUT0RPOiBXZSBjYW4gcmVtb3ZlIGEgaHVnZSBjaHVuayBvZiBidW5kbGUgc2l6ZSBieSB1c2luZyBhIHNtYWxsZXJcbi8vIHV0aWxpdHkgbW9kdWxlIGZvciBjb252ZXJ0aW5nIHVuaXRzLlxuaW1wb3J0IGlzRE9NIGZyb20gJ2lzLWRvbSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRBUEkgKCkge1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93WydjYW52YXMtc2tldGNoLWNsaSddO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCcm93c2VyICgpIHtcbiAgcmV0dXJuIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dlYkdMQ29udGV4dCAoY3R4KSB7XG4gIHJldHVybiB0eXBlb2YgY3R4LmNsZWFyID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjdHguY2xlYXJDb2xvciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY3R4LmJ1ZmZlckRhdGEgPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbnZhcyAoZWxlbWVudCkge1xuICByZXR1cm4gaXNET00oZWxlbWVudCkgJiYgL2NhbnZhcy9pLnRlc3QoZWxlbWVudC5ub2RlTmFtZSkgJiYgdHlwZW9mIGVsZW1lbnQuZ2V0Q29udGV4dCA9PT0gJ2Z1bmN0aW9uJztcbn1cbiIsIi8qIVxuICogcmVwZWF0LXN0cmluZyA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvcmVwZWF0LXN0cmluZz5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgSm9uIFNjaGxpbmtlcnQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFJlc3VsdHMgY2FjaGVcbiAqL1xuXG52YXIgcmVzID0gJyc7XG52YXIgY2FjaGU7XG5cbi8qKlxuICogRXhwb3NlIGByZXBlYXRgXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXBlYXQ7XG5cbi8qKlxuICogUmVwZWF0IHRoZSBnaXZlbiBgc3RyaW5nYCB0aGUgc3BlY2lmaWVkIGBudW1iZXJgXG4gKiBvZiB0aW1lcy5cbiAqXG4gKiAqKkV4YW1wbGU6KipcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlcGVhdCA9IHJlcXVpcmUoJ3JlcGVhdC1zdHJpbmcnKTtcbiAqIHJlcGVhdCgnQScsIDUpO1xuICogLy89PiBBQUFBQVxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGBzdHJpbmdgIFRoZSBzdHJpbmcgdG8gcmVwZWF0XG4gKiBAcGFyYW0ge051bWJlcn0gYG51bWJlcmAgVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHN0cmluZ1xuICogQHJldHVybiB7U3RyaW5nfSBSZXBlYXRlZCBzdHJpbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gcmVwZWF0KHN0ciwgbnVtKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIGEgc3RyaW5nJyk7XG4gIH1cblxuICAvLyBjb3ZlciBjb21tb24sIHF1aWNrIHVzZSBjYXNlc1xuICBpZiAobnVtID09PSAxKSByZXR1cm4gc3RyO1xuICBpZiAobnVtID09PSAyKSByZXR1cm4gc3RyICsgc3RyO1xuXG4gIHZhciBtYXggPSBzdHIubGVuZ3RoICogbnVtO1xuICBpZiAoY2FjaGUgIT09IHN0ciB8fCB0eXBlb2YgY2FjaGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgY2FjaGUgPSBzdHI7XG4gICAgcmVzID0gJyc7XG4gIH0gZWxzZSBpZiAocmVzLmxlbmd0aCA+PSBtYXgpIHtcbiAgICByZXR1cm4gcmVzLnN1YnN0cigwLCBtYXgpO1xuICB9XG5cbiAgd2hpbGUgKG1heCA+IHJlcy5sZW5ndGggJiYgbnVtID4gMSkge1xuICAgIGlmIChudW0gJiAxKSB7XG4gICAgICByZXMgKz0gc3RyO1xuICAgIH1cblxuICAgIG51bSA+Pj0gMTtcbiAgICBzdHIgKz0gc3RyO1xuICB9XG5cbiAgcmVzICs9IHN0cjtcbiAgcmVzID0gcmVzLnN1YnN0cigwLCBtYXgpO1xuICByZXR1cm4gcmVzO1xufVxuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIE9iamVjdC5rZXlzID09PSAnZnVuY3Rpb24nXG4gID8gT2JqZWN0LmtleXMgOiBzaGltO1xuXG5leHBvcnRzLnNoaW0gPSBzaGltO1xuZnVuY3Rpb24gc2hpbSAob2JqKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xuICByZXR1cm4ga2V5cztcbn1cbiIsInZhciBzdXBwb3J0c0FyZ3VtZW50c0NsYXNzID0gKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnRzKVxufSkoKSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gc3VwcG9ydHNBcmd1bWVudHNDbGFzcyA/IHN1cHBvcnRlZCA6IHVuc3VwcG9ydGVkO1xuXG5leHBvcnRzLnN1cHBvcnRlZCA9IHN1cHBvcnRlZDtcbmZ1bmN0aW9uIHN1cHBvcnRlZChvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xufTtcblxuZXhwb3J0cy51bnN1cHBvcnRlZCA9IHVuc3VwcG9ydGVkO1xuZnVuY3Rpb24gdW5zdXBwb3J0ZWQob2JqZWN0KXtcbiAgcmV0dXJuIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2Ygb2JqZWN0Lmxlbmd0aCA9PSAnbnVtYmVyJyAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdjYWxsZWUnKSAmJlxuICAgICFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCAnY2FsbGVlJykgfHxcbiAgICBmYWxzZTtcbn07XG4iLCJ2YXIgcFNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuL2xpYi9rZXlzLmpzJyk7XG52YXIgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2xpYi9pc19hcmd1bWVudHMuanMnKTtcblxudmFyIGRlZXBFcXVhbCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFjdHVhbCwgZXhwZWN0ZWQsIG9wdHMpIHtcbiAgaWYgKCFvcHRzKSBvcHRzID0ge307XG4gIC8vIDcuMS4gQWxsIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGFzIGRldGVybWluZWQgYnkgPT09LlxuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuXG4gIH0gZWxzZSBpZiAoYWN0dWFsIGluc3RhbmNlb2YgRGF0ZSAmJiBleHBlY3RlZCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gYWN0dWFsLmdldFRpbWUoKSA9PT0gZXhwZWN0ZWQuZ2V0VGltZSgpO1xuXG4gIC8vIDcuMy4gT3RoZXIgcGFpcnMgdGhhdCBkbyBub3QgYm90aCBwYXNzIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyxcbiAgLy8gZXF1aXZhbGVuY2UgaXMgZGV0ZXJtaW5lZCBieSA9PS5cbiAgfSBlbHNlIGlmICghYWN0dWFsIHx8ICFleHBlY3RlZCB8fCB0eXBlb2YgYWN0dWFsICE9ICdvYmplY3QnICYmIHR5cGVvZiBleHBlY3RlZCAhPSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBvcHRzLnN0cmljdCA/IGFjdHVhbCA9PT0gZXhwZWN0ZWQgOiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gNy40LiBGb3IgYWxsIG90aGVyIE9iamVjdCBwYWlycywgaW5jbHVkaW5nIEFycmF5IG9iamVjdHMsIGVxdWl2YWxlbmNlIGlzXG4gIC8vIGRldGVybWluZWQgYnkgaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChhcyB2ZXJpZmllZFxuICAvLyB3aXRoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCksIHRoZSBzYW1lIHNldCBvZiBrZXlzXG4gIC8vIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLCBlcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnlcbiAgLy8gY29ycmVzcG9uZGluZyBrZXksIGFuZCBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuIE5vdGU6IHRoaXNcbiAgLy8gYWNjb3VudHMgZm9yIGJvdGggbmFtZWQgYW5kIGluZGV4ZWQgcHJvcGVydGllcyBvbiBBcnJheXMuXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9iakVxdWl2KGFjdHVhbCwgZXhwZWN0ZWQsIG9wdHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkT3JOdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0J1ZmZlciAoeCkge1xuICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnIHx8IHR5cGVvZiB4Lmxlbmd0aCAhPT0gJ251bWJlcicpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiB4LmNvcHkgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHguc2xpY2UgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHgubGVuZ3RoID4gMCAmJiB0eXBlb2YgeFswXSAhPT0gJ251bWJlcicpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG9iakVxdWl2KGEsIGIsIG9wdHMpIHtcbiAgdmFyIGksIGtleTtcbiAgaWYgKGlzVW5kZWZpbmVkT3JOdWxsKGEpIHx8IGlzVW5kZWZpbmVkT3JOdWxsKGIpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy8gYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LlxuICBpZiAoYS5wcm90b3R5cGUgIT09IGIucHJvdG90eXBlKSByZXR1cm4gZmFsc2U7XG4gIC8vfn5+SSd2ZSBtYW5hZ2VkIHRvIGJyZWFrIE9iamVjdC5rZXlzIHRocm91Z2ggc2NyZXd5IGFyZ3VtZW50cyBwYXNzaW5nLlxuICAvLyAgIENvbnZlcnRpbmcgdG8gYXJyYXkgc29sdmVzIHRoZSBwcm9ibGVtLlxuICBpZiAoaXNBcmd1bWVudHMoYSkpIHtcbiAgICBpZiAoIWlzQXJndW1lbnRzKGIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGEgPSBwU2xpY2UuY2FsbChhKTtcbiAgICBiID0gcFNsaWNlLmNhbGwoYik7XG4gICAgcmV0dXJuIGRlZXBFcXVhbChhLCBiLCBvcHRzKTtcbiAgfVxuICBpZiAoaXNCdWZmZXIoYSkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKGIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIga2EgPSBvYmplY3RLZXlzKGEpLFxuICAgICAgICBrYiA9IG9iamVjdEtleXMoYik7XG4gIH0gY2F0Y2ggKGUpIHsvL2hhcHBlbnMgd2hlbiBvbmUgaXMgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgdGhlIG90aGVyIGlzbid0XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoa2V5cyBpbmNvcnBvcmF0ZXNcbiAgLy8gaGFzT3duUHJvcGVydHkpXG4gIGlmIChrYS5sZW5ndGggIT0ga2IubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy90aGUgc2FtZSBzZXQgb2Yga2V5cyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSxcbiAga2Euc29ydCgpO1xuICBrYi5zb3J0KCk7XG4gIC8vfn5+Y2hlYXAga2V5IHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoa2FbaV0gIT0ga2JbaV0pXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy9lcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnkgY29ycmVzcG9uZGluZyBrZXksIGFuZFxuICAvL35+fnBvc3NpYmx5IGV4cGVuc2l2ZSBkZWVwIHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBrZXkgPSBrYVtpXTtcbiAgICBpZiAoIWRlZXBFcXVhbChhW2tleV0sIGJba2V5XSwgb3B0cykpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiO1xufVxuIiwiLypcbiAqIERhdGUgRm9ybWF0IDEuMi4zXG4gKiAoYykgMjAwNy0yMDA5IFN0ZXZlbiBMZXZpdGhhbiA8c3RldmVubGV2aXRoYW4uY29tPlxuICogTUlUIGxpY2Vuc2VcbiAqXG4gKiBJbmNsdWRlcyBlbmhhbmNlbWVudHMgYnkgU2NvdHQgVHJlbmRhIDxzY290dC50cmVuZGEubmV0PlxuICogYW5kIEtyaXMgS293YWwgPGNpeGFyLmNvbS9+a3Jpcy5rb3dhbC8+XG4gKlxuICogQWNjZXB0cyBhIGRhdGUsIGEgbWFzaywgb3IgYSBkYXRlIGFuZCBhIG1hc2suXG4gKiBSZXR1cm5zIGEgZm9ybWF0dGVkIHZlcnNpb24gb2YgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgZGF0ZSBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBkYXRlL3RpbWUuXG4gKiBUaGUgbWFzayBkZWZhdWx0cyB0byBkYXRlRm9ybWF0Lm1hc2tzLmRlZmF1bHQuXG4gKi9cblxuKGZ1bmN0aW9uKGdsb2JhbCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGRhdGVGb3JtYXQgPSAoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdG9rZW4gPSAvZHsxLDR9fG17MSw0fXx5eSg/Onl5KT98KFtIaE1zVHRdKVxcMT98W0xsb1NaV05dfFwiW15cIl0qXCJ8J1teJ10qJy9nO1xuICAgICAgdmFyIHRpbWV6b25lID0gL1xcYig/OltQTUNFQV1bU0RQXVR8KD86UGFjaWZpY3xNb3VudGFpbnxDZW50cmFsfEVhc3Rlcm58QXRsYW50aWMpICg/OlN0YW5kYXJkfERheWxpZ2h0fFByZXZhaWxpbmcpIFRpbWV8KD86R01UfFVUQykoPzpbLStdXFxkezR9KT8pXFxiL2c7XG4gICAgICB2YXIgdGltZXpvbmVDbGlwID0gL1teLStcXGRBLVpdL2c7XG4gIFxuICAgICAgLy8gUmVnZXhlcyBhbmQgc3VwcG9ydGluZyBmdW5jdGlvbnMgYXJlIGNhY2hlZCB0aHJvdWdoIGNsb3N1cmVcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZGF0ZSwgbWFzaywgdXRjLCBnbXQpIHtcbiAgXG4gICAgICAgIC8vIFlvdSBjYW4ndCBwcm92aWRlIHV0YyBpZiB5b3Ugc2tpcCBvdGhlciBhcmdzICh1c2UgdGhlICdVVEM6JyBtYXNrIHByZWZpeClcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYga2luZE9mKGRhdGUpID09PSAnc3RyaW5nJyAmJiAhL1xcZC8udGVzdChkYXRlKSkge1xuICAgICAgICAgIG1hc2sgPSBkYXRlO1xuICAgICAgICAgIGRhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIGRhdGUgPSBkYXRlIHx8IG5ldyBEYXRlO1xuICBcbiAgICAgICAgaWYoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICBkYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIGlmIChpc05hTihkYXRlKSkge1xuICAgICAgICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBkYXRlJyk7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIG1hc2sgPSBTdHJpbmcoZGF0ZUZvcm1hdC5tYXNrc1ttYXNrXSB8fCBtYXNrIHx8IGRhdGVGb3JtYXQubWFza3NbJ2RlZmF1bHQnXSk7XG4gIFxuICAgICAgICAvLyBBbGxvdyBzZXR0aW5nIHRoZSB1dGMvZ210IGFyZ3VtZW50IHZpYSB0aGUgbWFza1xuICAgICAgICB2YXIgbWFza1NsaWNlID0gbWFzay5zbGljZSgwLCA0KTtcbiAgICAgICAgaWYgKG1hc2tTbGljZSA9PT0gJ1VUQzonIHx8IG1hc2tTbGljZSA9PT0gJ0dNVDonKSB7XG4gICAgICAgICAgbWFzayA9IG1hc2suc2xpY2UoNCk7XG4gICAgICAgICAgdXRjID0gdHJ1ZTtcbiAgICAgICAgICBpZiAobWFza1NsaWNlID09PSAnR01UOicpIHtcbiAgICAgICAgICAgIGdtdCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gIFxuICAgICAgICB2YXIgXyA9IHV0YyA/ICdnZXRVVEMnIDogJ2dldCc7XG4gICAgICAgIHZhciBkID0gZGF0ZVtfICsgJ0RhdGUnXSgpO1xuICAgICAgICB2YXIgRCA9IGRhdGVbXyArICdEYXknXSgpO1xuICAgICAgICB2YXIgbSA9IGRhdGVbXyArICdNb250aCddKCk7XG4gICAgICAgIHZhciB5ID0gZGF0ZVtfICsgJ0Z1bGxZZWFyJ10oKTtcbiAgICAgICAgdmFyIEggPSBkYXRlW18gKyAnSG91cnMnXSgpO1xuICAgICAgICB2YXIgTSA9IGRhdGVbXyArICdNaW51dGVzJ10oKTtcbiAgICAgICAgdmFyIHMgPSBkYXRlW18gKyAnU2Vjb25kcyddKCk7XG4gICAgICAgIHZhciBMID0gZGF0ZVtfICsgJ01pbGxpc2Vjb25kcyddKCk7XG4gICAgICAgIHZhciBvID0gdXRjID8gMCA6IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICAgICAgdmFyIFcgPSBnZXRXZWVrKGRhdGUpO1xuICAgICAgICB2YXIgTiA9IGdldERheU9mV2VlayhkYXRlKTtcbiAgICAgICAgdmFyIGZsYWdzID0ge1xuICAgICAgICAgIGQ6ICAgIGQsXG4gICAgICAgICAgZGQ6ICAgcGFkKGQpLFxuICAgICAgICAgIGRkZDogIGRhdGVGb3JtYXQuaTE4bi5kYXlOYW1lc1tEXSxcbiAgICAgICAgICBkZGRkOiBkYXRlRm9ybWF0LmkxOG4uZGF5TmFtZXNbRCArIDddLFxuICAgICAgICAgIG06ICAgIG0gKyAxLFxuICAgICAgICAgIG1tOiAgIHBhZChtICsgMSksXG4gICAgICAgICAgbW1tOiAgZGF0ZUZvcm1hdC5pMThuLm1vbnRoTmFtZXNbbV0sXG4gICAgICAgICAgbW1tbTogZGF0ZUZvcm1hdC5pMThuLm1vbnRoTmFtZXNbbSArIDEyXSxcbiAgICAgICAgICB5eTogICBTdHJpbmcoeSkuc2xpY2UoMiksXG4gICAgICAgICAgeXl5eTogeSxcbiAgICAgICAgICBoOiAgICBIICUgMTIgfHwgMTIsXG4gICAgICAgICAgaGg6ICAgcGFkKEggJSAxMiB8fCAxMiksXG4gICAgICAgICAgSDogICAgSCxcbiAgICAgICAgICBISDogICBwYWQoSCksXG4gICAgICAgICAgTTogICAgTSxcbiAgICAgICAgICBNTTogICBwYWQoTSksXG4gICAgICAgICAgczogICAgcyxcbiAgICAgICAgICBzczogICBwYWQocyksXG4gICAgICAgICAgbDogICAgcGFkKEwsIDMpLFxuICAgICAgICAgIEw6ICAgIHBhZChNYXRoLnJvdW5kKEwgLyAxMCkpLFxuICAgICAgICAgIHQ6ICAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbMF0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzFdLFxuICAgICAgICAgIHR0OiAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbMl0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzNdLFxuICAgICAgICAgIFQ6ICAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbNF0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzVdLFxuICAgICAgICAgIFRUOiAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbNl0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzddLFxuICAgICAgICAgIFo6ICAgIGdtdCA/ICdHTVQnIDogdXRjID8gJ1VUQycgOiAoU3RyaW5nKGRhdGUpLm1hdGNoKHRpbWV6b25lKSB8fCBbJyddKS5wb3AoKS5yZXBsYWNlKHRpbWV6b25lQ2xpcCwgJycpLFxuICAgICAgICAgIG86ICAgIChvID4gMCA/ICctJyA6ICcrJykgKyBwYWQoTWF0aC5mbG9vcihNYXRoLmFicyhvKSAvIDYwKSAqIDEwMCArIE1hdGguYWJzKG8pICUgNjAsIDQpLFxuICAgICAgICAgIFM6ICAgIFsndGgnLCAnc3QnLCAnbmQnLCAncmQnXVtkICUgMTAgPiAzID8gMCA6IChkICUgMTAwIC0gZCAlIDEwICE9IDEwKSAqIGQgJSAxMF0sXG4gICAgICAgICAgVzogICAgVyxcbiAgICAgICAgICBOOiAgICBOXG4gICAgICAgIH07XG4gIFxuICAgICAgICByZXR1cm4gbWFzay5yZXBsYWNlKHRva2VuLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICBpZiAobWF0Y2ggaW4gZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbGFnc1ttYXRjaF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtYXRjaC5zbGljZSgxLCBtYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pKCk7XG5cbiAgZGF0ZUZvcm1hdC5tYXNrcyA9IHtcbiAgICAnZGVmYXVsdCc6ICAgICAgICAgICAgICAgJ2RkZCBtbW0gZGQgeXl5eSBISDpNTTpzcycsXG4gICAgJ3Nob3J0RGF0ZSc6ICAgICAgICAgICAgICdtL2QveXknLFxuICAgICdtZWRpdW1EYXRlJzogICAgICAgICAgICAnbW1tIGQsIHl5eXknLFxuICAgICdsb25nRGF0ZSc6ICAgICAgICAgICAgICAnbW1tbSBkLCB5eXl5JyxcbiAgICAnZnVsbERhdGUnOiAgICAgICAgICAgICAgJ2RkZGQsIG1tbW0gZCwgeXl5eScsXG4gICAgJ3Nob3J0VGltZSc6ICAgICAgICAgICAgICdoOk1NIFRUJyxcbiAgICAnbWVkaXVtVGltZSc6ICAgICAgICAgICAgJ2g6TU06c3MgVFQnLFxuICAgICdsb25nVGltZSc6ICAgICAgICAgICAgICAnaDpNTTpzcyBUVCBaJyxcbiAgICAnaXNvRGF0ZSc6ICAgICAgICAgICAgICAgJ3l5eXktbW0tZGQnLFxuICAgICdpc29UaW1lJzogICAgICAgICAgICAgICAnSEg6TU06c3MnLFxuICAgICdpc29EYXRlVGltZSc6ICAgICAgICAgICAneXl5eS1tbS1kZFxcJ1RcXCdISDpNTTpzc28nLFxuICAgICdpc29VdGNEYXRlVGltZSc6ICAgICAgICAnVVRDOnl5eXktbW0tZGRcXCdUXFwnSEg6TU06c3NcXCdaXFwnJyxcbiAgICAnZXhwaXJlc0hlYWRlckZvcm1hdCc6ICAgJ2RkZCwgZGQgbW1tIHl5eXkgSEg6TU06c3MgWidcbiAgfTtcblxuICAvLyBJbnRlcm5hdGlvbmFsaXphdGlvbiBzdHJpbmdzXG4gIGRhdGVGb3JtYXQuaTE4biA9IHtcbiAgICBkYXlOYW1lczogW1xuICAgICAgJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCcsXG4gICAgICAnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXG4gICAgXSxcbiAgICBtb250aE5hbWVzOiBbXG4gICAgICAnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnLFxuICAgICAgJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXG4gICAgXSxcbiAgICB0aW1lTmFtZXM6IFtcbiAgICAgICdhJywgJ3AnLCAnYW0nLCAncG0nLCAnQScsICdQJywgJ0FNJywgJ1BNJ1xuICAgIF1cbiAgfTtcblxuZnVuY3Rpb24gcGFkKHZhbCwgbGVuKSB7XG4gIHZhbCA9IFN0cmluZyh2YWwpO1xuICBsZW4gPSBsZW4gfHwgMjtcbiAgd2hpbGUgKHZhbC5sZW5ndGggPCBsZW4pIHtcbiAgICB2YWwgPSAnMCcgKyB2YWw7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIElTTyA4NjAxIHdlZWsgbnVtYmVyXG4gKiBCYXNlZCBvbiBjb21tZW50cyBmcm9tXG4gKiBodHRwOi8vdGVjaGJsb2cucHJvY3VyaW9zLm5sL2svbjYxOC9uZXdzL3ZpZXcvMzM3OTYvMTQ4NjMvQ2FsY3VsYXRlLUlTTy04NjAxLXdlZWstYW5kLXllYXItaW4tamF2YXNjcmlwdC5odG1sXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBgZGF0ZWBcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0V2VlayhkYXRlKSB7XG4gIC8vIFJlbW92ZSB0aW1lIGNvbXBvbmVudHMgb2YgZGF0ZVxuICB2YXIgdGFyZ2V0VGh1cnNkYXkgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpO1xuXG4gIC8vIENoYW5nZSBkYXRlIHRvIFRodXJzZGF5IHNhbWUgd2Vla1xuICB0YXJnZXRUaHVyc2RheS5zZXREYXRlKHRhcmdldFRodXJzZGF5LmdldERhdGUoKSAtICgodGFyZ2V0VGh1cnNkYXkuZ2V0RGF5KCkgKyA2KSAlIDcpICsgMyk7XG5cbiAgLy8gVGFrZSBKYW51YXJ5IDR0aCBhcyBpdCBpcyBhbHdheXMgaW4gd2VlayAxIChzZWUgSVNPIDg2MDEpXG4gIHZhciBmaXJzdFRodXJzZGF5ID0gbmV3IERhdGUodGFyZ2V0VGh1cnNkYXkuZ2V0RnVsbFllYXIoKSwgMCwgNCk7XG5cbiAgLy8gQ2hhbmdlIGRhdGUgdG8gVGh1cnNkYXkgc2FtZSB3ZWVrXG4gIGZpcnN0VGh1cnNkYXkuc2V0RGF0ZShmaXJzdFRodXJzZGF5LmdldERhdGUoKSAtICgoZmlyc3RUaHVyc2RheS5nZXREYXkoKSArIDYpICUgNykgKyAzKTtcblxuICAvLyBDaGVjayBpZiBkYXlsaWdodC1zYXZpbmctdGltZS1zd2l0Y2ggb2NjdXJyZWQgYW5kIGNvcnJlY3QgZm9yIGl0XG4gIHZhciBkcyA9IHRhcmdldFRodXJzZGF5LmdldFRpbWV6b25lT2Zmc2V0KCkgLSBmaXJzdFRodXJzZGF5LmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHRhcmdldFRodXJzZGF5LnNldEhvdXJzKHRhcmdldFRodXJzZGF5LmdldEhvdXJzKCkgLSBkcyk7XG5cbiAgLy8gTnVtYmVyIG9mIHdlZWtzIGJldHdlZW4gdGFyZ2V0IFRodXJzZGF5IGFuZCBmaXJzdCBUaHVyc2RheVxuICB2YXIgd2Vla0RpZmYgPSAodGFyZ2V0VGh1cnNkYXkgLSBmaXJzdFRodXJzZGF5KSAvICg4NjQwMDAwMCo3KTtcbiAgcmV0dXJuIDEgKyBNYXRoLmZsb29yKHdlZWtEaWZmKTtcbn1cblxuLyoqXG4gKiBHZXQgSVNPLTg2MDEgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF5IG9mIHRoZSB3ZWVrXG4gKiAxIChmb3IgTW9uZGF5KSB0aHJvdWdoIDcgKGZvciBTdW5kYXkpXG4gKiBcbiAqIEBwYXJhbSAge09iamVjdH0gYGRhdGVgXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldERheU9mV2VlayhkYXRlKSB7XG4gIHZhciBkb3cgPSBkYXRlLmdldERheSgpO1xuICBpZihkb3cgPT09IDApIHtcbiAgICBkb3cgPSA3O1xuICB9XG4gIHJldHVybiBkb3c7XG59XG5cbi8qKlxuICoga2luZC1vZiBzaG9ydGN1dFxuICogQHBhcmFtICB7Kn0gdmFsXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGtpbmRPZih2YWwpIHtcbiAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnbnVsbCc7XG4gIH1cblxuICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbDtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICByZXR1cm4gJ2FycmF5JztcbiAgfVxuXG4gIHJldHVybiB7fS50b1N0cmluZy5jYWxsKHZhbClcbiAgICAuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG5cblxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBkYXRlRm9ybWF0O1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZGF0ZUZvcm1hdDtcbiAgfSBlbHNlIHtcbiAgICBnbG9iYWwuZGF0ZUZvcm1hdCA9IGRhdGVGb3JtYXQ7XG4gIH1cbn0pKHRoaXMpO1xuIiwiLyohXG4gKiBwYWQtbGVmdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvcGFkLWxlZnQ+XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEpvbiBTY2hsaW5rZXJ0LlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHJlcGVhdCA9IHJlcXVpcmUoJ3JlcGVhdC1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYWRMZWZ0KHN0ciwgbnVtLCBjaCkge1xuICBzdHIgPSBzdHIudG9TdHJpbmcoKTtcblxuICBpZiAodHlwZW9mIG51bSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgaWYgKGNoID09PSAwKSB7XG4gICAgY2ggPSAnMCc7XG4gIH0gZWxzZSBpZiAoY2gpIHtcbiAgICBjaCA9IGNoLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgY2ggPSAnICc7XG4gIH1cblxuICByZXR1cm4gcmVwZWF0KGNoLCBudW0gLSBzdHIubGVuZ3RoKSArIHN0cjtcbn07XG4iLCJpbXBvcnQgZGF0ZWZvcm1hdCBmcm9tICdkYXRlZm9ybWF0JztcbmltcG9ydCBhc3NpZ24gZnJvbSAnb2JqZWN0LWFzc2lnbic7XG5pbXBvcnQgcGFkTGVmdCBmcm9tICdwYWQtbGVmdCc7XG5pbXBvcnQgeyBnZXRDbGllbnRBUEkgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5sZXQgbGluaztcblxuLy8gQWx0ZXJuYXRpdmUgc29sdXRpb24gZm9yIHNhdmluZyBmaWxlcyxcbi8vIGEgYml0IHNsb3dlciBhbmQgZG9lcyBub3Qgd29yayBpbiBTYWZhcmlcbi8vIGZ1bmN0aW9uIGZldGNoQmxvYkZyb21EYXRhVVJMIChkYXRhVVJMKSB7XG4vLyAgIHJldHVybiB3aW5kb3cuZmV0Y2goZGF0YVVSTCkudGhlbihyZXMgPT4gcmVzLmJsb2IoKSk7XG4vLyB9XG5cbmNvbnN0IHN1cHBvcnRlZEVuY29kaW5ncyA9IFtcbiAgJ2ltYWdlL3BuZycsXG4gICdpbWFnZS9qcGVnJyxcbiAgJ2ltYWdlL3dlYnAnXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0Q2FudmFzIChjYW52YXMsIG9wdCA9IHt9KSB7XG4gIGNvbnN0IGVuY29kaW5nID0gb3B0LmVuY29kaW5nIHx8ICdpbWFnZS9wbmcnO1xuICBpZiAoIXN1cHBvcnRlZEVuY29kaW5ncy5pbmNsdWRlcyhlbmNvZGluZykpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjYW52YXMgZW5jb2RpbmcgJHtlbmNvZGluZ31gKTtcbiAgbGV0IGV4dGVuc2lvbiA9IChlbmNvZGluZy5zcGxpdCgnLycpWzFdIHx8ICcnKS5yZXBsYWNlKC9qcGVnL2ksICdqcGcnKTtcbiAgaWYgKGV4dGVuc2lvbikgZXh0ZW5zaW9uID0gYC4ke2V4dGVuc2lvbn1gLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiB7XG4gICAgZXh0ZW5zaW9uLFxuICAgIHR5cGU6IGVuY29kaW5nLFxuICAgIGRhdGFVUkw6IGNhbnZhcy50b0RhdGFVUkwoZW5jb2RpbmcsIG9wdC5lbmNvZGluZ1F1YWxpdHkpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJsb2JGcm9tRGF0YVVSTCAoZGF0YVVSTCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBzcGxpdEluZGV4ID0gZGF0YVVSTC5pbmRleE9mKCcsJyk7XG4gICAgaWYgKHNwbGl0SW5kZXggPT09IC0xKSB7XG4gICAgICByZXNvbHZlKG5ldyB3aW5kb3cuQmxvYigpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmFzZTY0ID0gZGF0YVVSTC5zbGljZShzcGxpdEluZGV4ICsgMSk7XG4gICAgY29uc3QgYnl0ZVN0cmluZyA9IHdpbmRvdy5hdG9iKGJhc2U2NCk7XG4gICAgY29uc3QgbWltZU1hdGNoID0gL2RhdGE6KFteOytdKTsvLmV4ZWMoZGF0YVVSTCk7XG4gICAgY29uc3QgbWltZSA9IChtaW1lTWF0Y2ggPyBtaW1lTWF0Y2hbMV0gOiAnJykgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFiID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcbiAgICBjb25zdCBpYSA9IG5ldyBVaW50OEFycmF5KGFiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlhW2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICByZXNvbHZlKG5ldyB3aW5kb3cuQmxvYihbIGFiIF0sIHsgdHlwZTogbWltZSB9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZURhdGFVUkwgKGRhdGFVUkwsIG9wdHMgPSB7fSkge1xuICByZXR1cm4gY3JlYXRlQmxvYkZyb21EYXRhVVJMKGRhdGFVUkwpXG4gICAgLnRoZW4oYmxvYiA9PiBzYXZlQmxvYihibG9iLCBvcHRzKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlQmxvYiAoYmxvYiwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBvcHRzID0gYXNzaWduKHsgZXh0ZW5zaW9uOiAnJywgcHJlZml4OiAnJywgc3VmZml4OiAnJyB9LCBvcHRzKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IHJlc29sdmVGaWxlbmFtZShvcHRzKTtcblxuICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICAgIGlmIChjbGllbnQgJiYgdHlwZW9mIGNsaWVudC5zYXZlQmxvYiA9PT0gJ2Z1bmN0aW9uJyAmJiBjbGllbnQub3V0cHV0KSB7XG4gICAgICAvLyBuYXRpdmUgc2F2aW5nIHVzaW5nIGEgQ0xJIHRvb2xcbiAgICAgIHJldHVybiBjbGllbnQuc2F2ZUJsb2IoYmxvYiwgYXNzaWduKHt9LCBvcHRzLCB7IGZpbGVuYW1lIH0pKVxuICAgICAgICAudGhlbihldiA9PiByZXNvbHZlKGV2KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvcmNlIGRvd25sb2FkXG4gICAgICBpZiAoIWxpbmspIHtcbiAgICAgICAgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgbGluay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIGxpbmsudGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICB9XG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZW5hbWU7XG4gICAgICBsaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICBsaW5rLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIGxpbmsub25jbGljayA9IG5vb3A7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgICAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgICAgICByZXNvbHZlKHsgZmlsZW5hbWUsIGNsaWVudDogZmFsc2UgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUZpbGUgKGRhdGEsIG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJ0cyA9IEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogWyBkYXRhIF07XG4gIGNvbnN0IGJsb2IgPSBuZXcgd2luZG93LkJsb2IocGFydHMsIHsgdHlwZTogb3B0cy50eXBlIHx8ICcnIH0pO1xuICByZXR1cm4gc2F2ZUJsb2IoYmxvYiwgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlTmFtZSAoKSB7XG4gIGNvbnN0IGRhdGVGb3JtYXRTdHIgPSBgeXl5eS5tbS5kZC1ISC5NTS5zc2A7XG4gIHJldHVybiBkYXRlZm9ybWF0KG5ldyBEYXRlKCksIGRhdGVGb3JtYXRTdHIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdEZpbGUgKHByZWZpeCA9ICcnLCBzdWZmaXggPSAnJywgZXh0KSB7XG4gIC8vIGNvbnN0IGRhdGVGb3JtYXRTdHIgPSBgeXl5eS5tbS5kZC1ISC5NTS5zc2A7XG4gIGNvbnN0IGRhdGVGb3JtYXRTdHIgPSBgeXl5eS1tbS1kZCAnYXQnIGguTU0uc3MgVFRgO1xuICByZXR1cm4gYCR7cHJlZml4fSR7ZGF0ZWZvcm1hdChuZXcgRGF0ZSgpLCBkYXRlRm9ybWF0U3RyKX0ke3N1ZmZpeH0ke2V4dH1gO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRmlsZW5hbWUgKG9wdCA9IHt9KSB7XG4gIG9wdCA9IGFzc2lnbih7fSwgb3B0KTtcblxuICAvLyBDdXN0b20gZmlsZW5hbWUgZnVuY3Rpb25cbiAgaWYgKHR5cGVvZiBvcHQuZmlsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBvcHQuZmlsZShvcHQpO1xuICB9IGVsc2UgaWYgKG9wdC5maWxlKSB7XG4gICAgcmV0dXJuIG9wdC5maWxlO1xuICB9XG5cbiAgbGV0IGZyYW1lID0gbnVsbDtcbiAgbGV0IGV4dGVuc2lvbiA9ICcnO1xuICBpZiAodHlwZW9mIG9wdC5leHRlbnNpb24gPT09ICdzdHJpbmcnKSBleHRlbnNpb24gPSBvcHQuZXh0ZW5zaW9uO1xuXG4gIGlmICh0eXBlb2Ygb3B0LmZyYW1lID09PSAnbnVtYmVyJykge1xuICAgIGxldCB0b3RhbEZyYW1lcztcbiAgICBpZiAodHlwZW9mIG9wdC50b3RhbEZyYW1lcyA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRvdGFsRnJhbWVzID0gb3B0LnRvdGFsRnJhbWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b3RhbEZyYW1lcyA9IE1hdGgubWF4KDEwMDAsIG9wdC5mcmFtZSk7XG4gICAgfVxuICAgIGZyYW1lID0gcGFkTGVmdChTdHJpbmcob3B0LmZyYW1lKSwgU3RyaW5nKHRvdGFsRnJhbWVzKS5sZW5ndGgsICcwJyk7XG4gIH1cblxuICBjb25zdCBsYXllclN0ciA9IGlzRmluaXRlKG9wdC50b3RhbExheWVycykgJiYgaXNGaW5pdGUob3B0LmxheWVyKSAmJiBvcHQudG90YWxMYXllcnMgPiAxID8gYCR7b3B0LmxheWVyfWAgOiAnJztcbiAgaWYgKGZyYW1lICE9IG51bGwpIHtcbiAgICByZXR1cm4gWyBsYXllclN0ciwgZnJhbWUgXS5maWx0ZXIoQm9vbGVhbikuam9pbignLScpICsgZXh0ZW5zaW9uO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRlZmF1bHRGaWxlTmFtZSA9IG9wdC50aW1lU3RhbXA7XG4gICAgcmV0dXJuIFsgb3B0LnByZWZpeCwgb3B0Lm5hbWUgfHwgZGVmYXVsdEZpbGVOYW1lLCBsYXllclN0ciwgb3B0Lmhhc2gsIG9wdC5zdWZmaXggXS5maWx0ZXIoQm9vbGVhbikuam9pbignLScpICsgZXh0ZW5zaW9uO1xuICB9XG59XG4iLCIvLyBIYW5kbGUgc29tZSBjb21tb24gdHlwb3NcbmNvbnN0IGNvbW1vblR5cG9zID0ge1xuICBkaW1lbnNpb246ICdkaW1lbnNpb25zJyxcbiAgYW5pbWF0ZWQ6ICdhbmltYXRlJyxcbiAgYW5pbWF0aW5nOiAnYW5pbWF0ZScsXG4gIHVuaXQ6ICd1bml0cycsXG4gIFA1OiAncDUnLFxuICBwaXhlbGxhdGVkOiAncGl4ZWxhdGVkJyxcbiAgbG9vcGluZzogJ2xvb3AnLFxuICBwaXhlbFBlckluY2g6ICdwaXhlbHMnXG59O1xuXG4vLyBIYW5kbGUgYWxsIG90aGVyIHR5cG9zXG5jb25zdCBhbGxLZXlzID0gW1xuICAnZGltZW5zaW9ucycsICd1bml0cycsICdwaXhlbHNQZXJJbmNoJywgJ29yaWVudGF0aW9uJyxcbiAgJ3NjYWxlVG9GaXQnLCAnc2NhbGVUb1ZpZXcnLCAnYmxlZWQnLCAncGl4ZWxSYXRpbycsXG4gICdleHBvcnRQaXhlbFJhdGlvJywgJ21heFBpeGVsUmF0aW8nLCAnc2NhbGVDb250ZXh0JyxcbiAgJ3Jlc2l6ZUNhbnZhcycsICdzdHlsZUNhbnZhcycsICdjYW52YXMnLCAnY29udGV4dCcsICdhdHRyaWJ1dGVzJyxcbiAgJ3BhcmVudCcsICdmaWxlJywgJ25hbWUnLCAncHJlZml4JywgJ3N1ZmZpeCcsICdhbmltYXRlJywgJ3BsYXlpbmcnLFxuICAnbG9vcCcsICdkdXJhdGlvbicsICd0b3RhbEZyYW1lcycsICdmcHMnLCAncGxheWJhY2tSYXRlJywgJ3RpbWVTY2FsZScsXG4gICdmcmFtZScsICd0aW1lJywgJ2ZsdXNoJywgJ3BpeGVsYXRlZCcsICdob3RrZXlzJywgJ3A1JywgJ2lkJyxcbiAgJ3NjYWxlVG9GaXRQYWRkaW5nJywgJ2RhdGEnLCAncGFyYW1zJywgJ2VuY29kaW5nJywgJ2VuY29kaW5nUXVhbGl0eSdcbl07XG5cbi8vIFRoaXMgaXMgZmFpcmx5IG9waW5pb25hdGVkIGFuZCBmb3JjZXMgdXNlcnMgdG8gdXNlIHRoZSAnZGF0YScgcGFyYW1ldGVyXG4vLyBpZiB0aGV5IHdhbnQgdG8gcGFzcyBhbG9uZyBub24tc2V0dGluZyBvYmplY3RzLi4uXG5leHBvcnQgY29uc3QgY2hlY2tTZXR0aW5ncyA9IChzZXR0aW5ncykgPT4ge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2V0dGluZ3MpO1xuICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoa2V5IGluIGNvbW1vblR5cG9zKSB7XG4gICAgICBjb25zdCBhY3R1YWwgPSBjb21tb25UeXBvc1trZXldO1xuICAgICAgY29uc29sZS53YXJuKGBbY2FudmFzLXNrZXRjaF0gQ291bGQgbm90IHJlY29nbml6ZSB0aGUgc2V0dGluZyBcIiR7a2V5fVwiLCBkaWQgeW91IG1lYW4gXCIke2FjdHVhbH1cIj9gKTtcbiAgICB9IGVsc2UgaWYgKCFhbGxLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW2NhbnZhcy1za2V0Y2hdIENvdWxkIG5vdCByZWNvZ25pemUgdGhlIHNldHRpbmcgXCIke2tleX1cImApO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiY29uc3QgZGVmYXVsdFVuaXRzID0gJ21tJztcblxuY29uc3QgZGF0YSA9IFtcbiAgLy8gQ29tbW9uIFBhcGVyIFNpemVzXG4gIC8vIChNb3N0bHkgTm9ydGgtQW1lcmljYW4gYmFzZWQpXG4gIFsgJ3Bvc3RjYXJkJywgMTAxLjYsIDE1Mi40IF0sXG4gIFsgJ3Bvc3Rlci1zbWFsbCcsIDI4MCwgNDMwIF0sXG4gIFsgJ3Bvc3RlcicsIDQ2MCwgNjEwIF0sXG4gIFsgJ3Bvc3Rlci1sYXJnZScsIDYxMCwgOTEwIF0sXG4gIFsgJ2J1c2luZXNzLWNhcmQnLCA1MC44LCA4OC45IF0sXG5cbiAgLy8gUGhvdG9ncmFwaGljIFByaW50IFBhcGVyIFNpemVzXG4gIFsgJzJyJywgNjQsIDg5IF0sXG4gIFsgJzNyJywgODksIDEyNyBdLFxuICBbICc0cicsIDEwMiwgMTUyIF0sXG4gIFsgJzVyJywgMTI3LCAxNzggXSwgLy8gNeKAs3g34oCzXG4gIFsgJzZyJywgMTUyLCAyMDMgXSwgLy8gNuKAs3g44oCzXG4gIFsgJzhyJywgMjAzLCAyNTQgXSwgLy8gOOKAs3gxMOKAs1xuICBbICcxMHInLCAyNTQsIDMwNSBdLCAvLyAxMOKAs3gxMuKAs1xuICBbICcxMXInLCAyNzksIDM1NiBdLCAvLyAxMeKAs3gxNOKAs1xuICBbICcxMnInLCAzMDUsIDM4MSBdLFxuXG4gIC8vIFN0YW5kYXJkIFBhcGVyIFNpemVzXG4gIFsgJ2EwJywgODQxLCAxMTg5IF0sXG4gIFsgJ2ExJywgNTk0LCA4NDEgXSxcbiAgWyAnYTInLCA0MjAsIDU5NCBdLFxuICBbICdhMycsIDI5NywgNDIwIF0sXG4gIFsgJ2E0JywgMjEwLCAyOTcgXSxcbiAgWyAnYTUnLCAxNDgsIDIxMCBdLFxuICBbICdhNicsIDEwNSwgMTQ4IF0sXG4gIFsgJ2E3JywgNzQsIDEwNSBdLFxuICBbICdhOCcsIDUyLCA3NCBdLFxuICBbICdhOScsIDM3LCA1MiBdLFxuICBbICdhMTAnLCAyNiwgMzcgXSxcbiAgWyAnMmEwJywgMTE4OSwgMTY4MiBdLFxuICBbICc0YTAnLCAxNjgyLCAyMzc4IF0sXG4gIFsgJ2IwJywgMTAwMCwgMTQxNCBdLFxuICBbICdiMScsIDcwNywgMTAwMCBdLFxuICBbICdiMSsnLCA3MjAsIDEwMjAgXSxcbiAgWyAnYjInLCA1MDAsIDcwNyBdLFxuICBbICdiMisnLCA1MjAsIDcyMCBdLFxuICBbICdiMycsIDM1MywgNTAwIF0sXG4gIFsgJ2I0JywgMjUwLCAzNTMgXSxcbiAgWyAnYjUnLCAxNzYsIDI1MCBdLFxuICBbICdiNicsIDEyNSwgMTc2IF0sXG4gIFsgJ2I3JywgODgsIDEyNSBdLFxuICBbICdiOCcsIDYyLCA4OCBdLFxuICBbICdiOScsIDQ0LCA2MiBdLFxuICBbICdiMTAnLCAzMSwgNDQgXSxcbiAgWyAnYjExJywgMjIsIDMyIF0sXG4gIFsgJ2IxMicsIDE2LCAyMiBdLFxuICBbICdjMCcsIDkxNywgMTI5NyBdLFxuICBbICdjMScsIDY0OCwgOTE3IF0sXG4gIFsgJ2MyJywgNDU4LCA2NDggXSxcbiAgWyAnYzMnLCAzMjQsIDQ1OCBdLFxuICBbICdjNCcsIDIyOSwgMzI0IF0sXG4gIFsgJ2M1JywgMTYyLCAyMjkgXSxcbiAgWyAnYzYnLCAxMTQsIDE2MiBdLFxuICBbICdjNycsIDgxLCAxMTQgXSxcbiAgWyAnYzgnLCA1NywgODEgXSxcbiAgWyAnYzknLCA0MCwgNTcgXSxcbiAgWyAnYzEwJywgMjgsIDQwIF0sXG4gIFsgJ2MxMScsIDIyLCAzMiBdLFxuICBbICdjMTInLCAxNiwgMjIgXSxcblxuICAvLyBVc2UgaW5jaGVzIGZvciBOb3J0aCBBbWVyaWNhbiBzaXplcyxcbiAgLy8gYXMgaXQgcHJvZHVjZXMgbGVzcyBmbG9hdCBwcmVjaXNpb24gZXJyb3JzXG4gIFsgJ2hhbGYtbGV0dGVyJywgNS41LCA4LjUsICdpbicgXSxcbiAgWyAnbGV0dGVyJywgOC41LCAxMSwgJ2luJyBdLFxuICBbICdsZWdhbCcsIDguNSwgMTQsICdpbicgXSxcbiAgWyAnanVuaW9yLWxlZ2FsJywgNSwgOCwgJ2luJyBdLFxuICBbICdsZWRnZXInLCAxMSwgMTcsICdpbicgXSxcbiAgWyAndGFibG9pZCcsIDExLCAxNywgJ2luJyBdLFxuICBbICdhbnNpLWEnLCA4LjUsIDExLjAsICdpbicgXSxcbiAgWyAnYW5zaS1iJywgMTEuMCwgMTcuMCwgJ2luJyBdLFxuICBbICdhbnNpLWMnLCAxNy4wLCAyMi4wLCAnaW4nIF0sXG4gIFsgJ2Fuc2ktZCcsIDIyLjAsIDM0LjAsICdpbicgXSxcbiAgWyAnYW5zaS1lJywgMzQuMCwgNDQuMCwgJ2luJyBdLFxuICBbICdhcmNoLWEnLCA5LCAxMiwgJ2luJyBdLFxuICBbICdhcmNoLWInLCAxMiwgMTgsICdpbicgXSxcbiAgWyAnYXJjaC1jJywgMTgsIDI0LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZCcsIDI0LCAzNiwgJ2luJyBdLFxuICBbICdhcmNoLWUnLCAzNiwgNDgsICdpbicgXSxcbiAgWyAnYXJjaC1lMScsIDMwLCA0MiwgJ2luJyBdLFxuICBbICdhcmNoLWUyJywgMjYsIDM4LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZTMnLCAyNywgMzksICdpbicgXVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZGF0YS5yZWR1Y2UoKGRpY3QsIHByZXNldCkgPT4ge1xuICBjb25zdCBpdGVtID0ge1xuICAgIHVuaXRzOiBwcmVzZXRbM10gfHwgZGVmYXVsdFVuaXRzLFxuICAgIGRpbWVuc2lvbnM6IFsgcHJlc2V0WzFdLCBwcmVzZXRbMl0gXVxuICB9O1xuICBkaWN0W3ByZXNldFswXV0gPSBpdGVtO1xuICBkaWN0W3ByZXNldFswXS5yZXBsYWNlKC8tL2csICcgJyldID0gaXRlbTtcbiAgcmV0dXJuIGRpY3Q7XG59LCB7fSk7XG4iLCJpbXBvcnQgcGFwZXJTaXplcyBmcm9tICcuL3BhcGVyLXNpemVzJztcbmltcG9ydCBjb252ZXJ0TGVuZ3RoIGZyb20gJ2NvbnZlcnQtbGVuZ3RoJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpbWVuc2lvbnNGcm9tUHJlc2V0IChkaW1lbnNpb25zLCB1bml0c1RvID0gJ3B4JywgcGl4ZWxzUGVySW5jaCA9IDcyKSB7XG4gIGlmICh0eXBlb2YgZGltZW5zaW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBrZXkgPSBkaW1lbnNpb25zLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCEoa2V5IGluIHBhcGVyU2l6ZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBkaW1lbnNpb24gcHJlc2V0IFwiJHtkaW1lbnNpb25zfVwiIGlzIG5vdCBzdXBwb3J0ZWQgb3IgY291bGQgbm90IGJlIGZvdW5kOyB0cnkgdXNpbmcgYTQsIGEzLCBwb3N0Y2FyZCwgbGV0dGVyLCBldGMuYClcbiAgICB9XG4gICAgY29uc3QgcHJlc2V0ID0gcGFwZXJTaXplc1trZXldO1xuICAgIHJldHVybiBwcmVzZXQuZGltZW5zaW9ucy5tYXAoZCA9PiB7XG4gICAgICByZXR1cm4gY29udmVydERpc3RhbmNlKGQsIHByZXNldC51bml0cywgdW5pdHNUbywgcGl4ZWxzUGVySW5jaCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRpbWVuc2lvbnM7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnREaXN0YW5jZSAoZGltZW5zaW9uLCB1bml0c0Zyb20gPSAncHgnLCB1bml0c1RvID0gJ3B4JywgcGl4ZWxzUGVySW5jaCA9IDcyKSB7XG4gIHJldHVybiBjb252ZXJ0TGVuZ3RoKGRpbWVuc2lvbiwgdW5pdHNGcm9tLCB1bml0c1RvLCB7XG4gICAgcGl4ZWxzUGVySW5jaCxcbiAgICBwcmVjaXNpb246IDQsXG4gICAgcm91bmRQaXhlbDogdHJ1ZVxuICB9KTtcbn1cbiIsImltcG9ydCBkZWZpbmVkIGZyb20gJ2RlZmluZWQnO1xuaW1wb3J0IHsgZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQsIGNvbnZlcnREaXN0YW5jZSB9IGZyb20gJy4uL2Rpc3RhbmNlcyc7XG5pbXBvcnQgeyBpc0Jyb3dzZXIgfSBmcm9tICcuLi91dGlsJztcblxuZnVuY3Rpb24gY2hlY2tJZkhhc0RpbWVuc2lvbnMgKHNldHRpbmdzKSB7XG4gIGlmICghc2V0dGluZ3MuZGltZW5zaW9ucykgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIHNldHRpbmdzLmRpbWVuc2lvbnMgPT09ICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc2V0dGluZ3MuZGltZW5zaW9ucykgJiYgc2V0dGluZ3MuZGltZW5zaW9ucy5sZW5ndGggPj0gMikgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50U2l6ZSAocHJvcHMsIHNldHRpbmdzKSB7XG4gIC8vIFdoZW4gbm8geyBkaW1lbnNpb24gfSBpcyBwYXNzZWQgaW4gbm9kZSwgd2UgZGVmYXVsdCB0byBIVE1MIGNhbnZhcyBzaXplXG4gIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICByZXR1cm4gWyAzMDAsIDE1MCBdO1xuICB9XG5cbiAgbGV0IGVsZW1lbnQgPSBzZXR0aW5ncy5wYXJlbnQgfHwgd2luZG93O1xuXG4gIGlmIChlbGVtZW50ID09PSB3aW5kb3cgfHxcbiAgICAgIGVsZW1lbnQgPT09IGRvY3VtZW50IHx8XG4gICAgICBlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgcmV0dXJuIFsgd2luZG93LmlubmVyV2lkdGgsIHdpbmRvdy5pbm5lckhlaWdodCBdO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gWyB3aWR0aCwgaGVpZ2h0IF07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzaXplQ2FudmFzIChwcm9wcywgc2V0dGluZ3MpIHtcbiAgbGV0IHdpZHRoLCBoZWlnaHQ7XG4gIGxldCBzdHlsZVdpZHRoLCBzdHlsZUhlaWdodDtcbiAgbGV0IGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQ7XG5cbiAgY29uc3QgYnJvd3NlciA9IGlzQnJvd3NlcigpO1xuICBjb25zdCBkaW1lbnNpb25zID0gc2V0dGluZ3MuZGltZW5zaW9ucztcbiAgY29uc3QgaGFzRGltZW5zaW9ucyA9IGNoZWNrSWZIYXNEaW1lbnNpb25zKHNldHRpbmdzKTtcbiAgY29uc3QgZXhwb3J0aW5nID0gcHJvcHMuZXhwb3J0aW5nO1xuICBsZXQgc2NhbGVUb0ZpdCA9IGhhc0RpbWVuc2lvbnMgPyBzZXR0aW5ncy5zY2FsZVRvRml0ICE9PSBmYWxzZSA6IGZhbHNlO1xuICBsZXQgc2NhbGVUb1ZpZXcgPSAoIWV4cG9ydGluZyAmJiBoYXNEaW1lbnNpb25zKSA/IHNldHRpbmdzLnNjYWxlVG9WaWV3IDogdHJ1ZTtcbiAgLy8gaW4gbm9kZSwgY2FuY2VsIGJvdGggb2YgdGhlc2Ugb3B0aW9uc1xuICBpZiAoIWJyb3dzZXIpIHNjYWxlVG9GaXQgPSBzY2FsZVRvVmlldyA9IGZhbHNlO1xuICBjb25zdCB1bml0cyA9IHNldHRpbmdzLnVuaXRzO1xuICBjb25zdCBwaXhlbHNQZXJJbmNoID0gKHR5cGVvZiBzZXR0aW5ncy5waXhlbHNQZXJJbmNoID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzZXR0aW5ncy5waXhlbHNQZXJJbmNoKSkgPyBzZXR0aW5ncy5waXhlbHNQZXJJbmNoIDogNzI7XG4gIGNvbnN0IGJsZWVkID0gZGVmaW5lZChzZXR0aW5ncy5ibGVlZCwgMCk7XG5cbiAgY29uc3QgZGV2aWNlUGl4ZWxSYXRpbyA9IGJyb3dzZXIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDE7XG4gIGNvbnN0IGJhc2VQaXhlbFJhdGlvID0gc2NhbGVUb1ZpZXcgPyBkZXZpY2VQaXhlbFJhdGlvIDogMTtcblxuICBsZXQgcGl4ZWxSYXRpbywgZXhwb3J0UGl4ZWxSYXRpbztcblxuICAvLyBJZiBhIHBpeGVsIHJhdGlvIGlzIHNwZWNpZmllZCwgd2Ugd2lsbCB1c2UgaXQuXG4gIC8vIE90aGVyd2lzZTpcbiAgLy8gIC0+IElmIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSBiYXNlIHJhdGlvIChpLmUuIHNpemUgZm9yIGV4cG9ydClcbiAgLy8gIC0+IElmIG5vIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSBkZXZpY2UgcmF0aW8gKGkuZS4gc2l6ZSBmb3Igc2NyZWVuKVxuICBpZiAodHlwZW9mIHNldHRpbmdzLnBpeGVsUmF0aW8gPT09ICdudW1iZXInICYmIGlzRmluaXRlKHNldHRpbmdzLnBpeGVsUmF0aW8pKSB7XG4gICAgLy8gV2hlbiB7IHBpeGVsUmF0aW8gfSBpcyBzcGVjaWZpZWQsIGl0J3MgYWxzbyB1c2VkIGFzIGRlZmF1bHQgZXhwb3J0UGl4ZWxSYXRpby5cbiAgICBwaXhlbFJhdGlvID0gc2V0dGluZ3MucGl4ZWxSYXRpbztcbiAgICBleHBvcnRQaXhlbFJhdGlvID0gZGVmaW5lZChzZXR0aW5ncy5leHBvcnRQaXhlbFJhdGlvLCBwaXhlbFJhdGlvKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoaGFzRGltZW5zaW9ucykge1xuICAgICAgLy8gV2hlbiBhIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSB0aGUgYmFzZSByYXRpbyByYXRoZXIgdGhhbiBzY3JlZW4gcmF0aW9cbiAgICAgIHBpeGVsUmF0aW8gPSBiYXNlUGl4ZWxSYXRpbztcbiAgICAgIC8vIERlZmF1bHQgdG8gYSBwaXhlbCByYXRpbyBvZiAxIHNvIHRoYXQgeW91IGVuZCB1cCB3aXRoIHRoZSBzYW1lIGRpbWVuc2lvblxuICAgICAgLy8geW91IHNwZWNpZmllZCwgaS5lLiBbIDUwMCwgNTAwIF0gaXMgZXhwb3J0ZWQgYXMgNTAweDUwMCBweFxuICAgICAgZXhwb3J0UGl4ZWxSYXRpbyA9IGRlZmluZWQoc2V0dGluZ3MuZXhwb3J0UGl4ZWxSYXRpbywgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIGFzc3VtZSBmdWxsLXNjcmVlbiBzaXppbmdcbiAgICAgIHBpeGVsUmF0aW8gPSBkZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgLy8gRGVmYXVsdCB0byBzY3JlZW4gcGl4ZWwgcmF0aW8sIHNvIHRoYXQgaXQncyBsaWtlIHRha2luZyBhIGRldmljZSBzY3JlZW5zaG90XG4gICAgICBleHBvcnRQaXhlbFJhdGlvID0gZGVmaW5lZChzZXR0aW5ncy5leHBvcnRQaXhlbFJhdGlvLCBwaXhlbFJhdGlvKTtcbiAgICB9XG4gIH1cblxuICAvLyBDbGFtcCBwaXhlbCByYXRpb1xuICBpZiAodHlwZW9mIHNldHRpbmdzLm1heFBpeGVsUmF0aW8gPT09ICdudW1iZXInICYmIGlzRmluaXRlKHNldHRpbmdzLm1heFBpeGVsUmF0aW8pKSB7XG4gICAgcGl4ZWxSYXRpbyA9IE1hdGgubWluKHNldHRpbmdzLm1heFBpeGVsUmF0aW8sIHBpeGVsUmF0aW8pO1xuICAgIGV4cG9ydFBpeGVsUmF0aW8gPSBNYXRoLm1pbihzZXR0aW5ncy5tYXhQaXhlbFJhdGlvLCBleHBvcnRQaXhlbFJhdGlvKTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBleHBvcnQgcGl4ZWwgcmF0aW9cbiAgaWYgKGV4cG9ydGluZykge1xuICAgIHBpeGVsUmF0aW8gPSBleHBvcnRQaXhlbFJhdGlvO1xuICB9XG5cbiAgLy8gcGFyZW50V2lkdGggPSB0eXBlb2YgcGFyZW50V2lkdGggPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdE5vZGVTaXplWzBdIDogcGFyZW50V2lkdGg7XG4gIC8vIHBhcmVudEhlaWdodCA9IHR5cGVvZiBwYXJlbnRIZWlnaHQgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdE5vZGVTaXplWzFdIDogcGFyZW50SGVpZ2h0O1xuXG4gIGxldCBbIHBhcmVudFdpZHRoLCBwYXJlbnRIZWlnaHQgXSA9IGdldFBhcmVudFNpemUocHJvcHMsIHNldHRpbmdzKTtcbiAgbGV0IHRyaW1XaWR0aCwgdHJpbUhlaWdodDtcblxuICAvLyBZb3UgY2FuIHNwZWNpZnkgYSBkaW1lbnNpb25zIGluIHBpeGVscyBvciBjbS9tL2luL2V0Y1xuICBpZiAoaGFzRGltZW5zaW9ucykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGdldERpbWVuc2lvbnNGcm9tUHJlc2V0KGRpbWVuc2lvbnMsIHVuaXRzLCBwaXhlbHNQZXJJbmNoKTtcbiAgICBjb25zdCBoaWdoZXN0ID0gTWF0aC5tYXgocmVzdWx0WzBdLCByZXN1bHRbMV0pO1xuICAgIGNvbnN0IGxvd2VzdCA9IE1hdGgubWluKHJlc3VsdFswXSwgcmVzdWx0WzFdKTtcbiAgICBpZiAoc2V0dGluZ3Mub3JpZW50YXRpb24pIHtcbiAgICAgIGNvbnN0IGxhbmRzY2FwZSA9IHNldHRpbmdzLm9yaWVudGF0aW9uID09PSAnbGFuZHNjYXBlJztcbiAgICAgIHdpZHRoID0gbGFuZHNjYXBlID8gaGlnaGVzdCA6IGxvd2VzdDtcbiAgICAgIGhlaWdodCA9IGxhbmRzY2FwZSA/IGxvd2VzdCA6IGhpZ2hlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpZHRoID0gcmVzdWx0WzBdO1xuICAgICAgaGVpZ2h0ID0gcmVzdWx0WzFdO1xuICAgIH1cblxuICAgIHRyaW1XaWR0aCA9IHdpZHRoO1xuICAgIHRyaW1IZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAvLyBBcHBseSBibGVlZCB3aGljaCBpcyBhc3N1bWVkIHRvIGJlIGluIHRoZSBzYW1lIHVuaXRzXG4gICAgd2lkdGggKz0gYmxlZWQgKiAyO1xuICAgIGhlaWdodCArPSBibGVlZCAqIDI7XG4gIH0gZWxzZSB7XG4gICAgd2lkdGggPSBwYXJlbnRXaWR0aDtcbiAgICBoZWlnaHQgPSBwYXJlbnRIZWlnaHQ7XG4gICAgdHJpbVdpZHRoID0gd2lkdGg7XG4gICAgdHJpbUhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIC8vIFJlYWwgc2l6ZSBpbiBwaXhlbHMgYWZ0ZXIgUFBJIGlzIHRha2VuIGludG8gYWNjb3VudFxuICBsZXQgcmVhbFdpZHRoID0gd2lkdGg7XG4gIGxldCByZWFsSGVpZ2h0ID0gaGVpZ2h0O1xuICBpZiAoaGFzRGltZW5zaW9ucyAmJiB1bml0cykge1xuICAgIC8vIENvbnZlcnQgdG8gZGlnaXRhbC9waXhlbCB1bml0cyBpZiBuZWNlc3NhcnlcbiAgICByZWFsV2lkdGggPSBjb252ZXJ0RGlzdGFuY2Uod2lkdGgsIHVuaXRzLCAncHgnLCBwaXhlbHNQZXJJbmNoKTtcbiAgICByZWFsSGVpZ2h0ID0gY29udmVydERpc3RhbmNlKGhlaWdodCwgdW5pdHMsICdweCcsIHBpeGVsc1BlckluY2gpO1xuICB9XG5cbiAgLy8gSG93IGJpZyB0byBzZXQgdGhlICd2aWV3JyBvZiB0aGUgY2FudmFzIGluIHRoZSBicm93c2VyIChpLmUuIHN0eWxlKVxuICBzdHlsZVdpZHRoID0gTWF0aC5yb3VuZChyZWFsV2lkdGgpO1xuICBzdHlsZUhlaWdodCA9IE1hdGgucm91bmQocmVhbEhlaWdodCk7XG5cbiAgLy8gSWYgd2Ugd2lzaCB0byBzY2FsZSB0aGUgdmlldyB0byB0aGUgYnJvd3NlciB3aW5kb3dcbiAgaWYgKHNjYWxlVG9GaXQgJiYgIWV4cG9ydGluZyAmJiBoYXNEaW1lbnNpb25zKSB7XG4gICAgY29uc3QgYXNwZWN0ID0gd2lkdGggLyBoZWlnaHQ7XG4gICAgY29uc3Qgd2luZG93QXNwZWN0ID0gcGFyZW50V2lkdGggLyBwYXJlbnRIZWlnaHQ7XG4gICAgY29uc3Qgc2NhbGVUb0ZpdFBhZGRpbmcgPSBkZWZpbmVkKHNldHRpbmdzLnNjYWxlVG9GaXRQYWRkaW5nLCA0MCk7XG4gICAgY29uc3QgbWF4V2lkdGggPSBNYXRoLnJvdW5kKHBhcmVudFdpZHRoIC0gc2NhbGVUb0ZpdFBhZGRpbmcgKiAyKTtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSBNYXRoLnJvdW5kKHBhcmVudEhlaWdodCAtIHNjYWxlVG9GaXRQYWRkaW5nICogMik7XG4gICAgaWYgKHN0eWxlV2lkdGggPiBtYXhXaWR0aCB8fCBzdHlsZUhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgaWYgKHdpbmRvd0FzcGVjdCA+IGFzcGVjdCkge1xuICAgICAgICBzdHlsZUhlaWdodCA9IG1heEhlaWdodDtcbiAgICAgICAgc3R5bGVXaWR0aCA9IE1hdGgucm91bmQoc3R5bGVIZWlnaHQgKiBhc3BlY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGVXaWR0aCA9IG1heFdpZHRoO1xuICAgICAgICBzdHlsZUhlaWdodCA9IE1hdGgucm91bmQoc3R5bGVXaWR0aCAvIGFzcGVjdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FudmFzV2lkdGggPSBzY2FsZVRvVmlldyA/IE1hdGgucm91bmQocGl4ZWxSYXRpbyAqIHN0eWxlV2lkdGgpIDogTWF0aC5yb3VuZChwaXhlbFJhdGlvICogcmVhbFdpZHRoKTtcbiAgY2FudmFzSGVpZ2h0ID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiBzdHlsZUhlaWdodCkgOiBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiByZWFsSGVpZ2h0KTtcblxuICBjb25zdCB2aWV3cG9ydFdpZHRoID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHN0eWxlV2lkdGgpIDogTWF0aC5yb3VuZChyZWFsV2lkdGgpO1xuICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHNjYWxlVG9WaWV3ID8gTWF0aC5yb3VuZChzdHlsZUhlaWdodCkgOiBNYXRoLnJvdW5kKHJlYWxIZWlnaHQpO1xuXG4gIGNvbnN0IHNjYWxlWCA9IGNhbnZhc1dpZHRoIC8gd2lkdGg7XG4gIGNvbnN0IHNjYWxlWSA9IGNhbnZhc0hlaWdodCAvIGhlaWdodDtcblxuICAvLyBBc3NpZ24gdG8gY3VycmVudCBwcm9wc1xuICByZXR1cm4ge1xuICAgIGJsZWVkLFxuICAgIHBpeGVsUmF0aW8sXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGRpbWVuc2lvbnM6IFsgd2lkdGgsIGhlaWdodCBdLFxuICAgIHVuaXRzOiB1bml0cyB8fCAncHgnLFxuICAgIHNjYWxlWCxcbiAgICBzY2FsZVksXG4gICAgdmlld3BvcnRXaWR0aCxcbiAgICB2aWV3cG9ydEhlaWdodCxcbiAgICBjYW52YXNXaWR0aCxcbiAgICBjYW52YXNIZWlnaHQsXG4gICAgdHJpbVdpZHRoLFxuICAgIHRyaW1IZWlnaHQsXG4gICAgc3R5bGVXaWR0aCxcbiAgICBzdHlsZUhlaWdodFxuICB9O1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBnZXRDYW52YXNDb250ZXh0XG5mdW5jdGlvbiBnZXRDYW52YXNDb250ZXh0ICh0eXBlLCBvcHRzKSB7XG4gIGlmICh0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtdXN0IHNwZWNpZnkgdHlwZSBzdHJpbmcnKVxuICB9XG5cbiAgb3B0cyA9IG9wdHMgfHwge31cblxuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyAmJiAhb3B0cy5jYW52YXMpIHtcbiAgICByZXR1cm4gbnVsbCAvLyBjaGVjayBmb3IgTm9kZVxuICB9XG5cbiAgdmFyIGNhbnZhcyA9IG9wdHMuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXG4gIGlmICh0eXBlb2Ygb3B0cy53aWR0aCA9PT0gJ251bWJlcicpIHtcbiAgICBjYW52YXMud2lkdGggPSBvcHRzLndpZHRoXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlaWdodCA9PT0gJ251bWJlcicpIHtcbiAgICBjYW52YXMuaGVpZ2h0ID0gb3B0cy5oZWlnaHRcbiAgfVxuXG4gIHZhciBhdHRyaWJzID0gb3B0c1xuICB2YXIgZ2xcbiAgdHJ5IHtcbiAgICB2YXIgbmFtZXMgPSBbIHR5cGUgXVxuICAgIC8vIHByZWZpeCBHTCBjb250ZXh0c1xuICAgIGlmICh0eXBlLmluZGV4T2YoJ3dlYmdsJykgPT09IDApIHtcbiAgICAgIG5hbWVzLnB1c2goJ2V4cGVyaW1lbnRhbC0nICsgdHlwZSlcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KG5hbWVzW2ldLCBhdHRyaWJzKVxuICAgICAgaWYgKGdsKSByZXR1cm4gZ2xcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBnbCA9IG51bGxcbiAgfVxuICByZXR1cm4gKGdsIHx8IG51bGwpIC8vIGVuc3VyZSBudWxsIG9uIGZhaWxcbn1cbiIsImltcG9ydCBhc3NpZ24gZnJvbSAnb2JqZWN0LWFzc2lnbic7XG5pbXBvcnQgZ2V0Q2FudmFzQ29udGV4dCBmcm9tICdnZXQtY2FudmFzLWNvbnRleHQnO1xuaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSAnLi4vdXRpbCc7XG5cbmZ1bmN0aW9uIGNyZWF0ZUNhbnZhc0VsZW1lbnQgKCkge1xuICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJdCBhcHBlYXJzIHlvdSBhcmUgcnVuaW5nIGZyb20gTm9kZS5qcyBvciBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LiBUcnkgcGFzc2luZyBpbiBhbiBleGlzdGluZyB7IGNhbnZhcyB9IGludGVyZmFjZSBpbnN0ZWFkLicpO1xuICB9XG4gIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ2FudmFzIChzZXR0aW5ncyA9IHt9KSB7XG4gIGxldCBjb250ZXh0LCBjYW52YXM7XG4gIGxldCBvd25zQ2FudmFzID0gZmFsc2U7XG4gIGlmIChzZXR0aW5ncy5jYW52YXMgIT09IGZhbHNlKSB7XG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBjYW52YXMgYW5kIGNvbnRleHQgdG8gY3JlYXRlXG4gICAgY29udGV4dCA9IHNldHRpbmdzLmNvbnRleHQ7XG4gICAgaWYgKCFjb250ZXh0IHx8IHR5cGVvZiBjb250ZXh0ID09PSAnc3RyaW5nJykge1xuICAgICAgbGV0IG5ld0NhbnZhcyA9IHNldHRpbmdzLmNhbnZhcztcbiAgICAgIGlmICghbmV3Q2FudmFzKSB7XG4gICAgICAgIG5ld0NhbnZhcyA9IGNyZWF0ZUNhbnZhc0VsZW1lbnQoKTtcbiAgICAgICAgb3duc0NhbnZhcyA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB0eXBlID0gY29udGV4dCB8fCAnMmQnO1xuICAgICAgaWYgKHR5cGVvZiBuZXdDYW52YXMuZ2V0Q29udGV4dCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzcGVjaWZpZWQgeyBjYW52YXMgfSBlbGVtZW50IGRvZXMgbm90IGhhdmUgYSBnZXRDb250ZXh0KCkgZnVuY3Rpb24sIG1heWJlIGl0IGlzIG5vdCBhIDxjYW52YXM+IHRhZz9gKTtcbiAgICAgIH1cbiAgICAgIGNvbnRleHQgPSBnZXRDYW52YXNDb250ZXh0KHR5cGUsIGFzc2lnbih7fSwgc2V0dGluZ3MuYXR0cmlidXRlcywgeyBjYW52YXM6IG5ld0NhbnZhcyB9KSk7XG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgYXQgY2FudmFzLmdldENvbnRleHQoJyR7dHlwZX0nKSAtIHRoZSBicm93c2VyIG1heSBub3Qgc3VwcG9ydCB0aGlzIGNvbnRleHQsIG9yIGEgZGlmZmVyZW50IGNvbnRleHQgbWF5IGFscmVhZHkgYmUgaW4gdXNlIHdpdGggdGhpcyBjYW52YXMuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FudmFzID0gY29udGV4dC5jYW52YXM7XG4gICAgLy8gRW5zdXJlIGNvbnRleHQgbWF0Y2hlcyB1c2VyJ3MgY2FudmFzIGV4cGVjdGF0aW9uc1xuICAgIGlmIChzZXR0aW5ncy5jYW52YXMgJiYgY2FudmFzICE9PSBzZXR0aW5ncy5jYW52YXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHsgY2FudmFzIH0gYW5kIHsgY29udGV4dCB9IHNldHRpbmdzIG11c3QgcG9pbnQgdG8gdGhlIHNhbWUgdW5kZXJseWluZyBjYW52YXMgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHBpeGVsYXRpb24gdG8gY2FudmFzIGlmIG5lY2Vzc2FyeSwgdGhpcyBpcyBtb3N0bHkgYSBjb252ZW5pZW5jZSB1dGlsaXR5XG4gICAgaWYgKHNldHRpbmdzLnBpeGVsYXRlZCkge1xuICAgICAgY29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjYW52YXMuc3R5bGVbJ2ltYWdlLXJlbmRlcmluZyddID0gJ3BpeGVsYXRlZCc7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGNhbnZhcywgY29udGV4dCwgb3duc0NhbnZhcyB9O1xufVxuIiwiaW1wb3J0IGRlZmluZWQgZnJvbSAnZGVmaW5lZCc7XG5pbXBvcnQgYXNzaWduIGZyb20gJ29iamVjdC1hc3NpZ24nO1xuaW1wb3J0IHJpZ2h0Tm93IGZyb20gJ3JpZ2h0LW5vdyc7XG5pbXBvcnQgaXNQcm9taXNlIGZyb20gJ2lzLXByb21pc2UnO1xuaW1wb3J0IHsgaXNCcm93c2VyLCBpc1dlYkdMQ29udGV4dCwgaXNDYW52YXMsIGdldENsaWVudEFQSSB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tICdkZWVwLWVxdWFsJztcbmltcG9ydCB7IHNhdmVGaWxlLCBzYXZlRGF0YVVSTCwgZ2V0RmlsZU5hbWUsIGV4cG9ydENhbnZhcyB9IGZyb20gJy4uL3NhdmUnO1xuaW1wb3J0IHsgY2hlY2tTZXR0aW5ncyB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuXG5pbXBvcnQga2V5Ym9hcmRTaG9ydGN1dHMgZnJvbSAnLi9rZXlib2FyZFNob3J0Y3V0cyc7XG5pbXBvcnQgcmVzaXplQ2FudmFzIGZyb20gJy4vcmVzaXplQ2FudmFzJztcbmltcG9ydCBjcmVhdGVDYW52YXMgZnJvbSAnLi9jcmVhdGVDYW52YXMnO1xuXG5jbGFzcyBTa2V0Y2hNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMuX3NldHRpbmdzID0ge307XG4gICAgdGhpcy5fcHJvcHMgPSB7fTtcbiAgICB0aGlzLl9za2V0Y2ggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmFmID0gbnVsbDtcblxuICAgIC8vIFNvbWUgaGFja3kgdGhpbmdzIHJlcXVpcmVkIHRvIGdldCBhcm91bmQgcDUuanMgc3RydWN0dXJlXG4gICAgdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9pc1A1UmVzaXppbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuX2tleWJvYXJkU2hvcnRjdXRzID0ga2V5Ym9hcmRTaG9ydGN1dHMoe1xuICAgICAgZW5hYmxlZDogKCkgPT4gdGhpcy5zZXR0aW5ncy5ob3RrZXlzICE9PSBmYWxzZSxcbiAgICAgIHNhdmU6IChldikgPT4ge1xuICAgICAgICBpZiAoZXYuc2hpZnRLZXkpIHtcbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5yZWNvcmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kUmVjb3JkKCk7XG4gICAgICAgICAgICB0aGlzLnJ1bigpO1xuICAgICAgICAgIH0gZWxzZSB0aGlzLnJlY29yZCgpO1xuICAgICAgICB9IGVsc2UgdGhpcy5leHBvcnRGcmFtZSgpO1xuICAgICAgfSxcbiAgICAgIHRvZ2dsZVBsYXk6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMucGxheWluZykgdGhpcy5wYXVzZSgpO1xuICAgICAgICBlbHNlIHRoaXMucGxheSgpO1xuICAgICAgfSxcbiAgICAgIGNvbW1pdDogKGV2KSA9PiB7XG4gICAgICAgIHRoaXMuZXhwb3J0RnJhbWUoeyBjb21taXQ6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9hbmltYXRlSGFuZGxlciA9ICgpID0+IHRoaXMuYW5pbWF0ZSgpO1xuXG4gICAgdGhpcy5fcmVzaXplSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLnJlc2l6ZSgpO1xuICAgICAgLy8gT25seSByZS1yZW5kZXIgd2hlbiBzaXplIGFjdHVhbGx5IGNoYW5nZXNcbiAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGdldCBza2V0Y2ggKCkge1xuICAgIHJldHVybiB0aGlzLl9za2V0Y2g7XG4gIH1cblxuICBnZXQgc2V0dGluZ3MgKCkge1xuICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncztcbiAgfVxuXG4gIGdldCBwcm9wcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb3BzO1xuICB9XG5cbiAgX2NvbXB1dGVQbGF5aGVhZCAoY3VycmVudFRpbWUsIGR1cmF0aW9uKSB7XG4gICAgY29uc3QgaGFzRHVyYXRpb24gPSB0eXBlb2YgZHVyYXRpb24gPT09ICdudW1iZXInICYmIGlzRmluaXRlKGR1cmF0aW9uKTtcbiAgICByZXR1cm4gaGFzRHVyYXRpb24gPyBjdXJyZW50VGltZSAvIGR1cmF0aW9uIDogMDtcbiAgfVxuXG4gIF9jb21wdXRlRnJhbWUgKHBsYXloZWFkLCB0aW1lLCB0b3RhbEZyYW1lcywgZnBzKSB7XG4gICAgcmV0dXJuIChpc0Zpbml0ZSh0b3RhbEZyYW1lcykgJiYgdG90YWxGcmFtZXMgPiAxKVxuICAgICAgPyBNYXRoLmZsb29yKHBsYXloZWFkICogKHRvdGFsRnJhbWVzIC0gMSkpXG4gICAgICA6IE1hdGguZmxvb3IoZnBzICogdGltZSk7XG4gIH1cblxuICBfY29tcHV0ZUN1cnJlbnRGcmFtZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbXB1dGVGcmFtZShcbiAgICAgIHRoaXMucHJvcHMucGxheWhlYWQsIHRoaXMucHJvcHMudGltZSxcbiAgICAgIHRoaXMucHJvcHMudG90YWxGcmFtZXMsIHRoaXMucHJvcHMuZnBzXG4gICAgKTtcbiAgfVxuXG4gIF9nZXRTaXplUHJvcHMgKCkge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IHByb3BzLndpZHRoLFxuICAgICAgaGVpZ2h0OiBwcm9wcy5oZWlnaHQsXG4gICAgICBwaXhlbFJhdGlvOiBwcm9wcy5waXhlbFJhdGlvLFxuICAgICAgY2FudmFzV2lkdGg6IHByb3BzLmNhbnZhc1dpZHRoLFxuICAgICAgY2FudmFzSGVpZ2h0OiBwcm9wcy5jYW52YXNIZWlnaHQsXG4gICAgICB2aWV3cG9ydFdpZHRoOiBwcm9wcy52aWV3cG9ydFdpZHRoLFxuICAgICAgdmlld3BvcnRIZWlnaHQ6IHByb3BzLnZpZXdwb3J0SGVpZ2h0XG4gICAgfTtcbiAgfVxuXG4gIHJ1biAoKSB7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgd2FpdCB1bnRpbCBza2V0Y2ggaXMgbG9hZGVkIGJlZm9yZSB0cnlpbmcgdG8gcGxheSgpJyk7XG5cbiAgICAvLyBTdGFydCBhbiBhbmltYXRpb24gZnJhbWUgbG9vcCBpZiBuZWNlc3NhcnlcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5wbGF5aW5nICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5wbGF5KCk7XG4gICAgfVxuXG4gICAgLy8gTGV0J3MgbGV0IHRoaXMgd2FybmluZyBoYW5nIGFyb3VuZCBmb3IgYSBmZXcgdmVyc2lvbnMuLi5cbiAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoLmRpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2FybignSW4gY2FudmFzLXNrZXRjaEAwLjAuMjMgdGhlIGRpc3Bvc2UoKSBldmVudCBoYXMgYmVlbiByZW5hbWVkIHRvIHVubG9hZCgpJyk7XG4gICAgfVxuXG4gICAgLy8gSW4gY2FzZSB3ZSBhcmVuJ3QgcGxheWluZyBvciBhbmltYXRlZCwgbWFrZSBzdXJlIHdlIHN0aWxsIHRyaWdnZXIgYmVnaW4gbWVzc2FnZS4uLlxuICAgIGlmICghdGhpcy5wcm9wcy5zdGFydGVkKSB7XG4gICAgICB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgdGhpcy5wcm9wcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBSZW5kZXIgYW4gaW5pdGlhbCBmcmFtZVxuICAgIHRoaXMudGljaygpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwbGF5ICgpIHtcbiAgICBsZXQgYW5pbWF0ZSA9IHRoaXMuc2V0dGluZ3MuYW5pbWF0ZTtcbiAgICBpZiAoJ2FuaW1hdGlvbicgaW4gdGhpcy5zZXR0aW5ncykge1xuICAgICAgYW5pbWF0ZSA9IHRydWU7XG4gICAgICBjb25zb2xlLndhcm4oJ1tjYW52YXMtc2tldGNoXSB7IGFuaW1hdGlvbiB9IGhhcyBiZWVuIHJlbmFtZWQgdG8geyBhbmltYXRlIH0nKTtcbiAgICB9XG4gICAgaWYgKCFhbmltYXRlKSByZXR1cm47XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgICAgY29uc29sZS5lcnJvcignW2NhbnZhcy1za2V0Y2hdIFdBUk46IFVzaW5nIHsgYW5pbWF0ZSB9IGluIE5vZGUuanMgaXMgbm90IHlldCBzdXBwb3J0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMucGxheWluZykgcmV0dXJuO1xuICAgIGlmICghdGhpcy5wcm9wcy5zdGFydGVkKSB7XG4gICAgICB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgdGhpcy5wcm9wcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZygncGxheScsIHRoaXMucHJvcHMudGltZSlcblxuICAgIC8vIFN0YXJ0IGEgcmVuZGVyIGxvb3BcbiAgICB0aGlzLnByb3BzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLl9yYWYgIT0gbnVsbCkgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JhZik7XG4gICAgdGhpcy5fbGFzdFRpbWUgPSByaWdodE5vdygpO1xuICAgIHRoaXMuX3JhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0ZUhhbmRsZXIpO1xuICB9XG5cbiAgcGF1c2UgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJlY29yZGluZykgdGhpcy5lbmRSZWNvcmQoKTtcbiAgICB0aGlzLnByb3BzLnBsYXlpbmcgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9yYWYgIT0gbnVsbCAmJiBpc0Jyb3dzZXIoKSkge1xuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JhZik7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlUGxheSAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucGxheWluZykgdGhpcy5wYXVzZSgpO1xuICAgIGVsc2UgdGhpcy5wbGF5KCk7XG4gIH1cblxuICAvLyBTdG9wIGFuZCByZXNldCB0byBmcmFtZSB6ZXJvXG4gIHN0b3AgKCkge1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLnByb3BzLmZyYW1lID0gMDtcbiAgICB0aGlzLnByb3BzLnBsYXloZWFkID0gMDtcbiAgICB0aGlzLnByb3BzLnRpbWUgPSAwO1xuICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gMDtcbiAgICB0aGlzLnByb3BzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVjb3JkICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yZWNvcmRpbmcpIHJldHVybjtcbiAgICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbY2FudmFzLXNrZXRjaF0gV0FSTjogUmVjb3JkaW5nIGZyb20gTm9kZS5qcyBpcyBub3QgeWV0IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcCgpO1xuICAgIHRoaXMucHJvcHMucGxheWluZyA9IHRydWU7XG4gICAgdGhpcy5wcm9wcy5yZWNvcmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEgLyB0aGlzLnByb3BzLmZwcztcbiAgICAvLyBSZW5kZXIgZWFjaCBmcmFtZSBpbiB0aGUgc2VxdWVuY2VcbiAgICBpZiAodGhpcy5fcmFmICE9IG51bGwpIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpO1xuICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMucHJvcHMucmVjb3JkaW5nKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IGZyYW1lSW50ZXJ2YWw7XG4gICAgICB0aGlzLnRpY2soKTtcbiAgICAgIHJldHVybiB0aGlzLmV4cG9ydEZyYW1lKHsgc2VxdWVuY2U6IHRydWUgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5wcm9wcy5yZWNvcmRpbmcpIHJldHVybjsgLy8gd2FzIGNhbmNlbGxlZCBiZWZvcmVcbiAgICAgICAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IDA7XG4gICAgICAgICAgdGhpcy5wcm9wcy5mcmFtZSsrO1xuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmZyYW1lIDwgdGhpcy5wcm9wcy50b3RhbEZyYW1lcykge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy50aW1lICs9IGZyYW1lSW50ZXJ2YWw7XG4gICAgICAgICAgICB0aGlzLnByb3BzLnBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKHRoaXMucHJvcHMudGltZSwgdGhpcy5wcm9wcy5kdXJhdGlvbik7XG4gICAgICAgICAgICB0aGlzLl9yYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRmluaXNoZWQgcmVjb3JkaW5nJyk7XG4gICAgICAgICAgICB0aGlzLl9zaWduYWxFbmQoKTtcbiAgICAgICAgICAgIHRoaXMuZW5kUmVjb3JkKCk7XG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgICAgIHRoaXMucnVuKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLy8gVHJpZ2dlciBhIHN0YXJ0IGV2ZW50IGJlZm9yZSB3ZSBiZWdpbiByZWNvcmRpbmdcbiAgICBpZiAoIXRoaXMucHJvcHMuc3RhcnRlZCkge1xuICAgICAgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5fcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgfVxuXG4gIF9zaWduYWxCZWdpbiAoKSB7XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5iZWdpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC5iZWdpbihwcm9wcykpO1xuICAgIH1cbiAgfVxuXG4gIF9zaWduYWxFbmQgKCkge1xuICAgIGlmICh0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2guZW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLmVuZChwcm9wcykpO1xuICAgIH1cbiAgfVxuXG4gIGVuZFJlY29yZCAoKSB7XG4gICAgaWYgKHRoaXMuX3JhZiAhPSBudWxsICYmIGlzQnJvd3NlcigpKSB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKTtcbiAgICB0aGlzLnByb3BzLnJlY29yZGluZyA9IGZhbHNlO1xuICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gMDtcbiAgICB0aGlzLnByb3BzLnBsYXlpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGV4cG9ydEZyYW1lIChvcHQgPSB7fSkge1xuICAgIGlmICghdGhpcy5za2V0Y2gpIHJldHVybiBQcm9taXNlLmFsbChbXSk7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC5wcmVFeHBvcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuc2tldGNoLnByZUV4cG9ydCgpO1xuICAgIH1cblxuICAgIC8vIE9wdGlvbnMgZm9yIGV4cG9ydCBmdW5jdGlvblxuICAgIGxldCBleHBvcnRPcHRzID0gYXNzaWduKHtcbiAgICAgIHNlcXVlbmNlOiBvcHQuc2VxdWVuY2UsXG4gICAgICBmcmFtZTogb3B0LnNlcXVlbmNlID8gdGhpcy5wcm9wcy5mcmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgIGZpbGU6IHRoaXMuc2V0dGluZ3MuZmlsZSxcbiAgICAgIG5hbWU6IHRoaXMuc2V0dGluZ3MubmFtZSxcbiAgICAgIHByZWZpeDogdGhpcy5zZXR0aW5ncy5wcmVmaXgsXG4gICAgICBzdWZmaXg6IHRoaXMuc2V0dGluZ3Muc3VmZml4LFxuICAgICAgZW5jb2Rpbmc6IHRoaXMuc2V0dGluZ3MuZW5jb2RpbmcsXG4gICAgICBlbmNvZGluZ1F1YWxpdHk6IHRoaXMuc2V0dGluZ3MuZW5jb2RpbmdRdWFsaXR5LFxuICAgICAgdGltZVN0YW1wOiBnZXRGaWxlTmFtZSgpLFxuICAgICAgdG90YWxGcmFtZXM6IGlzRmluaXRlKHRoaXMucHJvcHMudG90YWxGcmFtZXMpID8gTWF0aC5tYXgoMTAwLCB0aGlzLnByb3BzLnRvdGFsRnJhbWVzKSA6IDEwMDBcbiAgICB9KTtcblxuICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICAgIGxldCBwID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKGNsaWVudCAmJiBvcHQuY29tbWl0ICYmIHR5cGVvZiBjbGllbnQuY29tbWl0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBjb21taXRPcHRzID0gYXNzaWduKHt9LCBleHBvcnRPcHRzKTtcbiAgICAgIGNvbnN0IGhhc2ggPSBjbGllbnQuY29tbWl0KGNvbW1pdE9wdHMpO1xuICAgICAgaWYgKGlzUHJvbWlzZShoYXNoKSkgcCA9IGhhc2g7XG4gICAgICBlbHNlIHAgPSBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHAudGhlbihoYXNoID0+IHtcbiAgICAgIHJldHVybiB0aGlzLl9kb0V4cG9ydEZyYW1lKGFzc2lnbih7fSwgZXhwb3J0T3B0cywgeyBoYXNoOiBoYXNoIHx8ICcnIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9kb0V4cG9ydEZyYW1lIChleHBvcnRPcHRzID0ge30pIHtcbiAgICB0aGlzLl9wcm9wcy5leHBvcnRpbmcgPSB0cnVlO1xuXG4gICAgLy8gUmVzaXplIHRvIG91dHB1dCByZXNvbHV0aW9uXG4gICAgdGhpcy5yZXNpemUoKTtcblxuICAgIC8vIERyYXcgYXQgdGhpcyBvdXRwdXQgcmVzb2x1dGlvblxuICAgIGxldCBkcmF3UmVzdWx0ID0gdGhpcy5yZW5kZXIoKTtcblxuICAgIC8vIFRoZSBzZWxmIG93bmVkIGNhbnZhcyAobWF5IGJlIHVuZGVmaW5lZC4uLiEpXG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5wcm9wcy5jYW52YXM7XG5cbiAgICAvLyBHZXQgbGlzdCBvZiByZXN1bHRzIGZyb20gcmVuZGVyXG4gICAgaWYgKHR5cGVvZiBkcmF3UmVzdWx0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZHJhd1Jlc3VsdCA9IFsgY2FudmFzIF07XG4gICAgfVxuICAgIGRyYXdSZXN1bHQgPSBbXS5jb25jYXQoZHJhd1Jlc3VsdCkuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgLy8gVHJhbnNmb3JtIHRoZSBjYW52YXMvZmlsZSBkZXNjcmlwdG9ycyBpbnRvIGEgY29uc2lzdGVudCBmb3JtYXQsXG4gICAgLy8gYW5kIHB1bGwgb3V0IGFueSBkYXRhIFVSTHMgZnJvbSBjYW52YXMgZWxlbWVudHNcbiAgICBkcmF3UmVzdWx0ID0gZHJhd1Jlc3VsdC5tYXAocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IGhhc0RhdGFPYmplY3QgPSB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgKCdkYXRhJyBpbiByZXN1bHQgfHwgJ2RhdGFVUkwnIGluIHJlc3VsdCk7XG4gICAgICBjb25zdCBkYXRhID0gaGFzRGF0YU9iamVjdCA/IHJlc3VsdC5kYXRhIDogcmVzdWx0O1xuICAgICAgY29uc3Qgb3B0cyA9IGhhc0RhdGFPYmplY3QgPyBhc3NpZ24oe30sIHJlc3VsdCwgeyBkYXRhIH0pIDogeyBkYXRhIH07XG4gICAgICBpZiAoaXNDYW52YXMoZGF0YSkpIHtcbiAgICAgICAgY29uc3QgZW5jb2RpbmcgPSBvcHRzLmVuY29kaW5nIHx8IGV4cG9ydE9wdHMuZW5jb2Rpbmc7XG4gICAgICAgIGNvbnN0IGVuY29kaW5nUXVhbGl0eSA9IGRlZmluZWQob3B0cy5lbmNvZGluZ1F1YWxpdHksIGV4cG9ydE9wdHMuZW5jb2RpbmdRdWFsaXR5LCAwLjk1KTtcbiAgICAgICAgY29uc3QgeyBkYXRhVVJMLCBleHRlbnNpb24sIHR5cGUgfSA9IGV4cG9ydENhbnZhcyhkYXRhLCB7IGVuY29kaW5nLCBlbmNvZGluZ1F1YWxpdHkgfSk7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG9wdHMsIHsgZGF0YVVSTCwgZXh0ZW5zaW9uLCB0eXBlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9wdHM7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBOb3cgcmV0dXJuIHRvIHJlZ3VsYXIgcmVuZGVyaW5nIG1vZGVcbiAgICB0aGlzLl9wcm9wcy5leHBvcnRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJlc2l6ZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICAvLyBBbmQgbm93IHdlIGNhbiBzYXZlIGVhY2ggcmVzdWx0XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGRyYXdSZXN1bHQubWFwKChyZXN1bHQsIGksIGxheWVyTGlzdCkgPT4ge1xuICAgICAgLy8gQnkgZGVmYXVsdCwgaWYgcmVuZGVyaW5nIG11bHRpcGxlIGxheWVycyB3ZSB3aWxsIGdpdmUgdGhlbSBpbmRpY2VzXG4gICAgICBjb25zdCBjdXJPcHQgPSBhc3NpZ24oe30sIGV4cG9ydE9wdHMsIHJlc3VsdCwgeyBsYXllcjogaSwgdG90YWxMYXllcnM6IGxheWVyTGlzdC5sZW5ndGggfSk7XG4gICAgICBjb25zdCBkYXRhID0gcmVzdWx0LmRhdGE7XG4gICAgICBpZiAocmVzdWx0LmRhdGFVUkwpIHtcbiAgICAgICAgY29uc3QgZGF0YVVSTCA9IHJlc3VsdC5kYXRhVVJMO1xuICAgICAgICBkZWxldGUgY3VyT3B0LmRhdGFVUkw7IC8vIGF2b2lkIHNlbmRpbmcgZW50aXJlIGJhc2U2NCBkYXRhIGFyb3VuZFxuICAgICAgICByZXR1cm4gc2F2ZURhdGFVUkwoZGF0YVVSTCwgY3VyT3B0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzYXZlRmlsZShkYXRhLCBjdXJPcHQpO1xuICAgICAgfVxuICAgIH0pKS50aGVuKGV2ID0+IHtcbiAgICAgIGlmIChldi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50V2l0aE91dHB1dCA9IGV2LmZpbmQoZSA9PiBlLm91dHB1dE5hbWUpO1xuICAgICAgICBjb25zdCBpc0NsaWVudCA9IGV2LnNvbWUoZSA9PiBlLmNsaWVudCk7XG4gICAgICAgIGxldCBpdGVtO1xuICAgICAgICAvLyBtYW55IGZpbGVzLCBqdXN0IGxvZyBob3cgbWFueSB3ZXJlIGV4cG9ydGVkXG4gICAgICAgIGlmIChldi5sZW5ndGggPiAxKSBpdGVtID0gZXYubGVuZ3RoO1xuICAgICAgICAvLyBpbiBDTEksIHdlIGtub3cgZXhhY3QgcGF0aCBkaXJuYW1lXG4gICAgICAgIGVsc2UgaWYgKGV2ZW50V2l0aE91dHB1dCkgaXRlbSA9IGAke2V2ZW50V2l0aE91dHB1dC5vdXRwdXROYW1lfS8ke2V2WzBdLmZpbGVuYW1lfWA7XG4gICAgICAgIC8vIGluIGJyb3dzZXIsIHdlIGNhbiBvbmx5IGtub3cgaXQgd2VudCB0byBcImJyb3dzZXIgZG93bmxvYWQgZm9sZGVyXCJcbiAgICAgICAgZWxzZSBpdGVtID0gYCR7ZXZbMF0uZmlsZW5hbWV9YDtcbiAgICAgICAgbGV0IG9mU2VxID0gJyc7XG4gICAgICAgIGlmIChleHBvcnRPcHRzLnNlcXVlbmNlKSB7XG4gICAgICAgICAgY29uc3QgaGFzVG90YWxGcmFtZXMgPSBpc0Zpbml0ZSh0aGlzLnByb3BzLnRvdGFsRnJhbWVzKTtcbiAgICAgICAgICBvZlNlcSA9IGhhc1RvdGFsRnJhbWVzID8gYCAoZnJhbWUgJHtleHBvcnRPcHRzLmZyYW1lICsgMX0gLyAke3RoaXMucHJvcHMudG90YWxGcmFtZXN9KWAgOiBgIChmcmFtZSAke2V4cG9ydE9wdHMuZnJhbWV9KWA7XG4gICAgICAgIH0gZWxzZSBpZiAoZXYubGVuZ3RoID4gMSkge1xuICAgICAgICAgIG9mU2VxID0gYCBmaWxlc2A7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xpZW50ID0gaXNDbGllbnQgPyAnY2FudmFzLXNrZXRjaC1jbGknIDogJ2NhbnZhcy1za2V0Y2gnO1xuICAgICAgICBjb25zb2xlLmxvZyhgJWNbJHtjbGllbnR9XSVjIEV4cG9ydGVkICVjJHtpdGVtfSVjJHtvZlNlcX1gLCAnY29sb3I6ICM4ZThlOGU7JywgJ2NvbG9yOiBpbml0aWFsOycsICdmb250LXdlaWdodDogYm9sZDsnLCAnZm9udC13ZWlnaHQ6IGluaXRpYWw7Jyk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnBvc3RFeHBvcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5za2V0Y2gucG9zdEV4cG9ydCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgX3dyYXBDb250ZXh0U2NhbGUgKGNiKSB7XG4gICAgdGhpcy5fcHJlUmVuZGVyKCk7XG4gICAgY2IodGhpcy5wcm9wcyk7XG4gICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuICB9XG5cbiAgX3ByZVJlbmRlciAoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gU2NhbGUgY29udGV4dCBmb3IgdW5pdCBzaXppbmdcbiAgICBpZiAoIXRoaXMucHJvcHMuZ2wgJiYgcHJvcHMuY29udGV4dCAmJiAhcHJvcHMucDUpIHtcbiAgICAgIHByb3BzLmNvbnRleHQuc2F2ZSgpO1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3Muc2NhbGVDb250ZXh0ICE9PSBmYWxzZSkge1xuICAgICAgICBwcm9wcy5jb250ZXh0LnNjYWxlKHByb3BzLnNjYWxlWCwgcHJvcHMuc2NhbGVZKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5wNS5zY2FsZShwcm9wcy5zY2FsZVggLyBwcm9wcy5waXhlbFJhdGlvLCBwcm9wcy5zY2FsZVkgLyBwcm9wcy5waXhlbFJhdGlvKTtcbiAgICB9XG4gIH1cblxuICBfcG9zdFJlbmRlciAoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKCF0aGlzLnByb3BzLmdsICYmIHByb3BzLmNvbnRleHQgJiYgIXByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5jb250ZXh0LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICAvLyBGbHVzaCBieSBkZWZhdWx0LCB0aGlzIG1heSBiZSByZXZpc2l0ZWQgYXQgYSBsYXRlciBwb2ludC5cbiAgICAvLyBXZSBkbyB0aGlzIHRvIGVuc3VyZSB0b0RhdGFVUkwgY2FuIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlci5cbiAgICAvLyBNb3N0IGxpa2VseSBicm93c2VycyBhbHJlYWR5IGhhbmRsZSB0aGlzLCBzbyB3ZSBtYXkgcmV2aXNpdCB0aGlzIGFuZFxuICAgIC8vIHJlbW92ZSBpdCBpZiBpdCBpbXByb3ZlcyBwZXJmb3JtYW5jZSB3aXRob3V0IGFueSB1c2FiaWxpdHkgaXNzdWVzLlxuICAgIGlmIChwcm9wcy5nbCAmJiB0aGlzLnNldHRpbmdzLmZsdXNoICE9PSBmYWxzZSAmJiAhcHJvcHMucDUpIHtcbiAgICAgIHByb3BzLmdsLmZsdXNoKCk7XG4gICAgfVxuICB9XG5cbiAgdGljayAoKSB7XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC50aWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl9wcmVSZW5kZXIoKTtcbiAgICAgIHRoaXMuc2tldGNoLnRpY2sodGhpcy5wcm9wcyk7XG4gICAgICB0aGlzLl9wb3N0UmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wNSkge1xuICAgICAgdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMucHJvcHMucDUucmVkcmF3KCk7XG4gICAgICByZXR1cm4gdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0RHJhd0NhbGwoKTtcbiAgICB9XG4gIH1cblxuICBzdWJtaXREcmF3Q2FsbCAoKSB7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgIHRoaXMuX3ByZVJlbmRlcigpO1xuXG4gICAgbGV0IGRyYXdSZXN1bHQ7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkcmF3UmVzdWx0ID0gdGhpcy5za2V0Y2gocHJvcHMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZHJhd1Jlc3VsdCA9IHRoaXMuc2tldGNoLnJlbmRlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuXG4gICAgcmV0dXJuIGRyYXdSZXN1bHQ7XG4gIH1cblxuICB1cGRhdGUgKG9wdCA9IHt9KSB7XG4gICAgLy8gQ3VycmVudGx5IHVwZGF0ZSgpIGlzIG9ubHkgZm9jdXNlZCBvbiByZXNpemluZyxcbiAgICAvLyBidXQgbGF0ZXIgd2Ugd2lsbCBzdXBwb3J0IG90aGVyIG9wdGlvbnMgbGlrZSBzd2l0Y2hpbmdcbiAgICAvLyBmcmFtZXMgYW5kIHN1Y2guXG4gICAgY29uc3Qgbm90WWV0U3VwcG9ydGVkID0gW1xuICAgICAgJ2FuaW1hdGUnXG4gICAgXTtcblxuICAgIE9iamVjdC5rZXlzKG9wdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKG5vdFlldFN1cHBvcnRlZC5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvcnJ5LCB0aGUgeyAke2tleX0gfSBvcHRpb24gaXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCB1cGRhdGUoKS5gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG9sZENhbnZhcyA9IHRoaXMuX3NldHRpbmdzLmNhbnZhcztcbiAgICBjb25zdCBvbGRDb250ZXh0ID0gdGhpcy5fc2V0dGluZ3MuY29udGV4dDtcblxuICAgIC8vIE1lcmdlIG5ldyBvcHRpb25zIGludG8gc2V0dGluZ3NcbiAgICBmb3IgKGxldCBrZXkgaW4gb3B0KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdFtrZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gaWdub3JlIHVuZGVmaW5lZFxuICAgICAgICB0aGlzLl9zZXR0aW5nc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWVyZ2UgaW4gdGltZSBwcm9wc1xuICAgIGNvbnN0IHRpbWVPcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fc2V0dGluZ3MsIG9wdCk7XG4gICAgaWYgKCd0aW1lJyBpbiBvcHQgJiYgJ2ZyYW1lJyBpbiBvcHQpIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IHsgdGltZSB9IG9yIHsgZnJhbWUgfSBidXQgbm90IGJvdGgnKTtcbiAgICBlbHNlIGlmICgndGltZScgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMuZnJhbWU7XG4gICAgZWxzZSBpZiAoJ2ZyYW1lJyBpbiBvcHQpIGRlbGV0ZSB0aW1lT3B0cy50aW1lO1xuICAgIGlmICgnZHVyYXRpb24nIGluIG9wdCAmJiAndG90YWxGcmFtZXMnIGluIG9wdCkgdGhyb3cgbmV3IEVycm9yKCdZb3Ugc2hvdWxkIHNwZWNpZnkgeyBkdXJhdGlvbiB9IG9yIHsgdG90YWxGcmFtZXMgfSBidXQgbm90IGJvdGgnKTtcbiAgICBlbHNlIGlmICgnZHVyYXRpb24nIGluIG9wdCkgZGVsZXRlIHRpbWVPcHRzLnRvdGFsRnJhbWVzO1xuICAgIGVsc2UgaWYgKCd0b3RhbEZyYW1lcycgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMuZHVyYXRpb247XG5cbiAgICAvLyBNZXJnZSBpbiB1c2VyIGRhdGEgd2l0aG91dCBjb3B5aW5nXG4gICAgaWYgKCdkYXRhJyBpbiBvcHQpIHRoaXMuX3Byb3BzLmRhdGEgPSBvcHQuZGF0YTtcblxuICAgIGNvbnN0IHRpbWVQcm9wcyA9IHRoaXMuZ2V0VGltZVByb3BzKHRpbWVPcHRzKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX3Byb3BzLCB0aW1lUHJvcHMpO1xuXG4gICAgLy8gSWYgZWl0aGVyIGNhbnZhcyBvciBjb250ZXh0IGlzIGNoYW5nZWQsIHdlIHNob3VsZCByZS11cGRhdGVcbiAgICBpZiAob2xkQ2FudmFzICE9PSB0aGlzLl9zZXR0aW5ncy5jYW52YXMgfHwgb2xkQ29udGV4dCAhPT0gdGhpcy5fc2V0dGluZ3MuY29udGV4dCkge1xuICAgICAgY29uc3QgeyBjYW52YXMsIGNvbnRleHQgfSA9IGNyZWF0ZUNhbnZhcyh0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICAgIHRoaXMucHJvcHMuY2FudmFzID0gY2FudmFzO1xuICAgICAgdGhpcy5wcm9wcy5jb250ZXh0ID0gY29udGV4dDtcblxuICAgICAgLy8gRGVsZXRlIG9yIGFkZCBhICdnbCcgcHJvcCBmb3IgY29udmVuaWVuY2VcbiAgICAgIHRoaXMuX3NldHVwR0xLZXkoKTtcblxuICAgICAgLy8gUmUtbW91bnQgdGhlIG5ldyBjYW52YXMgaWYgaXQgaGFzIG5vIHBhcmVudFxuICAgICAgdGhpcy5fYXBwZW5kQ2FudmFzSWZOZWVkZWQoKTtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgdG8gc3VwcG9ydCBQNS5qc1xuICAgIGlmIChvcHQucDUgJiYgdHlwZW9mIG9wdC5wNSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5wcm9wcy5wNSA9IG9wdC5wNTtcbiAgICAgIHRoaXMucHJvcHMucDUuZHJhdyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzUDVSZXNpemluZykgcmV0dXJuO1xuICAgICAgICB0aGlzLl9sYXN0UmVkcmF3UmVzdWx0ID0gdGhpcy5zdWJtaXREcmF3Q2FsbCgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgcGxheWluZyBzdGF0ZSBpZiBuZWNlc3NhcnlcbiAgICBpZiAoJ3BsYXlpbmcnIGluIG9wdCkge1xuICAgICAgaWYgKG9wdC5wbGF5aW5nKSB0aGlzLnBsYXkoKTtcbiAgICAgIGVsc2UgdGhpcy5wYXVzZSgpO1xuICAgIH1cblxuICAgIGNoZWNrU2V0dGluZ3ModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gRHJhdyBuZXcgZnJhbWVcbiAgICB0aGlzLnJlc2l6ZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgcmV0dXJuIHRoaXMucHJvcHM7XG4gIH1cblxuICByZXNpemUgKCkge1xuICAgIGNvbnN0IG9sZFNpemVzID0gdGhpcy5fZ2V0U2l6ZVByb3BzKCk7XG5cbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3M7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gUmVjb21wdXRlIG5ldyBwcm9wZXJ0aWVzIGJhc2VkIG9uIGN1cnJlbnQgc2V0dXBcbiAgICBjb25zdCBuZXdQcm9wcyA9IHJlc2l6ZUNhbnZhcyhwcm9wcywgc2V0dGluZ3MpO1xuXG4gICAgLy8gQXNzaWduIHRvIGN1cnJlbnQgcHJvcHNcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX3Byb3BzLCBuZXdQcm9wcyk7XG5cbiAgICAvLyBOb3cgd2UgYWN0dWFsbHkgdXBkYXRlIHRoZSBjYW52YXMgd2lkdGgvaGVpZ2h0IGFuZCBzdHlsZSBwcm9wc1xuICAgIGNvbnN0IHtcbiAgICAgIHBpeGVsUmF0aW8sXG4gICAgICBjYW52YXNXaWR0aCxcbiAgICAgIGNhbnZhc0hlaWdodCxcbiAgICAgIHN0eWxlV2lkdGgsXG4gICAgICBzdHlsZUhlaWdodFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gVXBkYXRlIGNhbnZhcyBzZXR0aW5nc1xuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMucHJvcHMuY2FudmFzO1xuICAgIGlmIChjYW52YXMgJiYgc2V0dGluZ3MucmVzaXplQ2FudmFzICE9PSBmYWxzZSkge1xuICAgICAgaWYgKHByb3BzLnA1KSB7XG4gICAgICAgIC8vIFA1LmpzIHNwZWNpZmljIGVkZ2UgY2FzZVxuICAgICAgICBpZiAoY2FudmFzLndpZHRoICE9PSBjYW52YXNXaWR0aCB8fCBjYW52YXMuaGVpZ2h0ICE9PSBjYW52YXNIZWlnaHQpIHtcbiAgICAgICAgICB0aGlzLl9pc1A1UmVzaXppbmcgPSB0cnVlO1xuICAgICAgICAgIC8vIFRoaXMgY2F1c2VzIGEgcmUtZHJhdyA6XFwgc28gd2UgaWdub3JlIGRyYXdzIGluIHRoZSBtZWFuIHRpbWUuLi4gc29ydGEgaGFja3lcbiAgICAgICAgICBwcm9wcy5wNS5waXhlbERlbnNpdHkocGl4ZWxSYXRpbyk7XG4gICAgICAgICAgcHJvcHMucDUucmVzaXplQ2FudmFzKGNhbnZhc1dpZHRoIC8gcGl4ZWxSYXRpbywgY2FudmFzSGVpZ2h0IC8gcGl4ZWxSYXRpbywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuX2lzUDVSZXNpemluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3JjZSBjYW52YXMgc2l6ZVxuICAgICAgICBpZiAoY2FudmFzLndpZHRoICE9PSBjYW52YXNXaWR0aCkgY2FudmFzLndpZHRoID0gY2FudmFzV2lkdGg7XG4gICAgICAgIGlmIChjYW52YXMuaGVpZ2h0ICE9PSBjYW52YXNIZWlnaHQpIGNhbnZhcy5oZWlnaHQgPSBjYW52YXNIZWlnaHQ7XG4gICAgICB9XG4gICAgICAvLyBVcGRhdGUgY2FudmFzIHN0eWxlXG4gICAgICBpZiAoaXNCcm93c2VyKCkgJiYgc2V0dGluZ3Muc3R5bGVDYW52YXMgIT09IGZhbHNlKSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke3N0eWxlV2lkdGh9cHhgO1xuICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7c3R5bGVIZWlnaHR9cHhgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5ld1NpemVzID0gdGhpcy5fZ2V0U2l6ZVByb3BzKCk7XG4gICAgbGV0IGNoYW5nZWQgPSAhZGVlcEVxdWFsKG9sZFNpemVzLCBuZXdTaXplcyk7XG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3NpemVDaGFuZ2VkKCk7XG4gICAgfVxuICAgIHJldHVybiBjaGFuZ2VkO1xuICB9XG5cbiAgX3NpemVDaGFuZ2VkICgpIHtcbiAgICAvLyBTZW5kIHJlc2l6ZSBldmVudCB0byBza2V0Y2hcbiAgICBpZiAodGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLnJlc2l6ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5za2V0Y2gucmVzaXplKHRoaXMucHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIGFuaW1hdGUgKCkge1xuICAgIGlmICghdGhpcy5wcm9wcy5wbGF5aW5nKSByZXR1cm47XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgICAgY29uc29sZS5lcnJvcignW2NhbnZhcy1za2V0Y2hdIFdBUk46IEFuaW1hdGlvbiBpbiBOb2RlLmpzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3JhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0ZUhhbmRsZXIpO1xuXG4gICAgbGV0IG5vdyA9IHJpZ2h0Tm93KCk7XG5cbiAgICBjb25zdCBmcHMgPSB0aGlzLnByb3BzLmZwcztcbiAgICBjb25zdCBmcmFtZUludGVydmFsTVMgPSAxMDAwIC8gZnBzO1xuICAgIGxldCBkZWx0YVRpbWVNUyA9IG5vdyAtIHRoaXMuX2xhc3RUaW1lO1xuXG4gICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLnByb3BzLmR1cmF0aW9uO1xuICAgIGNvbnN0IGhhc0R1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShkdXJhdGlvbik7XG5cbiAgICBsZXQgaXNOZXdGcmFtZSA9IHRydWU7XG4gICAgY29uc3QgcGxheWJhY2tSYXRlID0gdGhpcy5zZXR0aW5ncy5wbGF5YmFja1JhdGU7XG4gICAgaWYgKHBsYXliYWNrUmF0ZSA9PT0gJ2ZpeGVkJykge1xuICAgICAgZGVsdGFUaW1lTVMgPSBmcmFtZUludGVydmFsTVM7XG4gICAgfSBlbHNlIGlmIChwbGF5YmFja1JhdGUgPT09ICd0aHJvdHRsZScpIHtcbiAgICAgIGlmIChkZWx0YVRpbWVNUyA+IGZyYW1lSW50ZXJ2YWxNUykge1xuICAgICAgICBub3cgPSBub3cgLSAoZGVsdGFUaW1lTVMgJSBmcmFtZUludGVydmFsTVMpO1xuICAgICAgICB0aGlzLl9sYXN0VGltZSA9IG5vdztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzTmV3RnJhbWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGFzdFRpbWUgPSBub3c7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFUaW1lID0gZGVsdGFUaW1lTVMgLyAxMDAwO1xuICAgIGxldCBuZXdUaW1lID0gdGhpcy5wcm9wcy50aW1lICsgZGVsdGFUaW1lICogdGhpcy5wcm9wcy50aW1lU2NhbGU7XG5cbiAgICAvLyBIYW5kbGUgcmV2ZXJzZSB0aW1lIHNjYWxlXG4gICAgaWYgKG5ld1RpbWUgPCAwICYmIGhhc0R1cmF0aW9uKSB7XG4gICAgICBuZXdUaW1lID0gZHVyYXRpb24gKyBuZXdUaW1lO1xuICAgIH1cblxuICAgIC8vIFJlLXN0YXJ0IGFuaW1hdGlvblxuICAgIGxldCBpc0ZpbmlzaGVkID0gZmFsc2U7XG4gICAgbGV0IGlzTG9vcFN0YXJ0ID0gZmFsc2U7XG5cbiAgICBjb25zdCBsb29waW5nID0gdGhpcy5zZXR0aW5ncy5sb29wICE9PSBmYWxzZTtcblxuICAgIGlmIChoYXNEdXJhdGlvbiAmJiBuZXdUaW1lID49IGR1cmF0aW9uKSB7XG4gICAgICAvLyBSZS1zdGFydCBhbmltYXRpb25cbiAgICAgIGlmIChsb29waW5nKSB7XG4gICAgICAgIGlzTmV3RnJhbWUgPSB0cnVlO1xuICAgICAgICBuZXdUaW1lID0gbmV3VGltZSAlIGR1cmF0aW9uO1xuICAgICAgICBpc0xvb3BTdGFydCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc05ld0ZyYW1lID0gZmFsc2U7XG4gICAgICAgIG5ld1RpbWUgPSBkdXJhdGlvbjtcbiAgICAgICAgaXNGaW5pc2hlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NpZ25hbEVuZCgpO1xuICAgIH1cblxuICAgIGlmIChpc05ld0ZyYW1lKSB7XG4gICAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IGRlbHRhVGltZTtcbiAgICAgIHRoaXMucHJvcHMudGltZSA9IG5ld1RpbWU7XG4gICAgICB0aGlzLnByb3BzLnBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKG5ld1RpbWUsIGR1cmF0aW9uKTtcbiAgICAgIGNvbnN0IGxhc3RGcmFtZSA9IHRoaXMucHJvcHMuZnJhbWU7XG4gICAgICB0aGlzLnByb3BzLmZyYW1lID0gdGhpcy5fY29tcHV0ZUN1cnJlbnRGcmFtZSgpO1xuICAgICAgaWYgKGlzTG9vcFN0YXJ0KSB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgaWYgKGxhc3RGcmFtZSAhPT0gdGhpcy5wcm9wcy5mcmFtZSkgdGhpcy50aWNrKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgIH1cblxuICAgIGlmIChpc0ZpbmlzaGVkKSB7XG4gICAgICB0aGlzLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgZGlzcGF0Y2ggKGNiKSB7XG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHBhc3MgZnVuY3Rpb24gaW50byBkaXNwYXRjaCgpJyk7XG4gICAgY2IodGhpcy5wcm9wcyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdW50ICgpIHtcbiAgICB0aGlzLl9hcHBlbmRDYW52YXNJZk5lZWRlZCgpO1xuICB9XG5cbiAgdW5tb3VudCAoKSB7XG4gICAgaWYgKGlzQnJvd3NlcigpKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fcmVzaXplSGFuZGxlcik7XG4gICAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0cy5kZXRhY2goKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMuY2FudmFzLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMucHJvcHMuY2FudmFzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5wcm9wcy5jYW52YXMpO1xuICAgIH1cbiAgfVxuXG4gIF9hcHBlbmRDYW52YXNJZk5lZWRlZCAoKSB7XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnNldHRpbmdzLnBhcmVudCAhPT0gZmFsc2UgJiYgKHRoaXMucHJvcHMuY2FudmFzICYmICF0aGlzLnByb3BzLmNhbnZhcy5wYXJlbnRFbGVtZW50KSkge1xuICAgICAgY29uc3QgZGVmYXVsdFBhcmVudCA9IHRoaXMuc2V0dGluZ3MucGFyZW50IHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICBkZWZhdWx0UGFyZW50LmFwcGVuZENoaWxkKHRoaXMucHJvcHMuY2FudmFzKTtcbiAgICB9XG4gIH1cblxuICBfc2V0dXBHTEtleSAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuY29udGV4dCkge1xuICAgICAgaWYgKGlzV2ViR0xDb250ZXh0KHRoaXMucHJvcHMuY29udGV4dCkpIHtcbiAgICAgICAgdGhpcy5fcHJvcHMuZ2wgPSB0aGlzLnByb3BzLmNvbnRleHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5fcHJvcHMuZ2w7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0VGltZVByb3BzIChzZXR0aW5ncyA9IHt9KSB7XG4gICAgLy8gR2V0IHRpbWluZyBkYXRhXG4gICAgbGV0IGR1cmF0aW9uID0gc2V0dGluZ3MuZHVyYXRpb247XG4gICAgbGV0IHRvdGFsRnJhbWVzID0gc2V0dGluZ3MudG90YWxGcmFtZXM7XG4gICAgY29uc3QgdGltZVNjYWxlID0gZGVmaW5lZChzZXR0aW5ncy50aW1lU2NhbGUsIDEpO1xuICAgIGNvbnN0IGZwcyA9IGRlZmluZWQoc2V0dGluZ3MuZnBzLCAyNCk7XG4gICAgY29uc3QgaGFzRHVyYXRpb24gPSB0eXBlb2YgZHVyYXRpb24gPT09ICdudW1iZXInICYmIGlzRmluaXRlKGR1cmF0aW9uKTtcbiAgICBjb25zdCBoYXNUb3RhbEZyYW1lcyA9IHR5cGVvZiB0b3RhbEZyYW1lcyA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodG90YWxGcmFtZXMpO1xuXG4gICAgY29uc3QgdG90YWxGcmFtZXNGcm9tRHVyYXRpb24gPSBoYXNEdXJhdGlvbiA/IE1hdGguZmxvb3IoZnBzICogZHVyYXRpb24pIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGR1cmF0aW9uRnJvbVRvdGFsRnJhbWVzID0gaGFzVG90YWxGcmFtZXMgPyAodG90YWxGcmFtZXMgLyBmcHMpIDogdW5kZWZpbmVkO1xuICAgIGlmIChoYXNEdXJhdGlvbiAmJiBoYXNUb3RhbEZyYW1lcyAmJiB0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiAhPT0gdG90YWxGcmFtZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IGVpdGhlciBkdXJhdGlvbiBvciB0b3RhbEZyYW1lcywgYnV0IG5vdCBib3RoLiBPciwgdGhleSBtdXN0IG1hdGNoIGV4YWN0bHkuJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzZXR0aW5ncy5kaW1lbnNpb25zID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygc2V0dGluZ3MudW5pdHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFlvdSd2ZSBzcGVjaWZpZWQgYSB7IHVuaXRzIH0gc2V0dGluZyBidXQgbm8geyBkaW1lbnNpb24gfSwgc28gdGhlIHVuaXRzIHdpbGwgYmUgaWdub3JlZC5gKTtcbiAgICB9XG5cbiAgICB0b3RhbEZyYW1lcyA9IGRlZmluZWQodG90YWxGcmFtZXMsIHRvdGFsRnJhbWVzRnJvbUR1cmF0aW9uLCBJbmZpbml0eSk7XG4gICAgZHVyYXRpb24gPSBkZWZpbmVkKGR1cmF0aW9uLCBkdXJhdGlvbkZyb21Ub3RhbEZyYW1lcywgSW5maW5pdHkpO1xuXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gc2V0dGluZ3MudGltZTtcbiAgICBjb25zdCBzdGFydEZyYW1lID0gc2V0dGluZ3MuZnJhbWU7XG4gICAgY29uc3QgaGFzU3RhcnRUaW1lID0gdHlwZW9mIHN0YXJ0VGltZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc3RhcnRUaW1lKTtcbiAgICBjb25zdCBoYXNTdGFydEZyYW1lID0gdHlwZW9mIHN0YXJ0RnJhbWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHN0YXJ0RnJhbWUpO1xuXG4gICAgLy8gc3RhcnQgYXQgemVybyB1bmxlc3MgdXNlciBzcGVjaWZpZXMgZnJhbWUgb3IgdGltZSAoYnV0IG5vdCBib3RoIG1pc21hdGNoZWQpXG4gICAgbGV0IHRpbWUgPSAwO1xuICAgIGxldCBmcmFtZSA9IDA7XG4gICAgbGV0IHBsYXloZWFkID0gMDtcbiAgICBpZiAoaGFzU3RhcnRUaW1lICYmIGhhc1N0YXJ0RnJhbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IGVpdGhlciBzdGFydCBmcmFtZSBvciB0aW1lLCBidXQgbm90IGJvdGguJyk7XG4gICAgfSBlbHNlIGlmIChoYXNTdGFydFRpbWUpIHtcbiAgICAgIC8vIFVzZXIgc3BlY2lmaWVzIHRpbWUsIHdlIGluZmVyIGZyYW1lcyBmcm9tIEZQU1xuICAgICAgdGltZSA9IHN0YXJ0VGltZTtcbiAgICAgIHBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKHRpbWUsIGR1cmF0aW9uKTtcbiAgICAgIGZyYW1lID0gdGhpcy5fY29tcHV0ZUZyYW1lKFxuICAgICAgICBwbGF5aGVhZCwgdGltZSxcbiAgICAgICAgdG90YWxGcmFtZXMsIGZwc1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGhhc1N0YXJ0RnJhbWUpIHtcbiAgICAgIC8vIFVzZXIgc3BlY2lmaWVzIGZyYW1lIG51bWJlciwgd2UgaW5mZXIgdGltZSBmcm9tIEZQU1xuICAgICAgZnJhbWUgPSBzdGFydEZyYW1lO1xuICAgICAgdGltZSA9IGZyYW1lIC8gZnBzO1xuICAgICAgcGxheWhlYWQgPSB0aGlzLl9jb21wdXRlUGxheWhlYWQodGltZSwgZHVyYXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwbGF5aGVhZCxcbiAgICAgIHRpbWUsXG4gICAgICBmcmFtZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgdG90YWxGcmFtZXMsXG4gICAgICBmcHMsXG4gICAgICB0aW1lU2NhbGVcbiAgICB9O1xuICB9XG5cbiAgc2V0dXAgKHNldHRpbmdzID0ge30pIHtcbiAgICBpZiAodGhpcy5za2V0Y2gpIHRocm93IG5ldyBFcnJvcignTXVsdGlwbGUgc2V0dXAoKSBjYWxscyBub3QgeWV0IHN1cHBvcnRlZC4nKTtcblxuICAgIHRoaXMuX3NldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MsIHRoaXMuX3NldHRpbmdzKTtcblxuICAgIGNoZWNrU2V0dGluZ3ModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gR2V0IGluaXRpYWwgY2FudmFzICYgY29udGV4dFxuICAgIGNvbnN0IHsgY29udGV4dCwgY2FudmFzIH0gPSBjcmVhdGVDYW52YXModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgY29uc3QgdGltZVByb3BzID0gdGhpcy5nZXRUaW1lUHJvcHModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gSW5pdGlhbCByZW5kZXIgc3RhdGUgZmVhdHVyZXNcbiAgICB0aGlzLl9wcm9wcyA9IHtcbiAgICAgIC4uLnRpbWVQcm9wcyxcbiAgICAgIGNhbnZhcyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBkZWx0YVRpbWU6IDAsXG4gICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgIGV4cG9ydGluZzogZmFsc2UsXG4gICAgICBwbGF5aW5nOiBmYWxzZSxcbiAgICAgIHJlY29yZGluZzogZmFsc2UsXG4gICAgICBzZXR0aW5nczogdGhpcy5zZXR0aW5ncyxcbiAgICAgIGRhdGE6IHRoaXMuc2V0dGluZ3MuZGF0YSxcblxuICAgICAgLy8gRXhwb3J0IHNvbWUgc3BlY2lmaWMgYWN0aW9ucyB0byB0aGUgc2tldGNoXG4gICAgICByZW5kZXI6ICgpID0+IHRoaXMucmVuZGVyKCksXG4gICAgICB0b2dnbGVQbGF5OiAoKSA9PiB0aGlzLnRvZ2dsZVBsYXkoKSxcbiAgICAgIGRpc3BhdGNoOiAoY2IpID0+IHRoaXMuZGlzcGF0Y2goY2IpLFxuICAgICAgdGljazogKCkgPT4gdGhpcy50aWNrKCksXG4gICAgICByZXNpemU6ICgpID0+IHRoaXMucmVzaXplKCksXG4gICAgICB1cGRhdGU6IChvcHQpID0+IHRoaXMudXBkYXRlKG9wdCksXG4gICAgICBleHBvcnRGcmFtZTogb3B0ID0+IHRoaXMuZXhwb3J0RnJhbWUob3B0KSxcbiAgICAgIHJlY29yZDogKCkgPT4gdGhpcy5yZWNvcmQoKSxcbiAgICAgIHBsYXk6ICgpID0+IHRoaXMucGxheSgpLFxuICAgICAgcGF1c2U6ICgpID0+IHRoaXMucGF1c2UoKSxcbiAgICAgIHN0b3A6ICgpID0+IHRoaXMuc3RvcCgpXG4gICAgfTtcblxuICAgIC8vIEZvciBXZWJHTCBza2V0Y2hlcywgYSBnbCB2YXJpYWJsZSByZWFkcyBhIGJpdCBiZXR0ZXJcbiAgICB0aGlzLl9zZXR1cEdMS2V5KCk7XG5cbiAgICAvLyBUcmlnZ2VyIGluaXRpYWwgcmVzaXplIG5vdyBzbyB0aGF0IGNhbnZhcyBpcyBhbHJlYWR5IHNpemVkXG4gICAgLy8gYnkgdGhlIHRpbWUgd2UgbG9hZCB0aGUgc2tldGNoXG4gICAgdGhpcy5yZXNpemUoKTtcbiAgfVxuXG4gIGxvYWRBbmRSdW4gKGNhbnZhc1NrZXRjaCwgbmV3U2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkKGNhbnZhc1NrZXRjaCwgbmV3U2V0dGluZ3MpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5ydW4oKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0pO1xuICB9XG5cbiAgdW5sb2FkICgpIHtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2gudW5sb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLnVubG9hZChwcm9wcykpO1xuICAgIH1cbiAgICB0aGlzLl9za2V0Y2ggPSBudWxsO1xuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgdGhpcy51bmxvYWQoKTtcbiAgICB0aGlzLnVubW91bnQoKTtcbiAgfVxuXG4gIGxvYWQgKGNyZWF0ZVNrZXRjaCwgbmV3U2V0dGluZ3MpIHtcbiAgICAvLyBVc2VyIGRpZG4ndCBzcGVjaWZ5IGEgZnVuY3Rpb25cbiAgICBpZiAodHlwZW9mIGNyZWF0ZVNrZXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnVuY3Rpb24gbXVzdCB0YWtlIGluIGEgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IHBhcmFtZXRlci4gRXhhbXBsZTpcXG4gIGNhbnZhc1NrZXRjaGVyKCgpID0+IHsgLi4uIH0sIHNldHRpbmdzKScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNrZXRjaCkge1xuICAgICAgdGhpcy51bmxvYWQoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld1NldHRpbmdzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy51cGRhdGUobmV3U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSB0cmlja3kgY2FzZTsgd2Ugc2V0IHVwIHRoZSBhdXRvLXNjYWxpbmcgaGVyZVxuICAgIC8vIGluIGNhc2UgdGhlIHVzZXIgZGVjaWRlcyB0byByZW5kZXIgYW55dGhpbmcgdG8gdGhlIGNvbnRleHQgKmJlZm9yZSogdGhlXG4gICAgLy8gcmVuZGVyKCkgZnVuY3Rpb24uLi4gSG93ZXZlciwgdXNlcnMgc2hvdWxkIGluc3RlYWQgdXNlIGJlZ2luKCkgZnVuY3Rpb24gZm9yIHRoYXQuXG4gICAgdGhpcy5fcHJlUmVuZGVyKCk7XG5cbiAgICBsZXQgcHJlbG9hZCA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgLy8gQmVjYXVzZSBvZiBQNS5qcydzIHVudXN1YWwgc3RydWN0dXJlLCB3ZSBoYXZlIHRvIGRvIGEgYml0IG9mXG4gICAgLy8gbGlicmFyeS1zcGVjaWZpYyBjaGFuZ2VzIHRvIHN1cHBvcnQgaXQgcHJvcGVybHkuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MucDUpIHtcbiAgICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbY2FudmFzLXNrZXRjaF0gRVJST1I6IFVzaW5nIHA1LmpzIGluIE5vZGUuanMgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgfVxuICAgICAgcHJlbG9hZCA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICBsZXQgUDVDb25zdHJ1Y3RvciA9IHRoaXMuc2V0dGluZ3MucDU7XG4gICAgICAgIGxldCBwcmVsb2FkO1xuICAgICAgICBpZiAoUDVDb25zdHJ1Y3Rvci5wNSkge1xuICAgICAgICAgIHByZWxvYWQgPSBQNUNvbnN0cnVjdG9yLnByZWxvYWQ7XG4gICAgICAgICAgUDVDb25zdHJ1Y3RvciA9IFA1Q29uc3RydWN0b3IucDU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgc2tldGNoIHNldHVwOyBkaXNhYmxlIGxvb3AsIHNldCBzaXppbmcsIGV0Yy5cbiAgICAgICAgY29uc3QgcDVTa2V0Y2ggPSBwNSA9PiB7XG4gICAgICAgICAgLy8gSG9vayBpbiBwcmVsb2FkIGlmIG5lY2Vzc2FyeVxuICAgICAgICAgIGlmIChwcmVsb2FkKSBwNS5wcmVsb2FkID0gKCkgPT4gcHJlbG9hZChwNSk7XG4gICAgICAgICAgcDUuc2V0dXAgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgICAgICAgICBjb25zdCBpc0dMID0gdGhpcy5zZXR0aW5ncy5jb250ZXh0ID09PSAnd2ViZ2wnO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBpc0dMID8gcDUuV0VCR0wgOiBwNS5QMkQ7XG4gICAgICAgICAgICBwNS5ub0xvb3AoKTtcbiAgICAgICAgICAgIHA1LnBpeGVsRGVuc2l0eShwcm9wcy5waXhlbFJhdGlvKTtcbiAgICAgICAgICAgIHA1LmNyZWF0ZUNhbnZhcyhwcm9wcy52aWV3cG9ydFdpZHRoLCBwcm9wcy52aWV3cG9ydEhlaWdodCwgcmVuZGVyZXIpO1xuICAgICAgICAgICAgaWYgKGlzR0wgJiYgdGhpcy5zZXR0aW5ncy5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgIHA1LnNldEF0dHJpYnV0ZXModGhpcy5zZXR0aW5ncy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51cGRhdGUoeyBwNSwgY2FudmFzOiBwNS5jYW52YXMsIGNvbnRleHQ6IHA1Ll9yZW5kZXJlci5kcmF3aW5nQ29udGV4dCB9KTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFN1cHBvcnQgZ2xvYmFsIGFuZCBpbnN0YW5jZSBQNS5qcyBtb2Rlc1xuICAgICAgICBpZiAodHlwZW9mIFA1Q29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBuZXcgUDVDb25zdHJ1Y3RvcihwNVNrZXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuY3JlYXRlQ2FudmFzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ7IHA1IH0gc2V0dGluZyBpcyBwYXNzZWQgYnV0IGNhbid0IGZpbmQgcDUuanMgaW4gZ2xvYmFsICh3aW5kb3cpIHNjb3BlLiBNYXliZSB5b3UgZGlkIG5vdCBjcmVhdGUgaXQgZ2xvYmFsbHk/XFxubmV3IHA1KCk7IC8vIDwtLSBhdHRhY2hlcyB0byBnbG9iYWwgc2NvcGVcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHA1U2tldGNoKHdpbmRvdyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcmVsb2FkLnRoZW4oKCkgPT4ge1xuICAgICAgLy8gTG9hZCB0aGUgdXNlcidzIHNrZXRjaFxuICAgICAgbGV0IGxvYWRlciA9IGNyZWF0ZVNrZXRjaCh0aGlzLnByb3BzKTtcbiAgICAgIGlmICghaXNQcm9taXNlKGxvYWRlcikpIHtcbiAgICAgICAgbG9hZGVyID0gUHJvbWlzZS5yZXNvbHZlKGxvYWRlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbG9hZGVyO1xuICAgIH0pLnRoZW4oc2tldGNoID0+IHtcbiAgICAgIGlmICghc2tldGNoKSBza2V0Y2ggPSB7fTtcbiAgICAgIHRoaXMuX3NrZXRjaCA9IHNrZXRjaDtcblxuICAgICAgLy8gT25jZSB0aGUgc2tldGNoIGlzIGxvYWRlZCB3ZSBjYW4gYWRkIHRoZSBldmVudHNcbiAgICAgIGlmIChpc0Jyb3dzZXIoKSkge1xuICAgICAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0cy5hdHRhY2goKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3Jlc2l6ZUhhbmRsZXIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wb3N0UmVuZGVyKCk7XG5cbiAgICAgIC8vIFRoZSBpbml0aWFsIHJlc2l6ZSgpIGluIHRoZSBjb25zdHJ1Y3RvciB3aWxsIG5vdCBoYXZlXG4gICAgICAvLyB0cmlnZ2VyZWQgYSByZXNpemUoKSBldmVudCBvbiB0aGUgc2tldGNoLCBzaW5jZSBpdCB3YXMgYmVmb3JlXG4gICAgICAvLyB0aGUgc2tldGNoIHdhcyBsb2FkZWQuIFNvIHdlIHNlbmQgdGhlIHNpZ25hbCBoZXJlLCBhbGxvd2luZ1xuICAgICAgLy8gdXNlcnMgdG8gcmVhY3QgdG8gdGhlIGluaXRpYWwgc2l6ZSBiZWZvcmUgZmlyc3QgcmVuZGVyLlxuICAgICAgdGhpcy5fc2l6ZUNoYW5nZWQoKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBzdGFydCBza2V0Y2gsIHRoZSBhc3luYyBsb2FkaW5nIGZ1bmN0aW9uIHJlamVjdGVkIHdpdGggYW4gZXJyb3I6XFxuICAgIEVycm9yOiAnICsgZXJyLm1lc3NhZ2UpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNrZXRjaE1hbmFnZXI7XG4iLCJpbXBvcnQgeyBnZXRDbGllbnRBUEkgfSBmcm9tICcuLi91dGlsJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKG9wdCA9IHt9KSB7XG4gIGNvbnN0IGhhbmRsZXIgPSBldiA9PiB7XG4gICAgaWYgKCFvcHQuZW5hYmxlZCgpKSByZXR1cm47XG5cbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgICBpZiAoZXYua2V5Q29kZSA9PT0gODMgJiYgIWV2LmFsdEtleSAmJiAoZXYubWV0YUtleSB8fCBldi5jdHJsS2V5KSkge1xuICAgICAgLy8gQ21kICsgU1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG9wdC5zYXZlKGV2KTtcbiAgICB9IGVsc2UgaWYgKGV2LmtleUNvZGUgPT09IDMyKSB7XG4gICAgICAvLyBTcGFjZVxuICAgICAgLy8gVE9ETzogd2hhdCB0byBkbyB3aXRoIHRoaXM/IGtlZXAgaXQsIG9yIHJlbW92ZSBpdD9cbiAgICAgIG9wdC50b2dnbGVQbGF5KGV2KTtcbiAgICB9IGVsc2UgaWYgKGNsaWVudCAmJiAhZXYuYWx0S2V5ICYmIGV2LmtleUNvZGUgPT09IDc1ICYmIChldi5tZXRhS2V5IHx8IGV2LmN0cmxLZXkpKSB7XG4gICAgICAvLyBDbWQgKyBLLCBvbmx5IHdoZW4gY2FudmFzLXNrZXRjaC1jbGkgaXMgdXNlZFxuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG9wdC5jb21taXQoZXYpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhdHRhY2ggPSAoKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVyKTtcbiAgfTtcblxuICBjb25zdCBkZXRhY2ggPSAoKSA9PiB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVyKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGF0dGFjaCxcbiAgICBkZXRhY2hcbiAgfTtcbn1cbiIsImltcG9ydCBTa2V0Y2hNYW5hZ2VyIGZyb20gJy4vY29yZS9Ta2V0Y2hNYW5hZ2VyJztcbmltcG9ydCBQYXBlclNpemVzIGZyb20gJy4vcGFwZXItc2l6ZXMnO1xuaW1wb3J0IHsgZ2V0Q2xpZW50QVBJIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCBkZWZpbmVkIGZyb20gJ2RlZmluZWQnO1xuXG5jb25zdCBDQUNIRSA9ICdob3QtaWQtY2FjaGUnO1xuY29uc3QgcnVudGltZUNvbGxpc2lvbnMgPSBbXTtcblxuZnVuY3Rpb24gaXNIb3RSZWxvYWQgKCkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgcmV0dXJuIGNsaWVudCAmJiBjbGllbnQuaG90O1xufVxuXG5mdW5jdGlvbiBjYWNoZUdldCAoaWQpIHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gIGlmICghY2xpZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuICBjbGllbnRbQ0FDSEVdID0gY2xpZW50W0NBQ0hFXSB8fCB7fTtcbiAgcmV0dXJuIGNsaWVudFtDQUNIRV1baWRdO1xufVxuXG5mdW5jdGlvbiBjYWNoZVB1dCAoaWQsIGRhdGEpIHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gIGlmICghY2xpZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuICBjbGllbnRbQ0FDSEVdID0gY2xpZW50W0NBQ0hFXSB8fCB7fTtcbiAgY2xpZW50W0NBQ0hFXVtpZF0gPSBkYXRhO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lUHJvcCAob2xkTWFuYWdlciwgbmV3U2V0dGluZ3MpIHtcbiAgLy8gU3RhdGljIHNrZXRjaGVzIGlnbm9yZSB0aGUgdGltZSBwZXJzaXN0ZW5jeVxuICByZXR1cm4gbmV3U2V0dGluZ3MuYW5pbWF0ZSA/IHsgdGltZTogb2xkTWFuYWdlci5wcm9wcy50aW1lIH0gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNhbnZhc1NrZXRjaCAoc2tldGNoLCBzZXR0aW5ncyA9IHt9KSB7XG4gIGlmIChzZXR0aW5ncy5wNSkge1xuICAgIGlmIChzZXR0aW5ncy5jYW52YXMgfHwgKHNldHRpbmdzLmNvbnRleHQgJiYgdHlwZW9mIHNldHRpbmdzLmNvbnRleHQgIT09ICdzdHJpbmcnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbiB7IHA1IH0gbW9kZSwgeW91IGNhbid0IHBhc3MgeW91ciBvd24gY2FudmFzIG9yIGNvbnRleHQsIHVubGVzcyB0aGUgY29udGV4dCBpcyBhIFwid2ViZ2xcIiBvciBcIjJkXCIgc3RyaW5nYCk7XG4gICAgfVxuXG4gICAgLy8gRG8gbm90IGNyZWF0ZSBhIGNhbnZhcyBvbiBzdGFydHVwLCBzaW5jZSBQNS5qcyBkb2VzIHRoYXQgZm9yIHVzXG4gICAgY29uc3QgY29udGV4dCA9IHR5cGVvZiBzZXR0aW5ncy5jb250ZXh0ID09PSAnc3RyaW5nJyA/IHNldHRpbmdzLmNvbnRleHQgOiBmYWxzZTtcbiAgICBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHNldHRpbmdzLCB7IGNhbnZhczogZmFsc2UsIGNvbnRleHQgfSk7XG4gIH1cblxuICBjb25zdCBpc0hvdCA9IGlzSG90UmVsb2FkKCk7XG4gIGxldCBob3RJRDtcbiAgaWYgKGlzSG90KSB7XG4gICAgLy8gVXNlIGEgbWFnaWMgbmFtZSBieSBkZWZhdWx0LCBmb3JjZSB1c2VyIHRvIGRlZmluZSBlYWNoIHNrZXRjaCBpZiB0aGV5XG4gICAgLy8gcmVxdWlyZSBtb3JlIHRoYW4gb25lIGluIGFuIGFwcGxpY2F0aW9uLiBPcGVuIHRvIG90aGVyIGlkZWFzIG9uIGhvdyB0byB0YWNrbGVcbiAgICAvLyB0aGlzIGFzIHdlbGwuLi5cbiAgICBob3RJRCA9IGRlZmluZWQoc2V0dGluZ3MuaWQsICckX19ERUZBVUxUX0NBTlZBU19TS0VUQ0hfSURfXyQnKTtcbiAgfVxuICBsZXQgaXNJbmplY3RpbmcgPSBpc0hvdCAmJiB0eXBlb2YgaG90SUQgPT09ICdzdHJpbmcnO1xuXG4gIGlmIChpc0luamVjdGluZyAmJiBydW50aW1lQ29sbGlzaW9ucy5pbmNsdWRlcyhob3RJRCkpIHtcbiAgICBjb25zb2xlLndhcm4oYFdhcm5pbmc6IFlvdSBoYXZlIG11bHRpcGxlIGNhbGxzIHRvIGNhbnZhc1NrZXRjaCgpIGluIC0taG90IG1vZGUuIFlvdSBtdXN0IHBhc3MgdW5pcXVlIHsgaWQgfSBzdHJpbmdzIGluIHNldHRpbmdzIHRvIGVuYWJsZSBob3QgcmVsb2FkIGFjcm9zcyBtdWx0aXBsZSBza2V0Y2hlcy4gYCwgaG90SUQpO1xuICAgIGlzSW5qZWN0aW5nID0gZmFsc2U7XG4gIH1cblxuICBsZXQgcHJlbG9hZCA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIGlmIChpc0luamVjdGluZykge1xuICAgIC8vIE1hcmsgdGhpcyBhcyBhbHJlYWR5IHNwb3R0ZWQgaW4gdGhpcyBydW50aW1lIGluc3RhbmNlXG4gICAgcnVudGltZUNvbGxpc2lvbnMucHVzaChob3RJRCk7XG5cbiAgICBjb25zdCBwcmV2aW91c0RhdGEgPSBjYWNoZUdldChob3RJRCk7XG4gICAgaWYgKHByZXZpb3VzRGF0YSkge1xuICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgLy8gR3JhYiBuZXcgcHJvcHMgZnJvbSBvbGQgc2tldGNoIGluc3RhbmNlXG4gICAgICAgIGNvbnN0IG5ld1Byb3BzID0gZ2V0VGltZVByb3AocHJldmlvdXNEYXRhLm1hbmFnZXIsIHNldHRpbmdzKTtcbiAgICAgICAgLy8gRGVzdHJveSB0aGUgb2xkIGluc3RhbmNlXG4gICAgICAgIHByZXZpb3VzRGF0YS5tYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICAgICAgLy8gUGFzcyBhbG9uZyBuZXcgcHJvcHNcbiAgICAgICAgcmV0dXJuIG5ld1Byb3BzO1xuICAgICAgfTtcblxuICAgICAgLy8gTW92ZSBhbG9uZyB0aGUgbmV4dCBkYXRhLi4uXG4gICAgICBwcmVsb2FkID0gcHJldmlvdXNEYXRhLmxvYWQudGhlbihuZXh0KS5jYXRjaChuZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJlbG9hZC50aGVuKG5ld1Byb3BzID0+IHtcbiAgICBjb25zdCBtYW5hZ2VyID0gbmV3IFNrZXRjaE1hbmFnZXIoKTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmIChza2V0Y2gpIHtcbiAgICAgIC8vIE1lcmdlIHdpdGggaW5jb21pbmcgZGF0YVxuICAgICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBzZXR0aW5ncywgbmV3UHJvcHMpO1xuXG4gICAgICAvLyBBcHBseSBzZXR0aW5ncyBhbmQgY3JlYXRlIGEgY2FudmFzXG4gICAgICBtYW5hZ2VyLnNldHVwKHNldHRpbmdzKTtcblxuICAgICAgLy8gTW91bnQgdG8gRE9NXG4gICAgICBtYW5hZ2VyLm1vdW50KCk7XG5cbiAgICAgIC8vIGxvYWQgdGhlIHNrZXRjaCBmaXJzdFxuICAgICAgcmVzdWx0ID0gbWFuYWdlci5sb2FkQW5kUnVuKHNrZXRjaCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IFByb21pc2UucmVzb2x2ZShtYW5hZ2VyKTtcbiAgICB9XG4gICAgaWYgKGlzSW5qZWN0aW5nKSB7XG4gICAgICBjYWNoZVB1dChob3RJRCwgeyBsb2FkOiByZXN1bHQsIG1hbmFnZXIgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xufVxuXG4vLyBUT0RPOiBGaWd1cmUgb3V0IGEgbmljZSB3YXkgdG8gZXhwb3J0IHRoaW5ncy5cbmNhbnZhc1NrZXRjaC5jYW52YXNTa2V0Y2ggPSBjYW52YXNTa2V0Y2g7XG5jYW52YXNTa2V0Y2guUGFwZXJTaXplcyA9IFBhcGVyU2l6ZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNhbnZhc1NrZXRjaDtcbiIsInZhciBkZWZpbmVkID0gcmVxdWlyZSgnZGVmaW5lZCcpO1xudmFyIHVuaXRzID0gWyAnbW0nLCAnY20nLCAnbScsICdwYycsICdwdCcsICdpbicsICdmdCcsICdweCcgXTtcblxudmFyIGNvbnZlcnNpb25zID0ge1xuICAvLyBtZXRyaWNcbiAgbToge1xuICAgIHN5c3RlbTogJ21ldHJpYycsXG4gICAgZmFjdG9yOiAxXG4gIH0sXG4gIGNtOiB7XG4gICAgc3lzdGVtOiAnbWV0cmljJyxcbiAgICBmYWN0b3I6IDEgLyAxMDBcbiAgfSxcbiAgbW06IHtcbiAgICBzeXN0ZW06ICdtZXRyaWMnLFxuICAgIGZhY3RvcjogMSAvIDEwMDBcbiAgfSxcbiAgLy8gaW1wZXJpYWxcbiAgcHQ6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxIC8gNzJcbiAgfSxcbiAgcGM6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxIC8gNlxuICB9LFxuICBpbjoge1xuICAgIHN5c3RlbTogJ2ltcGVyaWFsJyxcbiAgICBmYWN0b3I6IDFcbiAgfSxcbiAgZnQ6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxMlxuICB9XG59O1xuXG5jb25zdCBhbmNob3JzID0ge1xuICBtZXRyaWM6IHtcbiAgICB1bml0OiAnbScsXG4gICAgcmF0aW86IDEgLyAwLjAyNTRcbiAgfSxcbiAgaW1wZXJpYWw6IHtcbiAgICB1bml0OiAnaW4nLFxuICAgIHJhdGlvOiAwLjAyNTRcbiAgfVxufTtcblxuZnVuY3Rpb24gcm91bmQgKHZhbHVlLCBkZWNpbWFscykge1xuICByZXR1cm4gTnVtYmVyKE1hdGgucm91bmQodmFsdWUgKyAnZScgKyBkZWNpbWFscykgKyAnZS0nICsgZGVjaW1hbHMpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RGlzdGFuY2UgKHZhbHVlLCBmcm9tVW5pdCwgdG9Vbml0LCBvcHRzKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcignVmFsdWUgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXInKTtcbiAgaWYgKCFmcm9tVW5pdCB8fCAhdG9Vbml0KSB0aHJvdyBuZXcgRXJyb3IoJ011c3Qgc3BlY2lmeSBmcm9tIGFuZCB0byB1bml0cycpO1xuXG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICB2YXIgcGl4ZWxzUGVySW5jaCA9IGRlZmluZWQob3B0cy5waXhlbHNQZXJJbmNoLCA5Nik7XG4gIHZhciBwcmVjaXNpb24gPSBvcHRzLnByZWNpc2lvbjtcbiAgdmFyIHJvdW5kUGl4ZWwgPSBvcHRzLnJvdW5kUGl4ZWwgIT09IGZhbHNlO1xuXG4gIGZyb21Vbml0ID0gZnJvbVVuaXQudG9Mb3dlckNhc2UoKTtcbiAgdG9Vbml0ID0gdG9Vbml0LnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKHVuaXRzLmluZGV4T2YoZnJvbVVuaXQpID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZyb20gdW5pdCBcIicgKyBmcm9tVW5pdCArICdcIiwgbXVzdCBiZSBvbmUgb2Y6ICcgKyB1bml0cy5qb2luKCcsICcpKTtcbiAgaWYgKHVuaXRzLmluZGV4T2YodG9Vbml0KSA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tIHVuaXQgXCInICsgdG9Vbml0ICsgJ1wiLCBtdXN0IGJlIG9uZSBvZjogJyArIHVuaXRzLmpvaW4oJywgJykpO1xuXG4gIGlmIChmcm9tVW5pdCA9PT0gdG9Vbml0KSB7XG4gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb252ZXJ0IGZyb20gQSB0byBCIHNpbmNlIHRoZXkgYXJlIHRoZSBzYW1lIGFscmVhZHlcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICB2YXIgdG9GYWN0b3IgPSAxO1xuICB2YXIgZnJvbUZhY3RvciA9IDE7XG4gIHZhciBpc1RvUGl4ZWwgPSBmYWxzZTtcblxuICBpZiAoZnJvbVVuaXQgPT09ICdweCcpIHtcbiAgICBmcm9tRmFjdG9yID0gMSAvIHBpeGVsc1BlckluY2g7XG4gICAgZnJvbVVuaXQgPSAnaW4nO1xuICB9XG4gIGlmICh0b1VuaXQgPT09ICdweCcpIHtcbiAgICBpc1RvUGl4ZWwgPSB0cnVlO1xuICAgIHRvRmFjdG9yID0gcGl4ZWxzUGVySW5jaDtcbiAgICB0b1VuaXQgPSAnaW4nO1xuICB9XG5cbiAgdmFyIGZyb21Vbml0RGF0YSA9IGNvbnZlcnNpb25zW2Zyb21Vbml0XTtcbiAgdmFyIHRvVW5pdERhdGEgPSBjb252ZXJzaW9uc1t0b1VuaXRdO1xuXG4gIC8vIHNvdXJjZSB0byBhbmNob3IgaW5zaWRlIHNvdXJjZSdzIHN5c3RlbVxuICB2YXIgYW5jaG9yID0gdmFsdWUgKiBmcm9tVW5pdERhdGEuZmFjdG9yICogZnJvbUZhY3RvcjtcblxuICAvLyBpZiBzeXN0ZW1zIGRpZmZlciwgY29udmVydCBvbmUgdG8gYW5vdGhlclxuICBpZiAoZnJvbVVuaXREYXRhLnN5c3RlbSAhPT0gdG9Vbml0RGF0YS5zeXN0ZW0pIHtcbiAgICAvLyByZWd1bGFyICdtJyB0byAnaW4nIGFuZCBzbyBmb3J0aFxuICAgIGFuY2hvciAqPSBhbmNob3JzW2Zyb21Vbml0RGF0YS5zeXN0ZW1dLnJhdGlvO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IGFuY2hvciAvIHRvVW5pdERhdGEuZmFjdG9yICogdG9GYWN0b3I7XG4gIGlmIChpc1RvUGl4ZWwgJiYgcm91bmRQaXhlbCkge1xuICAgIHJlc3VsdCA9IE1hdGgucm91bmQocmVzdWx0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJlY2lzaW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShwcmVjaXNpb24pKSB7XG4gICAgcmVzdWx0ID0gcm91bmQocmVzdWx0LCBwcmVjaXNpb24pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydERpc3RhbmNlO1xubW9kdWxlLmV4cG9ydHMudW5pdHMgPSB1bml0cztcbiIsIi8qKlxuICogZGF0LWd1aSBKYXZhU2NyaXB0IENvbnRyb2xsZXIgTGlicmFyeVxuICogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RhdC1ndWlcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMSBEYXRhIEFydHMgVGVhbSwgR29vZ2xlIENyZWF0aXZlIExhYlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuXHR0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcblx0dHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6XG5cdChmYWN0b3J5KChnbG9iYWwuZGF0ID0ge30pKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9fXyRpbnNlcnRTdHlsZShjc3MpIHtcbiAgaWYgKCFjc3MpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblxuICBzdHlsZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcbiAgc3R5bGUuaW5uZXJIVE1MID0gY3NzO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcblxuICByZXR1cm4gY3NzO1xufVxuXG5mdW5jdGlvbiBjb2xvclRvU3RyaW5nIChjb2xvciwgZm9yY2VDU1NIZXgpIHtcbiAgdmFyIGNvbG9yRm9ybWF0ID0gY29sb3IuX19zdGF0ZS5jb252ZXJzaW9uTmFtZS50b1N0cmluZygpO1xuICB2YXIgciA9IE1hdGgucm91bmQoY29sb3Iucik7XG4gIHZhciBnID0gTWF0aC5yb3VuZChjb2xvci5nKTtcbiAgdmFyIGIgPSBNYXRoLnJvdW5kKGNvbG9yLmIpO1xuICB2YXIgYSA9IGNvbG9yLmE7XG4gIHZhciBoID0gTWF0aC5yb3VuZChjb2xvci5oKTtcbiAgdmFyIHMgPSBjb2xvci5zLnRvRml4ZWQoMSk7XG4gIHZhciB2ID0gY29sb3Iudi50b0ZpeGVkKDEpO1xuICBpZiAoZm9yY2VDU1NIZXggfHwgY29sb3JGb3JtYXQgPT09ICdUSFJFRV9DSEFSX0hFWCcgfHwgY29sb3JGb3JtYXQgPT09ICdTSVhfQ0hBUl9IRVgnKSB7XG4gICAgdmFyIHN0ciA9IGNvbG9yLmhleC50b1N0cmluZygxNik7XG4gICAgd2hpbGUgKHN0ci5sZW5ndGggPCA2KSB7XG4gICAgICBzdHIgPSAnMCcgKyBzdHI7XG4gICAgfVxuICAgIHJldHVybiAnIycgKyBzdHI7XG4gIH0gZWxzZSBpZiAoY29sb3JGb3JtYXQgPT09ICdDU1NfUkdCJykge1xuICAgIHJldHVybiAncmdiKCcgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnKSc7XG4gIH0gZWxzZSBpZiAoY29sb3JGb3JtYXQgPT09ICdDU1NfUkdCQScpIHtcbiAgICByZXR1cm4gJ3JnYmEoJyArIHIgKyAnLCcgKyBnICsgJywnICsgYiArICcsJyArIGEgKyAnKSc7XG4gIH0gZWxzZSBpZiAoY29sb3JGb3JtYXQgPT09ICdIRVgnKSB7XG4gICAgcmV0dXJuICcweCcgKyBjb2xvci5oZXgudG9TdHJpbmcoMTYpO1xuICB9IGVsc2UgaWYgKGNvbG9yRm9ybWF0ID09PSAnUkdCX0FSUkFZJykge1xuICAgIHJldHVybiAnWycgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnXSc7XG4gIH0gZWxzZSBpZiAoY29sb3JGb3JtYXQgPT09ICdSR0JBX0FSUkFZJykge1xuICAgIHJldHVybiAnWycgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnLCcgKyBhICsgJ10nO1xuICB9IGVsc2UgaWYgKGNvbG9yRm9ybWF0ID09PSAnUkdCX09CSicpIHtcbiAgICByZXR1cm4gJ3tyOicgKyByICsgJyxnOicgKyBnICsgJyxiOicgKyBiICsgJ30nO1xuICB9IGVsc2UgaWYgKGNvbG9yRm9ybWF0ID09PSAnUkdCQV9PQkonKSB7XG4gICAgcmV0dXJuICd7cjonICsgciArICcsZzonICsgZyArICcsYjonICsgYiArICcsYTonICsgYSArICd9JztcbiAgfSBlbHNlIGlmIChjb2xvckZvcm1hdCA9PT0gJ0hTVl9PQkonKSB7XG4gICAgcmV0dXJuICd7aDonICsgaCArICcsczonICsgcyArICcsdjonICsgdiArICd9JztcbiAgfSBlbHNlIGlmIChjb2xvckZvcm1hdCA9PT0gJ0hTVkFfT0JKJykge1xuICAgIHJldHVybiAne2g6JyArIGggKyAnLHM6JyArIHMgKyAnLHY6JyArIHYgKyAnLGE6JyArIGEgKyAnfSc7XG4gIH1cbiAgcmV0dXJuICd1bmtub3duIGZvcm1hdCc7XG59XG5cbnZhciBBUlJfRUFDSCA9IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoO1xudmFyIEFSUl9TTElDRSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBDb21tb24gPSB7XG4gIEJSRUFLOiB7fSxcbiAgZXh0ZW5kOiBmdW5jdGlvbiBleHRlbmQodGFyZ2V0KSB7XG4gICAgdGhpcy5lYWNoKEFSUl9TTElDRS5jYWxsKGFyZ3VtZW50cywgMSksIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHZhciBrZXlzID0gdGhpcy5pc09iamVjdChvYmopID8gT2JqZWN0LmtleXMob2JqKSA6IFtdO1xuICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVW5kZWZpbmVkKG9ialtrZXldKSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gb2JqW2tleV07XG4gICAgICAgIH1cbiAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgfSwgdGhpcyk7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfSxcbiAgZGVmYXVsdHM6IGZ1bmN0aW9uIGRlZmF1bHRzKHRhcmdldCkge1xuICAgIHRoaXMuZWFjaChBUlJfU0xJQ0UuY2FsbChhcmd1bWVudHMsIDEpLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICB2YXIga2V5cyA9IHRoaXMuaXNPYmplY3Qob2JqKSA/IE9iamVjdC5rZXlzKG9iaikgOiBbXTtcbiAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICh0aGlzLmlzVW5kZWZpbmVkKHRhcmdldFtrZXldKSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gb2JqW2tleV07XG4gICAgICAgIH1cbiAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgfSwgdGhpcyk7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfSxcbiAgY29tcG9zZTogZnVuY3Rpb24gY29tcG9zZSgpIHtcbiAgICB2YXIgdG9DYWxsID0gQVJSX1NMSUNFLmNhbGwoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGFyZ3MgPSBBUlJfU0xJQ0UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgZm9yICh2YXIgaSA9IHRvQ2FsbC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBhcmdzID0gW3RvQ2FsbFtpXS5hcHBseSh0aGlzLCBhcmdzKV07XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJnc1swXTtcbiAgICB9O1xuICB9LFxuICBlYWNoOiBmdW5jdGlvbiBlYWNoKG9iaiwgaXRyLCBzY29wZSkge1xuICAgIGlmICghb2JqKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChBUlJfRUFDSCAmJiBvYmouZm9yRWFjaCAmJiBvYmouZm9yRWFjaCA9PT0gQVJSX0VBQ0gpIHtcbiAgICAgIG9iai5mb3JFYWNoKGl0ciwgc2NvcGUpO1xuICAgIH0gZWxzZSBpZiAob2JqLmxlbmd0aCA9PT0gb2JqLmxlbmd0aCArIDApIHtcbiAgICAgIHZhciBrZXkgPSB2b2lkIDA7XG4gICAgICB2YXIgbCA9IHZvaWQgMDtcbiAgICAgIGZvciAoa2V5ID0gMCwgbCA9IG9iai5sZW5ndGg7IGtleSA8IGw7IGtleSsrKSB7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqICYmIGl0ci5jYWxsKHNjb3BlLCBvYmpba2V5XSwga2V5KSA9PT0gdGhpcy5CUkVBSykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBfa2V5IGluIG9iaikge1xuICAgICAgICBpZiAoaXRyLmNhbGwoc2NvcGUsIG9ialtfa2V5XSwgX2tleSkgPT09IHRoaXMuQlJFQUspIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGRlZmVyOiBmdW5jdGlvbiBkZWZlcihmbmMpIHtcbiAgICBzZXRUaW1lb3V0KGZuYywgMCk7XG4gIH0sXG4gIGRlYm91bmNlOiBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB0aHJlc2hvbGQsIGNhbGxJbW1lZGlhdGVseSkge1xuICAgIHZhciB0aW1lb3V0ID0gdm9pZCAwO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgb2JqID0gdGhpcztcbiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgZnVuY3Rpb24gZGVsYXllZCgpIHtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIGlmICghY2FsbEltbWVkaWF0ZWx5KSBmdW5jLmFwcGx5KG9iaiwgYXJncyk7XG4gICAgICB9XG4gICAgICB2YXIgY2FsbE5vdyA9IGNhbGxJbW1lZGlhdGVseSB8fCAhdGltZW91dDtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGRlbGF5ZWQsIHRocmVzaG9sZCk7XG4gICAgICBpZiAoY2FsbE5vdykge1xuICAgICAgICBmdW5jLmFwcGx5KG9iaiwgYXJncyk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgdG9BcnJheTogZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgICBpZiAob2JqLnRvQXJyYXkpIHJldHVybiBvYmoudG9BcnJheSgpO1xuICAgIHJldHVybiBBUlJfU0xJQ0UuY2FsbChvYmopO1xuICB9LFxuICBpc1VuZGVmaW5lZDogZnVuY3Rpb24gaXNVbmRlZmluZWQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkO1xuICB9LFxuICBpc051bGw6IGZ1bmN0aW9uIGlzTnVsbChvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9LFxuICBpc05hTjogZnVuY3Rpb24gKF9pc05hTikge1xuICAgIGZ1bmN0aW9uIGlzTmFOKF94KSB7XG4gICAgICByZXR1cm4gX2lzTmFOLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIGlzTmFOLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF9pc05hTi50b1N0cmluZygpO1xuICAgIH07XG4gICAgcmV0dXJuIGlzTmFOO1xuICB9KGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gaXNOYU4ob2JqKTtcbiAgfSksXG4gIGlzQXJyYXk6IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmouY29uc3RydWN0b3IgPT09IEFycmF5O1xuICB9LFxuICBpc09iamVjdDogZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gT2JqZWN0KG9iaik7XG4gIH0sXG4gIGlzTnVtYmVyOiBmdW5jdGlvbiBpc051bWJlcihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBvYmogKyAwO1xuICB9LFxuICBpc1N0cmluZzogZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gb2JqICsgJyc7XG4gIH0sXG4gIGlzQm9vbGVhbjogZnVuY3Rpb24gaXNCb29sZWFuKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IGZhbHNlIHx8IG9iaiA9PT0gdHJ1ZTtcbiAgfSxcbiAgaXNGdW5jdGlvbjogZnVuY3Rpb24gaXNGdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRnVuY3Rpb247XG4gIH1cbn07XG5cbnZhciBJTlRFUlBSRVRBVElPTlMgPSBbXG57XG4gIGxpdG11czogQ29tbW9uLmlzU3RyaW5nLFxuICBjb252ZXJzaW9uczoge1xuICAgIFRIUkVFX0NIQVJfSEVYOiB7XG4gICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG9yaWdpbmFsKSB7XG4gICAgICAgIHZhciB0ZXN0ID0gb3JpZ2luYWwubWF0Y2goL14jKFtBLUYwLTldKShbQS1GMC05XSkoW0EtRjAtOV0pJC9pKTtcbiAgICAgICAgaWYgKHRlc3QgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzcGFjZTogJ0hFWCcsXG4gICAgICAgICAgaGV4OiBwYXJzZUludCgnMHgnICsgdGVzdFsxXS50b1N0cmluZygpICsgdGVzdFsxXS50b1N0cmluZygpICsgdGVzdFsyXS50b1N0cmluZygpICsgdGVzdFsyXS50b1N0cmluZygpICsgdGVzdFszXS50b1N0cmluZygpICsgdGVzdFszXS50b1N0cmluZygpLCAwKVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHdyaXRlOiBjb2xvclRvU3RyaW5nXG4gICAgfSxcbiAgICBTSVhfQ0hBUl9IRVg6IHtcbiAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQob3JpZ2luYWwpIHtcbiAgICAgICAgdmFyIHRlc3QgPSBvcmlnaW5hbC5tYXRjaCgvXiMoW0EtRjAtOV17Nn0pJC9pKTtcbiAgICAgICAgaWYgKHRlc3QgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzcGFjZTogJ0hFWCcsXG4gICAgICAgICAgaGV4OiBwYXJzZUludCgnMHgnICsgdGVzdFsxXS50b1N0cmluZygpLCAwKVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHdyaXRlOiBjb2xvclRvU3RyaW5nXG4gICAgfSxcbiAgICBDU1NfUkdCOiB7XG4gICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG9yaWdpbmFsKSB7XG4gICAgICAgIHZhciB0ZXN0ID0gb3JpZ2luYWwubWF0Y2goL15yZ2JcXChcXHMqKC4rKVxccyosXFxzKiguKylcXHMqLFxccyooLispXFxzKlxcKS8pO1xuICAgICAgICBpZiAodGVzdCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNwYWNlOiAnUkdCJyxcbiAgICAgICAgICByOiBwYXJzZUZsb2F0KHRlc3RbMV0pLFxuICAgICAgICAgIGc6IHBhcnNlRmxvYXQodGVzdFsyXSksXG4gICAgICAgICAgYjogcGFyc2VGbG9hdCh0ZXN0WzNdKVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHdyaXRlOiBjb2xvclRvU3RyaW5nXG4gICAgfSxcbiAgICBDU1NfUkdCQToge1xuICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChvcmlnaW5hbCkge1xuICAgICAgICB2YXIgdGVzdCA9IG9yaWdpbmFsLm1hdGNoKC9ecmdiYVxcKFxccyooLispXFxzKixcXHMqKC4rKVxccyosXFxzKiguKylcXHMqLFxccyooLispXFxzKlxcKS8pO1xuICAgICAgICBpZiAodGVzdCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNwYWNlOiAnUkdCJyxcbiAgICAgICAgICByOiBwYXJzZUZsb2F0KHRlc3RbMV0pLFxuICAgICAgICAgIGc6IHBhcnNlRmxvYXQodGVzdFsyXSksXG4gICAgICAgICAgYjogcGFyc2VGbG9hdCh0ZXN0WzNdKSxcbiAgICAgICAgICBhOiBwYXJzZUZsb2F0KHRlc3RbNF0pXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgd3JpdGU6IGNvbG9yVG9TdHJpbmdcbiAgICB9XG4gIH1cbn0sXG57XG4gIGxpdG11czogQ29tbW9uLmlzTnVtYmVyLFxuICBjb252ZXJzaW9uczoge1xuICAgIEhFWDoge1xuICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChvcmlnaW5hbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNwYWNlOiAnSEVYJyxcbiAgICAgICAgICBoZXg6IG9yaWdpbmFsLFxuICAgICAgICAgIGNvbnZlcnNpb25OYW1lOiAnSEVYJ1xuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShjb2xvcikge1xuICAgICAgICByZXR1cm4gY29sb3IuaGV4O1xuICAgICAgfVxuICAgIH1cbiAgfVxufSxcbntcbiAgbGl0bXVzOiBDb21tb24uaXNBcnJheSxcbiAgY29udmVyc2lvbnM6IHtcbiAgICBSR0JfQVJSQVk6IHtcbiAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQob3JpZ2luYWwpIHtcbiAgICAgICAgaWYgKG9yaWdpbmFsLmxlbmd0aCAhPT0gMykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNwYWNlOiAnUkdCJyxcbiAgICAgICAgICByOiBvcmlnaW5hbFswXSxcbiAgICAgICAgICBnOiBvcmlnaW5hbFsxXSxcbiAgICAgICAgICBiOiBvcmlnaW5hbFsyXVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShjb2xvcikge1xuICAgICAgICByZXR1cm4gW2NvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmJdO1xuICAgICAgfVxuICAgIH0sXG4gICAgUkdCQV9BUlJBWToge1xuICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChvcmlnaW5hbCkge1xuICAgICAgICBpZiAob3JpZ2luYWwubGVuZ3RoICE9PSA0KSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3BhY2U6ICdSR0InLFxuICAgICAgICAgIHI6IG9yaWdpbmFsWzBdLFxuICAgICAgICAgIGc6IG9yaWdpbmFsWzFdLFxuICAgICAgICAgIGI6IG9yaWdpbmFsWzJdLFxuICAgICAgICAgIGE6IG9yaWdpbmFsWzNdXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKGNvbG9yKSB7XG4gICAgICAgIHJldHVybiBbY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYV07XG4gICAgICB9XG4gICAgfVxuICB9XG59LFxue1xuICBsaXRtdXM6IENvbW1vbi5pc09iamVjdCxcbiAgY29udmVyc2lvbnM6IHtcbiAgICBSR0JBX09CSjoge1xuICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChvcmlnaW5hbCkge1xuICAgICAgICBpZiAoQ29tbW9uLmlzTnVtYmVyKG9yaWdpbmFsLnIpICYmIENvbW1vbi5pc051bWJlcihvcmlnaW5hbC5nKSAmJiBDb21tb24uaXNOdW1iZXIob3JpZ2luYWwuYikgJiYgQ29tbW9uLmlzTnVtYmVyKG9yaWdpbmFsLmEpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNwYWNlOiAnUkdCJyxcbiAgICAgICAgICAgIHI6IG9yaWdpbmFsLnIsXG4gICAgICAgICAgICBnOiBvcmlnaW5hbC5nLFxuICAgICAgICAgICAgYjogb3JpZ2luYWwuYixcbiAgICAgICAgICAgIGE6IG9yaWdpbmFsLmFcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoY29sb3IpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByOiBjb2xvci5yLFxuICAgICAgICAgIGc6IGNvbG9yLmcsXG4gICAgICAgICAgYjogY29sb3IuYixcbiAgICAgICAgICBhOiBjb2xvci5hXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcbiAgICBSR0JfT0JKOiB7XG4gICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG9yaWdpbmFsKSB7XG4gICAgICAgIGlmIChDb21tb24uaXNOdW1iZXIob3JpZ2luYWwucikgJiYgQ29tbW9uLmlzTnVtYmVyKG9yaWdpbmFsLmcpICYmIENvbW1vbi5pc051bWJlcihvcmlnaW5hbC5iKSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcGFjZTogJ1JHQicsXG4gICAgICAgICAgICByOiBvcmlnaW5hbC5yLFxuICAgICAgICAgICAgZzogb3JpZ2luYWwuZyxcbiAgICAgICAgICAgIGI6IG9yaWdpbmFsLmJcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoY29sb3IpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByOiBjb2xvci5yLFxuICAgICAgICAgIGc6IGNvbG9yLmcsXG4gICAgICAgICAgYjogY29sb3IuYlxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG4gICAgSFNWQV9PQko6IHtcbiAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQob3JpZ2luYWwpIHtcbiAgICAgICAgaWYgKENvbW1vbi5pc051bWJlcihvcmlnaW5hbC5oKSAmJiBDb21tb24uaXNOdW1iZXIob3JpZ2luYWwucykgJiYgQ29tbW9uLmlzTnVtYmVyKG9yaWdpbmFsLnYpICYmIENvbW1vbi5pc051bWJlcihvcmlnaW5hbC5hKSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcGFjZTogJ0hTVicsXG4gICAgICAgICAgICBoOiBvcmlnaW5hbC5oLFxuICAgICAgICAgICAgczogb3JpZ2luYWwucyxcbiAgICAgICAgICAgIHY6IG9yaWdpbmFsLnYsXG4gICAgICAgICAgICBhOiBvcmlnaW5hbC5hXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKGNvbG9yKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaDogY29sb3IuaCxcbiAgICAgICAgICBzOiBjb2xvci5zLFxuICAgICAgICAgIHY6IGNvbG9yLnYsXG4gICAgICAgICAgYTogY29sb3IuYVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG4gICAgSFNWX09CSjoge1xuICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChvcmlnaW5hbCkge1xuICAgICAgICBpZiAoQ29tbW9uLmlzTnVtYmVyKG9yaWdpbmFsLmgpICYmIENvbW1vbi5pc051bWJlcihvcmlnaW5hbC5zKSAmJiBDb21tb24uaXNOdW1iZXIob3JpZ2luYWwudikpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3BhY2U6ICdIU1YnLFxuICAgICAgICAgICAgaDogb3JpZ2luYWwuaCxcbiAgICAgICAgICAgIHM6IG9yaWdpbmFsLnMsXG4gICAgICAgICAgICB2OiBvcmlnaW5hbC52XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKGNvbG9yKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaDogY29sb3IuaCxcbiAgICAgICAgICBzOiBjb2xvci5zLFxuICAgICAgICAgIHY6IGNvbG9yLnZcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1dO1xudmFyIHJlc3VsdCA9IHZvaWQgMDtcbnZhciB0b1JldHVybiA9IHZvaWQgMDtcbnZhciBpbnRlcnByZXQgPSBmdW5jdGlvbiBpbnRlcnByZXQoKSB7XG4gIHRvUmV0dXJuID0gZmFsc2U7XG4gIHZhciBvcmlnaW5hbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gQ29tbW9uLnRvQXJyYXkoYXJndW1lbnRzKSA6IGFyZ3VtZW50c1swXTtcbiAgQ29tbW9uLmVhY2goSU5URVJQUkVUQVRJT05TLCBmdW5jdGlvbiAoZmFtaWx5KSB7XG4gICAgaWYgKGZhbWlseS5saXRtdXMob3JpZ2luYWwpKSB7XG4gICAgICBDb21tb24uZWFjaChmYW1pbHkuY29udmVyc2lvbnMsIGZ1bmN0aW9uIChjb252ZXJzaW9uLCBjb252ZXJzaW9uTmFtZSkge1xuICAgICAgICByZXN1bHQgPSBjb252ZXJzaW9uLnJlYWQob3JpZ2luYWwpO1xuICAgICAgICBpZiAodG9SZXR1cm4gPT09IGZhbHNlICYmIHJlc3VsdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICB0b1JldHVybiA9IHJlc3VsdDtcbiAgICAgICAgICByZXN1bHQuY29udmVyc2lvbk5hbWUgPSBjb252ZXJzaW9uTmFtZTtcbiAgICAgICAgICByZXN1bHQuY29udmVyc2lvbiA9IGNvbnZlcnNpb247XG4gICAgICAgICAgcmV0dXJuIENvbW1vbi5CUkVBSztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gQ29tbW9uLkJSRUFLO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0b1JldHVybjtcbn07XG5cbnZhciB0bXBDb21wb25lbnQgPSB2b2lkIDA7XG52YXIgQ29sb3JNYXRoID0ge1xuICBoc3ZfdG9fcmdiOiBmdW5jdGlvbiBoc3ZfdG9fcmdiKGgsIHMsIHYpIHtcbiAgICB2YXIgaGkgPSBNYXRoLmZsb29yKGggLyA2MCkgJSA2O1xuICAgIHZhciBmID0gaCAvIDYwIC0gTWF0aC5mbG9vcihoIC8gNjApO1xuICAgIHZhciBwID0gdiAqICgxLjAgLSBzKTtcbiAgICB2YXIgcSA9IHYgKiAoMS4wIC0gZiAqIHMpO1xuICAgIHZhciB0ID0gdiAqICgxLjAgLSAoMS4wIC0gZikgKiBzKTtcbiAgICB2YXIgYyA9IFtbdiwgdCwgcF0sIFtxLCB2LCBwXSwgW3AsIHYsIHRdLCBbcCwgcSwgdl0sIFt0LCBwLCB2XSwgW3YsIHAsIHFdXVtoaV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IGNbMF0gKiAyNTUsXG4gICAgICBnOiBjWzFdICogMjU1LFxuICAgICAgYjogY1syXSAqIDI1NVxuICAgIH07XG4gIH0sXG4gIHJnYl90b19oc3Y6IGZ1bmN0aW9uIHJnYl90b19oc3YociwgZywgYikge1xuICAgIHZhciBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcbiAgICB2YXIgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG4gICAgdmFyIGRlbHRhID0gbWF4IC0gbWluO1xuICAgIHZhciBoID0gdm9pZCAwO1xuICAgIHZhciBzID0gdm9pZCAwO1xuICAgIGlmIChtYXggIT09IDApIHtcbiAgICAgIHMgPSBkZWx0YSAvIG1heDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaDogTmFOLFxuICAgICAgICBzOiAwLFxuICAgICAgICB2OiAwXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAociA9PT0gbWF4KSB7XG4gICAgICBoID0gKGcgLSBiKSAvIGRlbHRhO1xuICAgIH0gZWxzZSBpZiAoZyA9PT0gbWF4KSB7XG4gICAgICBoID0gMiArIChiIC0gcikgLyBkZWx0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgaCA9IDQgKyAociAtIGcpIC8gZGVsdGE7XG4gICAgfVxuICAgIGggLz0gNjtcbiAgICBpZiAoaCA8IDApIHtcbiAgICAgIGggKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGg6IGggKiAzNjAsXG4gICAgICBzOiBzLFxuICAgICAgdjogbWF4IC8gMjU1XG4gICAgfTtcbiAgfSxcbiAgcmdiX3RvX2hleDogZnVuY3Rpb24gcmdiX3RvX2hleChyLCBnLCBiKSB7XG4gICAgdmFyIGhleCA9IHRoaXMuaGV4X3dpdGhfY29tcG9uZW50KDAsIDIsIHIpO1xuICAgIGhleCA9IHRoaXMuaGV4X3dpdGhfY29tcG9uZW50KGhleCwgMSwgZyk7XG4gICAgaGV4ID0gdGhpcy5oZXhfd2l0aF9jb21wb25lbnQoaGV4LCAwLCBiKTtcbiAgICByZXR1cm4gaGV4O1xuICB9LFxuICBjb21wb25lbnRfZnJvbV9oZXg6IGZ1bmN0aW9uIGNvbXBvbmVudF9mcm9tX2hleChoZXgsIGNvbXBvbmVudEluZGV4KSB7XG4gICAgcmV0dXJuIGhleCA+PiBjb21wb25lbnRJbmRleCAqIDggJiAweEZGO1xuICB9LFxuICBoZXhfd2l0aF9jb21wb25lbnQ6IGZ1bmN0aW9uIGhleF93aXRoX2NvbXBvbmVudChoZXgsIGNvbXBvbmVudEluZGV4LCB2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA8PCAodG1wQ29tcG9uZW50ID0gY29tcG9uZW50SW5kZXggKiA4KSB8IGhleCAmIH4oMHhGRiA8PCB0bXBDb21wb25lbnQpO1xuICB9XG59O1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdHlwZW9mIG9iajtcbn0gOiBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTtcblxudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpO1xuXG5cblxuXG5cblxuXG52YXIgZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gIGlmIChvYmplY3QgPT09IG51bGwpIG9iamVjdCA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpO1xuXG4gIGlmIChkZXNjID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7XG5cbiAgICBpZiAocGFyZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ2V0KHBhcmVudCwgcHJvcGVydHksIHJlY2VpdmVyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoXCJ2YWx1ZVwiIGluIGRlc2MpIHtcbiAgICByZXR1cm4gZGVzYy52YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7XG5cbiAgICBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTtcbiAgfVxufTtcblxudmFyIGluaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufTtcblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiA9IGZ1bmN0aW9uIChzZWxmLCBjYWxsKSB7XG4gIGlmICghc2VsZikge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmO1xufTtcblxudmFyIENvbG9yID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDb2xvcigpIHtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBDb2xvcik7XG4gICAgdGhpcy5fX3N0YXRlID0gaW50ZXJwcmV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGludGVycHJldCBjb2xvciBhcmd1bWVudHMnKTtcbiAgICB9XG4gICAgdGhpcy5fX3N0YXRlLmEgPSB0aGlzLl9fc3RhdGUuYSB8fCAxO1xuICB9XG4gIGNyZWF0ZUNsYXNzKENvbG9yLCBbe1xuICAgIGtleTogJ3RvU3RyaW5nJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gY29sb3JUb1N0cmluZyh0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICd0b0hleFN0cmluZycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvSGV4U3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGNvbG9yVG9TdHJpbmcodGhpcywgdHJ1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAndG9PcmlnaW5hbCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvT3JpZ2luYWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fX3N0YXRlLmNvbnZlcnNpb24ud3JpdGUodGhpcyk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBDb2xvcjtcbn0oKTtcbmZ1bmN0aW9uIGRlZmluZVJHQkNvbXBvbmVudCh0YXJnZXQsIGNvbXBvbmVudCwgY29tcG9uZW50SGV4SW5kZXgpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29tcG9uZW50LCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICBpZiAodGhpcy5fX3N0YXRlLnNwYWNlID09PSAnUkdCJykge1xuICAgICAgICByZXR1cm4gdGhpcy5fX3N0YXRlW2NvbXBvbmVudF07XG4gICAgICB9XG4gICAgICBDb2xvci5yZWNhbGN1bGF0ZVJHQih0aGlzLCBjb21wb25lbnQsIGNvbXBvbmVudEhleEluZGV4KTtcbiAgICAgIHJldHVybiB0aGlzLl9fc3RhdGVbY29tcG9uZW50XTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0JCQxKHYpIHtcbiAgICAgIGlmICh0aGlzLl9fc3RhdGUuc3BhY2UgIT09ICdSR0InKSB7XG4gICAgICAgIENvbG9yLnJlY2FsY3VsYXRlUkdCKHRoaXMsIGNvbXBvbmVudCwgY29tcG9uZW50SGV4SW5kZXgpO1xuICAgICAgICB0aGlzLl9fc3RhdGUuc3BhY2UgPSAnUkdCJztcbiAgICAgIH1cbiAgICAgIHRoaXMuX19zdGF0ZVtjb21wb25lbnRdID0gdjtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gZGVmaW5lSFNWQ29tcG9uZW50KHRhcmdldCwgY29tcG9uZW50KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbXBvbmVudCwge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0JCQxKCkge1xuICAgICAgaWYgKHRoaXMuX19zdGF0ZS5zcGFjZSA9PT0gJ0hTVicpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19zdGF0ZVtjb21wb25lbnRdO1xuICAgICAgfVxuICAgICAgQ29sb3IucmVjYWxjdWxhdGVIU1YodGhpcyk7XG4gICAgICByZXR1cm4gdGhpcy5fX3N0YXRlW2NvbXBvbmVudF07XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCQkMSh2KSB7XG4gICAgICBpZiAodGhpcy5fX3N0YXRlLnNwYWNlICE9PSAnSFNWJykge1xuICAgICAgICBDb2xvci5yZWNhbGN1bGF0ZUhTVih0aGlzKTtcbiAgICAgICAgdGhpcy5fX3N0YXRlLnNwYWNlID0gJ0hTVic7XG4gICAgICB9XG4gICAgICB0aGlzLl9fc3RhdGVbY29tcG9uZW50XSA9IHY7XG4gICAgfVxuICB9KTtcbn1cbkNvbG9yLnJlY2FsY3VsYXRlUkdCID0gZnVuY3Rpb24gKGNvbG9yLCBjb21wb25lbnQsIGNvbXBvbmVudEhleEluZGV4KSB7XG4gIGlmIChjb2xvci5fX3N0YXRlLnNwYWNlID09PSAnSEVYJykge1xuICAgIGNvbG9yLl9fc3RhdGVbY29tcG9uZW50XSA9IENvbG9yTWF0aC5jb21wb25lbnRfZnJvbV9oZXgoY29sb3IuX19zdGF0ZS5oZXgsIGNvbXBvbmVudEhleEluZGV4KTtcbiAgfSBlbHNlIGlmIChjb2xvci5fX3N0YXRlLnNwYWNlID09PSAnSFNWJykge1xuICAgIENvbW1vbi5leHRlbmQoY29sb3IuX19zdGF0ZSwgQ29sb3JNYXRoLmhzdl90b19yZ2IoY29sb3IuX19zdGF0ZS5oLCBjb2xvci5fX3N0YXRlLnMsIGNvbG9yLl9fc3RhdGUudikpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29ycnVwdGVkIGNvbG9yIHN0YXRlJyk7XG4gIH1cbn07XG5Db2xvci5yZWNhbGN1bGF0ZUhTViA9IGZ1bmN0aW9uIChjb2xvcikge1xuICB2YXIgcmVzdWx0ID0gQ29sb3JNYXRoLnJnYl90b19oc3YoY29sb3IuciwgY29sb3IuZywgY29sb3IuYik7XG4gIENvbW1vbi5leHRlbmQoY29sb3IuX19zdGF0ZSwge1xuICAgIHM6IHJlc3VsdC5zLFxuICAgIHY6IHJlc3VsdC52XG4gIH0pO1xuICBpZiAoIUNvbW1vbi5pc05hTihyZXN1bHQuaCkpIHtcbiAgICBjb2xvci5fX3N0YXRlLmggPSByZXN1bHQuaDtcbiAgfSBlbHNlIGlmIChDb21tb24uaXNVbmRlZmluZWQoY29sb3IuX19zdGF0ZS5oKSkge1xuICAgIGNvbG9yLl9fc3RhdGUuaCA9IDA7XG4gIH1cbn07XG5Db2xvci5DT01QT05FTlRTID0gWydyJywgJ2cnLCAnYicsICdoJywgJ3MnLCAndicsICdoZXgnLCAnYSddO1xuZGVmaW5lUkdCQ29tcG9uZW50KENvbG9yLnByb3RvdHlwZSwgJ3InLCAyKTtcbmRlZmluZVJHQkNvbXBvbmVudChDb2xvci5wcm90b3R5cGUsICdnJywgMSk7XG5kZWZpbmVSR0JDb21wb25lbnQoQ29sb3IucHJvdG90eXBlLCAnYicsIDApO1xuZGVmaW5lSFNWQ29tcG9uZW50KENvbG9yLnByb3RvdHlwZSwgJ2gnKTtcbmRlZmluZUhTVkNvbXBvbmVudChDb2xvci5wcm90b3R5cGUsICdzJyk7XG5kZWZpbmVIU1ZDb21wb25lbnQoQ29sb3IucHJvdG90eXBlLCAndicpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yLnByb3RvdHlwZSwgJ2EnLCB7XG4gIGdldDogZnVuY3Rpb24gZ2V0JCQxKCkge1xuICAgIHJldHVybiB0aGlzLl9fc3RhdGUuYTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiBzZXQkJDEodikge1xuICAgIHRoaXMuX19zdGF0ZS5hID0gdjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3IucHJvdG90eXBlLCAnaGV4Jywge1xuICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICBpZiAodGhpcy5fX3N0YXRlLnNwYWNlICE9PSAnSEVYJykge1xuICAgICAgdGhpcy5fX3N0YXRlLmhleCA9IENvbG9yTWF0aC5yZ2JfdG9faGV4KHRoaXMuciwgdGhpcy5nLCB0aGlzLmIpO1xuICAgICAgdGhpcy5fX3N0YXRlLnNwYWNlID0gJ0hFWCc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9fc3RhdGUuaGV4O1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIHNldCQkMSh2KSB7XG4gICAgdGhpcy5fX3N0YXRlLnNwYWNlID0gJ0hFWCc7XG4gICAgdGhpcy5fX3N0YXRlLmhleCA9IHY7XG4gIH1cbn0pO1xuXG52YXIgQ29udHJvbGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ29udHJvbGxlcihvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29udHJvbGxlcik7XG4gICAgdGhpcy5pbml0aWFsVmFsdWUgPSBvYmplY3RbcHJvcGVydHldO1xuICAgIHRoaXMuZG9tRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0O1xuICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB0aGlzLl9fb25DaGFuZ2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fX29uRmluaXNoQ2hhbmdlID0gdW5kZWZpbmVkO1xuICB9XG4gIGNyZWF0ZUNsYXNzKENvbnRyb2xsZXIsIFt7XG4gICAga2V5OiAnb25DaGFuZ2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZShmbmMpIHtcbiAgICAgIHRoaXMuX19vbkNoYW5nZSA9IGZuYztcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ29uRmluaXNoQ2hhbmdlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25GaW5pc2hDaGFuZ2UoZm5jKSB7XG4gICAgICB0aGlzLl9fb25GaW5pc2hDaGFuZ2UgPSBmbmM7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdzZXRWYWx1ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFZhbHVlKG5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLm9iamVjdFt0aGlzLnByb3BlcnR5XSA9IG5ld1ZhbHVlO1xuICAgICAgaWYgKHRoaXMuX19vbkNoYW5nZSkge1xuICAgICAgICB0aGlzLl9fb25DaGFuZ2UuY2FsbCh0aGlzLCBuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZURpc3BsYXkoKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2dldFZhbHVlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vYmplY3RbdGhpcy5wcm9wZXJ0eV07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAndXBkYXRlRGlzcGxheScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZURpc3BsYXkoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdpc01vZGlmaWVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNNb2RpZmllZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmluaXRpYWxWYWx1ZSAhPT0gdGhpcy5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gQ29udHJvbGxlcjtcbn0oKTtcblxudmFyIEVWRU5UX01BUCA9IHtcbiAgSFRNTEV2ZW50czogWydjaGFuZ2UnXSxcbiAgTW91c2VFdmVudHM6IFsnY2xpY2snLCAnbW91c2Vtb3ZlJywgJ21vdXNlZG93bicsICdtb3VzZXVwJywgJ21vdXNlb3ZlciddLFxuICBLZXlib2FyZEV2ZW50czogWydrZXlkb3duJ11cbn07XG52YXIgRVZFTlRfTUFQX0lOViA9IHt9O1xuQ29tbW9uLmVhY2goRVZFTlRfTUFQLCBmdW5jdGlvbiAodiwgaykge1xuICBDb21tb24uZWFjaCh2LCBmdW5jdGlvbiAoZSkge1xuICAgIEVWRU5UX01BUF9JTlZbZV0gPSBrO1xuICB9KTtcbn0pO1xudmFyIENTU19WQUxVRV9QSVhFTFMgPSAvKFxcZCsoXFwuXFxkKyk/KXB4LztcbmZ1bmN0aW9uIGNzc1ZhbHVlVG9QaXhlbHModmFsKSB7XG4gIGlmICh2YWwgPT09ICcwJyB8fCBDb21tb24uaXNVbmRlZmluZWQodmFsKSkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciBtYXRjaCA9IHZhbC5tYXRjaChDU1NfVkFMVUVfUElYRUxTKTtcbiAgaWYgKCFDb21tb24uaXNOdWxsKG1hdGNoKSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbnZhciBkb20gPSB7XG4gIG1ha2VTZWxlY3RhYmxlOiBmdW5jdGlvbiBtYWtlU2VsZWN0YWJsZShlbGVtLCBzZWxlY3RhYmxlKSB7XG4gICAgaWYgKGVsZW0gPT09IHVuZGVmaW5lZCB8fCBlbGVtLnN0eWxlID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICBlbGVtLm9uc2VsZWN0c3RhcnQgPSBzZWxlY3RhYmxlID8gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gOiBmdW5jdGlvbiAoKSB7fTtcbiAgICBlbGVtLnN0eWxlLk1velVzZXJTZWxlY3QgPSBzZWxlY3RhYmxlID8gJ2F1dG8nIDogJ25vbmUnO1xuICAgIGVsZW0uc3R5bGUuS2h0bWxVc2VyU2VsZWN0ID0gc2VsZWN0YWJsZSA/ICdhdXRvJyA6ICdub25lJztcbiAgICBlbGVtLnVuc2VsZWN0YWJsZSA9IHNlbGVjdGFibGUgPyAnb24nIDogJ29mZic7XG4gIH0sXG4gIG1ha2VGdWxsc2NyZWVuOiBmdW5jdGlvbiBtYWtlRnVsbHNjcmVlbihlbGVtLCBob3IsIHZlcnQpIHtcbiAgICB2YXIgdmVydGljYWwgPSB2ZXJ0O1xuICAgIHZhciBob3Jpem9udGFsID0gaG9yO1xuICAgIGlmIChDb21tb24uaXNVbmRlZmluZWQoaG9yaXpvbnRhbCkpIHtcbiAgICAgIGhvcml6b250YWwgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoQ29tbW9uLmlzVW5kZWZpbmVkKHZlcnRpY2FsKSkge1xuICAgICAgdmVydGljYWwgPSB0cnVlO1xuICAgIH1cbiAgICBlbGVtLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBpZiAoaG9yaXpvbnRhbCkge1xuICAgICAgZWxlbS5zdHlsZS5sZWZ0ID0gMDtcbiAgICAgIGVsZW0uc3R5bGUucmlnaHQgPSAwO1xuICAgIH1cbiAgICBpZiAodmVydGljYWwpIHtcbiAgICAgIGVsZW0uc3R5bGUudG9wID0gMDtcbiAgICAgIGVsZW0uc3R5bGUuYm90dG9tID0gMDtcbiAgICB9XG4gIH0sXG4gIGZha2VFdmVudDogZnVuY3Rpb24gZmFrZUV2ZW50KGVsZW0sIGV2ZW50VHlwZSwgcGFycywgYXV4KSB7XG4gICAgdmFyIHBhcmFtcyA9IHBhcnMgfHwge307XG4gICAgdmFyIGNsYXNzTmFtZSA9IEVWRU5UX01BUF9JTlZbZXZlbnRUeXBlXTtcbiAgICBpZiAoIWNsYXNzTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFdmVudCB0eXBlICcgKyBldmVudFR5cGUgKyAnIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuICAgIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChjbGFzc05hbWUpO1xuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICBjYXNlICdNb3VzZUV2ZW50cyc6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgY2xpZW50WCA9IHBhcmFtcy54IHx8IHBhcmFtcy5jbGllbnRYIHx8IDA7XG4gICAgICAgICAgdmFyIGNsaWVudFkgPSBwYXJhbXMueSB8fCBwYXJhbXMuY2xpZW50WSB8fCAwO1xuICAgICAgICAgIGV2dC5pbml0TW91c2VFdmVudChldmVudFR5cGUsIHBhcmFtcy5idWJibGVzIHx8IGZhbHNlLCBwYXJhbXMuY2FuY2VsYWJsZSB8fCB0cnVlLCB3aW5kb3csIHBhcmFtcy5jbGlja0NvdW50IHx8IDEsIDAsXG4gICAgICAgICAgMCxcbiAgICAgICAgICBjbGllbnRYLFxuICAgICAgICAgIGNsaWVudFksXG4gICAgICAgICAgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBjYXNlICdLZXlib2FyZEV2ZW50cyc6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgaW5pdCA9IGV2dC5pbml0S2V5Ym9hcmRFdmVudCB8fCBldnQuaW5pdEtleUV2ZW50O1xuICAgICAgICAgIENvbW1vbi5kZWZhdWx0cyhwYXJhbXMsIHtcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgICAgICBjdHJsS2V5OiBmYWxzZSxcbiAgICAgICAgICAgIGFsdEtleTogZmFsc2UsXG4gICAgICAgICAgICBzaGlmdEtleTogZmFsc2UsXG4gICAgICAgICAgICBtZXRhS2V5OiBmYWxzZSxcbiAgICAgICAgICAgIGtleUNvZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNoYXJDb2RlOiB1bmRlZmluZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpbml0KGV2ZW50VHlwZSwgcGFyYW1zLmJ1YmJsZXMgfHwgZmFsc2UsIHBhcmFtcy5jYW5jZWxhYmxlLCB3aW5kb3csIHBhcmFtcy5jdHJsS2V5LCBwYXJhbXMuYWx0S2V5LCBwYXJhbXMuc2hpZnRLZXksIHBhcmFtcy5tZXRhS2V5LCBwYXJhbXMua2V5Q29kZSwgcGFyYW1zLmNoYXJDb2RlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIGV2dC5pbml0RXZlbnQoZXZlbnRUeXBlLCBwYXJhbXMuYnViYmxlcyB8fCBmYWxzZSwgcGFyYW1zLmNhbmNlbGFibGUgfHwgdHJ1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQ29tbW9uLmRlZmF1bHRzKGV2dCwgYXV4KTtcbiAgICBlbGVtLmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgfSxcbiAgYmluZDogZnVuY3Rpb24gYmluZChlbGVtLCBldmVudCwgZnVuYywgbmV3Qm9vbCkge1xuICAgIHZhciBib29sID0gbmV3Qm9vbCB8fCBmYWxzZTtcbiAgICBpZiAoZWxlbS5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmMsIGJvb2wpO1xuICAgIH0gZWxzZSBpZiAoZWxlbS5hdHRhY2hFdmVudCkge1xuICAgICAgZWxlbS5hdHRhY2hFdmVudCgnb24nICsgZXZlbnQsIGZ1bmMpO1xuICAgIH1cbiAgICByZXR1cm4gZG9tO1xuICB9LFxuICB1bmJpbmQ6IGZ1bmN0aW9uIHVuYmluZChlbGVtLCBldmVudCwgZnVuYywgbmV3Qm9vbCkge1xuICAgIHZhciBib29sID0gbmV3Qm9vbCB8fCBmYWxzZTtcbiAgICBpZiAoZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmMsIGJvb2wpO1xuICAgIH0gZWxzZSBpZiAoZWxlbS5kZXRhY2hFdmVudCkge1xuICAgICAgZWxlbS5kZXRhY2hFdmVudCgnb24nICsgZXZlbnQsIGZ1bmMpO1xuICAgIH1cbiAgICByZXR1cm4gZG9tO1xuICB9LFxuICBhZGRDbGFzczogZnVuY3Rpb24gYWRkQ2xhc3MoZWxlbSwgY2xhc3NOYW1lKSB7XG4gICAgaWYgKGVsZW0uY2xhc3NOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVsZW0uY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgIH0gZWxzZSBpZiAoZWxlbS5jbGFzc05hbWUgIT09IGNsYXNzTmFtZSkge1xuICAgICAgdmFyIGNsYXNzZXMgPSBlbGVtLmNsYXNzTmFtZS5zcGxpdCgvICsvKTtcbiAgICAgIGlmIChjbGFzc2VzLmluZGV4T2YoY2xhc3NOYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgICAgIGVsZW0uY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKCcgJykucmVwbGFjZSgvXlxccysvLCAnJykucmVwbGFjZSgvXFxzKyQvLCAnJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkb207XG4gIH0sXG4gIHJlbW92ZUNsYXNzOiBmdW5jdGlvbiByZW1vdmVDbGFzcyhlbGVtLCBjbGFzc05hbWUpIHtcbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICBpZiAoZWxlbS5jbGFzc05hbWUgPT09IGNsYXNzTmFtZSkge1xuICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBjbGFzc2VzID0gZWxlbS5jbGFzc05hbWUuc3BsaXQoLyArLyk7XG4gICAgICAgIHZhciBpbmRleCA9IGNsYXNzZXMuaW5kZXhPZihjbGFzc05hbWUpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgY2xhc3Nlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKCcgJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbS5jbGFzc05hbWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBkb207XG4gIH0sXG4gIGhhc0NsYXNzOiBmdW5jdGlvbiBoYXNDbGFzcyhlbGVtLCBjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cCgnKD86XnxcXFxccyspJyArIGNsYXNzTmFtZSArICcoPzpcXFxccyt8JCknKS50ZXN0KGVsZW0uY2xhc3NOYW1lKSB8fCBmYWxzZTtcbiAgfSxcbiAgZ2V0V2lkdGg6IGZ1bmN0aW9uIGdldFdpZHRoKGVsZW0pIHtcbiAgICB2YXIgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW0pO1xuICAgIHJldHVybiBjc3NWYWx1ZVRvUGl4ZWxzKHN0eWxlWydib3JkZXItbGVmdC13aWR0aCddKSArIGNzc1ZhbHVlVG9QaXhlbHMoc3R5bGVbJ2JvcmRlci1yaWdodC13aWR0aCddKSArIGNzc1ZhbHVlVG9QaXhlbHMoc3R5bGVbJ3BhZGRpbmctbGVmdCddKSArIGNzc1ZhbHVlVG9QaXhlbHMoc3R5bGVbJ3BhZGRpbmctcmlnaHQnXSkgKyBjc3NWYWx1ZVRvUGl4ZWxzKHN0eWxlLndpZHRoKTtcbiAgfSxcbiAgZ2V0SGVpZ2h0OiBmdW5jdGlvbiBnZXRIZWlnaHQoZWxlbSkge1xuICAgIHZhciBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbSk7XG4gICAgcmV0dXJuIGNzc1ZhbHVlVG9QaXhlbHMoc3R5bGVbJ2JvcmRlci10b3Atd2lkdGgnXSkgKyBjc3NWYWx1ZVRvUGl4ZWxzKHN0eWxlWydib3JkZXItYm90dG9tLXdpZHRoJ10pICsgY3NzVmFsdWVUb1BpeGVscyhzdHlsZVsncGFkZGluZy10b3AnXSkgKyBjc3NWYWx1ZVRvUGl4ZWxzKHN0eWxlWydwYWRkaW5nLWJvdHRvbSddKSArIGNzc1ZhbHVlVG9QaXhlbHMoc3R5bGUuaGVpZ2h0KTtcbiAgfSxcbiAgZ2V0T2Zmc2V0OiBmdW5jdGlvbiBnZXRPZmZzZXQoZWwpIHtcbiAgICB2YXIgZWxlbSA9IGVsO1xuICAgIHZhciBvZmZzZXQgPSB7IGxlZnQ6IDAsIHRvcDogMCB9O1xuICAgIGlmIChlbGVtLm9mZnNldFBhcmVudCkge1xuICAgICAgZG8ge1xuICAgICAgICBvZmZzZXQubGVmdCArPSBlbGVtLm9mZnNldExlZnQ7XG4gICAgICAgIG9mZnNldC50b3AgKz0gZWxlbS5vZmZzZXRUb3A7XG4gICAgICAgIGVsZW0gPSBlbGVtLm9mZnNldFBhcmVudDtcbiAgICAgIH0gd2hpbGUgKGVsZW0pO1xuICAgIH1cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9LFxuICBpc0FjdGl2ZTogZnVuY3Rpb24gaXNBY3RpdmUoZWxlbSkge1xuICAgIHJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIChlbGVtLnR5cGUgfHwgZWxlbS5ocmVmKTtcbiAgfVxufTtcblxudmFyIEJvb2xlYW5Db250cm9sbGVyID0gZnVuY3Rpb24gKF9Db250cm9sbGVyKSB7XG4gIGluaGVyaXRzKEJvb2xlYW5Db250cm9sbGVyLCBfQ29udHJvbGxlcik7XG4gIGZ1bmN0aW9uIEJvb2xlYW5Db250cm9sbGVyKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBCb29sZWFuQ29udHJvbGxlcik7XG4gICAgdmFyIF90aGlzMiA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEJvb2xlYW5Db250cm9sbGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQm9vbGVhbkNvbnRyb2xsZXIpKS5jYWxsKHRoaXMsIG9iamVjdCwgcHJvcGVydHkpKTtcbiAgICB2YXIgX3RoaXMgPSBfdGhpczI7XG4gICAgX3RoaXMyLl9fcHJldiA9IF90aGlzMi5nZXRWYWx1ZSgpO1xuICAgIF90aGlzMi5fX2NoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICBfdGhpczIuX19jaGVja2JveC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnY2hlY2tib3gnKTtcbiAgICBmdW5jdGlvbiBvbkNoYW5nZSgpIHtcbiAgICAgIF90aGlzLnNldFZhbHVlKCFfdGhpcy5fX3ByZXYpO1xuICAgIH1cbiAgICBkb20uYmluZChfdGhpczIuX19jaGVja2JveCwgJ2NoYW5nZScsIG9uQ2hhbmdlLCBmYWxzZSk7XG4gICAgX3RoaXMyLmRvbUVsZW1lbnQuYXBwZW5kQ2hpbGQoX3RoaXMyLl9fY2hlY2tib3gpO1xuICAgIF90aGlzMi51cGRhdGVEaXNwbGF5KCk7XG4gICAgcmV0dXJuIF90aGlzMjtcbiAgfVxuICBjcmVhdGVDbGFzcyhCb29sZWFuQ29udHJvbGxlciwgW3tcbiAgICBrZXk6ICdzZXRWYWx1ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFZhbHVlKHYpIHtcbiAgICAgIHZhciB0b1JldHVybiA9IGdldChCb29sZWFuQ29udHJvbGxlci5wcm90b3R5cGUuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihCb29sZWFuQ29udHJvbGxlci5wcm90b3R5cGUpLCAnc2V0VmFsdWUnLCB0aGlzKS5jYWxsKHRoaXMsIHYpO1xuICAgICAgaWYgKHRoaXMuX19vbkZpbmlzaENoYW5nZSkge1xuICAgICAgICB0aGlzLl9fb25GaW5pc2hDaGFuZ2UuY2FsbCh0aGlzLCB0aGlzLmdldFZhbHVlKCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5fX3ByZXYgPSB0aGlzLmdldFZhbHVlKCk7XG4gICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAndXBkYXRlRGlzcGxheScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZURpc3BsYXkoKSB7XG4gICAgICBpZiAodGhpcy5nZXRWYWx1ZSgpID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX19jaGVja2JveC5zZXRBdHRyaWJ1dGUoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpO1xuICAgICAgICB0aGlzLl9fY2hlY2tib3guY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX19wcmV2ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX19jaGVja2JveC5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX19wcmV2ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0KEJvb2xlYW5Db250cm9sbGVyLnByb3RvdHlwZS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEJvb2xlYW5Db250cm9sbGVyLnByb3RvdHlwZSksICd1cGRhdGVEaXNwbGF5JywgdGhpcykuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIEJvb2xlYW5Db250cm9sbGVyO1xufShDb250cm9sbGVyKTtcblxudmFyIE9wdGlvbkNvbnRyb2xsZXIgPSBmdW5jdGlvbiAoX0NvbnRyb2xsZXIpIHtcbiAgaW5oZXJpdHMoT3B0aW9uQ29udHJvbGxlciwgX0NvbnRyb2xsZXIpO1xuICBmdW5jdGlvbiBPcHRpb25Db250cm9sbGVyKG9iamVjdCwgcHJvcGVydHksIG9wdHMpIHtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBPcHRpb25Db250cm9sbGVyKTtcbiAgICB2YXIgX3RoaXMyID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoT3B0aW9uQ29udHJvbGxlci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKE9wdGlvbkNvbnRyb2xsZXIpKS5jYWxsKHRoaXMsIG9iamVjdCwgcHJvcGVydHkpKTtcbiAgICB2YXIgb3B0aW9ucyA9IG9wdHM7XG4gICAgdmFyIF90aGlzID0gX3RoaXMyO1xuICAgIF90aGlzMi5fX3NlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO1xuICAgIGlmIChDb21tb24uaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgdmFyIG1hcCA9IHt9O1xuICAgICAgQ29tbW9uLmVhY2gob3B0aW9ucywgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgbWFwW2VsZW1lbnRdID0gZWxlbWVudDtcbiAgICAgIH0pO1xuICAgICAgb3B0aW9ucyA9IG1hcDtcbiAgICB9XG4gICAgQ29tbW9uLmVhY2gob3B0aW9ucywgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIHZhciBvcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcbiAgICAgIG9wdC5pbm5lckhUTUwgPSBrZXk7XG4gICAgICBvcHQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIHZhbHVlKTtcbiAgICAgIF90aGlzLl9fc2VsZWN0LmFwcGVuZENoaWxkKG9wdCk7XG4gICAgfSk7XG4gICAgX3RoaXMyLnVwZGF0ZURpc3BsYXkoKTtcbiAgICBkb20uYmluZChfdGhpczIuX19zZWxlY3QsICdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZGVzaXJlZFZhbHVlID0gdGhpcy5vcHRpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0udmFsdWU7XG4gICAgICBfdGhpcy5zZXRWYWx1ZShkZXNpcmVkVmFsdWUpO1xuICAgIH0pO1xuICAgIF90aGlzMi5kb21FbGVtZW50LmFwcGVuZENoaWxkKF90aGlzMi5fX3NlbGVjdCk7XG4gICAgcmV0dXJuIF90aGlzMjtcbiAgfVxuICBjcmVhdGVDbGFzcyhPcHRpb25Db250cm9sbGVyLCBbe1xuICAgIGtleTogJ3NldFZhbHVlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0VmFsdWUodikge1xuICAgICAgdmFyIHRvUmV0dXJuID0gZ2V0KE9wdGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT3B0aW9uQ29udHJvbGxlci5wcm90b3R5cGUpLCAnc2V0VmFsdWUnLCB0aGlzKS5jYWxsKHRoaXMsIHYpO1xuICAgICAgaWYgKHRoaXMuX19vbkZpbmlzaENoYW5nZSkge1xuICAgICAgICB0aGlzLl9fb25GaW5pc2hDaGFuZ2UuY2FsbCh0aGlzLCB0aGlzLmdldFZhbHVlKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3VwZGF0ZURpc3BsYXknLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5KCkge1xuICAgICAgaWYgKGRvbS5pc0FjdGl2ZSh0aGlzLl9fc2VsZWN0KSkgcmV0dXJuIHRoaXM7XG4gICAgICB0aGlzLl9fc2VsZWN0LnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xuICAgICAgcmV0dXJuIGdldChPcHRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKE9wdGlvbkNvbnRyb2xsZXIucHJvdG90eXBlKSwgJ3VwZGF0ZURpc3BsYXknLCB0aGlzKS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gT3B0aW9uQ29udHJvbGxlcjtcbn0oQ29udHJvbGxlcik7XG5cbnZhciBTdHJpbmdDb250cm9sbGVyID0gZnVuY3Rpb24gKF9Db250cm9sbGVyKSB7XG4gIGluaGVyaXRzKFN0cmluZ0NvbnRyb2xsZXIsIF9Db250cm9sbGVyKTtcbiAgZnVuY3Rpb24gU3RyaW5nQ29udHJvbGxlcihvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RyaW5nQ29udHJvbGxlcik7XG4gICAgdmFyIF90aGlzMiA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFN0cmluZ0NvbnRyb2xsZXIuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihTdHJpbmdDb250cm9sbGVyKSkuY2FsbCh0aGlzLCBvYmplY3QsIHByb3BlcnR5KSk7XG4gICAgdmFyIF90aGlzID0gX3RoaXMyO1xuICAgIGZ1bmN0aW9uIG9uQ2hhbmdlKCkge1xuICAgICAgX3RoaXMuc2V0VmFsdWUoX3RoaXMuX19pbnB1dC52YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uQmx1cigpIHtcbiAgICAgIGlmIChfdGhpcy5fX29uRmluaXNoQ2hhbmdlKSB7XG4gICAgICAgIF90aGlzLl9fb25GaW5pc2hDaGFuZ2UuY2FsbChfdGhpcywgX3RoaXMuZ2V0VmFsdWUoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIF90aGlzMi5fX2lucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICBfdGhpczIuX19pbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dCcpO1xuICAgIGRvbS5iaW5kKF90aGlzMi5fX2lucHV0LCAna2V5dXAnLCBvbkNoYW5nZSk7XG4gICAgZG9tLmJpbmQoX3RoaXMyLl9faW5wdXQsICdjaGFuZ2UnLCBvbkNoYW5nZSk7XG4gICAgZG9tLmJpbmQoX3RoaXMyLl9faW5wdXQsICdibHVyJywgb25CbHVyKTtcbiAgICBkb20uYmluZChfdGhpczIuX19pbnB1dCwgJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgdGhpcy5ibHVyKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX3RoaXMyLnVwZGF0ZURpc3BsYXkoKTtcbiAgICBfdGhpczIuZG9tRWxlbWVudC5hcHBlbmRDaGlsZChfdGhpczIuX19pbnB1dCk7XG4gICAgcmV0dXJuIF90aGlzMjtcbiAgfVxuICBjcmVhdGVDbGFzcyhTdHJpbmdDb250cm9sbGVyLCBbe1xuICAgIGtleTogJ3VwZGF0ZURpc3BsYXknLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5KCkge1xuICAgICAgaWYgKCFkb20uaXNBY3RpdmUodGhpcy5fX2lucHV0KSkge1xuICAgICAgICB0aGlzLl9faW5wdXQudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0KFN0cmluZ0NvbnRyb2xsZXIucHJvdG90eXBlLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoU3RyaW5nQ29udHJvbGxlci5wcm90b3R5cGUpLCAndXBkYXRlRGlzcGxheScsIHRoaXMpLmNhbGwodGhpcyk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBTdHJpbmdDb250cm9sbGVyO1xufShDb250cm9sbGVyKTtcblxuZnVuY3Rpb24gbnVtRGVjaW1hbHMoeCkge1xuICB2YXIgX3ggPSB4LnRvU3RyaW5nKCk7XG4gIGlmIChfeC5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgIHJldHVybiBfeC5sZW5ndGggLSBfeC5pbmRleE9mKCcuJykgLSAxO1xuICB9XG4gIHJldHVybiAwO1xufVxudmFyIE51bWJlckNvbnRyb2xsZXIgPSBmdW5jdGlvbiAoX0NvbnRyb2xsZXIpIHtcbiAgaW5oZXJpdHMoTnVtYmVyQ29udHJvbGxlciwgX0NvbnRyb2xsZXIpO1xuICBmdW5jdGlvbiBOdW1iZXJDb250cm9sbGVyKG9iamVjdCwgcHJvcGVydHksIHBhcmFtcykge1xuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIE51bWJlckNvbnRyb2xsZXIpO1xuICAgIHZhciBfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKE51bWJlckNvbnRyb2xsZXIuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihOdW1iZXJDb250cm9sbGVyKSkuY2FsbCh0aGlzLCBvYmplY3QsIHByb3BlcnR5KSk7XG4gICAgdmFyIF9wYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgX3RoaXMuX19taW4gPSBfcGFyYW1zLm1pbjtcbiAgICBfdGhpcy5fX21heCA9IF9wYXJhbXMubWF4O1xuICAgIF90aGlzLl9fc3RlcCA9IF9wYXJhbXMuc3RlcDtcbiAgICBpZiAoQ29tbW9uLmlzVW5kZWZpbmVkKF90aGlzLl9fc3RlcCkpIHtcbiAgICAgIGlmIChfdGhpcy5pbml0aWFsVmFsdWUgPT09IDApIHtcbiAgICAgICAgX3RoaXMuX19pbXBsaWVkU3RlcCA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5fX2ltcGxpZWRTdGVwID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5hYnMoX3RoaXMuaW5pdGlhbFZhbHVlKSkgLyBNYXRoLkxOMTApKSAvIDEwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBfdGhpcy5fX2ltcGxpZWRTdGVwID0gX3RoaXMuX19zdGVwO1xuICAgIH1cbiAgICBfdGhpcy5fX3ByZWNpc2lvbiA9IG51bURlY2ltYWxzKF90aGlzLl9faW1wbGllZFN0ZXApO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBjcmVhdGVDbGFzcyhOdW1iZXJDb250cm9sbGVyLCBbe1xuICAgIGtleTogJ3NldFZhbHVlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0VmFsdWUodikge1xuICAgICAgdmFyIF92ID0gdjtcbiAgICAgIGlmICh0aGlzLl9fbWluICE9PSB1bmRlZmluZWQgJiYgX3YgPCB0aGlzLl9fbWluKSB7XG4gICAgICAgIF92ID0gdGhpcy5fX21pbjtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fX21heCAhPT0gdW5kZWZpbmVkICYmIF92ID4gdGhpcy5fX21heCkge1xuICAgICAgICBfdiA9IHRoaXMuX19tYXg7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fX3N0ZXAgIT09IHVuZGVmaW5lZCAmJiBfdiAlIHRoaXMuX19zdGVwICE9PSAwKSB7XG4gICAgICAgIF92ID0gTWF0aC5yb3VuZChfdiAvIHRoaXMuX19zdGVwKSAqIHRoaXMuX19zdGVwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldChOdW1iZXJDb250cm9sbGVyLnByb3RvdHlwZS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKE51bWJlckNvbnRyb2xsZXIucHJvdG90eXBlKSwgJ3NldFZhbHVlJywgdGhpcykuY2FsbCh0aGlzLCBfdik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnbWluJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbWluKG1pblZhbHVlKSB7XG4gICAgICB0aGlzLl9fbWluID0gbWluVmFsdWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdtYXgnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBtYXgobWF4VmFsdWUpIHtcbiAgICAgIHRoaXMuX19tYXggPSBtYXhWYWx1ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3N0ZXAnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdGVwKHN0ZXBWYWx1ZSkge1xuICAgICAgdGhpcy5fX3N0ZXAgPSBzdGVwVmFsdWU7XG4gICAgICB0aGlzLl9faW1wbGllZFN0ZXAgPSBzdGVwVmFsdWU7XG4gICAgICB0aGlzLl9fcHJlY2lzaW9uID0gbnVtRGVjaW1hbHMoc3RlcFZhbHVlKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gTnVtYmVyQ29udHJvbGxlcjtcbn0oQ29udHJvbGxlcik7XG5cbmZ1bmN0aW9uIHJvdW5kVG9EZWNpbWFsKHZhbHVlLCBkZWNpbWFscykge1xuICB2YXIgdGVuVG8gPSBNYXRoLnBvdygxMCwgZGVjaW1hbHMpO1xuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIHRlblRvKSAvIHRlblRvO1xufVxudmFyIE51bWJlckNvbnRyb2xsZXJCb3ggPSBmdW5jdGlvbiAoX051bWJlckNvbnRyb2xsZXIpIHtcbiAgaW5oZXJpdHMoTnVtYmVyQ29udHJvbGxlckJveCwgX051bWJlckNvbnRyb2xsZXIpO1xuICBmdW5jdGlvbiBOdW1iZXJDb250cm9sbGVyQm94KG9iamVjdCwgcHJvcGVydHksIHBhcmFtcykge1xuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIE51bWJlckNvbnRyb2xsZXJCb3gpO1xuICAgIHZhciBfdGhpczIgPSBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChOdW1iZXJDb250cm9sbGVyQm94Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTnVtYmVyQ29udHJvbGxlckJveCkpLmNhbGwodGhpcywgb2JqZWN0LCBwcm9wZXJ0eSwgcGFyYW1zKSk7XG4gICAgX3RoaXMyLl9fdHJ1bmNhdGlvblN1c3BlbmRlZCA9IGZhbHNlO1xuICAgIHZhciBfdGhpcyA9IF90aGlzMjtcbiAgICB2YXIgcHJldlkgPSB2b2lkIDA7XG4gICAgZnVuY3Rpb24gb25DaGFuZ2UoKSB7XG4gICAgICB2YXIgYXR0ZW1wdGVkID0gcGFyc2VGbG9hdChfdGhpcy5fX2lucHV0LnZhbHVlKTtcbiAgICAgIGlmICghQ29tbW9uLmlzTmFOKGF0dGVtcHRlZCkpIHtcbiAgICAgICAgX3RoaXMuc2V0VmFsdWUoYXR0ZW1wdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gb25GaW5pc2goKSB7XG4gICAgICBpZiAoX3RoaXMuX19vbkZpbmlzaENoYW5nZSkge1xuICAgICAgICBfdGhpcy5fX29uRmluaXNoQ2hhbmdlLmNhbGwoX3RoaXMsIF90aGlzLmdldFZhbHVlKCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBvbkJsdXIoKSB7XG4gICAgICBvbkZpbmlzaCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvbk1vdXNlRHJhZyhlKSB7XG4gICAgICB2YXIgZGlmZiA9IHByZXZZIC0gZS5jbGllbnRZO1xuICAgICAgX3RoaXMuc2V0VmFsdWUoX3RoaXMuZ2V0VmFsdWUoKSArIGRpZmYgKiBfdGhpcy5fX2ltcGxpZWRTdGVwKTtcbiAgICAgIHByZXZZID0gZS5jbGllbnRZO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvbk1vdXNlVXAoKSB7XG4gICAgICBkb20udW5iaW5kKHdpbmRvdywgJ21vdXNlbW92ZScsIG9uTW91c2VEcmFnKTtcbiAgICAgIGRvbS51bmJpbmQod2luZG93LCAnbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICBvbkZpbmlzaCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7XG4gICAgICBkb20uYmluZCh3aW5kb3csICdtb3VzZW1vdmUnLCBvbk1vdXNlRHJhZyk7XG4gICAgICBkb20uYmluZCh3aW5kb3csICdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICAgIHByZXZZID0gZS5jbGllbnRZO1xuICAgIH1cbiAgICBfdGhpczIuX19pbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgX3RoaXMyLl9faW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQnKTtcbiAgICBkb20uYmluZChfdGhpczIuX19pbnB1dCwgJ2NoYW5nZScsIG9uQ2hhbmdlKTtcbiAgICBkb20uYmluZChfdGhpczIuX19pbnB1dCwgJ2JsdXInLCBvbkJsdXIpO1xuICAgIGRvbS5iaW5kKF90aGlzMi5fX2lucHV0LCAnbW91c2Vkb3duJywgb25Nb3VzZURvd24pO1xuICAgIGRvbS5iaW5kKF90aGlzMi5fX2lucHV0LCAna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgICBfdGhpcy5fX3RydW5jYXRpb25TdXNwZW5kZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmJsdXIoKTtcbiAgICAgICAgX3RoaXMuX190cnVuY2F0aW9uU3VzcGVuZGVkID0gZmFsc2U7XG4gICAgICAgIG9uRmluaXNoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgX3RoaXMyLnVwZGF0ZURpc3BsYXkoKTtcbiAgICBfdGhpczIuZG9tRWxlbWVudC5hcHBlbmRDaGlsZChfdGhpczIuX19pbnB1dCk7XG4gICAgcmV0dXJuIF90aGlzMjtcbiAgfVxuICBjcmVhdGVDbGFzcyhOdW1iZXJDb250cm9sbGVyQm94LCBbe1xuICAgIGtleTogJ3VwZGF0ZURpc3BsYXknLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5KCkge1xuICAgICAgdGhpcy5fX2lucHV0LnZhbHVlID0gdGhpcy5fX3RydW5jYXRpb25TdXNwZW5kZWQgPyB0aGlzLmdldFZhbHVlKCkgOiByb3VuZFRvRGVjaW1hbCh0aGlzLmdldFZhbHVlKCksIHRoaXMuX19wcmVjaXNpb24pO1xuICAgICAgcmV0dXJuIGdldChOdW1iZXJDb250cm9sbGVyQm94LnByb3RvdHlwZS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKE51bWJlckNvbnRyb2xsZXJCb3gucHJvdG90eXBlKSwgJ3VwZGF0ZURpc3BsYXknLCB0aGlzKS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gTnVtYmVyQ29udHJvbGxlckJveDtcbn0oTnVtYmVyQ29udHJvbGxlcik7XG5cbmZ1bmN0aW9uIG1hcCh2LCBpMSwgaTIsIG8xLCBvMikge1xuICByZXR1cm4gbzEgKyAobzIgLSBvMSkgKiAoKHYgLSBpMSkgLyAoaTIgLSBpMSkpO1xufVxudmFyIE51bWJlckNvbnRyb2xsZXJTbGlkZXIgPSBmdW5jdGlvbiAoX051bWJlckNvbnRyb2xsZXIpIHtcbiAgaW5oZXJpdHMoTnVtYmVyQ29udHJvbGxlclNsaWRlciwgX051bWJlckNvbnRyb2xsZXIpO1xuICBmdW5jdGlvbiBOdW1iZXJDb250cm9sbGVyU2xpZGVyKG9iamVjdCwgcHJvcGVydHksIG1pbiwgbWF4LCBzdGVwKSB7XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgTnVtYmVyQ29udHJvbGxlclNsaWRlcik7XG4gICAgdmFyIF90aGlzMiA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKE51bWJlckNvbnRyb2xsZXJTbGlkZXIuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihOdW1iZXJDb250cm9sbGVyU2xpZGVyKSkuY2FsbCh0aGlzLCBvYmplY3QsIHByb3BlcnR5LCB7IG1pbjogbWluLCBtYXg6IG1heCwgc3RlcDogc3RlcCB9KSk7XG4gICAgdmFyIF90aGlzID0gX3RoaXMyO1xuICAgIF90aGlzMi5fX2JhY2tncm91bmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBfdGhpczIuX19mb3JlZ3JvdW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZG9tLmJpbmQoX3RoaXMyLl9fYmFja2dyb3VuZCwgJ21vdXNlZG93bicsIG9uTW91c2VEb3duKTtcbiAgICBkb20uYmluZChfdGhpczIuX19iYWNrZ3JvdW5kLCAndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCk7XG4gICAgZG9tLmFkZENsYXNzKF90aGlzMi5fX2JhY2tncm91bmQsICdzbGlkZXInKTtcbiAgICBkb20uYWRkQ2xhc3MoX3RoaXMyLl9fZm9yZWdyb3VuZCwgJ3NsaWRlci1mZycpO1xuICAgIGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHtcbiAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgZG9tLmJpbmQod2luZG93LCAnbW91c2Vtb3ZlJywgb25Nb3VzZURyYWcpO1xuICAgICAgZG9tLmJpbmQod2luZG93LCAnbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICBvbk1vdXNlRHJhZyhlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25Nb3VzZURyYWcoZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdmFyIGJnUmVjdCA9IF90aGlzLl9fYmFja2dyb3VuZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIF90aGlzLnNldFZhbHVlKG1hcChlLmNsaWVudFgsIGJnUmVjdC5sZWZ0LCBiZ1JlY3QucmlnaHQsIF90aGlzLl9fbWluLCBfdGhpcy5fX21heCkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvbk1vdXNlVXAoKSB7XG4gICAgICBkb20udW5iaW5kKHdpbmRvdywgJ21vdXNlbW92ZScsIG9uTW91c2VEcmFnKTtcbiAgICAgIGRvbS51bmJpbmQod2luZG93LCAnbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICBpZiAoX3RoaXMuX19vbkZpbmlzaENoYW5nZSkge1xuICAgICAgICBfdGhpcy5fX29uRmluaXNoQ2hhbmdlLmNhbGwoX3RoaXMsIF90aGlzLmdldFZhbHVlKCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBvblRvdWNoU3RhcnQoZSkge1xuICAgICAgaWYgKGUudG91Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZG9tLmJpbmQod2luZG93LCAndG91Y2htb3ZlJywgb25Ub3VjaE1vdmUpO1xuICAgICAgZG9tLmJpbmQod2luZG93LCAndG91Y2hlbmQnLCBvblRvdWNoRW5kKTtcbiAgICAgIG9uVG91Y2hNb3ZlKGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvblRvdWNoTW92ZShlKSB7XG4gICAgICB2YXIgY2xpZW50WCA9IGUudG91Y2hlc1swXS5jbGllbnRYO1xuICAgICAgdmFyIGJnUmVjdCA9IF90aGlzLl9fYmFja2dyb3VuZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIF90aGlzLnNldFZhbHVlKG1hcChjbGllbnRYLCBiZ1JlY3QubGVmdCwgYmdSZWN0LnJpZ2h0LCBfdGhpcy5fX21pbiwgX3RoaXMuX19tYXgpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25Ub3VjaEVuZCgpIHtcbiAgICAgIGRvbS51bmJpbmQod2luZG93LCAndG91Y2htb3ZlJywgb25Ub3VjaE1vdmUpO1xuICAgICAgZG9tLnVuYmluZCh3aW5kb3csICd0b3VjaGVuZCcsIG9uVG91Y2hFbmQpO1xuICAgICAgaWYgKF90aGlzLl9fb25GaW5pc2hDaGFuZ2UpIHtcbiAgICAgICAgX3RoaXMuX19vbkZpbmlzaENoYW5nZS5jYWxsKF90aGlzLCBfdGhpcy5nZXRWYWx1ZSgpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX3RoaXMyLnVwZGF0ZURpc3BsYXkoKTtcbiAgICBfdGhpczIuX19iYWNrZ3JvdW5kLmFwcGVuZENoaWxkKF90aGlzMi5fX2ZvcmVncm91bmQpO1xuICAgIF90aGlzMi5kb21FbGVtZW50LmFwcGVuZENoaWxkKF90aGlzMi5fX2JhY2tncm91bmQpO1xuICAgIHJldHVybiBfdGhpczI7XG4gIH1cbiAgY3JlYXRlQ2xhc3MoTnVtYmVyQ29udHJvbGxlclNsaWRlciwgW3tcbiAgICBrZXk6ICd1cGRhdGVEaXNwbGF5JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlRGlzcGxheSgpIHtcbiAgICAgIHZhciBwY3QgPSAodGhpcy5nZXRWYWx1ZSgpIC0gdGhpcy5fX21pbikgLyAodGhpcy5fX21heCAtIHRoaXMuX19taW4pO1xuICAgICAgdGhpcy5fX2ZvcmVncm91bmQuc3R5bGUud2lkdGggPSBwY3QgKiAxMDAgKyAnJSc7XG4gICAgICByZXR1cm4gZ2V0KE51bWJlckNvbnRyb2xsZXJTbGlkZXIucHJvdG90eXBlLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTnVtYmVyQ29udHJvbGxlclNsaWRlci5wcm90b3R5cGUpLCAndXBkYXRlRGlzcGxheScsIHRoaXMpLmNhbGwodGhpcyk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBOdW1iZXJDb250cm9sbGVyU2xpZGVyO1xufShOdW1iZXJDb250cm9sbGVyKTtcblxudmFyIEZ1bmN0aW9uQ29udHJvbGxlciA9IGZ1bmN0aW9uIChfQ29udHJvbGxlcikge1xuICBpbmhlcml0cyhGdW5jdGlvbkNvbnRyb2xsZXIsIF9Db250cm9sbGVyKTtcbiAgZnVuY3Rpb24gRnVuY3Rpb25Db250cm9sbGVyKG9iamVjdCwgcHJvcGVydHksIHRleHQpIHtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBGdW5jdGlvbkNvbnRyb2xsZXIpO1xuICAgIHZhciBfdGhpczIgPSBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGdW5jdGlvbkNvbnRyb2xsZXIuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGdW5jdGlvbkNvbnRyb2xsZXIpKS5jYWxsKHRoaXMsIG9iamVjdCwgcHJvcGVydHkpKTtcbiAgICB2YXIgX3RoaXMgPSBfdGhpczI7XG4gICAgX3RoaXMyLl9fYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgX3RoaXMyLl9fYnV0dG9uLmlubmVySFRNTCA9IHRleHQgPT09IHVuZGVmaW5lZCA/ICdGaXJlJyA6IHRleHQ7XG4gICAgZG9tLmJpbmQoX3RoaXMyLl9fYnV0dG9uLCAnY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgX3RoaXMuZmlyZSgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGRvbS5hZGRDbGFzcyhfdGhpczIuX19idXR0b24sICdidXR0b24nKTtcbiAgICBfdGhpczIuZG9tRWxlbWVudC5hcHBlbmRDaGlsZChfdGhpczIuX19idXR0b24pO1xuICAgIHJldHVybiBfdGhpczI7XG4gIH1cbiAgY3JlYXRlQ2xhc3MoRnVuY3Rpb25Db250cm9sbGVyLCBbe1xuICAgIGtleTogJ2ZpcmUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmaXJlKCkge1xuICAgICAgaWYgKHRoaXMuX19vbkNoYW5nZSkge1xuICAgICAgICB0aGlzLl9fb25DaGFuZ2UuY2FsbCh0aGlzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ2V0VmFsdWUoKS5jYWxsKHRoaXMub2JqZWN0KTtcbiAgICAgIGlmICh0aGlzLl9fb25GaW5pc2hDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5fX29uRmluaXNoQ2hhbmdlLmNhbGwodGhpcywgdGhpcy5nZXRWYWx1ZSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIEZ1bmN0aW9uQ29udHJvbGxlcjtcbn0oQ29udHJvbGxlcik7XG5cbnZhciBDb2xvckNvbnRyb2xsZXIgPSBmdW5jdGlvbiAoX0NvbnRyb2xsZXIpIHtcbiAgaW5oZXJpdHMoQ29sb3JDb250cm9sbGVyLCBfQ29udHJvbGxlcik7XG4gIGZ1bmN0aW9uIENvbG9yQ29udHJvbGxlcihvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29sb3JDb250cm9sbGVyKTtcbiAgICB2YXIgX3RoaXMyID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29sb3JDb250cm9sbGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ29sb3JDb250cm9sbGVyKSkuY2FsbCh0aGlzLCBvYmplY3QsIHByb3BlcnR5KSk7XG4gICAgX3RoaXMyLl9fY29sb3IgPSBuZXcgQ29sb3IoX3RoaXMyLmdldFZhbHVlKCkpO1xuICAgIF90aGlzMi5fX3RlbXAgPSBuZXcgQ29sb3IoMCk7XG4gICAgdmFyIF90aGlzID0gX3RoaXMyO1xuICAgIF90aGlzMi5kb21FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZG9tLm1ha2VTZWxlY3RhYmxlKF90aGlzMi5kb21FbGVtZW50LCBmYWxzZSk7XG4gICAgX3RoaXMyLl9fc2VsZWN0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBfdGhpczIuX19zZWxlY3Rvci5jbGFzc05hbWUgPSAnc2VsZWN0b3InO1xuICAgIF90aGlzMi5fX3NhdHVyYXRpb25fZmllbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBfdGhpczIuX19zYXR1cmF0aW9uX2ZpZWxkLmNsYXNzTmFtZSA9ICdzYXR1cmF0aW9uLWZpZWxkJztcbiAgICBfdGhpczIuX19maWVsZF9rbm9iID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgX3RoaXMyLl9fZmllbGRfa25vYi5jbGFzc05hbWUgPSAnZmllbGQta25vYic7XG4gICAgX3RoaXMyLl9fZmllbGRfa25vYl9ib3JkZXIgPSAnMnB4IHNvbGlkICc7XG4gICAgX3RoaXMyLl9faHVlX2tub2IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBfdGhpczIuX19odWVfa25vYi5jbGFzc05hbWUgPSAnaHVlLWtub2InO1xuICAgIF90aGlzMi5fX2h1ZV9maWVsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIF90aGlzMi5fX2h1ZV9maWVsZC5jbGFzc05hbWUgPSAnaHVlLWZpZWxkJztcbiAgICBfdGhpczIuX19pbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgX3RoaXMyLl9faW5wdXQudHlwZSA9ICd0ZXh0JztcbiAgICBfdGhpczIuX19pbnB1dF90ZXh0U2hhZG93ID0gJzAgMXB4IDFweCAnO1xuICAgIGRvbS5iaW5kKF90aGlzMi5fX2lucHV0LCAna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgICBvbkJsdXIuY2FsbCh0aGlzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkb20uYmluZChfdGhpczIuX19pbnB1dCwgJ2JsdXInLCBvbkJsdXIpO1xuICAgIGRvbS5iaW5kKF90aGlzMi5fX3NlbGVjdG9yLCAnbW91c2Vkb3duJywgZnVuY3Rpb24gKCkgICAgICAgIHtcbiAgICAgIGRvbS5hZGRDbGFzcyh0aGlzLCAnZHJhZycpLmJpbmQod2luZG93LCAnbW91c2V1cCcsIGZ1bmN0aW9uICgpICAgICAgICB7XG4gICAgICAgIGRvbS5yZW1vdmVDbGFzcyhfdGhpcy5fX3NlbGVjdG9yLCAnZHJhZycpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZG9tLmJpbmQoX3RoaXMyLl9fc2VsZWN0b3IsICd0b3VjaHN0YXJ0JywgZnVuY3Rpb24gKCkgICAgICAgIHtcbiAgICAgIGRvbS5hZGRDbGFzcyh0aGlzLCAnZHJhZycpLmJpbmQod2luZG93LCAndG91Y2hlbmQnLCBmdW5jdGlvbiAoKSAgICAgICAge1xuICAgICAgICBkb20ucmVtb3ZlQ2xhc3MoX3RoaXMuX19zZWxlY3RvciwgJ2RyYWcnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHZhciB2YWx1ZUZpZWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgQ29tbW9uLmV4dGVuZChfdGhpczIuX19zZWxlY3Rvci5zdHlsZSwge1xuICAgICAgd2lkdGg6ICcxMjJweCcsXG4gICAgICBoZWlnaHQ6ICcxMDJweCcsXG4gICAgICBwYWRkaW5nOiAnM3B4JyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyMyMjInLFxuICAgICAgYm94U2hhZG93OiAnMHB4IDFweCAzcHggcmdiYSgwLDAsMCwwLjMpJ1xuICAgIH0pO1xuICAgIENvbW1vbi5leHRlbmQoX3RoaXMyLl9fZmllbGRfa25vYi5zdHlsZSwge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB3aWR0aDogJzEycHgnLFxuICAgICAgaGVpZ2h0OiAnMTJweCcsXG4gICAgICBib3JkZXI6IF90aGlzMi5fX2ZpZWxkX2tub2JfYm9yZGVyICsgKF90aGlzMi5fX2NvbG9yLnYgPCAwLjUgPyAnI2ZmZicgOiAnIzAwMCcpLFxuICAgICAgYm94U2hhZG93OiAnMHB4IDFweCAzcHggcmdiYSgwLDAsMCwwLjUpJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgekluZGV4OiAxXG4gICAgfSk7XG4gICAgQ29tbW9uLmV4dGVuZChfdGhpczIuX19odWVfa25vYi5zdHlsZSwge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB3aWR0aDogJzE1cHgnLFxuICAgICAgaGVpZ2h0OiAnMnB4JyxcbiAgICAgIGJvcmRlclJpZ2h0OiAnNHB4IHNvbGlkICNmZmYnLFxuICAgICAgekluZGV4OiAxXG4gICAgfSk7XG4gICAgQ29tbW9uLmV4dGVuZChfdGhpczIuX19zYXR1cmF0aW9uX2ZpZWxkLnN0eWxlLCB7XG4gICAgICB3aWR0aDogJzEwMHB4JyxcbiAgICAgIGhlaWdodDogJzEwMHB4JyxcbiAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjNTU1JyxcbiAgICAgIG1hcmdpblJpZ2h0OiAnM3B4JyxcbiAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgY3Vyc29yOiAncG9pbnRlcidcbiAgICB9KTtcbiAgICBDb21tb24uZXh0ZW5kKHZhbHVlRmllbGQuc3R5bGUsIHtcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgIGJhY2tncm91bmQ6ICdub25lJ1xuICAgIH0pO1xuICAgIGxpbmVhckdyYWRpZW50KHZhbHVlRmllbGQsICd0b3AnLCAncmdiYSgwLDAsMCwwKScsICcjMDAwJyk7XG4gICAgQ29tbW9uLmV4dGVuZChfdGhpczIuX19odWVfZmllbGQuc3R5bGUsIHtcbiAgICAgIHdpZHRoOiAnMTVweCcsXG4gICAgICBoZWlnaHQ6ICcxMDBweCcsXG4gICAgICBib3JkZXI6ICcxcHggc29saWQgIzU1NScsXG4gICAgICBjdXJzb3I6ICducy1yZXNpemUnLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB0b3A6ICczcHgnLFxuICAgICAgcmlnaHQ6ICczcHgnXG4gICAgfSk7XG4gICAgaHVlR3JhZGllbnQoX3RoaXMyLl9faHVlX2ZpZWxkKTtcbiAgICBDb21tb24uZXh0ZW5kKF90aGlzMi5fX2lucHV0LnN0eWxlLCB7XG4gICAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgY29sb3I6ICcjZmZmJyxcbiAgICAgIGJvcmRlcjogMCxcbiAgICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICAgIHRleHRTaGFkb3c6IF90aGlzMi5fX2lucHV0X3RleHRTaGFkb3cgKyAncmdiYSgwLDAsMCwwLjcpJ1xuICAgIH0pO1xuICAgIGRvbS5iaW5kKF90aGlzMi5fX3NhdHVyYXRpb25fZmllbGQsICdtb3VzZWRvd24nLCBmaWVsZERvd24pO1xuICAgIGRvbS5iaW5kKF90aGlzMi5fX3NhdHVyYXRpb25fZmllbGQsICd0b3VjaHN0YXJ0JywgZmllbGREb3duKTtcbiAgICBkb20uYmluZChfdGhpczIuX19maWVsZF9rbm9iLCAnbW91c2Vkb3duJywgZmllbGREb3duKTtcbiAgICBkb20uYmluZChfdGhpczIuX19maWVsZF9rbm9iLCAndG91Y2hzdGFydCcsIGZpZWxkRG93bik7XG4gICAgZG9tLmJpbmQoX3RoaXMyLl9faHVlX2ZpZWxkLCAnbW91c2Vkb3duJywgZmllbGREb3duSCk7XG4gICAgZG9tLmJpbmQoX3RoaXMyLl9faHVlX2ZpZWxkLCAndG91Y2hzdGFydCcsIGZpZWxkRG93bkgpO1xuICAgIGZ1bmN0aW9uIGZpZWxkRG93bihlKSB7XG4gICAgICBzZXRTVihlKTtcbiAgICAgIGRvbS5iaW5kKHdpbmRvdywgJ21vdXNlbW92ZScsIHNldFNWKTtcbiAgICAgIGRvbS5iaW5kKHdpbmRvdywgJ3RvdWNobW92ZScsIHNldFNWKTtcbiAgICAgIGRvbS5iaW5kKHdpbmRvdywgJ21vdXNldXAnLCBmaWVsZFVwU1YpO1xuICAgICAgZG9tLmJpbmQod2luZG93LCAndG91Y2hlbmQnLCBmaWVsZFVwU1YpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaWVsZERvd25IKGUpIHtcbiAgICAgIHNldEgoZSk7XG4gICAgICBkb20uYmluZCh3aW5kb3csICdtb3VzZW1vdmUnLCBzZXRIKTtcbiAgICAgIGRvbS5iaW5kKHdpbmRvdywgJ3RvdWNobW92ZScsIHNldEgpO1xuICAgICAgZG9tLmJpbmQod2luZG93LCAnbW91c2V1cCcsIGZpZWxkVXBIKTtcbiAgICAgIGRvbS5iaW5kKHdpbmRvdywgJ3RvdWNoZW5kJywgZmllbGRVcEgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaWVsZFVwU1YoKSB7XG4gICAgICBkb20udW5iaW5kKHdpbmRvdywgJ21vdXNlbW92ZScsIHNldFNWKTtcbiAgICAgIGRvbS51bmJpbmQod2luZG93LCAndG91Y2htb3ZlJywgc2V0U1YpO1xuICAgICAgZG9tLnVuYmluZCh3aW5kb3csICdtb3VzZXVwJywgZmllbGRVcFNWKTtcbiAgICAgIGRvbS51bmJpbmQod2luZG93LCAndG91Y2hlbmQnLCBmaWVsZFVwU1YpO1xuICAgICAgb25GaW5pc2goKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmllbGRVcEgoKSB7XG4gICAgICBkb20udW5iaW5kKHdpbmRvdywgJ21vdXNlbW92ZScsIHNldEgpO1xuICAgICAgZG9tLnVuYmluZCh3aW5kb3csICd0b3VjaG1vdmUnLCBzZXRIKTtcbiAgICAgIGRvbS51bmJpbmQod2luZG93LCAnbW91c2V1cCcsIGZpZWxkVXBIKTtcbiAgICAgIGRvbS51bmJpbmQod2luZG93LCAndG91Y2hlbmQnLCBmaWVsZFVwSCk7XG4gICAgICBvbkZpbmlzaCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvbkJsdXIoKSB7XG4gICAgICB2YXIgaSA9IGludGVycHJldCh0aGlzLnZhbHVlKTtcbiAgICAgIGlmIChpICE9PSBmYWxzZSkge1xuICAgICAgICBfdGhpcy5fX2NvbG9yLl9fc3RhdGUgPSBpO1xuICAgICAgICBfdGhpcy5zZXRWYWx1ZShfdGhpcy5fX2NvbG9yLnRvT3JpZ2luYWwoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gX3RoaXMuX19jb2xvci50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBvbkZpbmlzaCgpIHtcbiAgICAgIGlmIChfdGhpcy5fX29uRmluaXNoQ2hhbmdlKSB7XG4gICAgICAgIF90aGlzLl9fb25GaW5pc2hDaGFuZ2UuY2FsbChfdGhpcywgX3RoaXMuX19jb2xvci50b09yaWdpbmFsKCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBfdGhpczIuX19zYXR1cmF0aW9uX2ZpZWxkLmFwcGVuZENoaWxkKHZhbHVlRmllbGQpO1xuICAgIF90aGlzMi5fX3NlbGVjdG9yLmFwcGVuZENoaWxkKF90aGlzMi5fX2ZpZWxkX2tub2IpO1xuICAgIF90aGlzMi5fX3NlbGVjdG9yLmFwcGVuZENoaWxkKF90aGlzMi5fX3NhdHVyYXRpb25fZmllbGQpO1xuICAgIF90aGlzMi5fX3NlbGVjdG9yLmFwcGVuZENoaWxkKF90aGlzMi5fX2h1ZV9maWVsZCk7XG4gICAgX3RoaXMyLl9faHVlX2ZpZWxkLmFwcGVuZENoaWxkKF90aGlzMi5fX2h1ZV9rbm9iKTtcbiAgICBfdGhpczIuZG9tRWxlbWVudC5hcHBlbmRDaGlsZChfdGhpczIuX19pbnB1dCk7XG4gICAgX3RoaXMyLmRvbUVsZW1lbnQuYXBwZW5kQ2hpbGQoX3RoaXMyLl9fc2VsZWN0b3IpO1xuICAgIF90aGlzMi51cGRhdGVEaXNwbGF5KCk7XG4gICAgZnVuY3Rpb24gc2V0U1YoZSkge1xuICAgICAgaWYgKGUudHlwZS5pbmRleE9mKCd0b3VjaCcpID09PSAtMSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICB2YXIgZmllbGRSZWN0ID0gX3RoaXMuX19zYXR1cmF0aW9uX2ZpZWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdmFyIF9yZWYgPSBlLnRvdWNoZXMgJiYgZS50b3VjaGVzWzBdIHx8IGUsXG4gICAgICAgICAgY2xpZW50WCA9IF9yZWYuY2xpZW50WCxcbiAgICAgICAgICBjbGllbnRZID0gX3JlZi5jbGllbnRZO1xuICAgICAgdmFyIHMgPSAoY2xpZW50WCAtIGZpZWxkUmVjdC5sZWZ0KSAvIChmaWVsZFJlY3QucmlnaHQgLSBmaWVsZFJlY3QubGVmdCk7XG4gICAgICB2YXIgdiA9IDEgLSAoY2xpZW50WSAtIGZpZWxkUmVjdC50b3ApIC8gKGZpZWxkUmVjdC5ib3R0b20gLSBmaWVsZFJlY3QudG9wKTtcbiAgICAgIGlmICh2ID4gMSkge1xuICAgICAgICB2ID0gMTtcbiAgICAgIH0gZWxzZSBpZiAodiA8IDApIHtcbiAgICAgICAgdiA9IDA7XG4gICAgICB9XG4gICAgICBpZiAocyA+IDEpIHtcbiAgICAgICAgcyA9IDE7XG4gICAgICB9IGVsc2UgaWYgKHMgPCAwKSB7XG4gICAgICAgIHMgPSAwO1xuICAgICAgfVxuICAgICAgX3RoaXMuX19jb2xvci52ID0gdjtcbiAgICAgIF90aGlzLl9fY29sb3IucyA9IHM7XG4gICAgICBfdGhpcy5zZXRWYWx1ZShfdGhpcy5fX2NvbG9yLnRvT3JpZ2luYWwoKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldEgoZSkge1xuICAgICAgaWYgKGUudHlwZS5pbmRleE9mKCd0b3VjaCcpID09PSAtMSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICB2YXIgZmllbGRSZWN0ID0gX3RoaXMuX19odWVfZmllbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgX3JlZjIgPSBlLnRvdWNoZXMgJiYgZS50b3VjaGVzWzBdIHx8IGUsXG4gICAgICAgICAgY2xpZW50WSA9IF9yZWYyLmNsaWVudFk7XG4gICAgICB2YXIgaCA9IDEgLSAoY2xpZW50WSAtIGZpZWxkUmVjdC50b3ApIC8gKGZpZWxkUmVjdC5ib3R0b20gLSBmaWVsZFJlY3QudG9wKTtcbiAgICAgIGlmIChoID4gMSkge1xuICAgICAgICBoID0gMTtcbiAgICAgIH0gZWxzZSBpZiAoaCA8IDApIHtcbiAgICAgICAgaCA9IDA7XG4gICAgICB9XG4gICAgICBfdGhpcy5fX2NvbG9yLmggPSBoICogMzYwO1xuICAgICAgX3RoaXMuc2V0VmFsdWUoX3RoaXMuX19jb2xvci50b09yaWdpbmFsKCkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gX3RoaXMyO1xuICB9XG4gIGNyZWF0ZUNsYXNzKENvbG9yQ29udHJvbGxlciwgW3tcbiAgICBrZXk6ICd1cGRhdGVEaXNwbGF5JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlRGlzcGxheSgpIHtcbiAgICAgIHZhciBpID0gaW50ZXJwcmV0KHRoaXMuZ2V0VmFsdWUoKSk7XG4gICAgICBpZiAoaSAhPT0gZmFsc2UpIHtcbiAgICAgICAgdmFyIG1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIENvbW1vbi5lYWNoKENvbG9yLkNPTVBPTkVOVFMsIGZ1bmN0aW9uIChjb21wb25lbnQpIHtcbiAgICAgICAgICBpZiAoIUNvbW1vbi5pc1VuZGVmaW5lZChpW2NvbXBvbmVudF0pICYmICFDb21tb24uaXNVbmRlZmluZWQodGhpcy5fX2NvbG9yLl9fc3RhdGVbY29tcG9uZW50XSkgJiYgaVtjb21wb25lbnRdICE9PSB0aGlzLl9fY29sb3IuX19zdGF0ZVtjb21wb25lbnRdKSB7XG4gICAgICAgICAgICBtaXNtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgaWYgKG1pc21hdGNoKSB7XG4gICAgICAgICAgQ29tbW9uLmV4dGVuZCh0aGlzLl9fY29sb3IuX19zdGF0ZSwgaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIENvbW1vbi5leHRlbmQodGhpcy5fX3RlbXAuX19zdGF0ZSwgdGhpcy5fX2NvbG9yLl9fc3RhdGUpO1xuICAgICAgdGhpcy5fX3RlbXAuYSA9IDE7XG4gICAgICB2YXIgZmxpcCA9IHRoaXMuX19jb2xvci52IDwgMC41IHx8IHRoaXMuX19jb2xvci5zID4gMC41ID8gMjU1IDogMDtcbiAgICAgIHZhciBfZmxpcCA9IDI1NSAtIGZsaXA7XG4gICAgICBDb21tb24uZXh0ZW5kKHRoaXMuX19maWVsZF9rbm9iLnN0eWxlLCB7XG4gICAgICAgIG1hcmdpbkxlZnQ6IDEwMCAqIHRoaXMuX19jb2xvci5zIC0gNyArICdweCcsXG4gICAgICAgIG1hcmdpblRvcDogMTAwICogKDEgLSB0aGlzLl9fY29sb3IudikgLSA3ICsgJ3B4JyxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLl9fdGVtcC50b0hleFN0cmluZygpLFxuICAgICAgICBib3JkZXI6IHRoaXMuX19maWVsZF9rbm9iX2JvcmRlciArICdyZ2IoJyArIGZsaXAgKyAnLCcgKyBmbGlwICsgJywnICsgZmxpcCArICcpJ1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9faHVlX2tub2Iuc3R5bGUubWFyZ2luVG9wID0gKDEgLSB0aGlzLl9fY29sb3IuaCAvIDM2MCkgKiAxMDAgKyAncHgnO1xuICAgICAgdGhpcy5fX3RlbXAucyA9IDE7XG4gICAgICB0aGlzLl9fdGVtcC52ID0gMTtcbiAgICAgIGxpbmVhckdyYWRpZW50KHRoaXMuX19zYXR1cmF0aW9uX2ZpZWxkLCAnbGVmdCcsICcjZmZmJywgdGhpcy5fX3RlbXAudG9IZXhTdHJpbmcoKSk7XG4gICAgICB0aGlzLl9faW5wdXQudmFsdWUgPSB0aGlzLl9fY29sb3IudG9TdHJpbmcoKTtcbiAgICAgIENvbW1vbi5leHRlbmQodGhpcy5fX2lucHV0LnN0eWxlLCB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5fX2NvbG9yLnRvSGV4U3RyaW5nKCksXG4gICAgICAgIGNvbG9yOiAncmdiKCcgKyBmbGlwICsgJywnICsgZmxpcCArICcsJyArIGZsaXAgKyAnKScsXG4gICAgICAgIHRleHRTaGFkb3c6IHRoaXMuX19pbnB1dF90ZXh0U2hhZG93ICsgJ3JnYmEoJyArIF9mbGlwICsgJywnICsgX2ZsaXAgKyAnLCcgKyBfZmxpcCArICcsLjcpJ1xuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBDb2xvckNvbnRyb2xsZXI7XG59KENvbnRyb2xsZXIpO1xudmFyIHZlbmRvcnMgPSBbJy1tb3otJywgJy1vLScsICctd2Via2l0LScsICctbXMtJywgJyddO1xuZnVuY3Rpb24gbGluZWFyR3JhZGllbnQoZWxlbSwgeCwgYSwgYikge1xuICBlbGVtLnN0eWxlLmJhY2tncm91bmQgPSAnJztcbiAgQ29tbW9uLmVhY2godmVuZG9ycywgZnVuY3Rpb24gKHZlbmRvcikge1xuICAgIGVsZW0uc3R5bGUuY3NzVGV4dCArPSAnYmFja2dyb3VuZDogJyArIHZlbmRvciArICdsaW5lYXItZ3JhZGllbnQoJyArIHggKyAnLCAnICsgYSArICcgMCUsICcgKyBiICsgJyAxMDAlKTsgJztcbiAgfSk7XG59XG5mdW5jdGlvbiBodWVHcmFkaWVudChlbGVtKSB7XG4gIGVsZW0uc3R5bGUuYmFja2dyb3VuZCA9ICcnO1xuICBlbGVtLnN0eWxlLmNzc1RleHQgKz0gJ2JhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgICNmZjAwMDAgMCUsICNmZjAwZmYgMTclLCAjMDAwMGZmIDM0JSwgIzAwZmZmZiA1MCUsICMwMGZmMDAgNjclLCAjZmZmZjAwIDg0JSwgI2ZmMDAwMCAxMDAlKTsnO1xuICBlbGVtLnN0eWxlLmNzc1RleHQgKz0gJ2JhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgICNmZjAwMDAgMCUsI2ZmMDBmZiAxNyUsIzAwMDBmZiAzNCUsIzAwZmZmZiA1MCUsIzAwZmYwMCA2NyUsI2ZmZmYwMCA4NCUsI2ZmMDAwMCAxMDAlKTsnO1xuICBlbGVtLnN0eWxlLmNzc1RleHQgKz0gJ2JhY2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICAjZmYwMDAwIDAlLCNmZjAwZmYgMTclLCMwMDAwZmYgMzQlLCMwMGZmZmYgNTAlLCMwMGZmMDAgNjclLCNmZmZmMDAgODQlLCNmZjAwMDAgMTAwJSk7JztcbiAgZWxlbS5zdHlsZS5jc3NUZXh0ICs9ICdiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KHRvcCwgICNmZjAwMDAgMCUsI2ZmMDBmZiAxNyUsIzAwMDBmZiAzNCUsIzAwZmZmZiA1MCUsIzAwZmYwMCA2NyUsI2ZmZmYwMCA4NCUsI2ZmMDAwMCAxMDAlKTsnO1xuICBlbGVtLnN0eWxlLmNzc1RleHQgKz0gJ2JhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0b3AsICAjZmYwMDAwIDAlLCNmZjAwZmYgMTclLCMwMDAwZmYgMzQlLCMwMGZmZmYgNTAlLCMwMGZmMDAgNjclLCNmZmZmMDAgODQlLCNmZjAwMDAgMTAwJSk7Jztcbn1cblxudmFyIGNzcyA9IHtcbiAgbG9hZDogZnVuY3Rpb24gbG9hZCh1cmwsIGluZG9jKSB7XG4gICAgdmFyIGRvYyA9IGluZG9jIHx8IGRvY3VtZW50O1xuICAgIHZhciBsaW5rID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICBsaW5rLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgIGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgfSxcbiAgaW5qZWN0OiBmdW5jdGlvbiBpbmplY3QoY3NzQ29udGVudCwgaW5kb2MpIHtcbiAgICB2YXIgZG9jID0gaW5kb2MgfHwgZG9jdW1lbnQ7XG4gICAgdmFyIGluamVjdGVkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICBpbmplY3RlZC50eXBlID0gJ3RleHQvY3NzJztcbiAgICBpbmplY3RlZC5pbm5lckhUTUwgPSBjc3NDb250ZW50O1xuICAgIHZhciBoZWFkID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gICAgdHJ5IHtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoaW5qZWN0ZWQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBzYXZlRGlhbG9nQ29udGVudHMgPSBcIjxkaXYgaWQ9XFxcImRnLXNhdmVcXFwiIGNsYXNzPVxcXCJkZyBkaWFsb2d1ZVxcXCI+XFxuXFxuICBIZXJlJ3MgdGhlIG5ldyBsb2FkIHBhcmFtZXRlciBmb3IgeW91ciA8Y29kZT5HVUk8L2NvZGU+J3MgY29uc3RydWN0b3I6XFxuXFxuICA8dGV4dGFyZWEgaWQ9XFxcImRnLW5ldy1jb25zdHJ1Y3RvclxcXCI+PC90ZXh0YXJlYT5cXG5cXG4gIDxkaXYgaWQ9XFxcImRnLXNhdmUtbG9jYWxseVxcXCI+XFxuXFxuICAgIDxpbnB1dCBpZD1cXFwiZGctbG9jYWwtc3RvcmFnZVxcXCIgdHlwZT1cXFwiY2hlY2tib3hcXFwiLz4gQXV0b21hdGljYWxseSBzYXZlXFxuICAgIHZhbHVlcyB0byA8Y29kZT5sb2NhbFN0b3JhZ2U8L2NvZGU+IG9uIGV4aXQuXFxuXFxuICAgIDxkaXYgaWQ9XFxcImRnLWxvY2FsLWV4cGxhaW5cXFwiPlRoZSB2YWx1ZXMgc2F2ZWQgdG8gPGNvZGU+bG9jYWxTdG9yYWdlPC9jb2RlPiB3aWxsXFxuICAgICAgb3ZlcnJpZGUgdGhvc2UgcGFzc2VkIHRvIDxjb2RlPmRhdC5HVUk8L2NvZGU+J3MgY29uc3RydWN0b3IuIFRoaXMgbWFrZXMgaXRcXG4gICAgICBlYXNpZXIgdG8gd29yayBpbmNyZW1lbnRhbGx5LCBidXQgPGNvZGU+bG9jYWxTdG9yYWdlPC9jb2RlPiBpcyBmcmFnaWxlLFxcbiAgICAgIGFuZCB5b3VyIGZyaWVuZHMgbWF5IG5vdCBzZWUgdGhlIHNhbWUgdmFsdWVzIHlvdSBkby5cXG5cXG4gICAgPC9kaXY+XFxuXFxuICA8L2Rpdj5cXG5cXG48L2Rpdj5cIjtcblxudmFyIENvbnRyb2xsZXJGYWN0b3J5ID0gZnVuY3Rpb24gQ29udHJvbGxlckZhY3Rvcnkob2JqZWN0LCBwcm9wZXJ0eSkge1xuICB2YXIgaW5pdGlhbFZhbHVlID0gb2JqZWN0W3Byb3BlcnR5XTtcbiAgaWYgKENvbW1vbi5pc0FycmF5KGFyZ3VtZW50c1syXSkgfHwgQ29tbW9uLmlzT2JqZWN0KGFyZ3VtZW50c1syXSkpIHtcbiAgICByZXR1cm4gbmV3IE9wdGlvbkNvbnRyb2xsZXIob2JqZWN0LCBwcm9wZXJ0eSwgYXJndW1lbnRzWzJdKTtcbiAgfVxuICBpZiAoQ29tbW9uLmlzTnVtYmVyKGluaXRpYWxWYWx1ZSkpIHtcbiAgICBpZiAoQ29tbW9uLmlzTnVtYmVyKGFyZ3VtZW50c1syXSkgJiYgQ29tbW9uLmlzTnVtYmVyKGFyZ3VtZW50c1szXSkpIHtcbiAgICAgIGlmIChDb21tb24uaXNOdW1iZXIoYXJndW1lbnRzWzRdKSkge1xuICAgICAgICByZXR1cm4gbmV3IE51bWJlckNvbnRyb2xsZXJTbGlkZXIob2JqZWN0LCBwcm9wZXJ0eSwgYXJndW1lbnRzWzJdLCBhcmd1bWVudHNbM10sIGFyZ3VtZW50c1s0XSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IE51bWJlckNvbnRyb2xsZXJTbGlkZXIob2JqZWN0LCBwcm9wZXJ0eSwgYXJndW1lbnRzWzJdLCBhcmd1bWVudHNbM10pO1xuICAgIH1cbiAgICBpZiAoQ29tbW9uLmlzTnVtYmVyKGFyZ3VtZW50c1s0XSkpIHtcbiAgICAgIHJldHVybiBuZXcgTnVtYmVyQ29udHJvbGxlckJveChvYmplY3QsIHByb3BlcnR5LCB7IG1pbjogYXJndW1lbnRzWzJdLCBtYXg6IGFyZ3VtZW50c1szXSwgc3RlcDogYXJndW1lbnRzWzRdIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE51bWJlckNvbnRyb2xsZXJCb3gob2JqZWN0LCBwcm9wZXJ0eSwgeyBtaW46IGFyZ3VtZW50c1syXSwgbWF4OiBhcmd1bWVudHNbM10gfSk7XG4gIH1cbiAgaWYgKENvbW1vbi5pc1N0cmluZyhpbml0aWFsVmFsdWUpKSB7XG4gICAgcmV0dXJuIG5ldyBTdHJpbmdDb250cm9sbGVyKG9iamVjdCwgcHJvcGVydHkpO1xuICB9XG4gIGlmIChDb21tb24uaXNGdW5jdGlvbihpbml0aWFsVmFsdWUpKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkNvbnRyb2xsZXIob2JqZWN0LCBwcm9wZXJ0eSwgJycpO1xuICB9XG4gIGlmIChDb21tb24uaXNCb29sZWFuKGluaXRpYWxWYWx1ZSkpIHtcbiAgICByZXR1cm4gbmV3IEJvb2xlYW5Db250cm9sbGVyKG9iamVjdCwgcHJvcGVydHkpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKSB7XG4gIHNldFRpbWVvdXQoY2FsbGJhY2ssIDEwMDAgLyA2MCk7XG59XG52YXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lJDEgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCB3aW5kb3cub1JlcXVlc3RBbmltYXRpb25GcmFtZSB8fCB3aW5kb3cubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuXG52YXIgQ2VudGVyZWREaXYgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENlbnRlcmVkRGl2KCkge1xuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIENlbnRlcmVkRGl2KTtcbiAgICB0aGlzLmJhY2tncm91bmRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgQ29tbW9uLmV4dGVuZCh0aGlzLmJhY2tncm91bmRFbGVtZW50LnN0eWxlLCB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuOCknLFxuICAgICAgdG9wOiAwLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGRpc3BsYXk6ICdub25lJyxcbiAgICAgIHpJbmRleDogJzEwMDAnLFxuICAgICAgb3BhY2l0eTogMCxcbiAgICAgIFdlYmtpdFRyYW5zaXRpb246ICdvcGFjaXR5IDAuMnMgbGluZWFyJyxcbiAgICAgIHRyYW5zaXRpb246ICdvcGFjaXR5IDAuMnMgbGluZWFyJ1xuICAgIH0pO1xuICAgIGRvbS5tYWtlRnVsbHNjcmVlbih0aGlzLmJhY2tncm91bmRFbGVtZW50KTtcbiAgICB0aGlzLmJhY2tncm91bmRFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBDb21tb24uZXh0ZW5kKHRoaXMuZG9tRWxlbWVudC5zdHlsZSwge1xuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICBkaXNwbGF5OiAnbm9uZScsXG4gICAgICB6SW5kZXg6ICcxMDAxJyxcbiAgICAgIG9wYWNpdHk6IDAsXG4gICAgICBXZWJraXRUcmFuc2l0aW9uOiAnLXdlYmtpdC10cmFuc2Zvcm0gMC4ycyBlYXNlLW91dCwgb3BhY2l0eSAwLjJzIGxpbmVhcicsXG4gICAgICB0cmFuc2l0aW9uOiAndHJhbnNmb3JtIDAuMnMgZWFzZS1vdXQsIG9wYWNpdHkgMC4ycyBsaW5lYXInXG4gICAgfSk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmJhY2tncm91bmRFbGVtZW50KTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZG9tRWxlbWVudCk7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICBkb20uYmluZCh0aGlzLmJhY2tncm91bmRFbGVtZW50LCAnY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5oaWRlKCk7XG4gICAgfSk7XG4gIH1cbiAgY3JlYXRlQ2xhc3MoQ2VudGVyZWREaXYsIFt7XG4gICAga2V5OiAnc2hvdycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgdGhpcy5iYWNrZ3JvdW5kRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIHRoaXMuZG9tRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIHRoaXMuZG9tRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gMDtcbiAgICAgIHRoaXMuZG9tRWxlbWVudC5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSAnc2NhbGUoMS4xKSc7XG4gICAgICB0aGlzLmxheW91dCgpO1xuICAgICAgQ29tbW9uLmRlZmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuYmFja2dyb3VuZEVsZW1lbnQuc3R5bGUub3BhY2l0eSA9IDE7XG4gICAgICAgIF90aGlzLmRvbUVsZW1lbnQuc3R5bGUub3BhY2l0eSA9IDE7XG4gICAgICAgIF90aGlzLmRvbUVsZW1lbnQuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gJ3NjYWxlKDEpJztcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2hpZGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoaWRlKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIHZhciBoaWRlID0gZnVuY3Rpb24gaGlkZSgpIHtcbiAgICAgICAgX3RoaXMuZG9tRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBfdGhpcy5iYWNrZ3JvdW5kRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBkb20udW5iaW5kKF90aGlzLmRvbUVsZW1lbnQsICd3ZWJraXRUcmFuc2l0aW9uRW5kJywgaGlkZSk7XG4gICAgICAgIGRvbS51bmJpbmQoX3RoaXMuZG9tRWxlbWVudCwgJ3RyYW5zaXRpb25lbmQnLCBoaWRlKTtcbiAgICAgICAgZG9tLnVuYmluZChfdGhpcy5kb21FbGVtZW50LCAnb1RyYW5zaXRpb25FbmQnLCBoaWRlKTtcbiAgICAgIH07XG4gICAgICBkb20uYmluZCh0aGlzLmRvbUVsZW1lbnQsICd3ZWJraXRUcmFuc2l0aW9uRW5kJywgaGlkZSk7XG4gICAgICBkb20uYmluZCh0aGlzLmRvbUVsZW1lbnQsICd0cmFuc2l0aW9uZW5kJywgaGlkZSk7XG4gICAgICBkb20uYmluZCh0aGlzLmRvbUVsZW1lbnQsICdvVHJhbnNpdGlvbkVuZCcsIGhpZGUpO1xuICAgICAgdGhpcy5iYWNrZ3JvdW5kRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gMDtcbiAgICAgIHRoaXMuZG9tRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gMDtcbiAgICAgIHRoaXMuZG9tRWxlbWVudC5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSAnc2NhbGUoMS4xKSc7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnbGF5b3V0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gbGF5b3V0KCkge1xuICAgICAgdGhpcy5kb21FbGVtZW50LnN0eWxlLmxlZnQgPSB3aW5kb3cuaW5uZXJXaWR0aCAvIDIgLSBkb20uZ2V0V2lkdGgodGhpcy5kb21FbGVtZW50KSAvIDIgKyAncHgnO1xuICAgICAgdGhpcy5kb21FbGVtZW50LnN0eWxlLnRvcCA9IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgLSBkb20uZ2V0SGVpZ2h0KHRoaXMuZG9tRWxlbWVudCkgLyAyICsgJ3B4JztcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIENlbnRlcmVkRGl2O1xufSgpO1xuXG52YXIgc3R5bGVTaGVldCA9IF9fXyRpbnNlcnRTdHlsZShcIi5kZyB1bHtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO3dpZHRoOjEwMCU7Y2xlYXI6Ym90aH0uZGcuYWN7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3JpZ2h0OjA7aGVpZ2h0OjA7ei1pbmRleDowfS5kZzpub3QoLmFjKSAubWFpbntvdmVyZmxvdzpoaWRkZW59LmRnLm1haW57LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjFzIGxpbmVhcjstby10cmFuc2l0aW9uOm9wYWNpdHkgLjFzIGxpbmVhcjstbW96LXRyYW5zaXRpb246b3BhY2l0eSAuMXMgbGluZWFyO3RyYW5zaXRpb246b3BhY2l0eSAuMXMgbGluZWFyfS5kZy5tYWluLnRhbGxlci10aGFuLXdpbmRvd3tvdmVyZmxvdy15OmF1dG99LmRnLm1haW4udGFsbGVyLXRoYW4td2luZG93IC5jbG9zZS1idXR0b257b3BhY2l0eToxO21hcmdpbi10b3A6LTFweDtib3JkZXItdG9wOjFweCBzb2xpZCAjMmMyYzJjfS5kZy5tYWluIHVsLmNsb3NlZCAuY2xvc2UtYnV0dG9ue29wYWNpdHk6MSAhaW1wb3J0YW50fS5kZy5tYWluOmhvdmVyIC5jbG9zZS1idXR0b24sLmRnLm1haW4gLmNsb3NlLWJ1dHRvbi5kcmFne29wYWNpdHk6MX0uZGcubWFpbiAuY2xvc2UtYnV0dG9uey13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4xcyBsaW5lYXI7LW8tdHJhbnNpdGlvbjpvcGFjaXR5IC4xcyBsaW5lYXI7LW1vei10cmFuc2l0aW9uOm9wYWNpdHkgLjFzIGxpbmVhcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjFzIGxpbmVhcjtib3JkZXI6MDtsaW5lLWhlaWdodDoxOXB4O2hlaWdodDoyMHB4O2N1cnNvcjpwb2ludGVyO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IzAwMH0uZGcubWFpbiAuY2xvc2UtYnV0dG9uLmNsb3NlLXRvcHtwb3NpdGlvbjpyZWxhdGl2ZX0uZGcubWFpbiAuY2xvc2UtYnV0dG9uLmNsb3NlLWJvdHRvbXtwb3NpdGlvbjphYnNvbHV0ZX0uZGcubWFpbiAuY2xvc2UtYnV0dG9uOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzExMX0uZGcuYXtmbG9hdDpyaWdodDttYXJnaW4tcmlnaHQ6MTVweDtvdmVyZmxvdy15OnZpc2libGV9LmRnLmEuaGFzLXNhdmU+dWwuY2xvc2UtdG9we21hcmdpbi10b3A6MH0uZGcuYS5oYXMtc2F2ZT51bC5jbG9zZS1ib3R0b217bWFyZ2luLXRvcDoyN3B4fS5kZy5hLmhhcy1zYXZlPnVsLmNsb3NlZHttYXJnaW4tdG9wOjB9LmRnLmEgLnNhdmUtcm93e3RvcDowO3otaW5kZXg6MTAwMn0uZGcuYSAuc2F2ZS1yb3cuY2xvc2UtdG9we3Bvc2l0aW9uOnJlbGF0aXZlfS5kZy5hIC5zYXZlLXJvdy5jbG9zZS1ib3R0b217cG9zaXRpb246Zml4ZWR9LmRnIGxpey13ZWJraXQtdHJhbnNpdGlvbjpoZWlnaHQgLjFzIGVhc2Utb3V0Oy1vLXRyYW5zaXRpb246aGVpZ2h0IC4xcyBlYXNlLW91dDstbW96LXRyYW5zaXRpb246aGVpZ2h0IC4xcyBlYXNlLW91dDt0cmFuc2l0aW9uOmhlaWdodCAuMXMgZWFzZS1vdXQ7LXdlYmtpdC10cmFuc2l0aW9uOm92ZXJmbG93IC4xcyBsaW5lYXI7LW8tdHJhbnNpdGlvbjpvdmVyZmxvdyAuMXMgbGluZWFyOy1tb3otdHJhbnNpdGlvbjpvdmVyZmxvdyAuMXMgbGluZWFyO3RyYW5zaXRpb246b3ZlcmZsb3cgLjFzIGxpbmVhcn0uZGcgbGk6bm90KC5mb2xkZXIpe2N1cnNvcjphdXRvO2hlaWdodDoyN3B4O2xpbmUtaGVpZ2h0OjI3cHg7cGFkZGluZzowIDRweCAwIDVweH0uZGcgbGkuZm9sZGVye3BhZGRpbmc6MDtib3JkZXItbGVmdDo0cHggc29saWQgcmdiYSgwLDAsMCwwKX0uZGcgbGkudGl0bGV7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWxlZnQ6LTRweH0uZGcgLmNsb3NlZCBsaTpub3QoLnRpdGxlKSwuZGcgLmNsb3NlZCB1bCBsaSwuZGcgLmNsb3NlZCB1bCBsaT4qe2hlaWdodDowO292ZXJmbG93OmhpZGRlbjtib3JkZXI6MH0uZGcgLmNye2NsZWFyOmJvdGg7cGFkZGluZy1sZWZ0OjNweDtoZWlnaHQ6MjdweDtvdmVyZmxvdzpoaWRkZW59LmRnIC5wcm9wZXJ0eS1uYW1le2N1cnNvcjpkZWZhdWx0O2Zsb2F0OmxlZnQ7Y2xlYXI6bGVmdDt3aWR0aDo0MCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LmRnIC5je2Zsb2F0OmxlZnQ7d2lkdGg6NjAlO3Bvc2l0aW9uOnJlbGF0aXZlfS5kZyAuYyBpbnB1dFt0eXBlPXRleHRde2JvcmRlcjowO21hcmdpbi10b3A6NHB4O3BhZGRpbmc6M3B4O3dpZHRoOjEwMCU7ZmxvYXQ6cmlnaHR9LmRnIC5oYXMtc2xpZGVyIGlucHV0W3R5cGU9dGV4dF17d2lkdGg6MzAlO21hcmdpbi1sZWZ0OjB9LmRnIC5zbGlkZXJ7ZmxvYXQ6bGVmdDt3aWR0aDo2NiU7bWFyZ2luLWxlZnQ6LTVweDttYXJnaW4tcmlnaHQ6MDtoZWlnaHQ6MTlweDttYXJnaW4tdG9wOjRweH0uZGcgLnNsaWRlci1mZ3toZWlnaHQ6MTAwJX0uZGcgLmMgaW5wdXRbdHlwZT1jaGVja2JveF17bWFyZ2luLXRvcDo3cHh9LmRnIC5jIHNlbGVjdHttYXJnaW4tdG9wOjVweH0uZGcgLmNyLmZ1bmN0aW9uLC5kZyAuY3IuZnVuY3Rpb24gLnByb3BlcnR5LW5hbWUsLmRnIC5jci5mdW5jdGlvbiAqLC5kZyAuY3IuYm9vbGVhbiwuZGcgLmNyLmJvb2xlYW4gKntjdXJzb3I6cG9pbnRlcn0uZGcgLmNyLmNvbG9ye292ZXJmbG93OnZpc2libGV9LmRnIC5zZWxlY3RvcntkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6LTlweDttYXJnaW4tdG9wOjIzcHg7ei1pbmRleDoxMH0uZGcgLmM6aG92ZXIgLnNlbGVjdG9yLC5kZyAuc2VsZWN0b3IuZHJhZ3tkaXNwbGF5OmJsb2NrfS5kZyBsaS5zYXZlLXJvd3twYWRkaW5nOjB9LmRnIGxpLnNhdmUtcm93IC5idXR0b257ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzowcHggNnB4fS5kZy5kaWFsb2d1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7d2lkdGg6NDYwcHg7cGFkZGluZzoxNXB4O2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjE1cHh9I2RnLW5ldy1jb25zdHJ1Y3RvcntwYWRkaW5nOjEwcHg7Y29sb3I6IzIyMjtmb250LWZhbWlseTpNb25hY28sIG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtib3JkZXI6MDtyZXNpemU6bm9uZTtib3gtc2hhZG93Omluc2V0IDFweCAxcHggMXB4ICM4ODg7d29yZC13cmFwOmJyZWFrLXdvcmQ7bWFyZ2luOjEycHggMDtkaXNwbGF5OmJsb2NrO3dpZHRoOjQ0MHB4O292ZXJmbG93LXk6c2Nyb2xsO2hlaWdodDoxMDBweDtwb3NpdGlvbjpyZWxhdGl2ZX0jZGctbG9jYWwtZXhwbGFpbntkaXNwbGF5Om5vbmU7Zm9udC1zaXplOjExcHg7bGluZS1oZWlnaHQ6MTdweDtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kLWNvbG9yOiMzMzM7cGFkZGluZzo4cHg7bWFyZ2luLXRvcDoxMHB4fSNkZy1sb2NhbC1leHBsYWluIGNvZGV7Zm9udC1zaXplOjEwcHh9I2RhdC1ndWktc2F2ZS1sb2NhbGx5e2Rpc3BsYXk6bm9uZX0uZGd7Y29sb3I6I2VlZTtmb250OjExcHggJ0x1Y2lkYSBHcmFuZGUnLCBzYW5zLXNlcmlmO3RleHQtc2hhZG93OjAgLTFweCAwICMxMTF9LmRnLm1haW46Oi13ZWJraXQtc2Nyb2xsYmFye3dpZHRoOjVweDtiYWNrZ3JvdW5kOiMxYTFhMWF9LmRnLm1haW46Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lcntoZWlnaHQ6MDtkaXNwbGF5Om5vbmV9LmRnLm1haW46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JvcmRlci1yYWRpdXM6NXB4O2JhY2tncm91bmQ6IzY3Njc2N30uZGcgbGk6bm90KC5mb2xkZXIpe2JhY2tncm91bmQ6IzFhMWExYTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMmMyYzJjfS5kZyBsaS5zYXZlLXJvd3tsaW5lLWhlaWdodDoyNXB4O2JhY2tncm91bmQ6I2RhZDVjYjtib3JkZXI6MH0uZGcgbGkuc2F2ZS1yb3cgc2VsZWN0e21hcmdpbi1sZWZ0OjVweDt3aWR0aDoxMDhweH0uZGcgbGkuc2F2ZS1yb3cgLmJ1dHRvbnttYXJnaW4tbGVmdDo1cHg7bWFyZ2luLXRvcDoxcHg7Ym9yZGVyLXJhZGl1czoycHg7Zm9udC1zaXplOjlweDtsaW5lLWhlaWdodDo3cHg7cGFkZGluZzo0cHggNHB4IDVweCA0cHg7YmFja2dyb3VuZDojYzViZGFkO2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAxcHggMCAjYjBhNThmO2JveC1zaGFkb3c6MCAtMXB4IDAgI2IwYTU4ZjtjdXJzb3I6cG9pbnRlcn0uZGcgbGkuc2F2ZS1yb3cgLmJ1dHRvbi5nZWFyc3tiYWNrZ3JvdW5kOiNjNWJkYWQgdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXNBQUFBTkNBWUFBQUIvOVpRN0FBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBUUpKUkVGVWVOcGlZS0FVL1AvL1B3R0lDL0FwQ0FCaUJTQVcrSThBQ2xBY2dLeFE0VDlob01BRVVyeHgyUVNHTjYrZWdEWCsvdldUNGU3TjgyQU1Zb1BBeC9ldndXb1lvU1liQUNYMnM3S3hDeHpjc2V6RGgzZXZGb0RFQllURUVxeWNnZ1dBekE5QXVVU1FRZ2VZUGE5ZlB2Ni9ZV20vQWN4NUlQYjd0eS9mdytRWmJsdzY3dkRzOFIwWUh5UWhnT2J4K3lBSmtCcW1HNWRQUERoMWFQT0dSL2V1Z1cwRzR2bElvVElmeUZjQStRZWtoaEhKaFBkUXhiaUFJZ3VNQlRRWnJQRDcxMDhNNnJvV1lERlFpSUFBdjZBb3cvMWJGd1hnaXMrZjJMVUF5bndvSWFOY3o4WE54M0RsN01FSlVER1FweDlndFE4WUN1ZUIrRDI2T0VDQUFRRGFkdDdlNDZENDJRQUFBQUJKUlU1RXJrSmdnZz09KSAycHggMXB4IG5vLXJlcGVhdDtoZWlnaHQ6N3B4O3dpZHRoOjhweH0uZGcgbGkuc2F2ZS1yb3cgLmJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNiYWIxOWU7Ym94LXNoYWRvdzowIC0xcHggMCAjYjBhNThmfS5kZyBsaS5mb2xkZXJ7Ym9yZGVyLWJvdHRvbTowfS5kZyBsaS50aXRsZXtwYWRkaW5nLWxlZnQ6MTZweDtiYWNrZ3JvdW5kOiMwMDAgdXJsKGRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEJRQUZBSkVBQVAvLy8vUHo4Ly8vLy8vLy95SDVCQUVBQUFJQUxBQUFBQUFGQUFVQUFBSUlsSStoS2dGeG9DZ0FPdz09KSA2cHggMTBweCBuby1yZXBlYXQ7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjIpfS5kZyAuY2xvc2VkIGxpLnRpdGxle2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEJRQUZBSkVBQVAvLy8vUHo4Ly8vLy8vLy95SDVCQUVBQUFJQUxBQUFBQUFGQUFVQUFBSUlsR0lXcU1DYldBRUFPdz09KX0uZGcgLmNyLmJvb2xlYW57Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkICM4MDY3ODd9LmRnIC5jci5jb2xvcntib3JkZXItbGVmdDozcHggc29saWR9LmRnIC5jci5mdW5jdGlvbntib3JkZXItbGVmdDozcHggc29saWQgI2U2MWQ1Zn0uZGcgLmNyLm51bWJlcntib3JkZXItbGVmdDozcHggc29saWQgIzJGQTFENn0uZGcgLmNyLm51bWJlciBpbnB1dFt0eXBlPXRleHRde2NvbG9yOiMyRkExRDZ9LmRnIC5jci5zdHJpbmd7Ym9yZGVyLWxlZnQ6M3B4IHNvbGlkICMxZWQzNmZ9LmRnIC5jci5zdHJpbmcgaW5wdXRbdHlwZT10ZXh0XXtjb2xvcjojMWVkMzZmfS5kZyAuY3IuZnVuY3Rpb246aG92ZXIsLmRnIC5jci5ib29sZWFuOmhvdmVye2JhY2tncm91bmQ6IzExMX0uZGcgLmMgaW5wdXRbdHlwZT10ZXh0XXtiYWNrZ3JvdW5kOiMzMDMwMzA7b3V0bGluZTpub25lfS5kZyAuYyBpbnB1dFt0eXBlPXRleHRdOmhvdmVye2JhY2tncm91bmQ6IzNjM2MzY30uZGcgLmMgaW5wdXRbdHlwZT10ZXh0XTpmb2N1c3tiYWNrZ3JvdW5kOiM0OTQ5NDk7Y29sb3I6I2ZmZn0uZGcgLmMgLnNsaWRlcntiYWNrZ3JvdW5kOiMzMDMwMzA7Y3Vyc29yOmV3LXJlc2l6ZX0uZGcgLmMgLnNsaWRlci1mZ3tiYWNrZ3JvdW5kOiMyRkExRDY7bWF4LXdpZHRoOjEwMCV9LmRnIC5jIC5zbGlkZXI6aG92ZXJ7YmFja2dyb3VuZDojM2MzYzNjfS5kZyAuYyAuc2xpZGVyOmhvdmVyIC5zbGlkZXItZmd7YmFja2dyb3VuZDojNDRhYmRhfVxcblwiKTtcblxuY3NzLmluamVjdChzdHlsZVNoZWV0KTtcbnZhciBDU1NfTkFNRVNQQUNFID0gJ2RnJztcbnZhciBISURFX0tFWV9DT0RFID0gNzI7XG52YXIgQ0xPU0VfQlVUVE9OX0hFSUdIVCA9IDIwO1xudmFyIERFRkFVTFRfREVGQVVMVF9QUkVTRVRfTkFNRSA9ICdEZWZhdWx0JztcbnZhciBTVVBQT1JUU19MT0NBTF9TVE9SQUdFID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIHJldHVybiAhIXdpbmRvdy5sb2NhbFN0b3JhZ2U7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn0oKTtcbnZhciBTQVZFX0RJQUxPR1VFID0gdm9pZCAwO1xudmFyIGF1dG9QbGFjZVZpcmdpbiA9IHRydWU7XG52YXIgYXV0b1BsYWNlQ29udGFpbmVyID0gdm9pZCAwO1xudmFyIGhpZGUgPSBmYWxzZTtcbnZhciBoaWRlYWJsZUd1aXMgPSBbXTtcbnZhciBHVUkgPSBmdW5jdGlvbiBHVUkocGFycykge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuICB2YXIgcGFyYW1zID0gcGFycyB8fCB7fTtcbiAgdGhpcy5kb21FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHRoaXMuX191bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7XG4gIHRoaXMuZG9tRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9fdWwpO1xuICBkb20uYWRkQ2xhc3ModGhpcy5kb21FbGVtZW50LCBDU1NfTkFNRVNQQUNFKTtcbiAgdGhpcy5fX2ZvbGRlcnMgPSB7fTtcbiAgdGhpcy5fX2NvbnRyb2xsZXJzID0gW107XG4gIHRoaXMuX19yZW1lbWJlcmVkT2JqZWN0cyA9IFtdO1xuICB0aGlzLl9fcmVtZW1iZXJlZE9iamVjdEluZGVjZXNUb0NvbnRyb2xsZXJzID0gW107XG4gIHRoaXMuX19saXN0ZW5pbmcgPSBbXTtcbiAgcGFyYW1zID0gQ29tbW9uLmRlZmF1bHRzKHBhcmFtcywge1xuICAgIGNsb3NlT25Ub3A6IGZhbHNlLFxuICAgIGF1dG9QbGFjZTogdHJ1ZSxcbiAgICB3aWR0aDogR1VJLkRFRkFVTFRfV0lEVEhcbiAgfSk7XG4gIHBhcmFtcyA9IENvbW1vbi5kZWZhdWx0cyhwYXJhbXMsIHtcbiAgICByZXNpemFibGU6IHBhcmFtcy5hdXRvUGxhY2UsXG4gICAgaGlkZWFibGU6IHBhcmFtcy5hdXRvUGxhY2VcbiAgfSk7XG4gIGlmICghQ29tbW9uLmlzVW5kZWZpbmVkKHBhcmFtcy5sb2FkKSkge1xuICAgIGlmIChwYXJhbXMucHJlc2V0KSB7XG4gICAgICBwYXJhbXMubG9hZC5wcmVzZXQgPSBwYXJhbXMucHJlc2V0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwYXJhbXMubG9hZCA9IHsgcHJlc2V0OiBERUZBVUxUX0RFRkFVTFRfUFJFU0VUX05BTUUgfTtcbiAgfVxuICBpZiAoQ29tbW9uLmlzVW5kZWZpbmVkKHBhcmFtcy5wYXJlbnQpICYmIHBhcmFtcy5oaWRlYWJsZSkge1xuICAgIGhpZGVhYmxlR3Vpcy5wdXNoKHRoaXMpO1xuICB9XG4gIHBhcmFtcy5yZXNpemFibGUgPSBDb21tb24uaXNVbmRlZmluZWQocGFyYW1zLnBhcmVudCkgJiYgcGFyYW1zLnJlc2l6YWJsZTtcbiAgaWYgKHBhcmFtcy5hdXRvUGxhY2UgJiYgQ29tbW9uLmlzVW5kZWZpbmVkKHBhcmFtcy5zY3JvbGxhYmxlKSkge1xuICAgIHBhcmFtcy5zY3JvbGxhYmxlID0gdHJ1ZTtcbiAgfVxuICB2YXIgdXNlTG9jYWxTdG9yYWdlID0gU1VQUE9SVFNfTE9DQUxfU1RPUkFHRSAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShnZXRMb2NhbFN0b3JhZ2VIYXNoKHRoaXMsICdpc0xvY2FsJykpID09PSAndHJ1ZSc7XG4gIHZhciBzYXZlVG9Mb2NhbFN0b3JhZ2UgPSB2b2lkIDA7XG4gIHZhciB0aXRsZVJvdyA9IHZvaWQgMDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyxcbiAge1xuICAgIHBhcmVudDoge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgIHJldHVybiBwYXJhbXMucGFyZW50O1xuICAgICAgfVxuICAgIH0sXG4gICAgc2Nyb2xsYWJsZToge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgIHJldHVybiBwYXJhbXMuc2Nyb2xsYWJsZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGF1dG9QbGFjZToge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgIHJldHVybiBwYXJhbXMuYXV0b1BsYWNlO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xvc2VPblRvcDoge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgIHJldHVybiBwYXJhbXMuY2xvc2VPblRvcDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHByZXNldDoge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgIGlmIChfdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuZ2V0Um9vdCgpLnByZXNldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyYW1zLmxvYWQucHJlc2V0O1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0JCQxKHYpIHtcbiAgICAgICAgaWYgKF90aGlzLnBhcmVudCkge1xuICAgICAgICAgIF90aGlzLmdldFJvb3QoKS5wcmVzZXQgPSB2O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmFtcy5sb2FkLnByZXNldCA9IHY7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UHJlc2V0U2VsZWN0SW5kZXgodGhpcyk7XG4gICAgICAgIF90aGlzLnJldmVydCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgd2lkdGg6IHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0JCQxKCkge1xuICAgICAgICByZXR1cm4gcGFyYW1zLndpZHRoO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0JCQxKHYpIHtcbiAgICAgICAgcGFyYW1zLndpZHRoID0gdjtcbiAgICAgICAgc2V0V2lkdGgoX3RoaXMsIHYpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbmFtZToge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgIHJldHVybiBwYXJhbXMubmFtZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCQkMSh2KSB7XG4gICAgICAgIHBhcmFtcy5uYW1lID0gdjtcbiAgICAgICAgaWYgKHRpdGxlUm93KSB7XG4gICAgICAgICAgdGl0bGVSb3cuaW5uZXJIVE1MID0gcGFyYW1zLm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNsb3NlZDoge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgIHJldHVybiBwYXJhbXMuY2xvc2VkO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0JCQxKHYpIHtcbiAgICAgICAgcGFyYW1zLmNsb3NlZCA9IHY7XG4gICAgICAgIGlmIChwYXJhbXMuY2xvc2VkKSB7XG4gICAgICAgICAgZG9tLmFkZENsYXNzKF90aGlzLl9fdWwsIEdVSS5DTEFTU19DTE9TRUQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhfdGhpcy5fX3VsLCBHVUkuQ0xBU1NfQ0xPU0VEKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uUmVzaXplKCk7XG4gICAgICAgIGlmIChfdGhpcy5fX2Nsb3NlQnV0dG9uKSB7XG4gICAgICAgICAgX3RoaXMuX19jbG9zZUJ1dHRvbi5pbm5lckhUTUwgPSB2ID8gR1VJLlRFWFRfT1BFTiA6IEdVSS5URVhUX0NMT1NFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbG9hZDoge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgIHJldHVybiBwYXJhbXMubG9hZDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZUxvY2FsU3RvcmFnZToge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICAgIHJldHVybiB1c2VMb2NhbFN0b3JhZ2U7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQkJDEoYm9vbCkge1xuICAgICAgICBpZiAoU1VQUE9SVFNfTE9DQUxfU1RPUkFHRSkge1xuICAgICAgICAgIHVzZUxvY2FsU3RvcmFnZSA9IGJvb2w7XG4gICAgICAgICAgaWYgKGJvb2wpIHtcbiAgICAgICAgICAgIGRvbS5iaW5kKHdpbmRvdywgJ3VubG9hZCcsIHNhdmVUb0xvY2FsU3RvcmFnZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvbS51bmJpbmQod2luZG93LCAndW5sb2FkJywgc2F2ZVRvTG9jYWxTdG9yYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oZ2V0TG9jYWxTdG9yYWdlSGFzaChfdGhpcywgJ2lzTG9jYWwnKSwgYm9vbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBpZiAoQ29tbW9uLmlzVW5kZWZpbmVkKHBhcmFtcy5wYXJlbnQpKSB7XG4gICAgdGhpcy5jbG9zZWQgPSBwYXJhbXMuY2xvc2VkIHx8IGZhbHNlO1xuICAgIGRvbS5hZGRDbGFzcyh0aGlzLmRvbUVsZW1lbnQsIEdVSS5DTEFTU19NQUlOKTtcbiAgICBkb20ubWFrZVNlbGVjdGFibGUodGhpcy5kb21FbGVtZW50LCBmYWxzZSk7XG4gICAgaWYgKFNVUFBPUlRTX0xPQ0FMX1NUT1JBR0UpIHtcbiAgICAgIGlmICh1c2VMb2NhbFN0b3JhZ2UpIHtcbiAgICAgICAgX3RoaXMudXNlTG9jYWxTdG9yYWdlID0gdHJ1ZTtcbiAgICAgICAgdmFyIHNhdmVkR3VpID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oZ2V0TG9jYWxTdG9yYWdlSGFzaCh0aGlzLCAnZ3VpJykpO1xuICAgICAgICBpZiAoc2F2ZWRHdWkpIHtcbiAgICAgICAgICBwYXJhbXMubG9hZCA9IEpTT04ucGFyc2Uoc2F2ZWRHdWkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX19jbG9zZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMuX19jbG9zZUJ1dHRvbi5pbm5lckhUTUwgPSBHVUkuVEVYVF9DTE9TRUQ7XG4gICAgZG9tLmFkZENsYXNzKHRoaXMuX19jbG9zZUJ1dHRvbiwgR1VJLkNMQVNTX0NMT1NFX0JVVFRPTik7XG4gICAgaWYgKHBhcmFtcy5jbG9zZU9uVG9wKSB7XG4gICAgICBkb20uYWRkQ2xhc3ModGhpcy5fX2Nsb3NlQnV0dG9uLCBHVUkuQ0xBU1NfQ0xPU0VfVE9QKTtcbiAgICAgIHRoaXMuZG9tRWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5fX2Nsb3NlQnV0dG9uLCB0aGlzLmRvbUVsZW1lbnQuY2hpbGROb2Rlc1swXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvbS5hZGRDbGFzcyh0aGlzLl9fY2xvc2VCdXR0b24sIEdVSS5DTEFTU19DTE9TRV9CT1RUT00pO1xuICAgICAgdGhpcy5kb21FbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX19jbG9zZUJ1dHRvbik7XG4gICAgfVxuICAgIGRvbS5iaW5kKHRoaXMuX19jbG9zZUJ1dHRvbiwgJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuY2xvc2VkID0gIV90aGlzLmNsb3NlZDtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocGFyYW1zLmNsb3NlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIHRpdGxlUm93TmFtZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHBhcmFtcy5uYW1lKTtcbiAgICBkb20uYWRkQ2xhc3ModGl0bGVSb3dOYW1lLCAnY29udHJvbGxlci1uYW1lJyk7XG4gICAgdGl0bGVSb3cgPSBhZGRSb3coX3RoaXMsIHRpdGxlUm93TmFtZSk7XG4gICAgdmFyIG9uQ2xpY2tUaXRsZSA9IGZ1bmN0aW9uIG9uQ2xpY2tUaXRsZShlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBfdGhpcy5jbG9zZWQgPSAhX3RoaXMuY2xvc2VkO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgZG9tLmFkZENsYXNzKHRoaXMuX191bCwgR1VJLkNMQVNTX0NMT1NFRCk7XG4gICAgZG9tLmFkZENsYXNzKHRpdGxlUm93LCAndGl0bGUnKTtcbiAgICBkb20uYmluZCh0aXRsZVJvdywgJ2NsaWNrJywgb25DbGlja1RpdGxlKTtcbiAgICBpZiAoIXBhcmFtcy5jbG9zZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGlmIChwYXJhbXMuYXV0b1BsYWNlKSB7XG4gICAgaWYgKENvbW1vbi5pc1VuZGVmaW5lZChwYXJhbXMucGFyZW50KSkge1xuICAgICAgaWYgKGF1dG9QbGFjZVZpcmdpbikge1xuICAgICAgICBhdXRvUGxhY2VDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZG9tLmFkZENsYXNzKGF1dG9QbGFjZUNvbnRhaW5lciwgQ1NTX05BTUVTUEFDRSk7XG4gICAgICAgIGRvbS5hZGRDbGFzcyhhdXRvUGxhY2VDb250YWluZXIsIEdVSS5DTEFTU19BVVRPX1BMQUNFX0NPTlRBSU5FUik7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYXV0b1BsYWNlQ29udGFpbmVyKTtcbiAgICAgICAgYXV0b1BsYWNlVmlyZ2luID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBhdXRvUGxhY2VDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5kb21FbGVtZW50KTtcbiAgICAgIGRvbS5hZGRDbGFzcyh0aGlzLmRvbUVsZW1lbnQsIEdVSS5DTEFTU19BVVRPX1BMQUNFKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgc2V0V2lkdGgoX3RoaXMsIHBhcmFtcy53aWR0aCk7XG4gICAgfVxuICB9XG4gIHRoaXMuX19yZXNpemVIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgIF90aGlzLm9uUmVzaXplRGVib3VuY2VkKCk7XG4gIH07XG4gIGRvbS5iaW5kKHdpbmRvdywgJ3Jlc2l6ZScsIHRoaXMuX19yZXNpemVIYW5kbGVyKTtcbiAgZG9tLmJpbmQodGhpcy5fX3VsLCAnd2Via2l0VHJhbnNpdGlvbkVuZCcsIHRoaXMuX19yZXNpemVIYW5kbGVyKTtcbiAgZG9tLmJpbmQodGhpcy5fX3VsLCAndHJhbnNpdGlvbmVuZCcsIHRoaXMuX19yZXNpemVIYW5kbGVyKTtcbiAgZG9tLmJpbmQodGhpcy5fX3VsLCAnb1RyYW5zaXRpb25FbmQnLCB0aGlzLl9fcmVzaXplSGFuZGxlcik7XG4gIHRoaXMub25SZXNpemUoKTtcbiAgaWYgKHBhcmFtcy5yZXNpemFibGUpIHtcbiAgICBhZGRSZXNpemVIYW5kbGUodGhpcyk7XG4gIH1cbiAgc2F2ZVRvTG9jYWxTdG9yYWdlID0gZnVuY3Rpb24gc2F2ZVRvTG9jYWxTdG9yYWdlKCkge1xuICAgIGlmIChTVVBQT1JUU19MT0NBTF9TVE9SQUdFICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKGdldExvY2FsU3RvcmFnZUhhc2goX3RoaXMsICdpc0xvY2FsJykpID09PSAndHJ1ZScpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGdldExvY2FsU3RvcmFnZUhhc2goX3RoaXMsICdndWknKSwgSlNPTi5zdHJpbmdpZnkoX3RoaXMuZ2V0U2F2ZU9iamVjdCgpKSk7XG4gICAgfVxuICB9O1xuICB0aGlzLnNhdmVUb0xvY2FsU3RvcmFnZUlmUG9zc2libGUgPSBzYXZlVG9Mb2NhbFN0b3JhZ2U7XG4gIGZ1bmN0aW9uIHJlc2V0V2lkdGgoKSB7XG4gICAgdmFyIHJvb3QgPSBfdGhpcy5nZXRSb290KCk7XG4gICAgcm9vdC53aWR0aCArPSAxO1xuICAgIENvbW1vbi5kZWZlcihmdW5jdGlvbiAoKSB7XG4gICAgICByb290LndpZHRoIC09IDE7XG4gICAgfSk7XG4gIH1cbiAgaWYgKCFwYXJhbXMucGFyZW50KSB7XG4gICAgcmVzZXRXaWR0aCgpO1xuICB9XG59O1xuR1VJLnRvZ2dsZUhpZGUgPSBmdW5jdGlvbiAoKSB7XG4gIGhpZGUgPSAhaGlkZTtcbiAgQ29tbW9uLmVhY2goaGlkZWFibGVHdWlzLCBmdW5jdGlvbiAoZ3VpKSB7XG4gICAgZ3VpLmRvbUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IGhpZGUgPyAnbm9uZScgOiAnJztcbiAgfSk7XG59O1xuR1VJLkNMQVNTX0FVVE9fUExBQ0UgPSAnYSc7XG5HVUkuQ0xBU1NfQVVUT19QTEFDRV9DT05UQUlORVIgPSAnYWMnO1xuR1VJLkNMQVNTX01BSU4gPSAnbWFpbic7XG5HVUkuQ0xBU1NfQ09OVFJPTExFUl9ST1cgPSAnY3InO1xuR1VJLkNMQVNTX1RPT19UQUxMID0gJ3RhbGxlci10aGFuLXdpbmRvdyc7XG5HVUkuQ0xBU1NfQ0xPU0VEID0gJ2Nsb3NlZCc7XG5HVUkuQ0xBU1NfQ0xPU0VfQlVUVE9OID0gJ2Nsb3NlLWJ1dHRvbic7XG5HVUkuQ0xBU1NfQ0xPU0VfVE9QID0gJ2Nsb3NlLXRvcCc7XG5HVUkuQ0xBU1NfQ0xPU0VfQk9UVE9NID0gJ2Nsb3NlLWJvdHRvbSc7XG5HVUkuQ0xBU1NfRFJBRyA9ICdkcmFnJztcbkdVSS5ERUZBVUxUX1dJRFRIID0gMjQ1O1xuR1VJLlRFWFRfQ0xPU0VEID0gJ0Nsb3NlIENvbnRyb2xzJztcbkdVSS5URVhUX09QRU4gPSAnT3BlbiBDb250cm9scyc7XG5HVUkuX2tleWRvd25IYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQudHlwZSAhPT0gJ3RleHQnICYmIChlLndoaWNoID09PSBISURFX0tFWV9DT0RFIHx8IGUua2V5Q29kZSA9PT0gSElERV9LRVlfQ09ERSkpIHtcbiAgICBHVUkudG9nZ2xlSGlkZSgpO1xuICB9XG59O1xuZG9tLmJpbmQod2luZG93LCAna2V5ZG93bicsIEdVSS5fa2V5ZG93bkhhbmRsZXIsIGZhbHNlKTtcbkNvbW1vbi5leHRlbmQoR1VJLnByb3RvdHlwZSxcbntcbiAgYWRkOiBmdW5jdGlvbiBhZGQob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIHJldHVybiBfYWRkKHRoaXMsIG9iamVjdCwgcHJvcGVydHksIHtcbiAgICAgIGZhY3RvcnlBcmdzOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpXG4gICAgfSk7XG4gIH0sXG4gIGFkZENvbG9yOiBmdW5jdGlvbiBhZGRDb2xvcihvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIF9hZGQodGhpcywgb2JqZWN0LCBwcm9wZXJ0eSwge1xuICAgICAgY29sb3I6IHRydWVcbiAgICB9KTtcbiAgfSxcbiAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoY29udHJvbGxlcikge1xuICAgIHRoaXMuX191bC5yZW1vdmVDaGlsZChjb250cm9sbGVyLl9fbGkpO1xuICAgIHRoaXMuX19jb250cm9sbGVycy5zcGxpY2UodGhpcy5fX2NvbnRyb2xsZXJzLmluZGV4T2YoY29udHJvbGxlciksIDEpO1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgQ29tbW9uLmRlZmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLm9uUmVzaXplKCk7XG4gICAgfSk7XG4gIH0sXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgdGhlIHJvb3QgR1VJIHNob3VsZCBiZSByZW1vdmVkIHdpdGggLmRlc3Ryb3koKS4gJyArICdGb3Igc3ViZm9sZGVycywgdXNlIGd1aS5yZW1vdmVGb2xkZXIoZm9sZGVyKSBpbnN0ZWFkLicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5hdXRvUGxhY2UpIHtcbiAgICAgIGF1dG9QbGFjZUNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLmRvbUVsZW1lbnQpO1xuICAgIH1cbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIENvbW1vbi5lYWNoKHRoaXMuX19mb2xkZXJzLCBmdW5jdGlvbiAoc3ViZm9sZGVyKSB7XG4gICAgICBfdGhpcy5yZW1vdmVGb2xkZXIoc3ViZm9sZGVyKTtcbiAgICB9KTtcbiAgICBkb20udW5iaW5kKHdpbmRvdywgJ2tleWRvd24nLCBHVUkuX2tleWRvd25IYW5kbGVyLCBmYWxzZSk7XG4gICAgcmVtb3ZlTGlzdGVuZXJzKHRoaXMpO1xuICB9LFxuICBhZGRGb2xkZXI6IGZ1bmN0aW9uIGFkZEZvbGRlcihuYW1lKSB7XG4gICAgaWYgKHRoaXMuX19mb2xkZXJzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGFscmVhZHkgaGF2ZSBhIGZvbGRlciBpbiB0aGlzIEdVSSBieSB0aGUnICsgJyBuYW1lIFwiJyArIG5hbWUgKyAnXCInKTtcbiAgICB9XG4gICAgdmFyIG5ld0d1aVBhcmFtcyA9IHsgbmFtZTogbmFtZSwgcGFyZW50OiB0aGlzIH07XG4gICAgbmV3R3VpUGFyYW1zLmF1dG9QbGFjZSA9IHRoaXMuYXV0b1BsYWNlO1xuICAgIGlmICh0aGlzLmxvYWQgJiZcbiAgICB0aGlzLmxvYWQuZm9sZGVycyAmJlxuICAgIHRoaXMubG9hZC5mb2xkZXJzW25hbWVdKSB7XG4gICAgICBuZXdHdWlQYXJhbXMuY2xvc2VkID0gdGhpcy5sb2FkLmZvbGRlcnNbbmFtZV0uY2xvc2VkO1xuICAgICAgbmV3R3VpUGFyYW1zLmxvYWQgPSB0aGlzLmxvYWQuZm9sZGVyc1tuYW1lXTtcbiAgICB9XG4gICAgdmFyIGd1aSA9IG5ldyBHVUkobmV3R3VpUGFyYW1zKTtcbiAgICB0aGlzLl9fZm9sZGVyc1tuYW1lXSA9IGd1aTtcbiAgICB2YXIgbGkgPSBhZGRSb3codGhpcywgZ3VpLmRvbUVsZW1lbnQpO1xuICAgIGRvbS5hZGRDbGFzcyhsaSwgJ2ZvbGRlcicpO1xuICAgIHJldHVybiBndWk7XG4gIH0sXG4gIHJlbW92ZUZvbGRlcjogZnVuY3Rpb24gcmVtb3ZlRm9sZGVyKGZvbGRlcikge1xuICAgIHRoaXMuX191bC5yZW1vdmVDaGlsZChmb2xkZXIuZG9tRWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgICBkZWxldGUgdGhpcy5fX2ZvbGRlcnNbZm9sZGVyLm5hbWVdO1xuICAgIGlmICh0aGlzLmxvYWQgJiZcbiAgICB0aGlzLmxvYWQuZm9sZGVycyAmJlxuICAgIHRoaXMubG9hZC5mb2xkZXJzW2ZvbGRlci5uYW1lXSkge1xuICAgICAgZGVsZXRlIHRoaXMubG9hZC5mb2xkZXJzW2ZvbGRlci5uYW1lXTtcbiAgICB9XG4gICAgcmVtb3ZlTGlzdGVuZXJzKGZvbGRlcik7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICBDb21tb24uZWFjaChmb2xkZXIuX19mb2xkZXJzLCBmdW5jdGlvbiAoc3ViZm9sZGVyKSB7XG4gICAgICBmb2xkZXIucmVtb3ZlRm9sZGVyKHN1YmZvbGRlcik7XG4gICAgfSk7XG4gICAgQ29tbW9uLmRlZmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLm9uUmVzaXplKCk7XG4gICAgfSk7XG4gIH0sXG4gIG9wZW46IGZ1bmN0aW9uIG9wZW4oKSB7XG4gICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgfSxcbiAgaGlkZTogZnVuY3Rpb24gaGlkZSgpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfSxcbiAgc2hvdzogZnVuY3Rpb24gc2hvdygpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICcnO1xuICB9LFxuICBvblJlc2l6ZTogZnVuY3Rpb24gb25SZXNpemUoKSB7XG4gICAgdmFyIHJvb3QgPSB0aGlzLmdldFJvb3QoKTtcbiAgICBpZiAocm9vdC5zY3JvbGxhYmxlKSB7XG4gICAgICB2YXIgdG9wID0gZG9tLmdldE9mZnNldChyb290Ll9fdWwpLnRvcDtcbiAgICAgIHZhciBoID0gMDtcbiAgICAgIENvbW1vbi5lYWNoKHJvb3QuX191bC5jaGlsZE5vZGVzLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBpZiAoIShyb290LmF1dG9QbGFjZSAmJiBub2RlID09PSByb290Ll9fc2F2ZV9yb3cpKSB7XG4gICAgICAgICAgaCArPSBkb20uZ2V0SGVpZ2h0KG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJIZWlnaHQgLSB0b3AgLSBDTE9TRV9CVVRUT05fSEVJR0hUIDwgaCkge1xuICAgICAgICBkb20uYWRkQ2xhc3Mocm9vdC5kb21FbGVtZW50LCBHVUkuQ0xBU1NfVE9PX1RBTEwpO1xuICAgICAgICByb290Ll9fdWwuc3R5bGUuaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gdG9wIC0gQ0xPU0VfQlVUVE9OX0hFSUdIVCArICdweCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb20ucmVtb3ZlQ2xhc3Mocm9vdC5kb21FbGVtZW50LCBHVUkuQ0xBU1NfVE9PX1RBTEwpO1xuICAgICAgICByb290Ll9fdWwuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocm9vdC5fX3Jlc2l6ZV9oYW5kbGUpIHtcbiAgICAgIENvbW1vbi5kZWZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuX19yZXNpemVfaGFuZGxlLnN0eWxlLmhlaWdodCA9IHJvb3QuX191bC5vZmZzZXRIZWlnaHQgKyAncHgnO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChyb290Ll9fY2xvc2VCdXR0b24pIHtcbiAgICAgIHJvb3QuX19jbG9zZUJ1dHRvbi5zdHlsZS53aWR0aCA9IHJvb3Qud2lkdGggKyAncHgnO1xuICAgIH1cbiAgfSxcbiAgb25SZXNpemVEZWJvdW5jZWQ6IENvbW1vbi5kZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5vblJlc2l6ZSgpO1xuICB9LCA1MCksXG4gIHJlbWVtYmVyOiBmdW5jdGlvbiByZW1lbWJlcigpIHtcbiAgICBpZiAoQ29tbW9uLmlzVW5kZWZpbmVkKFNBVkVfRElBTE9HVUUpKSB7XG4gICAgICBTQVZFX0RJQUxPR1VFID0gbmV3IENlbnRlcmVkRGl2KCk7XG4gICAgICBTQVZFX0RJQUxPR1VFLmRvbUVsZW1lbnQuaW5uZXJIVE1MID0gc2F2ZURpYWxvZ0NvbnRlbnRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGNhbiBvbmx5IGNhbGwgcmVtZW1iZXIgb24gYSB0b3AgbGV2ZWwgR1VJLicpO1xuICAgIH1cbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIENvbW1vbi5lYWNoKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksIGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIGlmIChfdGhpcy5fX3JlbWVtYmVyZWRPYmplY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBhZGRTYXZlTWVudShfdGhpcyk7XG4gICAgICB9XG4gICAgICBpZiAoX3RoaXMuX19yZW1lbWJlcmVkT2JqZWN0cy5pbmRleE9mKG9iamVjdCkgPT09IC0xKSB7XG4gICAgICAgIF90aGlzLl9fcmVtZW1iZXJlZE9iamVjdHMucHVzaChvYmplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLmF1dG9QbGFjZSkge1xuICAgICAgc2V0V2lkdGgodGhpcywgdGhpcy53aWR0aCk7XG4gICAgfVxuICB9LFxuICBnZXRSb290OiBmdW5jdGlvbiBnZXRSb290KCkge1xuICAgIHZhciBndWkgPSB0aGlzO1xuICAgIHdoaWxlIChndWkucGFyZW50KSB7XG4gICAgICBndWkgPSBndWkucGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gZ3VpO1xuICB9LFxuICBnZXRTYXZlT2JqZWN0OiBmdW5jdGlvbiBnZXRTYXZlT2JqZWN0KCkge1xuICAgIHZhciB0b1JldHVybiA9IHRoaXMubG9hZDtcbiAgICB0b1JldHVybi5jbG9zZWQgPSB0aGlzLmNsb3NlZDtcbiAgICBpZiAodGhpcy5fX3JlbWVtYmVyZWRPYmplY3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRvUmV0dXJuLnByZXNldCA9IHRoaXMucHJlc2V0O1xuICAgICAgaWYgKCF0b1JldHVybi5yZW1lbWJlcmVkKSB7XG4gICAgICAgIHRvUmV0dXJuLnJlbWVtYmVyZWQgPSB7fTtcbiAgICAgIH1cbiAgICAgIHRvUmV0dXJuLnJlbWVtYmVyZWRbdGhpcy5wcmVzZXRdID0gZ2V0Q3VycmVudFByZXNldCh0aGlzKTtcbiAgICB9XG4gICAgdG9SZXR1cm4uZm9sZGVycyA9IHt9O1xuICAgIENvbW1vbi5lYWNoKHRoaXMuX19mb2xkZXJzLCBmdW5jdGlvbiAoZWxlbWVudCwga2V5KSB7XG4gICAgICB0b1JldHVybi5mb2xkZXJzW2tleV0gPSBlbGVtZW50LmdldFNhdmVPYmplY3QoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdG9SZXR1cm47XG4gIH0sXG4gIHNhdmU6IGZ1bmN0aW9uIHNhdmUoKSB7XG4gICAgaWYgKCF0aGlzLmxvYWQucmVtZW1iZXJlZCkge1xuICAgICAgdGhpcy5sb2FkLnJlbWVtYmVyZWQgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5sb2FkLnJlbWVtYmVyZWRbdGhpcy5wcmVzZXRdID0gZ2V0Q3VycmVudFByZXNldCh0aGlzKTtcbiAgICBtYXJrUHJlc2V0TW9kaWZpZWQodGhpcywgZmFsc2UpO1xuICAgIHRoaXMuc2F2ZVRvTG9jYWxTdG9yYWdlSWZQb3NzaWJsZSgpO1xuICB9LFxuICBzYXZlQXM6IGZ1bmN0aW9uIHNhdmVBcyhwcmVzZXROYW1lKSB7XG4gICAgaWYgKCF0aGlzLmxvYWQucmVtZW1iZXJlZCkge1xuICAgICAgdGhpcy5sb2FkLnJlbWVtYmVyZWQgPSB7fTtcbiAgICAgIHRoaXMubG9hZC5yZW1lbWJlcmVkW0RFRkFVTFRfREVGQVVMVF9QUkVTRVRfTkFNRV0gPSBnZXRDdXJyZW50UHJlc2V0KHRoaXMsIHRydWUpO1xuICAgIH1cbiAgICB0aGlzLmxvYWQucmVtZW1iZXJlZFtwcmVzZXROYW1lXSA9IGdldEN1cnJlbnRQcmVzZXQodGhpcyk7XG4gICAgdGhpcy5wcmVzZXQgPSBwcmVzZXROYW1lO1xuICAgIGFkZFByZXNldE9wdGlvbih0aGlzLCBwcmVzZXROYW1lLCB0cnVlKTtcbiAgICB0aGlzLnNhdmVUb0xvY2FsU3RvcmFnZUlmUG9zc2libGUoKTtcbiAgfSxcbiAgcmV2ZXJ0OiBmdW5jdGlvbiByZXZlcnQoZ3VpKSB7XG4gICAgQ29tbW9uLmVhY2godGhpcy5fX2NvbnRyb2xsZXJzLCBmdW5jdGlvbiAoY29udHJvbGxlcikge1xuICAgICAgaWYgKCF0aGlzLmdldFJvb3QoKS5sb2FkLnJlbWVtYmVyZWQpIHtcbiAgICAgICAgY29udHJvbGxlci5zZXRWYWx1ZShjb250cm9sbGVyLmluaXRpYWxWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNhbGxTYXZlZFZhbHVlKGd1aSB8fCB0aGlzLmdldFJvb3QoKSwgY29udHJvbGxlcik7XG4gICAgICB9XG4gICAgICBpZiAoY29udHJvbGxlci5fX29uRmluaXNoQ2hhbmdlKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuX19vbkZpbmlzaENoYW5nZS5jYWxsKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuZ2V0VmFsdWUoKSk7XG4gICAgICB9XG4gICAgfSwgdGhpcyk7XG4gICAgQ29tbW9uLmVhY2godGhpcy5fX2ZvbGRlcnMsIGZ1bmN0aW9uIChmb2xkZXIpIHtcbiAgICAgIGZvbGRlci5yZXZlcnQoZm9sZGVyKTtcbiAgICB9KTtcbiAgICBpZiAoIWd1aSkge1xuICAgICAgbWFya1ByZXNldE1vZGlmaWVkKHRoaXMuZ2V0Um9vdCgpLCBmYWxzZSk7XG4gICAgfVxuICB9LFxuICBsaXN0ZW46IGZ1bmN0aW9uIGxpc3Rlbihjb250cm9sbGVyKSB7XG4gICAgdmFyIGluaXQgPSB0aGlzLl9fbGlzdGVuaW5nLmxlbmd0aCA9PT0gMDtcbiAgICB0aGlzLl9fbGlzdGVuaW5nLnB1c2goY29udHJvbGxlcik7XG4gICAgaWYgKGluaXQpIHtcbiAgICAgIHVwZGF0ZURpc3BsYXlzKHRoaXMuX19saXN0ZW5pbmcpO1xuICAgIH1cbiAgfSxcbiAgdXBkYXRlRGlzcGxheTogZnVuY3Rpb24gdXBkYXRlRGlzcGxheSgpIHtcbiAgICBDb21tb24uZWFjaCh0aGlzLl9fY29udHJvbGxlcnMsIGZ1bmN0aW9uIChjb250cm9sbGVyKSB7XG4gICAgICBjb250cm9sbGVyLnVwZGF0ZURpc3BsYXkoKTtcbiAgICB9KTtcbiAgICBDb21tb24uZWFjaCh0aGlzLl9fZm9sZGVycywgZnVuY3Rpb24gKGZvbGRlcikge1xuICAgICAgZm9sZGVyLnVwZGF0ZURpc3BsYXkoKTtcbiAgICB9KTtcbiAgfVxufSk7XG5mdW5jdGlvbiBhZGRSb3coZ3VpLCBuZXdEb20sIGxpQmVmb3JlKSB7XG4gIHZhciBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7XG4gIGlmIChuZXdEb20pIHtcbiAgICBsaS5hcHBlbmRDaGlsZChuZXdEb20pO1xuICB9XG4gIGlmIChsaUJlZm9yZSkge1xuICAgIGd1aS5fX3VsLmluc2VydEJlZm9yZShsaSwgbGlCZWZvcmUpO1xuICB9IGVsc2Uge1xuICAgIGd1aS5fX3VsLmFwcGVuZENoaWxkKGxpKTtcbiAgfVxuICBndWkub25SZXNpemUoKTtcbiAgcmV0dXJuIGxpO1xufVxuZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXJzKGd1aSkge1xuICBkb20udW5iaW5kKHdpbmRvdywgJ3Jlc2l6ZScsIGd1aS5fX3Jlc2l6ZUhhbmRsZXIpO1xuICBpZiAoZ3VpLnNhdmVUb0xvY2FsU3RvcmFnZUlmUG9zc2libGUpIHtcbiAgICBkb20udW5iaW5kKHdpbmRvdywgJ3VubG9hZCcsIGd1aS5zYXZlVG9Mb2NhbFN0b3JhZ2VJZlBvc3NpYmxlKTtcbiAgfVxufVxuZnVuY3Rpb24gbWFya1ByZXNldE1vZGlmaWVkKGd1aSwgbW9kaWZpZWQpIHtcbiAgdmFyIG9wdCA9IGd1aS5fX3ByZXNldF9zZWxlY3RbZ3VpLl9fcHJlc2V0X3NlbGVjdC5zZWxlY3RlZEluZGV4XTtcbiAgaWYgKG1vZGlmaWVkKSB7XG4gICAgb3B0LmlubmVySFRNTCA9IG9wdC52YWx1ZSArICcqJztcbiAgfSBlbHNlIHtcbiAgICBvcHQuaW5uZXJIVE1MID0gb3B0LnZhbHVlO1xuICB9XG59XG5mdW5jdGlvbiBhdWdtZW50Q29udHJvbGxlcihndWksIGxpLCBjb250cm9sbGVyKSB7XG4gIGNvbnRyb2xsZXIuX19saSA9IGxpO1xuICBjb250cm9sbGVyLl9fZ3VpID0gZ3VpO1xuICBDb21tb24uZXh0ZW5kKGNvbnRyb2xsZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgb3B0aW9uczogZnVuY3Rpb24gb3B0aW9ucyhfb3B0aW9ucykge1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHZhciBuZXh0U2libGluZyA9IGNvbnRyb2xsZXIuX19saS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICAgIGNvbnRyb2xsZXIucmVtb3ZlKCk7XG4gICAgICAgIHJldHVybiBfYWRkKGd1aSwgY29udHJvbGxlci5vYmplY3QsIGNvbnRyb2xsZXIucHJvcGVydHksIHtcbiAgICAgICAgICBiZWZvcmU6IG5leHRTaWJsaW5nLFxuICAgICAgICAgIGZhY3RvcnlBcmdzOiBbQ29tbW9uLnRvQXJyYXkoYXJndW1lbnRzKV1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoQ29tbW9uLmlzQXJyYXkoX29wdGlvbnMpIHx8IENvbW1vbi5pc09iamVjdChfb3B0aW9ucykpIHtcbiAgICAgICAgdmFyIF9uZXh0U2libGluZyA9IGNvbnRyb2xsZXIuX19saS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICAgIGNvbnRyb2xsZXIucmVtb3ZlKCk7XG4gICAgICAgIHJldHVybiBfYWRkKGd1aSwgY29udHJvbGxlci5vYmplY3QsIGNvbnRyb2xsZXIucHJvcGVydHksIHtcbiAgICAgICAgICBiZWZvcmU6IF9uZXh0U2libGluZyxcbiAgICAgICAgICBmYWN0b3J5QXJnczogW19vcHRpb25zXVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG5hbWU6IGZ1bmN0aW9uIG5hbWUoX25hbWUpIHtcbiAgICAgIGNvbnRyb2xsZXIuX19saS5maXJzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZC5pbm5lckhUTUwgPSBfbmFtZTtcbiAgICAgIHJldHVybiBjb250cm9sbGVyO1xuICAgIH0sXG4gICAgbGlzdGVuOiBmdW5jdGlvbiBsaXN0ZW4oKSB7XG4gICAgICBjb250cm9sbGVyLl9fZ3VpLmxpc3Rlbihjb250cm9sbGVyKTtcbiAgICAgIHJldHVybiBjb250cm9sbGVyO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICBjb250cm9sbGVyLl9fZ3VpLnJlbW92ZShjb250cm9sbGVyKTtcbiAgICAgIHJldHVybiBjb250cm9sbGVyO1xuICAgIH1cbiAgfSk7XG4gIGlmIChjb250cm9sbGVyIGluc3RhbmNlb2YgTnVtYmVyQ29udHJvbGxlclNsaWRlcikge1xuICAgIHZhciBib3ggPSBuZXcgTnVtYmVyQ29udHJvbGxlckJveChjb250cm9sbGVyLm9iamVjdCwgY29udHJvbGxlci5wcm9wZXJ0eSwgeyBtaW46IGNvbnRyb2xsZXIuX19taW4sIG1heDogY29udHJvbGxlci5fX21heCwgc3RlcDogY29udHJvbGxlci5fX3N0ZXAgfSk7XG4gICAgQ29tbW9uLmVhY2goWyd1cGRhdGVEaXNwbGF5JywgJ29uQ2hhbmdlJywgJ29uRmluaXNoQ2hhbmdlJywgJ3N0ZXAnLCAnbWluJywgJ21heCddLCBmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICB2YXIgcGMgPSBjb250cm9sbGVyW21ldGhvZF07XG4gICAgICB2YXIgcGIgPSBib3hbbWV0aG9kXTtcbiAgICAgIGNvbnRyb2xsZXJbbWV0aG9kXSA9IGJveFttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgIHBiLmFwcGx5KGJveCwgYXJncyk7XG4gICAgICAgIHJldHVybiBwYy5hcHBseShjb250cm9sbGVyLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgZG9tLmFkZENsYXNzKGxpLCAnaGFzLXNsaWRlcicpO1xuICAgIGNvbnRyb2xsZXIuZG9tRWxlbWVudC5pbnNlcnRCZWZvcmUoYm94LmRvbUVsZW1lbnQsIGNvbnRyb2xsZXIuZG9tRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCk7XG4gIH0gZWxzZSBpZiAoY29udHJvbGxlciBpbnN0YW5jZW9mIE51bWJlckNvbnRyb2xsZXJCb3gpIHtcbiAgICB2YXIgciA9IGZ1bmN0aW9uIHIocmV0dXJuZWQpIHtcbiAgICAgIGlmIChDb21tb24uaXNOdW1iZXIoY29udHJvbGxlci5fX21pbikgJiYgQ29tbW9uLmlzTnVtYmVyKGNvbnRyb2xsZXIuX19tYXgpKSB7XG4gICAgICAgIHZhciBvbGROYW1lID0gY29udHJvbGxlci5fX2xpLmZpcnN0RWxlbWVudENoaWxkLmZpcnN0RWxlbWVudENoaWxkLmlubmVySFRNTDtcbiAgICAgICAgdmFyIHdhc0xpc3RlbmluZyA9IGNvbnRyb2xsZXIuX19ndWkuX19saXN0ZW5pbmcuaW5kZXhPZihjb250cm9sbGVyKSA+IC0xO1xuICAgICAgICBjb250cm9sbGVyLnJlbW92ZSgpO1xuICAgICAgICB2YXIgbmV3Q29udHJvbGxlciA9IF9hZGQoZ3VpLCBjb250cm9sbGVyLm9iamVjdCwgY29udHJvbGxlci5wcm9wZXJ0eSwge1xuICAgICAgICAgIGJlZm9yZTogY29udHJvbGxlci5fX2xpLm5leHRFbGVtZW50U2libGluZyxcbiAgICAgICAgICBmYWN0b3J5QXJnczogW2NvbnRyb2xsZXIuX19taW4sIGNvbnRyb2xsZXIuX19tYXgsIGNvbnRyb2xsZXIuX19zdGVwXVxuICAgICAgICB9KTtcbiAgICAgICAgbmV3Q29udHJvbGxlci5uYW1lKG9sZE5hbWUpO1xuICAgICAgICBpZiAod2FzTGlzdGVuaW5nKSBuZXdDb250cm9sbGVyLmxpc3RlbigpO1xuICAgICAgICByZXR1cm4gbmV3Q29udHJvbGxlcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXR1cm5lZDtcbiAgICB9O1xuICAgIGNvbnRyb2xsZXIubWluID0gQ29tbW9uLmNvbXBvc2UociwgY29udHJvbGxlci5taW4pO1xuICAgIGNvbnRyb2xsZXIubWF4ID0gQ29tbW9uLmNvbXBvc2UociwgY29udHJvbGxlci5tYXgpO1xuICB9IGVsc2UgaWYgKGNvbnRyb2xsZXIgaW5zdGFuY2VvZiBCb29sZWFuQ29udHJvbGxlcikge1xuICAgIGRvbS5iaW5kKGxpLCAnY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkb20uZmFrZUV2ZW50KGNvbnRyb2xsZXIuX19jaGVja2JveCwgJ2NsaWNrJyk7XG4gICAgfSk7XG4gICAgZG9tLmJpbmQoY29udHJvbGxlci5fX2NoZWNrYm94LCAnY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChjb250cm9sbGVyIGluc3RhbmNlb2YgRnVuY3Rpb25Db250cm9sbGVyKSB7XG4gICAgZG9tLmJpbmQobGksICdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRvbS5mYWtlRXZlbnQoY29udHJvbGxlci5fX2J1dHRvbiwgJ2NsaWNrJyk7XG4gICAgfSk7XG4gICAgZG9tLmJpbmQobGksICdtb3VzZW92ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkb20uYWRkQ2xhc3MoY29udHJvbGxlci5fX2J1dHRvbiwgJ2hvdmVyJyk7XG4gICAgfSk7XG4gICAgZG9tLmJpbmQobGksICdtb3VzZW91dCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRvbS5yZW1vdmVDbGFzcyhjb250cm9sbGVyLl9fYnV0dG9uLCAnaG92ZXInKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChjb250cm9sbGVyIGluc3RhbmNlb2YgQ29sb3JDb250cm9sbGVyKSB7XG4gICAgZG9tLmFkZENsYXNzKGxpLCAnY29sb3InKTtcbiAgICBjb250cm9sbGVyLnVwZGF0ZURpc3BsYXkgPSBDb21tb24uY29tcG9zZShmdW5jdGlvbiAodmFsKSB7XG4gICAgICBsaS5zdHlsZS5ib3JkZXJMZWZ0Q29sb3IgPSBjb250cm9sbGVyLl9fY29sb3IudG9TdHJpbmcoKTtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSwgY29udHJvbGxlci51cGRhdGVEaXNwbGF5KTtcbiAgICBjb250cm9sbGVyLnVwZGF0ZURpc3BsYXkoKTtcbiAgfVxuICBjb250cm9sbGVyLnNldFZhbHVlID0gQ29tbW9uLmNvbXBvc2UoZnVuY3Rpb24gKHZhbCkge1xuICAgIGlmIChndWkuZ2V0Um9vdCgpLl9fcHJlc2V0X3NlbGVjdCAmJiBjb250cm9sbGVyLmlzTW9kaWZpZWQoKSkge1xuICAgICAgbWFya1ByZXNldE1vZGlmaWVkKGd1aS5nZXRSb290KCksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9LCBjb250cm9sbGVyLnNldFZhbHVlKTtcbn1cbmZ1bmN0aW9uIHJlY2FsbFNhdmVkVmFsdWUoZ3VpLCBjb250cm9sbGVyKSB7XG4gIHZhciByb290ID0gZ3VpLmdldFJvb3QoKTtcbiAgdmFyIG1hdGNoZWRJbmRleCA9IHJvb3QuX19yZW1lbWJlcmVkT2JqZWN0cy5pbmRleE9mKGNvbnRyb2xsZXIub2JqZWN0KTtcbiAgaWYgKG1hdGNoZWRJbmRleCAhPT0gLTEpIHtcbiAgICB2YXIgY29udHJvbGxlck1hcCA9IHJvb3QuX19yZW1lbWJlcmVkT2JqZWN0SW5kZWNlc1RvQ29udHJvbGxlcnNbbWF0Y2hlZEluZGV4XTtcbiAgICBpZiAoY29udHJvbGxlck1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250cm9sbGVyTWFwID0ge307XG4gICAgICByb290Ll9fcmVtZW1iZXJlZE9iamVjdEluZGVjZXNUb0NvbnRyb2xsZXJzW21hdGNoZWRJbmRleF0gPSBjb250cm9sbGVyTWFwO1xuICAgIH1cbiAgICBjb250cm9sbGVyTWFwW2NvbnRyb2xsZXIucHJvcGVydHldID0gY29udHJvbGxlcjtcbiAgICBpZiAocm9vdC5sb2FkICYmIHJvb3QubG9hZC5yZW1lbWJlcmVkKSB7XG4gICAgICB2YXIgcHJlc2V0TWFwID0gcm9vdC5sb2FkLnJlbWVtYmVyZWQ7XG4gICAgICB2YXIgcHJlc2V0ID0gdm9pZCAwO1xuICAgICAgaWYgKHByZXNldE1hcFtndWkucHJlc2V0XSkge1xuICAgICAgICBwcmVzZXQgPSBwcmVzZXRNYXBbZ3VpLnByZXNldF07XG4gICAgICB9IGVsc2UgaWYgKHByZXNldE1hcFtERUZBVUxUX0RFRkFVTFRfUFJFU0VUX05BTUVdKSB7XG4gICAgICAgIHByZXNldCA9IHByZXNldE1hcFtERUZBVUxUX0RFRkFVTFRfUFJFU0VUX05BTUVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHByZXNldFttYXRjaGVkSW5kZXhdICYmIHByZXNldFttYXRjaGVkSW5kZXhdW2NvbnRyb2xsZXIucHJvcGVydHldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcHJlc2V0W21hdGNoZWRJbmRleF1bY29udHJvbGxlci5wcm9wZXJ0eV07XG4gICAgICAgIGNvbnRyb2xsZXIuaW5pdGlhbFZhbHVlID0gdmFsdWU7XG4gICAgICAgIGNvbnRyb2xsZXIuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gX2FkZChndWksIG9iamVjdCwgcHJvcGVydHksIHBhcmFtcykge1xuICBpZiAob2JqZWN0W3Byb3BlcnR5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdPYmplY3QgXCInICsgb2JqZWN0ICsgJ1wiIGhhcyBubyBwcm9wZXJ0eSBcIicgKyBwcm9wZXJ0eSArICdcIicpO1xuICB9XG4gIHZhciBjb250cm9sbGVyID0gdm9pZCAwO1xuICBpZiAocGFyYW1zLmNvbG9yKSB7XG4gICAgY29udHJvbGxlciA9IG5ldyBDb2xvckNvbnRyb2xsZXIob2JqZWN0LCBwcm9wZXJ0eSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGZhY3RvcnlBcmdzID0gW29iamVjdCwgcHJvcGVydHldLmNvbmNhdChwYXJhbXMuZmFjdG9yeUFyZ3MpO1xuICAgIGNvbnRyb2xsZXIgPSBDb250cm9sbGVyRmFjdG9yeS5hcHBseShndWksIGZhY3RvcnlBcmdzKTtcbiAgfVxuICBpZiAocGFyYW1zLmJlZm9yZSBpbnN0YW5jZW9mIENvbnRyb2xsZXIpIHtcbiAgICBwYXJhbXMuYmVmb3JlID0gcGFyYW1zLmJlZm9yZS5fX2xpO1xuICB9XG4gIHJlY2FsbFNhdmVkVmFsdWUoZ3VpLCBjb250cm9sbGVyKTtcbiAgZG9tLmFkZENsYXNzKGNvbnRyb2xsZXIuZG9tRWxlbWVudCwgJ2MnKTtcbiAgdmFyIG5hbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gIGRvbS5hZGRDbGFzcyhuYW1lLCAncHJvcGVydHktbmFtZScpO1xuICBuYW1lLmlubmVySFRNTCA9IGNvbnRyb2xsZXIucHJvcGVydHk7XG4gIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgY29udGFpbmVyLmFwcGVuZENoaWxkKG5hbWUpO1xuICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY29udHJvbGxlci5kb21FbGVtZW50KTtcbiAgdmFyIGxpID0gYWRkUm93KGd1aSwgY29udGFpbmVyLCBwYXJhbXMuYmVmb3JlKTtcbiAgZG9tLmFkZENsYXNzKGxpLCBHVUkuQ0xBU1NfQ09OVFJPTExFUl9ST1cpO1xuICBpZiAoY29udHJvbGxlciBpbnN0YW5jZW9mIENvbG9yQ29udHJvbGxlcikge1xuICAgIGRvbS5hZGRDbGFzcyhsaSwgJ2NvbG9yJyk7XG4gIH0gZWxzZSB7XG4gICAgZG9tLmFkZENsYXNzKGxpLCBfdHlwZW9mKGNvbnRyb2xsZXIuZ2V0VmFsdWUoKSkpO1xuICB9XG4gIGF1Z21lbnRDb250cm9sbGVyKGd1aSwgbGksIGNvbnRyb2xsZXIpO1xuICBndWkuX19jb250cm9sbGVycy5wdXNoKGNvbnRyb2xsZXIpO1xuICByZXR1cm4gY29udHJvbGxlcjtcbn1cbmZ1bmN0aW9uIGdldExvY2FsU3RvcmFnZUhhc2goZ3VpLCBrZXkpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmxvY2F0aW9uLmhyZWYgKyAnLicgKyBrZXk7XG59XG5mdW5jdGlvbiBhZGRQcmVzZXRPcHRpb24oZ3VpLCBuYW1lLCBzZXRTZWxlY3RlZCkge1xuICB2YXIgb3B0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gIG9wdC5pbm5lckhUTUwgPSBuYW1lO1xuICBvcHQudmFsdWUgPSBuYW1lO1xuICBndWkuX19wcmVzZXRfc2VsZWN0LmFwcGVuZENoaWxkKG9wdCk7XG4gIGlmIChzZXRTZWxlY3RlZCkge1xuICAgIGd1aS5fX3ByZXNldF9zZWxlY3Quc2VsZWN0ZWRJbmRleCA9IGd1aS5fX3ByZXNldF9zZWxlY3QubGVuZ3RoIC0gMTtcbiAgfVxufVxuZnVuY3Rpb24gc2hvd0hpZGVFeHBsYWluKGd1aSwgZXhwbGFpbikge1xuICBleHBsYWluLnN0eWxlLmRpc3BsYXkgPSBndWkudXNlTG9jYWxTdG9yYWdlID8gJ2Jsb2NrJyA6ICdub25lJztcbn1cbmZ1bmN0aW9uIGFkZFNhdmVNZW51KGd1aSkge1xuICB2YXIgZGl2ID0gZ3VpLl9fc2F2ZV9yb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO1xuICBkb20uYWRkQ2xhc3MoZ3VpLmRvbUVsZW1lbnQsICdoYXMtc2F2ZScpO1xuICBndWkuX191bC5pbnNlcnRCZWZvcmUoZGl2LCBndWkuX191bC5maXJzdENoaWxkKTtcbiAgZG9tLmFkZENsYXNzKGRpdiwgJ3NhdmUtcm93Jyk7XG4gIHZhciBnZWFycyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgZ2VhcnMuaW5uZXJIVE1MID0gJyZuYnNwOyc7XG4gIGRvbS5hZGRDbGFzcyhnZWFycywgJ2J1dHRvbiBnZWFycycpO1xuICB2YXIgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICBidXR0b24uaW5uZXJIVE1MID0gJ1NhdmUnO1xuICBkb20uYWRkQ2xhc3MoYnV0dG9uLCAnYnV0dG9uJyk7XG4gIGRvbS5hZGRDbGFzcyhidXR0b24sICdzYXZlJyk7XG4gIHZhciBidXR0b24yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICBidXR0b24yLmlubmVySFRNTCA9ICdOZXcnO1xuICBkb20uYWRkQ2xhc3MoYnV0dG9uMiwgJ2J1dHRvbicpO1xuICBkb20uYWRkQ2xhc3MoYnV0dG9uMiwgJ3NhdmUtYXMnKTtcbiAgdmFyIGJ1dHRvbjMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gIGJ1dHRvbjMuaW5uZXJIVE1MID0gJ1JldmVydCc7XG4gIGRvbS5hZGRDbGFzcyhidXR0b24zLCAnYnV0dG9uJyk7XG4gIGRvbS5hZGRDbGFzcyhidXR0b24zLCAncmV2ZXJ0Jyk7XG4gIHZhciBzZWxlY3QgPSBndWkuX19wcmVzZXRfc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7XG4gIGlmIChndWkubG9hZCAmJiBndWkubG9hZC5yZW1lbWJlcmVkKSB7XG4gICAgQ29tbW9uLmVhY2goZ3VpLmxvYWQucmVtZW1iZXJlZCwgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIGFkZFByZXNldE9wdGlvbihndWksIGtleSwga2V5ID09PSBndWkucHJlc2V0KTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBhZGRQcmVzZXRPcHRpb24oZ3VpLCBERUZBVUxUX0RFRkFVTFRfUFJFU0VUX05BTUUsIGZhbHNlKTtcbiAgfVxuICBkb20uYmluZChzZWxlY3QsICdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGd1aS5fX3ByZXNldF9zZWxlY3QubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBndWkuX19wcmVzZXRfc2VsZWN0W2luZGV4XS5pbm5lckhUTUwgPSBndWkuX19wcmVzZXRfc2VsZWN0W2luZGV4XS52YWx1ZTtcbiAgICB9XG4gICAgZ3VpLnByZXNldCA9IHRoaXMudmFsdWU7XG4gIH0pO1xuICBkaXYuYXBwZW5kQ2hpbGQoc2VsZWN0KTtcbiAgZGl2LmFwcGVuZENoaWxkKGdlYXJzKTtcbiAgZGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gIGRpdi5hcHBlbmRDaGlsZChidXR0b24yKTtcbiAgZGl2LmFwcGVuZENoaWxkKGJ1dHRvbjMpO1xuICBpZiAoU1VQUE9SVFNfTE9DQUxfU1RPUkFHRSkge1xuICAgIHZhciBleHBsYWluID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RnLWxvY2FsLWV4cGxhaW4nKTtcbiAgICB2YXIgbG9jYWxTdG9yYWdlQ2hlY2tCb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGctbG9jYWwtc3RvcmFnZScpO1xuICAgIHZhciBzYXZlTG9jYWxseSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZy1zYXZlLWxvY2FsbHknKTtcbiAgICBzYXZlTG9jYWxseS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oZ2V0TG9jYWxTdG9yYWdlSGFzaChndWksICdpc0xvY2FsJykpID09PSAndHJ1ZScpIHtcbiAgICAgIGxvY2FsU3RvcmFnZUNoZWNrQm94LnNldEF0dHJpYnV0ZSgnY2hlY2tlZCcsICdjaGVja2VkJyk7XG4gICAgfVxuICAgIHNob3dIaWRlRXhwbGFpbihndWksIGV4cGxhaW4pO1xuICAgIGRvbS5iaW5kKGxvY2FsU3RvcmFnZUNoZWNrQm94LCAnY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgZ3VpLnVzZUxvY2FsU3RvcmFnZSA9ICFndWkudXNlTG9jYWxTdG9yYWdlO1xuICAgICAgc2hvd0hpZGVFeHBsYWluKGd1aSwgZXhwbGFpbik7XG4gICAgfSk7XG4gIH1cbiAgdmFyIG5ld0NvbnN0cnVjdG9yVGV4dEFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGctbmV3LWNvbnN0cnVjdG9yJyk7XG4gIGRvbS5iaW5kKG5ld0NvbnN0cnVjdG9yVGV4dEFyZWEsICdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoZS5tZXRhS2V5ICYmIChlLndoaWNoID09PSA2NyB8fCBlLmtleUNvZGUgPT09IDY3KSkge1xuICAgICAgU0FWRV9ESUFMT0dVRS5oaWRlKCk7XG4gICAgfVxuICB9KTtcbiAgZG9tLmJpbmQoZ2VhcnMsICdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICBuZXdDb25zdHJ1Y3RvclRleHRBcmVhLmlubmVySFRNTCA9IEpTT04uc3RyaW5naWZ5KGd1aS5nZXRTYXZlT2JqZWN0KCksIHVuZGVmaW5lZCwgMik7XG4gICAgU0FWRV9ESUFMT0dVRS5zaG93KCk7XG4gICAgbmV3Q29uc3RydWN0b3JUZXh0QXJlYS5mb2N1cygpO1xuICAgIG5ld0NvbnN0cnVjdG9yVGV4dEFyZWEuc2VsZWN0KCk7XG4gIH0pO1xuICBkb20uYmluZChidXR0b24sICdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICBndWkuc2F2ZSgpO1xuICB9KTtcbiAgZG9tLmJpbmQoYnV0dG9uMiwgJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcmVzZXROYW1lID0gcHJvbXB0KCdFbnRlciBhIG5ldyBwcmVzZXQgbmFtZS4nKTtcbiAgICBpZiAocHJlc2V0TmFtZSkge1xuICAgICAgZ3VpLnNhdmVBcyhwcmVzZXROYW1lKTtcbiAgICB9XG4gIH0pO1xuICBkb20uYmluZChidXR0b24zLCAnY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgZ3VpLnJldmVydCgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGFkZFJlc2l6ZUhhbmRsZShndWkpIHtcbiAgdmFyIHBtb3VzZVggPSB2b2lkIDA7XG4gIGd1aS5fX3Jlc2l6ZV9oYW5kbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgQ29tbW9uLmV4dGVuZChndWkuX19yZXNpemVfaGFuZGxlLnN0eWxlLCB7XG4gICAgd2lkdGg6ICc2cHgnLFxuICAgIG1hcmdpbkxlZnQ6ICctM3B4JyxcbiAgICBoZWlnaHQ6ICcyMDBweCcsXG4gICAgY3Vyc29yOiAnZXctcmVzaXplJyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICB9KTtcbiAgZnVuY3Rpb24gZHJhZyhlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGd1aS53aWR0aCArPSBwbW91c2VYIC0gZS5jbGllbnRYO1xuICAgIGd1aS5vblJlc2l6ZSgpO1xuICAgIHBtb3VzZVggPSBlLmNsaWVudFg7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZ1bmN0aW9uIGRyYWdTdG9wKCkge1xuICAgIGRvbS5yZW1vdmVDbGFzcyhndWkuX19jbG9zZUJ1dHRvbiwgR1VJLkNMQVNTX0RSQUcpO1xuICAgIGRvbS51bmJpbmQod2luZG93LCAnbW91c2Vtb3ZlJywgZHJhZyk7XG4gICAgZG9tLnVuYmluZCh3aW5kb3csICdtb3VzZXVwJywgZHJhZ1N0b3ApO1xuICB9XG4gIGZ1bmN0aW9uIGRyYWdTdGFydChlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHBtb3VzZVggPSBlLmNsaWVudFg7XG4gICAgZG9tLmFkZENsYXNzKGd1aS5fX2Nsb3NlQnV0dG9uLCBHVUkuQ0xBU1NfRFJBRyk7XG4gICAgZG9tLmJpbmQod2luZG93LCAnbW91c2Vtb3ZlJywgZHJhZyk7XG4gICAgZG9tLmJpbmQod2luZG93LCAnbW91c2V1cCcsIGRyYWdTdG9wKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZG9tLmJpbmQoZ3VpLl9fcmVzaXplX2hhbmRsZSwgJ21vdXNlZG93bicsIGRyYWdTdGFydCk7XG4gIGRvbS5iaW5kKGd1aS5fX2Nsb3NlQnV0dG9uLCAnbW91c2Vkb3duJywgZHJhZ1N0YXJ0KTtcbiAgZ3VpLmRvbUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGd1aS5fX3Jlc2l6ZV9oYW5kbGUsIGd1aS5kb21FbGVtZW50LmZpcnN0RWxlbWVudENoaWxkKTtcbn1cbmZ1bmN0aW9uIHNldFdpZHRoKGd1aSwgdykge1xuICBndWkuZG9tRWxlbWVudC5zdHlsZS53aWR0aCA9IHcgKyAncHgnO1xuICBpZiAoZ3VpLl9fc2F2ZV9yb3cgJiYgZ3VpLmF1dG9QbGFjZSkge1xuICAgIGd1aS5fX3NhdmVfcm93LnN0eWxlLndpZHRoID0gdyArICdweCc7XG4gIH1cbiAgaWYgKGd1aS5fX2Nsb3NlQnV0dG9uKSB7XG4gICAgZ3VpLl9fY2xvc2VCdXR0b24uc3R5bGUud2lkdGggPSB3ICsgJ3B4JztcbiAgfVxufVxuZnVuY3Rpb24gZ2V0Q3VycmVudFByZXNldChndWksIHVzZUluaXRpYWxWYWx1ZXMpIHtcbiAgdmFyIHRvUmV0dXJuID0ge307XG4gIENvbW1vbi5lYWNoKGd1aS5fX3JlbWVtYmVyZWRPYmplY3RzLCBmdW5jdGlvbiAodmFsLCBpbmRleCkge1xuICAgIHZhciBzYXZlZFZhbHVlcyA9IHt9O1xuICAgIHZhciBjb250cm9sbGVyTWFwID0gZ3VpLl9fcmVtZW1iZXJlZE9iamVjdEluZGVjZXNUb0NvbnRyb2xsZXJzW2luZGV4XTtcbiAgICBDb21tb24uZWFjaChjb250cm9sbGVyTWFwLCBmdW5jdGlvbiAoY29udHJvbGxlciwgcHJvcGVydHkpIHtcbiAgICAgIHNhdmVkVmFsdWVzW3Byb3BlcnR5XSA9IHVzZUluaXRpYWxWYWx1ZXMgPyBjb250cm9sbGVyLmluaXRpYWxWYWx1ZSA6IGNvbnRyb2xsZXIuZ2V0VmFsdWUoKTtcbiAgICB9KTtcbiAgICB0b1JldHVybltpbmRleF0gPSBzYXZlZFZhbHVlcztcbiAgfSk7XG4gIHJldHVybiB0b1JldHVybjtcbn1cbmZ1bmN0aW9uIHNldFByZXNldFNlbGVjdEluZGV4KGd1aSkge1xuICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgZ3VpLl9fcHJlc2V0X3NlbGVjdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBpZiAoZ3VpLl9fcHJlc2V0X3NlbGVjdFtpbmRleF0udmFsdWUgPT09IGd1aS5wcmVzZXQpIHtcbiAgICAgIGd1aS5fX3ByZXNldF9zZWxlY3Quc2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdXBkYXRlRGlzcGxheXMoY29udHJvbGxlckFycmF5KSB7XG4gIGlmIChjb250cm9sbGVyQXJyYXkubGVuZ3RoICE9PSAwKSB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lJDEuY2FsbCh3aW5kb3csIGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZURpc3BsYXlzKGNvbnRyb2xsZXJBcnJheSk7XG4gICAgfSk7XG4gIH1cbiAgQ29tbW9uLmVhY2goY29udHJvbGxlckFycmF5LCBmdW5jdGlvbiAoYykge1xuICAgIGMudXBkYXRlRGlzcGxheSgpO1xuICB9KTtcbn1cblxudmFyIGNvbG9yID0ge1xuICBDb2xvcjogQ29sb3IsXG4gIG1hdGg6IENvbG9yTWF0aCxcbiAgaW50ZXJwcmV0OiBpbnRlcnByZXRcbn07XG52YXIgY29udHJvbGxlcnMgPSB7XG4gIENvbnRyb2xsZXI6IENvbnRyb2xsZXIsXG4gIEJvb2xlYW5Db250cm9sbGVyOiBCb29sZWFuQ29udHJvbGxlcixcbiAgT3B0aW9uQ29udHJvbGxlcjogT3B0aW9uQ29udHJvbGxlcixcbiAgU3RyaW5nQ29udHJvbGxlcjogU3RyaW5nQ29udHJvbGxlcixcbiAgTnVtYmVyQ29udHJvbGxlcjogTnVtYmVyQ29udHJvbGxlcixcbiAgTnVtYmVyQ29udHJvbGxlckJveDogTnVtYmVyQ29udHJvbGxlckJveCxcbiAgTnVtYmVyQ29udHJvbGxlclNsaWRlcjogTnVtYmVyQ29udHJvbGxlclNsaWRlcixcbiAgRnVuY3Rpb25Db250cm9sbGVyOiBGdW5jdGlvbkNvbnRyb2xsZXIsXG4gIENvbG9yQ29udHJvbGxlcjogQ29sb3JDb250cm9sbGVyXG59O1xudmFyIGRvbSQxID0geyBkb206IGRvbSB9O1xudmFyIGd1aSA9IHsgR1VJOiBHVUkgfTtcbnZhciBHVUkkMSA9IEdVSTtcbnZhciBpbmRleCA9IHtcbiAgY29sb3I6IGNvbG9yLFxuICBjb250cm9sbGVyczogY29udHJvbGxlcnMsXG4gIGRvbTogZG9tJDEsXG4gIGd1aTogZ3VpLFxuICBHVUk6IEdVSSQxXG59O1xuXG5leHBvcnRzLmNvbG9yID0gY29sb3I7XG5leHBvcnRzLmNvbnRyb2xsZXJzID0gY29udHJvbGxlcnM7XG5leHBvcnRzLmRvbSA9IGRvbSQxO1xuZXhwb3J0cy5ndWkgPSBndWk7XG5leHBvcnRzLkdVSSA9IEdVSSQxO1xuZXhwb3J0c1snZGVmYXVsdCddID0gaW5kZXg7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXQuZ3VpLmpzLm1hcFxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gYXJndW1lbnRzW2ldO1xuICAgIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgd2lkdGggPSAyNTY7Ly8gZWFjaCBSQzQgb3V0cHV0IGlzIDAgPD0geCA8IDI1NlxyXG52YXIgY2h1bmtzID0gNjsvLyBhdCBsZWFzdCBzaXggUkM0IG91dHB1dHMgZm9yIGVhY2ggZG91YmxlXHJcbnZhciBkaWdpdHMgPSA1MjsvLyB0aGVyZSBhcmUgNTIgc2lnbmlmaWNhbnQgZGlnaXRzIGluIGEgZG91YmxlXHJcbnZhciBwb29sID0gW107Ly8gcG9vbDogZW50cm9weSBwb29sIHN0YXJ0cyBlbXB0eVxyXG52YXIgR0xPQkFMID0gdHlwZW9mIGdsb2JhbCA9PT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWw7XHJcblxyXG4vL1xyXG4vLyBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVsYXRlZCB0byBJRUVFIDc1NCBsaW1pdHMuXHJcbi8vXHJcbnZhciBzdGFydGRlbm9tID0gTWF0aC5wb3cod2lkdGgsIGNodW5rcyksXHJcbiAgICBzaWduaWZpY2FuY2UgPSBNYXRoLnBvdygyLCBkaWdpdHMpLFxyXG4gICAgb3ZlcmZsb3cgPSBzaWduaWZpY2FuY2UgKiAyLFxyXG4gICAgbWFzayA9IHdpZHRoIC0gMTtcclxuXHJcblxyXG52YXIgb2xkUmFuZG9tID0gTWF0aC5yYW5kb207XHJcblxyXG4vL1xyXG4vLyBzZWVkcmFuZG9tKClcclxuLy8gVGhpcyBpcyB0aGUgc2VlZHJhbmRvbSBmdW5jdGlvbiBkZXNjcmliZWQgYWJvdmUuXHJcbi8vXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oc2VlZCwgb3B0aW9ucykge1xyXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2xvYmFsID09PSB0cnVlKSB7XHJcbiAgICBvcHRpb25zLmdsb2JhbCA9IGZhbHNlO1xyXG4gICAgTWF0aC5yYW5kb20gPSBtb2R1bGUuZXhwb3J0cyhzZWVkLCBvcHRpb25zKTtcclxuICAgIG9wdGlvbnMuZ2xvYmFsID0gdHJ1ZTtcclxuICAgIHJldHVybiBNYXRoLnJhbmRvbTtcclxuICB9XHJcbiAgdmFyIHVzZV9lbnRyb3B5ID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5lbnRyb3B5KSB8fCBmYWxzZTtcclxuICB2YXIga2V5ID0gW107XHJcblxyXG4gIC8vIEZsYXR0ZW4gdGhlIHNlZWQgc3RyaW5nIG9yIGJ1aWxkIG9uZSBmcm9tIGxvY2FsIGVudHJvcHkgaWYgbmVlZGVkLlxyXG4gIHZhciBzaG9ydHNlZWQgPSBtaXhrZXkoZmxhdHRlbihcclxuICAgIHVzZV9lbnRyb3B5ID8gW3NlZWQsIHRvc3RyaW5nKHBvb2wpXSA6XHJcbiAgICAwIGluIGFyZ3VtZW50cyA/IHNlZWQgOiBhdXRvc2VlZCgpLCAzKSwga2V5KTtcclxuXHJcbiAgLy8gVXNlIHRoZSBzZWVkIHRvIGluaXRpYWxpemUgYW4gQVJDNCBnZW5lcmF0b3IuXHJcbiAgdmFyIGFyYzQgPSBuZXcgQVJDNChrZXkpO1xyXG5cclxuICAvLyBNaXggdGhlIHJhbmRvbW5lc3MgaW50byBhY2N1bXVsYXRlZCBlbnRyb3B5LlxyXG4gIG1peGtleSh0b3N0cmluZyhhcmM0LlMpLCBwb29sKTtcclxuXHJcbiAgLy8gT3ZlcnJpZGUgTWF0aC5yYW5kb21cclxuXHJcbiAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcmFuZG9tIGRvdWJsZSBpbiBbMCwgMSkgdGhhdCBjb250YWluc1xyXG4gIC8vIHJhbmRvbW5lc3MgaW4gZXZlcnkgYml0IG9mIHRoZSBtYW50aXNzYSBvZiB0aGUgSUVFRSA3NTQgdmFsdWUuXHJcblxyXG4gIHJldHVybiBmdW5jdGlvbigpIHsgICAgICAgICAvLyBDbG9zdXJlIHRvIHJldHVybiBhIHJhbmRvbSBkb3VibGU6XHJcbiAgICB2YXIgbiA9IGFyYzQuZyhjaHVua3MpLCAgICAgICAgICAgICAvLyBTdGFydCB3aXRoIGEgbnVtZXJhdG9yIG4gPCAyIF4gNDhcclxuICAgICAgICBkID0gc3RhcnRkZW5vbSwgICAgICAgICAgICAgICAgIC8vICAgYW5kIGRlbm9taW5hdG9yIGQgPSAyIF4gNDguXHJcbiAgICAgICAgeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGFuZCBubyAnZXh0cmEgbGFzdCBieXRlJy5cclxuICAgIHdoaWxlIChuIDwgc2lnbmlmaWNhbmNlKSB7ICAgICAgICAgIC8vIEZpbGwgdXAgYWxsIHNpZ25pZmljYW50IGRpZ2l0cyBieVxyXG4gICAgICBuID0gKG4gKyB4KSAqIHdpZHRoOyAgICAgICAgICAgICAgLy8gICBzaGlmdGluZyBudW1lcmF0b3IgYW5kXHJcbiAgICAgIGQgKj0gd2lkdGg7ICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGRlbm9taW5hdG9yIGFuZCBnZW5lcmF0aW5nIGFcclxuICAgICAgeCA9IGFyYzQuZygxKTsgICAgICAgICAgICAgICAgICAgIC8vICAgbmV3IGxlYXN0LXNpZ25pZmljYW50LWJ5dGUuXHJcbiAgICB9XHJcbiAgICB3aGlsZSAobiA+PSBvdmVyZmxvdykgeyAgICAgICAgICAgICAvLyBUbyBhdm9pZCByb3VuZGluZyB1cCwgYmVmb3JlIGFkZGluZ1xyXG4gICAgICBuIC89IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBsYXN0IGJ5dGUsIHNoaWZ0IGV2ZXJ5dGhpbmdcclxuICAgICAgZCAvPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgcmlnaHQgdXNpbmcgaW50ZWdlciBNYXRoIHVudGlsXHJcbiAgICAgIHggPj4+PSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHdlIGhhdmUgZXhhY3RseSB0aGUgZGVzaXJlZCBiaXRzLlxyXG4gICAgfVxyXG4gICAgcmV0dXJuIChuICsgeCkgLyBkOyAgICAgICAgICAgICAgICAgLy8gRm9ybSB0aGUgbnVtYmVyIHdpdGhpbiBbMCwgMSkuXHJcbiAgfTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnJlc2V0R2xvYmFsID0gZnVuY3Rpb24gKCkge1xyXG4gIE1hdGgucmFuZG9tID0gb2xkUmFuZG9tO1xyXG59O1xyXG5cclxuLy9cclxuLy8gQVJDNFxyXG4vL1xyXG4vLyBBbiBBUkM0IGltcGxlbWVudGF0aW9uLiAgVGhlIGNvbnN0cnVjdG9yIHRha2VzIGEga2V5IGluIHRoZSBmb3JtIG9mXHJcbi8vIGFuIGFycmF5IG9mIGF0IG1vc3QgKHdpZHRoKSBpbnRlZ2VycyB0aGF0IHNob3VsZCBiZSAwIDw9IHggPCAod2lkdGgpLlxyXG4vL1xyXG4vLyBUaGUgZyhjb3VudCkgbWV0aG9kIHJldHVybnMgYSBwc2V1ZG9yYW5kb20gaW50ZWdlciB0aGF0IGNvbmNhdGVuYXRlc1xyXG4vLyB0aGUgbmV4dCAoY291bnQpIG91dHB1dHMgZnJvbSBBUkM0LiAgSXRzIHJldHVybiB2YWx1ZSBpcyBhIG51bWJlciB4XHJcbi8vIHRoYXQgaXMgaW4gdGhlIHJhbmdlIDAgPD0geCA8ICh3aWR0aCBeIGNvdW50KS5cclxuLy9cclxuLyoqIEBjb25zdHJ1Y3RvciAqL1xyXG5mdW5jdGlvbiBBUkM0KGtleSkge1xyXG4gIHZhciB0LCBrZXlsZW4gPSBrZXkubGVuZ3RoLFxyXG4gICAgICBtZSA9IHRoaXMsIGkgPSAwLCBqID0gbWUuaSA9IG1lLmogPSAwLCBzID0gbWUuUyA9IFtdO1xyXG5cclxuICAvLyBUaGUgZW1wdHkga2V5IFtdIGlzIHRyZWF0ZWQgYXMgWzBdLlxyXG4gIGlmICgha2V5bGVuKSB7IGtleSA9IFtrZXlsZW4rK107IH1cclxuXHJcbiAgLy8gU2V0IHVwIFMgdXNpbmcgdGhlIHN0YW5kYXJkIGtleSBzY2hlZHVsaW5nIGFsZ29yaXRobS5cclxuICB3aGlsZSAoaSA8IHdpZHRoKSB7XHJcbiAgICBzW2ldID0gaSsrO1xyXG4gIH1cclxuICBmb3IgKGkgPSAwOyBpIDwgd2lkdGg7IGkrKykge1xyXG4gICAgc1tpXSA9IHNbaiA9IG1hc2sgJiAoaiArIGtleVtpICUga2V5bGVuXSArICh0ID0gc1tpXSkpXTtcclxuICAgIHNbal0gPSB0O1xyXG4gIH1cclxuXHJcbiAgLy8gVGhlIFwiZ1wiIG1ldGhvZCByZXR1cm5zIHRoZSBuZXh0IChjb3VudCkgb3V0cHV0cyBhcyBvbmUgbnVtYmVyLlxyXG4gIChtZS5nID0gZnVuY3Rpb24oY291bnQpIHtcclxuICAgIC8vIFVzaW5nIGluc3RhbmNlIG1lbWJlcnMgaW5zdGVhZCBvZiBjbG9zdXJlIHN0YXRlIG5lYXJseSBkb3VibGVzIHNwZWVkLlxyXG4gICAgdmFyIHQsIHIgPSAwLFxyXG4gICAgICAgIGkgPSBtZS5pLCBqID0gbWUuaiwgcyA9IG1lLlM7XHJcbiAgICB3aGlsZSAoY291bnQtLSkge1xyXG4gICAgICB0ID0gc1tpID0gbWFzayAmIChpICsgMSldO1xyXG4gICAgICByID0gciAqIHdpZHRoICsgc1ttYXNrICYgKChzW2ldID0gc1tqID0gbWFzayAmIChqICsgdCldKSArIChzW2pdID0gdCkpXTtcclxuICAgIH1cclxuICAgIG1lLmkgPSBpOyBtZS5qID0gajtcclxuICAgIHJldHVybiByO1xyXG4gICAgLy8gRm9yIHJvYnVzdCB1bnByZWRpY3RhYmlsaXR5IGRpc2NhcmQgYW4gaW5pdGlhbCBiYXRjaCBvZiB2YWx1ZXMuXHJcbiAgICAvLyBTZWUgaHR0cDovL3d3dy5yc2EuY29tL3JzYWxhYnMvbm9kZS5hc3A/aWQ9MjAwOVxyXG4gIH0pKHdpZHRoKTtcclxufVxyXG5cclxuLy9cclxuLy8gZmxhdHRlbigpXHJcbi8vIENvbnZlcnRzIGFuIG9iamVjdCB0cmVlIHRvIG5lc3RlZCBhcnJheXMgb2Ygc3RyaW5ncy5cclxuLy9cclxuZnVuY3Rpb24gZmxhdHRlbihvYmosIGRlcHRoKSB7XHJcbiAgdmFyIHJlc3VsdCA9IFtdLCB0eXAgPSAodHlwZW9mIG9iailbMF0sIHByb3A7XHJcbiAgaWYgKGRlcHRoICYmIHR5cCA9PSAnbycpIHtcclxuICAgIGZvciAocHJvcCBpbiBvYmopIHtcclxuICAgICAgdHJ5IHsgcmVzdWx0LnB1c2goZmxhdHRlbihvYmpbcHJvcF0sIGRlcHRoIC0gMSkpOyB9IGNhdGNoIChlKSB7fVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gKHJlc3VsdC5sZW5ndGggPyByZXN1bHQgOiB0eXAgPT0gJ3MnID8gb2JqIDogb2JqICsgJ1xcMCcpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBtaXhrZXkoKVxyXG4vLyBNaXhlcyBhIHN0cmluZyBzZWVkIGludG8gYSBrZXkgdGhhdCBpcyBhbiBhcnJheSBvZiBpbnRlZ2VycywgYW5kXHJcbi8vIHJldHVybnMgYSBzaG9ydGVuZWQgc3RyaW5nIHNlZWQgdGhhdCBpcyBlcXVpdmFsZW50IHRvIHRoZSByZXN1bHQga2V5LlxyXG4vL1xyXG5mdW5jdGlvbiBtaXhrZXkoc2VlZCwga2V5KSB7XHJcbiAgdmFyIHN0cmluZ3NlZWQgPSBzZWVkICsgJycsIHNtZWFyLCBqID0gMDtcclxuICB3aGlsZSAoaiA8IHN0cmluZ3NlZWQubGVuZ3RoKSB7XHJcbiAgICBrZXlbbWFzayAmIGpdID1cclxuICAgICAgbWFzayAmICgoc21lYXIgXj0ga2V5W21hc2sgJiBqXSAqIDE5KSArIHN0cmluZ3NlZWQuY2hhckNvZGVBdChqKyspKTtcclxuICB9XHJcbiAgcmV0dXJuIHRvc3RyaW5nKGtleSk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIGF1dG9zZWVkKClcclxuLy8gUmV0dXJucyBhbiBvYmplY3QgZm9yIGF1dG9zZWVkaW5nLCB1c2luZyB3aW5kb3cuY3J5cHRvIGlmIGF2YWlsYWJsZS5cclxuLy9cclxuLyoqIEBwYXJhbSB7VWludDhBcnJheT19IHNlZWQgKi9cclxuZnVuY3Rpb24gYXV0b3NlZWQoc2VlZCkge1xyXG4gIHRyeSB7XHJcbiAgICBHTE9CQUwuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhzZWVkID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpKTtcclxuICAgIHJldHVybiB0b3N0cmluZyhzZWVkKTtcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICByZXR1cm4gWytuZXcgRGF0ZSwgR0xPQkFMLCBHTE9CQUwubmF2aWdhdG9yICYmIEdMT0JBTC5uYXZpZ2F0b3IucGx1Z2lucyxcclxuICAgICAgICAgICAgR0xPQkFMLnNjcmVlbiwgdG9zdHJpbmcocG9vbCldO1xyXG4gIH1cclxufVxyXG5cclxuLy9cclxuLy8gdG9zdHJpbmcoKVxyXG4vLyBDb252ZXJ0cyBhbiBhcnJheSBvZiBjaGFyY29kZXMgdG8gYSBzdHJpbmdcclxuLy9cclxuZnVuY3Rpb24gdG9zdHJpbmcoYSkge1xyXG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KDAsIGEpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBXaGVuIHNlZWRyYW5kb20uanMgaXMgbG9hZGVkLCB3ZSBpbW1lZGlhdGVseSBtaXggYSBmZXcgYml0c1xyXG4vLyBmcm9tIHRoZSBidWlsdC1pbiBSTkcgaW50byB0aGUgZW50cm9weSBwb29sLiAgQmVjYXVzZSB3ZSBkb1xyXG4vLyBub3Qgd2FudCB0byBpbnRlZmVyZSB3aXRoIGRldGVybWluc3RpYyBQUk5HIHN0YXRlIGxhdGVyLFxyXG4vLyBzZWVkcmFuZG9tIHdpbGwgbm90IGNhbGwgTWF0aC5yYW5kb20gb24gaXRzIG93biBhZ2FpbiBhZnRlclxyXG4vLyBpbml0aWFsaXphdGlvbi5cclxuLy9cclxubWl4a2V5KE1hdGgucmFuZG9tKCksIHBvb2wpO1xyXG4iLCIvKlxuICogQSBmYXN0IGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gb2Ygc2ltcGxleCBub2lzZSBieSBKb25hcyBXYWduZXJcblxuQmFzZWQgb24gYSBzcGVlZC1pbXByb3ZlZCBzaW1wbGV4IG5vaXNlIGFsZ29yaXRobSBmb3IgMkQsIDNEIGFuZCA0RCBpbiBKYXZhLlxuV2hpY2ggaXMgYmFzZWQgb24gZXhhbXBsZSBjb2RlIGJ5IFN0ZWZhbiBHdXN0YXZzb24gKHN0ZWd1QGl0bi5saXUuc2UpLlxuV2l0aCBPcHRpbWlzYXRpb25zIGJ5IFBldGVyIEVhc3RtYW4gKHBlYXN0bWFuQGRyaXp6bGUuc3RhbmZvcmQuZWR1KS5cbkJldHRlciByYW5rIG9yZGVyaW5nIG1ldGhvZCBieSBTdGVmYW4gR3VzdGF2c29uIGluIDIwMTIuXG5cblxuIENvcHlyaWdodCAoYykgMjAxOCBKb25hcyBXYWduZXJcblxuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuIFNPRlRXQVJFLlxuICovXG4oZnVuY3Rpb24oKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgRjIgPSAwLjUgKiAoTWF0aC5zcXJ0KDMuMCkgLSAxLjApO1xuICB2YXIgRzIgPSAoMy4wIC0gTWF0aC5zcXJ0KDMuMCkpIC8gNi4wO1xuICB2YXIgRjMgPSAxLjAgLyAzLjA7XG4gIHZhciBHMyA9IDEuMCAvIDYuMDtcbiAgdmFyIEY0ID0gKE1hdGguc3FydCg1LjApIC0gMS4wKSAvIDQuMDtcbiAgdmFyIEc0ID0gKDUuMCAtIE1hdGguc3FydCg1LjApKSAvIDIwLjA7XG5cbiAgZnVuY3Rpb24gU2ltcGxleE5vaXNlKHJhbmRvbU9yU2VlZCkge1xuICAgIHZhciByYW5kb207XG4gICAgaWYgKHR5cGVvZiByYW5kb21PclNlZWQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmFuZG9tID0gcmFuZG9tT3JTZWVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChyYW5kb21PclNlZWQpIHtcbiAgICAgIHJhbmRvbSA9IGFsZWEocmFuZG9tT3JTZWVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZG9tID0gTWF0aC5yYW5kb207XG4gICAgfVxuICAgIHRoaXMucCA9IGJ1aWxkUGVybXV0YXRpb25UYWJsZShyYW5kb20pO1xuICAgIHRoaXMucGVybSA9IG5ldyBVaW50OEFycmF5KDUxMik7XG4gICAgdGhpcy5wZXJtTW9kMTIgPSBuZXcgVWludDhBcnJheSg1MTIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTEyOyBpKyspIHtcbiAgICAgIHRoaXMucGVybVtpXSA9IHRoaXMucFtpICYgMjU1XTtcbiAgICAgIHRoaXMucGVybU1vZDEyW2ldID0gdGhpcy5wZXJtW2ldICUgMTI7XG4gICAgfVxuXG4gIH1cbiAgU2ltcGxleE5vaXNlLnByb3RvdHlwZSA9IHtcbiAgICBncmFkMzogbmV3IEZsb2F0MzJBcnJheShbMSwgMSwgMCxcbiAgICAgIC0xLCAxLCAwLFxuICAgICAgMSwgLTEsIDAsXG5cbiAgICAgIC0xLCAtMSwgMCxcbiAgICAgIDEsIDAsIDEsXG4gICAgICAtMSwgMCwgMSxcblxuICAgICAgMSwgMCwgLTEsXG4gICAgICAtMSwgMCwgLTEsXG4gICAgICAwLCAxLCAxLFxuXG4gICAgICAwLCAtMSwgMSxcbiAgICAgIDAsIDEsIC0xLFxuICAgICAgMCwgLTEsIC0xXSksXG4gICAgZ3JhZDQ6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDEsIDEsIDEsIDAsIDEsIDEsIC0xLCAwLCAxLCAtMSwgMSwgMCwgMSwgLTEsIC0xLFxuICAgICAgMCwgLTEsIDEsIDEsIDAsIC0xLCAxLCAtMSwgMCwgLTEsIC0xLCAxLCAwLCAtMSwgLTEsIC0xLFxuICAgICAgMSwgMCwgMSwgMSwgMSwgMCwgMSwgLTEsIDEsIDAsIC0xLCAxLCAxLCAwLCAtMSwgLTEsXG4gICAgICAtMSwgMCwgMSwgMSwgLTEsIDAsIDEsIC0xLCAtMSwgMCwgLTEsIDEsIC0xLCAwLCAtMSwgLTEsXG4gICAgICAxLCAxLCAwLCAxLCAxLCAxLCAwLCAtMSwgMSwgLTEsIDAsIDEsIDEsIC0xLCAwLCAtMSxcbiAgICAgIC0xLCAxLCAwLCAxLCAtMSwgMSwgMCwgLTEsIC0xLCAtMSwgMCwgMSwgLTEsIC0xLCAwLCAtMSxcbiAgICAgIDEsIDEsIDEsIDAsIDEsIDEsIC0xLCAwLCAxLCAtMSwgMSwgMCwgMSwgLTEsIC0xLCAwLFxuICAgICAgLTEsIDEsIDEsIDAsIC0xLCAxLCAtMSwgMCwgLTEsIC0xLCAxLCAwLCAtMSwgLTEsIC0xLCAwXSksXG4gICAgbm9pc2UyRDogZnVuY3Rpb24oeGluLCB5aW4pIHtcbiAgICAgIHZhciBwZXJtTW9kMTIgPSB0aGlzLnBlcm1Nb2QxMjtcbiAgICAgIHZhciBwZXJtID0gdGhpcy5wZXJtO1xuICAgICAgdmFyIGdyYWQzID0gdGhpcy5ncmFkMztcbiAgICAgIHZhciBuMCA9IDA7IC8vIE5vaXNlIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgdGhyZWUgY29ybmVyc1xuICAgICAgdmFyIG4xID0gMDtcbiAgICAgIHZhciBuMiA9IDA7XG4gICAgICAvLyBTa2V3IHRoZSBpbnB1dCBzcGFjZSB0byBkZXRlcm1pbmUgd2hpY2ggc2ltcGxleCBjZWxsIHdlJ3JlIGluXG4gICAgICB2YXIgcyA9ICh4aW4gKyB5aW4pICogRjI7IC8vIEhhaXJ5IGZhY3RvciBmb3IgMkRcbiAgICAgIHZhciBpID0gTWF0aC5mbG9vcih4aW4gKyBzKTtcbiAgICAgIHZhciBqID0gTWF0aC5mbG9vcih5aW4gKyBzKTtcbiAgICAgIHZhciB0ID0gKGkgKyBqKSAqIEcyO1xuICAgICAgdmFyIFgwID0gaSAtIHQ7IC8vIFVuc2tldyB0aGUgY2VsbCBvcmlnaW4gYmFjayB0byAoeCx5KSBzcGFjZVxuICAgICAgdmFyIFkwID0gaiAtIHQ7XG4gICAgICB2YXIgeDAgPSB4aW4gLSBYMDsgLy8gVGhlIHgseSBkaXN0YW5jZXMgZnJvbSB0aGUgY2VsbCBvcmlnaW5cbiAgICAgIHZhciB5MCA9IHlpbiAtIFkwO1xuICAgICAgLy8gRm9yIHRoZSAyRCBjYXNlLCB0aGUgc2ltcGxleCBzaGFwZSBpcyBhbiBlcXVpbGF0ZXJhbCB0cmlhbmdsZS5cbiAgICAgIC8vIERldGVybWluZSB3aGljaCBzaW1wbGV4IHdlIGFyZSBpbi5cbiAgICAgIHZhciBpMSwgajE7IC8vIE9mZnNldHMgZm9yIHNlY29uZCAobWlkZGxlKSBjb3JuZXIgb2Ygc2ltcGxleCBpbiAoaSxqKSBjb29yZHNcbiAgICAgIGlmICh4MCA+IHkwKSB7XG4gICAgICAgIGkxID0gMTtcbiAgICAgICAgajEgPSAwO1xuICAgICAgfSAvLyBsb3dlciB0cmlhbmdsZSwgWFkgb3JkZXI6ICgwLDApLT4oMSwwKS0+KDEsMSlcbiAgICAgIGVsc2Uge1xuICAgICAgICBpMSA9IDA7XG4gICAgICAgIGoxID0gMTtcbiAgICAgIH0gLy8gdXBwZXIgdHJpYW5nbGUsIFlYIG9yZGVyOiAoMCwwKS0+KDAsMSktPigxLDEpXG4gICAgICAvLyBBIHN0ZXAgb2YgKDEsMCkgaW4gKGksaikgbWVhbnMgYSBzdGVwIG9mICgxLWMsLWMpIGluICh4LHkpLCBhbmRcbiAgICAgIC8vIGEgc3RlcCBvZiAoMCwxKSBpbiAoaSxqKSBtZWFucyBhIHN0ZXAgb2YgKC1jLDEtYykgaW4gKHgseSksIHdoZXJlXG4gICAgICAvLyBjID0gKDMtc3FydCgzKSkvNlxuICAgICAgdmFyIHgxID0geDAgLSBpMSArIEcyOyAvLyBPZmZzZXRzIGZvciBtaWRkbGUgY29ybmVyIGluICh4LHkpIHVuc2tld2VkIGNvb3Jkc1xuICAgICAgdmFyIHkxID0geTAgLSBqMSArIEcyO1xuICAgICAgdmFyIHgyID0geDAgLSAxLjAgKyAyLjAgKiBHMjsgLy8gT2Zmc2V0cyBmb3IgbGFzdCBjb3JuZXIgaW4gKHgseSkgdW5za2V3ZWQgY29vcmRzXG4gICAgICB2YXIgeTIgPSB5MCAtIDEuMCArIDIuMCAqIEcyO1xuICAgICAgLy8gV29yayBvdXQgdGhlIGhhc2hlZCBncmFkaWVudCBpbmRpY2VzIG9mIHRoZSB0aHJlZSBzaW1wbGV4IGNvcm5lcnNcbiAgICAgIHZhciBpaSA9IGkgJiAyNTU7XG4gICAgICB2YXIgamogPSBqICYgMjU1O1xuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjb250cmlidXRpb24gZnJvbSB0aGUgdGhyZWUgY29ybmVyc1xuICAgICAgdmFyIHQwID0gMC41IC0geDAgKiB4MCAtIHkwICogeTA7XG4gICAgICBpZiAodDAgPj0gMCkge1xuICAgICAgICB2YXIgZ2kwID0gcGVybU1vZDEyW2lpICsgcGVybVtqal1dICogMztcbiAgICAgICAgdDAgKj0gdDA7XG4gICAgICAgIG4wID0gdDAgKiB0MCAqIChncmFkM1tnaTBdICogeDAgKyBncmFkM1tnaTAgKyAxXSAqIHkwKTsgLy8gKHgseSkgb2YgZ3JhZDMgdXNlZCBmb3IgMkQgZ3JhZGllbnRcbiAgICAgIH1cbiAgICAgIHZhciB0MSA9IDAuNSAtIHgxICogeDEgLSB5MSAqIHkxO1xuICAgICAgaWYgKHQxID49IDApIHtcbiAgICAgICAgdmFyIGdpMSA9IHBlcm1Nb2QxMltpaSArIGkxICsgcGVybVtqaiArIGoxXV0gKiAzO1xuICAgICAgICB0MSAqPSB0MTtcbiAgICAgICAgbjEgPSB0MSAqIHQxICogKGdyYWQzW2dpMV0gKiB4MSArIGdyYWQzW2dpMSArIDFdICogeTEpO1xuICAgICAgfVxuICAgICAgdmFyIHQyID0gMC41IC0geDIgKiB4MiAtIHkyICogeTI7XG4gICAgICBpZiAodDIgPj0gMCkge1xuICAgICAgICB2YXIgZ2kyID0gcGVybU1vZDEyW2lpICsgMSArIHBlcm1bamogKyAxXV0gKiAzO1xuICAgICAgICB0MiAqPSB0MjtcbiAgICAgICAgbjIgPSB0MiAqIHQyICogKGdyYWQzW2dpMl0gKiB4MiArIGdyYWQzW2dpMiArIDFdICogeTIpO1xuICAgICAgfVxuICAgICAgLy8gQWRkIGNvbnRyaWJ1dGlvbnMgZnJvbSBlYWNoIGNvcm5lciB0byBnZXQgdGhlIGZpbmFsIG5vaXNlIHZhbHVlLlxuICAgICAgLy8gVGhlIHJlc3VsdCBpcyBzY2FsZWQgdG8gcmV0dXJuIHZhbHVlcyBpbiB0aGUgaW50ZXJ2YWwgWy0xLDFdLlxuICAgICAgcmV0dXJuIDcwLjAgKiAobjAgKyBuMSArIG4yKTtcbiAgICB9LFxuICAgIC8vIDNEIHNpbXBsZXggbm9pc2VcbiAgICBub2lzZTNEOiBmdW5jdGlvbih4aW4sIHlpbiwgemluKSB7XG4gICAgICB2YXIgcGVybU1vZDEyID0gdGhpcy5wZXJtTW9kMTI7XG4gICAgICB2YXIgcGVybSA9IHRoaXMucGVybTtcbiAgICAgIHZhciBncmFkMyA9IHRoaXMuZ3JhZDM7XG4gICAgICB2YXIgbjAsIG4xLCBuMiwgbjM7IC8vIE5vaXNlIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgZm91ciBjb3JuZXJzXG4gICAgICAvLyBTa2V3IHRoZSBpbnB1dCBzcGFjZSB0byBkZXRlcm1pbmUgd2hpY2ggc2ltcGxleCBjZWxsIHdlJ3JlIGluXG4gICAgICB2YXIgcyA9ICh4aW4gKyB5aW4gKyB6aW4pICogRjM7IC8vIFZlcnkgbmljZSBhbmQgc2ltcGxlIHNrZXcgZmFjdG9yIGZvciAzRFxuICAgICAgdmFyIGkgPSBNYXRoLmZsb29yKHhpbiArIHMpO1xuICAgICAgdmFyIGogPSBNYXRoLmZsb29yKHlpbiArIHMpO1xuICAgICAgdmFyIGsgPSBNYXRoLmZsb29yKHppbiArIHMpO1xuICAgICAgdmFyIHQgPSAoaSArIGogKyBrKSAqIEczO1xuICAgICAgdmFyIFgwID0gaSAtIHQ7IC8vIFVuc2tldyB0aGUgY2VsbCBvcmlnaW4gYmFjayB0byAoeCx5LHopIHNwYWNlXG4gICAgICB2YXIgWTAgPSBqIC0gdDtcbiAgICAgIHZhciBaMCA9IGsgLSB0O1xuICAgICAgdmFyIHgwID0geGluIC0gWDA7IC8vIFRoZSB4LHkseiBkaXN0YW5jZXMgZnJvbSB0aGUgY2VsbCBvcmlnaW5cbiAgICAgIHZhciB5MCA9IHlpbiAtIFkwO1xuICAgICAgdmFyIHowID0gemluIC0gWjA7XG4gICAgICAvLyBGb3IgdGhlIDNEIGNhc2UsIHRoZSBzaW1wbGV4IHNoYXBlIGlzIGEgc2xpZ2h0bHkgaXJyZWd1bGFyIHRldHJhaGVkcm9uLlxuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggd2UgYXJlIGluLlxuICAgICAgdmFyIGkxLCBqMSwgazE7IC8vIE9mZnNldHMgZm9yIHNlY29uZCBjb3JuZXIgb2Ygc2ltcGxleCBpbiAoaSxqLGspIGNvb3Jkc1xuICAgICAgdmFyIGkyLCBqMiwgazI7IC8vIE9mZnNldHMgZm9yIHRoaXJkIGNvcm5lciBvZiBzaW1wbGV4IGluIChpLGosaykgY29vcmRzXG4gICAgICBpZiAoeDAgPj0geTApIHtcbiAgICAgICAgaWYgKHkwID49IHowKSB7XG4gICAgICAgICAgaTEgPSAxO1xuICAgICAgICAgIGoxID0gMDtcbiAgICAgICAgICBrMSA9IDA7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMTtcbiAgICAgICAgICBrMiA9IDA7XG4gICAgICAgIH0gLy8gWCBZIFogb3JkZXJcbiAgICAgICAgZWxzZSBpZiAoeDAgPj0gejApIHtcbiAgICAgICAgICBpMSA9IDE7XG4gICAgICAgICAgajEgPSAwO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDE7XG4gICAgICAgICAgajIgPSAwO1xuICAgICAgICAgIGsyID0gMTtcbiAgICAgICAgfSAvLyBYIFogWSBvcmRlclxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAwO1xuICAgICAgICAgIGsxID0gMTtcbiAgICAgICAgICBpMiA9IDE7XG4gICAgICAgICAgajIgPSAwO1xuICAgICAgICAgIGsyID0gMTtcbiAgICAgICAgfSAvLyBaIFggWSBvcmRlclxuICAgICAgfVxuICAgICAgZWxzZSB7IC8vIHgwPHkwXG4gICAgICAgIGlmICh5MCA8IHowKSB7XG4gICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgIGoxID0gMDtcbiAgICAgICAgICBrMSA9IDE7XG4gICAgICAgICAgaTIgPSAwO1xuICAgICAgICAgIGoyID0gMTtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWiBZIFggb3JkZXJcbiAgICAgICAgZWxzZSBpZiAoeDAgPCB6MCkge1xuICAgICAgICAgIGkxID0gMDtcbiAgICAgICAgICBqMSA9IDE7XG4gICAgICAgICAgazEgPSAwO1xuICAgICAgICAgIGkyID0gMDtcbiAgICAgICAgICBqMiA9IDE7XG4gICAgICAgICAgazIgPSAxO1xuICAgICAgICB9IC8vIFkgWiBYIG9yZGVyXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGkxID0gMDtcbiAgICAgICAgICBqMSA9IDE7XG4gICAgICAgICAgazEgPSAwO1xuICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICBqMiA9IDE7XG4gICAgICAgICAgazIgPSAwO1xuICAgICAgICB9IC8vIFkgWCBaIG9yZGVyXG4gICAgICB9XG4gICAgICAvLyBBIHN0ZXAgb2YgKDEsMCwwKSBpbiAoaSxqLGspIG1lYW5zIGEgc3RlcCBvZiAoMS1jLC1jLC1jKSBpbiAoeCx5LHopLFxuICAgICAgLy8gYSBzdGVwIG9mICgwLDEsMCkgaW4gKGksaixrKSBtZWFucyBhIHN0ZXAgb2YgKC1jLDEtYywtYykgaW4gKHgseSx6KSwgYW5kXG4gICAgICAvLyBhIHN0ZXAgb2YgKDAsMCwxKSBpbiAoaSxqLGspIG1lYW5zIGEgc3RlcCBvZiAoLWMsLWMsMS1jKSBpbiAoeCx5LHopLCB3aGVyZVxuICAgICAgLy8gYyA9IDEvNi5cbiAgICAgIHZhciB4MSA9IHgwIC0gaTEgKyBHMzsgLy8gT2Zmc2V0cyBmb3Igc2Vjb25kIGNvcm5lciBpbiAoeCx5LHopIGNvb3Jkc1xuICAgICAgdmFyIHkxID0geTAgLSBqMSArIEczO1xuICAgICAgdmFyIHoxID0gejAgLSBrMSArIEczO1xuICAgICAgdmFyIHgyID0geDAgLSBpMiArIDIuMCAqIEczOyAvLyBPZmZzZXRzIGZvciB0aGlyZCBjb3JuZXIgaW4gKHgseSx6KSBjb29yZHNcbiAgICAgIHZhciB5MiA9IHkwIC0gajIgKyAyLjAgKiBHMztcbiAgICAgIHZhciB6MiA9IHowIC0gazIgKyAyLjAgKiBHMztcbiAgICAgIHZhciB4MyA9IHgwIC0gMS4wICsgMy4wICogRzM7IC8vIE9mZnNldHMgZm9yIGxhc3QgY29ybmVyIGluICh4LHkseikgY29vcmRzXG4gICAgICB2YXIgeTMgPSB5MCAtIDEuMCArIDMuMCAqIEczO1xuICAgICAgdmFyIHozID0gejAgLSAxLjAgKyAzLjAgKiBHMztcbiAgICAgIC8vIFdvcmsgb3V0IHRoZSBoYXNoZWQgZ3JhZGllbnQgaW5kaWNlcyBvZiB0aGUgZm91ciBzaW1wbGV4IGNvcm5lcnNcbiAgICAgIHZhciBpaSA9IGkgJiAyNTU7XG4gICAgICB2YXIgamogPSBqICYgMjU1O1xuICAgICAgdmFyIGtrID0gayAmIDI1NTtcbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgY29udHJpYnV0aW9uIGZyb20gdGhlIGZvdXIgY29ybmVyc1xuICAgICAgdmFyIHQwID0gMC42IC0geDAgKiB4MCAtIHkwICogeTAgLSB6MCAqIHowO1xuICAgICAgaWYgKHQwIDwgMCkgbjAgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMCA9IHBlcm1Nb2QxMltpaSArIHBlcm1bamogKyBwZXJtW2trXV1dICogMztcbiAgICAgICAgdDAgKj0gdDA7XG4gICAgICAgIG4wID0gdDAgKiB0MCAqIChncmFkM1tnaTBdICogeDAgKyBncmFkM1tnaTAgKyAxXSAqIHkwICsgZ3JhZDNbZ2kwICsgMl0gKiB6MCk7XG4gICAgICB9XG4gICAgICB2YXIgdDEgPSAwLjYgLSB4MSAqIHgxIC0geTEgKiB5MSAtIHoxICogejE7XG4gICAgICBpZiAodDEgPCAwKSBuMSA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kxID0gcGVybU1vZDEyW2lpICsgaTEgKyBwZXJtW2pqICsgajEgKyBwZXJtW2trICsgazFdXV0gKiAzO1xuICAgICAgICB0MSAqPSB0MTtcbiAgICAgICAgbjEgPSB0MSAqIHQxICogKGdyYWQzW2dpMV0gKiB4MSArIGdyYWQzW2dpMSArIDFdICogeTEgKyBncmFkM1tnaTEgKyAyXSAqIHoxKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MiA9IDAuNiAtIHgyICogeDIgLSB5MiAqIHkyIC0gejIgKiB6MjtcbiAgICAgIGlmICh0MiA8IDApIG4yID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTIgPSBwZXJtTW9kMTJbaWkgKyBpMiArIHBlcm1bamogKyBqMiArIHBlcm1ba2sgKyBrMl1dXSAqIDM7XG4gICAgICAgIHQyICo9IHQyO1xuICAgICAgICBuMiA9IHQyICogdDIgKiAoZ3JhZDNbZ2kyXSAqIHgyICsgZ3JhZDNbZ2kyICsgMV0gKiB5MiArIGdyYWQzW2dpMiArIDJdICogejIpO1xuICAgICAgfVxuICAgICAgdmFyIHQzID0gMC42IC0geDMgKiB4MyAtIHkzICogeTMgLSB6MyAqIHozO1xuICAgICAgaWYgKHQzIDwgMCkgbjMgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMyA9IHBlcm1Nb2QxMltpaSArIDEgKyBwZXJtW2pqICsgMSArIHBlcm1ba2sgKyAxXV1dICogMztcbiAgICAgICAgdDMgKj0gdDM7XG4gICAgICAgIG4zID0gdDMgKiB0MyAqIChncmFkM1tnaTNdICogeDMgKyBncmFkM1tnaTMgKyAxXSAqIHkzICsgZ3JhZDNbZ2kzICsgMl0gKiB6Myk7XG4gICAgICB9XG4gICAgICAvLyBBZGQgY29udHJpYnV0aW9ucyBmcm9tIGVhY2ggY29ybmVyIHRvIGdldCB0aGUgZmluYWwgbm9pc2UgdmFsdWUuXG4gICAgICAvLyBUaGUgcmVzdWx0IGlzIHNjYWxlZCB0byBzdGF5IGp1c3QgaW5zaWRlIFstMSwxXVxuICAgICAgcmV0dXJuIDMyLjAgKiAobjAgKyBuMSArIG4yICsgbjMpO1xuICAgIH0sXG4gICAgLy8gNEQgc2ltcGxleCBub2lzZSwgYmV0dGVyIHNpbXBsZXggcmFuayBvcmRlcmluZyBtZXRob2QgMjAxMi0wMy0wOVxuICAgIG5vaXNlNEQ6IGZ1bmN0aW9uKHgsIHksIHosIHcpIHtcbiAgICAgIHZhciBwZXJtID0gdGhpcy5wZXJtO1xuICAgICAgdmFyIGdyYWQ0ID0gdGhpcy5ncmFkNDtcblxuICAgICAgdmFyIG4wLCBuMSwgbjIsIG4zLCBuNDsgLy8gTm9pc2UgY29udHJpYnV0aW9ucyBmcm9tIHRoZSBmaXZlIGNvcm5lcnNcbiAgICAgIC8vIFNrZXcgdGhlICh4LHkseix3KSBzcGFjZSB0byBkZXRlcm1pbmUgd2hpY2ggY2VsbCBvZiAyNCBzaW1wbGljZXMgd2UncmUgaW5cbiAgICAgIHZhciBzID0gKHggKyB5ICsgeiArIHcpICogRjQ7IC8vIEZhY3RvciBmb3IgNEQgc2tld2luZ1xuICAgICAgdmFyIGkgPSBNYXRoLmZsb29yKHggKyBzKTtcbiAgICAgIHZhciBqID0gTWF0aC5mbG9vcih5ICsgcyk7XG4gICAgICB2YXIgayA9IE1hdGguZmxvb3IoeiArIHMpO1xuICAgICAgdmFyIGwgPSBNYXRoLmZsb29yKHcgKyBzKTtcbiAgICAgIHZhciB0ID0gKGkgKyBqICsgayArIGwpICogRzQ7IC8vIEZhY3RvciBmb3IgNEQgdW5za2V3aW5nXG4gICAgICB2YXIgWDAgPSBpIC0gdDsgLy8gVW5za2V3IHRoZSBjZWxsIG9yaWdpbiBiYWNrIHRvICh4LHkseix3KSBzcGFjZVxuICAgICAgdmFyIFkwID0gaiAtIHQ7XG4gICAgICB2YXIgWjAgPSBrIC0gdDtcbiAgICAgIHZhciBXMCA9IGwgLSB0O1xuICAgICAgdmFyIHgwID0geCAtIFgwOyAvLyBUaGUgeCx5LHosdyBkaXN0YW5jZXMgZnJvbSB0aGUgY2VsbCBvcmlnaW5cbiAgICAgIHZhciB5MCA9IHkgLSBZMDtcbiAgICAgIHZhciB6MCA9IHogLSBaMDtcbiAgICAgIHZhciB3MCA9IHcgLSBXMDtcbiAgICAgIC8vIEZvciB0aGUgNEQgY2FzZSwgdGhlIHNpbXBsZXggaXMgYSA0RCBzaGFwZSBJIHdvbid0IGV2ZW4gdHJ5IHRvIGRlc2NyaWJlLlxuICAgICAgLy8gVG8gZmluZCBvdXQgd2hpY2ggb2YgdGhlIDI0IHBvc3NpYmxlIHNpbXBsaWNlcyB3ZSdyZSBpbiwgd2UgbmVlZCB0b1xuICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBtYWduaXR1ZGUgb3JkZXJpbmcgb2YgeDAsIHkwLCB6MCBhbmQgdzAuXG4gICAgICAvLyBTaXggcGFpci13aXNlIGNvbXBhcmlzb25zIGFyZSBwZXJmb3JtZWQgYmV0d2VlbiBlYWNoIHBvc3NpYmxlIHBhaXJcbiAgICAgIC8vIG9mIHRoZSBmb3VyIGNvb3JkaW5hdGVzLCBhbmQgdGhlIHJlc3VsdHMgYXJlIHVzZWQgdG8gcmFuayB0aGUgbnVtYmVycy5cbiAgICAgIHZhciByYW5reCA9IDA7XG4gICAgICB2YXIgcmFua3kgPSAwO1xuICAgICAgdmFyIHJhbmt6ID0gMDtcbiAgICAgIHZhciByYW5rdyA9IDA7XG4gICAgICBpZiAoeDAgPiB5MCkgcmFua3grKztcbiAgICAgIGVsc2UgcmFua3krKztcbiAgICAgIGlmICh4MCA+IHowKSByYW5reCsrO1xuICAgICAgZWxzZSByYW5reisrO1xuICAgICAgaWYgKHgwID4gdzApIHJhbmt4Kys7XG4gICAgICBlbHNlIHJhbmt3Kys7XG4gICAgICBpZiAoeTAgPiB6MCkgcmFua3krKztcbiAgICAgIGVsc2UgcmFua3orKztcbiAgICAgIGlmICh5MCA+IHcwKSByYW5reSsrO1xuICAgICAgZWxzZSByYW5rdysrO1xuICAgICAgaWYgKHowID4gdzApIHJhbmt6Kys7XG4gICAgICBlbHNlIHJhbmt3Kys7XG4gICAgICB2YXIgaTEsIGoxLCBrMSwgbDE7IC8vIFRoZSBpbnRlZ2VyIG9mZnNldHMgZm9yIHRoZSBzZWNvbmQgc2ltcGxleCBjb3JuZXJcbiAgICAgIHZhciBpMiwgajIsIGsyLCBsMjsgLy8gVGhlIGludGVnZXIgb2Zmc2V0cyBmb3IgdGhlIHRoaXJkIHNpbXBsZXggY29ybmVyXG4gICAgICB2YXIgaTMsIGozLCBrMywgbDM7IC8vIFRoZSBpbnRlZ2VyIG9mZnNldHMgZm9yIHRoZSBmb3VydGggc2ltcGxleCBjb3JuZXJcbiAgICAgIC8vIHNpbXBsZXhbY10gaXMgYSA0LXZlY3RvciB3aXRoIHRoZSBudW1iZXJzIDAsIDEsIDIgYW5kIDMgaW4gc29tZSBvcmRlci5cbiAgICAgIC8vIE1hbnkgdmFsdWVzIG9mIGMgd2lsbCBuZXZlciBvY2N1ciwgc2luY2UgZS5nLiB4Pnk+ej53IG1ha2VzIHg8eiwgeTx3IGFuZCB4PHdcbiAgICAgIC8vIGltcG9zc2libGUuIE9ubHkgdGhlIDI0IGluZGljZXMgd2hpY2ggaGF2ZSBub24temVybyBlbnRyaWVzIG1ha2UgYW55IHNlbnNlLlxuICAgICAgLy8gV2UgdXNlIGEgdGhyZXNob2xkaW5nIHRvIHNldCB0aGUgY29vcmRpbmF0ZXMgaW4gdHVybiBmcm9tIHRoZSBsYXJnZXN0IG1hZ25pdHVkZS5cbiAgICAgIC8vIFJhbmsgMyBkZW5vdGVzIHRoZSBsYXJnZXN0IGNvb3JkaW5hdGUuXG4gICAgICBpMSA9IHJhbmt4ID49IDMgPyAxIDogMDtcbiAgICAgIGoxID0gcmFua3kgPj0gMyA/IDEgOiAwO1xuICAgICAgazEgPSByYW5reiA+PSAzID8gMSA6IDA7XG4gICAgICBsMSA9IHJhbmt3ID49IDMgPyAxIDogMDtcbiAgICAgIC8vIFJhbmsgMiBkZW5vdGVzIHRoZSBzZWNvbmQgbGFyZ2VzdCBjb29yZGluYXRlLlxuICAgICAgaTIgPSByYW5reCA+PSAyID8gMSA6IDA7XG4gICAgICBqMiA9IHJhbmt5ID49IDIgPyAxIDogMDtcbiAgICAgIGsyID0gcmFua3ogPj0gMiA/IDEgOiAwO1xuICAgICAgbDIgPSByYW5rdyA+PSAyID8gMSA6IDA7XG4gICAgICAvLyBSYW5rIDEgZGVub3RlcyB0aGUgc2Vjb25kIHNtYWxsZXN0IGNvb3JkaW5hdGUuXG4gICAgICBpMyA9IHJhbmt4ID49IDEgPyAxIDogMDtcbiAgICAgIGozID0gcmFua3kgPj0gMSA/IDEgOiAwO1xuICAgICAgazMgPSByYW5reiA+PSAxID8gMSA6IDA7XG4gICAgICBsMyA9IHJhbmt3ID49IDEgPyAxIDogMDtcbiAgICAgIC8vIFRoZSBmaWZ0aCBjb3JuZXIgaGFzIGFsbCBjb29yZGluYXRlIG9mZnNldHMgPSAxLCBzbyBubyBuZWVkIHRvIGNvbXB1dGUgdGhhdC5cbiAgICAgIHZhciB4MSA9IHgwIC0gaTEgKyBHNDsgLy8gT2Zmc2V0cyBmb3Igc2Vjb25kIGNvcm5lciBpbiAoeCx5LHosdykgY29vcmRzXG4gICAgICB2YXIgeTEgPSB5MCAtIGoxICsgRzQ7XG4gICAgICB2YXIgejEgPSB6MCAtIGsxICsgRzQ7XG4gICAgICB2YXIgdzEgPSB3MCAtIGwxICsgRzQ7XG4gICAgICB2YXIgeDIgPSB4MCAtIGkyICsgMi4wICogRzQ7IC8vIE9mZnNldHMgZm9yIHRoaXJkIGNvcm5lciBpbiAoeCx5LHosdykgY29vcmRzXG4gICAgICB2YXIgeTIgPSB5MCAtIGoyICsgMi4wICogRzQ7XG4gICAgICB2YXIgejIgPSB6MCAtIGsyICsgMi4wICogRzQ7XG4gICAgICB2YXIgdzIgPSB3MCAtIGwyICsgMi4wICogRzQ7XG4gICAgICB2YXIgeDMgPSB4MCAtIGkzICsgMy4wICogRzQ7IC8vIE9mZnNldHMgZm9yIGZvdXJ0aCBjb3JuZXIgaW4gKHgseSx6LHcpIGNvb3Jkc1xuICAgICAgdmFyIHkzID0geTAgLSBqMyArIDMuMCAqIEc0O1xuICAgICAgdmFyIHozID0gejAgLSBrMyArIDMuMCAqIEc0O1xuICAgICAgdmFyIHczID0gdzAgLSBsMyArIDMuMCAqIEc0O1xuICAgICAgdmFyIHg0ID0geDAgLSAxLjAgKyA0LjAgKiBHNDsgLy8gT2Zmc2V0cyBmb3IgbGFzdCBjb3JuZXIgaW4gKHgseSx6LHcpIGNvb3Jkc1xuICAgICAgdmFyIHk0ID0geTAgLSAxLjAgKyA0LjAgKiBHNDtcbiAgICAgIHZhciB6NCA9IHowIC0gMS4wICsgNC4wICogRzQ7XG4gICAgICB2YXIgdzQgPSB3MCAtIDEuMCArIDQuMCAqIEc0O1xuICAgICAgLy8gV29yayBvdXQgdGhlIGhhc2hlZCBncmFkaWVudCBpbmRpY2VzIG9mIHRoZSBmaXZlIHNpbXBsZXggY29ybmVyc1xuICAgICAgdmFyIGlpID0gaSAmIDI1NTtcbiAgICAgIHZhciBqaiA9IGogJiAyNTU7XG4gICAgICB2YXIga2sgPSBrICYgMjU1O1xuICAgICAgdmFyIGxsID0gbCAmIDI1NTtcbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgY29udHJpYnV0aW9uIGZyb20gdGhlIGZpdmUgY29ybmVyc1xuICAgICAgdmFyIHQwID0gMC42IC0geDAgKiB4MCAtIHkwICogeTAgLSB6MCAqIHowIC0gdzAgKiB3MDtcbiAgICAgIGlmICh0MCA8IDApIG4wID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTAgPSAocGVybVtpaSArIHBlcm1bamogKyBwZXJtW2trICsgcGVybVtsbF1dXV0gJSAzMikgKiA0O1xuICAgICAgICB0MCAqPSB0MDtcbiAgICAgICAgbjAgPSB0MCAqIHQwICogKGdyYWQ0W2dpMF0gKiB4MCArIGdyYWQ0W2dpMCArIDFdICogeTAgKyBncmFkNFtnaTAgKyAyXSAqIHowICsgZ3JhZDRbZ2kwICsgM10gKiB3MCk7XG4gICAgICB9XG4gICAgICB2YXIgdDEgPSAwLjYgLSB4MSAqIHgxIC0geTEgKiB5MSAtIHoxICogejEgLSB3MSAqIHcxO1xuICAgICAgaWYgKHQxIDwgMCkgbjEgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMSA9IChwZXJtW2lpICsgaTEgKyBwZXJtW2pqICsgajEgKyBwZXJtW2trICsgazEgKyBwZXJtW2xsICsgbDFdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDEgKj0gdDE7XG4gICAgICAgIG4xID0gdDEgKiB0MSAqIChncmFkNFtnaTFdICogeDEgKyBncmFkNFtnaTEgKyAxXSAqIHkxICsgZ3JhZDRbZ2kxICsgMl0gKiB6MSArIGdyYWQ0W2dpMSArIDNdICogdzEpO1xuICAgICAgfVxuICAgICAgdmFyIHQyID0gMC42IC0geDIgKiB4MiAtIHkyICogeTIgLSB6MiAqIHoyIC0gdzIgKiB3MjtcbiAgICAgIGlmICh0MiA8IDApIG4yID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTIgPSAocGVybVtpaSArIGkyICsgcGVybVtqaiArIGoyICsgcGVybVtrayArIGsyICsgcGVybVtsbCArIGwyXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQyICo9IHQyO1xuICAgICAgICBuMiA9IHQyICogdDIgKiAoZ3JhZDRbZ2kyXSAqIHgyICsgZ3JhZDRbZ2kyICsgMV0gKiB5MiArIGdyYWQ0W2dpMiArIDJdICogejIgKyBncmFkNFtnaTIgKyAzXSAqIHcyKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MyA9IDAuNiAtIHgzICogeDMgLSB5MyAqIHkzIC0gejMgKiB6MyAtIHczICogdzM7XG4gICAgICBpZiAodDMgPCAwKSBuMyA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kzID0gKHBlcm1baWkgKyBpMyArIHBlcm1bamogKyBqMyArIHBlcm1ba2sgKyBrMyArIHBlcm1bbGwgKyBsM11dXV0gJSAzMikgKiA0O1xuICAgICAgICB0MyAqPSB0MztcbiAgICAgICAgbjMgPSB0MyAqIHQzICogKGdyYWQ0W2dpM10gKiB4MyArIGdyYWQ0W2dpMyArIDFdICogeTMgKyBncmFkNFtnaTMgKyAyXSAqIHozICsgZ3JhZDRbZ2kzICsgM10gKiB3Myk7XG4gICAgICB9XG4gICAgICB2YXIgdDQgPSAwLjYgLSB4NCAqIHg0IC0geTQgKiB5NCAtIHo0ICogejQgLSB3NCAqIHc0O1xuICAgICAgaWYgKHQ0IDwgMCkgbjQgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpNCA9IChwZXJtW2lpICsgMSArIHBlcm1bamogKyAxICsgcGVybVtrayArIDEgKyBwZXJtW2xsICsgMV1dXV0gJSAzMikgKiA0O1xuICAgICAgICB0NCAqPSB0NDtcbiAgICAgICAgbjQgPSB0NCAqIHQ0ICogKGdyYWQ0W2dpNF0gKiB4NCArIGdyYWQ0W2dpNCArIDFdICogeTQgKyBncmFkNFtnaTQgKyAyXSAqIHo0ICsgZ3JhZDRbZ2k0ICsgM10gKiB3NCk7XG4gICAgICB9XG4gICAgICAvLyBTdW0gdXAgYW5kIHNjYWxlIHRoZSByZXN1bHQgdG8gY292ZXIgdGhlIHJhbmdlIFstMSwxXVxuICAgICAgcmV0dXJuIDI3LjAgKiAobjAgKyBuMSArIG4yICsgbjMgKyBuNCk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGJ1aWxkUGVybXV0YXRpb25UYWJsZShyYW5kb20pIHtcbiAgICB2YXIgaTtcbiAgICB2YXIgcCA9IG5ldyBVaW50OEFycmF5KDI1Nik7XG4gICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgICBwW2ldID0gaTtcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IDI1NTsgaSsrKSB7XG4gICAgICB2YXIgciA9IGkgKyB+fihyYW5kb20oKSAqICgyNTYgLSBpKSk7XG4gICAgICB2YXIgYXV4ID0gcFtpXTtcbiAgICAgIHBbaV0gPSBwW3JdO1xuICAgICAgcFtyXSA9IGF1eDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH1cbiAgU2ltcGxleE5vaXNlLl9idWlsZFBlcm11dGF0aW9uVGFibGUgPSBidWlsZFBlcm11dGF0aW9uVGFibGU7XG5cbiAgZnVuY3Rpb24gYWxlYSgpIHtcbiAgICAvLyBKb2hhbm5lcyBCYWFnw7hlIDxiYWFnb2VAYmFhZ29lLmNvbT4sIDIwMTBcbiAgICB2YXIgczAgPSAwO1xuICAgIHZhciBzMSA9IDA7XG4gICAgdmFyIHMyID0gMDtcbiAgICB2YXIgYyA9IDE7XG5cbiAgICB2YXIgbWFzaCA9IG1hc2hlcigpO1xuICAgIHMwID0gbWFzaCgnICcpO1xuICAgIHMxID0gbWFzaCgnICcpO1xuICAgIHMyID0gbWFzaCgnICcpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHMwIC09IG1hc2goYXJndW1lbnRzW2ldKTtcbiAgICAgIGlmIChzMCA8IDApIHtcbiAgICAgICAgczAgKz0gMTtcbiAgICAgIH1cbiAgICAgIHMxIC09IG1hc2goYXJndW1lbnRzW2ldKTtcbiAgICAgIGlmIChzMSA8IDApIHtcbiAgICAgICAgczEgKz0gMTtcbiAgICAgIH1cbiAgICAgIHMyIC09IG1hc2goYXJndW1lbnRzW2ldKTtcbiAgICAgIGlmIChzMiA8IDApIHtcbiAgICAgICAgczIgKz0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgbWFzaCA9IG51bGw7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSAyMDkxNjM5ICogczAgKyBjICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcbiAgICAgIHMwID0gczE7XG4gICAgICBzMSA9IHMyO1xuICAgICAgcmV0dXJuIHMyID0gdCAtIChjID0gdCB8IDApO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbWFzaGVyKCkge1xuICAgIHZhciBuID0gMHhlZmM4MjQ5ZDtcbiAgICByZXR1cm4gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgZGF0YSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICBuICs9IGRhdGEuY2hhckNvZGVBdChpKTtcbiAgICAgICAgdmFyIGggPSAwLjAyNTE5NjAzMjgyNDE2OTM4ICogbjtcbiAgICAgICAgbiA9IGggPj4+IDA7XG4gICAgICAgIGggLT0gbjtcbiAgICAgICAgaCAqPSBuO1xuICAgICAgICBuID0gaCA+Pj4gMDtcbiAgICAgICAgaCAtPSBuO1xuICAgICAgICBuICs9IGggKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxuICAgICAgfVxuICAgICAgcmV0dXJuIChuID4+PiAwKSAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXG4gICAgfTtcbiAgfVxuXG4gIC8vIGFtZFxuICBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkgZGVmaW5lKGZ1bmN0aW9uKCkge3JldHVybiBTaW1wbGV4Tm9pc2U7fSk7XG4gIC8vIGNvbW1vbiBqc1xuICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSBleHBvcnRzLlNpbXBsZXhOb2lzZSA9IFNpbXBsZXhOb2lzZTtcbiAgLy8gYnJvd3NlclxuICBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgd2luZG93LlNpbXBsZXhOb2lzZSA9IFNpbXBsZXhOb2lzZTtcbiAgLy8gbm9kZWpzXG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gU2ltcGxleE5vaXNlO1xuICB9XG5cbn0pKCk7XG4iLCJpbXBvcnQgKiBhcyBkYXQgZnJvbSBcImRhdC5ndWlcIjtcbmNvbnN0IGNhbnZhc1NrZXRjaCA9IHJlcXVpcmUoXCJjYW52YXMtc2tldGNoXCIpO1xuY29uc3QgeyBsZXJwLCBkZWZhdWx0OiBtYXRoIH0gPSByZXF1aXJlKFwiY2FudmFzLXNrZXRjaC11dGlsL21hdGhcIik7XG5jb25zdCByYW5kb20gPSByZXF1aXJlKFwiY2FudmFzLXNrZXRjaC11dGlsL3JhbmRvbVwiKTtcblxuLy8gVE9ETzogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vbWF0dGRlc2wvMDRjZWNhNTQ0ZTYzN2NlMWRhNGQyY2Y1MjAwZDcxYWZcblxuY29uc3QgZGF0YSA9IHtcbiAgZ3JpZENvbHVtbnM6IDEzLFxuICBncmlkUm93czogMTQsXG4gIG1heENvbHVtbnNNZXJnZTogNCxcbiAgbWF4Um93c01lcmdlOiA0LFxuICBhbGxvd0xpZ2h0OiBmYWxzZSxcbiAgREVCVUc6IGZhbHNlLFxuICBjb3VudGVyOiBudWxsLFxuICBtZXNzYWdlOiBcIkhpdCBzcGFjZSB0byByZWdlbmVyYXRlXCIsXG4gIHJlbmRlcjogKCkgPT4ge30sXG59O1xubGV0IG1hbmFnZXI7XG5jb25zdCBzZXR0aW5ncyA9IHtcbiAgZGltZW5zaW9uczogWzIwNDgsIDIwNDhdLFxuXG4gIGFuaW1hdGU6IGZhbHNlLFxuICBkYXRhLFxufTtcbmNvbnN0IGdldFJhbmRvbUNvbG9yID0gKCkgPT4ge1xuICBjb25zdCBjb2xvcnMgPSBbXG4gICAgLy9ncmVlblxuICAgIHsgZGFyazogXCIjMmJhODVhXCIsIGxpZ2h0OiBcIiNhYWRjYmRcIiB9LFxuICAgIC8vYmx1ZVxuICAgIHsgZGFyazogXCIjMmQ5M2ZjXCIsIGxpZ2h0OiBcIiNhYmQ0ZmVcIiB9LFxuICAgIC8vcHVycGxlXG4gICAgeyBkYXJrOiBcIiM5NjY5ZjJcIiwgbGlnaHQ6IFwiI2Q1YzNmYVwiIH0sXG4gICAgLy95ZWxsb3dcbiAgICB7IGRhcms6IFwiI2ZjZGIzMlwiLCBsaWdodDogXCIjZmVmMWFkXCIgfSxcbiAgICAvL3JlZFxuICAgIHsgZGFyazogXCIjZTgyZjJmXCIsIGxpZ2h0OiBcIiNmNmFjYWNcIiB9LFxuICAgIC8vcGlua1xuICAgIHsgZGFyazogXCIjZjA3NmI2XCIsIGxpZ2h0OiBcIiNmOWM4ZTJcIiB9LFxuICBdO1xuICBjb25zdCByYW5kb21Db2xvciA9IGNvbG9yc1tNYXRoLnJvdW5kKHJhbmRvbS52YWx1ZSgpICogKGNvbG9ycy5sZW5ndGggLSAxKSldO1xuICByZXR1cm4gcmFuZG9tQ29sb3I7XG59O1xuXG5jb25zdCBDSVJDTEVfRlVMTCA9IFwiQ0lSQ0xFX0ZVTExcIjtcbmNvbnN0IENJUkNMRV9IQUxGX1VQID0gXCJDSVJDTEVfSEFMRl9VUFwiO1xuY29uc3QgQ0lSQ0xFX0hBTEZfRE9XTiA9IFwiQ0lSQ0xFX0hBTEZfRE9XTlwiO1xuY29uc3QgQ0lSQ0xFX1FVQVJURVIgPSBcIkNJUkNMRV9RVUFSVEVSXCI7XG5jb25zdCBUUklBTkdMRSA9IFwiVFJJQU5HTEVcIjtcbmNvbnN0IFBJTExfU0hBUEVfRE9XTiA9IFwiUElMTF9TSEFQRV9ET1dOXCI7XG5jb25zdCBQSUxMX1NIQVBFX1VQID0gXCJQSUxMX1NIQVBFX1VQXCI7XG5jb25zdCBOT05FID0gXCJOT05FXCI7XG5cbmNvbnN0IGdldFJhbmRvbVNoYXBlVHlwZUJ5UmF0aW8gPSAocmF0aW8pID0+IHtcbiAgY29uc3QgbWFwID0ge307XG4gIC8vIHRoZXJlIGFyZSBkb3VibGUgdXBzLCBidXQgZm9yIHNha2Ugb2YgY2xhcml0eSBpJ3ZlIGtlcHQgYWxsIG9mIHRoZW1cbiAgbWFwWzEgLyAxXSA9IFtDSVJDTEVfRlVMTCwgQ0lSQ0xFX1FVQVJURVIsIFRSSUFOR0xFXTsgLy8sIENJUkNMRV9RVUFSVEVSLCBUUklBTkdMRV07XG4gIG1hcFsxIC8gMl0gPSBbQ0lSQ0xFX1FVQVJURVIsIENJUkNMRV9IQUxGX1VQXTtcbiAgbWFwWzIgLyAxXSA9IFtDSVJDTEVfSEFMRl9ET1dOXTtcblxuICBsZXQgc3RlbmNpbHMgPSBtYXBbcmF0aW9dO1xuXG4gIGlmICghc3RlbmNpbHMpIHtcbiAgICBpZiAocmF0aW8gPiAxKSB7XG4gICAgICBzdGVuY2lscyA9IFtQSUxMX1NIQVBFX0RPV05dO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGVuY2lscyA9IFtQSUxMX1NIQVBFX1VQLCBOT05FXTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgc3RlbmNpbCA9IHN0ZW5jaWxzW01hdGgucm91bmQocmFuZG9tLnZhbHVlKCkgKiAoc3RlbmNpbHMubGVuZ3RoIC0gMSkpXTtcbiAgLy8gY29uc29sZS5sb2coYHJhdGlvID0gJHtyYXRpb306MWAsIHN0ZW5jaWwpO1xuICByZXR1cm4gc3RlbmNpbDtcbn07XG5jb25zdCBmb250RmFtaWx5ID0gJ1wiSGVsdmV0aWNhXCInO1xuY29uc3QgYmFja2dyb3VuZCA9IFwidHJhbnNwYXJlbnRcIjsgLy8jZjJmMmYyXCI7XG5jb25zdCBmcmVxdWVuY3kgPSAwLjE7XG5cbmNvbnN0IHNrZXRjaCA9ICgpID0+IHtcbiAgbGV0IHBvaW50cyA9IFtdO1xuICBsZXQgbWVyZ2VkQ2VsbHMgPSBbXTtcblxuICBjb25zdCBzZXR1cCA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhcInNldHVwXCIpO1xuICAgIGNvbnN0IHtcbiAgICAgIGdyaWRDb2x1bW5zLFxuICAgICAgZ3JpZFJvd3MsXG4gICAgICBtYXhDb2x1bW5zTWVyZ2UsXG4gICAgICBtYXhSb3dzTWVyZ2UsXG4gICAgICBERUJVRyxcbiAgICAgIGFsbG93TGlnaHQsXG4gICAgfSA9IGRhdGE7XG5cbiAgICBjb25zdCBjcmVhdGVQb2ludHMgPSAoKSA9PiB7XG4gICAgICBjb25zdCBwb2ludHMgPSBbXTtcblxuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBncmlkUm93czsgeSsrKSB7XG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgZ3JpZENvbHVtbnM7IHgrKykge1xuICAgICAgICAgIGxldCB1ID0geCAvIChncmlkQ29sdW1ucyAtIDEpO1xuICAgICAgICAgIGxldCB2ID0geSAvIChncmlkUm93cyAtIDEpO1xuXG4gICAgICAgICAgY29uc3QgbiA9IHJhbmRvbS5ub2lzZTJEKHUgKiBmcmVxdWVuY3ksIHYgKiBmcmVxdWVuY3kpO1xuXG4gICAgICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICAgICAgcG9zaXRpb246IFt1LCB2XSxcbiAgICAgICAgICAgIGluZGV4OiB7IHJvdzogeSwgY29sdW1uOiB4IH0sXG4gICAgICAgICAgICBzaXplOiBNYXRoLmFicyhNYXRoLmNvcyhuICogMiAqIE1hdGguUEkpICogMzApLFxuICAgICAgICAgICAgbm9pc2VPZmZzZXQ6IG4sXG4gICAgICAgICAgICBnZXRYSW5kZXg6ICgpID0+IHgsXG4gICAgICAgICAgICBnZXRZSW5kZXg6ICgpID0+IHksXG4gICAgICAgICAgICBjb2xvdXI6IHJhbmRvbS52YWx1ZSgpID4gMC41ID8gXCIjZmNkYjMyXCIgOiBcIiNmY2RiMzJcIixcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHBvaW50cztcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0Q2VsbHNCeVhJbmRleCA9IChjb2wpID0+IHtcbiAgICAgIHJldHVybiBwb2ludHMuZmlsdGVyKChwb2ludCkgPT4gcG9pbnQuZ2V0WEluZGV4KCkgPT09IGNvbCk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRDZWxsc0J5WUluZGV4ID0gKHJvdywgcG9pbnRzVG9GaWx0ZXIpID0+IHtcbiAgICAgIHJldHVybiBwb2ludHNUb0ZpbHRlci5maWx0ZXIoKHBvaW50KSA9PiBwb2ludC5nZXRZSW5kZXgoKSA9PT0gcm93KTtcbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlUGlsbGFyID0gKHN0YXJ0Q29sSUQsIGVuZENvbElEKSA9PiB7XG4gICAgICBjb25zdCBwb2ludHNJbkNvbEEgPSBnZXRDZWxsc0J5WEluZGV4KHN0YXJ0Q29sSUQpO1xuICAgICAgY29uc3QgcG9pbnRzSW5Db2xCID0gZ2V0Q2VsbHNCeVhJbmRleChlbmRDb2xJRCk7XG5cbiAgICAgIGNvbnN0IGNlbGwgPSB7XG4gICAgICAgIHBvaW50czogWy4uLnBvaW50c0luQ29sQSwgLi4ucG9pbnRzSW5Db2xCXSxcbiAgICAgICAgY29sb3I6IGdldFJhbmRvbUNvbG9yKCksXG4gICAgICAgIGx0OiBwb2ludHNJbkNvbEFbMF0sXG4gICAgICAgIHJ0OiBwb2ludHNJbkNvbEJbMF0sXG4gICAgICAgIGxiOiBwb2ludHNJbkNvbEFbcG9pbnRzSW5Db2xBLmxlbmd0aCAtIDFdLFxuICAgICAgICByYjogcG9pbnRzSW5Db2xCW3BvaW50c0luQ29sQi5sZW5ndGggLSAxXSxcbiAgICAgIH07XG4gICAgICBjb25zdCB3aWR0aEluVVYgPSBjZWxsLnJ0LmluZGV4LmNvbHVtbiAtIGNlbGwubHQuaW5kZXguY29sdW1uO1xuICAgICAgY29uc3QgaGVpZ2h0SW5VViA9IGNlbGwubGIuaW5kZXgucm93IC0gY2VsbC5sdC5pbmRleC5yb3c7XG4gICAgICBjb25zdCByYXRpbyA9IHdpZHRoSW5VViAvIGhlaWdodEluVVY7XG4gICAgICBjZWxsLnJhdGlvID0gcmF0aW87XG4gICAgICBjZWxsLnNoYXBlVHlwZSA9IGdldFJhbmRvbVNoYXBlVHlwZUJ5UmF0aW8ocmF0aW8pO1xuICAgICAgcmV0dXJuIGNlbGw7XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZVJvdyA9IChzdGFydFJvd0lELCBlbmRSb3dJRCwgcG9pbnRzUmFuZ2UpID0+IHtcbiAgICAgIGNvbnN0IHBvaW50c0luUm93QSA9IGdldENlbGxzQnlZSW5kZXgoc3RhcnRSb3dJRCwgcG9pbnRzUmFuZ2UpO1xuICAgICAgY29uc3QgcG9pbnRzSW5Sb3dCID0gZ2V0Q2VsbHNCeVlJbmRleChlbmRSb3dJRCwgcG9pbnRzUmFuZ2UpO1xuXG4gICAgICBjb25zdCBjZWxsID0ge1xuICAgICAgICBwb2ludHM6IFsuLi5wb2ludHNJblJvd0EsIC4uLnBvaW50c0luUm93Ql0sXG4gICAgICAgIGNvbG9yOiBnZXRSYW5kb21Db2xvcigpLFxuICAgICAgICBsdDogcG9pbnRzSW5Sb3dBWzBdLFxuICAgICAgICBydDogcG9pbnRzSW5Sb3dBWzFdLFxuICAgICAgICBsYjogcG9pbnRzSW5Sb3dCW3BvaW50c0luUm93QS5sZW5ndGggLSAyXSxcbiAgICAgICAgcmI6IHBvaW50c0luUm93Qltwb2ludHNJblJvd0IubGVuZ3RoIC0gMV0sXG4gICAgICB9O1xuICAgICAgY29uc3Qgd2lkdGhJblVWID0gY2VsbC5ydC5pbmRleC5jb2x1bW4gLSBjZWxsLmx0LmluZGV4LmNvbHVtbjtcbiAgICAgIGNvbnN0IGhlaWdodEluVVYgPSBjZWxsLmxiLmluZGV4LnJvdyAtIGNlbGwubHQuaW5kZXgucm93O1xuICAgICAgY29uc3QgcmF0aW8gPSB3aWR0aEluVVYgLyBoZWlnaHRJblVWO1xuICAgICAgY2VsbC5yYXRpbyA9IHJhdGlvO1xuICAgICAgY2VsbC5zaGFwZVR5cGUgPSBnZXRSYW5kb21TaGFwZVR5cGVCeVJhdGlvKHJhdGlvKTtcbiAgICAgIHJldHVybiBjZWxsO1xuICAgIH07XG4gICAgcG9pbnRzID0gY3JlYXRlUG9pbnRzKCk7XG4gICAgbWVyZ2VkQ2VsbHMgPSBbXTtcbiAgICBsZXQgY29sQW1vdW50ID0gMDtcbiAgICBmb3IgKGxldCBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgZ3JpZENvbHVtbnMgLSAxOyBjb2xJbmRleCsrKSB7XG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gY29sQW1vdW50O1xuICAgICAgY29uc3QgdG90YWxSb3dzTGVmdCA9IGdyaWRDb2x1bW5zIC0gY29sQW1vdW50IC0gMTtcbiAgICAgIGNvbnN0IGFtb3VudFRvTWVyZ2UgPSBNYXRoLmNlaWwoXG4gICAgICAgIHJhbmRvbS52YWx1ZSgpICogTWF0aC5taW4obWF4Q29sdW1uc01lcmdlLCB0b3RhbFJvd3NMZWZ0KVxuICAgICAgKTtcblxuICAgICAgY29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgYW1vdW50VG9NZXJnZTtcbiAgICAgIGNvbEFtb3VudCArPSBhbW91bnRUb01lcmdlO1xuXG4gICAgICBpZiAoZW5kSW5kZXggIT09IHN0YXJ0SW5kZXgpIHtcbiAgICAgICAgY29uc3QgcGlsbGFyQSA9IGNyZWF0ZVBpbGxhcihzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIC8vIG1lcmdlZENlbGxzLnB1c2gocGlsbGFyQSk7XG4gICAgICAgIGlmICh0cnVlKSB7XG4gICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgICAgbGV0IHJvd0Ftb3VudCA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGdyaWRSb3dzOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gcm93QW1vdW50O1xuICAgICAgICAgICAgY29uc3QgdG90YWxSb3dzTGVmdCA9IGdyaWRSb3dzIC0gcm93QW1vdW50IC0gMTtcbiAgICAgICAgICAgIGNvbnN0IGFtb3VudFRvTWVyZ2UgPSBNYXRoLmNlaWwoXG4gICAgICAgICAgICAgIHJhbmRvbS52YWx1ZSgpICogTWF0aC5taW4obWF4Um93c01lcmdlLCB0b3RhbFJvd3NMZWZ0KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgYW1vdW50VG9NZXJnZTtcbiAgICAgICAgICAgIHJvd0Ftb3VudCArPSBhbW91bnRUb01lcmdlO1xuICAgICAgICAgICAgaWYgKGVuZEluZGV4ICE9PSBzdGFydEluZGV4ICYmIGVuZEluZGV4IDwgZ3JpZFJvd3MpIHtcbiAgICAgICAgICAgICAgY29uc3Qgcm93c1BpbGxhckEgPSBjcmVhdGVSb3coXG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICBlbmRJbmRleCxcbiAgICAgICAgICAgICAgICBwaWxsYXJBLnBvaW50c1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBtZXJnZWRDZWxscy5wdXNoKHJvd3NQaWxsYXJBKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGxldCBjdXJyZW50Q29scztcbiAgbGV0IGN1cnJlbnRSb3dzO1xuICBsZXQgY3VycmVudE1heENvbHVtbnNNZXJnZTtcbiAgbGV0IGN1cnJlbnRNYXhSb3dzTWVyZ2U7XG4gIGxldCBjdXJyZW50RGVidWc7XG4gIGxldCBjdXJyZW50QWxsb3dMaWdodDtcbiAgbGV0IGN1cnJlbnRDb3VudGVyO1xuXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgKGUpID0+IHtcbiAgICBjb25zb2xlLmxvZyh7IGUgfSk7XG4gICAgaWYgKGUuY29kZSA9PT0gXCJTcGFjZVwiKSB7XG4gICAgICBkYXRhLmNvdW50ZXIgPSBkYXRhLmNvdW50ZXIgKyAxO1xuICAgICAgc2V0dXAoKTtcbiAgICAgIGlmIChtYW5hZ2VyKSB7XG4gICAgICAgIG1hbmFnZXIucmVuZGVyKCk7XG4gICAgICAgIGN1cnJlbnRDb3VudGVyID0gZGF0YS5jb3VudGVyO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8vdGhlIHJlbmRlciBmdW5jdGlvblxuICByZXR1cm4gKHsgY29udGV4dCwgd2lkdGgsIGhlaWdodCwgZGF0YSB9KSA9PiB7XG4gICAgaWYgKFxuICAgICAgZGF0YS5ncmlkQ29sdW1ucyAhPT0gY3VycmVudENvbHMgfHxcbiAgICAgIGRhdGEuZ3JpZFJvd3MgIT09IGN1cnJlbnRSb3dzIHx8XG4gICAgICBkYXRhLm1heENvbHVtbnNNZXJnZSAhPT0gY3VycmVudE1heENvbHVtbnNNZXJnZSB8fFxuICAgICAgZGF0YS5tYXhSb3dzTWVyZ2UgIT09IGN1cnJlbnRNYXhSb3dzTWVyZ2UgfHxcbiAgICAgIGRhdGEuREVCVUcgIT09IGN1cnJlbnREZWJ1ZyB8fFxuICAgICAgZGF0YS5hbGxvd0xpZ2h0ICE9PSBjdXJyZW50QWxsb3dMaWdodCB8fFxuICAgICAgZGF0YS5jb3VudGVyICE9PSBjdXJyZW50Q291bnRlclxuICAgICkge1xuICAgICAgY3VycmVudENvbHMgPSBkYXRhLmdyaWRDb2x1bW5zO1xuICAgICAgY3VycmVudFJvd3MgPSBkYXRhLmdyaWRSb3dzO1xuICAgICAgY3VycmVudE1heENvbHVtbnNNZXJnZSA9IGRhdGEubWF4Q29sdW1uc01lcmdlO1xuICAgICAgY3VycmVudE1heFJvd3NNZXJnZSA9IGRhdGEubWF4Um93c01lcmdlO1xuICAgICAgY3VycmVudERlYnVnID0gZGF0YS5ERUJVRztcbiAgICAgIGN1cnJlbnRDb3VudGVyID0gZGF0YS5jb3VudGVyO1xuICAgICAgY3VycmVudEFsbG93TGlnaHQgPSBkYXRhLmFsbG93TGlnaHQ7XG4gICAgICBzZXR1cCgpO1xuICAgIH1cbiAgICBjb25zdCBtYXJnaW4gPSB3aWR0aCAqIDAuMTU7XG4gICAgY29uc3QgY29udmVydFRvUG9zaXRpb25PbkNhbnZhcyA9ICh4SW5kZXgsIHlJbmRleCkgPT4ge1xuICAgICAgY29uc3QgeCA9IGxlcnAobWFyZ2luLCB3aWR0aCAtIG1hcmdpbiwgeEluZGV4IC8gKGN1cnJlbnRDb2xzIC0gMSkpO1xuXG4gICAgICBjb25zdCB5ID0gbGVycChtYXJnaW4sIGhlaWdodCAtIG1hcmdpbiwgeUluZGV4IC8gKGN1cnJlbnRDb2xzIC0gMSkpO1xuICAgICAgcmV0dXJuIHsgeCwgeSB9O1xuICAgIH07XG4gICAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSBcImJsYWNrXCI7XG4gICAgY29udGV4dC50ZXh0QWxpZ24gPSBcImNlbnRlclwiO1xuICAgIGNvbnRleHQudGV4dEJhc2VsaW5lID0gXCJtaWRkbGVcIjtcbiAgICBjb250ZXh0LmZvbnQgPSBgJHs0MH1weCAke2ZvbnRGYW1pbHl9YDtcblxuICAgIC8vcnNldCBwb3NpdGlvblxuICAgIGNvbnRleHQubW92ZVRvKDAsIDApO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBtZXJnZWRDZWxscy5mb3JFYWNoKFxuICAgICAgKHsgbHQsIHJiLCBydCwgbGIsIGNvbG9yLCBzaGFwZVR5cGUsIHJhdGlvIH0sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHRvcExlZnQgPSBjb252ZXJ0VG9Qb3NpdGlvbk9uQ2FudmFzKFxuICAgICAgICAgIGx0LmdldFhJbmRleCgpLFxuICAgICAgICAgIGx0LmdldFlJbmRleCgpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHRvcFJpZ2h0ID0gY29udmVydFRvUG9zaXRpb25PbkNhbnZhcyhcbiAgICAgICAgICBydC5nZXRYSW5kZXgoKSxcbiAgICAgICAgICBydC5nZXRZSW5kZXgoKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBib3R0b21SaWdodCA9IGNvbnZlcnRUb1Bvc2l0aW9uT25DYW52YXMoXG4gICAgICAgICAgcmIuZ2V0WEluZGV4KCksXG4gICAgICAgICAgcmIuZ2V0WUluZGV4KClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYm90dG9tTGVmdCA9IGNvbnZlcnRUb1Bvc2l0aW9uT25DYW52YXMoXG4gICAgICAgICAgbGIuZ2V0WEluZGV4KCksXG4gICAgICAgICAgbGIuZ2V0WUluZGV4KClcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBwb2ludHMgPSBbdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbVJpZ2h0LCBib3R0b21MZWZ0XTtcbiAgICAgICAgY29uc3QgZmlyc3RQb2ludCA9IHBvaW50c1swXTtcblxuICAgICAgICBjb25zdCB3aWR0aCA9IHRvcFJpZ2h0LnggLSB0b3BMZWZ0Lng7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbUxlZnQueSAtIHRvcExlZnQueTtcbiAgICAgICAgY29uc3QgY2VudGVyID0ge1xuICAgICAgICAgIHg6IHRvcExlZnQueCArIHdpZHRoIC8gMixcbiAgICAgICAgICB5OiB0b3BMZWZ0LnkgKyBoZWlnaHQgLyAyLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID1cbiAgICAgICAgICByYW5kb20udmFsdWUoKSA+IDAuNSAmJiBjdXJyZW50QWxsb3dMaWdodCA/IGNvbG9yLmxpZ2h0IDogY29sb3IuZGFyaztcbiAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgbGV0IHN0YXJ0QW5nbGUgPSAwO1xuICAgICAgICBsZXQgZW5kQW5nbGUgPSAwO1xuXG4gICAgICAgIGNvbnN0IHZpc3VhbFdpZHRoID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyO1xuICAgICAgICBzd2l0Y2ggKHNoYXBlVHlwZSkge1xuICAgICAgICAgIGNhc2UgQ0lSQ0xFX0ZVTEw6XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhjZW50ZXIueCwgY2VudGVyLnksIHZpc3VhbFdpZHRoLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIENJUkNMRV9RVUFSVEVSOlxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IDkwICogKE1hdGguUEkgLyAxODApO1xuICAgICAgICAgICAgZW5kQW5nbGUgPSAxODAgKiAoTWF0aC5QSSAvIDE4MCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh0b3BSaWdodC54LCB0b3BSaWdodC55KTtcbiAgICAgICAgICAgIGNvbnRleHQuYXJjKFxuICAgICAgICAgICAgICB0b3BSaWdodC54LFxuICAgICAgICAgICAgICB0b3BSaWdodC55LFxuICAgICAgICAgICAgICB2aXN1YWxXaWR0aCAqIDIsXG4gICAgICAgICAgICAgIHN0YXJ0QW5nbGUsXG4gICAgICAgICAgICAgIGVuZEFuZ2xlLFxuICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgQ0lSQ0xFX0hBTEZfVVA6XG4gICAgICAgICAgICBzdGFydEFuZ2xlID0gOTAgKiAoTWF0aC5QSSAvIDE4MCk7XG4gICAgICAgICAgICBlbmRBbmdsZSA9ICgxODAgKyA5MCkgKiAoTWF0aC5QSSAvIDE4MCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyh0b3BSaWdodC54LCBjZW50ZXIueSwgaGVpZ2h0IC8gMiwgc3RhcnRBbmdsZSwgZW5kQW5nbGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDSVJDTEVfSEFMRl9ET1dOOlxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IC0xODAgKiAoTWF0aC5QSSAvIDE4MCk7XG4gICAgICAgICAgICBlbmRBbmdsZSA9ICgxODAgLSAxODApICogKE1hdGguUEkgLyAxODApO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoXG4gICAgICAgICAgICAgIGNlbnRlci54LFxuICAgICAgICAgICAgICBib3R0b21MZWZ0LnksXG4gICAgICAgICAgICAgIHdpZHRoIC8gMixcbiAgICAgICAgICAgICAgc3RhcnRBbmdsZSxcbiAgICAgICAgICAgICAgZW5kQW5nbGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFBJTExfU0hBUEVfVVA6XG4gICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGNvbG9yLmxpZ2h0O1xuICAgICAgICAgICAgY29udGV4dC5hcmMoXG4gICAgICAgICAgICAgIGNlbnRlci54LFxuICAgICAgICAgICAgICB0b3BMZWZ0LnkgKyB2aXN1YWxXaWR0aCxcbiAgICAgICAgICAgICAgdmlzdWFsV2lkdGgsXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDIgKiBNYXRoLlBJXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KFxuICAgICAgICAgICAgICB0b3BMZWZ0LngsXG4gICAgICAgICAgICAgIHRvcExlZnQueSArIHZpc3VhbFdpZHRoLFxuICAgICAgICAgICAgICB2aXN1YWxXaWR0aCAqIDIsXG4gICAgICAgICAgICAgIGJvdHRvbUxlZnQueSAtIHZpc3VhbFdpZHRoICogMiAtIHRvcExlZnQueVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnRleHQuYXJjKFxuICAgICAgICAgICAgICBjZW50ZXIueCxcbiAgICAgICAgICAgICAgYm90dG9tTGVmdC55IC0gdmlzdWFsV2lkdGgsXG4gICAgICAgICAgICAgIHZpc3VhbFdpZHRoLFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAyICogTWF0aC5QSVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIC8vcGlsbCBhdCB0aGUgdG9wXG5cbiAgICAgICAgICAgIGNvbnRleHQuZmlsbCgpO1xuXG4gICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGNvbG9yLmRhcms7XG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oMCwgMCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhcbiAgICAgICAgICAgICAgY2VudGVyLngsXG4gICAgICAgICAgICAgIHRvcExlZnQueSArIHZpc3VhbFdpZHRoLFxuICAgICAgICAgICAgICB2aXN1YWxXaWR0aCxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgMiAqIE1hdGguUElcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICAvL1RPRE9cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgUElMTF9TSEFQRV9ET1dOOlxuICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBjb2xvci5saWdodDtcbiAgICAgICAgICAgIGNvbnRleHQuYXJjKFxuICAgICAgICAgICAgICB0b3BMZWZ0LnggKyB2aXN1YWxXaWR0aCxcbiAgICAgICAgICAgICAgY2VudGVyLnksXG4gICAgICAgICAgICAgIHZpc3VhbFdpZHRoLFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAyICogTWF0aC5QSVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChcbiAgICAgICAgICAgICAgdG9wTGVmdC54ICsgdmlzdWFsV2lkdGgsXG4gICAgICAgICAgICAgIHRvcExlZnQueSxcbiAgICAgICAgICAgICAgdG9wUmlnaHQueCAtIHZpc3VhbFdpZHRoIC0gKHRvcExlZnQueCArIHZpc3VhbFdpZHRoKSxcbiAgICAgICAgICAgICAgdmlzdWFsV2lkdGggKiAyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoXG4gICAgICAgICAgICAgIHRvcFJpZ2h0LnggLSB2aXN1YWxXaWR0aCxcbiAgICAgICAgICAgICAgYm90dG9tTGVmdC55IC0gdmlzdWFsV2lkdGgsXG4gICAgICAgICAgICAgIHZpc3VhbFdpZHRoLFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAyICogTWF0aC5QSVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnRleHQuZmlsbCgpO1xuXG4gICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGNvbG9yLmRhcms7XG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oMCwgMCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhcbiAgICAgICAgICAgICAgdG9wTGVmdC54ICsgdmlzdWFsV2lkdGgsXG4gICAgICAgICAgICAgIHRvcExlZnQueSArIHZpc3VhbFdpZHRoLFxuICAgICAgICAgICAgICB2aXN1YWxXaWR0aCxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgMiAqIE1hdGguUElcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICAvL1RPRE9cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBUUklBTkdMRTpcbiAgICAgICAgICAgIC8vVE9ET1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHRvcFJpZ2h0LngsIHRvcFJpZ2h0LnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8odG9wUmlnaHQueCwgYm90dG9tUmlnaHQueSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyh0b3BMZWZ0LngsIGJvdHRvbVJpZ2h0LnkpO1xuICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBcImJsYWNrXCI7XG5cbiAgICAgICAgaWYgKGN1cnJlbnREZWJ1Zykge1xuICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBcImJsYWNrXCI7XG5cbiAgICAgICAgICBjb250ZXh0LmZpbGxUZXh0KGByYXRpbzoke3JhdGlvfSwkezF9YCwgY2VudGVyLngsIGNlbnRlci55IC0gMjApO1xuXG4gICAgICAgICAgLy9saW5lc1xuICAgICAgICAgIHBvaW50cy5mb3JFYWNoKCh7IHgsIHkgfSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PSAwKSBjb250ZXh0Lm1vdmVUbyhmaXJzdFBvaW50LngsIGZpcnN0UG9pbnQueSk7XG4gICAgICAgICAgICBjb25zdCB4cG9zID0geDsgLy8tIG9mZnNldC54O1xuICAgICAgICAgICAgY29uc3QgeXBvcyA9IHk7IC8vLSBvZmZzZXQueTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHhwb3MsIHlwb3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vY2xvc2UgaXRcbiAgICAgICAgICBjb250ZXh0LmxpbmVUbyhmaXJzdFBvaW50LngsIGZpcnN0UG9pbnQueSk7XG4gICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbnRleHQucmVzdG9yZSgpO1xuICAgICAgfVxuICAgICk7XG4gICAgaWYgKGN1cnJlbnREZWJ1Zykge1xuICAgICAgcG9pbnRzLmZvckVhY2goXG4gICAgICAgICh7IHBvc2l0aW9uLCBzaXplLCBjb2xvdXIsIGdldFhJbmRleCwgZ2V0WUluZGV4LCBpbmRleCB9KSA9PiB7XG4gICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBcImJsYWNrXCI7XG4gICAgICAgICAgY29uc3QgW3UsIHZdID0gcG9zaXRpb247XG4gICAgICAgICAgY29uc3QgeyB4LCB5IH0gPSBjb252ZXJ0VG9Qb3NpdGlvbk9uQ2FudmFzKGdldFhJbmRleCgpLCBnZXRZSW5kZXgoKSk7XG5cbiAgICAgICAgICBjb250ZXh0LmZpbGxUZXh0KGAke2luZGV4LmNvbHVtbn0sJHtpbmRleC5yb3d9YCwgeCwgeSk7XG4gICAgICAgICAgLy8gY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAvLyBjb250ZXh0LnJlY3QoeCAtIDUsIHkgLSA1LCAxMCwgMTApO1xuICAgICAgICAgIC8vIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9O1xufTtcblxuKGFzeW5jICgpID0+IHtcbiAgbWFuYWdlciA9IGF3YWl0IGNhbnZhc1NrZXRjaChza2V0Y2gsIHNldHRpbmdzKTtcblxuICAvLyBDYW4gZGlzYWJsZSB0aGlzIGVudGlyZWx5XG4gIGNvbnN0IHVzZUdVSSA9IHRydWU7XG4gIGlmICh1c2VHVUkpIHtcbiAgICBjb25zdCBndWkgPSBuZXcgZGF0LkdVSSgpO1xuICAgIC8vIGdyaWRDb2x1bW5zOiAyMCxcbiAgICAvLyBncmlkUm93czogMTUsXG4gICAgLy8gbWF4Q29sdW1uc01lcmdlOiA5LFxuICAgIC8vIG1heFJvd3NNZXJnZTogMyxcbiAgICAvLyBERUJVRzogZmFsc2UsXG5cbiAgICAvLyBTZXR1cCBwYXJhbWV0ZXJzXG5cbiAgICBndWkuYWRkKGRhdGEsIFwiZ3JpZENvbHVtbnNcIiwgMiwgMjUsIDEpLm9uQ2hhbmdlKHJlbmRlcik7XG4gICAgZ3VpLmFkZChkYXRhLCBcImdyaWRSb3dzXCIsIDIsIDI1LCAxKS5vbkNoYW5nZShyZW5kZXIpO1xuICAgIGd1aS5hZGQoZGF0YSwgXCJtYXhDb2x1bW5zTWVyZ2VcIiwgMSwgMjUsIDEpLm9uQ2hhbmdlKHJlbmRlcik7XG4gICAgZ3VpLmFkZChkYXRhLCBcIm1heFJvd3NNZXJnZVwiLCAxLCAyNSwgMSkub25DaGFuZ2UocmVuZGVyKTtcbiAgICBndWkuYWRkKGRhdGEsIFwiYWxsb3dMaWdodFwiKS5vbkNoYW5nZShyZW5kZXIpO1xuICAgIGd1aS5hZGQoZGF0YSwgXCJERUJVR1wiKS5vbkNoYW5nZShyZW5kZXIpO1xuICAgIGd1aS5hZGQoZGF0YSwgXCJtZXNzYWdlXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIG1hbmFnZXIucmVuZGVyKCk7XG4gIH1cbn0pKCk7XG4iLCJcbmdsb2JhbC5DQU5WQVNfU0tFVENIX0RFRkFVTFRfU1RPUkFHRV9LRVkgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiJdfQ==