@utoo/web 1.5.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ /*! For license information please see serviceWorkerBundle.js.LICENSE.txt */
2
+ !function webpackUniversalModuleDefinition(root,factory){if("object"==typeof exports&&"object"==typeof module)module.exports=factory();else if("function"==typeof define&&define.amd)define([],factory);else{var a=factory();for(var i in a)("object"==typeof exports?exports:root)[i]=a[i]}}(self,()=>(()=>{var __webpack_modules__={"../../node_modules/@babel/highlight/node_modules/chalk/index.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";var process=__webpack_require__("../../node_modules/node-stdlib-browser/cjs/proxy/process.js");const escapeStringRegexp=__webpack_require__("../../node_modules/escape-string-regexp/index.js"),ansiStyles=__webpack_require__("../../node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/index.js"),stdoutColor=__webpack_require__("../../node_modules/supports-color/browser.js").stdout,template=__webpack_require__("../../node_modules/@babel/highlight/node_modules/chalk/templates.js"),isSimpleWindowsTerm="win32"===process.platform&&!(process.env.TERM||"").toLowerCase().startsWith("xterm"),levelMapping=["ansi","ansi","ansi256","ansi16m"],skipModels=new Set(["gray"]),styles=Object.create(null);function applyOptions(obj,options){options=options||{};const scLevel=stdoutColor?stdoutColor.level:0;obj.level=void 0===options.level?scLevel:options.level,obj.enabled="enabled"in options?options.enabled:obj.level>0}function Chalk(options){if(!this||!(this instanceof Chalk)||this.template){const chalk={};return applyOptions(chalk,options),chalk.template=function(){const args=[].slice.call(arguments);return chalkTag.apply(null,[chalk.template].concat(args))},Object.setPrototypeOf(chalk,Chalk.prototype),Object.setPrototypeOf(chalk.template,chalk),chalk.template.constructor=Chalk,chalk.template}applyOptions(this,options)}isSimpleWindowsTerm&&(ansiStyles.blue.open="");for(const key of Object.keys(ansiStyles))ansiStyles[key].closeRe=new RegExp(escapeStringRegexp(ansiStyles[key].close),"g"),styles[key]={get(){const codes=ansiStyles[key];return build.call(this,this._styles?this._styles.concat(codes):[codes],this._empty,key)}};styles.visible={get(){return build.call(this,this._styles||[],!0,"visible")}},ansiStyles.color.closeRe=new RegExp(escapeStringRegexp(ansiStyles.color.close),"g");for(const model of Object.keys(ansiStyles.color.ansi))skipModels.has(model)||(styles[model]={get(){const level=this.level;return function(){const codes={open:ansiStyles.color[levelMapping[level]][model].apply(null,arguments),close:ansiStyles.color.close,closeRe:ansiStyles.color.closeRe};return build.call(this,this._styles?this._styles.concat(codes):[codes],this._empty,model)}}});ansiStyles.bgColor.closeRe=new RegExp(escapeStringRegexp(ansiStyles.bgColor.close),"g");for(const model of Object.keys(ansiStyles.bgColor.ansi)){if(skipModels.has(model))continue;styles["bg"+model[0].toUpperCase()+model.slice(1)]={get(){const level=this.level;return function(){const codes={open:ansiStyles.bgColor[levelMapping[level]][model].apply(null,arguments),close:ansiStyles.bgColor.close,closeRe:ansiStyles.bgColor.closeRe};return build.call(this,this._styles?this._styles.concat(codes):[codes],this._empty,model)}}}}const proto=Object.defineProperties(()=>{},styles);function build(_styles,_empty,key){const builder=function(){return applyStyle.apply(builder,arguments)};builder._styles=_styles,builder._empty=_empty;const self=this;return Object.defineProperty(builder,"level",{enumerable:!0,get:()=>self.level,set(level){self.level=level}}),Object.defineProperty(builder,"enabled",{enumerable:!0,get:()=>self.enabled,set(enabled){self.enabled=enabled}}),builder.hasGrey=this.hasGrey||"gray"===key||"grey"===key,builder.__proto__=proto,builder}function applyStyle(){const args=arguments,argsLen=args.length;let str=String(arguments[0]);if(0===argsLen)return"";if(argsLen>1)for(let a=1;a<argsLen;a++)str+=" "+args[a];if(!this.enabled||this.level<=0||!str)return this._empty?"":str;const originalDim=ansiStyles.dim.open;isSimpleWindowsTerm&&this.hasGrey&&(ansiStyles.dim.open="");for(const code of this._styles.slice().reverse())str=code.open+str.replace(code.closeRe,code.open)+code.close,str=str.replace(/\r?\n/g,`${code.close}$&${code.open}`);return ansiStyles.dim.open=originalDim,str}function chalkTag(chalk,strings){if(!Array.isArray(strings))return[].slice.call(arguments,1).join(" ");const args=[].slice.call(arguments,2),parts=[strings.raw[0]];for(let i=1;i<strings.length;i++)parts.push(String(args[i-1]).replace(/[{}\\]/g,"\\$&")),parts.push(String(strings.raw[i]));return template(chalk,parts.join(""))}Object.defineProperties(Chalk.prototype,styles),module.exports=Chalk(),module.exports.supportsColor=stdoutColor,module.exports.default=module.exports},"../../node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/index.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";module=__webpack_require__.nmd(module);const colorConvert=__webpack_require__("../../node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/index.js"),wrapAnsi16=(fn,offset)=>function(){return`[${fn.apply(colorConvert,arguments)+offset}m`},wrapAnsi256=(fn,offset)=>function(){const code=fn.apply(colorConvert,arguments);return`[${38+offset};5;${code}m`},wrapAnsi16m=(fn,offset)=>function(){const rgb=fn.apply(colorConvert,arguments);return`[${38+offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`};Object.defineProperty(module,"exports",{enumerable:!0,get:function assembleStyles(){const codes=new Map,styles={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],gray:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};styles.color.grey=styles.color.gray;for(const groupName of Object.keys(styles)){const group=styles[groupName];for(const styleName of Object.keys(group)){const style=group[styleName];styles[styleName]={open:`[${style[0]}m`,close:`[${style[1]}m`},group[styleName]=styles[styleName],codes.set(style[0],style[1])}Object.defineProperty(styles,groupName,{value:group,enumerable:!1}),Object.defineProperty(styles,"codes",{value:codes,enumerable:!1})}const ansi2ansi=n=>n,rgb2rgb=(r,g,b)=>[r,g,b];styles.color.close="",styles.bgColor.close="",styles.color.ansi={ansi:wrapAnsi16(ansi2ansi,0)},styles.color.ansi256={ansi256:wrapAnsi256(ansi2ansi,0)},styles.color.ansi16m={rgb:wrapAnsi16m(rgb2rgb,0)},styles.bgColor.ansi={ansi:wrapAnsi16(ansi2ansi,10)},styles.bgColor.ansi256={ansi256:wrapAnsi256(ansi2ansi,10)},styles.bgColor.ansi16m={rgb:wrapAnsi16m(rgb2rgb,10)};for(let key of Object.keys(colorConvert)){if("object"!=typeof colorConvert[key])continue;const suite=colorConvert[key];"ansi16"===key&&(key="ansi"),"ansi16"in suite&&(styles.color.ansi[key]=wrapAnsi16(suite.ansi16,0),styles.bgColor.ansi[key]=wrapAnsi16(suite.ansi16,10)),"ansi256"in suite&&(styles.color.ansi256[key]=wrapAnsi256(suite.ansi256,0),styles.bgColor.ansi256[key]=wrapAnsi256(suite.ansi256,10)),"rgb"in suite&&(styles.color.ansi16m[key]=wrapAnsi16m(suite.rgb,0),styles.bgColor.ansi16m[key]=wrapAnsi16m(suite.rgb,10))}return styles}})},"../../node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/conversions.js"(module,__unused_webpack_exports,__webpack_require__){var cssKeywords=__webpack_require__("../../node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/node_modules/color-name/index.js"),reverseKeywords={};for(var key in cssKeywords)cssKeywords.hasOwnProperty(key)&&(reverseKeywords[cssKeywords[key]]=key);var convert=module.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var model in convert)if(convert.hasOwnProperty(model)){if(!("channels"in convert[model]))throw new Error("missing channels property: "+model);if(!("labels"in convert[model]))throw new Error("missing channel labels property: "+model);if(convert[model].labels.length!==convert[model].channels)throw new Error("channel and label counts mismatch: "+model);var channels=convert[model].channels,labels=convert[model].labels;delete convert[model].channels,delete convert[model].labels,Object.defineProperty(convert[model],"channels",{value:channels}),Object.defineProperty(convert[model],"labels",{value:labels})}function comparativeDistance(x,y){return Math.pow(x[0]-y[0],2)+Math.pow(x[1]-y[1],2)+Math.pow(x[2]-y[2],2)}convert.rgb.hsl=function(rgb){var h,l,r=rgb[0]/255,g=rgb[1]/255,b=rgb[2]/255,min=Math.min(r,g,b),max=Math.max(r,g,b),delta=max-min;return max===min?h=0:r===max?h=(g-b)/delta:g===max?h=2+(b-r)/delta:b===max&&(h=4+(r-g)/delta),(h=Math.min(60*h,360))<0&&(h+=360),l=(min+max)/2,[h,100*(max===min?0:l<=.5?delta/(max+min):delta/(2-max-min)),100*l]},convert.rgb.hsv=function(rgb){var rdif,gdif,bdif,h,s,r=rgb[0]/255,g=rgb[1]/255,b=rgb[2]/255,v=Math.max(r,g,b),diff=v-Math.min(r,g,b),diffc=function(c){return(v-c)/6/diff+.5};return 0===diff?h=s=0:(s=diff/v,rdif=diffc(r),gdif=diffc(g),bdif=diffc(b),r===v?h=bdif-gdif:g===v?h=1/3+rdif-bdif:b===v&&(h=2/3+gdif-rdif),h<0?h+=1:h>1&&(h-=1)),[360*h,100*s,100*v]},convert.rgb.hwb=function(rgb){var r=rgb[0],g=rgb[1],b=rgb[2];return[convert.rgb.hsl(rgb)[0],100*(1/255*Math.min(r,Math.min(g,b))),100*(b=1-1/255*Math.max(r,Math.max(g,b)))]},convert.rgb.cmyk=function(rgb){var k,r=rgb[0]/255,g=rgb[1]/255,b=rgb[2]/255;return[100*((1-r-(k=Math.min(1-r,1-g,1-b)))/(1-k)||0),100*((1-g-k)/(1-k)||0),100*((1-b-k)/(1-k)||0),100*k]},convert.rgb.keyword=function(rgb){var reversed=reverseKeywords[rgb];if(reversed)return reversed;var currentClosestKeyword,currentClosestDistance=1/0;for(var keyword in cssKeywords)if(cssKeywords.hasOwnProperty(keyword)){var distance=comparativeDistance(rgb,cssKeywords[keyword]);distance<currentClosestDistance&&(currentClosestDistance=distance,currentClosestKeyword=keyword)}return currentClosestKeyword},convert.keyword.rgb=function(keyword){return cssKeywords[keyword]},convert.rgb.xyz=function(rgb){var r=rgb[0]/255,g=rgb[1]/255,b=rgb[2]/255;return[100*(.4124*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)+.3576*(g=g>.04045?Math.pow((g+.055)/1.055,2.4):g/12.92)+.1805*(b=b>.04045?Math.pow((b+.055)/1.055,2.4):b/12.92)),100*(.2126*r+.7152*g+.0722*b),100*(.0193*r+.1192*g+.9505*b)]},convert.rgb.lab=function(rgb){var xyz=convert.rgb.xyz(rgb),x=xyz[0],y=xyz[1],z=xyz[2];return y/=100,z/=108.883,x=(x/=95.047)>.008856?Math.pow(x,1/3):7.787*x+16/116,[116*(y=y>.008856?Math.pow(y,1/3):7.787*y+16/116)-16,500*(x-y),200*(y-(z=z>.008856?Math.pow(z,1/3):7.787*z+16/116))]},convert.hsl.rgb=function(hsl){var t1,t2,t3,rgb,val,h=hsl[0]/360,s=hsl[1]/100,l=hsl[2]/100;if(0===s)return[val=255*l,val,val];t1=2*l-(t2=l<.5?l*(1+s):l+s-l*s),rgb=[0,0,0];for(var i=0;i<3;i++)(t3=h+1/3*-(i-1))<0&&t3++,t3>1&&t3--,val=6*t3<1?t1+6*(t2-t1)*t3:2*t3<1?t2:3*t3<2?t1+(t2-t1)*(2/3-t3)*6:t1,rgb[i]=255*val;return rgb},convert.hsl.hsv=function(hsl){var h=hsl[0],s=hsl[1]/100,l=hsl[2]/100,smin=s,lmin=Math.max(l,.01);return s*=(l*=2)<=1?l:2-l,smin*=lmin<=1?lmin:2-lmin,[h,100*(0===l?2*smin/(lmin+smin):2*s/(l+s)),100*((l+s)/2)]},convert.hsv.rgb=function(hsv){var h=hsv[0]/60,s=hsv[1]/100,v=hsv[2]/100,hi=Math.floor(h)%6,f=h-Math.floor(h),p=255*v*(1-s),q=255*v*(1-s*f),t=255*v*(1-s*(1-f));switch(v*=255,hi){case 0:return[v,t,p];case 1:return[q,v,p];case 2:return[p,v,t];case 3:return[p,q,v];case 4:return[t,p,v];case 5:return[v,p,q]}},convert.hsv.hsl=function(hsv){var lmin,sl,l,h=hsv[0],s=hsv[1]/100,v=hsv[2]/100,vmin=Math.max(v,.01);return l=(2-s)*v,sl=s*vmin,[h,100*(sl=(sl/=(lmin=(2-s)*vmin)<=1?lmin:2-lmin)||0),100*(l/=2)]},convert.hwb.rgb=function(hwb){var i,v,f,n,r,g,b,h=hwb[0]/360,wh=hwb[1]/100,bl=hwb[2]/100,ratio=wh+bl;switch(ratio>1&&(wh/=ratio,bl/=ratio),f=6*h-(i=Math.floor(6*h)),1&i&&(f=1-f),n=wh+f*((v=1-bl)-wh),i){default:case 6:case 0:r=v,g=n,b=wh;break;case 1:r=n,g=v,b=wh;break;case 2:r=wh,g=v,b=n;break;case 3:r=wh,g=n,b=v;break;case 4:r=n,g=wh,b=v;break;case 5:r=v,g=wh,b=n}return[255*r,255*g,255*b]},convert.cmyk.rgb=function(cmyk){var c=cmyk[0]/100,m=cmyk[1]/100,y=cmyk[2]/100,k=cmyk[3]/100;return[255*(1-Math.min(1,c*(1-k)+k)),255*(1-Math.min(1,m*(1-k)+k)),255*(1-Math.min(1,y*(1-k)+k))]},convert.xyz.rgb=function(xyz){var r,g,b,x=xyz[0]/100,y=xyz[1]/100,z=xyz[2]/100;return g=-.9689*x+1.8758*y+.0415*z,b=.0557*x+-.204*y+1.057*z,r=(r=3.2406*x+-1.5372*y+-.4986*z)>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,g=g>.0031308?1.055*Math.pow(g,1/2.4)-.055:12.92*g,b=b>.0031308?1.055*Math.pow(b,1/2.4)-.055:12.92*b,[255*(r=Math.min(Math.max(0,r),1)),255*(g=Math.min(Math.max(0,g),1)),255*(b=Math.min(Math.max(0,b),1))]},convert.xyz.lab=function(xyz){var x=xyz[0],y=xyz[1],z=xyz[2];return y/=100,z/=108.883,x=(x/=95.047)>.008856?Math.pow(x,1/3):7.787*x+16/116,[116*(y=y>.008856?Math.pow(y,1/3):7.787*y+16/116)-16,500*(x-y),200*(y-(z=z>.008856?Math.pow(z,1/3):7.787*z+16/116))]},convert.lab.xyz=function(lab){var x,y,z,l=lab[0];x=lab[1]/500+(y=(l+16)/116),z=y-lab[2]/200;var y2=Math.pow(y,3),x2=Math.pow(x,3),z2=Math.pow(z,3);return y=y2>.008856?y2:(y-16/116)/7.787,x=x2>.008856?x2:(x-16/116)/7.787,z=z2>.008856?z2:(z-16/116)/7.787,[x*=95.047,y*=100,z*=108.883]},convert.lab.lch=function(lab){var h,l=lab[0],a=lab[1],b=lab[2];return(h=360*Math.atan2(b,a)/2/Math.PI)<0&&(h+=360),[l,Math.sqrt(a*a+b*b),h]},convert.lch.lab=function(lch){var hr,l=lch[0],c=lch[1];return hr=lch[2]/360*2*Math.PI,[l,c*Math.cos(hr),c*Math.sin(hr)]},convert.rgb.ansi16=function(args){var r=args[0],g=args[1],b=args[2],value=1 in arguments?arguments[1]:convert.rgb.hsv(args)[2];if(0===(value=Math.round(value/50)))return 30;var ansi=30+(Math.round(b/255)<<2|Math.round(g/255)<<1|Math.round(r/255));return 2===value&&(ansi+=60),ansi},convert.hsv.ansi16=function(args){return convert.rgb.ansi16(convert.hsv.rgb(args),args[2])},convert.rgb.ansi256=function(args){var r=args[0],g=args[1],b=args[2];return r===g&&g===b?r<8?16:r>248?231:Math.round((r-8)/247*24)+232:16+36*Math.round(r/255*5)+6*Math.round(g/255*5)+Math.round(b/255*5)},convert.ansi16.rgb=function(args){var color=args%10;if(0===color||7===color)return args>50&&(color+=3.5),[color=color/10.5*255,color,color];var mult=.5*(1+~~(args>50));return[(1&color)*mult*255,(color>>1&1)*mult*255,(color>>2&1)*mult*255]},convert.ansi256.rgb=function(args){if(args>=232){var c=10*(args-232)+8;return[c,c,c]}var rem;return args-=16,[Math.floor(args/36)/5*255,Math.floor((rem=args%36)/6)/5*255,rem%6/5*255]},convert.rgb.hex=function(args){var string=(((255&Math.round(args[0]))<<16)+((255&Math.round(args[1]))<<8)+(255&Math.round(args[2]))).toString(16).toUpperCase();return"000000".substring(string.length)+string},convert.hex.rgb=function(args){var match=args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!match)return[0,0,0];var colorString=match[0];3===match[0].length&&(colorString=colorString.split("").map(function(char){return char+char}).join(""));var integer=parseInt(colorString,16);return[integer>>16&255,integer>>8&255,255&integer]},convert.rgb.hcg=function(rgb){var hue,r=rgb[0]/255,g=rgb[1]/255,b=rgb[2]/255,max=Math.max(Math.max(r,g),b),min=Math.min(Math.min(r,g),b),chroma=max-min;return hue=chroma<=0?0:max===r?(g-b)/chroma%6:max===g?2+(b-r)/chroma:4+(r-g)/chroma+4,hue/=6,[360*(hue%=1),100*chroma,100*(chroma<1?min/(1-chroma):0)]},convert.hsl.hcg=function(hsl){var s=hsl[1]/100,l=hsl[2]/100,c=1,f=0;return(c=l<.5?2*s*l:2*s*(1-l))<1&&(f=(l-.5*c)/(1-c)),[hsl[0],100*c,100*f]},convert.hsv.hcg=function(hsv){var s=hsv[1]/100,v=hsv[2]/100,c=s*v,f=0;return c<1&&(f=(v-c)/(1-c)),[hsv[0],100*c,100*f]},convert.hcg.rgb=function(hcg){var h=hcg[0]/360,c=hcg[1]/100,g=hcg[2]/100;if(0===c)return[255*g,255*g,255*g];var mg,pure=[0,0,0],hi=h%1*6,v=hi%1,w=1-v;switch(Math.floor(hi)){case 0:pure[0]=1,pure[1]=v,pure[2]=0;break;case 1:pure[0]=w,pure[1]=1,pure[2]=0;break;case 2:pure[0]=0,pure[1]=1,pure[2]=v;break;case 3:pure[0]=0,pure[1]=w,pure[2]=1;break;case 4:pure[0]=v,pure[1]=0,pure[2]=1;break;default:pure[0]=1,pure[1]=0,pure[2]=w}return mg=(1-c)*g,[255*(c*pure[0]+mg),255*(c*pure[1]+mg),255*(c*pure[2]+mg)]},convert.hcg.hsv=function(hcg){var c=hcg[1]/100,v=c+hcg[2]/100*(1-c),f=0;return v>0&&(f=c/v),[hcg[0],100*f,100*v]},convert.hcg.hsl=function(hcg){var c=hcg[1]/100,l=hcg[2]/100*(1-c)+.5*c,s=0;return l>0&&l<.5?s=c/(2*l):l>=.5&&l<1&&(s=c/(2*(1-l))),[hcg[0],100*s,100*l]},convert.hcg.hwb=function(hcg){var c=hcg[1]/100,v=c+hcg[2]/100*(1-c);return[hcg[0],100*(v-c),100*(1-v)]},convert.hwb.hcg=function(hwb){var w=hwb[1]/100,v=1-hwb[2]/100,c=v-w,g=0;return c<1&&(g=(v-c)/(1-c)),[hwb[0],100*c,100*g]},convert.apple.rgb=function(apple){return[apple[0]/65535*255,apple[1]/65535*255,apple[2]/65535*255]},convert.rgb.apple=function(rgb){return[rgb[0]/255*65535,rgb[1]/255*65535,rgb[2]/255*65535]},convert.gray.rgb=function(args){return[args[0]/100*255,args[0]/100*255,args[0]/100*255]},convert.gray.hsl=convert.gray.hsv=function(args){return[0,0,args[0]]},convert.gray.hwb=function(gray){return[0,100,gray[0]]},convert.gray.cmyk=function(gray){return[0,0,0,gray[0]]},convert.gray.lab=function(gray){return[gray[0],0,0]},convert.gray.hex=function(gray){var val=255&Math.round(gray[0]/100*255),string=((val<<16)+(val<<8)+val).toString(16).toUpperCase();return"000000".substring(string.length)+string},convert.rgb.gray=function(rgb){return[(rgb[0]+rgb[1]+rgb[2])/3/255*100]}},"../../node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/index.js"(module,__unused_webpack_exports,__webpack_require__){var conversions=__webpack_require__("../../node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/conversions.js"),route=__webpack_require__("../../node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/route.js"),convert={};Object.keys(conversions).forEach(function(fromModel){convert[fromModel]={},Object.defineProperty(convert[fromModel],"channels",{value:conversions[fromModel].channels}),Object.defineProperty(convert[fromModel],"labels",{value:conversions[fromModel].labels});var routes=route(fromModel);Object.keys(routes).forEach(function(toModel){var fn=routes[toModel];convert[fromModel][toModel]=function wrapRounded(fn){var wrappedFn=function(args){if(null==args)return args;arguments.length>1&&(args=Array.prototype.slice.call(arguments));var result=fn(args);if("object"==typeof result)for(var len=result.length,i=0;i<len;i++)result[i]=Math.round(result[i]);return result};return"conversion"in fn&&(wrappedFn.conversion=fn.conversion),wrappedFn}(fn),convert[fromModel][toModel].raw=function wrapRaw(fn){var wrappedFn=function(args){return null==args?args:(arguments.length>1&&(args=Array.prototype.slice.call(arguments)),fn(args))};return"conversion"in fn&&(wrappedFn.conversion=fn.conversion),wrappedFn}(fn)})}),module.exports=convert},"../../node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/node_modules/color-name/index.js"(module){"use strict";module.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},"../../node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/route.js"(module,__unused_webpack_exports,__webpack_require__){var conversions=__webpack_require__("../../node_modules/@babel/highlight/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/conversions.js");function deriveBFS(fromModel){var graph=function buildGraph(){for(var graph={},models=Object.keys(conversions),len=models.length,i=0;i<len;i++)graph[models[i]]={distance:-1,parent:null};return graph}(),queue=[fromModel];for(graph[fromModel].distance=0;queue.length;)for(var current=queue.pop(),adjacents=Object.keys(conversions[current]),len=adjacents.length,i=0;i<len;i++){var adjacent=adjacents[i],node=graph[adjacent];-1===node.distance&&(node.distance=graph[current].distance+1,node.parent=current,queue.unshift(adjacent))}return graph}function link(from,to){return function(args){return to(from(args))}}function wrapConversion(toModel,graph){for(var path=[graph[toModel].parent,toModel],fn=conversions[graph[toModel].parent][toModel],cur=graph[toModel].parent;graph[cur].parent;)path.unshift(graph[cur].parent),fn=link(conversions[graph[cur].parent][cur],fn),cur=graph[cur].parent;return fn.conversion=path,fn}module.exports=function(fromModel){for(var graph=deriveBFS(fromModel),conversion={},models=Object.keys(graph),len=models.length,i=0;i<len;i++){var toModel=models[i];null!==graph[toModel].parent&&(conversion[toModel]=wrapConversion(toModel,graph))}return conversion}},"../../node_modules/@babel/highlight/node_modules/chalk/templates.js"(module){"use strict";const TEMPLATE_REGEX=/(?:\\(u[a-f\d]{4}|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,STYLE_REGEX=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,STRING_REGEX=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,ESCAPE_REGEX=/\\(u[a-f\d]{4}|x[a-f\d]{2}|.)|([^\\])/gi,ESCAPES=new Map([["n","\n"],["r","\r"],["t","\t"],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e",""],["a",""]]);function unescape(c){return"u"===c[0]&&5===c.length||"x"===c[0]&&3===c.length?String.fromCharCode(parseInt(c.slice(1),16)):ESCAPES.get(c)||c}function parseArguments(name,args){const results=[],chunks=args.trim().split(/\s*,\s*/g);let matches;for(const chunk of chunks)if(isNaN(chunk)){if(!(matches=chunk.match(STRING_REGEX)))throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);results.push(matches[2].replace(ESCAPE_REGEX,(m,escape,chr)=>escape?unescape(escape):chr))}else results.push(Number(chunk));return results}function parseStyle(style){STYLE_REGEX.lastIndex=0;const results=[];let matches;for(;null!==(matches=STYLE_REGEX.exec(style));){const name=matches[1];if(matches[2]){const args=parseArguments(name,matches[2]);results.push([name].concat(args))}else results.push([name])}return results}function buildStyle(chalk,styles){const enabled={};for(const layer of styles)for(const style of layer.styles)enabled[style[0]]=layer.inverse?null:style.slice(1);let current=chalk;for(const styleName of Object.keys(enabled))if(Array.isArray(enabled[styleName])){if(!(styleName in current))throw new Error(`Unknown Chalk style: ${styleName}`);current=enabled[styleName].length>0?current[styleName].apply(current,enabled[styleName]):current[styleName]}return current}module.exports=(chalk,tmp)=>{const styles=[],chunks=[];let chunk=[];if(tmp.replace(TEMPLATE_REGEX,(m,escapeChar,inverse,style,close,chr)=>{if(escapeChar)chunk.push(unescape(escapeChar));else if(style){const str=chunk.join("");chunk=[],chunks.push(0===styles.length?str:buildStyle(chalk,styles)(str)),styles.push({inverse,styles:parseStyle(style)})}else if(close){if(0===styles.length)throw new Error("Found extraneous } in Chalk template literal");chunks.push(buildStyle(chalk,styles)(chunk.join(""))),chunk=[],styles.pop()}else chunk.push(chr)}),chunks.push(chunk.join("")),styles.length>0){const errMsg=`Chalk template literal is missing ${styles.length} closing bracket${1===styles.length?"":"s"} (\`}\`)`;throw new Error(errMsg)}return chunks.join("")}},"../../node_modules/escape-string-regexp/index.js"(module){"use strict";var matchOperatorsRe=/[|\\{}()[\]^$+*?.]/g;module.exports=function(str){if("string"!=typeof str)throw new TypeError("Expected a string");return str.replace(matchOperatorsRe,"\\$&")}},"../../node_modules/js-tokens/index.js"(__unused_webpack_module,exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=/((['"])(?:(?!\2|\\).|\\(?:\r\n|[\s\S]))*(\2)?|`(?:[^`\\$]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{[^}]*\}?)*\}?)*(`)?)|(\/\/.*)|(\/\*(?:[^*]|\*(?!\/))*(\*\/)?)|(\/(?!\*)(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\]\\]).|\\.)+\/(?:(?!\s*(?:\b|[\u0080-\uFFFF$\\'"~({]|[+\-!](?!=)|\.?\d))|[gmiyus]{1,6}\b(?![\u0080-\uFFFF$\\]|\s*(?:[+\-*%&|^<>!=?({]|\/(?![\/*])))))|(0[xX][\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?)|((?!\d)(?:(?!\s)[$\w\u0080-\uFFFF]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+)|(--|\+\+|&&|\|\||=>|\.{3}|(?:[+\-\/%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\](){}])|(\s+)|(^$|[\s\S])/g,exports.matchToToken=function(match){var token={type:"invalid",value:match[0],closed:void 0};return match[1]?(token.type="string",token.closed=!(!match[3]&&!match[4])):match[5]?token.type="comment":match[6]?(token.type="comment",token.closed=!!match[7]):match[8]?token.type="regex":match[9]?token.type="number":match[10]?token.type="name":match[11]?token.type="punctuator":match[12]&&(token.type="whitespace"),token}},"../../node_modules/picocolors/picocolors.browser.js"(module){var x=String,create=function(){return{isColorSupported:!1,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x,blackBright:x,redBright:x,greenBright:x,yellowBright:x,blueBright:x,magentaBright:x,cyanBright:x,whiteBright:x,bgBlackBright:x,bgRedBright:x,bgGreenBright:x,bgYellowBright:x,bgBlueBright:x,bgMagentaBright:x,bgCyanBright:x,bgWhiteBright:x}};module.exports=create(),module.exports.createColors=create},"../../node_modules/supports-color/browser.js"(module){"use strict";module.exports={stdout:!1,stderr:!1}},"../../node_modules/@babel/code-frame/lib/index.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";var process=__webpack_require__("../../node_modules/node-stdlib-browser/cjs/proxy/process.js");exports.gl=codeFrameColumns;var _highlight=__webpack_require__("../../node_modules/@babel/highlight/lib/index.js");let deprecationWarningShown=!1;const NEWLINE=/\r\n|[\n\r\u2028\u2029]/;function codeFrameColumns(rawLines,loc,opts={}){const highlighted=(opts.highlightCode||opts.forceColor)&&(0,_highlight.shouldHighlight)(opts),chalk=(0,_highlight.getChalk)(opts),defs=function getDefs(chalk){return{gutter:chalk.grey,marker:chalk.red.bold,message:chalk.red.bold}}(chalk),maybeHighlight=(chalkFn,string)=>highlighted?chalkFn(string):string,lines=rawLines.split(NEWLINE),{start,end,markerLines}=function getMarkerLines(loc,source,opts){const startLoc=Object.assign({column:0,line:-1},loc.start),endLoc=Object.assign({},startLoc,loc.end),{linesAbove=2,linesBelow=3}=opts||{},startLine=startLoc.line,startColumn=startLoc.column,endLine=endLoc.line,endColumn=endLoc.column;let start=Math.max(startLine-(linesAbove+1),0),end=Math.min(source.length,endLine+linesBelow);-1===startLine&&(start=0),-1===endLine&&(end=source.length);const lineDiff=endLine-startLine,markerLines={};if(lineDiff)for(let i=0;i<=lineDiff;i++){const lineNumber=i+startLine;if(startColumn)if(0===i){const sourceLength=source[lineNumber-1].length;markerLines[lineNumber]=[startColumn,sourceLength-startColumn+1]}else if(i===lineDiff)markerLines[lineNumber]=[0,endColumn];else{const sourceLength=source[lineNumber-i].length;markerLines[lineNumber]=[0,sourceLength]}else markerLines[lineNumber]=!0}else markerLines[startLine]=startColumn===endColumn?!startColumn||[startColumn,0]:[startColumn,endColumn-startColumn];return{start,end,markerLines}}(loc,lines,opts),hasColumns=loc.start&&"number"==typeof loc.start.column,numberMaxWidth=String(end).length;let frame=(highlighted?(0,_highlight.default)(rawLines,opts):rawLines).split(NEWLINE,end).slice(start,end).map((line,index)=>{const number=start+1+index,gutter=` ${` ${number}`.slice(-numberMaxWidth)} |`,hasMarker=markerLines[number],lastMarkerLine=!markerLines[number+1];if(hasMarker){let markerLine="";if(Array.isArray(hasMarker)){const markerSpacing=line.slice(0,Math.max(hasMarker[0]-1,0)).replace(/[^\t]/g," "),numberOfMarkers=hasMarker[1]||1;markerLine=["\n ",maybeHighlight(defs.gutter,gutter.replace(/\d/g," "))," ",markerSpacing,maybeHighlight(defs.marker,"^").repeat(numberOfMarkers)].join(""),lastMarkerLine&&opts.message&&(markerLine+=" "+maybeHighlight(defs.message,opts.message))}return[maybeHighlight(defs.marker,">"),maybeHighlight(defs.gutter,gutter),line.length>0?` ${line}`:"",markerLine].join("")}return` ${maybeHighlight(defs.gutter,gutter)}${line.length>0?` ${line}`:""}`}).join("\n");return opts.message&&!hasColumns&&(frame=`${" ".repeat(numberMaxWidth+1)}${opts.message}\n${frame}`),highlighted?chalk.reset(frame):frame}},"../../node_modules/@babel/helper-validator-identifier/lib/identifier.js"(__unused_webpack_module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isIdentifierChar=isIdentifierChar,exports.isIdentifierName=function isIdentifierName(name){let isFirst=!0;for(let i=0;i<name.length;i++){let cp=name.charCodeAt(i);if(55296==(64512&cp)&&i+1<name.length){const trail=name.charCodeAt(++i);56320==(64512&trail)&&(cp=65536+((1023&cp)<<10)+(1023&trail))}if(isFirst){if(isFirst=!1,!isIdentifierStart(cp))return!1}else if(!isIdentifierChar(cp))return!1}return!isFirst},exports.isIdentifierStart=isIdentifierStart;let nonASCIIidentifierStartChars="ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࡰ-ࢇࢉ-࢏ࢠ-ࣉऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚ౜ౝౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽ೜-ೞೠೡೱೲഄ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜑᜟ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭌᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲊᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〇〡-〩〱-〵〸-〼ぁ-ゖ゛-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆿㇰ-ㇿ㐀-䶿一-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-Ƛ꟱-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭩꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ",nonASCIIidentifierChars="·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-٩ٰۖ-ۜ۟-۪ۤۧۨ-ۭ۰-۹ܑܰ-݊ަ-ް߀-߉߫-߽߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛ࢗ-࢟࣊-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣ०-९ঁ-ঃ়া-ৄেৈো-্ৗৢৣ০-৯৾ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣ૦-૯ૺ-૿ଁ-ଃ଼ା-ୄେୈୋ-୍୕-ୗୢୣ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఀ-ఄ఼ా-ౄె-ైొ-్ౕౖౢౣ౦-౯ಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣ೦-೯ೳഀ-ഃ഻഼ാ-ൄെ-ൈൊ-്ൗൢൣ൦-൯ඁ-ඃ්ා-ුූෘ-ෟ෦-෯ෲෳัิ-ฺ็-๎๐-๙ັິ-ຼ່-໎໐-໙༘༙༠-༩༹༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှ၀-၉ၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟፩-፱ᜒ-᜕ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝០-៩᠋-᠍᠏-᠙ᢩᤠ-ᤫᤰ-᤻᥆-᥏᧐-᧚ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼-᪉᪐-᪙᪰-᪽ᪿ-᫝᫠-᫫ᬀ-ᬄ᬴-᭄᭐-᭙᭫-᭳ᮀ-ᮂᮡ-ᮭ᮰-᮹᯦-᯳ᰤ-᰷᱀-᱉᱐-᱙᳐-᳔᳒-᳨᳭᳴᳷-᳹᷀-᷿‌‍‿⁀⁔⃐-⃥⃜⃡-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯・꘠-꘩꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧ꠬ꢀꢁꢴ-ꣅ꣐-꣙꣠-꣱ꣿ-꤉ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀꧐-꧙ꧥ꧰-꧹ꨩ-ꨶꩃꩌꩍ꩐-꩙ꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭꯰-꯹ﬞ︀-️︠-︯︳︴﹍-﹏0-9_・";const nonASCIIidentifierStart=new RegExp("["+nonASCIIidentifierStartChars+"]"),nonASCIIidentifier=new RegExp("["+nonASCIIidentifierStartChars+nonASCIIidentifierChars+"]");nonASCIIidentifierStartChars=nonASCIIidentifierChars=null;const astralIdentifierStartCodes=[0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,4,51,13,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,7,25,39,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,39,27,10,22,251,41,7,1,17,5,57,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,20,1,64,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,31,9,2,0,3,0,2,37,2,0,26,0,2,0,45,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,200,32,32,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,24,43,261,18,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,26,3994,6,582,6842,29,1763,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,433,44,212,63,33,24,3,24,45,74,6,0,67,12,65,1,2,0,15,4,10,7381,42,31,98,114,8702,3,2,6,2,1,2,290,16,0,30,2,3,0,15,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,229,29,3,0,208,30,2,2,2,1,2,6,3,4,10,1,225,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4381,3,5773,3,7472,16,621,2467,541,1507,4938,6,8489],astralIdentifierCodes=[509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,7,9,32,4,318,1,78,5,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,68,8,2,0,3,0,2,3,2,4,2,0,15,1,83,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,7,19,58,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,199,7,137,9,54,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,55,9,266,3,10,1,2,0,49,6,4,4,14,10,5350,0,7,14,11465,27,2343,9,87,9,39,4,60,6,26,9,535,9,470,0,2,54,8,3,82,0,12,1,19628,1,4178,9,519,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,101,0,161,6,10,9,357,0,62,13,499,13,245,1,2,9,233,0,3,0,8,1,6,0,475,6,110,6,6,9,4759,9,787719,239];function isInAstralSet(code,set){let pos=65536;for(let i=0,length=set.length;i<length;i+=2){if(pos+=set[i],pos>code)return!1;if(pos+=set[i+1],pos>=code)return!0}return!1}function isIdentifierStart(code){return code<65?36===code:code<=90||(code<97?95===code:code<=122||(code<=65535?code>=170&&nonASCIIidentifierStart.test(String.fromCharCode(code)):isInAstralSet(code,astralIdentifierStartCodes)))}function isIdentifierChar(code){return code<48?36===code:code<58||!(code<65)&&(code<=90||(code<97?95===code:code<=122||(code<=65535?code>=170&&nonASCIIidentifier.test(String.fromCharCode(code)):isInAstralSet(code,astralIdentifierStartCodes)||isInAstralSet(code,astralIdentifierCodes))))}},"../../node_modules/@babel/helper-validator-identifier/lib/index.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"isIdentifierChar",{enumerable:!0,get:function(){return _identifier.isIdentifierChar}}),Object.defineProperty(exports,"isIdentifierName",{enumerable:!0,get:function(){return _identifier.isIdentifierName}}),Object.defineProperty(exports,"isIdentifierStart",{enumerable:!0,get:function(){return _identifier.isIdentifierStart}}),Object.defineProperty(exports,"isKeyword",{enumerable:!0,get:function(){return _keyword.isKeyword}}),Object.defineProperty(exports,"isReservedWord",{enumerable:!0,get:function(){return _keyword.isReservedWord}}),Object.defineProperty(exports,"isStrictBindOnlyReservedWord",{enumerable:!0,get:function(){return _keyword.isStrictBindOnlyReservedWord}}),Object.defineProperty(exports,"isStrictBindReservedWord",{enumerable:!0,get:function(){return _keyword.isStrictBindReservedWord}}),Object.defineProperty(exports,"isStrictReservedWord",{enumerable:!0,get:function(){return _keyword.isStrictReservedWord}});var _identifier=__webpack_require__("../../node_modules/@babel/helper-validator-identifier/lib/identifier.js"),_keyword=__webpack_require__("../../node_modules/@babel/helper-validator-identifier/lib/keyword.js")},"../../node_modules/@babel/helper-validator-identifier/lib/keyword.js"(__unused_webpack_module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isKeyword=function isKeyword(word){return keywords.has(word)},exports.isReservedWord=isReservedWord,exports.isStrictBindOnlyReservedWord=isStrictBindOnlyReservedWord,exports.isStrictBindReservedWord=function isStrictBindReservedWord(word,inModule){return isStrictReservedWord(word,inModule)||isStrictBindOnlyReservedWord(word)},exports.isStrictReservedWord=isStrictReservedWord;const reservedWords_strict=["implements","interface","let","package","private","protected","public","static","yield"],reservedWords_strictBind=["eval","arguments"],keywords=new Set(["break","case","catch","continue","debugger","default","do","else","finally","for","function","if","return","switch","throw","try","var","const","while","with","new","this","super","class","extends","export","import","null","true","false","in","instanceof","typeof","void","delete"]),reservedWordsStrictSet=new Set(reservedWords_strict),reservedWordsStrictBindSet=new Set(reservedWords_strictBind);function isReservedWord(word,inModule){return inModule&&"await"===word||"enum"===word}function isStrictReservedWord(word,inModule){return isReservedWord(word,inModule)||reservedWordsStrictSet.has(word)}function isStrictBindOnlyReservedWord(word){return reservedWordsStrictBindSet.has(word)}},"../../node_modules/@babel/highlight/lib/index.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";var process=__webpack_require__("../../node_modules/node-stdlib-browser/cjs/proxy/process.js");Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function highlight(code,options={}){if(""!==code&&shouldHighlight(options)){const defs=function getDefs(colors){return{keyword:colors.cyan,capitalized:colors.yellow,jsxIdentifier:colors.yellow,punctuator:colors.yellow,number:colors.magenta,string:colors.green,regex:colors.magenta,comment:colors.gray,invalid:compose(compose(colors.white,colors.bgRed),colors.bold)}}(function getColors(forceColor){if(forceColor){return null!=pcWithForcedColor||(pcWithForcedColor=(0,_picocolors.createColors)(!0)),pcWithForcedColor}return colors}(options.forceColor));return function highlightTokens(defs,text){let highlighted="";for(const{type,value}of tokenize(text)){const colorize=defs[type];highlighted+=colorize?value.split(NEWLINE).map(str=>colorize(str)).join("\n"):value}return highlighted}(defs,code)}return code},exports.shouldHighlight=shouldHighlight;var _jsTokens=__webpack_require__("../../node_modules/js-tokens/index.js"),_helperValidatorIdentifier=__webpack_require__("../../node_modules/@babel/helper-validator-identifier/lib/index.js"),_picocolors=function _interopRequireWildcard(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=_getRequireWildcardCache(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&{}.hasOwnProperty.call(e,u)){var i=a?Object.getOwnPropertyDescriptor(e,u):null;i&&(i.get||i.set)?Object.defineProperty(n,u,i):n[u]=e[u]}return n.default=e,t&&t.set(e,n),n}(__webpack_require__("../../node_modules/picocolors/picocolors.browser.js"),!0);function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,t=new WeakMap;return(_getRequireWildcardCache=function(e){return e?t:r})(e)}const colors="object"!=typeof process||"0"!==process.env.FORCE_COLOR&&"false"!==process.env.FORCE_COLOR?_picocolors.default:(0,_picocolors.createColors)(!1),compose=(f,g)=>v=>f(g(v)),sometimesKeywords=new Set(["as","async","from","get","of","set"]);const NEWLINE=/\r\n|[\n\r\u2028\u2029]/,BRACKET=/^[()[\]{}]$/;let tokenize,pcWithForcedColor;{const JSX_TAG=/^[a-z][\w-]*$/i,getTokenType=function(token,offset,text){if("name"===token.type){if((0,_helperValidatorIdentifier.isKeyword)(token.value)||(0,_helperValidatorIdentifier.isStrictReservedWord)(token.value,!0)||sometimesKeywords.has(token.value))return"keyword";if(JSX_TAG.test(token.value)&&("<"===text[offset-1]||"</"===text.slice(offset-2,offset)))return"jsxIdentifier";if(token.value[0]!==token.value[0].toLowerCase())return"capitalized"}return"punctuator"===token.type&&BRACKET.test(token.value)?"bracket":"invalid"!==token.type||"@"!==token.value&&"#"!==token.value?token.type:"punctuator"};tokenize=function*(text){let match;for(;match=_jsTokens.default.exec(text);){const token=_jsTokens.matchToToken(match);yield{type:getTokenType(token,match.index,text),value:token.value}}}}function shouldHighlight(options){return colors.isColorSupported||options.forceColor}{let chalk,chalkWithForcedColor;exports.getChalk=({forceColor})=>(null!=chalk||(chalk=__webpack_require__("../../node_modules/@babel/highlight/node_modules/chalk/index.js")),forceColor?(null!=chalkWithForcedColor||(chalkWithForcedColor=new chalk.constructor({enabled:!0,level:1})),chalkWithForcedColor):chalk)}},"../../node_modules/node-stdlib-browser/cjs/proxy/process.js"(module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var cachedSetTimeout,cachedClearTimeout,browser$1={exports:{}},process=browser$1.exports={};function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}function runTimeout(fun){if(cachedSetTimeout===setTimeout)return setTimeout(fun,0);if((cachedSetTimeout===defaultSetTimout||!cachedSetTimeout)&&setTimeout)return cachedSetTimeout=setTimeout,setTimeout(fun,0);try{return cachedSetTimeout(fun,0)}catch(e){try{return cachedSetTimeout.call(null,fun,0)}catch(e){return cachedSetTimeout.call(this,fun,0)}}}!function(){try{cachedSetTimeout="function"==typeof setTimeout?setTimeout:defaultSetTimout}catch(e){cachedSetTimeout=defaultSetTimout}try{cachedClearTimeout="function"==typeof clearTimeout?clearTimeout:defaultClearTimeout}catch(e){cachedClearTimeout=defaultClearTimeout}}();var currentQueue,queue=[],draining=!1,queueIndex=-1;function cleanUpNextTick(){draining&&currentQueue&&(draining=!1,currentQueue.length?queue=currentQueue.concat(queue):queueIndex=-1,queue.length&&drainQueue())}function drainQueue(){if(!draining){var timeout=runTimeout(cleanUpNextTick);draining=!0;for(var len=queue.length;len;){for(currentQueue=queue,queue=[];++queueIndex<len;)currentQueue&&currentQueue[queueIndex].run();queueIndex=-1,len=queue.length}currentQueue=null,draining=!1,function runClearTimeout(marker){if(cachedClearTimeout===clearTimeout)return clearTimeout(marker);if((cachedClearTimeout===defaultClearTimeout||!cachedClearTimeout)&&clearTimeout)return cachedClearTimeout=clearTimeout,clearTimeout(marker);try{return cachedClearTimeout(marker)}catch(e){try{return cachedClearTimeout.call(null,marker)}catch(e){return cachedClearTimeout.call(this,marker)}}}(timeout)}}function Item(fun,array){this.fun=fun,this.array=array}function noop$1(){}function noop(){}process.nextTick=function(fun){var args=new Array(arguments.length-1);if(arguments.length>1)for(var i=1;i<arguments.length;i++)args[i-1]=arguments[i];queue.push(new Item(fun,args)),1!==queue.length||draining||runTimeout(drainQueue)},Item.prototype.run=function(){this.fun.apply(null,this.array)},process.title="browser",process.browser=!0,process.env={},process.argv=[],process.version="",process.versions={},process.on=noop$1,process.addListener=noop$1,process.once=noop$1,process.off=noop$1,process.removeListener=noop$1,process.removeAllListeners=noop$1,process.emit=noop$1,process.prependListener=noop$1,process.prependOnceListener=noop$1,process.listeners=function(name){return[]},process.binding=function(name){throw new Error("process.binding is not supported")},process.cwd=function(){return"/"},process.chdir=function(dir){throw new Error("process.chdir is not supported")},process.umask=function(){return 0};var browser=browser$1.exports.browser,emitWarning=noop,binding=browser$1.exports.binding,exit=noop,features={},kill=noop,dlopen=noop,uptime=noop,memoryUsage=noop,uvCounters=noop,execArgv=[],api={nextTick:browser$1.exports.nextTick,title:browser$1.exports.title,browser,env:browser$1.exports.env,argv:browser$1.exports.argv,version:browser$1.exports.version,versions:browser$1.exports.versions,on:browser$1.exports.on,addListener:browser$1.exports.addListener,once:browser$1.exports.once,off:browser$1.exports.off,removeListener:browser$1.exports.removeListener,removeAllListeners:browser$1.exports.removeAllListeners,emit:browser$1.exports.emit,emitWarning,prependListener:browser$1.exports.prependListener,prependOnceListener:browser$1.exports.prependOnceListener,listeners:browser$1.exports.listeners,binding,cwd:browser$1.exports.cwd,chdir:browser$1.exports.chdir,umask:browser$1.exports.umask,exit,pid:1,features,kill,dlopen,uptime,memoryUsage,uvCounters,platform:"browser",arch:"browser",execPath:"browser",execArgv};exports.addListener=browser$1.exports.addListener,exports.arch="browser",exports.argv=browser$1.exports.argv,exports.binding=binding,exports.browser=browser,exports.chdir=browser$1.exports.chdir,exports.cwd=browser$1.exports.cwd,exports.default=api,exports.dlopen=dlopen,exports.emit=browser$1.exports.emit,exports.emitWarning=emitWarning,exports.env=browser$1.exports.env,exports.execArgv=execArgv,exports.execPath="browser",exports.exit=exit,exports.features=features,exports.kill=kill,exports.listeners=browser$1.exports.listeners,exports.memoryUsage=memoryUsage,exports.nextTick=browser$1.exports.nextTick,exports.off=browser$1.exports.off,exports.on=browser$1.exports.on,exports.once=browser$1.exports.once,exports.pid=1,exports.platform="browser",exports.prependListener=browser$1.exports.prependListener,exports.prependOnceListener=browser$1.exports.prependOnceListener,exports.removeAllListeners=browser$1.exports.removeAllListeners,exports.removeListener=browser$1.exports.removeListener,exports.title=browser$1.exports.title,exports.umask=browser$1.exports.umask,exports.uptime=uptime,exports.uvCounters=uvCounters,exports.version=browser$1.exports.version,exports.versions=browser$1.exports.versions,exports=module.exports=api}},__webpack_module_cache__={};function __webpack_require__(moduleId){var cachedModule=__webpack_module_cache__[moduleId];if(void 0!==cachedModule)return cachedModule.exports;var module=__webpack_module_cache__[moduleId]={id:moduleId,loaded:!1,exports:{}};return __webpack_modules__[moduleId](module,module.exports,__webpack_require__),module.loaded=!0,module.exports}__webpack_require__.n=module=>{var getter=module&&module.__esModule?()=>module.default:()=>module;return __webpack_require__.d(getter,{a:getter}),getter},__webpack_require__.d=(exports,definition)=>{for(var key in definition)__webpack_require__.o(definition,key)&&!__webpack_require__.o(exports,key)&&Object.defineProperty(exports,key,{enumerable:!0,get:definition[key]})},__webpack_require__.o=(obj,prop)=>Object.prototype.hasOwnProperty.call(obj,prop),__webpack_require__.nmd=module=>(module.paths=[],module.children||(module.children=[]),module);var __webpack_exports__={};return(()=>{"use strict";var WorkerMessageType;!function(WorkerMessageType){WorkerMessageType[WorkerMessageType.InitConnection=1464664064]="InitConnection",WorkerMessageType[WorkerMessageType.RequestFork=1464664065]="RequestFork"}(WorkerMessageType||(WorkerMessageType={}));WorkerMessageType.InitConnection,WorkerMessageType.RequestFork;var SWMessageType;!function(SWMessageType){SWMessageType[SWMessageType.HandShake=1398210560]="HandShake",SWMessageType[SWMessageType.HeartbeatPing=1398210561]="HeartbeatPing",SWMessageType[SWMessageType.HeartbeatPong=1398210562]="HeartbeatPong"}(SWMessageType||(SWMessageType={}));SWMessageType.HandShake,SWMessageType.HeartbeatPing,SWMessageType.HeartbeatPong;var HMR_ACTIONS_SENT_TO_BROWSER;!function(HMR_ACTIONS_SENT_TO_BROWSER){HMR_ACTIONS_SENT_TO_BROWSER.RELOAD="reload",HMR_ACTIONS_SENT_TO_BROWSER.CLIENT_CHANGES="clientChanges",HMR_ACTIONS_SENT_TO_BROWSER.SERVER_ONLY_CHANGES="serverOnlyChanges",HMR_ACTIONS_SENT_TO_BROWSER.SYNC="sync",HMR_ACTIONS_SENT_TO_BROWSER.BUILT="built",HMR_ACTIONS_SENT_TO_BROWSER.BUILDING="building",HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE="turbopack-message",HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED="turbopack-connected"}(HMR_ACTIONS_SENT_TO_BROWSER||(HMR_ACTIONS_SENT_TO_BROWSER={}));var lib=__webpack_require__("../../node_modules/@babel/code-frame/lib/index.js"),picocolors_browser=__webpack_require__("../../node_modules/picocolors/picocolors.browser.js"),picocolors_browser_default=__webpack_require__.n(picocolors_browser);function decodeHex(hexStr){if(""===hexStr.trim())throw new Error("can't decode empty hex");const num=parseInt(hexStr,16);if(isNaN(num))throw new Error(`invalid hex: \`${hexStr}\``);return String.fromCodePoint(num)}const DECODE_REGEX=/^__TURBOPACK__([a-zA-Z0-9_$]+)__$/;const MAGIC_IDENTIFIER_REGEX=/__TURBOPACK__[a-zA-Z0-9_$]+__/g,{bold,green,magenta,red}=picocolors_browser_default();function renderStyledStringToErrorAnsi(string){function decodeMagicIdentifiers(str){return str.replaceAll(MAGIC_IDENTIFIER_REGEX,ident=>{try{return magenta(`{${function decodeMagicIdentifier(identifier){const matches=identifier.match(DECODE_REGEX);if(!matches)return identifier;const inner=matches[1];let output="",mode=0,buffer="";for(let i=0;i<inner.length;i++){const char=inner[i];if(0===mode)"_"===char?mode=1:"$"===char?mode=2:output+=char;else if(1===mode)"_"===char?(output+=" ",mode=0):"$"===char?(output+="_",mode=2):(output+=char,mode=0);else if(2===mode)if(2===buffer.length&&(output+=decodeHex(buffer),buffer=""),"_"===char){if(""!==buffer)throw new Error(`invalid hex: \`${buffer}\``);mode=3}else if("$"===char){if(""!==buffer)throw new Error(`invalid hex: \`${buffer}\``);mode=0}else buffer+=char;else if(3===mode){if("_"===char)throw new Error(`invalid hex: \`${buffer+char}\``);"$"===char?(output+=decodeHex(buffer),buffer="",mode=0):buffer+=char}}return output}(ident)}}`)}catch(e){return magenta(`{${ident} (decoding failed: ${e})}`)}})}switch(string.type){case"text":return decodeMagicIdentifiers(string.value);case"strong":return bold(red(decodeMagicIdentifiers(string.value)));case"code":return green(decodeMagicIdentifiers(string.value));case"line":return string.value.map(renderStyledStringToErrorAnsi).join("");case"stack":return string.value.map(renderStyledStringToErrorAnsi).join("\n");default:throw new Error("Unknown StyledString type",string)}}function formatIssue(issue,forceColor=!0){const{filePath,title,description,source}=issue;let{documentationLink}=issue,formattedTitle=renderStyledStringToErrorAnsi(title).replace(/\n/g,"\n "),formattedFilePath=filePath.replace("[project]/","./").replaceAll("/./","/").replace("\\\\?\\",""),message="";if(source&&source.range){const{start}=source.range;message=`${formattedFilePath}:${start.line+1}:${start.column+1}\n${formattedTitle}`}else message=formattedFilePath?`${formattedFilePath}\n${formattedTitle}`:formattedTitle;if(message+="\n",(null==source?void 0:source.range)&&source.source.content){const{start,end}=source.range;message+=(0,lib.gl)(source.source.content,{start:{line:start.line+1,column:start.column+1},end:{line:end.line+1,column:end.column+1}},{forceColor}).trim()+"\n\n"}return description&&(message+=renderStyledStringToErrorAnsi(description)+"\n\n"),documentationLink&&(message+=documentationLink+"\n\n"),message}function handleIssues(issues,throwErrors=!0,forceColor=!0){const topLevelErrors=new Set,topLevelWarnings=new Set;for(const issue of issues)"error"===issue.severity||"fatal"===issue.severity?topLevelErrors.add(formatIssue(issue,forceColor)):isRelevantWarning(issue)&&topLevelWarnings.add(formatIssue(issue,forceColor));if(0!==topLevelWarnings.size){const warnMsg=`Utoopack build encountered ${topLevelWarnings.size} warnings:\n${[...topLevelWarnings].join("\n")}`;console.warn(warnMsg)}if(0!==topLevelErrors.size){const errMsg=`Utoopack build failed with ${topLevelErrors.size} errors:\n${[...topLevelErrors].join("\n")}`;if(throwErrors)throw new Error(errMsg);console.error(errMsg)}}function isRelevantWarning(issue){return"warning"===issue.severity&&!function isNodeModulesIssue(issue){if("warning"===issue.severity&&"config"===issue.stage&&renderStyledStringToErrorAnsi(issue.title).includes("can't be external"))return!1;return"warning"===issue.severity&&(null!==issue.filePath.match(/^(?:.*[\\/])?node_modules(?:[\\/].*)?$/)||issue.filePath.includes("@utoo/pack"))}(issue)}Error;function compatHtml(maybeWebpackPluginInstance){if(maybeWebpackPluginInstance)return maybeWebpackPluginInstance.userOptions||maybeWebpackPluginInstance.options}function compatMiniCssExtract(maybeWebpackPluginInstance){var _a;return null===(_a=null==maybeWebpackPluginInstance?void 0:maybeWebpackPluginInstance.options)||void 0===_a?void 0:_a.filename}function compatCopy(maybeWebpackPluginInstance){const patterns=null==maybeWebpackPluginInstance?void 0:maybeWebpackPluginInstance.patterns;if(Array.isArray(patterns))return patterns.map(pattern=>"string"==typeof pattern?pattern:{from:pattern.from,to:pattern.to})}function compatDefine(maybeWebpackPluginInstance){const definitions=null==maybeWebpackPluginInstance?void 0:maybeWebpackPluginInstance.definitions;if(!definitions||"object"!=typeof definitions)return definitions;const processedDefinitions={};for(const[key,value]of Object.entries(definitions))processedDefinitions[key]="object"==typeof value&&null!==value?JSON.stringify(value):value;return processedDefinitions}function compatProvider(maybeWebpackPluginInstance){const definitions=null==maybeWebpackPluginInstance?void 0:maybeWebpackPluginInstance.definitions;if(!definitions||"object"!=typeof definitions)return;const provider={};for(const[key,value]of Object.entries(definitions))"string"==typeof value?provider[key]=value:Array.isArray(value)&&(1===value.length?provider[key]=value[0]:value.length>=2&&(provider[key]=[value[0],value[1]]));return Object.keys(provider).length>0?provider:void 0}compatHtml.pluginName="HtmlWebpackPlugin",compatMiniCssExtract.pluginName="MiniCssExtractPlugin",compatCopy.pluginName="CopyPlugin",compatDefine.pluginName="DefinePlugin",compatProvider.pluginName="ProvidePlugin";const proxyMarker=Symbol("Comlink.proxy"),createEndpoint=Symbol("Comlink.endpoint"),releaseProxy=Symbol("Comlink.releaseProxy"),finalizer=Symbol("Comlink.finalizer"),throwMarker=Symbol("Comlink.thrown"),isObject=val=>"object"==typeof val&&null!==val||"function"==typeof val,transferHandlers=new Map([["proxy",{canHandle:val=>isObject(val)&&val[proxyMarker],serialize(obj){const{port1,port2}=new MessageChannel;return expose(obj,port1),[port2,[port2]]},deserialize:port=>(port.start(),wrap(port))}],["throw",{canHandle:value=>isObject(value)&&throwMarker in value,serialize({value}){let serialized;return serialized=value instanceof Error?{isError:!0,value:{message:value.message,name:value.name,stack:value.stack}}:{isError:!1,value},[serialized,[]]},deserialize(serialized){if(serialized.isError)throw Object.assign(new Error(serialized.value.message),serialized.value);throw serialized.value}}]]);function expose(obj,ep=globalThis,allowedOrigins=["*"]){ep.addEventListener("message",function callback(ev){if(!ev||!ev.data)return;if(!function isAllowedOrigin(allowedOrigins,origin){for(const allowedOrigin of allowedOrigins){if(origin===allowedOrigin||"*"===allowedOrigin)return!0;if(allowedOrigin instanceof RegExp&&allowedOrigin.test(origin))return!0}return!1}(allowedOrigins,ev.origin))return void console.warn(`Invalid origin '${ev.origin}' for comlink proxy`);const{id,type,path}=Object.assign({path:[]},ev.data),argumentList=(ev.data.argumentList||[]).map(fromWireValue);let returnValue;try{const parent=path.slice(0,-1).reduce((obj,prop)=>obj[prop],obj),rawValue=path.reduce((obj,prop)=>obj[prop],obj);switch(type){case"GET":returnValue=rawValue;break;case"SET":parent[path.slice(-1)[0]]=fromWireValue(ev.data.value),returnValue=!0;break;case"APPLY":returnValue=rawValue.apply(parent,argumentList);break;case"CONSTRUCT":returnValue=proxy(new rawValue(...argumentList));break;case"ENDPOINT":{const{port1,port2}=new MessageChannel;expose(obj,port2),returnValue=function transfer(obj,transfers){return transferCache.set(obj,transfers),obj}(port1,[port1])}break;case"RELEASE":returnValue=void 0;break;default:return}}catch(value){returnValue={value,[throwMarker]:0}}Promise.resolve(returnValue).catch(value=>({value,[throwMarker]:0})).then(returnValue=>{const[wireValue,transferables]=toWireValue(returnValue);ep.postMessage(Object.assign(Object.assign({},wireValue),{id}),transferables),"RELEASE"===type&&(ep.removeEventListener("message",callback),closeEndPoint(ep),finalizer in obj&&"function"==typeof obj[finalizer]&&obj[finalizer]())}).catch(error=>{const[wireValue,transferables]=toWireValue({value:new TypeError("Unserializable return value"),[throwMarker]:0});ep.postMessage(Object.assign(Object.assign({},wireValue),{id}),transferables)})}),ep.start&&ep.start()}function closeEndPoint(endpoint){(function isMessagePort(endpoint){return"MessagePort"===endpoint.constructor.name})(endpoint)&&endpoint.close()}function wrap(ep,target){const pendingListeners=new Map;return ep.addEventListener("message",function handleMessage(ev){const{data}=ev;if(!data||!data.id)return;const resolver=pendingListeners.get(data.id);if(resolver)try{resolver(data)}finally{pendingListeners.delete(data.id)}}),createProxy(ep,pendingListeners,[],target)}function throwIfProxyReleased(isReleased){if(isReleased)throw new Error("Proxy has been released and is not useable")}function releaseEndpoint(ep){return requestResponseMessage(ep,new Map,{type:"RELEASE"}).then(()=>{closeEndPoint(ep)})}const proxyCounter=new WeakMap,proxyFinalizers="FinalizationRegistry"in globalThis&&new FinalizationRegistry(ep=>{const newCount=(proxyCounter.get(ep)||0)-1;proxyCounter.set(ep,newCount),0===newCount&&releaseEndpoint(ep)});function createProxy(ep,pendingListeners,path=[],target=function(){}){let isProxyReleased=!1;const proxy=new Proxy(target,{get(_target,prop){if(throwIfProxyReleased(isProxyReleased),prop===releaseProxy)return()=>{!function unregisterProxy(proxy){proxyFinalizers&&proxyFinalizers.unregister(proxy)}(proxy),releaseEndpoint(ep),pendingListeners.clear(),isProxyReleased=!0};if("then"===prop){if(0===path.length)return{then:()=>proxy};const r=requestResponseMessage(ep,pendingListeners,{type:"GET",path:path.map(p=>p.toString())}).then(fromWireValue);return r.then.bind(r)}return createProxy(ep,pendingListeners,[...path,prop])},set(_target,prop,rawValue){throwIfProxyReleased(isProxyReleased);const[value,transferables]=toWireValue(rawValue);return requestResponseMessage(ep,pendingListeners,{type:"SET",path:[...path,prop].map(p=>p.toString()),value},transferables).then(fromWireValue)},apply(_target,_thisArg,rawArgumentList){throwIfProxyReleased(isProxyReleased);const last=path[path.length-1];if(last===createEndpoint)return requestResponseMessage(ep,pendingListeners,{type:"ENDPOINT"}).then(fromWireValue);if("bind"===last)return createProxy(ep,pendingListeners,path.slice(0,-1));const[argumentList,transferables]=processArguments(rawArgumentList);return requestResponseMessage(ep,pendingListeners,{type:"APPLY",path:path.map(p=>p.toString()),argumentList},transferables).then(fromWireValue)},construct(_target,rawArgumentList){throwIfProxyReleased(isProxyReleased);const[argumentList,transferables]=processArguments(rawArgumentList);return requestResponseMessage(ep,pendingListeners,{type:"CONSTRUCT",path:path.map(p=>p.toString()),argumentList},transferables).then(fromWireValue)}});return function registerProxy(proxy,ep){const newCount=(proxyCounter.get(ep)||0)+1;proxyCounter.set(ep,newCount),proxyFinalizers&&proxyFinalizers.register(proxy,ep,proxy)}(proxy,ep),proxy}function processArguments(argumentList){const processed=argumentList.map(toWireValue);return[processed.map(v=>v[0]),(arr=processed.map(v=>v[1]),Array.prototype.concat.apply([],arr))];var arr}const transferCache=new WeakMap;function proxy(obj){return Object.assign(obj,{[proxyMarker]:!0})}function toWireValue(value){for(const[name,handler]of transferHandlers)if(handler.canHandle(value)){const[serializedValue,transferables]=handler.serialize(value);return[{type:"HANDLER",name,value:serializedValue},transferables]}return[{type:"RAW",value},transferCache.get(value)||[]]}function fromWireValue(value){switch(value.type){case"HANDLER":return transferHandlers.get(value.name).deserialize(value.value);case"RAW":return value.value}}function requestResponseMessage(ep,pendingListeners,msg,transfers){return new Promise(resolve=>{const id=function generateUUID(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}();pendingListeners.set(id,resolve),ep.start&&ep.start(),ep.postMessage(Object.assign({id},msg),transfers)})}let clientIdCounter=0;class HmrServer{constructor(options={}){var _a;this.clients=new Set,this.subscriptions=new Map,this.hmrHash=0,this.options=options,this.sessionId=null!==(_a=options.sessionId)&&void 0!==_a?_a:Math.floor(Number.MAX_SAFE_INTEGER*Math.random())}createConnection(){const{port1,port2}=new MessageChannel,client={id:"hmr-client-"+ ++clientIdCounter,port:port1,send:message=>{port1.postMessage(JSON.stringify(message))},close:()=>{this.removeClient(client),port1.close()}};return port1.onmessage=event=>{this.handleClientMessage(client,event.data)},port1.onmessageerror=()=>{this.removeClient(client)},this.clients.add(client),client.send({action:HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED,data:{sessionId:this.sessionId}}),client.send({action:HMR_ACTIONS_SENT_TO_BROWSER.SYNC,hash:String(this.hmrHash),errors:[],warnings:[]}),{clientPort:port2,client}}connectIframe(iframe,origin="*"){if(!iframe.contentWindow)return console.warn("[HmrServer] Cannot connect: iframe has no contentWindow"),null;const{clientPort,client}=this.createConnection();return iframe.contentWindow.postMessage({type:"hmr-connect",sessionId:this.sessionId},origin,[clientPort]),client}handleClientMessage(client,data){try{const message="string"==typeof data?JSON.parse(data):data;if("type"in message)switch(message.type){case"turbopack-subscribe":this.subscribe(client,message.path);break;case"turbopack-unsubscribe":this.unsubscribe(client,message.path)}"event"in message&&this.handleClientEvent(client,message)}catch(e){console.error("[HmrServer] Failed to parse client message:",e)}}handleClientEvent(_client,message){switch(message.event){case"client-error":case"client-warning":case"client-success":break;case"client-full-reload":message.hadRuntimeError&&console.warn("[HmrServer] Fast Refresh had to perform a full reload due to a runtime error.")}}subscribe(client,path){var _a,_b;let clients=this.subscriptions.get(path);clients||(clients=new Set,this.subscriptions.set(path,clients)),clients.add(client),null===(_b=(_a=this.options).onSubscribe)||void 0===_b||_b.call(_a,path,client)}unsubscribe(client,path){var _a,_b;const clients=this.subscriptions.get(path);clients&&(clients.delete(client),0===clients.size&&this.subscriptions.delete(path)),null===(_b=(_a=this.options).onUnsubscribe)||void 0===_b||_b.call(_a,path,client)}removeClient(client){var _a,_b;this.clients.delete(client);for(const[path,clients]of this.subscriptions)clients.has(client)&&(clients.delete(client),null===(_b=(_a=this.options).onUnsubscribe)||void 0===_b||_b.call(_a,path,client)),0===clients.size&&this.subscriptions.delete(path)}sendUpdate(path,update){const clients=this.subscriptions.get(path);if(!clients)return;const message={action:HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE,data:update};for(const client of clients)client.send(message)}broadcast(message){for(const client of this.clients)client.send(message)}sendBuilding(){this.broadcast({action:HMR_ACTIONS_SENT_TO_BROWSER.BUILDING})}sendBuilt(errors=[],warnings=[]){this.hmrHash++,this.broadcast({action:HMR_ACTIONS_SENT_TO_BROWSER.BUILT,hash:String(this.hmrHash),errors,warnings})}sendReload(reason){this.broadcast({action:HMR_ACTIONS_SENT_TO_BROWSER.RELOAD,data:reason})}getSubscribedPaths(){return Array.from(this.subscriptions.keys())}get clientCount(){return this.clients.size}close(){for(const client of this.clients)client.close();this.clients.clear(),this.subscriptions.clear()}}async function installServiceWorker(url,scope,targetDirToCwd){const swUrl=new URL(url,window.location.href);swUrl.searchParams.set("scope",scope),targetDirToCwd&&swUrl.searchParams.set("targetDirToCwd",targetDirToCwd);const registration=await navigator.serviceWorker.register(swUrl.toString(),{scope:"/"});return new Promise(resolve=>{function sendMessage(sw){sw.postMessage({[SWMessageType.HandShake]:!0}),function startHeartbeat(sw){let lastHeartbeat=Date.now();navigator.serviceWorker.addEventListener("message",event=>{event.data&&!0===event.data[SWMessageType.HeartbeatPong]&&(lastHeartbeat=Date.now())}),setInterval(()=>{sw.postMessage({[SWMessageType.HeartbeatPing]:!0}),Date.now()-lastHeartbeat>2e4&&console.error("Service Worker Heartbeat Timeout")},1e4)}(sw),resolve()}function listenForActivation(sw){sw.addEventListener("statechange",()=>{"activated"===sw.state&&sendMessage(sw)})}!function checkSWState(registration){registration.active?sendMessage(registration.active):registration.installing&&listenForActivation(registration.installing),registration.addEventListener("updatefound",()=>{registration.installing&&listenForActivation(registration.installing)})}(registration)})}class Stats{constructor(raw){this.raw=raw,this.dev=0,this.ino=0,this.nlink=1,this.uid=0,this.gid=0,this.rdev=0,this.blksize=4096,this.blocks=0,this.size=raw.size,this.mode="directory"===raw.type?16877:33188,this.atimeMs=raw.atimeMs||0,this.mtimeMs=raw.mtimeMs||0,this.ctimeMs=raw.ctimeMs||0,this.birthtimeMs=raw.birthtimeMs||0,this.atime=new Date(this.atimeMs),this.mtime=new Date(this.mtimeMs),this.ctime=new Date(this.ctimeMs),this.birthtime=new Date(this.birthtimeMs)}isDirectory(){return"directory"===this.raw.type}isFile(){return"file"===this.raw.type}isSymbolicLink(){return!1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isFIFO(){return!1}isSocket(){return!1}}class Dirent{constructor(rawDirent){this.rawDirent=rawDirent,this.name=this.rawDirent.name}isDirectory(){return"directory"===this.rawDirent.type}isFile(){return"file"===this.rawDirent.type}}class ForkedProject{constructor(port){var _a;null!==(_a=this.endpoint)&&void 0!==_a||(this.endpoint=wrap(port))}async deps(options){var _a,_b;return await this.endpoint.deps({registry:null!==(_a=null==options?void 0:options.registry)&&void 0!==_a?_a:void 0,concurrency:null!==(_b=null==options?void 0:options.concurrency)&&void 0!==_b?_b:void 0})}async install(packageLock,options){return await this.endpoint.install(packageLock,{maxConcurrentDownloads:null==options?void 0:options.maxConcurrentDownloads})}async build(options){return await this.endpoint.build(options)}dev(options){this.endpoint.dev(options)}async hmrSubscribe(identifier,callback){await this.endpoint.hmrSubscribe(identifier,proxy(callback))}updateInfoSubscribe(aggregationMs,callback){this.endpoint.updateInfoSubscribe(aggregationMs,proxy(callback))}async readFile(path,encoding){return await this.endpoint.readFile(path,encoding)}async writeFile(path,content,encoding){return await this.endpoint.writeFile(path,content,encoding)}async copyFile(src,dst){return await this.endpoint.copyFile(src,dst)}async readdir(path,options){return await this.endpoint.readdir(path,options)}async mkdir(path,options){return await this.endpoint.mkdir(path,options)}async rm(path,options){return await this.endpoint.rm(path,options)}async rmdir(path,options){return await this.endpoint.rmdir(path,options)}async stat(path){const raw=await this.endpoint.stat(path);return new Stats(raw)}async gzip(files){return await this.endpoint.gzip(files)}async sigMd5(content){return await this.endpoint.sigMd5(content)}}var _Project_mount,__classPrivateFieldGet=function(receiver,state,kind,f){if("a"===kind&&!f)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof state?receiver!==state||!f:!state.has(receiver))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===kind?f:"a"===kind?f.call(receiver):f?f.value:state.get(receiver)},__classPrivateFieldSet=function(receiver,state,value,kind,f){if("m"===kind)throw new TypeError("Private method is not writable");if("a"===kind&&!f)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof state?receiver!==state||!f:!state.has(receiver))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===kind?f.call(receiver,value):f?f.value=value:state.set(receiver,value),value};let ProjectWorker;const ConnectedPorts=new Set;class Project{constructor(options){var _a,_b;this.options=options,_Project_mount.set(this,void 0);const{cwd,workerUrl,wasmUrl,threadWorkerUrl,serviceWorker,logFilter,loadersImportMap}=options;this.cwd=cwd,this.serviceWorkerOptions=serviceWorker;const{port1,port2}=new MessageChannel;null!==(_a=this.remote)&&void 0!==_a||(this.remote=wrap(port1)),ProjectWorker||(ProjectWorker=workerUrl.startsWith("data:")?function createWorkerFromDataUri(dataUri,options){const idx=dataUri.indexOf(";base64,");if(-1===idx)return new Worker(dataUri,options);const base64=dataUri.slice(idx+8),code=atob(base64),blob=new Blob([code],{type:"application/javascript"});return new Worker(URL.createObjectURL(blob),options)}(workerUrl):new Worker(workerUrl),window.addEventListener("message",e=>{this.connectWorker(e)}),this.serviceWorkerOptions&&navigator.serviceWorker.addEventListener("message",e=>{this.connectWorker(e)})),ProjectWorker.postMessage(WorkerMessageType.InitConnection,[port2]),__classPrivateFieldSet(this,_Project_mount,null!==(_b=__classPrivateFieldGet(this,_Project_mount,"f"))&&void 0!==_b?_b:this.remote.mount({cwd,wasmUrl,threadWorkerUrl,loaderWorkerUrl:this.options.loaderWorkerUrl,loadersImportMap,logFilter}),"f")}connectWorker(e){const port=e.ports[0];e.data!==WorkerMessageType.RequestFork||ConnectedPorts.has(port)||ProjectWorker.postMessage(WorkerMessageType.InitConnection,[port])}async installServiceWorker(){if(this.serviceWorkerOptions){const{url,scope,targetDirToCwd}=this.serviceWorkerOptions;return await installServiceWorker(url,scope,targetDirToCwd)}}async mount(){return await __classPrivateFieldGet(this,_Project_mount,"f")}async deps(options){return await __classPrivateFieldGet(this,_Project_mount,"f"),await this.remote.deps(options)}async install(packageLock,options){return await __classPrivateFieldGet(this,_Project_mount,"f"),await this.remote.install(packageLock,options)}async build(options){await __classPrivateFieldGet(this,_Project_mount,"f");const res=await this.remote.build(options);return handleIssues(res.issues,!1,!1),res}async dev(options){await __classPrivateFieldGet(this,_Project_mount,"f"),this.hmrServer||(this.hmrServer=new HmrServer({onSubscribe:async(path,client)=>{await this.hmrSubscribe(path,update=>{this.hmrServer.sendUpdate(path,update)})}})),this.remote.dev(null==options?void 0:options.config,(null==options?void 0:options.onUpdate)?proxy(result=>{handleIssues(result.issues,!1,!1),options.onUpdate(result)}):void 0)}async hmrSubscribe(identifier,callback){await this.remote.hmrSubscribe(identifier,proxy(callback))}updateInfoSubscribe(aggregationMs,callback){this.remote.updateInfoSubscribe(aggregationMs,proxy(callback))}async readFile(path,encoding){return await __classPrivateFieldGet(this,_Project_mount,"f"),await this.remote.readFile(path,encoding)}async writeFile(path,content,encoding){return await __classPrivateFieldGet(this,_Project_mount,"f"),Uint8Array,await this.remote.writeFile(path,content,encoding)}async copyFile(src,dst){return await __classPrivateFieldGet(this,_Project_mount,"f"),await this.remote.copyFile(src,dst)}async readdir(path,options){await __classPrivateFieldGet(this,_Project_mount,"f");return(await this.remote.readdir(path,options)).map(e=>new Dirent(e))}async mkdir(path,options){return await __classPrivateFieldGet(this,_Project_mount,"f"),await this.remote.mkdir(path,options)}async rm(path,options){return await __classPrivateFieldGet(this,_Project_mount,"f"),await this.remote.rm(path,options)}async rmdir(path,options){return await __classPrivateFieldGet(this,_Project_mount,"f"),await this.remote.rmdir(path,options)}async stat(path){await __classPrivateFieldGet(this,_Project_mount,"f");const raw=await this.remote.stat(path);return new Stats(raw)}async gzip(files){return await __classPrivateFieldGet(this,_Project_mount,"f"),await this.remote.gzip(files)}async sigMd5(content){return await __classPrivateFieldGet(this,_Project_mount,"f"),await this.remote.sigMd5(content)}connectHmrIframe(iframe,origin){return this.hmrServer?this.hmrServer.connectIframe(iframe,origin):null}static fork(channel,eventSource){return(eventSource||self).postMessage(WorkerMessageType.RequestFork,{transfer:[channel.port2]}),new ForkedProject(channel.port1)}static checkCompatibility(){return function checkCompatibility(){const details={sharedArrayBuffer:"undefined"!=typeof SharedArrayBuffer&&crossOriginIsolated,atomics:"undefined"!=typeof Atomics,worker:"undefined"!=typeof Worker,serviceWorker:"serviceWorker"in navigator,opfs:"storage"in navigator&&"getDirectory"in navigator.storage,fileSystemObserver:"FileSystemObserver"in window},missing=[];return details.sharedArrayBuffer||missing.push("SharedArrayBuffer (COOP/COEP)"),details.atomics||missing.push("Atomics"),details.worker||missing.push("Worker"),details.serviceWorker||missing.push("ServiceWorker"),details.opfs||missing.push("OPFS"),details.fileSystemObserver||missing.push("FileSystemObserver"),{compatible:0===missing.length,minimalVersion:{chrome:137},details,missing}}()}}_Project_mount=new WeakMap;let _resolve,_projectEndpoint,_handshakeCompleted=!1,_promise=new Promise(resolve=>{_resolve=()=>{_handshakeCompleted=!0,resolve()}});const params=new URLSearchParams(self.location.search),_serviceWorkerScope=params.get("scope"),_targetDirToCwd=params.get("targetDirToCwd");self.addEventListener("install",event=>{event.waitUntil(self.skipWaiting())}),self.addEventListener("activate",event=>{event.waitUntil(self.clients.claim())}),self.addEventListener("message",event=>{event.data&&!0===event.data[SWMessageType.HandShake]?(console.log("[ServiceWorker] Handshake message received"),_projectEndpoint=Project.fork(new MessageChannel,event.source),_resolve(),console.log("[ServiceWorker] Handshake completed, ProjectEndpoint ready")):event.data&&!0===event.data[SWMessageType.HeartbeatPing]&&event.source.postMessage({[SWMessageType.HeartbeatPong]:!0})}),self.addEventListener("fetch",event=>{let{url:urlStr}=event.request,url=new URL(urlStr);"string"==typeof _serviceWorkerScope&&url.pathname.startsWith(_serviceWorkerScope)&&event.respondWith((async()=>{try{await async function waitForHandshake(requestUrl){if(_handshakeCompleted)return;const startTime=Date.now(),warningTimer=setInterval(()=>{const elapsed=Date.now()-startTime;console.warn(`[ServiceWorker] Still waiting for handshake... (${elapsed}ms elapsed, request: ${requestUrl})`)},3e3),timeoutPromise=new Promise((_,reject)=>{setTimeout(()=>{reject(new Error(`[ServiceWorker] Handshake timeout after 10000ms. Make sure the main thread calls installServiceWorker() and sends the handshake message. Request: ${requestUrl}`))},1e4)});try{await Promise.race([_promise,timeoutPromise])}finally{clearInterval(warningTimer)}}(urlStr)}catch(e){return console.error(e.message),new Response(e.message,{status:503,statusText:"Service Unavailable"})}return async function readFileFromProject(projectPath){try{const content=await _projectEndpoint.readFile(projectPath);let mimeType="application/octet-stream";return projectPath.endsWith(".js")?mimeType="application/javascript":projectPath.endsWith(".css")?mimeType="text/css":projectPath.endsWith(".html")?mimeType="text/html":projectPath.endsWith(".json")&&(mimeType="application/json"),new Response(content,{headers:{"Content-Type":mimeType,..."text/html"===mimeType?{"Cross-Origin-Embedder-Policy":"credentialless"}:{}}})}catch(e){return console.error(`File ${projectPath} not found`),new Response("Not Found",{status:404})}}((null!=_targetDirToCwd?_targetDirToCwd:".")+url.pathname.replace(_serviceWorkerScope,""))})())})})(),__webpack_exports__=__webpack_exports__.default})());
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2019 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
@@ -0,0 +1,2 @@
1
+ declare const url: string;
2
+ export default url;
@@ -1 +1 @@
1
- export default "data:application/javascript;base64,IWZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsZmFjdG9yeSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1mYWN0b3J5KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxmYWN0b3J5KTtlbHNle3ZhciBhPWZhY3RvcnkoKTtmb3IodmFyIGkgaW4gYSkoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6cm9vdClbaV09YVtpXX19KHNlbGYsKCk9PigoKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgX193ZWJwYWNrX21vZHVsZXNfXz17Ii4vc3JjL3V0b28vaW5kZXguanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fd2VicGFja19leHBvcnRzX18sX193ZWJwYWNrX3JlcXVpcmVfXyl7X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18se1FSOigpPT5pbml0U3luY30pO2NsYXNzIEJ1aWxkT3B0aW9uc3tfX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsQnVpbGRPcHRpb25zRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX2J1aWxkb3B0aW9uc19mcmVlKHB0ciwwKX1nZXQgY29uZmlnKCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5idWlsZG9wdGlvbnNfY29uZmlnKHRoaXMuX193YmdfcHRyKSl9Y29uc3RydWN0b3IoKXtjb25zdCByZXQ9d2FzbS5idWlsZG9wdGlvbnNfbmV3KCk7cmV0dXJuIHRoaXMuX193YmdfcHRyPXJldD4+PjAsQnVpbGRPcHRpb25zRmluYWxpemF0aW9uLnJlZ2lzdGVyKHRoaXMsdGhpcy5fX3diZ19wdHIsdGhpcyksdGhpc31zZXQgY29uZmlnKHZhbCl7d2FzbS5idWlsZG9wdGlvbnNfc2V0X2NvbmZpZyh0aGlzLl9fd2JnX3B0cixhZGRIZWFwT2JqZWN0KHZhbCkpfWdldCBjbGVhbnVwKCl7cmV0dXJuIDAhPT13YXNtLl9fd2JnX2dldF9idWlsZG9wdGlvbnNfY2xlYW51cCh0aGlzLl9fd2JnX3B0cil9c2V0IGNsZWFudXAoYXJnMCl7d2FzbS5fX3diZ19zZXRfYnVpbGRvcHRpb25zX2NsZWFudXAodGhpcy5fX3diZ19wdHIsYXJnMCl9fVN5bWJvbC5kaXNwb3NlJiYoQnVpbGRPcHRpb25zLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09QnVpbGRPcHRpb25zLnByb3RvdHlwZS5mcmVlKTtjbGFzcyBDcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9uc3tfX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsQ3JlYXRlU3luY0FjY2Vzc0hhbmRsZU9wdGlvbnNGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfY3JlYXRlc3luY2FjY2Vzc2hhbmRsZW9wdGlvbnNfZnJlZShwdHIsMCl9fVN5bWJvbC5kaXNwb3NlJiYoQ3JlYXRlU3luY0FjY2Vzc0hhbmRsZU9wdGlvbnMucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1DcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9ucy5wcm90b3R5cGUuZnJlZSk7Y2xhc3MgRGlyRW50cnl7c3RhdGljIF9fd3JhcChwdHIpe3B0cj4+Pj0wO2NvbnN0IG9iaj1PYmplY3QuY3JlYXRlKERpckVudHJ5LnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLERpckVudHJ5RmluYWxpemF0aW9uLnJlZ2lzdGVyKG9iaixvYmouX193YmdfcHRyLG9iaiksb2JqfXRvSlNPTigpe3JldHVybntuYW1lOnRoaXMubmFtZSx0eXBlOnRoaXMudHlwZX19dG9TdHJpbmcoKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyl9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLERpckVudHJ5RmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX2RpcmVudHJ5X2ZyZWUocHRyLDApfWdldCBuYW1lKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5fX3diZ19nZXRfZGlyZW50cnlfbmFtZShyZXRwdHIsdGhpcy5fX3diZ19wdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19Z2V0IHR5cGUoKXtjb25zdCByZXQ9d2FzbS5fX3diZ19nZXRfZGlyZW50cnlfdHlwZSh0aGlzLl9fd2JnX3B0cik7cmV0dXJuIF9fd2JpbmRnZW5fZW51bV9EaXJFbnRyeVR5cGVbcmV0XX1zZXQgbmFtZShhcmcwKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKGFyZzAsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5fX3diZ19zZXRfZGlyZW50cnlfbmFtZSh0aGlzLl9fd2JnX3B0cixwdHIwLGxlbjApfXNldCB0eXBlKGFyZzApe3dhc20uX193Ymdfc2V0X2RpcmVudHJ5X3R5cGUodGhpcy5fX3diZ19wdHIsKF9fd2JpbmRnZW5fZW51bV9EaXJFbnRyeVR5cGUuaW5kZXhPZihhcmcwKSsxfHwzKS0xKX19ZnVuY3Rpb24gRVJSX0FCT1JUKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfQUJPUlQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9JTlZBTElEX1NUQVRFKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfSU5WQUxJRF9TVEFURShyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX0tFWV9BTFJFQURZX0VYSVNUUygpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20uRVJSX0tFWV9BTFJFQURZX0VYSVNUUyhyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX05PVF9BTExPV0VEKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfTk9UX0FMTE9XRUQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9OT1RfRk9VTkQoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLkVSUl9OT1RfRk9VTkQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9OT19NT0RJRklDQVRJT05fQUxMT1dFRCgpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20uRVJSX0tFWV9BTFJFQURZX0VYSVNUUyhyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX1FVT1RBX0VYQ0VFREVEKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfUVVPVEFfRVhDRUVERUQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9UWVBFX01JU01BVENIKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfVFlQRV9NSVNNQVRDSChyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19U3ltYm9sLmRpc3Bvc2UmJihEaXJFbnRyeS5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPURpckVudHJ5LnByb3RvdHlwZS5mcmVlKTtjbGFzcyBGc3tfX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsRnNGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfZnNfZnJlZShwdHIsMCl9c3RhdGljIGNvcHlGaWxlKHNyYyxkc3Qpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoc3JjLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOLHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoZHN0LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfY29weUZpbGUocHRyMCxsZW4wLHB0cjEsbGVuMSkpfXN0YXRpYyBjb3B5RmlsZVN5bmMoc3JjLGRzdCl7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KSxwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHNyYyx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTixwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGRzdCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4xPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX2NvcHlGaWxlU3luYyhyZXRwdHIscHRyMCxsZW4wLHB0cjEsbGVuMSk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgY3JlYXRlRGlyKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX2NyZWF0ZURpcihwdHIwLGxlbjApKX1zdGF0aWMgY3JlYXRlRGlyQWxsKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX2NyZWF0ZURpckFsbChwdHIwLGxlbjApKX1zdGF0aWMgY3JlYXRlRGlyQWxsU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX2NyZWF0ZURpckFsbFN5bmMocmV0cHRyLHB0cjAsbGVuMCk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgY3JlYXRlRGlyU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX2NyZWF0ZURpclN5bmMocmV0cHRyLHB0cjAsbGVuMCk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgbWV0YWRhdGEocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfbWV0YWRhdGEocHRyMCxsZW4wKSl9c3RhdGljIG1ldGFkYXRhU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX21ldGFkYXRhU3luYyhyZXRwdHIscHRyMCxsZW4wKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrOCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMSk7cmV0dXJuIE1ldGFkYXRhLl9fd3JhcChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgcmVhZChwYXRoKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5mc19yZWFkKHB0cjAsbGVuMCkpfXN0YXRpYyByZWFkRGlyKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3JlYWREaXIocHRyMCxsZW4wKSl9c3RhdGljIHJlYWREaXJTeW5jKHBhdGgpe3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNikscHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uZnNfcmVhZERpclN5bmMocmV0cHRyLHB0cjAsbGVuMCk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkscjI9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzgsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cisxMiwhMCkpdGhyb3cgdGFrZU9iamVjdChyMik7dmFyIHYyPWdldEFycmF5SnNWYWx1ZUZyb21XYXNtMChyMCxyMSkuc2xpY2UoKTtyZXR1cm4gd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQocjAsNCpyMSw0KSx2Mn1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyByZWFkU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX3JlYWRTeW5jKHJldHB0cixwdHIwLGxlbjApO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis4LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIxKTtyZXR1cm4gdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgcmVhZFRvU3RyaW5nKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3JlYWRUb1N0cmluZyhwdHIwLGxlbjApKX1zdGF0aWMgcmVtb3ZlRGlyKHBhdGgscmVjdXJzaXZlKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5mc19yZW1vdmVEaXIocHRyMCxsZW4wLHJlY3Vyc2l2ZSkpfXN0YXRpYyByZW1vdmVEaXJTeW5jKHBhdGgscmVjdXJzaXZlKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX3JlbW92ZURpclN5bmMocmV0cHRyLHB0cjAsbGVuMCxyZWN1cnNpdmUpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCk7aWYoZ2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApKXRocm93IHRha2VPYmplY3QocjApfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KX19c3RhdGljIHJlbW92ZUZpbGUocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfcmVtb3ZlRmlsZShwdHIwLGxlbjApKX1zdGF0aWMgcmVtb3ZlRmlsZVN5bmMocGF0aCl7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KSxwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5mc19yZW1vdmVGaWxlU3luYyhyZXRwdHIscHRyMCxsZW4wKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyB3cml0ZShwYXRoLGNvbnRlbnQpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3dyaXRlKHB0cjAsbGVuMCxhZGRIZWFwT2JqZWN0KGNvbnRlbnQpKSl9c3RhdGljIHdyaXRlU3RyaW5nKHBhdGgsY29udGVudCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOLHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoY29udGVudCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4xPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3dyaXRlU3RyaW5nKHB0cjAsbGVuMCxwdHIxLGxlbjEpKX1zdGF0aWMgd3JpdGVTeW5jKHBhdGgsY29udGVudCl7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KSxwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5mc193cml0ZVN5bmMocmV0cHRyLHB0cjAsbGVuMCxhZGRIZWFwT2JqZWN0KGNvbnRlbnQpKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fX1TeW1ib2wuZGlzcG9zZSYmKEZzLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09RnMucHJvdG90eXBlLmZyZWUpO2NsYXNzIE1ldGFkYXRhe3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShNZXRhZGF0YS5wcm90b3R5cGUpO3JldHVybiBvYmouX193YmdfcHRyPXB0cixNZXRhZGF0YUZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian10b0pTT04oKXtyZXR1cm57ZmlsZV9zaXplOnRoaXMuZmlsZV9zaXplLHR5cGU6dGhpcy50eXBlfX10b1N0cmluZygpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzKX1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsTWV0YWRhdGFGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfbWV0YWRhdGFfZnJlZShwdHIsMCl9Z2V0IGZpbGVfc2l6ZSgpe2NvbnN0IHJldD13YXNtLl9fd2JnX2dldF9tZXRhZGF0YV9maWxlX3NpemUodGhpcy5fX3diZ19wdHIpO3JldHVybiBCaWdJbnQuYXNVaW50Tig2NCxyZXQpfWdldCB0eXBlKCl7Y29uc3QgcmV0PXdhc20uX193YmdfZ2V0X21ldGFkYXRhX3R5cGUodGhpcy5fX3diZ19wdHIpO3JldHVybiBfX3diaW5kZ2VuX2VudW1fRGlyRW50cnlUeXBlW3JldF19c2V0IGZpbGVfc2l6ZShhcmcwKXt3YXNtLl9fd2JnX3NldF9tZXRhZGF0YV9maWxlX3NpemUodGhpcy5fX3diZ19wdHIsYXJnMCl9c2V0IHR5cGUoYXJnMCl7d2FzbS5fX3diZ19zZXRfbWV0YWRhdGFfdHlwZSh0aGlzLl9fd2JnX3B0ciwoX193YmluZGdlbl9lbnVtX0RpckVudHJ5VHlwZS5pbmRleE9mKGFyZzApKzF8fDMpLTEpfX1TeW1ib2wuZGlzcG9zZSYmKE1ldGFkYXRhLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09TWV0YWRhdGEucHJvdG90eXBlLmZyZWUpO2NsYXNzIFByb2plY3R7X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFByb2plY3RGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfcHJvamVjdF9mcmVlKHB0ciwwKX1zdGF0aWMgYnVpbGQob3B0aW9ucyl7X2Fzc2VydENsYXNzKG9wdGlvbnMsQnVpbGRPcHRpb25zKTt2YXIgcHRyMD1vcHRpb25zLl9fZGVzdHJveV9pbnRvX3JhdygpO3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9idWlsZChwdHIwKSl9c3RhdGljIGdldCBjd2QoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLnByb2plY3RfY3dkKHJldHB0cik7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCk7cmV0dXJuIGRlZmVycmVkMV8wPXIwLGRlZmVycmVkMV8xPXIxLGdldFN0cmluZ0Zyb21XYXNtMChyMCxyMSl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpLHdhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMV8wLGRlZmVycmVkMV8xLDEpfX1zdGF0aWMgZGVwcyhyZWdpc3RyeSxjb25jdXJyZW5jeSl7dmFyIHB0cjA9aXNMaWtlTm9uZShyZWdpc3RyeSk/MDpwYXNzU3RyaW5nVG9XYXNtMChyZWdpc3RyeSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnByb2plY3RfZGVwcyhwdHIwLGxlbjAsaXNMaWtlTm9uZShjb25jdXJyZW5jeSk/NDI5NDk2NzI5Nzpjb25jdXJyZW5jeT4+PjApKX1zdGF0aWMgZW50cnlwb2ludHNTdWJzY3JpYmUoY29uZmlnLGNhbGxiYWNrKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnByb2plY3RfZW50cnlwb2ludHNTdWJzY3JpYmUoYWRkSGVhcE9iamVjdChjb25maWcpLGFkZEhlYXBPYmplY3QoY2FsbGJhY2spKSl9c3RhdGljIGd6aXAoZmlsZXMpe3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9nemlwKGFkZEhlYXBPYmplY3QoZmlsZXMpKSl9c3RhdGljIGhtckV2ZW50cyhpZGVudGlmaWVyLGNhbGxiYWNrKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKGlkZW50aWZpZXIsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5wcm9qZWN0X2htckV2ZW50cyhwdHIwLGxlbjAsYWRkSGVhcE9iamVjdChjYWxsYmFjaykpKX1zdGF0aWMgaW5pdCh0aHJlYWRfdXJsKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHRocmVhZF91cmwsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5wcm9qZWN0X2luaXQocHRyMCxsZW4wKX1zdGF0aWMgaW5zdGFsbChwYWNrYWdlX2xvY2ssbWF4X2NvbmN1cnJlbnRfZG93bmxvYWRzKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhY2thZ2VfbG9jayx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnByb2plY3RfaW5zdGFsbChwdHIwLGxlbjAsaXNMaWtlTm9uZShtYXhfY29uY3VycmVudF9kb3dubG9hZHMpPzQyOTQ5NjcyOTc6bWF4X2NvbmN1cnJlbnRfZG93bmxvYWRzPj4+MCkpfXN0YXRpYyBzZXRDd2QocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20ucHJvamVjdF9zZXRDd2QocHRyMCxsZW4wKX1zdGF0aWMgc2lnTWQ1KGNvbnRlbnQpe3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9zaWdNZDUoYWRkSGVhcE9iamVjdChjb250ZW50KSkpfXN0YXRpYyB1cGRhdGVJbmZvU3Vic2NyaWJlKGFnZ3JlZ2F0aW9uX21zLGNhbGxiYWNrKXt3YXNtLnByb2plY3RfdXBkYXRlSW5mb1N1YnNjcmliZShhZ2dyZWdhdGlvbl9tcyxhZGRIZWFwT2JqZWN0KGNhbGxiYWNrKSl9c3RhdGljIHdyaXRlQWxsVG9EaXNrKGNhbGxiYWNrKXt3YXNtLnByb2plY3Rfd3JpdGVBbGxUb0Rpc2soYWRkSGVhcE9iamVjdChjYWxsYmFjaykpfX1TeW1ib2wuZGlzcG9zZSYmKFByb2plY3QucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1Qcm9qZWN0LnByb3RvdHlwZS5mcmVlKTtjbGFzcyBSb290VGFza3tzdGF0aWMgX193cmFwKHB0cil7cHRyPj4+PTA7Y29uc3Qgb2JqPU9iamVjdC5jcmVhdGUoUm9vdFRhc2sucHJvdG90eXBlKTtyZXR1cm4gb2JqLl9fd2JnX3B0cj1wdHIsUm9vdFRhc2tGaW5hbGl6YXRpb24ucmVnaXN0ZXIob2JqLG9iai5fX3diZ19wdHIsb2JqKSxvYmp9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFJvb3RUYXNrRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3Jvb3R0YXNrX2ZyZWUocHRyLDApfX1TeW1ib2wuZGlzcG9zZSYmKFJvb3RUYXNrLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09Um9vdFRhc2sucHJvdG90eXBlLmZyZWUpO2NsYXNzIFdhc21UYXNrTWVzc2FnZXtzdGF0aWMgX193cmFwKHB0cil7cHRyPj4+PTA7Y29uc3Qgb2JqPU9iamVjdC5jcmVhdGUoV2FzbVRhc2tNZXNzYWdlLnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLFdhc21UYXNrTWVzc2FnZUZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsV2FzbVRhc2tNZXNzYWdlRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3dhc210YXNrbWVzc2FnZV9mcmVlKHB0ciwwKX1nZXQgdGFza0lkKCl7cmV0dXJuIHdhc20uX193YmdfZ2V0X3dhc210YXNrbWVzc2FnZV90YXNrSWQodGhpcy5fX3diZ19wdHIpPj4+MH1zZXQgdGFza0lkKGFyZzApe3dhc20uX193Ymdfc2V0X3dhc210YXNrbWVzc2FnZV90YXNrSWQodGhpcy5fX3diZ19wdHIsYXJnMCl9Z2V0IGRhdGEoKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLndhc210YXNrbWVzc2FnZV9kYXRhKHRoaXMuX193YmdfcHRyKSl9fVN5bWJvbC5kaXNwb3NlJiYoV2FzbVRhc2tNZXNzYWdlLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09V2FzbVRhc2tNZXNzYWdlLnByb3RvdHlwZS5mcmVlKTtjbGFzcyBXZWJXb3JrZXJDcmVhdGlvbntzdGF0aWMgX193cmFwKHB0cil7cHRyPj4+PTA7Y29uc3Qgb2JqPU9iamVjdC5jcmVhdGUoV2ViV29ya2VyQ3JlYXRpb24ucHJvdG90eXBlKTtyZXR1cm4gb2JqLl9fd2JnX3B0cj1wdHIsV2ViV29ya2VyQ3JlYXRpb25GaW5hbGl6YXRpb24ucmVnaXN0ZXIob2JqLG9iai5fX3diZ19wdHIsb2JqKSxvYmp9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFdlYldvcmtlckNyZWF0aW9uRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3dlYndvcmtlcmNyZWF0aW9uX2ZyZWUocHRyLDApfWdldCBvcHRpb25zKCl7Y29uc3QgcmV0PXdhc20uX193YmdfZ2V0X3dlYndvcmtlcmNyZWF0aW9uX29wdGlvbnModGhpcy5fX3diZ19wdHIpO3JldHVybiBXZWJXb3JrZXJPcHRpb25zLl9fd3JhcChyZXQpfXNldCBvcHRpb25zKGFyZzApe19hc3NlcnRDbGFzcyhhcmcwLFdlYldvcmtlck9wdGlvbnMpO3ZhciBwdHIwPWFyZzAuX19kZXN0cm95X2ludG9fcmF3KCk7d2FzbS5fX3diZ19zZXRfd2Vid29ya2VyY3JlYXRpb25fb3B0aW9ucyh0aGlzLl9fd2JnX3B0cixwdHIwKX19U3ltYm9sLmRpc3Bvc2UmJihXZWJXb3JrZXJDcmVhdGlvbi5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPVdlYldvcmtlckNyZWF0aW9uLnByb3RvdHlwZS5mcmVlKTtjbGFzcyBXZWJXb3JrZXJPcHRpb25ze3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShXZWJXb3JrZXJPcHRpb25zLnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLFdlYldvcmtlck9wdGlvbnNGaW5hbGl6YXRpb24ucmVnaXN0ZXIob2JqLG9iai5fX3diZ19wdHIsb2JqKSxvYmp9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFdlYldvcmtlck9wdGlvbnNGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfd2Vid29ya2Vyb3B0aW9uc19mcmVlKHB0ciwwKX1nZXQgY3dkKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5fX3diZ19nZXRfd2Vid29ya2Vyb3B0aW9uc19jd2QocmV0cHRyLHRoaXMuX193YmdfcHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWdldCBmaWxlbmFtZSgpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20uX193YmdfZ2V0X3dlYndvcmtlcm9wdGlvbnNfZmlsZW5hbWUocmV0cHRyLHRoaXMuX193YmdfcHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fXNldCBjd2QoYXJnMCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChhcmcwLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uX193Ymdfc2V0X3dlYndvcmtlcm9wdGlvbnNfY3dkKHRoaXMuX193YmdfcHRyLHB0cjAsbGVuMCl9c2V0IGZpbGVuYW1lKGFyZzApe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoYXJnMCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLl9fd2JnX3NldF93ZWJ3b3JrZXJvcHRpb25zX2ZpbGVuYW1lKHRoaXMuX193YmdfcHRyLHB0cjAsbGVuMCl9fVN5bWJvbC5kaXNwb3NlJiYoV2ViV29ya2VyT3B0aW9ucy5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPVdlYldvcmtlck9wdGlvbnMucHJvdG90eXBlLmZyZWUpO2NsYXNzIFdlYldvcmtlclRlcm1pbmF0aW9ue3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShXZWJXb3JrZXJUZXJtaW5hdGlvbi5wcm90b3R5cGUpO3JldHVybiBvYmouX193YmdfcHRyPXB0cixXZWJXb3JrZXJUZXJtaW5hdGlvbkZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsV2ViV29ya2VyVGVybWluYXRpb25GaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfd2Vid29ya2VydGVybWluYXRpb25fZnJlZShwdHIsMCl9Z2V0IG9wdGlvbnMoKXtjb25zdCByZXQ9d2FzbS5fX3diZ19nZXRfd2Vid29ya2VydGVybWluYXRpb25fb3B0aW9ucyh0aGlzLl9fd2JnX3B0cik7cmV0dXJuIFdlYldvcmtlck9wdGlvbnMuX193cmFwKHJldCl9Z2V0IHdvcmtlcklkKCl7cmV0dXJuIHdhc20uX193YmdfZ2V0X3dlYndvcmtlcnRlcm1pbmF0aW9uX3dvcmtlcklkKHRoaXMuX193YmdfcHRyKT4+PjB9c2V0IG9wdGlvbnMoYXJnMCl7X2Fzc2VydENsYXNzKGFyZzAsV2ViV29ya2VyT3B0aW9ucyk7dmFyIHB0cjA9YXJnMC5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3NldF93ZWJ3b3JrZXJ0ZXJtaW5hdGlvbl9vcHRpb25zKHRoaXMuX193YmdfcHRyLHB0cjApfXNldCB3b3JrZXJJZChhcmcwKXt3YXNtLl9fd2JnX3NldF93ZWJ3b3JrZXJ0ZXJtaW5hdGlvbl93b3JrZXJJZCh0aGlzLl9fd2JnX3B0cixhcmcwKX19ZnVuY3Rpb24gZ2V0V2FzbU1lbW9yeSgpe3JldHVybiB0YWtlT2JqZWN0KHdhc20uZ2V0V2FzbU1lbW9yeSgpKX1mdW5jdGlvbiBnZXRXYXNtTW9kdWxlKCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5nZXRXYXNtTW9kdWxlKCkpfWZ1bmN0aW9uIGluaXRMb2dGaWx0ZXIoZmlsdGVyKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKGZpbHRlcix3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmluaXRMb2dGaWx0ZXIocHRyMCxsZW4wKX1mdW5jdGlvbiBpbml0X3BhY2soKXt3YXNtLmluaXRfcGFjaygpfWZ1bmN0aW9uIHJlY3ZUYXNrTWVzc2FnZUluV29ya2VyKHdvcmtlcl9pZCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5yZWN2VGFza01lc3NhZ2VJbldvcmtlcih3b3JrZXJfaWQpKX1mdW5jdGlvbiByZWdpc3RlcldvcmtlclNjaGVkdWxlcihjcmVhdG9yLHRlcm1pbmF0b3Ipe3dhc20ucmVnaXN0ZXJXb3JrZXJTY2hlZHVsZXIoYWRkSGVhcE9iamVjdChjcmVhdG9yKSxhZGRIZWFwT2JqZWN0KHRlcm1pbmF0b3IpKX1mdW5jdGlvbiBzZW5kVGFza01lc3NhZ2UobWVzc2FnZSl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5zZW5kVGFza01lc3NhZ2UoYWRkSGVhcE9iamVjdChtZXNzYWdlKSkpfWZ1bmN0aW9uIHdhc21fdGhyZWFkX2VudHJ5X3BvaW50KHB0cil7d2FzbS53YXNtX3RocmVhZF9lbnRyeV9wb2ludChwdHIpfWZ1bmN0aW9uIHdvcmtlckNyZWF0ZWQod29ya2VyX2lkKXt3YXNtLndvcmtlckNyZWF0ZWQod29ya2VyX2lkKX1mdW5jdGlvbiBfX3diZ19nZXRfaW1wb3J0cyhtZW1vcnkpe2NvbnN0IGltcG9ydDA9e19fcHJvdG9fXzpudWxsLF9fd2JnX0Vycm9yXzhjNGU0M2ZlNzQ1NTlkNzM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChFcnJvcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSkpfSxfX3diZ19fX3diaW5kZ2VuX2RlYnVnX3N0cmluZ18wYmM4NDgyYzZlMzUwOGFlOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Y29uc3QgcHRyMT1wYXNzU3RyaW5nVG9XYXNtMChkZWJ1Z1N0cmluZyhnZXRPYmplY3QoYXJnMSkpLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX19fd2JpbmRnZW5faXNfZnVuY3Rpb25fMDA5NWE3M2I4YjE1NmY3NjpmdW5jdGlvbihhcmcwKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZ2V0T2JqZWN0KGFyZzApfSxfX3diZ19fX3diaW5kZ2VuX2lzX251bGxfYWMzNGY1MDAzOTkxNzU5YTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gbnVsbD09PWdldE9iamVjdChhcmcwKX0sX193YmdfX193YmluZGdlbl9pc19vYmplY3RfNWFlOGU1ODgwZjJjMWZiZDpmdW5jdGlvbihhcmcwKXtjb25zdCB2YWw9Z2V0T2JqZWN0KGFyZzApO3JldHVybiJvYmplY3QiPT10eXBlb2YgdmFsJiZudWxsIT09dmFsfSxfX3diZ19fX3diaW5kZ2VuX2lzX3VuZGVmaW5lZF85ZTRkOTI1MzRjNDJkNzc4OmZ1bmN0aW9uKGFyZzApe3JldHVybiB2b2lkIDA9PT1nZXRPYmplY3QoYXJnMCl9LF9fd2JnX19fd2JpbmRnZW5fbWVtb3J5X2JkMWZiY2YyMWZiZWYzYzg6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdCh3YXNtLm1lbW9yeSl9LF9fd2JnX19fd2JpbmRnZW5fbW9kdWxlX2Y2YjgwNTJkNzljMWNjMTY6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdCh3YXNtTW9kdWxlKX0sX193YmdfX193YmluZGdlbl9udW1iZXJfZ2V0XzhmZjQyNTU1MTZjY2FkM2U6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBvYmo9Z2V0T2JqZWN0KGFyZzEpLHJldD0ibnVtYmVyIj09dHlwZW9mIG9iaj9vYmo6dm9pZCAwO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEZsb2F0NjQoYXJnMCs4LGlzTGlrZU5vbmUocmV0KT8wOnJldCwhMCksZ2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCswLCFpc0xpa2VOb25lKHJldCksITApfSxfX3diZ19fX3diaW5kZ2VuX3JldGhyb3dfMDU1MjVjNTY3ZjE1NDQ3MjpmdW5jdGlvbihhcmcwKXt0aHJvdyB0YWtlT2JqZWN0KGFyZzApfSxfX3diZ19fX3diaW5kZ2VuX3N0cmluZ19nZXRfNzJmYjY5NjIwMmM1NjcyOTpmdW5jdGlvbihhcmcwLGFyZzEpe2NvbnN0IG9iaj1nZXRPYmplY3QoYXJnMSkscmV0PSJzdHJpbmciPT10eXBlb2Ygb2JqP29iajp2b2lkIDA7dmFyIHB0cjE9aXNMaWtlTm9uZShyZXQpPzA6cGFzc1N0cmluZ1RvV2FzbTAocmV0LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX19fd2JpbmRnZW5fdGhyb3dfYmUyODlkNTAzNGVkMjcxYjpmdW5jdGlvbihhcmcwLGFyZzEpe3Rocm93IG5ldyBFcnJvcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSl9LF9fd2JnX193YmdfY2JfdW5yZWZfZDliODdmZjc5ODJlM2IyMTpmdW5jdGlvbihhcmcwKXtnZXRPYmplY3QoYXJnMCkuX3diZ19jYl91bnJlZigpfSxfX3diZ19hYm9ydF8yZjA1ODRlMDNlOGUzOTUwOmZ1bmN0aW9uKGFyZzApe2dldE9iamVjdChhcmcwKS5hYm9ydCgpfSxfX3diZ19hYm9ydF9kNTQ5YjkyZDNjNjY1ZGUxOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmFib3J0KGdldE9iamVjdChhcmcxKSl9LF9fd2JnX2FwcGVuZF9hOTkyY2NjMzdhYTYyZGM0OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMsYXJnNCl7Z2V0T2JqZWN0KGFyZzApLmFwcGVuZChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMyxhcmc0KSl9LGFyZ3VtZW50cyl9LF9fd2JnX2FycmF5QnVmZmVyXzA1Y2UxYWYyM2U5MDY0ZTg6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmFycmF5QnVmZmVyKCkpfSxfX3diZ19hcnJheUJ1ZmZlcl9iYjU0MDc2MTY2MDA2YzM5OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5hcnJheUJ1ZmZlcigpKX0sYXJndW1lbnRzKX0sX193YmdfYXN5bmNfNzlmMmE2MWY5ZDBiMzFjZjpmdW5jdGlvbihhcmcwKXtyZXR1cm4gZ2V0T2JqZWN0KGFyZzApLmFzeW5jfSxfX3diZ19idWZmZXJfN2I1ZjUzZTQ2NTU3ZDhmMTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuYnVmZmVyKX0sX193YmdfY2FsbF8zODllZmUyODQzNWE5Mzg4OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNhbGwoZ2V0T2JqZWN0KGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX2NhbGxfNDcwOGUwYzEzYmRjOGU5NTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNhbGwoZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxhcmd1bWVudHMpfSxfX3diZ19jaGFuZ2VkSGFuZGxlXzEyMzY5NmVhZWFmZjMyZDc6ZnVuY3Rpb24oYXJnMCl7Y29uc3QgcmV0PWdldE9iamVjdChhcmcwKS5jaGFuZ2VkSGFuZGxlO3JldHVybiBpc0xpa2VOb25lKHJldCk/MDphZGRIZWFwT2JqZWN0KHJldCl9LF9fd2JnX2NsZWFyVGltZW91dF83YTQyYjQ5Nzg0YWVhNjQxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGNsZWFyVGltZW91dCh0YWtlT2JqZWN0KGFyZzApKSl9LF9fd2JnX2Nsb3NlXzRiYTMxMjI1M2M0MjQzNDI6ZnVuY3Rpb24oYXJnMCl7Z2V0T2JqZWN0KGFyZzApLmNsb3NlKCl9LF9fd2JnX2Nsb3NlXzgzZmI4MDlhY2EzZGU3Zjk6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNsb3NlKCkpfSxfX3diZ19jcmVhdGVPYmplY3RVUkxfOTE4MTg1ZGI2YTEwYTBjODpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2NvbnN0IHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoVVJMLmNyZWF0ZU9iamVjdFVSTChnZXRPYmplY3QoYXJnMSkpLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LGFyZ3VtZW50cyl9LF9fd2JnX2NyZWF0ZVdyaXRhYmxlXzgwYmM1ZGUzNzQ0NDhiNDI6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNyZWF0ZVdyaXRhYmxlKCkpfSxfX3diZ19kYXRhXzUzMzBkYTUwMzEyZDBiYzE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmRhdGEpfSxfX3diZ19kZWJ1Z180NmE5Mzk5NWZjNmY4ODIwOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe2NvbnNvbGUuZGVidWcoZ2V0T2JqZWN0KGFyZzApLGdldE9iamVjdChhcmcxKSxnZXRPYmplY3QoYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sX193YmdfZGVidWdfYTQwOTlmYTEyZGI2Y2Q2MTpmdW5jdGlvbihhcmcwKXtjb25zb2xlLmRlYnVnKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX2RpcmVudHJ5X25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChEaXJFbnRyeS5fX3dyYXAoYXJnMCkpfSxfX3diZ19kb25lXzU3YjM5ZWNkOWFkZGZlODE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5kb25lfSxfX3diZ19lbnRyaWVzXzA0YTRiOTgyMzUxYTcxN2Y6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmVudHJpZXMoKSl9LF9fd2JnX2Vycm9yXzc1MzRiOGU5YTM2ZjFhYjQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtsZXQgZGVmZXJyZWQwXzAsZGVmZXJyZWQwXzE7dHJ5e2RlZmVycmVkMF8wPWFyZzAsZGVmZXJyZWQwXzE9YXJnMSxjb25zb2xlLmVycm9yKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMF8wLGRlZmVycmVkMF8xLDEpfX0sX193YmdfZXJyb3JfNzk0ZDBmZmM5ZDAwZDVjMzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtjb25zb2xlLmVycm9yKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpLGdldE9iamVjdChhcmczKSl9LF9fd2JnX2Vycm9yXzlhN2ZlM2Y5MzIwMzRjZGU6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS5lcnJvcihnZXRPYmplY3QoYXJnMCkpfSxfX3diZ19ldmFsXzNmMGI5ZjBjYmFmNDVhMzQ6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCByZXQ9ZXZhbChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSk7cmV0dXJuIGFkZEhlYXBPYmplY3QocmV0KX0sYXJndW1lbnRzKX0sX193YmdfZmV0Y2hfNzRhM2U4NGViZDJjOWEwZTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChmZXRjaChnZXRPYmplY3QoYXJnMCkpKX0sX193YmdfZmV0Y2hfYWZiNmE0YjZjYWNmODc2ZDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5mZXRjaChnZXRPYmplY3QoYXJnMSkpKX0sX193YmdfZmx1c2hfMjJiNzg1MDYwNTkyY2E1ZjpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtnZXRPYmplY3QoYXJnMCkuZmx1c2goKX0sYXJndW1lbnRzKX0sX193YmdfZnJvbV9iZGRkNjRlN2Q1ZmY2OTQxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KEFycmF5LmZyb20oZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX2dldERpcmVjdG9yeUhhbmRsZV84N2NlOGNhNTNjZjRkOGRjOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXREaXJlY3RvcnlIYW5kbGUoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzEsYXJnMiksZ2V0T2JqZWN0KGFyZzMpKSl9LF9fd2JnX2dldERpcmVjdG9yeV9iNjZhZTNlNzlmOTAyOTgyOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXREaXJlY3RvcnkoKSl9LF9fd2JnX2dldEZpbGVIYW5kbGVfZmY0YWI5MTdiNDVhZmZiMzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuZ2V0RmlsZUhhbmRsZShnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRPYmplY3QoYXJnMykpKX0sX193YmdfZ2V0RmlsZV8xMTUzNTRmYzk1MGVkYzg4OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXRGaWxlKCkpfSxfX3diZ19nZXRSYW5kb21WYWx1ZXNfODA1NzhiMmZmMmEwOTNiYTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZ2V0T2JqZWN0KGFyZzApKX0sYXJndW1lbnRzKX0sX193YmdfZ2V0XzliOTRkNzNlNjIyMWY3NWM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMClbYXJnMT4+PjBdKX0sX193YmdfZ2V0X2IzZWQzYWQ0YmUyYmM4YWM6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChSZWZsZWN0LmdldChnZXRPYmplY3QoYXJnMCksZ2V0T2JqZWN0KGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX2hhc19kNGU1MzIzODk2NmMxMmI2OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIFJlZmxlY3QuaGFzKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSkpfSxhcmd1bWVudHMpfSxfX3diZ19oZWFkZXJzXzU5YTI5MzhkYjlmODA5ODU6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmhlYWRlcnMpfSxfX3diZ19pbmZvXzE0OGQwNDM4NDA1ODIwMTI6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS5pbmZvKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX2luZm9fOWU2MDJjZjEwYzVjNjkwYjpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtjb25zb2xlLmluZm8oZ2V0T2JqZWN0KGFyZzApLGdldE9iamVjdChhcmcxKSxnZXRPYmplY3QoYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sX193YmdfaW5zdGFuY2VvZl9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZV8xNTA2YjNkMDE3Nzk5ZDQ4OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlfWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pbnN0YW5jZW9mX0RvbUV4Y2VwdGlvbl85OWMxNzcxOTNlNTU0Yjc1OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbn1jYXRjaChfKXtyZXN1bHQ9ITF9cmV0dXJuIHJlc3VsdH0sX193YmdfaW5zdGFuY2VvZl9GaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlXzU2YTE2NzAzOWQ2MTQ1NDg6ZnVuY3Rpb24oYXJnMCl7bGV0IHJlc3VsdDt0cnl7cmVzdWx0PWdldE9iamVjdChhcmcwKWluc3RhbmNlb2YgRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZX1jYXRjaChfKXtyZXN1bHQ9ITF9cmV0dXJuIHJlc3VsdH0sX193YmdfaW5zdGFuY2VvZl9SZXNwb25zZV9lZTFkNTRkNzlhZTQxOTc3OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIFJlc3BvbnNlfWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pbnN0YW5jZW9mX1VpbnQ4QXJyYXlfOWI5MDc1OTM1Yzc0NzA3YzpmdW5jdGlvbihhcmcwKXtsZXQgcmVzdWx0O3RyeXtyZXN1bHQ9Z2V0T2JqZWN0KGFyZzApaW5zdGFuY2VvZiBVaW50OEFycmF5fWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pc0FycmF5X2QzMTRiYjk4ZmNmMDgzMzE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZ2V0T2JqZWN0KGFyZzApKX0sX193YmdfaXRlcmF0b3JfNmZmNjU2MGNhMTU2OGU1NTpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KFN5bWJvbC5pdGVyYXRvcil9LF9fd2JnX2tpbmRfOTA3NjlkNmMxNmZhZWFmZDpmdW5jdGlvbihhcmcwKXtjb25zdCByZXQ9Z2V0T2JqZWN0KGFyZzApLmtpbmQ7cmV0dXJuKF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtSGFuZGxlS2luZC5pbmRleE9mKHJldCkrMXx8MyktMX0sX193YmdfbGVuZ3RoXzMyZWQ5YTI3OWFjZDA1NGM6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5sZW5ndGh9LF9fd2JnX2xlbmd0aF8zNWE3YmFjZTQwZjM2ZWFjOmZ1bmN0aW9uKGFyZzApe3JldHVybiBnZXRPYmplY3QoYXJnMCkubGVuZ3RofSxfX3diZ19tZXNzYWdlXzBiMmIwMjk4YTIzMWIwZDQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS5tZXNzYWdlLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX21ldGFkYXRhX25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChNZXRhZGF0YS5fX3dyYXAoYXJnMCkpfSxfX3diZ19uYW1lXzI0Mjc1M2U1MTEwY2Q3NTY6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS5uYW1lLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX25hdmlnYXRvcl80NDc4OTMxZjMyZWJjYTU3OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5uYXZpZ2F0b3IpfSxfX3diZ19uZXdfMzYxMzA4YjIzNTZjZWNkMDpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBPYmplY3QpfSxfX3diZ19uZXdfM2ViMzZhZTI0MWZlNmY0NDpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBBcnJheSl9LF9fd2JnX25ld180ZjhmM2MxMjNlNDc0MzU4OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFdvcmtlcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXdfNjQyODRiZDQ4N2Y5ZDIzOTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBIZWFkZXJzKX0sYXJndW1lbnRzKX0sX193YmdfbmV3XzcyYzYyN2JhODBkZTFjMjE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEludDMyQXJyYXkoZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX25ld184YTZmMjM4YTZlY2U4NmVhOmZ1bmN0aW9uKCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEVycm9yKX0sX193YmdfbmV3XzhlYzU4MDFiMzlkNmY4NjI6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEZpbGVTeXN0ZW1PYnNlcnZlcihnZXRPYmplY3QoYXJnMCkpKX0sX193YmdfbmV3X2I1ZDllMmZiMzg5ZmVmOTE6ZnVuY3Rpb24oYXJnMCxhcmcxKXt0cnl7dmFyIHN0YXRlMD17YTphcmcwLGI6YXJnMX07Y29uc3QgcmV0PW5ldyBQcm9taXNlKChhcmcwLGFyZzEpPT57Y29uc3QgYT1zdGF0ZTAuYTtzdGF0ZTAuYT0wO3RyeXtyZXR1cm4gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzMzNDQoYSxzdGF0ZTAuYixhcmcwLGFyZzEpfWZpbmFsbHl7c3RhdGUwLmE9YX19KTtyZXR1cm4gYWRkSGVhcE9iamVjdChyZXQpfWZpbmFsbHl7c3RhdGUwLmE9c3RhdGUwLmI9MH19LF9fd2JnX25ld19iOTQ5ZTdmNTYxNTBhNWQxOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEFib3J0Q29udHJvbGxlcil9LGFyZ3VtZW50cyl9LF9fd2JnX25ld19kZDJiNjgwYzhiZjZhZTI5OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBVaW50OEFycmF5KGdldE9iamVjdChhcmcwKSkpfSxfX3diZ19uZXdfZnJvbV9zbGljZV9hM2QyNjI5ZGMxODI2Nzg0OmZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFVpbnQ4QXJyYXkoZ2V0QXJyYXlVOEZyb21XYXNtMChhcmcwLGFyZzEpKSl9LF9fd2JnX25ld19ub19hcmdzXzFjN2M4NDJmMDhkMDBlYmI6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgRnVuY3Rpb24oZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzAsYXJnMSkpKX0sX193YmdfbmV3X3dpdGhfbGVuZ3RoX2EyYzM5Y2JlODhmZDhmZjE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFVpbnQ4QXJyYXkoYXJnMD4+PjApKX0sX193YmdfbmV3X3dpdGhfb3B0aW9uc18xNDVhZmJhOTIyYWQzNzAzOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgV29ya2VyKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXdfd2l0aF9zdHJfYW5kX2luaXRfYTYxY2JjNmJkZWYyMTYxNDpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFJlcXVlc3QoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzAsYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX25ld193aXRoX3N0cl9zZXF1ZW5jZV9jZWEyYzA1NzFkNmRjNmFiOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBCbG9iKGdldE9iamVjdChhcmcwKSkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXh0XzBhNWUwZjhhZjk4MTQ2YWE6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLm5leHQoKSl9LGFyZ3VtZW50cyl9LF9fd2JnX25leHRfMzQ4MmY1NGM0OWU4YWYxOTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkubmV4dCgpKX0sYXJndW1lbnRzKX0sX193YmdfbmV4dF80MThmODBkOGY1MzAzMjMzOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5uZXh0KX0sX193Ymdfbm93XzBkYzQ5MjBhNDdjZjcyODA6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5ub3coKX0sX193Ymdfbm93X2EzYWY5YTJmNGJiYWE0ZDE6ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX0sX193Ymdfb2JzZXJ2ZV8zMjIzNWI1ZTYxOTVkNGFiOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkub2JzZXJ2ZShnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LF9fd2JnX29mX2RkYzA5NDJiMGRjZTE2YTE6ZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe3JldHVybiBhZGRIZWFwT2JqZWN0KEFycmF5Lm9mKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LF9fd2JnX3BhcnNlXzcwODQ2MWExZmVkZGZiMzg6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChKU09OLnBhcnNlKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX3BlcmZvcm1hbmNlXzZhZGMzYjg5OWU0NDhhMjM6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnBlcmZvcm1hbmNlKX0sX193YmdfcG9zdE1lc3NhZ2VfMjA0MWY0ZTkwYWY2MTMxODpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5wb3N0TWVzc2FnZShnZXRPYmplY3QoYXJnMSkpfSxhcmd1bWVudHMpfSxfX3diZ19wb3N0TWVzc2FnZV83NzFlZjMyOTNhMjhiYmFjOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLnBvc3RNZXNzYWdlKGdldE9iamVjdChhcmcxKSl9LGFyZ3VtZW50cyl9LF9fd2JnX3Byb3RvdHlwZXNldGNhbGxfYmRjZGNjNTg0MmU0ZDc3ZDpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZ2V0QXJyYXlVOEZyb21XYXNtMChhcmcwLGFyZzEpLGdldE9iamVjdChhcmcyKSl9LF9fd2JnX3B1c2hfOGZmZGNiMjA2MzM0MGJhNTpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBnZXRPYmplY3QoYXJnMCkucHVzaChnZXRPYmplY3QoYXJnMSkpfSxfX3diZ19xdWV1ZU1pY3JvdGFza18wYWEwYTkyN2Y3OGY1ZDk4OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5xdWV1ZU1pY3JvdGFzayl9LF9fd2JnX3F1ZXVlTWljcm90YXNrXzViYjUzNjk4MmY3OGE1NmY6ZnVuY3Rpb24oYXJnMCl7cXVldWVNaWNyb3Rhc2soZ2V0T2JqZWN0KGFyZzApKX0sX193YmdfcmFuZG9tXzkxMjI4NGRiZjYzNmYyNjk6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yYW5kb20oKX0sX193YmdfcmVsYXRpdmVQYXRoQ29tcG9uZW50c19iYzQ4MjQwM2NiNmQ3ZWE5OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5yZWxhdGl2ZVBhdGhDb21wb25lbnRzKX0sX193YmdfcmVtb3ZlRW50cnlfYzRlZmZmZGQzMThiNTFhMTpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkucmVtb3ZlRW50cnkoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzEsYXJnMiksZ2V0T2JqZWN0KGFyZzMpKSl9LF9fd2JnX3Jlc29sdmVfMDAyYzRiN2Q5ZDhmNmI2NDpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChQcm9taXNlLnJlc29sdmUoZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX3Jvb3R0YXNrX25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChSb290VGFzay5fX3dyYXAoYXJnMCkpfSxfX3diZ19zZXRUaW1lb3V0XzYzMDA4NjEzNjQ0YjA3YWY6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5zZXRUaW1lb3V0KGdldE9iamVjdChhcmcxKSxhcmcyKSl9LGFyZ3VtZW50cyl9LF9fd2JnX3NldFRpbWVvdXRfN2JiMzQyOTY2MmFiMWU3MDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KHNldFRpbWVvdXQoZ2V0T2JqZWN0KGFyZzApLGFyZzEpKX0sX193Ymdfc2V0X2F0X2U0NTNjZjNmNGJlOWUyZDk6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuYXQ9YXJnMX0sX193Ymdfc2V0X2JvZHlfOWE3ZTAwYWZlM2NmZTI0NDpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5ib2R5PWdldE9iamVjdChhcmcxKX0sX193Ymdfc2V0X2NhY2hlXzMxNWEzZWQ3NzNhNDE1NDM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuY2FjaGU9X193YmluZGdlbl9lbnVtX1JlcXVlc3RDYWNoZVthcmcxXX0sX193Ymdfc2V0X2NyZWF0ZV8xZjkwMmM1OTM2YWRkZTdkOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmNyZWF0ZT0wIT09YXJnMX0sX193Ymdfc2V0X2NyZWF0ZV9jOTVkZGNhMDE4ZmFjOWNlOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmNyZWF0ZT0wIT09YXJnMX0sX193Ymdfc2V0X2NyZWRlbnRpYWxzX2M0YTU4ZDJlMDVlZjI0ZmI6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuY3JlZGVudGlhbHM9X193YmluZGdlbl9lbnVtX1JlcXVlc3RDcmVkZW50aWFsc1thcmcxXX0sX193Ymdfc2V0X2Y0M2U1NzdhZWE5NDQ2NWI6ZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe2dldE9iamVjdChhcmcwKVthcmcxPj4+MF09dGFrZU9iamVjdChhcmcyKX0sX193Ymdfc2V0X2hlYWRlcnNfY2ZjNWY0YjJjMWYyMDU0OTpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5oZWFkZXJzPWdldE9iamVjdChhcmcxKX0sX193Ymdfc2V0X21ldGhvZF9jM2UyMDM3NWY1YWU3ZmFjOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtnZXRPYmplY3QoYXJnMCkubWV0aG9kPWdldFN0cmluZ0Zyb21XYXNtMChhcmcxLGFyZzIpfSxfX3diZ19zZXRfbW9kZV9iMTM2NDJjMzEyNjQ4MjAyOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLm1vZGU9X193YmluZGdlbl9lbnVtX1JlcXVlc3RNb2RlW2FyZzFdfSxfX3diZ19zZXRfbmFtZV80OWI5ZWNiYTdmNThmMmU1OmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtnZXRPYmplY3QoYXJnMCkubmFtZT1nZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKX0sX193Ymdfc2V0X29ubWVzc2FnZV82ZWQ0MTA1MGU0YTVjZWUyOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLm9ubWVzc2FnZT1nZXRPYmplY3QoYXJnMSl9LF9fd2JnX3NldF9yZWN1cnNpdmVfNjVlZDA3ZGY4OTJiNDg4NTpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5yZWN1cnNpdmU9MCE9PWFyZzF9LF9fd2JnX3NldF9yZWN1cnNpdmVfZjVkMzQxNjA5ODMyODExMDpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5yZWN1cnNpdmU9MCE9PWFyZzF9LF9fd2JnX3NldF9zaWduYWxfZjJkM2Y4NTk5MjQ4ODk2ZDpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5zaWduYWw9Z2V0T2JqZWN0KGFyZzEpfSxfX3diZ19zZXRfdHlwZV9lMTI3ZjI2Yjc4ZDc4YmZjOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLnR5cGU9X193YmluZGdlbl9lbnVtX1dvcmtlclR5cGVbYXJnMV19LF9fd2JnX3NpZ25hbF9kMTI4NWVjYWI0ZWJjNWFkOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5zaWduYWwpfSxfX3diZ19zaXplX2UwNWQzMWNjNjA0OTgxNWY6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5zaXplfSxfX3diZ19zbGljZV81NjZhMTVmMzIxNGZhNTJlOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMsYXJnNCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnNsaWNlKGFyZzEsYXJnMixnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMyxhcmc0KSkpfSxhcmd1bWVudHMpfSxfX3diZ19zdGFja18wZWQ3NWQ2ODU3NWIwZjNjOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Y29uc3QgcHRyMT1wYXNzU3RyaW5nVG9XYXNtMChnZXRPYmplY3QoYXJnMSkuc3RhY2ssd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMT1XQVNNX1ZFQ1RPUl9MRU47Z2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCs0LGxlbjEsITApLGdldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArMCxwdHIxLCEwKX0sX193Ymdfc3RhdGljX2FjY2Vzc29yX0dMT0JBTF8xMjgzNzE2N2FkOTM1MTE2OmZ1bmN0aW9uKCl7Y29uc3QgcmV0PXZvaWQgMD09PV9fd2VicGFja19yZXF1aXJlX18uZz9udWxsOl9fd2VicGFja19yZXF1aXJlX18uZztyZXR1cm4gaXNMaWtlTm9uZShyZXQpPzA6YWRkSGVhcE9iamVjdChyZXQpfSxfX3diZ19zdGF0aWNfYWNjZXNzb3JfR0xPQkFMX1RISVNfZTYyOGU4OWFiM2IxYzk1ZjpmdW5jdGlvbigpe2NvbnN0IHJldD0idW5kZWZpbmVkIj09dHlwZW9mIGdsb2JhbFRoaXM/bnVsbDpnbG9iYWxUaGlzO3JldHVybiBpc0xpa2VOb25lKHJldCk/MDphZGRIZWFwT2JqZWN0KHJldCl9LF9fd2JnX3N0YXRpY19hY2Nlc3Nvcl9TRUxGX2E2MjFkM2RmYmI2MGQwY2U6ZnVuY3Rpb24oKXtjb25zdCByZXQ9InVuZGVmaW5lZCI9PXR5cGVvZiBzZWxmP251bGw6c2VsZjtyZXR1cm4gaXNMaWtlTm9uZShyZXQpPzA6YWRkSGVhcE9iamVjdChyZXQpfSxfX3diZ19zdGF0aWNfYWNjZXNzb3JfV0lORE9XX2Y4NzI3ZjBjZjg4OGUwYmQ6ZnVuY3Rpb24oKXtjb25zdCByZXQ9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/bnVsbDp3aW5kb3c7cmV0dXJuIGlzTGlrZU5vbmUocmV0KT8wOmFkZEhlYXBPYmplY3QocmV0KX0sX193Ymdfc3RhdHVzXzg5ZDdlODAzZGI5MTFlZTc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5zdGF0dXN9LF9fd2JnX3N0b3JhZ2VfYzAwMmI1M2JjNDg4MzI5OTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuc3RvcmFnZSl9LF9fd2JnX3N0cmluZ2lmeV84ZDFjYzZmZjM4M2U4YmFlOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KEpTT04uc3RyaW5naWZ5KGdldE9iamVjdChhcmcwKSkpfSxhcmd1bWVudHMpfSxfX3diZ19zdWJhcnJheV9hOTZlMWZlZjE3ZWQyM2NiOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuc3ViYXJyYXkoYXJnMT4+PjAsYXJnMj4+PjApKX0sX193YmdfdGhlbl8wZDlmZTJjN2IxODU3ZDMyOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkudGhlbihnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LF9fd2JnX3RoZW5fYjllN2IzYjVmMWE5ZTFiNTpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS50aGVuKGdldE9iamVjdChhcmcxKSkpfSxfX3diZ190b1N0cmluZ185NjRmZjdmZTZlY2E4MzYyOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS50b1N0cmluZygpKX0sX193YmdfdHJ1bmNhdGVfZGM2NjFmZGNiMDA2MmZhNzpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS50cnVuY2F0ZShhcmcxPj4+MCl9LGFyZ3VtZW50cyl9LF9fd2JnX3R5cGVfMDNkZmU0NjIxNzM1ZTUyODpmdW5jdGlvbihhcmcwKXtjb25zdCByZXQ9Z2V0T2JqZWN0KGFyZzApLnR5cGU7cmV0dXJuKF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtQ2hhbmdlUmVjb3JkVHlwZS5pbmRleE9mKHJldCkrMXx8NyktMX0sX193YmdfdXJsX2M0ODRjMjZiMWZiZjUxMjY6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS51cmwsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMT1XQVNNX1ZFQ1RPUl9MRU47Z2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCs0LGxlbjEsITApLGdldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArMCxwdHIxLCEwKX0sX193YmdfdmFsdWVfMDU0NjI1NWI0MTVlOTZjMTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkudmFsdWUpfSxfX3diZ192YWx1ZV9mZTZlZTM0YWY1ZGMzZGNlOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS52YWx1ZSl9LF9fd2JnX3dhaXRBc3luY19hNThiMjEzNGJmZjM5YzNlOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChBdG9taWNzLndhaXRBc3luYyhnZXRPYmplY3QoYXJnMCksYXJnMT4+PjAsYXJnMikpfSxfX3diZ193YWl0QXN5bmNfYzBhMzlhN2QzMzE4ZDkxZTpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KEF0b21pY3Mud2FpdEFzeW5jKX0sX193Ymdfd2Fybl9hNDBiOTcxNDY3YjIxOWM3OmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe2NvbnNvbGUud2FybihnZXRPYmplY3QoYXJnMCksZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSxnZXRPYmplY3QoYXJnMykpfSxfX3diZ193YXJuX2Y3YWUxYjJlNjZjY2I5MzA6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS53YXJuKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX3dhc210YXNrbWVzc2FnZV9uZXc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoV2FzbVRhc2tNZXNzYWdlLl9fd3JhcChhcmcwKSl9LF9fd2JnX3dlYndvcmtlcmNyZWF0aW9uX25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChXZWJXb3JrZXJDcmVhdGlvbi5fX3dyYXAoYXJnMCkpfSxfX3diZ193ZWJ3b3JrZXJ0ZXJtaW5hdGlvbl9uZXc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoV2ViV29ya2VyVGVybWluYXRpb24uX193cmFwKGFyZzApKX0sX193Ymdfd3JpdGVfMmQ1OTMzN2NjNDk2OTE5ZDpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtyZXR1cm4gZ2V0T2JqZWN0KGFyZzApLndyaXRlKGdldEFycmF5VThGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRPYmplY3QoYXJnMykpfSxhcmd1bWVudHMpfSxfX3diZ193cml0ZV8zN2Y1YTYyYTI0ZGE2NjJmOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLndyaXRlKGdldE9iamVjdChhcmcxKSkpfSxhcmd1bWVudHMpfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwMTpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KG1ha2VNdXRDbG9zdXJlKGFyZzAsYXJnMSx3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xOTk4NSxfX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzk2NDMpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDI6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlTXV0Q2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTk5ODUsX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5NjQzKSl9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDAzOmZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobWFrZU11dENsb3N1cmUoYXJnMCxhcmcxLHdhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzE5OTg1LF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV83OTY3OSkpfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwNDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KG1ha2VNdXRDbG9zdXJlKGFyZzAsYXJnMSx3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xOTk4NSxfX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTk5NzEpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDU6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlQ2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzkwMDUsX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5MDA2KSl9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA2OmZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobWFrZU11dENsb3N1cmUoYXJnMCxhcmcxLHdhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5NzEwLF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xOTk3MSkpfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwNzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChhcmcwKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDg6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSl9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA5OmZ1bmN0aW9uKGFyZzAsYXJnMSl7dmFyIHYwPWdldEFycmF5SnNWYWx1ZUZyb21XYXNtMChhcmcwLGFyZzEpLnNsaWNlKCk7d2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoYXJnMCw0KmFyZzEsNCk7cmV0dXJuIGFkZEhlYXBPYmplY3QodjApfSxfX3diaW5kZ2VuX2xpbmtfMGIxZjc2ZDIzNWZkMmI4NjpmdW5jdGlvbihhcmcwKXtjb25zdCB2YWw9Im9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgICAgIGxldCBbaWEsIGluZGV4LCB2YWx1ZV0gPSBldi5kYXRhO1xuICAgICAgICAgICAgICAgIGlhID0gbmV3IEludDMyQXJyYXkoaWEuYnVmZmVyKTtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gQXRvbWljcy53YWl0KGlhLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHJlc3VsdCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgIixwdHIxPXBhc3NTdHJpbmdUb1dhc20wKHZvaWQgMD09PVVSTC5jcmVhdGVPYmplY3RVUkw/ImRhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdCwiK2VuY29kZVVSSUNvbXBvbmVudCh2YWwpOlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3ZhbF0se3R5cGU6InRleHQvamF2YXNjcmlwdCJ9KSksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMT1XQVNNX1ZFQ1RPUl9MRU47Z2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCs0LGxlbjEsITApLGdldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArMCxwdHIxLCEwKX0sX193YmluZGdlbl9vYmplY3RfY2xvbmVfcmVmOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKSl9LF9fd2JpbmRnZW5fb2JqZWN0X2Ryb3BfcmVmOmZ1bmN0aW9uKGFyZzApe3Rha2VPYmplY3QoYXJnMCl9LG1lbW9yeTptZW1vcnl8fG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRpYWw6MTAyNSxtYXhpbXVtOjY1NTM2LHNoYXJlZDohMH0pfTtyZXR1cm57X19wcm90b19fOm51bGwsIi4vaW5kZXhfYmcuanMiOmltcG9ydDB9fWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xOTk3MShhcmcwLGFyZzEpe3dhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzE5OTcxKGFyZzAsYXJnMSl9ZnVuY3Rpb24gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5NjQzKGFyZzAsYXJnMSxhcmcyKXt3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV83OTY0MyhhcmcwLGFyZzEsYWRkSGVhcE9iamVjdChhcmcyKSl9ZnVuY3Rpb24gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5Njc5KGFyZzAsYXJnMSxhcmcyKXt0cnl7d2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzk2NzkoYXJnMCxhcmcxLGFkZEJvcnJvd2VkT2JqZWN0KGFyZzIpKX1maW5hbGx5e2hlYXBbc3RhY2tfcG9pbnRlcisrXT12b2lkIDB9fWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV83OTAwNihhcmcwLGFyZzEsYXJnMil7d2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzkwMDYoYXJnMCxhcmcxLGFkZEhlYXBPYmplY3QoYXJnMikpfWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8zMzQ0KGFyZzAsYXJnMSxhcmcyLGFyZzMpe3dhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzMzNDQoYXJnMCxhcmcxLGFkZEhlYXBPYmplY3QoYXJnMiksYWRkSGVhcE9iamVjdChhcmczKSl9U3ltYm9sLmRpc3Bvc2UmJihXZWJXb3JrZXJUZXJtaW5hdGlvbi5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPVdlYldvcmtlclRlcm1pbmF0aW9uLnByb3RvdHlwZS5mcmVlKTtjb25zdCBfX3diaW5kZ2VuX2VudW1fRGlyRW50cnlUeXBlPVsiZmlsZSIsImRpcmVjdG9yeSJdLF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtQ2hhbmdlUmVjb3JkVHlwZT1bImFwcGVhcmVkIiwiZGlzYXBwZWFyZWQiLCJlcnJvcmVkIiwibW9kaWZpZWQiLCJtb3ZlZCIsInVua25vd24iXSxfX3diaW5kZ2VuX2VudW1fRmlsZVN5c3RlbUhhbmRsZUtpbmQ9WyJmaWxlIiwiZGlyZWN0b3J5Il0sX193YmluZGdlbl9lbnVtX1JlcXVlc3RDYWNoZT1bImRlZmF1bHQiLCJuby1zdG9yZSIsInJlbG9hZCIsIm5vLWNhY2hlIiwiZm9yY2UtY2FjaGUiLCJvbmx5LWlmLWNhY2hlZCJdLF9fd2JpbmRnZW5fZW51bV9SZXF1ZXN0Q3JlZGVudGlhbHM9WyJvbWl0Iiwic2FtZS1vcmlnaW4iLCJpbmNsdWRlIl0sX193YmluZGdlbl9lbnVtX1JlcXVlc3RNb2RlPVsic2FtZS1vcmlnaW4iLCJuby1jb3JzIiwiY29ycyIsIm5hdmlnYXRlIl0sX193YmluZGdlbl9lbnVtX1dvcmtlclR5cGU9WyJjbGFzc2ljIiwibW9kdWxlIl0sQnVpbGRPcHRpb25zRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ19idWlsZG9wdGlvbnNfZnJlZShwdHI+Pj4wLDEpKSxDcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9uc0ZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfY3JlYXRlc3luY2FjY2Vzc2hhbmRsZW9wdGlvbnNfZnJlZShwdHI+Pj4wLDEpKSxEaXJFbnRyeUZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfZGlyZW50cnlfZnJlZShwdHI+Pj4wLDEpKSxGc0ZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfZnNfZnJlZShwdHI+Pj4wLDEpKSxNZXRhZGF0YUZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfbWV0YWRhdGFfZnJlZShwdHI+Pj4wLDEpKSxQcm9qZWN0RmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ19wcm9qZWN0X2ZyZWUocHRyPj4+MCwxKSksUm9vdFRhc2tGaW5hbGl6YXRpb249InVuZGVmaW5lZCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT97cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9fTpuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkocHRyPT53YXNtLl9fd2JnX3Jvb3R0YXNrX2ZyZWUocHRyPj4+MCwxKSksV2FzbVRhc2tNZXNzYWdlRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ193YXNtdGFza21lc3NhZ2VfZnJlZShwdHI+Pj4wLDEpKSxXZWJXb3JrZXJDcmVhdGlvbkZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193Ymdfd2Vid29ya2VyY3JlYXRpb25fZnJlZShwdHI+Pj4wLDEpKSxXZWJXb3JrZXJPcHRpb25zRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ193ZWJ3b3JrZXJvcHRpb25zX2ZyZWUocHRyPj4+MCwxKSksV2ViV29ya2VyVGVybWluYXRpb25GaW5hbGl6YXRpb249InVuZGVmaW5lZCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT97cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9fTpuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkocHRyPT53YXNtLl9fd2JnX3dlYndvcmtlcnRlcm1pbmF0aW9uX2ZyZWUocHRyPj4+MCwxKSk7ZnVuY3Rpb24gYWRkSGVhcE9iamVjdChvYmope2hlYXBfbmV4dD09PWhlYXAubGVuZ3RoJiZoZWFwLnB1c2goaGVhcC5sZW5ndGgrMSk7Y29uc3QgaWR4PWhlYXBfbmV4dDtyZXR1cm4gaGVhcF9uZXh0PWhlYXBbaWR4XSxoZWFwW2lkeF09b2JqLGlkeH1mdW5jdGlvbiBfYXNzZXJ0Q2xhc3MoaW5zdGFuY2Usa2xhc3Mpe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBrbGFzcykpdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCBpbnN0YW5jZSBvZiAke2tsYXNzLm5hbWV9YCl9ZnVuY3Rpb24gYWRkQm9ycm93ZWRPYmplY3Qob2JqKXtpZigxPT1zdGFja19wb2ludGVyKXRocm93IG5ldyBFcnJvcigib3V0IG9mIGpzIHN0YWNrIik7cmV0dXJuIGhlYXBbLS1zdGFja19wb2ludGVyXT1vYmosc3RhY2tfcG9pbnRlcn1jb25zdCBDTE9TVVJFX0RUT1JTPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHN0YXRlPT5zdGF0ZS5kdG9yKHN0YXRlLmEsc3RhdGUuYikpO2Z1bmN0aW9uIGRlYnVnU3RyaW5nKHZhbCl7Y29uc3QgdHlwZT10eXBlb2YgdmFsO2lmKCJudW1iZXIiPT10eXBlfHwiYm9vbGVhbiI9PXR5cGV8fG51bGw9PXZhbClyZXR1cm5gJHt2YWx9YDtpZigic3RyaW5nIj09dHlwZSlyZXR1cm5gIiR7dmFsfSJgO2lmKCJzeW1ib2wiPT10eXBlKXtjb25zdCBkZXNjcmlwdGlvbj12YWwuZGVzY3JpcHRpb247cmV0dXJuIG51bGw9PWRlc2NyaXB0aW9uPyJTeW1ib2wiOmBTeW1ib2woJHtkZXNjcmlwdGlvbn0pYH1pZigiZnVuY3Rpb24iPT10eXBlKXtjb25zdCBuYW1lPXZhbC5uYW1lO3JldHVybiJzdHJpbmciPT10eXBlb2YgbmFtZSYmbmFtZS5sZW5ndGg+MD9gRnVuY3Rpb24oJHtuYW1lfSlgOiJGdW5jdGlvbiJ9aWYoQXJyYXkuaXNBcnJheSh2YWwpKXtjb25zdCBsZW5ndGg9dmFsLmxlbmd0aDtsZXQgZGVidWc9IlsiO2xlbmd0aD4wJiYoZGVidWcrPWRlYnVnU3RyaW5nKHZhbFswXSkpO2ZvcihsZXQgaT0xO2k8bGVuZ3RoO2krKylkZWJ1Zys9IiwgIitkZWJ1Z1N0cmluZyh2YWxbaV0pO3JldHVybiBkZWJ1Zys9Il0iLGRlYnVnfWNvbnN0IGJ1aWx0SW5NYXRjaGVzPS9cW29iamVjdCAoW15cXV0rKVxdLy5leGVjKHRvU3RyaW5nLmNhbGwodmFsKSk7bGV0IGNsYXNzTmFtZTtpZighKGJ1aWx0SW5NYXRjaGVzJiZidWlsdEluTWF0Y2hlcy5sZW5ndGg+MSkpcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKTtpZihjbGFzc05hbWU9YnVpbHRJbk1hdGNoZXNbMV0sIk9iamVjdCI9PWNsYXNzTmFtZSl0cnl7cmV0dXJuIk9iamVjdCgiK0pTT04uc3RyaW5naWZ5KHZhbCkrIikifWNhdGNoKF8pe3JldHVybiJPYmplY3QifXJldHVybiB2YWwgaW5zdGFuY2VvZiBFcnJvcj9gJHt2YWwubmFtZX06ICR7dmFsLm1lc3NhZ2V9XG4ke3ZhbC5zdGFja31gOmNsYXNzTmFtZX1mdW5jdGlvbiBkcm9wT2JqZWN0KGlkeCl7aWR4PDEzMnx8KGhlYXBbaWR4XT1oZWFwX25leHQsaGVhcF9uZXh0PWlkeCl9ZnVuY3Rpb24gZ2V0QXJyYXlKc1ZhbHVlRnJvbVdhc20wKHB0cixsZW4pe3B0cj4+Pj0wO2NvbnN0IG1lbT1nZXREYXRhVmlld01lbW9yeTAoKSxyZXN1bHQ9W107Zm9yKGxldCBpPXB0cjtpPHB0cis0KmxlbjtpKz00KXJlc3VsdC5wdXNoKHRha2VPYmplY3QobWVtLmdldFVpbnQzMihpLCEwKSkpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gZ2V0QXJyYXlVOEZyb21XYXNtMChwdHIsbGVuKXtyZXR1cm4gcHRyPj4+PTAsZ2V0VWludDhBcnJheU1lbW9yeTAoKS5zdWJhcnJheShwdHIvMSxwdHIvMStsZW4pfWxldCBjYWNoZWREYXRhVmlld01lbW9yeTA9bnVsbDtmdW5jdGlvbiBnZXREYXRhVmlld01lbW9yeTAoKXtyZXR1cm4gbnVsbCE9PWNhY2hlZERhdGFWaWV3TWVtb3J5MCYmY2FjaGVkRGF0YVZpZXdNZW1vcnkwLmJ1ZmZlcj09PXdhc20ubWVtb3J5LmJ1ZmZlcnx8KGNhY2hlZERhdGFWaWV3TWVtb3J5MD1uZXcgRGF0YVZpZXcod2FzbS5tZW1vcnkuYnVmZmVyKSksY2FjaGVkRGF0YVZpZXdNZW1vcnkwfWZ1bmN0aW9uIGdldFN0cmluZ0Zyb21XYXNtMChwdHIsbGVuKXtyZXR1cm4gZGVjb2RlVGV4dChwdHI+Pj49MCxsZW4pfWxldCBjYWNoZWRVaW50OEFycmF5TWVtb3J5MD1udWxsO2Z1bmN0aW9uIGdldFVpbnQ4QXJyYXlNZW1vcnkwKCl7cmV0dXJuIG51bGwhPT1jYWNoZWRVaW50OEFycmF5TWVtb3J5MCYmY2FjaGVkVWludDhBcnJheU1lbW9yeTAuYnVmZmVyPT09d2FzbS5tZW1vcnkuYnVmZmVyfHwoY2FjaGVkVWludDhBcnJheU1lbW9yeTA9bmV3IFVpbnQ4QXJyYXkod2FzbS5tZW1vcnkuYnVmZmVyKSksY2FjaGVkVWludDhBcnJheU1lbW9yeTB9ZnVuY3Rpb24gZ2V0T2JqZWN0KGlkeCl7cmV0dXJuIGhlYXBbaWR4XX1mdW5jdGlvbiBoYW5kbGVFcnJvcihmLGFyZ3Mpe3RyeXtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3MpfWNhdGNoKGUpe3dhc20uX193YmluZGdlbl9leHBvcnQzKGFkZEhlYXBPYmplY3QoZSkpfX1sZXQgaGVhcD1uZXcgQXJyYXkoMTI4KS5maWxsKHZvaWQgMCk7aGVhcC5wdXNoKHZvaWQgMCxudWxsLCEwLCExKTtsZXQgaGVhcF9uZXh0PWhlYXAubGVuZ3RoO2Z1bmN0aW9uIGlzTGlrZU5vbmUoeCl7cmV0dXJuIG51bGw9PXh9ZnVuY3Rpb24gbWFrZUNsb3N1cmUoYXJnMCxhcmcxLGR0b3IsZil7Y29uc3Qgc3RhdGU9e2E6YXJnMCxiOmFyZzEsY250OjEsZHRvcn0scmVhbD0oLi4uYXJncyk9PntzdGF0ZS5jbnQrKzt0cnl7cmV0dXJuIGYoc3RhdGUuYSxzdGF0ZS5iLC4uLmFyZ3MpfWZpbmFsbHl7cmVhbC5fd2JnX2NiX3VucmVmKCl9fTtyZXR1cm4gcmVhbC5fd2JnX2NiX3VucmVmPSgpPT57MD09PS0tc3RhdGUuY250JiYoc3RhdGUuZHRvcihzdGF0ZS5hLHN0YXRlLmIpLHN0YXRlLmE9MCxDTE9TVVJFX0RUT1JTLnVucmVnaXN0ZXIoc3RhdGUpKX0sQ0xPU1VSRV9EVE9SUy5yZWdpc3RlcihyZWFsLHN0YXRlLHN0YXRlKSxyZWFsfWZ1bmN0aW9uIG1ha2VNdXRDbG9zdXJlKGFyZzAsYXJnMSxkdG9yLGYpe2NvbnN0IHN0YXRlPXthOmFyZzAsYjphcmcxLGNudDoxLGR0b3J9LHJlYWw9KC4uLmFyZ3MpPT57c3RhdGUuY250Kys7Y29uc3QgYT1zdGF0ZS5hO3N0YXRlLmE9MDt0cnl7cmV0dXJuIGYoYSxzdGF0ZS5iLC4uLmFyZ3MpfWZpbmFsbHl7c3RhdGUuYT1hLHJlYWwuX3diZ19jYl91bnJlZigpfX07cmV0dXJuIHJlYWwuX3diZ19jYl91bnJlZj0oKT0+ezA9PT0tLXN0YXRlLmNudCYmKHN0YXRlLmR0b3Ioc3RhdGUuYSxzdGF0ZS5iKSxzdGF0ZS5hPTAsQ0xPU1VSRV9EVE9SUy51bnJlZ2lzdGVyKHN0YXRlKSl9LENMT1NVUkVfRFRPUlMucmVnaXN0ZXIocmVhbCxzdGF0ZSxzdGF0ZSkscmVhbH1mdW5jdGlvbiBwYXNzU3RyaW5nVG9XYXNtMChhcmcsbWFsbG9jLHJlYWxsb2Mpe2lmKHZvaWQgMD09PXJlYWxsb2Mpe2NvbnN0IGJ1Zj1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGUoYXJnKSxwdHI9bWFsbG9jKGJ1Zi5sZW5ndGgsMSk+Pj4wO3JldHVybiBnZXRVaW50OEFycmF5TWVtb3J5MCgpLnN1YmFycmF5KHB0cixwdHIrYnVmLmxlbmd0aCkuc2V0KGJ1ZiksV0FTTV9WRUNUT1JfTEVOPWJ1Zi5sZW5ndGgscHRyfWxldCBsZW49YXJnLmxlbmd0aCxwdHI9bWFsbG9jKGxlbiwxKT4+PjA7Y29uc3QgbWVtPWdldFVpbnQ4QXJyYXlNZW1vcnkwKCk7bGV0IG9mZnNldD0wO2Zvcig7b2Zmc2V0PGxlbjtvZmZzZXQrKyl7Y29uc3QgY29kZT1hcmcuY2hhckNvZGVBdChvZmZzZXQpO2lmKGNvZGU+MTI3KWJyZWFrO21lbVtwdHIrb2Zmc2V0XT1jb2RlfWlmKG9mZnNldCE9PWxlbil7MCE9PW9mZnNldCYmKGFyZz1hcmcuc2xpY2Uob2Zmc2V0KSkscHRyPXJlYWxsb2MocHRyLGxlbixsZW49b2Zmc2V0KzMqYXJnLmxlbmd0aCwxKT4+PjA7Y29uc3Qgdmlldz1nZXRVaW50OEFycmF5TWVtb3J5MCgpLnN1YmFycmF5KHB0citvZmZzZXQscHRyK2xlbik7b2Zmc2V0Kz1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGVJbnRvKGFyZyx2aWV3KS53cml0dGVuLHB0cj1yZWFsbG9jKHB0cixsZW4sb2Zmc2V0LDEpPj4+MH1yZXR1cm4gV0FTTV9WRUNUT1JfTEVOPW9mZnNldCxwdHJ9bGV0IHN0YWNrX3BvaW50ZXI9MTI4O2Z1bmN0aW9uIHRha2VPYmplY3QoaWR4KXtjb25zdCByZXQ9Z2V0T2JqZWN0KGlkeCk7cmV0dXJuIGRyb3BPYmplY3QoaWR4KSxyZXR9bGV0IGNhY2hlZFRleHREZWNvZGVyPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXI/bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIse2lnbm9yZUJPTTohMCxmYXRhbDohMH0pOnZvaWQgMDtjYWNoZWRUZXh0RGVjb2RlciYmY2FjaGVkVGV4dERlY29kZXIuZGVjb2RlKCk7Y29uc3QgTUFYX1NBRkFSSV9ERUNPREVfQllURVM9MjE0NjQzNTA3MjtsZXQgbnVtQnl0ZXNEZWNvZGVkPTA7ZnVuY3Rpb24gZGVjb2RlVGV4dChwdHIsbGVuKXtyZXR1cm4gbnVtQnl0ZXNEZWNvZGVkKz1sZW4sbnVtQnl0ZXNEZWNvZGVkPj1NQVhfU0FGQVJJX0RFQ09ERV9CWVRFUyYmKGNhY2hlZFRleHREZWNvZGVyPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiLHtpZ25vcmVCT006ITAsZmF0YWw6ITB9KSxjYWNoZWRUZXh0RGVjb2Rlci5kZWNvZGUoKSxudW1CeXRlc0RlY29kZWQ9bGVuKSxjYWNoZWRUZXh0RGVjb2Rlci5kZWNvZGUoZ2V0VWludDhBcnJheU1lbW9yeTAoKS5zbGljZShwdHIscHRyK2xlbikpfWNvbnN0IGNhY2hlZFRleHRFbmNvZGVyPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dEVuY29kZXI/bmV3IFRleHRFbmNvZGVyOnZvaWQgMDtjYWNoZWRUZXh0RW5jb2RlciYmKGNhY2hlZFRleHRFbmNvZGVyLmVuY29kZUludG89ZnVuY3Rpb24oYXJnLHZpZXcpe2NvbnN0IGJ1Zj1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGUoYXJnKTtyZXR1cm4gdmlldy5zZXQoYnVmKSx7cmVhZDphcmcubGVuZ3RoLHdyaXR0ZW46YnVmLmxlbmd0aH19KTtsZXQgV0FTTV9WRUNUT1JfTEVOPTAsd2FzbU1vZHVsZSx3YXNtO2Z1bmN0aW9uIF9fd2JnX2ZpbmFsaXplX2luaXQoaW5zdGFuY2UsbW9kdWxlLHRocmVhZF9zdGFja19zaXplKXtpZih3YXNtPWluc3RhbmNlLmV4cG9ydHMsd2FzbU1vZHVsZT1tb2R1bGUsY2FjaGVkRGF0YVZpZXdNZW1vcnkwPW51bGwsY2FjaGVkVWludDhBcnJheU1lbW9yeTA9bnVsbCx2b2lkIDAhPT10aHJlYWRfc3RhY2tfc2l6ZSYmKCJudW1iZXIiIT10eXBlb2YgdGhyZWFkX3N0YWNrX3NpemV8fDA9PT10aHJlYWRfc3RhY2tfc2l6ZXx8dGhyZWFkX3N0YWNrX3NpemUlNjU1MzYhPTApKXRocm93ImludmFsaWQgc3RhY2sgc2l6ZSI7cmV0dXJuIHdhc20uX193YmluZGdlbl9zdGFydCh0aHJlYWRfc3RhY2tfc2l6ZSksd2FzbX1hc3luYyBmdW5jdGlvbiBfX3diZ19sb2FkKG1vZHVsZSxpbXBvcnRzKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgUmVzcG9uc2UmJm1vZHVsZSBpbnN0YW5jZW9mIFJlc3BvbnNlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcpdHJ5e3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhtb2R1bGUsaW1wb3J0cyl9Y2F0Y2goZSl7aWYoIShtb2R1bGUub2smJmZ1bmN0aW9uIGV4cGVjdGVkUmVzcG9uc2VUeXBlKHR5cGUpe3N3aXRjaCh0eXBlKXtjYXNlImJhc2ljIjpjYXNlImNvcnMiOmNhc2UiZGVmYXVsdCI6cmV0dXJuITB9cmV0dXJuITF9KG1vZHVsZS50eXBlKSl8fCJhcHBsaWNhdGlvbi93YXNtIj09PW1vZHVsZS5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIikpdGhyb3cgZTtjb25zb2xlLndhcm4oImBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZ2AgZmFpbGVkIGJlY2F1c2UgeW91ciBzZXJ2ZXIgZG9lcyBub3Qgc2VydmUgV2FzbSB3aXRoIGBhcHBsaWNhdGlvbi93YXNtYCBNSU1FIHR5cGUuIEZhbGxpbmcgYmFjayB0byBgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVgIHdoaWNoIGlzIHNsb3dlci4gT3JpZ2luYWwgZXJyb3I6XG4iLGUpfWNvbnN0IGJ5dGVzPWF3YWl0IG1vZHVsZS5hcnJheUJ1ZmZlcigpO3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShieXRlcyxpbXBvcnRzKX17Y29uc3QgaW5zdGFuY2U9YXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobW9kdWxlLGltcG9ydHMpO3JldHVybiBpbnN0YW5jZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lkluc3RhbmNlP3tpbnN0YW5jZSxtb2R1bGV9Omluc3RhbmNlfX1mdW5jdGlvbiBpbml0U3luYyhtb2R1bGUsbWVtb3J5KXtpZih2b2lkIDAhPT13YXNtKXJldHVybiB3YXNtO2xldCB0aHJlYWRfc3RhY2tfc2l6ZTt2b2lkIDAhPT1tb2R1bGUmJihPYmplY3QuZ2V0UHJvdG90eXBlT2YobW9kdWxlKT09PU9iamVjdC5wcm90b3R5cGU/KHttb2R1bGUsbWVtb3J5LHRocmVhZF9zdGFja19zaXplfT1tb2R1bGUpOmNvbnNvbGUud2FybigidXNpbmcgZGVwcmVjYXRlZCBwYXJhbWV0ZXJzIGZvciBgaW5pdFN5bmMoKWA7IHBhc3MgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQiKSk7Y29uc3QgaW1wb3J0cz1fX3diZ19nZXRfaW1wb3J0cyhtZW1vcnkpO21vZHVsZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZXx8KG1vZHVsZT1uZXcgV2ViQXNzZW1ibHkuTW9kdWxlKG1vZHVsZSkpO3JldHVybiBfX3diZ19maW5hbGl6ZV9pbml0KG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsaW1wb3J0cyksbW9kdWxlLHRocmVhZF9zdGFja19zaXplKX1hc3luYyBmdW5jdGlvbiBfX3diZ19pbml0KG1vZHVsZV9vcl9wYXRoLG1lbW9yeSl7aWYodm9pZCAwIT09d2FzbSlyZXR1cm4gd2FzbTtsZXQgdGhyZWFkX3N0YWNrX3NpemU7dm9pZCAwIT09bW9kdWxlX29yX3BhdGgmJihPYmplY3QuZ2V0UHJvdG90eXBlT2YobW9kdWxlX29yX3BhdGgpPT09T2JqZWN0LnByb3RvdHlwZT8oe21vZHVsZV9vcl9wYXRoLG1lbW9yeSx0aHJlYWRfc3RhY2tfc2l6ZX09bW9kdWxlX29yX3BhdGgpOmNvbnNvbGUud2FybigidXNpbmcgZGVwcmVjYXRlZCBwYXJhbWV0ZXJzIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb247IHBhc3MgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQiKSksdm9pZCAwPT09bW9kdWxlX29yX3BhdGgmJihtb2R1bGVfb3JfcGF0aD1uZXcgVVJMKF9fd2VicGFja19yZXF1aXJlX18oIi4vc3JjL3V0b28vaW5kZXhfYmcud2FzbSIpLF9fd2VicGFja19yZXF1aXJlX18uYikpO2NvbnN0IGltcG9ydHM9X193YmdfZ2V0X2ltcG9ydHMobWVtb3J5KTsoInN0cmluZyI9PXR5cGVvZiBtb2R1bGVfb3JfcGF0aHx8ImZ1bmN0aW9uIj09dHlwZW9mIFJlcXVlc3QmJm1vZHVsZV9vcl9wYXRoIGluc3RhbmNlb2YgUmVxdWVzdHx8ImZ1bmN0aW9uIj09dHlwZW9mIFVSTCYmbW9kdWxlX29yX3BhdGggaW5zdGFuY2VvZiBVUkwpJiYobW9kdWxlX29yX3BhdGg9ZmV0Y2gobW9kdWxlX29yX3BhdGgpKTtjb25zdHtpbnN0YW5jZSxtb2R1bGV9PWF3YWl0IF9fd2JnX2xvYWQoYXdhaXQgbW9kdWxlX29yX3BhdGgsaW1wb3J0cyk7cmV0dXJuIF9fd2JnX2ZpbmFsaXplX2luaXQoaW5zdGFuY2UsbW9kdWxlLHRocmVhZF9zdGFja19zaXplKX19LCIuL3NyYy91dG9vL2luZGV4X2JnLndhc20iKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7bW9kdWxlLmV4cG9ydHM9X193ZWJwYWNrX3JlcXVpcmVfXy5wKyI2OWM5M2FmZjI5NjhlMDAxMWVlZi53YXNtIn19LF9fd2VicGFja19tb2R1bGVfY2FjaGVfXz17fTtmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKXt2YXIgY2FjaGVkTW9kdWxlPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07aWYodm9pZCAwIT09Y2FjaGVkTW9kdWxlKXJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0czt2YXIgbW9kdWxlPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF09e2V4cG9ydHM6e319O3JldHVybiBfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsbW9kdWxlLmV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyksbW9kdWxlLmV4cG9ydHN9X193ZWJwYWNrX3JlcXVpcmVfXy5tPV9fd2VicGFja19tb2R1bGVzX18sX193ZWJwYWNrX3JlcXVpcmVfXy5kPShleHBvcnRzLGRlZmluaXRpb24pPT57Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbilfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbixrZXkpJiYhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsa2V5KSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsa2V5LHtlbnVtZXJhYmxlOiEwLGdldDpkZWZpbml0aW9uW2tleV19KX0sX193ZWJwYWNrX3JlcXVpcmVfXy5nPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2goZSl7aWYoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksX193ZWJwYWNrX3JlcXVpcmVfXy5vPShvYmoscHJvcCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmoscHJvcCksKCgpPT57dmFyIHNjcmlwdFVybDtfX3dlYnBhY2tfcmVxdWlyZV9fLmcuaW1wb3J0U2NyaXB0cyYmKHNjcmlwdFVybD1fX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24rIiIpO3ZhciBkb2N1bWVudD1fX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7aWYoIXNjcmlwdFVybCYmZG9jdW1lbnQmJihkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYiU0NSSVBUIj09PWRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZS50b1VwcGVyQ2FzZSgpJiYoc2NyaXB0VXJsPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSwhc2NyaXB0VXJsKSl7dmFyIHNjcmlwdHM9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpO2lmKHNjcmlwdHMubGVuZ3RoKWZvcih2YXIgaT1zY3JpcHRzLmxlbmd0aC0xO2k+LTEmJighc2NyaXB0VXJsfHwhL15odHRwKHM/KTovLnRlc3Qoc2NyaXB0VXJsKSk7KXNjcmlwdFVybD1zY3JpcHRzW2ktLV0uc3JjfWlmKCFzY3JpcHRVcmwpdGhyb3cgbmV3IEVycm9yKCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlciIpO3NjcmlwdFVybD1zY3JpcHRVcmwucmVwbGFjZSgvXmJsb2I6LywiIikucmVwbGFjZSgvIy4qJC8sIiIpLnJlcGxhY2UoL1w/LiokLywiIikucmVwbGFjZSgvXC9bXlwvXSskLywiLyIpLF9fd2VicGFja19yZXF1aXJlX18ucD1zY3JpcHRVcmx9KSgpLF9fd2VicGFja19yZXF1aXJlX18uYj1zZWxmLmxvY2F0aW9uKyIiO3ZhciBfX3dlYnBhY2tfZXhwb3J0c19fPXt9LF91dG9vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX189X193ZWJwYWNrX3JlcXVpcmVfXygiLi9zcmMvdXRvby9pbmRleC5qcyIpO3JldHVybiBzZWxmLndhc21fYmluZGdlbj1fdXRvb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fLlFSLF9fd2VicGFja19leHBvcnRzX189X193ZWJwYWNrX2V4cG9ydHNfXy5kZWZhdWx0LF9fd2VicGFja19leHBvcnRzX199KSgpKTs=";
1
+ export default "data:application/javascript;base64,IWZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsZmFjdG9yeSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1mYWN0b3J5KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxmYWN0b3J5KTtlbHNle3ZhciBhPWZhY3RvcnkoKTtmb3IodmFyIGkgaW4gYSkoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6cm9vdClbaV09YVtpXX19KHNlbGYsKCk9PigoKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgX193ZWJwYWNrX21vZHVsZXNfXz17Ii4vc3JjL3V0b28vaW5kZXguanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fd2VicGFja19leHBvcnRzX18sX193ZWJwYWNrX3JlcXVpcmVfXyl7X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18se1FSOigpPT5pbml0U3luY30pO2NsYXNzIEJ1aWxkT3B0aW9uc3tfX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsQnVpbGRPcHRpb25zRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX2J1aWxkb3B0aW9uc19mcmVlKHB0ciwwKX1nZXQgY29uZmlnKCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5idWlsZG9wdGlvbnNfY29uZmlnKHRoaXMuX193YmdfcHRyKSl9Y29uc3RydWN0b3IoKXtjb25zdCByZXQ9d2FzbS5idWlsZG9wdGlvbnNfbmV3KCk7cmV0dXJuIHRoaXMuX193YmdfcHRyPXJldD4+PjAsQnVpbGRPcHRpb25zRmluYWxpemF0aW9uLnJlZ2lzdGVyKHRoaXMsdGhpcy5fX3diZ19wdHIsdGhpcyksdGhpc31zZXQgY29uZmlnKHZhbCl7d2FzbS5idWlsZG9wdGlvbnNfc2V0X2NvbmZpZyh0aGlzLl9fd2JnX3B0cixhZGRIZWFwT2JqZWN0KHZhbCkpfWdldCBjbGVhbnVwKCl7cmV0dXJuIDAhPT13YXNtLl9fd2JnX2dldF9idWlsZG9wdGlvbnNfY2xlYW51cCh0aGlzLl9fd2JnX3B0cil9c2V0IGNsZWFudXAoYXJnMCl7d2FzbS5fX3diZ19zZXRfYnVpbGRvcHRpb25zX2NsZWFudXAodGhpcy5fX3diZ19wdHIsYXJnMCl9fVN5bWJvbC5kaXNwb3NlJiYoQnVpbGRPcHRpb25zLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09QnVpbGRPcHRpb25zLnByb3RvdHlwZS5mcmVlKTtjbGFzcyBDcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9uc3tfX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsQ3JlYXRlU3luY0FjY2Vzc0hhbmRsZU9wdGlvbnNGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfY3JlYXRlc3luY2FjY2Vzc2hhbmRsZW9wdGlvbnNfZnJlZShwdHIsMCl9fVN5bWJvbC5kaXNwb3NlJiYoQ3JlYXRlU3luY0FjY2Vzc0hhbmRsZU9wdGlvbnMucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1DcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9ucy5wcm90b3R5cGUuZnJlZSk7Y2xhc3MgRGlyRW50cnl7c3RhdGljIF9fd3JhcChwdHIpe3B0cj4+Pj0wO2NvbnN0IG9iaj1PYmplY3QuY3JlYXRlKERpckVudHJ5LnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLERpckVudHJ5RmluYWxpemF0aW9uLnJlZ2lzdGVyKG9iaixvYmouX193YmdfcHRyLG9iaiksb2JqfXRvSlNPTigpe3JldHVybntuYW1lOnRoaXMubmFtZSx0eXBlOnRoaXMudHlwZX19dG9TdHJpbmcoKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyl9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLERpckVudHJ5RmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX2RpcmVudHJ5X2ZyZWUocHRyLDApfWdldCBuYW1lKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5fX3diZ19nZXRfZGlyZW50cnlfbmFtZShyZXRwdHIsdGhpcy5fX3diZ19wdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19Z2V0IHR5cGUoKXtjb25zdCByZXQ9d2FzbS5fX3diZ19nZXRfZGlyZW50cnlfdHlwZSh0aGlzLl9fd2JnX3B0cik7cmV0dXJuIF9fd2JpbmRnZW5fZW51bV9EaXJFbnRyeVR5cGVbcmV0XX1zZXQgbmFtZShhcmcwKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKGFyZzAsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5fX3diZ19zZXRfZGlyZW50cnlfbmFtZSh0aGlzLl9fd2JnX3B0cixwdHIwLGxlbjApfXNldCB0eXBlKGFyZzApe3dhc20uX193Ymdfc2V0X2RpcmVudHJ5X3R5cGUodGhpcy5fX3diZ19wdHIsKF9fd2JpbmRnZW5fZW51bV9EaXJFbnRyeVR5cGUuaW5kZXhPZihhcmcwKSsxfHwzKS0xKX19ZnVuY3Rpb24gRVJSX0FCT1JUKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfQUJPUlQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9JTlZBTElEX1NUQVRFKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfSU5WQUxJRF9TVEFURShyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX0tFWV9BTFJFQURZX0VYSVNUUygpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20uRVJSX0tFWV9BTFJFQURZX0VYSVNUUyhyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX05PVF9BTExPV0VEKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfTk9UX0FMTE9XRUQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9OT1RfRk9VTkQoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLkVSUl9OT1RfRk9VTkQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9OT19NT0RJRklDQVRJT05fQUxMT1dFRCgpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20uRVJSX0tFWV9BTFJFQURZX0VYSVNUUyhyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX1FVT1RBX0VYQ0VFREVEKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfUVVPVEFfRVhDRUVERUQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9UWVBFX01JU01BVENIKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfVFlQRV9NSVNNQVRDSChyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19U3ltYm9sLmRpc3Bvc2UmJihEaXJFbnRyeS5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPURpckVudHJ5LnByb3RvdHlwZS5mcmVlKTtjbGFzcyBGc3tfX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsRnNGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfZnNfZnJlZShwdHIsMCl9c3RhdGljIGNvcHlGaWxlKHNyYyxkc3Qpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoc3JjLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOLHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoZHN0LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfY29weUZpbGUocHRyMCxsZW4wLHB0cjEsbGVuMSkpfXN0YXRpYyBjb3B5RmlsZVN5bmMoc3JjLGRzdCl7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KSxwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHNyYyx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTixwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGRzdCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4xPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX2NvcHlGaWxlU3luYyhyZXRwdHIscHRyMCxsZW4wLHB0cjEsbGVuMSk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgY3JlYXRlRGlyKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX2NyZWF0ZURpcihwdHIwLGxlbjApKX1zdGF0aWMgY3JlYXRlRGlyQWxsKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX2NyZWF0ZURpckFsbChwdHIwLGxlbjApKX1zdGF0aWMgY3JlYXRlRGlyQWxsU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX2NyZWF0ZURpckFsbFN5bmMocmV0cHRyLHB0cjAsbGVuMCk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgY3JlYXRlRGlyU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX2NyZWF0ZURpclN5bmMocmV0cHRyLHB0cjAsbGVuMCk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgbWV0YWRhdGEocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfbWV0YWRhdGEocHRyMCxsZW4wKSl9c3RhdGljIG1ldGFkYXRhU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX21ldGFkYXRhU3luYyhyZXRwdHIscHRyMCxsZW4wKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrOCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMSk7cmV0dXJuIE1ldGFkYXRhLl9fd3JhcChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgcmVhZChwYXRoKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5mc19yZWFkKHB0cjAsbGVuMCkpfXN0YXRpYyByZWFkRGlyKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3JlYWREaXIocHRyMCxsZW4wKSl9c3RhdGljIHJlYWREaXJTeW5jKHBhdGgpe3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNikscHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uZnNfcmVhZERpclN5bmMocmV0cHRyLHB0cjAsbGVuMCk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkscjI9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzgsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cisxMiwhMCkpdGhyb3cgdGFrZU9iamVjdChyMik7dmFyIHYyPWdldEFycmF5SnNWYWx1ZUZyb21XYXNtMChyMCxyMSkuc2xpY2UoKTtyZXR1cm4gd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQocjAsNCpyMSw0KSx2Mn1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyByZWFkU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX3JlYWRTeW5jKHJldHB0cixwdHIwLGxlbjApO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis4LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIxKTtyZXR1cm4gdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgcmVhZFRvU3RyaW5nKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3JlYWRUb1N0cmluZyhwdHIwLGxlbjApKX1zdGF0aWMgcmVtb3ZlRGlyKHBhdGgscmVjdXJzaXZlKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5mc19yZW1vdmVEaXIocHRyMCxsZW4wLHJlY3Vyc2l2ZSkpfXN0YXRpYyByZW1vdmVEaXJTeW5jKHBhdGgscmVjdXJzaXZlKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX3JlbW92ZURpclN5bmMocmV0cHRyLHB0cjAsbGVuMCxyZWN1cnNpdmUpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCk7aWYoZ2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApKXRocm93IHRha2VPYmplY3QocjApfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KX19c3RhdGljIHJlbW92ZUZpbGUocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfcmVtb3ZlRmlsZShwdHIwLGxlbjApKX1zdGF0aWMgcmVtb3ZlRmlsZVN5bmMocGF0aCl7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KSxwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5mc19yZW1vdmVGaWxlU3luYyhyZXRwdHIscHRyMCxsZW4wKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyB3cml0ZShwYXRoLGNvbnRlbnQpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3dyaXRlKHB0cjAsbGVuMCxhZGRIZWFwT2JqZWN0KGNvbnRlbnQpKSl9c3RhdGljIHdyaXRlU3RyaW5nKHBhdGgsY29udGVudCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOLHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoY29udGVudCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4xPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3dyaXRlU3RyaW5nKHB0cjAsbGVuMCxwdHIxLGxlbjEpKX1zdGF0aWMgd3JpdGVTeW5jKHBhdGgsY29udGVudCl7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KSxwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5mc193cml0ZVN5bmMocmV0cHRyLHB0cjAsbGVuMCxhZGRIZWFwT2JqZWN0KGNvbnRlbnQpKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fX1TeW1ib2wuZGlzcG9zZSYmKEZzLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09RnMucHJvdG90eXBlLmZyZWUpO2NsYXNzIE1ldGFkYXRhe3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShNZXRhZGF0YS5wcm90b3R5cGUpO3JldHVybiBvYmouX193YmdfcHRyPXB0cixNZXRhZGF0YUZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian10b0pTT04oKXtyZXR1cm57ZmlsZV9zaXplOnRoaXMuZmlsZV9zaXplLHR5cGU6dGhpcy50eXBlfX10b1N0cmluZygpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzKX1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsTWV0YWRhdGFGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfbWV0YWRhdGFfZnJlZShwdHIsMCl9Z2V0IGZpbGVfc2l6ZSgpe2NvbnN0IHJldD13YXNtLl9fd2JnX2dldF9tZXRhZGF0YV9maWxlX3NpemUodGhpcy5fX3diZ19wdHIpO3JldHVybiBCaWdJbnQuYXNVaW50Tig2NCxyZXQpfWdldCB0eXBlKCl7Y29uc3QgcmV0PXdhc20uX193YmdfZ2V0X21ldGFkYXRhX3R5cGUodGhpcy5fX3diZ19wdHIpO3JldHVybiBfX3diaW5kZ2VuX2VudW1fRGlyRW50cnlUeXBlW3JldF19c2V0IGZpbGVfc2l6ZShhcmcwKXt3YXNtLl9fd2JnX3NldF9tZXRhZGF0YV9maWxlX3NpemUodGhpcy5fX3diZ19wdHIsYXJnMCl9c2V0IHR5cGUoYXJnMCl7d2FzbS5fX3diZ19zZXRfbWV0YWRhdGFfdHlwZSh0aGlzLl9fd2JnX3B0ciwoX193YmluZGdlbl9lbnVtX0RpckVudHJ5VHlwZS5pbmRleE9mKGFyZzApKzF8fDMpLTEpfX1TeW1ib2wuZGlzcG9zZSYmKE1ldGFkYXRhLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09TWV0YWRhdGEucHJvdG90eXBlLmZyZWUpO2NsYXNzIFByb2plY3R7X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFByb2plY3RGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfcHJvamVjdF9mcmVlKHB0ciwwKX1zdGF0aWMgYnVpbGQob3B0aW9ucyl7X2Fzc2VydENsYXNzKG9wdGlvbnMsQnVpbGRPcHRpb25zKTt2YXIgcHRyMD1vcHRpb25zLl9fZGVzdHJveV9pbnRvX3JhdygpO3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9idWlsZChwdHIwKSl9c3RhdGljIGdldCBjd2QoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLnByb2plY3RfY3dkKHJldHB0cik7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCk7cmV0dXJuIGRlZmVycmVkMV8wPXIwLGRlZmVycmVkMV8xPXIxLGdldFN0cmluZ0Zyb21XYXNtMChyMCxyMSl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpLHdhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMV8wLGRlZmVycmVkMV8xLDEpfX1zdGF0aWMgZGVwcyhyZWdpc3RyeSxjb25jdXJyZW5jeSl7dmFyIHB0cjA9aXNMaWtlTm9uZShyZWdpc3RyeSk/MDpwYXNzU3RyaW5nVG9XYXNtMChyZWdpc3RyeSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnByb2plY3RfZGVwcyhwdHIwLGxlbjAsaXNMaWtlTm9uZShjb25jdXJyZW5jeSk/NDI5NDk2NzI5Nzpjb25jdXJyZW5jeT4+PjApKX1zdGF0aWMgZW50cnlwb2ludHNTdWJzY3JpYmUoY29uZmlnLGNhbGxiYWNrKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnByb2plY3RfZW50cnlwb2ludHNTdWJzY3JpYmUoYWRkSGVhcE9iamVjdChjb25maWcpLGFkZEhlYXBPYmplY3QoY2FsbGJhY2spKSl9c3RhdGljIGd6aXAoZmlsZXMpe3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9nemlwKGFkZEhlYXBPYmplY3QoZmlsZXMpKSl9c3RhdGljIGhtckV2ZW50cyhpZGVudGlmaWVyLGNhbGxiYWNrKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKGlkZW50aWZpZXIsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5wcm9qZWN0X2htckV2ZW50cyhwdHIwLGxlbjAsYWRkSGVhcE9iamVjdChjYWxsYmFjaykpKX1zdGF0aWMgaW5pdCh0aHJlYWRfdXJsKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHRocmVhZF91cmwsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5wcm9qZWN0X2luaXQocHRyMCxsZW4wKX1zdGF0aWMgaW5zdGFsbChwYWNrYWdlX2xvY2ssbWF4X2NvbmN1cnJlbnRfZG93bmxvYWRzKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhY2thZ2VfbG9jayx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnByb2plY3RfaW5zdGFsbChwdHIwLGxlbjAsaXNMaWtlTm9uZShtYXhfY29uY3VycmVudF9kb3dubG9hZHMpPzQyOTQ5NjcyOTc6bWF4X2NvbmN1cnJlbnRfZG93bmxvYWRzPj4+MCkpfXN0YXRpYyBzZXRDd2QocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20ucHJvamVjdF9zZXRDd2QocHRyMCxsZW4wKX1zdGF0aWMgc2lnTWQ1KGNvbnRlbnQpe3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9zaWdNZDUoYWRkSGVhcE9iamVjdChjb250ZW50KSkpfXN0YXRpYyB1cGRhdGVJbmZvU3Vic2NyaWJlKGFnZ3JlZ2F0aW9uX21zLGNhbGxiYWNrKXt3YXNtLnByb2plY3RfdXBkYXRlSW5mb1N1YnNjcmliZShhZ2dyZWdhdGlvbl9tcyxhZGRIZWFwT2JqZWN0KGNhbGxiYWNrKSl9c3RhdGljIHdyaXRlQWxsVG9EaXNrKGNhbGxiYWNrKXt3YXNtLnByb2plY3Rfd3JpdGVBbGxUb0Rpc2soYWRkSGVhcE9iamVjdChjYWxsYmFjaykpfX1TeW1ib2wuZGlzcG9zZSYmKFByb2plY3QucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1Qcm9qZWN0LnByb3RvdHlwZS5mcmVlKTtjbGFzcyBSb290VGFza3tzdGF0aWMgX193cmFwKHB0cil7cHRyPj4+PTA7Y29uc3Qgb2JqPU9iamVjdC5jcmVhdGUoUm9vdFRhc2sucHJvdG90eXBlKTtyZXR1cm4gb2JqLl9fd2JnX3B0cj1wdHIsUm9vdFRhc2tGaW5hbGl6YXRpb24ucmVnaXN0ZXIob2JqLG9iai5fX3diZ19wdHIsb2JqKSxvYmp9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFJvb3RUYXNrRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3Jvb3R0YXNrX2ZyZWUocHRyLDApfX1TeW1ib2wuZGlzcG9zZSYmKFJvb3RUYXNrLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09Um9vdFRhc2sucHJvdG90eXBlLmZyZWUpO2NsYXNzIFdhc21UYXNrTWVzc2FnZXtzdGF0aWMgX193cmFwKHB0cil7cHRyPj4+PTA7Y29uc3Qgb2JqPU9iamVjdC5jcmVhdGUoV2FzbVRhc2tNZXNzYWdlLnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLFdhc21UYXNrTWVzc2FnZUZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsV2FzbVRhc2tNZXNzYWdlRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3dhc210YXNrbWVzc2FnZV9mcmVlKHB0ciwwKX1nZXQgdGFza0lkKCl7cmV0dXJuIHdhc20uX193YmdfZ2V0X3dhc210YXNrbWVzc2FnZV90YXNrSWQodGhpcy5fX3diZ19wdHIpPj4+MH1zZXQgdGFza0lkKGFyZzApe3dhc20uX193Ymdfc2V0X3dhc210YXNrbWVzc2FnZV90YXNrSWQodGhpcy5fX3diZ19wdHIsYXJnMCl9Z2V0IGRhdGEoKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLndhc210YXNrbWVzc2FnZV9kYXRhKHRoaXMuX193YmdfcHRyKSl9fVN5bWJvbC5kaXNwb3NlJiYoV2FzbVRhc2tNZXNzYWdlLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09V2FzbVRhc2tNZXNzYWdlLnByb3RvdHlwZS5mcmVlKTtjbGFzcyBXZWJXb3JrZXJDcmVhdGlvbntzdGF0aWMgX193cmFwKHB0cil7cHRyPj4+PTA7Y29uc3Qgb2JqPU9iamVjdC5jcmVhdGUoV2ViV29ya2VyQ3JlYXRpb24ucHJvdG90eXBlKTtyZXR1cm4gb2JqLl9fd2JnX3B0cj1wdHIsV2ViV29ya2VyQ3JlYXRpb25GaW5hbGl6YXRpb24ucmVnaXN0ZXIob2JqLG9iai5fX3diZ19wdHIsb2JqKSxvYmp9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFdlYldvcmtlckNyZWF0aW9uRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3dlYndvcmtlcmNyZWF0aW9uX2ZyZWUocHRyLDApfWdldCBvcHRpb25zKCl7Y29uc3QgcmV0PXdhc20uX193YmdfZ2V0X3dlYndvcmtlcmNyZWF0aW9uX29wdGlvbnModGhpcy5fX3diZ19wdHIpO3JldHVybiBXZWJXb3JrZXJPcHRpb25zLl9fd3JhcChyZXQpfXNldCBvcHRpb25zKGFyZzApe19hc3NlcnRDbGFzcyhhcmcwLFdlYldvcmtlck9wdGlvbnMpO3ZhciBwdHIwPWFyZzAuX19kZXN0cm95X2ludG9fcmF3KCk7d2FzbS5fX3diZ19zZXRfd2Vid29ya2VyY3JlYXRpb25fb3B0aW9ucyh0aGlzLl9fd2JnX3B0cixwdHIwKX19U3ltYm9sLmRpc3Bvc2UmJihXZWJXb3JrZXJDcmVhdGlvbi5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPVdlYldvcmtlckNyZWF0aW9uLnByb3RvdHlwZS5mcmVlKTtjbGFzcyBXZWJXb3JrZXJPcHRpb25ze3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShXZWJXb3JrZXJPcHRpb25zLnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLFdlYldvcmtlck9wdGlvbnNGaW5hbGl6YXRpb24ucmVnaXN0ZXIob2JqLG9iai5fX3diZ19wdHIsb2JqKSxvYmp9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFdlYldvcmtlck9wdGlvbnNGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfd2Vid29ya2Vyb3B0aW9uc19mcmVlKHB0ciwwKX1nZXQgY3dkKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5fX3diZ19nZXRfd2Vid29ya2Vyb3B0aW9uc19jd2QocmV0cHRyLHRoaXMuX193YmdfcHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWdldCBmaWxlbmFtZSgpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20uX193YmdfZ2V0X3dlYndvcmtlcm9wdGlvbnNfZmlsZW5hbWUocmV0cHRyLHRoaXMuX193YmdfcHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fXNldCBjd2QoYXJnMCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChhcmcwLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uX193Ymdfc2V0X3dlYndvcmtlcm9wdGlvbnNfY3dkKHRoaXMuX193YmdfcHRyLHB0cjAsbGVuMCl9c2V0IGZpbGVuYW1lKGFyZzApe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoYXJnMCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLl9fd2JnX3NldF93ZWJ3b3JrZXJvcHRpb25zX2ZpbGVuYW1lKHRoaXMuX193YmdfcHRyLHB0cjAsbGVuMCl9fVN5bWJvbC5kaXNwb3NlJiYoV2ViV29ya2VyT3B0aW9ucy5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPVdlYldvcmtlck9wdGlvbnMucHJvdG90eXBlLmZyZWUpO2NsYXNzIFdlYldvcmtlclRlcm1pbmF0aW9ue3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShXZWJXb3JrZXJUZXJtaW5hdGlvbi5wcm90b3R5cGUpO3JldHVybiBvYmouX193YmdfcHRyPXB0cixXZWJXb3JrZXJUZXJtaW5hdGlvbkZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsV2ViV29ya2VyVGVybWluYXRpb25GaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfd2Vid29ya2VydGVybWluYXRpb25fZnJlZShwdHIsMCl9Z2V0IG9wdGlvbnMoKXtjb25zdCByZXQ9d2FzbS5fX3diZ19nZXRfd2Vid29ya2VydGVybWluYXRpb25fb3B0aW9ucyh0aGlzLl9fd2JnX3B0cik7cmV0dXJuIFdlYldvcmtlck9wdGlvbnMuX193cmFwKHJldCl9Z2V0IHdvcmtlcklkKCl7cmV0dXJuIHdhc20uX193YmdfZ2V0X3dlYndvcmtlcnRlcm1pbmF0aW9uX3dvcmtlcklkKHRoaXMuX193YmdfcHRyKT4+PjB9c2V0IG9wdGlvbnMoYXJnMCl7X2Fzc2VydENsYXNzKGFyZzAsV2ViV29ya2VyT3B0aW9ucyk7dmFyIHB0cjA9YXJnMC5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3NldF93ZWJ3b3JrZXJ0ZXJtaW5hdGlvbl9vcHRpb25zKHRoaXMuX193YmdfcHRyLHB0cjApfXNldCB3b3JrZXJJZChhcmcwKXt3YXNtLl9fd2JnX3NldF93ZWJ3b3JrZXJ0ZXJtaW5hdGlvbl93b3JrZXJJZCh0aGlzLl9fd2JnX3B0cixhcmcwKX19ZnVuY3Rpb24gZ2V0V2FzbU1lbW9yeSgpe3JldHVybiB0YWtlT2JqZWN0KHdhc20uZ2V0V2FzbU1lbW9yeSgpKX1mdW5jdGlvbiBnZXRXYXNtTW9kdWxlKCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5nZXRXYXNtTW9kdWxlKCkpfWZ1bmN0aW9uIGluaXRMb2dGaWx0ZXIoZmlsdGVyKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKGZpbHRlcix3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmluaXRMb2dGaWx0ZXIocHRyMCxsZW4wKX1mdW5jdGlvbiBpbml0X3BhY2soKXt3YXNtLmluaXRfcGFjaygpfWZ1bmN0aW9uIHJlY3ZUYXNrTWVzc2FnZUluV29ya2VyKHdvcmtlcl9pZCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5yZWN2VGFza01lc3NhZ2VJbldvcmtlcih3b3JrZXJfaWQpKX1mdW5jdGlvbiByZWdpc3RlcldvcmtlclNjaGVkdWxlcihjcmVhdG9yLHRlcm1pbmF0b3Ipe3dhc20ucmVnaXN0ZXJXb3JrZXJTY2hlZHVsZXIoYWRkSGVhcE9iamVjdChjcmVhdG9yKSxhZGRIZWFwT2JqZWN0KHRlcm1pbmF0b3IpKX1mdW5jdGlvbiBzZW5kVGFza01lc3NhZ2UobWVzc2FnZSl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5zZW5kVGFza01lc3NhZ2UoYWRkSGVhcE9iamVjdChtZXNzYWdlKSkpfWZ1bmN0aW9uIHdhc21fdGhyZWFkX2VudHJ5X3BvaW50KHB0cil7d2FzbS53YXNtX3RocmVhZF9lbnRyeV9wb2ludChwdHIpfWZ1bmN0aW9uIHdvcmtlckNyZWF0ZWQod29ya2VyX2lkKXt3YXNtLndvcmtlckNyZWF0ZWQod29ya2VyX2lkKX1mdW5jdGlvbiBfX3diZ19nZXRfaW1wb3J0cyhtZW1vcnkpe2NvbnN0IGltcG9ydDA9e19fcHJvdG9fXzpudWxsLF9fd2JnX0Vycm9yXzhjNGU0M2ZlNzQ1NTlkNzM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChFcnJvcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSkpfSxfX3diZ19fX3diaW5kZ2VuX2RlYnVnX3N0cmluZ18wYmM4NDgyYzZlMzUwOGFlOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Y29uc3QgcHRyMT1wYXNzU3RyaW5nVG9XYXNtMChkZWJ1Z1N0cmluZyhnZXRPYmplY3QoYXJnMSkpLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX19fd2JpbmRnZW5faXNfZnVuY3Rpb25fMDA5NWE3M2I4YjE1NmY3NjpmdW5jdGlvbihhcmcwKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZ2V0T2JqZWN0KGFyZzApfSxfX3diZ19fX3diaW5kZ2VuX2lzX251bGxfYWMzNGY1MDAzOTkxNzU5YTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gbnVsbD09PWdldE9iamVjdChhcmcwKX0sX193YmdfX193YmluZGdlbl9pc19vYmplY3RfNWFlOGU1ODgwZjJjMWZiZDpmdW5jdGlvbihhcmcwKXtjb25zdCB2YWw9Z2V0T2JqZWN0KGFyZzApO3JldHVybiJvYmplY3QiPT10eXBlb2YgdmFsJiZudWxsIT09dmFsfSxfX3diZ19fX3diaW5kZ2VuX2lzX3VuZGVmaW5lZF85ZTRkOTI1MzRjNDJkNzc4OmZ1bmN0aW9uKGFyZzApe3JldHVybiB2b2lkIDA9PT1nZXRPYmplY3QoYXJnMCl9LF9fd2JnX19fd2JpbmRnZW5fbWVtb3J5X2JkMWZiY2YyMWZiZWYzYzg6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdCh3YXNtLm1lbW9yeSl9LF9fd2JnX19fd2JpbmRnZW5fbW9kdWxlX2Y2YjgwNTJkNzljMWNjMTY6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdCh3YXNtTW9kdWxlKX0sX193YmdfX193YmluZGdlbl9udW1iZXJfZ2V0XzhmZjQyNTU1MTZjY2FkM2U6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBvYmo9Z2V0T2JqZWN0KGFyZzEpLHJldD0ibnVtYmVyIj09dHlwZW9mIG9iaj9vYmo6dm9pZCAwO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEZsb2F0NjQoYXJnMCs4LGlzTGlrZU5vbmUocmV0KT8wOnJldCwhMCksZ2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCswLCFpc0xpa2VOb25lKHJldCksITApfSxfX3diZ19fX3diaW5kZ2VuX3JldGhyb3dfMDU1MjVjNTY3ZjE1NDQ3MjpmdW5jdGlvbihhcmcwKXt0aHJvdyB0YWtlT2JqZWN0KGFyZzApfSxfX3diZ19fX3diaW5kZ2VuX3N0cmluZ19nZXRfNzJmYjY5NjIwMmM1NjcyOTpmdW5jdGlvbihhcmcwLGFyZzEpe2NvbnN0IG9iaj1nZXRPYmplY3QoYXJnMSkscmV0PSJzdHJpbmciPT10eXBlb2Ygb2JqP29iajp2b2lkIDA7dmFyIHB0cjE9aXNMaWtlTm9uZShyZXQpPzA6cGFzc1N0cmluZ1RvV2FzbTAocmV0LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX19fd2JpbmRnZW5fdGhyb3dfYmUyODlkNTAzNGVkMjcxYjpmdW5jdGlvbihhcmcwLGFyZzEpe3Rocm93IG5ldyBFcnJvcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSl9LF9fd2JnX193YmdfY2JfdW5yZWZfZDliODdmZjc5ODJlM2IyMTpmdW5jdGlvbihhcmcwKXtnZXRPYmplY3QoYXJnMCkuX3diZ19jYl91bnJlZigpfSxfX3diZ19hYm9ydF8yZjA1ODRlMDNlOGUzOTUwOmZ1bmN0aW9uKGFyZzApe2dldE9iamVjdChhcmcwKS5hYm9ydCgpfSxfX3diZ19hYm9ydF9kNTQ5YjkyZDNjNjY1ZGUxOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmFib3J0KGdldE9iamVjdChhcmcxKSl9LF9fd2JnX2FwcGVuZF9hOTkyY2NjMzdhYTYyZGM0OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMsYXJnNCl7Z2V0T2JqZWN0KGFyZzApLmFwcGVuZChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMyxhcmc0KSl9LGFyZ3VtZW50cyl9LF9fd2JnX2FycmF5QnVmZmVyXzA1Y2UxYWYyM2U5MDY0ZTg6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmFycmF5QnVmZmVyKCkpfSxfX3diZ19hcnJheUJ1ZmZlcl9iYjU0MDc2MTY2MDA2YzM5OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5hcnJheUJ1ZmZlcigpKX0sYXJndW1lbnRzKX0sX193YmdfYXN5bmNfNzlmMmE2MWY5ZDBiMzFjZjpmdW5jdGlvbihhcmcwKXtyZXR1cm4gZ2V0T2JqZWN0KGFyZzApLmFzeW5jfSxfX3diZ19idWZmZXJfN2I1ZjUzZTQ2NTU3ZDhmMTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuYnVmZmVyKX0sX193YmdfY2FsbF8zODllZmUyODQzNWE5Mzg4OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNhbGwoZ2V0T2JqZWN0KGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX2NhbGxfNDcwOGUwYzEzYmRjOGU5NTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNhbGwoZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxhcmd1bWVudHMpfSxfX3diZ19jaGFuZ2VkSGFuZGxlXzEyMzY5NmVhZWFmZjMyZDc6ZnVuY3Rpb24oYXJnMCl7Y29uc3QgcmV0PWdldE9iamVjdChhcmcwKS5jaGFuZ2VkSGFuZGxlO3JldHVybiBpc0xpa2VOb25lKHJldCk/MDphZGRIZWFwT2JqZWN0KHJldCl9LF9fd2JnX2NsZWFyVGltZW91dF83YTQyYjQ5Nzg0YWVhNjQxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGNsZWFyVGltZW91dCh0YWtlT2JqZWN0KGFyZzApKSl9LF9fd2JnX2Nsb3NlXzRiYTMxMjI1M2M0MjQzNDI6ZnVuY3Rpb24oYXJnMCl7Z2V0T2JqZWN0KGFyZzApLmNsb3NlKCl9LF9fd2JnX2Nsb3NlXzgzZmI4MDlhY2EzZGU3Zjk6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNsb3NlKCkpfSxfX3diZ19jcmVhdGVPYmplY3RVUkxfOTE4MTg1ZGI2YTEwYTBjODpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2NvbnN0IHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoVVJMLmNyZWF0ZU9iamVjdFVSTChnZXRPYmplY3QoYXJnMSkpLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LGFyZ3VtZW50cyl9LF9fd2JnX2NyZWF0ZVdyaXRhYmxlXzgwYmM1ZGUzNzQ0NDhiNDI6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNyZWF0ZVdyaXRhYmxlKCkpfSxfX3diZ19kYXRhXzUzMzBkYTUwMzEyZDBiYzE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmRhdGEpfSxfX3diZ19kZWJ1Z180NmE5Mzk5NWZjNmY4ODIwOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe2NvbnNvbGUuZGVidWcoZ2V0T2JqZWN0KGFyZzApLGdldE9iamVjdChhcmcxKSxnZXRPYmplY3QoYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sX193YmdfZGVidWdfYTQwOTlmYTEyZGI2Y2Q2MTpmdW5jdGlvbihhcmcwKXtjb25zb2xlLmRlYnVnKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX2RpcmVudHJ5X25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChEaXJFbnRyeS5fX3dyYXAoYXJnMCkpfSxfX3diZ19kb25lXzU3YjM5ZWNkOWFkZGZlODE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5kb25lfSxfX3diZ19lbnRyaWVzXzA0YTRiOTgyMzUxYTcxN2Y6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmVudHJpZXMoKSl9LF9fd2JnX2Vycm9yXzc1MzRiOGU5YTM2ZjFhYjQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtsZXQgZGVmZXJyZWQwXzAsZGVmZXJyZWQwXzE7dHJ5e2RlZmVycmVkMF8wPWFyZzAsZGVmZXJyZWQwXzE9YXJnMSxjb25zb2xlLmVycm9yKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMF8wLGRlZmVycmVkMF8xLDEpfX0sX193YmdfZXJyb3JfNzk0ZDBmZmM5ZDAwZDVjMzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtjb25zb2xlLmVycm9yKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpLGdldE9iamVjdChhcmczKSl9LF9fd2JnX2Vycm9yXzlhN2ZlM2Y5MzIwMzRjZGU6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS5lcnJvcihnZXRPYmplY3QoYXJnMCkpfSxfX3diZ19ldmFsXzNmMGI5ZjBjYmFmNDVhMzQ6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCByZXQ9ZXZhbChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSk7cmV0dXJuIGFkZEhlYXBPYmplY3QocmV0KX0sYXJndW1lbnRzKX0sX193YmdfZmV0Y2hfNzRhM2U4NGViZDJjOWEwZTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChmZXRjaChnZXRPYmplY3QoYXJnMCkpKX0sX193YmdfZmV0Y2hfYWZiNmE0YjZjYWNmODc2ZDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5mZXRjaChnZXRPYmplY3QoYXJnMSkpKX0sX193YmdfZmx1c2hfMjJiNzg1MDYwNTkyY2E1ZjpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtnZXRPYmplY3QoYXJnMCkuZmx1c2goKX0sYXJndW1lbnRzKX0sX193YmdfZnJvbV9iZGRkNjRlN2Q1ZmY2OTQxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KEFycmF5LmZyb20oZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX2dldERpcmVjdG9yeUhhbmRsZV84N2NlOGNhNTNjZjRkOGRjOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXREaXJlY3RvcnlIYW5kbGUoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzEsYXJnMiksZ2V0T2JqZWN0KGFyZzMpKSl9LF9fd2JnX2dldERpcmVjdG9yeV9iNjZhZTNlNzlmOTAyOTgyOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXREaXJlY3RvcnkoKSl9LF9fd2JnX2dldEZpbGVIYW5kbGVfZmY0YWI5MTdiNDVhZmZiMzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuZ2V0RmlsZUhhbmRsZShnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRPYmplY3QoYXJnMykpKX0sX193YmdfZ2V0RmlsZV8xMTUzNTRmYzk1MGVkYzg4OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXRGaWxlKCkpfSxfX3diZ19nZXRSYW5kb21WYWx1ZXNfODA1NzhiMmZmMmEwOTNiYTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZ2V0T2JqZWN0KGFyZzApKX0sYXJndW1lbnRzKX0sX193YmdfZ2V0XzliOTRkNzNlNjIyMWY3NWM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMClbYXJnMT4+PjBdKX0sX193YmdfZ2V0X2IzZWQzYWQ0YmUyYmM4YWM6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChSZWZsZWN0LmdldChnZXRPYmplY3QoYXJnMCksZ2V0T2JqZWN0KGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX2hhc19kNGU1MzIzODk2NmMxMmI2OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIFJlZmxlY3QuaGFzKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSkpfSxhcmd1bWVudHMpfSxfX3diZ19oZWFkZXJzXzU5YTI5MzhkYjlmODA5ODU6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmhlYWRlcnMpfSxfX3diZ19pbmZvXzE0OGQwNDM4NDA1ODIwMTI6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS5pbmZvKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX2luZm9fOWU2MDJjZjEwYzVjNjkwYjpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtjb25zb2xlLmluZm8oZ2V0T2JqZWN0KGFyZzApLGdldE9iamVjdChhcmcxKSxnZXRPYmplY3QoYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sX193YmdfaW5zdGFuY2VvZl9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZV8xNTA2YjNkMDE3Nzk5ZDQ4OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlfWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pbnN0YW5jZW9mX0RvbUV4Y2VwdGlvbl85OWMxNzcxOTNlNTU0Yjc1OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbn1jYXRjaChfKXtyZXN1bHQ9ITF9cmV0dXJuIHJlc3VsdH0sX193YmdfaW5zdGFuY2VvZl9GaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlXzU2YTE2NzAzOWQ2MTQ1NDg6ZnVuY3Rpb24oYXJnMCl7bGV0IHJlc3VsdDt0cnl7cmVzdWx0PWdldE9iamVjdChhcmcwKWluc3RhbmNlb2YgRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZX1jYXRjaChfKXtyZXN1bHQ9ITF9cmV0dXJuIHJlc3VsdH0sX193YmdfaW5zdGFuY2VvZl9SZXNwb25zZV9lZTFkNTRkNzlhZTQxOTc3OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIFJlc3BvbnNlfWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pbnN0YW5jZW9mX1VpbnQ4QXJyYXlfOWI5MDc1OTM1Yzc0NzA3YzpmdW5jdGlvbihhcmcwKXtsZXQgcmVzdWx0O3RyeXtyZXN1bHQ9Z2V0T2JqZWN0KGFyZzApaW5zdGFuY2VvZiBVaW50OEFycmF5fWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pc0FycmF5X2QzMTRiYjk4ZmNmMDgzMzE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZ2V0T2JqZWN0KGFyZzApKX0sX193YmdfaXRlcmF0b3JfNmZmNjU2MGNhMTU2OGU1NTpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KFN5bWJvbC5pdGVyYXRvcil9LF9fd2JnX2tpbmRfOTA3NjlkNmMxNmZhZWFmZDpmdW5jdGlvbihhcmcwKXtjb25zdCByZXQ9Z2V0T2JqZWN0KGFyZzApLmtpbmQ7cmV0dXJuKF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtSGFuZGxlS2luZC5pbmRleE9mKHJldCkrMXx8MyktMX0sX193YmdfbGVuZ3RoXzMyZWQ5YTI3OWFjZDA1NGM6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5sZW5ndGh9LF9fd2JnX2xlbmd0aF8zNWE3YmFjZTQwZjM2ZWFjOmZ1bmN0aW9uKGFyZzApe3JldHVybiBnZXRPYmplY3QoYXJnMCkubGVuZ3RofSxfX3diZ19tZXNzYWdlXzBiMmIwMjk4YTIzMWIwZDQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS5tZXNzYWdlLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX21ldGFkYXRhX25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChNZXRhZGF0YS5fX3dyYXAoYXJnMCkpfSxfX3diZ19uYW1lXzI0Mjc1M2U1MTEwY2Q3NTY6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS5uYW1lLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX25hdmlnYXRvcl80NDc4OTMxZjMyZWJjYTU3OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5uYXZpZ2F0b3IpfSxfX3diZ19uZXdfMzYxMzA4YjIzNTZjZWNkMDpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBPYmplY3QpfSxfX3diZ19uZXdfM2ViMzZhZTI0MWZlNmY0NDpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBBcnJheSl9LF9fd2JnX25ld180ZjhmM2MxMjNlNDc0MzU4OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFdvcmtlcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXdfNjQyODRiZDQ4N2Y5ZDIzOTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBIZWFkZXJzKX0sYXJndW1lbnRzKX0sX193YmdfbmV3XzcyYzYyN2JhODBkZTFjMjE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEludDMyQXJyYXkoZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX25ld184YTZmMjM4YTZlY2U4NmVhOmZ1bmN0aW9uKCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEVycm9yKX0sX193YmdfbmV3XzhlYzU4MDFiMzlkNmY4NjI6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEZpbGVTeXN0ZW1PYnNlcnZlcihnZXRPYmplY3QoYXJnMCkpKX0sX193YmdfbmV3X2I1ZDllMmZiMzg5ZmVmOTE6ZnVuY3Rpb24oYXJnMCxhcmcxKXt0cnl7dmFyIHN0YXRlMD17YTphcmcwLGI6YXJnMX07Y29uc3QgcmV0PW5ldyBQcm9taXNlKChhcmcwLGFyZzEpPT57Y29uc3QgYT1zdGF0ZTAuYTtzdGF0ZTAuYT0wO3RyeXtyZXR1cm4gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzMzNDQoYSxzdGF0ZTAuYixhcmcwLGFyZzEpfWZpbmFsbHl7c3RhdGUwLmE9YX19KTtyZXR1cm4gYWRkSGVhcE9iamVjdChyZXQpfWZpbmFsbHl7c3RhdGUwLmE9c3RhdGUwLmI9MH19LF9fd2JnX25ld19iOTQ5ZTdmNTYxNTBhNWQxOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEFib3J0Q29udHJvbGxlcil9LGFyZ3VtZW50cyl9LF9fd2JnX25ld19kZDJiNjgwYzhiZjZhZTI5OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBVaW50OEFycmF5KGdldE9iamVjdChhcmcwKSkpfSxfX3diZ19uZXdfZnJvbV9zbGljZV9hM2QyNjI5ZGMxODI2Nzg0OmZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFVpbnQ4QXJyYXkoZ2V0QXJyYXlVOEZyb21XYXNtMChhcmcwLGFyZzEpKSl9LF9fd2JnX25ld19ub19hcmdzXzFjN2M4NDJmMDhkMDBlYmI6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgRnVuY3Rpb24oZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzAsYXJnMSkpKX0sX193YmdfbmV3X3dpdGhfbGVuZ3RoX2EyYzM5Y2JlODhmZDhmZjE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFVpbnQ4QXJyYXkoYXJnMD4+PjApKX0sX193YmdfbmV3X3dpdGhfb3B0aW9uc18xNDVhZmJhOTIyYWQzNzAzOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgV29ya2VyKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXdfd2l0aF9zdHJfYW5kX2luaXRfYTYxY2JjNmJkZWYyMTYxNDpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFJlcXVlc3QoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzAsYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX25ld193aXRoX3N0cl9zZXF1ZW5jZV9jZWEyYzA1NzFkNmRjNmFiOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBCbG9iKGdldE9iamVjdChhcmcwKSkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXh0XzBhNWUwZjhhZjk4MTQ2YWE6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLm5leHQoKSl9LGFyZ3VtZW50cyl9LF9fd2JnX25leHRfMzQ4MmY1NGM0OWU4YWYxOTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkubmV4dCgpKX0sYXJndW1lbnRzKX0sX193YmdfbmV4dF80MThmODBkOGY1MzAzMjMzOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5uZXh0KX0sX193Ymdfbm93XzBkYzQ5MjBhNDdjZjcyODA6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5ub3coKX0sX193Ymdfbm93X2EzYWY5YTJmNGJiYWE0ZDE6ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX0sX193Ymdfb2JzZXJ2ZV8zMjIzNWI1ZTYxOTVkNGFiOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkub2JzZXJ2ZShnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LF9fd2JnX29mX2RkYzA5NDJiMGRjZTE2YTE6ZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe3JldHVybiBhZGRIZWFwT2JqZWN0KEFycmF5Lm9mKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LF9fd2JnX3BhcnNlXzcwODQ2MWExZmVkZGZiMzg6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChKU09OLnBhcnNlKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX3BlcmZvcm1hbmNlXzZhZGMzYjg5OWU0NDhhMjM6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnBlcmZvcm1hbmNlKX0sX193YmdfcG9zdE1lc3NhZ2VfMjA0MWY0ZTkwYWY2MTMxODpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5wb3N0TWVzc2FnZShnZXRPYmplY3QoYXJnMSkpfSxhcmd1bWVudHMpfSxfX3diZ19wb3N0TWVzc2FnZV83NzFlZjMyOTNhMjhiYmFjOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLnBvc3RNZXNzYWdlKGdldE9iamVjdChhcmcxKSl9LGFyZ3VtZW50cyl9LF9fd2JnX3Byb3RvdHlwZXNldGNhbGxfYmRjZGNjNTg0MmU0ZDc3ZDpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZ2V0QXJyYXlVOEZyb21XYXNtMChhcmcwLGFyZzEpLGdldE9iamVjdChhcmcyKSl9LF9fd2JnX3B1c2hfOGZmZGNiMjA2MzM0MGJhNTpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBnZXRPYmplY3QoYXJnMCkucHVzaChnZXRPYmplY3QoYXJnMSkpfSxfX3diZ19xdWV1ZU1pY3JvdGFza18wYWEwYTkyN2Y3OGY1ZDk4OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5xdWV1ZU1pY3JvdGFzayl9LF9fd2JnX3F1ZXVlTWljcm90YXNrXzViYjUzNjk4MmY3OGE1NmY6ZnVuY3Rpb24oYXJnMCl7cXVldWVNaWNyb3Rhc2soZ2V0T2JqZWN0KGFyZzApKX0sX193YmdfcmFuZG9tXzkxMjI4NGRiZjYzNmYyNjk6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yYW5kb20oKX0sX193YmdfcmVsYXRpdmVQYXRoQ29tcG9uZW50c19iYzQ4MjQwM2NiNmQ3ZWE5OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5yZWxhdGl2ZVBhdGhDb21wb25lbnRzKX0sX193YmdfcmVtb3ZlRW50cnlfYzRlZmZmZGQzMThiNTFhMTpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkucmVtb3ZlRW50cnkoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzEsYXJnMiksZ2V0T2JqZWN0KGFyZzMpKSl9LF9fd2JnX3Jlc29sdmVfMDAyYzRiN2Q5ZDhmNmI2NDpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChQcm9taXNlLnJlc29sdmUoZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX3Jvb3R0YXNrX25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChSb290VGFzay5fX3dyYXAoYXJnMCkpfSxfX3diZ19zZXRUaW1lb3V0XzYzMDA4NjEzNjQ0YjA3YWY6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5zZXRUaW1lb3V0KGdldE9iamVjdChhcmcxKSxhcmcyKSl9LGFyZ3VtZW50cyl9LF9fd2JnX3NldFRpbWVvdXRfN2JiMzQyOTY2MmFiMWU3MDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KHNldFRpbWVvdXQoZ2V0T2JqZWN0KGFyZzApLGFyZzEpKX0sX193Ymdfc2V0X2F0X2U0NTNjZjNmNGJlOWUyZDk6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuYXQ9YXJnMX0sX193Ymdfc2V0X2JvZHlfOWE3ZTAwYWZlM2NmZTI0NDpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5ib2R5PWdldE9iamVjdChhcmcxKX0sX193Ymdfc2V0X2NhY2hlXzMxNWEzZWQ3NzNhNDE1NDM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuY2FjaGU9X193YmluZGdlbl9lbnVtX1JlcXVlc3RDYWNoZVthcmcxXX0sX193Ymdfc2V0X2NyZWF0ZV8xZjkwMmM1OTM2YWRkZTdkOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmNyZWF0ZT0wIT09YXJnMX0sX193Ymdfc2V0X2NyZWF0ZV9jOTVkZGNhMDE4ZmFjOWNlOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmNyZWF0ZT0wIT09YXJnMX0sX193Ymdfc2V0X2NyZWRlbnRpYWxzX2M0YTU4ZDJlMDVlZjI0ZmI6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuY3JlZGVudGlhbHM9X193YmluZGdlbl9lbnVtX1JlcXVlc3RDcmVkZW50aWFsc1thcmcxXX0sX193Ymdfc2V0X2Y0M2U1NzdhZWE5NDQ2NWI6ZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe2dldE9iamVjdChhcmcwKVthcmcxPj4+MF09dGFrZU9iamVjdChhcmcyKX0sX193Ymdfc2V0X2hlYWRlcnNfY2ZjNWY0YjJjMWYyMDU0OTpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5oZWFkZXJzPWdldE9iamVjdChhcmcxKX0sX193Ymdfc2V0X21ldGhvZF9jM2UyMDM3NWY1YWU3ZmFjOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtnZXRPYmplY3QoYXJnMCkubWV0aG9kPWdldFN0cmluZ0Zyb21XYXNtMChhcmcxLGFyZzIpfSxfX3diZ19zZXRfbW9kZV9iMTM2NDJjMzEyNjQ4MjAyOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLm1vZGU9X193YmluZGdlbl9lbnVtX1JlcXVlc3RNb2RlW2FyZzFdfSxfX3diZ19zZXRfbmFtZV80OWI5ZWNiYTdmNThmMmU1OmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtnZXRPYmplY3QoYXJnMCkubmFtZT1nZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKX0sX193Ymdfc2V0X29ubWVzc2FnZV82ZWQ0MTA1MGU0YTVjZWUyOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLm9ubWVzc2FnZT1nZXRPYmplY3QoYXJnMSl9LF9fd2JnX3NldF9yZWN1cnNpdmVfNjVlZDA3ZGY4OTJiNDg4NTpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5yZWN1cnNpdmU9MCE9PWFyZzF9LF9fd2JnX3NldF9yZWN1cnNpdmVfZjVkMzQxNjA5ODMyODExMDpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5yZWN1cnNpdmU9MCE9PWFyZzF9LF9fd2JnX3NldF9zaWduYWxfZjJkM2Y4NTk5MjQ4ODk2ZDpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5zaWduYWw9Z2V0T2JqZWN0KGFyZzEpfSxfX3diZ19zZXRfdHlwZV9lMTI3ZjI2Yjc4ZDc4YmZjOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLnR5cGU9X193YmluZGdlbl9lbnVtX1dvcmtlclR5cGVbYXJnMV19LF9fd2JnX3NpZ25hbF9kMTI4NWVjYWI0ZWJjNWFkOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5zaWduYWwpfSxfX3diZ19zaXplX2UwNWQzMWNjNjA0OTgxNWY6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5zaXplfSxfX3diZ19zbGljZV81NjZhMTVmMzIxNGZhNTJlOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMsYXJnNCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnNsaWNlKGFyZzEsYXJnMixnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMyxhcmc0KSkpfSxhcmd1bWVudHMpfSxfX3diZ19zdGFja18wZWQ3NWQ2ODU3NWIwZjNjOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Y29uc3QgcHRyMT1wYXNzU3RyaW5nVG9XYXNtMChnZXRPYmplY3QoYXJnMSkuc3RhY2ssd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMT1XQVNNX1ZFQ1RPUl9MRU47Z2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCs0LGxlbjEsITApLGdldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArMCxwdHIxLCEwKX0sX193Ymdfc3RhdGljX2FjY2Vzc29yX0dMT0JBTF8xMjgzNzE2N2FkOTM1MTE2OmZ1bmN0aW9uKCl7Y29uc3QgcmV0PXZvaWQgMD09PV9fd2VicGFja19yZXF1aXJlX18uZz9udWxsOl9fd2VicGFja19yZXF1aXJlX18uZztyZXR1cm4gaXNMaWtlTm9uZShyZXQpPzA6YWRkSGVhcE9iamVjdChyZXQpfSxfX3diZ19zdGF0aWNfYWNjZXNzb3JfR0xPQkFMX1RISVNfZTYyOGU4OWFiM2IxYzk1ZjpmdW5jdGlvbigpe2NvbnN0IHJldD0idW5kZWZpbmVkIj09dHlwZW9mIGdsb2JhbFRoaXM/bnVsbDpnbG9iYWxUaGlzO3JldHVybiBpc0xpa2VOb25lKHJldCk/MDphZGRIZWFwT2JqZWN0KHJldCl9LF9fd2JnX3N0YXRpY19hY2Nlc3Nvcl9TRUxGX2E2MjFkM2RmYmI2MGQwY2U6ZnVuY3Rpb24oKXtjb25zdCByZXQ9InVuZGVmaW5lZCI9PXR5cGVvZiBzZWxmP251bGw6c2VsZjtyZXR1cm4gaXNMaWtlTm9uZShyZXQpPzA6YWRkSGVhcE9iamVjdChyZXQpfSxfX3diZ19zdGF0aWNfYWNjZXNzb3JfV0lORE9XX2Y4NzI3ZjBjZjg4OGUwYmQ6ZnVuY3Rpb24oKXtjb25zdCByZXQ9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/bnVsbDp3aW5kb3c7cmV0dXJuIGlzTGlrZU5vbmUocmV0KT8wOmFkZEhlYXBPYmplY3QocmV0KX0sX193Ymdfc3RhdHVzXzg5ZDdlODAzZGI5MTFlZTc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5zdGF0dXN9LF9fd2JnX3N0b3JhZ2VfYzAwMmI1M2JjNDg4MzI5OTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuc3RvcmFnZSl9LF9fd2JnX3N0cmluZ2lmeV84ZDFjYzZmZjM4M2U4YmFlOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KEpTT04uc3RyaW5naWZ5KGdldE9iamVjdChhcmcwKSkpfSxhcmd1bWVudHMpfSxfX3diZ19zdWJhcnJheV9hOTZlMWZlZjE3ZWQyM2NiOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuc3ViYXJyYXkoYXJnMT4+PjAsYXJnMj4+PjApKX0sX193YmdfdGhlbl8wZDlmZTJjN2IxODU3ZDMyOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkudGhlbihnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LF9fd2JnX3RoZW5fYjllN2IzYjVmMWE5ZTFiNTpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS50aGVuKGdldE9iamVjdChhcmcxKSkpfSxfX3diZ190b1N0cmluZ185NjRmZjdmZTZlY2E4MzYyOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS50b1N0cmluZygpKX0sX193YmdfdHJ1bmNhdGVfZGM2NjFmZGNiMDA2MmZhNzpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS50cnVuY2F0ZShhcmcxPj4+MCl9LGFyZ3VtZW50cyl9LF9fd2JnX3R5cGVfMDNkZmU0NjIxNzM1ZTUyODpmdW5jdGlvbihhcmcwKXtjb25zdCByZXQ9Z2V0T2JqZWN0KGFyZzApLnR5cGU7cmV0dXJuKF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtQ2hhbmdlUmVjb3JkVHlwZS5pbmRleE9mKHJldCkrMXx8NyktMX0sX193YmdfdXJsX2M0ODRjMjZiMWZiZjUxMjY6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS51cmwsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMT1XQVNNX1ZFQ1RPUl9MRU47Z2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCs0LGxlbjEsITApLGdldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArMCxwdHIxLCEwKX0sX193YmdfdmFsdWVfMDU0NjI1NWI0MTVlOTZjMTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkudmFsdWUpfSxfX3diZ192YWx1ZV9mZTZlZTM0YWY1ZGMzZGNlOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS52YWx1ZSl9LF9fd2JnX3dhaXRBc3luY19hNThiMjEzNGJmZjM5YzNlOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChBdG9taWNzLndhaXRBc3luYyhnZXRPYmplY3QoYXJnMCksYXJnMT4+PjAsYXJnMikpfSxfX3diZ193YWl0QXN5bmNfYzBhMzlhN2QzMzE4ZDkxZTpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KEF0b21pY3Mud2FpdEFzeW5jKX0sX193Ymdfd2Fybl9hNDBiOTcxNDY3YjIxOWM3OmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe2NvbnNvbGUud2FybihnZXRPYmplY3QoYXJnMCksZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSxnZXRPYmplY3QoYXJnMykpfSxfX3diZ193YXJuX2Y3YWUxYjJlNjZjY2I5MzA6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS53YXJuKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX3dhc210YXNrbWVzc2FnZV9uZXc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoV2FzbVRhc2tNZXNzYWdlLl9fd3JhcChhcmcwKSl9LF9fd2JnX3dlYndvcmtlcmNyZWF0aW9uX25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChXZWJXb3JrZXJDcmVhdGlvbi5fX3dyYXAoYXJnMCkpfSxfX3diZ193ZWJ3b3JrZXJ0ZXJtaW5hdGlvbl9uZXc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoV2ViV29ya2VyVGVybWluYXRpb24uX193cmFwKGFyZzApKX0sX193Ymdfd3JpdGVfMmQ1OTMzN2NjNDk2OTE5ZDpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtyZXR1cm4gZ2V0T2JqZWN0KGFyZzApLndyaXRlKGdldEFycmF5VThGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRPYmplY3QoYXJnMykpfSxhcmd1bWVudHMpfSxfX3diZ193cml0ZV8zN2Y1YTYyYTI0ZGE2NjJmOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLndyaXRlKGdldE9iamVjdChhcmcxKSkpfSxhcmd1bWVudHMpfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwMTpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KG1ha2VNdXRDbG9zdXJlKGFyZzAsYXJnMSx3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xOTk4NSxfX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzk2NDMpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDI6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlTXV0Q2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTk5ODUsX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5NjQzKSl9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDAzOmZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobWFrZU11dENsb3N1cmUoYXJnMCxhcmcxLHdhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzE5OTg1LF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV83OTY3OSkpfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwNDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KG1ha2VNdXRDbG9zdXJlKGFyZzAsYXJnMSx3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xOTk4NSxfX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTk5NzEpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDU6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlQ2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzkwMDUsX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5MDA2KSl9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA2OmZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobWFrZU11dENsb3N1cmUoYXJnMCxhcmcxLHdhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5NzEwLF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xOTk3MSkpfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwNzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChhcmcwKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDg6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSl9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA5OmZ1bmN0aW9uKGFyZzAsYXJnMSl7dmFyIHYwPWdldEFycmF5SnNWYWx1ZUZyb21XYXNtMChhcmcwLGFyZzEpLnNsaWNlKCk7d2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoYXJnMCw0KmFyZzEsNCk7cmV0dXJuIGFkZEhlYXBPYmplY3QodjApfSxfX3diaW5kZ2VuX2xpbmtfMGIxZjc2ZDIzNWZkMmI4NjpmdW5jdGlvbihhcmcwKXtjb25zdCB2YWw9Im9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgICAgIGxldCBbaWEsIGluZGV4LCB2YWx1ZV0gPSBldi5kYXRhO1xuICAgICAgICAgICAgICAgIGlhID0gbmV3IEludDMyQXJyYXkoaWEuYnVmZmVyKTtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gQXRvbWljcy53YWl0KGlhLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHJlc3VsdCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgIixwdHIxPXBhc3NTdHJpbmdUb1dhc20wKHZvaWQgMD09PVVSTC5jcmVhdGVPYmplY3RVUkw/ImRhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdCwiK2VuY29kZVVSSUNvbXBvbmVudCh2YWwpOlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3ZhbF0se3R5cGU6InRleHQvamF2YXNjcmlwdCJ9KSksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMT1XQVNNX1ZFQ1RPUl9MRU47Z2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCs0LGxlbjEsITApLGdldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArMCxwdHIxLCEwKX0sX193YmluZGdlbl9vYmplY3RfY2xvbmVfcmVmOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKSl9LF9fd2JpbmRnZW5fb2JqZWN0X2Ryb3BfcmVmOmZ1bmN0aW9uKGFyZzApe3Rha2VPYmplY3QoYXJnMCl9LG1lbW9yeTptZW1vcnl8fG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRpYWw6MTAyNSxtYXhpbXVtOjY1NTM2LHNoYXJlZDohMH0pfTtyZXR1cm57X19wcm90b19fOm51bGwsIi4vaW5kZXhfYmcuanMiOmltcG9ydDB9fWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xOTk3MShhcmcwLGFyZzEpe3dhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzE5OTcxKGFyZzAsYXJnMSl9ZnVuY3Rpb24gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5NjQzKGFyZzAsYXJnMSxhcmcyKXt3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV83OTY0MyhhcmcwLGFyZzEsYWRkSGVhcE9iamVjdChhcmcyKSl9ZnVuY3Rpb24gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5Njc5KGFyZzAsYXJnMSxhcmcyKXt0cnl7d2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzk2NzkoYXJnMCxhcmcxLGFkZEJvcnJvd2VkT2JqZWN0KGFyZzIpKX1maW5hbGx5e2hlYXBbc3RhY2tfcG9pbnRlcisrXT12b2lkIDB9fWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV83OTAwNihhcmcwLGFyZzEsYXJnMil7d2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzkwMDYoYXJnMCxhcmcxLGFkZEhlYXBPYmplY3QoYXJnMikpfWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8zMzQ0KGFyZzAsYXJnMSxhcmcyLGFyZzMpe3dhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzMzNDQoYXJnMCxhcmcxLGFkZEhlYXBPYmplY3QoYXJnMiksYWRkSGVhcE9iamVjdChhcmczKSl9U3ltYm9sLmRpc3Bvc2UmJihXZWJXb3JrZXJUZXJtaW5hdGlvbi5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPVdlYldvcmtlclRlcm1pbmF0aW9uLnByb3RvdHlwZS5mcmVlKTtjb25zdCBfX3diaW5kZ2VuX2VudW1fRGlyRW50cnlUeXBlPVsiZmlsZSIsImRpcmVjdG9yeSJdLF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtQ2hhbmdlUmVjb3JkVHlwZT1bImFwcGVhcmVkIiwiZGlzYXBwZWFyZWQiLCJlcnJvcmVkIiwibW9kaWZpZWQiLCJtb3ZlZCIsInVua25vd24iXSxfX3diaW5kZ2VuX2VudW1fRmlsZVN5c3RlbUhhbmRsZUtpbmQ9WyJmaWxlIiwiZGlyZWN0b3J5Il0sX193YmluZGdlbl9lbnVtX1JlcXVlc3RDYWNoZT1bImRlZmF1bHQiLCJuby1zdG9yZSIsInJlbG9hZCIsIm5vLWNhY2hlIiwiZm9yY2UtY2FjaGUiLCJvbmx5LWlmLWNhY2hlZCJdLF9fd2JpbmRnZW5fZW51bV9SZXF1ZXN0Q3JlZGVudGlhbHM9WyJvbWl0Iiwic2FtZS1vcmlnaW4iLCJpbmNsdWRlIl0sX193YmluZGdlbl9lbnVtX1JlcXVlc3RNb2RlPVsic2FtZS1vcmlnaW4iLCJuby1jb3JzIiwiY29ycyIsIm5hdmlnYXRlIl0sX193YmluZGdlbl9lbnVtX1dvcmtlclR5cGU9WyJjbGFzc2ljIiwibW9kdWxlIl0sQnVpbGRPcHRpb25zRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ19idWlsZG9wdGlvbnNfZnJlZShwdHI+Pj4wLDEpKSxDcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9uc0ZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfY3JlYXRlc3luY2FjY2Vzc2hhbmRsZW9wdGlvbnNfZnJlZShwdHI+Pj4wLDEpKSxEaXJFbnRyeUZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfZGlyZW50cnlfZnJlZShwdHI+Pj4wLDEpKSxGc0ZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfZnNfZnJlZShwdHI+Pj4wLDEpKSxNZXRhZGF0YUZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfbWV0YWRhdGFfZnJlZShwdHI+Pj4wLDEpKSxQcm9qZWN0RmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ19wcm9qZWN0X2ZyZWUocHRyPj4+MCwxKSksUm9vdFRhc2tGaW5hbGl6YXRpb249InVuZGVmaW5lZCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT97cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9fTpuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkocHRyPT53YXNtLl9fd2JnX3Jvb3R0YXNrX2ZyZWUocHRyPj4+MCwxKSksV2FzbVRhc2tNZXNzYWdlRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ193YXNtdGFza21lc3NhZ2VfZnJlZShwdHI+Pj4wLDEpKSxXZWJXb3JrZXJDcmVhdGlvbkZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193Ymdfd2Vid29ya2VyY3JlYXRpb25fZnJlZShwdHI+Pj4wLDEpKSxXZWJXb3JrZXJPcHRpb25zRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ193ZWJ3b3JrZXJvcHRpb25zX2ZyZWUocHRyPj4+MCwxKSksV2ViV29ya2VyVGVybWluYXRpb25GaW5hbGl6YXRpb249InVuZGVmaW5lZCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT97cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9fTpuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkocHRyPT53YXNtLl9fd2JnX3dlYndvcmtlcnRlcm1pbmF0aW9uX2ZyZWUocHRyPj4+MCwxKSk7ZnVuY3Rpb24gYWRkSGVhcE9iamVjdChvYmope2hlYXBfbmV4dD09PWhlYXAubGVuZ3RoJiZoZWFwLnB1c2goaGVhcC5sZW5ndGgrMSk7Y29uc3QgaWR4PWhlYXBfbmV4dDtyZXR1cm4gaGVhcF9uZXh0PWhlYXBbaWR4XSxoZWFwW2lkeF09b2JqLGlkeH1mdW5jdGlvbiBfYXNzZXJ0Q2xhc3MoaW5zdGFuY2Usa2xhc3Mpe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBrbGFzcykpdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCBpbnN0YW5jZSBvZiAke2tsYXNzLm5hbWV9YCl9ZnVuY3Rpb24gYWRkQm9ycm93ZWRPYmplY3Qob2JqKXtpZigxPT1zdGFja19wb2ludGVyKXRocm93IG5ldyBFcnJvcigib3V0IG9mIGpzIHN0YWNrIik7cmV0dXJuIGhlYXBbLS1zdGFja19wb2ludGVyXT1vYmosc3RhY2tfcG9pbnRlcn1jb25zdCBDTE9TVVJFX0RUT1JTPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHN0YXRlPT5zdGF0ZS5kdG9yKHN0YXRlLmEsc3RhdGUuYikpO2Z1bmN0aW9uIGRlYnVnU3RyaW5nKHZhbCl7Y29uc3QgdHlwZT10eXBlb2YgdmFsO2lmKCJudW1iZXIiPT10eXBlfHwiYm9vbGVhbiI9PXR5cGV8fG51bGw9PXZhbClyZXR1cm5gJHt2YWx9YDtpZigic3RyaW5nIj09dHlwZSlyZXR1cm5gIiR7dmFsfSJgO2lmKCJzeW1ib2wiPT10eXBlKXtjb25zdCBkZXNjcmlwdGlvbj12YWwuZGVzY3JpcHRpb247cmV0dXJuIG51bGw9PWRlc2NyaXB0aW9uPyJTeW1ib2wiOmBTeW1ib2woJHtkZXNjcmlwdGlvbn0pYH1pZigiZnVuY3Rpb24iPT10eXBlKXtjb25zdCBuYW1lPXZhbC5uYW1lO3JldHVybiJzdHJpbmciPT10eXBlb2YgbmFtZSYmbmFtZS5sZW5ndGg+MD9gRnVuY3Rpb24oJHtuYW1lfSlgOiJGdW5jdGlvbiJ9aWYoQXJyYXkuaXNBcnJheSh2YWwpKXtjb25zdCBsZW5ndGg9dmFsLmxlbmd0aDtsZXQgZGVidWc9IlsiO2xlbmd0aD4wJiYoZGVidWcrPWRlYnVnU3RyaW5nKHZhbFswXSkpO2ZvcihsZXQgaT0xO2k8bGVuZ3RoO2krKylkZWJ1Zys9IiwgIitkZWJ1Z1N0cmluZyh2YWxbaV0pO3JldHVybiBkZWJ1Zys9Il0iLGRlYnVnfWNvbnN0IGJ1aWx0SW5NYXRjaGVzPS9cW29iamVjdCAoW15cXV0rKVxdLy5leGVjKHRvU3RyaW5nLmNhbGwodmFsKSk7bGV0IGNsYXNzTmFtZTtpZighKGJ1aWx0SW5NYXRjaGVzJiZidWlsdEluTWF0Y2hlcy5sZW5ndGg+MSkpcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKTtpZihjbGFzc05hbWU9YnVpbHRJbk1hdGNoZXNbMV0sIk9iamVjdCI9PWNsYXNzTmFtZSl0cnl7cmV0dXJuIk9iamVjdCgiK0pTT04uc3RyaW5naWZ5KHZhbCkrIikifWNhdGNoKF8pe3JldHVybiJPYmplY3QifXJldHVybiB2YWwgaW5zdGFuY2VvZiBFcnJvcj9gJHt2YWwubmFtZX06ICR7dmFsLm1lc3NhZ2V9XG4ke3ZhbC5zdGFja31gOmNsYXNzTmFtZX1mdW5jdGlvbiBkcm9wT2JqZWN0KGlkeCl7aWR4PDEzMnx8KGhlYXBbaWR4XT1oZWFwX25leHQsaGVhcF9uZXh0PWlkeCl9ZnVuY3Rpb24gZ2V0QXJyYXlKc1ZhbHVlRnJvbVdhc20wKHB0cixsZW4pe3B0cj4+Pj0wO2NvbnN0IG1lbT1nZXREYXRhVmlld01lbW9yeTAoKSxyZXN1bHQ9W107Zm9yKGxldCBpPXB0cjtpPHB0cis0KmxlbjtpKz00KXJlc3VsdC5wdXNoKHRha2VPYmplY3QobWVtLmdldFVpbnQzMihpLCEwKSkpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gZ2V0QXJyYXlVOEZyb21XYXNtMChwdHIsbGVuKXtyZXR1cm4gcHRyPj4+PTAsZ2V0VWludDhBcnJheU1lbW9yeTAoKS5zdWJhcnJheShwdHIvMSxwdHIvMStsZW4pfWxldCBjYWNoZWREYXRhVmlld01lbW9yeTA9bnVsbDtmdW5jdGlvbiBnZXREYXRhVmlld01lbW9yeTAoKXtyZXR1cm4gbnVsbCE9PWNhY2hlZERhdGFWaWV3TWVtb3J5MCYmY2FjaGVkRGF0YVZpZXdNZW1vcnkwLmJ1ZmZlcj09PXdhc20ubWVtb3J5LmJ1ZmZlcnx8KGNhY2hlZERhdGFWaWV3TWVtb3J5MD1uZXcgRGF0YVZpZXcod2FzbS5tZW1vcnkuYnVmZmVyKSksY2FjaGVkRGF0YVZpZXdNZW1vcnkwfWZ1bmN0aW9uIGdldFN0cmluZ0Zyb21XYXNtMChwdHIsbGVuKXtyZXR1cm4gZGVjb2RlVGV4dChwdHI+Pj49MCxsZW4pfWxldCBjYWNoZWRVaW50OEFycmF5TWVtb3J5MD1udWxsO2Z1bmN0aW9uIGdldFVpbnQ4QXJyYXlNZW1vcnkwKCl7cmV0dXJuIG51bGwhPT1jYWNoZWRVaW50OEFycmF5TWVtb3J5MCYmY2FjaGVkVWludDhBcnJheU1lbW9yeTAuYnVmZmVyPT09d2FzbS5tZW1vcnkuYnVmZmVyfHwoY2FjaGVkVWludDhBcnJheU1lbW9yeTA9bmV3IFVpbnQ4QXJyYXkod2FzbS5tZW1vcnkuYnVmZmVyKSksY2FjaGVkVWludDhBcnJheU1lbW9yeTB9ZnVuY3Rpb24gZ2V0T2JqZWN0KGlkeCl7cmV0dXJuIGhlYXBbaWR4XX1mdW5jdGlvbiBoYW5kbGVFcnJvcihmLGFyZ3Mpe3RyeXtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3MpfWNhdGNoKGUpe3dhc20uX193YmluZGdlbl9leHBvcnQzKGFkZEhlYXBPYmplY3QoZSkpfX1sZXQgaGVhcD1uZXcgQXJyYXkoMTI4KS5maWxsKHZvaWQgMCk7aGVhcC5wdXNoKHZvaWQgMCxudWxsLCEwLCExKTtsZXQgaGVhcF9uZXh0PWhlYXAubGVuZ3RoO2Z1bmN0aW9uIGlzTGlrZU5vbmUoeCl7cmV0dXJuIG51bGw9PXh9ZnVuY3Rpb24gbWFrZUNsb3N1cmUoYXJnMCxhcmcxLGR0b3IsZil7Y29uc3Qgc3RhdGU9e2E6YXJnMCxiOmFyZzEsY250OjEsZHRvcn0scmVhbD0oLi4uYXJncyk9PntzdGF0ZS5jbnQrKzt0cnl7cmV0dXJuIGYoc3RhdGUuYSxzdGF0ZS5iLC4uLmFyZ3MpfWZpbmFsbHl7cmVhbC5fd2JnX2NiX3VucmVmKCl9fTtyZXR1cm4gcmVhbC5fd2JnX2NiX3VucmVmPSgpPT57MD09PS0tc3RhdGUuY250JiYoc3RhdGUuZHRvcihzdGF0ZS5hLHN0YXRlLmIpLHN0YXRlLmE9MCxDTE9TVVJFX0RUT1JTLnVucmVnaXN0ZXIoc3RhdGUpKX0sQ0xPU1VSRV9EVE9SUy5yZWdpc3RlcihyZWFsLHN0YXRlLHN0YXRlKSxyZWFsfWZ1bmN0aW9uIG1ha2VNdXRDbG9zdXJlKGFyZzAsYXJnMSxkdG9yLGYpe2NvbnN0IHN0YXRlPXthOmFyZzAsYjphcmcxLGNudDoxLGR0b3J9LHJlYWw9KC4uLmFyZ3MpPT57c3RhdGUuY250Kys7Y29uc3QgYT1zdGF0ZS5hO3N0YXRlLmE9MDt0cnl7cmV0dXJuIGYoYSxzdGF0ZS5iLC4uLmFyZ3MpfWZpbmFsbHl7c3RhdGUuYT1hLHJlYWwuX3diZ19jYl91bnJlZigpfX07cmV0dXJuIHJlYWwuX3diZ19jYl91bnJlZj0oKT0+ezA9PT0tLXN0YXRlLmNudCYmKHN0YXRlLmR0b3Ioc3RhdGUuYSxzdGF0ZS5iKSxzdGF0ZS5hPTAsQ0xPU1VSRV9EVE9SUy51bnJlZ2lzdGVyKHN0YXRlKSl9LENMT1NVUkVfRFRPUlMucmVnaXN0ZXIocmVhbCxzdGF0ZSxzdGF0ZSkscmVhbH1mdW5jdGlvbiBwYXNzU3RyaW5nVG9XYXNtMChhcmcsbWFsbG9jLHJlYWxsb2Mpe2lmKHZvaWQgMD09PXJlYWxsb2Mpe2NvbnN0IGJ1Zj1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGUoYXJnKSxwdHI9bWFsbG9jKGJ1Zi5sZW5ndGgsMSk+Pj4wO3JldHVybiBnZXRVaW50OEFycmF5TWVtb3J5MCgpLnN1YmFycmF5KHB0cixwdHIrYnVmLmxlbmd0aCkuc2V0KGJ1ZiksV0FTTV9WRUNUT1JfTEVOPWJ1Zi5sZW5ndGgscHRyfWxldCBsZW49YXJnLmxlbmd0aCxwdHI9bWFsbG9jKGxlbiwxKT4+PjA7Y29uc3QgbWVtPWdldFVpbnQ4QXJyYXlNZW1vcnkwKCk7bGV0IG9mZnNldD0wO2Zvcig7b2Zmc2V0PGxlbjtvZmZzZXQrKyl7Y29uc3QgY29kZT1hcmcuY2hhckNvZGVBdChvZmZzZXQpO2lmKGNvZGU+MTI3KWJyZWFrO21lbVtwdHIrb2Zmc2V0XT1jb2RlfWlmKG9mZnNldCE9PWxlbil7MCE9PW9mZnNldCYmKGFyZz1hcmcuc2xpY2Uob2Zmc2V0KSkscHRyPXJlYWxsb2MocHRyLGxlbixsZW49b2Zmc2V0KzMqYXJnLmxlbmd0aCwxKT4+PjA7Y29uc3Qgdmlldz1nZXRVaW50OEFycmF5TWVtb3J5MCgpLnN1YmFycmF5KHB0citvZmZzZXQscHRyK2xlbik7b2Zmc2V0Kz1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGVJbnRvKGFyZyx2aWV3KS53cml0dGVuLHB0cj1yZWFsbG9jKHB0cixsZW4sb2Zmc2V0LDEpPj4+MH1yZXR1cm4gV0FTTV9WRUNUT1JfTEVOPW9mZnNldCxwdHJ9bGV0IHN0YWNrX3BvaW50ZXI9MTI4O2Z1bmN0aW9uIHRha2VPYmplY3QoaWR4KXtjb25zdCByZXQ9Z2V0T2JqZWN0KGlkeCk7cmV0dXJuIGRyb3BPYmplY3QoaWR4KSxyZXR9bGV0IGNhY2hlZFRleHREZWNvZGVyPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXI/bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIse2lnbm9yZUJPTTohMCxmYXRhbDohMH0pOnZvaWQgMDtjYWNoZWRUZXh0RGVjb2RlciYmY2FjaGVkVGV4dERlY29kZXIuZGVjb2RlKCk7Y29uc3QgTUFYX1NBRkFSSV9ERUNPREVfQllURVM9MjE0NjQzNTA3MjtsZXQgbnVtQnl0ZXNEZWNvZGVkPTA7ZnVuY3Rpb24gZGVjb2RlVGV4dChwdHIsbGVuKXtyZXR1cm4gbnVtQnl0ZXNEZWNvZGVkKz1sZW4sbnVtQnl0ZXNEZWNvZGVkPj1NQVhfU0FGQVJJX0RFQ09ERV9CWVRFUyYmKGNhY2hlZFRleHREZWNvZGVyPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiLHtpZ25vcmVCT006ITAsZmF0YWw6ITB9KSxjYWNoZWRUZXh0RGVjb2Rlci5kZWNvZGUoKSxudW1CeXRlc0RlY29kZWQ9bGVuKSxjYWNoZWRUZXh0RGVjb2Rlci5kZWNvZGUoZ2V0VWludDhBcnJheU1lbW9yeTAoKS5zbGljZShwdHIscHRyK2xlbikpfWNvbnN0IGNhY2hlZFRleHRFbmNvZGVyPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dEVuY29kZXI/bmV3IFRleHRFbmNvZGVyOnZvaWQgMDtjYWNoZWRUZXh0RW5jb2RlciYmKGNhY2hlZFRleHRFbmNvZGVyLmVuY29kZUludG89ZnVuY3Rpb24oYXJnLHZpZXcpe2NvbnN0IGJ1Zj1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGUoYXJnKTtyZXR1cm4gdmlldy5zZXQoYnVmKSx7cmVhZDphcmcubGVuZ3RoLHdyaXR0ZW46YnVmLmxlbmd0aH19KTtsZXQgV0FTTV9WRUNUT1JfTEVOPTAsd2FzbU1vZHVsZSx3YXNtO2Z1bmN0aW9uIF9fd2JnX2ZpbmFsaXplX2luaXQoaW5zdGFuY2UsbW9kdWxlLHRocmVhZF9zdGFja19zaXplKXtpZih3YXNtPWluc3RhbmNlLmV4cG9ydHMsd2FzbU1vZHVsZT1tb2R1bGUsY2FjaGVkRGF0YVZpZXdNZW1vcnkwPW51bGwsY2FjaGVkVWludDhBcnJheU1lbW9yeTA9bnVsbCx2b2lkIDAhPT10aHJlYWRfc3RhY2tfc2l6ZSYmKCJudW1iZXIiIT10eXBlb2YgdGhyZWFkX3N0YWNrX3NpemV8fDA9PT10aHJlYWRfc3RhY2tfc2l6ZXx8dGhyZWFkX3N0YWNrX3NpemUlNjU1MzYhPTApKXRocm93ImludmFsaWQgc3RhY2sgc2l6ZSI7cmV0dXJuIHdhc20uX193YmluZGdlbl9zdGFydCh0aHJlYWRfc3RhY2tfc2l6ZSksd2FzbX1hc3luYyBmdW5jdGlvbiBfX3diZ19sb2FkKG1vZHVsZSxpbXBvcnRzKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgUmVzcG9uc2UmJm1vZHVsZSBpbnN0YW5jZW9mIFJlc3BvbnNlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcpdHJ5e3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhtb2R1bGUsaW1wb3J0cyl9Y2F0Y2goZSl7aWYoIShtb2R1bGUub2smJmZ1bmN0aW9uIGV4cGVjdGVkUmVzcG9uc2VUeXBlKHR5cGUpe3N3aXRjaCh0eXBlKXtjYXNlImJhc2ljIjpjYXNlImNvcnMiOmNhc2UiZGVmYXVsdCI6cmV0dXJuITB9cmV0dXJuITF9KG1vZHVsZS50eXBlKSl8fCJhcHBsaWNhdGlvbi93YXNtIj09PW1vZHVsZS5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIikpdGhyb3cgZTtjb25zb2xlLndhcm4oImBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZ2AgZmFpbGVkIGJlY2F1c2UgeW91ciBzZXJ2ZXIgZG9lcyBub3Qgc2VydmUgV2FzbSB3aXRoIGBhcHBsaWNhdGlvbi93YXNtYCBNSU1FIHR5cGUuIEZhbGxpbmcgYmFjayB0byBgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVgIHdoaWNoIGlzIHNsb3dlci4gT3JpZ2luYWwgZXJyb3I6XG4iLGUpfWNvbnN0IGJ5dGVzPWF3YWl0IG1vZHVsZS5hcnJheUJ1ZmZlcigpO3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShieXRlcyxpbXBvcnRzKX17Y29uc3QgaW5zdGFuY2U9YXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobW9kdWxlLGltcG9ydHMpO3JldHVybiBpbnN0YW5jZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lkluc3RhbmNlP3tpbnN0YW5jZSxtb2R1bGV9Omluc3RhbmNlfX1mdW5jdGlvbiBpbml0U3luYyhtb2R1bGUsbWVtb3J5KXtpZih2b2lkIDAhPT13YXNtKXJldHVybiB3YXNtO2xldCB0aHJlYWRfc3RhY2tfc2l6ZTt2b2lkIDAhPT1tb2R1bGUmJihPYmplY3QuZ2V0UHJvdG90eXBlT2YobW9kdWxlKT09PU9iamVjdC5wcm90b3R5cGU/KHttb2R1bGUsbWVtb3J5LHRocmVhZF9zdGFja19zaXplfT1tb2R1bGUpOmNvbnNvbGUud2FybigidXNpbmcgZGVwcmVjYXRlZCBwYXJhbWV0ZXJzIGZvciBgaW5pdFN5bmMoKWA7IHBhc3MgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQiKSk7Y29uc3QgaW1wb3J0cz1fX3diZ19nZXRfaW1wb3J0cyhtZW1vcnkpO21vZHVsZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZXx8KG1vZHVsZT1uZXcgV2ViQXNzZW1ibHkuTW9kdWxlKG1vZHVsZSkpO3JldHVybiBfX3diZ19maW5hbGl6ZV9pbml0KG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsaW1wb3J0cyksbW9kdWxlLHRocmVhZF9zdGFja19zaXplKX1hc3luYyBmdW5jdGlvbiBfX3diZ19pbml0KG1vZHVsZV9vcl9wYXRoLG1lbW9yeSl7aWYodm9pZCAwIT09d2FzbSlyZXR1cm4gd2FzbTtsZXQgdGhyZWFkX3N0YWNrX3NpemU7dm9pZCAwIT09bW9kdWxlX29yX3BhdGgmJihPYmplY3QuZ2V0UHJvdG90eXBlT2YobW9kdWxlX29yX3BhdGgpPT09T2JqZWN0LnByb3RvdHlwZT8oe21vZHVsZV9vcl9wYXRoLG1lbW9yeSx0aHJlYWRfc3RhY2tfc2l6ZX09bW9kdWxlX29yX3BhdGgpOmNvbnNvbGUud2FybigidXNpbmcgZGVwcmVjYXRlZCBwYXJhbWV0ZXJzIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb247IHBhc3MgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQiKSksdm9pZCAwPT09bW9kdWxlX29yX3BhdGgmJihtb2R1bGVfb3JfcGF0aD1uZXcgVVJMKF9fd2VicGFja19yZXF1aXJlX18oIi4vc3JjL3V0b28vaW5kZXhfYmcud2FzbSIpLF9fd2VicGFja19yZXF1aXJlX18uYikpO2NvbnN0IGltcG9ydHM9X193YmdfZ2V0X2ltcG9ydHMobWVtb3J5KTsoInN0cmluZyI9PXR5cGVvZiBtb2R1bGVfb3JfcGF0aHx8ImZ1bmN0aW9uIj09dHlwZW9mIFJlcXVlc3QmJm1vZHVsZV9vcl9wYXRoIGluc3RhbmNlb2YgUmVxdWVzdHx8ImZ1bmN0aW9uIj09dHlwZW9mIFVSTCYmbW9kdWxlX29yX3BhdGggaW5zdGFuY2VvZiBVUkwpJiYobW9kdWxlX29yX3BhdGg9ZmV0Y2gobW9kdWxlX29yX3BhdGgpKTtjb25zdHtpbnN0YW5jZSxtb2R1bGV9PWF3YWl0IF9fd2JnX2xvYWQoYXdhaXQgbW9kdWxlX29yX3BhdGgsaW1wb3J0cyk7cmV0dXJuIF9fd2JnX2ZpbmFsaXplX2luaXQoaW5zdGFuY2UsbW9kdWxlLHRocmVhZF9zdGFja19zaXplKX19LCIuL3NyYy91dG9vL2luZGV4X2JnLndhc20iKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7bW9kdWxlLmV4cG9ydHM9X193ZWJwYWNrX3JlcXVpcmVfXy5wKyJjODMwYjAwYzAyMTA2YjM3MjI0NC53YXNtIn19LF9fd2VicGFja19tb2R1bGVfY2FjaGVfXz17fTtmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKXt2YXIgY2FjaGVkTW9kdWxlPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07aWYodm9pZCAwIT09Y2FjaGVkTW9kdWxlKXJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0czt2YXIgbW9kdWxlPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF09e2V4cG9ydHM6e319O3JldHVybiBfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsbW9kdWxlLmV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyksbW9kdWxlLmV4cG9ydHN9X193ZWJwYWNrX3JlcXVpcmVfXy5tPV9fd2VicGFja19tb2R1bGVzX18sX193ZWJwYWNrX3JlcXVpcmVfXy5kPShleHBvcnRzLGRlZmluaXRpb24pPT57Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbilfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbixrZXkpJiYhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsa2V5KSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsa2V5LHtlbnVtZXJhYmxlOiEwLGdldDpkZWZpbml0aW9uW2tleV19KX0sX193ZWJwYWNrX3JlcXVpcmVfXy5nPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2goZSl7aWYoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksX193ZWJwYWNrX3JlcXVpcmVfXy5vPShvYmoscHJvcCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmoscHJvcCksKCgpPT57dmFyIHNjcmlwdFVybDtfX3dlYnBhY2tfcmVxdWlyZV9fLmcuaW1wb3J0U2NyaXB0cyYmKHNjcmlwdFVybD1fX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24rIiIpO3ZhciBkb2N1bWVudD1fX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7aWYoIXNjcmlwdFVybCYmZG9jdW1lbnQmJihkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYiU0NSSVBUIj09PWRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZS50b1VwcGVyQ2FzZSgpJiYoc2NyaXB0VXJsPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSwhc2NyaXB0VXJsKSl7dmFyIHNjcmlwdHM9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpO2lmKHNjcmlwdHMubGVuZ3RoKWZvcih2YXIgaT1zY3JpcHRzLmxlbmd0aC0xO2k+LTEmJighc2NyaXB0VXJsfHwhL15odHRwKHM/KTovLnRlc3Qoc2NyaXB0VXJsKSk7KXNjcmlwdFVybD1zY3JpcHRzW2ktLV0uc3JjfWlmKCFzY3JpcHRVcmwpdGhyb3cgbmV3IEVycm9yKCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlciIpO3NjcmlwdFVybD1zY3JpcHRVcmwucmVwbGFjZSgvXmJsb2I6LywiIikucmVwbGFjZSgvIy4qJC8sIiIpLnJlcGxhY2UoL1w/LiokLywiIikucmVwbGFjZSgvXC9bXlwvXSskLywiLyIpLF9fd2VicGFja19yZXF1aXJlX18ucD1zY3JpcHRVcmx9KSgpLF9fd2VicGFja19yZXF1aXJlX18uYj1zZWxmLmxvY2F0aW9uKyIiO3ZhciBfX3dlYnBhY2tfZXhwb3J0c19fPXt9LF91dG9vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX189X193ZWJwYWNrX3JlcXVpcmVfXygiLi9zcmMvdXRvby9pbmRleC5qcyIpO3JldHVybiBzZWxmLndhc21fYmluZGdlbj1fdXRvb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fLlFSLF9fd2VicGFja19leHBvcnRzX189X193ZWJwYWNrX2V4cG9ydHNfXy5kZWZhdWx0LF9fd2VicGFja19leHBvcnRzX199KSgpKTs=";
Binary file
@@ -0,0 +1,2 @@
1
+ declare const url: string;
2
+ export default url;