@expo/serve-sim 0.1.40 → 0.1.42
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.
- package/NOTICE +12 -0
- package/README.md +6 -0
- package/dist/middleware.js +46 -46
- package/dist/native/serve-sim-native.node +0 -0
- package/dist/serve-sim.js +81 -80
- package/package.json +2 -1
- package/src/middleware.ts +17 -2
- package/src/native.ts +11 -0
package/dist/middleware.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import{createRequire as
|
|
1
|
+
import{createRequire as z5}from"node:module";var s$=Object.create;var{getPrototypeOf:e$,defineProperty:g4,getOwnPropertyNames:$5}=Object;var Q5=Object.prototype.hasOwnProperty;function Z5($){return this[$]}var J5,Y5,X5=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?J5??=new WeakMap:Y5??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?s$(e$($)):{};let G=Q||!$||!$.__esModule?g4(Z,"default",{value:$,enumerable:!0}):Z;for(let H of $5($))if(!Q5.call(G,H))g4(G,H,{get:Z5.bind($,H),enumerable:!0});if(J)Y.set($,G);return G};var m0=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports);var G5=($)=>$;function K5($,Q){this[$]=G5.bind(null,Q)}var V5=($,Q)=>{for(var Z in Q)g4($,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:K5.bind(Q,Z)})};var W5=($,Q)=>()=>($&&(Q=$($=0)),Q);var V4=z5(import.meta.url);var $6=m0((xJ,e9)=>{var w0=1000,y0=w0*60,k0=y0*60,U0=k0*24,lQ=U0*7,dQ=U0*365.25;e9.exports=function($,Q){Q=Q||{};var Z=typeof $;if(Z==="string"&&$.length>0)return iQ($);else if(Z==="number"&&isFinite($))return Q.long?oQ($):nQ($);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify($))};function iQ($){if($=String($),$.length>100)return;var Q=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec($);if(!Q)return;var Z=parseFloat(Q[1]),J=(Q[2]||"ms").toLowerCase();switch(J){case"years":case"year":case"yrs":case"yr":case"y":return Z*dQ;case"weeks":case"week":case"w":return Z*lQ;case"days":case"day":case"d":return Z*U0;case"hours":case"hour":case"hrs":case"hr":case"h":return Z*k0;case"minutes":case"minute":case"mins":case"min":case"m":return Z*y0;case"seconds":case"second":case"secs":case"sec":case"s":return Z*w0;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return Z;default:return}}function nQ($){var Q=Math.abs($);if(Q>=U0)return Math.round($/U0)+"d";if(Q>=k0)return Math.round($/k0)+"h";if(Q>=y0)return Math.round($/y0)+"m";if(Q>=w0)return Math.round($/w0)+"s";return $+"ms"}function oQ($){var Q=Math.abs($);if(Q>=U0)return U4($,Q,U0,"day");if(Q>=k0)return U4($,Q,k0,"hour");if(Q>=y0)return U4($,Q,y0,"minute");if(Q>=w0)return U4($,Q,w0,"second");return $+" ms"}function U4($,Q,Z,J){var Y=Q>=Z*1.5;return Math.round($/Z)+" "+J+(Y?"s":"")}});var z8=m0((qJ,Q6)=>{function aQ($){Z.debug=Z,Z.default=Z,Z.coerce=K,Z.disable=G,Z.enable=Y,Z.enabled=H,Z.humanize=$6(),Z.destroy=W,Object.keys($).forEach((z)=>{Z[z]=$[z]}),Z.names=[],Z.skips=[],Z.formatters={};function Q(z){let L=0;for(let B=0;B<z.length;B++)L=(L<<5)-L+z.charCodeAt(B),L|=0;return Z.colors[Math.abs(L)%Z.colors.length]}Z.selectColor=Q;function Z(z){let L,B=null,U,M;function D(...I){if(!D.enabled)return;let E=D,O=Number(new Date),j=O-(L||O);if(E.diff=j,E.prev=L,E.curr=O,L=O,I[0]=Z.coerce(I[0]),typeof I[0]!=="string")I.unshift("%O");let R=0;I[0]=I[0].replace(/%([a-zA-Z%])/g,(N,V)=>{if(N==="%%")return"%";R++;let F=Z.formatters[V];if(typeof F==="function"){let _=I[R];N=F.call(E,_),I.splice(R,1),R--}return N}),Z.formatArgs.call(E,I),(E.log||Z.log).apply(E,I)}if(D.namespace=z,D.useColors=Z.useColors(),D.color=Z.selectColor(z),D.extend=J,D.destroy=Z.destroy,Object.defineProperty(D,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(B!==null)return B;if(U!==Z.namespaces)U=Z.namespaces,M=Z.enabled(z);return M},set:(I)=>{B=I}}),typeof Z.init==="function")Z.init(D);return D}function J(z,L){let B=Z(this.namespace+(typeof L>"u"?":":L)+z);return B.log=this.log,B}function Y(z){Z.save(z),Z.namespaces=z,Z.names=[],Z.skips=[];let L=(typeof z==="string"?z:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let B of L)if(B[0]==="-")Z.skips.push(B.slice(1));else Z.names.push(B)}function X(z,L){let B=0,U=0,M=-1,D=0;while(B<z.length)if(U<L.length&&(L[U]===z[B]||L[U]==="*"))if(L[U]==="*")M=U,D=B,U++;else B++,U++;else if(M!==-1)U=M+1,D++,B=D;else return!1;while(U<L.length&&L[U]==="*")U++;return U===L.length}function G(){let z=[...Z.names,...Z.skips.map((L)=>"-"+L)].join(",");return Z.enable(""),z}function H(z){for(let L of Z.skips)if(X(z,L))return!1;for(let L of Z.names)if(X(z,L))return!0;return!1}function K(z){if(z instanceof Error)return z.stack||z.message;return z}function W(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return Z.enable(Z.load()),Z}Q6.exports=aQ});var J6=m0((Z6,O4)=>{Z6.formatArgs=tQ;Z6.save=sQ;Z6.load=eQ;Z6.useColors=rQ;Z6.storage=$7();Z6.destroy=(()=>{let $=!1;return()=>{if(!$)$=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();Z6.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function rQ(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let $;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&($=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt($[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function tQ($){if($[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+$[0]+(this.useColors?"%c ":" ")+"+"+O4.exports.humanize(this.diff),!this.useColors)return;let Q="color: "+this.color;$.splice(1,0,Q,"color: inherit");let Z=0,J=0;$[0].replace(/%[a-zA-Z%]/g,(Y)=>{if(Y==="%%")return;if(Z++,Y==="%c")J=Z}),$.splice(J,0,Q)}Z6.log=console.debug||console.log||(()=>{});function sQ($){try{if($)Z6.storage.setItem("debug",$);else Z6.storage.removeItem("debug")}catch(Q){}}function eQ(){let $;try{$=Z6.storage.getItem("debug")||Z6.storage.getItem("DEBUG")}catch(Q){}if(!$&&typeof process<"u"&&"env"in process)$=process.env.DEBUG;return $}function $7(){try{return localStorage}catch($){}}O4.exports=z8()(Z6);var{formatters:Q7}=O4.exports;Q7.j=function($){try{return JSON.stringify($)}catch(Q){return"[UnexpectedJSONParseError]: "+Q.message}}});var K6=m0((X6,j4)=>{var W7=V4("tty"),A4=V4("util");X6.init=L7;X6.log=F7;X6.formatArgs=H7;X6.save=_7;X6.load=N7;X6.useColors=z7;X6.destroy=A4.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");X6.colors=[6,2,3,4,5,1];try{let $=(()=>{throw new Error("Cannot require module "+"supports-color");})();if($&&($.stderr||$).level>=2)X6.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221]}catch($){}X6.inspectOpts=Object.keys(process.env).filter(($)=>{return/^debug_/i.test($)}).reduce(($,Q)=>{let Z=Q.substring(6).toLowerCase().replace(/_([a-z])/g,(Y,X)=>{return X.toUpperCase()}),J=process.env[Q];if(/^(yes|on|true|enabled)$/i.test(J))J=!0;else if(/^(no|off|false|disabled)$/i.test(J))J=!1;else if(J==="null")J=null;else J=Number(J);return $[Z]=J,$},{});function z7(){return"colors"in X6.inspectOpts?Boolean(X6.inspectOpts.colors):W7.isatty(process.stderr.fd)}function H7($){let{namespace:Q,useColors:Z}=this;if(Z){let J=this.color,Y="\x1B[3"+(J<8?J:"8;5;"+J),X=` ${Y};1m${Q} \x1B[0m`;$[0]=X+$[0].split(`
|
|
2
2
|
`).join(`
|
|
3
|
-
`+X),$.push(Y+"m+"+
|
|
4
|
-
`)}function
|
|
5
|
-
`).map((Q)=>Q.trim()).join(" ")};
|
|
3
|
+
`+X),$.push(Y+"m+"+j4.exports.humanize(this.diff)+"\x1B[0m")}else $[0]=M7()+Q+" "+$[0]}function M7(){if(X6.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function F7(...$){return process.stderr.write(A4.formatWithOptions(X6.inspectOpts,...$)+`
|
|
4
|
+
`)}function _7($){if($)process.env.DEBUG=$;else delete process.env.DEBUG}function N7(){return process.env.DEBUG}function L7($){$.inspectOpts={};let Q=Object.keys(X6.inspectOpts);for(let Z=0;Z<Q.length;Z++)$.inspectOpts[Q[Z]]=X6.inspectOpts[Q[Z]]}j4.exports=z8()(X6);var{formatters:Y6}=j4.exports;Y6.o=function($){return this.inspectOpts.colors=this.useColors,A4.inspect($,this.inspectOpts).split(`
|
|
5
|
+
`).map((Q)=>Q.trim()).join(" ")};Y6.O=function($){return this.inspectOpts.colors=this.useColors,A4.inspect($,this.inspectOpts)}});var V6=m0((yJ,H8)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)H8.exports=J6();else H8.exports=K6()});var R$={};V5(R$,{startCdpServer:()=>b2,startBunCdpServer:()=>m2,listTargets:()=>l2,listDevices:()=>A$});import{createRequire as NZ}from"node:module";import*as J$ from"node:net";import*as K$ from"node:net";import{spawnSync as hZ}from"node:child_process";import*as z$ from"node:tls";import*as _$ from"node:http";function AZ($){return this[$]}function o6($){return $.replace(/[&<>'"]/g,(Q)=>Q==="&"?"&":Q==="<"?"<":Q===">"?">":Q==="'"?"'":""")}function xZ($){let Q="";for(let Z=0;Z<$.length;Z++)Q+=String.fromCharCode($[Z]);return btoa(Q)}function qZ($){let Q=atob($.replace(/\s+/g,"")),Z=new Uint8Array(Q.length);for(let J=0;J<Q.length;J++)Z[J]=Q.charCodeAt(J);return Z}function y8($,Q){if($===null||$===void 0)return`${Q}<string></string>`;if(typeof $==="boolean")return`${Q}<${$?"true":"false"}/>`;if(typeof $==="string")return`${Q}<string>${o6($)}</string>`;if(typeof $==="number"){if(Number.isInteger($))return`${Q}<integer>${$}</integer>`;return`${Q}<real>${$}</real>`}if(typeof $==="bigint")return`${Q}<integer>${$.toString()}</integer>`;if($ instanceof Uint8Array)return`${Q}<data>${xZ($)}</data>`;if($ instanceof Date)return`${Q}<date>${$.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray($)){if($.length===0)return`${Q}<array/>`;let Y=$.map((X)=>y8(X,Q+"\t")).join(`
|
|
6
6
|
`);return`${Q}<array>
|
|
7
7
|
${Y}
|
|
8
|
-
${Q}</array>`}let Z=Object.keys($);if(Z.length===0)return`${Q}<dict/>`;let J=Z.map((Y)=>`${Q} <key>${
|
|
9
|
-
`+
|
|
8
|
+
${Q}</array>`}let Z=Object.keys($);if(Z.length===0)return`${Q}<dict/>`;let J=Z.map((Y)=>`${Q} <key>${o6(Y)}</key>
|
|
9
|
+
`+y8($[Y],Q+"\t")).join(`
|
|
10
10
|
`);return`${Q}<dict>
|
|
11
11
|
${J}
|
|
12
|
-
${Q}</dict>`}function
|
|
13
|
-
`||$==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let Q=this.src.indexOf("-->",this.pos+4);if(Q<0)throw Error("unterminated comment");this.pos=Q+3}else if(this.src.startsWith("<?",this.pos)){let Q=this.src.indexOf("?>",this.pos+2);if(Q<0)throw Error("unterminated processing instruction");this.pos=Q+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let Q=0;while(this.pos<this.src.length){let Z=this.src[this.pos++];if(Z==="[")Q++;else if(Z==="]")Q--;else if(Z===">"&&Q===0)break}}else break}}nextTag(){if(this.skip(),this.pos>=this.src.length)return null;if(this.src[this.pos]!=="<")throw Error(`expected '<' at ${this.pos}`);let $=this.src.indexOf(">",this.pos);if($<0)throw Error("unterminated tag");let Q=this.src.slice(this.pos+1,$);this.pos=$+1;let Z=Q.startsWith("/"),J=Q.endsWith("/");return{name:Q.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:J,isClose:Z}}readText(){let $=this.src.indexOf("<",this.pos),Q=$<0?this.src.slice(this.pos):this.src.slice(this.pos,$);return this.pos=$<0?this.src.length:$,Q.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&")}}function
|
|
14
|
-
`)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(J))continue;let Y=J.split(/\s+/),X=Number(Y[1]),G=Y[Y.length-1];if(G)Z.set(G,X)}return Array.from(Z,([J,Y])=>({socketPath:J,pid:Y}))}async function Z$($){let Q=new P4;return new Promise((Z,J)=>{let Y=$$.createConnection({path:$}),X=(G)=>{Q.close(G),J(G)};Y.once("error",X),Y.once("connect",()=>{Y.off("error",X),b8(Y,Q),Z({socket:Y,stream:Q})})})}async function C8($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return T4(J)}function D8($,Q){let Z=v8({Label:"inspect-webkit",...Q}),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function T8($,Q){if($.Error)throw Error(`lockdown ${Q} error: ${String($.Error)}`);if($.Request!==Q)throw Error(`lockdown expected Request=${Q}, got ${String($.Request)}`)}function l6($,Q,Z,J){return new Promise((Y,X)=>{Q();let G=new P4,H=J$.connect({socket:$,cert:Buffer.from(Z.HostCertificate),key:Buffer.from(Z.HostPrivateKey),ca:Buffer.from(Z.RootCertificate),rejectUnauthorized:!1}),K=(W)=>{Z0(`${J} tls error:`,W),G.close(W),X(W)};H.once("error",K),H.once("secureConnect",()=>{Z0(`${J} tls handshake complete`),H.off("error",K);let W=b8(H,G);Y({socket:H,stream:G,detach:W})})})}class E4{socket;stream;pair;udid;deviceID;detach;constructor($,Q,Z,J,Y,X){this.socket=$,this.stream=Q,this.pair=Z,this.udid=J,this.deviceID=Y,this.detach=X}static async open($,Q){Z0("connecting usbmux tunnel to lockdown port",m6);let{socket:Z,stream:J,detach:Y}=await c6($.DeviceID,m6),X=new E4(Z,J,Q,$.Properties.SerialNumber,$.DeviceID,Y);Z0("sending QueryType"),D8(Z,{Request:"QueryType"});let G=await C8(J);if(Z0("QueryType reply:",G),T8(G,"QueryType"),G.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(G.Type)}`);return X}async startSession(){Z0("StartSession with HostID",this.pair.HostID),D8(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let $=await C8(this.stream);if(Z0("StartSession reply:",$),T8($,"StartSession"),$.EnableSessionSSL){Z0("upgrading to TLS");let Q=await l6(this.socket,this.detach,this.pair,"lockdown");this.socket=Q.socket,this.stream=Q.stream,this.detach=Q.detach,Z0("TLS upgrade complete")}}async startService($){Z0("StartService",$),D8(this.socket,{Request:"StartService",Service:$});let Q=await C8(this.stream);return Z0("StartService reply:",Q),T8(Q,"StartService"),{port:Q.Port,enableServiceSSL:Boolean(Q.EnableServiceSSL),service:$}}async connectService($){Z0("connecting service tunnel to port",$.port,"ssl=",$.enableServiceSSL);let{socket:Q,stream:Z,detach:J}=await c6(this.deviceID,$.port);if(!$.enableServiceSSL)return{socket:Q,stream:Z};let Y=await l6(Q,J,this.pair,"service");return{socket:Y.socket,stream:Y.stream}}close(){this.socket.end()}}async function IZ($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return jZ(J)}function qZ($,Q){let Z=v8(Q),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function xZ(){let $=crypto.getRandomValues(new Uint8Array(16));$[6]=$[6]&15|64,$[8]=$[8]&63|128;let Q=Array.from($,(Z)=>Z.toString(16).padStart(2,"0")).join("");return`${Q.slice(0,8)}-${Q.slice(8,12)}-${Q.slice(12,16)}-${Q.slice(16,20)}-${Q.slice(20)}`}class $4{socket;stream;connectionId=xZ();subscribers=new Set;reading;constructor($,Q){this.socket=$,this.stream=Q,this.reading=(async()=>{try{while(!Q.closed){let Z=await IZ(Q);for(let J of[...this.subscribers])try{J(Z)}catch{}}}catch{}})()}subscribe($){return this.subscribers.add($),()=>this.subscribers.delete($)}waitFor($,Q=5000){return new Promise((Z,J)=>{let Y=setTimeout(()=>{X(),J(Error(`timeout waiting for ${$} after ${Q}ms`))},Q),X=this.subscribe((G)=>{if(G.__selector===$)clearTimeout(Y),X(),Z(G)})})}send($,Q){qZ(this.socket,{__selector:$,__argument:{WIRConnectionIdentifierKey:this.connectionId,...Q}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let $=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!$)return[];let Z=$.__argument.WIRApplicationDictionaryKey??{},J=[];for(let[Y,X]of Object.entries(Z)){let G=X;J.push({appId:Y,bundleId:G.WIRApplicationBundleIdentifierKey,name:G.WIRApplicationNameKey,isProxy:Boolean(G.WIRIsApplicationProxyKey),isActive:Boolean(G.WIRIsApplicationActiveKey),hostAppId:G.WIRHostApplicationIdentifierKey})}return J}async getListing($){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:$});let Q=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!Q)return[];let J=Q.__argument.WIRListingKey??{},Y=[];for(let X of Object.values(J)){let G=X;Y.push({pageId:Number(G.WIRPageIdentifierKey??0),title:G.WIRTitleKey??"",url:G.WIRURLKey??"",type:G.WIRTypeKey??""})}return Y}get connection(){return this.connectionId}forwardSocketSetup($,Q,Z){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRAutomaticallyPause:!1})}forwardSocketData($,Q,Z,J){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRSocketDataKey:J})}forwardDidClose($,Q,Z){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z})}onMessage($){return this.subscribe($)}close(){this.socket.end()}}class C4{ws;wi;appId;pageId;senderKey;filters=new Map;toolRequestMap=new Map;adapterRequestMap=new Map;requestId=0;innerTargetId=null;wrappedAckIds=new Set;outgoingQueue=[];sawAnyTargetCreated=!1;constructor($,Q,Z,J,Y){this.ws=$,this.wi=Q,this.appId=Z,this.pageId=J,this.senderKey=Y}addMessageFilter($,Q){let Z=this.filters.get($);if(!Z)this.filters.set($,Z=[]);Z.push(Q)}callTarget($,Q={}){return new Promise((Z,J)=>{let Y=--this.requestId;this.adapterRequestMap.set(Y,{resolve:Z,reject:J}),this.sendRaw(JSON.stringify({id:Y,method:$,params:Q}))})}fireEventToTools($,Q){this.sendToTools(JSON.stringify({method:$,params:Q}))}fireResultToTools($,Q){this.sendToTools(JSON.stringify({id:$,result:Q}))}fireErrorToTools($,Q){this.sendToTools(JSON.stringify({id:$,error:{code:Q.code??-32000,message:Q.message}}))}replyEmpty($){if(typeof $.id==="number")this.fireResultToTools($.id,{});return Promise.resolve(null)}async onMessageFromTools($){let Q;try{Q=JSON.parse($)}catch{return}if(typeof Q.method==="string"&&typeof Q.id==="number")this.toolRequestMap.set(Q.id,Q.method);let Z=`tools::${Q.method}`,J=this.filters.get(Z),Y=Q;if(J)for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendRaw(JSON.stringify(Y))}async onMessageFromTarget($){let Q;try{Q=JSON.parse($)}catch{return}if(Q.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let X=Q.params?.targetInfo;if(X?.type==="page"&&!this.innerTargetId)this.innerTargetId=X.targetId,this.flushQueue();return}if(Q.method==="Target.didCommitProvisionalTarget"){let X=Q.params?.newTargetId;if(typeof X==="string")this.innerTargetId=X;return}if(Q.method==="Target.targetDestroyed")return;if(Q.method==="Target.dispatchMessageFromTarget"){let X=Q.params?.message;if(typeof X==="string")return this.onMessageFromTarget(X);return}if(typeof Q.id==="number"&&this.wrappedAckIds.has(Q.id)){this.wrappedAckIds.delete(Q.id);return}if(typeof Q.id==="number"){let X=this.adapterRequestMap.get(Q.id);if(X){if(this.adapterRequestMap.delete(Q.id),"error"in Q&&Q.error)X.reject(Q.error);else X.resolve(Q.result??{});return}let G=this.toolRequestMap.get(Q.id);if(G){this.toolRequestMap.delete(Q.id);let H=`target::${G}`;if("error"in Q&&this.filters.has("target::error"))H="target::error";let K=this.filters.get(H);if(!K)return this.sendToTools($);let W=Q;for(let z of K){if(!W)break;W=await z(W)}if(W)this.sendToTools(JSON.stringify(W));return}return this.sendToTools($)}let Z=`target::${Q.method}`,J=this.filters.get(Z);if(!J)return this.sendToTools($);let Y=Q;for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendToTools(JSON.stringify(Y))}sendRaw($){let Q=null;try{Q=JSON.parse($)}catch{}let Z=Q&&typeof Q.method==="string"&&Q.method.startsWith("Target.");if(this.innerTargetId&&Q&&!Z){if(typeof Q.id==="number")this.wrappedAckIds.add(Q.id);let J={id:Q.id,method:"Target.sendMessageToTarget",params:{id:Q.id,message:$,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(J));return}if(!this.innerTargetId&&Q&&!Z){if(this.outgoingQueue.push($),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let J=this.outgoingQueue;this.outgoingQueue=[];for(let Y of J)this.writeFrame(Y)}},250);return}this.writeFrame($)}flushQueue(){if(this.outgoingQueue.length===0)return;let $=this.outgoingQueue;this.outgoingQueue=[];for(let Q of $)this.sendRaw(Q)}writeFrame($){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode($))}sendToTools($){if(this.ws.readyState===1)this.ws.send($)}}function SZ(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function b($,Q,Z){return $.fireResultToTools(Q.id,Z),Promise.resolve(null)}function yZ($,Q){$.addMessageFilter("tools::Debugger.canSetScriptSource",(Z)=>b($,Z,{result:!1})),$.addMessageFilter("tools::Debugger.setBlackboxPatterns",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(Z)=>b($,Z,{})),$.addMessageFilter("target::Debugger.enable",(Z)=>{return $.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),$.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Debugger.scriptParsed",(Z)=>{if(Z.params?.scriptId)Q.lastScriptEval.value=String(Z.params.scriptId);return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpoint",(Z)=>{let J=Z.params??{};return Z.params={location:J.location,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpointByUrl",(Z)=>{let J=Z.params??{};return Z.params={lineNumber:J.lineNumber,url:J.url,urlRegex:J.urlRegex,columnNumber:J.columnNumber,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)});for(let Z of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])$.addMessageFilter(`tools::Debugger.${Z}`,(J)=>Promise.resolve(J));$.addMessageFilter("target::Debugger.paused",(Z)=>{let J=Z.params?.callFrames;if(Array.isArray(J))for(let Y of J){if(Y.functionName==null&&typeof Y.name==="string")Y.functionName=Y.name;if(!Y.location&&Y.sourceCodeLocation)Y.location={scriptId:String(Y.sourceCodeLocation.scriptId??""),lineNumber:Y.sourceCodeLocation.lineNumber??0,columnNumber:Y.sourceCodeLocation.columnNumber??0};if(Array.isArray(Y.scopeChain)){for(let X of Y.scopeChain)if(!X.object&&X.value)X.object=X.value}}return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBlackboxedRanges",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Debugger.setSkipAllPauses",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Debugger.setPauseOnExceptions",(Z)=>{return Promise.resolve(Z)})}function kZ($,Q){$.addMessageFilter("target::Runtime.executionContextCreated",(Z)=>{let J=Z.params?.context;if(J){if(!J.origin)J.origin=J.name??"";let Y=Number(J.id),X=!!(J.isPageContext||J.type==="normal");if(Number.isFinite(Y)&&Y>0){if(!Q.pageExecCtx.id||X&&!Q.pageExecCtx.isPage)Q.pageExecCtx.id=Y,Q.pageExecCtx.isPage=X}if(J.frameId)J.auxData={frameId:J.frameId,isDefault:!0},delete J.frameId}return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.evaluate",(Z)=>{let J=Z.params;if(!J)return Promise.resolve(Z);if(J.throwOnSideEffect)return b($,Z,{result:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"},exceptionDetails:{exceptionId:0,text:"EvalError: Possible side-effect in debug-evaluate",lineNumber:0,columnNumber:0,url:"",exception:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"}}});if("silent"in J)J.doNotPauseOnExceptionsAndMuteConsole=!!J.silent,delete J.silent;if("userGesture"in J)J.emulateUserGesture=!!J.userGesture,delete J.userGesture;return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.evaluate",(Z)=>{let J=Z.result;if(J?.wasThrown){if(J.result)J.result.subtype="error";J.exceptionDetails={exceptionId:0,text:J.result?.description??"Uncaught",url:"",scriptId:Q.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:Q.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:J.result}}return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.getProperties",(Z)=>{let J=Z.result;if(!J)return Promise.resolve(Z);let Y=Array.isArray(J.result)?J.result:Array.isArray(J.properties)?J.properties:null;if(Y)J.result=Y.filter((X)=>X.isOwn||X.nativeGetter).map((X)=>({...X,isOwn:!0})),delete J.properties;if(Array.isArray(J.internalProperties))J.internalProperties=J.internalProperties.map((X)=>({name:X.name,value:X.value}));return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.compileScript",(Z)=>b($,Z,{scriptId:null,exceptionDetails:null})),$.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(Z)=>b($,Z,{names:[]})),$.addMessageFilter("tools::Runtime.terminateExecution",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Runtime.getIsolateId",(Z)=>b($,Z,{id:"inspect-webkit"})),$.addMessageFilter("tools::Runtime.getHeapUsage",(Z)=>b($,Z,{usedSize:0,totalSize:0})),$.addMessageFilter("tools::Runtime.discardConsoleEntries",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Runtime.releaseObject",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.releaseObjectGroup",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.callFunctionOn",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.queryObjects",(Z)=>Promise.resolve(Z)),$.addMessageFilter("target::Debugger.globalObjectCleared",(Z)=>{return $.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function fZ($,Q){$.addMessageFilter("tools::Log.startViolationsReport",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Log.stopViolationsReport",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Log.clear",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.disable",(Z)=>{return Z.method="Console.disable",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.enable",(Z)=>{return Z.method="Console.enable",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.enable",(Z)=>{return $.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Console.messageAdded",(Z)=>{let J=Z.params?.message??{},X=(Array.isArray(J.stackTrace)?J.stackTrace:Array.isArray(J.stackTrace?.callFrames)?J.stackTrace.callFrames:[]).map((K)=>({functionName:K.functionName??"",scriptId:K.scriptId??"",url:K.url??"",lineNumber:Number(K.lineNumber??0),columnNumber:Number(K.columnNumber??0)})),G=X.length?{callFrames:X}:void 0,H=Date.now();if(J.source==="console-api"){let K=J.type==="log"?J.level??"log":J.type??"log",W=vZ(K),z=Array.isArray(J.parameters)&&J.parameters.length>0?J.parameters:[{type:"string",value:String(J.text??"")}],L={type:W,args:z,executionContextId:Q.pageExecCtx.id||1,timestamp:H,stackTrace:G};return Q.lastConsoleApiCalled.value=L,$.fireEventToTools("Runtime.consoleAPICalled",L),Promise.resolve(null)}if(J.source==="javascript"&&J.level==="error")return $.fireEventToTools("Runtime.exceptionThrown",{timestamp:H,exceptionDetails:{exceptionId:0,text:String(J.text??"Uncaught"),lineNumber:Number(J.line??0),columnNumber:Number(J.column??0),scriptId:Q.lastScriptEval.value,url:J.url,stackTrace:G,exception:{type:"string",value:String(J.text??"")}}}),Promise.resolve(null);return $.fireEventToTools("Log.entryAdded",{entry:{source:J.source??"other",level:bZ(J.level??J.type??"log"),text:String(J.text??""),timestamp:H,url:J.url,lineNumber:J.line,stackTrace:G,networkRequestId:J.networkRequestId}}),Promise.resolve(null)}),$.addMessageFilter("target::Console.messagesCleared",()=>{return $.fireEventToTools("Log.entriesCleared",{}),$.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:Q.pageExecCtx.id||1,timestamp:Date.now()}),Q.lastConsoleApiCalled.value=null,Promise.resolve(null)}),$.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let Z=Q.lastConsoleApiCalled.value;if(Z)$.fireEventToTools("Runtime.consoleAPICalled",{...Z,timestamp:Date.now()});return Promise.resolve(null)}),$.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function vZ($){switch($){case"warn":case"warning":return"warning";case"log":case"info":case"error":case"debug":case"dir":case"dirxml":case"table":case"trace":case"clear":case"assert":case"profile":case"profileEnd":case"count":case"timeEnd":case"startGroup":case"startGroupCollapsed":case"endGroup":return $;default:return"log"}}function bZ($){switch($){case"log":case"debug":return"verbose";case"info":return"info";case"warn":case"warning":return"warning";case"error":return"error";default:return"info"}}function hZ($){let Q=new Set;$.addMessageFilter("tools::DOM.enable",(Z)=>b($,Z,{})),$.addMessageFilter("tools::DOM.setInspectMode",(Z)=>{if(Z.method="DOM.setInspectModeEnabled",Z.params)Z.params.enabled=Z.params.mode==="searchForNode",delete Z.params.mode,delete Z.params.highlightConfig;return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.setInspectedNode",(Z)=>{return Z.method="Console.addInspectedNode",Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.performSearch",(Z)=>{if(Z.params)Z.params={query:Z.params.query,caseSensitive:!!Z.params.caseSensitive};return Promise.resolve(Z)}),$.addMessageFilter("target::DOM.performSearch",(Z)=>{let J=Z.result?.searchId;if(typeof J==="string")Q.add(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.discardSearchResults",(Z)=>{let J=Z.params?.searchId;if(typeof J==="string")Q.delete(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(Z)=>{let J=Z.params?.backendNodeIds??[],Y=await Promise.all(J.map((X)=>$.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:X}).then((G)=>G.nodeId).catch(()=>X)));return $.fireResultToTools(Z.id,{nodeIds:Y}),null}),$.addMessageFilter("tools::DOM.getBoxModel",(Z)=>{return $.callTarget("DOM.highlightNode",{highlightConfig:{showInfo:!0,contentColor:{r:111,g:168,b:220,a:0.66},paddingColor:{r:147,g:196,b:125,a:0.55},borderColor:{r:255,g:229,b:153,a:0.66},marginColor:{r:246,g:178,b:107,a:0.66}},nodeId:Z.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),$.addMessageFilter("tools::DOM.getNodeForLocation",async(Z)=>{try{let Y=(await $.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${Z.params?.x},${Z.params?.y})`})).result?.objectId;if(!Y)return $.fireResultToTools(Z.id,{nodeId:0}),null;let X=await $.callTarget("DOM.requestNode",{objectId:Y});$.fireResultToTools(Z.id,{nodeId:X.nodeId,backendNodeId:X.nodeId})}catch(J){$.fireErrorToTools(Z.id,{message:J?.message??String(J)})}return null}),$.addMessageFilter("tools::DOM.resolveNode",(Z)=>{if(Z.params&&Z.params.objectGroup===void 0)delete Z.params.objectGroup;return Promise.resolve(Z)})}function uZ($){$.addMessageFilter("tools::DOMDebugger.getEventListeners",async(Q)=>{try{let Z=await $.callTarget("DOM.requestNode",{objectId:Q.params?.objectId}),Y=((await $.callTarget("DOM.getEventListenersForNode",{nodeId:Z.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((X)=>({type:X.type,useCapture:!!X.useCapture,passive:!!X.passive,once:!!X.once,location:X.location,handler:X.handler}));$.fireResultToTools(Q.id,{listeners:Y})}catch(Z){$.fireErrorToTools(Q.id,{message:Z?.message??String(Z)})}return null}),$.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(Q)=>b($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(Q)=>b($,Q,{})),$.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(Q)=>b($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(Q)=>b($,Q,{}))}function gZ($,Q){$.addMessageFilter("tools::Page.setOverlayMessage",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),$.addMessageFilter("tools::Page.configureOverlay",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),$.addMessageFilter("tools::Page.getNavigationHistory",async(X)=>{try{let G=await $.callTarget("Runtime.evaluate",{expression:"window.location.href"}),H=await $.callTarget("Runtime.evaluate",{expression:"document.title"});$.fireResultToTools(X.id,{currentIndex:0,entries:[{id:0,url:G.result?.value??"",userTypedURL:G.result?.value??"",title:H.result?.value??"",transitionType:"link"}]})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("target::Page.frameNavigated",(X)=>{return X$(X.params?.frame),Promise.resolve(X)}),$.addMessageFilter("target::Page.getResourceTree",(X)=>{return w8(X.result?.frameTree),Promise.resolve(X)}),$.addMessageFilter("tools::Page.getFrameTree",async(X)=>{if(typeof X.id!=="number")return null;try{let G=await $.callTarget("Page.getResourceTree",{}),H=G$(G?.frameTree);w8(H),$.fireResultToTools(X.id,{frameTree:H})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("tools::Page.createIsolatedWorld",(X)=>{if(typeof X.id!=="number")return Promise.resolve(null);return b($,X,{executionContextId:Q.pageExecCtx.id||1})});let Z=1;$.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(X)=>b($,X,{identifier:`pptr-${Z++}`})),$.addMessageFilter("tools::WebMCP.enable",(X)=>b($,X,{})),$.addMessageFilter("tools::WebMCP.disable",(X)=>b($,X,{})),$.addMessageFilter("tools::Page.captureScreenshot",(X)=>{return $.fireErrorToTools(X.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),$.addMessageFilter("tools::Page.startScreencast",(X)=>b($,X,{})),$.addMessageFilter("tools::Page.stopScreencast",(X)=>b($,X,{})),$.addMessageFilter("tools::Page.screencastFrameAck",(X)=>b($,X,{})),$.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(X)=>b($,X,{}));let J="",Y="0.1";$.addMessageFilter("target::Page.frameNavigated",(X)=>{let G=X.params?.frame;if(G)Y=G.id??Y,J=G.loaderId??J,$.fireEventToTools("Page.frameStartedLoading",{frameId:Y}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"init",timestamp:0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"commit",timestamp:0});return Promise.resolve(X)}),$.addMessageFilter("target::Page.domContentEventFired",(X)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"DOMContentLoaded",timestamp:X.params?.timestamp??0}),Promise.resolve(X)}),$.addMessageFilter("target::Page.loadEventFired",(X)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"load",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkAlmostIdle",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkIdle",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.frameStoppedLoading",{frameId:Y}),Promise.resolve(X)})}function X$($){if(!$)return;if(!$.securityOrigin)try{$.securityOrigin=new URL($.url??"").origin}catch{$.securityOrigin="://"}if(!$.mimeType)$.mimeType="text/html"}function w8($){if(!$)return;if(X$($.frame),Array.isArray($.childFrames))$.childFrames.forEach(w8)}function G$($){if(!$)return $;let Q={frame:$.frame};if(Array.isArray($.childFrames))Q.childFrames=$.childFrames.map(G$);return Q}function pZ($){$.addMessageFilter("tools::Overlay.enable",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Overlay.disable",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Overlay.highlightNode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.highlightNode",Q.params={highlightConfig:Z.highlightConfig,nodeId:Z.nodeId,objectId:Z.objectId},Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightFrame",(Q)=>{return Q.method="DOM.highlightFrame",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightQuad",(Q)=>{return Q.method="DOM.highlightQuad",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightRect",(Q)=>{return Q.method="DOM.highlightRect",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.hideHighlight",(Q)=>{return Q.method="DOM.hideHighlight",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setInspectMode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.setInspectModeEnabled",Q.params={enabled:typeof Z.mode==="string"&&Z.mode!=="none",highlightConfig:Z.highlightConfig},Promise.resolve(Q)})}function cZ($){$.addMessageFilter("tools::Emulation.canEmulate",(Q)=>b($,Q,{result:!0})),$.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",(Q)=>{return Q.method="Page.setTouchEmulationEnabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",(Q)=>{return Q.method="Page.setScriptExecutionDisabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setEmulatedMedia",(Q)=>{return Q.method="Page.setEmulatedMedia",Promise.resolve(Q)}),$.addMessageFilter("tools::Rendering.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Emulation.setUserAgentOverride",(Q)=>{let Z=Q.params?.userAgent??"";return Q.method="Page.overrideUserAgent",Q.params={value:Z},Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(Q)=>b($,Q,{}))}function P8($){switch($){case"Document":case"Image":case"Font":case"Script":case"XHR":case"Fetch":case"Ping":case"WebSocket":return $;case"StyleSheet":return"Stylesheet";default:return"Other"}}function rZ($){if(!$)return $;return{...oZ,...$,hasPostData:$.postData!=null}}function tZ($){if(!$)return $;let Q=0,Z=$.headers??{},J=Z["Content-Length"]??Z["content-length"];if(J!=null)Q=Number(J)||0;return{...aZ,...$,fromDiskCache:$.source==="disk-cache",fromServiceWorker:$.source==="service-worker",encodedDataLength:Q}}function sZ($,Q){if(!$)return;for(let[Z,J]of Object.entries(Q))if(Z in $&&!(J in $))$[J]=$[Z],delete $[Z]}function eZ($){let Q=typeof $.size==="number"?$.size:($.name?.length??0)+($.value?.length??0);return{name:$.name,value:$.value,domain:$.domain,path:$.path,expires:$.expires??-1,size:Q,httpOnly:!!$.httpOnly,secure:!!$.secure,session:!!$.session,...$.sameSite?{sameSite:$.sameSite}:{}}}function $2($,Q){let Z=new Map,J=1e4,Y=1024,X=4194304,G=Promise.resolve(),H=(W)=>{let z=G.then(W,W);return G=z.catch(()=>{}),z};for(let[W,z]of Object.entries(mZ))$.addMessageFilter(`tools::${W}`,(L)=>{return L.method=z,Promise.resolve(L)});$.addMessageFilter("tools::Network.setCacheDisabled",(W)=>{if(W.params&&"cacheDisabled"in W.params)W.params={disabled:!!W.params.cacheDisabled};return Promise.resolve(W)});let K=async(W)=>{try{let z=await $.callTarget("Page.getCookies",{}),L=Array.isArray(z?.cookies)?z.cookies.map(eZ):[];$.fireResultToTools(W.id,{cookies:L})}catch(z){$.fireErrorToTools(W.id,{message:z?.message??String(z)})}return null};$.addMessageFilter("tools::Network.getCookies",K),$.addMessageFilter("tools::Network.getAllCookies",K),$.addMessageFilter("tools::Network.setCookie",(W)=>{let z=W.params??{};return W.method="Page.setCookie",W.params={cookie:{name:z.name,value:z.value,domain:z.domain??"",path:z.path??"/",expires:z.expires??-1,session:!1,httpOnly:!!z.httpOnly,secure:!!z.secure,sameSite:z.sameSite??"None"}},Promise.resolve(W)}),$.addMessageFilter("tools::Network.setCookies",async(W)=>{let z=Array.isArray(W.params?.cookies)?W.params.cookies:[];try{await Promise.all(z.map((L)=>$.callTarget("Page.setCookie",{cookie:L}))),$.fireResultToTools(W.id,{})}catch(L){$.fireErrorToTools(W.id,{message:L?.message??String(L)})}return null}),$.addMessageFilter("tools::Network.deleteCookies",(W)=>{let z=W.params??{},L=z.url??`https://${(z.domain??"").replace(/^\./,"")}${z.path??"/"}`;return W.method="Page.deleteCookie",W.params={cookieName:z.name,url:L},Promise.resolve(W)}),$.addMessageFilter("tools::Network.deleteCookie",(W)=>{return W.method="Page.deleteCookie",Promise.resolve(W)}),$.addMessageFilter("tools::Network.clearBrowserCookies",async(W)=>{try{let z=await $.callTarget("Page.getCookies",{}),L=Array.isArray(z?.cookies)?z.cookies:[];await Promise.all(L.map((B)=>$.callTarget("Page.deleteCookie",{cookieName:B.name,url:`${B.secure?"https":"http"}://${(B.domain??"").replace(/^\./,"")}${B.path??"/"}`}).catch(()=>{}))),$.fireResultToTools(W.id,{})}catch(z){$.fireErrorToTools(W.id,{message:z?.message??String(z)})}return null}),$.addMessageFilter("tools::Network.canEmulateNetworkConditions",(W)=>b($,W,{result:!1})),$.addMessageFilter("tools::Network.setExtraHTTPHeaders",(W)=>b($,W,{})),$.addMessageFilter("tools::Network.setBlockedURLs",(W)=>b($,W,{})),$.addMessageFilter("tools::Network.emulateNetworkConditions",(W)=>b($,W,{})),$.addMessageFilter("tools::Network.setMonitoringXHREnabled",(W)=>b($,W,{})),$.addMessageFilter("tools::Network.getResponseBody",async(W)=>{let z=W.params?.requestId,L=typeof z==="string"?Z.get(z):void 0;if(!L)return $.fireErrorToTools(W.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(L.method&&L.method.toUpperCase()!=="GET")return $.fireErrorToTools(W.id,{message:`Network.getResponseBody: cannot recover ${L.method} response body (bridge re-fetch is GET-only)`}),null;if(L.bytes===0)return $.fireResultToTools(W.id,{body:"",base64Encoded:!1}),null;return H(async()=>{try{let B={};for(let[P,N]of Object.entries(L.headers??{})){let V=P.toLowerCase();if(V==="if-none-match"||V==="if-modified-since"||V==="host"||V==="connection")continue;B[P]=String(N)}let U=new AbortController,M=setTimeout(()=>U.abort(),1e4),D;try{D=await fetch(L.url,{headers:B,redirect:"follow",signal:U.signal})}finally{clearTimeout(M)}let I=Number(D.headers.get("content-length")??"");if(Number.isFinite(I)&&I>4194304){$.fireErrorToTools(W.id,{message:`Network.getResponseBody: response too large (${I} bytes > ${"4194304"}) — skipped re-fetch`});try{await D.arrayBuffer()}catch{}return}let E=Buffer.from(await D.arrayBuffer());if(E.byteLength>4194304){$.fireErrorToTools(W.id,{message:`Network.getResponseBody: response too large (${E.byteLength} bytes > 4194304)`});return}let O=((D.headers.get("content-type")??"").split(";")[0]??"").trim(),j=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(O),R=j?E.toString("utf8"):E.toString("base64");$.fireResultToTools(W.id,{body:R,base64Encoded:!j})}catch(B){$.fireErrorToTools(W.id,{message:`Network.getResponseBody re-fetch failed: ${B?.message??String(B)}`})}}),null});for(let[W,z]of Object.entries(lZ))$.addMessageFilter(`target::${W}`,(L)=>{return sZ(L.params,z),Promise.resolve(L)});$.addMessageFilter("target::Network.requestWillBeSent",(W)=>{let z=W.params;if(z){if(Object.assign(z,{...dZ,...z}),z.request=rZ(z.request),z.type=P8(z.type),typeof z.requestId==="string"&&typeof z.request?.url==="string"){if(Z.size>=1024){let L=Z.keys().next().value;if(L!==void 0)Z.delete(L)}Z.set(z.requestId,{url:z.request.url,method:z.request.method,headers:z.request.headers,frameId:z.frameId,bytes:0})}}return Promise.resolve(W)}),$.addMessageFilter("target::Network.responseReceived",(W)=>{let z=W.params;if(z)Object.assign(z,{...iZ,...z}),z.response=tZ(z.response),z.type=P8(z.type);return Promise.resolve(W)}),$.addMessageFilter("target::Network.loadingFinished",(W)=>{let z=W.params;if(z){let L=z.metrics?.responseBodyBytesReceived;if(typeof L==="number"&&z.encodedDataLength==null)z.encodedDataLength=L;if(Object.assign(z,{...nZ,...z}),typeof z.requestId==="string"&&typeof L==="number"){let B=Z.get(z.requestId);if(B&&L>B.bytes)B.bytes=L}}return Promise.resolve(W)}),$.addMessageFilter("target::Network.dataReceived",(W)=>{let z=W.params;if(z&&typeof z.requestId==="string"){let L=Z.get(z.requestId);if(L){let B=Number(z.dataLength)||0;L.bytes+=B}}return Promise.resolve(W)}),$.addMessageFilter("target::Network.loadingFailed",(W)=>{let z=W.params;if(z){if(z.type=P8(z.type),!("canceled"in z))z.canceled=!1}return Promise.resolve(W)}),$.addMessageFilter("target::Network.requestServedFromMemoryCache",(W)=>{if(W.method="Network.requestServedFromCache",W.params)W.params={requestId:W.params.requestId};return Promise.resolve(W)}),$.addMessageFilter("tools::Network.loadNetworkResource",async(W)=>{let z=W.params??{};if(!Q)return $.fireResultToTools(W.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let L=await $.callTarget("Network.loadResource",{frameId:z.frameId,url:z.url}),B=!!L?.content&&(L?.status??0)>=200&&(L?.status??0)<300,U;if(B)U=`network-resource:${z.frameId??""}:${z.url}`,Q.set(U,String(L.content));$.fireResultToTools(W.id,{resource:{success:B,stream:U,httpStatusCode:L?.status,headers:L?.headers,mimeType:L?.mimeType}})}catch(L){$.fireResultToTools(W.id,{resource:{success:!1,netError:2,netErrorName:L?.message??"ERR_FAILED"}})}return null})}function Q2($){for(let Q of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])$.addMessageFilter(`tools::${Q}`,(Z)=>b($,Z,{}))}function Z2($){$.addMessageFilter("target::Inspector.inspect",async(Q)=>{let Z=Q.params?.object?.objectId;if(typeof Z!=="string")return null;try{let Y=(await $.callTarget("DOM.requestNode",{objectId:Z}))?.nodeId;if(typeof Y==="number")$.fireEventToTools("Overlay.inspectNodeRequested",{backendNodeId:Y}),$.fireEventToTools("DOM.inspectNodeRequested",{backendNodeId:Y})}catch{}return null})}function Y2($){if(!$)return $;let Q=$.origin==="inspector";return{styleSheetId:$.styleSheetId,frameId:$.frameId,sourceURL:$.sourceURL??"",origin:$.origin==="author"?"regular":$.origin,title:$.title??"",disabled:!!$.disabled,isInline:!!$.isInline,startLine:$.startLine??0,startColumn:$.startColumn??0,isMutable:Q,isConstructed:Q,length:$.length??0,endLine:$.endLine??0,endColumn:$.endColumn??0,hasSourceURL:!!$.sourceURL}}function S8($){if(!$)return $;let Q={origin:$.origin==="author"?"regular":$.origin,style:j0($.style),selectorList:K2($.selectorList)};if($.ruleId?.styleSheetId)Q.styleSheetId=$.ruleId.styleSheetId;if(Array.isArray($.groupings))Q.media=$.groupings.map((Z)=>({text:Z.text,sourceURL:Z.sourceURL,source:G2[Z.type]}));return Q}function z2($){let Q={lastNodeId:0},Z=new Map;async function J(Y,X){let G=Z.get(Y);if(!G)try{if(G=(await $.callTarget("CSS.getStyleSheet",{styleSheetId:Y}))?.styleSheet,G)Z.set(Y,G)}catch{}let H=G?.rules??[];for(let K=0;K<H.length;K++)if(J2(H[K]?.style?.range,X))return{styleSheetId:Y,ordinal:K};return{styleSheetId:Y,ordinal:0}}$.addMessageFilter("tools::CSS.enable",(Y)=>{return $.fireResultToTools(Y.id,{}),Promise.resolve(null)}),$.addMessageFilter("target::CSS.styleSheetAdded",(Y)=>{if(Y.params?.header)Y.params.header=Y2(Y.params.header);return Promise.resolve(Y)}),$.addMessageFilter("target::CSS.getInlineStylesForNode",(Y)=>{let X=Y.result;if(X)Y.result={inlineStyle:j0(X.inlineStyle),attributesStyle:j0(X.attributesStyle)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(Y)=>{if(typeof Y.params?.nodeId==="number")Q.lastNodeId=Y.params.nodeId;try{let[X,G]=await Promise.all([$.callTarget("CSS.getInlineStylesForNode",{nodeId:Y.params.nodeId}),$.callTarget("CSS.getMatchedStylesForNode",{nodeId:Y.params.nodeId,includePseudo:!0,includeInherited:!0})]);$.fireResultToTools(Y.id,{inlineStyle:j0(X?.inlineStyle),attributesStyle:j0(X?.attributesStyle),matchedCSSRules:g8(G?.matchedCSSRules),pseudoElements:V2(G?.pseudoElements),inherited:W2(G?.inherited),cssKeyframesRules:[]})}catch(X){$.fireErrorToTools(Y.id,{message:X?.message??String(X)})}return null}),$.addMessageFilter("tools::CSS.setStyleTexts",async(Y)=>{let X=Y.params?.edits??[],G=[];for(let H of X)try{let K=await J(H.styleSheetId,H.range),W=await $.callTarget("CSS.setStyleText",{styleId:K,text:H.text});G.push(j0(W?.style)),Z.delete(H.styleSheetId),$.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:H.styleSheetId})}catch{G.push(null)}return $.fireResultToTools(Y.id,{styles:G}),null}),$.addMessageFilter("tools::CSS.setRuleSelector",async(Y)=>{let{styleSheetId:X,range:G,selector:H}=Y.params??{};try{let K=await J(X,G);Y.params={ruleId:K,selector:H}}catch(K){return $.fireErrorToTools(Y.id,{message:K?.message??String(K)}),null}return Y}),$.addMessageFilter("target::CSS.setRuleSelector",(Y)=>{if(Y.result?.rule)Y.result={rule:S8(Y.result.rule)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.addRule",async(Y)=>{let X=Y.params??{},G=String(X.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let H=await $.callTarget("CSS.addRule",{contextNodeId:Q.lastNodeId,styleSheetId:X.styleSheetId,selector:G});$.fireResultToTools(Y.id,{rule:S8(H?.rule)})}catch(H){$.fireErrorToTools(Y.id,{message:H?.message??String(H)})}return null})}function M2($){$.addMessageFilter("tools::Browser.getVersion",(Q)=>b($,Q,H2)),$.addMessageFilter("tools::Browser.getWindowForTarget",(Q)=>b($,Q,{windowId:1,bounds:{}})),$.addMessageFilter("tools::Browser.setWindowBounds",(Q)=>b($,Q,{}))}function _2($){switch($){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function N2($){let Q=async(Z)=>{let J=Z.params??{},Y=_2(J.type);if(!Y)return $.fireResultToTools(Z.id,{}),null;let X=Y==="click"?["mousedown","click","mouseup"]:[Y];try{for(let G of X){let H={x:Number(J.x)||0,y:Number(J.y)||0,modifiers:Number(J.modifiers)||0,button:J.button??"none",type:G},K=`(${F2}, __sd_simulate(${JSON.stringify(H)}))`;await $.callTarget("Runtime.evaluate",{expression:K})}$.fireResultToTools(Z.id,{})}catch(G){$.fireErrorToTools(Z.id,{message:G?.message??String(G)})}return null};$.addMessageFilter("tools::Input.dispatchMouseEvent",Q),$.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",Q),$.addMessageFilter("tools::Input.setIgnoreInputEvents",(Z)=>{return $.fireResultToTools(Z.id,{}),Promise.resolve(null)})}function B2($){let Q=new Map;return $.addMessageFilter("tools::IO.read",(Z)=>{let J=String(Z.params?.handle??""),Y=Number(Z.params?.size)||L2,X=Number(Z.params?.offset)||0,G=Q.get(J);if(G===void 0)return $.fireResultToTools(Z.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let H=G.slice(X,X+Y),K=X+Y>=G.length;return $.fireResultToTools(Z.id,{data:H,eof:K,base64Encoded:!1}),Promise.resolve(null)}),$.addMessageFilter("tools::IO.close",(Z)=>{return Q.delete(String(Z.params?.handle??"")),$.fireResultToTools(Z.id,{}),Promise.resolve(null)}),Q}function U2($){$.addMessageFilter("tools::Accessibility.enable",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Accessibility.disable",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Accessibility.getPartialAXTree",async(Q)=>{let Z=Q.params??{},J=Z.nodeId??Z.backendNodeId;if(typeof J!=="number")return $.fireResultToTools(Q.id,{nodes:[]}),null;try{let X=(await $.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:J}))?.properties??{},G={nodeId:String(J),ignored:Boolean(X.ignored),role:X.role?{type:"role",value:String(X.role)}:void 0,name:X.label?{type:"computedString",value:String(X.label)}:void 0,backendDOMNodeId:J,childIds:[],properties:[]};$.fireResultToTools(Q.id,{nodes:[G]})}catch(Y){$.fireResultToTools(Q.id,{nodes:[]})}return null})}function j2($){for(let[Z,J]of Object.entries(A2))$.addMessageFilter(`tools::${Z}`,(Y)=>b($,Y,J));for(let Z of O2)for(let J of["enable","disable"])$.addMessageFilter(`tools::${Z}.${J}`,(Y)=>b($,Y,{}));let Q=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[Z,J]of Q)$.addMessageFilter(`tools::${Z}`,(Y)=>b($,Y,J))}function y8($){let Q=SZ();j2($);let Z=B2($);yZ($,Q),kZ($,Q),fZ($,Q),hZ($),uZ($),gZ($,Q),pZ($),cZ($),$2($,Z),Q2($),Z2($),z2($),M2($),N2($),U2($)}function V$($){let Q=`${$.reqHost}/devtools/page/${$.id}`;return{description:$.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${Q}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${Q}`,id:$.id,title:$.title,type:$.type,url:$.url,webSocketDebuggerUrl:`ws://${Q}`,faviconUrl:""}}function f0($){return $.replace(/[&<>"']/g,(Q)=>R2[Q])}function W$($){return K$.createServer((Q,Z)=>{let J=new URL(Q.url??"/","http://placeholder"),Y=Q.headers.host??"";if(J.pathname==="/json/version"){let X=typeof $.version==="function"?$.version(Y):$.version;return E8(Z,X)}if(J.pathname==="/json"||J.pathname==="/json/list")return E8(Z,$.listTargets(Y));if(J.pathname==="/json/protocol")return E8(Z,{});if(J.pathname==="/")return C2(Z,$,Y);Z.writeHead(404,{"content-type":"text/plain"}),Z.end("not found")})}function E8($,Q,Z=200){$.writeHead(Z,{"content-type":"application/json; charset=utf-8"}),$.end(JSON.stringify(Q))}function C2($,Q,Z){let J=Q.listTargets(Z),Y=J.map((K)=>`<li><strong>${f0(K.title||K.url||K.id)}</strong><br><small>${f0(K.url)}</small><br><small>copy & paste into Chrome's address bar:</small><br><code style="user-select:all">${f0(K.devtoolsFrontendUrl)}</code></li>`).join(""),X=`inspect-webkit${Q.brand?` (${Q.brand})`:""}`,G=Q.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${f0(Z)}</code>.</p>`,H=`<!doctype html><meta charset=utf-8><title>${f0(X)}</title><style>body{font:14px -apple-system,sans-serif;max-width:760px;margin:2em auto;padding:0 1em}code{display:block;background:#f4f4f4;padding:.5em;border-radius:4px;word-break:break-all;margin:.4em 0 1em}li{margin-bottom:1.5em;list-style:none}</style><h1>${f0(X)} — ${J.length} target${J.length===1?"":"s"}</h1>`+G+`<ul>${Y}</ul>`+'<hr><p>JSON: <a href="/json/list">/json/list</a> · <a href="/json/version">/json/version</a></p>';$.writeHead(200,{"content-type":"text/html; charset=utf-8"}),$.end(H)}function z$($,Q,Z){return new Promise((J,Y)=>{$.once("error",(G)=>{if(G.port==null)G.port=Z;if(G.host==null)G.host=Q;Y(G)});let X=Q==="localhost"||Q==="::1"||Q==="127.0.0.1"?"::":Q;$.listen({port:Z,host:X,ipv6Only:!1},()=>{$.off("error",Y),J()})})}function H$($){let Q=!process.env.NO_COLOR&&process.stderr.isTTY===!0,Z=(K,W)=>Q?`\x1B[${K}m${W}\x1B[0m`:W,J=(K)=>Z("1",K),Y=(K)=>Z("2",K),X=(K)=>Z("36",K),G=(K)=>Z("32",K),H=`http://${$.host}:${$.port}`;console.error(`${G("●")} ${J(`${$.brand} CDP`)} ${X(H)}`),console.error(` ${Y("chrome")} chrome://inspect → ${$.host}:${$.port}`),console.error(` ${Y("vscode")} "type": "chrome", "port": ${$.port}`)}function D2($,Q){let Z=!!process.env.INSPECT_WEBKIT_DEBUG,J=new Map,Y=!1,X=!1,G=!1,H=new Map,K=null;function W(j){if($.readyState!==1)return;let R=JSON.stringify(j);if(Z)console.error(`[browser] tools<< ${R.slice(0,240)}`);$.send(R)}function z(j,R){let P={method:j,params:R};if(K)P.sessionId=K;W(P)}function L(j,R){return{targetId:j.targetId,type:j.type==="page"?"page":j.type||"other",title:j.title||"",url:j.url||"",attached:R,canAccessOpener:!1,browserContextId:"default"}}function B(j){for(let R of J.values())if(R.targetId===j)return!0;return!1}function U(j,R){let P=Q.listEntries().find((_)=>_.targetId===j);if(!P)return null;let N=crypto.randomUUID(),V=(_)=>{let C;try{C=JSON.parse(_)}catch{return}C.sessionId=N,W(C)},F=Q.createPageSession(j,V);if(!F)return null;return J.set(N,{handle:F,targetId:j}),z("Target.attachedToTarget",{sessionId:N,targetInfo:L(P,!0),waitingForDebugger:R}),{sessionId:N,entry:P}}function M(j){let R=J.get(j);if(!R)return!1;try{R.handle.close()}catch{}return J.delete(j),z("Target.detachedFromTarget",{sessionId:j,targetId:R.targetId}),!0}function D(){let j=Q.listEntries(),R=new Set;for(let P of j){R.add(P.targetId);let N=H.get(P.targetId);if(!N){if(H.set(P.targetId,P),Y)z("Target.targetCreated",{targetInfo:L(P,B(P.targetId))});if(X&&!B(P.targetId))U(P.targetId,G)}else if(N.title!==P.title||N.url!==P.url){if(H.set(P.targetId,P),Y)z("Target.targetInfoChanged",{targetInfo:L(P,B(P.targetId))})}}for(let P of[...H.keys()]){if(R.has(P))continue;H.delete(P);for(let[N,V]of J)if(V.targetId===P)M(N);if(Y)z("Target.targetDestroyed",{targetId:P})}}let I=setInterval(D,Q.refreshMs??1000);function E(j,R){if(j)R.sessionId=j;W(R)}function O(j,R){let{id:P,method:N}=j,V=j.params??{};switch(N){case"Browser.getVersion":return E(R,{id:P,result:{protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"@",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""}});case"Target.attachToBrowserTarget":{if(!K)K=crypto.randomUUID();return E(R,{id:P,result:{sessionId:K}})}case"Target.setDiscoverTargets":{if(Y=!!V.discover,Y)for(let F of Q.listEntries())H.set(F.targetId,F),z("Target.targetCreated",{targetInfo:L(F,B(F.targetId))});if(typeof P==="number")E(R,{id:P,result:{}});return}case"Target.getTargets":{let F=Q.listEntries().map((_)=>L(_,B(_.targetId)));return E(R,{id:P,result:{targetInfos:F}})}case"Target.setAutoAttach":{if(X=!!V.autoAttach,G=!!V.waitForDebuggerOnStart,X){for(let F of Q.listEntries())if(!B(F.targetId))U(F.targetId,G)}if(typeof P==="number")E(R,{id:P,result:{}});return}case"Target.attachToTarget":{for(let[_,C]of J)if(C.targetId===V.targetId){if(typeof P==="number")E(R,{id:P,result:{sessionId:_}});return}let F=U(V.targetId,!1);if(!F){if(typeof P==="number")E(R,{id:P,error:{code:-32000,message:"No target with given id found"}});return}if(typeof P==="number")E(R,{id:P,result:{sessionId:F.sessionId}});return}case"Target.detachFromTarget":{if(M(V.sessionId),typeof P==="number")E(R,{id:P,result:{}});return}case"Target.sendMessageToTarget":{let F=J.get(V.sessionId);if(F)F.handle.onMessageFromTools(V.message);if(typeof P==="number")E(R,{id:P,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof P==="number")E(R,{id:P,result:{}});return;case"Target.getBrowserContexts":{if(typeof P==="number")E(R,{id:P,result:{browserContextIds:["default"]}});return}}if(typeof P==="number")E(R,{id:P,error:{code:-32601,message:`Browser-level method '${N??"?"}' not implemented`}})}$.on("message",(j,R)=>{let P=R?new TextDecoder().decode(j):j.toString();if(Z)console.error(`[browser] tools>> ${P.slice(0,240)}`);let N;try{N=JSON.parse(P)}catch{return}if(typeof N.sessionId==="string"){if(N.sessionId===K){let _={...N};return delete _.sessionId,O(_,N.sessionId)}let V=J.get(N.sessionId);if(!V){if(typeof N.id==="number")W({id:N.id,sessionId:N.sessionId,error:{code:-32000,message:`Session ${N.sessionId} not found`}});return}let F={...N};delete F.sessionId,V.handle.onMessageFromTools(JSON.stringify(F));return}O(N,void 0)}),$.on("close",()=>{clearInterval(I);for(let[,j]of J)try{j.handle.close()}catch{}J.clear()})}async function P2($={}){let Q=$.port??9222,Z=$.host??"localhost",J=await E2();if(J.length===0)console.error("warn: no inspectable sources found (no devices, no simulators)."),console.error(" The server will still run; new targets will appear if you start one.");let Y=new Map,X=new WeakMap,G=new Map;for(let N of J)G.set(N,[]),X.set(N,new Set),N.wi.subscribe((V)=>{let{__selector:F,__argument:_}=V;if(!F||!_)return;if(F==="_rpc_reportConnectedApplicationList:"){let C=_.WIRApplicationDictionaryKey??{},T=Object.entries(C).map(([S,k])=>({appId:S,bundleId:k.WIRApplicationBundleIdentifierKey,name:k.WIRApplicationNameKey??k.WIRApplicationBundleIdentifierKey??S,isProxy:Boolean(k.WIRIsApplicationProxyKey)}));G.set(N,T);let x=X.get(N);for(let S of T){if(S.isProxy||x.has(S.appId))continue;x.add(S.appId),N.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:S.appId})}}else if(F==="_rpc_applicationConnected:"){let C=_,T=G.get(N)??[];if(!T.find((x)=>x.appId===C.WIRApplicationIdentifierKey))T.push({appId:C.WIRApplicationIdentifierKey,bundleId:C.WIRApplicationBundleIdentifierKey,name:C.WIRApplicationNameKey??C.WIRApplicationBundleIdentifierKey,isProxy:Boolean(C.WIRIsApplicationProxyKey)}),G.set(N,T);if(!C.WIRIsApplicationProxyKey){let x=X.get(N);if(!x.has(C.WIRApplicationIdentifierKey))x.add(C.WIRApplicationIdentifierKey),N.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:C.WIRApplicationIdentifierKey})}}else if(F==="_rpc_applicationDisconnected:"){let C=G.get(N)??[];G.set(N,C.filter((T)=>T.appId!==_.WIRApplicationIdentifierKey)),Y.delete(`${N.id}:${_.WIRApplicationIdentifierKey}`)}else if(F==="_rpc_applicationSentListing:"){let C=_.WIRApplicationIdentifierKey,T=_.WIRListingKey??{},x=new Map;for(let[S,k]of Object.entries(T))x.set(S,{pageId:Number(k.WIRPageIdentifierKey??0),title:k.WIRTitleKey??"",url:k.WIRURLKey??"",type:k.WIRTypeKey??"",connectionId:typeof k.WIRConnectionIdentifierKey==="string"?k.WIRConnectionIdentifierKey:null});Y.set(`${N.id}:${C}`,x)}}),N.wi.send("_rpc_reportIdentifier:",{}),N.wi.send("_rpc_getConnectedApplications:",{});let H=setInterval(()=>{for(let N of J){let V=G.get(N)??[];for(let F of V){if(F.isProxy)continue;N.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:F.appId})}}},T2),K=new Map;function W(){let N=[];for(let V of J){let F=G.get(V)??[];for(let _ of F){if(_.isProxy)continue;let C=Y.get(`${V.id}:${_.appId}`);if(!C)continue;for(let T of C.values()){let x=!!T.connectionId&&T.connectionId!==V.wi.connection;N.push({targetId:`${V.id}:${_.appId}:${T.pageId}`,source:V,appId:_.appId,appName:_.name,bundleId:_.bundleId,pageId:T.pageId,title:T.title,url:T.url,type:T.type,inUseByOtherInspector:x})}}}return N}let z=crypto.randomUUID(),L=W$({brand:"",version:(N)=>({Browser:"Safari/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit","WebKit-Version":"605.1.15",webSocketDebuggerUrl:`ws://${N}/devtools/browser/${z}`}),listTargets:(N)=>W().map((V)=>V$({reqHost:N,id:V.targetId,description:`${V.source.label}${V.bundleId?` (${V.bundleId})`:""}`,title:V.title||V.appName,url:/^https?:/i.test(V.url)?V.url:"about:blank",type:i6(V.type)}))}),B=new Y$.default({noServer:!0}),U=`/devtools/browser/${z}`;L.on("upgrade",(N,V,F)=>{let _=new URL(N.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${_.pathname}`),_.pathname===U){B.handleUpgrade(N,V,F,(T)=>{D2(T,{listEntries:()=>W().map((x)=>({targetId:x.targetId,type:i6(x.type),title:x.title||x.appName,url:x.url})),createPageSession:(x,S)=>{let k=W().find((y)=>y.targetId===x);if(!k)return null;return M(k,S)}})});return}if(!_.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${_.pathname}`),V.destroy();return}let C=decodeURIComponent(_.pathname.slice(15));B.handleUpgrade(N,V,F,(T)=>{P(T,C)})});function M(N,V){let F=crypto.randomUUID(),C=new C4({readyState:1,send:(S)=>V(S)},N.source.wi,N.appId,N.pageId,F);y8(C),K.set(F,C);let T=!!process.env.INSPECT_WEBKIT_DEBUG,x=N.source.wi.subscribe((S)=>{if(S.__selector!=="_rpc_applicationSentData:")return;let k=S.__argument;if(!k)return;if(k.WIRDestinationKey&&k.WIRDestinationKey!==F)return;if(k.WIRApplicationIdentifierKey!==N.appId)return;if(k.WIRPageIdentifierKey!==void 0&&Number(k.WIRPageIdentifierKey)!==N.pageId)return;let y=k.WIRMessageDataKey??k.WIRSocketDataKey;if(!y)return;let u=typeof y==="string"?y:new TextDecoder().decode(y);if(T)console.error(`[cdp] target>> ${u.slice(0,240)}`);C.onMessageFromTarget(u)});return N.source.wi.forwardSocketSetup(N.appId,N.pageId,F),console.error(`# devtools attached: ${N.source.label} :: ${N.appName} :: ${N.title||N.url}`),{onMessageFromTools(S){if(T)console.error(`[cdp] tools>> ${S.slice(0,300)}`);C.onMessageFromTools(S)},close(){x();try{C.wi.forwardDidClose(C.appId,C.pageId,C.senderKey)}catch{}K.delete(C.senderKey)}}}let D=new Map,I=8000;function E(N){let V=D.get(N);if(V)return V;let F=W().find((y)=>y.targetId===N);if(!F)return null;let _=crypto.randomUUID(),T=new C4({readyState:1,send:()=>{}},F.source.wi,F.appId,F.pageId,_);y8(T),K.set(_,T);let x=F.source.wi.subscribe((y)=>{if(y.__selector!=="_rpc_applicationSentData:")return;let u=y.__argument;if(!u)return;if(u.WIRDestinationKey&&u.WIRDestinationKey!==_)return;if(u.WIRApplicationIdentifierKey!==F.appId)return;if(u.WIRPageIdentifierKey!==void 0&&Number(u.WIRPageIdentifierKey)!==F.pageId)return;let p=u.WIRMessageDataKey??u.WIRSocketDataKey;if(!p)return;let q=typeof p==="string"?p:new TextDecoder().decode(p);T.onMessageFromTarget(q)});F.source.wi.forwardSocketSetup(F.appId,F.pageId,_);let S=Promise.race([T.callTarget("DOM.getDocument",{depth:0}).then((y)=>y?.root?.nodeId),new Promise((y,u)=>setTimeout(()=>u(Error("DOM.getDocument timeout")),5000))]),k={cdp:T,rootNodeIdPromise:S,idleTimer:null,close(){if(k.idleTimer)clearTimeout(k.idleTimer);x();try{T.wi.forwardDidClose(T.appId,T.pageId,T.senderKey)}catch{}K.delete(_),D.delete(N)}};return D.set(N,k),S.catch(()=>k.close()),k}function O(N){if(N.idleTimer)clearTimeout(N.idleTimer);N.idleTimer=setTimeout(()=>N.close(),I)}function j(N){if(N){D.get(N)?.close();return}for(let V of D.values())V.close()}async function R(N,V){let F=E(N);if(!F)return;O(F);try{if(V){let _=await F.rootNodeIdPromise;if(!_)return;await F.cdp.callTarget("DOM.highlightNode",{nodeId:_,highlightConfig:{showInfo:!1,contentColor:{r:111,g:168,b:220,a:0.55},paddingColor:{r:147,g:196,b:125,a:0},borderColor:{r:255,g:229,b:153,a:0},marginColor:{r:246,g:178,b:107,a:0}}})}else await F.cdp.callTarget("DOM.hideHighlight",{})}catch{F.close()}}function P(N,V){let F=W().find((x)=>x.targetId===V);if(!F){console.error(`# ws closed: unknown target ${V} (known: ${W().map((x)=>x.targetId).join(", ")||"none"})`),N.close(1011,`unknown target ${V}`);return}let _=M(F,(x)=>{if(N.readyState===1)N.send(x)}),C=!0;N.on("pong",()=>{C=!0});let T=setInterval(()=>{if(!C){try{N.terminate()}catch{}return}C=!1;try{N.ping()}catch{}},15000);N.on("message",(x,S)=>{let k=S?new TextDecoder().decode(x):x.toString();_.onMessageFromTools(k)}),N.on("close",()=>{clearInterval(T),_.close()})}return await z$(L,Z,Q),H$({brand:"safari",host:Z,port:Q}),{stop(){clearInterval(H);for(let N of D.values())N.close();B.close(),L.close();for(let N of J)try{N.wi.close(),N.lockdown?.close()}catch{}},getTargets(){return W()},highlightTarget(N,V){return R(N,V)},releaseHighlight(N){j(N)}}}async function E2(){let[$,Q]=await Promise.all([I2(),x2()]);return[...$,...Q]}async function I2(){let $=[];try{$=await s6()}catch(Z){return console.error(`warn: usbmux: ${Z.message}`),[]}return(await Promise.all($.map(q2))).filter((Z)=>Z!==null)}async function q2($){try{let Q=await e6($.Properties.SerialNumber),Z=await E4.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new $4(Y,X);return await G.reportIdentifier(),{kind:"device",id:`device:${$.Properties.SerialNumber}`,label:`device:${$.Properties.SerialNumber.slice(0,8)}`,wi:G,lockdown:Z}}catch(Q){return console.error(`warn: device ${$.Properties.SerialNumber}: ${Q.message}`),null}}async function x2(){let $=[];try{$=await Q$()}catch(Z){return console.error(`warn: simulator discovery: ${Z.message}`),[]}return(await Promise.all($.map(w2))).filter((Z)=>Z!==null)}async function w2($){try{let{socket:Q,stream:Z}=await Z$($.socketPath),J=new $4(Q,Z);return await J.reportIdentifier(),{kind:"simulator",id:`sim:${$.pid}`,label:`sim:${$.pid}`,wi:J}}catch(Q){return console.error(`warn: simulator ${$.socketPath}: ${Q.message}`),null}}function i6($){switch($){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class M${url;ws;handlers=new Set;openPromise;constructor($){this.url=$,this.ws=new d6($),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((Q,Z)=>{this.ws.once("open",()=>Q()),this.ws.once("error",(J)=>Z(J))}),this.ws.on("message",(Q,Z)=>{let J=Z?new TextDecoder().decode(Q):Q.toString();for(let Y of this.handlers)Y(J)})}ready(){return this.openPromise}onFrame($){return this.handlers.add($),()=>this.handlers.delete($)}forwardSocketData($,Q,Z,J){if(this.ws.readyState!==d6.OPEN)return;this.ws.send(new TextDecoder().decode(J))}forwardDidClose($,Q,Z){}close(){try{this.ws.close()}catch{}}}async function S2($){let Q=$.port??9223,Z=$.host??"localhost",{upstreams:J}=$,Y=W$({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(H)=>J.map((K)=>V$({reqHost:H,id:encodeURIComponent(K.url),description:K.label??"bun",title:K.label??K.url,url:K.url,type:"node"}))}),X=new Y$.default({noServer:!0});Y.on("upgrade",(H,K,W)=>{let z=new URL(H.url??"/","http://placeholder");if(!z.pathname.startsWith("/devtools/page/")){K.destroy();return}let L=decodeURIComponent(z.pathname.slice(15)),B=J.find((U)=>U.url===L);if(!B){K.destroy();return}X.handleUpgrade(H,K,W,(U)=>{G(U,B).catch((M)=>{console.error(`# bun attach failed: ${M.message}`);try{U.close(1011,M.message)}catch{}})})});async function G(H,K){let W=!!process.env.INSPECT_WEBKIT_DEBUG,z=new M$(K.url);await z.ready();let L=crypto.randomUUID(),B=new C4(H,z,"bun",0,L);y8(B);let U=z.onFrame((M)=>{if(W)console.error(`[bun] target>> ${M.slice(0,240)}`);B.onMessageFromTarget(M)});H.on("message",(M,D)=>{let I=D?new TextDecoder().decode(M):M.toString();if(W)console.error(`[bun] tools>> ${I.slice(0,300)}`);B.onMessageFromTools(I)}),H.on("close",()=>{U(),z.close()}),console.error(`# devtools attached: ${K.label??K.url}`)}return await z$(Y,Z,Q),H$({brand:"bun",host:Z,port:Q}),{stop(){X.close(),Y.close()},getTargets(){return J.slice()}}}async function F$(){return s6()}async function y2(){let[$,Q]=await Promise.all([k2(),f2()]);return[...$.flat(),...Q.flat()]}async function k2(){let $=await F$();return Promise.all($.map(v2))}async function f2(){let $=await Q$();return Promise.all($.map(b2))}async function v2($){let Q=null;try{return Q=await h2($),await _$(Q.client,{source:"device",udid:$.Properties.SerialNumber,deviceID:$.DeviceID})}catch(Z){return console.error(`warn: ${$.Properties.SerialNumber}: ${Z.message}`),[]}finally{Q?.client.close(),Q?.lockdown.close()}}async function b2($){let Q=null;try{let{socket:Z,stream:J}=await Z$($.socketPath);return Q=new $4(Z,J),await Q.reportIdentifier(),await _$(Q,{source:"simulator",udid:`sim:${$.pid}`})}catch(Z){return console.error(`warn: simulator (${$.socketPath}): ${Z.message}`),[]}finally{Q?.close()}}async function h2($){let Q=await e6($.Properties.SerialNumber),Z=await E4.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new $4(Y,X);return await G.reportIdentifier(),{client:G,lockdown:Z}}async function _$($,Q){let Z=(await $.listApplications()).filter((X)=>!X.isProxy),J=await Promise.all(Z.map((X)=>$.getListing(X.appId))),Y=[];for(let X=0;X<Z.length;X++){let G=Z[X];for(let H of J[X])Y.push({...Q,appId:G.appId,appName:G.name??G.bundleId??G.appId,bundleId:G.bundleId,pageId:H.pageId,title:H.title,url:H.url,type:H.type})}return Y}var XZ,GZ,g6,KZ,VZ,zZ,HZ,M0=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?zZ??=new WeakMap:HZ??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?XZ(GZ($)):{};let G=Q||!$||!$.__esModule?g6(Z,"default",{value:$,enumerable:!0}):Z;for(let H of KZ($))if(!VZ.call(G,H))g6(G,H,{get:WZ.bind($,H),enumerable:!0});if(J)Y.set($,G);return G},$0=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports),o,F0,D4,MZ,s0,e0,n6,o6,FZ,k8,f8,_Z,a6,NZ,LZ=`<?xml version="1.0" encoding="UTF-8"?>
|
|
12
|
+
${Q}</dict>`}function p8($){let Q=y8($,"");return new TextEncoder().encode(EZ+Q+IZ)}class Y${src;pos=0;constructor($){this.src=$}skip(){while(this.pos<this.src.length){let $=this.src[this.pos];if($===" "||$==="\t"||$===`
|
|
13
|
+
`||$==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let Q=this.src.indexOf("-->",this.pos+4);if(Q<0)throw Error("unterminated comment");this.pos=Q+3}else if(this.src.startsWith("<?",this.pos)){let Q=this.src.indexOf("?>",this.pos+2);if(Q<0)throw Error("unterminated processing instruction");this.pos=Q+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let Q=0;while(this.pos<this.src.length){let Z=this.src[this.pos++];if(Z==="[")Q++;else if(Z==="]")Q--;else if(Z===">"&&Q===0)break}}else break}}nextTag(){if(this.skip(),this.pos>=this.src.length)return null;if(this.src[this.pos]!=="<")throw Error(`expected '<' at ${this.pos}`);let $=this.src.indexOf(">",this.pos);if($<0)throw Error("unterminated tag");let Q=this.src.slice(this.pos+1,$);this.pos=$+1;let Z=Q.startsWith("/"),J=Q.endsWith("/");return{name:Q.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:J,isClose:Z}}readText(){let $=this.src.indexOf("<",this.pos),Q=$<0?this.src.slice(this.pos):this.src.slice(this.pos,$);return this.pos=$<0?this.src.length:$,Q.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&")}}function k8($,Q){let Z=(J)=>{let Y=$.nextTag();if(!Y||!Y.isClose||Y.name!==J)throw Error(`expected </${J}>`)};switch(Q){case"true":case"false":throw Error(`<${Q}> must be self-closing`);case"string":case"key":{let J=$.readText();return Z(Q),J}case"integer":{let J=$.readText().trim();if(Z("integer"),/^-?\d+$/.test(J)&&Math.abs(Number(J))<=Number.MAX_SAFE_INTEGER)return Number(J);return BigInt(J)}case"real":{let J=Number($.readText().trim());return Z("real"),J}case"data":{let J=qZ($.readText());return Z("data"),J}case"date":{let J=new Date($.readText().trim());return Z("date"),J}case"array":{let J=[];while(!0){let Y=$.nextTag();if(!Y)throw Error("unterminated <array>");if(Y.isClose&&Y.name==="array")return J;J.push(Y.selfClose?f8(Y.name):k8($,Y.name))}}case"dict":{let J={};while(!0){let Y=$.nextTag();if(!Y)throw Error("unterminated <dict>");if(Y.isClose&&Y.name==="dict")return J;if(Y.name!=="key")throw Error(`expected <key>, got <${Y.name}>`);let X=$.readText();Z("key");let G=$.nextTag();if(!G)throw Error("unterminated <dict>");J[X]=G.selfClose?f8(G.name):k8($,G.name)}}default:throw Error(`unknown plist tag <${Q}>`)}}function f8($){if($==="true")return!0;if($==="false")return!1;if($==="string")return"";if($==="data")return new Uint8Array(0);if($==="array")return[];if($==="dict")return{};throw Error(`self-closing <${$}/> not supported`)}function x4($){let Q=typeof $==="string"?$:new TextDecoder().decode($),Z=new Y$(Q);while(!0){let Y=Z.nextTag();if(!Y)throw Error("no <plist> root");if(Y.name==="plist"&&!Y.isClose)break}let J=Z.nextTag();if(!J)throw Error("empty plist");return J.selfClose?f8(J.name):k8(Z,J.name)}function j0($,Q,Z){let J=0;for(let Y=0;Y<Z;Y++)J=J*256+$[Q+Y];return J}function SZ($){if($.length<41)throw Error("bplist too short");let Q=new TextDecoder().decode($.slice(0,8));if(Q!=="bplist00")throw Error(`bad magic: ${Q}`);let Z=$.length-32,J=$[Z+6],Y=$[Z+7],X=j0($,Z+8,8),G=j0($,Z+16,8),H=j0($,Z+24,8),K=Array(X);for(let L=0;L<X;L++)K[L]=j0($,H+L*J,J);function W(L){return j0($,L,Y)}function z(L){let B=K[L],U=$[B],M=U>>4,D=U&15;function I(E){if(D!==15)return{len:D,next:E};let O=$[E];if((O&240)!==16)throw Error("expected int marker for length");let j=1<<(O&15);return{len:j0($,E+1,j),next:E+1+j}}switch(M){case 0:if(D===0)return null;if(D===8)return!1;if(D===9)return!0;if(D===15)return null;throw Error(`unknown singleton ${D}`);case 1:{let E=1<<D,O=j0($,B+1,E);if(E===8&&O>Number.MAX_SAFE_INTEGER)return BigInt(O);return O}case 2:{let E=1<<D,O=new DataView($.buffer,$.byteOffset+B+1,E);return E===4?O.getFloat32(0,!1):O.getFloat64(0,!1)}case 3:{let O=new DataView($.buffer,$.byteOffset+B+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+O*1000)}case 4:{let{len:E,next:O}=I(B+1);return $.slice(O,O+E)}case 5:{let{len:E,next:O}=I(B+1);return new TextDecoder("ascii").decode($.slice(O,O+E))}case 6:{let{len:E,next:O}=I(B+1),j=$.slice(O,O+E*2),R=new Uint8Array(j.length);for(let T=0;T<j.length;T+=2)R[T]=j[T+1],R[T+1]=j[T];return new TextDecoder("utf-16le").decode(R)}case 10:{let{len:E,next:O}=I(B+1),j=[];for(let R=0;R<E;R++)j.push(z(W(O+R*Y)));return j}case 13:{let{len:E,next:O}=I(B+1),j={};for(let R=0;R<E;R++){let T=z(W(O+R*Y)),N=z(W(O+(E+R)*Y));if(typeof T!=="string")throw Error(`non-string dict key: ${typeof T}`);j[T]=N}return j}default:throw Error(`unknown bplist marker 0x${U.toString(16)} at ${B}`)}}return z(G)}function wZ($){if($.length>=8){if(new TextDecoder().decode($.slice(0,8))==="bplist00")return SZ($)}return x4($)}class q4{chunks=[];size=0;waiters=[];closed=!1;closeErr=null;push($){if($.length===0)return;this.chunks.push($),this.size+=$.length,this.drain()}close($){this.closed=!0,this.closeErr=$??null;for(let Q of this.waiters)Q.reject($??Error("stream closed"));this.waiters=[]}read($){return new Promise((Q,Z)=>{if(this.closed&&this.size<$){Z(this.closeErr??Error("stream closed"));return}this.waiters.push({n:$,resolve:Q,reject:Z}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let $=this.waiters.shift(),Q=new Uint8Array($.n),Z=0;while(Z<$.n){let J=this.chunks[0],Y=$.n-Z;if(J.length<=Y)Q.set(J,Z),Z+=J.length,this.chunks.shift();else Q.set(J.subarray(0,Y),Z),this.chunks[0]=J.subarray(Y),Z+=Y}this.size-=$.n,$.resolve(Q)}}}function c8($,Q){let Z=(X)=>{Q.push(new Uint8Array(X.buffer,X.byteOffset,X.byteLength))},J=()=>Q.close(),Y=(X)=>Q.close(X);return $.on("data",Z),$.on("close",J),$.on("error",Y),()=>{$.off("data",Z),$.off("close",J),$.off("error",Y)}}async function m8(){let $=new q4;return new Promise((Q,Z)=>{let J=J$.createConnection({path:fZ}),Y=(X)=>{$.close(X),Z(X)};J.once("error",Y),J.once("connect",()=>{J.off("error",Y);let X=c8(J,$);Q({socket:J,stream:$,detach:X})})})}async function vZ($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!0);return(await $.read(Z-4)).slice(12)}function bZ($,Q,Z){let J=16+Z.length,Y=new Uint8Array(16),X=new DataView(Y.buffer);X.setUint32(0,J,!0),X.setUint32(4,yZ,!0),X.setUint32(8,kZ,!0),X.setUint32(12,Q,!0),$.write(Y),$.write(Z)}async function l8($,Q,Z,J){let Y=p8({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...J});bZ($,Z,Y);let X=await vZ(Q);return x4(X)}async function X$(){let{socket:$,stream:Q}=await m8();try{return(await l8($,Q,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{$.end()}}async function G$($){let{socket:Q,stream:Z}=await m8();try{let Y=(await l8(Q,Z,1,{MessageType:"ReadPairRecord",PairRecordID:$})).PairRecordData;if(!Y)throw Error(`no pair record for ${$} — pair the device first (open Finder/iTunes, tap "Trust")`);return x4(Y)}finally{Q.end()}}async function a6($,Q){let{socket:Z,stream:J,detach:Y}=await m8(),X=(Q&255)<<8|Q>>8&255,G=await l8(Z,J,1,{MessageType:"Connect",DeviceID:$,PortNumber:X});if(G.MessageType!=="Result"||G.Number!==0){Z.end();let H=G.Number??"?";throw Error(`Connect to device ${$} port ${Q} failed (code ${H})`)}return{socket:Z,stream:J,detach:Y}}async function V$(){let $=hZ("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if($.status!==0||!$.stdout)return[];let Q=$.stdout.toString("utf8"),Z=new Map;for(let J of Q.split(`
|
|
14
|
+
`)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(J))continue;let Y=J.split(/\s+/),X=Number(Y[1]),G=Y[Y.length-1];if(G)Z.set(G,X)}return Array.from(Z,([J,Y])=>({socketPath:J,pid:Y}))}async function W$($){let Q=new q4;return new Promise((Z,J)=>{let Y=K$.createConnection({path:$}),X=(G)=>{Q.close(G),J(G)};Y.once("error",X),Y.once("connect",()=>{Y.off("error",X),c8(Y,Q),Z({socket:Y,stream:Q})})})}async function I8($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return x4(J)}function x8($,Q){let Z=p8({Label:"inspect-webkit",...Q}),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function q8($,Q){if($.Error)throw Error(`lockdown ${Q} error: ${String($.Error)}`);if($.Request!==Q)throw Error(`lockdown expected Request=${Q}, got ${String($.Request)}`)}function t6($,Q,Z,J){return new Promise((Y,X)=>{Q();let G=new q4,H=z$.connect({socket:$,cert:Buffer.from(Z.HostCertificate),key:Buffer.from(Z.HostPrivateKey),ca:Buffer.from(Z.RootCertificate),rejectUnauthorized:!1}),K=(W)=>{Z0(`${J} tls error:`,W),G.close(W),X(W)};H.once("error",K),H.once("secureConnect",()=>{Z0(`${J} tls handshake complete`),H.off("error",K);let W=c8(H,G);Y({socket:H,stream:G,detach:W})})})}class S4{socket;stream;pair;udid;deviceID;detach;constructor($,Q,Z,J,Y,X){this.socket=$,this.stream=Q,this.pair=Z,this.udid=J,this.deviceID=Y,this.detach=X}static async open($,Q){Z0("connecting usbmux tunnel to lockdown port",r6);let{socket:Z,stream:J,detach:Y}=await a6($.DeviceID,r6),X=new S4(Z,J,Q,$.Properties.SerialNumber,$.DeviceID,Y);Z0("sending QueryType"),x8(Z,{Request:"QueryType"});let G=await I8(J);if(Z0("QueryType reply:",G),q8(G,"QueryType"),G.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(G.Type)}`);return X}async startSession(){Z0("StartSession with HostID",this.pair.HostID),x8(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let $=await I8(this.stream);if(Z0("StartSession reply:",$),q8($,"StartSession"),$.EnableSessionSSL){Z0("upgrading to TLS");let Q=await t6(this.socket,this.detach,this.pair,"lockdown");this.socket=Q.socket,this.stream=Q.stream,this.detach=Q.detach,Z0("TLS upgrade complete")}}async startService($){Z0("StartService",$),x8(this.socket,{Request:"StartService",Service:$});let Q=await I8(this.stream);return Z0("StartService reply:",Q),q8(Q,"StartService"),{port:Q.Port,enableServiceSSL:Boolean(Q.EnableServiceSSL),service:$}}async connectService($){Z0("connecting service tunnel to port",$.port,"ssl=",$.enableServiceSSL);let{socket:Q,stream:Z,detach:J}=await a6(this.deviceID,$.port);if(!$.enableServiceSSL)return{socket:Q,stream:Z};let Y=await t6(Q,J,this.pair,"service");return{socket:Y.socket,stream:Y.stream}}close(){this.socket.end()}}async function gZ($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return wZ(J)}function uZ($,Q){let Z=p8(Q),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function pZ(){let $=crypto.getRandomValues(new Uint8Array(16));$[6]=$[6]&15|64,$[8]=$[8]&63|128;let Q=Array.from($,(Z)=>Z.toString(16).padStart(2,"0")).join("");return`${Q.slice(0,8)}-${Q.slice(8,12)}-${Q.slice(12,16)}-${Q.slice(16,20)}-${Q.slice(20)}`}class Z4{socket;stream;connectionId=pZ();subscribers=new Set;reading;constructor($,Q){this.socket=$,this.stream=Q,this.reading=(async()=>{try{while(!Q.closed){let Z=await gZ(Q);for(let J of[...this.subscribers])try{J(Z)}catch{}}}catch{}})()}subscribe($){return this.subscribers.add($),()=>this.subscribers.delete($)}waitFor($,Q=5000){return new Promise((Z,J)=>{let Y=setTimeout(()=>{X(),J(Error(`timeout waiting for ${$} after ${Q}ms`))},Q),X=this.subscribe((G)=>{if(G.__selector===$)clearTimeout(Y),X(),Z(G)})})}send($,Q){uZ(this.socket,{__selector:$,__argument:{WIRConnectionIdentifierKey:this.connectionId,...Q}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let $=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!$)return[];let Z=$.__argument.WIRApplicationDictionaryKey??{},J=[];for(let[Y,X]of Object.entries(Z)){let G=X;J.push({appId:Y,bundleId:G.WIRApplicationBundleIdentifierKey,name:G.WIRApplicationNameKey,isProxy:Boolean(G.WIRIsApplicationProxyKey),isActive:Boolean(G.WIRIsApplicationActiveKey),hostAppId:G.WIRHostApplicationIdentifierKey})}return J}async getListing($){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:$});let Q=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!Q)return[];let J=Q.__argument.WIRListingKey??{},Y=[];for(let X of Object.values(J)){let G=X;Y.push({pageId:Number(G.WIRPageIdentifierKey??0),title:G.WIRTitleKey??"",url:G.WIRURLKey??"",type:G.WIRTypeKey??""})}return Y}get connection(){return this.connectionId}forwardSocketSetup($,Q,Z){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRAutomaticallyPause:!1})}forwardSocketData($,Q,Z,J){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRSocketDataKey:J})}forwardDidClose($,Q,Z){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z})}onMessage($){return this.subscribe($)}close(){this.socket.end()}}class E4{ws;wi;appId;pageId;senderKey;filters=new Map;toolRequestMap=new Map;adapterRequestMap=new Map;requestId=0;innerTargetId=null;wrappedAckIds=new Set;outgoingQueue=[];sawAnyTargetCreated=!1;constructor($,Q,Z,J,Y){this.ws=$,this.wi=Q,this.appId=Z,this.pageId=J,this.senderKey=Y}addMessageFilter($,Q){let Z=this.filters.get($);if(!Z)this.filters.set($,Z=[]);Z.push(Q)}callTarget($,Q={}){return new Promise((Z,J)=>{let Y=--this.requestId;this.adapterRequestMap.set(Y,{resolve:Z,reject:J}),this.sendRaw(JSON.stringify({id:Y,method:$,params:Q}))})}fireEventToTools($,Q){this.sendToTools(JSON.stringify({method:$,params:Q}))}fireResultToTools($,Q){this.sendToTools(JSON.stringify({id:$,result:Q}))}fireErrorToTools($,Q){this.sendToTools(JSON.stringify({id:$,error:{code:Q.code??-32000,message:Q.message}}))}replyEmpty($){if(typeof $.id==="number")this.fireResultToTools($.id,{});return Promise.resolve(null)}async onMessageFromTools($){let Q;try{Q=JSON.parse($)}catch{return}if(typeof Q.method==="string"&&typeof Q.id==="number")this.toolRequestMap.set(Q.id,Q.method);let Z=`tools::${Q.method}`,J=this.filters.get(Z),Y=Q;if(J)for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendRaw(JSON.stringify(Y))}async onMessageFromTarget($){let Q;try{Q=JSON.parse($)}catch{return}if(Q.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let X=Q.params?.targetInfo;if(X?.type==="page"&&!this.innerTargetId)this.innerTargetId=X.targetId,this.flushQueue();return}if(Q.method==="Target.didCommitProvisionalTarget"){let X=Q.params?.newTargetId;if(typeof X==="string")this.innerTargetId=X;return}if(Q.method==="Target.targetDestroyed")return;if(Q.method==="Target.dispatchMessageFromTarget"){let X=Q.params?.message;if(typeof X==="string")return this.onMessageFromTarget(X);return}if(typeof Q.id==="number"&&this.wrappedAckIds.has(Q.id)){this.wrappedAckIds.delete(Q.id);return}if(typeof Q.id==="number"){let X=this.adapterRequestMap.get(Q.id);if(X){if(this.adapterRequestMap.delete(Q.id),"error"in Q&&Q.error)X.reject(Q.error);else X.resolve(Q.result??{});return}let G=this.toolRequestMap.get(Q.id);if(G){this.toolRequestMap.delete(Q.id);let H=`target::${G}`;if("error"in Q&&this.filters.has("target::error"))H="target::error";let K=this.filters.get(H);if(!K)return this.sendToTools($);let W=Q;for(let z of K){if(!W)break;W=await z(W)}if(W)this.sendToTools(JSON.stringify(W));return}return this.sendToTools($)}let Z=`target::${Q.method}`,J=this.filters.get(Z);if(!J)return this.sendToTools($);let Y=Q;for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendToTools(JSON.stringify(Y))}sendRaw($){let Q=null;try{Q=JSON.parse($)}catch{}let Z=Q&&typeof Q.method==="string"&&Q.method.startsWith("Target.");if(this.innerTargetId&&Q&&!Z){if(typeof Q.id==="number")this.wrappedAckIds.add(Q.id);let J={id:Q.id,method:"Target.sendMessageToTarget",params:{id:Q.id,message:$,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(J));return}if(!this.innerTargetId&&Q&&!Z){if(this.outgoingQueue.push($),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let J=this.outgoingQueue;this.outgoingQueue=[];for(let Y of J)this.writeFrame(Y)}},250);return}this.writeFrame($)}flushQueue(){if(this.outgoingQueue.length===0)return;let $=this.outgoingQueue;this.outgoingQueue=[];for(let Q of $)this.sendRaw(Q)}writeFrame($){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode($))}sendToTools($){if(this.ws.readyState===1)this.ws.send($)}}function mZ(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function b($,Q,Z){return $.fireResultToTools(Q.id,Z),Promise.resolve(null)}function lZ($,Q){$.addMessageFilter("tools::Debugger.canSetScriptSource",(Z)=>b($,Z,{result:!1})),$.addMessageFilter("tools::Debugger.setBlackboxPatterns",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(Z)=>b($,Z,{})),$.addMessageFilter("target::Debugger.enable",(Z)=>{return $.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),$.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Debugger.scriptParsed",(Z)=>{if(Z.params?.scriptId)Q.lastScriptEval.value=String(Z.params.scriptId);return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpoint",(Z)=>{let J=Z.params??{};return Z.params={location:J.location,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpointByUrl",(Z)=>{let J=Z.params??{};return Z.params={lineNumber:J.lineNumber,url:J.url,urlRegex:J.urlRegex,columnNumber:J.columnNumber,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)});for(let Z of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])$.addMessageFilter(`tools::Debugger.${Z}`,(J)=>Promise.resolve(J));$.addMessageFilter("target::Debugger.paused",(Z)=>{let J=Z.params?.callFrames;if(Array.isArray(J))for(let Y of J){if(Y.functionName==null&&typeof Y.name==="string")Y.functionName=Y.name;if(!Y.location&&Y.sourceCodeLocation)Y.location={scriptId:String(Y.sourceCodeLocation.scriptId??""),lineNumber:Y.sourceCodeLocation.lineNumber??0,columnNumber:Y.sourceCodeLocation.columnNumber??0};if(Array.isArray(Y.scopeChain)){for(let X of Y.scopeChain)if(!X.object&&X.value)X.object=X.value}}return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBlackboxedRanges",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Debugger.setSkipAllPauses",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Debugger.setPauseOnExceptions",(Z)=>{return Promise.resolve(Z)})}function dZ($,Q){$.addMessageFilter("target::Runtime.executionContextCreated",(Z)=>{let J=Z.params?.context;if(J){if(!J.origin)J.origin=J.name??"";let Y=Number(J.id),X=!!(J.isPageContext||J.type==="normal");if(Number.isFinite(Y)&&Y>0){if(!Q.pageExecCtx.id||X&&!Q.pageExecCtx.isPage)Q.pageExecCtx.id=Y,Q.pageExecCtx.isPage=X}if(J.frameId)J.auxData={frameId:J.frameId,isDefault:!0},delete J.frameId}return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.evaluate",(Z)=>{let J=Z.params;if(!J)return Promise.resolve(Z);if(J.throwOnSideEffect)return b($,Z,{result:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"},exceptionDetails:{exceptionId:0,text:"EvalError: Possible side-effect in debug-evaluate",lineNumber:0,columnNumber:0,url:"",exception:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"}}});if("silent"in J)J.doNotPauseOnExceptionsAndMuteConsole=!!J.silent,delete J.silent;if("userGesture"in J)J.emulateUserGesture=!!J.userGesture,delete J.userGesture;return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.evaluate",(Z)=>{let J=Z.result;if(J?.wasThrown){if(J.result)J.result.subtype="error";J.exceptionDetails={exceptionId:0,text:J.result?.description??"Uncaught",url:"",scriptId:Q.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:Q.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:J.result}}return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.getProperties",(Z)=>{let J=Z.result;if(!J)return Promise.resolve(Z);let Y=Array.isArray(J.result)?J.result:Array.isArray(J.properties)?J.properties:null;if(Y)J.result=Y.filter((X)=>X.isOwn||X.nativeGetter).map((X)=>({...X,isOwn:!0})),delete J.properties;if(Array.isArray(J.internalProperties))J.internalProperties=J.internalProperties.map((X)=>({name:X.name,value:X.value}));return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.compileScript",(Z)=>b($,Z,{scriptId:null,exceptionDetails:null})),$.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(Z)=>b($,Z,{names:[]})),$.addMessageFilter("tools::Runtime.terminateExecution",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Runtime.getIsolateId",(Z)=>b($,Z,{id:"inspect-webkit"})),$.addMessageFilter("tools::Runtime.getHeapUsage",(Z)=>b($,Z,{usedSize:0,totalSize:0})),$.addMessageFilter("tools::Runtime.discardConsoleEntries",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Runtime.releaseObject",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.releaseObjectGroup",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.callFunctionOn",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.queryObjects",(Z)=>Promise.resolve(Z)),$.addMessageFilter("target::Debugger.globalObjectCleared",(Z)=>{return $.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function iZ($,Q){$.addMessageFilter("tools::Log.startViolationsReport",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Log.stopViolationsReport",(Z)=>b($,Z,{})),$.addMessageFilter("tools::Log.clear",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.disable",(Z)=>{return Z.method="Console.disable",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.enable",(Z)=>{return Z.method="Console.enable",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.enable",(Z)=>{return $.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Console.messageAdded",(Z)=>{let J=Z.params?.message??{},X=(Array.isArray(J.stackTrace)?J.stackTrace:Array.isArray(J.stackTrace?.callFrames)?J.stackTrace.callFrames:[]).map((K)=>({functionName:K.functionName??"",scriptId:K.scriptId??"",url:K.url??"",lineNumber:Number(K.lineNumber??0),columnNumber:Number(K.columnNumber??0)})),G=X.length?{callFrames:X}:void 0,H=Date.now();if(J.source==="console-api"){let K=J.type==="log"?J.level??"log":J.type??"log",W=nZ(K),z=Array.isArray(J.parameters)&&J.parameters.length>0?J.parameters:[{type:"string",value:String(J.text??"")}],L={type:W,args:z,executionContextId:Q.pageExecCtx.id||1,timestamp:H,stackTrace:G};return Q.lastConsoleApiCalled.value=L,$.fireEventToTools("Runtime.consoleAPICalled",L),Promise.resolve(null)}if(J.source==="javascript"&&J.level==="error")return $.fireEventToTools("Runtime.exceptionThrown",{timestamp:H,exceptionDetails:{exceptionId:0,text:String(J.text??"Uncaught"),lineNumber:Number(J.line??0),columnNumber:Number(J.column??0),scriptId:Q.lastScriptEval.value,url:J.url,stackTrace:G,exception:{type:"string",value:String(J.text??"")}}}),Promise.resolve(null);return $.fireEventToTools("Log.entryAdded",{entry:{source:J.source??"other",level:oZ(J.level??J.type??"log"),text:String(J.text??""),timestamp:H,url:J.url,lineNumber:J.line,stackTrace:G,networkRequestId:J.networkRequestId}}),Promise.resolve(null)}),$.addMessageFilter("target::Console.messagesCleared",()=>{return $.fireEventToTools("Log.entriesCleared",{}),$.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:Q.pageExecCtx.id||1,timestamp:Date.now()}),Q.lastConsoleApiCalled.value=null,Promise.resolve(null)}),$.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let Z=Q.lastConsoleApiCalled.value;if(Z)$.fireEventToTools("Runtime.consoleAPICalled",{...Z,timestamp:Date.now()});return Promise.resolve(null)}),$.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function nZ($){switch($){case"warn":case"warning":return"warning";case"log":case"info":case"error":case"debug":case"dir":case"dirxml":case"table":case"trace":case"clear":case"assert":case"profile":case"profileEnd":case"count":case"timeEnd":case"startGroup":case"startGroupCollapsed":case"endGroup":return $;default:return"log"}}function oZ($){switch($){case"log":case"debug":return"verbose";case"info":return"info";case"warn":case"warning":return"warning";case"error":return"error";default:return"info"}}function aZ($){let Q=new Set;$.addMessageFilter("tools::DOM.enable",(Z)=>b($,Z,{})),$.addMessageFilter("tools::DOM.setInspectMode",(Z)=>{if(Z.method="DOM.setInspectModeEnabled",Z.params)Z.params.enabled=Z.params.mode==="searchForNode",delete Z.params.mode,delete Z.params.highlightConfig;return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.setInspectedNode",(Z)=>{return Z.method="Console.addInspectedNode",Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.performSearch",(Z)=>{if(Z.params)Z.params={query:Z.params.query,caseSensitive:!!Z.params.caseSensitive};return Promise.resolve(Z)}),$.addMessageFilter("target::DOM.performSearch",(Z)=>{let J=Z.result?.searchId;if(typeof J==="string")Q.add(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.discardSearchResults",(Z)=>{let J=Z.params?.searchId;if(typeof J==="string")Q.delete(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(Z)=>{let J=Z.params?.backendNodeIds??[],Y=await Promise.all(J.map((X)=>$.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:X}).then((G)=>G.nodeId).catch(()=>X)));return $.fireResultToTools(Z.id,{nodeIds:Y}),null}),$.addMessageFilter("tools::DOM.getBoxModel",(Z)=>{return $.callTarget("DOM.highlightNode",{highlightConfig:{showInfo:!0,contentColor:{r:111,g:168,b:220,a:0.66},paddingColor:{r:147,g:196,b:125,a:0.55},borderColor:{r:255,g:229,b:153,a:0.66},marginColor:{r:246,g:178,b:107,a:0.66}},nodeId:Z.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),$.addMessageFilter("tools::DOM.getNodeForLocation",async(Z)=>{try{let Y=(await $.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${Z.params?.x},${Z.params?.y})`})).result?.objectId;if(!Y)return $.fireResultToTools(Z.id,{nodeId:0}),null;let X=await $.callTarget("DOM.requestNode",{objectId:Y});$.fireResultToTools(Z.id,{nodeId:X.nodeId,backendNodeId:X.nodeId})}catch(J){$.fireErrorToTools(Z.id,{message:J?.message??String(J)})}return null}),$.addMessageFilter("tools::DOM.resolveNode",(Z)=>{if(Z.params&&Z.params.objectGroup===void 0)delete Z.params.objectGroup;return Promise.resolve(Z)})}function rZ($){$.addMessageFilter("tools::DOMDebugger.getEventListeners",async(Q)=>{try{let Z=await $.callTarget("DOM.requestNode",{objectId:Q.params?.objectId}),Y=((await $.callTarget("DOM.getEventListenersForNode",{nodeId:Z.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((X)=>({type:X.type,useCapture:!!X.useCapture,passive:!!X.passive,once:!!X.once,location:X.location,handler:X.handler}));$.fireResultToTools(Q.id,{listeners:Y})}catch(Z){$.fireErrorToTools(Q.id,{message:Z?.message??String(Z)})}return null}),$.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(Q)=>b($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(Q)=>b($,Q,{})),$.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(Q)=>b($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(Q)=>b($,Q,{}))}function tZ($,Q){$.addMessageFilter("tools::Page.setOverlayMessage",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),$.addMessageFilter("tools::Page.configureOverlay",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),$.addMessageFilter("tools::Page.getNavigationHistory",async(X)=>{try{let G=await $.callTarget("Runtime.evaluate",{expression:"window.location.href"}),H=await $.callTarget("Runtime.evaluate",{expression:"document.title"});$.fireResultToTools(X.id,{currentIndex:0,entries:[{id:0,url:G.result?.value??"",userTypedURL:G.result?.value??"",title:H.result?.value??"",transitionType:"link"}]})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("target::Page.frameNavigated",(X)=>{return M$(X.params?.frame),Promise.resolve(X)}),$.addMessageFilter("target::Page.getResourceTree",(X)=>{return v8(X.result?.frameTree),Promise.resolve(X)}),$.addMessageFilter("tools::Page.getFrameTree",async(X)=>{if(typeof X.id!=="number")return null;try{let G=await $.callTarget("Page.getResourceTree",{}),H=F$(G?.frameTree);v8(H),$.fireResultToTools(X.id,{frameTree:H})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("tools::Page.createIsolatedWorld",(X)=>{if(typeof X.id!=="number")return Promise.resolve(null);return b($,X,{executionContextId:Q.pageExecCtx.id||1})});let Z=1;$.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(X)=>b($,X,{identifier:`pptr-${Z++}`})),$.addMessageFilter("tools::WebMCP.enable",(X)=>b($,X,{})),$.addMessageFilter("tools::WebMCP.disable",(X)=>b($,X,{})),$.addMessageFilter("tools::Page.captureScreenshot",(X)=>{return $.fireErrorToTools(X.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),$.addMessageFilter("tools::Page.startScreencast",(X)=>b($,X,{})),$.addMessageFilter("tools::Page.stopScreencast",(X)=>b($,X,{})),$.addMessageFilter("tools::Page.screencastFrameAck",(X)=>b($,X,{})),$.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(X)=>b($,X,{}));let J="",Y="0.1";$.addMessageFilter("target::Page.frameNavigated",(X)=>{let G=X.params?.frame;if(G)Y=G.id??Y,J=G.loaderId??J,$.fireEventToTools("Page.frameStartedLoading",{frameId:Y}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"init",timestamp:0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"commit",timestamp:0});return Promise.resolve(X)}),$.addMessageFilter("target::Page.domContentEventFired",(X)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"DOMContentLoaded",timestamp:X.params?.timestamp??0}),Promise.resolve(X)}),$.addMessageFilter("target::Page.loadEventFired",(X)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"load",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkAlmostIdle",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkIdle",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.frameStoppedLoading",{frameId:Y}),Promise.resolve(X)})}function M$($){if(!$)return;if(!$.securityOrigin)try{$.securityOrigin=new URL($.url??"").origin}catch{$.securityOrigin="://"}if(!$.mimeType)$.mimeType="text/html"}function v8($){if(!$)return;if(M$($.frame),Array.isArray($.childFrames))$.childFrames.forEach(v8)}function F$($){if(!$)return $;let Q={frame:$.frame};if(Array.isArray($.childFrames))Q.childFrames=$.childFrames.map(F$);return Q}function sZ($){$.addMessageFilter("tools::Overlay.enable",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Overlay.disable",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Overlay.highlightNode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.highlightNode",Q.params={highlightConfig:Z.highlightConfig,nodeId:Z.nodeId,objectId:Z.objectId},Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightFrame",(Q)=>{return Q.method="DOM.highlightFrame",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightQuad",(Q)=>{return Q.method="DOM.highlightQuad",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightRect",(Q)=>{return Q.method="DOM.highlightRect",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.hideHighlight",(Q)=>{return Q.method="DOM.hideHighlight",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setInspectMode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.setInspectModeEnabled",Q.params={enabled:typeof Z.mode==="string"&&Z.mode!=="none",highlightConfig:Z.highlightConfig},Promise.resolve(Q)})}function eZ($){$.addMessageFilter("tools::Emulation.canEmulate",(Q)=>b($,Q,{result:!0})),$.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",(Q)=>{return Q.method="Page.setTouchEmulationEnabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",(Q)=>{return Q.method="Page.setScriptExecutionDisabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setEmulatedMedia",(Q)=>{return Q.method="Page.setEmulatedMedia",Promise.resolve(Q)}),$.addMessageFilter("tools::Rendering.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Emulation.setUserAgentOverride",(Q)=>{let Z=Q.params?.userAgent??"";return Q.method="Page.overrideUserAgent",Q.params={value:Z},Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(Q)=>b($,Q,{}))}function S8($){switch($){case"Document":case"Image":case"Font":case"Script":case"XHR":case"Fetch":case"Ping":case"WebSocket":return $;case"StyleSheet":return"Stylesheet";default:return"Other"}}function K2($){if(!$)return $;return{...X2,...$,hasPostData:$.postData!=null}}function V2($){if(!$)return $;let Q=0,Z=$.headers??{},J=Z["Content-Length"]??Z["content-length"];if(J!=null)Q=Number(J)||0;return{...G2,...$,fromDiskCache:$.source==="disk-cache",fromServiceWorker:$.source==="service-worker",encodedDataLength:Q}}function W2($,Q){if(!$)return;for(let[Z,J]of Object.entries(Q))if(Z in $&&!(J in $))$[J]=$[Z],delete $[Z]}function z2($){let Q=typeof $.size==="number"?$.size:($.name?.length??0)+($.value?.length??0);return{name:$.name,value:$.value,domain:$.domain,path:$.path,expires:$.expires??-1,size:Q,httpOnly:!!$.httpOnly,secure:!!$.secure,session:!!$.session,...$.sameSite?{sameSite:$.sameSite}:{}}}function H2($,Q){let Z=new Map,J=1e4,Y=1024,X=4194304,G=Promise.resolve(),H=(W)=>{let z=G.then(W,W);return G=z.catch(()=>{}),z};for(let[W,z]of Object.entries($2))$.addMessageFilter(`tools::${W}`,(L)=>{return L.method=z,Promise.resolve(L)});$.addMessageFilter("tools::Network.setCacheDisabled",(W)=>{if(W.params&&"cacheDisabled"in W.params)W.params={disabled:!!W.params.cacheDisabled};return Promise.resolve(W)});let K=async(W)=>{try{let z=await $.callTarget("Page.getCookies",{}),L=Array.isArray(z?.cookies)?z.cookies.map(z2):[];$.fireResultToTools(W.id,{cookies:L})}catch(z){$.fireErrorToTools(W.id,{message:z?.message??String(z)})}return null};$.addMessageFilter("tools::Network.getCookies",K),$.addMessageFilter("tools::Network.getAllCookies",K),$.addMessageFilter("tools::Network.setCookie",(W)=>{let z=W.params??{};return W.method="Page.setCookie",W.params={cookie:{name:z.name,value:z.value,domain:z.domain??"",path:z.path??"/",expires:z.expires??-1,session:!1,httpOnly:!!z.httpOnly,secure:!!z.secure,sameSite:z.sameSite??"None"}},Promise.resolve(W)}),$.addMessageFilter("tools::Network.setCookies",async(W)=>{let z=Array.isArray(W.params?.cookies)?W.params.cookies:[];try{await Promise.all(z.map((L)=>$.callTarget("Page.setCookie",{cookie:L}))),$.fireResultToTools(W.id,{})}catch(L){$.fireErrorToTools(W.id,{message:L?.message??String(L)})}return null}),$.addMessageFilter("tools::Network.deleteCookies",(W)=>{let z=W.params??{},L=z.url??`https://${(z.domain??"").replace(/^\./,"")}${z.path??"/"}`;return W.method="Page.deleteCookie",W.params={cookieName:z.name,url:L},Promise.resolve(W)}),$.addMessageFilter("tools::Network.deleteCookie",(W)=>{return W.method="Page.deleteCookie",Promise.resolve(W)}),$.addMessageFilter("tools::Network.clearBrowserCookies",async(W)=>{try{let z=await $.callTarget("Page.getCookies",{}),L=Array.isArray(z?.cookies)?z.cookies:[];await Promise.all(L.map((B)=>$.callTarget("Page.deleteCookie",{cookieName:B.name,url:`${B.secure?"https":"http"}://${(B.domain??"").replace(/^\./,"")}${B.path??"/"}`}).catch(()=>{}))),$.fireResultToTools(W.id,{})}catch(z){$.fireErrorToTools(W.id,{message:z?.message??String(z)})}return null}),$.addMessageFilter("tools::Network.canEmulateNetworkConditions",(W)=>b($,W,{result:!1})),$.addMessageFilter("tools::Network.setExtraHTTPHeaders",(W)=>b($,W,{})),$.addMessageFilter("tools::Network.setBlockedURLs",(W)=>b($,W,{})),$.addMessageFilter("tools::Network.emulateNetworkConditions",(W)=>b($,W,{})),$.addMessageFilter("tools::Network.setMonitoringXHREnabled",(W)=>b($,W,{})),$.addMessageFilter("tools::Network.getResponseBody",async(W)=>{let z=W.params?.requestId,L=typeof z==="string"?Z.get(z):void 0;if(!L)return $.fireErrorToTools(W.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(L.method&&L.method.toUpperCase()!=="GET")return $.fireErrorToTools(W.id,{message:`Network.getResponseBody: cannot recover ${L.method} response body (bridge re-fetch is GET-only)`}),null;if(L.bytes===0)return $.fireResultToTools(W.id,{body:"",base64Encoded:!1}),null;return H(async()=>{try{let B={};for(let[T,N]of Object.entries(L.headers??{})){let V=T.toLowerCase();if(V==="if-none-match"||V==="if-modified-since"||V==="host"||V==="connection")continue;B[T]=String(N)}let U=new AbortController,M=setTimeout(()=>U.abort(),1e4),D;try{D=await fetch(L.url,{headers:B,redirect:"follow",signal:U.signal})}finally{clearTimeout(M)}let I=Number(D.headers.get("content-length")??"");if(Number.isFinite(I)&&I>4194304){$.fireErrorToTools(W.id,{message:`Network.getResponseBody: response too large (${I} bytes > ${"4194304"}) — skipped re-fetch`});try{await D.arrayBuffer()}catch{}return}let E=Buffer.from(await D.arrayBuffer());if(E.byteLength>4194304){$.fireErrorToTools(W.id,{message:`Network.getResponseBody: response too large (${E.byteLength} bytes > 4194304)`});return}let O=((D.headers.get("content-type")??"").split(";")[0]??"").trim(),j=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(O),R=j?E.toString("utf8"):E.toString("base64");$.fireResultToTools(W.id,{body:R,base64Encoded:!j})}catch(B){$.fireErrorToTools(W.id,{message:`Network.getResponseBody re-fetch failed: ${B?.message??String(B)}`})}}),null});for(let[W,z]of Object.entries(Q2))$.addMessageFilter(`target::${W}`,(L)=>{return W2(L.params,z),Promise.resolve(L)});$.addMessageFilter("target::Network.requestWillBeSent",(W)=>{let z=W.params;if(z){if(Object.assign(z,{...Z2,...z}),z.request=K2(z.request),z.type=S8(z.type),typeof z.requestId==="string"&&typeof z.request?.url==="string"){if(Z.size>=1024){let L=Z.keys().next().value;if(L!==void 0)Z.delete(L)}Z.set(z.requestId,{url:z.request.url,method:z.request.method,headers:z.request.headers,frameId:z.frameId,bytes:0})}}return Promise.resolve(W)}),$.addMessageFilter("target::Network.responseReceived",(W)=>{let z=W.params;if(z)Object.assign(z,{...J2,...z}),z.response=V2(z.response),z.type=S8(z.type);return Promise.resolve(W)}),$.addMessageFilter("target::Network.loadingFinished",(W)=>{let z=W.params;if(z){let L=z.metrics?.responseBodyBytesReceived;if(typeof L==="number"&&z.encodedDataLength==null)z.encodedDataLength=L;if(Object.assign(z,{...Y2,...z}),typeof z.requestId==="string"&&typeof L==="number"){let B=Z.get(z.requestId);if(B&&L>B.bytes)B.bytes=L}}return Promise.resolve(W)}),$.addMessageFilter("target::Network.dataReceived",(W)=>{let z=W.params;if(z&&typeof z.requestId==="string"){let L=Z.get(z.requestId);if(L){let B=Number(z.dataLength)||0;L.bytes+=B}}return Promise.resolve(W)}),$.addMessageFilter("target::Network.loadingFailed",(W)=>{let z=W.params;if(z){if(z.type=S8(z.type),!("canceled"in z))z.canceled=!1}return Promise.resolve(W)}),$.addMessageFilter("target::Network.requestServedFromMemoryCache",(W)=>{if(W.method="Network.requestServedFromCache",W.params)W.params={requestId:W.params.requestId};return Promise.resolve(W)}),$.addMessageFilter("tools::Network.loadNetworkResource",async(W)=>{let z=W.params??{};if(!Q)return $.fireResultToTools(W.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let L=await $.callTarget("Network.loadResource",{frameId:z.frameId,url:z.url}),B=!!L?.content&&(L?.status??0)>=200&&(L?.status??0)<300,U;if(B)U=`network-resource:${z.frameId??""}:${z.url}`,Q.set(U,String(L.content));$.fireResultToTools(W.id,{resource:{success:B,stream:U,httpStatusCode:L?.status,headers:L?.headers,mimeType:L?.mimeType}})}catch(L){$.fireResultToTools(W.id,{resource:{success:!1,netError:2,netErrorName:L?.message??"ERR_FAILED"}})}return null})}function M2($){for(let Q of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])$.addMessageFilter(`tools::${Q}`,(Z)=>b($,Z,{}))}function F2($){$.addMessageFilter("target::Inspector.inspect",async(Q)=>{let Z=Q.params?.object?.objectId;if(typeof Z!=="string")return null;try{let Y=(await $.callTarget("DOM.requestNode",{objectId:Z}))?.nodeId;if(typeof Y==="number")$.fireEventToTools("Overlay.inspectNodeRequested",{backendNodeId:Y}),$.fireEventToTools("DOM.inspectNodeRequested",{backendNodeId:Y})}catch{}return null})}function N2($){if(!$)return $;let Q=$.origin==="inspector";return{styleSheetId:$.styleSheetId,frameId:$.frameId,sourceURL:$.sourceURL??"",origin:$.origin==="author"?"regular":$.origin,title:$.title??"",disabled:!!$.disabled,isInline:!!$.isInline,startLine:$.startLine??0,startColumn:$.startColumn??0,isMutable:Q,isConstructed:Q,length:$.length??0,endLine:$.endLine??0,endColumn:$.endColumn??0,hasSourceURL:!!$.sourceURL}}function b8($){if(!$)return $;let Q={origin:$.origin==="author"?"regular":$.origin,style:R0($.style),selectorList:U2($.selectorList)};if($.ruleId?.styleSheetId)Q.styleSheetId=$.ruleId.styleSheetId;if(Array.isArray($.groupings))Q.media=$.groupings.map((Z)=>({text:Z.text,sourceURL:Z.sourceURL,source:B2[Z.type]}));return Q}function j2($){let Q={lastNodeId:0},Z=new Map;async function J(Y,X){let G=Z.get(Y);if(!G)try{if(G=(await $.callTarget("CSS.getStyleSheet",{styleSheetId:Y}))?.styleSheet,G)Z.set(Y,G)}catch{}let H=G?.rules??[];for(let K=0;K<H.length;K++)if(_2(H[K]?.style?.range,X))return{styleSheetId:Y,ordinal:K};return{styleSheetId:Y,ordinal:0}}$.addMessageFilter("tools::CSS.enable",(Y)=>{return $.fireResultToTools(Y.id,{}),Promise.resolve(null)}),$.addMessageFilter("target::CSS.styleSheetAdded",(Y)=>{if(Y.params?.header)Y.params.header=N2(Y.params.header);return Promise.resolve(Y)}),$.addMessageFilter("target::CSS.getInlineStylesForNode",(Y)=>{let X=Y.result;if(X)Y.result={inlineStyle:R0(X.inlineStyle),attributesStyle:R0(X.attributesStyle)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(Y)=>{if(typeof Y.params?.nodeId==="number")Q.lastNodeId=Y.params.nodeId;try{let[X,G]=await Promise.all([$.callTarget("CSS.getInlineStylesForNode",{nodeId:Y.params.nodeId}),$.callTarget("CSS.getMatchedStylesForNode",{nodeId:Y.params.nodeId,includePseudo:!0,includeInherited:!0})]);$.fireResultToTools(Y.id,{inlineStyle:R0(X?.inlineStyle),attributesStyle:R0(X?.attributesStyle),matchedCSSRules:d8(G?.matchedCSSRules),pseudoElements:O2(G?.pseudoElements),inherited:A2(G?.inherited),cssKeyframesRules:[]})}catch(X){$.fireErrorToTools(Y.id,{message:X?.message??String(X)})}return null}),$.addMessageFilter("tools::CSS.setStyleTexts",async(Y)=>{let X=Y.params?.edits??[],G=[];for(let H of X)try{let K=await J(H.styleSheetId,H.range),W=await $.callTarget("CSS.setStyleText",{styleId:K,text:H.text});G.push(R0(W?.style)),Z.delete(H.styleSheetId),$.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:H.styleSheetId})}catch{G.push(null)}return $.fireResultToTools(Y.id,{styles:G}),null}),$.addMessageFilter("tools::CSS.setRuleSelector",async(Y)=>{let{styleSheetId:X,range:G,selector:H}=Y.params??{};try{let K=await J(X,G);Y.params={ruleId:K,selector:H}}catch(K){return $.fireErrorToTools(Y.id,{message:K?.message??String(K)}),null}return Y}),$.addMessageFilter("target::CSS.setRuleSelector",(Y)=>{if(Y.result?.rule)Y.result={rule:b8(Y.result.rule)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.addRule",async(Y)=>{let X=Y.params??{},G=String(X.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let H=await $.callTarget("CSS.addRule",{contextNodeId:Q.lastNodeId,styleSheetId:X.styleSheetId,selector:G});$.fireResultToTools(Y.id,{rule:b8(H?.rule)})}catch(H){$.fireErrorToTools(Y.id,{message:H?.message??String(H)})}return null})}function C2($){$.addMessageFilter("tools::Browser.getVersion",(Q)=>b($,Q,R2)),$.addMessageFilter("tools::Browser.getWindowForTarget",(Q)=>b($,Q,{windowId:1,bounds:{}})),$.addMessageFilter("tools::Browser.setWindowBounds",(Q)=>b($,Q,{}))}function P2($){switch($){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function T2($){let Q=async(Z)=>{let J=Z.params??{},Y=P2(J.type);if(!Y)return $.fireResultToTools(Z.id,{}),null;let X=Y==="click"?["mousedown","click","mouseup"]:[Y];try{for(let G of X){let H={x:Number(J.x)||0,y:Number(J.y)||0,modifiers:Number(J.modifiers)||0,button:J.button??"none",type:G},K=`(${D2}, __sd_simulate(${JSON.stringify(H)}))`;await $.callTarget("Runtime.evaluate",{expression:K})}$.fireResultToTools(Z.id,{})}catch(G){$.fireErrorToTools(Z.id,{message:G?.message??String(G)})}return null};$.addMessageFilter("tools::Input.dispatchMouseEvent",Q),$.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",Q),$.addMessageFilter("tools::Input.setIgnoreInputEvents",(Z)=>{return $.fireResultToTools(Z.id,{}),Promise.resolve(null)})}function I2($){let Q=new Map;return $.addMessageFilter("tools::IO.read",(Z)=>{let J=String(Z.params?.handle??""),Y=Number(Z.params?.size)||E2,X=Number(Z.params?.offset)||0,G=Q.get(J);if(G===void 0)return $.fireResultToTools(Z.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let H=G.slice(X,X+Y),K=X+Y>=G.length;return $.fireResultToTools(Z.id,{data:H,eof:K,base64Encoded:!1}),Promise.resolve(null)}),$.addMessageFilter("tools::IO.close",(Z)=>{return Q.delete(String(Z.params?.handle??"")),$.fireResultToTools(Z.id,{}),Promise.resolve(null)}),Q}function x2($){$.addMessageFilter("tools::Accessibility.enable",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Accessibility.disable",(Q)=>b($,Q,{})),$.addMessageFilter("tools::Accessibility.getPartialAXTree",async(Q)=>{let Z=Q.params??{},J=Z.nodeId??Z.backendNodeId;if(typeof J!=="number")return $.fireResultToTools(Q.id,{nodes:[]}),null;try{let X=(await $.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:J}))?.properties??{},G={nodeId:String(J),ignored:Boolean(X.ignored),role:X.role?{type:"role",value:String(X.role)}:void 0,name:X.label?{type:"computedString",value:String(X.label)}:void 0,backendDOMNodeId:J,childIds:[],properties:[]};$.fireResultToTools(Q.id,{nodes:[G]})}catch(Y){$.fireResultToTools(Q.id,{nodes:[]})}return null})}function w2($){for(let[Z,J]of Object.entries(S2))$.addMessageFilter(`tools::${Z}`,(Y)=>b($,Y,J));for(let Z of q2)for(let J of["enable","disable"])$.addMessageFilter(`tools::${Z}.${J}`,(Y)=>b($,Y,{}));let Q=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[Z,J]of Q)$.addMessageFilter(`tools::${Z}`,(Y)=>b($,Y,J))}function h8($){let Q=mZ();w2($);let Z=I2($);lZ($,Q),dZ($,Q),iZ($,Q),aZ($),rZ($),tZ($,Q),sZ($),eZ($),H2($,Z),M2($),F2($),j2($),C2($),T2($),x2($)}function N$($){let Q=`${$.reqHost}/devtools/page/${$.id}`;return{description:$.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${Q}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${Q}`,id:$.id,title:$.title,type:$.type,url:$.url,webSocketDebuggerUrl:`ws://${Q}`,faviconUrl:""}}function v0($){return $.replace(/[&<>"']/g,(Q)=>y2[Q])}function L$($){return _$.createServer((Q,Z)=>{let J=new URL(Q.url??"/","http://placeholder"),Y=Q.headers.host??"";if(J.pathname==="/json/version"){let X=typeof $.version==="function"?$.version(Y):$.version;return w8(Z,X)}if(J.pathname==="/json"||J.pathname==="/json/list")return w8(Z,$.listTargets(Y));if(J.pathname==="/json/protocol")return w8(Z,{});if(J.pathname==="/")return k2(Z,$,Y);Z.writeHead(404,{"content-type":"text/plain"}),Z.end("not found")})}function w8($,Q,Z=200){$.writeHead(Z,{"content-type":"application/json; charset=utf-8"}),$.end(JSON.stringify(Q))}function k2($,Q,Z){let J=Q.listTargets(Z),Y=J.map((K)=>`<li><strong>${v0(K.title||K.url||K.id)}</strong><br><small>${v0(K.url)}</small><br><small>copy & paste into Chrome's address bar:</small><br><code style="user-select:all">${v0(K.devtoolsFrontendUrl)}</code></li>`).join(""),X=`inspect-webkit${Q.brand?` (${Q.brand})`:""}`,G=Q.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${v0(Z)}</code>.</p>`,H=`<!doctype html><meta charset=utf-8><title>${v0(X)}</title><style>body{font:14px -apple-system,sans-serif;max-width:760px;margin:2em auto;padding:0 1em}code{display:block;background:#f4f4f4;padding:.5em;border-radius:4px;word-break:break-all;margin:.4em 0 1em}li{margin-bottom:1.5em;list-style:none}</style><h1>${v0(X)} — ${J.length} target${J.length===1?"":"s"}</h1>`+G+`<ul>${Y}</ul>`+'<hr><p>JSON: <a href="/json/list">/json/list</a> · <a href="/json/version">/json/version</a></p>';$.writeHead(200,{"content-type":"text/html; charset=utf-8"}),$.end(H)}function B$($,Q,Z){return new Promise((J,Y)=>{$.once("error",(G)=>{if(G.port==null)G.port=Z;if(G.host==null)G.host=Q;Y(G)});let X=Q==="localhost"||Q==="::1"||Q==="127.0.0.1"?"::":Q;$.listen({port:Z,host:X,ipv6Only:!1},()=>{$.off("error",Y),J()})})}function U$($){let Q=!process.env.NO_COLOR&&process.stderr.isTTY===!0,Z=(K,W)=>Q?`\x1B[${K}m${W}\x1B[0m`:W,J=(K)=>Z("1",K),Y=(K)=>Z("2",K),X=(K)=>Z("36",K),G=(K)=>Z("32",K),H=`http://${$.host}:${$.port}`;console.error(`${G("●")} ${J(`${$.brand} CDP`)} ${X(H)}`),console.error(` ${Y("chrome")} chrome://inspect → ${$.host}:${$.port}`),console.error(` ${Y("vscode")} "type": "chrome", "port": ${$.port}`)}function f2($,Q){let Z=!!process.env.INSPECT_WEBKIT_DEBUG,J=new Map,Y=!1,X=!1,G=!1,H=new Map,K=null;function W(j){if($.readyState!==1)return;let R=JSON.stringify(j);if(Z)console.error(`[browser] tools<< ${R.slice(0,240)}`);$.send(R)}function z(j,R){let T={method:j,params:R};if(K)T.sessionId=K;W(T)}function L(j,R){return{targetId:j.targetId,type:j.type==="page"?"page":j.type||"other",title:j.title||"",url:j.url||"",attached:R,canAccessOpener:!1,browserContextId:"default"}}function B(j){for(let R of J.values())if(R.targetId===j)return!0;return!1}function U(j,R){let T=Q.listEntries().find((_)=>_.targetId===j);if(!T)return null;let N=crypto.randomUUID(),V=(_)=>{let C;try{C=JSON.parse(_)}catch{return}C.sessionId=N,W(C)},F=Q.createPageSession(j,V);if(!F)return null;return J.set(N,{handle:F,targetId:j}),z("Target.attachedToTarget",{sessionId:N,targetInfo:L(T,!0),waitingForDebugger:R}),{sessionId:N,entry:T}}function M(j){let R=J.get(j);if(!R)return!1;try{R.handle.close()}catch{}return J.delete(j),z("Target.detachedFromTarget",{sessionId:j,targetId:R.targetId}),!0}function D(){let j=Q.listEntries(),R=new Set;for(let T of j){R.add(T.targetId);let N=H.get(T.targetId);if(!N){if(H.set(T.targetId,T),Y)z("Target.targetCreated",{targetInfo:L(T,B(T.targetId))});if(X&&!B(T.targetId))U(T.targetId,G)}else if(N.title!==T.title||N.url!==T.url){if(H.set(T.targetId,T),Y)z("Target.targetInfoChanged",{targetInfo:L(T,B(T.targetId))})}}for(let T of[...H.keys()]){if(R.has(T))continue;H.delete(T);for(let[N,V]of J)if(V.targetId===T)M(N);if(Y)z("Target.targetDestroyed",{targetId:T})}}let I=setInterval(D,Q.refreshMs??1000);function E(j,R){if(j)R.sessionId=j;W(R)}function O(j,R){let{id:T,method:N}=j,V=j.params??{};switch(N){case"Browser.getVersion":return E(R,{id:T,result:{protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"@",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""}});case"Target.attachToBrowserTarget":{if(!K)K=crypto.randomUUID();return E(R,{id:T,result:{sessionId:K}})}case"Target.setDiscoverTargets":{if(Y=!!V.discover,Y)for(let F of Q.listEntries())H.set(F.targetId,F),z("Target.targetCreated",{targetInfo:L(F,B(F.targetId))});if(typeof T==="number")E(R,{id:T,result:{}});return}case"Target.getTargets":{let F=Q.listEntries().map((_)=>L(_,B(_.targetId)));return E(R,{id:T,result:{targetInfos:F}})}case"Target.setAutoAttach":{if(X=!!V.autoAttach,G=!!V.waitForDebuggerOnStart,X){for(let F of Q.listEntries())if(!B(F.targetId))U(F.targetId,G)}if(typeof T==="number")E(R,{id:T,result:{}});return}case"Target.attachToTarget":{for(let[_,C]of J)if(C.targetId===V.targetId){if(typeof T==="number")E(R,{id:T,result:{sessionId:_}});return}let F=U(V.targetId,!1);if(!F){if(typeof T==="number")E(R,{id:T,error:{code:-32000,message:"No target with given id found"}});return}if(typeof T==="number")E(R,{id:T,result:{sessionId:F.sessionId}});return}case"Target.detachFromTarget":{if(M(V.sessionId),typeof T==="number")E(R,{id:T,result:{}});return}case"Target.sendMessageToTarget":{let F=J.get(V.sessionId);if(F)F.handle.onMessageFromTools(V.message);if(typeof T==="number")E(R,{id:T,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof T==="number")E(R,{id:T,result:{}});return;case"Target.getBrowserContexts":{if(typeof T==="number")E(R,{id:T,result:{browserContextIds:["default"]}});return}}if(typeof T==="number")E(R,{id:T,error:{code:-32601,message:`Browser-level method '${N??"?"}' not implemented`}})}$.on("message",(j,R)=>{let T=R?new TextDecoder().decode(j):j.toString();if(Z)console.error(`[browser] tools>> ${T.slice(0,240)}`);let N;try{N=JSON.parse(T)}catch{return}if(typeof N.sessionId==="string"){if(N.sessionId===K){let _={...N};return delete _.sessionId,O(_,N.sessionId)}let V=J.get(N.sessionId);if(!V){if(typeof N.id==="number")W({id:N.id,sessionId:N.sessionId,error:{code:-32000,message:`Session ${N.sessionId} not found`}});return}let F={...N};delete F.sessionId,V.handle.onMessageFromTools(JSON.stringify(F));return}O(N,void 0)}),$.on("close",()=>{clearInterval(I);for(let[,j]of J)try{j.handle.close()}catch{}J.clear()})}async function b2($={}){let Q=$.port??9222,Z=$.host??"localhost",J=await h2();if(J.length===0)console.error("warn: no inspectable sources found (no devices, no simulators)."),console.error(" The server will still run; new targets will appear if you start one.");let Y=new Map,X=new WeakMap,G=new Map;for(let N of J)G.set(N,[]),X.set(N,new Set),N.wi.subscribe((V)=>{let{__selector:F,__argument:_}=V;if(!F||!_)return;if(F==="_rpc_reportConnectedApplicationList:"){let C=_.WIRApplicationDictionaryKey??{},P=Object.entries(C).map(([w,k])=>({appId:w,bundleId:k.WIRApplicationBundleIdentifierKey,name:k.WIRApplicationNameKey??k.WIRApplicationBundleIdentifierKey??w,isProxy:Boolean(k.WIRIsApplicationProxyKey)}));G.set(N,P);let q=X.get(N);for(let w of P){if(w.isProxy||q.has(w.appId))continue;q.add(w.appId),N.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:w.appId})}}else if(F==="_rpc_applicationConnected:"){let C=_,P=G.get(N)??[];if(!P.find((q)=>q.appId===C.WIRApplicationIdentifierKey))P.push({appId:C.WIRApplicationIdentifierKey,bundleId:C.WIRApplicationBundleIdentifierKey,name:C.WIRApplicationNameKey??C.WIRApplicationBundleIdentifierKey,isProxy:Boolean(C.WIRIsApplicationProxyKey)}),G.set(N,P);if(!C.WIRIsApplicationProxyKey){let q=X.get(N);if(!q.has(C.WIRApplicationIdentifierKey))q.add(C.WIRApplicationIdentifierKey),N.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:C.WIRApplicationIdentifierKey})}}else if(F==="_rpc_applicationDisconnected:"){let C=G.get(N)??[];G.set(N,C.filter((P)=>P.appId!==_.WIRApplicationIdentifierKey)),Y.delete(`${N.id}:${_.WIRApplicationIdentifierKey}`)}else if(F==="_rpc_applicationSentListing:"){let C=_.WIRApplicationIdentifierKey,P=_.WIRListingKey??{},q=new Map;for(let[w,k]of Object.entries(P))q.set(w,{pageId:Number(k.WIRPageIdentifierKey??0),title:k.WIRTitleKey??"",url:k.WIRURLKey??"",type:k.WIRTypeKey??"",connectionId:typeof k.WIRConnectionIdentifierKey==="string"?k.WIRConnectionIdentifierKey:null});Y.set(`${N.id}:${C}`,q)}}),N.wi.send("_rpc_reportIdentifier:",{}),N.wi.send("_rpc_getConnectedApplications:",{});let H=setInterval(()=>{for(let N of J){let V=G.get(N)??[];for(let F of V){if(F.isProxy)continue;N.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:F.appId})}}},v2),K=new Map;function W(){let N=[];for(let V of J){let F=G.get(V)??[];for(let _ of F){if(_.isProxy)continue;let C=Y.get(`${V.id}:${_.appId}`);if(!C)continue;for(let P of C.values()){let q=!!P.connectionId&&P.connectionId!==V.wi.connection;N.push({targetId:`${V.id}:${_.appId}:${P.pageId}`,source:V,appId:_.appId,appName:_.name,bundleId:_.bundleId,pageId:P.pageId,title:P.title,url:P.url,type:P.type,inUseByOtherInspector:q})}}}return N}let z=crypto.randomUUID(),L=L$({brand:"",version:(N)=>({Browser:"Safari/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit","WebKit-Version":"605.1.15",webSocketDebuggerUrl:`ws://${N}/devtools/browser/${z}`}),listTargets:(N)=>W().map((V)=>N$({reqHost:N,id:V.targetId,description:`${V.source.label}${V.bundleId?` (${V.bundleId})`:""}`,title:V.title||V.appName,url:/^https?:/i.test(V.url)?V.url:"about:blank",type:e6(V.type)}))}),B=new H$.default({noServer:!0}),U=`/devtools/browser/${z}`;L.on("upgrade",(N,V,F)=>{let _=new URL(N.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${_.pathname}`),_.pathname===U){B.handleUpgrade(N,V,F,(P)=>{f2(P,{listEntries:()=>W().map((q)=>({targetId:q.targetId,type:e6(q.type),title:q.title||q.appName,url:q.url})),createPageSession:(q,w)=>{let k=W().find((y)=>y.targetId===q);if(!k)return null;return M(k,w)}})});return}if(!_.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${_.pathname}`),V.destroy();return}let C=decodeURIComponent(_.pathname.slice(15));B.handleUpgrade(N,V,F,(P)=>{T(P,C)})});function M(N,V){let F=crypto.randomUUID(),C=new E4({readyState:1,send:(w)=>V(w)},N.source.wi,N.appId,N.pageId,F);h8(C),K.set(F,C);let P=!!process.env.INSPECT_WEBKIT_DEBUG,q=N.source.wi.subscribe((w)=>{if(w.__selector!=="_rpc_applicationSentData:")return;let k=w.__argument;if(!k)return;if(k.WIRDestinationKey&&k.WIRDestinationKey!==F)return;if(k.WIRApplicationIdentifierKey!==N.appId)return;if(k.WIRPageIdentifierKey!==void 0&&Number(k.WIRPageIdentifierKey)!==N.pageId)return;let y=k.WIRMessageDataKey??k.WIRSocketDataKey;if(!y)return;let g=typeof y==="string"?y:new TextDecoder().decode(y);if(P)console.error(`[cdp] target>> ${g.slice(0,240)}`);C.onMessageFromTarget(g)});return N.source.wi.forwardSocketSetup(N.appId,N.pageId,F),console.error(`# devtools attached: ${N.source.label} :: ${N.appName} :: ${N.title||N.url}`),{onMessageFromTools(w){if(P)console.error(`[cdp] tools>> ${w.slice(0,300)}`);C.onMessageFromTools(w)},close(){q();try{C.wi.forwardDidClose(C.appId,C.pageId,C.senderKey)}catch{}K.delete(C.senderKey)}}}let D=new Map,I=8000;function E(N){let V=D.get(N);if(V)return V;let F=W().find((y)=>y.targetId===N);if(!F)return null;let _=crypto.randomUUID(),P=new E4({readyState:1,send:()=>{}},F.source.wi,F.appId,F.pageId,_);h8(P),K.set(_,P);let q=F.source.wi.subscribe((y)=>{if(y.__selector!=="_rpc_applicationSentData:")return;let g=y.__argument;if(!g)return;if(g.WIRDestinationKey&&g.WIRDestinationKey!==_)return;if(g.WIRApplicationIdentifierKey!==F.appId)return;if(g.WIRPageIdentifierKey!==void 0&&Number(g.WIRPageIdentifierKey)!==F.pageId)return;let p=g.WIRMessageDataKey??g.WIRSocketDataKey;if(!p)return;let x=typeof p==="string"?p:new TextDecoder().decode(p);P.onMessageFromTarget(x)});F.source.wi.forwardSocketSetup(F.appId,F.pageId,_);let w=Promise.race([P.callTarget("DOM.getDocument",{depth:0}).then((y)=>y?.root?.nodeId),new Promise((y,g)=>setTimeout(()=>g(Error("DOM.getDocument timeout")),5000))]),k={cdp:P,rootNodeIdPromise:w,idleTimer:null,close(){if(k.idleTimer)clearTimeout(k.idleTimer);q();try{P.wi.forwardDidClose(P.appId,P.pageId,P.senderKey)}catch{}K.delete(_),D.delete(N)}};return D.set(N,k),w.catch(()=>k.close()),k}function O(N){if(N.idleTimer)clearTimeout(N.idleTimer);N.idleTimer=setTimeout(()=>N.close(),I)}function j(N){if(N){D.get(N)?.close();return}for(let V of D.values())V.close()}async function R(N,V){let F=E(N);if(!F)return;O(F);try{if(V){let _=await F.rootNodeIdPromise;if(!_)return;await F.cdp.callTarget("DOM.highlightNode",{nodeId:_,highlightConfig:{showInfo:!1,contentColor:{r:111,g:168,b:220,a:0.55},paddingColor:{r:147,g:196,b:125,a:0},borderColor:{r:255,g:229,b:153,a:0},marginColor:{r:246,g:178,b:107,a:0}}})}else await F.cdp.callTarget("DOM.hideHighlight",{})}catch{F.close()}}function T(N,V){let F=W().find((q)=>q.targetId===V);if(!F){console.error(`# ws closed: unknown target ${V} (known: ${W().map((q)=>q.targetId).join(", ")||"none"})`),N.close(1011,`unknown target ${V}`);return}let _=M(F,(q)=>{if(N.readyState===1)N.send(q)}),C=!0;N.on("pong",()=>{C=!0});let P=setInterval(()=>{if(!C){try{N.terminate()}catch{}return}C=!1;try{N.ping()}catch{}},15000);N.on("message",(q,w)=>{let k=w?new TextDecoder().decode(q):q.toString();_.onMessageFromTools(k)}),N.on("close",()=>{clearInterval(P),_.close()})}return await B$(L,Z,Q),U$({brand:"safari",host:Z,port:Q}),{stop(){clearInterval(H);for(let N of D.values())N.close();B.close(),L.close();for(let N of J)try{N.wi.close(),N.lockdown?.close()}catch{}},getTargets(){return W()},highlightTarget(N,V){return R(N,V)},releaseHighlight(N){j(N)}}}async function h2(){let[$,Q]=await Promise.all([g2(),p2()]);return[...$,...Q]}async function g2(){let $=[];try{$=await X$()}catch(Z){return console.error(`warn: usbmux: ${Z.message}`),[]}return(await Promise.all($.map(u2))).filter((Z)=>Z!==null)}async function u2($){try{let Q=await G$($.Properties.SerialNumber),Z=await S4.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new Z4(Y,X);return await G.reportIdentifier(),{kind:"device",id:`device:${$.Properties.SerialNumber}`,label:`device:${$.Properties.SerialNumber.slice(0,8)}`,wi:G,lockdown:Z}}catch(Q){return console.error(`warn: device ${$.Properties.SerialNumber}: ${Q.message}`),null}}async function p2(){let $=[];try{$=await V$()}catch(Z){return console.error(`warn: simulator discovery: ${Z.message}`),[]}return(await Promise.all($.map(c2))).filter((Z)=>Z!==null)}async function c2($){try{let{socket:Q,stream:Z}=await W$($.socketPath),J=new Z4(Q,Z);return await J.reportIdentifier(),{kind:"simulator",id:`sim:${$.pid}`,label:`sim:${$.pid}`,wi:J}}catch(Q){return console.error(`warn: simulator ${$.socketPath}: ${Q.message}`),null}}function e6($){switch($){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class O${url;ws;handlers=new Set;openPromise;constructor($){this.url=$,this.ws=new s6($),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((Q,Z)=>{this.ws.once("open",()=>Q()),this.ws.once("error",(J)=>Z(J))}),this.ws.on("message",(Q,Z)=>{let J=Z?new TextDecoder().decode(Q):Q.toString();for(let Y of this.handlers)Y(J)})}ready(){return this.openPromise}onFrame($){return this.handlers.add($),()=>this.handlers.delete($)}forwardSocketData($,Q,Z,J){if(this.ws.readyState!==s6.OPEN)return;this.ws.send(new TextDecoder().decode(J))}forwardDidClose($,Q,Z){}close(){try{this.ws.close()}catch{}}}async function m2($){let Q=$.port??9223,Z=$.host??"localhost",{upstreams:J}=$,Y=L$({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(H)=>J.map((K)=>N$({reqHost:H,id:encodeURIComponent(K.url),description:K.label??"bun",title:K.label??K.url,url:K.url,type:"node"}))}),X=new H$.default({noServer:!0});Y.on("upgrade",(H,K,W)=>{let z=new URL(H.url??"/","http://placeholder");if(!z.pathname.startsWith("/devtools/page/")){K.destroy();return}let L=decodeURIComponent(z.pathname.slice(15)),B=J.find((U)=>U.url===L);if(!B){K.destroy();return}X.handleUpgrade(H,K,W,(U)=>{G(U,B).catch((M)=>{console.error(`# bun attach failed: ${M.message}`);try{U.close(1011,M.message)}catch{}})})});async function G(H,K){let W=!!process.env.INSPECT_WEBKIT_DEBUG,z=new O$(K.url);await z.ready();let L=crypto.randomUUID(),B=new E4(H,z,"bun",0,L);h8(B);let U=z.onFrame((M)=>{if(W)console.error(`[bun] target>> ${M.slice(0,240)}`);B.onMessageFromTarget(M)});H.on("message",(M,D)=>{let I=D?new TextDecoder().decode(M):M.toString();if(W)console.error(`[bun] tools>> ${I.slice(0,300)}`);B.onMessageFromTools(I)}),H.on("close",()=>{U(),z.close()}),console.error(`# devtools attached: ${K.label??K.url}`)}return await B$(Y,Z,Q),U$({brand:"bun",host:Z,port:Q}),{stop(){X.close(),Y.close()},getTargets(){return J.slice()}}}async function A$(){return X$()}async function l2(){let[$,Q]=await Promise.all([d2(),i2()]);return[...$.flat(),...Q.flat()]}async function d2(){let $=await A$();return Promise.all($.map(n2))}async function i2(){let $=await V$();return Promise.all($.map(o2))}async function n2($){let Q=null;try{return Q=await a2($),await j$(Q.client,{source:"device",udid:$.Properties.SerialNumber,deviceID:$.DeviceID})}catch(Z){return console.error(`warn: ${$.Properties.SerialNumber}: ${Z.message}`),[]}finally{Q?.client.close(),Q?.lockdown.close()}}async function o2($){let Q=null;try{let{socket:Z,stream:J}=await W$($.socketPath);return Q=new Z4(Z,J),await Q.reportIdentifier(),await j$(Q,{source:"simulator",udid:`sim:${$.pid}`})}catch(Z){return console.error(`warn: simulator (${$.socketPath}): ${Z.message}`),[]}finally{Q?.close()}}async function a2($){let Q=await G$($.Properties.SerialNumber),Z=await S4.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new Z4(Y,X);return await G.reportIdentifier(),{client:G,lockdown:Z}}async function j$($,Q){let Z=(await $.listApplications()).filter((X)=>!X.isProxy),J=await Promise.all(Z.map((X)=>$.getListing(X.appId))),Y=[];for(let X=0;X<Z.length;X++){let G=Z[X];for(let H of J[X])Y.push({...Q,appId:G.appId,appName:G.name??G.bundleId??G.appId,bundleId:G.bundleId,pageId:H.pageId,title:H.title,url:H.url,type:H.type})}return Y}var LZ,BZ,n6,UZ,OZ,jZ,RZ,_0=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?jZ??=new WeakMap:RZ??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?LZ(BZ($)):{};let G=Q||!$||!$.__esModule?n6(Z,"default",{value:$,enumerable:!0}):Z;for(let H of UZ($))if(!OZ.call(G,H))n6(G,H,{get:AZ.bind($,H),enumerable:!0});if(J)Y.set($,G);return G},$0=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports),o,N0,I4,CZ,$4,Q4,$$,Q$,DZ,g8,u8,PZ,Z$,TZ,EZ=`<?xml version="1.0" encoding="UTF-8"?>
|
|
15
15
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
16
16
|
<plist version="1.0">
|
|
17
|
-
`,
|
|
17
|
+
`,IZ=`
|
|
18
18
|
</plist>
|
|
19
|
-
`,
|
|
19
|
+
`,yZ=1,kZ=8,fZ="/var/run/usbmuxd",r6=62078,Z0=(...$)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",...$)},j3,R3,C3,D3,P3,T3,cZ,H$,s6,$2,Q2,Z2,J2,Y2,X2,G2,_2=($,Q)=>!!$&&!!Q&&$.startLine===Q.startLine&&$.endLine===Q.endLine&&$.startColumn===Q.startColumn&&$.endColumn===Q.endColumn,L2=($)=>$&&{name:$.name,value:$.value,text:$.text,implicit:$.implicit,parsedOk:$.parsedOk!==!1,important:!!$.priority,disabled:$.status==="disabled",range:$.range},R0=($)=>$&&{styleSheetId:$.styleId?.styleSheetId,cssText:$.cssText,range:$.range,shorthandEntries:$.shorthandEntries??[],cssProperties:Array.isArray($.cssProperties)?$.cssProperties.map(L2):[]},B2,U2=($)=>$&&{text:$.text,selectors:Array.isArray($.selectors)?$.selectors.map((Q)=>({text:Q.text,range:Q.range??$.range})):[]},d8=($)=>Array.isArray($)?$.map((Q)=>({matchingSelectors:Q.matchingSelectors,rule:b8(Q.rule)})):[],O2=($)=>Array.isArray($)?$.map((Q)=>({pseudoType:Q.pseudoId,matches:d8(Q.matches)})):[],A2=($)=>Array.isArray($)?$.map((Q)=>({inlineStyle:R0(Q.inlineStyle),matchedCSSRules:d8(Q.matchedCSSRules)})):[],R2,D2=`
|
|
20
20
|
function __sd_simulate(p){
|
|
21
21
|
var el = document.elementFromPoint(p.x, p.y);
|
|
22
22
|
if (!el) return false;
|
|
@@ -31,31 +31,31 @@ function __sd_simulate(p){
|
|
|
31
31
|
});
|
|
32
32
|
el.dispatchEvent(ev);
|
|
33
33
|
return true;
|
|
34
|
-
}`,L2=65536,O2,A2,R2,T2=1500;var L$=Z5(()=>{XZ=Object.create,GZ=Object.getPrototypeOf,g6=Object.defineProperty,KZ=Object.getOwnPropertyNames,VZ=Object.prototype.hasOwnProperty;o=YZ(import.meta.url),F0=$0(($,Q)=>{var Z=["nodebuffer","arraybuffer","fragments"],J=typeof Blob<"u";if(J)Z.push("blob");Q.exports={BINARY_TYPES:Z,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:J,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),D4=$0(($,Q)=>{var{EMPTY_BUFFER:Z}=F0(),J=Buffer[Symbol.species];function Y(W,z){if(W.length===0)return Z;if(W.length===1)return W[0];let L=Buffer.allocUnsafe(z),B=0;for(let U=0;U<W.length;U++){let M=W[U];L.set(M,B),B+=M.length}if(B<z)return new J(L.buffer,L.byteOffset,B);return L}function X(W,z,L,B,U){for(let M=0;M<U;M++)L[B+M]=W[M]^z[M&3]}function G(W,z){for(let L=0;L<W.length;L++)W[L]^=z[L&3]}function H(W){if(W.length===W.buffer.byteLength)return W.buffer;return W.buffer.slice(W.byteOffset,W.byteOffset+W.length)}function K(W){if(K.readOnly=!0,Buffer.isBuffer(W))return W;let z;if(W instanceof ArrayBuffer)z=new J(W);else if(ArrayBuffer.isView(W))z=new J(W.buffer,W.byteOffset,W.byteLength);else z=Buffer.from(W),K.readOnly=!1;return z}if(Q.exports={concat:Y,mask:X,toArrayBuffer:H,toBuffer:K,unmask:G},!process.env.WS_NO_BUFFER_UTIL)try{let W=(()=>{throw Error("Cannot require module bufferutil")})();Q.exports.mask=function(z,L,B,U,M){if(M<48)X(z,L,B,U,M);else W.mask(z,L,B,U,M)},Q.exports.unmask=function(z,L){if(z.length<32)G(z,L);else W.unmask(z,L)}}catch(W){}}),MZ=$0(($,Q)=>{var Z=Symbol("kDone"),J=Symbol("kRun");class Y{constructor(X){this[Z]=()=>{this.pending--,this[J]()},this.concurrency=X||1/0,this.jobs=[],this.pending=0}add(X){this.jobs.push(X),this[J]()}[J](){if(this.pending===this.concurrency)return;if(this.jobs.length){let X=this.jobs.shift();this.pending++,X(this[Z])}}}Q.exports=Y}),s0=$0(($,Q)=>{var Z=o("zlib"),J=D4(),Y=MZ(),{kStatusCode:X}=F0(),G=Buffer[Symbol.species],H=Buffer.from([0,0,255,255]),K=Symbol("permessage-deflate"),W=Symbol("total-length"),z=Symbol("callback"),L=Symbol("buffers"),B=Symbol("error"),U;class M{constructor(O){if(this._options=O||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!U){let j=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;U=new Y(j)}}static get extensionName(){return"permessage-deflate"}offer(){let O={};if(this._options.serverNoContextTakeover)O.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)O.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)O.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)O.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)O.client_max_window_bits=!0;return O}accept(O){return O=this.normalizeParams(O),this.params=this._isServer?this.acceptAsServer(O):this.acceptAsClient(O),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let O=this._deflate[z];if(this._deflate.close(),this._deflate=null,O)O(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(O){let j=this._options,R=O.find((P)=>{if(j.serverNoContextTakeover===!1&&P.server_no_context_takeover||P.server_max_window_bits&&(j.serverMaxWindowBits===!1||typeof j.serverMaxWindowBits==="number"&&j.serverMaxWindowBits>P.server_max_window_bits)||typeof j.clientMaxWindowBits==="number"&&!P.client_max_window_bits)return!1;return!0});if(!R)throw Error("None of the extension offers can be accepted");if(j.serverNoContextTakeover)R.server_no_context_takeover=!0;if(j.clientNoContextTakeover)R.client_no_context_takeover=!0;if(typeof j.serverMaxWindowBits==="number")R.server_max_window_bits=j.serverMaxWindowBits;if(typeof j.clientMaxWindowBits==="number")R.client_max_window_bits=j.clientMaxWindowBits;else if(R.client_max_window_bits===!0||j.clientMaxWindowBits===!1)delete R.client_max_window_bits;return R}acceptAsClient(O){let j=O[0];if(this._options.clientNoContextTakeover===!1&&j.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!j.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")j.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&j.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return j}normalizeParams(O){return O.forEach((j)=>{Object.keys(j).forEach((R)=>{let P=j[R];if(P.length>1)throw Error(`Parameter "${R}" must have only a single value`);if(P=P[0],R==="client_max_window_bits"){if(P!==!0){let N=+P;if(!Number.isInteger(N)||N<8||N>15)throw TypeError(`Invalid value for parameter "${R}": ${P}`);P=N}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${R}": ${P}`)}else if(R==="server_max_window_bits"){let N=+P;if(!Number.isInteger(N)||N<8||N>15)throw TypeError(`Invalid value for parameter "${R}": ${P}`);P=N}else if(R==="client_no_context_takeover"||R==="server_no_context_takeover"){if(P!==!0)throw TypeError(`Invalid value for parameter "${R}": ${P}`)}else throw Error(`Unknown parameter "${R}"`);j[R]=P})}),O}decompress(O,j,R){U.add((P)=>{this._decompress(O,j,(N,V)=>{P(),R(N,V)})})}compress(O,j,R){U.add((P)=>{this._compress(O,j,(N,V)=>{P(),R(N,V)})})}_decompress(O,j,R){let P=this._isServer?"client":"server";if(!this._inflate){let N=`${P}_max_window_bits`,V=typeof this.params[N]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[N];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:V}),this._inflate[K]=this,this._inflate[W]=0,this._inflate[L]=[],this._inflate.on("error",E),this._inflate.on("data",I)}if(this._inflate[z]=R,this._inflate.write(O),j)this._inflate.write(H);this._inflate.flush(()=>{let N=this._inflate[B];if(N){this._inflate.close(),this._inflate=null,R(N);return}let V=J.concat(this._inflate[L],this._inflate[W]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[W]=0,this._inflate[L]=[],j&&this.params[`${P}_no_context_takeover`])this._inflate.reset();R(null,V)})}_compress(O,j,R){let P=this._isServer?"server":"client";if(!this._deflate){let N=`${P}_max_window_bits`,V=typeof this.params[N]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[N];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:V}),this._deflate[W]=0,this._deflate[L]=[],this._deflate.on("data",D)}this._deflate[z]=R,this._deflate.write(O),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let N=J.concat(this._deflate[L],this._deflate[W]);if(j)N=new G(N.buffer,N.byteOffset,N.length-4);if(this._deflate[z]=null,this._deflate[W]=0,this._deflate[L]=[],j&&this.params[`${P}_no_context_takeover`])this._deflate.reset();R(null,N)})}}Q.exports=M;function D(O){this[L].push(O),this[W]+=O.length}function I(O){if(this[W]+=O.length,this[K]._maxPayload<1||this[W]<=this[K]._maxPayload){this[L].push(O);return}this[B]=RangeError("Max payload size exceeded"),this[B].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[B][X]=1009,this.removeListener("data",I),this.reset()}function E(O){if(this[K]._inflate=null,this[B]){this[z](this[B]);return}O[X]=1007,this[z](O)}}),e0=$0(($,Q)=>{var{isUtf8:Z}=o("buffer"),{hasBlob:J}=F0(),Y=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function X(K){return K>=1000&&K<=1014&&K!==1004&&K!==1005&&K!==1006||K>=3000&&K<=4999}function G(K){let W=K.length,z=0;while(z<W)if((K[z]&128)===0)z++;else if((K[z]&224)===192){if(z+1===W||(K[z+1]&192)!==128||(K[z]&254)===192)return!1;z+=2}else if((K[z]&240)===224){if(z+2>=W||(K[z+1]&192)!==128||(K[z+2]&192)!==128||K[z]===224&&(K[z+1]&224)===128||K[z]===237&&(K[z+1]&224)===160)return!1;z+=3}else if((K[z]&248)===240){if(z+3>=W||(K[z+1]&192)!==128||(K[z+2]&192)!==128||(K[z+3]&192)!==128||K[z]===240&&(K[z+1]&240)===128||K[z]===244&&K[z+1]>143||K[z]>244)return!1;z+=4}else return!1;return!0}function H(K){return J&&typeof K==="object"&&typeof K.arrayBuffer==="function"&&typeof K.type==="string"&&typeof K.stream==="function"&&(K[Symbol.toStringTag]==="Blob"||K[Symbol.toStringTag]==="File")}if(Q.exports={isBlob:H,isValidStatusCode:X,isValidUTF8:G,tokenChars:Y},Z)Q.exports.isValidUTF8=function(K){return K.length<24?G(K):Z(K)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let K=(()=>{throw Error("Cannot require module utf-8-validate")})();Q.exports.isValidUTF8=function(W){return W.length<32?G(W):K(W)}}catch(K){}}),n6=$0(($,Q)=>{var{Writable:Z}=o("stream"),J=s0(),{BINARY_TYPES:Y,EMPTY_BUFFER:X,kStatusCode:G,kWebSocket:H}=F0(),{concat:K,toArrayBuffer:W,unmask:z}=D4(),{isValidStatusCode:L,isValidUTF8:B}=e0(),U=Buffer[Symbol.species],M=0,D=1,I=2,E=3,O=4,j=5,R=6;class P extends Z{constructor(N={}){super();this._allowSynchronousEvents=N.allowSynchronousEvents!==void 0?N.allowSynchronousEvents:!0,this._binaryType=N.binaryType||Y[0],this._extensions=N.extensions||{},this._isServer=!!N.isServer,this._maxPayload=N.maxPayload|0,this._skipUTF8Validation=!!N.skipUTF8Validation,this[H]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=M}_write(N,V,F){if(this._opcode===8&&this._state==M)return F();this._bufferedBytes+=N.length,this._buffers.push(N),this.startLoop(F)}consume(N){if(this._bufferedBytes-=N,N===this._buffers[0].length)return this._buffers.shift();if(N<this._buffers[0].length){let F=this._buffers[0];return this._buffers[0]=new U(F.buffer,F.byteOffset+N,F.length-N),new U(F.buffer,F.byteOffset,N)}let V=Buffer.allocUnsafe(N);do{let F=this._buffers[0],_=V.length-N;if(N>=F.length)V.set(this._buffers.shift(),_);else V.set(new Uint8Array(F.buffer,F.byteOffset,N),_),this._buffers[0]=new U(F.buffer,F.byteOffset+N,F.length-N);N-=F.length}while(N>0);return V}startLoop(N){this._loop=!0;do switch(this._state){case M:this.getInfo(N);break;case D:this.getPayloadLength16(N);break;case I:this.getPayloadLength64(N);break;case E:this.getMask();break;case O:this.getData(N);break;case j:case R:this._loop=!1;return}while(this._loop);if(!this._errored)N()}getInfo(N){if(this._bufferedBytes<2){this._loop=!1;return}let V=this.consume(2);if((V[0]&48)!==0){let _=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");N(_);return}let F=(V[0]&64)===64;if(F&&!this._extensions[J.extensionName]){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");N(_);return}if(this._fin=(V[0]&128)===128,this._opcode=V[0]&15,this._payloadLength=V[1]&127,this._opcode===0){if(F){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");N(_);return}if(!this._fragmented){let _=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");N(_);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");N(_);return}this._compressed=F}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let _=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");N(_);return}if(F){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");N(_);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let _=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");N(_);return}}else{let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");N(_);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(V[1]&128)===128,this._isServer){if(!this._masked){let _=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");N(_);return}}else if(this._masked){let _=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");N(_);return}if(this._payloadLength===126)this._state=D;else if(this._payloadLength===127)this._state=I;else this.haveLength(N)}getPayloadLength16(N){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(N)}getPayloadLength64(N){if(this._bufferedBytes<8){this._loop=!1;return}let V=this.consume(8),F=V.readUInt32BE(0);if(F>Math.pow(2,21)-1){let _=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");N(_);return}this._payloadLength=F*Math.pow(2,32)+V.readUInt32BE(4),this.haveLength(N)}haveLength(N){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let V=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");N(V);return}}if(this._masked)this._state=E;else this._state=O}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=O}getData(N){let V=X;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(V=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)z(V,this._mask)}if(this._opcode>7){this.controlMessage(V,N);return}if(this._compressed){this._state=j,this.decompress(V,N);return}if(V.length)this._messageLength=this._totalPayloadLength,this._fragments.push(V);this.dataMessage(N)}decompress(N,V){this._extensions[J.extensionName].decompress(N,this._fin,(_,C)=>{if(_)return V(_);if(C.length){if(this._messageLength+=C.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let T=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");V(T);return}this._fragments.push(C)}if(this.dataMessage(V),this._state===M)this.startLoop(V)})}dataMessage(N){if(!this._fin){this._state=M;return}let V=this._messageLength,F=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let _;if(this._binaryType==="nodebuffer")_=K(F,V);else if(this._binaryType==="arraybuffer")_=W(K(F,V));else if(this._binaryType==="blob")_=new Blob(F);else _=F;if(this._allowSynchronousEvents)this.emit("message",_,!0),this._state=M;else this._state=R,setImmediate(()=>{this.emit("message",_,!0),this._state=M,this.startLoop(N)})}else{let _=K(F,V);if(!this._skipUTF8Validation&&!B(_)){let C=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");N(C);return}if(this._state===j||this._allowSynchronousEvents)this.emit("message",_,!1),this._state=M;else this._state=R,setImmediate(()=>{this.emit("message",_,!1),this._state=M,this.startLoop(N)})}}controlMessage(N,V){if(this._opcode===8){if(N.length===0)this._loop=!1,this.emit("conclude",1005,X),this.end();else{let F=N.readUInt16BE(0);if(!L(F)){let C=this.createError(RangeError,`invalid status code ${F}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");V(C);return}let _=new U(N.buffer,N.byteOffset+2,N.length-2);if(!this._skipUTF8Validation&&!B(_)){let C=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");V(C);return}this._loop=!1,this.emit("conclude",F,_),this.end()}this._state=M;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",N),this._state=M;else this._state=R,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",N),this._state=M,this.startLoop(V)})}createError(N,V,F,_,C){this._loop=!1,this._errored=!0;let T=new N(F?`Invalid WebSocket frame: ${V}`:V);return Error.captureStackTrace(T,this.createError),T.code=C,T[G]=_,T}}Q.exports=P}),o6=$0(($,Q)=>{var{Duplex:Z}=o("stream"),{randomFillSync:J}=o("crypto"),Y=s0(),{EMPTY_BUFFER:X,kWebSocket:G,NOOP:H}=F0(),{isBlob:K,isValidStatusCode:W}=e0(),{mask:z,toBuffer:L}=D4(),B=Symbol("kByteLength"),U=Buffer.alloc(4),M=8192,D,I=M,E=0,O=1,j=2;class R{constructor(V,F,_){if(this._extensions=F||{},_)this._generateMask=_,this._maskBuffer=Buffer.alloc(4);this._socket=V,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=E,this.onerror=H,this[G]=void 0}static frame(V,F){let _,C=!1,T=2,x=!1;if(F.mask){if(_=F.maskBuffer||U,F.generateMask)F.generateMask(_);else{if(I===M){if(D===void 0)D=Buffer.alloc(M);J(D,0,M),I=0}_[0]=D[I++],_[1]=D[I++],_[2]=D[I++],_[3]=D[I++]}x=(_[0]|_[1]|_[2]|_[3])===0,T=6}let S;if(typeof V==="string")if((!F.mask||x)&&F[B]!==void 0)S=F[B];else V=Buffer.from(V),S=V.length;else S=V.length,C=F.mask&&F.readOnly&&!x;let k=S;if(S>=65536)T+=8,k=127;else if(S>125)T+=2,k=126;let y=Buffer.allocUnsafe(C?S+T:T);if(y[0]=F.fin?F.opcode|128:F.opcode,F.rsv1)y[0]|=64;if(y[1]=k,k===126)y.writeUInt16BE(S,2);else if(k===127)y[2]=y[3]=0,y.writeUIntBE(S,4,6);if(!F.mask)return[y,V];if(y[1]|=128,y[T-4]=_[0],y[T-3]=_[1],y[T-2]=_[2],y[T-1]=_[3],x)return[y,V];if(C)return z(V,_,y,T,S),[y];return z(V,_,V,0,S),[y,V]}close(V,F,_,C){let T;if(V===void 0)T=X;else if(typeof V!=="number"||!W(V))throw TypeError("First argument must be a valid error code number");else if(F===void 0||!F.length)T=Buffer.allocUnsafe(2),T.writeUInt16BE(V,0);else{let S=Buffer.byteLength(F);if(S>123)throw RangeError("The message must not be greater than 123 bytes");if(T=Buffer.allocUnsafe(2+S),T.writeUInt16BE(V,0),typeof F==="string")T.write(F,2);else T.set(F,2)}let x={[B]:T.length,fin:!0,generateMask:this._generateMask,mask:_,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==E)this.enqueue([this.dispatch,T,!1,x,C]);else this.sendFrame(R.frame(T,x),C)}ping(V,F,_){let C,T;if(typeof V==="string")C=Buffer.byteLength(V),T=!1;else if(K(V))C=V.size,T=!1;else V=L(V),C=V.length,T=L.readOnly;if(C>125)throw RangeError("The data size must not be greater than 125 bytes");let x={[B]:C,fin:!0,generateMask:this._generateMask,mask:F,maskBuffer:this._maskBuffer,opcode:9,readOnly:T,rsv1:!1};if(K(V))if(this._state!==E)this.enqueue([this.getBlobData,V,!1,x,_]);else this.getBlobData(V,!1,x,_);else if(this._state!==E)this.enqueue([this.dispatch,V,!1,x,_]);else this.sendFrame(R.frame(V,x),_)}pong(V,F,_){let C,T;if(typeof V==="string")C=Buffer.byteLength(V),T=!1;else if(K(V))C=V.size,T=!1;else V=L(V),C=V.length,T=L.readOnly;if(C>125)throw RangeError("The data size must not be greater than 125 bytes");let x={[B]:C,fin:!0,generateMask:this._generateMask,mask:F,maskBuffer:this._maskBuffer,opcode:10,readOnly:T,rsv1:!1};if(K(V))if(this._state!==E)this.enqueue([this.getBlobData,V,!1,x,_]);else this.getBlobData(V,!1,x,_);else if(this._state!==E)this.enqueue([this.dispatch,V,!1,x,_]);else this.sendFrame(R.frame(V,x),_)}send(V,F,_){let C=this._extensions[Y.extensionName],T=F.binary?2:1,x=F.compress,S,k;if(typeof V==="string")S=Buffer.byteLength(V),k=!1;else if(K(V))S=V.size,k=!1;else V=L(V),S=V.length,k=L.readOnly;if(this._firstFragment){if(this._firstFragment=!1,x&&C&&C.params[C._isServer?"server_no_context_takeover":"client_no_context_takeover"])x=S>=C._threshold;this._compress=x}else x=!1,T=0;if(F.fin)this._firstFragment=!0;let y={[B]:S,fin:F.fin,generateMask:this._generateMask,mask:F.mask,maskBuffer:this._maskBuffer,opcode:T,readOnly:k,rsv1:x};if(K(V))if(this._state!==E)this.enqueue([this.getBlobData,V,this._compress,y,_]);else this.getBlobData(V,this._compress,y,_);else if(this._state!==E)this.enqueue([this.dispatch,V,this._compress,y,_]);else this.dispatch(V,this._compress,y,_)}getBlobData(V,F,_,C){this._bufferedBytes+=_[B],this._state=j,V.arrayBuffer().then((T)=>{if(this._socket.destroyed){let S=Error("The socket was closed while the blob was being read");process.nextTick(P,this,S,C);return}this._bufferedBytes-=_[B];let x=L(T);if(!F)this._state=E,this.sendFrame(R.frame(x,_),C),this.dequeue();else this.dispatch(x,F,_,C)}).catch((T)=>{process.nextTick(N,this,T,C)})}dispatch(V,F,_,C){if(!F){this.sendFrame(R.frame(V,_),C);return}let T=this._extensions[Y.extensionName];this._bufferedBytes+=_[B],this._state=O,T.compress(V,_.fin,(x,S)=>{if(this._socket.destroyed){let k=Error("The socket was closed while data was being compressed");P(this,k,C);return}this._bufferedBytes-=_[B],this._state=E,_.readOnly=!1,this.sendFrame(R.frame(S,_),C),this.dequeue()})}dequeue(){while(this._state===E&&this._queue.length){let V=this._queue.shift();this._bufferedBytes-=V[3][B],Reflect.apply(V[0],this,V.slice(1))}}enqueue(V){this._bufferedBytes+=V[3][B],this._queue.push(V)}sendFrame(V,F){if(V.length===2)this._socket.cork(),this._socket.write(V[0]),this._socket.write(V[1],F),this._socket.uncork();else this._socket.write(V[0],F)}}Q.exports=R;function P(V,F,_){if(typeof _==="function")_(F);for(let C=0;C<V._queue.length;C++){let T=V._queue[C],x=T[T.length-1];if(typeof x==="function")x(F)}}function N(V,F,_){P(V,F,_),V.onerror(F)}}),FZ=$0(($,Q)=>{var{kForOnEventAttribute:Z,kListener:J}=F0(),Y=Symbol("kCode"),X=Symbol("kData"),G=Symbol("kError"),H=Symbol("kMessage"),K=Symbol("kReason"),W=Symbol("kTarget"),z=Symbol("kType"),L=Symbol("kWasClean");class B{constructor(O){this[W]=null,this[z]=O}get target(){return this[W]}get type(){return this[z]}}Object.defineProperty(B.prototype,"target",{enumerable:!0}),Object.defineProperty(B.prototype,"type",{enumerable:!0});class U extends B{constructor(O,j={}){super(O);this[Y]=j.code===void 0?0:j.code,this[K]=j.reason===void 0?"":j.reason,this[L]=j.wasClean===void 0?!1:j.wasClean}get code(){return this[Y]}get reason(){return this[K]}get wasClean(){return this[L]}}Object.defineProperty(U.prototype,"code",{enumerable:!0}),Object.defineProperty(U.prototype,"reason",{enumerable:!0}),Object.defineProperty(U.prototype,"wasClean",{enumerable:!0});class M extends B{constructor(O,j={}){super(O);this[G]=j.error===void 0?null:j.error,this[H]=j.message===void 0?"":j.message}get error(){return this[G]}get message(){return this[H]}}Object.defineProperty(M.prototype,"error",{enumerable:!0}),Object.defineProperty(M.prototype,"message",{enumerable:!0});class D extends B{constructor(O,j={}){super(O);this[X]=j.data===void 0?null:j.data}get data(){return this[X]}}Object.defineProperty(D.prototype,"data",{enumerable:!0});var I={addEventListener(O,j,R={}){for(let N of this.listeners(O))if(!R[Z]&&N[J]===j&&!N[Z])return;let P;if(O==="message")P=function(V,F){let _=new D("message",{data:F?V:V.toString()});_[W]=this,E(j,this,_)};else if(O==="close")P=function(V,F){let _=new U("close",{code:V,reason:F.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});_[W]=this,E(j,this,_)};else if(O==="error")P=function(V){let F=new M("error",{error:V,message:V.message});F[W]=this,E(j,this,F)};else if(O==="open")P=function(){let V=new B("open");V[W]=this,E(j,this,V)};else return;if(P[Z]=!!R[Z],P[J]=j,R.once)this.once(O,P);else this.on(O,P)},removeEventListener(O,j){for(let R of this.listeners(O))if(R[J]===j&&!R[Z]){this.removeListener(O,R);break}}};Q.exports={CloseEvent:U,ErrorEvent:M,Event:B,EventTarget:I,MessageEvent:D};function E(O,j,R){if(typeof O==="object"&&O.handleEvent)O.handleEvent.call(O,R);else O.call(j,R)}}),k8=$0(($,Q)=>{var{tokenChars:Z}=e0();function J(G,H,K){if(G[H]===void 0)G[H]=[K];else G[H].push(K)}function Y(G){let H=Object.create(null),K=Object.create(null),W=!1,z=!1,L=!1,B,U,M=-1,D=-1,I=-1,E=0;for(;E<G.length;E++)if(D=G.charCodeAt(E),B===void 0)if(I===-1&&Z[D]===1){if(M===-1)M=E}else if(E!==0&&(D===32||D===9)){if(I===-1&&M!==-1)I=E}else if(D===59||D===44){if(M===-1)throw SyntaxError(`Unexpected character at index ${E}`);if(I===-1)I=E;let j=G.slice(M,I);if(D===44)J(H,j,K),K=Object.create(null);else B=j;M=I=-1}else throw SyntaxError(`Unexpected character at index ${E}`);else if(U===void 0)if(I===-1&&Z[D]===1){if(M===-1)M=E}else if(D===32||D===9){if(I===-1&&M!==-1)I=E}else if(D===59||D===44){if(M===-1)throw SyntaxError(`Unexpected character at index ${E}`);if(I===-1)I=E;if(J(K,G.slice(M,I),!0),D===44)J(H,B,K),K=Object.create(null),B=void 0;M=I=-1}else if(D===61&&M!==-1&&I===-1)U=G.slice(M,E),M=I=-1;else throw SyntaxError(`Unexpected character at index ${E}`);else if(z){if(Z[D]!==1)throw SyntaxError(`Unexpected character at index ${E}`);if(M===-1)M=E;else if(!W)W=!0;z=!1}else if(L)if(Z[D]===1){if(M===-1)M=E}else if(D===34&&M!==-1)L=!1,I=E;else if(D===92)z=!0;else throw SyntaxError(`Unexpected character at index ${E}`);else if(D===34&&G.charCodeAt(E-1)===61)L=!0;else if(I===-1&&Z[D]===1){if(M===-1)M=E}else if(M!==-1&&(D===32||D===9)){if(I===-1)I=E}else if(D===59||D===44){if(M===-1)throw SyntaxError(`Unexpected character at index ${E}`);if(I===-1)I=E;let j=G.slice(M,I);if(W)j=j.replace(/\\/g,""),W=!1;if(J(K,U,j),D===44)J(H,B,K),K=Object.create(null),B=void 0;U=void 0,M=I=-1}else throw SyntaxError(`Unexpected character at index ${E}`);if(M===-1||L||D===32||D===9)throw SyntaxError("Unexpected end of input");if(I===-1)I=E;let O=G.slice(M,I);if(B===void 0)J(H,O,K);else{if(U===void 0)J(K,O,!0);else if(W)J(K,U,O.replace(/\\/g,""));else J(K,U,O);J(H,B,K)}return H}function X(G){return Object.keys(G).map((H)=>{let K=G[H];if(!Array.isArray(K))K=[K];return K.map((W)=>{return[H].concat(Object.keys(W).map((z)=>{let L=W[z];if(!Array.isArray(L))L=[L];return L.map((B)=>B===!0?z:`${z}=${B}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}Q.exports={format:X,parse:Y}}),f8=$0(($,Q)=>{var Z=o("events"),J=o("https"),Y=o("http"),X=o("net"),G=o("tls"),{randomBytes:H,createHash:K}=o("crypto"),{Duplex:W,Readable:z}=o("stream"),{URL:L}=o("url"),B=s0(),U=n6(),M=o6(),{isBlob:D}=e0(),{BINARY_TYPES:I,CLOSE_TIMEOUT:E,EMPTY_BUFFER:O,GUID:j,kForOnEventAttribute:R,kListener:P,kStatusCode:N,kWebSocket:V,NOOP:F}=F0(),{EventTarget:{addEventListener:_,removeEventListener:C}}=FZ(),{format:T,parse:x}=k8(),{toBuffer:S}=D4(),k=Symbol("kAborted"),y=[8,13],u=["CONNECTING","OPEN","CLOSING","CLOSED"],p=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class q extends Z{constructor(A,w,h){super();if(this._binaryType=I[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=O,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=q.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,A!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,w===void 0)w=[];else if(!Array.isArray(w))if(typeof w==="object"&&w!==null)h=w,w=[];else w=[w];f(this,A,w,h)}else this._autoPong=h.autoPong,this._closeTimeout=h.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(A){if(!I.includes(A))return;if(this._binaryType=A,this._receiver)this._receiver._binaryType=A}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(A,w,h){let g=new U({allowSynchronousEvents:h.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation}),v=new M(A,this._extensions,h.generateMask);if(this._receiver=g,this._sender=v,this._socket=A,g[V]=this,v[V]=this,A[V]=this,g.on("conclude",b$),g.on("drain",h$),g.on("error",u$),g.on("message",g$),g.on("ping",p$),g.on("pong",c$),v.onerror=m$,A.setTimeout)A.setTimeout(0);if(A.setNoDelay)A.setNoDelay();if(w.length>0)A.unshift(w);A.on("close",s8),A.on("data",X4),A.on("end",e8),A.on("error",$9),this._readyState=q.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=q.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[B.extensionName])this._extensions[B.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=q.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(A,w){if(this.readyState===q.CLOSED)return;if(this.readyState===q.CONNECTING){e(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===q.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=q.CLOSING,this._sender.close(A,w,!this._isServer,(h)=>{if(h)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),t8(this)}pause(){if(this.readyState===q.CONNECTING||this.readyState===q.CLOSED)return;this._paused=!0,this._socket.pause()}ping(A,w,h){if(this.readyState===q.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof A==="function")h=A,A=w=void 0;else if(typeof w==="function")h=w,w=void 0;if(typeof A==="number")A=A.toString();if(this.readyState!==q.OPEN){S4(this,A,h);return}if(w===void 0)w=!this._isServer;this._sender.ping(A||O,w,h)}pong(A,w,h){if(this.readyState===q.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof A==="function")h=A,A=w=void 0;else if(typeof w==="function")h=w,w=void 0;if(typeof A==="number")A=A.toString();if(this.readyState!==q.OPEN){S4(this,A,h);return}if(w===void 0)w=!this._isServer;this._sender.pong(A||O,w,h)}resume(){if(this.readyState===q.CONNECTING||this.readyState===q.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(A,w,h){if(this.readyState===q.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof w==="function")h=w,w={};if(typeof A==="number")A=A.toString();if(this.readyState!==q.OPEN){S4(this,A,h);return}let g={binary:typeof A!=="string",mask:!this._isServer,compress:!0,fin:!0,...w};if(!this._extensions[B.extensionName])g.compress=!1;this._sender.send(A||O,g,h)}terminate(){if(this.readyState===q.CLOSED)return;if(this.readyState===q.CONNECTING){e(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=q.CLOSING,this._socket.destroy()}}Object.defineProperty(q,"CONNECTING",{enumerable:!0,value:u.indexOf("CONNECTING")}),Object.defineProperty(q.prototype,"CONNECTING",{enumerable:!0,value:u.indexOf("CONNECTING")}),Object.defineProperty(q,"OPEN",{enumerable:!0,value:u.indexOf("OPEN")}),Object.defineProperty(q.prototype,"OPEN",{enumerable:!0,value:u.indexOf("OPEN")}),Object.defineProperty(q,"CLOSING",{enumerable:!0,value:u.indexOf("CLOSING")}),Object.defineProperty(q.prototype,"CLOSING",{enumerable:!0,value:u.indexOf("CLOSING")}),Object.defineProperty(q,"CLOSED",{enumerable:!0,value:u.indexOf("CLOSED")}),Object.defineProperty(q.prototype,"CLOSED",{enumerable:!0,value:u.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((A)=>{Object.defineProperty(q.prototype,A,{enumerable:!0})}),["open","error","close","message"].forEach((A)=>{Object.defineProperty(q.prototype,`on${A}`,{enumerable:!0,get(){for(let w of this.listeners(A))if(w[R])return w[P];return null},set(w){for(let h of this.listeners(A))if(h[R]){this.removeListener(A,h);break}if(typeof w!=="function")return;this.addEventListener(A,w,{[R]:!0})}})}),q.prototype.addEventListener=_,q.prototype.removeEventListener=C,Q.exports=q;function f(A,w,h,g){let v={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:E,protocolVersion:y[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...g,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(A._autoPong=v.autoPong,A._closeTimeout=v.closeTimeout,!y.includes(v.protocolVersion))throw RangeError(`Unsupported protocol version: ${v.protocolVersion} (supported versions: ${y.join(", ")})`);let d;if(w instanceof L)d=w;else try{d=new L(w)}catch{throw SyntaxError(`Invalid URL: ${w}`)}if(d.protocol==="http:")d.protocol="ws:";else if(d.protocol==="https:")d.protocol="wss:";A._url=d.href;let D0=d.protocol==="wss:",T0=d.protocol==="ws+unix:",b0;if(d.protocol!=="ws:"&&!D0&&!T0)b0=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(T0&&!d.pathname)b0="The URL's pathname is empty";else if(d.hash)b0="The URL contains a fragment identifier";if(b0){let c=SyntaxError(b0);if(A._redirects===0)throw c;else{m(A,c);return}}let Q9=D0?443:80,Z9=H(16).toString("base64"),J9=D0?J.request:Y.request,h0=new Set,u0;if(v.createConnection=v.createConnection||(D0?V0:a),v.defaultPort=v.defaultPort||Q9,v.port=d.port||Q9,v.host=d.hostname.startsWith("[")?d.hostname.slice(1,-1):d.hostname,v.headers={...v.headers,"Sec-WebSocket-Version":v.protocolVersion,"Sec-WebSocket-Key":Z9,Connection:"Upgrade",Upgrade:"websocket"},v.path=d.pathname+d.search,v.timeout=v.handshakeTimeout,v.perMessageDeflate)u0=new B({...v.perMessageDeflate,isServer:!1,maxPayload:v.maxPayload}),v.headers["Sec-WebSocket-Extensions"]=T({[B.extensionName]:u0.offer()});if(h.length){for(let c of h){if(typeof c!=="string"||!p.test(c)||h0.has(c))throw SyntaxError("An invalid or duplicated subprotocol was specified");h0.add(c)}v.headers["Sec-WebSocket-Protocol"]=h.join(",")}if(v.origin)if(v.protocolVersion<13)v.headers["Sec-WebSocket-Origin"]=v.origin;else v.headers.Origin=v.origin;if(d.username||d.password)v.auth=`${d.username}:${d.password}`;if(T0){let c=v.path.split(":");v.socketPath=c[0],v.path=c[1]}let n;if(v.followRedirects){if(A._redirects===0){A._originalIpc=T0,A._originalSecure=D0,A._originalHostOrSocketPath=T0?v.socketPath:d.host;let c=g&&g.headers;if(g={...g,headers:{}},c)for(let[t,P0]of Object.entries(c))g.headers[t.toLowerCase()]=P0}else if(A.listenerCount("redirect")===0){let c=T0?A._originalIpc?v.socketPath===A._originalHostOrSocketPath:!1:A._originalIpc?!1:d.host===A._originalHostOrSocketPath;if(!c||A._originalSecure&&!D0){if(delete v.headers.authorization,delete v.headers.cookie,!c)delete v.headers.host;v.auth=void 0}}if(v.auth&&!g.headers.authorization)g.headers.authorization="Basic "+Buffer.from(v.auth).toString("base64");if(n=A._req=J9(v),A._redirects)A.emit("redirect",A.url,n)}else n=A._req=J9(v);if(v.timeout)n.on("timeout",()=>{e(A,n,"Opening handshake has timed out")});if(n.on("error",(c)=>{if(n===null||n[k])return;n=A._req=null,m(A,c)}),n.on("response",(c)=>{let t=c.headers.location,P0=c.statusCode;if(t&&v.followRedirects&&P0>=300&&P0<400){if(++A._redirects>v.maxRedirects){e(A,n,"Maximum redirects exceeded");return}n.abort();let g0;try{g0=new L(t,w)}catch(Y9){let E0=SyntaxError(`Invalid URL: ${t}`);m(A,E0);return}f(A,g0,h,g)}else if(!A.emit("unexpected-response",n,c))e(A,n,`Unexpected server response: ${c.statusCode}`)}),n.on("upgrade",(c,t,P0)=>{if(A.emit("upgrade",c),A.readyState!==q.CONNECTING)return;n=A._req=null;let g0=c.headers.upgrade;if(g0===void 0||g0.toLowerCase()!=="websocket"){e(A,t,"Invalid Upgrade header");return}let Y9=K("sha1").update(Z9+j).digest("base64");if(c.headers["sec-websocket-accept"]!==Y9){e(A,t,"Invalid Sec-WebSocket-Accept header");return}let E0=c.headers["sec-websocket-protocol"],p0;if(E0!==void 0){if(!h0.size)p0="Server sent a subprotocol but none was requested";else if(!h0.has(E0))p0="Server sent an invalid subprotocol"}else if(h0.size)p0="Server sent no subprotocol";if(p0){e(A,t,p0);return}if(E0)A._protocol=E0;let X9=c.headers["sec-websocket-extensions"];if(X9!==void 0){if(!u0){e(A,t,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let y4;try{y4=x(X9)}catch(k4){e(A,t,"Invalid Sec-WebSocket-Extensions header");return}let G9=Object.keys(y4);if(G9.length!==1||G9[0]!==B.extensionName){e(A,t,"Server indicated an extension that was not requested");return}try{u0.accept(y4[B.extensionName])}catch(k4){e(A,t,"Invalid Sec-WebSocket-Extensions header");return}A._extensions[B.extensionName]=u0}A.setSocket(t,P0,{allowSynchronousEvents:v.allowSynchronousEvents,generateMask:v.generateMask,maxPayload:v.maxPayload,skipUTF8Validation:v.skipUTF8Validation})}),v.finishRequest)v.finishRequest(n,A);else n.end()}function m(A,w){A._readyState=q.CLOSING,A._errorEmitted=!0,A.emit("error",w),A.emitClose()}function a(A){return A.path=A.socketPath,X.connect(A)}function V0(A){if(A.path=void 0,!A.servername&&A.servername!=="")A.servername=X.isIP(A.host)?"":A.host;return G.connect(A)}function e(A,w,h){A._readyState=q.CLOSING;let g=Error(h);if(Error.captureStackTrace(g,e),w.setHeader){if(w[k]=!0,w.abort(),w.socket&&!w.socket.destroyed)w.socket.destroy();process.nextTick(m,A,g)}else w.destroy(g),w.once("error",A.emit.bind(A,"error")),w.once("close",A.emitClose.bind(A))}function S4(A,w,h){if(w){let g=D(w)?w.size:S(w).length;if(A._socket)A._sender._bufferedBytes+=g;else A._bufferedAmount+=g}if(h){let g=Error(`WebSocket is not open: readyState ${A.readyState} (${u[A.readyState]})`);process.nextTick(h,g)}}function b$(A,w){let h=this[V];if(h._closeFrameReceived=!0,h._closeMessage=w,h._closeCode=A,h._socket[V]===void 0)return;if(h._socket.removeListener("data",X4),process.nextTick(r8,h._socket),A===1005)h.close();else h.close(A,w)}function h$(){let A=this[V];if(!A.isPaused)A._socket.resume()}function u$(A){let w=this[V];if(w._socket[V]!==void 0)w._socket.removeListener("data",X4),process.nextTick(r8,w._socket),w.close(A[N]);if(!w._errorEmitted)w._errorEmitted=!0,w.emit("error",A)}function a8(){this[V].emitClose()}function g$(A,w){this[V].emit("message",A,w)}function p$(A){let w=this[V];if(w._autoPong)w.pong(A,!this._isServer,F);w.emit("ping",A)}function c$(A){this[V].emit("pong",A)}function r8(A){A.resume()}function m$(A){let w=this[V];if(w.readyState===q.CLOSED)return;if(w.readyState===q.OPEN)w._readyState=q.CLOSING,t8(w);if(this._socket.end(),!w._errorEmitted)w._errorEmitted=!0,w.emit("error",A)}function t8(A){A._closeTimer=setTimeout(A._socket.destroy.bind(A._socket),A._closeTimeout)}function s8(){let A=this[V];if(this.removeListener("close",s8),this.removeListener("data",X4),this.removeListener("end",e8),A._readyState=q.CLOSING,!this._readableState.endEmitted&&!A._closeFrameReceived&&!A._receiver._writableState.errorEmitted&&this._readableState.length!==0){let w=this.read(this._readableState.length);A._receiver.write(w)}if(A._receiver.end(),this[V]=void 0,clearTimeout(A._closeTimer),A._receiver._writableState.finished||A._receiver._writableState.errorEmitted)A.emitClose();else A._receiver.on("error",a8),A._receiver.on("finish",a8)}function X4(A){if(!this[V]._receiver.write(A))this.pause()}function e8(){let A=this[V];A._readyState=q.CLOSING,A._receiver.end(),this.end()}function $9(){let A=this[V];if(this.removeListener("error",$9),this.on("error",F),A)A._readyState=q.CLOSING,this.destroy()}}),_Z=$0(($,Q)=>{var Z=f8(),{Duplex:J}=o("stream");function Y(K){K.emit("close")}function X(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function G(K){if(this.removeListener("error",G),this.destroy(),this.listenerCount("error")===0)this.emit("error",K)}function H(K,W){let z=!0,L=new J({...W,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return K.on("message",function(U,M){let D=!M&&L._readableState.objectMode?U.toString():U;if(!L.push(D))K.pause()}),K.once("error",function(U){if(L.destroyed)return;z=!1,L.destroy(U)}),K.once("close",function(){if(L.destroyed)return;L.push(null)}),L._destroy=function(B,U){if(K.readyState===K.CLOSED){U(B),process.nextTick(Y,L);return}let M=!1;if(K.once("error",function(I){M=!0,U(I)}),K.once("close",function(){if(!M)U(B);process.nextTick(Y,L)}),z)K.terminate()},L._final=function(B){if(K.readyState===K.CONNECTING){K.once("open",function(){L._final(B)});return}if(K._socket===null)return;if(K._socket._writableState.finished){if(B(),L._readableState.endEmitted)L.destroy()}else K._socket.once("finish",function(){B()}),K.close()},L._read=function(){if(K.isPaused)K.resume()},L._write=function(B,U,M){if(K.readyState===K.CONNECTING){K.once("open",function(){L._write(B,U,M)});return}K.send(B,M)},L.on("end",X),L.on("error",G),L}Q.exports=H}),a6=$0(($,Q)=>{var{tokenChars:Z}=e0();function J(Y){let X=new Set,G=-1,H=-1,K=0;for(K;K<Y.length;K++){let z=Y.charCodeAt(K);if(H===-1&&Z[z]===1){if(G===-1)G=K}else if(K!==0&&(z===32||z===9)){if(H===-1&&G!==-1)H=K}else if(z===44){if(G===-1)throw SyntaxError(`Unexpected character at index ${K}`);if(H===-1)H=K;let L=Y.slice(G,H);if(X.has(L))throw SyntaxError(`The "${L}" subprotocol is duplicated`);X.add(L),G=H=-1}else throw SyntaxError(`Unexpected character at index ${K}`)}if(G===-1||H!==-1)throw SyntaxError("Unexpected end of input");let W=Y.slice(G,K);if(X.has(W))throw SyntaxError(`The "${W}" subprotocol is duplicated`);return X.add(W),X}Q.exports={parse:J}}),NZ=$0(($,Q)=>{var Z=o("events"),J=o("http"),{Duplex:Y}=o("stream"),{createHash:X}=o("crypto"),G=k8(),H=s0(),K=a6(),W=f8(),{CLOSE_TIMEOUT:z,GUID:L,kWebSocket:B}=F0(),U=/^[+/0-9A-Za-z]{22}==$/,M=0,D=1,I=2;class E extends Z{constructor(V,F){super();if(V={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:z,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:W,...V},V.port==null&&!V.server&&!V.noServer||V.port!=null&&(V.server||V.noServer)||V.server&&V.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(V.port!=null)this._server=J.createServer((_,C)=>{let T=J.STATUS_CODES[426];C.writeHead(426,{"Content-Length":T.length,"Content-Type":"text/plain"}),C.end(T)}),this._server.listen(V.port,V.host,V.backlog,F);else if(V.server)this._server=V.server;if(this._server){let _=this.emit.bind(this,"connection");this._removeListeners=O(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(C,T,x)=>{this.handleUpgrade(C,T,x,_)}})}if(V.perMessageDeflate===!0)V.perMessageDeflate={};if(V.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=V,this._state=M}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(V){if(this._state===I){if(V)this.once("close",()=>{V(Error("The server is not running"))});process.nextTick(j,this);return}if(V)this.once("close",V);if(this._state===D)return;if(this._state=D,this.options.noServer||this.options.server){if(this._server)this._removeListeners(),this._removeListeners=this._server=null;if(this.clients)if(!this.clients.size)process.nextTick(j,this);else this._shouldEmitClose=!0;else process.nextTick(j,this)}else{let F=this._server;this._removeListeners(),this._removeListeners=this._server=null,F.close(()=>{j(this)})}}shouldHandle(V){if(this.options.path){let F=V.url.indexOf("?");if((F!==-1?V.url.slice(0,F):V.url)!==this.options.path)return!1}return!0}handleUpgrade(V,F,_,C){F.on("error",R);let T=V.headers["sec-websocket-key"],x=V.headers.upgrade,S=+V.headers["sec-websocket-version"];if(V.method!=="GET"){N(this,V,F,405,"Invalid HTTP method");return}if(x===void 0||x.toLowerCase()!=="websocket"){N(this,V,F,400,"Invalid Upgrade header");return}if(T===void 0||!U.test(T)){N(this,V,F,400,"Missing or invalid Sec-WebSocket-Key header");return}if(S!==13&&S!==8){N(this,V,F,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(V)){P(F,400);return}let k=V.headers["sec-websocket-protocol"],y=new Set;if(k!==void 0)try{y=K.parse(k)}catch(q){N(this,V,F,400,"Invalid Sec-WebSocket-Protocol header");return}let u=V.headers["sec-websocket-extensions"],p={};if(this.options.perMessageDeflate&&u!==void 0){let q=new H({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let f=G.parse(u);if(f[H.extensionName])q.accept(f[H.extensionName]),p[H.extensionName]=q}catch(f){N(this,V,F,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let q={origin:V.headers[`${S===8?"sec-websocket-origin":"origin"}`],secure:!!(V.socket.authorized||V.socket.encrypted),req:V};if(this.options.verifyClient.length===2){this.options.verifyClient(q,(f,m,a,V0)=>{if(!f)return P(F,m||401,a,V0);this.completeUpgrade(p,T,y,V,F,_,C)});return}if(!this.options.verifyClient(q))return P(F,401)}this.completeUpgrade(p,T,y,V,F,_,C)}completeUpgrade(V,F,_,C,T,x,S){if(!T.readable||!T.writable)return T.destroy();if(T[B])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>M)return P(T,503);let y=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${X("sha1").update(F+L).digest("base64")}`],u=new this.options.WebSocket(null,void 0,this.options);if(_.size){let p=this.options.handleProtocols?this.options.handleProtocols(_,C):_.values().next().value;if(p)y.push(`Sec-WebSocket-Protocol: ${p}`),u._protocol=p}if(V[H.extensionName]){let p=V[H.extensionName].params,q=G.format({[H.extensionName]:[p]});y.push(`Sec-WebSocket-Extensions: ${q}`),u._extensions=V}if(this.emit("headers",y,C),T.write(y.concat(`\r
|
|
34
|
+
}`,E2=65536,q2,S2,y2,v2=1500;var C$=W5(()=>{LZ=Object.create,BZ=Object.getPrototypeOf,n6=Object.defineProperty,UZ=Object.getOwnPropertyNames,OZ=Object.prototype.hasOwnProperty;o=NZ(import.meta.url),N0=$0(($,Q)=>{var Z=["nodebuffer","arraybuffer","fragments"],J=typeof Blob<"u";if(J)Z.push("blob");Q.exports={BINARY_TYPES:Z,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:J,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),I4=$0(($,Q)=>{var{EMPTY_BUFFER:Z}=N0(),J=Buffer[Symbol.species];function Y(W,z){if(W.length===0)return Z;if(W.length===1)return W[0];let L=Buffer.allocUnsafe(z),B=0;for(let U=0;U<W.length;U++){let M=W[U];L.set(M,B),B+=M.length}if(B<z)return new J(L.buffer,L.byteOffset,B);return L}function X(W,z,L,B,U){for(let M=0;M<U;M++)L[B+M]=W[M]^z[M&3]}function G(W,z){for(let L=0;L<W.length;L++)W[L]^=z[L&3]}function H(W){if(W.length===W.buffer.byteLength)return W.buffer;return W.buffer.slice(W.byteOffset,W.byteOffset+W.length)}function K(W){if(K.readOnly=!0,Buffer.isBuffer(W))return W;let z;if(W instanceof ArrayBuffer)z=new J(W);else if(ArrayBuffer.isView(W))z=new J(W.buffer,W.byteOffset,W.byteLength);else z=Buffer.from(W),K.readOnly=!1;return z}if(Q.exports={concat:Y,mask:X,toArrayBuffer:H,toBuffer:K,unmask:G},!process.env.WS_NO_BUFFER_UTIL)try{let W=(()=>{throw Error("Cannot require module bufferutil")})();Q.exports.mask=function(z,L,B,U,M){if(M<48)X(z,L,B,U,M);else W.mask(z,L,B,U,M)},Q.exports.unmask=function(z,L){if(z.length<32)G(z,L);else W.unmask(z,L)}}catch(W){}}),CZ=$0(($,Q)=>{var Z=Symbol("kDone"),J=Symbol("kRun");class Y{constructor(X){this[Z]=()=>{this.pending--,this[J]()},this.concurrency=X||1/0,this.jobs=[],this.pending=0}add(X){this.jobs.push(X),this[J]()}[J](){if(this.pending===this.concurrency)return;if(this.jobs.length){let X=this.jobs.shift();this.pending++,X(this[Z])}}}Q.exports=Y}),$4=$0(($,Q)=>{var Z=o("zlib"),J=I4(),Y=CZ(),{kStatusCode:X}=N0(),G=Buffer[Symbol.species],H=Buffer.from([0,0,255,255]),K=Symbol("permessage-deflate"),W=Symbol("total-length"),z=Symbol("callback"),L=Symbol("buffers"),B=Symbol("error"),U;class M{constructor(O){if(this._options=O||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!U){let j=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;U=new Y(j)}}static get extensionName(){return"permessage-deflate"}offer(){let O={};if(this._options.serverNoContextTakeover)O.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)O.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)O.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)O.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)O.client_max_window_bits=!0;return O}accept(O){return O=this.normalizeParams(O),this.params=this._isServer?this.acceptAsServer(O):this.acceptAsClient(O),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let O=this._deflate[z];if(this._deflate.close(),this._deflate=null,O)O(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(O){let j=this._options,R=O.find((T)=>{if(j.serverNoContextTakeover===!1&&T.server_no_context_takeover||T.server_max_window_bits&&(j.serverMaxWindowBits===!1||typeof j.serverMaxWindowBits==="number"&&j.serverMaxWindowBits>T.server_max_window_bits)||typeof j.clientMaxWindowBits==="number"&&!T.client_max_window_bits)return!1;return!0});if(!R)throw Error("None of the extension offers can be accepted");if(j.serverNoContextTakeover)R.server_no_context_takeover=!0;if(j.clientNoContextTakeover)R.client_no_context_takeover=!0;if(typeof j.serverMaxWindowBits==="number")R.server_max_window_bits=j.serverMaxWindowBits;if(typeof j.clientMaxWindowBits==="number")R.client_max_window_bits=j.clientMaxWindowBits;else if(R.client_max_window_bits===!0||j.clientMaxWindowBits===!1)delete R.client_max_window_bits;return R}acceptAsClient(O){let j=O[0];if(this._options.clientNoContextTakeover===!1&&j.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!j.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")j.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&j.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return j}normalizeParams(O){return O.forEach((j)=>{Object.keys(j).forEach((R)=>{let T=j[R];if(T.length>1)throw Error(`Parameter "${R}" must have only a single value`);if(T=T[0],R==="client_max_window_bits"){if(T!==!0){let N=+T;if(!Number.isInteger(N)||N<8||N>15)throw TypeError(`Invalid value for parameter "${R}": ${T}`);T=N}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${R}": ${T}`)}else if(R==="server_max_window_bits"){let N=+T;if(!Number.isInteger(N)||N<8||N>15)throw TypeError(`Invalid value for parameter "${R}": ${T}`);T=N}else if(R==="client_no_context_takeover"||R==="server_no_context_takeover"){if(T!==!0)throw TypeError(`Invalid value for parameter "${R}": ${T}`)}else throw Error(`Unknown parameter "${R}"`);j[R]=T})}),O}decompress(O,j,R){U.add((T)=>{this._decompress(O,j,(N,V)=>{T(),R(N,V)})})}compress(O,j,R){U.add((T)=>{this._compress(O,j,(N,V)=>{T(),R(N,V)})})}_decompress(O,j,R){let T=this._isServer?"client":"server";if(!this._inflate){let N=`${T}_max_window_bits`,V=typeof this.params[N]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[N];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:V}),this._inflate[K]=this,this._inflate[W]=0,this._inflate[L]=[],this._inflate.on("error",E),this._inflate.on("data",I)}if(this._inflate[z]=R,this._inflate.write(O),j)this._inflate.write(H);this._inflate.flush(()=>{let N=this._inflate[B];if(N){this._inflate.close(),this._inflate=null,R(N);return}let V=J.concat(this._inflate[L],this._inflate[W]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[W]=0,this._inflate[L]=[],j&&this.params[`${T}_no_context_takeover`])this._inflate.reset();R(null,V)})}_compress(O,j,R){let T=this._isServer?"server":"client";if(!this._deflate){let N=`${T}_max_window_bits`,V=typeof this.params[N]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[N];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:V}),this._deflate[W]=0,this._deflate[L]=[],this._deflate.on("data",D)}this._deflate[z]=R,this._deflate.write(O),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let N=J.concat(this._deflate[L],this._deflate[W]);if(j)N=new G(N.buffer,N.byteOffset,N.length-4);if(this._deflate[z]=null,this._deflate[W]=0,this._deflate[L]=[],j&&this.params[`${T}_no_context_takeover`])this._deflate.reset();R(null,N)})}}Q.exports=M;function D(O){this[L].push(O),this[W]+=O.length}function I(O){if(this[W]+=O.length,this[K]._maxPayload<1||this[W]<=this[K]._maxPayload){this[L].push(O);return}this[B]=RangeError("Max payload size exceeded"),this[B].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[B][X]=1009,this.removeListener("data",I),this.reset()}function E(O){if(this[K]._inflate=null,this[B]){this[z](this[B]);return}O[X]=1007,this[z](O)}}),Q4=$0(($,Q)=>{var{isUtf8:Z}=o("buffer"),{hasBlob:J}=N0(),Y=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function X(K){return K>=1000&&K<=1014&&K!==1004&&K!==1005&&K!==1006||K>=3000&&K<=4999}function G(K){let W=K.length,z=0;while(z<W)if((K[z]&128)===0)z++;else if((K[z]&224)===192){if(z+1===W||(K[z+1]&192)!==128||(K[z]&254)===192)return!1;z+=2}else if((K[z]&240)===224){if(z+2>=W||(K[z+1]&192)!==128||(K[z+2]&192)!==128||K[z]===224&&(K[z+1]&224)===128||K[z]===237&&(K[z+1]&224)===160)return!1;z+=3}else if((K[z]&248)===240){if(z+3>=W||(K[z+1]&192)!==128||(K[z+2]&192)!==128||(K[z+3]&192)!==128||K[z]===240&&(K[z+1]&240)===128||K[z]===244&&K[z+1]>143||K[z]>244)return!1;z+=4}else return!1;return!0}function H(K){return J&&typeof K==="object"&&typeof K.arrayBuffer==="function"&&typeof K.type==="string"&&typeof K.stream==="function"&&(K[Symbol.toStringTag]==="Blob"||K[Symbol.toStringTag]==="File")}if(Q.exports={isBlob:H,isValidStatusCode:X,isValidUTF8:G,tokenChars:Y},Z)Q.exports.isValidUTF8=function(K){return K.length<24?G(K):Z(K)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let K=(()=>{throw Error("Cannot require module utf-8-validate")})();Q.exports.isValidUTF8=function(W){return W.length<32?G(W):K(W)}}catch(K){}}),$$=$0(($,Q)=>{var{Writable:Z}=o("stream"),J=$4(),{BINARY_TYPES:Y,EMPTY_BUFFER:X,kStatusCode:G,kWebSocket:H}=N0(),{concat:K,toArrayBuffer:W,unmask:z}=I4(),{isValidStatusCode:L,isValidUTF8:B}=Q4(),U=Buffer[Symbol.species],M=0,D=1,I=2,E=3,O=4,j=5,R=6;class T extends Z{constructor(N={}){super();this._allowSynchronousEvents=N.allowSynchronousEvents!==void 0?N.allowSynchronousEvents:!0,this._binaryType=N.binaryType||Y[0],this._extensions=N.extensions||{},this._isServer=!!N.isServer,this._maxPayload=N.maxPayload|0,this._skipUTF8Validation=!!N.skipUTF8Validation,this[H]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=M}_write(N,V,F){if(this._opcode===8&&this._state==M)return F();this._bufferedBytes+=N.length,this._buffers.push(N),this.startLoop(F)}consume(N){if(this._bufferedBytes-=N,N===this._buffers[0].length)return this._buffers.shift();if(N<this._buffers[0].length){let F=this._buffers[0];return this._buffers[0]=new U(F.buffer,F.byteOffset+N,F.length-N),new U(F.buffer,F.byteOffset,N)}let V=Buffer.allocUnsafe(N);do{let F=this._buffers[0],_=V.length-N;if(N>=F.length)V.set(this._buffers.shift(),_);else V.set(new Uint8Array(F.buffer,F.byteOffset,N),_),this._buffers[0]=new U(F.buffer,F.byteOffset+N,F.length-N);N-=F.length}while(N>0);return V}startLoop(N){this._loop=!0;do switch(this._state){case M:this.getInfo(N);break;case D:this.getPayloadLength16(N);break;case I:this.getPayloadLength64(N);break;case E:this.getMask();break;case O:this.getData(N);break;case j:case R:this._loop=!1;return}while(this._loop);if(!this._errored)N()}getInfo(N){if(this._bufferedBytes<2){this._loop=!1;return}let V=this.consume(2);if((V[0]&48)!==0){let _=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");N(_);return}let F=(V[0]&64)===64;if(F&&!this._extensions[J.extensionName]){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");N(_);return}if(this._fin=(V[0]&128)===128,this._opcode=V[0]&15,this._payloadLength=V[1]&127,this._opcode===0){if(F){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");N(_);return}if(!this._fragmented){let _=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");N(_);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");N(_);return}this._compressed=F}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let _=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");N(_);return}if(F){let _=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");N(_);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let _=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");N(_);return}}else{let _=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");N(_);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(V[1]&128)===128,this._isServer){if(!this._masked){let _=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");N(_);return}}else if(this._masked){let _=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");N(_);return}if(this._payloadLength===126)this._state=D;else if(this._payloadLength===127)this._state=I;else this.haveLength(N)}getPayloadLength16(N){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(N)}getPayloadLength64(N){if(this._bufferedBytes<8){this._loop=!1;return}let V=this.consume(8),F=V.readUInt32BE(0);if(F>Math.pow(2,21)-1){let _=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");N(_);return}this._payloadLength=F*Math.pow(2,32)+V.readUInt32BE(4),this.haveLength(N)}haveLength(N){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let V=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");N(V);return}}if(this._masked)this._state=E;else this._state=O}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=O}getData(N){let V=X;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(V=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)z(V,this._mask)}if(this._opcode>7){this.controlMessage(V,N);return}if(this._compressed){this._state=j,this.decompress(V,N);return}if(V.length)this._messageLength=this._totalPayloadLength,this._fragments.push(V);this.dataMessage(N)}decompress(N,V){this._extensions[J.extensionName].decompress(N,this._fin,(_,C)=>{if(_)return V(_);if(C.length){if(this._messageLength+=C.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let P=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");V(P);return}this._fragments.push(C)}if(this.dataMessage(V),this._state===M)this.startLoop(V)})}dataMessage(N){if(!this._fin){this._state=M;return}let V=this._messageLength,F=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let _;if(this._binaryType==="nodebuffer")_=K(F,V);else if(this._binaryType==="arraybuffer")_=W(K(F,V));else if(this._binaryType==="blob")_=new Blob(F);else _=F;if(this._allowSynchronousEvents)this.emit("message",_,!0),this._state=M;else this._state=R,setImmediate(()=>{this.emit("message",_,!0),this._state=M,this.startLoop(N)})}else{let _=K(F,V);if(!this._skipUTF8Validation&&!B(_)){let C=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");N(C);return}if(this._state===j||this._allowSynchronousEvents)this.emit("message",_,!1),this._state=M;else this._state=R,setImmediate(()=>{this.emit("message",_,!1),this._state=M,this.startLoop(N)})}}controlMessage(N,V){if(this._opcode===8){if(N.length===0)this._loop=!1,this.emit("conclude",1005,X),this.end();else{let F=N.readUInt16BE(0);if(!L(F)){let C=this.createError(RangeError,`invalid status code ${F}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");V(C);return}let _=new U(N.buffer,N.byteOffset+2,N.length-2);if(!this._skipUTF8Validation&&!B(_)){let C=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");V(C);return}this._loop=!1,this.emit("conclude",F,_),this.end()}this._state=M;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",N),this._state=M;else this._state=R,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",N),this._state=M,this.startLoop(V)})}createError(N,V,F,_,C){this._loop=!1,this._errored=!0;let P=new N(F?`Invalid WebSocket frame: ${V}`:V);return Error.captureStackTrace(P,this.createError),P.code=C,P[G]=_,P}}Q.exports=T}),Q$=$0(($,Q)=>{var{Duplex:Z}=o("stream"),{randomFillSync:J}=o("crypto"),Y=$4(),{EMPTY_BUFFER:X,kWebSocket:G,NOOP:H}=N0(),{isBlob:K,isValidStatusCode:W}=Q4(),{mask:z,toBuffer:L}=I4(),B=Symbol("kByteLength"),U=Buffer.alloc(4),M=8192,D,I=M,E=0,O=1,j=2;class R{constructor(V,F,_){if(this._extensions=F||{},_)this._generateMask=_,this._maskBuffer=Buffer.alloc(4);this._socket=V,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=E,this.onerror=H,this[G]=void 0}static frame(V,F){let _,C=!1,P=2,q=!1;if(F.mask){if(_=F.maskBuffer||U,F.generateMask)F.generateMask(_);else{if(I===M){if(D===void 0)D=Buffer.alloc(M);J(D,0,M),I=0}_[0]=D[I++],_[1]=D[I++],_[2]=D[I++],_[3]=D[I++]}q=(_[0]|_[1]|_[2]|_[3])===0,P=6}let w;if(typeof V==="string")if((!F.mask||q)&&F[B]!==void 0)w=F[B];else V=Buffer.from(V),w=V.length;else w=V.length,C=F.mask&&F.readOnly&&!q;let k=w;if(w>=65536)P+=8,k=127;else if(w>125)P+=2,k=126;let y=Buffer.allocUnsafe(C?w+P:P);if(y[0]=F.fin?F.opcode|128:F.opcode,F.rsv1)y[0]|=64;if(y[1]=k,k===126)y.writeUInt16BE(w,2);else if(k===127)y[2]=y[3]=0,y.writeUIntBE(w,4,6);if(!F.mask)return[y,V];if(y[1]|=128,y[P-4]=_[0],y[P-3]=_[1],y[P-2]=_[2],y[P-1]=_[3],q)return[y,V];if(C)return z(V,_,y,P,w),[y];return z(V,_,V,0,w),[y,V]}close(V,F,_,C){let P;if(V===void 0)P=X;else if(typeof V!=="number"||!W(V))throw TypeError("First argument must be a valid error code number");else if(F===void 0||!F.length)P=Buffer.allocUnsafe(2),P.writeUInt16BE(V,0);else{let w=Buffer.byteLength(F);if(w>123)throw RangeError("The message must not be greater than 123 bytes");if(P=Buffer.allocUnsafe(2+w),P.writeUInt16BE(V,0),typeof F==="string")P.write(F,2);else P.set(F,2)}let q={[B]:P.length,fin:!0,generateMask:this._generateMask,mask:_,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==E)this.enqueue([this.dispatch,P,!1,q,C]);else this.sendFrame(R.frame(P,q),C)}ping(V,F,_){let C,P;if(typeof V==="string")C=Buffer.byteLength(V),P=!1;else if(K(V))C=V.size,P=!1;else V=L(V),C=V.length,P=L.readOnly;if(C>125)throw RangeError("The data size must not be greater than 125 bytes");let q={[B]:C,fin:!0,generateMask:this._generateMask,mask:F,maskBuffer:this._maskBuffer,opcode:9,readOnly:P,rsv1:!1};if(K(V))if(this._state!==E)this.enqueue([this.getBlobData,V,!1,q,_]);else this.getBlobData(V,!1,q,_);else if(this._state!==E)this.enqueue([this.dispatch,V,!1,q,_]);else this.sendFrame(R.frame(V,q),_)}pong(V,F,_){let C,P;if(typeof V==="string")C=Buffer.byteLength(V),P=!1;else if(K(V))C=V.size,P=!1;else V=L(V),C=V.length,P=L.readOnly;if(C>125)throw RangeError("The data size must not be greater than 125 bytes");let q={[B]:C,fin:!0,generateMask:this._generateMask,mask:F,maskBuffer:this._maskBuffer,opcode:10,readOnly:P,rsv1:!1};if(K(V))if(this._state!==E)this.enqueue([this.getBlobData,V,!1,q,_]);else this.getBlobData(V,!1,q,_);else if(this._state!==E)this.enqueue([this.dispatch,V,!1,q,_]);else this.sendFrame(R.frame(V,q),_)}send(V,F,_){let C=this._extensions[Y.extensionName],P=F.binary?2:1,q=F.compress,w,k;if(typeof V==="string")w=Buffer.byteLength(V),k=!1;else if(K(V))w=V.size,k=!1;else V=L(V),w=V.length,k=L.readOnly;if(this._firstFragment){if(this._firstFragment=!1,q&&C&&C.params[C._isServer?"server_no_context_takeover":"client_no_context_takeover"])q=w>=C._threshold;this._compress=q}else q=!1,P=0;if(F.fin)this._firstFragment=!0;let y={[B]:w,fin:F.fin,generateMask:this._generateMask,mask:F.mask,maskBuffer:this._maskBuffer,opcode:P,readOnly:k,rsv1:q};if(K(V))if(this._state!==E)this.enqueue([this.getBlobData,V,this._compress,y,_]);else this.getBlobData(V,this._compress,y,_);else if(this._state!==E)this.enqueue([this.dispatch,V,this._compress,y,_]);else this.dispatch(V,this._compress,y,_)}getBlobData(V,F,_,C){this._bufferedBytes+=_[B],this._state=j,V.arrayBuffer().then((P)=>{if(this._socket.destroyed){let w=Error("The socket was closed while the blob was being read");process.nextTick(T,this,w,C);return}this._bufferedBytes-=_[B];let q=L(P);if(!F)this._state=E,this.sendFrame(R.frame(q,_),C),this.dequeue();else this.dispatch(q,F,_,C)}).catch((P)=>{process.nextTick(N,this,P,C)})}dispatch(V,F,_,C){if(!F){this.sendFrame(R.frame(V,_),C);return}let P=this._extensions[Y.extensionName];this._bufferedBytes+=_[B],this._state=O,P.compress(V,_.fin,(q,w)=>{if(this._socket.destroyed){let k=Error("The socket was closed while data was being compressed");T(this,k,C);return}this._bufferedBytes-=_[B],this._state=E,_.readOnly=!1,this.sendFrame(R.frame(w,_),C),this.dequeue()})}dequeue(){while(this._state===E&&this._queue.length){let V=this._queue.shift();this._bufferedBytes-=V[3][B],Reflect.apply(V[0],this,V.slice(1))}}enqueue(V){this._bufferedBytes+=V[3][B],this._queue.push(V)}sendFrame(V,F){if(V.length===2)this._socket.cork(),this._socket.write(V[0]),this._socket.write(V[1],F),this._socket.uncork();else this._socket.write(V[0],F)}}Q.exports=R;function T(V,F,_){if(typeof _==="function")_(F);for(let C=0;C<V._queue.length;C++){let P=V._queue[C],q=P[P.length-1];if(typeof q==="function")q(F)}}function N(V,F,_){T(V,F,_),V.onerror(F)}}),DZ=$0(($,Q)=>{var{kForOnEventAttribute:Z,kListener:J}=N0(),Y=Symbol("kCode"),X=Symbol("kData"),G=Symbol("kError"),H=Symbol("kMessage"),K=Symbol("kReason"),W=Symbol("kTarget"),z=Symbol("kType"),L=Symbol("kWasClean");class B{constructor(O){this[W]=null,this[z]=O}get target(){return this[W]}get type(){return this[z]}}Object.defineProperty(B.prototype,"target",{enumerable:!0}),Object.defineProperty(B.prototype,"type",{enumerable:!0});class U extends B{constructor(O,j={}){super(O);this[Y]=j.code===void 0?0:j.code,this[K]=j.reason===void 0?"":j.reason,this[L]=j.wasClean===void 0?!1:j.wasClean}get code(){return this[Y]}get reason(){return this[K]}get wasClean(){return this[L]}}Object.defineProperty(U.prototype,"code",{enumerable:!0}),Object.defineProperty(U.prototype,"reason",{enumerable:!0}),Object.defineProperty(U.prototype,"wasClean",{enumerable:!0});class M extends B{constructor(O,j={}){super(O);this[G]=j.error===void 0?null:j.error,this[H]=j.message===void 0?"":j.message}get error(){return this[G]}get message(){return this[H]}}Object.defineProperty(M.prototype,"error",{enumerable:!0}),Object.defineProperty(M.prototype,"message",{enumerable:!0});class D extends B{constructor(O,j={}){super(O);this[X]=j.data===void 0?null:j.data}get data(){return this[X]}}Object.defineProperty(D.prototype,"data",{enumerable:!0});var I={addEventListener(O,j,R={}){for(let N of this.listeners(O))if(!R[Z]&&N[J]===j&&!N[Z])return;let T;if(O==="message")T=function(V,F){let _=new D("message",{data:F?V:V.toString()});_[W]=this,E(j,this,_)};else if(O==="close")T=function(V,F){let _=new U("close",{code:V,reason:F.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});_[W]=this,E(j,this,_)};else if(O==="error")T=function(V){let F=new M("error",{error:V,message:V.message});F[W]=this,E(j,this,F)};else if(O==="open")T=function(){let V=new B("open");V[W]=this,E(j,this,V)};else return;if(T[Z]=!!R[Z],T[J]=j,R.once)this.once(O,T);else this.on(O,T)},removeEventListener(O,j){for(let R of this.listeners(O))if(R[J]===j&&!R[Z]){this.removeListener(O,R);break}}};Q.exports={CloseEvent:U,ErrorEvent:M,Event:B,EventTarget:I,MessageEvent:D};function E(O,j,R){if(typeof O==="object"&&O.handleEvent)O.handleEvent.call(O,R);else O.call(j,R)}}),g8=$0(($,Q)=>{var{tokenChars:Z}=Q4();function J(G,H,K){if(G[H]===void 0)G[H]=[K];else G[H].push(K)}function Y(G){let H=Object.create(null),K=Object.create(null),W=!1,z=!1,L=!1,B,U,M=-1,D=-1,I=-1,E=0;for(;E<G.length;E++)if(D=G.charCodeAt(E),B===void 0)if(I===-1&&Z[D]===1){if(M===-1)M=E}else if(E!==0&&(D===32||D===9)){if(I===-1&&M!==-1)I=E}else if(D===59||D===44){if(M===-1)throw SyntaxError(`Unexpected character at index ${E}`);if(I===-1)I=E;let j=G.slice(M,I);if(D===44)J(H,j,K),K=Object.create(null);else B=j;M=I=-1}else throw SyntaxError(`Unexpected character at index ${E}`);else if(U===void 0)if(I===-1&&Z[D]===1){if(M===-1)M=E}else if(D===32||D===9){if(I===-1&&M!==-1)I=E}else if(D===59||D===44){if(M===-1)throw SyntaxError(`Unexpected character at index ${E}`);if(I===-1)I=E;if(J(K,G.slice(M,I),!0),D===44)J(H,B,K),K=Object.create(null),B=void 0;M=I=-1}else if(D===61&&M!==-1&&I===-1)U=G.slice(M,E),M=I=-1;else throw SyntaxError(`Unexpected character at index ${E}`);else if(z){if(Z[D]!==1)throw SyntaxError(`Unexpected character at index ${E}`);if(M===-1)M=E;else if(!W)W=!0;z=!1}else if(L)if(Z[D]===1){if(M===-1)M=E}else if(D===34&&M!==-1)L=!1,I=E;else if(D===92)z=!0;else throw SyntaxError(`Unexpected character at index ${E}`);else if(D===34&&G.charCodeAt(E-1)===61)L=!0;else if(I===-1&&Z[D]===1){if(M===-1)M=E}else if(M!==-1&&(D===32||D===9)){if(I===-1)I=E}else if(D===59||D===44){if(M===-1)throw SyntaxError(`Unexpected character at index ${E}`);if(I===-1)I=E;let j=G.slice(M,I);if(W)j=j.replace(/\\/g,""),W=!1;if(J(K,U,j),D===44)J(H,B,K),K=Object.create(null),B=void 0;U=void 0,M=I=-1}else throw SyntaxError(`Unexpected character at index ${E}`);if(M===-1||L||D===32||D===9)throw SyntaxError("Unexpected end of input");if(I===-1)I=E;let O=G.slice(M,I);if(B===void 0)J(H,O,K);else{if(U===void 0)J(K,O,!0);else if(W)J(K,U,O.replace(/\\/g,""));else J(K,U,O);J(H,B,K)}return H}function X(G){return Object.keys(G).map((H)=>{let K=G[H];if(!Array.isArray(K))K=[K];return K.map((W)=>{return[H].concat(Object.keys(W).map((z)=>{let L=W[z];if(!Array.isArray(L))L=[L];return L.map((B)=>B===!0?z:`${z}=${B}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}Q.exports={format:X,parse:Y}}),u8=$0(($,Q)=>{var Z=o("events"),J=o("https"),Y=o("http"),X=o("net"),G=o("tls"),{randomBytes:H,createHash:K}=o("crypto"),{Duplex:W,Readable:z}=o("stream"),{URL:L}=o("url"),B=$4(),U=$$(),M=Q$(),{isBlob:D}=Q4(),{BINARY_TYPES:I,CLOSE_TIMEOUT:E,EMPTY_BUFFER:O,GUID:j,kForOnEventAttribute:R,kListener:T,kStatusCode:N,kWebSocket:V,NOOP:F}=N0(),{EventTarget:{addEventListener:_,removeEventListener:C}}=DZ(),{format:P,parse:q}=g8(),{toBuffer:w}=I4(),k=Symbol("kAborted"),y=[8,13],g=["CONNECTING","OPEN","CLOSING","CLOSED"],p=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class x extends Z{constructor(A,S,h){super();if(this._binaryType=I[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=O,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=x.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,A!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,S===void 0)S=[];else if(!Array.isArray(S))if(typeof S==="object"&&S!==null)h=S,S=[];else S=[S];f(this,A,S,h)}else this._autoPong=h.autoPong,this._closeTimeout=h.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(A){if(!I.includes(A))return;if(this._binaryType=A,this._receiver)this._receiver._binaryType=A}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(A,S,h){let u=new U({allowSynchronousEvents:h.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation}),v=new M(A,this._extensions,h.generateMask);if(this._receiver=u,this._sender=v,this._socket=A,u[V]=this,v[V]=this,A[V]=this,u.on("conclude",l$),u.on("drain",d$),u.on("error",i$),u.on("message",n$),u.on("ping",o$),u.on("pong",a$),v.onerror=r$,A.setTimeout)A.setTimeout(0);if(A.setNoDelay)A.setNoDelay();if(S.length>0)A.unshift(S);A.on("close",J9),A.on("data",K4),A.on("end",Y9),A.on("error",X9),this._readyState=x.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=x.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[B.extensionName])this._extensions[B.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=x.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(A,S){if(this.readyState===x.CLOSED)return;if(this.readyState===x.CONNECTING){e(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===x.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=x.CLOSING,this._sender.close(A,S,!this._isServer,(h)=>{if(h)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),Z9(this)}pause(){if(this.readyState===x.CONNECTING||this.readyState===x.CLOSED)return;this._paused=!0,this._socket.pause()}ping(A,S,h){if(this.readyState===x.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof A==="function")h=A,A=S=void 0;else if(typeof S==="function")h=S,S=void 0;if(typeof A==="number")A=A.toString();if(this.readyState!==x.OPEN){v4(this,A,h);return}if(S===void 0)S=!this._isServer;this._sender.ping(A||O,S,h)}pong(A,S,h){if(this.readyState===x.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof A==="function")h=A,A=S=void 0;else if(typeof S==="function")h=S,S=void 0;if(typeof A==="number")A=A.toString();if(this.readyState!==x.OPEN){v4(this,A,h);return}if(S===void 0)S=!this._isServer;this._sender.pong(A||O,S,h)}resume(){if(this.readyState===x.CONNECTING||this.readyState===x.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(A,S,h){if(this.readyState===x.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof S==="function")h=S,S={};if(typeof A==="number")A=A.toString();if(this.readyState!==x.OPEN){v4(this,A,h);return}let u={binary:typeof A!=="string",mask:!this._isServer,compress:!0,fin:!0,...S};if(!this._extensions[B.extensionName])u.compress=!1;this._sender.send(A||O,u,h)}terminate(){if(this.readyState===x.CLOSED)return;if(this.readyState===x.CONNECTING){e(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=x.CLOSING,this._socket.destroy()}}Object.defineProperty(x,"CONNECTING",{enumerable:!0,value:g.indexOf("CONNECTING")}),Object.defineProperty(x.prototype,"CONNECTING",{enumerable:!0,value:g.indexOf("CONNECTING")}),Object.defineProperty(x,"OPEN",{enumerable:!0,value:g.indexOf("OPEN")}),Object.defineProperty(x.prototype,"OPEN",{enumerable:!0,value:g.indexOf("OPEN")}),Object.defineProperty(x,"CLOSING",{enumerable:!0,value:g.indexOf("CLOSING")}),Object.defineProperty(x.prototype,"CLOSING",{enumerable:!0,value:g.indexOf("CLOSING")}),Object.defineProperty(x,"CLOSED",{enumerable:!0,value:g.indexOf("CLOSED")}),Object.defineProperty(x.prototype,"CLOSED",{enumerable:!0,value:g.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((A)=>{Object.defineProperty(x.prototype,A,{enumerable:!0})}),["open","error","close","message"].forEach((A)=>{Object.defineProperty(x.prototype,`on${A}`,{enumerable:!0,get(){for(let S of this.listeners(A))if(S[R])return S[T];return null},set(S){for(let h of this.listeners(A))if(h[R]){this.removeListener(A,h);break}if(typeof S!=="function")return;this.addEventListener(A,S,{[R]:!0})}})}),x.prototype.addEventListener=_,x.prototype.removeEventListener=C,Q.exports=x;function f(A,S,h,u){let v={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:E,protocolVersion:y[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...u,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(A._autoPong=v.autoPong,A._closeTimeout=v.closeTimeout,!y.includes(v.protocolVersion))throw RangeError(`Unsupported protocol version: ${v.protocolVersion} (supported versions: ${y.join(", ")})`);let d;if(S instanceof L)d=S;else try{d=new L(S)}catch{throw SyntaxError(`Invalid URL: ${S}`)}if(d.protocol==="http:")d.protocol="ws:";else if(d.protocol==="https:")d.protocol="wss:";A._url=d.href;let P0=d.protocol==="wss:",T0=d.protocol==="ws+unix:",h0;if(d.protocol!=="ws:"&&!P0&&!T0)h0=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(T0&&!d.pathname)h0="The URL's pathname is empty";else if(d.hash)h0="The URL contains a fragment identifier";if(h0){let c=SyntaxError(h0);if(A._redirects===0)throw c;else{m(A,c);return}}let G9=P0?443:80,K9=H(16).toString("base64"),V9=P0?J.request:Y.request,g0=new Set,u0;if(v.createConnection=v.createConnection||(P0?W0:a),v.defaultPort=v.defaultPort||G9,v.port=d.port||G9,v.host=d.hostname.startsWith("[")?d.hostname.slice(1,-1):d.hostname,v.headers={...v.headers,"Sec-WebSocket-Version":v.protocolVersion,"Sec-WebSocket-Key":K9,Connection:"Upgrade",Upgrade:"websocket"},v.path=d.pathname+d.search,v.timeout=v.handshakeTimeout,v.perMessageDeflate)u0=new B({...v.perMessageDeflate,isServer:!1,maxPayload:v.maxPayload}),v.headers["Sec-WebSocket-Extensions"]=P({[B.extensionName]:u0.offer()});if(h.length){for(let c of h){if(typeof c!=="string"||!p.test(c)||g0.has(c))throw SyntaxError("An invalid or duplicated subprotocol was specified");g0.add(c)}v.headers["Sec-WebSocket-Protocol"]=h.join(",")}if(v.origin)if(v.protocolVersion<13)v.headers["Sec-WebSocket-Origin"]=v.origin;else v.headers.Origin=v.origin;if(d.username||d.password)v.auth=`${d.username}:${d.password}`;if(T0){let c=v.path.split(":");v.socketPath=c[0],v.path=c[1]}let n;if(v.followRedirects){if(A._redirects===0){A._originalIpc=T0,A._originalSecure=P0,A._originalHostOrSocketPath=T0?v.socketPath:d.host;let c=u&&u.headers;if(u={...u,headers:{}},c)for(let[t,E0]of Object.entries(c))u.headers[t.toLowerCase()]=E0}else if(A.listenerCount("redirect")===0){let c=T0?A._originalIpc?v.socketPath===A._originalHostOrSocketPath:!1:A._originalIpc?!1:d.host===A._originalHostOrSocketPath;if(!c||A._originalSecure&&!P0){if(delete v.headers.authorization,delete v.headers.cookie,!c)delete v.headers.host;v.auth=void 0}}if(v.auth&&!u.headers.authorization)u.headers.authorization="Basic "+Buffer.from(v.auth).toString("base64");if(n=A._req=V9(v),A._redirects)A.emit("redirect",A.url,n)}else n=A._req=V9(v);if(v.timeout)n.on("timeout",()=>{e(A,n,"Opening handshake has timed out")});if(n.on("error",(c)=>{if(n===null||n[k])return;n=A._req=null,m(A,c)}),n.on("response",(c)=>{let t=c.headers.location,E0=c.statusCode;if(t&&v.followRedirects&&E0>=300&&E0<400){if(++A._redirects>v.maxRedirects){e(A,n,"Maximum redirects exceeded");return}n.abort();let p0;try{p0=new L(t,S)}catch(W9){let I0=SyntaxError(`Invalid URL: ${t}`);m(A,I0);return}f(A,p0,h,u)}else if(!A.emit("unexpected-response",n,c))e(A,n,`Unexpected server response: ${c.statusCode}`)}),n.on("upgrade",(c,t,E0)=>{if(A.emit("upgrade",c),A.readyState!==x.CONNECTING)return;n=A._req=null;let p0=c.headers.upgrade;if(p0===void 0||p0.toLowerCase()!=="websocket"){e(A,t,"Invalid Upgrade header");return}let W9=K("sha1").update(K9+j).digest("base64");if(c.headers["sec-websocket-accept"]!==W9){e(A,t,"Invalid Sec-WebSocket-Accept header");return}let I0=c.headers["sec-websocket-protocol"],c0;if(I0!==void 0){if(!g0.size)c0="Server sent a subprotocol but none was requested";else if(!g0.has(I0))c0="Server sent an invalid subprotocol"}else if(g0.size)c0="Server sent no subprotocol";if(c0){e(A,t,c0);return}if(I0)A._protocol=I0;let z9=c.headers["sec-websocket-extensions"];if(z9!==void 0){if(!u0){e(A,t,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let b4;try{b4=q(z9)}catch(h4){e(A,t,"Invalid Sec-WebSocket-Extensions header");return}let H9=Object.keys(b4);if(H9.length!==1||H9[0]!==B.extensionName){e(A,t,"Server indicated an extension that was not requested");return}try{u0.accept(b4[B.extensionName])}catch(h4){e(A,t,"Invalid Sec-WebSocket-Extensions header");return}A._extensions[B.extensionName]=u0}A.setSocket(t,E0,{allowSynchronousEvents:v.allowSynchronousEvents,generateMask:v.generateMask,maxPayload:v.maxPayload,skipUTF8Validation:v.skipUTF8Validation})}),v.finishRequest)v.finishRequest(n,A);else n.end()}function m(A,S){A._readyState=x.CLOSING,A._errorEmitted=!0,A.emit("error",S),A.emitClose()}function a(A){return A.path=A.socketPath,X.connect(A)}function W0(A){if(A.path=void 0,!A.servername&&A.servername!=="")A.servername=X.isIP(A.host)?"":A.host;return G.connect(A)}function e(A,S,h){A._readyState=x.CLOSING;let u=Error(h);if(Error.captureStackTrace(u,e),S.setHeader){if(S[k]=!0,S.abort(),S.socket&&!S.socket.destroyed)S.socket.destroy();process.nextTick(m,A,u)}else S.destroy(u),S.once("error",A.emit.bind(A,"error")),S.once("close",A.emitClose.bind(A))}function v4(A,S,h){if(S){let u=D(S)?S.size:w(S).length;if(A._socket)A._sender._bufferedBytes+=u;else A._bufferedAmount+=u}if(h){let u=Error(`WebSocket is not open: readyState ${A.readyState} (${g[A.readyState]})`);process.nextTick(h,u)}}function l$(A,S){let h=this[V];if(h._closeFrameReceived=!0,h._closeMessage=S,h._closeCode=A,h._socket[V]===void 0)return;if(h._socket.removeListener("data",K4),process.nextTick(Q9,h._socket),A===1005)h.close();else h.close(A,S)}function d$(){let A=this[V];if(!A.isPaused)A._socket.resume()}function i$(A){let S=this[V];if(S._socket[V]!==void 0)S._socket.removeListener("data",K4),process.nextTick(Q9,S._socket),S.close(A[N]);if(!S._errorEmitted)S._errorEmitted=!0,S.emit("error",A)}function $9(){this[V].emitClose()}function n$(A,S){this[V].emit("message",A,S)}function o$(A){let S=this[V];if(S._autoPong)S.pong(A,!this._isServer,F);S.emit("ping",A)}function a$(A){this[V].emit("pong",A)}function Q9(A){A.resume()}function r$(A){let S=this[V];if(S.readyState===x.CLOSED)return;if(S.readyState===x.OPEN)S._readyState=x.CLOSING,Z9(S);if(this._socket.end(),!S._errorEmitted)S._errorEmitted=!0,S.emit("error",A)}function Z9(A){A._closeTimer=setTimeout(A._socket.destroy.bind(A._socket),A._closeTimeout)}function J9(){let A=this[V];if(this.removeListener("close",J9),this.removeListener("data",K4),this.removeListener("end",Y9),A._readyState=x.CLOSING,!this._readableState.endEmitted&&!A._closeFrameReceived&&!A._receiver._writableState.errorEmitted&&this._readableState.length!==0){let S=this.read(this._readableState.length);A._receiver.write(S)}if(A._receiver.end(),this[V]=void 0,clearTimeout(A._closeTimer),A._receiver._writableState.finished||A._receiver._writableState.errorEmitted)A.emitClose();else A._receiver.on("error",$9),A._receiver.on("finish",$9)}function K4(A){if(!this[V]._receiver.write(A))this.pause()}function Y9(){let A=this[V];A._readyState=x.CLOSING,A._receiver.end(),this.end()}function X9(){let A=this[V];if(this.removeListener("error",X9),this.on("error",F),A)A._readyState=x.CLOSING,this.destroy()}}),PZ=$0(($,Q)=>{var Z=u8(),{Duplex:J}=o("stream");function Y(K){K.emit("close")}function X(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function G(K){if(this.removeListener("error",G),this.destroy(),this.listenerCount("error")===0)this.emit("error",K)}function H(K,W){let z=!0,L=new J({...W,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return K.on("message",function(U,M){let D=!M&&L._readableState.objectMode?U.toString():U;if(!L.push(D))K.pause()}),K.once("error",function(U){if(L.destroyed)return;z=!1,L.destroy(U)}),K.once("close",function(){if(L.destroyed)return;L.push(null)}),L._destroy=function(B,U){if(K.readyState===K.CLOSED){U(B),process.nextTick(Y,L);return}let M=!1;if(K.once("error",function(I){M=!0,U(I)}),K.once("close",function(){if(!M)U(B);process.nextTick(Y,L)}),z)K.terminate()},L._final=function(B){if(K.readyState===K.CONNECTING){K.once("open",function(){L._final(B)});return}if(K._socket===null)return;if(K._socket._writableState.finished){if(B(),L._readableState.endEmitted)L.destroy()}else K._socket.once("finish",function(){B()}),K.close()},L._read=function(){if(K.isPaused)K.resume()},L._write=function(B,U,M){if(K.readyState===K.CONNECTING){K.once("open",function(){L._write(B,U,M)});return}K.send(B,M)},L.on("end",X),L.on("error",G),L}Q.exports=H}),Z$=$0(($,Q)=>{var{tokenChars:Z}=Q4();function J(Y){let X=new Set,G=-1,H=-1,K=0;for(K;K<Y.length;K++){let z=Y.charCodeAt(K);if(H===-1&&Z[z]===1){if(G===-1)G=K}else if(K!==0&&(z===32||z===9)){if(H===-1&&G!==-1)H=K}else if(z===44){if(G===-1)throw SyntaxError(`Unexpected character at index ${K}`);if(H===-1)H=K;let L=Y.slice(G,H);if(X.has(L))throw SyntaxError(`The "${L}" subprotocol is duplicated`);X.add(L),G=H=-1}else throw SyntaxError(`Unexpected character at index ${K}`)}if(G===-1||H!==-1)throw SyntaxError("Unexpected end of input");let W=Y.slice(G,K);if(X.has(W))throw SyntaxError(`The "${W}" subprotocol is duplicated`);return X.add(W),X}Q.exports={parse:J}}),TZ=$0(($,Q)=>{var Z=o("events"),J=o("http"),{Duplex:Y}=o("stream"),{createHash:X}=o("crypto"),G=g8(),H=$4(),K=Z$(),W=u8(),{CLOSE_TIMEOUT:z,GUID:L,kWebSocket:B}=N0(),U=/^[+/0-9A-Za-z]{22}==$/,M=0,D=1,I=2;class E extends Z{constructor(V,F){super();if(V={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:z,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:W,...V},V.port==null&&!V.server&&!V.noServer||V.port!=null&&(V.server||V.noServer)||V.server&&V.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(V.port!=null)this._server=J.createServer((_,C)=>{let P=J.STATUS_CODES[426];C.writeHead(426,{"Content-Length":P.length,"Content-Type":"text/plain"}),C.end(P)}),this._server.listen(V.port,V.host,V.backlog,F);else if(V.server)this._server=V.server;if(this._server){let _=this.emit.bind(this,"connection");this._removeListeners=O(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(C,P,q)=>{this.handleUpgrade(C,P,q,_)}})}if(V.perMessageDeflate===!0)V.perMessageDeflate={};if(V.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=V,this._state=M}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(V){if(this._state===I){if(V)this.once("close",()=>{V(Error("The server is not running"))});process.nextTick(j,this);return}if(V)this.once("close",V);if(this._state===D)return;if(this._state=D,this.options.noServer||this.options.server){if(this._server)this._removeListeners(),this._removeListeners=this._server=null;if(this.clients)if(!this.clients.size)process.nextTick(j,this);else this._shouldEmitClose=!0;else process.nextTick(j,this)}else{let F=this._server;this._removeListeners(),this._removeListeners=this._server=null,F.close(()=>{j(this)})}}shouldHandle(V){if(this.options.path){let F=V.url.indexOf("?");if((F!==-1?V.url.slice(0,F):V.url)!==this.options.path)return!1}return!0}handleUpgrade(V,F,_,C){F.on("error",R);let P=V.headers["sec-websocket-key"],q=V.headers.upgrade,w=+V.headers["sec-websocket-version"];if(V.method!=="GET"){N(this,V,F,405,"Invalid HTTP method");return}if(q===void 0||q.toLowerCase()!=="websocket"){N(this,V,F,400,"Invalid Upgrade header");return}if(P===void 0||!U.test(P)){N(this,V,F,400,"Missing or invalid Sec-WebSocket-Key header");return}if(w!==13&&w!==8){N(this,V,F,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(V)){T(F,400);return}let k=V.headers["sec-websocket-protocol"],y=new Set;if(k!==void 0)try{y=K.parse(k)}catch(x){N(this,V,F,400,"Invalid Sec-WebSocket-Protocol header");return}let g=V.headers["sec-websocket-extensions"],p={};if(this.options.perMessageDeflate&&g!==void 0){let x=new H({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let f=G.parse(g);if(f[H.extensionName])x.accept(f[H.extensionName]),p[H.extensionName]=x}catch(f){N(this,V,F,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let x={origin:V.headers[`${w===8?"sec-websocket-origin":"origin"}`],secure:!!(V.socket.authorized||V.socket.encrypted),req:V};if(this.options.verifyClient.length===2){this.options.verifyClient(x,(f,m,a,W0)=>{if(!f)return T(F,m||401,a,W0);this.completeUpgrade(p,P,y,V,F,_,C)});return}if(!this.options.verifyClient(x))return T(F,401)}this.completeUpgrade(p,P,y,V,F,_,C)}completeUpgrade(V,F,_,C,P,q,w){if(!P.readable||!P.writable)return P.destroy();if(P[B])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>M)return T(P,503);let y=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${X("sha1").update(F+L).digest("base64")}`],g=new this.options.WebSocket(null,void 0,this.options);if(_.size){let p=this.options.handleProtocols?this.options.handleProtocols(_,C):_.values().next().value;if(p)y.push(`Sec-WebSocket-Protocol: ${p}`),g._protocol=p}if(V[H.extensionName]){let p=V[H.extensionName].params,x=G.format({[H.extensionName]:[p]});y.push(`Sec-WebSocket-Extensions: ${x}`),g._extensions=V}if(this.emit("headers",y,C),P.write(y.concat(`\r
|
|
35
35
|
`).join(`\r
|
|
36
|
-
`)),
|
|
37
|
-
`+Object.keys(C).map((
|
|
36
|
+
`)),P.removeListener("error",R),g.setSocket(P,q,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(g),g.on("close",()=>{if(this.clients.delete(g),this._shouldEmitClose&&!this.clients.size)process.nextTick(j,this)});w(g,C)}}Q.exports=E;function O(V,F){for(let _ of Object.keys(F))V.on(_,F[_]);return function(){for(let C of Object.keys(F))V.removeListener(C,F[C])}}function j(V){V._state=I,V.emit("close")}function R(){this.destroy()}function T(V,F,_,C){_=_||J.STATUS_CODES[F],C={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(_),...C},V.once("finish",V.destroy),V.end(`HTTP/1.1 ${F} ${J.STATUS_CODES[F]}\r
|
|
37
|
+
`+Object.keys(C).map((P)=>`${P}: ${C[P]}`).join(`\r
|
|
38
38
|
`)+`\r
|
|
39
39
|
\r
|
|
40
|
-
`+_)}function N(V,F,_,C,
|
|
40
|
+
`+_)}function N(V,F,_,C,P,q){if(V.listenerCount("wsClientError")){let w=Error(P);Error.captureStackTrace(w,N),V.emit("wsClientError",w,_,F)}else T(_,C,P,q)}});j3=_0(PZ(),1),R3=_0(g8(),1),C3=_0($4(),1),D3=_0($$(),1),P3=_0(Q$(),1),T3=_0(Z$(),1),cZ=_0(u8(),1),H$=_0(TZ(),1),s6=cZ.default;$2={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},Q2={"Network.requestWillBeSent":{walltime:"wallTime"}},Z2={hasUserGesture:!1,redirectHasExtraInfo:!1},J2={hasExtraInfo:!1},Y2={encodedDataLength:0,shouldReportCorbBlocking:!1},X2={initialPriority:"Medium",referrerPolicy:"origin"},G2={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};B2={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};R2={protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"605.1.15",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""};q2=["Animation","Autofill","Audits","ServiceWorker","Profiler","HeapProfiler","Storage","Tethering","Tracing","BackgroundService","FedCm","DeviceAccess","WebAuthn","Cast","Database","ApplicationCache","BackgroundFetch","DeviceOrientation","EventBreakpoints","FileSystem","HeadlessExperimental","IndexedDB","Memory","PerformanceTimeline","Performance","Preload","Schema","Security","SystemInfo","WebAudio"],S2={"Network.setAttachDebugStack":{},"Network.emulateNetworkConditionsByRule":{ruleIds:[]},"Network.overrideNetworkState":{},"Network.clearAcceptedEncodingsOverride":{},"Network.setAcceptedEncodings":{},"Network.enableReportingApi":{},"Overlay.setShowHinge":{},"Overlay.setShowViewportSizeOnResize":{},"Overlay.setShowGridOverlays":{},"Overlay.setShowFlexOverlays":{},"Overlay.setShowScrollSnapOverlays":{},"Overlay.setShowContainerQueryOverlays":{},"Overlay.setShowIsolatedElements":{},"Overlay.setPausedInDebuggerMessage":{},"Overlay.setShowAdHighlights":{},"Overlay.setShowDebugBorders":{},"Overlay.setShowFPSCounter":{},"Overlay.setShowLayoutShiftRegions":{},"Overlay.setShowScrollBottleneckRects":{},"Overlay.setShowHitTestBorders":{},"Overlay.setShowWebVitals":{},"CSS.trackComputedStyleUpdates":{},"CSS.takeComputedStyleUpdates":{nodeIds:[]},"CSS.startRuleUsageTracking":{},"CSS.stopRuleUsageTracking":{ruleUsage:[]},"CSS.takeCoverageDelta":{coverage:[],timestamp:0},"Page.setAdBlockingEnabled":{},"Page.removeScriptToEvaluateOnNewDocument":{},"Page.setBypassCSP":{},"Page.setInterceptFileChooserDialog":{},"Page.setPrerenderingAllowed":{},"Page.setRPHRegistrationMode":{},"Page.setSPCTransactionMode":{},"Emulation.setEmulatedVisionDeficiency":{},"Emulation.setFocusEmulationEnabled":{},"Emulation.setAutoDarkModeOverride":{},"Emulation.setAutomationOverride":{},"Emulation.setLocaleOverride":{},"Emulation.setTimezoneOverride":{},"Emulation.setVisibleSize":{},"Emulation.setIdleOverride":{},"Emulation.clearIdleOverride":{},"Emulation.setGeolocationOverride":{},"Emulation.clearGeolocationOverride":{},"Emulation.setSensorOverrideEnabled":{},"Emulation.setSensorOverrideReadings":{},"Emulation.setHardwareConcurrencyOverride":{},"Emulation.setNavigatorOverrides":{},"Emulation.setPageScaleFactor":{},"Emulation.setScrollbarsHidden":{},"Emulation.setDocumentCookieDisabled":{},"DOMDebugger.setBreakOnCSPViolation":{},"Runtime.addBinding":{},"Runtime.removeBinding":{},"Debugger.setReturnValue":{},"Debugger.setBlackboxExecutionContexts":{},"Debugger.setInstrumentationBreakpoint":{},"DOM.markUndoableState":{},"DOM.undo":{},"DOM.redo":{},"DOM.copyTo":{nodeId:0},"DOM.collectClassNamesFromSubtree":{classNames:[]},"Accessibility.enable":{},"Accessibility.disable":{},"Accessibility.getFullAXTree":{nodes:[]},"Accessibility.getRootAXNode":{node:null},"Accessibility.getPartialAXTree":{nodes:[]},"Accessibility.queryAXTree":{nodes:[]},"Accessibility.getAXNodeAndAncestors":{nodes:[]},"Accessibility.getChildAXNodes":{nodes:[]}};y2={"&":"&","<":"<",">":">",'"':""","'":"'"}});import{readdirSync as r2,readFileSync as t2,existsSync as v$,unlinkSync as D$,watch as s2}from"fs";import{readFile as e2,unlink as $1}from"fs/promises";import{execSync as X4,spawn as Q1,exec as Z1,execFile as L0}from"child_process";import{tmpdir as b$}from"os";import{join as f4}from"path";import{createServer as J1}from"net";import{createHash as Y1,randomBytes as P$,timingSafeEqual as X1}from"crypto";import{WebSocket as T$}from"ws";var u4="Accessibility unavailable on this simulator.";import{createRequire as U5}from"module";import{dirname as c4,join as m4}from"path";import{existsSync as O5}from"fs";import{fileURLToPath as O9}from"url";var z4={mjpegFps:60,mjpegQuality:0.7,maxDimension:0,h264Bitrate:6000000,h264Fps:60},H5={transport:"http",httpCodec:"auto",webRtcCodec:"h264",...z4};function F9($){return typeof $==="number"&&Number.isFinite($)?$:null}function _9($,Q,Z,J){let Y=F9($);return Y==null?Q:Math.min(J,Math.max(Z,Y))}function W4($,Q,Z,J){return Math.round(_9($,Q,Z,J))}function M5($){if(!Array.isArray($)||$.length>16)return null;let Q=[];for(let Z of $){if(!Z||typeof Z!=="object")return null;let J=Z.urls;if(!Array.isArray(J)||J.length===0||J.length>16||!J.every((G)=>typeof G==="string"&&G.length<=2048&&/^(stun|stuns|turn|turns):/i.test(G)))return null;let{username:Y,credential:X}=Z;if(Y!==void 0&&typeof Y!=="string")return null;if(X!==void 0&&typeof X!=="string")return null;Q.push({urls:J,...typeof Y==="string"?{username:Y}:{},...typeof X==="string"?{credential:X}:{}})}return Q}var F5=new Set(["mjpegFps","mjpegQuality","maxDimension","h264Bitrate","h264Fps"]);function N9($){if(!$||typeof $!=="object"||Array.isArray($))return null;let Q=$,Z=Object.keys(Q);if(Z.length===0||Z.some((J)=>!F5.has(J)))return null;for(let J of["mjpegFps","mjpegQuality","maxDimension","h264Bitrate","h264Fps"])if(J in Q&&F9(Q[J])==null)return null;return Q}function M9($={},Q=H5){let J=Object.prototype.hasOwnProperty.call($,"iceServers")?M5($.iceServers):Q.iceServers,Y=J===null?Q.iceServers:J&&J.length>0?J:void 0;return{transport:$.transport==="http"||$.transport==="webrtc"?$.transport:Q.transport,httpCodec:$.httpCodec==="auto"||$.httpCodec==="mjpeg"||$.httpCodec==="h264"?$.httpCodec:Q.httpCodec,webRtcCodec:$.webRtcCodec==="vp8"||$.webRtcCodec==="vp9"||$.webRtcCodec==="h264"?$.webRtcCodec:Q.webRtcCodec,...Y?{iceServers:Y}:{},...p4($,Q)}}function p4($={},Q=z4){return{mjpegFps:W4($.mjpegFps,Q.mjpegFps,1,120),mjpegQuality:_9($.mjpegQuality,Q.mjpegQuality,0.05,1),maxDimension:W4($.maxDimension,Q.maxDimension,0,4096),h264Bitrate:W4($.h264Bitrate,Q.h264Bitrate,1e5,50000000),h264Fps:W4($.h264Fps,Q.h264Fps,1,120)}}function L9($){return{mjpegFps:$.mjpegFps,mjpegQuality:$.mjpegQuality,maxDimension:$.maxDimension,h264Bitrate:$.h264Bitrate,h264Fps:$.h264Fps}}function B9($){let Q=$?{mjpegFps:$.mjpegFps,mjpegQuality:$.mjpegQuality,maxDimension:$.maxDimension,h264Bitrate:$.h264Bitrate,h264Fps:$.h264Fps}:{};if($?.transport==="webrtc")return M9({transport:"webrtc",webRtcCodec:$.codec,iceServers:$.iceServers,...Q});return M9({transport:"http",httpCodec:$?.codec??"auto",...Q})}function M4($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function H4($){return typeof $==="number"&&Number.isFinite($)?$:0}function J0($){return typeof $==="number"&&Number.isFinite($)?$:null}function l0($){return typeof $==="string"&&$.length>0?$:null}function _5($){if(!M4($))return{};let Q={};for(let[Z,J]of Object.entries($)){let Y=J0(J);if(Y!==null)Q[Z]=Y*1000}return Q}function N5($,Q){let Z=[l0($),l0(Q)];if(Z.some((J)=>J===null))return"unknown";return Z.includes("relay")?"relay":"direct"}function L5($){let Q=H4($.framesEncoded),Z=H4($.packetsSent),J=H4($.packetsLost),Y=J0($.totalEncodeTime),X=J0($.targetBitrate),G=J0($.roundTripTime);return{sessionId:l0($.sessionId)??"",sourceFrames:J0($.sourceFrames),sourceFps:J0($.sourceFramesPerSecond),sourceFramesDropped:J0($.sourceFramesDropped),codec:l0($.codec),connected:$.connected===!0,qualityLimitationReason:l0($.qualityLimitationReason),qualityLimitationMs:_5($.qualityLimitationDurations),framesEncoded:Q,framesSent:H4($.framesSent),reportedFps:J0($.framesPerSecond),targetKbps:X===null?null:X/1000,totalEncodeMs:Y===null?null:Y*1000,encodeMsPerFrame:Y===null||Q<=0?null:Y*1000/Q,width:J0($.frameWidth),height:J0($.frameHeight),packetsSent:Z,packetsLost:J,lossRatio:Z>0?Math.max(0,J)/Z:null,roundTripMs:G===null?null:G*1000,path:N5($.localCandidateType,$.remoteCandidateType)}}function U9($){if(!M4($)||!Array.isArray($.sessions))return{sessions:[]};return{sessions:$.sessions.filter(M4).map(L5),capture:B5($.capture)}}function B5($){if(!M4($))return null;let{screenFrames:Q,idleFrames:Z}=$;if(typeof Q!=="number"||typeof Z!=="number")return null;return{screenFrames:Q,idleFrames:Z,offeredFrames:typeof $.offeredFrames==="number"?$.offeredFrames:null,forwardedFrames:typeof $.forwardedFrames==="number"?$.forwardedFrames:null}}var A5=U5(import.meta.url),j5=0,R5=1,C5=1,D5=2,d0={portrait:1,portraitUpsideDown:2,landscapeRight:3,landscapeLeft:4};function P5(){let $=[m4(c4(process.execPath),"native","serve-sim-native.node"),m4(c4(O9(import.meta.url)),"native","serve-sim-native.node"),m4(c4(O9(import.meta.url)),"..","dist","native","serve-sim-native.node")];for(let Q of $)if(O5(Q))return Q;throw Error(`serve-sim-native.node not found. Looked in:
|
|
41
41
|
${$.join(`
|
|
42
42
|
`)}
|
|
43
|
-
Run \`bun run build.ts\` to build the native addon.`)}var
|
|
44
|
-
|
|
45
|
-
`}function
|
|
46
|
-
`);if(B<0)return;try{z(void 0,
|
|
47
|
-
`)})}function
|
|
48
|
-
`))!==-1){let Z=this.buf.slice(0,Q).trim();if(this.buf=this.buf.slice(Q+1),!Z)continue;let J;try{J=JSON.parse(Z).eventMessage??""}catch{continue}let Y
|
|
49
|
-
`)){let X=/^\s*(\d+)\s+([\d:.]+)\s+(\d+)\s+(.*)$/.exec(Y);if(!X)continue;let G=X[4],H=G.toUpperCase();if(!H.includes(Z)||!H.includes("/CONTAINERS/BUNDLE/APPLICATION/"))continue;let K=/^(.*?\.app)\//.exec(G);J.push({pid:+X[1],cpuSeconds:
|
|
50
|
-
`).filter((G)=>G.length>0),J=Z.find((G)=>G.startsWith("time,"))?.split(","),Y=J?.indexOf("bytes_in")??-1,X=J?.indexOf("bytes_out")??-1;if(Y===-1||X===-1)return Q;for(let G of Z){if(G.startsWith("time,"))continue;let H=G.split(","),K=H[1]??"",W=K.lastIndexOf("."),z=W===-1?NaN:Number(K.slice(W+1));if(Number.isNaN(z))continue;Q.set(z,{netInBytesPerSec:Number(H[Y])||0,netOutBytesPerSec:Number(H[X])||0})}return Q}function
|
|
43
|
+
Run \`bun run build.ts\` to build the native addon.`)}var l4;function F4(){if(!l4)l4=A5(P5());return l4}class d4{handle;constructor($){this.handle=new(F4()).SimHID($)}async guard($,Q,Z){try{return await Q()}catch(J){return console.error(`[hid] ${$} ignored bad input:`,J instanceof Error?J.message:J),Z}}touch($,Q,Z,J,Y,X=0){return this.guard("touch",()=>this.handle.touch($,Q,Z,J,Y,X),void 0)}multiTouch($,Q,Z,J,Y,X,G){return this.guard("multiTouch",()=>this.handle.multiTouch($,Q,Z,J,Y,X,G),void 0)}button($){return this.guard("button",()=>this.handle.button($),void 0)}buttonHid($,Q,Z="press"){return this.guard("buttonHid",()=>this.handle.buttonHid($,Q,Z),void 0)}key($,Q){return this.guard("key",()=>this.handle.key($,Q),void 0)}scroll($,Q,Z,J,Y,X){return this.guard("scroll",()=>this.handle.scroll($,Q,Y??NaN,X??NaN,Z,J),void 0)}digitalCrown($){return this.guard("digitalCrown",()=>this.handle.digitalCrown($),void 0)}orientation($){return this.guard("orientation",()=>this.handle.orientation($),!1)}memoryWarning(){return this.guard("memoryWarning",()=>this.handle.memoryWarning(),void 0)}softwareKeyboard(){return this.guard("softwareKeyboard",()=>this.handle.softwareKeyboard(),void 0)}caDebug($,Q){return this.guard("caDebug",()=>this.handle.caDebug($,Q),!1)}}class i4{handle;constructor($,Q=z4){this.handle=new(F4()).SimCapture($,Q.mjpegFps,Q.mjpegQuality,Q.maxDimension,Q.h264Fps,Q.h264Bitrate)}start(){return this.handle.start()}updateStreamSettings($){return this.handle.updateStreamSettings($.mjpegFps,$.mjpegQuality,$.maxDimension,$.h264Fps,$.h264Bitrate)}subscribeMjpeg($){return this.handle.subscribe(j5,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J})})}subscribeAvcc($){return this.handle.subscribe(R5,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J,isDescription:(Y&C5)!==0,isKeyframe:(Y&D5)!==0})})}async handleWebRTCOffer($){return JSON.parse(await this.handle.handleWebRTCOffer(JSON.stringify($)))}closeWebRTCSession($){return this.handle.closeWebRTCSession($)}async webRTCSenderStats($){return U9(JSON.parse(await this.handle.webRTCSenderStats($??"")))}screenSize(){return this.handle.screenSize()}stop(){return this.handle.stop()}}function _4($){return F4().axDescribe($)}function N4($){return F4().axFrontmost($)}var n4=500,A9=500,T5=2000,E5=15000;function I5($){return $[0]?.frame??{x:0,y:0,width:1,height:1}}function x5($,Q){return Math.abs($.x-Q.x)<0.5&&Math.abs($.y-Q.y)<0.5&&Math.abs($.width-Q.width)<0.5&&Math.abs($.height-Q.height)<0.5}function q5($){let Q=I5($),Z=[],J=(Y,X)=>{if(Z.length>=n4)return;let G=Y.frame;if(!x5(G,Q))Z.push({id:Y.AXUniqueId??X,path:X,label:Y.AXLabel??"",value:Y.AXValue??"",role:Y.role_description,type:Y.type,enabled:Y.enabled!==!1,frame:G});for(let K=0;K<Y.children.length&&Z.length<n4;K++)J(Y.children[K],`${X}.${K}`)};for(let Y=0;Y<$.length&&Z.length<n4;Y++)J($[Y],String(Y));return{screen:{width:Q.width,height:Q.height},elements:Z}}async function S5($){let Q;try{Q=JSON.parse(await _4($))}catch{return{screen:{width:1,height:1},elements:[],errors:[u4]}}return q5(Q)}function w5($){return $?.errors?.includes(u4)??!1}function y5($){return $.elements.length>0&&$.screen.width>1&&$.screen.height>1}async function k5($){let Q=[];try{let Z=await S5($);if(Z.errors?.length)return Z;if(!y5(Z))throw Error(`native AX returned ${Z.elements.length} elements in ${Z.screen.width}x${Z.screen.height} AX space`);return{...Z,errors:Q}}catch(Z){Q.push(Z.message||String(Z))}return{screen:{width:1,height:1},elements:[],errors:Q}}function f5($){return`data: ${JSON.stringify($)}
|
|
44
|
+
|
|
45
|
+
`}function v5({udid:$}){let Q=new Set,Z=null,J=null,Y=A9,X=!1,G=!1,H=()=>{if(G||Q.size===0||Z)return;Z=setTimeout(K,Y)},K=async()=>{if(Z=null,G||X||Q.size===0){H();return}X=!0;try{let W=await k5($),z=f5(W);if(z!==J){for(let L of Q)L.write(z);Y=A9}else Y=Math.min(Y*2,T5);if(J=z,w5(W))Y=E5}finally{X=!1,H()}};return{addClient(W){if(G)return()=>{};if(Q.add(W),J)W.write(J);return K(),()=>{if(Q.delete(W),Q.size===0&&Z)clearTimeout(Z),Z=null}},dispose(){if(G)return;if(G=!0,Z)clearTimeout(Z),Z=null;Q.clear(),J=null}}}function j9(){let $=new Map;return{get(Q){let Z=$.get(Q);if(Z)return Z;let J=v5({udid:Q});return $.set(Q,J),J},prune(Q){let Z=Q instanceof Set?Q:new Set(Q);for(let[J,Y]of $)if(!Z.has(J))Y.dispose(),$.delete(J)},size(){return $.size}}}import{createHash as c5}from"crypto";import{existsSync as D9,readFileSync as P9}from"fs";import{join as a4}from"path";import{tmpdir as b5}from"os";import{join as o4}from"path";import{readdirSync as XJ,mkdirSync as h5,writeFileSync as g5,renameSync as u5}from"fs";var i0=o4(b5(),"serve-sim"),GJ=o4(i0,"server.json");function p5($){return o4(i0,`server-${$}.json`)}function R9($,Q,Z="/",J="127.0.0.1",Y){let X=J==="0.0.0.0"||J==="::"?"127.0.0.1":J,G=Z.replace(/^\/+/,"").replace(/\/+$/,""),H=G===""?"":`/${G}`;return{pid:process.pid,port:Q,device:$,url:`http://${X}:${Q}`,streamUrl:`http://${X}:${Q}${H}/helper/${$}/stream.mjpeg`,wsUrl:`ws://${X}:${Q}${H}/helper/${$}/ws`,...Y?{streamSettings:Y}:{}}}function C9($){h5(i0,{recursive:!0});let Q=p5($.device),Z=`${Q}.${process.pid}.tmp`;g5(Z,JSON.stringify($,null,2),{mode:384}),u5(Z,Q)}var T9=a4(i0,"simcam"),m5=3000;function l5($){return a4(T9,`${$}.pid`)}function d5($){return a4(T9,`${$}.bundles.json`)}function E9($){return`/tmp/serve-sim-cam-${c5("sha1").update($).digest("hex").slice(0,12)}.sock`}function i5($){try{return process.kill($,0),!0}catch{return!1}}function r4($){try{let Q=Number(P9(l5($),"utf-8").trim());return Number.isInteger(Q)&&Q>0?Q:null}catch{return null}}function n5($){if(!$||typeof $!=="object"||Array.isArray($))throw Error("invalid camera helper reply");return $}async function o5($,Q){let Z=E9($);if(!D9(Z))throw Error("camera helper socket not found");let J=await import("net");return new Promise((Y,X)=>{let G=J.createConnection(Z);G.setEncoding("utf8");let H="",K=!1,W,z=(L,B)=>{if(K)return;if(K=!0,W)clearTimeout(W);if(L)X(L);else Y(B??{})};G.on("data",(L)=>{H+=L;let B=H.indexOf(`
|
|
46
|
+
`);if(B<0)return;try{z(void 0,n5(JSON.parse(H.slice(0,B))))}catch(U){z(U)}G.end()}),G.on("error",z),G.on("close",()=>z(Error("socket closed"))),W=setTimeout(()=>{G.destroy(),z(Error("helper timeout"))},m5),G.write(JSON.stringify(Q)+`
|
|
47
|
+
`)})}function a5($){let Q=r4($);return Q!==null&&i5(Q)&&D9(E9($))}function r5($){let Q;try{let J=JSON.parse(P9(d5($),"utf-8"));if(!J||typeof J!=="object"||Array.isArray(J))return[];let Y=J;if(typeof Y.helperPid!=="number"||!Array.isArray(Y.bundleIds))return[];Q={helperPid:Y.helperPid,bundleIds:Y.bundleIds}}catch{return[]}let Z=r4($);if(Z===null||Q.helperPid!==Z)return[];return Q.bundleIds.filter((J)=>typeof J==="string")}async function I9($){if(!a5($))return{udid:$,alive:!1};let Q=r4($),Z=r5($);try{return{...await o5($,{action:"status"}),udid:$,alive:!0,helperPid:Q,bundleIds:Z}}catch(J){return{udid:$,alive:!0,helperPid:Q,bundleIds:Z,error:J instanceof Error?J.message:String(J)}}}import{execFile as XQ}from"node:child_process";import{cpus as GQ}from"node:os";import{promisify as KQ}from"node:util";import{spawn as t5}from"node:child_process";var s5=/(^|\.)(WidgetRenderer|ExtensionHost|Service|PlaceholderApp|InCallService|CallUI|InCallUI)(\.|$)|\.extension(\.|$)|com\.apple\.(Preferences\.Cellular|purplebuddy|chrono|shuttle|usernotificationsui)/i;function e5($){return!s5.test($)}function $Q($){let Q=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec($);if(!Q)return null;return{bundleId:Q[1],pid:parseInt(Q[2],10)}}var QQ=1048576,ZQ=1000;function JQ($){return t5("xcrun",["simctl","spawn",$,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]})}async function t4($){try{let{pid:Q,bundleId:Z}=JSON.parse(await N4($));return Q!=null&&Z?{pid:Q,bundleId:Z}:null}catch{return null}}class x9{udid;deps;child=null;buf="";latest=null;stopped=!1;restartTimer=null;listeners=new Set;constructor($,Q){this.udid=$;this.deps=Q}get current(){return this.latest}get listenerCount(){return this.listeners.size}add($){this.listeners.add($)}remove($){this.listeners.delete($)}start(){if(this.child)return;this.stopped=!1,this.deps.frontmostApp(this.udid).then(($)=>{if($&&this.latest===null)this.set($)}).catch(()=>{}),this.spawn()}spawn(){let $=this.deps.spawnLogStream(this.udid);this.child=$,$.stdout?.on("data",(Q)=>this.consume(Q.toString())),$.on("error",()=>this.onChildGone()),$.on("exit",()=>this.onChildGone())}onChildGone(){if(this.stopped||this.restartTimer)return;if(this.child=null,this.listeners.size===0)return;this.restartTimer=setTimeout(()=>{if(this.restartTimer=null,!this.stopped&&!this.child&&this.listeners.size>0)this.spawn()},this.deps.restartDelayMs)}stop(){if(this.stopped=!0,this.restartTimer)clearTimeout(this.restartTimer),this.restartTimer=null;this.child?.stdout?.destroy(),this.child?.kill(),this.child=null,this.buf=""}consume($){this.buf+=$;let Q;while((Q=this.buf.indexOf(`
|
|
48
|
+
`))!==-1){let Z=this.buf.slice(0,Q).trim();if(this.buf=this.buf.slice(Q+1),!Z)continue;let J;try{J=JSON.parse(Z).eventMessage??""}catch{continue}let Y=$Q(J);if(Y)this.set(Y)}if(this.buf.length>QQ)this.buf=""}set($){if(!e5($.bundleId))return;if($.bundleId===this.latest?.bundleId&&$.pid===this.latest.pid)return;this.latest=$;for(let Q of this.listeners)try{Q($)}catch{}}}function YQ($={}){let Q={spawnLogStream:$.spawnLogStream??JQ,frontmostApp:$.frontmostApp??t4,restartDelayMs:$.restartDelayMs??ZQ},Z=new Map;return{peek(J){return Z.get(J)?.current??null},subscribe(J,Y){let X=Z.get(J);if(!X)X=new x9(J,Q),Z.set(J,X),X.start();let G=(H)=>Y?.(H);return X.add(G),{unsubscribe:()=>{if(X.remove(G),X.listenerCount===0&&Z.get(J)===X)X.stop(),Z.delete(J)}}}}}var x0=YQ();var VQ=KQ(XQ),WQ=1;function zQ($){return $.split(":").reduce((Q,Z)=>Q*60+Number(Z),0)}function HQ($,Q){let Z=`/Devices/${Q}/`.toUpperCase(),J=[];for(let Y of $.split(`
|
|
49
|
+
`)){let X=/^\s*(\d+)\s+([\d:.]+)\s+(\d+)\s+(.*)$/.exec(Y);if(!X)continue;let G=X[4],H=G.toUpperCase();if(!H.includes(Z)||!H.includes("/CONTAINERS/BUNDLE/APPLICATION/"))continue;let K=/^(.*?\.app)\//.exec(G);J.push({pid:+X[1],cpuSeconds:zQ(X[2]),rssKb:+X[3],appPath:K?K[1]:G})}return J}function MQ($,Q,Z){let J=HQ($,Q);if(!J.length)return null;let Y=Z!=null?J.find((G)=>G.pid===Z):void 0,X=Y?J.filter((G)=>G.appPath===Y.appPath):J;return{pids:X.map((G)=>G.pid),cpuSeconds:X.reduce((G,H)=>G+H.cpuSeconds,0),rssKb:X.reduce((G,H)=>G+H.rssKb,0)}}function FQ($){let Q=0,Z=!1;for(let J of $.matchAll(/^\s*phys_footprint:\s+(\d+) B$/gm))Q+=+J[1],Z=!0;return Z?Q:null}var q9=($,Q,Z)=>VQ($,Q,{timeout:3000,maxBuffer:8388608,signal:Z}).then((J)=>J.stdout);function _Q($){let Q=x0.peek($);return Q?Promise.resolve(Q):t4($)}async function NQ($,Q){let[Z,J]=await Promise.all([Q.exec("ps",["-axo","pid=,cputime=,rss=,comm="]).catch(()=>null),Q.frontmostApp($)]);if(Z==null)return null;let Y=MQ(Z,$,J?.pid);if(!Y)return null;let X=J&&Y.pids.includes(J.pid)?J.bundleId:null;return{procs:Y,bundleId:X}}async function LQ($,Q){try{let Z=await Q.exec("footprint",["--noCategories","--format","bytes",...$.pids.map(String)]);return FQ(Z)??$.rssKb*1024}catch{return $.rssKb*1024}}var BQ=["-x","-P","-n","-d","-L","2","-s","1"];function UQ($){let Q=new Map,Z=$.split(`
|
|
50
|
+
`).filter((G)=>G.length>0),J=Z.find((G)=>G.startsWith("time,"))?.split(","),Y=J?.indexOf("bytes_in")??-1,X=J?.indexOf("bytes_out")??-1;if(Y===-1||X===-1)return Q;for(let G of Z){if(G.startsWith("time,"))continue;let H=G.split(","),K=H[1]??"",W=K.lastIndexOf("."),z=W===-1?NaN:Number(K.slice(W+1));if(Number.isNaN(z))continue;Q.set(z,{netInBytesPerSec:Number(H[Y])||0,netOutBytesPerSec:Number(H[X])||0})}return Q}function OQ($){let Q=[],Z=[];for(let Y of $.split(`
|
|
51
51
|
`))if(Y.startsWith("time,")){if(Z.length>0)Q.push(Z.join(`
|
|
52
52
|
`));Z=[Y]}else if(Z.length>0)Z.push(Y);if(Z.length>0)Q.push(Z.join(`
|
|
53
|
-
`));if(Q.length<2)return new Map;let J=Q[Q.length-1];if(J===void 0)return new Map;return KQ(J)}class T9{runNettop;running=!1;rate=new Map;generation=0;inFlight=null;constructor($=(Q)=>D9("nettop",GQ,Q)){this.runNettop=$}start(){if(this.running)return;this.running=!0,this.loop(++this.generation)}stop(){this.running=!1,this.generation++,this.inFlight?.abort(),this.inFlight=null,this.rate.clear()}rateForPids($){let Q=0,Z=0;for(let J of $){let Y=this.rate.get(J);if(Y)Q+=Y.netInBytesPerSec,Z+=Y.netOutBytesPerSec}return{netInBytesPerSec:Q,netOutBytesPerSec:Z}}async loop($){while(this.running&&this.generation===$){let Q=new AbortController;this.inFlight=Q;try{let Z=await this.runNettop(Q.signal);if(this.generation!==$)return;this.rate=VQ(Z)}catch{if(this.generation!==$)return;this.rate.clear(),await new Promise((Z)=>setTimeout(Z,1000))}finally{if(this.inFlight===Q)this.inFlight=null}}}}async function WQ($,Q={}){let Z={exec:Q.exec??D9,frontmostApp:Q.frontmostApp??JQ,networkRate:Q.networkRate??(()=>({netInBytesPerSec:0,netOutBytesPerSec:0}))},J=await YQ($,Z);if(!J)return null;let Y=Z.networkRate(J.procs.pids);return{bundleId:J.bundleId,processKey:[...J.procs.pids].sort((X,G)=>X-G).join(","),cpuSeconds:J.procs.cpuSeconds,memBytes:await XQ(J.procs,Z),netInBytesPerSec:Y.netInBytesPerSec,netOutBytesPerSec:Y.netOutBytesPerSec}}class M4{meta;intervalMs;sample;now;listeners=new Set;timer=null;startedAt=null;prev=null;network;constructor($){if(this.intervalMs=$.intervalMs??1000,this.now=$.now??(()=>performance.now()),$.sample)this.sample=$.sample,this.network=null;else{let Q=new T9;this.network=Q,this.sample=(Z)=>WQ(Z,{networkRate:(J)=>Q.rateForPids(J)})}this.meta={schemaVersion:s5,udid:$.udid,deviceName:$.deviceName,hostCores:$.hostCores??a5().length,sampleIntervalMs:this.intervalMs}}get listenerCount(){return this.listeners.size}onSample($){return this.listeners.add($),()=>this.listeners.delete($)}async tickOnce(){this.startedAt??=this.now();let $=this.now()-this.startedAt,Q=await this.sample(this.meta.udid);if(!Q)return null;let Z=this.cpuPctSince(Q,$);this.prev={t:$,bundleId:Q.bundleId,processKey:Q.processKey,cpuSeconds:Q.cpuSeconds};let J={t:$,bundleId:Q.bundleId,cpuPct:Z,memBytes:Q.memBytes,netInBytesPerSec:Q.netInBytesPerSec,netOutBytesPerSec:Q.netOutBytesPerSec};for(let Y of this.listeners)try{Y(J)}catch{}return J}cpuPctSince($,Q){let Z=this.prev;if(!Z||Z.bundleId!==$.bundleId||Z.processKey!==$.processKey||Q<=Z.t)return 0;let J=($.cpuSeconds-Z.cpuSeconds)/((Q-Z.t)/1000)*100;return J>0?+J.toFixed(1):0}start(){if(this.timer)return;this.network?.start(),this.startedAt??=this.now();let $,Q=async()=>{if(await this.tickOnce().catch(()=>{}),this.timer===$)$=setTimeout(Q,this.intervalMs),this.timer=$};$=setTimeout(Q,this.intervalMs),this.timer=$}stop(){if(this.network?.stop(),this.timer)clearTimeout(this.timer),this.timer=null}}function P9($=(Q)=>new M4({udid:Q})){let Q=new Map;return{subscribe(Z,J){let Y=Q.get(Z);if(!Y)Y=$(Z),Q.set(Z,Y),Y.start();let X=Y.onSample(J);return{meta:Y.meta,unsubscribe:()=>{if(X(),Y.listenerCount===0&&Q.get(Z)===Y)Y.stop(),Q.delete(Z)}}}}}function E9($,Q,{helperProxyTarget:Z,fallbackDevice:J,resolveSession:Y}){let X=new URL($.url,"http://serve-sim.local"),G=Z(`${X.pathname}${X.search}`);if(!G||G.upstreamPath!=="/ws")return!1;let H=G.device??J??null;if(!H)return Q.close(),!0;let K;try{K=Y(H)}catch{return Q.close(),!0}return K.attachHidSocket(Q),!0}function I9($,Q){if(!$)return{};let Z;try{Z=new URL($)}catch{return{}}let J=Z.hostname.replace(/^\[|\]$/g,""),Y=J==="localhost"||J==="127.0.0.1"||J==="::1",X=Q.some((G)=>{try{return new URL(G).origin===Z.origin}catch{return!1}});if(Y||X)return{"Access-Control-Allow-Origin":$,Vary:"Origin"};return{}}var zQ={40:"Enter",41:"Escape",42:"Backspace",43:"Tab",44:"Space",45:"-",46:"=",47:"[",48:"]",49:"\\",50:"#",51:";",52:"'",53:"`",54:",",55:".",56:"/",57:"CapsLock",58:"F1",59:"F2",60:"F3",61:"F4",62:"F5",63:"F6",64:"F7",65:"F8",66:"F9",67:"F10",68:"F11",69:"F12",70:"PrintScreen",71:"ScrollLock",72:"Pause",73:"Insert",74:"Home",75:"PageUp",76:"Delete",77:"End",78:"PageDown",79:"ArrowRight",80:"ArrowLeft",81:"ArrowDown",82:"ArrowUp",83:"NumLock",84:"NumpadDivide",85:"NumpadMultiply",86:"NumpadSubtract",87:"NumpadAdd",88:"NumpadEnter",89:"Numpad1",90:"Numpad2",91:"Numpad3",92:"Numpad4",93:"Numpad5",94:"Numpad6",95:"Numpad7",96:"Numpad8",97:"Numpad9",98:"Numpad0",99:"NumpadDecimal",224:"ControlLeft",225:"ShiftLeft",226:"AltLeft",227:"MetaLeft",228:"ControlRight",229:"ShiftRight",230:"AltRight",231:"MetaRight"},HQ=1,Y0=[],a4=new Set;function x9($){for(let Q of a4)try{Q($)}catch{}}function W0($){let Q={...$,id:HQ++,timestamp:$.timestamp??new Date().toISOString(),msg:$.msg??$.summary};if(Y0.push(Q),Y0.length>500)Y0=Y0.slice(Y0.length-500);return x9(Q),Q}function t4($,Q,Z={}){let J=Y0.findIndex((X)=>X.id===$);if(J<0)return null;let Y={...Y0[J],...Q,id:$,...Q.summary!=null&&Q.msg==null?{msg:Q.summary}:{}};if(Y0[J]=Y,Z.notify!==!1)x9(Y);return Y}function s4($={}){let{device:Q,sinceId:Z}=$,J=MQ($.limit),Y=Y0.filter((X)=>{if(Q&&X.device!==Q)return!1;if(Z!=null&&X.id<=Z)return!1;return!0});return Y.slice(Math.max(0,Y.length-J))}function w9($){return a4.add($),()=>a4.delete($)}function S9($,Q,Z,J){let Y=FQ(Z);if(!Y)return null;switch(Q){case 3:{let X=N0(Y.type),G=q0(Y.x),H=q0(Y.y);if(!X||G==null||H==null)return null;return{device:$,source:"hid",kind:"touch",action:X,summary:`Touch ${X} ${x0(G,H)}`,details:o4({...Y,x:G,y:H},J)}}case 4:{let X=N0(Y.button);if(!X)return null;let G=N0(Y.phase)??"press";return{device:$,source:"hid",kind:"button",action:X,summary:G==="press"?`Button ${X}`:`Button ${X} ${G}`,details:{...Y,phase:G}}}case 5:{let X=N0(Y.type);if(!X)return null;return{device:$,source:"hid",kind:"multi-touch",action:X,summary:`Multi-touch ${X}`,details:o4(Y,J)}}case 6:{let X=N0(Y.type),G=q0(Y.usage);if(!X||G==null)return null;let H=NQ(G),K=LQ(G),W={...Y};if(K)delete W.usage,W.key="character",W.redacted=!0;else W.usage=G,W.key=H;return{device:$,source:"hid",kind:"key",action:X,summary:K?`Key ${X} character`:`Key ${X} ${H}`,details:W}}case 7:{let X=N0(Y.orientation);if(!X)return null;return{device:$,source:"hid",kind:"rotate",action:X,summary:`Rotate ${X}`,details:Y}}case 8:{let X=N0(Y.option),G=_Q(Y.enabled);if(!X||G==null)return null;return{device:$,source:"hid",kind:"ca-debug",action:X,summary:`CoreAnimation ${X} ${G?"on":"off"}`,details:{...Y,enabled:G}}}case 9:return{device:$,source:"hid",kind:"memory-warning",action:"trigger",summary:"Memory warning"};case 10:{let X=q0(Y.delta);if(X==null)return null;return{device:$,source:"hid",kind:"digital-crown",action:"rotate",summary:`Digital Crown ${X>0?"up":"down"}`,details:{...Y,delta:X}}}case 11:{let X=q0(Y.dx),G=q0(Y.dy);if(X==null||G==null)return null;return{device:$,source:"hid",kind:"scroll",action:"wheel",summary:`Scroll ${BQ(X,G)}`,details:o4({...Y,dx:X,dy:G},J)}}case 12:return{device:$,source:"hid",kind:"software-keyboard",action:"toggle",summary:"Software keyboard"};default:return null}}function y9($,Q){let Z=OQ($);if(Z.length===0)return null;if(AQ(Z))return null;let J=k9(Q?.exitCode),Y=UQ(Q),X=jQ(Z);if(X){let{verb:H,args:K}=X;if(H==="install"&&K.length>=2){let[W]=K;return{device:W,source:"exec",kind:"app",action:"install",status:J,summary:"Install app",details:Y}}if(H==="addmedia"&&K.length>=2){let[W]=K;return{device:W,source:"exec",kind:"media",action:"addmedia",status:J,summary:"Add media",details:Y}}if(H==="launch"&&K.length>=2){let[W,z]=K,L=z==="com.apple.springboard";return{device:W,source:"exec",kind:L?"button":"app",action:L?"home":"launch",status:J,summary:L?"Home":`Launch ${z}`,details:{...Y,bundleId:z}}}if(H==="terminate"&&K.length>=2){let[W,z]=K;return{device:W,source:"exec",kind:"app",action:"terminate",status:J,summary:`Terminate ${z}`,details:{...Y,bundleId:z}}}if(H==="io"&&K.length>=2&&K[1]==="screenshot")return{device:K[0],source:"exec",kind:"screenshot",action:"capture",status:J,summary:"Screenshot",details:Y}}let G=RQ(Z);if(G){let{verb:H,args:K}=G,W=CQ(K);if(H==="button"){let z=d0(K)??"home";return{device:W,source:"exec",kind:"button",action:z,status:J,summary:`Button ${z}`,details:Y}}if(H==="tap"){let[z,L]=K;return{device:W,source:"exec",kind:"tap",action:"tap",status:J,summary:`Tap ${x0(Number(z),Number(L))}`,details:Y}}if(H==="gesture")return{device:W,source:"exec",kind:"gesture",action:"send",status:J,summary:"Gesture",details:Y};if(H==="rotate"){let z=d0(K);return{device:W,source:"exec",kind:"rotate",action:z,status:J,summary:z?`Rotate ${z}`:"Rotate",details:Y}}if(H==="memory-warning")return{device:W,source:"exec",kind:"memory-warning",action:"trigger",status:J,summary:"Memory warning",details:Y};if(H==="ca-debug"){let z=d0(K),L=K.find((B)=>B==="on"||B==="off");return{device:W,source:"exec",kind:"ca-debug",action:z,status:J,summary:`CoreAnimation ${z??"debug"}${L?` ${L}`:""}`,details:Y}}if(H==="camera"){let z=TQ(K);if(z==="status"||z==="list-webcams")return null;return{device:W,source:"exec",kind:"camera",action:z??"start",status:J,summary:z?`Camera ${z}`:"Camera",details:Y}}if(H==="ui"){let z=d0(K);return{device:W,source:"exec",kind:"ui-setting",action:z,status:J,summary:z?`UI ${z}`:"UI setting",details:Y}}}if(Z[0]==="osascript"&&$.includes('menu item "Home"'))return{source:"exec",kind:"button",action:"home",status:J,summary:"Home",details:Y};return null}function MQ($){if(!Number.isFinite($??NaN))return 500;return Math.min(500,Math.max(1,Math.floor($)))}function FQ($){if(!$||typeof $!=="object"||Array.isArray($))return null;return $}function N0($){return typeof $==="string"&&$.length>0?$:null}function q0($){return typeof $==="number"&&Number.isFinite($)?$:null}function _Q($){return typeof $==="boolean"?$:null}function NQ($){if($>=4&&$<=29)return String.fromCharCode(97+$-4);if($>=30&&$<=38)return String($-29);if($===39)return"0";return zQ[$]??`usage ${$}`}function LQ($){return $>=4&&$<=39||$>=44&&$<=56||$>=84&&$<=87||$>=89&&$<=99}function o4($,Q){if(!Q||Q.width<=0||Q.height<=0)return $;return{...$,screen:Q}}function x0($,Q){if(!Number.isFinite($)||!Number.isFinite(Q))return"";return`${r4($)},${r4(Q)}`}function BQ($,Q){return`${q9($)},${q9(Q)}`}function r4($){return $.toFixed(3).replace(/0+$/,"").replace(/\.$/,"")}function q9($){let Q=r4($);return $>0?`+${Q}`:Q}function k9($){if($==null)return;return $===0?"ok":"error"}function UQ($){return k9($?.exitCode)?{exitCode:$?.exitCode}:{}}function OQ($){let Q=[],Z="",J=null,Y=!1;for(let X of $){if(Y){Z+=X,Y=!1;continue}if(X==="\\"&&J!=="'"){Y=!0;continue}if((X==="'"||X==='"')&&J===null){J=X;continue}if(X===J){J=null;continue}if(/\s/.test(X)&&J===null){if(Z)Q.push(Z),Z="";continue}Z+=X}if(Z)Q.push(Z);return Q}function AQ($){if($[0]==="bash"&&$[1]==="-c"&&$[2]?.startsWith("echo "))return!0;if($[0]==="bash"&&$[1]==="-c"&&$[2]?.startsWith("rm -f "))return!0;if($[0]==="rm"&&$[1]==="-f")return!0;return!1}function jQ($){let Q=$.findIndex((J)=>J==="simctl");if(Q<0||$[Q-1]!=="xcrun")return null;let Z=$[Q+1];if(!Z)return null;return{verb:Z,args:$.slice(Q+2)}}function RQ($){let Q=$.findIndex((J)=>J==="serve-sim"||/(?:^|\/)serve-sim(?:\.js)?$/.test(J));if(Q<0)return null;let Z=$[Q+1];if(!Z)return null;return{verb:Z,args:$.slice(Q+2)}}function CQ($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if((Z==="-d"||Z==="--device")&&$[Q+1])return $[Q+1]}return}function d0($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if(Z==="-d"||Z==="--device"){Q++;continue}if(Z.startsWith("-"))continue;return Z}return}function DQ($){if($.includes("--list-webcams"))return"list-webcams";if($.includes("--stop-webcam"))return"stop-webcam";return d0($)}function TQ($){let Q=DQ($);if(Q==="status"||Q==="list-webcams"||Q==="stop-webcam")return Q;return"start"}var v9=262144;class l extends Error{status;code;constructor($,Q,Z){super($);this.status=Q;this.code=Z;this.name="WebRtcSignalingError"}}function e4($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function b9($){if(typeof $!=="string"||!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test($))throw new l("Invalid WebRTC session ID",400,"invalid_session_id");return $}function f9($,Q,Z){if($===void 0)return;if(typeof $!=="string"||$.length>Z)throw new l(`Invalid ${Q}`,400,"invalid_offer");return $}function PQ($){if($===void 0)return;if(!Array.isArray($)||$.length>16)throw new l("Invalid ICE servers",400,"invalid_offer");return $.map((Q)=>{if(!e4(Q)||!Array.isArray(Q.urls)||Q.urls.length===0||Q.urls.length>16)throw new l("Invalid ICE server",400,"invalid_offer");let Z=Q.urls.map((X)=>{if(typeof X!=="string"||X.length===0||X.length>2048||!/^(stun|stuns|turn|turns):/i.test(X))throw new l("Invalid ICE server URL",400,"invalid_offer");return X}),J=f9(Q.username,"ICE username",1024),Y=f9(Q.credential,"ICE credential",1024);return{urls:Z,...J!==void 0?{username:J}:{},...Y!==void 0?{credential:Y}:{}}})}function h9($){if(!e4($)||$.type!=="offer")throw new l("Expected a WebRTC offer",400,"invalid_offer");if(typeof $.sdp!=="string"||$.sdp.length===0||$.sdp.length>245760)throw new l("Invalid WebRTC offer SDP",400,"invalid_offer");let Q=$.codec;if(Q!==void 0&&Q!=="vp8"&&Q!=="vp9"&&Q!=="h264")throw new l("Invalid WebRTC codec",400,"invalid_offer");return{type:"offer",sdp:$.sdp,sessionId:b9($.sessionId),...Q!==void 0?{codec:Q}:{},...$.iceServers!==void 0?{iceServers:PQ($.iceServers)}:{}}}function u9($){if(!e4($))throw new l("Invalid WebRTC close request",400,"invalid_close_request");return{sessionId:b9($.sessionId)}}var i0={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, PATCH, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function J8($){$.writeHead(204,i0),$.end()}var EQ=4,IQ=130,g9=Buffer.from(`\r
|
|
54
|
-
`,"ascii"),
|
|
53
|
+
`));if(Q.length<2)return new Map;let J=Q[Q.length-1];if(J===void 0)return new Map;return UQ(J)}class S9{runNettop;running=!1;rate=new Map;generation=0;inFlight=null;constructor($=(Q)=>q9("nettop",BQ,Q)){this.runNettop=$}start(){if(this.running)return;this.running=!0,this.loop(++this.generation)}stop(){this.running=!1,this.generation++,this.inFlight?.abort(),this.inFlight=null,this.rate.clear()}rateForPids($){let Q=0,Z=0;for(let J of $){let Y=this.rate.get(J);if(Y)Q+=Y.netInBytesPerSec,Z+=Y.netOutBytesPerSec}return{netInBytesPerSec:Q,netOutBytesPerSec:Z}}async loop($){while(this.running&&this.generation===$){let Q=new AbortController;this.inFlight=Q;try{let Z=await this.runNettop(Q.signal);if(this.generation!==$)return;this.rate=OQ(Z)}catch{if(this.generation!==$)return;this.rate.clear(),await new Promise((Z)=>setTimeout(Z,1000))}finally{if(this.inFlight===Q)this.inFlight=null}}}}async function AQ($,Q={}){let Z={exec:Q.exec??q9,frontmostApp:Q.frontmostApp??_Q,networkRate:Q.networkRate??(()=>({netInBytesPerSec:0,netOutBytesPerSec:0}))},J=await NQ($,Z);if(!J)return null;let Y=Z.networkRate(J.procs.pids);return{bundleId:J.bundleId,processKey:[...J.procs.pids].sort((X,G)=>X-G).join(","),cpuSeconds:J.procs.cpuSeconds,memBytes:await LQ(J.procs,Z),netInBytesPerSec:Y.netInBytesPerSec,netOutBytesPerSec:Y.netOutBytesPerSec}}class L4{meta;intervalMs;sample;now;listeners=new Set;timer=null;startedAt=null;prev=null;network;constructor($){if(this.intervalMs=$.intervalMs??1000,this.now=$.now??(()=>performance.now()),$.sample)this.sample=$.sample,this.network=null;else{let Q=new S9;this.network=Q,this.sample=(Z)=>AQ(Z,{networkRate:(J)=>Q.rateForPids(J)})}this.meta={schemaVersion:WQ,udid:$.udid,deviceName:$.deviceName,hostCores:$.hostCores??GQ().length,sampleIntervalMs:this.intervalMs}}get listenerCount(){return this.listeners.size}onSample($){return this.listeners.add($),()=>this.listeners.delete($)}async tickOnce(){this.startedAt??=this.now();let $=this.now()-this.startedAt,Q=await this.sample(this.meta.udid);if(!Q)return null;let Z=this.cpuPctSince(Q,$);this.prev={t:$,bundleId:Q.bundleId,processKey:Q.processKey,cpuSeconds:Q.cpuSeconds};let J={t:$,bundleId:Q.bundleId,cpuPct:Z,memBytes:Q.memBytes,netInBytesPerSec:Q.netInBytesPerSec,netOutBytesPerSec:Q.netOutBytesPerSec};for(let Y of this.listeners)try{Y(J)}catch{}return J}cpuPctSince($,Q){let Z=this.prev;if(!Z||Z.bundleId!==$.bundleId||Z.processKey!==$.processKey||Q<=Z.t)return 0;let J=($.cpuSeconds-Z.cpuSeconds)/((Q-Z.t)/1000)*100;return J>0?+J.toFixed(1):0}start(){if(this.timer)return;this.network?.start(),this.startedAt??=this.now();let $,Q=async()=>{if(await this.tickOnce().catch(()=>{}),this.timer===$)$=setTimeout(Q,this.intervalMs),this.timer=$};$=setTimeout(Q,this.intervalMs),this.timer=$}stop(){if(this.network?.stop(),this.timer)clearTimeout(this.timer),this.timer=null}}function w9($=(Q)=>new L4({udid:Q})){let Q=new Map;return{subscribe(Z,J){let Y=Q.get(Z);if(!Y)Y=$(Z),Q.set(Z,Y),Y.start();let X=Y.onSample(J);return{meta:Y.meta,unsubscribe:()=>{if(X(),Y.listenerCount===0&&Q.get(Z)===Y)Y.stop(),Q.delete(Z)}}}}}function y9($,Q,{helperProxyTarget:Z,fallbackDevice:J,resolveSession:Y}){let X=new URL($.url,"http://serve-sim.local"),G=Z(`${X.pathname}${X.search}`);if(!G||G.upstreamPath!=="/ws")return!1;let H=G.device??J??null;if(!H)return Q.close(),!0;let K;try{K=Y(H)}catch{return Q.close(),!0}return K.attachHidSocket(Q),!0}function k9($,Q){if(!$)return{};let Z;try{Z=new URL($)}catch{return{}}let J=Z.hostname.replace(/^\[|\]$/g,""),Y=J==="localhost"||J==="127.0.0.1"||J==="::1",X=Q.some((G)=>{try{return new URL(G).origin===Z.origin}catch{return!1}});if(Y||X)return{"Access-Control-Allow-Origin":$,Vary:"Origin"};return{}}var jQ={40:"Enter",41:"Escape",42:"Backspace",43:"Tab",44:"Space",45:"-",46:"=",47:"[",48:"]",49:"\\",50:"#",51:";",52:"'",53:"`",54:",",55:".",56:"/",57:"CapsLock",58:"F1",59:"F2",60:"F3",61:"F4",62:"F5",63:"F6",64:"F7",65:"F8",66:"F9",67:"F10",68:"F11",69:"F12",70:"PrintScreen",71:"ScrollLock",72:"Pause",73:"Insert",74:"Home",75:"PageUp",76:"Delete",77:"End",78:"PageDown",79:"ArrowRight",80:"ArrowLeft",81:"ArrowDown",82:"ArrowUp",83:"NumLock",84:"NumpadDivide",85:"NumpadMultiply",86:"NumpadSubtract",87:"NumpadAdd",88:"NumpadEnter",89:"Numpad1",90:"Numpad2",91:"Numpad3",92:"Numpad4",93:"Numpad5",94:"Numpad6",95:"Numpad7",96:"Numpad8",97:"Numpad9",98:"Numpad0",99:"NumpadDecimal",224:"ControlLeft",225:"ShiftLeft",226:"AltLeft",227:"MetaLeft",228:"ControlRight",229:"ShiftRight",230:"AltRight",231:"MetaRight"},RQ=1,X0=[],e4=new Set;function v9($){for(let Q of e4)try{Q($)}catch{}}function z0($){let Q={...$,id:RQ++,timestamp:$.timestamp??new Date().toISOString(),msg:$.msg??$.summary};if(X0.push(Q),X0.length>500)X0=X0.slice(X0.length-500);return v9(Q),Q}function Q8($,Q,Z={}){let J=X0.findIndex((X)=>X.id===$);if(J<0)return null;let Y={...X0[J],...Q,id:$,...Q.summary!=null&&Q.msg==null?{msg:Q.summary}:{}};if(X0[J]=Y,Z.notify!==!1)v9(Y);return Y}function Z8($={}){let{device:Q,sinceId:Z}=$,J=CQ($.limit),Y=X0.filter((X)=>{if(Q&&X.device!==Q)return!1;if(Z!=null&&X.id<=Z)return!1;return!0});return Y.slice(Math.max(0,Y.length-J))}function b9($){return e4.add($),()=>e4.delete($)}function h9($,Q,Z,J){let Y=DQ(Z);if(!Y)return null;switch(Q){case 3:{let X=B0(Y.type),G=q0(Y.x),H=q0(Y.y);if(!X||G==null||H==null)return null;return{device:$,source:"hid",kind:"touch",action:X,summary:`Touch ${X} ${S0(G,H)}`,details:s4({...Y,x:G,y:H},J)}}case 4:{let X=B0(Y.button);if(!X)return null;let G=B0(Y.phase)??"press";return{device:$,source:"hid",kind:"button",action:X,summary:G==="press"?`Button ${X}`:`Button ${X} ${G}`,details:{...Y,phase:G}}}case 5:{let X=B0(Y.type);if(!X)return null;return{device:$,source:"hid",kind:"multi-touch",action:X,summary:`Multi-touch ${X}`,details:s4(Y,J)}}case 6:{let X=B0(Y.type),G=q0(Y.usage);if(!X||G==null)return null;let H=TQ(G),K=EQ(G),W={...Y};if(K)delete W.usage,W.key="character",W.redacted=!0;else W.usage=G,W.key=H;return{device:$,source:"hid",kind:"key",action:X,summary:K?`Key ${X} character`:`Key ${X} ${H}`,details:W}}case 7:{let X=B0(Y.orientation);if(!X)return null;return{device:$,source:"hid",kind:"rotate",action:X,summary:`Rotate ${X}`,details:Y}}case 8:{let X=B0(Y.option),G=PQ(Y.enabled);if(!X||G==null)return null;return{device:$,source:"hid",kind:"ca-debug",action:X,summary:`CoreAnimation ${X} ${G?"on":"off"}`,details:{...Y,enabled:G}}}case 9:return{device:$,source:"hid",kind:"memory-warning",action:"trigger",summary:"Memory warning"};case 10:{let X=q0(Y.delta);if(X==null)return null;return{device:$,source:"hid",kind:"digital-crown",action:"rotate",summary:`Digital Crown ${X>0?"up":"down"}`,details:{...Y,delta:X}}}case 11:{let X=q0(Y.dx),G=q0(Y.dy);if(X==null||G==null)return null;return{device:$,source:"hid",kind:"scroll",action:"wheel",summary:`Scroll ${IQ(X,G)}`,details:s4({...Y,dx:X,dy:G},J)}}case 12:return{device:$,source:"hid",kind:"software-keyboard",action:"toggle",summary:"Software keyboard"};default:return null}}function g9($,Q){let Z=qQ($);if(Z.length===0)return null;if(SQ(Z))return null;let J=u9(Q?.exitCode),Y=xQ(Q),X=wQ(Z);if(X){let{verb:H,args:K}=X;if(H==="install"&&K.length>=2){let[W]=K;return{device:W,source:"exec",kind:"app",action:"install",status:J,summary:"Install app",details:Y}}if(H==="addmedia"&&K.length>=2){let[W]=K;return{device:W,source:"exec",kind:"media",action:"addmedia",status:J,summary:"Add media",details:Y}}if(H==="launch"&&K.length>=2){let[W,z]=K,L=z==="com.apple.springboard";return{device:W,source:"exec",kind:L?"button":"app",action:L?"home":"launch",status:J,summary:L?"Home":`Launch ${z}`,details:{...Y,bundleId:z}}}if(H==="terminate"&&K.length>=2){let[W,z]=K;return{device:W,source:"exec",kind:"app",action:"terminate",status:J,summary:`Terminate ${z}`,details:{...Y,bundleId:z}}}if(H==="io"&&K.length>=2&&K[1]==="screenshot")return{device:K[0],source:"exec",kind:"screenshot",action:"capture",status:J,summary:"Screenshot",details:Y}}let G=yQ(Z);if(G){let{verb:H,args:K}=G,W=kQ(K);if(H==="button"){let z=n0(K)??"home";return{device:W,source:"exec",kind:"button",action:z,status:J,summary:`Button ${z}`,details:Y}}if(H==="tap"){let[z,L]=K;return{device:W,source:"exec",kind:"tap",action:"tap",status:J,summary:`Tap ${S0(Number(z),Number(L))}`,details:Y}}if(H==="gesture")return{device:W,source:"exec",kind:"gesture",action:"send",status:J,summary:"Gesture",details:Y};if(H==="rotate"){let z=n0(K);return{device:W,source:"exec",kind:"rotate",action:z,status:J,summary:z?`Rotate ${z}`:"Rotate",details:Y}}if(H==="memory-warning")return{device:W,source:"exec",kind:"memory-warning",action:"trigger",status:J,summary:"Memory warning",details:Y};if(H==="ca-debug"){let z=n0(K),L=K.find((B)=>B==="on"||B==="off");return{device:W,source:"exec",kind:"ca-debug",action:z,status:J,summary:`CoreAnimation ${z??"debug"}${L?` ${L}`:""}`,details:Y}}if(H==="camera"){let z=vQ(K);if(z==="status"||z==="list-webcams")return null;return{device:W,source:"exec",kind:"camera",action:z??"start",status:J,summary:z?`Camera ${z}`:"Camera",details:Y}}if(H==="ui"){let z=n0(K);return{device:W,source:"exec",kind:"ui-setting",action:z,status:J,summary:z?`UI ${z}`:"UI setting",details:Y}}}if(Z[0]==="osascript"&&$.includes('menu item "Home"'))return{source:"exec",kind:"button",action:"home",status:J,summary:"Home",details:Y};return null}function CQ($){if(!Number.isFinite($??NaN))return 500;return Math.min(500,Math.max(1,Math.floor($)))}function DQ($){if(!$||typeof $!=="object"||Array.isArray($))return null;return $}function B0($){return typeof $==="string"&&$.length>0?$:null}function q0($){return typeof $==="number"&&Number.isFinite($)?$:null}function PQ($){return typeof $==="boolean"?$:null}function TQ($){if($>=4&&$<=29)return String.fromCharCode(97+$-4);if($>=30&&$<=38)return String($-29);if($===39)return"0";return jQ[$]??`usage ${$}`}function EQ($){return $>=4&&$<=39||$>=44&&$<=56||$>=84&&$<=87||$>=89&&$<=99}function s4($,Q){if(!Q||Q.width<=0||Q.height<=0)return $;return{...$,screen:Q}}function S0($,Q){if(!Number.isFinite($)||!Number.isFinite(Q))return"";return`${$8($)},${$8(Q)}`}function IQ($,Q){return`${f9($)},${f9(Q)}`}function $8($){return $.toFixed(3).replace(/0+$/,"").replace(/\.$/,"")}function f9($){let Q=$8($);return $>0?`+${Q}`:Q}function u9($){if($==null)return;return $===0?"ok":"error"}function xQ($){return u9($?.exitCode)?{exitCode:$?.exitCode}:{}}function qQ($){let Q=[],Z="",J=null,Y=!1;for(let X of $){if(Y){Z+=X,Y=!1;continue}if(X==="\\"&&J!=="'"){Y=!0;continue}if((X==="'"||X==='"')&&J===null){J=X;continue}if(X===J){J=null;continue}if(/\s/.test(X)&&J===null){if(Z)Q.push(Z),Z="";continue}Z+=X}if(Z)Q.push(Z);return Q}function SQ($){if($[0]==="bash"&&$[1]==="-c"&&$[2]?.startsWith("echo "))return!0;if($[0]==="bash"&&$[1]==="-c"&&$[2]?.startsWith("rm -f "))return!0;if($[0]==="rm"&&$[1]==="-f")return!0;return!1}function wQ($){let Q=$.findIndex((J)=>J==="simctl");if(Q<0||$[Q-1]!=="xcrun")return null;let Z=$[Q+1];if(!Z)return null;return{verb:Z,args:$.slice(Q+2)}}function yQ($){let Q=$.findIndex((J)=>J==="serve-sim"||/(?:^|\/)serve-sim(?:\.js)?$/.test(J));if(Q<0)return null;let Z=$[Q+1];if(!Z)return null;return{verb:Z,args:$.slice(Q+2)}}function kQ($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if((Z==="-d"||Z==="--device")&&$[Q+1])return $[Q+1]}return}function n0($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if(Z==="-d"||Z==="--device"){Q++;continue}if(Z.startsWith("-"))continue;return Z}return}function fQ($){if($.includes("--list-webcams"))return"list-webcams";if($.includes("--stop-webcam"))return"stop-webcam";return n0($)}function vQ($){let Q=fQ($);if(Q==="status"||Q==="list-webcams"||Q==="stop-webcam")return Q;return"start"}var c9=262144;class l extends Error{status;code;constructor($,Q,Z){super($);this.status=Q;this.code=Z;this.name="WebRtcSignalingError"}}function J8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function Y8($){if(typeof $!=="string"||!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test($))throw new l("Invalid WebRTC session ID",400,"invalid_session_id");return $}function p9($,Q,Z){if($===void 0)return;if(typeof $!=="string"||$.length>Z)throw new l(`Invalid ${Q}`,400,"invalid_offer");return $}function bQ($){if($===void 0)return;if(!Array.isArray($)||$.length>16)throw new l("Invalid ICE servers",400,"invalid_offer");return $.map((Q)=>{if(!J8(Q)||!Array.isArray(Q.urls)||Q.urls.length===0||Q.urls.length>16)throw new l("Invalid ICE server",400,"invalid_offer");let Z=Q.urls.map((X)=>{if(typeof X!=="string"||X.length===0||X.length>2048||!/^(stun|stuns|turn|turns):/i.test(X))throw new l("Invalid ICE server URL",400,"invalid_offer");return X}),J=p9(Q.username,"ICE username",1024),Y=p9(Q.credential,"ICE credential",1024);return{urls:Z,...J!==void 0?{username:J}:{},...Y!==void 0?{credential:Y}:{}}})}function m9($){if(!J8($)||$.type!=="offer")throw new l("Expected a WebRTC offer",400,"invalid_offer");if(typeof $.sdp!=="string"||$.sdp.length===0||$.sdp.length>245760)throw new l("Invalid WebRTC offer SDP",400,"invalid_offer");let Q=$.codec;if(Q!==void 0&&Q!=="vp8"&&Q!=="vp9"&&Q!=="h264")throw new l("Invalid WebRTC codec",400,"invalid_offer");return{type:"offer",sdp:$.sdp,sessionId:Y8($.sessionId),...Q!==void 0?{codec:Q}:{},...$.iceServers!==void 0?{iceServers:bQ($.iceServers)}:{}}}function l9($){if(!J8($))throw new l("Invalid WebRTC close request",400,"invalid_close_request");return{sessionId:Y8($.sessionId)}}function d9($){if($===null||$==="")return;return Y8($)}var o0={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, PATCH, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function V8($){$.writeHead(204,o0),$.end()}var hQ=4,gQ=130,i9=Buffer.from(`\r
|
|
54
|
+
`,"ascii"),uQ=0.004;function B4($){return`Drag ${S0($.startX,$.startY)} -> ${S0($.lastX,$.lastY)}`}function n9($){let Q=$.lastX-$.startX,Z=$.lastY-$.startY;return Math.hypot(Q,Z)>uQ}function o9($){return{startX:$.x,startY:$.y,lastX:$.x,lastY:$.y,moveCount:0,edge:$.edge}}function pQ($){return Buffer.from(`--frame\r
|
|
55
55
|
Content-Type: image/jpeg\r
|
|
56
56
|
Content-Length: ${$}\r
|
|
57
57
|
\r
|
|
58
|
-
`,"ascii")}function m9($){let Q=Buffer.allocUnsafe(5+$.length);return Q.writeUInt32BE($.length+1,0),Q[4]=EQ,Q.set($,5),Q}var wQ={portrait:m0.portrait,portrait_upside_down:m0.portraitUpsideDown,landscape_left:m0.landscapeLeft,landscape_right:m0.landscapeRight};function $8($){if($.writableEnded||$.destroyed||!$.writableNeedDrain)return Promise.resolve();return new Promise((Q)=>{let Z=()=>{J(),Q()},J=()=>{$.off("drain",Z),$.off("close",Z),$.off("error",Z)};$.once("drain",Z),$.once("close",Z),$.once("error",Z)})}function SQ($,Q){if($.writableEnded||$.destroyed)return Promise.resolve();return new Promise((Z)=>{let J=!1,Y=()=>{if(J)return;J=!0,$.off("close",Y),$.off("error",Y),Z()};$.once("close",Y),$.once("error",Y);try{$.write(Q,Y)}catch{Y()}})}function Q8($,Q,Z=new l("WebRTC signaling body is too large",413,"body_too_large")){return new Promise((J,Y)=>{let X=[],G=0,H=!1,K=(W)=>{if(H)return;H=!0,Y(W)};$.on("data",(W)=>{if(H)return;let z=Buffer.isBuffer(W)?W:Buffer.from(W);if(G+=z.length,G>Q){K(Z);return}X.push(z)}),$.on("end",()=>{if(H)return;H=!0,J(Buffer.concat(X))}),$.on("aborted",()=>K(new l("Request aborted",400,"request_aborted"))),$.on("error",K)})}function l9($){let Q=$.headers["content-type"];return(Array.isArray(Q)?Q[0]:Q)?.split(";",1)[0]?.trim().toLowerCase()==="application/json"}function Z8($,Q){try{return JSON.parse($.toString("utf8"))}catch{throw new l("Malformed JSON request body",400,Q)}}class d9{udid;capture;hid;captureStart;phase="unstarted";width=0;height=0;orientation="portrait";latestJpegBuffer=null;latestJpegLength=0;hidSockets=new Set;touchGestureLog;encoderSettings;streamSettingsUpdate=Promise.resolve();constructor($,Q){this.udid=$;let Z=M9(Q);this.encoderSettings=H9(Z),this.hid=new p4($),this.capture=new c4($,this.encoderSettings)}start(){if(this.phase==="running")return this.captureStart??Promise.resolve();if(this.phase==="stopped")return Promise.reject(Error("Capture session is stopped"));return this.phase="running",this.captureStart=this.capture.start(),this.captureStart}close(){if(this.phase!=="running")return;for(let $ of this.hidSockets)$.close();this.hidSockets.clear(),this.capture.stop().catch(()=>{}),this.phase="stopped"}onSharedMjpegFrame($){let{width:Q,height:Z,data:J}=$;if(this.updateScreenSize(Q,Z),!this.latestJpegBuffer||this.latestJpegBuffer.length<J.length){let Y=this.latestJpegBuffer?.length??0;this.latestJpegBuffer=Buffer.allocUnsafe(Math.max(J.length,Y*2))}this.latestJpegBuffer.set(J,0),this.latestJpegLength=J.length}async waitForCapture(){if(await this.captureStart,this.phase!=="running")throw Error("Capture session is stopped")}latestJpeg(){if(!this.latestJpegBuffer)return null;return this.latestJpegBuffer.subarray(0,this.latestJpegLength)}async writeMjpegFrame($,Q){if($.writableEnded||$.destroyed)return;let Z=xQ(Q.length),J=Buffer.allocUnsafe(Z.length+Q.length+g9.length);Z.copy(J,0),J.set(Q,Z.length),g9.copy(J,Z.length+Q.length),$.write(J),await $8($)}handleMjpeg($,Q){let Z=new URL($.url??"","http://x").searchParams.get("raw")==="1";Q.writeHead(200,{"Content-Type":Z?"application/octet-stream":"multipart/x-mixed-replace; boundary=frame","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...i0}),(async()=>{let J=()=>{},Y=!1,X=()=>{Y=!0,J()};$.once("aborted",X),Q.once("close",X),Q.once("error",X);try{if(await this.waitForCapture(),Y||Q.writableEnded||Q.destroyed)return;let G=this.latestJpeg();if(G)await this.writeMjpegFrame(Q,G);let H=await this.capture.subscribeMjpeg(async(W)=>{if(this.onSharedMjpegFrame(W),await $8(Q),!Q.writableEnded&&!Q.destroyed)await this.writeMjpegFrame(Q,W.data)}),K=!1;if(J=()=>{if(K)return;K=!0,H().catch(()=>{})},Y||Q.writableEnded||Q.destroyed)J()}catch{J(),Q.destroy()}})()}handleAvcc($,Q){Q.writeHead(200,{"Content-Type":"application/octet-stream","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...i0}),(async()=>{let Z=()=>{},J=!1,Y=()=>{J=!0,Z()};$.once("aborted",Y),Q.once("close",Y),Q.once("error",Y);try{if(await this.waitForCapture(),J||Q.writableEnded||Q.destroyed)return;let X=!1,G=!1,H,K=()=>{G=!0;let B=H;if(H=void 0,B)B().catch(()=>{})};Z=K;let W=this.latestJpeg();if(W)X=!0,Q.write(m9(W));else if(H=await this.capture.subscribeMjpeg(async(B)=>{if(X||Q.writableEnded||Q.destroyed){K();return}this.onSharedMjpegFrame(B),X=!0,Q.write(m9(B.data)),K()}),G)K();if(J||Q.writableEnded||Q.destroyed){K();return}let z=await this.capture.subscribeAvcc(async(B)=>{if(this.updateScreenSize(B.width,B.height),!X)X=!0,K();if(await $8(Q),!Q.writableEnded&&!Q.destroyed)await SQ(Q,B.data)}),L=!1;if(Z=()=>{if(L)return;L=!0,K(),z().catch(()=>{})},J||Q.writableEnded||Q.destroyed)Z()}catch{Z(),Q.destroy()}})()}handleConfig($,Q){this.sendJson(Q,200,this.screenConfig())}handleHealth($,Q){this.sendJson(Q,200,{status:"ok"})}async handleStreamSettings($,Q){if($.method==="GET"){if(await this.streamSettingsUpdate,!Q.writableEnded&&!Q.destroyed)this.sendJson(Q,200,this.encoderSettings);return}if($.method!=="PATCH"){this.sendJson(Q,405,{error:"method_not_allowed"});return}if(!l9($)){this.sendJson(Q,415,{error:"unsupported_media_type"});return}try{let Z=await Q8($,16384,new l("Stream settings body is too large",413,"body_too_large")),J=z9(Z8(Z,"invalid_stream_settings"));if(!J)throw new l("Invalid stream settings",400,"invalid_stream_settings");let Y=await this.updateStreamSettings(J);if(!Q.writableEnded&&!Q.destroyed)this.sendJson(Q,200,Y)}catch(Z){if(Q.writableEnded||Q.destroyed)return;let J=Z instanceof l?Z.status:500,Y=Z instanceof l?Z.code:"stream_settings_failed";this.sendJson(Q,J,{error:Y})}}updateStreamSettings($){let Q=this.streamSettingsUpdate.then(async()=>{let Z=b4({...this.encoderSettings,...$},this.encoderSettings);return await this.capture.updateStreamSettings(Z),this.encoderSettings=Z,Z});return this.streamSettingsUpdate=Q.then(()=>{},()=>{}),Q}async handleWebRTCOffer($,Q){let Z,J=!1,Y,X=()=>{if(!Z)return Promise.resolve();return Y??=this.capture.closeWebRTCSession(Z),Y},G=()=>{if(!Q.writableFinished)X()};Q.once("close",G);try{if($.method!=="POST")throw new l("WebRTC offers require POST",405,"method_not_allowed");if(!l9($))throw new l("WebRTC offers require application/json",415,"unsupported_media_type");let H=await Q8($,v9),K=h9(Z8(H,"invalid_offer"));if(Z=K.sessionId,await this.waitForCapture(),await this.refreshScreenSizeFromNative())this.broadcastConfig();let W=await this.capture.handleWebRTCOffer(K);if(J=!0,Q.writableEnded||Q.destroyed){await X();return}this.sendJson(Q,200,W)}catch(H){if(J)await X();if(Q.writableEnded||Q.destroyed)return;let K=H instanceof Error&&H.message.includes("WebRTC signaling already in progress"),W=H instanceof l?H.status:K?409:500,z=H instanceof l?H.code:K?"webrtc_session_busy":"webrtc_offer_failed";this.sendJson(Q,W,{error:z,message:H instanceof Error?H.message:String(H)})}finally{if(Q.writableFinished)Q.off("close",G)}}async handleWebRTCClose($,Q){try{if($.method!=="POST")throw new l("WebRTC close requires POST",405,"method_not_allowed");let Z=await Q8($,4096),J=u9(Z8(Z,"invalid_close_request"));if(await this.capture.closeWebRTCSession(J.sessionId),Q.writableEnded||Q.destroyed)return;Q.writeHead(204,i0),Q.end()}catch(Z){if(Q.writableEnded||Q.destroyed)return;let J=Z instanceof l?Z.status:400,Y=Z instanceof l?Z.code:"invalid_close_request";this.sendJson(Q,J,{error:Y,message:Z instanceof Error?Z.message:String(Z)})}}handleOptions($,Q){J8(Q)}handleAx($,Q){return this.serveAxJson(Q,()=>z4(this.udid),"ax_unavailable")}handleForeground($,Q){return this.serveAxJson(Q,()=>H4(this.udid),"foreground_unavailable")}async serveAxJson($,Q,Z){try{let J=await Q();if($.writableEnded)return;this.sendJsonString($,200,J)}catch(J){if($.writableEnded)return;this.sendJson($,503,{error:Z,message:J instanceof Error?J.message:String(J)})}}attachHidSocket($){this.hidSockets.add($);let Q=this.configFrame();if(Q)$.send(Q);$.on("message",(Z)=>this.handleHidMessage(Buffer.isBuffer(Z)?Z:Buffer.from(Z))),$.on("close",()=>this.hidSockets.delete($)),$.on("error",()=>this.hidSockets.delete($))}async handleHidMessage($){if($.length<1)return;let Q=$[0],Z=$.length>1?$.subarray(1):null,J=()=>{if(!Z)return null;try{return JSON.parse(Z.toString("utf8"))}catch{return null}},Y=this.width,X=this.height;switch(Q){case 3:{let G=J();if(G)this.recordTouchEvent(G),this.hid.touch(G.type,G.x,G.y,Y,X,G.edge??0);break}case 4:{let G=J();if(!G)break;if(this.recordHidEvent(Q,G),G.page!=null&&G.usage!=null)this.hid.buttonHid(G.page,G.usage,G.phase??"press");else this.hid.button(G.button);break}case 5:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.multiTouch(G.type,G.x1,G.y1,G.x2,G.y2,Y,X);break}case 6:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.key(G.type,G.usage);break}case 7:{let G=J();if(!G)break;let H=wQ[G.orientation];if(H!=null&&await this.hid.orientation(H)){if(this.recordHidEvent(Q,G),G.orientation!==this.orientation)this.orientation=G.orientation,this.broadcastConfig()}break}case 8:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.caDebug(G.option,G.enabled);break}case 9:this.recordHidEvent(Q,{}),this.hid.memoryWarning();break;case 10:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.digitalCrown(G.delta);break}case 11:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.scroll(G.dx*Y,G.dy*X,Y,X,G.x,G.y);break}case 12:this.recordHidEvent(Q,{}),this.hid.softwareKeyboard();break}}recordTouchEvent($){if($.type==="begin"){this.touchGestureLog=c9($);return}if($.type==="move"){let Q=this.touchGestureLog;if(!Q)Q=c9($),this.touchGestureLog=Q;if(Q.lastX=$.x,Q.lastY=$.y,Q.moveCount++,$.edge!=null)Q.edge=$.edge;if(p9(Q))if(Q.eventId==null){let Z=W0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:F4(Q),details:this.touchGestureDetails(Q,"drag","move")});Q.eventId=Z.id}else t4(Q.eventId,{kind:"drag",action:"drag",summary:F4(Q),details:this.touchGestureDetails(Q,"drag","move")},{notify:!1});return}if($.type==="end"){let Q=this.touchGestureLog;if(Q){if(Q.lastX=$.x,Q.lastY=$.y,$.edge!=null)Q.edge=$.edge;if(Q.moveCount>0&&p9(Q))if(Q.eventId==null)W0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:F4(Q),details:this.touchGestureDetails(Q,"drag","end")});else t4(Q.eventId,{kind:"drag",action:"drag",summary:F4(Q),details:this.touchGestureDetails(Q,"drag","end")});else W0({device:this.udid,source:"hid",kind:"tap",action:"tap",summary:`Tap ${x0($.x,$.y)}`,details:this.touchGestureDetails(Q,"tap")});this.touchGestureLog=void 0;return}}this.recordHidEvent(3,$)}eventLogScreen(){return this.width>0&&this.height>0?{width:this.width,height:this.height}:void 0}touchGestureDetails($,Q,Z){return{type:Q,...Z?{phase:Z}:{},start:{x:$.startX,y:$.startY},current:{x:$.lastX,y:$.lastY},moveCount:$.moveCount,...$.edge!=null?{edge:$.edge}:{},...this.eventLogScreen()?{screen:this.eventLogScreen()}:{}}}recordHidEvent($,Q){let Z=S9(this.udid,$,Q,this.eventLogScreen());if(Z)W0(Z)}screenConfig(){return{width:this.width,height:this.height,orientation:this.orientation}}configFrame(){if(this.width===0&&this.height===0)return null;return Buffer.concat([Buffer.from([IQ]),Buffer.from(JSON.stringify(this.screenConfig()))])}async refreshScreenSizeFromNative(){let{width:$,height:Q}=await this.capture.screenSize();if(!$||!Q||$===this.width&&Q===this.height)return!1;return this.width=$,this.height=Q,!0}updateScreenSize($,Q){if(!$||!Q||$===this.width&&Q===this.height)return;this.width=$,this.height=Q,this.broadcastConfig()}broadcastConfig(){let $=this.configFrame();if(!$)return;for(let Q of this.hidSockets)Q.send($)}sendJson($,Q,Z){this.sendJsonString($,Q,JSON.stringify(Z))}sendJsonString($,Q,Z){let J=Buffer.from(Z,"utf8");$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-cache, no-store","Content-Length":String(J.length),...i0}),$.end(J)}}var L0=new Map;function n0($,Q){let Z=L0.get($);if(!Z){let J=new d9($,Q);Z=J,L0.set($,J);try{J.start().catch(()=>{if(L0.get($)!==J)return;J.close(),L0.delete($)})}catch(Y){throw J.close(),L0.delete($),Y}}return Z}function Y8($){let Q=L0.get($);if(Q)Q.close(),L0.delete($)}var a0=s$(Q6(),1),jJ=a0.default("serve-sim:cli"),RJ=a0.default("serve-sim:helper"),CJ=a0.default("serve-sim:state"),r0=a0.default("serve-sim:mw");import{execFileSync as U4}from"child_process";import{createHash as V6}from"crypto";import{existsSync as s,mkdirSync as W6,readdirSync as F7,readFileSync as G0,renameSync as z6,statSync as H6,unlinkSync as Z6}from"fs";import{tmpdir as M6}from"os";import{basename as F6,dirname as _8,join as i}from"path";import{inflateSync as _7}from"zlib";var N8="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",_6="/Library/Developer/DeviceKit/Chrome",J6="com.apple.dt.devicekit.chrome.",Y6=i(M6(),"serve-sim-devicekit-chrome"),X6=i(M6(),"serve-sim-device-placeholder-assets"),z0="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",N7="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",G6={"vision-pro":{paths:[i(z0,"com.apple.vision-pro.icns"),i(N7,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[i(z0,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[i(z0,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[i(z0,"com.apple.ipad-air-m3-1.icns")]}},K8=null,V8=new Map,W8=new Map,z8=new Map,H8=null,M8=new Map;function j4($){return $.startsWith(J6)?$.slice(J6.length):$}function L8($){let Q=typeof $==="string"?$:$.toString("latin1"),Z=/\/CropBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q)??/\/MediaBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q);if(!Z)return null;let J=Number(Z[1]),Y=Number(Z[2]),X=Number(Z[3]),G=Number(Z[4]),H=Math.abs(X-J),K=Math.abs(G-Y);return H>0&&K>0?{width:H,height:K}:null}function L7($,Q){let Z=w7($);if(Z)return Z;let J=typeof $.framebufferMask==="string"?$.framebufferMask:null;if(!J)return null;let Y=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Y)return null;let X=i(Y,`${J}.pdf`);if(!s(X))return null;let G=L8(G0(X));if(!G)return null;let H=S7(Q);return{width:G.width/H,height:G.height/H}}function N6($){let Q=B8($),Z=Q;if(W8.has(Z))return W8.get(Z)??null;let J=A7(Q);return W8.set(Z,J),J}function L6($){let Q=B8($);if(z8.has(Q))return z8.get(Q)??null;let Z=B7($);return z8.set(Q,Z),Z}function B7($){let Q=R7($),Z=Q?A6(Q):null,J=C7(Z)??D7($.name);if(!J)return null;let Y=O6(J);return Y?{name:J,width:Y.width,height:Y.height}:null}function B6($,Q){let Z=j4($.searchParams.get("chrome")??""),J=$.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(Z)||!J){k0(Q,400,"Invalid chrome asset request");return}let Y=C6(Z);if(!Y||!Y.allowedImages.has(J)||J.includes("/")){k0(Q,404,"Chrome asset not found");return}let X=U8(Z,J);if(!s(X)){k0(Q,404,"Chrome asset not found");return}try{let G=D6(Z,J,X),H=G0(G);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(H.byteLength)}),Q.end(H)}catch(G){k0(Q,500,G instanceof Error?G.message:"Failed to render chrome asset")}}function U6($,Q){let Z=$.searchParams.get("name")??"";try{let J=O6(Z);if(!J){k0(Q,404,"Placeholder asset not found");return}let Y=G0(J.pngPath);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(Y.byteLength)}),Q.end(Y)}catch(J){k0(Q,500,J instanceof Error?J.message:"Failed to render placeholder asset")}}function O6($){if(!/^[A-Za-z0-9._-]+$/.test($))return null;if(M8.has($))return M8.get($)??null;let Q=U7($),Z=Q?y7($,Q):null;return M8.set($,Z),Z}function U7($){let Z=O7($)?.paths.find((Y)=>s(Y));if(Z)return Z;if(!R6().some((Y)=>Y.iconName===$))return null;let J=i(z0,`${$}.icns`);return s(J)?J:null}function O7($){return Object.prototype.hasOwnProperty.call(G6,$)?G6[$]:null}function A7($){let Q=j6($);if(!s(Q))return null;let Z=A6(Q);if(!Z?.chromeIdentifier)return null;let J=C6(Z.chromeIdentifier);if(!J)return null;let Y=null;if(J.compositeImage)Y=F8(J.identifier,J.compositeImage);let X=J.compositeImage?v7(J.identifier,J.compositeImage):null,G=(X&&Z.framebufferMaskSize?f7(Z.framebufferMaskSize,X):null)??Z.screenSize??(Y?{width:Y.width-J.insets.left-J.insets.right,height:Y.height-J.insets.top-J.insets.bottom}:null);if(!G||G.width<=0||G.height<=0)return null;let H=Y??{width:G.width+J.insets.left+J.insets.right,height:G.height+J.insets.top+J.insets.bottom},K={x:J.devicePadding.left,y:J.devicePadding.top,width:H.width,height:H.height},W={width:H.width+J.devicePadding.left+J.devicePadding.right,height:H.height+J.devicePadding.top+J.devicePadding.bottom},z={x:K.x+(H.width-G.width)/2,y:K.y+(H.height-G.height)/2,width:G.width,height:G.height},L=X?Math.max(0,X.radius-(X.width-G.width)/2):J.innerCornerRadius,B=J.slice?F8(J.identifier,J.slice.topLeft):null,U=J.identifier.startsWith("watch"),M=J.buttons.flatMap((D)=>{let I=F8(J.identifier,D.image);if(!I)return[];let E=I7(D,I,H,J.devicePadding),O={x:I.width>0?(D.rolloverOffset.x-D.normalOffset.x)/I.width:0,y:I.height>0?(D.rolloverOffset.y-D.normalOffset.y)/I.height:0};return[{name:D.name,image:D.image,imageDown:D.imageDown,onTop:D.onTop||U,frame:{...E,...I},hover:O,usagePage:D.usagePage,usage:D.usage}]});return{identifier:J.identifier,frame:W,body:K,screen:z,insets:J.insets,outerCornerRadius:J.outerCornerRadius,innerCornerRadius:J.innerCornerRadius,screenRadius:L,compositeImage:J.compositeImage,slice:J.slice,corner:B,buttons:M}}function A6($){let Q=O4($);if(!Q)return null;let Z=typeof Q.chromeIdentifier==="string"?Q.chromeIdentifier:null,J=Z?j4(Z):null;return{chromeIdentifier:J,modelIdentifier:typeof Q.modelIdentifier==="string"?Q.modelIdentifier:null,productClass:typeof Q.productClass==="string"?Q.productClass:null,screenSize:J?L7({...Q,__profileDir:_8($)},J):null,framebufferMaskSize:j7({...Q,__profileDir:_8($)})}}function j7($){let Q=typeof $.framebufferMask==="string"?$.framebufferMask:null,Z=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Q||!Z)return null;let J=i(Z,`${Q}.pdf`);if(!s(J))return null;return L8(G0(J))}function B8($){return q7($.deviceTypeIdentifier)??$.name}function R7($){let Q=j6(B8($));return s(Q)?Q:null}function j6($){return i(N8,`${$}.simdevicetype`,"Contents","Resources","profile.plist")}function C7($){if(!$)return null;let Q=new Set;if($.modelIdentifier)Q.add($.modelIdentifier);if($.productClass)Q.add($.productClass),Q.add(`${$.productClass}AP`);if(Q.size===0)return null;for(let Z of R6())if(Z.modelCodes.some((J)=>Q.has(J)))return Z.iconName;return null}function D7($){let Q=$.toLowerCase();if(Q.includes("vision"))return"vision-pro";if(/iphone\s+17e\b/.test(Q))return"iphone-17e";if(/ipad\s+air\s+11-inch\s+\(m4\)/.test(Q))return"ipad-air-11-inch-m4";if(/ipad\s+air\s+13-inch\s+\(m4\)/.test(Q))return"ipad-air-13-inch-m4";return null}function R6(){if(H8)return H8;let $=O4(i(z0,"MobileDevices-Info.plist"))??O4(i(_8(z0),"Info.plist")),Q=Array.isArray($?.UTExportedTypeDeclarations)?$.UTExportedTypeDeclarations:[],Z=[];for(let J of Q){let Y=Q0(J),X=r(Y.UTTypeIconFile);if(!X||!X.endsWith(".icns"))continue;let G=i(z0,X);if(!s(G))continue;let K=Q0(Y.UTTypeTagSpecification)["com.apple.device-model-code"],W=Array.isArray(K)?K.filter((z)=>typeof z==="string"&&z.length>0):[];if(W.length===0)continue;Z.push({description:r(Y.UTTypeDescription)??"",iconFile:X,iconName:F6(X,".icns"),modelCodes:W})}return H8=Z,Z}function C6($){let Q=j4($);if(!/^[A-Za-z0-9_-]+$/.test(Q))return null;if(V8.has(Q))return V8.get(Q)??null;let Z=i(_6,`${Q}.devicechrome`,"Contents","Resources","chrome.json"),J=null;try{let Y=JSON.parse(G0(Z,"utf-8"));J=T7(Y)}catch{J=null}return V8.set(Q,J),J}function T7($){let Q=typeof $.identifier==="string"?$.identifier:null;if(!Q)return null;let Z=j4(Q),J=Q0($.images),Y=Q0(J.sizing),X=Q0($.paths),G=X0(Q0(X.simpleOutsideBorder).cornerRadiusX),H={top:X0(Y.topHeight),left:X0(Y.leftWidth),bottom:X0(Y.bottomHeight),right:X0(Y.rightWidth)},K=Q0(J.devicePadding),W={top:X0(K.top),left:X0(K.left),bottom:X0(K.bottom),right:X0(K.right)},z=typeof J.composite==="string"?J.composite:null,L=P7(J),B=Array.isArray($.inputs)?$.inputs.flatMap((M)=>{let D=E7(Q0(M));return D?[D]:[]}):[],U=new Set;for(let M of Object.values(J))if(typeof M==="string")U.add(M);for(let M of B)U.add(M.image);if(Array.isArray($.inputs))for(let M of $.inputs){let D=Q0(M);if(typeof D.imageDown==="string")U.add(D.imageDown)}return{identifier:Z,insets:H,devicePadding:W,outerCornerRadius:G,innerCornerRadius:Math.max(G-Math.max(H.left,H.top),0),compositeImage:z,slice:L,buttons:B,allowedImages:U}}function P7($){let Q=r($.topLeft),Z=r($.top),J=r($.topRight),Y=r($.right),X=r($.bottomRight),G=r($.bottom),H=r($.bottomLeft),K=r($.left);if(!Q||!Z||!J||!Y||!X||!G||!H||!K)return null;return{topLeft:Q,top:Z,topRight:J,right:Y,bottomRight:X,bottom:G,bottomLeft:H,left:K}}function E7($){let Q=r($.name),Z=r($.image);if(!Q||!Z)return null;let J=r($.anchor),Y=r($.align),X=Q0($.offsets),G=K6(Q0(X.normal)),H=K6(Q0(X.rollover));return{name:Q,image:Z,imageDown:r($.imageDown),onTop:$.onTop===!0,anchor:J==="right"||J==="top"||J==="bottom"?J:"left",align:Y==="trailing"?"trailing":"leading",normalOffset:G??H??{x:0,y:0},rolloverOffset:H??G??{x:0,y:0},usagePage:H0($.usagePage),usage:H0($.usage)}}function I7($,Q,Z,J){let{left:Y,top:X}=J,G=2*$.normalOffset.x-$.rolloverOffset.x,H=2*$.normalOffset.y-$.rolloverOffset.y,K=$.align==="trailing"?Y+Z.width+G-Q.width:Y+G;switch($.anchor){case"left":return{x:Y+$.rolloverOffset.x-Q.width/2,y:X+$.rolloverOffset.y};case"right":return{x:Y+Z.width+G,y:X+H};case"top":return{x:K,y:X+H-Q.height};case"bottom":return{x:K,y:X+Z.height+H}}}function q7($){if(!$)return null;if(!K8)K8=x7();return K8.get($)??null}function x7(){let $=new Map;try{for(let Q of F7(N8)){if(!Q.endsWith(".simdevicetype"))continue;let Z=i(N8,Q),J=O4(i(Z,"Contents","Info.plist")),Y=typeof J?.CFBundleIdentifier==="string"?J.CFBundleIdentifier:null,X=typeof J?.CFBundleName==="string"?J.CFBundleName:F6(Q,".simdevicetype");if(Y)$.set(Y,X)}}catch{}return $}function O4($){try{let Q=U4("plutil",["-convert","json","-o","-",$],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse(Q)}catch{return null}}function w7($){let Q=H0($.mainScreenWidth),Z=H0($.mainScreenHeight),J=H0($.mainScreenScale);if(!Q||!Z||!J||J<=0)return null;return{width:Q/J,height:Z/J}}function S7($){if($.startsWith("phone"))return 3;if($.startsWith("tablet"))return 2;if($.startsWith("watch"))return 2;return 1}function F8($,Q){let Z=U8($,Q);if(!s(Z))return null;return L8(G0(Z))}function U8($,Q){return i(_6,`${$}.devicechrome`,"Contents","Resources",`${Q}.pdf`)}function D6($,Q,Z){W6(Y6,{recursive:!0});let J=H6(Z),Y=V6("sha1").update($).update("\x00").update(Q).update("\x00").update(String(J.mtimeMs)).update("\x00").update(String(J.size)).digest("hex"),X=i(Y6,`${$}-${Y}.png`);if(s(X))return X;let G=`${X}.${process.pid}.tmp`;return U4("sips",["-s","format","png",Z,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4}),z6(G,X),X}function y7($,Q){W6(X6,{recursive:!0});let Z=H6(Q),J=V6("sha1").update($).update("\x00").update(Q).update("\x00").update(String(Z.mtimeMs)).update("\x00").update(String(Z.size)).digest("hex"),Y=i(X6,`${$}-${J}.png`);if(s(Y)){let H=A4(G0(Y));return{sourcePath:Q,pngPath:Y,width:H.width,height:H.height}}let X=`${Y}.${process.pid}.tmp`,G=`${Y}.${process.pid}.raw.png`;try{U4("sips",["-s","format","png",Q,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4});let H=G0(G),K=k7(H)??{x:0,y:0,...A4(H)};return U4("sips",["-c",String(K.height),String(K.width),"--cropOffset",String(K.y),String(K.x),"-s","format","png",Q,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4}),z6(X,Y),{sourcePath:Q,pngPath:Y,width:K.width,height:K.height}}finally{try{if(s(G))Z6(G)}catch{}try{if(s(X))Z6(X)}catch{}}}function A4($){if($.byteLength<24||$[0]!==137||$.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:$.readUInt32BE(16),height:$.readUInt32BE(20)}}function T6($,Q){let{width:Z,height:J}=A4($),Y=8,X=0,G=0,H=[];while(Y<$.byteLength){let D=$.readUInt32BE(Y);Y+=4;let I=$.toString("ascii",Y,Y+4);Y+=4;let E=$.subarray(Y,Y+D);if(Y+=D+4,I==="IHDR")X=E[8]??0,G=E[9]??0;else if(I==="IDAT")H.push(E);else if(I==="IEND")break}let K=G===6?4:G===4?2:0;if(X!==8||K===0||H.length===0)return null;let W=G===6,z=_7(Buffer.concat(H)),L=Z*K,B=new Uint8Array(Z*J),U=Buffer.alloc(L),M=0;for(let D=0;D<J;D++){let I=z[M++]??0,E=Buffer.from(z.subarray(M,M+L));M+=L,h7(E,U,K,I);for(let O=0;O<Z;O++){let j=O*K,R=E[j]??0,P=W?E[j+1]??0:R,N=W?E[j+2]??0:R,V=E[j+K-1]??0;if(Q(R,P,N,V))B[D*Z+O]=1}U=E}return{width:Z,height:J,mask:B}}function k7($){let{width:Q,height:Z}=A4($),J=T6($,(K,W,z,L)=>L>0);if(!J)return{x:0,y:0,width:Q,height:Z};let Y=Q,X=Z,G=-1,H=-1;for(let K=0;K<Z;K++)for(let W=0;W<Q;W++){if(!J.mask[K*Q+W])continue;if(W<Y)Y=W;if(K<X)X=K;if(W>G)G=W;if(K>H)H=K}if(G<Y||H<X)return{x:0,y:0,width:Q,height:Z};return{x:Y,y:X,width:G-Y+1,height:H-X+1}}function f7($,Q){if(Q.width<=0)return null;let Z=Math.max(1,Math.round($.width/Q.width));return{width:$.width/Z,height:$.height/Z}}function v7($,Q){let Z=b7($,Q);if(!Z)return null;let J=T6(Z,(O,j,R,P)=>P>200&&O<30&&j<30&&R<30);if(!J)return null;let{width:Y,height:X,mask:G}=J,H=Math.floor(Y/2),K=Math.floor(X/2),W=(O,j)=>O>=0&&j>=0&&O<Y&&j<X&&G[j*Y+O]===1;if(!W(H,K))return null;let z=H;while(z>0&&W(z-1,K))z--;let L=H;while(L<Y-1&&W(L+1,K))L++;let B=K;while(B>0&&W(H,B-1))B--;let U=K;while(U<X-1&&W(H,U+1))U++;let M=U-B,D=(O,j)=>{let R=0;while(R<M&&!W(O,j?B+R:U-R))R++;return R},I=[D(z,!0),D(L,!0),D(z,!1),D(L,!1)],E=I.reduce((O,j)=>O+j,0)/I.length;return{x:z,y:B,width:L-z+1,height:U-B+1,radius:E}}function b7($,Q){let Z=U8($,Q);if(!s(Z))return null;try{return G0(D6($,Q,Z))}catch{return null}}function h7($,Q,Z,J){for(let Y=0;Y<$.byteLength;Y++){let X=Y>=Z?$[Y-Z]:0,G=Q[Y]??0,H=Y>=Z?Q[Y-Z]:0;switch(J){case 0:break;case 1:$[Y]=$[Y]+X&255;break;case 2:$[Y]=$[Y]+G&255;break;case 3:$[Y]=$[Y]+Math.floor((X+G)/2)&255;break;case 4:$[Y]=$[Y]+u7(X,G,H)&255;break;default:throw Error(`Unsupported PNG filter ${J}`)}}}function u7($,Q,Z){let J=$+Q-Z,Y=Math.abs(J-$),X=Math.abs(J-Q),G=Math.abs(J-Z);if(Y<=X&&Y<=G)return $;return X<=G?Q:Z}function k0($,Q,Z){$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-store"}),$.end(JSON.stringify({ok:!1,error:Z}))}function X0($){return H0($)??0}function H0($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="string"&&$.trim()){let Q=Number($);return Number.isFinite(Q)?Q:null}return null}function r($){return typeof $==="string"&&$?$:null}function Q0($){return $&&typeof $==="object"&&!Array.isArray($)?$:{}}function K6($){let Q=H0($.x),Z=H0($.y);return Q===null||Z===null?null:{x:Q,y:Z}}import{exec as g7}from"child_process";import{createHash as I6,timingSafeEqual as p7}from"crypto";function P6($){let Q=new TextDecoder;if(typeof $==="string")return $;if($ instanceof ArrayBuffer)return Q.decode(new Uint8Array($));if(ArrayBuffer.isView($))return Q.decode(new Uint8Array($.buffer,$.byteOffset,$.byteLength));return String($)}function E6($){return $.headers.get("host")??new URL($.url).host}var c7=1e4;function m7($,Q){let Z=I6("sha256").update($).digest(),J=I6("sha256").update(Q).digest();return p7(Z,J)}function l7($,Q,Z){let J=!1,Y=new Map,X=Z.ssePrefixes??[],G=(W)=>{if($.readyState===$.OPEN)$.send(JSON.stringify(W))},H=setTimeout(()=>{if(!J)$.close()},c7);H.unref?.();let K=(W,z)=>{if(Y.has(W))return;let L=z.split("?")[0];if(!z.startsWith("/")||!X.some((E)=>L===E)){G({sub:W,end:!0,error:"path not allowed"});return}if(!Z.onSseRequest){G({sub:W,end:!0,error:"sse requests not supported"});return}let B=!0,U=!1,M=null,D=(E)=>{if(U)return;U=!0,G(E?{sub:W,end:!0,error:E}:{sub:W,end:!0})},I={destroy(){B=!1,M?.cancel().catch(()=>{})}};Y.set(W,I),(async()=>{try{let E=await Z.onSseRequest(z,Q);if(!B)return;if(!E?.body){D();return}let O=new TextDecoder;M=E.body.getReader();while(B){let{done:j,value:R}=await M.read();if(j)break;G({sub:W,data:O.decode(R,{stream:!0})})}if(B){let j=O.decode();if(j)G({sub:W,data:j})}}catch{if(B)D();return}finally{if(B=!1,M)try{M.releaseLock()}catch{}if(Y.get(W)===I)Y.delete(W),D()}})()};$.on("message",(W)=>{let z;try{z=JSON.parse(P6(W))}catch{return}if(!J){if(typeof z.token==="string"&&m7(z.token,Z.execToken))J=!0,clearTimeout(H),G({ready:!0});else $.close();return}if(typeof z.unsub==="number"){Y.get(z.unsub)?.destroy(),Y.delete(z.unsub);return}if(typeof z.sub==="number"&&typeof z.path==="string"){K(z.sub,z.path);return}if(typeof z.id==="number"&&z.ui!==void 0){let{id:U}=z;if(!Z.onUiRequest){G({id:U,error:"ui requests not supported"});return}Z.onUiRequest(z.ui).then((M)=>G({id:U,...M})).catch((M)=>G({id:U,error:M instanceof Error?M.message:String(M)}));return}if(typeof z.id!=="number"||typeof z.command!=="string"||!z.command)return;let{id:L,command:B}=z;g7(B,{maxBuffer:16777216},(U,M,D)=>{let I={id:L,stdout:M.toString(),stderr:D.toString(),exitCode:U?U.code??1:0};try{Z.onCommandResult?.(B,I)}catch{}G(I)})}),$.on("error",()=>$.close()),$.on("close",()=>{clearTimeout(H);for(let W of Y.values())W.destroy();Y.clear()})}function q6($){return function(Z,J){let Y=new URL(Z.url);if(Y.pathname!==$.path&&Y.pathname!==`${$.path}/`)return!1;let X=Z.headers.get("origin");if(X)try{if(new URL(X).host!==E6(Z))return J.close(),!0}catch{return J.close(),!0}return l7(J,Z,$),!0}}import{execFile as n7}from"child_process";import{existsSync as S6}from"fs";import{join as O8,resolve as o7}from"path";import{fileURLToPath as d7}from"url";import{dirname as i7}from"path";import{WebSocketServer as dJ}from"ws";function x6($){return i7(d7($))}var A8=x6(import.meta.url),y6=["extra-small","small","medium","large","extra-large","extra-extra-large","extra-extra-extra-large","accessibility-medium","accessibility-large","accessibility-extra-large","accessibility-extra-extra-large","accessibility-extra-extra-extra-large"],a7=["none","grayscale","red-green","green-red","blue-yellow"],r7={protanopia:"red-green",deuteranopia:"green-red",tritanopia:"blue-yellow"},t0=["on","off"],t7=new Set(["on","true","enabled","1","yes"]),s7=new Set(["off","false","disabled","0","no"]),O0={appearance:{via:"appearance",values:["light","dark"]},"liquid-glass":{via:"ax",values:["clear","tinted"]},"color-filter":{via:"ax",values:a7,aliases:r7},"text-size":{via:"content_size",values:y6,extraValues:["increment","decrement"]},"reduce-motion":{via:"ax",values:t0,toggle:!0},"increase-contrast":{via:"increase_contrast",values:t0,toggle:!0},"show-borders":{via:"ax",values:t0,toggle:!0},"reduce-transparency":{via:"ax",values:t0,toggle:!0},voiceover:{via:"ax",values:t0,toggle:!0}};function k6($,Q){let Z=O0[$];if(!Z)return null;let J=Q.toLowerCase();if(Z.toggle){if(t7.has(J))return"on";if(s7.has(J))return"off";return null}let Y=Z.aliases?.[J]??J;if(Z.values.includes(Y))return Y;if(Z.extraValues?.includes(Y))return Y;return null}function w6(){let $=[O8(A8,"..","dist","simax","serve-sim-ax-settings"),O8(A8,"simax","serve-sim-ax-settings")];for(let Q of $)if(S6(Q))return o7(Q);return null}var R4=null;function e7(){return R4??=(async()=>{let $=w6();if($)return $;let Q=O8(A8,"..","Sources","SimAXSettings","build.sh");if(!S6(Q))throw Error("sim-ax-settings binary not found — this build of serve-sim does not "+"include the simulator settings helper. Reinstall from a recent release.");console.error("[serve-sim] building sim-ax-settings (one-time)…"),await j8("bash",[Q]);let Z=w6();if(!Z)throw Error("Build succeeded but sim-ax-settings not found.");return Z})(),R4.catch(()=>{R4=null}),R4}function j8($,Q){return new Promise((Z,J)=>{n7($,Q,{encoding:"utf-8",maxBuffer:4194304},(Y,X,G)=>{if(Y)J(Error(String(G).trim()||Y.message));else Z(String(X).trim())})})}function f6($,Q,Z){let J=["simctl","ui",$,Q];if(Z!==void 0)J.push(Z);return j8("xcrun",J)}async function R8($,...Q){let Z=await e7();return j8("xcrun",["simctl","spawn",$,Z,...Q])}function $Z($){return $==="enabled"?"on":"off"}function QZ($){return $==="on"?"enabled":"disabled"}async function ZZ($,Q){let Z=O0[Q];if(!Z)throw Error(`unknown option: ${Q}`);if(Z.via==="ax")return R8($,"get",Q);let J=(await f6($,Z.via)).toLowerCase();return Z.toggle?$Z(J):J}async function v6($,Q,Z){let J=O0[Q];if(!J)throw Error(`unknown option: ${Q}`);if(J.via==="ax"){await R8($,"set",Q,Z);return}await f6($,J.via,J.toggle?QZ(Z):Z)}async function b6($){let Q=Object.entries(O0).filter(([,X])=>X.via!=="ax"),[Z,...J]=await Promise.all([R8($,"status").then((X)=>JSON.parse(X)).catch(()=>({})),...Q.map(([X])=>ZZ($,X).catch(()=>"unsupported"))]),Y={};for(let[X,G]of Object.entries(O0))if(G.via==="ax")Y[X]=Z[X]??"unsupported";return Q.forEach(([X],G)=>{Y[X]=J[G]}),Y}var Z3=`Usage: serve-sim ui [status] [--json] [-d udid]
|
|
58
|
+
`,"ascii")}function a9($){let Q=Buffer.allocUnsafe(5+$.length);return Q.writeUInt32BE($.length+1,0),Q[4]=hQ,Q.set($,5),Q}var cQ={portrait:d0.portrait,portrait_upside_down:d0.portraitUpsideDown,landscape_left:d0.landscapeLeft,landscape_right:d0.landscapeRight};function X8($){if($.writableEnded||$.destroyed||!$.writableNeedDrain)return Promise.resolve();return new Promise((Q)=>{let Z=()=>{J(),Q()},J=()=>{$.off("drain",Z),$.off("close",Z),$.off("error",Z)};$.once("drain",Z),$.once("close",Z),$.once("error",Z)})}function mQ($,Q){if($.writableEnded||$.destroyed)return Promise.resolve();return new Promise((Z)=>{let J=!1,Y=()=>{if(J)return;J=!0,$.off("close",Y),$.off("error",Y),Z()};$.once("close",Y),$.once("error",Y);try{$.write(Q,Y)}catch{Y()}})}function G8($,Q,Z=new l("WebRTC signaling body is too large",413,"body_too_large")){return new Promise((J,Y)=>{let X=[],G=0,H=!1,K=(W)=>{if(H)return;H=!0,Y(W)};$.on("data",(W)=>{if(H)return;let z=Buffer.isBuffer(W)?W:Buffer.from(W);if(G+=z.length,G>Q){K(Z);return}X.push(z)}),$.on("end",()=>{if(H)return;H=!0,J(Buffer.concat(X))}),$.on("aborted",()=>K(new l("Request aborted",400,"request_aborted"))),$.on("error",K)})}function r9($){let Q=$.headers["content-type"];return(Array.isArray(Q)?Q[0]:Q)?.split(";",1)[0]?.trim().toLowerCase()==="application/json"}function K8($,Q){try{return JSON.parse($.toString("utf8"))}catch{throw new l("Malformed JSON request body",400,Q)}}class t9{udid;capture;hid;captureStart;phase="unstarted";width=0;height=0;orientation="portrait";latestJpegBuffer=null;latestJpegLength=0;hidSockets=new Set;touchGestureLog;encoderSettings;streamSettingsUpdate=Promise.resolve();constructor($,Q){this.udid=$;let Z=B9(Q);this.encoderSettings=L9(Z),this.hid=new d4($),this.capture=new i4($,this.encoderSettings)}start(){if(this.phase==="running")return this.captureStart??Promise.resolve();if(this.phase==="stopped")return Promise.reject(Error("Capture session is stopped"));return this.phase="running",this.captureStart=this.capture.start(),this.captureStart}close(){if(this.phase!=="running")return;for(let $ of this.hidSockets)$.close();this.hidSockets.clear(),this.capture.stop().catch(()=>{}),this.phase="stopped"}onSharedMjpegFrame($){let{width:Q,height:Z,data:J}=$;if(this.updateScreenSize(Q,Z),!this.latestJpegBuffer||this.latestJpegBuffer.length<J.length){let Y=this.latestJpegBuffer?.length??0;this.latestJpegBuffer=Buffer.allocUnsafe(Math.max(J.length,Y*2))}this.latestJpegBuffer.set(J,0),this.latestJpegLength=J.length}async waitForCapture(){if(await this.captureStart,this.phase!=="running")throw Error("Capture session is stopped")}latestJpeg(){if(!this.latestJpegBuffer)return null;return this.latestJpegBuffer.subarray(0,this.latestJpegLength)}async writeMjpegFrame($,Q){if($.writableEnded||$.destroyed)return;let Z=pQ(Q.length),J=Buffer.allocUnsafe(Z.length+Q.length+i9.length);Z.copy(J,0),J.set(Q,Z.length),i9.copy(J,Z.length+Q.length),$.write(J),await X8($)}handleMjpeg($,Q){let Z=new URL($.url??"","http://x").searchParams.get("raw")==="1";Q.writeHead(200,{"Content-Type":Z?"application/octet-stream":"multipart/x-mixed-replace; boundary=frame","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...o0}),(async()=>{let J=()=>{},Y=!1,X=()=>{Y=!0,J()};$.once("aborted",X),Q.once("close",X),Q.once("error",X);try{if(await this.waitForCapture(),Y||Q.writableEnded||Q.destroyed)return;let G=this.latestJpeg();if(G)await this.writeMjpegFrame(Q,G);let H=await this.capture.subscribeMjpeg(async(W)=>{if(this.onSharedMjpegFrame(W),await X8(Q),!Q.writableEnded&&!Q.destroyed)await this.writeMjpegFrame(Q,W.data)}),K=!1;if(J=()=>{if(K)return;K=!0,H().catch(()=>{})},Y||Q.writableEnded||Q.destroyed)J()}catch{J(),Q.destroy()}})()}handleAvcc($,Q){Q.writeHead(200,{"Content-Type":"application/octet-stream","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...o0}),(async()=>{let Z=()=>{},J=!1,Y=()=>{J=!0,Z()};$.once("aborted",Y),Q.once("close",Y),Q.once("error",Y);try{if(await this.waitForCapture(),J||Q.writableEnded||Q.destroyed)return;let X=!1,G=!1,H,K=()=>{G=!0;let B=H;if(H=void 0,B)B().catch(()=>{})};Z=K;let W=this.latestJpeg();if(W)X=!0,Q.write(a9(W));else if(H=await this.capture.subscribeMjpeg(async(B)=>{if(X||Q.writableEnded||Q.destroyed){K();return}this.onSharedMjpegFrame(B),X=!0,Q.write(a9(B.data)),K()}),G)K();if(J||Q.writableEnded||Q.destroyed){K();return}let z=await this.capture.subscribeAvcc(async(B)=>{if(this.updateScreenSize(B.width,B.height),!X)X=!0,K();if(await X8(Q),!Q.writableEnded&&!Q.destroyed)await mQ(Q,B.data)}),L=!1;if(Z=()=>{if(L)return;L=!0,K(),z().catch(()=>{})},J||Q.writableEnded||Q.destroyed)Z()}catch{Z(),Q.destroy()}})()}handleConfig($,Q){this.sendJson(Q,200,this.screenConfig())}handleHealth($,Q){this.sendJson(Q,200,{status:"ok"})}async handleStreamSettings($,Q){if($.method==="GET"){if(await this.streamSettingsUpdate,!Q.writableEnded&&!Q.destroyed)this.sendJson(Q,200,this.encoderSettings);return}if($.method!=="PATCH"){this.sendJson(Q,405,{error:"method_not_allowed"});return}if(!r9($)){this.sendJson(Q,415,{error:"unsupported_media_type"});return}try{let Z=await G8($,16384,new l("Stream settings body is too large",413,"body_too_large")),J=N9(K8(Z,"invalid_stream_settings"));if(!J)throw new l("Invalid stream settings",400,"invalid_stream_settings");let Y=await this.updateStreamSettings(J);if(!Q.writableEnded&&!Q.destroyed)this.sendJson(Q,200,Y)}catch(Z){if(Q.writableEnded||Q.destroyed)return;let J=Z instanceof l?Z.status:500,Y=Z instanceof l?Z.code:"stream_settings_failed";this.sendJson(Q,J,{error:Y})}}updateStreamSettings($){let Q=this.streamSettingsUpdate.then(async()=>{let Z=p4({...this.encoderSettings,...$},this.encoderSettings);return await this.capture.updateStreamSettings(Z),this.encoderSettings=Z,Z});return this.streamSettingsUpdate=Q.then(()=>{},()=>{}),Q}async handleWebRTCOffer($,Q){let Z,J=!1,Y,X=()=>{if(!Z)return Promise.resolve();return Y??=this.capture.closeWebRTCSession(Z),Y},G=()=>{if(!Q.writableFinished)X()};Q.once("close",G);try{if($.method!=="POST")throw new l("WebRTC offers require POST",405,"method_not_allowed");if(!r9($))throw new l("WebRTC offers require application/json",415,"unsupported_media_type");let H=await G8($,c9),K=m9(K8(H,"invalid_offer"));if(Z=K.sessionId,await this.waitForCapture(),await this.refreshScreenSizeFromNative())this.broadcastConfig();let W=await this.capture.handleWebRTCOffer(K);if(J=!0,Q.writableEnded||Q.destroyed){await X();return}this.sendJson(Q,200,W)}catch(H){if(J)await X();if(Q.writableEnded||Q.destroyed)return;let K=H instanceof Error&&H.message.includes("WebRTC signaling already in progress"),W=H instanceof l?H.status:K?409:500,z=H instanceof l?H.code:K?"webrtc_session_busy":"webrtc_offer_failed";this.sendJson(Q,W,{error:z,message:H instanceof Error?H.message:String(H)})}finally{if(Q.writableFinished)Q.off("close",G)}}async handleWebRTCClose($,Q){try{if($.method!=="POST")throw new l("WebRTC close requires POST",405,"method_not_allowed");let Z=await G8($,4096),J=l9(K8(Z,"invalid_close_request"));if(await this.capture.closeWebRTCSession(J.sessionId),Q.writableEnded||Q.destroyed)return;Q.writeHead(204,o0),Q.end()}catch(Z){if(Q.writableEnded||Q.destroyed)return;let J=Z instanceof l?Z.status:400,Y=Z instanceof l?Z.code:"invalid_close_request";this.sendJson(Q,J,{error:Y,message:Z instanceof Error?Z.message:String(Z)})}}async handleWebRTCStats($,Q){if($.method!=="GET"){this.sendJson(Q,405,{error:"method_not_allowed"});return}try{let Z=d9(new URL($.url??"","http://x").searchParams.get("sessionId")),J=await this.capture.webRTCSenderStats(Z);if(Q.writableEnded||Q.destroyed)return;this.sendJson(Q,200,J)}catch(Z){if(Z instanceof l){if(Q.writableEnded||Q.destroyed)return;this.sendJson(Q,Z.status,{error:Z.code,message:Z.message});return}if(console.error(`WebRTC stats unavailable: ${Z instanceof Error?Z.message:String(Z)}`),Q.writableEnded||Q.destroyed)return;this.sendJson(Q,503,{error:"webrtc_stats_unavailable"})}}handleOptions($,Q){V8(Q)}handleAx($,Q){return this.serveAxJson(Q,()=>_4(this.udid),"ax_unavailable")}handleForeground($,Q){return this.serveAxJson(Q,()=>N4(this.udid),"foreground_unavailable")}async serveAxJson($,Q,Z){try{let J=await Q();if($.writableEnded)return;this.sendJsonString($,200,J)}catch(J){if($.writableEnded)return;this.sendJson($,503,{error:Z,message:J instanceof Error?J.message:String(J)})}}attachHidSocket($){this.hidSockets.add($);let Q=this.configFrame();if(Q)$.send(Q);$.on("message",(Z)=>this.handleHidMessage(Buffer.isBuffer(Z)?Z:Buffer.from(Z))),$.on("close",()=>this.hidSockets.delete($)),$.on("error",()=>this.hidSockets.delete($))}async handleHidMessage($){if($.length<1)return;let Q=$[0],Z=$.length>1?$.subarray(1):null,J=()=>{if(!Z)return null;try{return JSON.parse(Z.toString("utf8"))}catch{return null}},Y=this.width,X=this.height;switch(Q){case 3:{let G=J();if(G)this.recordTouchEvent(G),this.hid.touch(G.type,G.x,G.y,Y,X,G.edge??0);break}case 4:{let G=J();if(!G)break;if(this.recordHidEvent(Q,G),G.page!=null&&G.usage!=null)this.hid.buttonHid(G.page,G.usage,G.phase??"press");else this.hid.button(G.button);break}case 5:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.multiTouch(G.type,G.x1,G.y1,G.x2,G.y2,Y,X);break}case 6:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.key(G.type,G.usage);break}case 7:{let G=J();if(!G)break;let H=cQ[G.orientation];if(H!=null&&await this.hid.orientation(H)){if(this.recordHidEvent(Q,G),G.orientation!==this.orientation)this.orientation=G.orientation,this.broadcastConfig()}break}case 8:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.caDebug(G.option,G.enabled);break}case 9:this.recordHidEvent(Q,{}),this.hid.memoryWarning();break;case 10:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.digitalCrown(G.delta);break}case 11:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.scroll(G.dx*Y,G.dy*X,Y,X,G.x,G.y);break}case 12:this.recordHidEvent(Q,{}),this.hid.softwareKeyboard();break}}recordTouchEvent($){if($.type==="begin"){this.touchGestureLog=o9($);return}if($.type==="move"){let Q=this.touchGestureLog;if(!Q)Q=o9($),this.touchGestureLog=Q;if(Q.lastX=$.x,Q.lastY=$.y,Q.moveCount++,$.edge!=null)Q.edge=$.edge;if(n9(Q))if(Q.eventId==null){let Z=z0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:B4(Q),details:this.touchGestureDetails(Q,"drag","move")});Q.eventId=Z.id}else Q8(Q.eventId,{kind:"drag",action:"drag",summary:B4(Q),details:this.touchGestureDetails(Q,"drag","move")},{notify:!1});return}if($.type==="end"){let Q=this.touchGestureLog;if(Q){if(Q.lastX=$.x,Q.lastY=$.y,$.edge!=null)Q.edge=$.edge;if(Q.moveCount>0&&n9(Q))if(Q.eventId==null)z0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:B4(Q),details:this.touchGestureDetails(Q,"drag","end")});else Q8(Q.eventId,{kind:"drag",action:"drag",summary:B4(Q),details:this.touchGestureDetails(Q,"drag","end")});else z0({device:this.udid,source:"hid",kind:"tap",action:"tap",summary:`Tap ${S0($.x,$.y)}`,details:this.touchGestureDetails(Q,"tap")});this.touchGestureLog=void 0;return}}this.recordHidEvent(3,$)}eventLogScreen(){return this.width>0&&this.height>0?{width:this.width,height:this.height}:void 0}touchGestureDetails($,Q,Z){return{type:Q,...Z?{phase:Z}:{},start:{x:$.startX,y:$.startY},current:{x:$.lastX,y:$.lastY},moveCount:$.moveCount,...$.edge!=null?{edge:$.edge}:{},...this.eventLogScreen()?{screen:this.eventLogScreen()}:{}}}recordHidEvent($,Q){let Z=h9(this.udid,$,Q,this.eventLogScreen());if(Z)z0(Z)}screenConfig(){return{width:this.width,height:this.height,orientation:this.orientation}}configFrame(){if(this.width===0&&this.height===0)return null;return Buffer.concat([Buffer.from([gQ]),Buffer.from(JSON.stringify(this.screenConfig()))])}async refreshScreenSizeFromNative(){let{width:$,height:Q}=await this.capture.screenSize();if(!$||!Q||$===this.width&&Q===this.height)return!1;return this.width=$,this.height=Q,!0}updateScreenSize($,Q){if(!$||!Q||$===this.width&&Q===this.height)return;this.width=$,this.height=Q,this.broadcastConfig()}broadcastConfig(){let $=this.configFrame();if(!$)return;for(let Q of this.hidSockets)Q.send($)}sendJson($,Q,Z){this.sendJsonString($,Q,JSON.stringify(Z))}sendJsonString($,Q,Z){let J=Buffer.from(Z,"utf8");$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-cache, no-store","Content-Length":String(J.length),...o0}),$.end(J)}}var H0=new Map;function s9($){return H0.get($)}function a0($,Q){let Z=H0.get($);if(!Z){let J=new t9($,Q);Z=J,H0.set($,J);try{J.start().catch(()=>{if(H0.get($)!==J)return;J.close(),H0.delete($)})}catch(Y){throw J.close(),H0.delete($),Y}}return Z}function W8($){let Q=H0.get($);if(Q)Q.close(),H0.delete($)}var t0=X5(V6(),1),kJ=t0.default("serve-sim:cli"),fJ=t0.default("serve-sim:helper"),vJ=t0.default("serve-sim:state"),s0=t0.default("serve-sim:mw");import{execFileSync as R4}from"child_process";import{createHash as N6}from"crypto";import{existsSync as s,mkdirSync as L6,readdirSync as D7,readFileSync as K0,renameSync as B6,statSync as U6,unlinkSync as W6}from"fs";import{tmpdir as O6}from"os";import{basename as A6,dirname as O8,join as i}from"path";import{inflateSync as P7}from"zlib";var A8="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",j6="/Library/Developer/DeviceKit/Chrome",z6="com.apple.dt.devicekit.chrome.",H6=i(O6(),"serve-sim-devicekit-chrome"),M6=i(O6(),"serve-sim-device-placeholder-assets"),M0="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",T7="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",F6={"vision-pro":{paths:[i(M0,"com.apple.vision-pro.icns"),i(T7,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[i(M0,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[i(M0,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[i(M0,"com.apple.ipad-air-m3-1.icns")]}},M8=null,F8=new Map,_8=new Map,N8=new Map,L8=null,B8=new Map;function P4($){return $.startsWith(z6)?$.slice(z6.length):$}function j8($){let Q=typeof $==="string"?$:$.toString("latin1"),Z=/\/CropBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q)??/\/MediaBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q);if(!Z)return null;let J=Number(Z[1]),Y=Number(Z[2]),X=Number(Z[3]),G=Number(Z[4]),H=Math.abs(X-J),K=Math.abs(G-Y);return H>0&&K>0?{width:H,height:K}:null}function E7($,Q){let Z=c7($);if(Z)return Z;let J=typeof $.framebufferMask==="string"?$.framebufferMask:null;if(!J)return null;let Y=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Y)return null;let X=i(Y,`${J}.pdf`);if(!s(X))return null;let G=j8(K0(X));if(!G)return null;let H=m7(Q);return{width:G.width/H,height:G.height/H}}function R6($){let Q=R8($),Z=Q;if(_8.has(Z))return _8.get(Z)??null;let J=S7(Q);return _8.set(Z,J),J}function C6($){let Q=R8($);if(N8.has(Q))return N8.get(Q)??null;let Z=I7($);return N8.set(Q,Z),Z}function I7($){let Q=y7($),Z=Q?E6(Q):null,J=k7(Z)??f7($.name);if(!J)return null;let Y=T6(J);return Y?{name:J,width:Y.width,height:Y.height}:null}function D6($,Q){let Z=P4($.searchParams.get("chrome")??""),J=$.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(Z)||!J){f0(Q,400,"Invalid chrome asset request");return}let Y=q6(Z);if(!Y||!Y.allowedImages.has(J)||J.includes("/")){f0(Q,404,"Chrome asset not found");return}let X=C8(Z,J);if(!s(X)){f0(Q,404,"Chrome asset not found");return}try{let G=S6(Z,J,X),H=K0(G);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(H.byteLength)}),Q.end(H)}catch(G){f0(Q,500,G instanceof Error?G.message:"Failed to render chrome asset")}}function P6($,Q){let Z=$.searchParams.get("name")??"";try{let J=T6(Z);if(!J){f0(Q,404,"Placeholder asset not found");return}let Y=K0(J.pngPath);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(Y.byteLength)}),Q.end(Y)}catch(J){f0(Q,500,J instanceof Error?J.message:"Failed to render placeholder asset")}}function T6($){if(!/^[A-Za-z0-9._-]+$/.test($))return null;if(B8.has($))return B8.get($)??null;let Q=x7($),Z=Q?l7($,Q):null;return B8.set($,Z),Z}function x7($){let Z=q7($)?.paths.find((Y)=>s(Y));if(Z)return Z;if(!x6().some((Y)=>Y.iconName===$))return null;let J=i(M0,`${$}.icns`);return s(J)?J:null}function q7($){return Object.prototype.hasOwnProperty.call(F6,$)?F6[$]:null}function S7($){let Q=I6($);if(!s(Q))return null;let Z=E6(Q);if(!Z?.chromeIdentifier)return null;let J=q6(Z.chromeIdentifier);if(!J)return null;let Y=null;if(J.compositeImage)Y=U8(J.identifier,J.compositeImage);let X=J.compositeImage?n7(J.identifier,J.compositeImage):null,G=(X&&Z.framebufferMaskSize?i7(Z.framebufferMaskSize,X):null)??Z.screenSize??(Y?{width:Y.width-J.insets.left-J.insets.right,height:Y.height-J.insets.top-J.insets.bottom}:null);if(!G||G.width<=0||G.height<=0)return null;let H=Y??{width:G.width+J.insets.left+J.insets.right,height:G.height+J.insets.top+J.insets.bottom},K={x:J.devicePadding.left,y:J.devicePadding.top,width:H.width,height:H.height},W={width:H.width+J.devicePadding.left+J.devicePadding.right,height:H.height+J.devicePadding.top+J.devicePadding.bottom},z={x:K.x+(H.width-G.width)/2,y:K.y+(H.height-G.height)/2,width:G.width,height:G.height},L=X?Math.max(0,X.radius-(X.width-G.width)/2):J.innerCornerRadius,B=J.slice?U8(J.identifier,J.slice.topLeft):null,U=J.identifier.startsWith("watch"),M=J.buttons.flatMap((D)=>{let I=U8(J.identifier,D.image);if(!I)return[];let E=g7(D,I,H,J.devicePadding),O={x:I.width>0?(D.rolloverOffset.x-D.normalOffset.x)/I.width:0,y:I.height>0?(D.rolloverOffset.y-D.normalOffset.y)/I.height:0};return[{name:D.name,image:D.image,imageDown:D.imageDown,onTop:D.onTop||U,frame:{...E,...I},hover:O,usagePage:D.usagePage,usage:D.usage}]});return{identifier:J.identifier,frame:W,body:K,screen:z,insets:J.insets,outerCornerRadius:J.outerCornerRadius,innerCornerRadius:J.innerCornerRadius,screenRadius:L,compositeImage:J.compositeImage,slice:J.slice,corner:B,buttons:M}}function E6($){let Q=C4($);if(!Q)return null;let Z=typeof Q.chromeIdentifier==="string"?Q.chromeIdentifier:null,J=Z?P4(Z):null;return{chromeIdentifier:J,modelIdentifier:typeof Q.modelIdentifier==="string"?Q.modelIdentifier:null,productClass:typeof Q.productClass==="string"?Q.productClass:null,screenSize:J?E7({...Q,__profileDir:O8($)},J):null,framebufferMaskSize:w7({...Q,__profileDir:O8($)})}}function w7($){let Q=typeof $.framebufferMask==="string"?$.framebufferMask:null,Z=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Q||!Z)return null;let J=i(Z,`${Q}.pdf`);if(!s(J))return null;return j8(K0(J))}function R8($){return u7($.deviceTypeIdentifier)??$.name}function y7($){let Q=I6(R8($));return s(Q)?Q:null}function I6($){return i(A8,`${$}.simdevicetype`,"Contents","Resources","profile.plist")}function k7($){if(!$)return null;let Q=new Set;if($.modelIdentifier)Q.add($.modelIdentifier);if($.productClass)Q.add($.productClass),Q.add(`${$.productClass}AP`);if(Q.size===0)return null;for(let Z of x6())if(Z.modelCodes.some((J)=>Q.has(J)))return Z.iconName;return null}function f7($){let Q=$.toLowerCase();if(Q.includes("vision"))return"vision-pro";if(/iphone\s+17e\b/.test(Q))return"iphone-17e";if(/ipad\s+air\s+11-inch\s+\(m4\)/.test(Q))return"ipad-air-11-inch-m4";if(/ipad\s+air\s+13-inch\s+\(m4\)/.test(Q))return"ipad-air-13-inch-m4";return null}function x6(){if(L8)return L8;let $=C4(i(M0,"MobileDevices-Info.plist"))??C4(i(O8(M0),"Info.plist")),Q=Array.isArray($?.UTExportedTypeDeclarations)?$.UTExportedTypeDeclarations:[],Z=[];for(let J of Q){let Y=Q0(J),X=r(Y.UTTypeIconFile);if(!X||!X.endsWith(".icns"))continue;let G=i(M0,X);if(!s(G))continue;let K=Q0(Y.UTTypeTagSpecification)["com.apple.device-model-code"],W=Array.isArray(K)?K.filter((z)=>typeof z==="string"&&z.length>0):[];if(W.length===0)continue;Z.push({description:r(Y.UTTypeDescription)??"",iconFile:X,iconName:A6(X,".icns"),modelCodes:W})}return L8=Z,Z}function q6($){let Q=P4($);if(!/^[A-Za-z0-9_-]+$/.test(Q))return null;if(F8.has(Q))return F8.get(Q)??null;let Z=i(j6,`${Q}.devicechrome`,"Contents","Resources","chrome.json"),J=null;try{let Y=JSON.parse(K0(Z,"utf-8"));J=v7(Y)}catch{J=null}return F8.set(Q,J),J}function v7($){let Q=typeof $.identifier==="string"?$.identifier:null;if(!Q)return null;let Z=P4(Q),J=Q0($.images),Y=Q0(J.sizing),X=Q0($.paths),G=G0(Q0(X.simpleOutsideBorder).cornerRadiusX),H={top:G0(Y.topHeight),left:G0(Y.leftWidth),bottom:G0(Y.bottomHeight),right:G0(Y.rightWidth)},K=Q0(J.devicePadding),W={top:G0(K.top),left:G0(K.left),bottom:G0(K.bottom),right:G0(K.right)},z=typeof J.composite==="string"?J.composite:null,L=b7(J),B=Array.isArray($.inputs)?$.inputs.flatMap((M)=>{let D=h7(Q0(M));return D?[D]:[]}):[],U=new Set;for(let M of Object.values(J))if(typeof M==="string")U.add(M);for(let M of B)U.add(M.image);if(Array.isArray($.inputs))for(let M of $.inputs){let D=Q0(M);if(typeof D.imageDown==="string")U.add(D.imageDown)}return{identifier:Z,insets:H,devicePadding:W,outerCornerRadius:G,innerCornerRadius:Math.max(G-Math.max(H.left,H.top),0),compositeImage:z,slice:L,buttons:B,allowedImages:U}}function b7($){let Q=r($.topLeft),Z=r($.top),J=r($.topRight),Y=r($.right),X=r($.bottomRight),G=r($.bottom),H=r($.bottomLeft),K=r($.left);if(!Q||!Z||!J||!Y||!X||!G||!H||!K)return null;return{topLeft:Q,top:Z,topRight:J,right:Y,bottomRight:X,bottom:G,bottomLeft:H,left:K}}function h7($){let Q=r($.name),Z=r($.image);if(!Q||!Z)return null;let J=r($.anchor),Y=r($.align),X=Q0($.offsets),G=_6(Q0(X.normal)),H=_6(Q0(X.rollover));return{name:Q,image:Z,imageDown:r($.imageDown),onTop:$.onTop===!0,anchor:J==="right"||J==="top"||J==="bottom"?J:"left",align:Y==="trailing"?"trailing":"leading",normalOffset:G??H??{x:0,y:0},rolloverOffset:H??G??{x:0,y:0},usagePage:F0($.usagePage),usage:F0($.usage)}}function g7($,Q,Z,J){let{left:Y,top:X}=J,G=2*$.normalOffset.x-$.rolloverOffset.x,H=2*$.normalOffset.y-$.rolloverOffset.y,K=$.align==="trailing"?Y+Z.width+G-Q.width:Y+G;switch($.anchor){case"left":return{x:Y+$.rolloverOffset.x-Q.width/2,y:X+$.rolloverOffset.y};case"right":return{x:Y+Z.width+G,y:X+H};case"top":return{x:K,y:X+H-Q.height};case"bottom":return{x:K,y:X+Z.height+H}}}function u7($){if(!$)return null;if(!M8)M8=p7();return M8.get($)??null}function p7(){let $=new Map;try{for(let Q of D7(A8)){if(!Q.endsWith(".simdevicetype"))continue;let Z=i(A8,Q),J=C4(i(Z,"Contents","Info.plist")),Y=typeof J?.CFBundleIdentifier==="string"?J.CFBundleIdentifier:null,X=typeof J?.CFBundleName==="string"?J.CFBundleName:A6(Q,".simdevicetype");if(Y)$.set(Y,X)}}catch{}return $}function C4($){try{let Q=R4("plutil",["-convert","json","-o","-",$],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse(Q)}catch{return null}}function c7($){let Q=F0($.mainScreenWidth),Z=F0($.mainScreenHeight),J=F0($.mainScreenScale);if(!Q||!Z||!J||J<=0)return null;return{width:Q/J,height:Z/J}}function m7($){if($.startsWith("phone"))return 3;if($.startsWith("tablet"))return 2;if($.startsWith("watch"))return 2;return 1}function U8($,Q){let Z=C8($,Q);if(!s(Z))return null;return j8(K0(Z))}function C8($,Q){return i(j6,`${$}.devicechrome`,"Contents","Resources",`${Q}.pdf`)}function S6($,Q,Z){L6(H6,{recursive:!0});let J=U6(Z),Y=N6("sha1").update($).update("\x00").update(Q).update("\x00").update(String(J.mtimeMs)).update("\x00").update(String(J.size)).digest("hex"),X=i(H6,`${$}-${Y}.png`);if(s(X))return X;let G=`${X}.${process.pid}.tmp`;return R4("sips",["-s","format","png",Z,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4}),B6(G,X),X}function l7($,Q){L6(M6,{recursive:!0});let Z=U6(Q),J=N6("sha1").update($).update("\x00").update(Q).update("\x00").update(String(Z.mtimeMs)).update("\x00").update(String(Z.size)).digest("hex"),Y=i(M6,`${$}-${J}.png`);if(s(Y)){let H=D4(K0(Y));return{sourcePath:Q,pngPath:Y,width:H.width,height:H.height}}let X=`${Y}.${process.pid}.tmp`,G=`${Y}.${process.pid}.raw.png`;try{R4("sips",["-s","format","png",Q,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4});let H=K0(G),K=d7(H)??{x:0,y:0,...D4(H)};return R4("sips",["-c",String(K.height),String(K.width),"--cropOffset",String(K.y),String(K.x),"-s","format","png",Q,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4}),B6(X,Y),{sourcePath:Q,pngPath:Y,width:K.width,height:K.height}}finally{try{if(s(G))W6(G)}catch{}try{if(s(X))W6(X)}catch{}}}function D4($){if($.byteLength<24||$[0]!==137||$.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:$.readUInt32BE(16),height:$.readUInt32BE(20)}}function w6($,Q){let{width:Z,height:J}=D4($),Y=8,X=0,G=0,H=[];while(Y<$.byteLength){let D=$.readUInt32BE(Y);Y+=4;let I=$.toString("ascii",Y,Y+4);Y+=4;let E=$.subarray(Y,Y+D);if(Y+=D+4,I==="IHDR")X=E[8]??0,G=E[9]??0;else if(I==="IDAT")H.push(E);else if(I==="IEND")break}let K=G===6?4:G===4?2:0;if(X!==8||K===0||H.length===0)return null;let W=G===6,z=P7(Buffer.concat(H)),L=Z*K,B=new Uint8Array(Z*J),U=Buffer.alloc(L),M=0;for(let D=0;D<J;D++){let I=z[M++]??0,E=Buffer.from(z.subarray(M,M+L));M+=L,a7(E,U,K,I);for(let O=0;O<Z;O++){let j=O*K,R=E[j]??0,T=W?E[j+1]??0:R,N=W?E[j+2]??0:R,V=E[j+K-1]??0;if(Q(R,T,N,V))B[D*Z+O]=1}U=E}return{width:Z,height:J,mask:B}}function d7($){let{width:Q,height:Z}=D4($),J=w6($,(K,W,z,L)=>L>0);if(!J)return{x:0,y:0,width:Q,height:Z};let Y=Q,X=Z,G=-1,H=-1;for(let K=0;K<Z;K++)for(let W=0;W<Q;W++){if(!J.mask[K*Q+W])continue;if(W<Y)Y=W;if(K<X)X=K;if(W>G)G=W;if(K>H)H=K}if(G<Y||H<X)return{x:0,y:0,width:Q,height:Z};return{x:Y,y:X,width:G-Y+1,height:H-X+1}}function i7($,Q){if(Q.width<=0)return null;let Z=Math.max(1,Math.round($.width/Q.width));return{width:$.width/Z,height:$.height/Z}}function n7($,Q){let Z=o7($,Q);if(!Z)return null;let J=w6(Z,(O,j,R,T)=>T>200&&O<30&&j<30&&R<30);if(!J)return null;let{width:Y,height:X,mask:G}=J,H=Math.floor(Y/2),K=Math.floor(X/2),W=(O,j)=>O>=0&&j>=0&&O<Y&&j<X&&G[j*Y+O]===1;if(!W(H,K))return null;let z=H;while(z>0&&W(z-1,K))z--;let L=H;while(L<Y-1&&W(L+1,K))L++;let B=K;while(B>0&&W(H,B-1))B--;let U=K;while(U<X-1&&W(H,U+1))U++;let M=U-B,D=(O,j)=>{let R=0;while(R<M&&!W(O,j?B+R:U-R))R++;return R},I=[D(z,!0),D(L,!0),D(z,!1),D(L,!1)],E=I.reduce((O,j)=>O+j,0)/I.length;return{x:z,y:B,width:L-z+1,height:U-B+1,radius:E}}function o7($,Q){let Z=C8($,Q);if(!s(Z))return null;try{return K0(S6($,Q,Z))}catch{return null}}function a7($,Q,Z,J){for(let Y=0;Y<$.byteLength;Y++){let X=Y>=Z?$[Y-Z]:0,G=Q[Y]??0,H=Y>=Z?Q[Y-Z]:0;switch(J){case 0:break;case 1:$[Y]=$[Y]+X&255;break;case 2:$[Y]=$[Y]+G&255;break;case 3:$[Y]=$[Y]+Math.floor((X+G)/2)&255;break;case 4:$[Y]=$[Y]+r7(X,G,H)&255;break;default:throw Error(`Unsupported PNG filter ${J}`)}}}function r7($,Q,Z){let J=$+Q-Z,Y=Math.abs(J-$),X=Math.abs(J-Q),G=Math.abs(J-Z);if(Y<=X&&Y<=G)return $;return X<=G?Q:Z}function f0($,Q,Z){$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-store"}),$.end(JSON.stringify({ok:!1,error:Z}))}function G0($){return F0($)??0}function F0($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="string"&&$.trim()){let Q=Number($);return Number.isFinite(Q)?Q:null}return null}function r($){return typeof $==="string"&&$?$:null}function Q0($){return $&&typeof $==="object"&&!Array.isArray($)?$:{}}function _6($){let Q=F0($.x),Z=F0($.y);return Q===null||Z===null?null:{x:Q,y:Z}}import{exec as t7}from"child_process";import{createHash as f6,timingSafeEqual as s7}from"crypto";function y6($){let Q=new TextDecoder;if(typeof $==="string")return $;if($ instanceof ArrayBuffer)return Q.decode(new Uint8Array($));if(ArrayBuffer.isView($))return Q.decode(new Uint8Array($.buffer,$.byteOffset,$.byteLength));return String($)}function k6($){return $.headers.get("host")??new URL($.url).host}var e7=1e4;function $Z($,Q){let Z=f6("sha256").update($).digest(),J=f6("sha256").update(Q).digest();return s7(Z,J)}function QZ($,Q,Z){let J=!1,Y=new Map,X=Z.ssePrefixes??[],G=(W)=>{if($.readyState===$.OPEN)$.send(JSON.stringify(W))},H=setTimeout(()=>{if(!J)$.close()},e7);H.unref?.();let K=(W,z)=>{if(Y.has(W))return;let L=z.split("?")[0];if(!z.startsWith("/")||!X.some((E)=>L===E)){G({sub:W,end:!0,error:"path not allowed"});return}if(!Z.onSseRequest){G({sub:W,end:!0,error:"sse requests not supported"});return}let B=!0,U=!1,M=null,D=(E)=>{if(U)return;U=!0,G(E?{sub:W,end:!0,error:E}:{sub:W,end:!0})},I={destroy(){B=!1,M?.cancel().catch(()=>{})}};Y.set(W,I),(async()=>{try{let E=await Z.onSseRequest(z,Q);if(!B)return;if(!E?.body){D();return}let O=new TextDecoder;M=E.body.getReader();while(B){let{done:j,value:R}=await M.read();if(j)break;G({sub:W,data:O.decode(R,{stream:!0})})}if(B){let j=O.decode();if(j)G({sub:W,data:j})}}catch{if(B)D();return}finally{if(B=!1,M)try{M.releaseLock()}catch{}if(Y.get(W)===I)Y.delete(W),D()}})()};$.on("message",(W)=>{let z;try{z=JSON.parse(y6(W))}catch{return}if(!J){if(typeof z.token==="string"&&$Z(z.token,Z.execToken))J=!0,clearTimeout(H),G({ready:!0});else $.close();return}if(typeof z.unsub==="number"){Y.get(z.unsub)?.destroy(),Y.delete(z.unsub);return}if(typeof z.sub==="number"&&typeof z.path==="string"){K(z.sub,z.path);return}if(typeof z.id==="number"&&z.ui!==void 0){let{id:U}=z;if(!Z.onUiRequest){G({id:U,error:"ui requests not supported"});return}Z.onUiRequest(z.ui).then((M)=>G({id:U,...M})).catch((M)=>G({id:U,error:M instanceof Error?M.message:String(M)}));return}if(typeof z.id!=="number"||typeof z.command!=="string"||!z.command)return;let{id:L,command:B}=z;t7(B,{maxBuffer:16777216},(U,M,D)=>{let I={id:L,stdout:M.toString(),stderr:D.toString(),exitCode:U?U.code??1:0};try{Z.onCommandResult?.(B,I)}catch{}G(I)})}),$.on("error",()=>$.close()),$.on("close",()=>{clearTimeout(H);for(let W of Y.values())W.destroy();Y.clear()})}function v6($){return function(Z,J){let Y=new URL(Z.url);if(Y.pathname!==$.path&&Y.pathname!==`${$.path}/`)return!1;let X=Z.headers.get("origin");if(X)try{if(new URL(X).host!==k6(Z))return J.close(),!0}catch{return J.close(),!0}return QZ(J,Z,$),!0}}import{execFile as YZ}from"child_process";import{existsSync as g6}from"fs";import{join as D8,resolve as XZ}from"path";import{fileURLToPath as ZZ}from"url";import{dirname as JZ}from"path";import{WebSocketServer as Y3}from"ws";function b6($){return JZ(ZZ($))}var P8=b6(import.meta.url),u6=["extra-small","small","medium","large","extra-large","extra-extra-large","extra-extra-extra-large","accessibility-medium","accessibility-large","accessibility-extra-large","accessibility-extra-extra-large","accessibility-extra-extra-extra-large"],GZ=["none","grayscale","red-green","green-red","blue-yellow"],KZ={protanopia:"red-green",deuteranopia:"green-red",tritanopia:"blue-yellow"},e0=["on","off"],VZ=new Set(["on","true","enabled","1","yes"]),WZ=new Set(["off","false","disabled","0","no"]),A0={appearance:{via:"appearance",values:["light","dark"]},"liquid-glass":{via:"ax",values:["clear","tinted"]},"color-filter":{via:"ax",values:GZ,aliases:KZ},"text-size":{via:"content_size",values:u6,extraValues:["increment","decrement"]},"reduce-motion":{via:"ax",values:e0,toggle:!0},"increase-contrast":{via:"increase_contrast",values:e0,toggle:!0},"show-borders":{via:"ax",values:e0,toggle:!0},"reduce-transparency":{via:"ax",values:e0,toggle:!0},voiceover:{via:"ax",values:e0,toggle:!0}};function p6($,Q){let Z=A0[$];if(!Z)return null;let J=Q.toLowerCase();if(Z.toggle){if(VZ.has(J))return"on";if(WZ.has(J))return"off";return null}let Y=Z.aliases?.[J]??J;if(Z.values.includes(Y))return Y;if(Z.extraValues?.includes(Y))return Y;return null}function h6(){let $=[D8(P8,"..","dist","simax","serve-sim-ax-settings"),D8(P8,"simax","serve-sim-ax-settings")];for(let Q of $)if(g6(Q))return XZ(Q);return null}var T4=null;function zZ(){return T4??=(async()=>{let $=h6();if($)return $;let Q=D8(P8,"..","Sources","SimAXSettings","build.sh");if(!g6(Q))throw Error("sim-ax-settings binary not found — this build of serve-sim does not "+"include the simulator settings helper. Reinstall from a recent release.");console.error("[serve-sim] building sim-ax-settings (one-time)…"),await T8("bash",[Q]);let Z=h6();if(!Z)throw Error("Build succeeded but sim-ax-settings not found.");return Z})(),T4.catch(()=>{T4=null}),T4}function T8($,Q){return new Promise((Z,J)=>{YZ($,Q,{encoding:"utf-8",maxBuffer:4194304},(Y,X,G)=>{if(Y)J(Error(String(G).trim()||Y.message));else Z(String(X).trim())})})}function c6($,Q,Z){let J=["simctl","ui",$,Q];if(Z!==void 0)J.push(Z);return T8("xcrun",J)}async function E8($,...Q){let Z=await zZ();return T8("xcrun",["simctl","spawn",$,Z,...Q])}function HZ($){return $==="enabled"?"on":"off"}function MZ($){return $==="on"?"enabled":"disabled"}async function FZ($,Q){let Z=A0[Q];if(!Z)throw Error(`unknown option: ${Q}`);if(Z.via==="ax")return E8($,"get",Q);let J=(await c6($,Z.via)).toLowerCase();return Z.toggle?HZ(J):J}async function m6($,Q,Z){let J=A0[Q];if(!J)throw Error(`unknown option: ${Q}`);if(J.via==="ax"){await E8($,"set",Q,Z);return}await c6($,J.via,J.toggle?MZ(Z):Z)}async function l6($){let Q=Object.entries(A0).filter(([,X])=>X.via!=="ax"),[Z,...J]=await Promise.all([E8($,"status").then((X)=>JSON.parse(X)).catch(()=>({})),...Q.map(([X])=>FZ($,X).catch(()=>"unsupported"))]),Y={};for(let[X,G]of Object.entries(A0))if(G.via==="ax")Y[X]=Z[X]??"unsupported";return Q.forEach(([X],G)=>{Y[X]=J[G]}),Y}var N3=`Usage: serve-sim ui [status] [--json] [-d udid]
|
|
59
59
|
serve-sim ui <option> [-d udid] Print the current value
|
|
60
60
|
serve-sim ui <option> <value> [-d udid] Change the value
|
|
61
61
|
|
|
@@ -64,21 +64,21 @@ Simulator-wide UI options:
|
|
|
64
64
|
liquid-glass clear | tinted
|
|
65
65
|
color-filter none | grayscale | red-green | green-red | blue-yellow
|
|
66
66
|
(protanopia/deuteranopia/tritanopia aliases accepted)
|
|
67
|
-
text-size ${
|
|
67
|
+
text-size ${u6.slice(0,4).join(" | ")} | …
|
|
68
68
|
(12 content-size categories, or increment | decrement)
|
|
69
69
|
reduce-motion on | off
|
|
70
70
|
increase-contrast on | off
|
|
71
71
|
show-borders on | off
|
|
72
72
|
reduce-transparency on | off
|
|
73
|
-
voiceover on | off`;import{EventEmitter as
|
|
73
|
+
voiceover on | off`;import{EventEmitter as d6}from"events";function _Z($){let Q={};if($.headers.forEach((Z,J)=>{Q[J.toLowerCase()]=Z}),!Q.host)Q.host=new URL($.url).host;return Q}function i6($,Q){let Z=new URL(Q.url),J=new d6,Y=new d6,X=new AbortController,G=null,H=!1,K=(x=!1)=>{if(H)return;if(H=!0,X.abort(),G?.cancel().catch(()=>{}),Q.signal.removeEventListener("abort",W),x)J.emit("aborted");J.emit("close")},W=()=>K(!0),z=Q.signal.aborted;Q.signal.addEventListener("abort",W,{once:!0});let L=Object.assign(J,{method:Q.method,url:`${Z.pathname}${Z.search}`,headers:_Z(Q),socket:{localPort:Number(Z.port)||void 0},destroy(){K()}}),B=200,U=new Headers,M=!1,D=!1,I=!1,E=!1,O=!1,j=!1,R=null,T,N,V=!1,F=new TextEncoder,_=()=>{if(O)return;O=!0,Y.emit("close")},C=new ReadableStream({start(x){R=x},cancel(){E=!0,K(),_()},pull(){if(!j)return;j=!1,Y.emit("drain")}}),P=(x)=>{if(V)return;V=!0,T(x)},q=()=>B!==101&&B!==204&&B!==205&&B!==304,w=()=>{if(M)return;M=!0,P(new Response(q()?C:null,{status:B,headers:U}))},k=(x)=>{if(w(),!q()||!R||D)return!0;let f=typeof x==="string"?F.encode(x):new Uint8Array(x);try{R.enqueue(f)}catch{return!1}return j=(R.desiredSize??0)<=0,!j},y={get headersSent(){return M},get writableEnded(){return D},get writableFinished(){return I},get destroyed(){return E},get writableNeedDrain(){return j},get statusCode(){return B},set statusCode(x){B=x},writeHead(x,f){if(B=x,f){U=new Headers;for(let[m,a]of Object.entries(f))if(Array.isArray(a))for(let W0 of a)U.append(m,W0);else U.set(m,String(a))}w()},write(x,f,m){let a=k(x);return(typeof f==="function"?f:m)?.(),a},end(x){if(x!==void 0)k(x);w(),D=!0,I=!0;try{R?.close()}catch{}Y.emit("finish"),_(),K()},destroy(x){if(E)return y;w(),E=!0,D=!0;try{R?.error(x??Error("Response destroyed"))}catch{}if(x&&Y.listenerCount("error")>0)Y.emit("error",x);return _(),K(),y},on(x,f){return Y.on(x,f),y},once(x,f){return Y.once(x,f),y},off(x,f){return Y.off(x,f),y}},g=new Promise((x,f)=>{T=x,N=f}),p;try{p=Promise.resolve($(L,y,()=>P(void 0)))}catch(x){p=Promise.reject(x)}if(z)W();return p.then(()=>{if(!V&&D)P(new Response(null,{status:B,headers:U}))},(x)=>{if(V)y.destroy(x instanceof Error?x:void 0);else N(x)}),(async()=>{let x=null;try{if(x=Q.body?.getReader()??null,G=x,x)while(!X.signal.aborted){let{done:f,value:m}=await x.read();if(f)break;J.emit("data",Buffer.from(m))}if(!X.signal.aborted)J.emit("end")}catch{K(!0)}finally{if(G===x)G=null;if(x){if(X.signal.aborted)await x.cancel().catch(()=>{});try{x.releaseLock()}catch{}}}})(),g}var t8=f4(b$(),"serve-sim"),E$,G1="854a02be78c7ffea104cb523636efa991bef5c5b",w4=9222,I$=j9(),h$=w9(($)=>new L4({udid:$,deviceName:F1($)})),K1=1048576,C0=null;function x$($){let Q=new URL($,"http://x").searchParams.get("limit");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function q$($){let Q=new URL($,"http://x").searchParams.get("since");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function S$($,Q){try{let Z=g9($,Q);if(Z)z0(Z)}catch{}}var V1=new Set(["host.exp.Exponent","dev.expo.Exponent"]),W1=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"];function s8($){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test($)}var J4={"Access-Control-Allow-Origin":"*","Cache-Control":"no-store"};function z1($,Q,Z){if(Q&&s8($.device)&&!Q.has($.device))return $.pid===Z?"recycle-self":"recycle-helper";return"keep"}function H1($,Q){if(V1.has(Q))return Promise.resolve(!0);return new Promise((Z)=>{L0("xcrun",["simctl","get_app_container",$,Q,"app"],{timeout:2000},(J,Y)=>{if(J)return Z(!1);let X=Y.trim();if(!X)return Z(!1);for(let G of W1)if(v$(f4(X,G)))return Z(!0);Z(!1)})})}function w$($){return $.trim().replace(/\s+/g," ").toLowerCase()}function a3($,Q){let Z=w$(Q);if(!Z)return null;for(let[J,Y]of Object.entries($))if([Y.CFBundleDisplayName,Y.CFBundleName,Y.CFBundleExecutable].filter((G)=>typeof G==="string").some((G)=>w$(G)===Z))return Y.CFBundleIdentifier||J;return null}var b0={at:0,booted:null,names:new Map};async function g$(){let $=Date.now();if(b0.booted&&$-b0.at<1500)return b0.booted;try{let Q=await new Promise((X,G)=>{L0("xcrun",["simctl","list","devices","booted","-j"],{encoding:"utf-8",timeout:3000},(H,K)=>{if(H)G(H);else X(K)})}),Z=JSON.parse(Q),J=new Set,Y=new Map;for(let X of Object.values(Z.devices))for(let G of X)if(G.state==="Booted"){let H=G.udid.toUpperCase();J.add(H),Y.set(H,G.name)}return b0={at:$,booted:J,names:Y},J}catch{return null}}function M1($,Q){return $.get(Q.toUpperCase())}function F1($){return M1(b0.names,$)}var i8={at:0,udid:null};function _1(){let $=Date.now();if($-i8.at<1500)return i8.udid;let Q=null;try{Q=X4("defaults read com.apple.iphonesimulator CurrentDeviceUDID",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()||null}catch{Q=null}return i8={at:$,udid:Q},Q}async function Y0(){let $;try{$=r2(t8).filter((J)=>J.startsWith("server-")&&J.endsWith(".json"))}catch{return[]}let Q=await g$(),Z=[];for(let J of $){let Y=f4(t8,J);try{let X=JSON.parse(t2(Y,"utf-8"));try{process.kill(X.pid,0)}catch{s0("helper pid=%d gone, removing %s",X.pid,Y);try{D$(Y)}catch{}continue}let G=z1(X,Q,process.pid);if(G!=="keep"){if(G==="recycle-self")s0("closing in-process session for shut-down device %s (own pid %d)",X.device,X.pid),W8(X.device);else{s0("recycling stale helper pid=%d (device %s no longer booted)",X.pid,X.device);try{process.kill(X.pid,"SIGTERM")}catch{}}try{D$(Y)}catch{}continue}Z.push(X)}catch{}}return Z}function V0($,Q){if(Q)return $.find((Z)=>Z.device===Q)??null;return $[0]??null}function y$($){let Q=$.indexOf("?");if(Q===-1)return null;return new URLSearchParams($.slice(Q+1)).get("device")}function N1($){let Q=$.indexOf("?");if(Q===-1)return{limit:null,offset:0};let Z=new URLSearchParams($.slice(Q+1)),J=Z.get("limit"),Y=Z.get("offset"),X=J==null||!/^\d+$/.test(J)?null:Math.min(Math.max(Number(J),1),1000),G=Y==null||!/^\d+$/.test(Y)?0:Math.max(Number(Y),0);return{limit:X,offset:G}}function Y4($){let Q=$.headers?.host;if(Q)return Q;let Z=$.socket.localPort;return Z?`localhost:${Z}`:void 0}function D0($,Q,Z){return`${`${$}${Q}`}?device=${encodeURIComponent(Z)}`}function L1($){let Q=new URL($);return Q.pathname=`${Q.pathname.slice(0,Q.pathname.lastIndexOf("/")+1)}stream-settings`,Q.search="",Q.hash="",Q.toString()}function y4($,Q,Z="",J="http",Y=!1){if(!Q)return $;if(!Y){let z;try{z=new URL(`http://${Q}`).hostname}catch{return $}if(z==="localhost"||z==="127.0.0.1"||z==="[::1]")return $;let L=(B)=>B.replace("127.0.0.1",z);return{...$,url:L($.url),streamUrl:L($.streamUrl),wsUrl:L($.wsUrl)}}let H=`${`${Z==="/"?"":Z.replace(/\/+$/,"")}/helper`}/${encodeURIComponent($.device)}`,K=`${J}://${Q}`,W=`${J==="https"?"wss":"ws"}://${Q}`;return{...$,url:`${K}${H}`,streamUrl:`${K}${H}/stream.mjpeg`,wsUrl:`${W}${H}/ws`}}function B1($){return`${$==="/"?"":$}/helper`}function U1($){return`${$==="/"?"":$}/devtools`}function O1($,Q){let Z=new URL($,"http://serve-sim.local");if(!Z.pathname.startsWith(`${Q}/page/`))return null;return{upstreamPath:`/devtools${Z.pathname.slice(Q.length)}${Z.search}`}}function n8($,Q){let Z=new URL($,"http://serve-sim.local");if(Z.pathname!==Q&&!Z.pathname.startsWith(`${Q}/`))return null;let Y=Z.pathname.slice(Q.length).replace(/^\/+/,"").split("/").filter(Boolean),X=new Set(["ax","config","foreground","health","stream.avcc","stream.mjpeg","webrtc","ws"]),G=Z.searchParams.get("device"),H=Y;if(Y[0]&&!X.has(Y[0]))G=decodeURIComponent(Y[0]),H=Y.slice(1);let K=H.length>0?`/${H.join("/")}`:"/";return Z.searchParams.delete("device"),{device:G,upstreamPath:`${K}${Z.search}`}}var A1="258EAFA5-E914-47DA-95CA-C5AB0DC85B11";function e8($,Q){let Z=Q.length,J;if(Z<126)J=Buffer.from([128|$,Z]);else if(Z<=65535)J=Buffer.alloc(4),J[0]=128|$,J[1]=126,J.writeUInt16BE(Z,2);else J=Buffer.alloc(10),J[0]=128|$,J[1]=127,J.writeBigUInt64BE(BigInt(Z),2);return Buffer.concat([J,Q])}function u$($){if($.length<2)return null;let Q=$[0]&15,Z=($[1]&128)!==0,J=$[1]&127,Y=2;if(J===126){if($.length<Y+2)return null;J=$.readUInt16BE(Y),Y+=2}else if(J===127){if($.length<Y+8)return null;let H=$.readBigUInt64BE(Y);if(H>BigInt(Number.MAX_SAFE_INTEGER))throw Error("WebSocket frame too large");J=Number(H),Y+=8}let X=Y;if(Z)Y+=4;if($.length<Y+J)return null;let G=Buffer.from($.subarray(Y,Y+J));if(Z){let H=$.subarray(X,X+4);for(let K=0;K<G.length;K++)G[K]=G[K]^H[K%4]}return{opcode:Q,payload:G,consumed:Y+J}}function G4($,Q,Z=Buffer.alloc(0)){if($.destroyed||!$.writable)return;$.write(e8(Q,Z))}function k$($){let Q=new Uint8Array($.length);return Q.set($),Q}function p$($,Q){let Z=$.headers["sec-websocket-key"];if(typeof Z!=="string")return Q.end(`HTTP/1.1 400 Bad Request\r
|
|
74
74
|
\r
|
|
75
|
-
`),!1;let J=
|
|
75
|
+
`),!1;let J=Y1("sha1").update(Z+A1).digest("base64");return Q.write(`HTTP/1.1 101 Switching Protocols\r
|
|
76
76
|
Upgrade: websocket\r
|
|
77
77
|
Connection: Upgrade\r
|
|
78
78
|
Sec-WebSocket-Accept: ${J}\r
|
|
79
79
|
\r
|
|
80
|
-
`),Q.resume(),!0}function z1($,Q,Z,J){if(!k$($,Q))return;let Y=new O$(J);Y.binaryType="arraybuffer";let X=!1,G=!1,H=[],K=Buffer.from(Z),W=()=>{if(G)return;G=!0;try{Y.close()}catch{}try{Q.end(o8(8,Buffer.alloc(0)))}catch{}try{Q.destroy()}catch{}},z=(B)=>{if(X&&Y.readyState===O$.OPEN){Y.send(B.opcode===1?B.payload.toString("utf8"):E$(B.payload));return}H.push({opcode:B.opcode,payload:Buffer.from(B.payload)})},L=()=>{try{while(K.length>0){let B=y$(K);if(!B)break;if(K=K.subarray(B.consumed),B.opcode===8){Y4(Q,8,B.payload),W();return}if(B.opcode===9){Y4(Q,10,B.payload);continue}if(B.opcode===1||B.opcode===2)z({opcode:B.opcode,payload:B.payload})}}catch{W()}};Y.onopen=()=>{X=!0;for(let B of H)Y.send(B.opcode===1?B.payload.toString("utf8"):E$(B.payload));H=[]},Y.onmessage=(B)=>{let U=B.data,M=typeof U==="string"?Buffer.from(U):Buffer.from(U);Y4(Q,typeof U==="string"?1:2,M)},Y.onerror=W,Y.onclose=W,Q.on("data",(B)=>{if(typeof B==="string")B=Buffer.from(B);K=Buffer.concat([K,B]),L()}),Q.on("error",W),Q.on("close",W),L()}async function H1($,Q,Z){if(!n8(Z)){Q.writeHead(400,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"invalid_device"}));return}if($.method!=="GET"){Q.writeHead(405,{Allow:"GET","Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"method_not_allowed"}));return}try{let J=await R9(Z);Q.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify(J))}catch(J){Q.writeHead(500,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({udid:Z,alive:!1,error:J instanceof Error?J.message:String(J)}))}}function M1($,Q,Z,J,Y){if(!Z)return!1;let X=J.split("?")[0];if(X==="/camera/status")return H1($,Q,Z),!0;if((X==="/webrtc/offer"||X==="/webrtc/close"||X==="/stream-settings")&&$.method==="OPTIONS")return J8(Q),!0;let G;try{G=n0(Z,Y)}catch{return!1}switch(X){case"/stream.mjpeg":return G.handleMjpeg($,Q),!0;case"/stream.avcc":return G.handleAvcc($,Q),!0;case"/stream-settings":return G.handleStreamSettings($,Q),!0;case"/config":return G.handleConfig($,Q),!0;case"/health":return G.handleHealth($,Q),!0;case"/webrtc/offer":return G.handleWebRTCOffer($,Q),!0;case"/webrtc/close":return G.handleWebRTCClose($,Q),!0;case"/ax":return G.handleAx($,Q),!0;case"/foreground":return G.handleForeground($,Q),!0;default:return!1}}async function F1($,Q,Z,J){if(await new Promise((X)=>_0("xcrun",["simctl","boot",$],()=>X())),!await new Promise((X)=>{_0("xcrun",["simctl","bootstatus",$,"-b"],{timeout:180000},(G)=>X(!G))})){if(!await new Promise((G)=>{_0("xcrun",["simctl","list","devices","-j"],(H,K)=>{if(H)return G(!1);try{let W=JSON.parse(K);G(Object.values(W.devices).flat().some((z)=>z.udid===$&&z.state==="Booted"))}catch{G(!1)}})}))return`Device ${$} failed to reach booted state`}return B9(L9($,Q,Z,"127.0.0.1",J)),null}function _1($,Q){let Z=[],J=[],Y=Buffer.from(Q),X=!1,G=()=>{if(X)return;X=!0;for(let W of J)W()},H=()=>{G();try{$.end(o8(8,Buffer.alloc(0)))}catch{}try{$.destroy()}catch{}},K=()=>{for(;;){let W;try{W=y$(Y)}catch{H();return}if(!W)return;if(Y=Y.subarray(W.consumed),W.opcode===8)return H();if(W.opcode===9){Y4($,10,W.payload);continue}if(W.opcode===1||W.opcode===2)for(let z of Z)z(W.payload)}};if($.on("data",(W)=>{Y=Buffer.concat([Y,W]),K()}),$.on("close",G),$.on("error",G),Q.length)K();return{send(W){Y4($,2,W)},on(W,z){if(W==="message")Z.push(z);else J.push(z)},close:H}}function N1($,Q,Z,J,Y){if(!J)return!1;let X;try{X=n0(J,Y)}catch{return!1}if(!k$($,Q))return!0;return X.attachHidSocket(_1(Q,Z)),!0}function m8($,Q,Z,J,Y,X=!1){let G=(Q===""?"":Q)+"/grid/api",H=typeof Y==="string"?Y:void 0,K=typeof Y==="object"?Y:v$(H);return{...$,basePath:Q,logsEndpoint:C0(Q,"/logs",$.device),appStateEndpoint:C0(Q,"/appstate",$.device),eventLogEndpoint:C0(Q,"/api/event-log",$.device),eventLogEventsEndpoint:C0(Q,"/api/event-log/events",$.device),metricsEndpoint:C0(Q,"/metrics",$.device),axEndpoint:C0(Q,"/ax",$.device),cameraStatusEndpoint:`${Q==="/"?"":Q}/helper/${encodeURIComponent($.device)}/camera/status`,devtoolsEndpoint:C0(Q,"/devtools",$.device),streamSettingsEndpoint:X1($.streamUrl),serveSimBin:Z,gridApiEndpoint:G,gridStartEndpoint:G+"/start",gridShutdownEndpoint:G+"/shutdown",gridMemoryEndpoint:G+"/memory",previewEndpoint:Q===""?"/":Q,execToken:J,...H?{codec:H}:{},...K?{streamSettings:K}:{},...X?{proxyHelpers:!0}:{}}}async function L1($){return new Promise((Q)=>{let Z=i2();Z.once("error",()=>Q(!1)),Z.once("listening",()=>Z.close(()=>Q(!0))),Z.listen($,"127.0.0.1")})}async function I$($){let Q=`http://127.0.0.1:${$}`;try{let Z=await fetch(`${Q}/json/version`);if(!Z.ok)return null;if((await Z.json()).Browser!=="Safari/inspect-webkit")return null;return{port:$,cdpUrl:Q,async listTargets(){return(await(await fetch(`${Q}/json/list`)).json()).filter((G)=>G.id.startsWith("sim:")).map((G)=>{let K=G.id.split(":")[1],W=G.description?.match(/\(([^)]+)\)/)?.[1];return{id:G.id,title:G.title||G.url||"Untitled",url:/^https?:/i.test(G.url)?G.url:"about:blank",type:G.type||"page",udid:K,bundleId:W}})}}}catch{return null}}async function B1(){if(R0)try{return await(await R0).listTargets(),R0}catch{R0=null}return R0=(async()=>{let{startCdpServer:$}=await Promise.resolve().then(() => (L$(),N$));for(let Q=I4;Q<I4+50;Q++){if(!await L1(Q)){let Z=await I$(Q);if(Z)return Z;continue}try{let Z=await $({host:"127.0.0.1",port:Q});return{port:Q,cdpUrl:`http://127.0.0.1:${Q}`,async listTargets(){return Z.getTargets().filter((J)=>J.source?.kind==="simulator").map((J)=>{let Y=J.url??"";return{id:J.targetId,title:J.title||J.appName||Y||"Untitled",url:/^https?:/i.test(Y)?Y:"about:blank",type:J.type||"page",appName:J.appName,bundleId:J.bundleId,udid:J.source?.id,inUseByOtherInspector:!!J.inUseByOtherInspector}})},highlightTarget:Z.highlightTarget?.bind(Z),releaseHighlight:Z.releaseHighlight?.bind(Z)}}catch(Z){if(Z?.code==="EADDRINUSE"){let J=await I$(Q);if(J)return J;continue}throw Z}}throw Error(`No available inspect-webkit port found in ${I4}-${I4+49}`)})().catch(($)=>{throw R0=null,$}),R0}function U1($){return Array.isArray($)?$[0]:$}function f$($){return U1($.headers["x-forwarded-proto"])?.split(",",1)[0]?.trim().toLowerCase()}function O1($){return f$($)==="https"?"wss":"ws"}function x4($){return f$($)==="https"?"https":"http"}function A1($,Q,Z,J){let Y=new URL(`${$}/inspector.html`,"http://serve-sim.local");return Y.searchParams.set(Q,`${Z}/page/${encodeURIComponent(J)}`),`${Y.pathname}${Y.search}`}var l8=null;function d8(){try{let $=process.argv;if($[1]&&q$($[1]))return $[1]}catch{}return"serve-sim"}function j1(){if(!l8)l8=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWFtYmVyLTQwMDpva2xjaCg4Mi44JSAuMTg5IDg0LjQyOSk7LS1jb2xvci1lbWVyYWxkLTQwMDpva2xjaCg3Ni41JSAuMTc3IDE2My4yMjMpOy0tY29sb3ItY3lhbi00MDA6b2tsY2goNzguOSUgLjE1NCAyMTEuNTMpOy0tY29sb3Itc2t5LTQwMDpva2xjaCg3NC42JSAuMTYgMjMyLjY2MSk7LS1jb2xvci12aW9sZXQtNDAwOm9rbGNoKDcwLjIlIC4xODMgMjkzLjU0MSk7LS1jb2xvci1ibGFjazojMDAwOy0tY29sb3Itd2hpdGU6I2ZmZjstLXNwYWNpbmc6LjI1cmVtOy0tZm9udC13ZWlnaHQtbWVkaXVtOjUwMDstLWZvbnQtd2VpZ2h0LXNlbWlib2xkOjYwMDstLXRyYWNraW5nLXdpZGU6LjAyNWVtOy0tbGVhZGluZy10aWdodDoxLjI1Oy0tbGVhZGluZy1zbnVnOjEuMzc1Oy0tcmFkaXVzLXhzOi4xMjVyZW07LS1yYWRpdXMtbWQ6LjM3NXJlbTstLXJhZGl1cy1sZzouNXJlbTstLXJhZGl1cy14bDouNzVyZW07LS1lYXNlLW91dDpjdWJpYy1iZXppZXIoMCwwLC4yLDEpOy0tYmx1ci1tZDoxMnB4Oy0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7LS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpOy0tZGVmYXVsdC1mb250LWZhbWlseTp2YXIoLS1mb250LXNhbnMpOy0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7LS1jb2xvci1wYW5lbDojMWMxYzFlOy0tY29sb3ItcGFuZWwtYmc6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnKTstLWNvbG9yLXBhbmVsLWJnLXRyYW5zbHVjZW50OnZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc2x1Y2VudCk7LS1jb2xvci1wYW5lbC1vdmVybGF5OiMxODE4MThhNjstLWNvbG9yLXBhbmVsLWRlZXA6IzExMTExMzstLWNvbG9yLXBhZ2U6IzBhMGEwYTstLWNvbG9yLWFjY2VudDojYTViNGZjOy0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkOiMzNGQzOTk7LS1jb2xvci1kYW5nZXI6I2Y4NzE3MTstLWNvbG9yLWRhbmdlci1zb2Z0OiNmY2E1YTU7LS1jb2xvci13YXJuaW5nOiNmYmJmMjQ7LS1jb2xvci13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLWZvbnQtc3lzdGVtOi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZ9fUBsYXllciBiYXNleyosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmJhY2tkcm9we2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH1odG1sLDpob3N0ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO3RhYi1zaXplOjQ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtZm9udC1mYW1pbHksdWktc2Fucy1zZXJpZixzeXN0ZW0tdWksc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LWZlYXR1cmUtc2V0dGluZ3Msbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWhye2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7aGVpZ2h0OjB9YWJicjp3aGVyZShbdGl0bGVdKXstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9YXtjb2xvcjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtbW9uby1mb250LWZhbWlseSx1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sTW9uYWNvLENvbnNvbGFzLCJMaWJlcmF0aW9uIE1vbm8iLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MH1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZX1pbWcsc3ZnLHZpZGVvLGNhbnZhcyxhdWRpbyxpZnJhbWUsZW1iZWQsb2JqZWN0e2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31idXR0b24saW5wdXQsc2VsZWN0LG9wdGdyb3VwLHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LW1vei1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OnBsYWNlaG9sZGVye29wYWNpdHk6MX1Ac3VwcG9ydHMgKCBub3QgKC13ZWJraXQtYXBwZWFyYW5jZTogLWFwcGxlLXBheS1idXR0b24pKSBvciAoY29udGFpbi1pbnRyaW5zaWMtc2l6ZTogMXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLGN1cnJlbnRjb2xvciA1MCUsdHJhbnNwYXJlbnQpfX19dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXt0ZXh0LWFsaWduOmluaGVyaXQ7bWluLWhlaWdodDoxbGh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7ZGlzcGxheTppbmxpbmUtZmxleH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcntwYWRkaW5nOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1kYXktZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjF9Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9YnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufWlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0pe2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257YXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbGF5ZXIgdXRpbGl0aWVzey5cW2NvbnRhaW5lci10eXBlXDppbmxpbmUtc2l6ZVxde2NvbnRhaW5lci10eXBlOmlubGluZS1zaXplfS5wb2ludGVyLWV2ZW50cy1hdXRve3BvaW50ZXItZXZlbnRzOmF1dG99LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uc3Itb25seXtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47Y2xpcC1wYXRoOmluc2V0KDUwJSk7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci13aWR0aDowO3dpZHRoOjFweDtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O3BhZGRpbmc6MH0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHtpbnNldDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnRvcC0ze3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS50b3AtXFsycHhcXXt0b3A6MnB4fS50b3AtXFtjYWxjXCgxMDBcJVwrNHB4XClcXXt0b3A6Y2FsYygxMDAlICsgNHB4KX0udG9wLVxbY2FsY1woMTAwXCVcKzZweFwpXF17dG9wOmNhbGMoMTAwJSArIDZweCl9LnRvcC1mdWxse3RvcDoxMDAlfS5yaWdodC0we3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LnJpZ2h0LTBcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnJpZ2h0LTJcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5yaWdodC0ze3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnJpZ2h0LVxbOXB4XF17cmlnaHQ6OXB4fS5ib3R0b20tMHtib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0uYm90dG9tLTBcLjV7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5ib3R0b20tM3tib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ubGVmdC0we2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubGVmdC0xXC8ye2xlZnQ6NTAlfS5sZWZ0LTJcLjV7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmxlZnQtM3tsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnotMXt6LWluZGV4OjF9LnotMTB7ei1pbmRleDoxMH0uei0yMHt6LWluZGV4OjIwfS56LTMwe3otaW5kZXg6MzB9LnotMzV7ei1pbmRleDozNX0uei0zNnt6LWluZGV4OjM2fS56LTQwe3otaW5kZXg6NDB9LnotNTB7ei1pbmRleDo1MH0uY29udGFpbmVye3dpZHRoOjEwMCV9QG1lZGlhIChtaW4td2lkdGg6NDByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo0OHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NDhyZW19fUBtZWRpYSAobWluLXdpZHRoOjY0cmVtKXsuY29udGFpbmVye21heC13aWR0aDo2NHJlbX19QG1lZGlhIChtaW4td2lkdGg6ODByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjgwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo5NnJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6OTZyZW19fS5tLTB7bWFyZ2luOmNhbGModmFyKC0tc3BhY2luZykqMCl9Li1teC0xe21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSotMSl9Lm14LTBcLjV7bWFyZ2luLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ubXgtMVwuNXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uLW15LTJ7bWFyZ2luLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLTIpfS5teS0xe21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5tdC0wXC41e21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Lm10LTF7bWFyZ2luLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5tdC0ye21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ubXQtXFszcHhcXXttYXJnaW4tdG9wOjNweH0ubXItXFszcHhcXXttYXJnaW4tcmlnaHQ6M3B4fS5tbC0wXC41e21hcmdpbi1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tbC0xXC41e21hcmdpbi1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ubWwtYXV0b3ttYXJnaW4tbGVmdDphdXRvfS5ib3gtYm9yZGVye2JveC1zaXppbmc6Ym9yZGVyLWJveH0uYmxvY2t7ZGlzcGxheTpibG9ja30uY29udGVudHN7ZGlzcGxheTpjb250ZW50c30uZmxleHtkaXNwbGF5OmZsZXh9LmdyaWR7ZGlzcGxheTpncmlkfS5oaWRkZW57ZGlzcGxheTpub25lfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0udGFibGV7ZGlzcGxheTp0YWJsZX0uXFthc3BlY3QtcmF0aW9cOjE2XC8xMVxde2FzcGVjdC1yYXRpbzoxNi8xMX0uc2l6ZS0xXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMS41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5zaXplLTJcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnNpemUtM1wuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0uc2l6ZS00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNCl9LnNpemUtNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS5zaXplLTl7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5KX0uc2l6ZS1cWzJweFxde3dpZHRoOjJweDtoZWlnaHQ6MnB4fS5zaXplLVxbMTRweFxde3dpZHRoOjE0cHg7aGVpZ2h0OjE0cHh9LnNpemUtXFsxOHB4XF17d2lkdGg6MThweDtoZWlnaHQ6MThweH0uc2l6ZS1cWzE5cHhcXXt3aWR0aDoxOXB4O2hlaWdodDoxOXB4fS5zaXplLWZ1bGx7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0uaC0yXC41e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmgtM3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uaC0zXC41e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LmgtNHtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0uaC01e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS5oLTVcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNS41KX0uaC02e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5oLTd7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LmgtOHtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo4KX0uaC0xMHtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMCl9LmgtXFszcHhcXXtoZWlnaHQ6M3B4fS5oLVxbMTNweFxde2hlaWdodDoxM3B4fS5oLVxbMTRweFxde2hlaWdodDoxNHB4fS5oLVxbMTZweFxde2hlaWdodDoxNnB4fS5oLVxbMThweFxde2hlaWdodDoxOHB4fS5oLVxbMjJweFxde2hlaWdodDoyMnB4fS5oLVxbMjZweFxde2hlaWdodDoyNnB4fS5oLVxbMzBweFxde2hlaWdodDozMHB4fS5oLWZ1bGx7aGVpZ2h0OjEwMCV9LmgtcHh7aGVpZ2h0OjFweH0uaC1zY3JlZW57aGVpZ2h0OjEwMHZofS5tYXgtaC05MHttYXgtaGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqOTApfS5tYXgtaC1cWzI2MHB4XF17bWF4LWhlaWdodDoyNjBweH0ubWF4LWgtXFszMjBweFxde21heC1oZWlnaHQ6MzIwcHh9Lm1heC1oLWZ1bGx7bWF4LWhlaWdodDoxMDAlfS5taW4taC0we21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubWluLWgtXFsyMnB4XF17bWluLWhlaWdodDoyMnB4fS5taW4taC1cWzMwcHhcXXttaW4taGVpZ2h0OjMwcHh9Lm1pbi1oLVxbMzZweFxde21pbi1oZWlnaHQ6MzZweH0ubWluLWgtXFs0NHB4XF17bWluLWhlaWdodDo0NHB4fS5taW4taC1weHttaW4taGVpZ2h0OjFweH0udy0xe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnctMlwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnctM1wuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnctNHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS53LTV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0udy02e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNil9LnctN3t3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjcpfS53LTh7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo4KX0udy0xMHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0udy0yMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIxKX0udy1cWzIycHhcXXt3aWR0aDoyMnB4fS53LVxbMzBweFxde3dpZHRoOjMwcHh9LnctXFszMlwlXF17d2lkdGg6MzIlfS53LVxbMzZcJVxde3dpZHRoOjM2JX0udy1cWzQwXCVcXXt3aWR0aDo0MCV9LnctXFs0MlwlXF17d2lkdGg6NDIlfS53LVxbNDZcJVxde3dpZHRoOjQ2JX0udy1cWzQ4XCVcXXt3aWR0aDo0OCV9LnctXFs1OFwlXF17d2lkdGg6NTglfS53LVxbNjJcJVxde3dpZHRoOjYyJX0udy1cWzY4XCVcXXt3aWR0aDo2OCV9LnctXFs3MFwlXF17d2lkdGg6NzAlfS53LVxbNzRcJVxde3dpZHRoOjc0JX0udy1cWzEyMHB4XF17d2lkdGg6MTIwcHh9LnctXFtjYWxjXCgxMDBcJVwrOHB4XClcXXt3aWR0aDpjYWxjKDEwMCUgKyA4cHgpfS53LVxbbWluXCgzMjBweFwsY2FsY1woMTAwdnctMzJweFwpXClcXXt3aWR0aDptaW4oMzIwcHgsMTAwdncgLSAzMnB4KX0udy1mdWxse3dpZHRoOjEwMCV9LnctbWF4e3dpZHRoOm1heC1jb250ZW50fS53LXB4e3dpZHRoOjFweH0ubWF4LXctOTB7bWF4LXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqOTApfS5tYXgtdy0xMjB7bWF4LXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTIwKX0ubWF4LXctXFsxNTBweFxde21heC13aWR0aDoxNTBweH0ubWF4LXctXFsyMjBweFxde21heC13aWR0aDoyMjBweH0ubWF4LXctXFszNjBweFxde21heC13aWR0aDozNjBweH0ubWF4LXctZnVsbHttYXgtd2lkdGg6MTAwJX0ubWluLXctMHttaW4td2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubWluLXctXFs1NnB4XF17bWluLXdpZHRoOjU2cHh9Lm1pbi13LVxbMjAwcHhcXXttaW4td2lkdGg6MjAwcHh9Lm1pbi13LVxbMjIwcHhcXXttaW4td2lkdGg6MjIwcHh9Lm1pbi13LXB4e21pbi13aWR0aDoxcHh9LmZsZXgtMXtmbGV4OjF9LnNocmlua3tmbGV4LXNocmluazoxfS5zaHJpbmstMHtmbGV4LXNocmluazowfS5ncm93e2ZsZXgtZ3JvdzoxfS4tdHJhbnNsYXRlLXgtMVwvMnstLXR3LXRyYW5zbGF0ZS14OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zbGF0ZS14LTF7LS10dy10cmFuc2xhdGUteDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9Li10cmFuc2xhdGUteS0xXC8yey0tdHctdHJhbnNsYXRlLXk6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0udHJhbnNmb3Jte3RyYW5zZm9ybTp2YXIoLS10dy1yb3RhdGUteCwpdmFyKC0tdHctcm90YXRlLXksKXZhcigtLXR3LXJvdGF0ZS16LCl2YXIoLS10dy1za2V3LXgsKXZhcigtLXR3LXNrZXcteSwpfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjdzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjdzIGxpbmVhciBpbmZpbml0ZX0uYW5pbWF0ZS1cW2dyaWQtc3Bpbl8wXC44c19saW5lYXJfaW5maW5pdGVcXXthbmltYXRpb246Z3JpZC1zcGluIC44cyBsaW5lYXIgaW5maW5pdGV9LmN1cnNvci1jb2wtcmVzaXple2N1cnNvcjpjb2wtcmVzaXplfS5jdXJzb3ItZGVmYXVsdHtjdXJzb3I6ZGVmYXVsdH0uY3Vyc29yLW5vdC1hbGxvd2Vke2N1cnNvcjpub3QtYWxsb3dlZH0uY3Vyc29yLXBvaW50ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmN1cnNvci1wcm9ncmVzc3tjdXJzb3I6cHJvZ3Jlc3N9LmN1cnNvci10ZXh0e2N1cnNvcjp0ZXh0fS50b3VjaC1ub25le3RvdWNoLWFjdGlvbjpub25lfS5yZXNpemV7cmVzaXplOmJvdGh9Lmxpc3Qtbm9uZXtsaXN0LXN0eWxlLXR5cGU6bm9uZX0uYXBwZWFyYW5jZS1ub25le2FwcGVhcmFuY2U6bm9uZX0uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOjFmcl8xZnJfMWZyXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnIgMWZyfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6YXV0b18xZnJfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6YXV0b19taW5tYXhcKDBcLDFmclwpX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byBtaW5tYXgoMCwxZnIpYXV0b30uZ3JpZC1jb2xzLVxbNTZweF8xZnJfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczo1NnB4IDFmciBhdXRvfS5mbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcH0ucGxhY2UtaXRlbXMtY2VudGVye3BsYWNlLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uZ2FwLVxbNXB4XF17Z2FwOjVweH0uZ2FwLXB4e2dhcDoxcHh9Lmp1c3RpZnktc2VsZi1lbmR7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS50cnVuY2F0ZXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lm92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59Lm92ZXJmbG93LXktYXV0b3tvdmVyZmxvdy15OmF1dG99LnJvdW5kZWR7Ym9yZGVyLXJhZGl1czouMjVyZW19LnJvdW5kZWQtXFsycHhcXXtib3JkZXItcmFkaXVzOjJweH0ucm91bmRlZC1cWzNweFxde2JvcmRlci1yYWRpdXM6M3B4fS5yb3VuZGVkLVxbNHB4XF17Ym9yZGVyLXJhZGl1czo0cHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFs5cHhcXXtib3JkZXItcmFkaXVzOjlweH0ucm91bmRlZC1cWzEwcHhcXXtib3JkZXItcmFkaXVzOjEwcHh9LnJvdW5kZWQtXFsxNHB4XF17Ym9yZGVyLXJhZGl1czoxNHB4fS5yb3VuZGVkLWZ1bGx7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LnJvdW5kZWQtbGd7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbGcpfS5yb3VuZGVkLW1ke2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLW1kKX0ucm91bmRlZC1ub25le2JvcmRlci1yYWRpdXM6MH0ucm91bmRlZC14bHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy14bCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMHtib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MH0uYm9yZGVyLTJ7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjJweH0uYm9yZGVyLXR7Ym9yZGVyLXRvcC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci10b3Atd2lkdGg6MXB4fS5ib3JkZXItcntib3JkZXItcmlnaHQtc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItcmlnaHQtd2lkdGg6MXB4fS5ib3JkZXItZGFzaGVkey0tdHctYm9yZGVyLXN0eWxlOmRhc2hlZDtib3JkZXItc3R5bGU6ZGFzaGVkfS5ib3JkZXItbm9uZXstLXR3LWJvcmRlci1zdHlsZTpub25lO2JvcmRlci1zdHlsZTpub25lfS5cIWJvcmRlci1cW3JnYmFcKDEwXCwxMzJcLDI1NVwsMFwuNlwpXF17Ym9yZGVyLWNvbG9yOiMwYTg0ZmY5OSFpbXBvcnRhbnR9LmJvcmRlci1cW1wjM2I1Zjk5XF17Ym9yZGVyLWNvbG9yOiMzYjVmOTl9LmJvcmRlci1cW1wjNWY2MjY4XF17Ym9yZGVyLWNvbG9yOiM1ZjYyNjh9LmJvcmRlci1cW1wjMjIyXF17Ym9yZGVyLWNvbG9yOiMyMjJ9LmJvcmRlci1cW1wjZmY0NTNhXF1cLzUwe2JvcmRlci1jb2xvcjojZmY0NTNhODA7Ym9yZGVyLWNvbG9yOmNvbG9yKGRpc3BsYXktcDMgLjkyMjY3MyAuMzMzMTM0IC4yNzE1MS8uNSk7Ym9yZGVyLWNvbG9yOmxhYig1OC43NjI4JSA2OS44NDY3IDUwLjM4ODYvLjUpfS5ib3JkZXItYWNjZW50e2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci1hY2NlbnQpfS5ib3JkZXItZGFuZ2VyXC8yMHtib3JkZXItY29sb3I6I2Y4NzE3MTMzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci1kYW5nZXJcLzIwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTIwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItZGFuZ2VyXC8zMHtib3JkZXItY29sb3I6I2Y4NzE3MTRkfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci1kYW5nZXJcLzMwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTMwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2FybmluZ1wvMjV7Ym9yZGVyLWNvbG9yOiNmYmJmMjQ0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2FybmluZ1wvMjV7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13YXJuaW5nKTI1JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGV7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYm9yZGVyLXdoaXRlXC84e2JvcmRlci1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC84e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8xMHtib3JkZXItY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMTB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8xMntib3JkZXItY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMTJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8yMHtib3JkZXItY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8yMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzI1e2JvcmRlci1jb2xvcjojZmZmZmZmNDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8yNXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTI1JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzMwe2JvcmRlci1jb2xvcjojZmZmZmZmNGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8zMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTMwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcL1xbMFwuMDZcXXtib3JkZXItY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvXFswXC4wNlxde2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXQtXFtcI2Y0ZjRmNVxde2JvcmRlci10b3AtY29sb3I6I2Y0ZjRmNX0uYm9yZGVyLXQtd2hpdGV7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJvcmRlci10LXdoaXRlXC82MHtib3JkZXItdG9wLWNvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci10LXdoaXRlXC82MHtib3JkZXItdG9wLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0uXCFiZy1cW3JnYmFcKDEwXCwxMzJcLDI1NVwsMFwuMDhcKVxde2JhY2tncm91bmQtY29sb3I6IzBhODRmZjE0IWltcG9ydGFudH0uXCFiZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmIWltcG9ydGFudH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cIWJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KSFpbXBvcnRhbnR9fS5iZy1cW1wjMGEwYTBjXF17YmFja2dyb3VuZC1jb2xvcjojMGEwYTBjfS5iZy1cW1wjMGE4NGZmXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmfS5iZy1cW1wjMWMxYzFjXF17YmFja2dyb3VuZC1jb2xvcjojMWMxYzFjfS5iZy1cW1wjNmU2ZTcyXF17YmFja2dyb3VuZC1jb2xvcjojNmU2ZTcyfS5iZy1cW1wjOWE5YTllXF17YmFja2dyb3VuZC1jb2xvcjojOWE5YTllfS5iZy1cW1wjMjAyYjNhXF17YmFja2dyb3VuZC1jb2xvcjojMjAyYjNhfS5iZy1cW1wjMjIyXF17YmFja2dyb3VuZC1jb2xvcjojMjIyfS5iZy1cW1wjMjYzNjRjXF17YmFja2dyb3VuZC1jb2xvcjojMjYzNjRjfS5iZy1cW1wjMTAxMDEwXF17YmFja2dyb3VuZC1jb2xvcjojMTAxMDEwfS5iZy1cW1wjZjg3MTcxXF17YmFja2dyb3VuZC1jb2xvcjojZjg3MTcxfS5iZy1cW1wjZmY0NTNhXF1cLzEwe2JhY2tncm91bmQtY29sb3I6I2ZmNDUzYTFhO2JhY2tncm91bmQtY29sb3I6Y29sb3IoZGlzcGxheS1wMyAuOTIyNjczIC4zMzMxMzQgLjI3MTUxLy4xKTtiYWNrZ3JvdW5kLWNvbG9yOmxhYig1OC43NjI4JSA2OS44NDY3IDUwLjM4ODYvLjEpfS5iZy1cW3JnYmFcKDEwXCwxMzJcLDI1NVwsMFwuMjJcKVxde2JhY2tncm91bmQtY29sb3I6IzBhODRmZjM4fS5iZy1cW3JnYmFcKDk5XCwxMDJcLDI0MVwsMFwuMThcKVxde2JhY2tncm91bmQtY29sb3I6IzYzNjZmMTJlfS5iZy1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1hY2NlbnQpfS5iZy1ibGFja3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWJsYWNrKX0uYmctYmxhY2tcLzkwe2JhY2tncm91bmQtY29sb3I6IzAwMDAwMGU2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWJsYWNrXC85MHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1ibGFjayk5MCUsdHJhbnNwYXJlbnQpfX0uYmctZGFuZ2VyLXNvZnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjojZjg3MTcxMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctZGFuZ2VyXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMTAlLHRyYW5zcGFyZW50KX19LmJnLXBhZ2V7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYWdlKX0uYmctcGFuZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbCl9LmJnLXBhbmVsLWJne2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtYmcpfS5iZy1wYW5lbC1iZy10cmFuc2x1Y2VudHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWJnLXRyYW5zbHVjZW50KX0uYmctcGFuZWwtZGVlcHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWRlZXApfS5iZy1wYW5lbC1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtb3ZlcmxheSl9LmJnLXN1Y2Nlc3MtZW1lcmFsZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXN1Y2Nlc3MtZW1lcmFsZCl9LmJnLXRyYW5zcGFyZW50e2JhY2tncm91bmQtY29sb3I6IzAwMDB9LmJnLXdhcm5pbmdcLzEwe2JhY2tncm91bmQtY29sb3I6I2ZiYmYyNDFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdhcm5pbmdcLzEwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdhcm5pbmcpMTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5iZy13aGl0ZVwvNntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvOHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvOHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvMTB7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzEwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvMTJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzEye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvMTV7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzE1e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTE1JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvMjB7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMjB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC80MHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC80MHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzUwe2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC81MHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDNcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwOH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wM1xde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTMlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA0XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDRcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wNlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA2XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDhcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wOFxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYyOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4xNlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTE2JSx0cmFuc3BhcmVudCl9fS5iZy1cW2xpbmVhci1ncmFkaWVudFwoMTQ1ZGVnXCxcIzI1M2E1ZlwsXCMxNjIxMzJcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDE0NWRlZywjMjUzYTVmLCMxNjIxMzIpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fYm90dG9tXCxcIzFjMWMxZV8wXCVcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8xMDBcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoIzFjMWMxZSAwJSwjMWMxYzFlMDAgMTAwJSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b19yaWdodFwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzBcJVwsXCMxYzFjMWVfNTVcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoOTBkZWcsIzFjMWMxZTAwIDAlLCMxYzFjMWUgNTUlKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX3RvcFwsXCMxYzFjMWVfMFwlXCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxYzFjMWUwMCAwJSwjMWMxYzFlIDEwMCUpfS5vYmplY3QtY29udGFpbntvYmplY3QtZml0OmNvbnRhaW59Lm9iamVjdC1jb3ZlcntvYmplY3QtZml0OmNvdmVyfS5wLTB7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5wLTBcLjV7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucC0xe3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucC0zXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5wLTZ7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5weC0wXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5weC0xe3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnB4LTFcLjV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5weC0ye3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMil9LnB4LTJcLjV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5weC0ze3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnB4LTNcLjV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5weC00e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnB4LTV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0ucHgtXFs1XC41cHhcXXtwYWRkaW5nLWlubGluZS1zdGFydDo1LjVweDtwYWRkaW5nLWlubGluZS1lbmQ6NS41cHh9LnB4LVxbN3B4XF17cGFkZGluZy1pbmxpbmUtc3RhcnQ6N3B4O3BhZGRpbmctaW5saW5lLWVuZDo3cHh9LnB5LTBcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHktMXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnB5LTFcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnB5LTJ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weS0yXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5weS00e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucHktNntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqNil9LnB5LVxbMnB4XF17cGFkZGluZy1ibG9jay1zdGFydDoycHg7cGFkZGluZy1ibG9jay1lbmQ6MnB4fS5weS1cWzNweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6M3B4O3BhZGRpbmctYmxvY2stZW5kOjNweH0ucHktXFs1cHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjVweDtwYWRkaW5nLWJsb2NrLWVuZDo1cHh9LnB5LVxbN3B4XF17cGFkZGluZy1ibG9jay1zdGFydDo3cHg7cGFkZGluZy1ibG9jay1lbmQ6N3B4fS5wdC0wXC41e3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wdC0xe3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnB0LTJcLjV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5wci0ye3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHItM1wuNXtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHItXFsyNnB4XF17cGFkZGluZy1yaWdodDoyNnB4fS5wYi0wXC41e3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wYi0xe3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnBiLTFcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5wYi0ye3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMil9LnBiLVxbMnB4XF17cGFkZGluZy1ib3R0b206MnB4fS5wbC0ye3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wbC0yXC41e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnBsLTN7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnBsLTd7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LnBsLVxbMjZweFxde3BhZGRpbmctbGVmdDoyNnB4fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0udGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS5cW2ZvbnQtZmFtaWx5XDotYXBwbGUtc3lzdGVtXCxzeXN0ZW0tdWlcLHNhbnMtc2VyaWZcXXtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxCbGlua01hY1N5c3RlbUZvbnQsU2Vnb2UgVUksUm9ib3RvLE5vdG8gU2FucyxVYnVudHUsQ2FudGFyZWxsLEhlbHZldGljYSBOZXVlLHNhbnMtc2VyaWZ9LmZvbnQtXFtpbmhlcml0XF17Zm9udC1mYW1pbHk6aW5oZXJpdH0uZm9udC1tb25ve2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyl9LmZvbnQtc3lzdGVte2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc3lzdGVtKX0udGV4dC1cWzlweFxde2ZvbnQtc2l6ZTo5cHh9LnRleHQtXFsxMHB4XF17Zm9udC1zaXplOjEwcHh9LnRleHQtXFsxMVwuNXB4XF17Zm9udC1zaXplOjExLjVweH0udGV4dC1cWzExcHhcXXtmb250LXNpemU6MTFweH0udGV4dC1cWzEycHhcXXtmb250LXNpemU6MTJweH0udGV4dC1cWzEzcHhcXXtmb250LXNpemU6MTNweH0udGV4dC1cWzE0cHhcXXtmb250LXNpemU6MTRweH0udGV4dC1cWzE3cHhcXXtmb250LXNpemU6MTdweH0udGV4dC1cWzE4cHhcXXtmb250LXNpemU6MThweH0ubGVhZGluZy1cWzFcLjVcXXstLXR3LWxlYWRpbmc6MS41O2xpbmUtaGVpZ2h0OjEuNX0ubGVhZGluZy1cWzFcLjM1XF17LS10dy1sZWFkaW5nOjEuMzU7bGluZS1oZWlnaHQ6MS4zNX0ubGVhZGluZy1ub25ley0tdHctbGVhZGluZzoxO2xpbmUtaGVpZ2h0OjF9LmxlYWRpbmctc251Z3stLXR3LWxlYWRpbmc6dmFyKC0tbGVhZGluZy1zbnVnKTtsaW5lLWhlaWdodDp2YXIoLS1sZWFkaW5nLXNudWcpfS5sZWFkaW5nLXRpZ2h0ey0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXRpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1sZWFkaW5nLXRpZ2h0KX0uZm9udC1tZWRpdW17LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSl9LmZvbnQtc2VtaWJvbGR7LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpfS50cmFja2luZy1cWzBcLjFlbVxdey0tdHctdHJhY2tpbmc6LjFlbTtsZXR0ZXItc3BhY2luZzouMWVtfS50cmFja2luZy1cWzBcLjAyZW1cXXstLXR3LXRyYWNraW5nOi4wMmVtO2xldHRlci1zcGFjaW5nOi4wMmVtfS50cmFja2luZy1cWzBcLjA0ZW1cXXstLXR3LXRyYWNraW5nOi4wNGVtO2xldHRlci1zcGFjaW5nOi4wNGVtfS50cmFja2luZy1cWzBcLjA2ZW1cXXstLXR3LXRyYWNraW5nOi4wNmVtO2xldHRlci1zcGFjaW5nOi4wNmVtfS50cmFja2luZy1cWzBcLjA4ZW1cXXstLXR3LXRyYWNraW5nOi4wOGVtO2xldHRlci1zcGFjaW5nOi4wOGVtfS50cmFja2luZy13aWRley0tdHctdHJhY2tpbmc6dmFyKC0tdHJhY2tpbmctd2lkZSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tdHJhY2tpbmctd2lkZSl9LmJyZWFrLXdvcmRze292ZXJmbG93LXdyYXA6YnJlYWstd29yZH0udGV4dC1lbGxpcHNpc3t0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS53aGl0ZXNwYWNlLW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LlwhdGV4dC13aGl0ZXtjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSkhaW1wb3J0YW50fS50ZXh0LVxbXCMwYTBhMGNcXXtjb2xvcjojMGEwYTBjfS50ZXh0LVxbXCM4ZThlOTNcXXtjb2xvcjojOGU4ZTkzfS50ZXh0LVxbXCMzNGQzOTlcXXtjb2xvcjojMzRkMzk5fS50ZXh0LVxbXCMwNjIwMThcXXtjb2xvcjojMDYyMDE4fS50ZXh0LVxbXCNjOGQ3ZmZcXXtjb2xvcjojYzhkN2ZmfS50ZXh0LVxbXCNkMmU3ZmZcXXtjb2xvcjojZDJlN2ZmfS50ZXh0LVxbXCNmZmIzYWRcXXtjb2xvcjojZmZiM2FkfS50ZXh0LWFjY2VudHtjb2xvcjp2YXIoLS1jb2xvci1hY2NlbnQpfS50ZXh0LWFtYmVyLTQwMHtjb2xvcjp2YXIoLS1jb2xvci1hbWJlci00MDApfS50ZXh0LWN5YW4tNDAwe2NvbG9yOnZhcigtLWNvbG9yLWN5YW4tNDAwKX0udGV4dC1kYW5nZXJ7Y29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyKX0udGV4dC1kYW5nZXItc29mdHtjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LnRleHQtZW1lcmFsZC00MDB7Y29sb3I6dmFyKC0tY29sb3ItZW1lcmFsZC00MDApfS50ZXh0LXNreS00MDB7Y29sb3I6dmFyKC0tY29sb3Itc2t5LTQwMCl9LnRleHQtdmlvbGV0LTQwMHtjb2xvcjp2YXIoLS1jb2xvci12aW9sZXQtNDAwKX0udGV4dC13YXJuaW5nLXNvZnR7Y29sb3I6dmFyKC0tY29sb3Itd2FybmluZy1zb2Z0KX0udGV4dC13aGl0ZXtjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LnRleHQtd2hpdGVcLzMwe2NvbG9yOiNmZmZmZmY0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC8zMHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMzAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzM1e2NvbG9yOiNmZmZmZmY1OX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC8zNXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMzUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzQwe2NvbG9yOiNmZmY2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzQwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNDV7Y29sb3I6I2ZmZmZmZjczfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzQ1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNTB7Y29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzUwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNTV7Y29sb3I6I2ZmZmZmZjhjfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzU1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjB7Y29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNjB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC82NXtjb2xvcjojZmZmZmZmYTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNjV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTY1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC83MHtjb2xvcjojZmZmZmZmYjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNzB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTcwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC83NXtjb2xvcjojZmZmZmZmYmZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNzV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTc1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84MHtjb2xvcjojZmZmY31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC84MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzg1e2NvbG9yOiNmZmZmZmZkOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC84NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzkwe2NvbG9yOiNmZmZmZmZlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC85MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzk1e2NvbG9yOiNmZmZmZmZmMn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC85NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjojZmZmZmZmNmJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MiUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOiNmZmZmZmY3YX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjQ4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQ4JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6I2ZmZmZmZjk0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNThcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTguMCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOiNmZmZmZmZlYn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjkyXF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkyJSx0cmFuc3BhcmVudCl9fS5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS51cHBlcmNhc2V7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5pdGFsaWN7Zm9udC1zdHlsZTppdGFsaWN9LnRhYnVsYXItbnVtc3stLXR3LW51bWVyaWMtc3BhY2luZzp0YWJ1bGFyLW51bXM7Zm9udC12YXJpYW50LW51bWVyaWM6dmFyKC0tdHctb3JkaW5hbCwpdmFyKC0tdHctc2xhc2hlZC16ZXJvLCl2YXIoLS10dy1udW1lcmljLWZpZ3VyZSwpdmFyKC0tdHctbnVtZXJpYy1zcGFjaW5nLCl2YXIoLS10dy1udW1lcmljLWZyYWN0aW9uLCl9LlxbZm9udC12YXJpYW50LW51bWVyaWNcOnRhYnVsYXItbnVtc1xde2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ubm8tdW5kZXJsaW5le3RleHQtZGVjb3JhdGlvbi1saW5lOm5vbmV9LmFudGlhbGlhc2Vkey13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlfS5vcGFjaXR5LTB7b3BhY2l0eTowfS5vcGFjaXR5LTQwe29wYWNpdHk6LjR9Lm9wYWNpdHktNjB7b3BhY2l0eTouNn0ub3BhY2l0eS0xMDB7b3BhY2l0eToxfS5zaGFkb3d7LS10dy1zaGFkb3c6MCAxcHggM3B4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSksMCAxcHggMnB4IC0xcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzFweF8ycHhfcmdiYVwoMFwsMFwsMFwsMFwuMThcKVwsMF82cHhfMThweF9yZ2JhXCgwXCwwXCwwXCwwXC4yOFwpXCxpbnNldF8wXzBfMF8xcHhfcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMDZcKVxdey0tdHctc2hhZG93OjAgMXB4IDJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDJlKSwwIDZweCAxOHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNDcpLGluc2V0IDAgMCAwIDFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsI2ZmZmZmZjBmKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNFwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF84cHhfMjRweF9yZ2JhXCgwXCwwXCwwXCwwXC41XClcXXstLXR3LXNoYWRvdzowIDhweCAyNHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwODApO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF84cHhfMjRweF9yZ2JhXCgwXCwwXCwwXCwwXC40NVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDczKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMTJweF80MHB4X3JnYmFcKDBcLDBcLDBcLDBcLjU1XClcXXstLXR3LXNoYWRvdzowIDEycHggNDBweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDhjKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzhweF8wXzMycHhfcmdiYVwoMFwsMFwsMFwsMFwuMzVcKVxdey0tdHctc2hhZG93OjhweCAwIDMycHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA1OSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctbGd7LS10dy1zaGFkb3c6MCAxMHB4IDE1cHggLTNweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwwIDRweCA2cHggLTRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmcsLnJpbmctMXstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKTAgMCAwIGNhbGMoMXB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKXZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmctMnstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKTAgMCAwIGNhbGMoMnB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKXZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LlxbYm94LXNoYWRvd1w6MF8wXzZweF9yZ2JhXCg3NFwsMjIyXCwxMjhcLDBcLjdcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjNGFkZTgwYjN9LlxbYm94LXNoYWRvd1w6MF8wXzZweF9yZ2JhXCgyNDhcLDExM1wsMTEzXCwwXC41NVwpXF17Ym94LXNoYWRvdzowIDAgNnB4ICNmODcxNzE4Y30ucmluZy1cW1wjMWMxYzFlXF17LS10dy1yaW5nLWNvbG9yOiMxYzFjMWV9LnJpbmctd2hpdGVcLzEwey0tdHctcmluZy1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsucmluZy13aGl0ZVwvMTB7LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0ub3V0bGluZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MXB4fS5ibHVyey0tdHctYmx1cjpibHVyKDhweCk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5ncmF5c2NhbGV7LS10dy1ncmF5c2NhbGU6Z3JheXNjYWxlKDEwMCUpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uYmFja2Ryb3AtYmx1cnstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cig4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItXFsxMnB4XF17LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIoMTJweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzE4cHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxOHB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLW1key0tdHctYmFja2Ryb3AtYmx1cjpibHVyKHZhcigtLWJsdXItbWQpKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1zYXR1cmF0ZS0xNTB7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTpzYXR1cmF0ZSgxNTAlKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1maWx0ZXJ7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0udHJhbnNpdGlvbnt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvLG9wYWNpdHksYm94LXNoYWRvdyx0cmFuc2Zvcm0sdHJhbnNsYXRlLHNjYWxlLHJvdGF0ZSxmaWx0ZXIsLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIsYmFja2Ryb3AtZmlsdGVyLGRpc3BsYXksY29udGVudC12aXNpYmlsaXR5LG92ZXJsYXkscG9pbnRlci1ldmVudHM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1cW2JvcmRlci1jb2xvclwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1cW3dpZHRoXCxiYWNrZ3JvdW5kXF17dHJhbnNpdGlvbi1wcm9wZXJ0eTp3aWR0aCxiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tY29sb3Jze3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG87dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1vcGFjaXR5e3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS5kdXJhdGlvbi0xNTB7LS10dy1kdXJhdGlvbjouMTVzO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30uZHVyYXRpb24tMjAwey0tdHctZHVyYXRpb246LjJzO3RyYW5zaXRpb24tZHVyYXRpb246LjJzfS5kdXJhdGlvbi0zMDB7LS10dy1kdXJhdGlvbjouM3M7dHJhbnNpdGlvbi1kdXJhdGlvbjouM3N9LmVhc2Utb3V0ey0tdHctZWFzZTp2YXIoLS1lYXNlLW91dCk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tZWFzZS1vdXQpfS5vdXRsaW5lLW5vbmV7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uc2VsZWN0LXRleHR7LXdlYmtpdC11c2VyLXNlbGVjdDp0ZXh0O3VzZXItc2VsZWN0OnRleHR9LlxbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXJcOmJsdXJcKDEycHhcKVxdey13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCl9Llxbc2Nyb2xsYmFyLXdpZHRoXDp0aGluXF17c2Nyb2xsYmFyLXdpZHRoOnRoaW59Llxbc3RyZWFtXDphdmNjXF17c3RyZWFtOmF2Y2N9Llxbc3RyZWFtXDpoMjY0XF17c3RyZWFtOmgyNjR9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4yc1wsYm94LXNoYWRvd18wXC4yc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMsYm94LXNoYWRvdyAuMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4zc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuM3N9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGJvcmRlci1jb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxib3JkZXItY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xOHN9LlxbdHJhbnNpdGlvblw6bGVmdF8wXC4xNXNcXXt0cmFuc2l0aW9uOmxlZnQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjEyc1wsYmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246b3BhY2l0eSAuMTJzLGJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xNXNfZWFzZVwsYmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLGJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCx0cmFuc2Zvcm1fMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyx0cmFuc2Zvcm0gLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xOHN9LlxbdHJhbnNpdGlvblw6cGFkZGluZ18wXC4yNXNfZWFzZVxde3RyYW5zaXRpb246cGFkZGluZyAuMjVzfS5cW3RyYW5zaXRpb25cOnRyYW5zZm9ybV8wXC4yNXNfZWFzZVwsb3BhY2l0eV8wXC4yc19lYXNlXF17dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyxvcGFjaXR5IC4yc30uXFt0cmFuc2l0aW9uXDp3aWR0aF8xMjBtc19saW5lYXJcXXt0cmFuc2l0aW9uOndpZHRoIC4xMnMgbGluZWFyfS5ncm91cC1mb2N1cy13aXRoaW5cOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpmb2N1cy13aXRoaW4gKil7b3BhY2l0eTowfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6cG9pbnRlci1ldmVudHMtYXV0bzppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtwb2ludGVyLWV2ZW50czphdXRvfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOmJsb2NrOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope2Rpc3BsYXk6YmxvY2t9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6aGlkZGVuOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope2Rpc3BsYXk6bm9uZX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDp0cmFuc2xhdGUteC0wOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICopey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjB9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6b3BhY2l0eS0xMDA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eToxfX0ucGxhY2Vob2xkZXJcOnRleHQtd2hpdGVcLzQwOjpwbGFjZWhvbGRlcntjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5wbGFjZWhvbGRlclw6dGV4dC13aGl0ZVwvNDA6OnBsYWNlaG9sZGVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtd2l0aGluXDpiZy13aGl0ZVwvMTA6Zm9jdXMtd2l0aGlue2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXdpdGhpblw6Ymctd2hpdGVcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE2XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjI5fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE4XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjJlfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xMjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMmV9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMjA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzI1OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTI1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxMn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3LjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxN31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC1cW1wjMGEwYTBjXF06aG92ZXJ7Y29sb3I6IzBhMGEwY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlXC84NTpob3Zlcntjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOnRleHQtd2hpdGVcLzg1OmhvdmVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4NSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlXC85MDpob3Zlcntjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MCUsdHJhbnNwYXJlbnQpfX19LmZvY3VzXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4yNFwpXF06Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmZmZmYzZH0uZm9jdXNcOmJnLXdoaXRlXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXNcOmJnLXdoaXRlXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXNcOm91dGxpbmUtbm9uZTpmb2N1c3stLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LmZvY3VzLXZpc2libGVcOmJnLXdoaXRlXC84OmZvY3VzLXZpc2libGV7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtdmlzaWJsZVw6Ymctd2hpdGVcLzg6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5mb2N1cy12aXNpYmxlXDpvcGFjaXR5LTEwMDpmb2N1cy12aXNpYmxle29wYWNpdHk6MX0uZm9jdXMtdmlzaWJsZVw6XFtvdXRsaW5lXDoxXC41cHhfc29saWRfcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC41NVwpXF06Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjEuNXB4IHNvbGlkICMwYTg0ZmY4Y30uZm9jdXMtdmlzaWJsZVw6b3V0bGluZTpmb2N1cy12aXNpYmxle291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoxcHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtMjpmb2N1cy12aXNpYmxle291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoycHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtb2Zmc2V0LTI6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLW9mZnNldDoycHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtb2Zmc2V0LTQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLW9mZnNldDo0cHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtd2hpdGVcLzYwOmZvY3VzLXZpc2libGV7b3V0bGluZS1jb2xvcjojZmZmOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLXdoaXRlXC82MDpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS5hY3RpdmVcOnNjYWxlLVxbMFwuOTdcXTphY3RpdmV7c2NhbGU6Ljk3fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLVxbcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMThcKVxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyZX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy1cW1wjMmEyYTJjXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyYTJhMmN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wOVxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTd9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjIyXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYzOH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMjJcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIyJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOnRleHQtXFtcIzBhMGEwY1xdOmVuYWJsZWQ6aG92ZXJ7Y29sb3I6IzBhMGEwY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDp0ZXh0LXdoaXRlOmVuYWJsZWQ6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJyaWdodG5lc3MtXFsxXC4wOFxdOmVuYWJsZWQ6aG92ZXJ7LS10dy1icmlnaHRuZXNzOmJyaWdodG5lc3MoMS4wOCk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfX0uZGlzYWJsZWRcOmN1cnNvci1kZWZhdWx0OmRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5kaXNhYmxlZFw6Y3Vyc29yLW5vdC1hbGxvd2VkOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uZGlzYWJsZWRcOnRleHQtd2hpdGVcLzQwOmRpc2FibGVke2NvbG9yOiNmZmY2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmRpc2FibGVkXDp0ZXh0LXdoaXRlXC80MDpkaXNhYmxlZHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmRpc2FibGVkXDpvcGFjaXR5LTQwOmRpc2FibGVke29wYWNpdHk6LjR9LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9QG1lZGlhIChtYXgtd2lkdGg6ODk5Ljk5OXB4KXsubWF4LVxbOTAwcHhcXVw6aGlkZGVue2Rpc3BsYXk6bm9uZX19LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpoLVxbNHB4XF06Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7aGVpZ2h0OjRweH0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS1wcm9ncmVzc3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOmJnLVxbdmFyXCgtLXNsaWRlci1maWxsLWNvbG9yXClcXTo6LW1vei1yYW5nZS1wcm9ncmVzc3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXNsaWRlci1maWxsLWNvbG9yKX0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOnNpemUtXFsxM3B4XF06Oi1tb3otcmFuZ2UtdGh1bWJ7d2lkdGg6MTNweDtoZWlnaHQ6MTNweH0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS10aHVtYntib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJvcmRlci1ub25lOjotbW96LXJhbmdlLXRodW1iey0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZTo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmgtXFs0cHhcXTo6LW1vei1yYW5nZS10cmFja3toZWlnaHQ6NHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXRyYWNre2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6Ymctd2hpdGVcLzIwOjotbW96LXJhbmdlLXRyYWNre2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmJnLXdoaXRlXC8yMDo6LW1vei1yYW5nZS10cmFja3tiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja1xdXDpoLVxbNHB4XF06Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2hlaWdodDo0cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6cm91bmRlZC1mdWxsOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja1xdXDpcW2JhY2tncm91bmRcOmxpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHZhclwoLS1zbGlkZXItZmlsbC1jb2xvclwpX3ZhclwoLS1zbGlkZXItZmlsbFwpXCxyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4yMlwpX3ZhclwoLS1zbGlkZXItZmlsbFwpXClcXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpdmFyKC0tc2xpZGVyLWZpbGwpLCNmZmZmZmYzOCB2YXIoLS1zbGlkZXItZmlsbCkpfS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOi1tdC1cWzRcLjVweFxdOjotd2Via2l0LXNsaWRlci10aHVtYnttYXJnaW4tdG9wOi00LjVweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpzaXplLVxbMTNweFxdOjotd2Via2l0LXNsaWRlci10aHVtYnt3aWR0aDoxM3B4O2hlaWdodDoxM3B4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmFwcGVhcmFuY2Utbm9uZTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YXBwZWFyYW5jZTpub25lfS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnJvdW5kZWQtZnVsbDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGU6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnNoYWRvdy1cWzBfMXB4XzNweF9yZ2JhXCgwXCwwXCwwXCwwXC40NVwpXF06Oi13ZWJraXQtc2xpZGVyLXRodW1iey0tdHctc2hhZG93OjAgMXB4IDNweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDczKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LlxbXCZcOmRpc2FibGVkXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOmRpc2FibGVkXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fS5cW1wmXDpkaXNhYmxlZFw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOmRpc2FibGVkXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19fTpyb290ey0tYnVuY3NzLWxpZ2h0OiA7LS1idW5jc3MtZGFyazppbml0aWFsO2NvbG9yLXNjaGVtZTpkYXJrOy0tc2VydmUtc2ltLXBhbmVsLWJnOiMxODE4MTg7LS1zZXJ2ZS1zaW0tcGFuZWwtYmctdHJhbnNsdWNlbnQ6IzE4MTgxOGM3Oy0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zcGFyZW50OiMxODE4MTgwMH1Ac3VwcG9ydHMgKGludGVycG9sYXRlLXNpemU6IGFsbG93LWtleXdvcmRzKXs6cm9vdHtpbnRlcnBvbGF0ZS1zaXplOmFsbG93LWtleXdvcmRzfX1kZXRhaWxzLmxlbS1zZWN0aW9uOjpkZXRhaWxzLWNvbnRlbnR7b3ZlcmZsb3c6Y2xpcDt0cmFuc2l0aW9uOmhlaWdodCAuMjJzIGVhc2UsY29udGVudC12aXNpYmlsaXR5IC4yMnMgYWxsb3ctZGlzY3JldGU7aGVpZ2h0OjB9ZGV0YWlscy5sZW0tc2VjdGlvbltvcGVuXTo6ZGV0YWlscy1jb250ZW50e2hlaWdodDphdXRvfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeXtsaXN0LXN0eWxlOm5vbmV9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX1kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnk6aG92ZXJ7Y29sb3I6I2ZmZn1kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnk6aG92ZXIgLmxlbS1jaGV2cm9ue2NvbG9yOiNmZmZmZmZkOSFpbXBvcnRhbnR9LmxlbS1jaGV2cm9ue3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNnMsY29sb3IgLjEyc31AY29udGFpbmVyICh3aWR0aDw9MjEwcHgpe1tkYXRhLWxvY2F0aW9uLXN0YXR1cy10b3RhbF17ZGlzcGxheTpub25lfX1Aa2V5ZnJhbWVzIGdyaWQtc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGV7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtMTAwJSl9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZSgyNTAlKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtcG9wLWluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxMnB4KXNjYWxlKC45Nil9dG97b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApc2NhbGUoMSl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LXBvcC1vdXR7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApc2NhbGUoMSl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDhweClzY2FsZSguOTYpfX0uc2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGV7YW5pbWF0aW9uOnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGV9LmdyaWQtc2h1dGRvd24tYnRue29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjEycyxiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uZ3JpZC10aWxlOmhvdmVyIC5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjF9LmdyaWQtc2h1dGRvd24tYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNWExZDFkO2JvcmRlci1jb2xvcjojYTMzfS5ncmlkLXRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM1NTUhaW1wb3J0YW50fUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJvcmRlci1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctbGVhZGluZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWZvbnQtd2VpZ2h0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctdHJhY2tpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1vcmRpbmFse3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2xhc2hlZC16ZXJve3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1maWd1cmV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLXNwYWNpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZyYWN0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctcmluZy1pbnNldHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXdpZHRoe3N5bnRheDoiPGxlbmd0aD4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6I2ZmZn1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1vdXRsaW5lLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYnJpZ2h0bmVzc3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWNvbnRyYXN0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZ3JheXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaHVlLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWludmVydHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zYXR1cmF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNlcGlhe3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctc2l6ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kdXJhdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWVhc2V7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AbGF5ZXIgcHJvcGVydGllc3tAc3VwcG9ydHMgKCgtd2Via2l0LWh5cGhlbnM6IG5vbmUpIGFuZCAoIG5vdCAobWFyZ2luLXRyaW06IGlubGluZSkpKSBvciAoKC1tb3otb3JpZW50OiBpbmxpbmUpIGFuZCAoIG5vdCAoY29sb3I6cmdiKGZyb20gcmVkIHIgZyBiKSkpKXsqLDpiZWZvcmUsOmFmdGVyLDo6YmFja2Ryb3B7LS10dy10cmFuc2xhdGUteDowOy0tdHctdHJhbnNsYXRlLXk6MDstLXR3LXRyYW5zbGF0ZS16OjA7LS10dy1yb3RhdGUteDppbml0aWFsOy0tdHctcm90YXRlLXk6aW5pdGlhbDstLXR3LXJvdGF0ZS16OmluaXRpYWw7LS10dy1za2V3LXg6aW5pdGlhbDstLXR3LXNrZXcteTppbml0aWFsOy0tdHctYm9yZGVyLXN0eWxlOnNvbGlkOy0tdHctbGVhZGluZzppbml0aWFsOy0tdHctZm9udC13ZWlnaHQ6aW5pdGlhbDstLXR3LXRyYWNraW5nOmluaXRpYWw7LS10dy1vcmRpbmFsOmluaXRpYWw7LS10dy1zbGFzaGVkLXplcm86aW5pdGlhbDstLXR3LW51bWVyaWMtZmlndXJlOmluaXRpYWw7LS10dy1udW1lcmljLXNwYWNpbmc6aW5pdGlhbDstLXR3LW51bWVyaWMtZnJhY3Rpb246aW5pdGlhbDstLXR3LXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctaW5zZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtc2hhZG93LWFscGhhOjEwMCU7LS10dy1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLWluc2V0OmluaXRpYWw7LS10dy1yaW5nLW9mZnNldC13aWR0aDowcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjojZmZmOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LW91dGxpbmUtc3R5bGU6c29saWQ7LS10dy1ibHVyOmluaXRpYWw7LS10dy1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1jb250cmFzdDppbml0aWFsOy0tdHctZ3JheXNjYWxlOmluaXRpYWw7LS10dy1odWUtcm90YXRlOmluaXRpYWw7LS10dy1pbnZlcnQ6aW5pdGlhbDstLXR3LW9wYWNpdHk6aW5pdGlhbDstLXR3LXNhdHVyYXRlOmluaXRpYWw7LS10dy1zZXBpYTppbml0aWFsOy0tdHctZHJvcC1zaGFkb3c6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1hbHBoYToxMDAlOy0tdHctZHJvcC1zaGFkb3ctc2l6ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtYmx1cjppbml0aWFsOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczppbml0aWFsOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaW52ZXJ0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1vcGFjaXR5OmluaXRpYWw7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2VwaWE6aW5pdGlhbDstLXR3LWR1cmF0aW9uOmluaXRpYWw7LS10dy1lYXNlOmluaXRpYWx9fX0KPC9zdHlsZT4KPC9oZWFkPjxib2R5Pgo8ZGl2IGlkPSJyb290Ij48L2Rpdj4KPCEtLV9fU0lNX1BSRVZJRVdfQ09ORklHX18tLT4KPHNjcmlwdCB0eXBlPSJtb2R1bGUiPnZhciBfMix0LEE4LFk3LFIwLEY4LE04LFc4LHQ1LFk1LE0yLF84LFozLGU1LCQzLFA4LHE1PXt9LEc1PVtdLHE3PS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksUDI9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiB3MCgkLEope2Zvcih2YXIgUSBpbiBKKSRbUV09SltRXTtyZXR1cm4gJH1mdW5jdGlvbiBYMygkKXskJiYkLnBhcmVudE5vZGUmJiQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCgkKX1mdW5jdGlvbiB1MSgkLEosUSl7dmFyIFgsSyxZLHE9e307Zm9yKFkgaW4gSilZPT0ia2V5Ij9YPUpbWV06WT09InJlZiI/Sz1KW1ldOnFbWV09SltZXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihxLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9fMi5jYWxsKGFyZ3VtZW50cywyKTpRKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmJC5kZWZhdWx0UHJvcHMhPW51bGwpZm9yKFkgaW4gJC5kZWZhdWx0UHJvcHMpcVtZXT09PXZvaWQgMCYmKHFbWV09JC5kZWZhdWx0UHJvcHNbWV0pO3JldHVybiBXMigkLHEsWCxLLG51bGwpfWZ1bmN0aW9uIFcyKCQsSixRLFgsSyl7dmFyIFk9e3R5cGU6JCxwcm9wczpKLGtleTpRLHJlZjpYLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpLPT1udWxsPysrQTg6SyxfX2k6LTEsX191OjB9O3JldHVybiBLPT1udWxsJiZ0LnZub2RlIT1udWxsJiZ0LnZub2RlKFkpLFl9ZnVuY3Rpb24gRDIoKXtyZXR1cm57Y3VycmVudDpudWxsfX1mdW5jdGlvbiBaMSgkKXtyZXR1cm4gJC5jaGlsZHJlbn1mdW5jdGlvbiBvMSgkLEope3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9Sn1mdW5jdGlvbiAkMigkLEope2lmKEo9PW51bGwpcmV0dXJuICQuX18/JDIoJC5fXywkLl9faSsxKTpudWxsO2Zvcih2YXIgUTtKPCQuX19rLmxlbmd0aDtKKyspaWYoKFE9JC5fX2tbSl0pIT1udWxsJiZRLl9fZSE9bnVsbClyZXR1cm4gUS5fX2U7cmV0dXJuIHR5cGVvZiAkLnR5cGU9PSJmdW5jdGlvbiI/JDIoJCk6bnVsbH1mdW5jdGlvbiBHNygkKXtpZigkLl9fUCYmJC5fX2Qpe3ZhciBKPSQuX192LFE9Si5fX2UsWD1bXSxLPVtdLFk9dzAoe30sSik7WS5fX3Y9Si5fX3YrMSx0LnZub2RlJiZ0LnZub2RlKFkpLEszKCQuX19QLFksSiwkLl9fbiwkLl9fUC5uYW1lc3BhY2VVUkksMzImSi5fX3U/W1FdOm51bGwsWCxRPT1udWxsPyQyKEopOlEsISEoMzImSi5fX3UpLEspLFkuX192PUouX192LFkuX18uX19rW1kuX19pXT1ZLEk4KFgsWSxLKSxKLl9fZT1KLl9fPW51bGwsWS5fX2UhPVEmJkQ4KFkpfX1mdW5jdGlvbiBEOCgkKXtpZigoJD0kLl9fKSE9bnVsbCYmJC5fX2MhPW51bGwpcmV0dXJuICQuX19lPSQuX19jLmJhc2U9bnVsbCwkLl9fay5zb21lKGZ1bmN0aW9uKEope2lmKEohPW51bGwmJkouX19lIT1udWxsKXJldHVybiAkLl9fZT0kLl9fYy5iYXNlPUouX19lfSksRDgoJCl9ZnVuY3Rpb24gSjMoJCl7KCEkLl9fZCYmKCQuX19kPSEwKSYmUjAucHVzaCgkKSYmIVY1Ll9fcisrfHxGOCE9dC5kZWJvdW5jZVJlbmRlcmluZykmJigoRjg9dC5kZWJvdW5jZVJlbmRlcmluZyl8fE04KShWNSl9ZnVuY3Rpb24gVjUoKXt0cnl7Zm9yKHZhciAkLEo9MTtSMC5sZW5ndGg7KVIwLmxlbmd0aD5KJiZSMC5zb3J0KFc4KSwkPVIwLnNoaWZ0KCksSj1SMC5sZW5ndGgsRzcoJCl9ZmluYWxseXtSMC5sZW5ndGg9VjUuX19yPTB9fWZ1bmN0aW9uIHc4KCQsSixRLFgsSyxZLHEsRyxCLE4sTCl7dmFyIFYsQyxVLE8seixILEYsQT1YJiZYLl9fa3x8RzUsYj1KLmxlbmd0aDtmb3IoQj1WNyhRLEosQSxCLGIpLFY9MDtWPGI7VisrKShVPVEuX19rW1ZdKSE9bnVsbCYmKEM9VS5fX2khPS0xJiZBW1UuX19pXXx8cTUsVS5fX2k9VixIPUszKCQsVSxDLEssWSxxLEcsQixOLEwpLE89VS5fX2UsVS5yZWYmJkMucmVmIT1VLnJlZiYmKEMucmVmJiZZMyhDLnJlZixudWxsLFUpLEwucHVzaChVLnJlZixVLl9fY3x8TyxVKSksej09bnVsbCYmTyE9bnVsbCYmKHo9TyksKEY9ISEoNCZVLl9fdSkpfHxDLl9faz09PVUuX19rPyhCPVQ4KFUsQiwkLEYpLEYmJkMuX19lJiYoQy5fX2U9bnVsbCkpOnR5cGVvZiBVLnR5cGU9PSJmdW5jdGlvbiImJkghPT12b2lkIDA/Qj1IOk8mJihCPU8ubmV4dFNpYmxpbmcpLFUuX191Jj0tNyk7cmV0dXJuIFEuX19lPXosQn1mdW5jdGlvbiBWNygkLEosUSxYLEspe3ZhciBZLHEsRyxCLE4sTD1RLmxlbmd0aCxWPUwsQz0wO2ZvcigkLl9faz1BcnJheShLKSxZPTA7WTxLO1krKykocT1KW1ldKSE9bnVsbCYmdHlwZW9mIHEhPSJib29sZWFuIiYmdHlwZW9mIHEhPSJmdW5jdGlvbiI/KHR5cGVvZiBxPT0ic3RyaW5nInx8dHlwZW9mIHE9PSJudW1iZXIifHx0eXBlb2YgcT09ImJpZ2ludCJ8fHEuY29uc3RydWN0b3I9PVN0cmluZz9xPSQuX19rW1ldPVcyKG51bGwscSxudWxsLG51bGwsbnVsbCk6UDIocSk/cT0kLl9fa1tZXT1XMihaMSx7Y2hpbGRyZW46cX0sbnVsbCxudWxsLG51bGwpOnEuY29uc3RydWN0b3I9PT12b2lkIDAmJnEuX19iPjA/cT0kLl9fa1tZXT1XMihxLnR5cGUscS5wcm9wcyxxLmtleSxxLnJlZj9xLnJlZjpudWxsLHEuX192KTokLl9fa1tZXT1xLEI9WStDLHEuX189JCxxLl9fYj0kLl9fYisxLEc9bnVsbCwoTj1xLl9faT1CNyhxLFEsQixWKSkhPS0xJiYoVi0tLChHPVFbTl0pJiYoRy5fX3V8PTIpKSxHPT1udWxsfHxHLl9fdj09bnVsbD8oTj09LTEmJihLPkw/Qy0tOks8TCYmQysrKSx0eXBlb2YgcS50eXBlIT0iZnVuY3Rpb24iJiYocS5fX3V8PTQpKTpOIT1CJiYoTj09Qi0xP0MtLTpOPT1CKzE/QysrOihOPkI/Qy0tOkMrKyxxLl9fdXw9NCkpKTokLl9fa1tZXT1udWxsO2lmKFYpZm9yKFk9MDtZPEw7WSsrKShHPVFbWV0pIT1udWxsJiYoMiZHLl9fdSk9PTAmJihHLl9fZT09WCYmKFg9JDIoRykpLHk4KEcsRykpO3JldHVybiBYfWZ1bmN0aW9uIFQ4KCQsSixRLFgpe3ZhciBLLFk7aWYodHlwZW9mICQudHlwZT09ImZ1bmN0aW9uIil7Zm9yKEs9JC5fX2ssWT0wO0smJlk8Sy5sZW5ndGg7WSsrKUtbWV0mJihLW1ldLl9fPSQsSj1UOChLW1ldLEosUSxYKSk7cmV0dXJuIEp9JC5fX2UhPUomJihYJiYoSiYmJC50eXBlJiYhSi5wYXJlbnROb2RlJiYoSj0kMigkKSksUS5pbnNlcnRCZWZvcmUoJC5fX2UsSnx8bnVsbCkpLEo9JC5fX2UpO2RvIEo9SiYmSi5uZXh0U2libGluZzt3aGlsZShKIT1udWxsJiZKLm5vZGVUeXBlPT04KTtyZXR1cm4gSn1mdW5jdGlvbiBYMCgkLEope3JldHVybiBKPUp8fFtdLCQ9PW51bGx8fHR5cGVvZiAkPT0iYm9vbGVhbiJ8fChQMigkKT8kLnNvbWUoZnVuY3Rpb24oUSl7WDAoUSxKKX0pOkoucHVzaCgkKSksSn1mdW5jdGlvbiBCNygkLEosUSxYKXt2YXIgSyxZLHEsRz0kLmtleSxCPSQudHlwZSxOPUpbUV0sTD1OIT1udWxsJiYoMiZOLl9fdSk9PTA7aWYoTj09PW51bGwmJkc9PW51bGx8fEwmJkc9PU4ua2V5JiZCPT1OLnR5cGUpcmV0dXJuIFE7aWYoWD4oTD8xOjApKXtmb3IoSz1RLTEsWT1RKzE7Sz49MHx8WTxKLmxlbmd0aDspaWYoKE49SltxPUs+PTA/Sy0tOlkrK10pIT1udWxsJiYoMiZOLl9fdSk9PTAmJkc9PU4ua2V5JiZCPT1OLnR5cGUpcmV0dXJuIHF9cmV0dXJuLTF9ZnVuY3Rpb24gTzgoJCxKLFEpe0pbMF09PSItIj8kLnNldFByb3BlcnR5KEosUT09bnVsbD8iIjpRKTokW0pdPVE9PW51bGw/IiI6dHlwZW9mIFEhPSJudW1iZXIifHxxNy50ZXN0KEopP1E6USsicHgifWZ1bmN0aW9uIEs1KCQsSixRLFgsSyl7dmFyIFkscTskOmlmKEo9PSJzdHlsZSIpaWYodHlwZW9mIFE9PSJzdHJpbmciKSQuc3R5bGUuY3NzVGV4dD1RO2Vsc2V7aWYodHlwZW9mIFg9PSJzdHJpbmciJiYoJC5zdHlsZS5jc3NUZXh0PVg9IiIpLFgpZm9yKEogaW4gWClRJiZKIGluIFF8fE84KCQuc3R5bGUsSiwiIik7aWYoUSlmb3IoSiBpbiBRKVgmJlFbSl09PVhbSl18fE84KCQuc3R5bGUsSixRW0pdKX1lbHNlIGlmKEpbMF09PSJvIiYmSlsxXT09Im4iKVk9SiE9KEo9Si5yZXBsYWNlKF84LCIkMSIpKSxxPUoudG9Mb3dlckNhc2UoKSxKPXEgaW4gJHx8Sj09Im9uRm9jdXNPdXQifHxKPT0ib25Gb2N1c0luIj9xLnNsaWNlKDIpOkouc2xpY2UoMiksJC5sfHwoJC5sPXt9KSwkLmxbSitZXT1RLFE/WD9RW00yXT1YW00yXTooUVtNMl09WjMsJC5hZGRFdmVudExpc3RlbmVyKEosWT8kMzplNSxZKSk6JC5yZW1vdmVFdmVudExpc3RlbmVyKEosWT8kMzplNSxZKTtlbHNle2lmKEs9PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpSj1KLnJlcGxhY2UoL3hsaW5rKEh8OmgpLywiaCIpLnJlcGxhY2UoL3NOYW1lJC8sInMiKTtlbHNlIGlmKEohPSJ3aWR0aCImJkohPSJoZWlnaHQiJiZKIT0iaHJlZiImJkohPSJsaXN0IiYmSiE9ImZvcm0iJiZKIT0idGFiSW5kZXgiJiZKIT0iZG93bmxvYWQiJiZKIT0icm93U3BhbiImJkohPSJjb2xTcGFuIiYmSiE9InJvbGUiJiZKIT0icG9wb3ZlciImJkogaW4gJCl0cnl7JFtKXT1RPT1udWxsPyIiOlE7YnJlYWsgJH1jYXRjaChHKXt9dHlwZW9mIFE9PSJmdW5jdGlvbiJ8fChRPT1udWxsfHxRPT09ITEmJkpbNF0hPSItIj8kLnJlbW92ZUF0dHJpYnV0ZShKKTokLnNldEF0dHJpYnV0ZShKLEo9PSJwb3BvdmVyIiYmUT09MT8iIjpRKSl9fWZ1bmN0aW9uIGs4KCQpe3JldHVybiBmdW5jdGlvbihKKXtpZih0aGlzLmwpe3ZhciBRPXRoaXMubFtKLnR5cGUrJF07aWYoSltZNV09PW51bGwpSltZNV09WjMrKztlbHNlIGlmKEpbWTVdPFFbTTJdKXJldHVybjtyZXR1cm4gUSh0LmV2ZW50P3QuZXZlbnQoSik6Sil9fX1mdW5jdGlvbiBLMygkLEosUSxYLEssWSxxLEcsQixOKXt2YXIgTCxWLEMsVSxPLHosSCxGLEEsYixELFMseCxzLGcsdT1KLnR5cGU7aWYoSi5jb25zdHJ1Y3RvciE9PXZvaWQgMClyZXR1cm4gbnVsbDsxMjgmUS5fX3UmJihCPSEhKDMyJlEuX191KSxZPVtHPUouX19lPVEuX19lXSksKEw9dC5fX2IpJiZMKEopOyQ6aWYodHlwZW9mIHU9PSJmdW5jdGlvbiIpdHJ5e2lmKEY9Si5wcm9wcyxBPXUucHJvdG90eXBlJiZ1LnByb3RvdHlwZS5yZW5kZXIsYj0oTD11LmNvbnRleHRUeXBlKSYmWFtMLl9fY10sRD1MP2I/Yi5wcm9wcy52YWx1ZTpMLl9fOlgsUS5fX2M/SD0oVj1KLl9fYz1RLl9fYykuX189Vi5fX0U6KEE/Si5fX2M9Vj1uZXcgdShGLEQpOihKLl9fYz1WPW5ldyBvMShGLEQpLFYuY29uc3RydWN0b3I9dSxWLnJlbmRlcj1MNyksYiYmYi5zdWIoViksVi5zdGF0ZXx8KFYuc3RhdGU9e30pLFYuX19uPVgsQz1WLl9fZD0hMCxWLl9faD1bXSxWLl9zYj1bXSksQSYmVi5fX3M9PW51bGwmJihWLl9fcz1WLnN0YXRlKSxBJiZ1LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyE9bnVsbCYmKFYuX19zPT1WLnN0YXRlJiYoVi5fX3M9dzAoe30sVi5fX3MpKSx3MChWLl9fcyx1LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhGLFYuX19zKSkpLFU9Vi5wcm9wcyxPPVYuc3RhdGUsVi5fX3Y9SixDKUEmJnUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZWLmNvbXBvbmVudFdpbGxNb3VudCE9bnVsbCYmVi5jb21wb25lbnRXaWxsTW91bnQoKSxBJiZWLmNvbXBvbmVudERpZE1vdW50IT1udWxsJiZWLl9faC5wdXNoKFYuY29tcG9uZW50RGlkTW91bnQpO2Vsc2V7aWYoQSYmdS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PW51bGwmJkYhPT1VJiZWLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPW51bGwmJlYuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhGLEQpLEouX192PT1RLl9fdnx8IVYuX19lJiZWLnNob3VsZENvbXBvbmVudFVwZGF0ZSE9bnVsbCYmVi5zaG91bGRDb21wb25lbnRVcGRhdGUoRixWLl9fcyxEKT09PSExKXtKLl9fdiE9US5fX3YmJihWLnByb3BzPUYsVi5zdGF0ZT1WLl9fcyxWLl9fZD0hMSksSi5fX2U9US5fX2UsSi5fX2s9US5fX2ssSi5fX2suc29tZShmdW5jdGlvbihpKXtpJiYoaS5fXz1KKX0pLEc1LnB1c2guYXBwbHkoVi5fX2gsVi5fc2IpLFYuX3NiPVtdLFYuX19oLmxlbmd0aCYmcS5wdXNoKFYpO2JyZWFrICR9Vi5jb21wb25lbnRXaWxsVXBkYXRlIT1udWxsJiZWLmNvbXBvbmVudFdpbGxVcGRhdGUoRixWLl9fcyxEKSxBJiZWLmNvbXBvbmVudERpZFVwZGF0ZSE9bnVsbCYmVi5fX2gucHVzaChmdW5jdGlvbigpe1YuY29tcG9uZW50RGlkVXBkYXRlKFUsTyx6KX0pfWlmKFYuY29udGV4dD1ELFYucHJvcHM9RixWLl9fUD0kLFYuX19lPSExLFM9dC5fX3IseD0wLEEpVi5zdGF0ZT1WLl9fcyxWLl9fZD0hMSxTJiZTKEopLEw9Vi5yZW5kZXIoVi5wcm9wcyxWLnN0YXRlLFYuY29udGV4dCksRzUucHVzaC5hcHBseShWLl9faCxWLl9zYiksVi5fc2I9W107ZWxzZSBkbyBWLl9fZD0hMSxTJiZTKEopLEw9Vi5yZW5kZXIoVi5wcm9wcyxWLnN0YXRlLFYuY29udGV4dCksVi5zdGF0ZT1WLl9fczt3aGlsZShWLl9fZCYmKyt4PDI1KTtWLnN0YXRlPVYuX19zLFYuZ2V0Q2hpbGRDb250ZXh0IT1udWxsJiYoWD13MCh3MCh7fSxYKSxWLmdldENoaWxkQ29udGV4dCgpKSksQSYmIUMmJlYuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUhPW51bGwmJih6PVYuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoVSxPKSkscz1MIT1udWxsJiZMLnR5cGU9PT1aMSYmTC5rZXk9PW51bGw/RTgoTC5wcm9wcy5jaGlsZHJlbik6TCxHPXc4KCQsUDIocyk/czpbc10sSixRLFgsSyxZLHEsRyxCLE4pLFYuYmFzZT1KLl9fZSxKLl9fdSY9LTE2MSxWLl9faC5sZW5ndGgmJnEucHVzaChWKSxIJiYoVi5fX0U9Vi5fXz1udWxsKX1jYXRjaChpKXtpZihKLl9fdj1udWxsLEJ8fFkhPW51bGwpaWYoaS50aGVuKXtmb3IoSi5fX3V8PUI/MTYwOjEyODtHJiZHLm5vZGVUeXBlPT04JiZHLm5leHRTaWJsaW5nOylHPUcubmV4dFNpYmxpbmc7WVtZLmluZGV4T2YoRyldPW51bGwsSi5fX2U9R31lbHNle2ZvcihnPVkubGVuZ3RoO2ctLTspWDMoWVtnXSk7UTMoSil9ZWxzZSBKLl9fZT1RLl9fZSxKLl9faz1RLl9fayxpLnRoZW58fFEzKEopO3QuX19lKGksSixRKX1lbHNlIFk9PW51bGwmJkouX192PT1RLl9fdj8oSi5fX2s9US5fX2ssSi5fX2U9US5fX2UpOkc9Si5fX2U9TjcoUS5fX2UsSixRLFgsSyxZLHEsQixOKTtyZXR1cm4oTD10LmRpZmZlZCkmJkwoSiksMTI4JkouX191P3ZvaWQgMDpHfWZ1bmN0aW9uIFEzKCQpeyQmJigkLl9fYyYmKCQuX19jLl9fZT0hMCksJC5fX2smJiQuX19rLnNvbWUoUTMpKX1mdW5jdGlvbiBJOCgkLEosUSl7Zm9yKHZhciBYPTA7WDxRLmxlbmd0aDtYKyspWTMoUVtYXSxRWysrWF0sUVsrK1hdKTt0Ll9fYyYmdC5fX2MoSiwkKSwkLnNvbWUoZnVuY3Rpb24oSyl7dHJ5eyQ9Sy5fX2gsSy5fX2g9W10sJC5zb21lKGZ1bmN0aW9uKFkpe1kuY2FsbChLKX0pfWNhdGNoKFkpe3QuX19lKFksSy5fX3YpfX0pfWZ1bmN0aW9uIEU4KCQpe3JldHVybiB0eXBlb2YgJCE9Im9iamVjdCJ8fCQ9PW51bGx8fCQuX19iPjA/JDpQMigkKT8kLm1hcChFOCk6dzAoe30sJCl9ZnVuY3Rpb24gTjcoJCxKLFEsWCxLLFkscSxHLEIpe3ZhciBOLEwsVixDLFUsTyx6LEg9US5wcm9wc3x8cTUsRj1KLnByb3BzLEE9Si50eXBlO2lmKEE9PSJzdmciP0s9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjpBPT0ibWF0aCI/Sz0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI6S3x8KEs9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxZIT1udWxsKXtmb3IoTj0wO048WS5sZW5ndGg7TisrKWlmKChVPVlbTl0pJiYic2V0QXR0cmlidXRlImluIFU9PSEhQSYmKEE/VS5sb2NhbE5hbWU9PUE6VS5ub2RlVHlwZT09MykpeyQ9VSxZW05dPW51bGw7YnJlYWt9fWlmKCQ9PW51bGwpe2lmKEE9PW51bGwpcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKEYpOyQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKEssQSxGLmlzJiZGKSxHJiYodC5fX20mJnQuX19tKEosWSksRz0hMSksWT1udWxsfWlmKEE9PW51bGwpSD09PUZ8fEcmJiQuZGF0YT09Rnx8KCQuZGF0YT1GKTtlbHNle2lmKFk9WSYmXzIuY2FsbCgkLmNoaWxkTm9kZXMpLCFHJiZZIT1udWxsKWZvcihIPXt9LE49MDtOPCQuYXR0cmlidXRlcy5sZW5ndGg7TisrKUhbKFU9JC5hdHRyaWJ1dGVzW05dKS5uYW1lXT1VLnZhbHVlO2ZvcihOIGluIEgpVT1IW05dLE49PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/Vj1VOk49PSJjaGlsZHJlbiJ8fChOIGluIEYpfHxOPT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBGKXx8Tj09ImNoZWNrZWQiJiYoImRlZmF1bHRDaGVja2VkImluIEYpfHxLNSgkLE4sbnVsbCxVLEspO2ZvcihOIGluIEYpVT1GW05dLE49PSJjaGlsZHJlbiI/Qz1VOk49PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/TD1VOk49PSJ2YWx1ZSI/Tz1VOk49PSJjaGVja2VkIj96PVU6RyYmdHlwZW9mIFUhPSJmdW5jdGlvbiJ8fEhbTl09PT1VfHxLNSgkLE4sVSxIW05dLEspO2lmKEwpR3x8ViYmKEwuX19odG1sPT1WLl9faHRtbHx8TC5fX2h0bWw9PSQuaW5uZXJIVE1MKXx8KCQuaW5uZXJIVE1MPUwuX19odG1sKSxKLl9faz1bXTtlbHNlIGlmKFYmJigkLmlubmVySFRNTD0iIiksdzgoSi50eXBlPT0idGVtcGxhdGUiPyQuY29udGVudDokLFAyKEMpP0M6W0NdLEosUSxYLEE9PSJmb3JlaWduT2JqZWN0Ij8iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6SyxZLHEsWT9ZWzBdOlEuX19rJiYkMihRLDApLEcsQiksWSE9bnVsbClmb3IoTj1ZLmxlbmd0aDtOLS07KVgzKFlbTl0pO0d8fChOPSJ2YWx1ZSIsQT09InByb2dyZXNzIiYmTz09bnVsbD8kLnJlbW92ZUF0dHJpYnV0ZSgidmFsdWUiKTpPIT1udWxsJiYoTyE9PSRbTl18fEE9PSJwcm9ncmVzcyImJiFPfHxBPT0ib3B0aW9uIiYmTyE9SFtOXSkmJks1KCQsTixPLEhbTl0sSyksTj0iY2hlY2tlZCIseiE9bnVsbCYmeiE9JFtOXSYmSzUoJCxOLHosSFtOXSxLKSl9cmV0dXJuICR9ZnVuY3Rpb24gWTMoJCxKLFEpe3RyeXtpZih0eXBlb2YgJD09ImZ1bmN0aW9uIil7dmFyIFg9dHlwZW9mICQuX191PT0iZnVuY3Rpb24iO1gmJiQuX191KCksWCYmSj09bnVsbHx8KCQuX191PSQoSikpfWVsc2UgJC5jdXJyZW50PUp9Y2F0Y2goSyl7dC5fX2UoSyxRKX19ZnVuY3Rpb24geTgoJCxKLFEpe3ZhciBYLEs7aWYodC51bm1vdW50JiZ0LnVubW91bnQoJCksKFg9JC5yZWYpJiYoWC5jdXJyZW50JiZYLmN1cnJlbnQhPSQuX19lfHxZMyhYLG51bGwsSikpLChYPSQuX19jKSE9bnVsbCl7aWYoWC5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7WC5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKFkpe3QuX19lKFksSil9WC5iYXNlPVguX19QPW51bGx9aWYoWD0kLl9faylmb3IoSz0wO0s8WC5sZW5ndGg7SysrKVhbS10mJnk4KFhbS10sSixRfHx0eXBlb2YgJC50eXBlIT0iZnVuY3Rpb24iKTtRfHxYMygkLl9fZSksJC5fX2M9JC5fXz0kLl9fZT12b2lkIDB9ZnVuY3Rpb24gTDcoJCxKLFEpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yKCQsUSl9ZnVuY3Rpb24geDAoJCxKLFEpe3ZhciBYLEssWSxxO0o9PWRvY3VtZW50JiYoSj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLHQuX18mJnQuX18oJCxKKSxLPShYPXR5cGVvZiBRPT0iZnVuY3Rpb24iKT9udWxsOlEmJlEuX19rfHxKLl9fayxZPVtdLHE9W10sSzMoSiwkPSghWCYmUXx8SikuX19rPXUxKFoxLG51bGwsWyRdKSxLfHxxNSxxNSxKLm5hbWVzcGFjZVVSSSwhWCYmUT9bUV06Sz9udWxsOkouZmlyc3RDaGlsZD9fMi5jYWxsKEouY2hpbGROb2Rlcyk6bnVsbCxZLCFYJiZRP1E6Sz9LLl9fZTpKLmZpcnN0Q2hpbGQsWCxxKSxJOChZLCQscSl9ZnVuY3Rpb24gQjUoJCxKKXt4MCgkLEosQjUpfWZ1bmN0aW9uIHEzKCQsSixRKXt2YXIgWCxLLFkscSxHPXcwKHt9LCQucHJvcHMpO2ZvcihZIGluICQudHlwZSYmJC50eXBlLmRlZmF1bHRQcm9wcyYmKHE9JC50eXBlLmRlZmF1bHRQcm9wcyksSilZPT0ia2V5Ij9YPUpbWV06WT09InJlZiI/Sz1KW1ldOkdbWV09SltZXT09PXZvaWQgMCYmcSE9bnVsbD9xW1ldOkpbWV07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MiYmKEcuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP18yLmNhbGwoYXJndW1lbnRzLDIpOlEpLFcyKCQudHlwZSxHLFh8fCQua2V5LEt8fCQucmVmLG51bGwpfWZ1bmN0aW9uIHowKCQpe2Z1bmN0aW9uIEooUSl7dmFyIFgsSztyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHR8fChYPW5ldyBTZXQsKEs9e30pW0ouX19jXT10aGlzLHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIEt9LHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtYPW51bGx9LHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKFkpe3RoaXMucHJvcHMudmFsdWUhPVkudmFsdWUmJlguZm9yRWFjaChmdW5jdGlvbihxKXtxLl9fZT0hMCxKMyhxKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihZKXtYLmFkZChZKTt2YXIgcT1ZLmNvbXBvbmVudFdpbGxVbm1vdW50O1kuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtYJiZYLmRlbGV0ZShZKSxxJiZxLmNhbGwoWSl9fSksUS5jaGlsZHJlbn1yZXR1cm4gSi5fX2M9Il9fY0MiK1A4KyssSi5fXz0kLEouUHJvdmlkZXI9Si5fX2w9KEouQ29uc3VtZXI9ZnVuY3Rpb24oUSxYKXtyZXR1cm4gUS5jaGlsZHJlbihYKX0pLmNvbnRleHRUeXBlPUosSn1fMj1HNS5zbGljZSx0PXtfX2U6ZnVuY3Rpb24oJCxKLFEsWCl7Zm9yKHZhciBLLFkscTtKPUouX187KWlmKChLPUouX19jKSYmIUsuX18pdHJ5e2lmKChZPUsuY29uc3RydWN0b3IpJiZZLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9bnVsbCYmKEsuc2V0U3RhdGUoWS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoJCkpLHE9Sy5fX2QpLEsuY29tcG9uZW50RGlkQ2F0Y2ghPW51bGwmJihLLmNvbXBvbmVudERpZENhdGNoKCQsWHx8e30pLHE9Sy5fX2QpLHEpcmV0dXJuIEsuX19FPUt9Y2F0Y2goRyl7JD1HfXRocm93ICR9fSxBOD0wLFk3PWZ1bmN0aW9uKCQpe3JldHVybiAkIT1udWxsJiYkLmNvbnN0cnVjdG9yPT09dm9pZCAwfSxvMS5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oJCxKKXt2YXIgUTtRPXRoaXMuX19zIT1udWxsJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz13MCh7fSx0aGlzLnN0YXRlKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmKCQ9JCh3MCh7fSxRKSx0aGlzLnByb3BzKSksJCYmdzAoUSwkKSwkIT1udWxsJiZ0aGlzLl9fdiYmKEomJnRoaXMuX3NiLnB1c2goSiksSjModGhpcykpfSxvMS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oJCl7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCwkJiZ0aGlzLl9faC5wdXNoKCQpLEozKHRoaXMpKX0sbzEucHJvdG90eXBlLnJlbmRlcj1aMSxSMD1bXSxNOD10eXBlb2YgUHJvbWlzZT09ImZ1bmN0aW9uIj9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsVzg9ZnVuY3Rpb24oJCxKKXtyZXR1cm4gJC5fX3YuX19iLUouX192Ll9fYn0sVjUuX19yPTAsdDU9TWF0aC5yYW5kb20oKS50b1N0cmluZyg4KSxZNT0iX19kIit0NSxNMj0iX19hIit0NSxfOD0vKFBvaW50ZXJDYXB0dXJlKSR8Q2FwdHVyZSQvaSxaMz0wLGU1PWs4KCExKSwkMz1rOCghMCksUDg9MDt2YXIgZzAsYjEsRzMsYjgsSjI9MCxmOD1bXSxSMT10LFM4PVIxLl9fYix4OD1SMS5fX3Isajg9UjEuZGlmZmVkLHY4PVIxLl9fYyxoOD1SMS51bm1vdW50LFI4PVIxLl9fO2Z1bmN0aW9uIFEyKCQsSil7UjEuX19oJiZSMS5fX2goYjEsJCxKMnx8SiksSjI9MDt2YXIgUT1iMS5fX0h8fChiMS5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiAkPj1RLl9fLmxlbmd0aCYmUS5fXy5wdXNoKHt9KSxRLl9fWyRdfWZ1bmN0aW9uIE0oJCl7cmV0dXJuIEoyPTEsZDAobTgsJCl9ZnVuY3Rpb24gZDAoJCxKLFEpe3ZhciBYPVEyKGcwKyssMik7aWYoWC50PSQsIVguX19jJiYoWC5fXz1bUT9RKEopOm04KHZvaWQgMCxKKSxmdW5jdGlvbihHKXt2YXIgQj1YLl9fTj9YLl9fTlswXTpYLl9fWzBdLE49WC50KEIsRyk7QiE9PU4mJihYLl9fTj1bTixYLl9fWzFdXSxYLl9fYy5zZXRTdGF0ZSh7fSkpfV0sWC5fX2M9YjEsIWIxLl9fZikpe3ZhciBLPWZ1bmN0aW9uKEcsQixOKXtpZighWC5fX2MuX19IKXJldHVybiEwO3ZhciBMPVguX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24oQyl7cmV0dXJuIEMuX19jfSk7aWYoTC5ldmVyeShmdW5jdGlvbihDKXtyZXR1cm4hQy5fX059KSlyZXR1cm4hWXx8WS5jYWxsKHRoaXMsRyxCLE4pO3ZhciBWPVguX19jLnByb3BzIT09RztyZXR1cm4gTC5zb21lKGZ1bmN0aW9uKEMpe2lmKEMuX19OKXt2YXIgVT1DLl9fWzBdO0MuX189Qy5fX04sQy5fX049dm9pZCAwLFUhPT1DLl9fWzBdJiYoVj0hMCl9fSksWSYmWS5jYWxsKHRoaXMsRyxCLE4pfHxWfTtiMS5fX2Y9ITA7dmFye3Nob3VsZENvbXBvbmVudFVwZGF0ZTpZLGNvbXBvbmVudFdpbGxVcGRhdGU6cX09YjE7YjEuY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbihHLEIsTil7aWYodGhpcy5fX2Upe3ZhciBMPVk7WT12b2lkIDAsSyhHLEIsTiksWT1MfXEmJnEuY2FsbCh0aGlzLEcsQixOKX0sYjEuc2hvdWxkQ29tcG9uZW50VXBkYXRlPUt9cmV0dXJuIFguX19OfHxYLl9ffWZ1bmN0aW9uIHkoJCxKKXt2YXIgUT1RMihnMCsrLDMpOyFSMS5fX3MmJkIzKFEuX19ILEopJiYoUS5fXz0kLFEudT1KLGIxLl9fSC5fX2gucHVzaChRKSl9ZnVuY3Rpb24gVDAoJCxKKXt2YXIgUT1RMihnMCsrLDQpOyFSMS5fX3MmJkIzKFEuX19ILEopJiYoUS5fXz0kLFEudT1KLGIxLl9faC5wdXNoKFEpKX1mdW5jdGlvbiBUKCQpe3JldHVybiBKMj01LFQxKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6JH19LFtdKX1mdW5jdGlvbiBMNSgkLEosUSl7SjI9NixUMChmdW5jdGlvbigpe2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iKXt2YXIgWD0kKEooKSk7cmV0dXJuIGZ1bmN0aW9uKCl7JChudWxsKSxYJiZ0eXBlb2YgWD09ImZ1bmN0aW9uIiYmWCgpfX1pZigkKXJldHVybiAkLmN1cnJlbnQ9SigpLGZ1bmN0aW9uKCl7cmV0dXJuICQuY3VycmVudD1udWxsfX0sUT09bnVsbD9ROlEuY29uY2F0KCQpKX1mdW5jdGlvbiBUMSgkLEope3ZhciBRPVEyKGcwKyssNyk7cmV0dXJuIEIzKFEuX19ILEopJiYoUS5fXz0kKCksUS5fX0g9SixRLl9faD0kKSxRLl9ffWZ1bmN0aW9uIHcoJCxKKXtyZXR1cm4gSjI9OCxUMShmdW5jdGlvbigpe3JldHVybiAkfSxKKX1mdW5jdGlvbiBVMCgkKXt2YXIgSj1iMS5jb250ZXh0WyQuX19jXSxRPVEyKGcwKyssOSk7cmV0dXJuIFEuYz0kLEo/KFEuX189PW51bGwmJihRLl9fPSEwLEouc3ViKGIxKSksSi5wcm9wcy52YWx1ZSk6JC5fX31mdW5jdGlvbiB6NSgkLEope1IxLnVzZURlYnVnVmFsdWUmJlIxLnVzZURlYnVnVmFsdWUoSj9KKCQpOiQpfWZ1bmN0aW9uIFoyKCl7dmFyICQ9UTIoZzArKywxMSk7aWYoISQuX18pe2Zvcih2YXIgSj1iMS5fX3Y7SiE9PW51bGwmJiFKLl9fbSYmSi5fXyE9PW51bGw7KUo9Si5fXzt2YXIgUT1KLl9fbXx8KEouX19tPVswLDBdKTskLl9fPSJQIitRWzBdKyItIitRWzFdKyt9cmV0dXJuICQuX199ZnVuY3Rpb24gejcoKXtmb3IodmFyICQ7JD1mOC5zaGlmdCgpOyl7dmFyIEo9JC5fX0g7aWYoJC5fX1AmJkopdHJ5e0ouX19oLnNvbWUoTjUpLEouX19oLnNvbWUoVjMpLEouX19oPVtdfWNhdGNoKFEpe0ouX19oPVtdLFIxLl9fZShRLCQuX192KX19fVIxLl9fYj1mdW5jdGlvbigkKXtiMT1udWxsLFM4JiZTOCgkKX0sUjEuX189ZnVuY3Rpb24oJCxKKXskJiZKLl9fayYmSi5fX2suX19tJiYoJC5fX209Si5fX2suX19tKSxSOCYmUjgoJCxKKX0sUjEuX19yPWZ1bmN0aW9uKCQpe3g4JiZ4OCgkKSxnMD0wO3ZhciBKPShiMT0kLl9fYykuX19IO0omJihHMz09PWIxPyhKLl9faD1bXSxiMS5fX2g9W10sSi5fXy5zb21lKGZ1bmN0aW9uKFEpe1EuX19OJiYoUS5fXz1RLl9fTiksUS51PVEuX19OPXZvaWQgMH0pKTooSi5fX2guc29tZShONSksSi5fX2guc29tZShWMyksSi5fX2g9W10sZzA9MCkpLEczPWIxfSxSMS5kaWZmZWQ9ZnVuY3Rpb24oJCl7ajgmJmo4KCQpO3ZhciBKPSQuX19jO0omJkouX19IJiYoSi5fX0guX19oLmxlbmd0aCYmKGY4LnB1c2goSikhPT0xJiZiOD09PVIxLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChiOD1SMS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpfHxVNykoejcpKSxKLl9fSC5fXy5zb21lKGZ1bmN0aW9uKFEpe1EudSYmKFEuX19IPVEudSksUS51PXZvaWQgMH0pKSxHMz1iMT1udWxsfSxSMS5fX2M9ZnVuY3Rpb24oJCxKKXtKLnNvbWUoZnVuY3Rpb24oUSl7dHJ5e1EuX19oLnNvbWUoTjUpLFEuX19oPVEuX19oLmZpbHRlcihmdW5jdGlvbihYKXtyZXR1cm4hWC5fX3x8VjMoWCl9KX1jYXRjaChYKXtKLnNvbWUoZnVuY3Rpb24oSyl7Sy5fX2gmJihLLl9faD1bXSl9KSxKPVtdLFIxLl9fZShYLFEuX192KX19KSx2OCYmdjgoJCxKKX0sUjEudW5tb3VudD1mdW5jdGlvbigkKXtoOCYmaDgoJCk7dmFyIEosUT0kLl9fYztRJiZRLl9fSCYmKFEuX19ILl9fLnNvbWUoZnVuY3Rpb24oWCl7dHJ5e041KFgpfWNhdGNoKEspe0o9S319KSxRLl9fSD12b2lkIDAsSiYmUjEuX19lKEosUS5fX3YpKX07dmFyIGc4PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU9PSJmdW5jdGlvbiI7ZnVuY3Rpb24gVTcoJCl7dmFyIEosUT1mdW5jdGlvbigpe2NsZWFyVGltZW91dChYKSxnOCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoSiksc2V0VGltZW91dCgkKX0sWD1zZXRUaW1lb3V0KFEsMzUpO2c4JiYoSj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUSkpfWZ1bmN0aW9uIE41KCQpe3ZhciBKPWIxLFE9JC5fX2M7dHlwZW9mIFE9PSJmdW5jdGlvbiImJigkLl9fYz12b2lkIDAsUSgpKSxiMT1KfWZ1bmN0aW9uIFYzKCQpe3ZhciBKPWIxOyQuX19jPSQuX18oKSxiMT1KfWZ1bmN0aW9uIEIzKCQsSil7cmV0dXJuISR8fCQubGVuZ3RoIT09Si5sZW5ndGh8fEouc29tZShmdW5jdGlvbihRLFgpe3JldHVybiBRIT09JFtYXX0pfWZ1bmN0aW9uIG04KCQsSil7cmV0dXJuIHR5cGVvZiBKPT0iZnVuY3Rpb24iP0ooJCk6Sn1mdW5jdGlvbiBINygkLEope2Zvcih2YXIgUSBpbiBKKSRbUV09SltRXTtyZXR1cm4gJH1mdW5jdGlvbiBwOCgkLEope2Zvcih2YXIgUSBpbiAkKWlmKFEhPT0iX19zb3VyY2UiJiYhKFEgaW4gSikpcmV0dXJuITA7Zm9yKHZhciBYIGluIEopaWYoWCE9PSJfX3NvdXJjZSImJiRbWF0hPT1KW1hdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHU4KCQsSil7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1KfSh1OC5wcm90b3R5cGU9bmV3IG8xKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCx1OC5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKCQsSil7cmV0dXJuIHA4KHRoaXMucHJvcHMsJCl8fHA4KHRoaXMuc3RhdGUsSil9O3ZhciBsOD10Ll9fYjt0Ll9fYj1mdW5jdGlvbigkKXskLnR5cGUmJiQudHlwZS5fX2YmJiQucmVmJiYoJC5wcm9wcy5yZWY9JC5yZWYsJC5yZWY9bnVsbCksbDgmJmw4KCQpfTt2YXIgQzc9dC5fX2U7dC5fX2U9ZnVuY3Rpb24oJCxKLFEsWCl7aWYoJC50aGVuKXtmb3IodmFyIEssWT1KO1k9WS5fXzspaWYoKEs9WS5fX2MpJiZLLl9fYylyZXR1cm4gSi5fX2U9PW51bGwmJihKLl9fZT1RLl9fZSxKLl9faz1RLl9fayksSy5fX2MoJCxKKX1DNygkLEosUSxYKX07dmFyIGQ4PXQudW5tb3VudDtmdW5jdGlvbiBhOCgkLEosUSl7cmV0dXJuICQmJigkLl9fYyYmJC5fX2MuX19IJiYoJC5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24oWCl7dHlwZW9mIFguX19jPT0iZnVuY3Rpb24iJiZYLl9fYygpfSksJC5fX2MuX19IPW51bGwpLCgkPUg3KHt9LCQpKS5fX2MhPW51bGwmJigkLl9fYy5fX1A9PT1RJiYoJC5fX2MuX19QPUopLCQuX19jLl9fZT0hMCwkLl9fYz1udWxsKSwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFgpe3JldHVybiBhOChYLEosUSl9KSksJH1mdW5jdGlvbiBzOCgkLEosUSl7cmV0dXJuICQmJlEmJigkLl9fdj1udWxsLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIHM4KFgsSixRKX0pLCQuX19jJiYkLl9fYy5fX1A9PT1KJiYoJC5fX2UmJlEuYXBwZW5kQ2hpbGQoJC5fX2UpLCQuX19jLl9fZT0hMCwkLl9fYy5fX1A9USkpLCR9ZnVuY3Rpb24gTjMoKXt0aGlzLl9fdT0wLHRoaXMubz1udWxsLHRoaXMuX19iPW51bGx9ZnVuY3Rpb24gdDgoJCl7dmFyIEo9JC5fXyYmJC5fXy5fX2M7cmV0dXJuIEomJkouX19hJiZKLl9fYSgkKX1mdW5jdGlvbiBVNSgpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfXQudW5tb3VudD1mdW5jdGlvbigkKXt2YXIgSj0kLl9fYztKJiYoSi5fX3o9ITApLEomJkouX19SJiZKLl9fUigpLEomJjMyJiQuX191JiYoJC50eXBlPW51bGwpLGQ4JiZkOCgkKX0sKE4zLnByb3RvdHlwZT1uZXcgbzEpLl9fYz1mdW5jdGlvbigkLEope3ZhciBRPUouX19jLFg9dGhpcztYLm89PW51bGwmJihYLm89W10pLFguby5wdXNoKFEpO3ZhciBLPXQ4KFguX192KSxZPSExLHE9ZnVuY3Rpb24oKXtZfHxYLl9fenx8KFk9ITAsUS5fX1I9bnVsbCxLP0soQik6QigpKX07US5fX1I9cTt2YXIgRz1RLl9fUDtRLl9fUD1udWxsO3ZhciBCPWZ1bmN0aW9uKCl7aWYoIS0tWC5fX3Upe2lmKFguc3RhdGUuX19hKXt2YXIgTj1YLnN0YXRlLl9fYTtYLl9fdi5fX2tbMF09czgoTixOLl9fYy5fX1AsTi5fX2MuX19PKX12YXIgTDtmb3IoWC5zZXRTdGF0ZSh7X19hOlguX19iPW51bGx9KTtMPVguby5wb3AoKTspTC5fX1A9RyxMLmZvcmNlVXBkYXRlKCl9fTtYLl9fdSsrfHwzMiZKLl9fdXx8WC5zZXRTdGF0ZSh7X19hOlguX19iPVguX192Ll9fa1swXX0pLCQudGhlbihxLHEpfSxOMy5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LE4zLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCxKKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxYPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPWE4KHRoaXMuX19iLFEsWC5fX089WC5fX1ApfXRoaXMuX19iPW51bGx9dmFyIEs9Si5fX2EmJnUxKFoxLG51bGwsJC5mYWxsYmFjayk7cmV0dXJuIEsmJihLLl9fdSY9LTMzKSxbdTEoWjEsbnVsbCxKLl9fYT9udWxsOiQuY2hpbGRyZW4pLEtdfTt2YXIgYzg9ZnVuY3Rpb24oJCxKLFEpe2lmKCsrUVsxXT09PVFbMF0mJiQubC5kZWxldGUoSiksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKFE9JC5pO1E7KXtmb3IoO1EubGVuZ3RoPjM7KVEucG9wKCkoKTtpZihRWzFdPFFbMF0pYnJlYWs7JC5pPVE9UVsyXX19OyhVNS5wcm90b3R5cGU9bmV3IG8xKS5fX2E9ZnVuY3Rpb24oJCl7dmFyIEo9dGhpcyxRPXQ4KEouX192KSxYPUoubC5nZXQoJCk7cmV0dXJuIFhbMF0rKyxmdW5jdGlvbihLKXt2YXIgWT1mdW5jdGlvbigpe0oucHJvcHMucmV2ZWFsT3JkZXI/KFgucHVzaChLKSxjOChKLCQsWCkpOksoKX07UT9RKFkpOlkoKX19LFU1LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCl7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIEo9WDAoJC5jaGlsZHJlbik7JC5yZXZlYWxPcmRlciYmJC5yZXZlYWxPcmRlclswXT09PSJiIiYmSi5yZXZlcnNlKCk7Zm9yKHZhciBRPUoubGVuZ3RoO1EtLTspdGhpcy5sLnNldChKW1FdLHRoaXMuaT1bMSwwLHRoaXMuaV0pO3JldHVybiAkLmNoaWxkcmVufSxVNS5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPVU1LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciAkPXRoaXM7dGhpcy5sLmZvckVhY2goZnVuY3Rpb24oSixRKXtjOCgkLFEsSil9KX07dmFyIEY3PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iil8fDYwMTAzLE83PS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxrNz0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLEE3PS9bQS1aMC05XS9nLE03PXR5cGVvZiBkb2N1bWVudDwidSIsVzc9ZnVuY3Rpb24oJCl7cmV0dXJuKHR5cGVvZiBTeW1ib2w8InUiJiZ0eXBlb2YgU3ltYm9sKCk9PSJzeW1ib2wiPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KCQpfTtmdW5jdGlvbiBlOCgkLEosUSl7cmV0dXJuIEouX19rPT1udWxsJiYoSi50ZXh0Q29udGVudD0iIikseDAoJCxKKSx0eXBlb2YgUT09ImZ1bmN0aW9uIiYmUSgpLCQ/JC5fX2M6bnVsbH1vMS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbigkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobzEucHJvdG90eXBlLCQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrJF19LHNldDpmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywkLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Sn0pfX0pfSk7dmFyIG84PXQuZXZlbnQ7dC5ldmVudD1mdW5jdGlvbigkKXtyZXR1cm4gbzgmJigkPW84KCQpKSwkLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LCQuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LCQuaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sJC5uYXRpdmVFdmVudD0kfTt2YXIgJDksXzc9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LHI4PXQudm5vZGU7dC52bm9kZT1mdW5jdGlvbigkKXt0eXBlb2YgJC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oSil7dmFye3Byb3BzOlEsdHlwZTpYfT1KLEs9e30sWT1YLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBxIGluIFEpe3ZhciBHPVFbcV07aWYoIShxPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gUSkmJkc9PW51bGx8fE03JiZxPT09ImNoaWxkcmVuIiYmWD09PSJub3NjcmlwdCJ8fHE9PT0iY2xhc3MifHxxPT09ImNsYXNzTmFtZSIpKXt2YXIgQj1xLnRvTG93ZXJDYXNlKCk7cT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gUSYmUS52YWx1ZT09bnVsbD9xPSJ2YWx1ZSI6cT09PSJkb3dubG9hZCImJkc9PT0hMD9HPSIiOkI9PT0idHJhbnNsYXRlIiYmRz09PSJubyI/Rz0hMTpCWzBdPT09Im8iJiZCWzFdPT09Im4iP0I9PT0ib25kb3VibGVjbGljayI/cT0ib25kYmxjbGljayI6QiE9PSJvbmNoYW5nZSJ8fFghPT0iaW5wdXQiJiZYIT09InRleHRhcmVhInx8VzcoUS50eXBlKT9CPT09Im9uZm9jdXMiP3E9Im9uZm9jdXNpbiI6Qj09PSJvbmJsdXIiP3E9Im9uZm9jdXNvdXQiOms3LnRlc3QocSkmJihxPUIpOkI9cT0ib25pbnB1dCI6WSYmTzcudGVzdChxKT9xPXEucmVwbGFjZShBNywiLSQmIikudG9Mb3dlckNhc2UoKTpHPT09bnVsbCYmKEc9dm9pZCAwKSxCPT09Im9uaW5wdXQiJiZLW3E9Ql0mJihxPSJvbmlucHV0Q2FwdHVyZSIpLEtbcV09R319WD09InNlbGVjdCImJihLLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KEsudmFsdWUpJiYoSy52YWx1ZT1YMChRLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKE4pe04ucHJvcHMuc2VsZWN0ZWQ9Sy52YWx1ZS5pbmRleE9mKE4ucHJvcHMudmFsdWUpIT0tMX0pKSxLLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKEsudmFsdWU9WDAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihOKXtOLnByb3BzLnNlbGVjdGVkPUsubXVsdGlwbGU/Sy5kZWZhdWx0VmFsdWUuaW5kZXhPZihOLnByb3BzLnZhbHVlKSE9LTE6Sy5kZWZhdWx0VmFsdWU9PU4ucHJvcHMudmFsdWV9KSkpLFEuY2xhc3MmJiFRLmNsYXNzTmFtZT8oSy5jbGFzcz1RLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShLLCJjbGFzc05hbWUiLF83KSk6US5jbGFzc05hbWUmJihLLmNsYXNzPUsuY2xhc3NOYW1lPVEuY2xhc3NOYW1lKSxKLnByb3BzPUt9KCQpLCQuJCR0eXBlb2Y9RjcscjgmJnI4KCQpfTt2YXIgaTg9dC5fX3I7dC5fX3I9ZnVuY3Rpb24oJCl7aTgmJmk4KCQpLCQ5PSQuX19jfTt2YXIgbjg9dC5kaWZmZWQ7dC5kaWZmZWQ9ZnVuY3Rpb24oJCl7bjgmJm44KCQpO3Zhcntwcm9wczpKLF9fZTpRfT0kO1EhPW51bGwmJiQudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBKJiZKLnZhbHVlIT09US52YWx1ZSYmKFEudmFsdWU9Si52YWx1ZT09bnVsbD8iIjpKLnZhbHVlKSwkOT1udWxsfTtmdW5jdGlvbiBKOSgkKXtyZXR1cm4hISQuX19rJiYoeDAobnVsbCwkKSwhMCl9ZnVuY3Rpb24gUTkoJCl7cmV0dXJue3JlbmRlcjpmdW5jdGlvbihKKXtlOChKLCQpfSx1bm1vdW50OmZ1bmN0aW9uKCl7SjkoJCl9fX1mdW5jdGlvbiBOOSgkLEope2Zvcih2YXIgUSBpbiBKKSRbUV09SltRXTtyZXR1cm4gJH1mdW5jdGlvbiB6MygkLEope2Zvcih2YXIgUSBpbiAkKWlmKFEhPT0iX19zb3VyY2UiJiYhKFEgaW4gSikpcmV0dXJuITA7Zm9yKHZhciBYIGluIEopaWYoWCE9PSJfX3NvdXJjZSImJiRbWF0hPT1KW1hdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEw5KCQsSil7dmFyIFE9SigpLFg9TSh7dDp7X186USx1Okp9fSksSz1YWzBdLnQsWT1YWzFdO3JldHVybiBUMChmdW5jdGlvbigpe0suX189USxLLnU9SixMMyhLKSYmWSh7dDpLfSl9LFskLFEsSl0pLHkoZnVuY3Rpb24oKXtyZXR1cm4gTDMoSykmJlkoe3Q6S30pLCQoZnVuY3Rpb24oKXtMMyhLKSYmWSh7dDpLfSl9KX0sWyRdKSxRfWZ1bmN0aW9uIEwzKCQpe3RyeXtyZXR1cm4hKChKPSQuX18pPT09KFE9JC51KCkpJiYoSiE9PTB8fDEvSj09MS9RKXx8SiE9SiYmUSE9USl9Y2F0Y2goWCl7cmV0dXJuITB9dmFyIEosUX1mdW5jdGlvbiB6OSgkKXskKCl9ZnVuY3Rpb24gVTkoJCl7cmV0dXJuICR9ZnVuY3Rpb24gSDkoKXtyZXR1cm5bITEsejldfXZhciBDOT1UMDtmdW5jdGlvbiBVMygkLEope3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9Sn1mdW5jdGlvbiBjMCgkLEope2Z1bmN0aW9uIFEoSyl7dmFyIFk9dGhpcy5wcm9wcy5yZWY7cmV0dXJuIFkhPUsucmVmJiZZJiYodHlwZW9mIFk9PSJmdW5jdGlvbiI/WShudWxsKTpZLmN1cnJlbnQ9bnVsbCksSj8hSih0aGlzLnByb3BzLEspfHxZIT1LLnJlZjp6Myh0aGlzLnByb3BzLEspfWZ1bmN0aW9uIFgoSyl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPVEsdTEoJCxLKX1yZXR1cm4gWC5kaXNwbGF5TmFtZT0iTWVtbygiKygkLmRpc3BsYXlOYW1lfHwkLm5hbWUpKyIpIixYLl9fZj1YLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFgudHlwZT0kLFh9KFUzLnByb3RvdHlwZT1uZXcgbzEpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLFUzLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oJCxKKXtyZXR1cm4gejModGhpcy5wcm9wcywkKXx8ejModGhpcy5zdGF0ZSxKKX07dmFyIFo5PXQuX19iO3QuX19iPWZ1bmN0aW9uKCQpeyQudHlwZSYmJC50eXBlLl9fZiYmJC5yZWYmJigkLnByb3BzLnJlZj0kLnJlZiwkLnJlZj1udWxsKSxaOSYmWjkoJCl9O3ZhciBQNz10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKXx8MzkxMTtmdW5jdGlvbiBXMCgkKXtmdW5jdGlvbiBKKFEpe3ZhciBYPU45KHt9LFEpO3JldHVybiBkZWxldGUgWC5yZWYsJChYLFEucmVmfHxudWxsKX1yZXR1cm4gSi4kJHR5cGVvZj1QNyxKLnJlbmRlcj0kLEoucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9Si5fX2Y9ITAsSi5kaXNwbGF5TmFtZT0iRm9yd2FyZFJlZigiKygkLmRpc3BsYXlOYW1lfHwkLm5hbWUpKyIpIixKfXZhciBYOT1mdW5jdGlvbigkLEope3JldHVybiAkPT1udWxsP251bGw6WDAoWDAoJCkubWFwKEopKX0sRDc9e21hcDpYOSxmb3JFYWNoOlg5LGNvdW50OmZ1bmN0aW9uKCQpe3JldHVybiAkP1gwKCQpLmxlbmd0aDowfSxvbmx5OmZ1bmN0aW9uKCQpe3ZhciBKPVgwKCQpO2lmKEoubGVuZ3RoIT09MSl0aHJvdyJDaGlsZHJlbi5vbmx5IjtyZXR1cm4gSlswXX0sdG9BcnJheTpYMH0sdzc9dC5fX2U7dC5fX2U9ZnVuY3Rpb24oJCxKLFEsWCl7aWYoJC50aGVuKXtmb3IodmFyIEssWT1KO1k9WS5fXzspaWYoKEs9WS5fX2MpJiZLLl9fYylyZXR1cm4gSi5fX2U9PW51bGwmJihKLl9fZT1RLl9fZSxKLl9faz1RLl9fayksSy5fX2MoJCxKKX13NygkLEosUSxYKX07dmFyIEs5PXQudW5tb3VudDtmdW5jdGlvbiBGOSgkLEosUSl7cmV0dXJuICQmJigkLl9fYyYmJC5fX2MuX19IJiYoJC5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24oWCl7dHlwZW9mIFguX19jPT0iZnVuY3Rpb24iJiZYLl9fYygpfSksJC5fX2MuX19IPW51bGwpLCgkPU45KHt9LCQpKS5fX2MhPW51bGwmJigkLl9fYy5fX1A9PT1RJiYoJC5fX2MuX19QPUopLCQuX19jLl9fZT0hMCwkLl9fYz1udWxsKSwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFgpe3JldHVybiBGOShYLEosUSl9KSksJH1mdW5jdGlvbiBPOSgkLEosUSl7cmV0dXJuICQmJlEmJigkLl9fdj1udWxsLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIE85KFgsSixRKX0pLCQuX19jJiYkLl9fYy5fX1A9PT1KJiYoJC5fX2UmJlEuYXBwZW5kQ2hpbGQoJC5fX2UpLCQuX19jLl9fZT0hMCwkLl9fYy5fX1A9USkpLCR9ZnVuY3Rpb24gSDUoKXt0aGlzLl9fdT0wLHRoaXMubz1udWxsLHRoaXMuX19iPW51bGx9ZnVuY3Rpb24gazkoJCl7dmFyIEo9JC5fXyYmJC5fXy5fX2M7cmV0dXJuIEomJkouX19hJiZKLl9fYSgkKX1mdW5jdGlvbiBUNygkKXt2YXIgSixRLFgsSz1udWxsO2Z1bmN0aW9uIFkocSl7aWYoSnx8KEo9JCgpKS50aGVuKGZ1bmN0aW9uKEcpe0cmJihLPUcuZGVmYXVsdHx8RyksWD0hMH0sZnVuY3Rpb24oRyl7UT1HLFg9ITB9KSxRKXRocm93IFE7aWYoIVgpdGhyb3cgSjtyZXR1cm4gSz91MShLLHEpOm51bGx9cmV0dXJuIFkuZGlzcGxheU5hbWU9IkxhenkiLFkuX19mPSEwLFl9ZnVuY3Rpb24gdzIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH10LnVubW91bnQ9ZnVuY3Rpb24oJCl7dmFyIEo9JC5fX2M7SiYmKEouX196PSEwKSxKJiZKLl9fUiYmSi5fX1IoKSxKJiYzMiYkLl9fdSYmKCQudHlwZT1udWxsKSxLOSYmSzkoJCl9LChINS5wcm90b3R5cGU9bmV3IG8xKS5fX2M9ZnVuY3Rpb24oJCxKKXt2YXIgUT1KLl9fYyxYPXRoaXM7WC5vPT1udWxsJiYoWC5vPVtdKSxYLm8ucHVzaChRKTt2YXIgSz1rOShYLl9fdiksWT0hMSxxPWZ1bmN0aW9uKCl7WXx8WC5fX3p8fChZPSEwLFEuX19SPW51bGwsSz9LKEIpOkIoKSl9O1EuX19SPXE7dmFyIEc9US5fX1A7US5fX1A9bnVsbDt2YXIgQj1mdW5jdGlvbigpe2lmKCEtLVguX191KXtpZihYLnN0YXRlLl9fYSl7dmFyIE49WC5zdGF0ZS5fX2E7WC5fX3YuX19rWzBdPU85KE4sTi5fX2MuX19QLE4uX19jLl9fTyl9dmFyIEw7Zm9yKFguc2V0U3RhdGUoe19fYTpYLl9fYj1udWxsfSk7TD1YLm8ucG9wKCk7KUwuX19QPUcsTC5mb3JjZVVwZGF0ZSgpfX07WC5fX3UrK3x8MzImSi5fX3V8fFguc2V0U3RhdGUoe19fYTpYLl9fYj1YLl9fdi5fX2tbMF19KSwkLnRoZW4ocSxxKX0sSDUucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxINS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQsSil7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIFE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWD10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1GOSh0aGlzLl9fYixRLFguX19PPVguX19QKX10aGlzLl9fYj1udWxsfXZhciBLPUouX19hJiZ1MShaMSxudWxsLCQuZmFsbGJhY2spO3JldHVybiBLJiYoSy5fX3UmPS0zMyksW3UxKFoxLG51bGwsSi5fX2E/bnVsbDokLmNoaWxkcmVuKSxLXX07dmFyIFk5PWZ1bmN0aW9uKCQsSixRKXtpZigrK1FbMV09PT1RWzBdJiYkLmwuZGVsZXRlKEopLCQucHJvcHMucmV2ZWFsT3JkZXImJigkLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhJC5sLnNpemUpKWZvcihRPSQuaTtROyl7Zm9yKDtRLmxlbmd0aD4zOylRLnBvcCgpKCk7aWYoUVsxXTxRWzBdKWJyZWFrOyQuaT1RPVFbMl19fTtmdW5jdGlvbiBJNygkKXtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gJC5jb250ZXh0fSwkLmNoaWxkcmVufWZ1bmN0aW9uIEU3KCQpe3ZhciBKPXRoaXMsUT0kLmg7aWYoSi5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3gwKG51bGwsSi52KSxKLnY9bnVsbCxKLmg9bnVsbH0sSi5oJiZKLmghPT1RJiZKLmNvbXBvbmVudFdpbGxVbm1vdW50KCksIUoudil7Zm9yKHZhciBYPUouX192O1ghPT1udWxsJiYhWC5fX20mJlguX18hPT1udWxsOylYPVguX187Si5oPVEsSi52PXtub2RlVHlwZToxLHBhcmVudE5vZGU6USxjaGlsZE5vZGVzOltdLF9fazp7X19tOlguX19tfSxjb250YWluczpmdW5jdGlvbigpe3JldHVybiEwfSxuYW1lc3BhY2VVUkk6US5uYW1lc3BhY2VVUkksaW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKEssWSl7dGhpcy5jaGlsZE5vZGVzLnB1c2goSyksSi5oLmluc2VydEJlZm9yZShLLFkpfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihLKXt0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKEspPj4+MSwxKSxKLmgucmVtb3ZlQ2hpbGQoSyl9fX14MCh1MShJNyx7Y29udGV4dDpKLmNvbnRleHR9LCQuX192KSxKLnYpfWZ1bmN0aW9uIEgzKCQsSil7dmFyIFE9dTEoRTcse19fdjokLGg6Sn0pO3JldHVybiBRLmNvbnRhaW5lckluZm89SixRfSh3Mi5wcm90b3R5cGU9bmV3IG8xKS5fX2E9ZnVuY3Rpb24oJCl7dmFyIEo9dGhpcyxRPWs5KEouX192KSxYPUoubC5nZXQoJCk7cmV0dXJuIFhbMF0rKyxmdW5jdGlvbihLKXt2YXIgWT1mdW5jdGlvbigpe0oucHJvcHMucmV2ZWFsT3JkZXI/KFgucHVzaChLKSxZOShKLCQsWCkpOksoKX07UT9RKFkpOlkoKX19LHcyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCl7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIEo9WDAoJC5jaGlsZHJlbik7JC5yZXZlYWxPcmRlciYmJC5yZXZlYWxPcmRlclswXT09PSJiIiYmSi5yZXZlcnNlKCk7Zm9yKHZhciBRPUoubGVuZ3RoO1EtLTspdGhpcy5sLnNldChKW1FdLHRoaXMuaT1bMSwwLHRoaXMuaV0pO3JldHVybiAkLmNoaWxkcmVufSx3Mi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPXcyLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciAkPXRoaXM7dGhpcy5sLmZvckVhY2goZnVuY3Rpb24oSixRKXtZOSgkLFEsSil9KX07dmFyIEE5PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iil8fDYwMTAzLHk3PS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxiNz0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLFM3PS9bQS1aMC05XS9nLHg3PXR5cGVvZiBkb2N1bWVudDwidSIsajc9ZnVuY3Rpb24oJCl7cmV0dXJuKHR5cGVvZiBTeW1ib2w8InUiJiZ0eXBlb2YgU3ltYm9sKCk9PSJzeW1ib2wiPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KCQpfTtmdW5jdGlvbiB2NygkLEosUSl7cmV0dXJuIEouX19rPT1udWxsJiYoSi50ZXh0Q29udGVudD0iIikseDAoJCxKKSx0eXBlb2YgUT09ImZ1bmN0aW9uIiYmUSgpLCQ/JC5fX2M6bnVsbH1mdW5jdGlvbiBoNygkLEosUSl7cmV0dXJuIEI1KCQsSiksdHlwZW9mIFE9PSJmdW5jdGlvbiImJlEoKSwkPyQuX19jOm51bGx9bzEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG8xLnByb3RvdHlwZSwkLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iKyRdfSxzZXQ6ZnVuY3Rpb24oSil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkp9KX19KX0pO3ZhciBxOT10LmV2ZW50O3QuZXZlbnQ9ZnVuY3Rpb24oJCl7cmV0dXJuIHE5JiYoJD1xOSgkKSksJC5wZXJzaXN0PWZ1bmN0aW9uKCl7fSwkLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSwkLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LCQubmF0aXZlRXZlbnQ9JH07dmFyIEMzLFI3PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxHOT10LnZub2RlO3Qudm5vZGU9ZnVuY3Rpb24oJCl7dHlwZW9mICQudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKEope3Zhcntwcm9wczpRLHR5cGU6WH09SixLPXt9LFk9WC5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgcSBpbiBRKXt2YXIgRz1RW3FdO2lmKCEocT09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIFEpJiZHPT1udWxsfHx4NyYmcT09PSJjaGlsZHJlbiImJlg9PT0ibm9zY3JpcHQifHxxPT09ImNsYXNzInx8cT09PSJjbGFzc05hbWUiKSl7dmFyIEI9cS50b0xvd2VyQ2FzZSgpO3E9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIFEmJlEudmFsdWU9PW51bGw/cT0idmFsdWUiOnE9PT0iZG93bmxvYWQiJiZHPT09ITA/Rz0iIjpCPT09InRyYW5zbGF0ZSImJkc9PT0ibm8iP0c9ITE6QlswXT09PSJvIiYmQlsxXT09PSJuIj9CPT09Im9uZG91YmxlY2xpY2siP3E9Im9uZGJsY2xpY2siOkIhPT0ib25jaGFuZ2UifHxYIT09ImlucHV0IiYmWCE9PSJ0ZXh0YXJlYSJ8fGo3KFEudHlwZSk/Qj09PSJvbmZvY3VzIj9xPSJvbmZvY3VzaW4iOkI9PT0ib25ibHVyIj9xPSJvbmZvY3Vzb3V0IjpiNy50ZXN0KHEpJiYocT1CKTpCPXE9Im9uaW5wdXQiOlkmJnk3LnRlc3QocSk/cT1xLnJlcGxhY2UoUzcsIi0kJiIpLnRvTG93ZXJDYXNlKCk6Rz09PW51bGwmJihHPXZvaWQgMCksQj09PSJvbmlucHV0IiYmS1txPUJdJiYocT0ib25pbnB1dENhcHR1cmUiKSxLW3FdPUd9fVg9PSJzZWxlY3QiJiYoSy5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShLLnZhbHVlKSYmKEsudmFsdWU9WDAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihOKXtOLnByb3BzLnNlbGVjdGVkPUsudmFsdWUuaW5kZXhPZihOLnByb3BzLnZhbHVlKSE9LTF9KSksSy5kZWZhdWx0VmFsdWUhPW51bGwmJihLLnZhbHVlPVgwKFEuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oTil7Ti5wcm9wcy5zZWxlY3RlZD1LLm11bHRpcGxlP0suZGVmYXVsdFZhbHVlLmluZGV4T2YoTi5wcm9wcy52YWx1ZSkhPS0xOksuZGVmYXVsdFZhbHVlPT1OLnByb3BzLnZhbHVlfSkpKSxRLmNsYXNzJiYhUS5jbGFzc05hbWU/KEsuY2xhc3M9US5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoSywiY2xhc3NOYW1lIixSNykpOlEuY2xhc3NOYW1lJiYoSy5jbGFzcz1LLmNsYXNzTmFtZT1RLmNsYXNzTmFtZSksSi5wcm9wcz1LfSgkKSwkLiQkdHlwZW9mPUE5LEc5JiZHOSgkKX07dmFyIFY5PXQuX19yO3QuX19yPWZ1bmN0aW9uKCQpe1Y5JiZWOSgkKSxDMz0kLl9fY307dmFyIEI5PXQuZGlmZmVkO3QuZGlmZmVkPWZ1bmN0aW9uKCQpe0I5JiZCOSgkKTt2YXJ7cHJvcHM6SixfX2U6UX09JDtRIT1udWxsJiYkLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gSiYmSi52YWx1ZSE9PVEudmFsdWUmJihRLnZhbHVlPUoudmFsdWU9PW51bGw/IiI6Si52YWx1ZSksQzM9bnVsbH07dmFyIGc3PXtSZWFjdEN1cnJlbnREaXNwYXRjaGVyOntjdXJyZW50OntyZWFkQ29udGV4dDpmdW5jdGlvbigkKXtyZXR1cm4gQzMuX19uWyQuX19jXS5wcm9wcy52YWx1ZX0sdXNlQ2FsbGJhY2s6dyx1c2VDb250ZXh0OlUwLHVzZURlYnVnVmFsdWU6ejUsdXNlRGVmZXJyZWRWYWx1ZTpVOSx1c2VFZmZlY3Q6eSx1c2VJZDpaMix1c2VJbXBlcmF0aXZlSGFuZGxlOkw1LHVzZUluc2VydGlvbkVmZmVjdDpDOSx1c2VMYXlvdXRFZmZlY3Q6VDAsdXNlTWVtbzpUMSx1c2VSZWR1Y2VyOmQwLHVzZVJlZjpULHVzZVN0YXRlOk0sdXNlU3luY0V4dGVybmFsU3RvcmU6TDksdXNlVHJhbnNpdGlvbjpIOX19fTtmdW5jdGlvbiBmNygkKXtyZXR1cm4gdTEuYmluZChudWxsLCQpfWZ1bmN0aW9uIEM1KCQpe3JldHVybiEhJCYmJC4kJHR5cGVvZj09PUE5fWZ1bmN0aW9uIG03KCQpe3JldHVybiBDNSgkKSYmJC50eXBlPT09WjF9ZnVuY3Rpb24gcDcoJCl7cmV0dXJuISEkJiZ0eXBlb2YgJC5kaXNwbGF5TmFtZT09InN0cmluZyImJiQuZGlzcGxheU5hbWUuaW5kZXhPZigiTWVtbygiKT09MH1mdW5jdGlvbiB1NygkKXtyZXR1cm4gQzUoJCk/cTMuYXBwbHkobnVsbCxhcmd1bWVudHMpOiR9ZnVuY3Rpb24gbDcoJCl7cmV0dXJuISEkLl9fayYmKHgwKG51bGwsJCksITApfWZ1bmN0aW9uIGQ3KCQpe3JldHVybiAkJiYoJC5iYXNlfHwkLm5vZGVUeXBlPT09MSYmJCl8fG51bGx9dmFyIGM3PWZ1bmN0aW9uKCQsSil7cmV0dXJuICQoSil9LG83PWZ1bmN0aW9uKCQsSil7dmFyIFE9dC5kZWJvdW5jZVJlbmRlcmluZzt0LmRlYm91bmNlUmVuZGVyaW5nPWZ1bmN0aW9uKEspe3JldHVybiBLKCl9O3ZhciBYPSQoSik7cmV0dXJuIHQuZGVib3VuY2VSZW5kZXJpbmc9USxYfSxyNz1DNSxtPXt1c2VTdGF0ZTpNLHVzZUlkOloyLHVzZVJlZHVjZXI6ZDAsdXNlRWZmZWN0OnksdXNlTGF5b3V0RWZmZWN0OlQwLHVzZUluc2VydGlvbkVmZmVjdDpDOSx1c2VUcmFuc2l0aW9uOkg5LHVzZURlZmVycmVkVmFsdWU6VTksdXNlU3luY0V4dGVybmFsU3RvcmU6TDksc3RhcnRUcmFuc2l0aW9uOno5LHVzZVJlZjpULHVzZUltcGVyYXRpdmVIYW5kbGU6TDUsdXNlTWVtbzpUMSx1c2VDYWxsYmFjazp3LHVzZUNvbnRleHQ6VTAsdXNlRGVidWdWYWx1ZTp6NSx2ZXJzaW9uOiIxOC4zLjEiLENoaWxkcmVuOkQ3LHJlbmRlcjp2NyxoeWRyYXRlOmg3LHVubW91bnRDb21wb25lbnRBdE5vZGU6bDcsY3JlYXRlUG9ydGFsOkgzLGNyZWF0ZUVsZW1lbnQ6dTEsY3JlYXRlQ29udGV4dDp6MCxjcmVhdGVGYWN0b3J5OmY3LGNsb25lRWxlbWVudDp1NyxjcmVhdGVSZWY6RDIsRnJhZ21lbnQ6WjEsaXNWYWxpZEVsZW1lbnQ6QzUsaXNFbGVtZW50OnI3LGlzRnJhZ21lbnQ6bTcsaXNNZW1vOnA3LGZpbmRET01Ob2RlOmQ3LENvbXBvbmVudDpvMSxQdXJlQ29tcG9uZW50OlUzLG1lbW86YzAsZm9yd2FyZFJlZjpXMCxmbHVzaFN5bmM6bzcsdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6YzcsU3RyaWN0TW9kZTpaMSxTdXNwZW5zZTpINSxTdXNwZW5zZUxpc3Q6dzIsbGF6eTpUNyxfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDpnN307dmFyIFQyPXtwb3J0cmFpdDoibGFuZHNjYXBlX2xlZnQiLGxhbmRzY2FwZV9sZWZ0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdCJ9LEYzPXtwb3J0cmFpdDoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX2xlZnQiLGxhbmRzY2FwZV9sZWZ0OiJwb3J0cmFpdCJ9O3ZhciBYMj0zO2Z1bmN0aW9uIE8zKCQpe3JldHVybiAkPj0wLjkzPzM6dm9pZCAwfWZ1bmN0aW9uIGszKCQpe3JldHVybiAkPT09ImxhbmRzY2FwZV9sZWZ0Inx8JD09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIGYwKCQpe3JldHVybiEhJCYmKGszKCQub3JpZW50YXRpb24pfHwkLndpZHRoPiQuaGVpZ2h0KX1mdW5jdGlvbiBLMigkKXtpZighJHx8JC53aWR0aDw9MHx8JC5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IEo9azMoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQsUT1KP01hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpLFg9Sj9NYXRoLm1pbigkLndpZHRoLCQuaGVpZ2h0KTpNYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KTtpZihRPT09JC53aWR0aCYmWD09PSQuaGVpZ2h0KXJldHVybiAkO3JldHVybnsuLi4kLHdpZHRoOlEsaGVpZ2h0Olh9fWZ1bmN0aW9uIFkyKCQpe2xldCBKPUsyKCQpLFE9TTkoJD8ub3JpZW50YXRpb24pLFg9TWF0aC5hYnMoUSk9PT05MCxLPSEhJCYmJC53aWR0aD4kLmhlaWdodCxZPVE9PT0xODB8fFgmJiFLO3JldHVybntkaXNwbGF5Q29uZmlnOkoscm90YXRpb25EZWdyZWVzOlk/UTowLG5lZWRzQ3NzUm90YXRpb246WSxpbnB1dE9yaWVudGF0aW9uOlk/JD8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiBNOSgkKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBxMigkLEosUSl7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OlEseToxLUp9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLVEseTpKfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLUoseToxLVF9O2RlZmF1bHQ6cmV0dXJue3g6Six5OlF9fX1mdW5jdGlvbiBXOSgkLEosUSl7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybntkeDpRLGR5Oi1KfTtjYXNlImxhbmRzY2FwZV9yaWdodCI6cmV0dXJue2R4Oi1RLGR5Okp9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybntkeDotSixkeTotUX07ZGVmYXVsdDpyZXR1cm57ZHg6SixkeTpRfX19ZnVuY3Rpb24gQTMoJCxKKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6c3dpdGNoKEope2Nhc2UgMTpyZXR1cm4gMztjYXNlIDQ6cmV0dXJuIDI7Y2FzZSAyOnJldHVybiAxO2Nhc2UgMzpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiBKfWNhc2UibGFuZHNjYXBlX3JpZ2h0Ijpzd2l0Y2goSil7Y2FzZSAxOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gMztjYXNlIDI6cmV0dXJuIDQ7Y2FzZSAzOnJldHVybiAxO2RlZmF1bHQ6cmV0dXJuIEp9Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6c3dpdGNoKEope2Nhc2UgMTpyZXR1cm4gNDtjYXNlIDQ6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAzO2Nhc2UgMzpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiBKfWRlZmF1bHQ6cmV0dXJuIEp9fXZhciBfOT0xNjtmdW5jdGlvbiBJMigkLEosUSl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gbnVsbDtsZXQgWD1OdW1iZXIuaXNGaW5pdGUoUSkmJlE+MD9ROjEsSz1KPT09MT8kKjE2Oko9PT0yPyQqWDokLFk9TWF0aC5tYXgoLTIwMCxNYXRoLm1pbigyMDAsSykpO3JldHVybiBNYXRoLmFicyhZKTwwLjAxP251bGw6WX1mdW5jdGlvbiBNMygkLEosUSl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gMDtsZXQgWD1OdW1iZXIuaXNGaW5pdGUoUSkmJlE+MD9ROjE7aWYoSj09PTEpcmV0dXJuICQqXzk7aWYoSj09PTIpcmV0dXJuICQqWDtyZXR1cm4gJH1mdW5jdGlvbiBQOSgkLEosUSl7aWYoIUp8fEoud2lkdGg8PTB8fEouaGVpZ2h0PD0wKXJldHVybiBudWxsO2xldCBYPUoub3JpZW50YXRpb249PT12b2lkIDAmJiQ/Lm9yaWVudGF0aW9uP3suLi5KLG9yaWVudGF0aW9uOiQub3JpZW50YXRpb259Oko7aWYoJCYmJC53aWR0aD09PVgud2lkdGgmJiQuaGVpZ2h0PT09WC5oZWlnaHQmJiQub3JpZW50YXRpb249PT1YLm9yaWVudGF0aW9uKXJldHVybiBudWxsO3JldHVybntjb25maWc6WCxub3RpZnlQYXJlbnQ6USE9PSJleHRlcm5hbCJ9fWZ1bmN0aW9uIEQ5KHtzdHJlYW1Nb2RlOiQsYXZjY1N1cHBvcnRlZDpKLGhhc0V4dGVybmFsSW5wdXQ6USxoYXNFeHRlcm5hbEZyYW1lczpYfSl7bGV0IEs9JD09PSJhdmNjIiYmIUo/Im1qcGVnIjokLFk9Sz09PSJ3ZWJydGMiLHE9Sz09PSJhdmNjIixHPUs9PT0ibWpwZWciJiZYO3JldHVybntlZmZlY3RpdmVTdHJlYW1Nb2RlOkssdXNlV2ViUnRjOlksdXNlQXZjYzpxLGV4dGVybmFsSW5wdXQ6USxleHRlcm5hbE1qcGVnOkcsb3BlbkRpcmVjdENvbnRyb2xTb2NrZXQ6IVEsb3BlbkRpcmVjdE1qcGVnOks9PT0ibWpwZWciJiYhR319dmFyIGk3PXtbMV06ImRlc2NyaXB0aW9uIixbMl06ImtleWZyYW1lIixbM106ImRlbHRhIixbNF06InNlZWQifTtjbGFzcyBGNXtidWZmZXI9bmV3IFVpbnQ4QXJyYXkoNjU1MzYpO2xlbj0wO3N0YXJ0PTA7YXBwZW5kKCQpe2lmKHRoaXMubGVuKyQubGVuZ3RoPnRoaXMuYnVmZmVyLmxlbmd0aCl7aWYodGhpcy5zdGFydD4wKXRoaXMuYnVmZmVyLmNvcHlXaXRoaW4oMCx0aGlzLnN0YXJ0LHRoaXMubGVuKSx0aGlzLmxlbi09dGhpcy5zdGFydCx0aGlzLnN0YXJ0PTA7aWYodGhpcy5sZW4rJC5sZW5ndGg+dGhpcy5idWZmZXIubGVuZ3RoKXtsZXQgSj10aGlzLmJ1ZmZlci5sZW5ndGg7d2hpbGUoSjx0aGlzLmxlbiskLmxlbmd0aClKKj0yO2xldCBRPW5ldyBVaW50OEFycmF5KEopO1Euc2V0KHRoaXMuYnVmZmVyLnN1YmFycmF5KDAsdGhpcy5sZW4pKSx0aGlzLmJ1ZmZlcj1RfX10aGlzLmJ1ZmZlci5zZXQoJCx0aGlzLmxlbiksdGhpcy5sZW4rPSQubGVuZ3RofXB1c2goJCl7aWYoJC5sZW5ndGg+MCl0aGlzLmFwcGVuZCgkKTtsZXQgSj1bXSxRPXRoaXMuYnVmZmVyO3doaWxlKHRoaXMubGVuLXRoaXMuc3RhcnQ+PTQpe2xldCBYPXRoaXMuc3RhcnQsSz0oUVtYXTw8MjR8UVtYKzFdPDwxNnxRW1grMl08PDh8UVtYKzNdKT4+PjA7aWYodGhpcy5sZW4tWC00PEspYnJlYWs7aWYoSzwxKXt0aGlzLnN0YXJ0Kz00O2NvbnRpbnVlfWxldCBZPVFbWCs0XSxxPWk3W1ldO2lmKHEpSi5wdXNoKHt0eXBlOnEscGF5bG9hZDpRLnNsaWNlKFgrNSxYKzQrSyl9KTt0aGlzLnN0YXJ0Kz00K0t9aWYodGhpcy5zdGFydD4wKXtpZih0aGlzLnN0YXJ0PHRoaXMubGVuKXRoaXMuYnVmZmVyLmNvcHlXaXRoaW4oMCx0aGlzLnN0YXJ0LHRoaXMubGVuKTt0aGlzLmxlbi09dGhpcy5zdGFydCx0aGlzLnN0YXJ0PTB9cmV0dXJuIEp9cmVzZXQoKXt0aGlzLmxlbj0wLHRoaXMuc3RhcnQ9MH19ZnVuY3Rpb24gVzMoJCl7aWYoJC5sZW5ndGg8NClyZXR1cm4iYXZjMS40MkUwMUUiO2xldCBKPShRKT0+US50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpO3JldHVybiJhdmMxLiIrSigkWzFdKStKKCRbMl0pK0ooJFszXSl9ZnVuY3Rpb24gbzAoKXtyZXR1cm4gdHlwZW9mIGdsb2JhbFRoaXM8InUiJiZ0eXBlb2YgZ2xvYmFsVGhpcy5WaWRlb0RlY29kZXI8InUifXZhciBuNz0xMDAwLGE3PTE2NjY3O2Z1bmN0aW9uIF8zKHt1cmw6JCxlbmFibGVkOkosY2FudmFzUmVmOlEsb25GaXJzdEZyYW1lOlgsb25GcmFtZTpLLG9uRGVjb2RlZEZyYW1lOlksb25FcnJvcjpxLG9uRGVjb2RlckVycm9yOkd9KXtsZXQgQj1UKHtvbkZpcnN0RnJhbWU6WCxvbkZyYW1lOkssb25EZWNvZGVkRnJhbWU6WSxvbkVycm9yOnEsb25EZWNvZGVyRXJyb3I6R30pO0IuY3VycmVudD17b25GaXJzdEZyYW1lOlgsb25GcmFtZTpLLG9uRGVjb2RlZEZyYW1lOlksb25FcnJvcjpxLG9uRGVjb2RlckVycm9yOkd9LHkoKCk9PntpZighSnx8ISR8fCFvMCgpKXJldHVybjtsZXQgTj1uZXcgQWJvcnRDb250cm9sbGVyLEw9bmV3IEY1LFY9ITEsQz0hMSxVPSExLE89MCx6PW51bGwsSD1udWxsLEY9KCk9PiFWJiYhTi5zaWduYWwuYWJvcnRlZCxBPShvKT0+e2lmKEIuY3VycmVudC5vbkRlY29kZXJFcnJvcilCLmN1cnJlbnQub25EZWNvZGVyRXJyb3IoKTtlbHNlIEIuY3VycmVudC5vbkVycm9yPy4obyl9LGI9KG8scixRMSxOMSk9PntpZighRigpKXJldHVybjtsZXQgYz1RLmN1cnJlbnQ7aWYoIWMpcmV0dXJuO2lmKGMud2lkdGghPT1yfHxjLmhlaWdodCE9PVExKWMud2lkdGg9cixjLmhlaWdodD1RMTtsZXQgaj1jLmdldENvbnRleHQoIjJkIik7aWYoIWopcmV0dXJuO2lmKGouZHJhd0ltYWdlKG8sMCwwLHIsUTEpLEIuY3VycmVudC5vbkZyYW1lPy4oKSxOMSYmIVUpVT0hMCxCLmN1cnJlbnQub25EZWNvZGVkRnJhbWU/LigpO2lmKCFDKUM9ITAsQi5jdXJyZW50Lm9uRmlyc3RGcmFtZT8uKCl9LEQ9KCk9Pm5ldyBWaWRlb0RlY29kZXIoe291dHB1dDoobyk9Pnt0cnl7aWYoRigpKWIobyxvLmRpc3BsYXlXaWR0aCxvLmRpc3BsYXlIZWlnaHQsITApfWZpbmFsbHl7by5jbG9zZSgpfX0sZXJyb3I6KG8pPT5BKGBkZWNvZGVyOiAke28ubWVzc2FnZX1gKX0pLFM9YXN5bmMobyk9PntsZXQgcj1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChuZXcgQmxvYihbb10se3R5cGU6ImltYWdlL2pwZWcifSkpO3RyeXtpZihGKCkpYihyLHIud2lkdGgsci5oZWlnaHQsITEpfWZpbmFsbHl7ci5jbG9zZSgpfX0seD0obyk9PntpZighSHx8SC5zdGF0ZT09PSJjbG9zZWQiKUg9RCgpO3RyeXtILmNvbmZpZ3VyZSh7Y29kZWM6VzMobyksZGVzY3JpcHRpb246byxvcHRpbWl6ZUZvcjoibGF0ZW5jeSIsaGFyZHdhcmVBY2NlbGVyYXRpb246InByZWZlci1oYXJkd2FyZSJ9KX1jYXRjaChyKXtBKGBjb25maWc6ICR7ci5tZXNzYWdlfWApfX0scz0obyxyKT0+e2lmKEg/LnN0YXRlIT09ImNvbmZpZ3VyZWQiKXJldHVybjt0cnl7SC5kZWNvZGUobmV3IEVuY29kZWRWaWRlb0NodW5rKHt0eXBlOm89PT0ia2V5ZnJhbWUiPyJrZXkiOiJkZWx0YSIsdGltZXN0YW1wOk8sZGF0YTpyfSkpLE8rPWE3fWNhdGNoe319LGc9KG8scik9Pntzd2l0Y2gobyl7Y2FzZSJzZWVkIjpTKHIpLmNhdGNoKCgpPT57fSk7cmV0dXJuO2Nhc2UiZGVzY3JpcHRpb24iOngocik7cmV0dXJuO2Nhc2Uia2V5ZnJhbWUiOmNhc2UiZGVsdGEiOnMobyxyKTtyZXR1cm59fSx1PSgpPT57aWYoIUYoKXx8eilyZXR1cm47ej1zZXRUaW1lb3V0KCgpPT57ej1udWxsLGkoKX0sbjcpfSxpPWFzeW5jKCk9PntMLnJlc2V0KCk7dHJ5e2xldCByPShhd2FpdCBmZXRjaChgJHskfS9zdHJlYW0uYXZjY2Ase3NpZ25hbDpOLnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZighcilyZXR1cm47Zm9yKDs7KXtsZXR7ZG9uZTpRMSx2YWx1ZTpOMX09YXdhaXQgci5yZWFkKCk7aWYoUTEpYnJlYWs7aWYoIU4xKWNvbnRpbnVlO2ZvcihsZXQgYyBvZiBMLnB1c2goTjEpKWcoYy50eXBlLGMucGF5bG9hZCl9fWNhdGNoe31maW5hbGx5e2lmKEYoKSl1KCl9fTtyZXR1cm4gaSgpLCgpPT57aWYoVj0hMCx6KWNsZWFyVGltZW91dCh6KTtpZihOLmFib3J0KCksTC5yZXNldCgpLEgmJkguc3RhdGUhPT0iY2xvc2VkIil0cnl7SC5jbG9zZSgpfWNhdGNoe31IPW51bGx9fSxbJCxKLFFdKX1mdW5jdGlvbiB3OSgkLEope2xldCBRPTAsWD0wLEs9KCk9PntsZXR7dmlkZW9XaWR0aDpZLHZpZGVvSGVpZ2h0OnF9PSQ7aWYoWTw9MHx8cTw9MHx8WT09PVEmJnE9PT1YKXJldHVybjtRPVksWD1xLEooe3dpZHRoOlksaGVpZ2h0OnF9KX07cmV0dXJuICQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkbWV0YWRhdGEiLEspLCQuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixLKSxLKCkse2NoZWNrOkssZGlzY29ubmVjdCgpeyQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZGVkbWV0YWRhdGEiLEspLCQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixLKX19fXZhciBzNz0wO2Z1bmN0aW9uIFooJCxKLFEsWCxLLFkpe0p8fChKPXt9KTt2YXIgcSxHLEI9SjtpZigicmVmImluIEIpZm9yKEcgaW4gQj17fSxKKUc9PSJyZWYiP3E9SltHXTpCW0ddPUpbR107dmFyIE49e3R5cGU6JCxwcm9wczpCLGtleTpRLHJlZjpxLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLXM3LF9faTotMSxfX3U6MCxfX3NvdXJjZTpLLF9fc2VsZjpZfTtpZih0eXBlb2YgJD09ImZ1bmN0aW9uIiYmKHE9JC5kZWZhdWx0UHJvcHMpKWZvcihHIGluIHEpQltHXT09PXZvaWQgMCYmKEJbR109cVtHXSk7cmV0dXJuIHQudm5vZGUmJnQudm5vZGUoTiksTn12YXIgVDk9YHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzknIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsMC40NSknIHN0cm9rZT0ncmdiYSgwLDAsMCwwLjU1KScgc3Ryb2tlLXdpZHRoPScxLjI1JyBmaWx0ZXI9J2Ryb3Atc2hhZG93KDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuNDUpKScvJTNFJTNDL3N2ZyUzRSIpIDEyIDEyLCBwb2ludGVyYCx0Nz0xLjAwNCxlNz0zLCQkPTQsSiQ9NSxRJD0xMCxaJD0xMTtmdW5jdGlvbiBPNSh7dXJsOiQsd3NVcmw6SixzdHlsZTpRLGltYWdlU3R5bGU6WCxjbGFzc05hbWU6SyxvbkhvbWVQcmVzczpZLG9uU3RyZWFtVG91Y2g6cSxvblN0cmVhbU11bHRpVG91Y2g6RyxvblN0cmVhbUJ1dHRvbjpCLG9uU3RyZWFtRGlnaXRhbENyb3duOk4sb25TdHJlYW1TY3JvbGw6TCxlbmFibGVEaWdpdGFsQ3Jvd246VixzdWJzY3JpYmVGcmFtZTpDLHN0cmVhbUZyYW1lOlUsc3RyZWFtQ29uZmlnOk8sb25TY3JlZW5Db25maWdDaGFuZ2U6eixoaWRlQ29udHJvbHM6SCxvblN0cmVhbWluZ0NoYW5nZTpGLGNvbm5lY3Rpb25RdWFsaXR5OkEsc3RyZWFtTW9kZTpiPSJhdmNjIix3ZWJSdGNTdHJlYW06RCxvbldlYlJ0Y0ZyYW1lOlMsc3RyZWFtRXJyb3I6eCxvbkF2Y2NFcnJvcjpzLG9uQXZjY0RlY29kZWRGcmFtZTpnfSl7bGV0e3VzZVdlYlJ0Yzp1LHVzZUF2Y2M6aSxleHRlcm5hbElucHV0Om8sZXh0ZXJuYWxNanBlZzpyLG9wZW5EaXJlY3RDb250cm9sU29ja2V0OlExLG9wZW5EaXJlY3RNanBlZzpOMX09RDkoe3N0cmVhbU1vZGU6YixhdmNjU3VwcG9ydGVkOm8wKCksaGFzRXh0ZXJuYWxJbnB1dDohIXEsaGFzRXh0ZXJuYWxGcmFtZXM6ISFDfSksYz1UKG51bGwpLGo9VChudWxsKSxhPVQobnVsbCksSzE9VChudWxsKSxMMT1UKG51bGwpLEoxPVQobnVsbCksWTE9VChudWxsKSxbQzEsRV09TSghMSksW2YsX109TShudWxsKSxbcCxsXT1NKG51bGwpLHY9VChudWxsKSxHMT1UKCExKSx6MT1UKHopO3oxLmN1cnJlbnQ9ejtsZXQgTTE9VChudWxsKSxbVzEsaTFdPU0obnVsbCk7eSgoKT0+e2xldCBXPU0xLmN1cnJlbnQ7aWYoIVd8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBrPW5ldyBSZXNpemVPYnNlcnZlcigoSSk9PntsZXQgaD1JWzBdPy5jb250ZW50UmVjdDtpZihoKWkxKHt3aWR0aDpoLndpZHRoLGhlaWdodDpoLmhlaWdodH0pfSk7cmV0dXJuIGsub2JzZXJ2ZShXKSwoKT0+ay5kaXNjb25uZWN0KCl9LFtdKTtsZXRbQTEsdjFdPU0oMCksXzE9VCgwKSxbbDEsVTFdPU0oITEpLEkxPXcoKFcsaz0icmVwb3J0ZWQiKT0+e2lmKGs9PT0ibWVkaWEiJiZHMS5jdXJyZW50KXJldHVybjtpZihrIT09Im1lZGlhIiYmVyYmVy53aWR0aD4wJiZXLmhlaWdodD4wKUcxLmN1cnJlbnQ9ITA7bGV0IEk9UDkodi5jdXJyZW50LFcsayk7aWYoIUkpcmV0dXJuO2lmKHYuY3VycmVudD1JLmNvbmZpZyxsKEkuY29uZmlnKSxJLm5vdGlmeVBhcmVudCl6MS5jdXJyZW50Py4oSS5jb25maWcpfSxbXSk7eSgoKT0+e2lmKCF1KXJldHVybjtpZih4KUUoITEpLF8oeCk7ZWxzZSBfKG51bGwpfSxbeCx1XSk7bGV0IGQxPVQobnVsbCk7eSgoKT0+e2lmKEE9PT0icG9vciIpe2lmKFUxKCEwKSxkMS5jdXJyZW50KWNsZWFyVGltZW91dChkMS5jdXJyZW50KTtkMS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntVMSghMSksZDEuY3VycmVudD1udWxsfSwzMDAwKX1lbHNlIGlmKFUxKCExKSxkMS5jdXJyZW50KWNsZWFyVGltZW91dChkMS5jdXJyZW50KSxkMS5jdXJyZW50PW51bGw7cmV0dXJuKCk9PntpZihkMS5jdXJyZW50KWNsZWFyVGltZW91dChkMS5jdXJyZW50KX19LFtBXSk7bGV0IHQxPWAkeyR9L3N0cmVhbS5tanBlZ2A7eSgoKT0+e2lmKCF1KXJldHVybjtsZXQgVz1hLmN1cnJlbnQ7aWYoIVcpcmV0dXJuO2xldCBrPSExLEk9ITEsaD0wLGU9bnVsbCxxMT0oKT0+e2lmKEl8fGspcmV0dXJuO2U/LmNoZWNrKCksaz0hMCxTPy4oKSxFKCEwKSxfKG51bGwpfSxIMT0oKT0+e2lmKEkpcmV0dXJuO2U/LmNoZWNrKCksYTEuY3VycmVudD1EYXRlLm5vdygpLF8xLmN1cnJlbnQrKyxxMSgpLEUoITApLGg9Vy5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKEgxKX0sUDE9KCk9PntpZihJKXJldHVybjtlPy5jaGVjaygpLGExLmN1cnJlbnQ9RGF0ZS5ub3coKSxxMSgpLEUoITApfTtpZihXLnNyY09iamVjdD1EPz9udWxsLEQpe2lmKGU9dzkoVywoaDApPT57STEoaDAsIm1lZGlhIil9KSxFKCExKSxXLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlZGRhdGEiLHExLHtvbmNlOiEwfSksdHlwZW9mIFcucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjaz09PSJmdW5jdGlvbiIpaD1XLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soSDEpO2Vsc2UgVy5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIixQMSk7Vy5wbGF5KCkuY2F0Y2goKCk9Pnt9KX1lbHNlIEUoITEpO3JldHVybigpPT57aWYoST0hMCxXLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWRlZGRhdGEiLHExKSxXLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLFAxKSxlPy5kaXNjb25uZWN0KCksaCYmdHlwZW9mIFcuY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrPT09ImZ1bmN0aW9uIilXLmNhbmNlbFZpZGVvRnJhbWVDYWxsYmFjayhoKTtXLnNyY09iamVjdD1udWxsfX0sW3UsRCxTLEkxXSkseSgoKT0+e0cxLmN1cnJlbnQ9ITEsdi5jdXJyZW50PW51bGwsbChudWxsKX0sWyQsSl0pO2xldCBnMT1UKEYpO2cxLmN1cnJlbnQ9Rix5KCgpPT57ZzEuY3VycmVudD8uKEMxKX0sW0MxXSkseSgoKT0+e2lmKE8pSTEoTywiZXh0ZXJuYWwiKX0sW08sSTEsJF0pO2xldCBuMT1UKCExKTtuMS5jdXJyZW50PUMxO2xldCAkMD1UKG51bGwpLFYwPVQobnVsbCk7eSgoKT0+e2lmKCFyfHwhQylyZXR1cm47bGV0IGs9c2V0VGltZW91dCgoKT0+e2lmKCFuMS5jdXJyZW50KV8oIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKSxJPXJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBlKCl7bGV0IHExPSQwLmN1cnJlbnQ7aWYocTEpeyQwLmN1cnJlbnQ9bnVsbDtsZXQgSDE9SzEuY3VycmVudDtpZihIMSl7aWYoVjAuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKFYwLmN1cnJlbnQpO1YwLmN1cnJlbnQ9cTEsSDEuc3JjPXExLF8xLmN1cnJlbnQrK31lbHNlIFVSTC5yZXZva2VPYmplY3RVUkwocTEpfUk9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpfSksaD1DKChlKT0+e2lmKGExLmN1cnJlbnQ9RGF0ZS5ub3coKSwkMC5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoJDAuY3VycmVudCk7aWYoJDAuY3VycmVudD1lLCFuMS5jdXJyZW50KWNsZWFyVGltZW91dChrKSxFKCEwKSxfKG51bGwpfSk7cmV0dXJuKCk9PntpZihjbGVhclRpbWVvdXQoayksY2FuY2VsQW5pbWF0aW9uRnJhbWUoSSksaD8uKCksJDAuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKCQwLmN1cnJlbnQpLCQwLmN1cnJlbnQ9bnVsbDtpZihWMC5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoVjAuY3VycmVudCksVjAuY3VycmVudD1udWxsfX0sW3IsQ10pO2xldCBzMT13KCgpPT57YTEuY3VycmVudD1EYXRlLm5vdygpLEUoITApLF8obnVsbCl9LFtdKSx2MD13KCgpPT57aWYoXzEuY3VycmVudCsrLGExLmN1cnJlbnQ9RGF0ZS5ub3coKSwhbjEuY3VycmVudClFKCEwKSxfKG51bGwpfSxbXSk7XzMoe3VybDokLGVuYWJsZWQ6aSxjYW52YXNSZWY6aixvbkZpcnN0RnJhbWU6czEsb25GcmFtZTp2MCxvbkRlY29kZWRGcmFtZTpnLG9uRXJyb3I6XyxvbkRlY29kZXJFcnJvcjpzfSk7bGV0IG0xPXcoKFcpPT57bGV0IGs9WTIodi5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLEk9cTIoayxXLngsVy55KSxoPVcuZWRnZT09PXZvaWQgMD92b2lkIDA6QTMoayxXLmVkZ2UpLGU9aD09PXZvaWQgMD97dHlwZTpXLnR5cGUsLi4uSX06e3R5cGU6Vy50eXBlLC4uLkksZWRnZTpofTtpZihvKXtxPy4oZSk7cmV0dXJufWxldCBxMT1ZMS5jdXJyZW50O2lmKCFxMXx8cTEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgSDE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGUpKSxQMT1uZXcgVWludDhBcnJheSgxK0gxLmxlbmd0aCk7UDFbMF09ZTcsUDEuc2V0KEgxLDEpLHExLnNlbmQoUDEpfSxbbyxxXSkscTA9dygoVyk9PntpZihvKXtCPy4oVyk7cmV0dXJufWxldCBrPVkxLmN1cnJlbnQ7aWYoIWt8fGsucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgST1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoe2J1dHRvbjpXfSkpLGg9bmV3IFVpbnQ4QXJyYXkoMStJLmxlbmd0aCk7aFswXT0kJCxoLnNldChJLDEpLGsuc2VuZChoKX0sW28sQl0pLEowPXcoKFcpPT57aWYoIU51bWJlci5pc0Zpbml0ZShXKXx8Vz09PTApcmV0dXJuO2lmKG8pe04/LihXKTtyZXR1cm59bGV0IGs9WTEuY3VycmVudDtpZigha3x8ay5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBJPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7ZGVsdGE6V30pKSxoPW5ldyBVaW50OEFycmF5KDErSS5sZW5ndGgpO2hbMF09USQsaC5zZXQoSSwxKSxrLnNlbmQoaCl9LFtvLE5dKSxfMD13KChXLGssSSxoKT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoVyl8fCFOdW1iZXIuaXNGaW5pdGUoayl8fFc9PT0wJiZrPT09MClyZXR1cm47bGV0IGU9WTIodi5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLHExPVc5KGUsVyxrKSxIMT1xMihlLEksaCksUDE9e2R4OnExLmR4LGR5OnExLmR5LHg6SDEueCx5OkgxLnl9O2lmKG8pe0w/LihQMSk7cmV0dXJufWxldCBNMD1ZMS5jdXJyZW50O2lmKCFNMHx8TTAucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgaDA9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFAxKSksbDA9bmV3IFVpbnQ4QXJyYXkoMStoMC5sZW5ndGgpO2wwWzBdPVokLGwwLnNldChoMCwxKSxNMC5zZW5kKGwwKX0sW28sTF0pLGMxPXcoKFcpPT57bGV0IGs9WTIodi5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLEk9cTIoayxXLngxLFcueTEpLGg9cTIoayxXLngyLFcueTIpLGU9e3R5cGU6Vy50eXBlLHgxOkkueCx5MTpJLnkseDI6aC54LHkyOmgueX07aWYobyl7Rz8uKGUpO3JldHVybn1sZXQgcTE9WTEuY3VycmVudDtpZighcTF8fHExLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IEgxPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShlKSksUDE9bmV3IFVpbnQ4QXJyYXkoMStIMS5sZW5ndGgpO1AxWzBdPUokLFAxLnNldChIMSwxKSxxMS5zZW5kKFAxKX0sW28sR10pO3koKCk9PntpZighUTEmJiFOMSYmIWkpcmV0dXJuO2xldCBXPW51bGw7aWYoUTEpe2xldCBxMT1KPz8kLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIjtXPW5ldyBXZWJTb2NrZXQocTEpLFcuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLFkxLmN1cnJlbnQ9VyxXLm9ubWVzc2FnZT0oSDEpPT57aWYoIShIMS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgUDE9bmV3IFVpbnQ4QXJyYXkoSDEuZGF0YSk7aWYoUDEubGVuZ3RoPDF8fFAxWzBdIT09MTMwKXJldHVybjt0cnl7STEoSlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoUDEuc3ViYXJyYXkoMSkpKSl9Y2F0Y2h7fX0sVy5vbm9wZW49KCk9Pl8obnVsbCksVy5vbmNsb3NlPSgpPT5FKCExKSxXLm9uZXJyb3I9KCk9PntfKCJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQiKSxFKCExKX19bGV0IGs9aXx8TjE/c2V0SW50ZXJ2YWwoKCk9Pnt2MShfMS5jdXJyZW50KSxfMS5jdXJyZW50PTB9LDEwMDApOm51bGwsST1OMT9uZXcgQWJvcnRDb250cm9sbGVyOm51bGwsaD0hMSxlPU4xP3NldFRpbWVvdXQoKCk9PntpZighaClfKCJTdHJlYW0gaXMgbm90IHByb2R1Y2luZyBmcmFtZXMuIFRoZSBzaW11bGF0b3IgbWF5IGhhdmUgc3RvcHBlZCDigJQgdHJ5IHJlY29ubmVjdGluZy4iKX0sNjAwMCk6bnVsbDtpZihOMSYmSSkoYXN5bmMoKT0+e3RyeXtsZXQgSDE9KGF3YWl0IGZldGNoKHQxLHtzaWduYWw6SS5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUgxKXJldHVybjtsZXQgUDE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCItLWZyYW1lIik7d2hpbGUoITApe2xldHtkb25lOk0wLHZhbHVlOmgwfT1hd2FpdCBIMS5yZWFkKCk7aWYoTTApYnJlYWs7aWYoaDApZm9yKGxldCBsMD0wO2wwPD1oMC5sZW5ndGgtUDEubGVuZ3RoO2wwKyspe2xldCBDOD0hMDtmb3IobGV0IFg1PTA7WDU8UDEubGVuZ3RoO1g1KyspaWYoaDBbbDArWDVdIT09UDFbWDVdKXtDOD0hMTticmVha31pZihDOCl7aWYoXzEuY3VycmVudCsrLCFoKXtpZihoPSEwLGUpY2xlYXJUaW1lb3V0KGUpO0UoITApLF8obnVsbCl9fX19fWNhdGNoe319KSgpO3JldHVybigpPT57aWYoST8uYWJvcnQoKSxrKWNsZWFySW50ZXJ2YWwoayk7aWYoZSljbGVhclRpbWVvdXQoZSk7aWYoVz8uY2xvc2UoKSxZMS5jdXJyZW50PT09VylZMS5jdXJyZW50PW51bGx9fSxbUTEsTjEsdDEsSTEsJCxpLEpdKSx5KCgpPT57aWYoIXUpcmV0dXJuO2xldCBXPXNldEludGVydmFsKCgpPT57djEoXzEuY3VycmVudCksXzEuY3VycmVudD0wO2xldCBrPWExLmN1cnJlbnQ7aWYoIWRvY3VtZW50LmhpZGRlbiYmayYmRGF0ZS5ub3coKS1rPjMwMDApRSghMSl9LDEwMDApO3JldHVybigpPT5jbGVhckludGVydmFsKFcpfSxbdV0pO2xldCBhMT1UKDApO3koKCk9PntpZighcilyZXR1cm47bGV0IFc9MjAwMCxrPSgpPT57bGV0IGU9YTEuY3VycmVudDtpZighZXx8IW4xLmN1cnJlbnQpcmV0dXJuO2lmKERhdGUubm93KCktZT5XKUUoITEpfSxJPXNldEludGVydmFsKCgpPT57djEoXzEuY3VycmVudCksXzEuY3VycmVudD0wLGsoKX0sMTAwMCksaD0oKT0+e2lmKCFkb2N1bWVudC5oaWRkZW4paygpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsaCksKCk9PntjbGVhckludGVydmFsKEkpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLGgpfX0sW3JdKTtsZXQgUDA9dygoKT0+e2lmKHUpcmV0dXJuIGEuY3VycmVudDtpZihpKXJldHVybiBqLmN1cnJlbnQ7cmV0dXJuIHI/SzEuY3VycmVudDpjLmN1cnJlbnR9LFtyLGksdV0pLGgxPXcoKCk9PntyZXR1cm4gTDEuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P1AwKCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9udWxsfSxbUDBdKSxDMD13KChXLGspPT57bGV0IEk9aDEoKTtpZighSSlyZXR1cm47bGV0IGg9KGsuY2xpZW50WC1JLmxlZnQpL0kud2lkdGgsZT0oay5jbGllbnRZLUkudG9wKS9JLmhlaWdodDttMSh7dHlwZTpXLHg6aCx5OmV9KX0sW2gxLG0xXSksQjA9dygoVyxrKT0+e2xldCBoPWgxKCk/LmhlaWdodHx8MSxlPUkyKFcsayxoKTtpZihlPT09bnVsbClyZXR1cm4hMTtyZXR1cm4gSjAoZSksITB9LFtoMSxKMF0pLEQxPVQoITEpLHkxPVQoITEpLFEwPVQoITEpLEYwPVQoe2R4OjAsZHk6MH0pLE4wPVQoITEpLFtPMCxYMV09TSghMSksUD1UKHt4OjAuNSx5OjAuNX0pLFtkLG5dPU0obnVsbCk7eSgoKT0+e2xldCBXPShJKT0+e2lmKEkua2V5PT09IkFsdCIpWDEoITApfSxrPShJKT0+e2lmKEkua2V5PT09IkFsdCIpe2lmKFgxKCExKSwheTEuY3VycmVudCluKG51bGwpfX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixXKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGspLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLFcpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsayl9fSxbXSkseSgoKT0+e2lmKE8wJiYheTEuY3VycmVudCl7bGV0IFc9UC5jdXJyZW50O24oe3gxOlcueCx5MTpXLnkseDI6MS1XLngseTI6MS1XLnl9KX1lbHNlIGlmKCFPMCYmIXkxLmN1cnJlbnQpbihudWxsKX0sW08wXSk7bGV0IE8xPVQobnVsbCksVjE9VCghMSksQjE9VCgwKSxmMT13KChXLGspPT57VjEuY3VycmVudD0hMDtsZXQgST1PMS5jdXJyZW50O2lmKEkpY2FuY2VsQW5pbWF0aW9uRnJhbWUoQjEuY3VycmVudCksQjEuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntJLnN0eWxlLmxlZnQ9YCR7VyoxMDB9JWAsSS5zdHlsZS50b3A9YCR7ayoxMDB9JWAsSS5zdHlsZS5kaXNwbGF5PSJibG9jayJ9KX0sW10pLHAxPXcoKFcsayk9PntpZighVjEuY3VycmVudClyZXR1cm47bGV0IEk9TzEuY3VycmVudDtpZihJKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEIxLmN1cnJlbnQpLEIxLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57SS5zdHlsZS5sZWZ0PWAke1cqMTAwfSVgLEkuc3R5bGUudG9wPWAke2sqMTAwfSVgfSl9LFtdKSx4MT13KCgpPT57VjEuY3VycmVudD0hMTtsZXQgVz1PMS5jdXJyZW50O2lmKFcpY2FuY2VsQW5pbWF0aW9uRnJhbWUoQjEuY3VycmVudCksVy5zdHlsZS5kaXNwbGF5PSJub25lIn0sW10pLGswPXcoKFcpPT57aWYoVjEuY3VycmVudHx8eTEuY3VycmVudClyZXR1cm4hMTtsZXQgaz1oMSgpO2lmKCFrKXJldHVybiExO2xldCBJPU0zKFcuZGVsdGFYLFcuZGVsdGFNb2RlLGsud2lkdGgpLGg9TTMoVy5kZWx0YVksVy5kZWx0YU1vZGUsay5oZWlnaHQpO2lmKEk9PT0wJiZoPT09MClyZXR1cm4hMTtsZXQgZT1NYXRoLm1pbihNYXRoLm1heCgoVy5jbGllbnRYLWsubGVmdCkvay53aWR0aCwwKSwxKSxxMT1NYXRoLm1pbihNYXRoLm1heCgoVy5jbGllbnRZLWsudG9wKS9rLmhlaWdodCwwKSwxKTtyZXR1cm4gXzAoSS9rLndpZHRoLGgvay5oZWlnaHQsZSxxMSksITB9LFtoMSxfMF0pO3koKCk9PntsZXQgVz1KMS5jdXJyZW50O2lmKCFXKXJldHVybjtsZXQgaz0oSSk9PntpZighKFY/QjAoSS5kZWx0YVksSS5kZWx0YU1vZGUpOmswKEkpKSlyZXR1cm47SS5wcmV2ZW50RGVmYXVsdCgpLEkuc3RvcFByb3BhZ2F0aW9uKCl9O3JldHVybiBXLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixrLHtwYXNzaXZlOiExfSksKCk9PlcucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLGspfSxbVixCMCxrMF0pO2xldCBaMD1UKDApLHcxPVQobnVsbCksTDA9dygoKT0+e2xldCBXPURhdGUubm93KCksaz1XLVowLmN1cnJlbnQ7aWYoWjAuY3VycmVudD1XLGs8MzAwKXtpZih3MS5jdXJyZW50KWNsZWFyVGltZW91dCh3MS5jdXJyZW50KSx3MS5jdXJyZW50PW51bGw7aWYoWSlZKCk7ZWxzZSBxMCgiYXBwX3N3aXRjaGVyIil9ZWxzZSB3MS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntpZihZKVkoKTtlbHNlIHEwKCJob21lIik7dzEuY3VycmVudD1udWxsfSwzMDApfSxbcTAsWV0pLEQwPVkyKHApLFMwPUQwLmRpc3BsYXlDb25maWcsQTA9KCgpPT57aWYoIVMwfHwhVzEpcmV0dXJuIG51bGw7aWYoVzEud2lkdGg9PT0wfHxXMS5oZWlnaHQ9PT0wKXJldHVybiBudWxsO2xldCBXPU1hdGgubWluKFcxLndpZHRoL1MwLndpZHRoLFcxLmhlaWdodC9TMC5oZWlnaHQpO3JldHVybnt3aWR0aDpTMC53aWR0aCpXLGhlaWdodDpTMC5oZWlnaHQqV319KSgpLEEyPUQwLnJvdGF0aW9uRGVncmVlcyxRNT1EMC5uZWVkc0Nzc1JvdGF0aW9uJiZNYXRoLmFicyhBMik9PT05MCxaNT1YLFI9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6UTUmJkEwP2Ake0EwLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDpRNSYmQTA/YCR7QTAud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7QTI9PT0wPyIiOmAgcm90YXRlKCR7QTJ9ZGVnKWB9YCx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjpUOSxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLlgsLi4uQTI9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fSwkMT17Li4uUix0cmFuc2Zvcm06YCR7Ui50cmFuc2Zvcm0/PyIifSBzY2FsZSgke3Q3fSlgfTtyZXR1cm4gWigiZGl2Iix7c3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZmxleDoxLC4uLkg/e306e2JvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxvdmVyZmxvdzoiaGlkZGVuIixtaW5XaWR0aDowLG1pbkhlaWdodDowLC4uLlF9LGNsYXNzTmFtZTpLLGNoaWxkcmVuOltaKCJkaXYiLHtyZWY6TTEsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLG1pbkhlaWdodDowLG1pbldpZHRoOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIn0sY2hpbGRyZW46WigiZGl2Iix7cmVmOkwxLHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUiLHdpZHRoOkEwP2Ake0EwLndpZHRofXB4YDoiMTAwJSIsaGVpZ2h0OkEwP2Ake0EwLmhlaWdodH1weGA6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLGJvcmRlclJhZGl1czpaNT8uYm9yZGVyUmFkaXVzLGNvcm5lclNoYXBlOlo1Py5jb3JuZXJTaGFwZX0sY2hpbGRyZW46W3U/WigidmlkZW8iLHtyZWY6YSxtdXRlZDohMCxwbGF5c0lubGluZTohMCxhdXRvUGxheTohMCxzdHlsZTpSfSk6aT9aKCJjYW52YXMiLHtyZWY6aixzdHlsZTokMX0pOlooImltZyIse3JlZjpjLHNyYzpyP3ZvaWQgMDp0MSxkcmFnZ2FibGU6ITEsb25Mb2FkOihXKT0+e2xldCBrPVcuY3VycmVudFRhcmdldDtpZihrLm5hdHVyYWxXaWR0aD4wJiZrLm5hdHVyYWxIZWlnaHQ+MClJMSh7d2lkdGg6ay5uYXR1cmFsV2lkdGgsaGVpZ2h0OmsubmF0dXJhbEhlaWdodH0sIm1lZGlhIil9LHN0eWxlOnI/e2Rpc3BsYXk6Im5vbmUifTpSfSksciYmWigiaW1nIix7cmVmOksxLGRyYWdnYWJsZTohMSxvbkxvYWQ6KFcpPT57bGV0IGs9Vy5jdXJyZW50VGFyZ2V0O2lmKGsubmF0dXJhbFdpZHRoPjAmJmsubmF0dXJhbEhlaWdodD4wKUkxKHt3aWR0aDprLm5hdHVyYWxXaWR0aCxoZWlnaHQ6ay5uYXR1cmFsSGVpZ2h0fSwibWVkaWEiKX0sc3R5bGU6Un0pLFooImRpdiIse3JlZjpKMSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLGN1cnNvcjpUOSx0b3VjaEFjdGlvbjoibm9uZSJ9LG9uTW91c2VEb3duOihXKT0+e1cucHJldmVudERlZmF1bHQoKTtsZXQgaz1oMSgpO2lmKCFrKXJldHVybjtsZXQgST0oVy5jbGllbnRYLWsubGVmdCkvay53aWR0aCxoPShXLmNsaWVudFktay50b3ApL2suaGVpZ2h0O2lmKFcuYWx0S2V5KXt5MS5jdXJyZW50PSEwLFEwLmN1cnJlbnQ9Vy5zaGlmdEtleTtsZXQgcTE9e3gxOkkseTE6aCx4MjoxLUkseTI6MS1ofTtGMC5jdXJyZW50PXtkeDoxLUktSSxkeToxLWgtaH0sbihxMSksYzEoe3R5cGU6ImJlZ2luIiwuLi5xMX0pO3JldHVybn1mMShJLGgpO2xldCBlPU8zKGgpO2lmKGUhPT12b2lkIDApRDEuY3VycmVudD0hMCxtMSh7dHlwZToiYmVnaW4iLHg6SSx5OmgsZWRnZTplfSk7ZWxzZSBEMS5jdXJyZW50PSExLEMwKCJiZWdpbiIsVyl9LG9uTW91c2VNb3ZlOihXKT0+e2xldCBrPWgxKCk7aWYoIWspcmV0dXJuO2xldCBJPShXLmNsaWVudFgtay5sZWZ0KS9rLndpZHRoLGg9KFcuY2xpZW50WS1rLnRvcCkvay5oZWlnaHQ7aWYoUC5jdXJyZW50PXt4OkkseTpofSxXLmJ1dHRvbnM9PT0wKXtpZihXLmFsdEtleSluKHt4MTpJLHkxOmgseDI6MS1JLHkyOjEtaH0pO3JldHVybn1pZih5MS5jdXJyZW50KXtsZXQgZTtpZihRMC5jdXJyZW50KXtsZXQgcTE9RjAuY3VycmVudDtlPXt4MTpJLHkxOmgseDI6SStxMS5keCx5MjpoK3ExLmR5fX1lbHNlIGU9e3gxOkkseTE6aCx4MjoxLUkseTI6MS1ofTtuKGUpLGMxKHt0eXBlOiJtb3ZlIiwuLi5lfSk7cmV0dXJufWlmKHAxKEksaCksRDEuY3VycmVudCltMSh7dHlwZToibW92ZSIseDpJLHk6aCxlZGdlOlgyfSk7ZWxzZSBDMCgibW92ZSIsVyl9LG9uTW91c2VVcDooVyk9PntpZih5MS5jdXJyZW50KXtsZXQgaz1oMSgpO2lmKGspe2xldCBJPShXLmNsaWVudFgtay5sZWZ0KS9rLndpZHRoLGg9KFcuY2xpZW50WS1rLnRvcCkvay5oZWlnaHQ7aWYoUTAuY3VycmVudCl7bGV0IGU9RjAuY3VycmVudDtjMSh7dHlwZToiZW5kIix4MTpJLHkxOmgseDI6SStlLmR4LHkyOmgrZS5keX0pfWVsc2UgYzEoe3R5cGU6ImVuZCIseDE6SSx5MTpoLHgyOjEtSSx5MjoxLWh9KX1pZih5MS5jdXJyZW50PSExLCFXLmFsdEtleSluKG51bGwpO3JldHVybn1pZih4MSgpLEQxLmN1cnJlbnQpe2xldCBrPWgxKCk7aWYoayl7bGV0IEk9KFcuY2xpZW50WC1rLmxlZnQpL2sud2lkdGgsaD0oVy5jbGllbnRZLWsudG9wKS9rLmhlaWdodDttMSh7dHlwZToiZW5kIix4OkkseTpoLGVkZ2U6WDJ9KX1EMS5jdXJyZW50PSExO3JldHVybn1DMCgiZW5kIixXKX0sb25Nb3VzZUxlYXZlOihXKT0+e2lmKHkxLmN1cnJlbnQpe2lmKGQpYzEoe3R5cGU6ImVuZCIsLi4uZH0pO3kxLmN1cnJlbnQ9ITEsbihudWxsKTtyZXR1cm59aWYoeDEoKSxEMS5jdXJyZW50KXtsZXQgaz1oMSgpO2lmKGspe2xldCBJPShXLmNsaWVudFgtay5sZWZ0KS9rLndpZHRoLGg9KFcuY2xpZW50WS1rLnRvcCkvay5oZWlnaHQ7bTEoe3R5cGU6ImVuZCIseDpJLHk6aCxlZGdlOlgyfSl9RDEuY3VycmVudD0hMTtyZXR1cm59aWYoVy5idXR0b25zPjApQzAoImVuZCIsVyk7bihudWxsKX0sb25Ub3VjaFN0YXJ0OihXKT0+e1cucHJldmVudERlZmF1bHQoKTtsZXQgaz1oMSgpO2lmKCFrKXJldHVybjtpZihXLnRvdWNoZXMubGVuZ3RoPj0yKXt4MSgpO2xldCBIMT1XLnRvdWNoZXNbMF0sUDE9Vy50b3VjaGVzWzFdLE0wPXt4MTooSDEuY2xpZW50WC1rLmxlZnQpL2sud2lkdGgseTE6KEgxLmNsaWVudFktay50b3ApL2suaGVpZ2h0LHgyOihQMS5jbGllbnRYLWsubGVmdCkvay53aWR0aCx5MjooUDEuY2xpZW50WS1rLnRvcCkvay5oZWlnaHR9O2lmKCFOMC5jdXJyZW50JiYhRDEuY3VycmVudCltMSh7dHlwZToiZW5kIix4Ok0wLngxLHk6TTAueTF9KTtOMC5jdXJyZW50PSEwLHkxLmN1cnJlbnQ9ITAsRDEuY3VycmVudD0hMSxuKE0wKSxjMSh7dHlwZToiYmVnaW4iLC4uLk0wfSk7cmV0dXJufWxldCBJPVcudG91Y2hlc1swXTtpZighSSlyZXR1cm47bGV0IGg9KEkuY2xpZW50WC1rLmxlZnQpL2sud2lkdGgsZT0oSS5jbGllbnRZLWsudG9wKS9rLmhlaWdodDtmMShoLGUpO2xldCBxMT1PMyhlKTtpZihxMSE9PXZvaWQgMClEMS5jdXJyZW50PSEwLG0xKHt0eXBlOiJiZWdpbiIseDpoLHk6ZSxlZGdlOnExfSk7ZWxzZSBEMS5jdXJyZW50PSExLG0xKHt0eXBlOiJiZWdpbiIseDpoLHk6ZX0pfSxvblRvdWNoTW92ZTooVyk9PntXLnByZXZlbnREZWZhdWx0KCk7bGV0IGs9aDEoKTtpZighaylyZXR1cm47aWYoTjAuY3VycmVudCYmVy50b3VjaGVzLmxlbmd0aD49Mil7bGV0IHExPVcudG91Y2hlc1swXSxIMT1XLnRvdWNoZXNbMV0sUDE9e3gxOihxMS5jbGllbnRYLWsubGVmdCkvay53aWR0aCx5MToocTEuY2xpZW50WS1rLnRvcCkvay5oZWlnaHQseDI6KEgxLmNsaWVudFgtay5sZWZ0KS9rLndpZHRoLHkyOihIMS5jbGllbnRZLWsudG9wKS9rLmhlaWdodH07bihQMSksYzEoe3R5cGU6Im1vdmUiLC4uLlAxfSk7cmV0dXJufWxldCBJPVcudG91Y2hlc1swXTtpZighSSlyZXR1cm47bGV0IGg9KEkuY2xpZW50WC1rLmxlZnQpL2sud2lkdGgsZT0oSS5jbGllbnRZLWsudG9wKS9rLmhlaWdodDtpZihwMShoLGUpLEQxLmN1cnJlbnQpbTEoe3R5cGU6Im1vdmUiLHg6aCx5OmUsZWRnZTpYMn0pO2Vsc2UgbTEoe3R5cGU6Im1vdmUiLHg6aCx5OmV9KX0sb25Ub3VjaEVuZDooVyk9PntXLnByZXZlbnREZWZhdWx0KCk7bGV0IGs9aDEoKTtpZighaylyZXR1cm47aWYoTjAuY3VycmVudCl7aWYoVy50b3VjaGVzLmxlbmd0aDwyKXtsZXQgcTE9Vy5jaGFuZ2VkVG91Y2hlc1swXSxIMT1kO2lmKHExJiZIMSljMSh7dHlwZToiZW5kIix4MToocTEuY2xpZW50WC1rLmxlZnQpL2sud2lkdGgseTE6KHExLmNsaWVudFktay50b3ApL2suaGVpZ2h0LHgyOkgxLngyLHkyOkgxLnkyfSk7ZWxzZSBpZihIMSljMSh7dHlwZToiZW5kIiwuLi5IMX0pO04wLmN1cnJlbnQ9ITEseTEuY3VycmVudD0hMSxuKG51bGwpfXJldHVybn1sZXQgST1XLmNoYW5nZWRUb3VjaGVzWzBdO2lmKCFJKXJldHVybjtsZXQgaD0oSS5jbGllbnRYLWsubGVmdCkvay53aWR0aCxlPShJLmNsaWVudFktay50b3ApL2suaGVpZ2h0O2lmKHgxKCksRDEuY3VycmVudCltMSh7dHlwZToiZW5kIix4OmgseTplLGVkZ2U6WDJ9KSxEMS5jdXJyZW50PSExO2Vsc2UgbTEoe3R5cGU6ImVuZCIseDpoLHk6ZX0pfX0pLFooImRpdiIse3JlZjpPMSwiZGF0YS10ZXN0aWQiOiJ0b3VjaC1pbmRpY2F0b3IiLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGRpc3BsYXk6Im5vbmUiLHdpZHRoOjI0LGhlaWdodDoyNCxib3JkZXJSYWRpdXM6IjUwJSIsYmFja2dyb3VuZDoicmdiYSg1OSwxMzAsMjQ2LDAuNSkiLGJveFNoYWRvdzoiMCAwIDhweCByZ2JhKDU5LDEzMCwyNDYsMC4zKSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoLTUwJSwgLTUwJSkiLHBvaW50ZXJFdmVudHM6Im5vbmUifX0pLGQmJlooWjEse2NoaWxkcmVuOltaKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJmaW5nZXItZG90IixzdHlsZTp5OShkLngxLGQueTEpfSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6eTkoZC54MixkLnkyKX0pXX0pLCFDMSYmIWYmJlooImRpdiIse3N0eWxlOnsuLi5JOSwuLi5YfHx7fX0sY2hpbGRyZW46Wigic3BhbiIse3N0eWxlOntjb2xvcjoiIzg4OCIsZm9udFNpemU6MTR9LGNoaWxkcmVuOiJDb25uZWN0aW5nLi4uIn0pfSksZiYmWigiZGl2Iix7c3R5bGU6STksY2hpbGRyZW46Wigic3BhbiIse3N0eWxlOntjb2xvcjoiI2Y0NCIsZm9udFNpemU6MTQscGFkZGluZzoyMCx0ZXh0QWxpZ246ImNlbnRlciJ9LGNoaWxkcmVuOmZ9KX0pLGwxJiZaKCJkaXYiLHtzdHlsZTpYJCxjaGlsZHJlbjpaKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZmJiZjI0Iixmb250U2l6ZToxMyxmb250RmFtaWx5OiJtb25vc3BhY2UifSxjaGlsZHJlbjoiU2xvdyBjb25uZWN0aW9uIn0pfSldfSl9KSwhSCYmWigiZGl2Iix7c3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLHBhZGRpbmc6IjRweCA4cHgiLGJvcmRlclRvcDoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxjaGlsZHJlbjpbWigiYnV0dG9uIix7b25DbGljazpMMCxzdHlsZTp7YmFja2dyb3VuZDoibm9uZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjIpIixjb2xvcjoiI2FhYSIsZm9udFNpemU6MTEsZm9udEZhbWlseToibW9ub3NwYWNlIixwYWRkaW5nOiIycHggMTBweCIsY3Vyc29yOiJwb2ludGVyIixib3JkZXJSYWRpdXM6NH0sY2hpbGRyZW46IkhvbWUifSksWigic3BhbiIse3N0eWxlOntjb2xvcjpBMT4wPyIjNGY0IjoiIzg4OCIsZm9udFNpemU6MTIsZm9udEZhbWlseToibW9ub3NwYWNlIixkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo2fSxjaGlsZHJlbjpbQSYmWigic3BhbiIseyJkYXRhLXRlc3RpZCI6InF1YWxpdHktZG90IixzdHlsZTp7d2lkdGg6OCxoZWlnaHQ6OCxib3JkZXJSYWRpdXM6IjUwJSIsZGlzcGxheToiaW5saW5lLWJsb2NrIixiYWNrZ3JvdW5kOkE9PT0iZ29vZCI/IiM0YWRlODAiOkE9PT0iZGVncmFkZWQiPyIjZmFjYzE1IjoiI2VmNDQ0NCJ9fSksQTEsIiBmcHMiXX0pXX0pXX0pfXZhciBYJD17cG9zaXRpb246ImFic29sdXRlIix0b3A6OCxsZWZ0OiI1MCUiLHRyYW5zZm9ybToidHJhbnNsYXRlWCgtNTAlKSIsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwLjcpIixib3JkZXJSYWRpdXM6NixwYWRkaW5nOiI0cHggMTJweCIscG9pbnRlckV2ZW50czoibm9uZSJ9LEk5PXtwb3NpdGlvbjoiYWJzb2x1dGUiLGluc2V0OjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuOCkifSxFOT0yMDtmdW5jdGlvbiB5OSgkLEope3JldHVybntwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6YCR7JCoxMDB9JWAsdG9wOmAke0oqMTAwfSVgLHdpZHRoOkU5LGhlaWdodDpFOSxib3JkZXJSYWRpdXM6IjUwJSIsYmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjQ1KSIsYm9yZGVyOiIxLjI1cHggc29saWQgcmdiYSgwLDAsMCwwLjU1KSIsYm94U2hhZG93OiIwIDFweCAzcHggcmdiYSgwLDAsMCwwLjQ1KSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoLTUwJSwgLTUwJSkiLHBvaW50ZXJFdmVudHM6Im5vbmUifX1mdW5jdGlvbiBJMCgkKXtpZighJClyZXR1cm4iaXBob25lIjtsZXQgSj0kLnRvTG93ZXJDYXNlKCk7aWYoSi5pbmNsdWRlcygiaXBhZCIpKXJldHVybiJpcGFkIjtpZihKLmluY2x1ZGVzKCJ3YXRjaCIpKXJldHVybiJ3YXRjaCI7aWYoSi5pbmNsdWRlcygidmlzaW9uIikpcmV0dXJuInZpc2lvbiI7cmV0dXJuImlwaG9uZSJ9dmFyIFMxPXtpcGhvbmU6e3dpZHRoOjQyNyxoZWlnaHQ6ODgxLGJlemVsWDoxOCxiZXplbFk6MTgsaW5uZXJSYWRpdXM6NTV9LGlwYWQ6e3dpZHRoOjQzMCxoZWlnaHQ6NjA1LGJlemVsWDoxNixiZXplbFk6MTYsaW5uZXJSYWRpdXM6MTJ9LHdhdGNoOnt3aWR0aDoyNzQsaGVpZ2h0OjMyMixiZXplbFg6MTIsYmV6ZWxZOjEyLGlubmVyUmFkaXVzOjc5fSx2aXNpb246e3dpZHRoOjY0MCxoZWlnaHQ6NDAwLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6MzJ9fSxBWD1TMS5pcGhvbmUud2lkdGgsTVg9UzEuaXBob25lLmhlaWdodCxXWD1TMS5pcGhvbmUuYmV6ZWxYLF9YPVMxLmlwaG9uZS5iZXplbFksUFg9UzEuaXBob25lLmlubmVyUmFkaXVzLGI5PXsiaVBob25lIDE3IFBybyBNYXgiOnt3aWR0aDoxMzIwLGhlaWdodDoyODY4fSwiaVBob25lIDE3IFBybyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgMTciOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIEFpciI6e3dpZHRoOjEyNjAsaGVpZ2h0OjI3MzZ9LCJpUGhvbmUgMTYgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTYgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNiBQbHVzIjp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNiI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTZlIjp7d2lkdGg6MTE3MCxoZWlnaHQ6MjUzMn0sImlQaG9uZSAxNSBQcm8gTWF4Ijp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNSBQcm8iOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBob25lIDE1IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQYWQgUHJvIDEzLWluY2ggKE01KSI6e3dpZHRoOjIwNjQsaGVpZ2h0OjI3NTJ9LCJpUGFkIFBybyAxMS1pbmNoIChNNSkiOnt3aWR0aDoxNjY4LGhlaWdodDoyNDIwfSwiaVBhZCBQcm8gMTMtaW5jaCAoTTQpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE00KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIEFpciAxMy1pbmNoIChNMykiOnt3aWR0aDoyMDQ4LGhlaWdodDoyNzMyfSwiaVBhZCBBaXIgMTEtaW5jaCAoTTMpIjp7d2lkdGg6MTY0MCxoZWlnaHQ6MjM2MH0sImlQYWQgKEExNikiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCBtaW5pIChBMTcgUHJvKSI6e3dpZHRoOjE0ODgsaGVpZ2h0OjIyNjZ9LCJBcHBsZSBXYXRjaCBVbHRyYSAzICg0OW1tKSI6e3dpZHRoOjQyMixoZWlnaHQ6NTE0fSwiQXBwbGUgV2F0Y2ggVWx0cmEgMiAoNDltbSkiOnt3aWR0aDo0MTAsaGVpZ2h0OjUwMn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMSAoNDZtbSkiOnt3aWR0aDo0MTYsaGVpZ2h0OjQ5Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMSAoNDJtbSkiOnt3aWR0aDozNzQsaGVpZ2h0OjQ0Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMCAoNDZtbSkiOnt3aWR0aDo0MTYsaGVpZ2h0OjQ5Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMCAoNDJtbSkiOnt3aWR0aDozNzQsaGVpZ2h0OjQ0Nn0sIkFwcGxlIFdhdGNoIFNFIDMgKDQ0bW0pIjp7d2lkdGg6MzY4LGhlaWdodDo0NDh9LCJBcHBsZSBXYXRjaCBTRSAzICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgV2F0Y2ggU0UgKDQ0bW0pIjp7d2lkdGg6MzY4LGhlaWdodDo0NDh9LCJBcHBsZSBXYXRjaCBTRSAoNDBtbSkiOnt3aWR0aDozMjQsaGVpZ2h0OjM5NH0sIkFwcGxlIFZpc2lvbiBQcm8iOnt3aWR0aDoxOTIwLGhlaWdodDoxMDgwfX07ZnVuY3Rpb24gazUoJCxKKXtsZXQgUT0kJiYkLndpZHRoPjAmJiQuaGVpZ2h0PjA/JDpKLFg9SzIoUSk7aWYoWClyZXR1cm5gJHtYLndpZHRofSAvICR7WC5oZWlnaHR9YDtyZXR1cm5gJHtTMS5pcGhvbmUud2lkdGgtMipTMS5pcGhvbmUuYmV6ZWxYfSAvICR7UzEuaXBob25lLmhlaWdodC0yKlMxLmlwaG9uZS5iZXplbFl9YH1mdW5jdGlvbiBHMigkPSJpcGhvbmUiLEope2xldCBRPUo/YjlbSl06bnVsbDtpZihRKXJldHVybiBRO2xldCBYPVMxWyRdO3JldHVybnt3aWR0aDpYLndpZHRoLTIqWC5iZXplbFgsaGVpZ2h0OlguaGVpZ2h0LTIqWC5iZXplbFl9fWZ1bmN0aW9uIFYyKCQ9ImlwaG9uZSIsSil7aWYoZjAoSikpc3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIDcyMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtjYXNlIndhdGNoIjpyZXR1cm4gMjAwO2RlZmF1bHQ6cmV0dXJuIDYyMH1zd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gNDAwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7Y2FzZSJ2aXNpb24iOnJldHVybiA1ODA7ZGVmYXVsdDpyZXR1cm4gMzIwfX1mdW5jdGlvbiBBNSgkPSJpcGhvbmUiLEope2xldCBRPVMxWyRdLFg9US53aWR0aC0yKlEuYmV6ZWxYLEs9US5oZWlnaHQtMipRLmJlemVsWTtpZihYPEsmJmYwKEopKXJldHVybmAke1EuaW5uZXJSYWRpdXMvSyoxMDB9JSAvICR7US5pbm5lclJhZGl1cy9YKjEwMH0lYDtyZXR1cm5gJHtRLmlubmVyUmFkaXVzL1gqMTAwfSUgLyAke1EuaW5uZXJSYWRpdXMvSyoxMDB9JWB9ZnVuY3Rpb24gUzkoJCl7bGV0IEo9UzFbJC50eXBlXSxRPUoud2lkdGgtMipKLmJlemVsWCxYPUouaGVpZ2h0LTIqSi5iZXplbFksSyxZO2lmKFE8WCYmZjAoJC5jb25maWc/P251bGwpKUs9Si5pbm5lclJhZGl1cy9YLFk9Si5pbm5lclJhZGl1cy9RO2Vsc2UgSz1KLmlubmVyUmFkaXVzL1EsWT1KLmlubmVyUmFkaXVzL1g7bGV0IHE9SyokLmNvbnRhaW5lcldpZHRoLEc9WSokLmNvbnRhaW5lckhlaWdodCxCPU1hdGguc3FydChNYXRoLm1heChxKkcsMCkpO3JldHVybntyeDpxLHJ5Okcsckdlb206Qn19dmFyIFkkPTEzLHEkPTYyO2Z1bmN0aW9uIFAzKCQpe2xldHtjb250YWluZXJXaWR0aDpKLGNvbnRhaW5lckhlaWdodDpRfT0kLFg9KEgpPT5ILnRvRml4ZWQoMyksSz0oSCxGKT0+e2xldCBBPUYsYj1GLEQ9cSQvMiooTWF0aC5QSS8xODApLFM9MjI1Kk1hdGguUEkvMTgwLHg9UytELHM9Uy1ELGc9QStIKk1hdGguY29zKHgpLHU9YitIKk1hdGguc2luKHgpLGk9QStIKk1hdGguY29zKHMpLG89YitIKk1hdGguc2luKHMpLHI9YE0gJHtYKGcpfSAke1godSl9IEEgJHtYKEgpfSAke1goSCl9IDAgMCAxICR7WChpKX0gJHtYKG8pfWAsUTE9YE0gJHtYKGkpfSAke1gobyl9IEEgJHtYKEgpfSAke1goSCl9IDAgMCAwICR7WChnKX0gJHtYKHUpfWA7cmV0dXJue2Q6cixkRmlsbDpRMX19O2lmKCEoSj4wKXx8IShRPjApKXtsZXQgSD1ZJCxGPU1hdGguY2VpbChIKzE0KSx7ZDpBLGRGaWxsOmJ9PUsoSCxGKTtyZXR1cm57ZDpBLGRGaWxsOmIsdmlld0JveFNpemU6Rn19bGV0e3JHZW9tOll9PVM5KCQpLHE9TWF0aC5tYXgoMi4yLE1hdGgubWluKDUuMiwwLjAxMSpNYXRoLm1pbihKLFEpKSksRz1ZKjAuMzQrcSxCPU1hdGgubWluKEosUSksTj1NYXRoLm1pbigyMixNYXRoLm1heCgxMixCKjAuMDUyKSk7Rz1NYXRoLm1pbigyNCxNYXRoLm1heCgxMixHLE4pKTtsZXQgVT1NYXRoLm1heCgyNixNYXRoLmNlaWwoRysxMykpLHtkOk8sZEZpbGw6en09SyhHLFUpO3JldHVybntkOk8sZEZpbGw6eix2aWV3Qm94U2l6ZTpVfX1mdW5jdGlvbiBNNSh7dHlwZTokPSJpcGhvbmUiLHN0cmVhbWluZzpKPSExfSl7c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIFooViQse3N0cmVhbWluZzpKfSk7Y2FzZSJ3YXRjaCI6cmV0dXJuIFooQiQse3N0cmVhbWluZzpKfSk7Y2FzZSJ2aXNpb24iOnJldHVybiBaKE4kLHtzdHJlYW1pbmc6Sn0pO2RlZmF1bHQ6cmV0dXJuIFooRyQse3N0cmVhbWluZzpKfSl9fWZ1bmN0aW9uIEckKHtzdHJlYW1pbmc6JD0hMX0pe3JldHVybiBaKCJzdmciLHt2aWV3Qm94OiIwIDAgNDI3IDg4MSIsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltaKCJkZWZzIix7Y2hpbGRyZW46W1ooImZpbHRlciIse2lkOiJjaHJvbWUtZmlsdGVyMCIseDoiLTAuMTY2OTkyIix5OiIwLjE2NjUwNCIsd2lkdGg6IjQyNyIsaGVpZ2h0OiI4ODAuNjY3IixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltaKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxaKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJlZmZlY3QxX2ZvcmVncm91bmRCbHVyIn0pXX0pLFooImZpbHRlciIse2lkOiJjaHJvbWUtZmlsdGVyMSIseDoiNi4zMzIzNiIseToiNi4zMzM4MiIsd2lkdGg6IjQxNCIsaGVpZ2h0OiI4NjgiLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1ooImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFooImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxaKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMzMzMiLHJlc3VsdDoiZWZmZWN0MV9mb3JlZ3JvdW5kQmx1ciJ9KV19KV19KSxaKCJyZWN0Iix7eDoiMy44MzI2OCIseToiMy44MzM2NiIsd2lkdGg6IjQxOSIsaGVpZ2h0OiI4NzMiLHJ4OiI2Ni4xNjY3IixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiI0LjMzMzMzIn0pLFooInJlY3QiLHt4OiIwLjgzMzMzMyIseToiMC44MzMzMzMiLHdpZHRoOiI0MjUiLGhlaWdodDoiODc5IixyeDoiNjkuMTY2NyIsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjY2NyJ9KSxaKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjY2hyb21lLWZpbHRlcjApIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiMS42NjYwMiIseToiMiIsd2lkdGg6IjQyMy4zMzMiLGhlaWdodDoiODc3IixyeDoiNjguNjY2NyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjY2NyJ9KX0pLFooImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCNjaHJvbWUtZmlsdGVyMSkiLGNoaWxkcmVuOlooInJlY3QiLHt4OiI3LjMzMjY4Iix5OiI3LjMzMzY2Iix3aWR0aDoiNDEyIixoZWlnaHQ6Ijg2NiIscng6IjYyLjY2NjciLHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2NjY3In0pfSksWigicmVjdCIse3g6IjE1MS42NjYiLHk6IjMxLjY2NyIsd2lkdGg6IjEyMy4zMzMiLGhlaWdodDoiMzYiLHJ4OiIxOCIsZmlsbDoiYmxhY2siLHN0eWxlOntvcGFjaXR5OiQ/MDoxLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX1mdW5jdGlvbiBWJCh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgSj1TMS5pcGFkLndpZHRoLFE9UzEuaXBhZC5oZWlnaHQsWD0zMCxLPTI2O3JldHVybiBaKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtKfSAke1F9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W1ooImRlZnMiLHtjaGlsZHJlbjpbWigiZmlsdGVyIix7aWQ6ImlwYWQtZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOkosaGVpZ2h0OlEsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbWigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksWigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KSxaKCJmaWx0ZXIiLHtpZDoiaXBhZC1nbG93MSIseDoiNSIseToiNSIsd2lkdGg6Si0xMCxoZWlnaHQ6US0xMCxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltaKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxaKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzMzMzIixyZXN1bHQ6ImJsdXIifSldfSldfSksWigicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpKLTcsaGVpZ2h0OlEtNyxyeDoyNixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiI0In0pLFooInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOkotMS42NjYsaGVpZ2h0OlEtMS42NjYscng6MzAsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksWigiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI2lwYWQtZ2xvdzApIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOkotMyxoZWlnaHQ6US0zLHJ4OjI5LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSksWigiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI2lwYWQtZ2xvdzEpIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiNiIseToiNiIsd2lkdGg6Si0xMixoZWlnaHQ6US0xMixyeDoyNCxzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NiJ9KX0pLFooImNpcmNsZSIse2N4OkovMixjeTpTMS5pcGFkLmJlemVsWS8yKzEscjoiMyIsZmlsbDoiIzFhMWExYSIsc3R5bGU6e29wYWNpdHk6JD8wOjAuOCx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSksWigicmVjdCIse3g6KEotMTIwKS8yLHk6US1TMS5pcGFkLmJlemVsWS8yLTIuNSx3aWR0aDoiMTIwIixoZWlnaHQ6IjUiLHJ4OiIyLjUiLGZpbGw6IndoaXRlIixzdHlsZTp7b3BhY2l0eTokPzA6MC4zNSxtaXhCbGVuZE1vZGU6ImRpZmZlcmVuY2UiLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX1mdW5jdGlvbiBCJCh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgSj1TMS53YXRjaC53aWR0aCxRPVMxLndhdGNoLmhlaWdodCxYPTg4LEs9ODIsWT04LHE9MzYsRz1RLzItMTgtMTYsQj0yMixOPVEvMi0xMSsxNjtyZXR1cm4gWigic3ZnIix7dmlld0JveDpgMCAwICR7Sn0gJHtRfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG92ZXJmbG93OiJ2aXNpYmxlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbWigiZGVmcyIse2NoaWxkcmVuOlooImZpbHRlciIse2lkOiJ3YXRjaC1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6SisxMixoZWlnaHQ6USxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltaKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxaKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pfSksWigicmVjdCIse3g6Si0yLHk6Ryx3aWR0aDo4LGhlaWdodDozNixyeDoiMyIsZmlsbDoiIzJhMmEyYyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMSJ9KSxaKCJyZWN0Iix7eDpKLTEseTpOLHdpZHRoOjYsaGVpZ2h0OjIyLHJ4OiIyLjUiLGZpbGw6IiMyYTJhMmMiLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjAuOCJ9KSxaKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOkotNyxoZWlnaHQ6US03LHJ4OjgyLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjMuNSJ9KSxaKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpKLTEuNjY2LGhlaWdodDpRLTEuNjY2LHJ4Ojg4LHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLFooImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCN3YXRjaC1nbG93MCkiLGNoaWxkcmVuOlooInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6Si0zLGhlaWdodDpRLTMscng6ODcsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KV19KX1mdW5jdGlvbiBOJCh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgSj1TMS52aXNpb24ud2lkdGgsUT1TMS52aXNpb24uaGVpZ2h0LFg9NDAsSz0zNDtyZXR1cm4gWigic3ZnIix7dmlld0JveDpgMCAwICR7Sn0gJHtRfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltaKCJkZWZzIix7Y2hpbGRyZW46W1ooImZpbHRlciIse2lkOiJ2aXNpb24tZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOkosaGVpZ2h0OlEsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbWigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksWigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KSxaKCJmaWx0ZXIiLHtpZDoidmlzaW9uLWdsb3cxIix4OiI1Iix5OiI1Iix3aWR0aDpKLTEwLGhlaWdodDpRLTEwLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1ooImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFooImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxaKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMiLHJlc3VsdDoiYmx1ciJ9KV19KSxaKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tZ2xhc3MiLHgxOiIwIix5MToiMCIseDI6IjAiLHkyOiIxIixjaGlsZHJlbjpbWigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzU1NTU1OCIsc3RvcE9wYWNpdHk6IjAuMyJ9KSxaKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMzYTNhM2QiLHN0b3BPcGFjaXR5OiIwLjEifSldfSldfSksWigicmVjdCIse3g6IjAiLHk6IjAiLHdpZHRoOkosaGVpZ2h0OlEscng6NDAsZmlsbDoidXJsKCN2aXNpb24tZ2xhc3MpIn0pLFooInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6Si03LGhlaWdodDpRLTcscng6MzQsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMyJ9KSxaKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpKLTEuNjY2LGhlaWdodDpRLTEuNjY2LHJ4OjQwLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLFooImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCN2aXNpb24tZ2xvdzApIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOkotMyxoZWlnaHQ6US0zLHJ4OjM5LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSksWigiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI3Zpc2lvbi1nbG93MSkiLGNoaWxkcmVuOlooInJlY3QiLHt4OiI2Iix5OiI2Iix3aWR0aDpKLTEyLGhlaWdodDpRLTEyLHJ4OjMyLHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2In0pfSksWigiZWxsaXBzZSIse2N4OkovMixjeTpRLzIscng6Si8yLTMwLHJ5OlEvMi0yNCxzdHJva2U6IiM0YTRhNGQiLHN0cm9rZVdpZHRoOiIwLjUiLG9wYWNpdHk6IjAuMyIsc3R5bGU6e29wYWNpdHk6JD8wOjAuMyx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9dmFyIEQzPXowKG51bGwpO2Z1bmN0aW9uIFc1KCQpe2xldCBKPVUwKEQzKTtpZighSil0aHJvdyBFcnJvcihgPFNpbXVsYXRvclRvb2xiYXIuJHskfT4gbXVzdCBiZSByZW5kZXJlZCBpbnNpZGUgPFNpbXVsYXRvclRvb2xiYXI+YCk7cmV0dXJuIEp9dmFyIHokPXtkaXNwbGF5OiJmbGV4IixmbGV4V3JhcDoid3JhcCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIsZ2FwOiI0cHggMTJweCIscGFkZGluZzoiOHB4IDEycHgiLGJvcmRlclJhZGl1czoyNCxiYWNrZ3JvdW5kOiJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcsICMxODE4MTgpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSkiLGJveFNoYWRvdzoiMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4yKSIsbWluV2lkdGg6MjQwLHdpZHRoOiIxMDAlIn07ZnVuY3Rpb24gVSQoe2V4ZWM6JCxvblJvdGF0ZTpKLG9yaWVudGF0aW9uOlEsZGV2aWNlVWRpZDpYLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlksc3RyZWFtaW5nOnE9ITEsZGlzYWJsZWQ6Rz0hMSxjaGlsZHJlbjpCLHN0eWxlOk4sLi4uTH0pe2xldCBWPUkwKEspLFU9e2V4ZWM6JCxvblJvdGF0ZTpKLG9yaWVudGF0aW9uOlEsZGV2aWNlVWRpZDpYLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlksZGV2aWNlVHlwZTpWLHN0cmVhbWluZzpxLGRpc2FibGVkOkd8fCFYfHwhcX07cmV0dXJuIFooRDMuUHJvdmlkZXIse3ZhbHVlOlUsY2hpbGRyZW46WigiZGl2Iix7ImRhdGEtc2ltdWxhdG9yLXRvb2xiYXIiOiEwLHN0eWxlOnsuLi56JCwuLi5OfSwuLi5MLGNoaWxkcmVuOkJ9KX0pfXZhciBIJD17ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixhbGlnbkl0ZW1zOiJmbGV4LXN0YXJ0Iix0ZXh0QWxpZ246ImxlZnQiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLGNvbG9yOiIjZmZmIixwYWRkaW5nOiIycHggNHB4IixtYXJnaW46Ii0ycHggLTRweCIsYm9yZGVyUmFkaXVzOjYsY3Vyc29yOiJwb2ludGVyIixtaW5XaWR0aDowLG1heFdpZHRoOiIxMDAlIixsaW5lSGVpZ2h0OjEuMixmb250RmFtaWx5OiJpbmhlcml0In0sQyQ9VzAoZnVuY3Rpb24oe25hbWU6SixzdWJ0aXRsZTpRLGhpZGVDaGV2cm9uOlgsaGlkZVN1YnRpdGxlOkssc3R5bGU6WSxvbk1vdXNlRW50ZXI6cSxvbk1vdXNlTGVhdmU6RywuLi5CfSxOKXtsZXQgTD1XNSgiVGl0bGUiKSxbVixDXT1NKCExKSxVPUo/P0wuZGV2aWNlTmFtZT8/Ik5vIHNpbXVsYXRvciIsTz1RPz8oTC5kZXZpY2VSdW50aW1lP0wuZGV2aWNlUnVudGltZS5yZXBsYWNlKC9cLi8sIiAiKToi4oCUIik7cmV0dXJuIFooImJ1dHRvbiIse3JlZjpOLHR5cGU6ImJ1dHRvbiIsImRhdGEtc2ltdWxhdG9yLXRvb2xiYXItdGl0bGUiOiEwLG9uTW91c2VFbnRlcjooeik9PntDKCEwKSxxPy4oeil9LG9uTW91c2VMZWF2ZTooeik9PntDKCExKSxHPy4oeil9LHN0eWxlOnsuLi5IJCxiYWNrZ3JvdW5kOlY/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IiwuLi5ZfSwuLi5CLGNoaWxkcmVuOltaKCJzcGFuIix7c3R5bGU6e2Rpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOiIjZmZmIixtYXhXaWR0aDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sY2hpbGRyZW46W1UsIVgmJlooInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsc3R5bGU6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGZsZXhTaHJpbms6MH0sY2hpbGRyZW46WigicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSldfSksIUsmJlooInNwYW4iLHtzdHlsZTp7Zm9udFNpemU6MTAsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOk99KV19KX0pLEYkPXtkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZsZXhTaHJpbms6MH07ZnVuY3Rpb24gTyQoe3N0eWxlOiQsLi4uSn0pe3JldHVybiBaKCJkaXYiLHtzdHlsZTp7Li4uRiQsLi4uJH0sLi4uSn0pfXZhciBrJD17YmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIscGFkZGluZzo2LGJvcmRlclJhZGl1czoxMixjdXJzb3I6InBvaW50ZXIiLGRpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLHRyYW5zaXRpb246ImJhY2tncm91bmQtY29sb3IgMC4xNXMsIGNvbG9yIDAuMTVzIixwb3NpdGlvbjoicmVsYXRpdmUiLG92ZXJmbG93OiJ2aXNpYmxlIn0sXzU9VzAoZnVuY3Rpb24oe2ZvcmNlRGlzYWJsZWQ6Six0b29sdGlwOlEsc3R5bGU6WCxkaXNhYmxlZDpLLHRpdGxlOlksb25Nb3VzZUVudGVyOnEsb25Nb3VzZUxlYXZlOkcsb25Qb2ludGVyRG93bjpCLG9uRm9jdXM6TixvbkJsdXI6TCxvbkNsaWNrOlYsY2hpbGRyZW46QywiYXJpYS1sYWJlbCI6VSwuLi5PfSx6KXtsZXQgSD1VMChEMyksRj1LfHxKfHxIPy5kaXNhYmxlZCxbQSxiXT1NKCExKSxbRCxTXT1NKCExKSx4PVQoITEpLHM9WjIoKSxnPVE/P1k/Pyh0eXBlb2YgVT09PSJzdHJpbmciP1U6bnVsbCksdT0hIWcmJiFGJiYoQXx8RCk7cmV0dXJuIFooImJ1dHRvbiIse3JlZjp6LHR5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6RiwiYXJpYS1sYWJlbCI6VSwiYXJpYS1kZXNjcmliZWRieSI6Zz9zOnZvaWQgMCxvblBvaW50ZXJEb3duOihpKT0+e3guY3VycmVudD0hMCxCPy4oaSl9LG9uTW91c2VFbnRlcjooaSk9PntiKCEwKSxxPy4oaSl9LG9uTW91c2VMZWF2ZTooaSk9PntiKCExKSxHPy4oaSl9LG9uRm9jdXM6KGkpPT57UygheC5jdXJyZW50KSxOPy4oaSl9LG9uQmx1cjooaSk9Pnt4LmN1cnJlbnQ9ITEsUyghMSksTD8uKGkpfSxvbkNsaWNrOihpKT0+e2IoITEpLFMoITEpLGkuY3VycmVudFRhcmdldC5ibHVyKCksVj8uKGkpfSxzdHlsZTp7Li4uayQsY29sb3I6Rj8icmdiYSgyNTUsMjU1LDI1NSwwLjI1KSI6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsYmFja2dyb3VuZDpBJiYhRj8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLGN1cnNvcjpGPyJub3QtYWxsb3dlZCI6InBvaW50ZXIiLC4uLlh9LC4uLk8sY2hpbGRyZW46W0MsZyYmWigic3BhbiIse2lkOnMscm9sZToidG9vbHRpcCIsImFyaWEtaGlkZGVuIjohdSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiI1MCUiLGJvdHRvbToiY2FsYygxMDAlICsgOHB4KSIsdHJhbnNmb3JtOmB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoJHt1PzA6Mn1weClgLG9wYWNpdHk6dT8xOjAscG9pbnRlckV2ZW50czoibm9uZSIsd2hpdGVTcGFjZToibm93cmFwIixwYWRkaW5nOiI0cHggN3B4Iixib3JkZXJSYWRpdXM6NixiYWNrZ3JvdW5kOiJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcsICMxODE4MTgpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjkyKSIsZm9udFNpemU6MTEsZm9udFdlaWdodDo1MDAsbGluZUhlaWdodDoxLGJveFNoYWRvdzoiMCA0cHggMTRweCByZ2JhKDAsMCwwLDAuMzIpIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuMTJzIGVhc2UsIHRyYW5zZm9ybSAwLjEycyBlYXNlIix6SW5kZXg6MTAwfSxjaGlsZHJlbjpnfSldfSl9KTtmdW5jdGlvbiBBJCgkLEope2lmKCQ9PT0id2F0Y2giKXJldHVybiBNJCgpO2lmKEopcmV0dXJuYHhjcnVuIHNpbWN0bCBsYXVuY2ggJHtKfSBjb20uYXBwbGUuc3ByaW5nYm9hcmRgO3JldHVybiJzZXJ2ZS1zaW0gYnV0dG9uIGhvbWUifWZ1bmN0aW9uIE0kKCl7cmV0dXJuWyd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gc2V0IGZyb250bW9zdCB0byB0cnVlJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHBlcmZvcm0gYWN0aW9uICJBWFJhaXNlIiBvZiAoZmlyc3Qgd2luZG93IHdob3NlIG5hbWUgY29udGFpbnMgIndhdGNoT1MiKScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBjbGljayBtZW51IGl0ZW0gIkhvbWUiIG9mIG1lbnUgIkRldmljZSIgb2YgbWVudSBiYXIgaXRlbSAiRGV2aWNlIiBvZiBtZW51IGJhciAxJ10ubWFwKChKKT0+YC1lICcke0p9J2ApLnJlZHVjZSgoSixRKT0+YCR7Sn0gJHtRfWAsIm9zYXNjcmlwdCIpfXZhciBXJD1aKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpaKCJwYXRoIix7ZDoiTTMgMTAuNSAxMiAzbDkgNy41VjIwYTEgMSAwIDAgMS0xIDFoLTV2LTdoLTZ2N0g0YTEgMSAwIDAgMS0xLTF6In0pfSksXyQ9Wigic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgNDQgNDQiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46WigicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixjbGlwUnVsZToiZXZlbm9kZCIsZmlsbDoiY3VycmVudENvbG9yIixkOiJNNDMuNjg3NSAxMi40Njg4VjguMjczNDRDNDMuNjg3NSA1LjcyNjU2IDQyLjk1MzEgMy43MTA5NCA0MS40ODQ0IDIuMjI2NTZDNDAuMDE1NiAwLjc0MjE4OCAzOCAwIDM1LjQzNzUgMEgzMS4xNDg0QzMwLjYwMTYgMCAzMC4xMzI4IDAuMTk1MzEyIDI5Ljc0MjIgMC41ODU5MzhDMjkuMzUxNiAwLjk3NjU2MiAyOS4xNTYyIDEuNDQ1MzEgMjkuMTU2MiAxLjk5MjE5QzI5LjE1NjIgMi41MjM0NCAyOS4zNTE2IDIuOTg0MzggMjkuNzQyMiAzLjM3NUMzMC4xMzI4IDMuNzY1NjIgMzAuNjAxNiAzLjk2MDk0IDMxLjE0ODQgMy45NjA5NEgzNS40Mzc1QzM2Ljc4MTIgMy45NjA5NCAzNy44MzU5IDQuMzQzNzUgMzguNjAxNiA1LjEwOTM4QzM5LjM1MTYgNS44NzUgMzkuNzI2NiA2LjkyOTY5IDM5LjcyNjYgOC4yNzM0NFYxMi40Njg4QzM5LjcyNjYgMTMgMzkuOTIxOSAxMy40NjA5IDQwLjMxMjUgMTMuODUxNkM0MC43MDMxIDE0LjI0MjIgNDEuMTcxOSAxNC40Mzc1IDQxLjcxODggMTQuNDM3NUM0Mi4yNSAxNC40Mzc1IDQyLjcxMDkgMTQuMjQyMiA0My4xMDE2IDEzLjg1MTZDNDMuNDkyMiAxMy40NjA5IDQzLjY4NzUgMTMgNDMuNjg3NSAxMi40Njg4Wk0wIDEyLjQ2ODhDMCAxMyAwLjE5NTMxMiAxMy40NjA5IDAuNTg1OTM4IDEzLjg1MTZDMC45NzY1NjIgMTQuMjQyMiAxLjQzNzUgMTQuNDM3NSAxLjk2ODc1IDE0LjQzNzVDMi41IDE0LjQzNzUgMi45NjA5NCAxNC4yNDIyIDMuMzUxNTYgMTMuODUxNkMzLjc0MjE5IDEzLjQ2MDkgMy45Mzc1IDEzIDMuOTM3NSAxMi40Njg4VjguMjczNDRDMy45Mzc1IDYuOTI5NjkgNC4zMjAzMSA1Ljg3NSA1LjA4NTk0IDUuMTA5MzhDNS44MzU5NCA0LjM0Mzc1IDYuODkwNjIgMy45NjA5NCA4LjI1IDMuOTYwOTRIMTIuNTM5MUMxMy4wODU5IDMuOTYwOTQgMTMuNTU0NyAzLjc2NTYyIDEzLjk0NTMgMy4zNzVDMTQuMzIwMyAyLjk4NDM4IDE0LjUwNzggMi41MjM0NCAxNC41MDc4IDEuOTkyMTlDMTQuNTA3OCAxLjQ0NTMxIDE0LjMyMDMgMC45NzY1NjIgMTMuOTQ1MyAwLjU4NTkzOEMxMy41NTQ3IDAuMTk1MzEyIDEzLjA4NTkgMCAxMi41MzkxIDBIOC4yNUM1LjY4NzUgMCAzLjY3MTg4IDAuNzQyMTg4IDIuMjAzMTIgMi4yMjY1NkMwLjczNDM3NSAzLjcxMDk0IDAgNS43MjY1NiAwIDguMjczNDRWMTIuNDY4OFpNNDMuNjg3NSAzMS4yNDIyQzQzLjY4NzUgMzAuNzEwOSA0My40OTIyIDMwLjI1IDQzLjEwMTYgMjkuODU5NEM0Mi43MTA5IDI5LjQ2ODggNDIuMjUgMjkuMjczNCA0MS43MTg4IDI5LjI3MzRDNDEuMTcxOSAyOS4yNzM0IDQwLjcwMzEgMjkuNDY4OCA0MC4zMTI1IDI5Ljg1OTRDMzkuOTIxOSAzMC4yNSAzOS43MjY2IDMwLjcxMDkgMzkuNzI2NiAzMS4yNDIyVjM1LjQzNzVDMzkuNzI2NiAzNi43ODEyIDM5LjM1MTYgMzcuODM1OSAzOC42MDE2IDM4LjYwMTZDMzcuODM1OSAzOS4zNjcyIDM2Ljc4MTIgMzkuNzUgMzUuNDM3NSAzOS43NUgzMS4xNDg0QzMwLjYwMTYgMzkuNzUgMzAuMTMyOCAzOS45NDUzIDI5Ljc0MjIgNDAuMzM1OUMyOS4zNTE2IDQwLjcyNjYgMjkuMTU2MiA0MS4xODc1IDI5LjE1NjIgNDEuNzE4OEMyOS4xNTYyIDQyLjI2NTYgMjkuMzUxNiA0Mi43MjY2IDI5Ljc0MjIgNDMuMTAxNkMzMC4xMzI4IDQzLjQ5MjIgMzAuNjAxNiA0My42ODc1IDMxLjE0ODQgNDMuNjg3NUgzNS40Mzc1QzM4IDQzLjY4NzUgNDAuMDE1NiA0Mi45NDUzIDQxLjQ4NDQgNDEuNDYwOUM0Mi45NTMxIDM5Ljk5MjIgNDMuNjg3NSAzNy45ODQ0IDQzLjY4NzUgMzUuNDM3NVYzMS4yNDIyWk0wIDMxLjI0MjJWMzUuNDM3NUMwIDM3Ljk4NDQgMC43MzQzNzUgMzkuOTkyMiAyLjIwMzEyIDQxLjQ2MDlDMy42NzE4OCA0Mi45NDUzIDUuNjg3NSA0My42ODc1IDguMjUgNDMuNjg3NUgxMi41MzkxQzEzLjA4NTkgNDMuNjg3NSAxMy41NTQ3IDQzLjQ5MjIgMTMuOTQ1MyA0My4xMDE2QzE0LjMyMDMgNDIuNzI2NiAxNC41MDc4IDQyLjI2NTYgMTQuNTA3OCA0MS43MTg4QzE0LjUwNzggNDEuMTg3NSAxNC4zMjAzIDQwLjcyNjYgMTMuOTQ1MyA0MC4zMzU5QzEzLjU1NDcgMzkuOTQ1MyAxMy4wODU5IDM5Ljc1IDEyLjUzOTEgMzkuNzVIOC4yNUM2Ljg5MDYyIDM5Ljc1IDUuODM1OTQgMzkuMzY3MiA1LjA4NTk0IDM4LjYwMTZDNC4zMjAzMSAzNy44MzU5IDMuOTM3NSAzNi43ODEyIDMuOTM3NSAzNS40Mzc1VjMxLjI0MjJDMy45Mzc1IDMwLjcxMDkgMy43NDIxOSAzMC4yNSAzLjM1MTU2IDI5Ljg1OTRDMi45NjA5NCAyOS40Njg4IDIuNSAyOS4yNzM0IDEuOTY4NzUgMjkuMjczNEMxLjQzNzUgMjkuMjczNCAwLjk3NjU2MiAyOS40Njg4IDAuNTg1OTM4IDI5Ljg1OTRDMC4xOTUzMTIgMzAuMjUgMCAzMC43MTA5IDAgMzEuMjQyMlpNMzEuNTkzOCAzMS44MDQ3QzMyLjc4MTIgMzEuODA0NyAzMy42NzE5IDMxLjUxNTYgMzQuMjY1NiAzMC45Mzc1QzM0Ljg1OTQgMzAuMzQzOCAzNS4xNTYyIDI5LjQ2ODggMzUuMTU2MiAyOC4zMTI1VjE2LjcxMDlDMzUuMTU2MiAxNS41MzkxIDM0Ljg1OTQgMTQuNjY0MSAzNC4yNjU2IDE0LjA4NTlDMzMuNjcxOSAxMy40OTIyIDMyLjc4MTIgMTMuMTk1MyAzMS41OTM4IDEzLjE5NTNIMjguODk4NEMyOC40NjA5IDEzLjE5NTMgMjguMTQ4NCAxMy4xNDA2IDI3Ljk2MDkgMTMuMDMxMkMyNy43NTc4IDEyLjkyMTkgMjcuNTIzNCAxMi43MjY2IDI3LjI1NzggMTIuNDQ1M0wyNi4zNjcyIDExLjUwNzhDMjYuMDg1OSAxMS4xOTUzIDI1Ljc4MTIgMTAuOTY4OCAyNS40NTMxIDEwLjgyODFDMjUuMTA5NCAxMC42NzE5IDI0LjY1NjIgMTAuNTkzOCAyNC4wOTM4IDEwLjU5MzhIMTkuNjE3MkMxOS4wNTQ3IDEwLjU5MzggMTguNjA5NCAxMC42NzE5IDE4LjI4MTIgMTAuODI4MUMxNy45Mzc1IDEwLjk2ODggMTcuNjI1IDExLjE5NTMgMTcuMzQzOCAxMS41MDc4TDE2LjQ3NjYgMTIuNDQ1M0MxNi4yMTA5IDEyLjc0MjIgMTUuOTc2NiAxMi45NDUzIDE1Ljc3MzQgMTMuMDU0N0MxNS41NTQ3IDEzLjE0ODQgMTUuMjM0NCAxMy4xOTUzIDE0LjgxMjUgMTMuMTk1M0gxMi4wNDY5QzEwLjg5MDYgMTMuMTk1MyAxMC4wMTU2IDEzLjQ5MjIgOS40MjE4OCAxNC4wODU5QzguODEyNSAxNC42NjQxIDguNTA3ODEgMTUuNTM5MSA4LjUwNzgxIDE2LjcxMDlWMjguMzEyNUM4LjUwNzgxIDI5LjQ2ODggOC44MTI1IDMwLjM0MzggOS40MjE4OCAzMC45Mzc1QzEwLjAxNTYgMzEuNTE1NiAxMC44OTA2IDMxLjgwNDcgMTIuMDQ2OSAzMS44MDQ3SDMxLjU5MzhaTTIxLjc5NjkgMjguOTQ1M0MyMC41OTM4IDI4Ljk0NTMgMTkuNSAyOC42NjQxIDE4LjUxNTYgMjguMTAxNkMxNy41MTU2IDI3LjUyMzQgMTYuNzI2NiAyNi43NDIyIDE2LjE0ODQgMjUuNzU3OEMxNS41NTQ3IDI0Ljc1NzggMTUuMjU3OCAyMy42MzI4IDE1LjI1NzggMjIuMzgyOEMxNS4yNTc4IDIxLjE3OTcgMTUuNTU0NyAyMC4wODU5IDE2LjE0ODQgMTkuMTAxNkMxNi43MjY2IDE4LjEwMTYgMTcuNTE1NiAxNy4zMTI1IDE4LjUxNTYgMTYuNzM0NEMxOS41IDE2LjE0MDYgMjAuNTkzOCAxNS44NDM4IDIxLjc5NjkgMTUuODQzOEMyMy4wMTU2IDE1Ljg0MzggMjQuMTI1IDE2LjE0MDYgMjUuMTI1IDE2LjczNDRDMjYuMTA5NCAxNy4zMTI1IDI2Ljg5ODQgMTguMTAxNiAyNy40OTIyIDE5LjEwMTZDMjguMDcwMyAyMC4wODU5IDI4LjM1OTQgMjEuMTc5NyAyOC4zNTk0IDIyLjM4MjhDMjguMzU5NCAyMy42MTcyIDI4LjA3MDMgMjQuNzI2NiAyNy40OTIyIDI1LjcxMDlDMjYuODk4NCAyNi42OTUzIDI2LjEwOTQgMjcuNDg0NCAyNS4xMjUgMjguMDc4MUMyNC4xMjUgMjguNjU2MiAyMy4wMTU2IDI4Ljk0NTMgMjEuNzk2OSAyOC45NDUzWk0yMS44MjAzIDI2LjkwNjJDMjIuNjQ4NCAyNi45MDYyIDIzLjQwNjIgMjYuNzEwOSAyNC4wOTM4IDI2LjMyMDNDMjQuNzgxMiAyNS45MTQxIDI1LjMyODEgMjUuMzY3MiAyNS43MzQ0IDI0LjY3OTdDMjYuMTI1IDIzLjk5MjIgMjYuMzIwMyAyMy4yMjY2IDI2LjMyMDMgMjIuMzgyOEMyNi4zMjAzIDIxLjU3MDMgMjYuMTI1IDIwLjgyMDMgMjUuNzM0NCAyMC4xMzI4QzI1LjMyODEgMTkuNDQ1MyAyNC43ODEyIDE4LjkwNjIgMjQuMDkzOCAxOC41MTU2QzIzLjQwNjIgMTguMTA5NCAyMi42NDg0IDE3LjkwNjIgMjEuODIwMyAxNy45MDYyQzIwLjk5MjIgMTcuOTA2MiAyMC4yNDIyIDE4LjEwOTQgMTkuNTcwMyAxOC41MTU2QzE4Ljg4MjggMTguOTA2MiAxOC4zMzU5IDE5LjQ0NTMgMTcuOTI5NyAyMC4xMzI4QzE3LjUyMzQgMjAuODIwMyAxNy4zMjAzIDIxLjU3MDMgMTcuMzIwMyAyMi4zODI4QzE3LjMyMDMgMjMuMjI2NiAxNy41MjM0IDIzLjk5MjIgMTcuOTI5NyAyNC42Nzk3QzE4LjMzNTkgMjUuMzY3MiAxOC44ODI4IDI1LjkxNDEgMTkuNTcwMyAyNi4zMjAzQzIwLjI0MjIgMjYuNzEwOSAyMC45OTIyIDI2LjkwNjIgMjEuODIwMyAyNi45MDYyWk0xMi42MzI4IDE4Ljk4NDRDMTIuMjEwOSAxOC45ODQ0IDExLjg1OTQgMTguODM1OSAxMS41NzgxIDE4LjUzOTFDMTEuMjgxMiAxOC4yNDIyIDExLjEzMjggMTcuODkwNiAxMS4xMzI4IDE3LjQ4NDRDMTEuMTMyOCAxNy4wNjI1IDExLjI4MTIgMTYuNzEwOSAxMS41NzgxIDE2LjQyOTdDMTEuODU5NCAxNi4xMzI4IDEyLjIxMDkgMTUuOTg0NCAxMi42MzI4IDE1Ljk4NDRDMTMuMDM5MSAxNS45ODQ0IDEzLjM5MDYgMTYuMTMyOCAxMy42ODc1IDE2LjQyOTdDMTMuOTg0NCAxNi43MTA5IDE0LjEzMjggMTcuMDYyNSAxNC4xMzI4IDE3LjQ4NDRDMTQuMTMyOCAxNy44OTA2IDEzLjk4NDQgMTguMjQyMiAxMy42ODc1IDE4LjUzOTFDMTMuMzkwNiAxOC44MzU5IDEzLjAzOTEgMTguOTg0NCAxMi42MzI4IDE4Ljk4NDRaIn0pfSksUCQ9Wigic3ZnIix7d2lkdGg6IjIxIixoZWlnaHQ6IjIxIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbWigicGF0aCIse2Q6Ik0xMiA1SDZhMiAyIDAgMCAwLTIgMnYzIn0pLFooInBhdGgiLHtkOiJtOSA4IDMtMy0zLTMifSksWigicGF0aCIse2Q6Ik00IDE0djRhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMmgtMiJ9KV19KSxEJD1XMChmdW5jdGlvbih7b25DbGljazpKLC4uLlF9LFgpe2xldCBLPVc1KCJIb21lQnV0dG9uIik7cmV0dXJuIFooXzUse3JlZjpYLCJhcmlhLWxhYmVsIjoiSG9tZSIsb25DbGljazooWSk9PntpZihKPy4oWSksWS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtLLmV4ZWMoQSQoSy5kZXZpY2VUeXBlLEsuZGV2aWNlVWRpZCkpfSwuLi5RLGNoaWxkcmVuOlckfSl9KSx3JD1XMChmdW5jdGlvbih7b25DbGljazpKLC4uLlF9LFgpe2xldCBLPVc1KCJTY3JlZW5zaG90QnV0dG9uIik7cmV0dXJuIFooXzUse3JlZjpYLCJhcmlhLWxhYmVsIjoiU2NyZWVuc2hvdCIsb25DbGljazooWSk9PntpZihKPy4oWSksWS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZihLLmRldmljZVVkaWQpSy5leGVjKGB4Y3J1biBzaW1jdGwgaW8gJHtLLmRldmljZVVkaWR9IHNjcmVlbnNob3Qgfi9EZXNrdG9wL3NlcnZlLXNpbS1zY3JlZW5zaG90LSQoZGF0ZSArJXMpLnBuZ2ApfSwuLi5RLGNoaWxkcmVuOl8kfSl9KSxUJD1XMChmdW5jdGlvbih7b25DbGljazpKLGZvcmNlRGlzYWJsZWQ6USwuLi5YfSxLKXtsZXQgWT1XNSgiUm90YXRlQnV0dG9uIikscT1ZLmRldmljZVR5cGU9PT0id2F0Y2gifHxZLmRldmljZVR5cGU9PT0idmlzaW9uIixbRyxCXT1NKCJwb3J0cmFpdCIpO3JldHVybiB5KCgpPT57QihZLm9yaWVudGF0aW9uPz8icG9ydHJhaXQiKX0sW1kuZGV2aWNlVWRpZCxZLm9yaWVudGF0aW9uXSksWihfNSx7cmVmOkssImFyaWEtbGFiZWwiOiJSb3RhdGUgZGV2aWNlIixmb3JjZURpc2FibGVkOlF8fHEsb25DbGljazooTik9PntpZihKPy4oTiksTi5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZighWS5kZXZpY2VVZGlkfHxxKXJldHVybjtsZXQgTD1UMltZLm9yaWVudGF0aW9uPz9HXTtpZihCKEwpLFkub25Sb3RhdGUpWS5vblJvdGF0ZShMKTtlbHNlIFkuZXhlYyhgc2VydmUtc2ltIHJvdGF0ZSAke0x9IC1kICR7WS5kZXZpY2VVZGlkfWApfSwuLi5YLGNoaWxkcmVuOlAkfSl9KSxyMT1VJDtyMS5UaXRsZT1DJDtyMS5BY3Rpb25zPU8kO3IxLkJ1dHRvbj1fNTtyMS5Ib21lQnV0dG9uPUQkO3IxLlNjcmVlbnNob3RCdXR0b249dyQ7cjEuUm90YXRlQnV0dG9uPVQkO3ZhciBQNT0oLi4uJCk9PiQuZmlsdGVyKChKLFEsWCk9PntyZXR1cm4gQm9vbGVhbihKKSYmSi50cmltKCkhPT0iIiYmWC5pbmRleE9mKEopPT09UX0pLmpvaW4oIiAiKS50cmltKCk7dmFyIHg5PSgkKT0+JC5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7dmFyIGo5PSgkKT0+JC5yZXBsYWNlKC9eKFtBLVpdKXxbXHMtX10rKFx3KS9nLChKLFEsWCk9Plg/WC50b1VwcGVyQ2FzZSgpOlEudG9Mb3dlckNhc2UoKSk7dmFyIHczPSgkKT0+e2xldCBKPWo5KCQpO3JldHVybiBKLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK0ouc2xpY2UoMSl9O3ZhciBENT17eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn07dmFyIHY5PSgkKT0+e2ZvcihsZXQgSiBpbiAkKWlmKEouc3RhcnRzV2l0aCgiYXJpYS0iKXx8Sj09PSJyb2xlInx8Sj09PSJ0aXRsZSIpcmV0dXJuITA7cmV0dXJuITF9O3ZhciBJJD16MCh7fSk7dmFyIGg5PSgpPT5VMChJJCk7dmFyIFI5PVcwKCh7Y29sb3I6JCxzaXplOkosc3Ryb2tlV2lkdGg6USxhYnNvbHV0ZVN0cm9rZVdpZHRoOlgsY2xhc3NOYW1lOks9IiIsY2hpbGRyZW46WSxpY29uTm9kZTpxLC4uLkd9LEIpPT57bGV0e3NpemU6Tj0yNCxzdHJva2VXaWR0aDpMPTIsYWJzb2x1dGVTdHJva2VXaWR0aDpWPSExLGNvbG9yOkM9ImN1cnJlbnRDb2xvciIsY2xhc3NOYW1lOlU9IiJ9PWg5KCk/P3t9LE89WD8/Vj9OdW1iZXIoUT8/TCkqMjQvTnVtYmVyKEo/P04pOlE/P0w7cmV0dXJuIHUxKCJzdmciLHtyZWY6QiwuLi5ENSx3aWR0aDpKPz9OPz9ENS53aWR0aCxoZWlnaHQ6Sj8/Tj8/RDUuaGVpZ2h0LHN0cm9rZTokPz9DLHN0cm9rZVdpZHRoOk8sY2xhc3NOYW1lOlA1KCJsdWNpZGUiLFUsSyksLi4uIVkmJiF2OShHKSYmeyJhcmlhLWhpZGRlbiI6InRydWUifSwuLi5HfSxbLi4ucS5tYXAoKFt6LEhdKT0+dTEoeixIKSksLi4uQXJyYXkuaXNBcnJheShZKT9ZOltZXV0pfSk7dmFyIEYxPSgkLEopPT57bGV0IFE9VzAoKHtjbGFzc05hbWU6WCwuLi5LfSxZKT0+dTEoUjkse3JlZjpZLGljb25Ob2RlOkosY2xhc3NOYW1lOlA1KGBsdWNpZGUtJHt4OSh3MygkKSl9YCxgbHVjaWRlLSR7JH1gLFgpLC4uLkt9KSk7cmV0dXJuIFEuZGlzcGxheU5hbWU9dzMoJCksUX07dmFyIEUkPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixrZXk6ImFmaXR2NyJ9XSxbInBhdGgiLHtkOiJNOSAzdjE4IixrZXk6ImZoM2hxYSJ9XV0sRTA9RjEoInBhbmVsLWxlZnQiLEUkKTt2YXIgeSQ9W1sicGF0aCIse2Q6Ik0xMi4wMzQgMTIuNjgxYS40OTguNDk4IDAgMCAxIC42NDctLjY0N2w5IDMuNWEuNS41IDAgMCAxLS4wMzMuOTQzbC0zLjQ0NCAxLjA2OGExIDEgMCAwIDAtLjY2LjY2bC0xLjA2NyAzLjQ0M2EuNS41IDAgMCAxLS45NDMuMDMzeiIsa2V5OiJ4d256aXAifV0sWyJwYXRoIix7ZDoiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IixrZXk6IjE0cnN2cSJ9XV0sbTA9RjEoInNxdWFyZS1tb3VzZS1wb2ludGVyIix5JCk7dmFyIGIkPVtbInBhdGgiLHtkOiJtMjEuNzMgMTgtOC0xNGEyIDIgMCAwIDAtMy40OCAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTMiLGtleToid21vZW5xIn1dLFsicGF0aCIse2Q6Ik0xMiA5djQiLGtleToianV6cHU3In1dLFsicGF0aCIse2Q6Ik0xMiAxN2guMDEiLGtleToicDMycDA1In1dXSxwMD1GMSgidHJpYW5nbGUtYWxlcnQiLGIkKTt2YXIgUyQ9W1sicmVjdCIse3g6IjIiLHk6IjQiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxNiIscng6IjIiLGtleToiaXp4bGFvIn1dLFsicGF0aCIse2Q6Ik0xMCA0djQiLGtleToicHA4dTgwIn1dLFsicGF0aCIse2Q6Ik0yIDhoMjAiLGtleToiZDExY3M3In1dLFsicGF0aCIse2Q6Ik02IDR2NCIsa2V5OiIxc3Z0ancifV1dLEUyPUYxKCJhcHAtd2luZG93IixTJCk7dmFyIHgkPVtbInBhdGgiLHtkOiJNNyA3aDEwdjEwIixrZXk6IjF0aXZuOSJ9XSxbInBhdGgiLHtkOiJNNyAxNyAxNyA3IixrZXk6IjF2a2l6YSJ9XV0seTI9RjEoImFycm93LXVwLXJpZ2h0Iix4JCk7dmFyIGokPVtbInBhdGgiLHtkOiJNMjAgNiA5IDE3bC01LTUiLGtleToiMWdtZjJjIn1dXSxiMj1GMSgiY2hlY2siLGokKTt2YXIgdiQ9W1sicGF0aCIse2Q6Im02IDkgNiA2IDYtNiIsa2V5OiJxcnVuc2wifV1dLFMyPUYxKCJjaGV2cm9uLWRvd24iLHYkKTt2YXIgaCQ9W1sicGF0aCIse2Q6Im05IDE4IDYtNi02LTYiLGtleToibXRoaHdxIn1dXSx4Mj1GMSgiY2hldnJvbi1yaWdodCIsaCQpO3ZhciBSJD1bWyJwYXRoIix7ZDoiTTEyIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAxMiAxOHoiLGtleToiYjE5aDVxIn1dLFsicGF0aCIse2Q6Ik0yIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAyIDE4eiIsa2V5OiJoN2g1Z2UifV1dLGoyPUYxKCJmYXN0LWZvcndhcmQiLFIkKTt2YXIgZyQ9W1sicGF0aCIse2Q6Im0zIDcgNSA1LTUgNVY3IixrZXk6ImNvdWhpNyJ9XSxbInBhdGgiLHtkOiJtMjEgNy01IDUgNSA1VjciLGtleToiNm91aWE3In1dLFsicGF0aCIse2Q6Ik0xMiAyMHYyIixrZXk6IjFsaDFrZyJ9XSxbInBhdGgiLHtkOiJNMTIgMTR2MiIsa2V5OiI4amN4dWQifV0sWyJwYXRoIix7ZDoiTTEyIDh2MiIsa2V5OiIxd29xaXYifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MiIsa2V5OiJ0dXMwM20ifV1dLHYyPUYxKCJmbGlwLWhvcml6b250YWwtMiIsZyQpO3ZhciBmJD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAiLGtleToiMW1nbGF5In1dLFsicGF0aCIse2Q6Ik0xMiAyYTE0LjUgMTQuNSAwIDAgMCAwIDIwIDE0LjUgMTQuNSAwIDAgMCAwLTIwIixrZXk6IjEzbzF6bCJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyMCIsa2V5OiI5aTRwdTQifV1dLGgyPUYxKCJnbG9iZSIsZiQpO3ZhciBtJD1bWyJwYXRoIix7ZDoibTIyIDExLTEuMjk2LTEuMjk2YTIuNCAyLjQgMCAwIDAtMy40MDggMEwxMSAxNiIsa2V5OiI5a3p5MzUifV0sWyJwYXRoIix7ZDoiTTQgOGEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMiIsa2V5OiIxdDBmMHQifV0sWyJjaXJjbGUiLHtjeDoiMTMiLGN5OiI3IixyOiIxIixmaWxsOiJjdXJyZW50Q29sb3IiLGtleToiMW9idXM2In1dLFsicmVjdCIse3g6IjgiLHk6IjIiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjIiLGtleToiMWd2aGJ5In1dXSxSMj1GMSgiaW1hZ2VzIixtJCk7dmFyIHAkPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixrZXk6ImFmaXR2NyJ9XSxbInBhdGgiLHtkOiJNMTUgM3YxOCIsa2V5OiIxNG52cDAifV1dLGcyPUYxKCJwYW5lbC1yaWdodCIscCQpO3ZhciB1JD1bWyJwYXRoIix7ZDoiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIsa2V5OiIxMzU3ZTMifV0sWyJwYXRoIix7ZDoiTTMgM3Y1aDUiLGtleToiMXhocThhIn1dXSxmMj1GMSgicm90YXRlLWNjdyIsdSQpO3ZhciBsJD1bWyJwYXRoIix7ZDoibTIxIDIxLTQuMzQtNC4zNCIsa2V5OiIxNGo3cmoifV0sWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiOCIsa2V5OiI0ZWo5N3UifV1dLG0yPUYxKCJzZWFyY2giLGwkKTt2YXIgZCQ9W1sicGF0aCIse2Q6Ik0xMCA1SDMiLGtleToiMXFnZmF3In1dLFsicGF0aCIse2Q6Ik0xMiAxOUgzIixrZXk6InlobW4xaiJ9XSxbInBhdGgiLHtkOiJNMTQgM3Y0IixrZXk6IjFzdWEwMyJ9XSxbInBhdGgiLHtkOiJNMTYgMTd2NCIsa2V5OiIxcTByMTQifV0sWyJwYXRoIix7ZDoiTTIxIDEyaC05IixrZXk6IjFvNGxzcSJ9XSxbInBhdGgiLHtkOiJNMjEgMTloLTUiLGtleToiMXJsdDFwIn1dLFsicGF0aCIse2Q6Ik0yMSA1aC03IixrZXk6IjFvc3p6MiJ9XSxbInBhdGgiLHtkOiJNOCAxMHY0IixrZXk6InRncHhxayJ9XSxbInBhdGgiLHtkOiJNOCAxMkgzIixrZXk6ImE3czRqYiJ9XV0sajA9RjEoInNsaWRlcnMtaG9yaXpvbnRhbCIsZCQpO3ZhciBjJD1bWyJwYXRoIix7ZDoiTTEyIDN2MTIiLGtleToiMXgwajVzIn1dLFsicGF0aCIse2Q6Im0xNyA4LTUtNS01IDUiLGtleToiN3E5N3I4In1dLFsicGF0aCIse2Q6Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00IixrZXk6ImloN24zaCJ9XV0scDI9RjEoInVwbG9hZCIsYyQpO3ZhciBvJD1bWyJwYXRoIix7ZDoibTE2IDEzIDUuMjIzIDMuNDgyYS41LjUgMCAwIDAgLjc3Ny0uNDE2VjcuODdhLjUuNSAwIDAgMC0uNzUyLS40MzJMMTYgMTAuNSIsa2V5OiJmdHltZWMifV0sWyJyZWN0Iix7eDoiMiIseToiNiIsd2lkdGg6IjE0IixoZWlnaHQ6IjEyIixyeDoiMiIsa2V5OiIxNTh4MDEifV1dLHIwPUYxKCJ2aWRlbyIsbyQpO3ZhciByJD1bWyJwYXRoIix7ZDoiTTE4IDYgNiAxOCIsa2V5OiIxYmw1ZjgifV0sWyJwYXRoIix7ZDoibTYgNiAxMiAxMiIsa2V5OiJkOGJrNnYifV1dLEcwPUYxKCJ4IixyJCk7ZnVuY3Rpb24gdTIoe29wZW46JH0pe3JldHVybiBaKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNsYXNzTmFtZToibGVtLWNoZXZyb24gdGV4dC13aGl0ZS81MCIsc3R5bGU6e3RyYW5zZm9ybTokPyJyb3RhdGUoMTgwZGVnKSI6InJvdGF0ZSgwZGVnKSJ9LGNoaWxkcmVuOlooInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pfWZ1bmN0aW9uIHc1KHtkaXI6JH0pe3JldHVybiBaKCJzdmciLHt3aWR0aDoiOSIsaGVpZ2h0OiI5Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2xhc3NOYW1lOiJtci1bM3B4XSIsY2hpbGRyZW46JD09PSJ1cCI/WigicG9seWdvbiIse3BvaW50czoiMTIsNCAyMCwxOCA0LDE4In0pOlooInBvbHlnb24iLHtwb2ludHM6IjQsNiAyMCw2IDEyLDIwIn0pfSl9ZnVuY3Rpb24gbDIoKXtyZXR1cm4gWigic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46WigicG9seWdvbiIse3BvaW50czoiNiw0IDIwLDEyIDYsMjAifSl9KX1mdW5jdGlvbiBUMygpe3JldHVybiBaKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpbWigicmVjdCIse3g6IjYiLHk6IjQiLHdpZHRoOiI0IixoZWlnaHQ6IjE2In0pLFooInJlY3QiLHt4OiIxNCIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSldfSl9ZnVuY3Rpb24gZDIoKXtyZXR1cm4gWigic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46WigicmVjdCIse3g6IjUiLHk6IjUiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjEuNSJ9KX0pfWZ1bmN0aW9uIEkzKCl7cmV0dXJuIFooajIse3NpemU6MTIsc3Ryb2tlV2lkdGg6MiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pfWZ1bmN0aW9uIEUzKCl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0IDIgOSAxMyIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlooInBhdGgiLHtkOiJNNi4wMDg1MiAxNC44MDU0QzUuODkxODEgMTQuOTM1IDUuNzU4MTUgMTQuOTk5OCA1LjYwNzU2IDE0Ljk5OThDNS40NTY5NiAxNS4wMDMzIDUuMzIzMyAxNC45NjEzIDUuMjA2NTkgMTQuODczN0M1LjA5MzY0IDE0Ljc4NjEgNS4wMjU4NyAxNC42NzIzIDUuMDAzMjggMTQuNTMyMkM0Ljk4NDQ2IDE0LjM5MjEgNS4wNDY1OCAxNC4yNDUgNS4xODk2NSAxNC4wOTA5TDYuOTQ1OTkgMTIuMTUyMkw3LjI0NTMgMTAuODc1NUw4LjE5OTcxIDExLjk4OTNMOC4wNTg1MyAxMi4zOTM5QzguMDIwODggMTIuNDk1NSA3Ljk4Njk5IDEyLjU3MDggNy45NTY4NyAxMi42MTk4QzcuOTMwNTIgMTIuNjY4OCA3Ljg3NDA0IDEyLjc0MDYgNy43ODc0NSAxMi44MzUyTDYuMDA4NTIgMTQuODA1NFpNMTAuMzQ1NyAxNC42NDI1TDkuMTAzMjkgMTIuMzA0NkM5LjA3Njk0IDEyLjI2MjUgOS4wNTQzNSAxMi4yMjIzIDkuMDM1NTMgMTIuMTgzN0M5LjAxNjcgMTIuMTQ1MiA4Ljk3NzE3IDEyLjA5MDkgOC45MTY5MyAxMi4wMjA5TDcuNzE5NjggMTAuNjE4MUM3LjQ5Mzc5IDEwLjM1NTQgNy4zMzc1NCAxMC4xMjk1IDcuMjUwOTUgOS45NDAzNEM3LjE2NDM1IDkuNzQ3NyA3LjEzNDI0IDkuNDk5MDEgNy4xNjA1OSA5LjE5NDI5TDcuMjYyMjQgNy45ODA2NUM3LjI2OTc3IDcuOTA3MSA3LjIzMjEyIDcuODU0NTYgNy4xNDkyOSA3LjgyMzA0QzcuMDY2NDcgNy43OTE1MSA2Ljk4NTUyIDcuODA5MDMgNi45MDY0NiA3Ljg3NTU3TDYuNDcxNjEgOC4yNDMzNEw2LjM0MTcyIDkuNjcyMzlDNi4zMjI4OSA5Ljg0NzUyIDYuMjY0NTQgOS45Nzg4NyA2LjE2NjY1IDEwLjA2NjRDNi4wNjg3NiAxMC4xNTQgNS45Mzg4NyAxMC4xOTI1IDUuNzc2OTggMTAuMTgyQzUuNjExMzIgMTAuMTc1IDUuNDgzMzEgMTAuMTE5IDUuMzkyOTUgMTAuMDEzOUM1LjMwNjM2IDkuOTA4ODIgNS4yNjg3MSA5Ljc3Mzk3IDUuMjgwMDEgOS42MDkzNUw1LjM4NzMxIDguMzA2MzlDNS40MDIzNyA4LjEyNzc2IDUuNDM4MTMgNy45NzU0IDUuNDk0NjEgNy44NDkzMUM1LjU1NDg1IDcuNzIzMjEgNS42NjAyNiA3LjU5MTg3IDUuODEwODYgNy40NTUyN0w2LjcxNDQ1IDYuNjI1MTZDNy4wMDQzNSA2LjM2MjQ3IDcuMjY5NzcgNi4xNjEwNyA3LjUxMDczIDYuMDIwOTZDNy43NTE2OCA1Ljg3NzM2IDguMDI4NDEgNS44MDU1NiA4LjM0MDkgNS44MDU1NkM4Ljc1ODggNS44MDU1NiA5LjA3ODgyIDUuOTMzNCA5LjMwMDk1IDYuMTg5MDlDOS41MjY4NSA2LjQ0NDc4IDkuNjI0NzQgNi43NjE3NiA5LjU5NDYyIDcuMTQwMDRMOS40NzYwMiA4LjczMTk1QzkuNDUzNDMgOS4wMTU2NiA5LjQxOTU1IDkuMjYyNTkgOS4zNzQzNyA5LjQ3Mjc1QzkuMzI5MTkgOS42ODI5IDkuMjUzODkgOS45Mjk4MyA5LjE0ODQ3IDEwLjIxMzVMOS4wOTIgMTAuMzYwNkw5Ljg2NTY5IDExLjM3OTlDOS45MjIxNyAxMS40NTM0IDkuOTgwNTIgMTEuNTM0IDEwLjA0MDggMTEuNjIxNkMxMC4xMDEgMTEuNzA5MSAxMC4xNTM3IDExLjc5NjcgMTAuMTk4OSAxMS44ODQzTDExLjQwNzQgMTQuMTY0NEMxMS41MDUzIDE0LjM1MDEgMTEuNTI0MSAxNC41MTEyIDExLjQ2MzkgMTQuNjQ3OEMxMS40MDM3IDE0Ljc4NDQgMTEuMzAyIDE0Ljg4MjUgMTEuMTU4OSAxNC45NDJDMTEuMDE5NiAxNS4wMDE1IDEwLjg3MDkgMTUuMDEwMyAxMC43MTI4IDE0Ljk2ODNDMTAuNTU4NCAxNC45MjYyIDEwLjQzNjEgMTQuODE3NyAxMC4zNDU3IDE0LjY0MjVaTTEyLjQwNyA3Ljk2NDg5QzEyLjU4NCA3Ljk2NDg5IDEyLjcyNyA4LjAxMDQyIDEyLjgzNjIgOC4xMDE0OUMxMi45NDU0IDguMTg5MDUgMTMgOC4zMDYzOSAxMyA4LjQ1MzVDMTMgOC42MTExMSAxMi45NDU0IDguNzMzNyAxMi44MzYyIDguODIxMjdDMTIuNzMwOCA4LjkwODgzIDEyLjU4NzcgOC45NTI2MSAxMi40MDcgOC45NTI2MUgxMS4xMzA3QzEwLjk1MzggOC45NTI2MSAxMC44MTQ1IDguOTM2ODUgMTAuNzEyOCA4LjkwNTMzQzEwLjYxMTIgOC44NzAzIDEwLjUxMzMgOC44MDcyNiAxMC40MTkxIDguNzE2MTlMMTAuMDUyMSA4LjM3OTk0TDEwLjE0MjQgNy4wNDAyMUwxMS4wMzQ3IDcuOTY0ODlIMTIuNDA3Wk05LjAwMTY0IDUuMzExNjlDOC43NzE5OCA1LjMxMTY5IDguNTYzMDMgNS4yNjA5MSA4LjM3NDc4IDUuMTU5MzNDOC4xODY1MyA1LjA1NDI2IDguMDM1OTQgNC45MTQxNSA3LjkyMjk5IDQuNzM5MDNDNy44MTM4MSA0LjU2MzkgNy43NTkyMSA0LjM2OTUgNy43NTkyMSA0LjE1NTg1QzcuNzU5MjEgMy45NDIxOSA3LjgxMzgxIDMuNzQ3OCA3LjkyMjk5IDMuNTcyNjdDOC4wMzU5NCAzLjM5NzU0IDguMTg2NTMgMy4yNTkxOSA4LjM3NDc4IDMuMTU3NjJDOC41NjMwMyAzLjA1MjU0IDguNzcxOTggMyA5LjAwMTY0IDNDOS4yMzEzIDMgOS40NDAyNiAzLjA1MjU0IDkuNjI4NSAzLjE1NzYyQzkuODE2NzUgMy4yNTkxOSA5Ljk2NTQ2IDMuMzk3NTQgMTAuMDc0NiAzLjU3MjY3QzEwLjE4NzYgMy43NDc4IDEwLjI0NDEgMy45NDIxOSAxMC4yNDQxIDQuMTU1ODVDMTAuMjQ0MSA0LjM2OTUgMTAuMTg3NiA0LjU2MzkgMTAuMDc0NiA0LjczOTAzQzkuOTY1NDYgNC45MTQxNSA5LjgxNjc1IDUuMDU0MjYgOS42Mjg1IDUuMTU5MzNDOS40NDAyNiA1LjI2MDkxIDkuMjMxMyA1LjMxMTY5IDkuMDAxNjQgNS4zMTE2OVoifSl9KX1mdW5jdGlvbiB5Mygpe3JldHVybiBaKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjI2IDEgMTIgMTQiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpaKCJwYXRoIix7ZDoiTTMzLjI0MzcgNC41ODQ1OUMzMy4wMDA4IDQuNTg0NTkgMzIuNzgxNyA0LjUyNzI4IDMyLjU4NjYgNC40MTI2OEMzMi4zOTE1IDQuMjk0MTIgMzIuMjM0MiA0LjEzODAxIDMyLjExNDcgMy45NDQzN0MzMS45OTkyIDMuNzQ2NzcgMzEuOTQxNCAzLjUyOTQxIDMxLjk0MTQgMy4yOTIyOUMzMS45NDE0IDMuMDUxMjIgMzEuOTk5MiAyLjgzMzg3IDMyLjExNDcgMi42NDAyMkMzMi4yMzQyIDIuNDQ2NTcgMzIuMzkxNSAyLjI5MjQ1IDMyLjU4NjYgMi4xNzc4NEMzMi43ODE3IDIuMDU5MjggMzMuMDAwOCAyIDMzLjI0MzcgMkMzMy40ODI2IDIgMzMuNjk5NyAyLjA1OTI4IDMzLjg5NDggMi4xNzc4NEMzNC4wOTM5IDIuMjkyNDUgMzQuMjUxMiAyLjQ0NjU3IDM0LjM2NjcgMi42NDAyMkMzNC40ODYyIDIuODMzODcgMzQuNTQ1OSAzLjA1MTIyIDM0LjU0NTkgMy4yOTIyOUMzNC41NDU5IDMuNTI5NDEgMzQuNDg2MiAzLjc0Njc3IDM0LjM2NjcgMy45NDQzN0MzNC4yNTEyIDQuMTM4MDEgMzQuMDkzOSA0LjI5NDEyIDMzLjg5NDggNC40MTI2OEMzMy42OTk3IDQuNTI3MjggMzMuNDgyNiA0LjU4NDU5IDMzLjI0MzcgNC41ODQ1OVpNMzEuMjAwNyA5Ljc0MTkxQzMxLjA3MzMgOS42NzA3NyAzMC45NDE5IDkuNTk1NjggMzAuODA2NSA5LjUxNjY0QzMwLjY3NSA5LjQzNzYgMzAuNTU5NiA5LjM0Mjc2IDMwLjQ2IDkuMjMyMUMzMC4zNjA0IDkuMTE3NDkgMzAuMjkyNyA4Ljk3NzIgMzAuMjU2OSA4LjgxMTIyQzMwLjIyNSA4LjY0MTI4IDMwLjI0NDkgOC40Mjk4NSAzMC4zMTY2IDguMTc2OTNMMzAuODA2NSA2LjQ4MTUzQzMwLjgzODMgNi4zNjY5MiAzMC44MTg0IDYuMjc5OTggMzAuNzQ2NyA2LjIyMDdDMzAuNjc5IDYuMTU3NDcgMzAuNTk3NCA2LjEyOTgxIDMwLjUwMTggNi4xMzc3MUwyOS42NTk1IDYuMTk2OTlMMjkuNDAyNyA3LjkyMjAyQzI5LjM3ODggOC4xMDc3NyAyOS4zMTUxIDguMjQ2MDkgMjkuMjExNSA4LjMzNjk4QzI5LjEwOCA4LjQyNzg4IDI4Ljk3MjYgOC40NjU0MiAyOC44MDUzIDguNDQ5NjFDMjguNjQyIDguNDMzOCAyOC41MTg2IDguMzY2NjIgMjguNDM0OSA4LjI0ODA2QzI4LjM1MTMgOC4xMjk1IDI4LjMyMTQgNy45NzczNSAyOC4zNDUzIDcuNzkxNjFMMjguNjI2MSA1LjY4MTI2QzI4LjY1IDUuNTExMzIgMjguNzE1NyA1LjM3NDk4IDI4LjgyMzIgNS4yNzIyM0MyOC45MzA4IDUuMTY5NDggMjkuMDY4MSA1LjExMjE3IDI5LjIzNTQgNS4xMDAzMkwzMS4zMzIxIDQuOTUyMTJDMzEuODgxNyA0LjkxMjYgMzIuMzM1NyA0Ljk2OTkgMzIuNjk0MSA1LjEyNDAzQzMzLjA1MjUgNS4yNzgxNiAzMy4zNjcxIDUuNTM4OTkgMzMuNjM3OSA1LjkwNjUyTDM0LjY3MTQgNy4zMjMzTDM2LjE3MDggNi42NjUzQzM2LjMzOCA2LjU5MDIxIDM2LjQ4OTMgNi41NzQ0IDM2LjYyNDggNi42MTc4N0MzNi43NjAyIDYuNjU3MzkgMzYuODY1NyA2Ljc1MjI0IDM2Ljk0MTQgNi45MDI0MkMzNy4wMTMgNy4wNTI1OSAzNy4wMTkgNy4xOTQ4NiAzNi45NTkzIDcuMzI5MjNDMzYuOTAzNSA3LjQ2MzYgMzYuNzkyIDcuNTY4MzIgMzYuNjI0OCA3LjY0MzQxTDM0LjczMTEgOC40NzkyNUMzNC42MDM3IDguNTM4NTMgMzQuNDc0MyA4LjU1MDM5IDM0LjM0MjggOC41MTQ4MkMzNC4yMTU0IDguNDc1MyAzNC4xMTM4IDguNDAwMjEgMzQuMDM4MiA4LjI4OTU2TDMzLjM4MTEgNy4zMzUxNkMzMy4zMTM0IDcuMjQwMzEgMzMuMjI5OCA3LjE5ODgxIDMzLjEzMDIgNy4yMTA2N0MzMy4wMzA2IDcuMjIyNTMgMzIuOTY0OSA3LjI4Mzc4IDMyLjkzMzEgNy4zOTQ0NEwzMi40OTEgOC45Mjk3OEwzNC43MzExIDEwLjM4ODFDMzQuODQyNiAxMC40NTkyIDM0LjkyMjMgMTAuNTU2IDM0Ljk3MDEgMTAuNjc4NUMzNS4wMTc5IDEwLjgwMSAzNS4wMjk4IDEwLjkyNTUgMzUuMDA1OSAxMS4wNTJDMzQuOTg2IDExLjE3NDUgMzQuOTI4MiAxMS4yNzUzIDM0LjgzMjcgMTEuMzU0M0wzMi43NzE4IDEzLjA5NzFDMzIuNjA4NSAxMy4yMzU0IDMyLjQ0NTIgMTMuMjk4NyAzMi4yODE5IDEzLjI4NjhDMzIuMTIyNiAxMy4yNzUgMzEuOTkzMiAxMy4yMTM3IDMxLjg5MzcgMTMuMTAzMUMzMS43OTgxIDEyLjk5NjQgMzEuNzU0MyAxMi44NjU5IDMxLjc2MjIgMTIuNzExOEMzMS43NzAyIDEyLjU1MzcgMzEuODUzOCAxMi40MDc1IDMyLjAxMzEgMTIuMjczMUwzMy40ODg2IDExLjAxNjRMMzEuMjAwNyA5Ljc0MTkxWk0yNy4yMDQ0IDE0Ljg2MzdDMjcuMDg0OSAxNC43NTcgMjcuMDE3MiAxNC42MTg2IDI3LjAwMTMgMTQuNDQ4N0MyNi45ODkzIDE0LjI3ODggMjcuMDYxIDE0LjExNjcgMjcuMjE2MyAxMy45NjI2TDI5LjIyMzUgMTEuOTc2N0wyOS45MzQzIDkuNDgxMDhDMzAuMDQxOCA5LjYxNTQ0IDMwLjE3NTMgOS43NDU4NiAzMC4zMzQ1IDkuODcyMzJDMzAuNDk3OCA5Ljk5NDgzIDMwLjY5MyAxMC4xMTczIDMwLjkyIDEwLjIzOTlMMzEuMTE3MSAxMC4zNDY2TDMwLjMwNDcgMTIuNDMzMkMzMC4yNTI5IDEyLjU1NTcgMzAuMjA5MSAxMi42NDA3IDMwLjE3MzMgMTIuNjg4MUMzMC4xNDE0IDEyLjczNTUgMzAuMDg1NiAxMi43OTg4IDMwLjAwNiAxMi44Nzc4TDI4LjA3MDYgMTQuNzgwN0MyNy45MTkyIDE0LjkyNjkgMjcuNzYzOSAxNSAyNy42MDQ2IDE1QzI3LjQ0OTMgMTUgMjcuMzE1OSAxNC45NTQ2IDI3LjIwNDQgMTQuODYzN1oifSl9KX1mdW5jdGlvbiBiMygpe3JldHVybiBaKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQ5IDMgMTYgMTIiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpaKCJwYXRoIix7ZDoiTTU3LjAwMjggMTEuOTQ5QzU2Ljg0OCAxMS45NDkgNTYuNzE3MiAxMS44OTg3IDU2LjYxMDMgMTEuNzk4QzU2LjUwMzUgMTEuNjkzOSA1Ni40NTAxIDExLjU3MDcgNTYuNDUwMSAxMS40Mjg0VjkuMDI4NjNMNTQuNDIxNiA3LjEwNzc2QzU0LjIyMjcgNi45MjAzNSA1NC4wOTU1IDYuNjk4MjUgNTQuMDQwMyA2LjQ0MTQ0QzUzLjk4NSA2LjE4MTE2IDU0LjAxMDggNS45Mjc4MiA1NC4xMTc2IDUuNjgxNDJDNTQuMjI4MiA1LjQzODQ5IDU0LjM5NzcgNS4yNDQxNCA1NC42MjYxIDUuMDk4MzlDNTQuODU4MyA0Ljk0OTE2IDU1LjExNjIgNC44NzQ1NCA1NS4zOTk5IDQuODc0NTRINTguMTEzN0M1OC40MjMyIDQuODc0NTQgNTguNjg0OCA0Ljk3NjkyIDU4Ljg5ODUgNS4xODE2OEM1OS4xMTU5IDUuMzgyOTYgNTkuMjI0NiA1LjYyOTM2IDU5LjIyNDYgNS45MjA4N1Y3Ljc2MzY2SDYwLjg5OTNDNjEuMDUwNCA3Ljc2MzY2IDYxLjE3OTQgNy44MTM5OSA2MS4yODYyIDcuOTE0NjNDNjEuMzkzMSA4LjAxNTI3IDYxLjQ0NjUgOC4xMzg0NyA2MS40NDY1IDguMjg0MjNDNjEuNDQ2NSA4LjQyNjUxIDYxLjM5MzEgOC41NDc5OCA2MS4yODYyIDguNjQ4NjJDNjEuMTc5NCA4Ljc0OTI2IDYxLjA1MDQgOC43OTk1OCA2MC44OTkzIDguNzk5NThINTguNjcxOUM1OC41MjA5IDguNzk5NTggNTguMzkwMSA4Ljc0OTI2IDU4LjI3OTUgOC42NDg2MkM1OC4xNzI3IDguNTQ3OTggNTguMTE5MiA4LjQyNjUxIDU4LjExOTIgOC4yODQyM1Y2Ljk4ODAzQzU4LjExOTIgNi45MTg2MiA1OC4wOTkgNi44NTQ0MiA1OC4wNTg0IDYuNzk1NDJDNTguMDE3OSA2LjczMjk1IDU3Ljk0NDIgNi43MDE3MiA1Ny44MzczIDYuNzAxNzJINTYuMDYzMkM1NS45OTMyIDYuNzAxNzIgNTUuOTQ1MyA2LjcyOTQ4IDU1LjkxOTUgNi43ODUwMUM1NS44OTc0IDYuODM3MDYgNTUuOTA4NCA2Ljg4NzM5IDU1Ljk1MjYgNi45MzU5N0w1Ny40MDA3IDguNDU2MDFDNTcuNTAzOSA4LjU2MzYgNTcuNTU1NSA4LjY4MTU5IDU3LjU1NTUgOC44MDk5OVYxMS40Mjg0QzU3LjU1NTUgMTEuNTcwNyA1Ny41MDAyIDExLjY5MzkgNTcuMzg5NyAxMS43OThDNTcuMjgyOCAxMS44OTg3IDU3LjE1MzggMTEuOTQ5IDU3LjAwMjggMTEuOTQ5Wk01My4wMDEyIDE0QzUyLjU4NDggMTQgNTIuMTk0MiAxMy45MjcxIDUxLjgyOTUgMTMuNzgxNEM1MS40Njg0IDEzLjYzNTYgNTEuMTQ5NiAxMy40MzI2IDUwLjg3MzMgMTMuMTcyM0M1MC42MDA2IDEyLjkxMiA1MC4zODY5IDEyLjYxMTggNTAuMjMyMSAxMi4yNzE3QzUwLjA3NzQgMTEuOTI4MiA1MCAxMS41NjAzIDUwIDExLjE2ODFDNTAgMTAuNzc2IDUwLjA3NzQgMTAuNDA5OSA1MC4yMzIxIDEwLjA2OThDNTAuMzg2OSA5LjcyNjE4IDUwLjYwMDYgOS40MjQyNiA1MC44NzMzIDkuMTYzOThDNTEuMTQ5NiA4LjkwMzcgNTEuNDY4NCA4LjcwMDY4IDUxLjgyOTUgOC41NTQ5MkM1Mi4xOTQyIDguNDA5MTYgNTIuNTg0OCA4LjMzNjI4IDUzLjAwMTIgOC4zMzYyOEM1My40MjEyIDguMzM2MjggNTMuODExOCA4LjQwOTE2IDU0LjE3MjkgOC41NTQ5MkM1NC41Mzc3IDguNzAwNjggNTQuODU2NCA4LjkwMzcgNTUuMTI5MSA5LjE2Mzk4QzU1LjQwNTQgOS40MjQyNiA1NS42MjEgOS43MjYxOCA1NS43NzU4IDEwLjA2OThDNTUuOTMwNSAxMC40MDk5IDU2LjAwNzkgMTAuNzc2IDU2LjAwNzkgMTEuMTY4MUM1Ni4wMDc5IDExLjU2MDMgNTUuOTMwNSAxMS45MjgyIDU1Ljc3NTggMTIuMjcxN0M1NS42MjEgMTIuNjExOCA1NS40MDU0IDEyLjkxMiA1NS4xMjkxIDEzLjE3MjNDNTQuODU2NCAxMy40MzI2IDU0LjUzNzcgMTMuNjM1NiA1NC4xNzI5IDEzLjc4MTRDNTMuODExOCAxMy45MjcxIDUzLjQyMTIgMTQgNTMuMDAxMiAxNFpNNTMuMDAxMiAxMy4yNjZDNTMuNDEwMiAxMy4yNjYgNTMuNzgyMyAxMy4xNzA2IDU0LjExNzYgMTIuOTc5N0M1NC40NTY2IDEyLjc5MjMgNTQuNzI1NiAxMi41NDA3IDU0LjkyNDYgMTIuMjI0OUM1NS4xMjczIDExLjkwNTYgNTUuMjI4NiAxMS41NTM0IDU1LjIyODYgMTEuMTY4MUM1NS4yMjg2IDEwLjc4MjkgNTUuMTI3MyAxMC40MzI0IDU0LjkyNDYgMTAuMTE2NkM1NC43MjU2IDkuNzk3MzMgNTQuNDU2NiA5LjU0Mzk5IDU0LjExNzYgOS4zNTY1OUM1My43ODIzIDkuMTY1NzEgNTMuNDEwMiA5LjA3MDI4IDUzLjAwMTIgOS4wNzAyOEM1Mi41OTU5IDkuMDcwMjggNTIuMjIzNyA5LjE2NTcxIDUxLjg4NDcgOS4zNTY1OUM1MS41NDk0IDkuNTQzOTkgNTEuMjgwNCA5Ljc5NzMzIDUxLjA3NzggMTAuMTE2NkM1MC44Nzg4IDEwLjQzMjQgNTAuNzc5MyAxMC43ODI5IDUwLjc3OTMgMTEuMTY4MUM1MC43NzkzIDExLjU1MzQgNTAuODc4OCAxMS45MDU2IDUxLjA3NzggMTIuMjI0OUM1MS4yODA0IDEyLjU0MDcgNTEuNTQ5NCAxMi43OTIzIDUxLjg4NDcgMTIuOTc5N0M1Mi4yMjM3IDEzLjE3MDYgNTIuNTk1OSAxMy4yNjYgNTMuMDAxMiAxMy4yNjZaTTYyLjQ4MDEgOS42MTE2NkM2Mi4zNjIyIDkuNTE0NDkgNjIuMzAxNCA5LjQxNTU4IDYyLjI5NzcgOS4zMTQ5NEM2Mi4yOTc3IDkuMjEwODMgNjIuMzMwOCA5LjEyNDA3IDYyLjM5NzIgOS4wNTQ2NkM2Mi40NjcyIDguOTg1MjUgNjIuNTUzOCA4Ljk0NTM0IDYyLjY1NjkgOC45MzQ5M0M2Mi43NjM4IDguOTIxMDUgNjIuODY4OCA4Ljk1NTc1IDYyLjk3MiA5LjAzOTA0QzYzLjI4ODkgOS4zMDI3OSA2My41Mzk0IDkuNjE2ODcgNjMuNzIzNiA5Ljk4MTI2QzYzLjkwNzkgMTAuMzQ1NyA2NCAxMC43NDEzIDY0IDExLjE2ODFDNjQgMTEuNTYwMyA2My45MjI2IDExLjkyODIgNjMuNzY3OSAxMi4yNzE3QzYzLjYxMzEgMTIuNjExOCA2My4zOTc2IDEyLjkxMiA2My4xMjEyIDEzLjE3MjNDNjIuODQ4NSAxMy40MzI2IDYyLjUyOTggMTMuNjM1NiA2Mi4xNjUgMTMuNzgxNEM2MS44MDM5IDEzLjkyNzEgNjEuNDE1MiAxNCA2MC45OTg4IDE0QzYwLjU4MjQgMTQgNjAuMTkxOSAxMy45MjcxIDU5LjgyNzEgMTMuNzgxNEM1OS40NjIzIDEzLjYzNTYgNTkuMTQxNyAxMy40MzI2IDU4Ljg2NTQgMTMuMTcyM0M1OC41OTI3IDEyLjkxMiA1OC4zNzkgMTIuNjExOCA1OC4yMjQyIDEyLjI3MTdDNTguMDY5NSAxMS45MjgyIDU3Ljk5MjEgMTEuNTYwMyA1Ny45OTIxIDExLjE2ODFDNTcuOTkyMSAxMC45NjM0IDU4LjAxNDIgMTAuNzY1NiA1OC4wNTg0IDEwLjU3NDdDNTguMTA2MyAxMC4zODA0IDU4LjE3MjcgMTAuMTkzIDU4LjI1NzQgMTAuMDEyNUM1OC4zMDkgOS45MDE0NCA1OC4zODA4IDkuODMwMyA1OC40NzMgOS43OTkwNkM1OC41Njg4IDkuNzY0MzYgNTguNjYyNyA5Ljc2NDM2IDU4Ljc1NDggOS43OTkwNkM1OC44NTA2IDkuODMwMyA1OC45MjI1IDkuODkyNzYgNTguOTcwNCA5Ljk4NjQ3QzU5LjAxODMgMTAuMDgwMiA1OS4wMTA5IDEwLjE5ODIgNTguOTQ4MyAxMC4zNDA0QzU4LjgzMDQgMTAuNjAwNyA1OC43NzE0IDEwLjg3NjYgNTguNzcxNCAxMS4xNjgxQzU4Ljc3MTQgMTEuNTUzNCA1OC44NzA5IDExLjkwNTYgNTkuMDY5OSAxMi4yMjQ5QzU5LjI3MjUgMTIuNTQwNyA1OS41NDE1IDEyLjc5MjMgNTkuODc2OCAxMi45Nzk3QzYwLjIxNTggMTMuMTcwNiA2MC41ODk4IDEzLjI2NiA2MC45OTg4IDEzLjI2NkM2MS40MDc4IDEzLjI2NiA2MS43OCAxMy4xNzA2IDYyLjExNTMgMTIuOTc5N0M2Mi40NTA2IDEyLjc5MjMgNjIuNzE3NyAxMi41NDA3IDYyLjkxNjcgMTIuMjI0OUM2My4xMTk0IDExLjkwNTYgNjMuMjIwNyAxMS41NTM0IDYzLjIyMDcgMTEuMTY4MUM2My4yMjA3IDEwLjg1OTMgNjMuMTUyNSAxMC41NzEyIDYzLjAxNjIgMTAuMzA0QzYyLjg4MzUgMTAuMDMzMyA2Mi43MDQ4IDkuODAyNTMgNjIuNDgwMSA5LjYxMTY2Wk02MC45OTg4IDYuMjc0ODZDNjAuNzc0IDYuMjc0ODYgNjAuNTY5NSA2LjIyNDU0IDYwLjM4NTMgNi4xMjM4OUM2MC4yMDExIDYuMDE5NzggNjAuMDUzNyA1Ljg4MjcgNTkuOTQzMiA1LjcxMjY1QzU5LjgzNjMgNS41MzkxMyA1OS43ODI5IDUuMzQ2NTIgNTkuNzgyOSA1LjEzNDgzQzU5Ljc4MjkgNC45MjY2IDU5LjgzNjMgNC43Mzc0NiA1OS45NDMyIDQuNTY3NDFDNjAuMDUzNyA0LjM5Mzg5IDYwLjIwMTEgNC4yNTY4MSA2MC4zODUzIDQuMTU2MTdDNjAuNTY5NSA0LjA1MjA2IDYwLjc3NCA0IDYwLjk5ODggNEM2MS4yMTk5IDQgNjEuNDIwNyA0LjA1MjA2IDYxLjYwMTMgNC4xNTYxN0M2MS43ODE4IDQuMjU2ODEgNjEuOTI1NSA0LjM5Mzg5IDYyLjAzMjQgNC41Njc0MUM2Mi4xNDI5IDQuNzM3NDYgNjIuMTk4MiA0LjkyNjYgNjIuMTk4MiA1LjEzNDgzQzYyLjE5ODIgNS4zNDY1MiA2Mi4xNDI5IDUuNTM5MTMgNjIuMDMyNCA1LjcxMjY1QzYxLjkyNTUgNS44ODI3IDYxLjc4MTggNi4wMTk3OCA2MS42MDEzIDYuMTIzODlDNjEuNDIwNyA2LjIyNDU0IDYxLjIxOTkgNi4yNzQ4NiA2MC45OTg4IDYuMjc0ODZaIn0pfSl9ZnVuY3Rpb24gUzMoKXtyZXR1cm4gWigic3ZnIix7d2lkdGg6IjE2IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI3MCA1IDE4IDkiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpaKCJwYXRoIix7ZDoiTTg1LjU3MiAxMi4xMDM4Qzg2LjA2IDEyLjEwMzggODYuNDIwNyAxMS45ODkyIDg2LjY1NDIgMTEuNzYwMUM4Ni44ODQ3IDExLjUyODEgODcgMTEuMTY0MSA4NyAxMC42NjgxVjEwLjExMTJDODcgOS43NjkwMSA4Ni45MjA3IDkuNDYzMDIgODYuNzYyIDkuMTkzMjlDODYuNjAzMyA4LjkyMDY1IDg2LjM3NTggOC42OTczMyA4Ni4wNzk0IDguNTIzMzFDODUuNzgwMSA4LjM0OTI5IDg1LjQyMjMgOC4yMzc2MiA4NS4wMDYyIDguMTg4MzJMODMuMDE2OCA3Ljk1MzM5TDgxLjE5ODEgNi44NDgzNUM4MC45MjI3IDYuNjgwMTMgODAuNjYwOCA2LjU0MjM3IDgwLjQxMjMgNi40MzUwNUM4MC4xNjA4IDYuMzI0ODQgNzkuODk3NCA2LjIzNzgzIDc5LjYyMTkgNi4xNzQwMkM3OS4zNDY1IDYuMTEwMjEgNzkuMDM4MiA2LjA2NTI2IDc4LjY5NjkgNi4wMzkxNUM3OC4zNTI2IDYuMDEzMDUgNzcuOTUxNCA2IDc3LjQ5MzQgNkg3Ni44MTA4Qzc2LjM4ODcgNiA3NS45OTUgNi4wNDkzMSA3NS42Mjk4IDYuMTQ3OTJDNzUuMjYxNiA2LjI0MzYzIDc0LjkxODggNi4zNzEyNSA3NC42MDE1IDYuNTMwNzZDNzQuMjgxMSA2LjY5MDI4IDczLjk4NjIgNi44NjU3NiA3My43MTY4IDcuMDU3MThDNzMuNDQ0NCA3LjI0ODYgNzMuMTk1OSA3LjQzNzEyIDcyLjk3MTQgNy42MjI3NUw3Mi4yNTc0IDcuODUzMzNDNzEuODMyMyA3Ljk4Njc0IDcxLjUxNjQgOC4xODM5NyA3MS4zMDk5IDguNDQ1QzcxLjEwMzMgOC43MDMxMyA3MSA5LjAzMzc3IDcxIDkuNDM2OTJWMTAuNjQyQzcxIDExLjE0NjcgNzEuMTE1MyAxMS41MTY1IDcxLjM0NTggMTEuNzUxNEM3MS41NzYzIDExLjk4NjMgNzEuOTM3IDEyLjEwMzggNzIuNDI4IDEyLjEwMzhINzIuNzE1NEM3Mi43MDA0IDEyLjAzNzEgNzIuNjg4NSAxMS45NzA0IDcyLjY3OTUgMTEuOTAzN0M3Mi42NzA1IDExLjgzNDEgNzIuNjY2IDExLjc2NDUgNzIuNjY2IDExLjY5NDhDNzIuNjY2IDExLjM1NTUgNzIuNzQ5OCAxMS4wNDk1IDcyLjkxNzUgMTAuNzc2OUM3My4wODUxIDEwLjUwNDIgNzMuMzExMiAxMC4yODgyIDczLjU5NTYgMTAuMTI4N0M3My44NzcgOS45NjYyMyA3NC4xOTI4IDkuODg1MDIgNzQuNTQzMSA5Ljg4NTAyQzc0Ljg5MDQgOS44ODUwMiA3NS4yMDYyIDkuOTY2MjMgNzUuNDkwNiAxMC4xMjg3Qzc1Ljc3MiAxMC4yODgyIDc1Ljk5NjUgMTAuNTA0MiA3Ni4xNjQyIDEwLjc3NjlDNzYuMzMxOCAxMS4wNDk1IDc2LjQxNTcgMTEuMzU1NSA3Ni40MTU3IDExLjY5NDhDNzYuNDE1NyAxMS43NjQ1IDc2LjQxMTIgMTEuODM0MSA3Ni40MDIyIDExLjkwMzdDNzYuMzkzMiAxMS45NzA0IDc2LjM4MjcgMTIuMDM3MSA3Ni4zNzA4IDEyLjEwMzhIODEuNjM4MkM4MS42MjAzIDEyLjAzNzEgODEuNjA4MyAxMS45NzA0IDgxLjYwMjMgMTEuOTAzN0M4MS41OTMzIDExLjgzNDEgODEuNTg4OCAxMS43NjQ1IDgxLjU4ODggMTEuNjk0OEM4MS41ODg4IDExLjM1NTUgODEuNjcyNyAxMS4wNDk1IDgxLjg0MDMgMTAuNzc2OUM4Mi4wMDUgMTAuNTA0MiA4Mi4yMjk1IDEwLjI4ODIgODIuNTEzOSAxMC4xMjg3QzgyLjc5NTMgOS45NjYyMyA4My4xMTExIDkuODg1MDIgODMuNDYxNCA5Ljg4NTAyQzgzLjgxMTcgOS44ODUwMiA4NC4xMjkgOS45NjYyMyA4NC40MTM0IDEwLjEyODdDODQuNjk0OCAxMC4yODgyIDg0LjkxOTQgMTAuNTA0MiA4NS4wODcgMTAuNzc2OUM4NS4yNTE3IDExLjA0OTUgODUuMzM0IDExLjM1NTUgODUuMzM0IDExLjY5NDhDODUuMzM0IDExLjc2NDUgODUuMzMxIDExLjgzNDEgODUuMzI1IDExLjkwMzdDODUuMzE2IDExLjk3MDQgODUuMzA0MSAxMi4wMzcxIDg1LjI4OTEgMTIuMTAzOEg4NS41NzJaTTgzLjQ2MTQgMTNDODMuNzEyOSAxMyA4My45NDA0IDEyLjk0MiA4NC4xNDQgMTIuODI2Qzg0LjM0NzYgMTIuNzEgODQuNTA5MiAxMi41NTMzIDg0LjYyOSAxMi4zNTYxQzg0Ljc0ODcgMTIuMTU4OSA4NC44MDg2IDExLjkzODUgODQuODA4NiAxMS42OTQ4Qzg0LjgwODYgMTEuNDUxMiA4NC43NDg3IDExLjIzMDggODQuNjI5IDExLjAzMzZDODQuNTA5MiAxMC44MzYzIDg0LjM0NzYgMTAuNjc5NyA4NC4xNDQgMTAuNTYzN0M4My45NDA0IDEwLjQ0NzcgODMuNzEyOSAxMC4zODk3IDgzLjQ2MTQgMTAuMzg5N0M4My4yMDY5IDEwLjM4OTcgODIuOTc3OSAxMC40NDc3IDgyLjc3NDMgMTAuNTYzN0M4Mi41NzA4IDEwLjY3OTcgODIuNDA5MSAxMC44MzYzIDgyLjI4OTQgMTEuMDMzNkM4Mi4xNjk2IDExLjIzMDggODIuMTA5NyAxMS40NTEyIDgyLjEwOTcgMTEuNjk0OEM4Mi4xMDk3IDExLjkzODUgODIuMTY5NiAxMi4xNTg5IDgyLjI4OTQgMTIuMzU2MUM4Mi40MDkxIDEyLjU1MzMgODIuNTcwOCAxMi43MSA4Mi43NzQzIDEyLjgyNkM4Mi45Nzc5IDEyLjk0MiA4My4yMDY5IDEzIDgzLjQ2MTQgMTNaTTc0LjU0MzEgMTNDNzQuNzk0NiAxMyA3NS4wMjIxIDEyLjk0MiA3NS4yMjU3IDEyLjgyNkM3NS40MjkyIDEyLjcxIDc1LjU5MDkgMTIuNTUzMyA3NS43MTA2IDEyLjM1NjFDNzUuODMwNCAxMi4xNTg5IDc1Ljg5MDMgMTEuOTM4NSA3NS44OTAzIDExLjY5NDhDNzUuODkwMyAxMS40NTEyIDc1LjgzMDQgMTEuMjMwOCA3NS43MTA2IDExLjAzMzZDNzUuNTkwOSAxMC44MzYzIDc1LjQyOTIgMTAuNjc5NyA3NS4yMjU3IDEwLjU2MzdDNzUuMDIyMSAxMC40NDc3IDc0Ljc5NDYgMTAuMzg5NyA3NC41NDMxIDEwLjM4OTdDNzQuMjg4NiAxMC4zODk3IDc0LjA1OTYgMTAuNDQ3NyA3My44NTYgMTAuNTYzN0M3My42NTI0IDEwLjY3OTcgNzMuNDkwOCAxMC44MzYzIDczLjM3MSAxMS4wMzM2QzczLjI1MTMgMTEuMjMwOCA3My4xOTE0IDExLjQ1MTIgNzMuMTkxNCAxMS42OTQ4QzczLjE5MTQgMTEuOTM4NSA3My4yNTEzIDEyLjE1ODkgNzMuMzcxIDEyLjM1NjFDNzMuNDkwOCAxMi41NTMzIDczLjY1MjQgMTIuNzEgNzMuODU2IDEyLjgyNkM3NC4wNTk2IDEyLjk0MiA3NC4yODg2IDEzIDc0LjU0MzEgMTNaIn0pfSl9ZnVuY3Rpb24gaTAoe3NpemU6JD0xOCxzdHJva2VXaWR0aDpKPTJ9KXtyZXR1cm4gWihmMix7c2l6ZTokLHN0cm9rZVdpZHRoOkp9KX12YXIgZzk9IkFjY2Vzc2liaWxpdHkgdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIjtmdW5jdGlvbiBUNSgkKXtyZXR1cm4gJD8uZXJyb3JzPy5pbmNsdWRlcyhnOSk/PyExfWZ1bmN0aW9uIEk1KCQsSil7aWYoJD09PUopcmV0dXJuITA7aWYoJC5pZCE9PUouaWR8fCQucGF0aCE9PUoucGF0aHx8JC5sYWJlbCE9PUoubGFiZWx8fCQudmFsdWUhPT1KLnZhbHVlfHwkLnJvbGUhPT1KLnJvbGV8fCQudHlwZSE9PUoudHlwZXx8JC5lbmFibGVkIT09Si5lbmFibGVkKXJldHVybiExO2xldCBRPSQuZnJhbWUsWD1KLmZyYW1lO3JldHVybiBRPT09WHx8US54PT09WC54JiZRLnk9PT1YLnkmJlEud2lkdGg9PT1YLndpZHRoJiZRLmhlaWdodD09PVguaGVpZ2h0fWZ1bmN0aW9uIEU1KCQsSil7bGV0IFE9JC5sYWJlbHx8JC5yb2xlfHxgZWxlbWVudCAke0orMX1gLFg9JC5yb2xlfHwkLnR5cGU7cmV0dXJue2lkOiQuaWQscGF0aDokLnBhdGgsbGFiZWw6USx2YWx1ZTokLnZhbHVlLHJvbGU6WCx0eXBlOiQudHlwZSxlbmFibGVkOiQuZW5hYmxlZCxmcmFtZTokLmZyYW1lfX1mdW5jdGlvbiBmOSgkLEope2xldCBRPU1hdGgubWF4KDAsJC54KSxYPU1hdGgubWF4KDAsJC55KSxLPU1hdGgubWluKEoud2lkdGgsJC54KyQud2lkdGgpLFk9TWF0aC5taW4oSi5oZWlnaHQsJC55KyQuaGVpZ2h0KSxxPU1hdGgubWF4KDAsSy1RKSxHPU1hdGgubWF4KDAsWS1YKTtyZXR1cm4gcT4wJiZHPjA/e3g6USx5Olgsd2lkdGg6cSxoZWlnaHQ6R306bnVsbH1mdW5jdGlvbiBuMCgkKXtyZXR1cm4gJC5pZH1mdW5jdGlvbiB4MygkKXtyZXR1cm5gJHskLnh9LCR7JC55fSAkeyQud2lkdGh9eCR7JC5oZWlnaHR9YH1mdW5jdGlvbiBtOSgkKXtyZXR1cm5bYEFYIGxhYmVsOiAkeyQubGFiZWx8fCJVbmxhYmVsZWQifWAsJC5yb2xlP2Byb2xlOiAkeyQucm9sZX1gOiIiLCQudHlwZT9gdHlwZTogJHskLnR5cGV9YDoiIiwkLnZhbHVlP2B2YWx1ZTogJHskLnZhbHVlfWA6IiIsJC5pZD9gaWQ6ICR7JC5pZH1gOiIiLGBwYXRoOiAkeyQucGF0aH1gLGBmcmFtZTogJHt4MygkLmZyYW1lKX1gXS5maWx0ZXIoQm9vbGVhbikuam9pbigiOyAiKX1mdW5jdGlvbiBjMigkKXtyZXR1cm4gJCYmdHlwZW9mICQuZGV2aWNlPT09InN0cmluZyImJnR5cGVvZiAkLnVybD09PSJzdHJpbmciPyQ6bnVsbH1mdW5jdGlvbiBwOSgkKXtsZXQgSj1uZXcgVVJMKCQuc3RyZWFtVXJsKTtyZXR1cm4gSi5wYXRobmFtZT1KLnBhdGhuYW1lLnJlcGxhY2UoL1wvc3RyZWFtXC5bXi9dKyQvLCIvc3RyZWFtLm1qcGVnIiksSi5zZWFyY2g9IiIsSi5oYXNoPSIiLEoudG9TdHJpbmcoKX1mdW5jdGlvbiBqMygkKXtsZXQgSj1uZXcgVVJMKCQuc3RyZWFtVXJsKTtyZXR1cm4gSi5wYXRobmFtZT1KLnBhdGhuYW1lLnJlcGxhY2UoL1wvc3RyZWFtXC5bXi9dKyQvLCIvd2VicnRjL29mZmVyIiksSi5zZWFyY2g9IiIsSi5oYXNoPSIiLEoudG9TdHJpbmcoKX1mdW5jdGlvbiB1OSgkKXtsZXQgSj1uZXcgVVJMKGozKCQpKTtyZXR1cm4gSi5wYXRobmFtZT1KLnBhdGhuYW1lLnJlcGxhY2UoL1wvb2ZmZXIkLywiL2Nsb3NlIiksSi50b1N0cmluZygpfWZ1bmN0aW9uIGoxKCQpe2xldCBRPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmJhc2VQYXRoPz8od2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1wvKyQvLCIiKXx8Ii8iKTtyZXR1cm4gUT09PSIvIj9gLyR7JH1gOmAke1F9LyR7JH1gfXZhciBpJD01MDAwLG4kPTIwMDAsbzI9bnVsbCx2Mz1udWxsLGEkPTEscyQ9MSxOMj1uZXcgTWFwLEIyPW5ldyBNYXA7ZnVuY3Rpb24gdCQoKXtsZXQgJD1uZXcgVVJMKGoxKCJleGVjLXdzIiksd2luZG93LmxvY2F0aW9uLmhyZWYpO3JldHVybiAkLnByb3RvY29sPSQucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiIsJC50b1N0cmluZygpfWZ1bmN0aW9uIGUkKCQpe2ZvcihsZXQgSiBvZiBOMi52YWx1ZXMoKSlKLnJlamVjdCgkKTtOMi5jbGVhcigpfWZ1bmN0aW9uIGw5KCl7cmV0dXJuIG8yPz89bmV3IFByb21pc2UoKCQsSik9PntsZXQgUT0hMSxYO3RyeXtYPW5ldyBXZWJTb2NrZXQodCQoKSl9Y2F0Y2gocSl7bzI9bnVsbCxKKHEpO3JldHVybn1sZXQgSz1zZXRUaW1lb3V0KCgpPT57aWYoIVEpUT0hMCxvMj1udWxsLEooRXJyb3IoImNvbnRyb2wgc29ja2V0IGNvbm5lY3QgdGltZW91dCIpKSxYLmNsb3NlKCl9LGkkKTtYLm9ub3Blbj0oKT0+e1guc2VuZChKU09OLnN0cmluZ2lmeSh7dG9rZW46d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uZXhlY1Rva2VuPz8iIn0pKX0sWC5vbm1lc3NhZ2U9KHEpPT57bGV0IEc7dHJ5e0c9SlNPTi5wYXJzZShTdHJpbmcocS5kYXRhKSl9Y2F0Y2h7cmV0dXJufWlmKEcucmVhZHkpe2lmKCFRKVE9ITAsY2xlYXJUaW1lb3V0KEspLHYzPVgsJChYKTtyZXR1cm59aWYodHlwZW9mIEcuc3ViPT09Im51bWJlciIpe2xldCBOPUIyLmdldChHLnN1Yik7aWYoIU4pcmV0dXJuO2lmKEcuZW5kKUIyLmRlbGV0ZShHLnN1YiksTi5vbkVuZCgpO2Vsc2UgaWYodHlwZW9mIEcuZGF0YT09PSJzdHJpbmciKU4ub25EYXRhKEcuZGF0YSk7cmV0dXJufWlmKHR5cGVvZiBHLmlkIT09Im51bWJlciIpcmV0dXJuO2xldCBCPU4yLmdldChHLmlkKTtpZighQilyZXR1cm47TjIuZGVsZXRlKEcuaWQpLEIucmVzb2x2ZShHKX07bGV0IFk9KCk9PntvMj1udWxsLHYzPW51bGw7bGV0IHE9RXJyb3IoImNvbnRyb2wgc29ja2V0IGNsb3NlZCDigJQgcmVsb2FkIHRoZSBwYWdlIGlmIHRoaXMgcGVyc2lzdHMiKTtlJChxKTtsZXQgRz1bLi4uQjIudmFsdWVzKCldO0IyLmNsZWFyKCk7Zm9yKGxldCBCIG9mIEcpQi5vbkVuZCgpO2lmKCFRKVE9ITAsY2xlYXJUaW1lb3V0KEspLEoocSl9O1gub25lcnJvcj1ZLFgub25jbG9zZT1ZfSksbzJ9YXN5bmMgZnVuY3Rpb24gZDkoJCxKKXtsZXQgUT1hd2FpdCBsOSgpO2lmKFEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXRocm93IEVycm9yKCJjb250cm9sIHNvY2tldCBub3Qgb3BlbiIpO3JldHVybiBuZXcgUHJvbWlzZSgoWCxLKT0+e2xldCBZPWEkKysscT0oKT0+e04yLmRlbGV0ZShZKSxLKEo/LnJlYXNvbj8/bmV3IERPTUV4Y2VwdGlvbigiQWJvcnRlZCIsIkFib3J0RXJyb3IiKSl9O2lmKEope2lmKEouYWJvcnRlZCl7cSgpO3JldHVybn1KLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixxLHtvbmNlOiEwfSl9TjIuc2V0KFkse3Jlc29sdmU6KEcpPT57Sj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEpLFgoRyl9LHJlamVjdDooRyk9PntKPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksSyhHKX19KSxRLnNlbmQoSlNPTi5zdHJpbmdpZnkoe2lkOlksLi4uJH0pKX0pfWFzeW5jIGZ1bmN0aW9uIEUxKCQsSil7bGV0IFE9YXdhaXQgZDkoe2NvbW1hbmQ6JH0sSj8uc2lnbmFsKTtyZXR1cm57c3Rkb3V0OlEuc3Rkb3V0Pz8iIixzdGRlcnI6US5zdGRlcnI/PyIiLGV4aXRDb2RlOlEuZXhpdENvZGU/PzF9fWFzeW5jIGZ1bmN0aW9uIGgzKCQsSil7bGV0IFE9YXdhaXQgZDkoe3VpOiR9LEo/LnNpZ25hbCk7aWYoUS5lcnJvcil0aHJvdyBFcnJvcihRLmVycm9yKTtyZXR1cm4gUS5zdGF0dXM/P251bGx9ZnVuY3Rpb24geTAoJCl7bGV0IEo9e29ubWVzc2FnZTpudWxsLG9uZXJyb3I6bnVsbCxjbG9zZTooKT0+e319LFE9ITEsWD1udWxsLEs9bnVsbCxZPSIiLHE9KE4pPT57WSs9Ti5yZXBsYWNlKC9cclxuL2csYApgKTtsZXQgTDt3aGlsZSgoTD1ZLmluZGV4T2YoYAoKYCkpIT09LTEpe2xldCBWPVkuc2xpY2UoMCxMKTtZPVkuc2xpY2UoTCsyKTtsZXQgQz1WLnNwbGl0KGAKYCkuZmlsdGVyKChVKT0+VS5zdGFydHNXaXRoKCJkYXRhOiIpKS5tYXAoKFUpPT5VLnNsaWNlKDUpLnJlcGxhY2UoL14gLywiIikpLmpvaW4oYApgKTtpZihDKUoub25tZXNzYWdlPy4oe2RhdGE6Q30pfX0sRz0oKT0+e2lmKFF8fEspcmV0dXJuO0oub25lcnJvcj8uKCksSz1zZXRUaW1lb3V0KCgpPT57Sz1udWxsLEIoKX0sbiQpfSxCPWFzeW5jKCk9PntpZihRKXJldHVybjt0cnl7bGV0IE49YXdhaXQgbDkoKTtpZihRKXJldHVybjtZPSIiLFg9cyQrKyxCMi5zZXQoWCx7b25EYXRhOnEsb25FbmQ6R30pLE4uc2VuZChKU09OLnN0cmluZ2lmeSh7c3ViOlgscGF0aDokfSkpfWNhdGNoe0coKX19O3JldHVybiBCKCksSi5jbG9zZT0oKT0+e2lmKFE9ITAsSyljbGVhclRpbWVvdXQoSyk7aWYoWCE9PW51bGwpe0IyLmRlbGV0ZShYKTt0cnl7djM/LnNlbmQoSlNPTi5zdHJpbmdpZnkoe3Vuc3ViOlh9KSl9Y2F0Y2h7fVg9bnVsbH19LEp9ZnVuY3Rpb24gazEoJCl7cmV0dXJuYCckeyQucmVwbGFjZSgvJy9nLCInXFwnJyIpfSdgfWZ1bmN0aW9uIGM5KCQpe2xldFtKLFFdPU0obnVsbCksW1gsS109TSgiQVggb2ZmIik7cmV0dXJuIHkoKCk9PntpZighJCl7UShudWxsKSxLKCJBWCBvZmYiKTtyZXR1cm59UShudWxsKSxLKCJBWCB3YWl0aW5nIik7bGV0IFk9eTAoJCk7cmV0dXJuIFkub25tZXNzYWdlPShxKT0+e3RyeXtsZXQgRz1KU09OLnBhcnNlKHEuZGF0YSk7UShHKSxLKFQ1KEcpPyJBWCB1bmF2YWlsYWJsZSI6YCR7Ry5lbGVtZW50cy5sZW5ndGh9IEFYIGVsZW1lbnRzYCl9Y2F0Y2h7SygiQVggcGFyc2UgZXJyb3IiKX19LFkub25lcnJvcj0oKT0+e0soIkFYIHJlY29ubmVjdGluZyIpfSwoKT0+WS5jbG9zZSgpfSxbJF0pLHtzbmFwc2hvdDpKLHN0YXR1czpYfX12YXIgUjM9ejAoe3NuYXBzaG90Om51bGwsc3RhdHVzOiJBWCBvZmYifSksZzM9ejAobnVsbCk7ZnVuY3Rpb24gTDIoKXtyZXR1cm4gVTAoUjMpfWZ1bmN0aW9uIHk1KCl7bGV0ICQ9VTAoZzMpO2lmKCEkKXRocm93IEVycm9yKCJBWCBzZWxlY3Rpb24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpO3JldHVybiAkfXZhciBvOT1jMChmdW5jdGlvbih7ZWxlbWVudDpKLGluZGV4OlEsc2NyZWVuOlgsaGlnaGxpZ2h0ZWQ6SyxzZWxlY3RlZDpZLG9uSGlnaGxpZ2h0OnEsb25TZWxlY3Q6R30pe2xldCBCPW4wKEopLE49RTUoSixRKSxMPWY5KEouZnJhbWUsWCk7aWYoIUwpcmV0dXJuIG51bGw7bGV0IFY9bTkoTik7cmV0dXJuIFooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsImRhdGEtYXgta2V5IjpCLCJkYXRhLWF4LWlkIjpOLmlkLCJkYXRhLWF4LXBhdGgiOk4ucGF0aCwiZGF0YS1heC1sYWJlbCI6Ti5sYWJlbCwiZGF0YS1heC12YWx1ZSI6Ti52YWx1ZSwiZGF0YS1heC1yb2xlIjpOLnJvbGUsImRhdGEtYXgtdHlwZSI6Ti50eXBlLCJkYXRhLWF4LWVuYWJsZWQiOlN0cmluZyhOLmVuYWJsZWQpLCJkYXRhLWF4LWZyYW1lIjp4MyhOLmZyYW1lKSwiZGF0YS1heC1zZWxlY3RlZCI6U3RyaW5nKFkpLCJhcmlhLWxhYmVsIjpKLmxhYmVsfHxWLHRpdGxlOlYsb25DbGljazooKT0+RyhCKSxvbk1vdXNlRW50ZXI6KCk9PnEoQiksb25Nb3VzZUxlYXZlOigpPT5xKG51bGwpLGNsYXNzTmFtZToiYWJzb2x1dGUgYm94LWJvcmRlciBtaW4tdy1weCBtaW4taC1weCBwLTAgcm91bmRlZC1bM3B4XSBib3JkZXIgY3Vyc29yLXBvaW50ZXIgcG9pbnRlci1ldmVudHMtYXV0byIsc3R5bGU6e2xlZnQ6YCR7TC54L1gud2lkdGgqMTAwfSVgLHRvcDpgJHtMLnkvWC5oZWlnaHQqMTAwfSVgLHdpZHRoOmAke0wud2lkdGgvWC53aWR0aCoxMDB9JWAsaGVpZ2h0OmAke0wuaGVpZ2h0L1guaGVpZ2h0KjEwMH0lYCxib3JkZXJDb2xvcjpZPyIjNjBhNWZhIjpLPyIjZmJiZjI0IjoiIzM0ZDM5OSIsYmFja2dyb3VuZDpZPyJyZ2JhKDk2LDE2NSwyNTAsMC4yNCkiOks/InJnYmEoMjQ1LDE1OCwxMSwwLjI4KSI6InJnYmEoMTYsMTg1LDEyOSwwLjEyKSJ9fSl9LCgkLEopPT4kLmluZGV4PT09Si5pbmRleCYmJC5oaWdobGlnaHRlZD09PUouaGlnaGxpZ2h0ZWQmJiQuc2VsZWN0ZWQ9PT1KLnNlbGVjdGVkJiYkLm9uSGlnaGxpZ2h0PT09Si5vbkhpZ2hsaWdodCYmJC5vblNlbGVjdD09PUoub25TZWxlY3QmJiQuc2NyZWVuLndpZHRoPT09Si5zY3JlZW4ud2lkdGgmJiQuc2NyZWVuLmhlaWdodD09PUouc2NyZWVuLmhlaWdodCYmSTUoJC5lbGVtZW50LEouZWxlbWVudCkpO2Z1bmN0aW9uIHI5KCl7bGV0e3NuYXBzaG90OiR9PUwyKCkse2hpZ2hsaWdodGVkS2V5Okosc2VsZWN0ZWRLZXk6USxzZXRIaWdobGlnaHRlZEtleTpYLHNldFNlbGVjdGVkS2V5Okt9PXk1KCk7aWYoISQ/LnNjcmVlbi53aWR0aHx8ISQ/LnNjcmVlbi5oZWlnaHQpcmV0dXJuIG51bGw7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIG92ZXJmbG93LWhpZGRlbiBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjokLmVsZW1lbnRzLm1hcCgoWSxxKT0+e2xldCBHPW4wKFkpO3JldHVybiBaKG85LHtlbGVtZW50OlksaW5kZXg6cSxzY3JlZW46JC5zY3JlZW4saGlnaGxpZ2h0ZWQ6Rz09PUosc2VsZWN0ZWQ6Rz09PVEsb25IaWdobGlnaHQ6WCxvblNlbGVjdDpLfSxHKX0pfSl9ZnVuY3Rpb24gaTkoe2VuZHBvaW50OiQsY2hpbGRyZW46Sn0pe2xldHtzbmFwc2hvdDpRLHN0YXR1czpYfT1jOSgkKSxbSyxZXT1NKG51bGwpLFtxLEddPU0obnVsbCk7eSgoKT0+e2lmKCEkKVkobnVsbCksRyhudWxsKX0sWyRdKTtsZXQgQj1UMSgoKT0+KHtzbmFwc2hvdDpRLHN0YXR1czpYfSksW1EsWF0pLE49VDEoKCk9Pih7aGlnaGxpZ2h0ZWRLZXk6SyxzZWxlY3RlZEtleTpxLHNldEhpZ2hsaWdodGVkS2V5Olksc2V0U2VsZWN0ZWRLZXk6R30pLFtLLHFdKTtyZXR1cm4gWihSMyx7dmFsdWU6QixjaGlsZHJlbjpaKGczLHt2YWx1ZTpOLGNoaWxkcmVuOkp9KX0pfWZ1bmN0aW9uIG45KHtvdmVybGF5RW5hYmxlZDokLHN0cmVhbWluZzpKLG9uVG9nZ2xlT3ZlcmxheTpRfSl7bGV0e3N0YXR1czpYfT1MMigpLFtLLFldPU0oITEpLHE9JCYmSjtyZXR1cm4gWihyMS5CdXR0b24seyJhcmlhLWxhYmVsIjokPyJIaWRlIGFjY2Vzc2liaWxpdHkgb3ZlcmxheSI6IlNob3cgYWNjZXNzaWJpbGl0eSBvdmVybGF5IiwiYXJpYS1wcmVzc2VkIjokLHRpdGxlOlgsb25DbGljazpRLG9uTW91c2VFbnRlcjooKT0+WSghMCksb25Nb3VzZUxlYXZlOigpPT5ZKCExKSxzdHlsZTpxP3tiYWNrZ3JvdW5kOks/InJnYmEoMjU1LDI1NSwyNTUsMC4xMikiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjk1KSJ9OnZvaWQgMCxjaGlsZHJlbjpaKG0wLHtzaXplOjE5LHN0cm9rZVdpZHRoOjJ9KX0pfWZ1bmN0aW9uIGI1KHtjbGFzc05hbWU6JD0iIn0pe3JldHVybiBaKCJhIix7aHJlZjoiaHR0cHM6Ly9leHBvLmRldi9zZXJ2aWNlcy9zaW11bGF0b3JzIix0YXJnZXQ6Il9ibGFuayIscmVsOiJub3JlZmVycmVyIixjbGFzc05hbWU6YGlubGluZS1mbGV4IGgtWzMwcHhdIG1pbi13LTAgaXRlbXMtY2VudGVyIHdoaXRlc3BhY2Utbm93cmFwIHJvdW5kZWQtbWQgcHgtMS41IGZvbnQtbW9ubyB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNjUgbm8tdW5kZXJsaW5lIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUvODUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtd2hpdGUvNjAgJHskfWAudHJpbSgpLCJhcmlhLWxhYmVsIjoiT3BlbiBFQVMgU2ltdWxhdG9yIix0aXRsZToiT3BlbiBFQVMgU2ltdWxhdG9yIixjaGlsZHJlbjoiRUFTIFNpbXVsYXRvciJ9KX1mdW5jdGlvbiBhOSh7b3BlbjokLG9uQ2xpY2s6Sn0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6YGZpeGVkIHRvcC0zIGxlZnQtMyB6LTMwIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHAtMSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMThzX2Vhc2VdICR7JD8ib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUiOiJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIn1gLGNoaWxkcmVuOltaKCJidXR0b24iLHtvbkNsaWNrOkosY2xhc3NOYW1lOiJ3LVszMHB4XSBoLVszMHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLW1kIHRleHQtWyM4ZThlOTNdIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiT3BlbiBkZXZpY2VzIHNpZGViYXIiLCJhcmlhLXByZXNzZWQiOiQsdGl0bGU6IkRldmljZXMiLGNoaWxkcmVuOlooRTAse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSksWihiNSx7fSldfSl9ZnVuY3Rpb24gczkoJCl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKXx8JDw9MClyZXR1cm4iMCBCIjtsZXQgSj0kLzEwNzM3NDE4MjQ7aWYoSj49MSlyZXR1cm5gJHtKLnRvRml4ZWQoSj49MTA/MDoxKX0gR0JgO3JldHVybmAkeygkLzEwNDg1NzYpLnRvRml4ZWQoMCl9IE1CYH1mdW5jdGlvbiBTNSgkKXtsZXQgSj0kLm1hdGNoKC9eKFthLXpBLVpdKyktKC4rKSQvKTtpZighSilyZXR1cm57b3M6JCx2ZXJzaW9uOiIifTtyZXR1cm57b3M6SlsxXSx2ZXJzaW9uOkpbMl0ucmVwbGFjZSgvLS9nLCIuIil9fWZ1bmN0aW9uIHQ5KCQpe3JldHVybiBTNSgkKS52ZXJzaW9ufHwkfWZ1bmN0aW9uIHg1KCQpe2xldHtvczpKLHZlcnNpb246UX09UzUoJCk7cmV0dXJuIFE/YCR7Sn0gJHtRfWA6Sn1mdW5jdGlvbiB2NSh7Y2hyb21lOiQsc2NyZWVuOkosaW50ZXJhY3RpdmU6UT0hMSxvbkJ1dHRvbjpYLG9uQ3Jvd25XaGVlbDpLfSl7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCIsY2hpbGRyZW46WyQuYnV0dG9ucy5tYXAoKFkpPT5aKEpKLHtjaHJvbWU6JCxidXR0b246WSxpbnRlcmFjdGl2ZTpRLG9uQnV0dG9uOlgsb25XaGVlbDpRJiZZLm5hbWU9PT0iZGlnaXRhbC1jcm93biI/Szp2b2lkIDB9LGBidXR0b24tJHtZLm5hbWV9YCkpLCQuY29tcG9zaXRlSW1hZ2U/WigkNix7Y2hyb21lOiQsaW1hZ2U6JC5jb21wb3NpdGVJbWFnZSxyZWN0OiQuYm9keSx6SW5kZXg6MX0pOiQuc2xpY2UmJiQuY29ybmVyP1ooUUose2Nocm9tZTokfSk6bnVsbCxaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIG92ZXJmbG93LWhpZGRlbiBiZy1ibGFjayIsc3R5bGU6ey4uLmYzKCQsJC5zY3JlZW4sMiksYm9yZGVyUmFkaXVzOiRKKCQpfSxjaGlsZHJlbjpKfSldfSl9ZnVuY3Rpb24gJEooJCl7cmV0dXJuYCR7JC5zY3JlZW5SYWRpdXMvJC5zY3JlZW4ud2lkdGgqMTAwfSUgLyAkeyQuc2NyZWVuUmFkaXVzLyQuc2NyZWVuLmhlaWdodCoxMDB9JWB9ZnVuY3Rpb24gSkooe2Nocm9tZTokLGJ1dHRvbjpKLGludGVyYWN0aXZlOlEsb25CdXR0b246WCxvbldoZWVsOkt9KXtsZXRbWSxxXT1NKCExKSxbRyxCXT1NKCExKSxOPVQobnVsbCksTD1UKG51bGwpLFY9VChLKTtWLmN1cnJlbnQ9Syx5KCgpPT57bGV0IFM9TC5jdXJyZW50O2lmKCFTfHwhSylyZXR1cm47bGV0IHg9KHMpPT57cy5wcmV2ZW50RGVmYXVsdCgpLHMuc3RvcFByb3BhZ2F0aW9uKCksVi5jdXJyZW50Py4ocy5kZWx0YVkscy5kZWx0YU1vZGUpfTtyZXR1cm4gUy5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIseCx7cGFzc2l2ZTohMX0pLCgpPT5TLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIix4KX0sWyEhS10pO2xldCBDPVEmJkoudXNhZ2VQYWdlIT1udWxsJiZKLnVzYWdlIT1udWxsLFU9dygoKT0+e2lmKE4uY3VycmVudD09PW51bGwpcmV0dXJuO04uY3VycmVudD1udWxsLEIoITEpLFg/Lih7cGhhc2U6InVwIixidXR0b246Sn0pfSxbSixYXSksTz13KChTKT0+e2lmKFMuYnV0dG9uIT09MCYmUy5wb2ludGVyVHlwZT09PSJtb3VzZSIpcmV0dXJuO1MucHJldmVudERlZmF1bHQoKSxTLnN0b3BQcm9wYWdhdGlvbigpLE4uY3VycmVudD1TLnBvaW50ZXJJZDt0cnl7Uy5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKFMucG9pbnRlcklkKX1jYXRjaHt9QighMCksWD8uKHtwaGFzZToiZG93biIsYnV0dG9uOkp9KX0sW0osWF0pLHo9Si5vblRvcD81OjAsSD1DJiYoWXx8RyksRj0oSD9KLmhvdmVyLng6MCkqMTAwLEE9KEg/Si5ob3Zlci55OjApKjEwMCxiPUcmJkouaW1hZ2VEb3duP0ouaW1hZ2VEb3duOkouaW1hZ2UsRD1DP3tvblBvaW50ZXJEb3duOk8sb25Qb2ludGVyVXA6VSxvblBvaW50ZXJDYW5jZWw6VSxvblBvaW50ZXJFbnRlcjooKT0+cSghMCksb25Qb2ludGVyTGVhdmU6KCk9PntxKCExKSxVKCl9fTp7fTtyZXR1cm4gWigiZGl2Iix7cmVmOkwscm9sZTpDPyJidXR0b24iOnZvaWQgMCwiYXJpYS1sYWJlbCI6Qz9lOShKLm5hbWUpOnZvaWQgMCwiYXJpYS1oaWRkZW4iOkM/dm9pZCAwOiEwLHRpdGxlOkM/ZTkoSi5uYW1lKTp2b2lkIDAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBzZWxlY3Qtbm9uZSIsc3R5bGU6ey4uLmYzKCQsSi5mcmFtZSx6KSx0cmFuc2Zvcm06Rnx8QT9gdHJhbnNsYXRlKCR7Rn0lLCAke0F9JSlgOnZvaWQgMCx0cmFuc2l0aW9uOiJ0cmFuc2Zvcm0gMC4xMnMgZWFzZSIsY3Vyc29yOkM/InBvaW50ZXIiOnZvaWQgMCxwb2ludGVyRXZlbnRzOkM/ImF1dG8iOiJub25lIix0b3VjaEFjdGlvbjoibm9uZSJ9LC4uLkQsY2hpbGRyZW46YiYmWigiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzpKNigkLmlkZW50aWZpZXIsYiksY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCBzZWxlY3Qtbm9uZSIsc3R5bGU6e29iamVjdEZpdDoiZmlsbCIsZmlsdGVyOkcmJiFKLmltYWdlRG93bj8iYnJpZ2h0bmVzcygxLjQpIjp2b2lkIDAsdHJhbnNpdGlvbjoiZmlsdGVyIDAuMTJzIGVhc2UiLFdlYmtpdFVzZXJEcmFnOiJub25lIn19KX0pfWZ1bmN0aW9uIGU5KCQpe3JldHVybiAkLnNwbGl0KCItIikubWFwKChKKT0+Si5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStKLnNsaWNlKDEpKS5qb2luKCIgIil9ZnVuY3Rpb24gUUooe2Nocm9tZTokfSl7aWYoISQuc2xpY2V8fCEkLmNvcm5lcilyZXR1cm4gbnVsbDtsZXR7Ym9keTpKLGNvcm5lcjpRLHNsaWNlOlh9PSQsSz1NYXRoLm1heChKLndpZHRoLVEud2lkdGgqMiwwKSxZPU1hdGgubWF4KEouaGVpZ2h0LVEuaGVpZ2h0KjIsMCkscT1be2tleToidG9wLWxlZnQiLGltYWdlOlgudG9wTGVmdCxyZWN0Ont4OkoueCx5OkoueSx3aWR0aDpRLndpZHRoLGhlaWdodDpRLmhlaWdodH19LHtrZXk6InRvcC1yaWdodCIsaW1hZ2U6WC50b3BSaWdodCxyZWN0Ont4OkoueCtKLndpZHRoLVEud2lkdGgseTpKLnksd2lkdGg6US53aWR0aCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJib3R0b20tbGVmdCIsaW1hZ2U6WC5ib3R0b21MZWZ0LHJlY3Q6e3g6Si54LHk6Si55K0ouaGVpZ2h0LVEuaGVpZ2h0LHdpZHRoOlEud2lkdGgsaGVpZ2h0OlEuaGVpZ2h0fX0se2tleToiYm90dG9tLXJpZ2h0IixpbWFnZTpYLmJvdHRvbVJpZ2h0LHJlY3Q6e3g6Si54K0oud2lkdGgtUS53aWR0aCx5OkoueStKLmhlaWdodC1RLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpRLmhlaWdodH19LHtrZXk6InRvcCIsaW1hZ2U6WC50b3AscmVjdDp7eDpKLngrUS53aWR0aCx5OkoueSx3aWR0aDpLLGhlaWdodDpRLmhlaWdodH19LHtrZXk6ImJvdHRvbSIsaW1hZ2U6WC5ib3R0b20scmVjdDp7eDpKLngrUS53aWR0aCx5OkoueStKLmhlaWdodC1RLmhlaWdodCx3aWR0aDpLLGhlaWdodDpRLmhlaWdodH19LHtrZXk6ImxlZnQiLGltYWdlOlgubGVmdCxyZWN0Ont4OkoueCx5OkoueStRLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpZfX0se2tleToicmlnaHQiLGltYWdlOlgucmlnaHQscmVjdDp7eDpKLngrSi53aWR0aC1RLndpZHRoLHk6Si55K1EuaGVpZ2h0LHdpZHRoOlEud2lkdGgsaGVpZ2h0Oll9fV07cmV0dXJuIFooWjEse2NoaWxkcmVuOnEuZmlsdGVyKChHKT0+Ry5yZWN0LndpZHRoPjAmJkcucmVjdC5oZWlnaHQ+MCkubWFwKChHKT0+WigkNix7Y2hyb21lOiQsaW1hZ2U6Ry5pbWFnZSxyZWN0OkcucmVjdCx6SW5kZXg6MX0sRy5rZXkpKX0pfWZ1bmN0aW9uICQ2KHtjaHJvbWU6JCxpbWFnZTpKLHJlY3Q6USx6SW5kZXg6WH0pe3JldHVybiBaKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOko2KCQuaWRlbnRpZmllcixKKSxjbGFzc05hbWU6ImFic29sdXRlIHNlbGVjdC1ub25lIixzdHlsZTp7Li4uZjMoJCxRLFgpLG9iamVjdEZpdDoiZmlsbCIscG9pbnRlckV2ZW50czoibm9uZSIsV2Via2l0VXNlckRyYWc6Im5vbmUifX0pfWZ1bmN0aW9uIEo2KCQsSil7bGV0IFE9YGdyaWQvYXBpL2RldmljZWtpdC1jaHJvbWU/Y2hyb21lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfSZpbWFnZT0ke2VuY29kZVVSSUNvbXBvbmVudChKKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7UX1gOmoxKFEpfWZ1bmN0aW9uIGYzKCQsSixRKXtyZXR1cm57bGVmdDpqNShKLngsJC5mcmFtZS53aWR0aCksdG9wOmo1KEoueSwkLmZyYW1lLmhlaWdodCksd2lkdGg6ajUoSi53aWR0aCwkLmZyYW1lLndpZHRoKSxoZWlnaHQ6ajUoSi5oZWlnaHQsJC5mcmFtZS5oZWlnaHQpLHpJbmRleDpRfX1mdW5jdGlvbiBqNSgkLEope3JldHVybmAkeyQvSioxMDB9JWB9ZnVuY3Rpb24gUTYoe25hbWU6JCxydW50aW1lOkosY2hyb21lOlEscGxhY2Vob2xkZXJBc3NldDpYLGJ1c3k6SyxidXN5TGFiZWw6WT0iU3RhcnRpbmfigKYiLGVycm9yOnEsb25TdGFydDpHfSl7bGV0IEI9STAoJCksTj1TMVtCXSxMPVg/P251bGwsVj1MP251bGw6UT8/bnVsbCxDPVY/e3dpZHRoOlYuc2NyZWVuLndpZHRoLGhlaWdodDpWLnNjcmVlbi5oZWlnaHR9OkcyKEIsJCksVT1WMihCLEMpLE89TD9aSihCLEwubmFtZSk6Vj9VKlYuZnJhbWUud2lkdGgvVi5zY3JlZW4ud2lkdGg6VSpOLndpZHRoLyhOLndpZHRoLTIqTi5iZXplbFgpLHo9TD97d2lkdGg6TC53aWR0aCxoZWlnaHQ6TC5oZWlnaHR9OlY/e3dpZHRoOlYuZnJhbWUud2lkdGgsaGVpZ2h0OlYuZnJhbWUuaGVpZ2h0fTp7d2lkdGg6Ti53aWR0aCxoZWlnaHQ6Ti5oZWlnaHR9LEg9YCR7ei53aWR0aH0gLyAke3ouaGVpZ2h0fWAsRj0oei53aWR0aC96LmhlaWdodCpYSihCKSkudG9GaXhlZCgyKSxBPUI9PT0idmlzaW9uIj9aKHFKLHt9KTpaKEtKLHt0eXBlOkJ9KTtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtNSBtaW4tdy0wIHctZnVsbCIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIixzdHlsZTp7d2lkdGg6YG1pbigxMDAlLCAke099cHgsICR7Rn1kdmgpYCxtYXhXaWR0aDpPLGFzcGVjdFJhdGlvOkh9LGNoaWxkcmVuOkw/WihZSix7bmFtZTpMLm5hbWUsZmFsbGJhY2s6QX0pOlY/WigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOloodjUse2Nocm9tZTpWfSl9KTpBfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTdweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjokfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpbeDUoSiksIiBTaW11bGF0b3IiXX0pXX0pLHEmJlooImRpdiIse2NsYXNzTmFtZToidGV4dC1kYW5nZXIgdGV4dC1bMTJweF0gZm9udC1tb25vIG1heC13LTkwIHRleHQtY2VudGVyIixjaGlsZHJlbjpxfSksWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkcsZGlzYWJsZWQ6SyxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTUgcHktMiByb3VuZGVkLWZ1bGwgdGV4dC1bMTRweF0gZm9udC1tZWRpdW0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c10gJHtLPyJiZy13aGl0ZS84IHRleHQtd2hpdGUvNTUgY3Vyc29yLWRlZmF1bHQiOiJiZy13aGl0ZS8xMiB0ZXh0LXdoaXRlLzkwIGhvdmVyOmJnLXdoaXRlLzE4IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltLJiZaKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InNpemUtMy41IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMjUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSIsc3R5bGU6e2JvcmRlclRvcENvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOSkifX0pLEs/WToiU3RhcnQiXX0pXX0pfWZ1bmN0aW9uIFpKKCQsSil7aWYoJD09PSJ3YXRjaCIpe2lmKEouaW5jbHVkZXMoInVsdHJhIikpcmV0dXJuIDI1NTtpZihKLmluY2x1ZGVzKCJ3YXRjaC1zZS0iKXx8Si5pbmNsdWRlcygiYXBwbGUtd2F0Y2gtc2UtIikpcmV0dXJuIDIzODtyZXR1cm4gMjUwfWlmKCQ9PT0idmlzaW9uIilyZXR1cm4gMzkwO2lmKCQ9PT0iaXBhZCIpcmV0dXJuIDM0MDtyZXR1cm4gMjgwfWZ1bmN0aW9uIFhKKCQpe2lmKCQ9PT0idmlzaW9uIilyZXR1cm4gMzQ7aWYoJD09PSJpcGFkIilyZXR1cm4gNTA7aWYoJD09PSJ3YXRjaCIpcmV0dXJuIDU2O3JldHVybiA1Mn1mdW5jdGlvbiBLSih7dHlwZTokfSl7bGV0IEo9UzFbJF07cmV0dXJuIFooWjEse2NoaWxkcmVuOltaKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtKLndpZHRofSAke0ouaGVpZ2h0fWAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCIscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pZFlNaWQgbWVldCIsY2hpbGRyZW46W1ooImRlZnMiLHtjaGlsZHJlbjpaKCJsaW5lYXJHcmFkaWVudCIse2lkOiJwbGFjZWhvbGRlci1zY3JlZW4iLHgxOiIwIix5MToiMCIseDI6IjEiLHkyOiIxIixjaGlsZHJlbjpbWigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzZmYThlNiJ9KSxaKCJzdG9wIix7b2Zmc2V0OiI1NSUiLHN0b3BDb2xvcjoiIzViOTNkNiJ9KSxaKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiM1MTg4Y2YifSldfSl9KSxaKCJyZWN0Iix7eDpKLmJlemVsWCx5OkouYmV6ZWxZLHdpZHRoOkoud2lkdGgtMipKLmJlemVsWCxoZWlnaHQ6Si5oZWlnaHQtMipKLmJlemVsWSxyeDpKLmlubmVyUmFkaXVzLGZpbGw6InVybCgjcGxhY2Vob2xkZXItc2NyZWVuKSJ9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46WihNNSx7dHlwZTokfSl9KV19KX1mdW5jdGlvbiBZSih7bmFtZTokLGZhbGxiYWNrOkp9KXtsZXRbUSxYXT1NKCJsb2FkaW5nIik7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46W1EhPT0ibG9hZGVkIiYmSixRIT09ImVycm9yIiYmWigiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzpHSigkKSxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIHNlbGVjdC1ub25lIG9iamVjdC1jb250YWluIixzdHlsZTp7V2Via2l0VXNlckRyYWc6Im5vbmUifSxvbkxvYWQ6KCk9PlgoImxvYWRlZCIpLG9uRXJyb3I6KCk9PlgoImVycm9yIil9KV19KX1mdW5jdGlvbiBxSigpe2xldHt3aWR0aDokLGhlaWdodDpKfT1TMS52aXNpb247cmV0dXJuIFooInN2ZyIse3ZpZXdCb3g6YDAgMCAkeyR9ICR7Sn1gLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwiLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaWRZTWlkIG1lZXQiLGZpbGw6Im5vbmUiLCJhcmlhLWhpZGRlbiI6ITAsY2hpbGRyZW46W1ooImRlZnMiLHtjaGlsZHJlbjpbWigibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLXNoZWxsIix4MToiMCIseTE6IjAiLHgyOiIwIix5MjoiMSIsY2hpbGRyZW46W1ooInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMyODI4MmIifSksWigic3RvcCIse29mZnNldDoiNTQlIixzdG9wQ29sb3I6IiMxMjEyMTQifSksWigic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDcwNzA4In0pXX0pLFooImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1nbGFzcyIseDE6IjAiLHkxOiIwIix4MjoiMSIseTI6IjEiLGNoaWxkcmVuOltaKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMzEzNTNhIn0pLFooInN0b3AiLHtvZmZzZXQ6IjQ4JSIsc3RvcENvbG9yOiIjMGEwYjBkIn0pLFooInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzAxMDEwMiJ9KV19KSxaKCJyYWRpYWxHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItbGVucyIsY3g6IjUwJSIsY3k6IjQ2JSIscjoiNjAlIixjaGlsZHJlbjpbWigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzIwMjgzMiJ9KSxaKCJzdG9wIix7b2Zmc2V0OiI3MiUiLHN0b3BDb2xvcjoiIzA5MGEwZCJ9KSxaKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwMTAxMDIifSldfSldfSksWigicGF0aCIse2Q6Ik05NSAxNzdDOTUgMTE5IDE0NyA4NiAyMTggOTFDMjU3IDk0IDI4NiAxMTEgMzIwIDExMUMzNTQgMTExIDM4MyA5NCA0MjIgOTFDNDkzIDg2IDU0NSAxMTkgNTQ1IDE3N1YyMjJDNTQ1IDI3OCA1MDEgMzExIDQ0MyAzMTBDMzk4IDMwOSAzNzEgMjg2IDM0NSAyNjhDMzI5IDI1NyAzMTEgMjU3IDI5NSAyNjhDMjY5IDI4NiAyNDIgMzA5IDE5NyAzMTBDMTM5IDMxMSA5NSAyNzggOTUgMjIyVjE3N1oiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLXNoZWxsKSIsc3Ryb2tlOiIjM2QzZDQyIixzdHJva2VXaWR0aDoiNyJ9KSxaKCJwYXRoIix7ZDoiTTExNyAxODFDMTE3IDEzNCAxNTcgMTEyIDIyMCAxMTZDMjYwIDExOSAyODcgMTM2IDMyMCAxMzZDMzUzIDEzNiAzODAgMTE5IDQyMCAxMTZDNDgzIDExMiA1MjMgMTM0IDUyMyAxODFWMjE3QzUyMyAyNjMgNDg4IDI4NyA0MzkgMjg3QzM5OSAyODcgMzY5IDI2NCAzNDUgMjUwQzMyOSAyNDAgMzExIDI0MCAyOTUgMjUwQzI3MSAyNjQgMjQxIDI4NyAyMDEgMjg3QzE1MiAyODcgMTE3IDI2MyAxMTcgMjE3VjE4MVoiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLWdsYXNzKSIsc3Ryb2tlOiIjMTcxODFiIixzdHJva2VXaWR0aDoiNSJ9KSxaKCJwYXRoIix7ZDoiTTE0MyAxODZDMTQ1IDE0OCAxNzYgMTM1IDIyNiAxMzhDMjY0IDE0MSAyODkgMTU2IDMyMCAxNTZDMzUxIDE1NiAzNzYgMTQxIDQxNCAxMzhDNDY0IDEzNSA0OTUgMTQ4IDQ5NyAxODZWMjEzQzQ5NyAyNTAgNDY5IDI2NiA0MzIgMjY2QzM5NCAyNjYgMzY5IDI0NiAzNDMgMjM1QzMyOCAyMjkgMzEyIDIyOSAyOTcgMjM1QzI3MSAyNDYgMjQ2IDI2NiAyMDggMjY2QzE3MSAyNjYgMTQzIDI1MCAxNDMgMjEzVjE4NloiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLWxlbnMpIixzdHJva2U6IiMyNjJhMmYiLHN0cm9rZVdpZHRoOiIyIn0pLFooInBhdGgiLHtkOiJNMTUxIDE3MUMxNzkgMTUwIDIxNyAxNDcgMjUxIDE1NE0zODkgMTU0QzQyMyAxNDcgNDYxIDE1MCA0ODkgMTcxIixzdHJva2U6IiM0ZTUzNWEiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCJ9KSxaKCJwYXRoIix7ZDoiTTI3NyAyMzNDMjg5IDIyNCAzMDQgMjE5IDMyMCAyMTlDMzM2IDIxOSAzNTEgMjI0IDM2MyAyMzMiLHN0cm9rZToiIzNiNDA0NiIsc3Ryb2tlV2lkdGg6IjQiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pXX0pfWZ1bmN0aW9uIEdKKCQpe2xldCBKPWBncmlkL2FwaS9kZXZpY2UtcGxhY2Vob2xkZXItYXNzZXQ/bmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7Sn1gOmoxKEopfWZ1bmN0aW9uIHoyKHtvcGVuOiQsd2lkdGg6SixjaGlsZHJlbjpRLHN0eWxlOlgsc2lkZTpLPSJyaWdodCJ9KXtyZXR1cm4gWigiYXNpZGUiLHtjbGFzc05hbWU6YGZpeGVkIHotMzUgbWluLXctMCBvdmVyZmxvdy1oaWRkZW4gYmctcGFuZWwtYmcgdGV4dC13aGl0ZS85MCBiYWNrZHJvcC1ibHVyLVsxOHB4XSBbZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZl0gW3RyYW5zaXRpb246dHJhbnNmb3JtXzAuMjVzX2Vhc2Usb3BhY2l0eV8wLjJzX2Vhc2VdIGZsZXggZmxleC1jb2wgJHtLPT09ImxlZnQiPyJ0b3AtMCBib3R0b20tMCBsZWZ0LTAgcm91bmRlZC1ub25lIGJvcmRlci0wIGJvcmRlci1yIGJvcmRlci13aGl0ZS8xMCBzaGFkb3ctWzhweF8wXzMycHhfcmdiYSgwLDAsMCwwLjM1KV0iOiJ0b3AtMyBib3R0b20tMyByaWdodC0zIHJvdW5kZWQtWzE0cHhdIGJvcmRlciBib3JkZXItd2hpdGUvMTAgc2hhZG93LVswXzEycHhfNDBweF9yZ2JhKDAsMCwwLDAuNTUpXSJ9YCxzdHlsZTp7d2lkdGg6Six0cmFuc2Zvcm06JD8idHJhbnNsYXRlWCgwKSI6Sz09PSJsZWZ0Ij8idHJhbnNsYXRlWCgtMTAwJSkiOiJ0cmFuc2xhdGVYKGNhbGMoMTAwJSArIDI0cHgpKSIsb3BhY2l0eTokPzE6MCxwb2ludGVyRXZlbnRzOiQ/ImF1dG8iOiJub25lIiwuLi5YfSwiYXJpYS1oaWRkZW4iOiEkLGNoaWxkcmVuOlF9KX1mdW5jdGlvbiBVMih7Y2hpbGRyZW46JCxzdHlsZTpKfSl7cmV0dXJuIFooImhlYWRlciIse2NsYXNzTmFtZToiZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yLjUgcHgtMi41IHB5LTEuNSBwbC0zIixzdHlsZTpKLGNoaWxkcmVuOiR9KX1mdW5jdGlvbiBaNih7Y2hpbGRyZW46JH0pe3JldHVybiBaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjokfSl9ZnVuY3Rpb24gaDUoe29uQ2xpY2s6JCxhcmlhTGFiZWw6Sj0iQ2xvc2UgcGFuZWwiLHRpdGxlOlEsaWNvblNpemU6WD0xNn0pe3JldHVybiBaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6JCxjbGFzc05hbWU6ImZsZXggaC1bMzBweF0gdy1bMzBweF0gc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyLW5vbmUgYmctdHJhbnNwYXJlbnQgcC0wIHRleHQtWyM4ZThlOTNdIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjpKLHRpdGxlOlEsY2hpbGRyZW46WihHMCx7c2l6ZTpYLHN0cm9rZVdpZHRoOjJ9KX0pfWZ1bmN0aW9uIFg2KCQsSil7bGV0W1EsWF09TShudWxsKTtyZXR1cm4geSgoKT0+e2lmKCFKfHwhJClyZXR1cm47bGV0IEs9ITEsWT1hc3luYygpPT57dHJ5e2xldCBCPWF3YWl0KGF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKCFLKVgoQil9Y2F0Y2h7fX07WSgpO2xldCBxPXNldEludGVydmFsKFksNTAwMCk7cmV0dXJuKCk9PntLPSEwLGNsZWFySW50ZXJ2YWwocSl9fSxbJCxKXSksUX1mdW5jdGlvbiBLNih7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPT09MClyZXR1cm4gbnVsbDtsZXR7ZXN0aW1hdGVkQWRkaXRpb25hbDpKLGF2YWlsYWJsZUJ5dGVzOlEsdG90YWxCeXRlczpYLHJ1bm5pbmdTaW11bGF0b3JzOkt9PSQsWT1NYXRoLm1heCgwLE1hdGgubWluKDEsMS1RL1gpKSxxPUsrSixHPUo9PT0wPyIjZTY2IjpKPD0xPyIjZTlhMTNiIjoiIzNiMyIsQj1ZPjAuOT8iI2U2NiI6WT4wLjc1PyIjZTlhMTNiIjoiIzNiMyI7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiaW5saW5lLWZsZXggbWF4LXctZnVsbCBtaW4tdy0wIGZsZXgtbm93cmFwIGl0ZW1zLWNlbnRlciBnYXAtMS41IG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcCBweC0yIHB5LVszcHhdIHJvdW5kZWQtZnVsbCBiZy1bIzEwMTAxMF0gYm9yZGVyIGJvcmRlci1bIzIyMl0gZm9udC1tb25vIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNzAgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1bM3B4XSBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6R319KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIHRydW5jYXRlIixjaGlsZHJlbjpbWigic3BhbiIse2NoaWxkcmVuOltLLCIvIixxLCIgc2ltcyJdfSksWigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS80MCIsY2hpbGRyZW46IiDCtyAifSksWigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSIsY2hpbGRyZW46W3M5KFEpLCIgZnJlZSJdfSldfSksWigic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJtbC0wLjUgdy03IGgtWzNweF0gc2hyaW5rLTAgYmctWyMxYzFjMWNdIHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIGlubGluZS1ibG9jayIsY2hpbGRyZW46Wigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgaC1mdWxsIHRyYW5zaXRpb24tW3dpZHRoLGJhY2tncm91bmRdIGR1cmF0aW9uLTMwMCBlYXNlLW91dCIsc3R5bGU6e3dpZHRoOmAkeyhZKjEwMCkudG9GaXhlZCgxKX0lYCxiYWNrZ3JvdW5kOkJ9fSl9KV19KX1mdW5jdGlvbiBZNih7dHlwZTokLHNpemU6Sj0yMCxzY3JlZW5PbjpRPSExfSl7bGV0IFg9e3dpZHRoOkosaGVpZ2h0Okosdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MS42LHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifTtzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gWigic3ZnIix7Li4uWCxjaGlsZHJlbjpbUSYmWigicmVjdCIse3g6IjUiLHk6IjMiLHdpZHRoOiIxNSIsaGVpZ2h0OiIxOSIscng6IjEuNjUiLGZpbGw6IiM0N2I3ZmYiLHN0cm9rZToibm9uZSIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLXNjcmVlbi1vbiJ9KSxaKCJyZWN0Iix7eDoiNCIseToiMi41Iix3aWR0aDoiMTYiLGhlaWdodDoiMTkiLHJ4OiIyLjUifSksWigibGluZSIse3gxOiIxMiIseTE6IjE4LjUiLHgyOiIxMiIseTI6IjE4LjUifSldfSk7Y2FzZSJ3YXRjaCI6cmV0dXJuIFooInN2ZyIsey4uLlgsY2hpbGRyZW46W1ooInJlY3QiLHt4OiI2LjUiLHk6IjciLHdpZHRoOiIxMSIsaGVpZ2h0OiIxMCIscng6IjMifSksWigicGF0aCIse2Q6Ik04LjUgN2wuNi0zLjJBMS41IDEuNSAwIDAgMSAxMC42IDIuNWgyLjhhMS41IDEuNSAwIDAgMSAxLjUgMS4zTDE1LjUgNyJ9KSxaKCJwYXRoIix7ZDoiTTguNSAxN2wuNiAzLjJhMS41IDEuNSAwIDAgMCAxLjUgMS4zaDIuOGExLjUgMS41IDAgMCAwIDEuNS0xLjNsLjYtMy4yIn0pXX0pO2Nhc2UidmlzaW9uIjpyZXR1cm4gWigic3ZnIix7Li4uWCxjaGlsZHJlbjpaKCJwYXRoIix7ZDoiTTMgMTFhNCA0IDAgMCAxIDQtNGgxMGE0IDQgMCAwIDEgNCA0djIuNWEyLjUgMi41IDAgMCAxLTIuNSAyLjVjLTEuOCAwLTIuNS0xLjItMy41LTEuOC0uOS0uNS0xLjYtLjctMi41LS43cy0xLjYuMi0yLjUuN2MtMSAuNi0xLjcgMS44LTMuNSAxLjhBMi41IDIuNSAwIDAgMSAzIDEzLjV6In0pfSk7ZGVmYXVsdDpyZXR1cm4gWigic3ZnIix7Li4uWCxjaGlsZHJlbjpbUSYmWigicmVjdCIse3g6IjYiLHk6IjMiLHdpZHRoOiIxMSIsaGVpZ2h0OiIxOSIscng6IjIiLGZpbGw6IiM0N2I3ZmYiLHN0cm9rZToibm9uZSIsImRhdGEtdGVzdGlkIjoiZGV2aWNlLWdseXBoLXNjcmVlbi1vbiJ9KSxaKCJyZWN0Iix7eDoiNi41Iix5OiIyLjUiLHdpZHRoOiIxMSIsaGVpZ2h0OiIxOSIscng6IjIuOCJ9KSxaKCJsaW5lIix7eDE6IjEwLjUiLHkxOiI1Iix4MjoiMTMuNSIseTI6IjUifSldfSl9fWZ1bmN0aW9uIHE2KHtkZXZpY2U6JCxhY3RpdmU6SixzdGFydGluZzpRLHNodXR0aW5nRG93bjpYLG9uU2VsZWN0Okssb25TaHV0ZG93bjpZfSl7bGV0IHE9JC5oZWxwZXIsRz0kLnN0YXRlPT09IkJvb3RlZCIsQj1JMCgkLm5hbWUpLE49dDkoJC5ydW50aW1lKSxMPXE/IlN0cmVhbWluZyI6UT9HPyJTdGFydGluZ+KApiI6IkJvb3RpbmfigKYiOlg/IlNodXR0aW5nIGRvd27igKYiOkc/IkJvb3RlZCI6bnVsbCxWPXE/IiMzNGQzOTkiOkc/IiNlOWExM2IiOm51bGwsQz1xfHxHLFU9cT9KPyJiZy1bIzI2MzY0Y10iOiJiZy1bIzIwMmIzYV0iOko/ImJnLXdoaXRlLzE1IjoiYmctd2hpdGUvNiIsTz1xPyJ0ZXh0LVsjZDJlN2ZmXSI6Sj8idGV4dC13aGl0ZS85MCI6InRleHQtd2hpdGUvNTUiO3JldHVybiBaKCJkaXYiLHtyb2xlOiJidXR0b24iLHRhYkluZGV4OjAsImFyaWEtcHJlc3NlZCI6SixvbkNsaWNrOkssb25LZXlEb3duOih6KT0+e2lmKHoua2V5PT09IkVudGVyInx8ei5rZXk9PT0iICIpei5wcmV2ZW50RGVmYXVsdCgpLEsoKX0sY2xhc3NOYW1lOmBncm91cCByZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEyc10gJHtKPyJiZy13aGl0ZS8xMCB0ZXh0LXdoaXRlIjoidGV4dC13aGl0ZS85MCBob3ZlcjpiZy13aGl0ZS84In1gLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6YHJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiAke1V9YCxjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZTpPLGNoaWxkcmVuOlooWTYse3R5cGU6QixzY3JlZW5PbjpCb29sZWFuKHEpfSl9KSxWJiYhcSYmWigic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAuNSByaWdodC0wLjUgc2l6ZS0xLjUgcm91bmRlZC1mdWxsIHJpbmctMiByaW5nLVsjMWMxYzFlXSIsc3R5bGU6e2JhY2tncm91bmQ6Vn19KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSB0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIGxlYWRpbmctdGlnaHQiLGNoaWxkcmVuOiQubmFtZX0pLEwmJlooImRpdiIse2NsYXNzTmFtZTpgdHJ1bmNhdGUgdGV4dC1bMTFweF0gbGVhZGluZy10aWdodCAke3E/InRleHQtWyMzNGQzOTldIjpKPyJ0ZXh0LXdoaXRlLzc1IjoidGV4dC13aGl0ZS80NSJ9YCxjaGlsZHJlbjpMfSldfSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy10cmFpbGluZy1zbG90IixjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIHctOCBoLTYgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSByaWdodC0wIHRleHQtWzExcHhdIGZvbnQtbW9ubyB0YWJ1bGFyLW51bXMgW3RyYW5zaXRpb246b3BhY2l0eV8wLjEyc10gJHtKPyJ0ZXh0LXdoaXRlLzg1IjoidGV4dC13aGl0ZS80MCJ9ICR7Qz8iZ3JvdXAtaG92ZXI6b3BhY2l0eS0wIGdyb3VwLWZvY3VzLXdpdGhpbjpvcGFjaXR5LTAiOiIifWAsY2hpbGRyZW46Tn0pLEMmJlooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsdGl0bGU6WD8iU2h1dHRpbmcgZG93buKApiI6IlNodXQgZG93biBzaW11bGF0b3IiLCJhcmlhLWxhYmVsIjoiU2h1dCBkb3duIHNpbXVsYXRvciIsb25DbGljazooeik9Pnt6LnByZXZlbnREZWZhdWx0KCksei5zdG9wUHJvcGFnYXRpb24oKSxZKCl9LGRpc2FibGVkOlgsY2xhc3NOYW1lOmBhYnNvbHV0ZSByaWdodC0wIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTUgcm91bmRlZC1tZCBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZm9jdXMtdmlzaWJsZTpvcGFjaXR5LTEwMCBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTJzLGJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdICR7Sj8idGV4dC13aGl0ZS84MCBob3ZlcjpiZy13aGl0ZS8yMCI6InRleHQtd2hpdGUvNzAgaG92ZXI6Ymctd2hpdGUvMTIgaG92ZXI6dGV4dC13aGl0ZSJ9YCxjaGlsZHJlbjpaKEcwLHtzaXplOjEzLHN0cm9rZVdpZHRoOjIuMn0pfSldfSldfSl9dmFyIEgyPSJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcpIixtMz0idmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zcGFyZW50KSI7dmFyIFZKPTEyO2Z1bmN0aW9uIEc2KHtvcGVuOiQsb25DbG9zZTpKLHdpZHRoOlEsc2lkZTpYPSJyaWdodCIsZGV2aWNlczpLLHRvdGFsOlk9MCxoYXNNb3JlOnE9ITEsb25Mb2FkTW9yZTpHLG9uTG9hZEFsbDpCLG9uUmVzZXRQYWdlOk4sc2VsZWN0ZWRVZGlkOkwsb25TZWxlY3Q6VixzdGFydGluZzpDLHNodXR0aW5nRG93bjpVLG9uU2h1dGRvd246T30pe2xldCBIPSh0eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXyk/LmdyaWRNZW1vcnlFbmRwb2ludD8/KHR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDpqMSgiZ3JpZC9hcGkvbWVtb3J5IikpLEY9WDYoSCwkKSxbQSxiXT1NKCIiKSxEPVQxKCgpPT57bGV0IGc9QS50cmltKCkudG9Mb3dlckNhc2UoKTtpZighZ3x8IUspcmV0dXJuIEs7cmV0dXJuIEsuZmlsdGVyKCh1KT0+dS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZyl8fHg1KHUucnVudGltZSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhnKSl9LFtLLEFdKSxTPVQoITEpO3koKCk9PntsZXQgZz0hIUEudHJpbSgpO2lmKGcmJnEpQj8uKCk7ZWxzZSBpZighZyYmUy5jdXJyZW50KU4/LigpO1MuY3VycmVudD1nfSxbQSxxLEIsTl0pO2xldCB4PVQobnVsbCk7cmV0dXJuIFooejIse29wZW46JCx3aWR0aDpRLHNpZGU6WCxzdHlsZTp7YmFja2dyb3VuZENvbG9yOkgyfSxjaGlsZHJlbjpbWihVMix7c3R5bGU6e2p1c3RpZnlDb250ZW50OiJmbGV4LXN0YXJ0IixwYWRkaW5nTGVmdDoxNixwYWRkaW5nVG9wOjE2LGdhcDo0fSxjaGlsZHJlbjpbWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkosY2xhc3NOYW1lOiJmbGV4IGgtWzMwcHhdIHctWzMwcHhdIHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci1ub25lIGJnLXRyYW5zcGFyZW50IHRleHQtWyM4ZThlOTNdIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiQ2xvc2UgZGV2aWNlcyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjohMCx0aXRsZToiRGV2aWNlcyIsY2hpbGRyZW46WihFMCx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxaKGI1LHt9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6InB4LTQgcGItMiBwdC0wLjUgc2hyaW5rLTAiLGNoaWxkcmVuOlooImxhYmVsIix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgaC04IHJvdW5kZWQtbGcgYmctd2hpdGUvNiBmb2N1cy13aXRoaW46Ymctd2hpdGUvMTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEyc10iLGNoaWxkcmVuOltaKG0yLHtzaXplOjE0LHN0cm9rZVdpZHRoOjIsY2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIHNocmluay0wIn0pLFooImlucHV0Iix7dmFsdWU6QSxvbkNoYW5nZTooZyk9PmIoZy50YXJnZXQudmFsdWUpLHBsYWNlaG9sZGVyOiJTZWFyY2giLGNsYXNzTmFtZToibWluLXctMCBmbGV4LTEgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgb3V0bGluZS1ub25lIHRleHQtWzEzcHhdIHRleHQtd2hpdGUvOTAgcGxhY2Vob2xkZXI6dGV4dC13aGl0ZS80MCJ9KSxBJiZaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLCJhcmlhLWxhYmVsIjoiQ2xlYXIgc2VhcmNoIixvbkNsaWNrOigpPT5iKCIiKSxjbGFzc05hbWU6InNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtNCByb3VuZGVkLWZ1bGwgYmctd2hpdGUvMTUgdGV4dC13aGl0ZS83MCBob3ZlcjpiZy13aGl0ZS8yNSIsY2hpbGRyZW46WihHMCx7c2l6ZTo5LHN0cm9rZVdpZHRoOjN9KX0pXX0pfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBmbGV4LTEgbWluLWgtMCIsY2hpbGRyZW46W1ooImRpdiIse3JlZjp4LG9uU2Nyb2xsOigpPT57aWYoQS50cmltKCl8fCFxfHwhRylyZXR1cm47bGV0IGc9eC5jdXJyZW50O2lmKCFnKXJldHVybjtpZihnLnNjcm9sbFRvcCtnLmNsaWVudEhlaWdodD49Zy5zY3JvbGxIZWlnaHQtMjQwKUcoKX0sY2xhc3NOYW1lOiJoLWZ1bGwgbWluLWgtMCBvdmVyZmxvdy15LWF1dG8gcHgtNCBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOkQ9PT1udWxsP1ooQkose30pOkQubGVuZ3RoPT09MD9aKCJkaXYiLHtjbGFzc05hbWU6InB4LTIgcHktNiB0ZXh0LXdoaXRlLzQwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjpBPyJObyBtYXRjaGluZyBzaW11bGF0b3JzLiI6Ik5vIGlPUyBzaW11bGF0b3JzIGF2YWlsYWJsZS4ifSk6WihaMSx7Y2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToicHQtMSBwYi0xIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS80MCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSIsY2hpbGRyZW46IkF2YWlsYWJsZSJ9KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBwYi0xIixjaGlsZHJlbjpELm1hcCgoZyk9PloocTYse2RldmljZTpnLGFjdGl2ZTpnLmRldmljZT09PUwsc3RhcnRpbmc6ISFDW2cuZGV2aWNlXSxzaHV0dGluZ0Rvd246ISFVW2cuZGV2aWNlXSxvblNlbGVjdDooKT0+VihnLmRldmljZSksb25TaHV0ZG93bjooKT0+TyhnLmRldmljZSl9LGcuZGV2aWNlKSl9KSwhQSYmcSYmWigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB5LTIgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS8zNSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46Sz9gJHtLLmxlbmd0aH0gb2YgJHtZfWA6bnVsbH0pXX0pfSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtdG9wLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSIsc3R5bGU6e2JhY2tncm91bmQ6YGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICR7SDJ9IDAlLCAke20zfSAxMDAlKWB9fSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtYm90dG9tLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSIsc3R5bGU6e2JhY2tncm91bmQ6YGxpbmVhci1ncmFkaWVudCh0byB0b3AsICR7SDJ9IDAlLCAke20zfSAxMDAlKWB9fSldfSksWihMSix7cmVwb3J0OkZ9KV19KX1mdW5jdGlvbiBCSigpe3JldHVybiBaKFoxLHtjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3Qtc2tlbGV0b24iLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IHBiLTEiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBzaW11bGF0b3JzIiwiYXJpYS1idXN5IjoidHJ1ZSIsY2hpbGRyZW46QXJyYXkuZnJvbSh7bGVuZ3RoOlZKfSwoJCxKKT0+WihOSix7aW5kZXg6Sn0sSikpfSldfSl9ZnVuY3Rpb24gTkooe2luZGV4OiR9KXtsZXQgSj1bInctWzYyJV0iLCJ3LVs3NCVdIiwidy1bNTglXSIsInctWzcwJV0iXVskJTRdLFE9WyJ3LVs0MiVdIiwidy1bMzYlXSIsInctWzQ4JV0iLCJ3LVszMiVdIl1bJCU0XSxYPVsidy03Iiwidy02Iiwidy04Il1bJCUzXTtyZXR1cm4gWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy1za2VsZXRvbiIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgc2VsZWN0LW5vbmUiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiBiZy13aGl0ZS82IixjaGlsZHJlbjpaKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTQgcm91bmRlZC1bNHB4XSBiZy13aGl0ZS9bMC4xMl0ifSl9KSxaKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6YGgtMyByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMTJdICR7Sn1gfSksWigic3BhbiIse2NsYXNzTmFtZTpgaC0yLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSAke1F9YH0pXX0pLFooInNwYW4iLHtjbGFzc05hbWU6YHNocmluay0wIGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0gJHtYfWB9KV19KX1mdW5jdGlvbiBMSih7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPD0wKXJldHVybiBudWxsO3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHB4LTMgcHktMiBmbGV4IGp1c3RpZnktY2VudGVyIixjaGlsZHJlbjpaKEs2LHtyZXBvcnQ6JH0pfSl9ZnVuY3Rpb24gUjUoe3BhbmVsV2lkdGg6JCx2aXNpYmxlOkosb25Qb2ludGVyRG93bjpRLGFyaWFMYWJlbDpYLHNpZGU6Sz0icmlnaHQifSl7bGV0W1kscV09TSghMSksW0csQl09TSghMSksTj1ZfHxHLEw9KEs9PT0ibGVmdCI/MDoxMikrJC05O3JldHVybiBaKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLWxhYmVsIjpYLCJhcmlhLWhpZGRlbiI6IUosb25Qb2ludGVyRG93bjooQyk9PntCKCEwKSxRKEMpfSxvblBvaW50ZXJVcDooKT0+QighMSksb25Qb2ludGVyQ2FuY2VsOigpPT5CKCExKSxvblBvaW50ZXJFbnRlcjooKT0+cSghMCksb25Qb2ludGVyTGVhdmU6KCk9PnEoITEpLGNsYXNzTmFtZTpgZml4ZWQgJHtLPT09ImxlZnQiPyJ0b3AtMCBib3R0b20tMCI6InRvcC0zIGJvdHRvbS0zIn0gdy00IHotMzYgY3Vyc29yLWNvbC1yZXNpemUgdG91Y2gtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwICR7Sj8ib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byI6Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIn1gLHN0eWxlOks9PT0ibGVmdCI/e2xlZnQ6TH06e3JpZ2h0Okx9LGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0wIGJvdHRvbS0wIGxlZnQtMS8yIHctcHggcG9pbnRlci1ldmVudHMtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTUwICR7Tj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifWAsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMC41cHgpIixiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDMwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSA3MCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSkifX0pLFooImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB3LTEgaC03IHJvdW5kZWQteHMgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHotMSBwb2ludGVyLWV2ZW50cy1ub25lIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSxiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7Tj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifSAke0c/ImJnLVsjOWE5YTllXSI6ImJnLVsjNmU2ZTcyXSJ9YH0pXX0pfWZ1bmN0aW9uIFY2KCl7bGV0WyQsSl09TSgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIHkoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgUT13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIiksWD0oKT0+SihRLm1hdGNoZXMpO3JldHVybiBYKCksUS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFgpLCgpPT5RLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWCl9LFtdKSwkfWZ1bmN0aW9uIGc1KCl7bGV0WyQsSl09TSgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4geSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBRPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLFg9KCk9PkooUS5tYXRjaGVzKTtyZXR1cm4gWCgpLFEuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixYKSwoKT0+US5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFgpfSxbXSksJH12YXIgQjY9MjgwO3ZhciBwMz0id2lkdGggNzBtcyBsaW5lYXIiLHUzPSJ3aWR0aCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLE42PSJwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIsTDY9ImN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIixtNT0iY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsejY9ImxpbmVhcigwLCAwLjMyIDklLCAwLjYyIDE4JSwgMC44NSAyNyUsIDEuMDEgMzYlLCAxLjA3IDQ1JSwgMS4wNSA1NiUsIDEuMDIgNzAlLCAxKSIsVTY9IjAuMTZzIixINj0iMC4ycyIsQzY9NSxGNj17aWRsZToxLGhvdmVyOjEuMDksZHJhZzoxLjEyfSxPNj17aWRsZToiIzY4NmU3OCIsaG92ZXI6IiNiN2JiYzIiLGRyYWc6IiNmNGY2ZmEifSxrNj17aWRsZToyLjY1LGhvdmVyOjQuMTUsZHJhZzo0LjY1fSxBNj17aWRsZTowLjM4LGhvdmVyOjAuODYsZHJhZzoxfSxmNT1udWxsO2Z1bmN0aW9uIE02KCl7aWYoZjUhPW51bGwpcmV0dXJuIGY1O2lmKHR5cGVvZiBDU1M+InUifHx0eXBlb2YgQ1NTLnN1cHBvcnRzIT09ImZ1bmN0aW9uIilyZXR1cm4hMTtyZXR1cm4gZjU9Q1NTLnN1cHBvcnRzKCJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIiwibGluZWFyKDAsIDEpIiksZjV9dmFyIHpKPTQwLFc2PTE0LF82PTI0MCxQNj0zMCxENj0wLjE1LFVKPTgwLHc2PTE1MCxUNj0yNTAsbDM9InNlcnZlLXNpbTpzaW11bGF0b3ItZnJhbWUtc2NhbGUiO2Z1bmN0aW9uIGQzKCQsSixRLFgpe2xldCBLPSQqMyxZPUo+MD9NYXRoLm1heCgxODAsSi00OCk6SyxxPVE+MCYmTnVtYmVyLmlzRmluaXRlKFgpJiZYPjA/TWF0aC5tYXgoMTgwLChRLTEzNikqWCk6SztyZXR1cm4gTWF0aC5tYXgoMTgwLE1hdGgubWluKEssWSxxKSl9ZnVuY3Rpb24gYTAoJCxKLFEsWCxLKXtsZXQgWT1kMyhKLFEsWCxLKSxxPU1hdGgubWluKDI4MCxZKTtyZXR1cm4gTWF0aC5taW4oWSxNYXRoLm1heChxLCQpKX1mdW5jdGlvbiBJNigkLEosUSxYLEspe2xldCBZPU51bWJlci5pc0Zpbml0ZShLKT8kKks6JDtyZXR1cm4gYTAoWSwkLEosUSxYKX1mdW5jdGlvbiBwNSgkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAkO2xldCBKPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWF4KDEsd2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpOjE7cmV0dXJuIE1hdGgucm91bmQoJCpKKS9KfWZ1bmN0aW9uIGMzKCQsSil7aWYoJDw9MHx8Sjw9MClyZXR1cm4gMDtsZXQgUT0wLjU1LFg9JCpKKlEvKEorUSokKTtyZXR1cm4gTWF0aC5taW4oekosWCl9ZnVuY3Rpb24gRTYoJCxKLFEpe2xldCBYPSQsSz1RO2ZvcihsZXQgWSBvZiBKKXtsZXQgcT1NYXRoLmFicygkLVkpO2lmKHE8SylYPVksSz1xfXJldHVybiBYfWZ1bmN0aW9uIHk2KCQpe2xldHtmcm9tOkosdG86USx2ZWxvY2l0eTpYLHN0aWZmbmVzczpLLGRhbXBpbmc6WSxvblVwZGF0ZTpxLG9uQ29tcGxldGU6R309JCxCPTAuNCxOPTAuMDMzMzMzMzMzMzMzMzMzMzMsTD1KLFY9WCxDPXBlcmZvcm1hbmNlLm5vdygpLFU9MCxPPSExLHo9KEgpPT57aWYoTylyZXR1cm47bGV0IEY9TWF0aC5taW4oKEgtQykvMTAwMCwwLjAzMzMzMzMzMzMzMzMzMzMzKTtDPUg7bGV0IEE9LUsqKEwtUSktWSpWO2lmKFYrPUEqRixMKz1WKkYsTWF0aC5hYnMoVik8MC40JiZNYXRoLmFicyhMLVEpPDAuNCl7cShRKSxHPy4oKTtyZXR1cm59cShMKSxVPXJlcXVlc3RBbmltYXRpb25GcmFtZSh6KX07cmV0dXJuIFU9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHopLCgpPT57aWYoTz0hMCxVKWNhbmNlbEFuaW1hdGlvbkZyYW1lKFUpfX1mdW5jdGlvbiBiNigkKXtpZigkLmxlbmd0aDwyKXJldHVybiAwO2xldCBKPSRbJC5sZW5ndGgtMV0sUT0kWzBdO2ZvcihsZXQgSz0kLmxlbmd0aC0xO0s+PTA7Sy0tKWlmKEoudC0kW0tdLnQ+PVVKKXtRPSRbS107YnJlYWt9bGV0IFg9KEoudC1RLnQpLzEwMDA7cmV0dXJuIFg+MD8oSi54LVEueCkvWDowfXZhciBTNj0iZHJvcC1zaGFkb3coMCAwLjVweCAxcHggcmdiYSgwLDAsMCwwLjEpKSBkcm9wLXNoYWRvdygwIDJweCA1cHggcmdiYSgwLDAsMCwwLjEzKSkiO2Z1bmN0aW9uIEhKKHthcmM6JCxwaGFzZTpKLHJlZHVjZWRNb3Rpb246USxoaWdoQ29udHJhc3Q6WCxmb2N1c1Zpc2libGU6S30pe2xldCBZPUohPT0iaWRsZSIscT1YPzEuMTI6MSxHPVE/MTpGNltKXSxCPWs2W0pdKnEsTj1YPzE6QTZbSl0sTD1ZP1U2Okg2LFY9WT9MNjptNSxDPVkmJk02KCk/ejY6VixVPVE/Im5vbmUiOmB0cmFuc2Zvcm0gJHtMfSAke0N9YCxPPVE/Im5vbmUiOmBzdHJva2UgJHtMfSAke1Z9LCBzdHJva2Utd2lkdGggJHtMfSAke1Z9YCx6PSQudmlld0JveFNpemUsSD0kLmQsRj17dHJhbnNmb3JtOmB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoJHtHfSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOlUsd2lsbENoYW5nZTpRP3ZvaWQgMDoidHJhbnNmb3JtIixiYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiIsV2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4ifTtyZXR1cm4gWigic3ZnIix7d2lkdGg6eixoZWlnaHQ6eix2aWV3Qm94OmAwIDAgJHt6fSAke3p9YCxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLHNoYXBlUmVuZGVyaW5nOiJnZW9tZXRyaWNQcmVjaXNpb24iLHN0eWxlOntkaXNwbGF5OiJibG9jayIsb3ZlcmZsb3c6InZpc2libGUiLGN1cnNvcjoiaW5oZXJpdCIsdG91Y2hBY3Rpb246Im5vbmUiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbWigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W1ooInBhdGgiLHtkOkgsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDEwLCAxMzIsIDI1NSwgMC45NSkiLHN0cm9rZVdpZHRoOihDNioyKzYpKnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpLPzAuOTU6MCx0cmFuc2l0aW9uOlE/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7bTV9YCxmaWx0ZXI6ImRyb3Atc2hhZG93KDAgMCAycHggcmdiYSgxMCwxMzIsMjU1LDAuNTUpKSBkcm9wLXNoYWRvdygwIDAgNHB4IHJnYmEoMTAsMTMyLDI1NSwwLjMyKSkifX0pLFooInBhdGgiLHtkOkgsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIixzdHJva2VXaWR0aDoxLjUqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Oks/MC43OjAsdHJhbnNpdGlvbjpRPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke201fWB9fSldfSksWigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOkYsY2hpbGRyZW46WigiZyIse3N0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W1ooInBhdGgiLHtkOkgsc3Ryb2tlOiIjMzQzNjNiIixzdHJva2VXaWR0aDpCKzIuMipxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6TWF0aC5taW4oMSxOKzAuMDgpLHRyYW5zaXRpb246YCR7T30sIG9wYWNpdHkgJHtMfSAke1Z9YCxmaWx0ZXI6UzZ9fSksWigicGF0aCIse2Q6SCxzdHJva2U6TzZbSl0sc3Ryb2tlV2lkdGg6QixzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Ok4sdHJhbnNpdGlvbjpgJHtPfSwgb3BhY2l0eSAke0x9ICR7Vn1gLGZpbHRlcjpTNn19KV19KX0pXX0pfWZ1bmN0aW9uIHg2KHtzaW11bGF0b3JSZXNpemU6JCxkZXZpY2VUeXBlOkosc3RyZWFtQ29uZmlnOlEsY29udGFpbmVyV2lkdGg6WCxjb250YWluZXJIZWlnaHQ6S30pe2xldCBZPWc1KCkscT1WNigpLFtHLEJdPU0oITEpLE49VDEoKCk9PlAzKHt0eXBlOkosY29uZmlnOlE/P251bGwsY29udGFpbmVyV2lkdGg6WCxjb250YWluZXJIZWlnaHQ6S30pLFtKLFEsWCxLXSksTD0kLmlzUmVzaXppbmd8fCQuaXNJbmVydGlhPyJkcmFnIjokLmhhbmRsZUhvdmVyZWQ/ImhvdmVyIjoiaWRsZSI7cmV0dXJuIFooImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtbGFiZWwiOiJSZXNpemUgc2ltdWxhdG9yIHdpZHRoLiBEcmFnIHRoZSBjb3JuZXIgb3IgdXNlIExlZnQgYW5kIFJpZ2h0IEFycm93IGtleXM7IGhvbGQgU2hpZnQgZm9yIGxhcmdlciBzdGVwcy4iLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLXZhbHVlbWluIjpNYXRoLnJvdW5kKCQubWluV2lkdGgpLCJhcmlhLXZhbHVlbWF4IjpNYXRoLnJvdW5kKCQubWF4V2lkdGgpLCJhcmlhLXZhbHVlbm93IjpNYXRoLnJvdW5kKCQuY29tbWl0dGVkV2lkdGgpLHRhYkluZGV4OjAscmVmOiQuaGFuZGxlUmVmLG9uS2V5RG93bjokLm9uS2V5RG93bixvblBvaW50ZXJEb3duOiQub25Qb2ludGVyRG93bixvblBvaW50ZXJNb3ZlOiQub25Qb2ludGVyTW92ZSxvblBvaW50ZXJVcDokLm9uUG9pbnRlckVuZCxvblBvaW50ZXJDYW5jZWw6JC5vblBvaW50ZXJFbmQsb25Mb3N0UG9pbnRlckNhcHR1cmU6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyRW50ZXI6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMCksb25Qb2ludGVyTGVhdmU6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMSksb25Gb2N1czooVik9PntCKFYuY3VycmVudFRhcmdldC5tYXRjaGVzPy4oIjpmb2N1cy12aXNpYmxlIik/PyExKX0sb25CbHVyOigpPT5CKCExKSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixyaWdodDotMTQsYm90dG9tOi0xNCx3aWR0aDo2MCxoZWlnaHQ6NjAsYm9yZGVyOiJub25lIixwYWRkaW5nOjAsbWFyZ2luOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiZmxleC1lbmQiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGN1cnNvcjoibndzZS1yZXNpemUiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJhdXRvIixvdXRsaW5lOiJub25lIix6SW5kZXg6MjUsV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6InRyYW5zcGFyZW50In0sY2hpbGRyZW46WihISix7YXJjOk4scGhhc2U6TCxyZWR1Y2VkTW90aW9uOlksaGlnaENvbnRyYXN0OnEsZm9jdXNWaXNpYmxlOkd9KX0pfWZ1bmN0aW9uIENKKCQpe2lmKCEkfHx0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybjtsZXQgSj1kb2N1bWVudC5oZWFkfHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLFE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtRLnR5cGU9InRleHQvY3NzIixKLmFwcGVuZENoaWxkKFEpLFEuc3R5bGVTaGVldD9RLnN0eWxlU2hlZXQuY3NzVGV4dD0kOlEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJCkpfXZhciBGSj0oJCk9Pntzd2l0Y2goJCl7Y2FzZSJzdWNjZXNzIjpyZXR1cm4gQUo7Y2FzZSJpbmZvIjpyZXR1cm4gV0o7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4gTUo7Y2FzZSJlcnJvciI6cmV0dXJuIF9KO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxPSj1BcnJheSgxMikuZmlsbCgwKSxrSj0oe3Zpc2libGU6JCxjbGFzc05hbWU6Sn0pPT57cmV0dXJuIG0uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOlsic29ubmVyLWxvYWRpbmctd3JhcHBlciIsSl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKSwiZGF0YS12aXNpYmxlIjokfSxtLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToic29ubmVyLXNwaW5uZXIifSxPSi5tYXAoKFEsWCk9Pm0uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzb25uZXItbG9hZGluZy1iYXIiLGtleTpgc3Bpbm5lci1iYXItJHtYfWB9KSkpKX0sQUo9bS5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxtLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTEwIDE4YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6bTMuODU3LTkuODA5YS43NS43NSAwIDAwLTEuMjE0LS44ODJsLTMuNDgzIDQuNzktMS44OC0xLjg4YS43NS43NSAwIDEwLTEuMDYgMS4wNjFsMi41IDIuNWEuNzUuNzUgMCAwMDEuMTM3LS4wODlsNC01LjV6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksTUo9bS5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxtLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTkuNDAxIDMuMDAzYzEuMTU1LTIgNC4wNDMtMiA1LjE5NyAwbDcuMzU1IDEyLjc0OGMxLjE1NCAyLS4yOSA0LjUtMi41OTkgNC41SDQuNjQ1Yy0yLjMwOSAwLTMuNzUyLTIuNS0yLjU5OC00LjVMOS40IDMuMDAzek0xMiA4LjI1YS43NS43NSAwIDAxLjc1Ljc1djMuNzVhLjc1Ljc1IDAgMDEtMS41IDBWOWEuNzUuNzUgMCAwMS43NS0uNzV6bTAgOC4yNWEuNzUuNzUgMCAxMDAtMS41Ljc1Ljc1IDAgMDAwIDEuNXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxXSj1tLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LG0uY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS03LTRhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwek05IDlhLjc1Ljc1IDAgMDAwIDEuNWguMjUzYS4yNS4yNSAwIDAxLjI0NC4zMDRsLS40NTkgMi4wNjZBMS43NSAxLjc1IDAgMDAxMC43NDcgMTVIMTFhLjc1Ljc1IDAgMDAwLTEuNWgtLjI1M2EuMjUuMjUgMCAwMS0uMjQ0LS4zMDRsLjQ1OS0yLjA2NkExLjc1IDEuNzUgMCAwMDkuMjUzIDlIOXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxfSj1tLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LG0uY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS04LTVhLjc1Ljc1IDAgMDEuNzUuNzV2NC41YS43NS43NSAwIDAxLTEuNSAwdi00LjVBLjc1Ljc1IDAgMDExMCA1em0wIDEwYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyeiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLFBKPW0uY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoiMTIiLGhlaWdodDoiMTIiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifSxtLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pLG0uY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSkpLERKPSgpPT57bGV0WyQsSl09bS51c2VTdGF0ZShkb2N1bWVudC5oaWRkZW4pO3JldHVybiBtLnVzZUVmZmVjdCgoKT0+e2xldCBRPSgpPT57Sihkb2N1bWVudC5oaWRkZW4pfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUSksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixRKX0sW10pLCR9LG8zPTE7Y2xhc3MgaDZ7Y29uc3RydWN0b3IoKXt0aGlzLnN1YnNjcmliZT0oJCk9PntyZXR1cm4gdGhpcy5zdWJzY3JpYmVycy5wdXNoKCQpLCgpPT57bGV0IEo9dGhpcy5zdWJzY3JpYmVycy5pbmRleE9mKCQpO3RoaXMuc3Vic2NyaWJlcnMuc3BsaWNlKEosMSl9fSx0aGlzLnB1Ymxpc2g9KCQpPT57dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChKKT0+SigkKSl9LHRoaXMuYWRkVG9hc3Q9KCQpPT57dGhpcy5wdWJsaXNoKCQpLHRoaXMudG9hc3RzPVsuLi50aGlzLnRvYXN0cywkXX0sdGhpcy5jcmVhdGU9KCQpPT57dmFyIEo7bGV0e21lc3NhZ2U6USwuLi5YfT0kLEs9dHlwZW9mKCQ9PW51bGw/dm9pZCAwOiQuaWQpPT09Im51bWJlciJ8fCgoSj0kLmlkKT09bnVsbD92b2lkIDA6Si5sZW5ndGgpPjA/JC5pZDpvMysrLFk9dGhpcy50b2FzdHMuZmluZCgoRyk9PntyZXR1cm4gRy5pZD09PUt9KSxxPSQuZGlzbWlzc2libGU9PT12b2lkIDA/ITA6JC5kaXNtaXNzaWJsZTtpZih0aGlzLmRpc21pc3NlZFRvYXN0cy5oYXMoSykpdGhpcy5kaXNtaXNzZWRUb2FzdHMuZGVsZXRlKEspO2lmKFkpdGhpcy50b2FzdHM9dGhpcy50b2FzdHMubWFwKChHKT0+e2lmKEcuaWQ9PT1LKXJldHVybiB0aGlzLnB1Ymxpc2goey4uLkcsLi4uJCxpZDpLLHRpdGxlOlF9KSx7Li4uRywuLi4kLGlkOkssZGlzbWlzc2libGU6cSx0aXRsZTpRfTtyZXR1cm4gR30pO2Vsc2UgdGhpcy5hZGRUb2FzdCh7dGl0bGU6USwuLi5YLGRpc21pc3NpYmxlOnEsaWQ6S30pO3JldHVybiBLfSx0aGlzLmRpc21pc3M9KCQpPT57aWYoJCl0aGlzLmRpc21pc3NlZFRvYXN0cy5hZGQoJCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKEopPT5KKHtpZDokLGRpc21pc3M6ITB9KSkpO2Vsc2UgdGhpcy50b2FzdHMuZm9yRWFjaCgoSik9Pnt0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKFEpPT5RKHtpZDpKLmlkLGRpc21pc3M6ITB9KSl9KTtyZXR1cm4gJH0sdGhpcy5tZXNzYWdlPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLG1lc3NhZ2U6JH0pfSx0aGlzLmVycm9yPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLG1lc3NhZ2U6JCx0eXBlOiJlcnJvciJ9KX0sdGhpcy5zdWNjZXNzPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLHR5cGU6InN1Y2Nlc3MiLG1lc3NhZ2U6JH0pfSx0aGlzLmluZm89KCQsSik9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLkosdHlwZToiaW5mbyIsbWVzc2FnZTokfSl9LHRoaXMud2FybmluZz0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSix0eXBlOiJ3YXJuaW5nIixtZXNzYWdlOiR9KX0sdGhpcy5sb2FkaW5nPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLHR5cGU6ImxvYWRpbmciLG1lc3NhZ2U6JH0pfSx0aGlzLnByb21pc2U9KCQsSik9PntpZighSilyZXR1cm47bGV0IFE9dm9pZCAwO2lmKEoubG9hZGluZyE9PXZvaWQgMClRPXRoaXMuY3JlYXRlKHsuLi5KLHByb21pc2U6JCx0eXBlOiJsb2FkaW5nIixtZXNzYWdlOkoubG9hZGluZyxkZXNjcmlwdGlvbjp0eXBlb2YgSi5kZXNjcmlwdGlvbiE9PSJmdW5jdGlvbiI/Si5kZXNjcmlwdGlvbjp2b2lkIDB9KTtsZXQgWD1Qcm9taXNlLnJlc29sdmUoJCBpbnN0YW5jZW9mIEZ1bmN0aW9uPyQoKTokKSxLPVEhPT12b2lkIDAsWSxxPVgudGhlbihhc3luYyhCKT0+e2lmKFk9WyJyZXNvbHZlIixCXSxtLmlzVmFsaWRFbGVtZW50KEIpKUs9ITEsdGhpcy5jcmVhdGUoe2lkOlEsdHlwZToiZGVmYXVsdCIsbWVzc2FnZTpCfSk7ZWxzZSBpZihUSihCKSYmIUIub2spe0s9ITE7bGV0IEw9dHlwZW9mIEouZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IEouZXJyb3IoYEhUVFAgZXJyb3IhIHN0YXR1czogJHtCLnN0YXR1c31gKTpKLmVycm9yLFY9dHlwZW9mIEouZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IEouZGVzY3JpcHRpb24oYEhUVFAgZXJyb3IhIHN0YXR1czogJHtCLnN0YXR1c31gKTpKLmRlc2NyaXB0aW9uLFU9dHlwZW9mIEw9PT0ib2JqZWN0IiYmIW0uaXNWYWxpZEVsZW1lbnQoTCk/TDp7bWVzc2FnZTpMfTt0aGlzLmNyZWF0ZSh7aWQ6USx0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246ViwuLi5VfSl9ZWxzZSBpZihCIGluc3RhbmNlb2YgRXJyb3Ipe0s9ITE7bGV0IEw9dHlwZW9mIEouZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IEouZXJyb3IoQik6Si5lcnJvcixWPXR5cGVvZiBKLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmRlc2NyaXB0aW9uKEIpOkouZGVzY3JpcHRpb24sVT10eXBlb2YgTD09PSJvYmplY3QiJiYhbS5pc1ZhbGlkRWxlbWVudChMKT9MOnttZXNzYWdlOkx9O3RoaXMuY3JlYXRlKHtpZDpRLHR5cGU6ImVycm9yIixkZXNjcmlwdGlvbjpWLC4uLlV9KX1lbHNlIGlmKEouc3VjY2VzcyE9PXZvaWQgMCl7Sz0hMTtsZXQgTD10eXBlb2YgSi5zdWNjZXNzPT09ImZ1bmN0aW9uIj9hd2FpdCBKLnN1Y2Nlc3MoQik6Si5zdWNjZXNzLFY9dHlwZW9mIEouZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IEouZGVzY3JpcHRpb24oQik6Si5kZXNjcmlwdGlvbixVPXR5cGVvZiBMPT09Im9iamVjdCImJiFtLmlzVmFsaWRFbGVtZW50KEwpP0w6e21lc3NhZ2U6TH07dGhpcy5jcmVhdGUoe2lkOlEsdHlwZToic3VjY2VzcyIsZGVzY3JpcHRpb246ViwuLi5VfSl9fSkuY2F0Y2goYXN5bmMoQik9PntpZihZPVsicmVqZWN0IixCXSxKLmVycm9yIT09dm9pZCAwKXtLPSExO2xldCBOPXR5cGVvZiBKLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmVycm9yKEIpOkouZXJyb3IsTD10eXBlb2YgSi5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgSi5kZXNjcmlwdGlvbihCKTpKLmRlc2NyaXB0aW9uLEM9dHlwZW9mIE49PT0ib2JqZWN0IiYmIW0uaXNWYWxpZEVsZW1lbnQoTik/Tjp7bWVzc2FnZTpOfTt0aGlzLmNyZWF0ZSh7aWQ6USx0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246TCwuLi5DfSl9fSkuZmluYWxseSgoKT0+e2lmKEspdGhpcy5kaXNtaXNzKFEpLFE9dm9pZCAwO0ouZmluYWxseT09bnVsbHx8Si5maW5hbGx5LmNhbGwoSil9KSxHPSgpPT5uZXcgUHJvbWlzZSgoQixOKT0+cS50aGVuKCgpPT5ZWzBdPT09InJlamVjdCI/TihZWzFdKTpCKFlbMV0pKS5jYXRjaChOKSk7aWYodHlwZW9mIFEhPT0ic3RyaW5nIiYmdHlwZW9mIFEhPT0ibnVtYmVyIilyZXR1cm57dW53cmFwOkd9O2Vsc2UgcmV0dXJuIE9iamVjdC5hc3NpZ24oUSx7dW53cmFwOkd9KX0sdGhpcy5jdXN0b209KCQsSik9PntsZXQgUT0oSj09bnVsbD92b2lkIDA6Si5pZCl8fG8zKys7cmV0dXJuIHRoaXMuY3JlYXRlKHtqc3g6JChRKSxpZDpRLC4uLkp9KSxRfSx0aGlzLmdldEFjdGl2ZVRvYXN0cz0oKT0+e3JldHVybiB0aGlzLnRvYXN0cy5maWx0ZXIoKCQpPT4hdGhpcy5kaXNtaXNzZWRUb2FzdHMuaGFzKCQuaWQpKX0sdGhpcy5zdWJzY3JpYmVycz1bXSx0aGlzLnRvYXN0cz1bXSx0aGlzLmRpc21pc3NlZFRvYXN0cz1uZXcgU2V0fX12YXIgSzA9bmV3IGg2LHdKPSgkLEopPT57bGV0IFE9KEo9PW51bGw/dm9pZCAwOkouaWQpfHxvMysrO3JldHVybiBLMC5hZGRUb2FzdCh7dGl0bGU6JCwuLi5KLGlkOlF9KSxRfSxUSj0oJCk9PntyZXR1cm4gJCYmdHlwZW9mICQ9PT0ib2JqZWN0IiYmIm9rImluICQmJnR5cGVvZiAkLm9rPT09ImJvb2xlYW4iJiYic3RhdHVzImluICQmJnR5cGVvZiAkLnN0YXR1cz09PSJudW1iZXIifSxJSj13SixFSj0oKT0+SzAudG9hc3RzLHlKPSgpPT5LMC5nZXRBY3RpdmVUb2FzdHMoKSxyMj1PYmplY3QuYXNzaWduKElKLHtzdWNjZXNzOkswLnN1Y2Nlc3MsaW5mbzpLMC5pbmZvLHdhcm5pbmc6SzAud2FybmluZyxlcnJvcjpLMC5lcnJvcixjdXN0b206SzAuY3VzdG9tLG1lc3NhZ2U6SzAubWVzc2FnZSxwcm9taXNlOkswLnByb21pc2UsZGlzbWlzczpLMC5kaXNtaXNzLGxvYWRpbmc6SzAubG9hZGluZ30se2dldEhpc3Rvcnk6RUosZ2V0VG9hc3RzOnlKfSk7Q0ooIltkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9bHRyXSxodG1sW2Rpcj1sdHJdey0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQ6LTNweDstLXRvYXN0LWljb24tbWFyZ2luLWVuZDo0cHg7LS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0Oi0xcHg7LS10b2FzdC1zdmctbWFyZ2luLWVuZDowcHg7LS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0OmF1dG87LS10b2FzdC1idXR0b24tbWFyZ2luLWVuZDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0OjA7LS10b2FzdC1jbG9zZS1idXR0b24tZW5kOnVuc2V0Oy0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybTp0cmFuc2xhdGUoLTM1JSwgLTM1JSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1ydGxdLGh0bWxbZGlyPXJ0bF17LS10b2FzdC1pY29uLW1hcmdpbi1zdGFydDo0cHg7LS10b2FzdC1pY29uLW1hcmdpbi1lbmQ6LTNweDstLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQ6MHB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQ6LTFweDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQ6MDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kOmF1dG87LS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQ6dW5zZXQ7LS10b2FzdC1jbG9zZS1idXR0b24tZW5kOjA7LS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtOnRyYW5zbGF0ZSgzNSUsIC0zNSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXXtwb3NpdGlvbjpmaXhlZDt3aWR0aDp2YXIoLS13aWR0aCk7Zm9udC1mYW1pbHk6dWktc2Fucy1zZXJpZixzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsU2Vnb2UgVUksUm9ib3RvLEhlbHZldGljYSBOZXVlLEFyaWFsLE5vdG8gU2FucyxzYW5zLXNlcmlmLEFwcGxlIENvbG9yIEVtb2ppLFNlZ29lIFVJIEVtb2ppLFNlZ29lIFVJIFN5bWJvbCxOb3RvIENvbG9yIEVtb2ppOy0tZ3JheTE6aHNsKDAsIDAlLCA5OSUpOy0tZ3JheTI6aHNsKDAsIDAlLCA5Ny4zJSk7LS1ncmF5Mzpoc2woMCwgMCUsIDk1LjElKTstLWdyYXk0OmhzbCgwLCAwJSwgOTMlKTstLWdyYXk1OmhzbCgwLCAwJSwgOTAuOSUpOy0tZ3JheTY6aHNsKDAsIDAlLCA4OC43JSk7LS1ncmF5Nzpoc2woMCwgMCUsIDg1LjglKTstLWdyYXk4OmhzbCgwLCAwJSwgNzglKTstLWdyYXk5OmhzbCgwLCAwJSwgNTYuMSUpOy0tZ3JheTEwOmhzbCgwLCAwJSwgNTIuMyUpOy0tZ3JheTExOmhzbCgwLCAwJSwgNDMuNSUpOy0tZ3JheTEyOmhzbCgwLCAwJSwgOSUpOy0tYm9yZGVyLXJhZGl1czo4cHg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MDttYXJnaW46MDtsaXN0LXN0eWxlOm5vbmU7b3V0bGluZTowO3otaW5kZXg6OTk5OTk5OTk5O3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyBlYXNlfUBtZWRpYSAoaG92ZXI6bm9uZSkgYW5kIChwb2ludGVyOmNvYXJzZSl7W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtbGlmdGVkPXRydWVde3RyYW5zZm9ybTpub25lfX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPXJpZ2h0XXtyaWdodDp2YXIoLS1vZmZzZXQtcmlnaHQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDp2YXIoLS1vZmZzZXQtbGVmdCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1jZW50ZXJde2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6dmFyKC0tb2Zmc2V0LXRvcCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTp2YXIoLS1vZmZzZXQtYm90dG9tKX1bZGF0YS1zb25uZXItdG9hc3Rdey0teTp0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdC1hbW91bnQ6Y2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLWdhcCkpO3otaW5kZXg6dmFyKC0tei1pbmRleCk7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO3RyYW5zZm9ybTp2YXIoLS15KTt0b3VjaC1hY3Rpb246bm9uZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMsb3BhY2l0eSAuNHMsaGVpZ2h0IC40cyxib3gtc2hhZG93IC4ycztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTowO292ZXJmbG93LXdyYXA6YW55d2hlcmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXXtwYWRkaW5nOjE2cHg7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbm9ybWFsLWJvcmRlcik7Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpO2JvcmRlci1yYWRpdXM6dmFyKC0tYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpO3dpZHRoOnZhcigtLXdpZHRoKTtmb250LXNpemU6MTNweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHh9W2RhdGEtc29ubmVyLXRvYXN0XTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKSwwIDAgMCAycHggcmdiYSgwLDAsMCwuMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6MDstLXk6dHJhbnNsYXRlWSgtMTAwJSk7LS1saWZ0OjE7LS1saWZ0LWFtb3VudDpjYWxjKDEgKiB2YXIoLS1nYXApKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTowOy0teTp0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdDotMTstLWxpZnQtYW1vdW50OmNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1nYXApKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRlc2NyaXB0aW9uXXtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40O2NvbG9yOiMzZjNmM2Z9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRlc2NyaXB0aW9uXXtjb2xvcjppbmhlcml0fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1kZXNjcmlwdGlvbl17Y29sb3I6I2U4ZThlOH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLXRpdGxlXXtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MS41O2NvbG9yOmluaGVyaXR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjE2cHg7d2lkdGg6MTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1pY29uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWljb24tbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXByb21pc2U9dHJ1ZV0gW2RhdGEtaWNvbl0+c3Zne29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1pbiAuM3MgZWFzZSBmb3J3YXJkc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25dPip7ZmxleC1zaHJpbms6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25dIHN2Z3ttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY29udGVudF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXXtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4O2hlaWdodDoyNHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLW5vcm1hbC1iZyk7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtdGV4dCk7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kKTtib3JkZXI6bm9uZTtmb250LXdlaWdodDo1MDA7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzLGJveC1zaGFkb3cgLjJzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCAwIDAgMnB4IHJnYmEoMCwwLDAsLjQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXTpmaXJzdC1vZi10eXBle21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jYW5jZWxde2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA4KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jYW5jZWxde2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMyl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jbG9zZS1idXR0b25de3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0KTtyaWdodDp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tZW5kKTt0b3A6MDtoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjA7Y29sb3I6dmFyKC0tZ3JheTEyKTtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ncmF5NCk7dHJhbnNmb3JtOnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm0pO2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6MTt0cmFuc2l0aW9uOm9wYWNpdHkgLjFzLGJhY2tncm91bmQgLjJzLGJvcmRlci1jb2xvciAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jbG9zZS1idXR0b25dOmZvY3VzLXZpc2libGV7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpLDAgMCAwIDJweCByZ2JhKDAsMCwwLC4yKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWRpc2FibGVkPXRydWVde2N1cnNvcjpub3QtYWxsb3dlZH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdOmhvdmVyIFtkYXRhLWNsb3NlLWJ1dHRvbl06aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1ncmF5Mik7Ym9yZGVyLWNvbG9yOnZhcigtLWdyYXk1KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTAwJTtyaWdodDotMTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4Oi0xfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPXRvcF1bZGF0YS1zd2lwaW5nPXRydWVdOjpiZWZvcmV7Ym90dG9tOjUwJTt0cmFuc2Zvcm06c2NhbGVZKDMpIHRyYW5zbGF0ZVkoNTAlKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21dW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle3RvcDo1MCU7dHJhbnNmb3JtOnNjYWxlWSgzKSB0cmFuc2xhdGVZKC01MCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPWZhbHNlXVtkYXRhLXJlbW92ZWQ9dHJ1ZV06OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7dHJhbnNmb3JtOnNjYWxlWSgyKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV06OmFmdGVye2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2hlaWdodDpjYWxjKHZhcigtLWdhcCkgKyAxcHgpO2JvdHRvbToxMDAlO3dpZHRoOjEwMCV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLW1vdW50ZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoMCk7b3BhY2l0eToxfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD1mYWxzZV1bZGF0YS1mcm9udD1mYWxzZV17LS1zY2FsZTp2YXIoLS10b2FzdHMtYmVmb3JlKSAqIDAuMDUgKyAxOy0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdC1hbW91bnQpICogdmFyKC0tdG9hc3RzLWJlZm9yZSkpKSBzY2FsZShjYWxjKC0xICogdmFyKC0tc2NhbGUpKSk7aGVpZ2h0OnZhcigtLWZyb250LXRvYXN0LWhlaWdodCl9W2RhdGEtc29ubmVyLXRvYXN0XT4qe3RyYW5zaXRpb246b3BhY2l0eSAuNHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXgtcG9zaXRpb249cmlnaHRde3JpZ2h0OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD1mYWxzZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zdHlsZWQ9dHJ1ZV0+KntvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXZpc2libGU9ZmFsc2Vde29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1tb3VudGVkPXRydWVdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLW9mZnNldCkpKTtoZWlnaHQ6dmFyKC0taW5pdGlhbC1oZWlnaHQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9dHJ1ZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2Vdey0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiAtMTAwJSkpO29wYWNpdHk6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXVtkYXRhLXN3aXBlLW91dD1mYWxzZV1bZGF0YS1leHBhbmRlZD10cnVlXXstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tb2Zmc2V0KSArIHZhcigtLWxpZnQpICogLTEwMCUpKTtvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2VdW2RhdGEtZXhwYW5kZWQ9ZmFsc2Vdey0teTp0cmFuc2xhdGVZKDQwJSk7b3BhY2l0eTowO3RyYW5zaXRpb246dHJhbnNmb3JtIC41cyxvcGFjaXR5IC4yc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXTo6YmVmb3Jle2hlaWdodDpjYWxjKHZhcigtLWluaXRpYWwtaGVpZ2h0KSArIDIwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9dHJ1ZV17dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXksMCkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgsMCkpO3RyYW5zaXRpb246bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGVkPXRydWVde3VzZXItc2VsZWN0Om5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXSxbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEteS1wb3NpdGlvbj10b3Bde2FuaW1hdGlvbi1kdXJhdGlvbjouMnM7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249bGVmdF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LWxlZnR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1yaWdodF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LXJpZ2h0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249dXBde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC11cH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPWRvd25de2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1kb3dufUBrZXlmcmFtZXMgc3dpcGUtb3V0LWxlZnR7ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWCh2YXIoLS1zd2lwZS1hbW91bnQteCkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWChjYWxjKHZhcigtLXN3aXBlLWFtb3VudC14KSAtIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LXJpZ2h0e2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteCkgKyAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC11cHtmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXkpIC0gMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtZG93bntmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXkpICsgMTAwJSkpO29wYWNpdHk6MH19QG1lZGlhIChtYXgtd2lkdGg6NjAwcHgpe1tkYXRhLXNvbm5lci10b2FzdGVyXXtwb3NpdGlvbjpmaXhlZDtyaWdodDp2YXIoLS1tb2JpbGUtb2Zmc2V0LXJpZ2h0KTtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7d2lkdGg6MTAwJX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPXJ0bF17bGVmdDpjYWxjKHZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCkgKiAtMSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdIFtkYXRhLXNvbm5lci10b2FzdF17bGVmdDowO3JpZ2h0OjA7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KSAqIDIpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206dmFyKC0tbW9iaWxlLW9mZnNldC1ib3R0b20pfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6dmFyKC0tbW9iaWxlLW9mZnNldC10b3ApfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249Y2VudGVyXXtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7cmlnaHQ6dmFyKC0tbW9iaWxlLW9mZnNldC1yaWdodCk7dHJhbnNmb3JtOm5vbmV9fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1saWdodF17LS1ub3JtYWwtYmc6I2ZmZjstLW5vcm1hbC1ib3JkZXI6dmFyKC0tZ3JheTQpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEyKTstLXN1Y2Nlc3MtYmc6aHNsKDE0MywgODUlLCA5NiUpOy0tc3VjY2Vzcy1ib3JkZXI6aHNsKDE0NSwgOTIlLCA4NyUpOy0tc3VjY2Vzcy10ZXh0OmhzbCgxNDAsIDEwMCUsIDI3JSk7LS1pbmZvLWJnOmhzbCgyMDgsIDEwMCUsIDk3JSk7LS1pbmZvLWJvcmRlcjpoc2woMjIxLCA5MSUsIDkzJSk7LS1pbmZvLXRleHQ6aHNsKDIxMCwgOTIlLCA0NSUpOy0td2FybmluZy1iZzpoc2woNDksIDEwMCUsIDk3JSk7LS13YXJuaW5nLWJvcmRlcjpoc2woNDksIDkxJSwgODQlKTstLXdhcm5pbmctdGV4dDpoc2woMzEsIDkyJSwgNDUlKTstLWVycm9yLWJnOmhzbCgzNTksIDEwMCUsIDk3JSk7LS1lcnJvci1ib3JkZXI6aHNsKDM1OSwgMTAwJSwgOTQlKTstLWVycm9yLXRleHQ6aHNsKDM2MCwgMTAwJSwgNDUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9bGlnaHRdIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1pbnZlcnQ9dHJ1ZV17LS1ub3JtYWwtYmc6IzAwMDstLW5vcm1hbC1ib3JkZXI6aHNsKDAsIDAlLCAyMCUpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtaW52ZXJ0PXRydWVdey0tbm9ybWFsLWJnOiNmZmY7LS1ub3JtYWwtYm9yZGVyOnZhcigtLWdyYXkzKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxMil9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdey0tbm9ybWFsLWJnOiMwMDA7LS1ub3JtYWwtYmctaG92ZXI6aHNsKDAsIDAlLCAxMiUpOy0tbm9ybWFsLWJvcmRlcjpoc2woMCwgMCUsIDIwJSk7LS1ub3JtYWwtYm9yZGVyLWhvdmVyOmhzbCgwLCAwJSwgMjUlKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxKTstLXN1Y2Nlc3MtYmc6aHNsKDE1MCwgMTAwJSwgNiUpOy0tc3VjY2Vzcy1ib3JkZXI6aHNsKDE0NywgMTAwJSwgMTIlKTstLXN1Y2Nlc3MtdGV4dDpoc2woMTUwLCA4NiUsIDY1JSk7LS1pbmZvLWJnOmhzbCgyMTUsIDEwMCUsIDYlKTstLWluZm8tYm9yZGVyOmhzbCgyMjMsIDQzJSwgMTclKTstLWluZm8tdGV4dDpoc2woMjE2LCA4NyUsIDY1JSk7LS13YXJuaW5nLWJnOmhzbCg2NCwgMTAwJSwgNiUpOy0td2FybmluZy1ib3JkZXI6aHNsKDYwLCAxMDAlLCA5JSk7LS13YXJuaW5nLXRleHQ6aHNsKDQ2LCA4NyUsIDY1JSk7LS1lcnJvci1iZzpoc2woMzU4LCA3NiUsIDEwJSk7LS1lcnJvci1ib3JkZXI6aHNsKDM1NywgODklLCAxNiUpOy0tZXJyb3ItdGV4dDpoc2woMzU4LCAxMDAlLCA4MSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1ub3JtYWwtYm9yZGVyKTtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF0gW2RhdGEtY2xvc2UtYnV0dG9uXTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZy1ob3Zlcik7Ym9yZGVyLWNvbG9yOnZhcigtLW5vcm1hbC1ib3JkZXItaG92ZXIpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9c3VjY2Vzc117YmFja2dyb3VuZDp2YXIoLS1zdWNjZXNzLWJnKTtib3JkZXItY29sb3I6dmFyKC0tc3VjY2Vzcy1ib3JkZXIpO2NvbG9yOnZhcigtLXN1Y2Nlc3MtdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1zdWNjZXNzXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tc3VjY2Vzcy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXN1Y2Nlc3MtYm9yZGVyKTtjb2xvcjp2YXIoLS1zdWNjZXNzLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9aW5mb117YmFja2dyb3VuZDp2YXIoLS1pbmZvLWJnKTtib3JkZXItY29sb3I6dmFyKC0taW5mby1ib3JkZXIpO2NvbG9yOnZhcigtLWluZm8tdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1pbmZvXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0taW5mby1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWluZm8tYm9yZGVyKTtjb2xvcjp2YXIoLS1pbmZvLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9d2FybmluZ117YmFja2dyb3VuZDp2YXIoLS13YXJuaW5nLWJnKTtib3JkZXItY29sb3I6dmFyKC0td2FybmluZy1ib3JkZXIpO2NvbG9yOnZhcigtLXdhcm5pbmctdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT13YXJuaW5nXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0td2FybmluZy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXdhcm5pbmctYm9yZGVyKTtjb2xvcjp2YXIoLS13YXJuaW5nLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9ZXJyb3Jde2JhY2tncm91bmQ6dmFyKC0tZXJyb3ItYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1lcnJvci1ib3JkZXIpO2NvbG9yOnZhcigtLWVycm9yLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9ZXJyb3JdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1lcnJvci1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWVycm9yLWJvcmRlcik7Y29sb3I6dmFyKC0tZXJyb3ItdGV4dCl9LnNvbm5lci1sb2FkaW5nLXdyYXBwZXJ7LS1zaXplOjE2cHg7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7ei1pbmRleDoxMH0uc29ubmVyLWxvYWRpbmctd3JhcHBlcltkYXRhLXZpc2libGU9ZmFsc2Vde3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1vdXQgLjJzIGVhc2UgZm9yd2FyZHN9LnNvbm5lci1zcGlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDo1MCU7bGVmdDo1MCU7aGVpZ2h0OnZhcigtLXNpemUpO3dpZHRoOnZhcigtLXNpemUpfS5zb25uZXItbG9hZGluZy1iYXJ7YW5pbWF0aW9uOnNvbm5lci1zcGluIDEuMnMgbGluZWFyIGluZmluaXRlO2JhY2tncm91bmQ6dmFyKC0tZ3JheTExKTtib3JkZXItcmFkaXVzOjZweDtoZWlnaHQ6OCU7bGVmdDotMTAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMy45JTt3aWR0aDoyNCV9LnNvbm5lci1sb2FkaW5nLWJhcjpmaXJzdC1jaGlsZHthbmltYXRpb24tZGVsYXk6LTEuMnM7dHJhbnNmb3JtOnJvdGF0ZSguMDAwMWRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDIpe2FuaW1hdGlvbi1kZWxheTotMS4xczt0cmFuc2Zvcm06cm90YXRlKDMwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMyl7YW5pbWF0aW9uLWRlbGF5Oi0xczt0cmFuc2Zvcm06cm90YXRlKDYwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNCl7YW5pbWF0aW9uLWRlbGF5Oi0uOXM7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDUpe2FuaW1hdGlvbi1kZWxheTotLjhzO3RyYW5zZm9ybTpyb3RhdGUoMTIwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNil7YW5pbWF0aW9uLWRlbGF5Oi0uN3M7dHJhbnNmb3JtOnJvdGF0ZSgxNTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg3KXthbmltYXRpb24tZGVsYXk6LS42czt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDgpe2FuaW1hdGlvbi1kZWxheTotLjVzO3RyYW5zZm9ybTpyb3RhdGUoMjEwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoOSl7YW5pbWF0aW9uLWRlbGF5Oi0uNHM7dHJhbnNmb3JtOnJvdGF0ZSgyNDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMCl7YW5pbWF0aW9uLWRlbGF5Oi0uM3M7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMSl7YW5pbWF0aW9uLWRlbGF5Oi0uMnM7dHJhbnNmb3JtOnJvdGF0ZSgzMDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMil7YW5pbWF0aW9uLWRlbGF5Oi0uMXM7dHJhbnNmb3JtOnJvdGF0ZSgzMzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX1Aa2V5ZnJhbWVzIHNvbm5lci1mYWRlLWluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfTEwMCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyBzb25uZXItZmFkZS1vdXR7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX0xMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfX1Aa2V5ZnJhbWVzIHNvbm5lci1zcGluezAle29wYWNpdHk6MX0xMDAle29wYWNpdHk6LjE1fX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5zb25uZXItbG9hZGluZy1iYXIsW2RhdGEtc29ubmVyLXRvYXN0XSxbZGF0YS1zb25uZXItdG9hc3RdPip7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudDthbmltYXRpb246bm9uZSFpbXBvcnRhbnR9fS5zb25uZXItbG9hZGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246b3BhY2l0eSAuMnMsdHJhbnNmb3JtIC4yc30uc29ubmVyLWxvYWRlcltkYXRhLXZpc2libGU9ZmFsc2Vde29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpIHRyYW5zbGF0ZSgtNTAlLC01MCUpfSIpO2Z1bmN0aW9uIHU1KCQpe3JldHVybiAkLmxhYmVsIT09dm9pZCAwfXZhciBiSj0zLFNKPSIyNHB4Iix4Sj0iMTZweCIsajY9NDAwMCxqSj0zNTYsdko9MTQsaEo9NDUsUko9MjAwO2Z1bmN0aW9uIGIwKC4uLiQpe3JldHVybiAkLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil9ZnVuY3Rpb24gZ0ooJCl7bGV0W0osUV09JC5zcGxpdCgiLSIpLFg9W107aWYoSilYLnB1c2goSik7aWYoUSlYLnB1c2goUSk7cmV0dXJuIFh9dmFyIGZKPSgkKT0+e3ZhciBKLFEsWCxLLFkscSxHLEIsTjtsZXR7aW52ZXJ0OkwsdG9hc3Q6Vix1bnN0eWxlZDpDLGludGVyYWN0aW5nOlUsc2V0SGVpZ2h0czpPLHZpc2libGVUb2FzdHM6eixoZWlnaHRzOkgsaW5kZXg6Rix0b2FzdHM6QSxleHBhbmRlZDpiLHJlbW92ZVRvYXN0OkQsZGVmYXVsdFJpY2hDb2xvcnM6UyxjbG9zZUJ1dHRvbjp4LHN0eWxlOnMsY2FuY2VsQnV0dG9uU3R5bGU6ZyxhY3Rpb25CdXR0b25TdHlsZTp1LGNsYXNzTmFtZTppPSIiLGRlc2NyaXB0aW9uQ2xhc3NOYW1lOm89IiIsZHVyYXRpb246cixwb3NpdGlvbjpRMSxnYXA6TjEsZXhwYW5kQnlEZWZhdWx0OmMsY2xhc3NOYW1lczpqLGljb25zOmEsY2xvc2VCdXR0b25BcmlhTGFiZWw6SzE9IkNsb3NlIHRvYXN0In09JCxbTDEsSjFdPW0udXNlU3RhdGUobnVsbCksW1kxLEMxXT1tLnVzZVN0YXRlKG51bGwpLFtFLGZdPW0udXNlU3RhdGUoITEpLFtfLHBdPW0udXNlU3RhdGUoITEpLFtsLHZdPW0udXNlU3RhdGUoITEpLFtHMSx6MV09bS51c2VTdGF0ZSghMSksW00xLFcxXT1tLnVzZVN0YXRlKCExKSxbaTEsQTFdPW0udXNlU3RhdGUoMCksW3YxLF8xXT1tLnVzZVN0YXRlKDApLGwxPW0udXNlUmVmKFYuZHVyYXRpb258fHJ8fGo2KSxVMT1tLnVzZVJlZihudWxsKSxJMT1tLnVzZVJlZihudWxsKSxkMT1GPT09MCx0MT1GKzE8PXosZzE9Vi50eXBlLG4xPVYuZGlzbWlzc2libGUhPT0hMSwkMD1WLmNsYXNzTmFtZXx8IiIsVjA9Vi5kZXNjcmlwdGlvbkNsYXNzTmFtZXx8IiIsczE9bS51c2VNZW1vKCgpPT5ILmZpbmRJbmRleCgoWDEpPT5YMS50b2FzdElkPT09Vi5pZCl8fDAsW0gsVi5pZF0pLHYwPW0udXNlTWVtbygoKT0+e3ZhciBYMTtyZXR1cm4oWDE9Vi5jbG9zZUJ1dHRvbikhPW51bGw/WDE6eH0sW1YuY2xvc2VCdXR0b24seF0pLG0xPW0udXNlTWVtbygoKT0+Vi5kdXJhdGlvbnx8cnx8ajYsW1YuZHVyYXRpb24scl0pLHEwPW0udXNlUmVmKDApLEowPW0udXNlUmVmKDApLF8wPW0udXNlUmVmKDApLGMxPW0udXNlUmVmKG51bGwpLFthMSxQMF09UTEuc3BsaXQoIi0iKSxoMT1tLnVzZU1lbW8oKCk9PntyZXR1cm4gSC5yZWR1Y2UoKFgxLFAsZCk9PntpZihkPj1zMSlyZXR1cm4gWDE7cmV0dXJuIFgxK1AuaGVpZ2h0fSwwKX0sW0gsczFdKSxDMD1ESigpLEIwPVYuaW52ZXJ0fHxMLEQxPWcxPT09ImxvYWRpbmciO0owLmN1cnJlbnQ9bS51c2VNZW1vKCgpPT5zMSpOMStoMSxbczEsaDFdKSxtLnVzZUVmZmVjdCgoKT0+e2wxLmN1cnJlbnQ9bTF9LFttMV0pLG0udXNlRWZmZWN0KCgpPT57ZighMCl9LFtdKSxtLnVzZUVmZmVjdCgoKT0+e2xldCBYMT1JMS5jdXJyZW50O2lmKFgxKXtsZXQgUD1YMS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7cmV0dXJuIF8xKFApLE8oKGQpPT5be3RvYXN0SWQ6Vi5pZCxoZWlnaHQ6UCxwb3NpdGlvbjpWLnBvc2l0aW9ufSwuLi5kXSksKCk9Pk8oKGQpPT5kLmZpbHRlcigobik9Pm4udG9hc3RJZCE9PVYuaWQpKX19LFtPLFYuaWRdKSxtLnVzZUxheW91dEVmZmVjdCgoKT0+e2lmKCFFKXJldHVybjtsZXQgWDE9STEuY3VycmVudCxQPVgxLnN0eWxlLmhlaWdodDtYMS5zdHlsZS5oZWlnaHQ9ImF1dG8iO2xldCBkPVgxLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtYMS5zdHlsZS5oZWlnaHQ9UCxfMShkKSxPKChuKT0+e2lmKCFuLmZpbmQoKFYxKT0+VjEudG9hc3RJZD09PVYuaWQpKXJldHVyblt7dG9hc3RJZDpWLmlkLGhlaWdodDpkLHBvc2l0aW9uOlYucG9zaXRpb259LC4uLm5dO2Vsc2UgcmV0dXJuIG4ubWFwKChWMSk9PlYxLnRvYXN0SWQ9PT1WLmlkP3suLi5WMSxoZWlnaHQ6ZH06VjEpfSl9LFtFLFYudGl0bGUsVi5kZXNjcmlwdGlvbixPLFYuaWQsVi5qc3gsVi5hY3Rpb24sVi5jYW5jZWxdKTtsZXQgeTE9bS51c2VDYWxsYmFjaygoKT0+e3AoITApLEExKEowLmN1cnJlbnQpLE8oKFgxKT0+WDEuZmlsdGVyKChQKT0+UC50b2FzdElkIT09Vi5pZCkpLHNldFRpbWVvdXQoKCk9PntEKFYpfSxSSil9LFtWLEQsTyxKMF0pO20udXNlRWZmZWN0KCgpPT57aWYoVi5wcm9taXNlJiZnMT09PSJsb2FkaW5nInx8Vi5kdXJhdGlvbj09PTEvMHx8Vi50eXBlPT09ImxvYWRpbmciKXJldHVybjtsZXQgWDEsUD0oKT0+e2lmKF8wLmN1cnJlbnQ8cTAuY3VycmVudCl7bGV0IG49bmV3IERhdGUoKS5nZXRUaW1lKCktcTAuY3VycmVudDtsMS5jdXJyZW50PWwxLmN1cnJlbnQtbn1fMC5jdXJyZW50PW5ldyBEYXRlKCkuZ2V0VGltZSgpfSxkPSgpPT57aWYobDEuY3VycmVudD09PTEvMClyZXR1cm47cTAuY3VycmVudD1uZXcgRGF0ZSgpLmdldFRpbWUoKSxYMT1zZXRUaW1lb3V0KCgpPT57Vi5vbkF1dG9DbG9zZT09bnVsbHx8Vi5vbkF1dG9DbG9zZS5jYWxsKFYsVikseTEoKX0sbDEuY3VycmVudCl9O2lmKGJ8fFV8fEMwKVAoKTtlbHNlIGQoKTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KFgxKX0sW2IsVSxWLGcxLEMwLHkxXSksbS51c2VFZmZlY3QoKCk9PntpZihWLmRlbGV0ZSl5MSgpLFYub25EaXNtaXNzPT1udWxsfHxWLm9uRGlzbWlzcy5jYWxsKFYsVil9LFt5MSxWLmRlbGV0ZV0pO2Z1bmN0aW9uIFEwKCl7dmFyIFgxO2lmKGE9PW51bGw/dm9pZCAwOmEubG9hZGluZyl7dmFyIFA7cmV0dXJuIG0uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmIwKGo9PW51bGw/dm9pZCAwOmoubG9hZGVyLFY9PW51bGw/dm9pZCAwOihQPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlAubG9hZGVyLCJzb25uZXItbG9hZGVyIiksImRhdGEtdmlzaWJsZSI6ZzE9PT0ibG9hZGluZyJ9LGEubG9hZGluZyl9cmV0dXJuIG0uY3JlYXRlRWxlbWVudChrSix7Y2xhc3NOYW1lOmIwKGo9PW51bGw/dm9pZCAwOmoubG9hZGVyLFY9PW51bGw/dm9pZCAwOihYMT1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpYMS5sb2FkZXIpLHZpc2libGU6ZzE9PT0ibG9hZGluZyJ9KX1sZXQgRjA9Vi5pY29ufHwoYT09bnVsbD92b2lkIDA6YVtnMV0pfHxGSihnMSk7dmFyIE4wLE8wO3JldHVybiBtLmNyZWF0ZUVsZW1lbnQoImxpIix7dGFiSW5kZXg6MCxyZWY6STEsY2xhc3NOYW1lOmIwKGksJDAsaj09bnVsbD92b2lkIDA6ai50b2FzdCxWPT1udWxsP3ZvaWQgMDooSj1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpKLnRvYXN0LGo9PW51bGw/dm9pZCAwOmouZGVmYXVsdCxqPT1udWxsP3ZvaWQgMDpqW2cxXSxWPT1udWxsP3ZvaWQgMDooUT1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpRW2cxXSksImRhdGEtc29ubmVyLXRvYXN0IjoiIiwiZGF0YS1yaWNoLWNvbG9ycyI6KE4wPVYucmljaENvbG9ycykhPW51bGw/TjA6UywiZGF0YS1zdHlsZWQiOiFCb29sZWFuKFYuanN4fHxWLnVuc3R5bGVkfHxDKSwiZGF0YS1tb3VudGVkIjpFLCJkYXRhLXByb21pc2UiOkJvb2xlYW4oVi5wcm9taXNlKSwiZGF0YS1zd2lwZWQiOk0xLCJkYXRhLXJlbW92ZWQiOl8sImRhdGEtdmlzaWJsZSI6dDEsImRhdGEteS1wb3NpdGlvbiI6YTEsImRhdGEteC1wb3NpdGlvbiI6UDAsImRhdGEtaW5kZXgiOkYsImRhdGEtZnJvbnQiOmQxLCJkYXRhLXN3aXBpbmciOmwsImRhdGEtZGlzbWlzc2libGUiOm4xLCJkYXRhLXR5cGUiOmcxLCJkYXRhLWludmVydCI6QjAsImRhdGEtc3dpcGUtb3V0IjpHMSwiZGF0YS1zd2lwZS1kaXJlY3Rpb24iOlkxLCJkYXRhLWV4cGFuZGVkIjpCb29sZWFuKGJ8fGMmJkUpLCJkYXRhLXRlc3RpZCI6Vi50ZXN0SWQsc3R5bGU6eyItLWluZGV4IjpGLCItLXRvYXN0cy1iZWZvcmUiOkYsIi0tei1pbmRleCI6QS5sZW5ndGgtRiwiLS1vZmZzZXQiOmAke18/aTE6SjAuY3VycmVudH1weGAsIi0taW5pdGlhbC1oZWlnaHQiOmM/ImF1dG8iOmAke3YxfXB4YCwuLi5zLC4uLlYuc3R5bGV9LG9uRHJhZ0VuZDooKT0+e3YoITEpLEoxKG51bGwpLGMxLmN1cnJlbnQ9bnVsbH0sb25Qb2ludGVyRG93bjooWDEpPT57aWYoWDEuYnV0dG9uPT09MilyZXR1cm47aWYoRDF8fCFuMSlyZXR1cm47aWYoVTEuY3VycmVudD1uZXcgRGF0ZSxBMShKMC5jdXJyZW50KSxYMS50YXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoWDEucG9pbnRlcklkKSxYMS50YXJnZXQudGFnTmFtZT09PSJCVVRUT04iKXJldHVybjt2KCEwKSxjMS5jdXJyZW50PXt4OlgxLmNsaWVudFgseTpYMS5jbGllbnRZfX0sb25Qb2ludGVyVXA6KCk9Pnt2YXIgWDEsUCxkO2lmKEcxfHwhbjEpcmV0dXJuO2MxLmN1cnJlbnQ9bnVsbDtsZXQgbj1OdW1iZXIoKChYMT1JMS5jdXJyZW50KT09bnVsbD92b2lkIDA6WDEuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgiLS1zd2lwZS1hbW91bnQteCIpLnJlcGxhY2UoInB4IiwiIikpfHwwKSxPMT1OdW1iZXIoKChQPUkxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpQLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoIi0tc3dpcGUtYW1vdW50LXkiKS5yZXBsYWNlKCJweCIsIiIpKXx8MCksVjE9bmV3IERhdGUoKS5nZXRUaW1lKCktKChkPVUxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpkLmdldFRpbWUoKSksQjE9TDE9PT0ieCI/bjpPMSxmMT1NYXRoLmFicyhCMSkvVjE7aWYoTWF0aC5hYnMoQjEpPj1oSnx8ZjE+MC4xMSl7aWYoQTEoSjAuY3VycmVudCksVi5vbkRpc21pc3M9PW51bGx8fFYub25EaXNtaXNzLmNhbGwoVixWKSxMMT09PSJ4IilDMShuPjA/InJpZ2h0IjoibGVmdCIpO2Vsc2UgQzEoTzE+MD8iZG93biI6InVwIik7eTEoKSx6MSghMCk7cmV0dXJufWVsc2V7dmFyIHAxLHgxOyhwMT1JMS5jdXJyZW50KT09bnVsbHx8cDEuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXgiLCIwcHgiKSwoeDE9STEuY3VycmVudCk9PW51bGx8fHgxLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC15IiwiMHB4Iil9VzEoITEpLHYoITEpLEoxKG51bGwpfSxvblBvaW50ZXJNb3ZlOihYMSk9Pnt2YXIgUCxkLG47aWYoIWMxLmN1cnJlbnR8fCFuMSlyZXR1cm47aWYoKChQPXdpbmRvdy5nZXRTZWxlY3Rpb24oKSk9PW51bGw/dm9pZCAwOlAudG9TdHJpbmcoKS5sZW5ndGgpPjApcmV0dXJuO2xldCBWMT1YMS5jbGllbnRZLWMxLmN1cnJlbnQueSxCMT1YMS5jbGllbnRYLWMxLmN1cnJlbnQueDt2YXIgZjE7bGV0IHAxPShmMT0kLnN3aXBlRGlyZWN0aW9ucykhPW51bGw/ZjE6Z0ooUTEpO2lmKCFMMSYmKE1hdGguYWJzKEIxKT4xfHxNYXRoLmFicyhWMSk+MSkpSjEoTWF0aC5hYnMoQjEpPk1hdGguYWJzKFYxKT8ieCI6InkiKTtsZXQgeDE9e3g6MCx5OjB9LGswPShaMCk9PntyZXR1cm4gMS8oMS41K01hdGguYWJzKFowKS8yMCl9O2lmKEwxPT09InkiKXtpZihwMS5pbmNsdWRlcygidG9wIil8fHAxLmluY2x1ZGVzKCJib3R0b20iKSlpZihwMS5pbmNsdWRlcygidG9wIikmJlYxPDB8fHAxLmluY2x1ZGVzKCJib3R0b20iKSYmVjE+MCl4MS55PVYxO2Vsc2V7bGV0IFowPVYxKmswKFYxKTt4MS55PU1hdGguYWJzKFowKTxNYXRoLmFicyhWMSk/WjA6VjF9fWVsc2UgaWYoTDE9PT0ieCIpe2lmKHAxLmluY2x1ZGVzKCJsZWZ0Iil8fHAxLmluY2x1ZGVzKCJyaWdodCIpKWlmKHAxLmluY2x1ZGVzKCJsZWZ0IikmJkIxPDB8fHAxLmluY2x1ZGVzKCJyaWdodCIpJiZCMT4wKXgxLng9QjE7ZWxzZXtsZXQgWjA9QjEqazAoQjEpO3gxLng9TWF0aC5hYnMoWjApPE1hdGguYWJzKEIxKT9aMDpCMX19aWYoTWF0aC5hYnMoeDEueCk+MHx8TWF0aC5hYnMoeDEueSk+MClXMSghMCk7KGQ9STEuY3VycmVudCk9PW51bGx8fGQuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXgiLGAke3gxLnh9cHhgKSwobj1JMS5jdXJyZW50KT09bnVsbHx8bi5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteSIsYCR7eDEueX1weGApfX0sdjAmJiFWLmpzeCYmZzEhPT0ibG9hZGluZyI/bS5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiYXJpYS1sYWJlbCI6SzEsImRhdGEtZGlzYWJsZWQiOkQxLCJkYXRhLWNsb3NlLWJ1dHRvbiI6ITAsb25DbGljazpEMXx8IW4xPygpPT57fTooKT0+e3kxKCksVi5vbkRpc21pc3M9PW51bGx8fFYub25EaXNtaXNzLmNhbGwoVixWKX0sY2xhc3NOYW1lOmIwKGo9PW51bGw/dm9pZCAwOmouY2xvc2VCdXR0b24sVj09bnVsbD92b2lkIDA6KFg9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6WC5jbG9zZUJ1dHRvbil9LChPMD1hPT1udWxsP3ZvaWQgMDphLmNsb3NlKSE9bnVsbD9PMDpQSik6bnVsbCwoZzF8fFYuaWNvbnx8Vi5wcm9taXNlKSYmVi5pY29uIT09bnVsbCYmKChhPT1udWxsP3ZvaWQgMDphW2cxXSkhPT1udWxsfHxWLmljb24pP20uY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtaWNvbiI6IiIsY2xhc3NOYW1lOmIwKGo9PW51bGw/dm9pZCAwOmouaWNvbixWPT1udWxsP3ZvaWQgMDooSz1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpLLmljb24pfSxWLnByb21pc2V8fFYudHlwZT09PSJsb2FkaW5nIiYmIVYuaWNvbj9WLmljb258fFEwKCk6bnVsbCxWLnR5cGUhPT0ibG9hZGluZyI/RjA6bnVsbCk6bnVsbCxtLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWNvbnRlbnQiOiIiLGNsYXNzTmFtZTpiMChqPT1udWxsP3ZvaWQgMDpqLmNvbnRlbnQsVj09bnVsbD92b2lkIDA6KFk9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6WS5jb250ZW50KX0sbS5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS10aXRsZSI6IiIsY2xhc3NOYW1lOmIwKGo9PW51bGw/dm9pZCAwOmoudGl0bGUsVj09bnVsbD92b2lkIDA6KHE9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6cS50aXRsZSl9LFYuanN4P1YuanN4OnR5cGVvZiBWLnRpdGxlPT09ImZ1bmN0aW9uIj9WLnRpdGxlKCk6Vi50aXRsZSksVi5kZXNjcmlwdGlvbj9tLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWRlc2NyaXB0aW9uIjoiIixjbGFzc05hbWU6YjAobyxWMCxqPT1udWxsP3ZvaWQgMDpqLmRlc2NyaXB0aW9uLFY9PW51bGw/dm9pZCAwOihHPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkcuZGVzY3JpcHRpb24pfSx0eXBlb2YgVi5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/Vi5kZXNjcmlwdGlvbigpOlYuZGVzY3JpcHRpb24pOm51bGwpLG0uaXNWYWxpZEVsZW1lbnQoVi5jYW5jZWwpP1YuY2FuY2VsOlYuY2FuY2VsJiZ1NShWLmNhbmNlbCk/bS5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiZGF0YS1idXR0b24iOiEwLCJkYXRhLWNhbmNlbCI6ITAsc3R5bGU6Vi5jYW5jZWxCdXR0b25TdHlsZXx8ZyxvbkNsaWNrOihYMSk9PntpZighdTUoVi5jYW5jZWwpKXJldHVybjtpZighbjEpcmV0dXJuO1YuY2FuY2VsLm9uQ2xpY2s9PW51bGx8fFYuY2FuY2VsLm9uQ2xpY2suY2FsbChWLmNhbmNlbCxYMSkseTEoKX0sY2xhc3NOYW1lOmIwKGo9PW51bGw/dm9pZCAwOmouY2FuY2VsQnV0dG9uLFY9PW51bGw/dm9pZCAwOihCPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkIuY2FuY2VsQnV0dG9uKX0sVi5jYW5jZWwubGFiZWwpOm51bGwsbS5pc1ZhbGlkRWxlbWVudChWLmFjdGlvbik/Vi5hY3Rpb246Vi5hY3Rpb24mJnU1KFYuYWN0aW9uKT9tLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJkYXRhLWJ1dHRvbiI6ITAsImRhdGEtYWN0aW9uIjohMCxzdHlsZTpWLmFjdGlvbkJ1dHRvblN0eWxlfHx1LG9uQ2xpY2s6KFgxKT0+e2lmKCF1NShWLmFjdGlvbikpcmV0dXJuO2lmKFYuYWN0aW9uLm9uQ2xpY2s9PW51bGx8fFYuYWN0aW9uLm9uQ2xpY2suY2FsbChWLmFjdGlvbixYMSksWDEuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47eTEoKX0sY2xhc3NOYW1lOmIwKGo9PW51bGw/dm9pZCAwOmouYWN0aW9uQnV0dG9uLFY9PW51bGw/dm9pZCAwOihOPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOk4uYWN0aW9uQnV0dG9uKX0sVi5hY3Rpb24ubGFiZWwpOm51bGwpfTtmdW5jdGlvbiB2Nigpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiJsdHIiO2lmKHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuImx0ciI7bGV0ICQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7aWYoJD09PSJhdXRvInx8ISQpcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZGlyZWN0aW9uO3JldHVybiAkfWZ1bmN0aW9uIG1KKCQsSil7bGV0IFE9e307cmV0dXJuWyQsSl0uZm9yRWFjaCgoWCxLKT0+e2xldCBZPUs9PT0xLHE9WT8iLS1tb2JpbGUtb2Zmc2V0IjoiLS1vZmZzZXQiLEc9WT94SjpTSjtmdW5jdGlvbiBCKE4pe1sidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoTCk9PntRW2Ake3F9LSR7TH1gXT10eXBlb2YgTj09PSJudW1iZXIiP2Ake059cHhgOk59KX1pZih0eXBlb2YgWD09PSJudW1iZXIifHx0eXBlb2YgWD09PSJzdHJpbmciKUIoWCk7ZWxzZSBpZih0eXBlb2YgWD09PSJvYmplY3QiKVsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoTik9PntpZihYW05dPT09dm9pZCAwKVFbYCR7cX0tJHtOfWBdPUc7ZWxzZSBRW2Ake3F9LSR7Tn1gXT10eXBlb2YgWFtOXT09PSJudW1iZXIiP2Ake1hbTl19cHhgOlhbTl19KTtlbHNlIEIoRyl9KSxRfXZhciBSNj1tLmZvcndhcmRSZWYoZnVuY3Rpb24oSixRKXtsZXR7aWQ6WCxpbnZlcnQ6Syxwb3NpdGlvbjpZPSJib3R0b20tcmlnaHQiLGhvdGtleTpxPVsiYWx0S2V5IiwiS2V5VCJdLGV4cGFuZDpHLGNsb3NlQnV0dG9uOkIsY2xhc3NOYW1lOk4sb2Zmc2V0OkwsbW9iaWxlT2Zmc2V0OlYsdGhlbWU6Qz0ibGlnaHQiLHJpY2hDb2xvcnM6VSxkdXJhdGlvbjpPLHN0eWxlOnosdmlzaWJsZVRvYXN0czpIPWJKLHRvYXN0T3B0aW9uczpGLGRpcjpBPXY2KCksZ2FwOmI9dkosaWNvbnM6RCxjb250YWluZXJBcmlhTGFiZWw6Uz0iTm90aWZpY2F0aW9ucyJ9PUosW3gsc109bS51c2VTdGF0ZShbXSksZz1tLnVzZU1lbW8oKCk9PntpZihYKXJldHVybiB4LmZpbHRlcigoRSk9PkUudG9hc3RlcklkPT09WCk7cmV0dXJuIHguZmlsdGVyKChFKT0+IUUudG9hc3RlcklkKX0sW3gsWF0pLHU9bS51c2VNZW1vKCgpPT57cmV0dXJuIEFycmF5LmZyb20obmV3IFNldChbWV0uY29uY2F0KGcuZmlsdGVyKChFKT0+RS5wb3NpdGlvbikubWFwKChFKT0+RS5wb3NpdGlvbikpKSl9LFtnLFldKSxbaSxvXT1tLnVzZVN0YXRlKFtdKSxbcixRMV09bS51c2VTdGF0ZSghMSksW04xLGNdPW0udXNlU3RhdGUoITEpLFtqLGFdPW0udXNlU3RhdGUoQyE9PSJzeXN0ZW0iP0M6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcz8iZGFyayI6ImxpZ2h0IjoibGlnaHQiKSxLMT1tLnVzZVJlZihudWxsKSxMMT1xLmpvaW4oIisiKS5yZXBsYWNlKC9LZXkvZywiIikucmVwbGFjZSgvRGlnaXQvZywiIiksSjE9bS51c2VSZWYobnVsbCksWTE9bS51c2VSZWYoITEpLEMxPW0udXNlQ2FsbGJhY2soKEUpPT57cygoZik9Pnt2YXIgXztpZighKChfPWYuZmluZCgocCk9PnAuaWQ9PT1FLmlkKSk9PW51bGw/dm9pZCAwOl8uZGVsZXRlKSlLMC5kaXNtaXNzKEUuaWQpO3JldHVybiBmLmZpbHRlcigoe2lkOnB9KT0+cCE9PUUuaWQpfSl9LFtdKTtyZXR1cm4gbS51c2VFZmZlY3QoKCk9PntyZXR1cm4gSzAuc3Vic2NyaWJlKChFKT0+e2lmKEUuZGlzbWlzcyl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57cygoZik9PmYubWFwKChfKT0+Xy5pZD09PUUuaWQ/ey4uLl8sZGVsZXRlOiEwfTpfKSl9KTtyZXR1cm59c2V0VGltZW91dCgoKT0+e20uZmx1c2hTeW5jKCgpPT57cygoZik9PntsZXQgXz1mLmZpbmRJbmRleCgocCk9PnAuaWQ9PT1FLmlkKTtpZihfIT09LTEpcmV0dXJuWy4uLmYuc2xpY2UoMCxfKSx7Li4uZltfXSwuLi5FfSwuLi5mLnNsaWNlKF8rMSldO3JldHVybltFLC4uLmZdfSl9KX0pfSl9LFt4XSksbS51c2VFZmZlY3QoKCk9PntpZihDIT09InN5c3RlbSIpe2EoQyk7cmV0dXJufWlmKEM9PT0ic3lzdGVtIilpZih3aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzKWEoImRhcmsiKTtlbHNlIGEoImxpZ2h0Iik7aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuO2xldCBFPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIik7dHJ5e0UuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwoe21hdGNoZXM6Zn0pPT57aWYoZilhKCJkYXJrIik7ZWxzZSBhKCJsaWdodCIpfSl9Y2F0Y2goZil7RS5hZGRMaXN0ZW5lcigoe21hdGNoZXM6X30pPT57dHJ5e2lmKF8pYSgiZGFyayIpO2Vsc2UgYSgibGlnaHQiKX1jYXRjaChwKXtjb25zb2xlLmVycm9yKHApfX0pfX0sW0NdKSxtLnVzZUVmZmVjdCgoKT0+e2lmKHgubGVuZ3RoPD0xKVExKCExKX0sW3hdKSxtLnVzZUVmZmVjdCgoKT0+e2xldCBFPShmKT0+e3ZhciBfO2lmKHEuZXZlcnkoKHYpPT5mW3ZdfHxmLmNvZGU9PT12KSl7dmFyIGw7UTEoITApLChsPUsxLmN1cnJlbnQpPT1udWxsfHxsLmZvY3VzKCl9aWYoZi5jb2RlPT09IkVzY2FwZSImJihkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09SzEuY3VycmVudHx8KChfPUsxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpfLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSkpUTEoITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsRSksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLEUpfSxbcV0pLG0udXNlRWZmZWN0KCgpPT57aWYoSzEuY3VycmVudClyZXR1cm4oKT0+e2lmKEoxLmN1cnJlbnQpSjEuY3VycmVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLEoxLmN1cnJlbnQ9bnVsbCxZMS5jdXJyZW50PSExfX0sW0sxLmN1cnJlbnRdKSxtLmNyZWF0ZUVsZW1lbnQoInNlY3Rpb24iLHtyZWY6USwiYXJpYS1sYWJlbCI6YCR7U30gJHtMMX1gLHRhYkluZGV4Oi0xLCJhcmlhLWxpdmUiOiJwb2xpdGUiLCJhcmlhLXJlbGV2YW50IjoiYWRkaXRpb25zIHRleHQiLCJhcmlhLWF0b21pYyI6ImZhbHNlIixzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmc6ITB9LHUubWFwKChFLGYpPT57dmFyIF87bGV0W3AsbF09RS5zcGxpdCgiLSIpO2lmKCFnLmxlbmd0aClyZXR1cm4gbnVsbDtyZXR1cm4gbS5jcmVhdGVFbGVtZW50KCJvbCIse2tleTpFLGRpcjpBPT09ImF1dG8iP3Y2KCk6QSx0YWJJbmRleDotMSxyZWY6SzEsY2xhc3NOYW1lOk4sImRhdGEtc29ubmVyLXRvYXN0ZXIiOiEwLCJkYXRhLXNvbm5lci10aGVtZSI6aiwiZGF0YS15LXBvc2l0aW9uIjpwLCJkYXRhLXgtcG9zaXRpb24iOmwsc3R5bGU6eyItLWZyb250LXRvYXN0LWhlaWdodCI6YCR7KChfPWlbMF0pPT1udWxsP3ZvaWQgMDpfLmhlaWdodCl8fDB9cHhgLCItLXdpZHRoIjpgJHtqSn1weGAsIi0tZ2FwIjpgJHtifXB4YCwuLi56LC4uLm1KKEwsVil9LG9uQmx1cjoodik9PntpZihZMS5jdXJyZW50JiYhdi5jdXJyZW50VGFyZ2V0LmNvbnRhaW5zKHYucmVsYXRlZFRhcmdldCkpe2lmKFkxLmN1cnJlbnQ9ITEsSjEuY3VycmVudClKMS5jdXJyZW50LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksSjEuY3VycmVudD1udWxsfX0sb25Gb2N1czoodik9PntpZih2LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZ2LnRhcmdldC5kYXRhc2V0LmRpc21pc3NpYmxlPT09ImZhbHNlIilyZXR1cm47aWYoIVkxLmN1cnJlbnQpWTEuY3VycmVudD0hMCxKMS5jdXJyZW50PXYucmVsYXRlZFRhcmdldH0sb25Nb3VzZUVudGVyOigpPT5RMSghMCksb25Nb3VzZU1vdmU6KCk9PlExKCEwKSxvbk1vdXNlTGVhdmU6KCk9PntpZighTjEpUTEoITEpfSxvbkRyYWdFbmQ6KCk9PlExKCExKSxvblBvaW50ZXJEb3duOih2KT0+e2lmKHYudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJnYudGFyZ2V0LmRhdGFzZXQuZGlzbWlzc2libGU9PT0iZmFsc2UiKXJldHVybjtjKCEwKX0sb25Qb2ludGVyVXA6KCk9PmMoITEpfSxnLmZpbHRlcigodik9PiF2LnBvc2l0aW9uJiZmPT09MHx8di5wb3NpdGlvbj09PUUpLm1hcCgodixHMSk9Pnt2YXIgejEsTTE7cmV0dXJuIG0uY3JlYXRlRWxlbWVudChmSix7a2V5OnYuaWQsaWNvbnM6RCxpbmRleDpHMSx0b2FzdDp2LGRlZmF1bHRSaWNoQ29sb3JzOlUsZHVyYXRpb246KHoxPUY9PW51bGw/dm9pZCAwOkYuZHVyYXRpb24pIT1udWxsP3oxOk8sY2xhc3NOYW1lOkY9PW51bGw/dm9pZCAwOkYuY2xhc3NOYW1lLGRlc2NyaXB0aW9uQ2xhc3NOYW1lOkY9PW51bGw/dm9pZCAwOkYuZGVzY3JpcHRpb25DbGFzc05hbWUsaW52ZXJ0OkssdmlzaWJsZVRvYXN0czpILGNsb3NlQnV0dG9uOihNMT1GPT1udWxsP3ZvaWQgMDpGLmNsb3NlQnV0dG9uKSE9bnVsbD9NMTpCLGludGVyYWN0aW5nOk4xLHBvc2l0aW9uOkUsc3R5bGU6Rj09bnVsbD92b2lkIDA6Ri5zdHlsZSx1bnN0eWxlZDpGPT1udWxsP3ZvaWQgMDpGLnVuc3R5bGVkLGNsYXNzTmFtZXM6Rj09bnVsbD92b2lkIDA6Ri5jbGFzc05hbWVzLGNhbmNlbEJ1dHRvblN0eWxlOkY9PW51bGw/dm9pZCAwOkYuY2FuY2VsQnV0dG9uU3R5bGUsYWN0aW9uQnV0dG9uU3R5bGU6Rj09bnVsbD92b2lkIDA6Ri5hY3Rpb25CdXR0b25TdHlsZSxjbG9zZUJ1dHRvbkFyaWFMYWJlbDpGPT1udWxsP3ZvaWQgMDpGLmNsb3NlQnV0dG9uQXJpYUxhYmVsLHJlbW92ZVRvYXN0OkMxLHRvYXN0czpnLmZpbHRlcigoVzEpPT5XMS5wb3NpdGlvbj09di5wb3NpdGlvbiksaGVpZ2h0czppLmZpbHRlcigoVzEpPT5XMS5wb3NpdGlvbj09di5wb3NpdGlvbiksc2V0SGVpZ2h0czpvLGV4cGFuZEJ5RGVmYXVsdDpHLGdhcDpiLGV4cGFuZGVkOnIsc3dpcGVEaXJlY3Rpb25zOkouc3dpcGVEaXJlY3Rpb25zfSl9KSl9KSl9KTtmdW5jdGlvbiBnNigpe3JldHVybiBaKFI2LHt0aGVtZToiZGFyayIscG9zaXRpb246ImJvdHRvbS1jZW50ZXIiLHZpc2libGVUb2FzdHM6NCxnYXA6OCxvZmZzZXQ6e2JvdHRvbToyNH0sdG9hc3RPcHRpb25zOnt1bnN0eWxlZDohMH0sc3R5bGU6e3pJbmRleDoyMTQ3NDgzNjQ3fSxjb250YWluZXJBcmlhTGFiZWw6InNlcnZlLXNpbSBub3RpZmljYXRpb25zIn0pfWZ1bmN0aW9uIGY2KHt0b2FzdDokfSl7bGV0IEo9JC5zdGF0dXM9PT0iZXJyb3IiLFE9JC5zdGF0dXM9PT0idXBsb2FkaW5nIixYPVEmJiQucHJvZ3Jlc3MhPT1udWxsLEs9JC5wcm9ncmVzcyE9bnVsbD9NYXRoLnJvdW5kKCQucHJvZ3Jlc3MqMTAwKTowO3JldHVybiBaKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJ1cGxvYWQtdG9hc3QiLGNsYXNzTmFtZTpgZmxleCB3LVttaW4oMzIwcHgsY2FsYygxMDB2dy0zMnB4KSldIGZsZXgtY29sIGdhcC0xLjUgcHgtMyBweS0yIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1sZyB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIGZvbnQtbW9ubyBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0gJHtKPyJzZWxlY3QtdGV4dCBjdXJzb3ItdGV4dCI6InNlbGVjdC1ub25lIGN1cnNvci1kZWZhdWx0In1gLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIG1pbi13LTAiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjNzXSIsc3R5bGU6e2JhY2tncm91bmQ6UT8iI2E1YjRmYyI6JC5zdGF0dXM9PT0ic3VjY2VzcyI/IiM0YWRlODAiOiIjZjg3MTcxIn19KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOltRJiZYJiZgVXBsb2FkaW5nICR7JC5uYW1lfeKApiAke0t9JWAsUSYmIVgmJigkLmtpbmQ9PT0iaXBhIj9gSW5zdGFsbGluZyAkeyQubmFtZX3igKZgOmBBZGRpbmcgJHskLm5hbWV94oCmYCksJC5zdGF0dXM9PT0ic3VjY2VzcyImJigkLmtpbmQ9PT0iaXBhIj9gSW5zdGFsbGVkICR7JC5uYW1lfWA6YEFkZGVkICR7JC5uYW1lfSB0byBQaG90b3NgKSxKJiZgJHskLm5hbWV9OiAkeyQubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQifWBdfSldfSksUSYmWigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBoLVszcHhdIHctZnVsbCBiZy13aGl0ZS84IHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIixjaGlsZHJlbjpYP1ooImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGJnLWFjY2VudCByb3VuZGVkLVsycHhdIFt0cmFuc2l0aW9uOndpZHRoXzEyMG1zX2xpbmVhcl0iLHN0eWxlOnt3aWR0aDpgJHtLfSVgfX0pOlooImRpdiIse2NsYXNzTmFtZToic2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGUgYWJzb2x1dGUgdG9wLTAgbGVmdC0wIGgtZnVsbCB3LVs0MCVdIGJnLWFjY2VudCByb3VuZGVkLVsycHhdIn0pfSldfSl9ZnVuY3Rpb24gbTYoe3dpZHRoOiQsaGVpZ2h0OkosdmlzaWJsZTpRfSl7cmV0dXJuIFooImRpdiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtMyBib3R0b20tMyB6LTIwIHBvaW50ZXItZXZlbnRzLW5vbmUgc2VsZWN0LW5vbmUgcm91bmRlZC1sZyBweC0yLjUgcHktMSB0ZXh0LVsxMS41cHhdIGZvbnQtbW9ubyBsZWFkaW5nLW5vbmUgdHJhY2tpbmctd2lkZSB0ZXh0LXdoaXRlLzk1IGJnLXBhbmVsLWJnLXRyYW5zbHVjZW50IHNoYWRvdy1bMF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4xOCksMF82cHhfMThweF9yZ2JhKDAsMCwwLDAuMjgpLGluc2V0XzBfMF8wXzFweF9yZ2JhKDI1NSwyNTUsMjU1LDAuMDYpXSBiYWNrZHJvcC1ibHVyLW1kIGJhY2tkcm9wLXNhdHVyYXRlLTE1MCB3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e29wYWNpdHk6UT8xOjAsdHJhbnNmb3JtOmB0cmFuc2xhdGVZKCR7UT8wOjR9cHgpIHNjYWxlKCR7UT8xOjAuOTZ9KWAsdHJhbnNmb3JtT3JpZ2luOiIxMDAlIDEwMCUiLHRyYW5zaXRpb246Im9wYWNpdHkgMTgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgdHJhbnNmb3JtIDIyMG1zIGN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIn0sY2hpbGRyZW46W01hdGgucm91bmQoJCksIiAiLFooInNwYW4iLHtjbGFzc05hbWU6Im9wYWNpdHktNjAgbXgtMC41IixjaGlsZHJlbjoiw5cifSksIiAiLE1hdGgucm91bmQoSildfSl9ZnVuY3Rpb24gcDYoe3N0cmVhbWluZzokfSl7bGV0IEo9JD8iIzRhZGU4MCI6IiM4ZThlOTMiO3JldHVybiBaKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoic3RyZWFtLXN0YXR1cy1waWxsIixjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtWzVweF0gdGV4dC1bMTJweF0gZm9udC1tb25vIGZvbnQtbWVkaXVtIGxlYWRpbmctbm9uZSB3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e2NvbG9yOkp9LCJhcmlhLWxpdmUiOiJwb2xpdGUiLGNoaWxkcmVuOltaKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE4c19lYXNlXSIsc3R5bGU6e2JhY2tncm91bmQ6Sn19KSwkPyJsaXZlIjoiY29ubmVjdGluZyJdfSl9ZnVuY3Rpb24gcEooJCxKLFEpe2xldCBYPVEubGF0Kk1hdGguUEkvMTgwLEs9KCQtUS5sYXQpKk1hdGguUEkvMTgwO3JldHVybnt4OihKLVEubG5nKSpNYXRoLlBJLzE4MCpNYXRoLmNvcyhYKSo2MzcxMDAwLHo6LUsqNjM3MTAwMH19ZnVuY3Rpb24gdUooJCxKLFEpe2xldCBYPVEubGF0Kk1hdGguUEkvMTgwLEs9LUovNjM3MTAwMCooMTgwL01hdGguUEkpLFk9JC8oNjM3MTAwMCpNYXRoLmNvcyhYKSkqKDE4MC9NYXRoLlBJKTtyZXR1cm57bGF0OlEubGF0K0ssbG5nOlEubG5nK1l9fWZ1bmN0aW9uIGxKKCQsSixRLFgsSyl7bGV0IFk9SypLLHE9WSpLLEc9KEIsTixMLFYpPT4wLjUqKDIqTisoLUIrTCkqSysoMipCLTUqTis0KkwtVikqWSsoLUIrMypOLTMqTCtWKSpxKTtyZXR1cm57eDpHKCQueCxKLngsUS54LFgueCksejpHKCQueixKLnosUS56LFgueikseTpHKCQueSxKLnksUS55LFgueSkscmF3QWx0OkcoJC5yYXdBbHQsSi5yYXdBbHQsUS5yYXdBbHQsWC5yYXdBbHQpfX1mdW5jdGlvbiBkSigkLEosUSl7aWYoJC5sZW5ndGg8MilyZXR1cm4gJC5zbGljZSgpO2xldCBYPVtdLEs9JC5sZW5ndGgsWT1RP0s6Sy0xO2ZvcihsZXQgcT0wO3E8WTtxKyspe2xldCBHPSRbUT8ocS0xK0spJUs6TWF0aC5tYXgoMCxxLTEpXSxCPSRbcSVLXSxOPSRbKHErMSklS10sTD0kW1E/KHErMiklSzpNYXRoLm1pbihLLTEscSsyKV0sVj1OLngtQi54LEM9Ti56LUIueixVPU1hdGguaHlwb3QoVixDKSxPPU1hdGgubWF4KDIsTWF0aC5jZWlsKFUvSikpO2ZvcihsZXQgej0wO3o8Tzt6Kyspe2xldCBIPXovTztYLnB1c2gobEooRyxCLE4sTCxIKSl9fWlmKCFRKVgucHVzaCgkW0stMV0pO3JldHVybiBYfWZ1bmN0aW9uIHU2KCQpe2lmKCQud2F5cG9pbnRzLmxlbmd0aDwyKXRocm93IEVycm9yKGBUcmFpbCAkeyQuaWR9IG5lZWRzIGF0IGxlYXN0IDIgd2F5cG9pbnRzYCk7bGV0IEo9e2xhdDokLndheXBvaW50cy5yZWR1Y2UoKHosSCk9PnorSC5sYXQsMCkvJC53YXlwb2ludHMubGVuZ3RoLGxuZzokLndheXBvaW50cy5yZWR1Y2UoKHosSCk9PnorSC5sbmcsMCkvJC53YXlwb2ludHMubGVuZ3RofSxRPSQud2F5cG9pbnRzLm1hcCgoeik9PnouYWx0Pz8wKSxYPU1hdGgubWluKC4uLlEpLEs9TWF0aC5tYXgoLi4uUSksWT0kLndheXBvaW50cy5tYXAoKHopPT57bGV0e3g6SCx6OkZ9PXBKKHoubGF0LHoubG5nLEopLEE9ei5hbHQ/PzA7cmV0dXJue3g6SCx6OkYseTpBLVgscmF3QWx0OkF9fSkscT1kSihZLDgsISEkLmxvb3ApLEc9W10sQj0wO2ZvcihsZXQgej0wO3o8cS5sZW5ndGg7eisrKXtsZXQgSD1xW3pdO2lmKHo+MCl7bGV0IEQ9cVt6LTFdO0IrPU1hdGguaHlwb3QoSC54LUQueCxILnotRC56LEgueS1ELnkpfWxldHtsYXQ6Rixsbmc6QX09dUooSC54LEgueixKKSxiPU1hdGgubWF4KDAsSC55KTtHLnB1c2goe3g6SC54LHo6SC56LHk6YixhcmM6QixsYXQ6Rixsbmc6QX0pfWxldCBOPTEvMCxMPS0xLzAsVj0xLzAsQz0tMS8wLFU9MS8wLE89LTEvMDtmb3IobGV0IHogb2YgRyl7aWYoei54PE4pTj16Lng7aWYoei54PkwpTD16Lng7aWYoei56PFYpVj16Lno7aWYoei56PkMpQz16Lno7aWYoei55PFUpVT16Lnk7aWYoei55Pk8pTz16Lnl9cmV0dXJue3RyYWlsOiQsb3JpZ2luOkoscG9pbnRzOkcsdG90YWxEaXN0YW5jZTpHW0cubGVuZ3RoLTFdLmFyYyxib3VuZHM6e3g6W04sTF0seTpbVSxPXSx6OltWLENdfSxyYXdNaW5BbHQ6WCxyYXdNYXhBbHQ6S319ZnVuY3Rpb24gczAoJCxKKXtsZXQgUT0kLnRvdGFsRGlzdGFuY2U7aWYoUT09PTApcmV0dXJuICQucG9pbnRzWzBdO2xldCBYPUo7aWYoJC50cmFpbC5sb29wKVg9KFglUStRKSVRO2Vsc2V7aWYoWDw9MClyZXR1cm4gJC5wb2ludHNbMF07aWYoWD49USlyZXR1cm4gJC5wb2ludHNbJC5wb2ludHMubGVuZ3RoLTFdfWxldCBLPTAsWT0kLnBvaW50cy5sZW5ndGgtMTt3aGlsZShLKzE8WSl7bGV0IEw9SytZPj4+MTtpZigkLnBvaW50c1tMXS5hcmM8PVgpSz1MO2Vsc2UgWT1MfWxldCBxPSQucG9pbnRzW0tdLEc9JC5wb2ludHNbWV0sQj1HLmFyYy1xLmFyYyxOPUI9PT0wPzA6KFgtcS5hcmMpL0I7cmV0dXJue3g6cS54KyhHLngtcS54KSpOLHo6cS56KyhHLnotcS56KSpOLHk6cS55KyhHLnktcS55KSpOLGFyYzpYLGxhdDpxLmxhdCsoRy5sYXQtcS5sYXQpKk4sbG5nOnEubG5nKyhHLmxuZy1xLmxuZykqTn19ZnVuY3Rpb24gcjMoJCl7c3dpdGNoKCQpe2Nhc2Uid2FsayI6cmV0dXJuIDEuNDtjYXNlInJ1biI6cmV0dXJuIDM7Y2FzZSJjeWNsZSI6cmV0dXJuIDUuNTtjYXNlImRyaXZlIjpyZXR1cm4gMTMuNH19dmFyIGNKPVt7bGF0OjM3LjMzMjcyLGxuZzotMTIyLjAwODMzLGFsdDo0OX0se2xhdDozNy4zMzMwOSxsbmc6LTEyMi4wMDczNSxhbHQ6NDh9LHtsYXQ6MzcuMzMzNzMsbG5nOi0xMjIuMDA2NjMsYWx0OjQ5fSx7bGF0OjM3LjMzNDU0LGxuZzotMTIyLjAwNjI3LGFsdDo0OX0se2xhdDozNy4zMzU0LGxuZzotMTIyLjAwNjMzLGFsdDo0OX0se2xhdDozNy4zMzYxOCxsbmc6LTEyMi4wMDY3OSxhbHQ6NDV9LHtsYXQ6MzcuMzM2NzUsbG5nOi0xMjIuMDA3NTksYWx0OjQ1fSx7bGF0OjM3LjMzNzA0LGxuZzotMTIyLjAwODYxLGFsdDo0Nn0se2xhdDozNy4zMzY5OCxsbmc6LTEyMi4wMDk2OSxhbHQ6NDh9LHtsYXQ6MzcuMzM2NjIsbG5nOi0xMjIuMDEwNjYsYWx0OjQ4fSx7bGF0OjM3LjMzNTk4LGxuZzotMTIyLjAxMTM4LGFsdDo0OX0se2xhdDozNy4zMzUxNyxsbmc6LTEyMi4wMTE3NCxhbHQ6NTB9LHtsYXQ6MzcuMzM0MzEsbG5nOi0xMjIuMDExNjksYWx0OjUwfSx7bGF0OjM3LjMzMzU0LGxuZzotMTIyLjAxMTIyLGFsdDo1MH0se2xhdDozNy4zMzI5Nixsbmc6LTEyMi4wMTA0MixhbHQ6NTF9LHtsYXQ6MzcuMzMyNjgsbG5nOi0xMjIuMDA5NCxhbHQ6NTB9XSxvSj1be2xhdDozNy44MzIxMixsbmc6LTEyMi40ODA2NSxhbHQ6MzB9LHtsYXQ6MzcuODI5MzcsbG5nOi0xMjIuNDc5NzQsYWx0OjMwfSx7bGF0OjM3LjgyNjQ5LGxuZzotMTIyLjQ3OTQsYWx0OjMwfSx7bGF0OjM3LjgyMzYyLGxuZzotMTIyLjQ3OTA3LGFsdDo0NX0se2xhdDozNy44MjA3NCxsbmc6LTEyMi40Nzg3MyxhbHQ6NTl9LHtsYXQ6MzcuODE3ODYsbG5nOi0xMjIuNDc4MzksYWx0OjY2fSx7bGF0OjM3LjgxNDk4LGxuZzotMTIyLjQ3ODA2LGFsdDo2Nn0se2xhdDozNy44MTIxMSxsbmc6LTEyMi40Nzc3MixhbHQ6NTh9LHtsYXQ6MzcuODA5MjMsbG5nOi0xMjIuNDc3MzQsYWx0OjQ0fSx7bGF0OjM3LjgwOTQ5LGxuZzotMTIyLjQ3NzMsYWx0OjQ1fSx7bGF0OjM3LjgxMjM2LGxuZzotMTIyLjQ3NzY1LGFsdDo1OX0se2xhdDozNy44MTUyNCxsbmc6LTEyMi40Nzc5OCxhbHQ6NjZ9LHtsYXQ6MzcuODE4MTIsbG5nOi0xMjIuNDc4MzIsYWx0OjY2fSx7bGF0OjM3LjgyMSxsbmc6LTEyMi40Nzg2NixhbHQ6NTh9LHtsYXQ6MzcuODIzODcsbG5nOi0xMjIuNDc5LGFsdDo0NH0se2xhdDozNy44MjY3NSxsbmc6LTEyMi40NzkzMyxhbHQ6MzB9LHtsYXQ6MzcuODI5NjMsbG5nOi0xMjIuNDc5NjcsYWx0OjMwfSx7bGF0OjM3LjgzMjMzLGxuZzotMTIyLjQ4MDcyLGFsdDozMH1dLHJKPVt7bGF0OjM3Ljg4NjY0LGxuZzotMTIyLjYyNTk5LGFsdDoxMjF9LHtsYXQ6MzcuODg4ODcsbG5nOi0xMjIuNjIzMzIsYWx0OjEzNX0se2xhdDozNy44OTExNSxsbmc6LTEyMi42MjE2LGFsdDoxNjR9LHtsYXQ6MzcuODkzNTMsbG5nOi0xMjIuNjE5MjEsYWx0OjE4MH0se2xhdDozNy44OTQ2Nixsbmc6LTEyMi42MTU3NyxhbHQ6MjIwfSx7bGF0OjM3Ljg5NjMxLGxuZzotMTIyLjYxMjY4LGFsdDoyNzN9LHtsYXQ6MzcuODk5MTcsbG5nOi0xMjIuNjEwOTgsYWx0OjMxM30se2xhdDozNy45MDE2Nixsbmc6LTEyMi42MDg1NSxhbHQ6MzQyfSx7bGF0OjM3LjkwMTk5LGxuZzotMTIyLjYwNjAxLGFsdDo0MDh9LHtsYXQ6MzcuOTAzMzksbG5nOi0xMjIuNjA0MDEsYWx0OjQ1MH0se2xhdDozNy45MDY2Mixsbmc6LTEyMi42MDI5MSxhbHQ6NDQwfSx7bGF0OjM3LjkwOTcxLGxuZzotMTIyLjYwMTczLGFsdDo0MzJ9LHtsYXQ6MzcuOTEyMTMsbG5nOi0xMjIuNjAwMDcsYWx0OjQzNn0se2xhdDozNy45MTQzOSxsbmc6LTEyMi41OTc4LGFsdDo0MTB9LHtsYXQ6MzcuOTEyODUsbG5nOi0xMjIuNTk1MDQsYWx0OjQyMn0se2xhdDozNy45MTI3NCxsbmc6LTEyMi41OTIwMixhbHQ6NDI1fSx7bGF0OjM3LjkxNSxsbmc6LTEyMi41OTAzMixhbHQ6NDEyfSx7bGF0OjM3LjkxNjM3LGxuZzotMTIyLjU4OTAzLGFsdDo0MDZ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTg1OTUsYWx0OjM4Mn0se2xhdDozNy45MTc0LGxuZzotMTIyLjU4Mzk4LGFsdDozNzJ9LHtsYXQ6MzcuOTE2NDIsbG5nOi0xMjIuNTgyMzYsYWx0OjM1Mn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODAxMSxhbHQ6MzQyfV0saUo9W3tsYXQ6NDAuNzgyMTYsbG5nOi03My45NjI1NCxhbHQ6Mzd9LHtsYXQ6NDAuNzgyMjEsbG5nOi03My45NjA5OCxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjgsbG5nOi03My45NjAxLGFsdDozNn0se2xhdDo0MC43ODQ0LGxuZzotNzMuOTU5MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg1NSxsbmc6LTczLjk1ODQ4LGFsdDozNn0se2xhdDo0MC43ODY2NCxsbmc6LTczLjk1Nzc0LGFsdDozNn0se2xhdDo0MC43ODc5LGxuZzotNzMuOTU3NjQsYWx0OjM2fSx7bGF0OjQwLjc4ODk4LGxuZzotNzMuOTU3OTIsYWx0OjM2fSx7bGF0OjQwLjc4ODY4LGxuZzotNzMuOTU5NTEsYWx0OjM3fSx7bGF0OjQwLjc4ODk3LGxuZzotNzMuOTYxMTIsYWx0OjM2fSx7bGF0OjQwLjc4ODMzLGxuZzotNzMuOTYyNSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4MjgsbG5nOi03My45NjQxNixhbHQ6Mzd9LHtsYXQ6NDAuNzg4MDUsbG5nOi03My45NjU3MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg2OTEsbG5nOi03My45NjYzNixhbHQ6MzZ9LHtsYXQ6NDAuNzg1NjYsbG5nOi03My45NjY2NSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NTgsbG5nOi03My45NjYwOCxhbHQ6MzZ9LHtsYXQ6NDAuNzg0MDIsbG5nOi03My45NjQ1OSxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjIsbG5nOi03My45NjMzNCxhbHQ6Mzd9XSxuSj1be2xhdDozNy41OTY1OSxsbmc6LTEyMi41MDMxNixhbHQ6NH0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg1MDUsbG5nOi0xMjIuNTA2OTgsYWx0OjkzfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH1dLHQwPVt7aWQ6ImFwcGxlLXBhcmstbG9vcCIsbmFtZToiQXBwbGUgUGFyayBMb29wIixkZXNjcmlwdGlvbjoiQ3VwZXJ0aW5vIOKAoiBmbGF0IHJpbmcgcm9hZCIsbW9kZToid2FsayIsd2F5cG9pbnRzOmNKLGxvb3A6ITB9LHtpZDoiZ29sZGVuLWdhdGUiLG5hbWU6IkdvbGRlbiBHYXRlIENyb3NzaW5nIixkZXNjcmlwdGlvbjoiU2FuIEZyYW5jaXNjbyDigKIgYnJpZGdlIHJvdW5kLXRyaXAiLG1vZGU6InJ1biIsd2F5cG9pbnRzOm9KLGxvb3A6ITB9LHtpZDoidGFtLXJpZGdlIixuYW1lOiJNdC4gVGFtIFJpZGdlIixkZXNjcmlwdGlvbjoiU3RpbnNvbiBCZWFjaCDigKIgU3RlZXAgUmF2aW5lICsgTWF0dCBEYXZpcyBsb29wIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6ckosbG9vcDohMH0se2lkOiJjZW50cmFsLXBhcmsiLG5hbWU6IlJlc2Vydm9pciBMb29wIixkZXNjcmlwdGlvbjoiQ2VudHJhbCBQYXJrIOKAoiAyLjUga20iLG1vZGU6InJ1biIsd2F5cG9pbnRzOmlKLGxvb3A6ITB9LHtpZDoicGNoLXBhY2lmaWNhIixuYW1lOiJQYWNpZmljIENvYXN0IEh3eSIsZGVzY3JpcHRpb246IlBhY2lmaWNhIOKAoiBEZXZpbCdzIFNsaWRlIHJvdW5kLXRyaXAiLG1vZGU6ImRyaXZlIix3YXlwb2ludHM6bkosbG9vcDohMH1dO2Z1bmN0aW9uIGUxKHtvcGVuOiQsb25PcGVuQ2hhbmdlOkosc3VtbWFyeTpRLGNoaWxkcmVuOlgsc3VtbWFyeUNsYXNzTmFtZTpLPSIiLGJvZHlDbGFzc05hbWU6WT0iZmxleCBmbGV4LWNvbCBnYXAtMi41IHB0LTIuNSIsY2xhc3NOYW1lOnE9IiIsLi4uR30pe3JldHVybiBaKCJkZXRhaWxzIix7b3BlbjokLG9uVG9nZ2xlOihCKT0+SihCLmN1cnJlbnRUYXJnZXQub3BlbiksY2xhc3NOYW1lOmBsZW0tc2VjdGlvbiBiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIgJHtxfWAsLi4uRyxjaGlsZHJlbjpbWigic3VtbWFyeSIse2NsYXNzTmFtZTpgbGVtLXRvZ2dsZSBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSB0ZXh0LXdoaXRlLzkwIG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldICR7S31gLGNoaWxkcmVuOltRLFoodTIse29wZW46JH0pXX0pLFooImRpdiIse2NsYXNzTmFtZTpZLGNoaWxkcmVuOlh9KV19KX1mdW5jdGlvbiBsNSh7bGFiZWw6JCx2YWx1ZTpKLG9wdGlvbnM6USxkaXNhYmxlZDpYLG9uQ2hhbmdlOkssY2xhc3NOYW1lOll9KXtsZXRbcSxHXT1NKCExKSxCPVQobnVsbCksTj1UKG51bGwpLFtMLFZdPU0obnVsbCksQz0oKT0+e2xldCBIPUIuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIUgpcmV0dXJuO1Yoe3RvcDpILmJvdHRvbSs0LGxlZnQ6SC5sZWZ0LG1pbldpZHRoOkgud2lkdGh9KX07VDAoKCk9PntpZihxKUMoKX0sW3FdKSxUMCgoKT0+e2lmKCFxfHwhTClyZXR1cm47bGV0IEg9Ti5jdXJyZW50O2lmKCFIKXJldHVybjtsZXQgRj04LEE9d2luZG93LmlubmVyV2lkdGgtSC5vZmZzZXRXaWR0aC1GO2lmKEwubGVmdD5BKVYoey4uLkwsbGVmdDpNYXRoLm1heChGLEEpfSl9LFtxLExdKSx5KCgpPT57aWYoIXEpcmV0dXJuO2xldCBIPSgpPT5HKCExKSxGPShiKT0+e2xldCBEPWIudGFyZ2V0O2lmKCFOLmN1cnJlbnQ/LmNvbnRhaW5zKEQpJiYhQi5jdXJyZW50Py5jb250YWlucyhEKSlIKCl9LEE9KGIpPT57aWYoIU4uY3VycmVudD8uY29udGFpbnMoYi50YXJnZXQpKUMoKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEYpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLEEsITApLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLEgpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsRiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsQSwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsSCl9fSxbcV0pO2xldCBVPVQoITEpO3koKCk9PntpZighcSl7VS5jdXJyZW50PSExO3JldHVybn1pZighTHx8VS5jdXJyZW50KXJldHVybjtsZXQgSD1OLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoIltyb2xlPW9wdGlvbl0iKTtpZighSD8ubGVuZ3RoKXJldHVybjtVLmN1cnJlbnQ9ITA7bGV0IEY9US5maW5kSW5kZXgoKEEpPT5BLnZhbHVlPT09Sik7SFtNYXRoLm1heChGLDApXT8uZm9jdXMoKX0sW3EsTCxRLEpdKTtsZXQgTz0oSCk9PntsZXQgRj1bLi4uTi5jdXJyZW50Py5xdWVyeVNlbGVjdG9yQWxsKCJbcm9sZT1vcHRpb25dIik/P1tdXSxBPUYuaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtpZihILmtleT09PSJBcnJvd0Rvd24ifHxILmtleT09PSJBcnJvd1VwIil7SC5wcmV2ZW50RGVmYXVsdCgpO2xldCBiPUgua2V5PT09IkFycm93RG93biI/TWF0aC5taW4oQSsxLEYubGVuZ3RoLTEpOk1hdGgubWF4KEEtMSwwKTtGW2JdPy5mb2N1cygpfWVsc2UgaWYoSC5rZXk9PT0iRXNjYXBlIilILnByZXZlbnREZWZhdWx0KCksRyghMSksQi5jdXJyZW50Py5mb2N1cygpfSx6PVEuZmluZCgoSCk9PkgudmFsdWU9PT1KKTtyZXR1cm4gWihaMSx7Y2hpbGRyZW46W1ooImJ1dHRvbiIse3JlZjpCLHR5cGU6ImJ1dHRvbiIsImFyaWEtbGFiZWwiOiQsImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94IiwiYXJpYS1leHBhbmRlZCI6cSxkaXNhYmxlZDpYLG9uQ2xpY2s6KCk9PkcoKEgpPT4hSCksY2xhc3NOYW1lOmB0ZXh0LWxlZnQgZm9udC1baW5oZXJpdF0gY3Vyc29yLXBvaW50ZXIgZGlzYWJsZWQ6Y3Vyc29yLWRlZmF1bHQgJHtZPz8iIn1gLGNoaWxkcmVuOlooInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIHRydW5jYXRlIixjaGlsZHJlbjp6Py5sYWJlbD8/Sn0pfSkscSYmTCYmSDMoWigiZGl2Iix7cmVmOk4scm9sZToibGlzdGJveCIsImFyaWEtbGFiZWwiOiQsb25LZXlEb3duOk8sc3R5bGU6e3RvcDpMLnRvcCxsZWZ0OkwubGVmdCxtaW5XaWR0aDpMLm1pbldpZHRofSxjbGFzc05hbWU6ImZpeGVkIG1heC1oLTkwIG92ZXJmbG93LXktYXV0byBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzEwcHhdIHAtMSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIHotNTAiLGNoaWxkcmVuOlEubWFwKChIKT0+WigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjpILnZhbHVlPT09SixvbkNsaWNrOigpPT57SyhILnZhbHVlKSxHKCExKSxCLmN1cnJlbnQ/LmZvY3VzKCl9LGNsYXNzTmFtZTpgYmxvY2sgdy1mdWxsIHRleHQtbGVmdCBmb250LVtpbmhlcml0XSBweC0yLjUgcHktMSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIHdoaXRlc3BhY2Utbm93cmFwIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLXdoaXRlLzggZm9jdXMtdmlzaWJsZTpiZy13aGl0ZS84IG91dGxpbmUtbm9uZSAke0gudmFsdWU9PT1KPyJ0ZXh0LWFjY2VudCI6IiJ9YCxjaGlsZHJlbjpILmxhYmVsfSxILnZhbHVlKSl9KSxkb2N1bWVudC5ib2R5KV19KX12YXIgYUo9NjUwLGkzPVsxLDIsNSwyMF0sbDY9MTAwMCxuMz17c3RhdHVzOiJpZGxlIixhcmM6MCxlbGFwc2VkTXM6MH07ZnVuY3Rpb24gbjYoe3VkaWQ6JCxleGVjOkp9KXtsZXRbUSxYXT1NKCExKSxbSyxZXT1NKHQwWzBdLmlkKSxbcSxHXT1NKHQwWzBdLm1vZGUpLFtCLE5dPU0oMSksW0wsVl09TShuMyksW0MsVV09TShudWxsKSxPPVQxKCgpPT50MC5maW5kKChjKT0+Yy5pZD09PUspPz90MFswXSxbS10pLHo9VDEoKCk9PnU2KE8pLFtPXSksSD1UKDApLEY9VCgiaWRsZSIpLEE9VChyMyhxKSpCKSxiPVQoMCksRD1UKHopLFM9VChudWxsKTt5KCgpPT57QS5jdXJyZW50PXIzKHEpKkJ9LFtxLEJdKTtsZXQgeD1UKG51bGwpO3koKCk9PntsZXQgYz1ELmN1cnJlbnQsaj1ILmN1cnJlbnQ7aWYoRC5jdXJyZW50PXosYyYmYyE9PXopeC5jdXJyZW50PWVKKGMsaix6LHBlcmZvcm1hbmNlLm5vdygpKTtILmN1cnJlbnQ9MCxiLmN1cnJlbnQ9MCxGLmN1cnJlbnQ9ImlkbGUiLFMuY3VycmVudD1udWxsLFYobjMpfSxbel0pO2xldCBzPVQoMCksZz1UKG51bGwpLHU9VChudWxsKTt5KCgpPT57bGV0IGM9MCxqPShhKT0+e2xldCBLMT1nLmN1cnJlbnQsTDE9SzE9PW51bGw/MTY6TWF0aC5taW4oNjQsYS1LMSk7aWYoZy5jdXJyZW50PWEscy5jdXJyZW50PShzLmN1cnJlbnQrTDEqMC4wMDAxMiklKE1hdGguUEkqMiksRi5jdXJyZW50PT09InBsYXlpbmciKXtsZXQgWTE9QS5jdXJyZW50KkwxLzEwMDA7SC5jdXJyZW50Kz1ZMSxiLmN1cnJlbnQrPUwxO2xldCBDMT1ELmN1cnJlbnQudG90YWxEaXN0YW5jZTtpZighRC5jdXJyZW50LnRyYWlsLmxvb3AmJkguY3VycmVudD49QzEpSC5jdXJyZW50PUMxLEYuY3VycmVudD0icGF1c2VkIixWKHtzdGF0dXM6InBhdXNlZCIsYXJjOkMxLGVsYXBzZWRNczpiLmN1cnJlbnR9KX1sZXQgSjE9dS5jdXJyZW50O2lmKEoxKXtsZXQgWTE9RC5jdXJyZW50LEMxPW51bGwsRT14LmN1cnJlbnQ7aWYoRSl7bGV0IGY9KGEtRS5zdGFydE1zKS9hSjtpZihmPj0xKXguY3VycmVudD1udWxsO2Vsc2V7bGV0IF89UVEoZik7WTE9SlEoRSxfKSxDMT17eDpFLnByZXZNYXJrZXIueCsoRS5uZXh0TWFya2VyLngtRS5wcmV2TWFya2VyLngpKl8seTpFLnByZXZNYXJrZXIueSsoRS5uZXh0TWFya2VyLnktRS5wcmV2TWFya2VyLnkpKl8sejpFLnByZXZNYXJrZXIueisoRS5uZXh0TWFya2VyLnotRS5wcmV2TWFya2VyLnopKl99fX1aUShKMSxZMSxILmN1cnJlbnQscy5jdXJyZW50LGEsRi5jdXJyZW50PT09InBsYXlpbmciLEMxKX1jPXJlcXVlc3RBbmltYXRpb25GcmFtZShqKX07cmV0dXJuIGM9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGopLCgpPT5jYW5jZWxBbmltYXRpb25GcmFtZShjKX0sW10pLHkoKCk9PntsZXQgYz1zZXRJbnRlcnZhbCgoKT0+e2lmKEYuY3VycmVudD09PSJwbGF5aW5nIilWKHtzdGF0dXM6InBsYXlpbmciLGFyYzpILmN1cnJlbnQsZWxhcHNlZE1zOmIuY3VycmVudH0pfSwyNTApO3JldHVybigpPT5jbGVhckludGVydmFsKGMpfSxbXSkseSgoKT0+e2lmKEwuc3RhdHVzIT09InBsYXlpbmciKXJldHVybjtsZXQgYz0hMSxqPTAsYT1udWxsLEsxPWFzeW5jKCk9PntpZihjfHxhKXJldHVybjtsZXQgSjE9RGF0ZS5ub3coKTtpZihKMS1qPGw2KXJldHVybjtqPUoxO2xldCBZMT1zMChELmN1cnJlbnQsSC5jdXJyZW50KSxDMT1geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7WTEubGF0LnRvRml4ZWQoNyl9LCR7WTEubG5nLnRvRml4ZWQoNyl9YDthPUooQzEpLnRoZW4oKEUpPT57aWYoYylyZXR1cm47aWYoRS5leGl0Q29kZSE9PTApVShpNihFLnN0ZGVycil8fCJzaW1jdGwgbG9jYXRpb24gc2V0IGZhaWxlZCIpO2Vsc2UgVShudWxsKX0pLmNhdGNoKChFKT0+e2lmKCFjKVUoRSBpbnN0YW5jZW9mIEVycm9yP0UubWVzc2FnZTpTdHJpbmcoRSkpfSkuZmluYWxseSgoKT0+e2E9bnVsbH0pfTtLMSgpO2xldCBMMT1zZXRJbnRlcnZhbChLMSxsNik7cmV0dXJuKCk9PntjPSEwLGNsZWFySW50ZXJ2YWwoTDEpfX0sW0wuc3RhdHVzLCQsSl0pO2xldCBpPXcoKCk9PntpZihGLmN1cnJlbnQ9PT0icGxheWluZyIpe0YuY3VycmVudD0icGF1c2VkIixWKChjKT0+KHsuLi5jLHN0YXR1czoicGF1c2VkIn0pKTtyZXR1cm59aWYoSC5jdXJyZW50Pj1ELmN1cnJlbnQudG90YWxEaXN0YW5jZSYmIUQuY3VycmVudC50cmFpbC5sb29wKUguY3VycmVudD0wLGIuY3VycmVudD0wO2lmKFMuY3VycmVudD09bnVsbCl7bGV0IGM9czAoRC5jdXJyZW50LEguY3VycmVudCk7Uy5jdXJyZW50PXtsYXQ6Yy5sYXQsbG5nOmMubG5nfX1GLmN1cnJlbnQ9InBsYXlpbmciLFYoKGMpPT4oey4uLmMsc3RhdHVzOiJwbGF5aW5nIixhcmM6SC5jdXJyZW50LGVsYXBzZWRNczpiLmN1cnJlbnR9KSl9LFtdKSxvPXcoKCk9PntGLmN1cnJlbnQ9ImlkbGUiLEguY3VycmVudD0wLGIuY3VycmVudD0wLFYobjMpO2xldCBjPVMuY3VycmVudDtTLmN1cnJlbnQ9bnVsbDtsZXQgaj1jP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtjLmxhdC50b0ZpeGVkKDcpfSwke2MubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gY2xlYXJgO0ooaikudGhlbigoYSk9PntpZihhLmV4aXRDb2RlIT09MClVKGk2KGEuc3RkZXJyKXx8bnVsbCk7ZWxzZSBVKG51bGwpfSl9LFtKLCRdKSxyPXcoKGMpPT57WShjKTtsZXQgaj10MC5maW5kKChhKT0+YS5pZD09PWMpO2lmKGopRyhqLm1vZGUpfSxbXSk7eSgoKT0+KCk9PntpZihGLmN1cnJlbnQ9PT0iaWRsZSIpcmV0dXJuO2xldCBjPVMuY3VycmVudCxqPWM/YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IHNldCAke2MubGF0LnRvRml4ZWQoNyl9LCR7Yy5sbmcudG9GaXhlZCg3KX1gOmB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBjbGVhcmA7SihqKS5jYXRjaCgoKT0+e30pfSxbSiwkXSk7bGV0IFExPUwuc3RhdHVzPT09InBsYXlpbmciLE4xPVExP2Ake3MzKEwuYXJjKX0gwrcgJHtvNihMLmVsYXBzZWRNcyl9YDpzMyh6LnRvdGFsRGlzdGFuY2UpO3JldHVybiBaKGUxLHtvcGVuOlEsb25PcGVuQ2hhbmdlOlgsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fbWlubWF4KDAsMWZyKV9hdXRvXSBbY29udGFpbmVyLXR5cGU6aW5saW5lLXNpemVdIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6WihaMSx7Y2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkxvY2F0aW9uIn0pLFE/Wigic3BhbiIseyJkYXRhLWxvY2F0aW9uLXN0YXR1cyI6ITAsY2xhc3NOYW1lOiJtaW4tdy0wIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIG1heC13LWZ1bGwiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjJzLGJveC1zaGFkb3dfMC4yc10iLHN0eWxlOntiYWNrZ3JvdW5kOlExPyIjNGFkZTgwIjp6LnRvdGFsRGlzdGFuY2U+MD8icmdiYSgyNTUsMjU1LDI1NSwwLjMpIjoidHJhbnNwYXJlbnQiLGJveFNoYWRvdzpRMT8iMCAwIDZweCByZ2JhKDc0LDIyMiwxMjgsMC43KSI6Im5vbmUifX0pLFooInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMiLGNoaWxkcmVuOk4xfSksIVExJiZaKCJzcGFuIix7ImRhdGEtbG9jYXRpb24tc3RhdHVzLXRvdGFsIjohMCxjbGFzc05hbWU6InNocmluay0wIixjaGlsZHJlbjoidG90YWwifSldfSk6Wigic3BhbiIse30pXX0pLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGJsb2NrIixjaGlsZHJlbjpbWihsNSx7bGFiZWw6IlRyYWlsIix2YWx1ZTpLLG9uQ2hhbmdlOnIsb3B0aW9uczp0MC5tYXAoKGMpPT4oe3ZhbHVlOmMuaWQsbGFiZWw6Yy5uYW1lfSkpLGNsYXNzTmFtZToiYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLW1kIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gcHktMS41IHByLVsyNnB4XSBwbC0yIHctZnVsbCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGJvcmRlci1jb2xvcl8wLjEyc10gaG92ZXI6Ymctd2hpdGUvWzAuMDddIGhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE2KV0gZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOmJnLXdoaXRlL1swLjA4XSBmb2N1czpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4yNCldIn0pLFooInNwYW4iLHtjbGFzc05hbWU6ImFic29sdXRlIHJpZ2h0LVs5cHhdIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMiBwb2ludGVyLWV2ZW50cy1ub25lIGZsZXggaXRlbXMtY2VudGVyIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpaKHUyLHtvcGVuOiExfSl9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOk8uZGVzY3JpcHRpb259KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCByb3VuZGVkLVsxMHB4XSBvdmVyZmxvdy1oaWRkZW4gYmctWyMwYTBhMGNdIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIFthc3BlY3QtcmF0aW86MTYvMTFdIixjaGlsZHJlbjpbWigiY2FudmFzIix7cmVmOnUsY2xhc3NOYW1lOiJ3LWZ1bGwgaC1mdWxsIGJsb2NrIn0pLFoodEose3ByZXBhcmVkOnp9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJfMWZyXzFmcl0gZ2FwLTEuNSIsY2hpbGRyZW46W1ooYTMse2xhYmVsOiJEaXN0YW5jZSIsdmFsdWU6czMoTC5hcmMpfSksWihhMyx7bGFiZWw6IlBhY2UiLHZhbHVlOktRKEEuY3VycmVudCl9KSxaKGEzLHtsYWJlbDoiRWxhcHNlZCIsdmFsdWU6bzYoTC5lbGFwc2VkTXMpfSldfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGdhcC0xLjUiLGNoaWxkcmVuOltaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6aSxjbGFzc05hbWU6YGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMS41IHB5LTIgcHgtMi41IGJvcmRlci1ub25lIHJvdW5kZWQtWzdweF0gdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSAke1ExPyJiZy13aGl0ZS9bMC4xNl0gdGV4dC13aGl0ZSBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjIyXSI6ImJnLXN1Y2Nlc3MtZW1lcmFsZCB0ZXh0LVsjMDYyMDE4XSBlbmFibGVkOmhvdmVyOmJyaWdodG5lc3MtWzEuMDhdIn1gLCJhcmlhLXByZXNzZWQiOlExLHRpdGxlOlExPyJQYXVzZSI6IlBsYXkiLGNoaWxkcmVuOltRMT9aKFQzLHt9KTpaKGwyLHt9KSxaKCJzcGFuIix7Y2hpbGRyZW46UTE/IlBhdXNlIjoiUGxheSJ9KV19KSxaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6byxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0zIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LW1lZGl1bSBiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMDZdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGVuYWJsZWQ6aG92ZXI6dGV4dC13aGl0ZSBkaXNhYmxlZDpvcGFjaXR5LTQwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCIsZGlzYWJsZWQ6TC5zdGF0dXM9PT0iaWRsZSImJkwuYXJjPT09MCx0aXRsZToiU3RvcCBhbmQgY2xlYXIgc2ltdWxhdGVkIGxvY2F0aW9uIixjaGlsZHJlbjpbWihkMix7fSksWigic3BhbiIse2NoaWxkcmVuOiJTdG9wIn0pXX0pXX0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LXJvdyBpdGVtcy1zdHJldGNoIGdhcC0xLjUiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpaKHNKLHthcmlhTGFiZWw6IlRyYW5zcG9ydCBtb2RlIix2YWx1ZTpxLG9uQ2hhbmdlOihjKT0+RyhjKSxvcHRpb25zOlt7dmFsdWU6IndhbGsiLGxhYmVsOiJXYWxrIixpY29uOlooRTMse30pfSx7dmFsdWU6InJ1biIsbGFiZWw6IlJ1biIsaWNvbjpaKHkzLHt9KX0se3ZhbHVlOiJjeWNsZSIsbGFiZWw6IkN5Y2xlIixpY29uOlooYjMse30pfSx7dmFsdWU6ImRyaXZlIixsYWJlbDoiRHJpdmUiLGljb246WihTMyx7fSl9XX0pfSksWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT57bGV0IGM9aTMuaW5kZXhPZihCKSxqPWkzWyhjKzEpJWkzLmxlbmd0aF07TihqKX0sY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSBweC0yLjUgYm9yZGVyIHJvdW5kZWQtWzdweF0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCBtaW4tdy1bNTZweF0gYWN0aXZlOnNjYWxlLVswLjk3XSAke0I+MT8iYmctd2hpdGUgYm9yZGVyLXdoaXRlIHRleHQtWyMwYTBhMGNdIGhvdmVyOmJnLXdoaXRlL1swLjg4XSBob3Zlcjpib3JkZXItd2hpdGUvWzAuODhdIGhvdmVyOnRleHQtWyMwYTBhMGNdIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlci13aGl0ZS84IHRleHQtd2hpdGUvODUgaG92ZXI6Ymctd2hpdGUvWzAuMDldIGhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE4KV0gaG92ZXI6dGV4dC13aGl0ZSJ9YCwiYXJpYS1sYWJlbCI6YFNwZWVkICR7Qn3DlyDigJQgdGFwIHRvIGN5Y2xlYCx0aXRsZTpgU3BlZWQgJHtCfcOXIOKAlCB0YXAgdG8gY3ljbGVgLGNoaWxkcmVuOltaKEkzLHt9KSxCPjEmJlooInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyBbZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zXSIsY2hpbGRyZW46W0IsIsOXIl19KV19KV19KSxDJiZaKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOkN9KV19KX12YXIgYTM9YzAoZnVuY3Rpb24oe2xhYmVsOkosdmFsdWU6UX0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBiZy13aGl0ZS9bMC4wM10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gcm91bmRlZC1tZCBweS1bNXB4XSBweC1bN3B4XSBtaW4tdy0wIixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVs5cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNmVtXSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpKfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSBmb250LW1vbm8gdGV4dC13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46UX0pXX0pfSk7ZnVuY3Rpb24gc0ooe3ZhbHVlOiQsb25DaGFuZ2U6SixvcHRpb25zOlEsYXJpYUxhYmVsOlh9KXtyZXR1cm4gWigiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpYLGNsYXNzTmFtZToiZmxleCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gcC0wLjUgZ2FwLTAuNSIsY2hpbGRyZW46US5tYXAoKEspPT57bGV0IFk9Sy52YWx1ZT09PSQ7cmV0dXJuIFooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+SihLLnZhbHVlKSxjbGFzc05hbWU6YGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHB5LVs1cHhdIHB4LTIgdGV4dC1bMTFweF0gZm9udC1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gbWluLWgtWzIycHhdICR7WT8iYmctd2hpdGUvWzAuMTJdIHRleHQtd2hpdGUiOiJiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlLzYwIGhvdmVyOmJnLXdoaXRlL1swLjA1XSBob3Zlcjp0ZXh0LXdoaXRlLzkwIn1gLCJhcmlhLXByZXNzZWQiOlksImFyaWEtbGFiZWwiOksuaWNvbj9LLmxhYmVsOnZvaWQgMCx0aXRsZTpLLmljb24/Sy5sYWJlbDp2b2lkIDAsY2hpbGRyZW46Sy5pY29uPz9LLmxhYmVsfSxLLnZhbHVlKX0pfSl9ZnVuY3Rpb24gdEooe3ByZXBhcmVkOiR9KXtpZigkLnJhd01heEFsdC0kLnJhd01pbkFsdDw1KXJldHVybiBudWxsO3JldHVybiBaKFoxLHtjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMiBsZWZ0LTIuNSBiZy1wYW5lbC1vdmVybGF5IHRleHQtd2hpdGUvODUgdGV4dC1bMTBweF0gZm9udC1tb25vIHB4LTEuNSBweS0wLjUgcm91bmRlZC1bNXB4XSBmbGV4IGl0ZW1zLWNlbnRlciB0cmFja2luZy1bMC4wMmVtXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSIsY2hpbGRyZW46W1oodzUse2RpcjoidXAifSksIiAiLHI2KCQucmF3TWF4QWx0KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0yIHJpZ2h0LTIuNSBiZy1wYW5lbC1vdmVybGF5IHRleHQtd2hpdGUvODUgdGV4dC1bMTBweF0gZm9udC1tb25vIHB4LTEuNSBweS0wLjUgcm91bmRlZC1bNXB4XSBmbGV4IGl0ZW1zLWNlbnRlciB0cmFja2luZy1bMC4wMmVtXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSIsY2hpbGRyZW46W1oodzUse2RpcjoiZG93biJ9KSwiICIscjYoJC5yYXdNaW5BbHQpXX0pXX0pfXZhciBkNj0xNDA7ZnVuY3Rpb24gYzYoJCxKKXtsZXQgUT1BcnJheShKKTtmb3IobGV0IFg9MDtYPEo7WCsrKXtsZXQgSz1KPT09MT8wOlgvKEotMSksWT1zMCgkLEsqJC50b3RhbERpc3RhbmNlKTtRW1hdPXt4OlkueCx5OlkueSx6Olkuen19cmV0dXJuIFF9ZnVuY3Rpb24gZUooJCxKLFEsWCl7bGV0IEs9KCQuYm91bmRzLnhbMF0rJC5ib3VuZHMueFsxXSkvMixZPSgkLmJvdW5kcy56WzBdKyQuYm91bmRzLnpbMV0pLzIscT0kLmJvdW5kcy55WzBdLEc9TWF0aC5tYXgoMSwkLmJvdW5kcy54WzFdLSQuYm91bmRzLnhbMF0sJC5ib3VuZHMuelsxXS0kLmJvdW5kcy56WzBdKSxCPShRLmJvdW5kcy54WzBdK1EuYm91bmRzLnhbMV0pLzIsTj0oUS5ib3VuZHMuelswXStRLmJvdW5kcy56WzFdKS8yLEw9US5ib3VuZHMueVswXSxDPU1hdGgubWF4KDEsUS5ib3VuZHMueFsxXS1RLmJvdW5kcy54WzBdLFEuYm91bmRzLnpbMV0tUS5ib3VuZHMuelswXSkvRyxPPWM2KCQsZDYpLm1hcCgoeCk9Pih7eDooeC54LUspKkMrQix5Oih4LnktcSkqQytMLHo6KHguei1ZKSpDK059KSksej1jNihRLGQ2KSxIPSgkLnRyYWlsLmxvb3B8fFEudHJhaWwubG9vcCk/PyExLEY9JFEoTyx6LEgpLEE9czAoJCxKKSxiPXt4OihBLngtSykqQytCLHk6KEEueS1xKSpDK0wsejooQS56LVkpKkMrTn0sRD1zMChRLDApLFM9e3g6RC54LHk6RC55LHo6RC56fTtyZXR1cm57ZnJvbTokLHRvOlEsZnJvbVB0czpPLHRvUHRzOkYscHJldk1hcmtlcjpiLG5leHRNYXJrZXI6UyxzdGFydE1zOlh9fWZ1bmN0aW9uICRRKCQsSixRKXtsZXQgWD0kLmxlbmd0aCxLPTEvMCxZPTAscT0hMSxHPVtKLFsuLi5KXS5yZXZlcnNlKCldO2ZvcihsZXQgTD0wO0w8Ry5sZW5ndGg7TCsrKXtsZXQgVj1HW0xdLEM9UT9YOjE7Zm9yKGxldCBVPTA7VTxDO1UrKyl7bGV0IE89MDtmb3IobGV0IHo9MDt6PFg7eisrKXtsZXQgSD0kW3pdLEY9VlsoeitVKSVYXSxBPUgueC1GLngsYj1ILnktRi55LEQ9SC56LUYuejtpZihPKz1BKkErYipiK0QqRCxPPj1LKWJyZWFrfWlmKE88SylLPU8sWT1VLHE9TD09PTF9fWxldCBCPXE/Wy4uLkpdLnJldmVyc2UoKTpKLE49QXJyYXkoWCk7Zm9yKGxldCBMPTA7TDxYO0wrKylOW0xdPUJbKEwrWSklWF07cmV0dXJuIE59ZnVuY3Rpb24gSlEoJCxKKXtsZXQgUT0kLmZyb21QdHMubGVuZ3RoLFg9QXJyYXkoUSksSz0wLFk9bnVsbCxxPTEvMCxHPS0xLzAsQj0xLzAsTj0tMS8wLEw9MS8wLFY9LTEvMDtmb3IobGV0IEM9MDtDPFE7QysrKXtsZXQgVT0kLmZyb21QdHNbQ10sTz0kLnRvUHRzW0NdLHo9VS54KyhPLngtVS54KSpKLEg9VS55KyhPLnktVS55KSpKLEY9VS56KyhPLnotVS56KSpKO2lmKFkpe2xldCBiPXotWS54LEQ9SC1ZLnksUz1GLVkuejtLKz1NYXRoLnNxcnQoYipiK0QqRCtTKlMpfWxldCBBPXt4OnoseTpILHo6RixhcmM6SyxsYXQ6MCxsbmc6MH07aWYoWFtDXT1BLFk9QSx6PHEpcT16O2lmKHo+RylHPXo7aWYoSDxCKUI9SDtpZihIPk4pTj1IO2lmKEY8TClMPUY7aWYoRj5WKVY9Rn1yZXR1cm57dHJhaWw6JC50by50cmFpbCxvcmlnaW46JC50by5vcmlnaW4scG9pbnRzOlgsdG90YWxEaXN0YW5jZTpLLGJvdW5kczp7eDpbcSxHXSx5OltCLE5dLHo6W0wsVl19LHJhd01pbkFsdDokLnRvLnJhd01pbkFsdCsoJC5mcm9tLnJhd01pbkFsdC0kLnRvLnJhd01pbkFsdCkqKDEtSikscmF3TWF4QWx0OiQudG8ucmF3TWF4QWx0KygkLmZyb20ucmF3TWF4QWx0LSQudG8ucmF3TWF4QWx0KSooMS1KKX19ZnVuY3Rpb24gUVEoJCl7cmV0dXJuICQ8MC41PzIqJCokOjEtTWF0aC5wb3coLTIqJCsyLDIpLzJ9ZnVuY3Rpb24gWlEoJCxKLFEsWCxLLFkscSl7bGV0IEc9JC5nZXRDb250ZXh0KCIyZCIpO2lmKCFHKXJldHVybjtsZXR7Y2xpZW50V2lkdGg6QixjbGllbnRIZWlnaHQ6Tn09JDtpZihCPT09MHx8Tj09PTApcmV0dXJuO2xldCBMPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxOjEsVj1NYXRoLnJvdW5kKEIqTCksQz1NYXRoLnJvdW5kKE4qTCk7aWYoJC53aWR0aCE9PVZ8fCQuaGVpZ2h0IT09QykkLndpZHRoPVYsJC5oZWlnaHQ9QztHLnNldFRyYW5zZm9ybShMLDAsMCxMLDAsMCksRy5jbGVhclJlY3QoMCwwLEIsTik7bGV0IFU9Ry5jcmVhdGVSYWRpYWxHcmFkaWVudChCKjAuNSxOKjAuNTUsTWF0aC5taW4oQixOKSowLjIsQiowLjUsTiowLjU1LE1hdGgubWF4KEIsTikqMC44NSk7VS5hZGRDb2xvclN0b3AoMCwiIzFhMWExZCIpLFUuYWRkQ29sb3JTdG9wKDEsIiMwYTBhMGMiKSxHLmZpbGxTdHlsZT1VLEcuZmlsbFJlY3QoMCwwLEIsTiksWFEoRyxCLE4pO2xldHtwb2ludHM6Tyxib3VuZHM6en09SjtpZihPLmxlbmd0aDwyKXJldHVybjtsZXQgSD0yOCpNYXRoLlBJLzE4MCxGPU1hdGguc2luKEgpLEE9TWF0aC5jb3MoSCksYj1NYXRoLnNpbihYKSxEPU1hdGguY29zKFgpLFM9KHoueFswXSt6LnhbMV0pLzIseD0oei56WzBdK3ouelsxXSkvMixzPXoueFsxXS16LnhbMF0sZz16LnpbMV0tei56WzBdLHU9ei55WzFdLXoueVswXSxpPU1hdGgubWF4KHMsZykqMS4wNSxvPU1hdGgubWF4KGcqQSt1KkYscyowLjQpKjEuMTUscj1CKjAuMDgsUTE9TiowLjE4LE4xPU1hdGgubWluKChCLXIqMikvaSwoTi1RMSoyKS9vKSoxLjQ1LGM9dTwxPzE6TWF0aC5taW4oMjQsMTQwL01hdGgubWF4KDIwLHUpKSxqPShFLGYsXyk9PntsZXQgcD1FLVMsbD1fLXgsdj1wKkQrbCpiLEcxPS1wKmIrbCpELHoxPWYqYyxNMT16MSpBLUcxKkYsVzE9ejEqRitHMSpBO3JldHVybntzeDpCLzIrdipOMSxzeTpOKjAuNTUtTTEqTjEsZGVwdGg6VzF9fSxhPTM4LEsxPU8ubWFwKChFKT0+e2xldCBmPWooRS54LEUueSxFLnopLF89aihFLngsMCxFLnopLHA9e3N4OmYuc3gsc3k6TWF0aC5tYXgoXy5zeSxmLnN5K2EpLGRlcHRoOl8uZGVwdGh9O3JldHVybntwOkUsdG9wOmYsYm90OnB9fSk7Zm9yKGxldCBFPTE7RTxLMS5sZW5ndGg7RSsrKXtsZXQgZj1LMVtFLTFdLF89SzFbRV0scD1HLmNyZWF0ZUxpbmVhckdyYWRpZW50KChmLnRvcC5zeCtfLnRvcC5zeCkvMiwoZi50b3Auc3krXy50b3Auc3kpLzIsKGYuYm90LnN4K18uYm90LnN4KS8yLChmLmJvdC5zeStfLmJvdC5zeSkvMik7cC5hZGRDb2xvclN0b3AoMCwicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIpLHAuYWRkQ29sb3JTdG9wKDAuNDUsInJnYmEoMTgwLDE4MCwxODUsMC4yOCkiKSxwLmFkZENvbG9yU3RvcCgwLjg1LCJyZ2JhKDQwLDQwLDQ1LDAuMTgpIikscC5hZGRDb2xvclN0b3AoMSwicmdiYSgwLDAsMCwwKSIpLEcuZmlsbFN0eWxlPXAsRy5iZWdpblBhdGgoKSxHLm1vdmVUbyhmLnRvcC5zeCxmLnRvcC5zeSksRy5saW5lVG8oXy50b3Auc3gsXy50b3Auc3kpLEcubGluZVRvKF8uYm90LnN4LF8uYm90LnN5KSxHLmxpbmVUbyhmLmJvdC5zeCxmLmJvdC5zeSksRy5jbG9zZVBhdGgoKSxHLmZpbGwoKX1HLnN0cm9rZVN0eWxlPSIjZmZmZmZmIixHLmxpbmVXaWR0aD0xLjYsRy5saW5lQ2FwPSJyb3VuZCIsRy5saW5lSm9pbj0icm91bmQiLEcuYmVnaW5QYXRoKCk7Zm9yKGxldCBFPTA7RTxLMS5sZW5ndGg7RSsrKXtsZXR7dG9wOmZ9PUsxW0VdO2lmKEU9PT0wKUcubW92ZVRvKGYuc3gsZi5zeSk7ZWxzZSBHLmxpbmVUbyhmLnN4LGYuc3kpfUcuc3Ryb2tlKCk7bGV0IEwxPVE7Ry5zdHJva2VTdHlsZT0iI2Y5ZDJhNCIsRy5saW5lV2lkdGg9Mi4yLEcuYmVnaW5QYXRoKCk7bGV0IEoxPSExO2ZvcihsZXQgRT0wO0U8SzEubGVuZ3RoO0UrKyl7bGV0e3A6Zix0b3A6X309SzFbRV07aWYoZi5hcmM+TDEpYnJlYWs7aWYoIUoxKUcubW92ZVRvKF8uc3gsXy5zeSksSjE9ITA7ZWxzZSBHLmxpbmVUbyhfLnN4LF8uc3kpfWlmKEoxKUcuc3Ryb2tlKCk7bGV0IFkxPXE/P3MwKEosUSksQzE9aihZMS54LFkxLnksWTEueik7aWYoWSl7bGV0IF89SyUyNjAwLzI2MDAscD00KzIyKl8sbD0wLjIyKigxLV8pLHY9Ry5jcmVhdGVSYWRpYWxHcmFkaWVudChDMS5zeCxDMS5zeSxwKjAuNSxDMS5zeCxDMS5zeSxwKTt2LmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDApIiksdi5hZGRDb2xvclN0b3AoMC43LGByZ2JhKDI1NSwyNTUsMjU1LCR7bC50b0ZpeGVkKDMpfSlgKSx2LmFkZENvbG9yU3RvcCgxLCJyZ2JhKDI1NSwyNTUsMjU1LDApIiksRy5maWxsU3R5bGU9dixHLmJlZ2luUGF0aCgpLEcuYXJjKEMxLnN4LEMxLnN5LHAsMCxNYXRoLlBJKjIpLEcuZmlsbCgpfUcuZmlsbFN0eWxlPSIjZmZmIixHLmJlZ2luUGF0aCgpLEcuYXJjKEMxLnN4LEMxLnN5LDMuOCwwLE1hdGguUEkqMiksRy5maWxsKCl9ZnVuY3Rpb24gWFEoJCxKLFEpeyQuZmlsbFN0eWxlPSJyZ2JhKDI1NSwyNTUsMjU1LDAuMDYpIjtmb3IobGV0IFk9NztZPFE7WSs9MTQpZm9yKGxldCBxPTc7cTxKO3ErPTE0KSQuYmVnaW5QYXRoKCksJC5hcmMocSxZLDAuNywwLE1hdGguUEkqMiksJC5maWxsKCl9ZnVuY3Rpb24gczMoJCl7aWYoJDwxMDAwKXJldHVybmAkeyQudG9GaXhlZCgwKX0gbWA7cmV0dXJuYCR7KCQvMTAwMCkudG9GaXhlZCgyKX0ga21gfWZ1bmN0aW9uIG82KCQpe2xldCBKPU1hdGguZmxvb3IoJC8xMDAwKSxRPU1hdGguZmxvb3IoSi8zNjAwKSxYPU1hdGguZmxvb3IoSiUzNjAwLzYwKSxLPUolNjA7aWYoUT4wKXJldHVybmAke1F9OiR7WC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtLLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWA7cmV0dXJuYCR7WH06JHtLLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWB9ZnVuY3Rpb24gS1EoJCl7aWYoJDw9MClyZXR1cm4i4oCUIjtpZigkPjcpcmV0dXJuYCR7KCQqMy42KS50b0ZpeGVkKDApfSBrbS9oYDtsZXQgSj0xMDAwLyQsUT1NYXRoLmZsb29yKEovNjApLFg9TWF0aC5yb3VuZChKJTYwKTtyZXR1cm5gJHtRfToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9L2ttYH1mdW5jdGlvbiByNigkKXtyZXR1cm5gJHskLnRvRml4ZWQoMCl9IG1gfWZ1bmN0aW9uIGk2KCQpe2xldCBKPSQudHJpbSgpO2lmKCFKKXJldHVybiIiO2xldCBRPUoubWF0Y2goL1JlYXNvbjpccyooLispJC9tKTtpZihRKXJldHVybiBRWzFdO3JldHVybiBKLnNwbGl0KGAKYCkuc2xpY2UoLTEpWzBdPz9KfWFzeW5jIGZ1bmN0aW9uIHQzKCQsSixRKXtsZXQgWD1hd2FpdCAkKGB4Y3J1biBzaW1jdGwgZ2V0X2FwcF9jb250YWluZXIgJHtKfSAke2sxKFEpfSBhcHBgKTtpZihYLmV4aXRDb2RlIT09MClyZXR1cm57ZXJyb3I6WC5zdGRlcnIudHJpbSgpfHwiQXBwIG5vdCBmb3VuZCBvbiBzaW11bGF0b3IifTtsZXQgSz1YLnN0ZG91dC50cmltKCk7aWYoIUspcmV0dXJue2Vycm9yOiJFbXB0eSBhcHAgcGF0aCJ9O2xldCBZPWF3YWl0ICQoYHBsdXRpbCAtY29udmVydCBqc29uIC1vIC0gJHtrMShLKyIvSW5mby5wbGlzdCIpfWApLHE9e307aWYoWS5leGl0Q29kZT09PTApdHJ5e3E9SlNPTi5wYXJzZShZLnN0ZG91dCl9Y2F0Y2h7fWxldCBHLE49KHE/LkNGQnVuZGxlSWNvbnM/LkNGQnVuZGxlUHJpbWFyeUljb24/P3E/LlsiQ0ZCdW5kbGVJY29uc35pcGFkIl0/LkNGQnVuZGxlUHJpbWFyeUljb24pPy5DRkJ1bmRsZUljb25GaWxlcz8/cT8uQ0ZCdW5kbGVJY29uRmlsZXM7aWYoTiYmTi5sZW5ndGg+MClHPU5bTi5sZW5ndGgtMV07ZWxzZSBpZih0eXBlb2YgcT8uQ0ZCdW5kbGVJY29uRmlsZT09PSJzdHJpbmciKUc9cS5DRkJ1bmRsZUljb25GaWxlO2xldCBMPW51bGw7aWYoRyl7bGV0IFY9W2Ake0d9QDN4LnBuZ2AsYCR7R31AMngucG5nYCxgJHtHfS5wbmdgLGAke0d9NjB4NjBAM3gucG5nYCxgJHtHfTYweDYwQDJ4LnBuZ2BdLFU9KGF3YWl0ICQoYGJhc2ggLWMgJHtrMShWLm1hcCgoTyk9PmBbIC1mICR7azEoSysiLyIrTyl9IF0gJiYgZWNobyAke2sxKEsrIi8iK08pfSAmJiBleGl0IDBgKS5qb2luKCI7ICIpKyI7IGV4aXQgMSIpfWApKS5zdGRvdXQudHJpbSgpO2lmKFUpe2xldCBPPWF3YWl0ICQoYGJhc2U2NCAtaSAke2sxKFUpfWApO2lmKE8uZXhpdENvZGU9PT0wKUw9YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke08uc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKX1gfX1yZXR1cm57YXBwUGF0aDpLLGRpc3BsYXlOYW1lOnEuQ0ZCdW5kbGVEaXNwbGF5TmFtZT8/cS5DRkJ1bmRsZU5hbWUsc2hvcnRWZXJzaW9uOnEuQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcsYnVuZGxlVmVyc2lvbjpxLkNGQnVuZGxlVmVyc2lvbixtaW5PUzpxLk1pbmltdW1PU1ZlcnNpb24sZXhlY3V0YWJsZTpxLkNGQnVuZGxlRXhlY3V0YWJsZSxpY29uRGF0YVVybDpMfX12YXIgQzI9bmV3IE1hcDtmdW5jdGlvbiBhNigkLEosUSl7bGV0IFg9YCR7Sn06JHtRfWAsSz1DMi5nZXQoWCk7aWYoSyE9PXZvaWQgMClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEspO2xldCBZPXQzKCQsSixRKS50aGVuKChxKT0+e2xldCBHPXEuaWNvbkRhdGFVcmw/P251bGw7cmV0dXJuIEMyLnNldChYLEcpLEd9KS5jYXRjaCgoKT0+e3JldHVybiBDMi5zZXQoWCxudWxsKSxudWxsfSk7cmV0dXJuIEMyLnNldChYLFkpLFl9ZnVuY3Rpb24gWVEoJCl7cmV0dXJuICQuc3RhcnRzV2l0aCgiY29tLmFwcGxlLiIpfWZ1bmN0aW9uIHFRKCQpe2lmKCQ9PT0iY29tLmFwcGxlLnNwcmluZ2JvYXJkIilyZXR1cm4iU3ByaW5nQm9hcmQiO3JldHVybiAkfWZ1bmN0aW9uIEdRKHtidW5kbGVJZDokfSl7bGV0IEo9WVEoJCk7cmV0dXJuIFooImRpdiIseyJkYXRhLXRlc3RpZCI6Sj8ic3lzdGVtLWFwcC1pY29uIjoiYXBwLWljb24tZmFsbGJhY2siLGNsYXNzTmFtZTpgdy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYm9yZGVyIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyICR7Sj8iYm9yZGVyLVsjM2I1Zjk5XSBiZy1bbGluZWFyLWdyYWRpZW50KDE0NWRlZywjMjUzYTVmLCMxNjIxMzIpXSB0ZXh0LVsjYzhkN2ZmXSI6ImJvcmRlci13aGl0ZS8xMCBiZy13aGl0ZS9bMC4wNl0gdGV4dC13aGl0ZS84MCJ9YCwiYXJpYS1sYWJlbCI6Sj8iU3lzdGVtIGFwcCI6IkFwcCBpY29uIHVuYXZhaWxhYmxlIix0aXRsZTpKPyJTeXN0ZW0gYXBwIjoiQXBwIGljb24gdW5hdmFpbGFibGUiLGNoaWxkcmVuOko/Wigic3ZnIix7cm9sZToiaW1nIix2aWV3Qm94OiIwIDAgMjQgMjQiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2xhc3NOYW1lOiJzaXplLVsxOXB4XSIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpbWigidGl0bGUiLHtjaGlsZHJlbjoiQXBwbGUifSksWigicGF0aCIse2Q6Ik0xMi4xNTIgNi44OTZjLS45NDggMC0yLjQxNS0xLjA3OC0zLjk2LTEuMDQtMi4wNC4wMjctMy45MSAxLjE4My00Ljk2MSAzLjAxNC0yLjExNyAzLjY3NS0uNTQ2IDkuMTAzIDEuNTE5IDEyLjA5IDEuMDEzIDEuNDU0IDIuMjA4IDMuMDkgMy43OTIgMy4wMzkgMS41Mi0uMDY1IDIuMDktLjk4NyAzLjkzNS0uOTg3IDEuODMxIDAgMi4zNS45ODcgMy45Ni45NDggMS42MzctLjAyNiAyLjY3Ni0xLjQ4IDMuNjc2LTIuOTQ4IDEuMTU2LTEuNjg4IDEuNjM2LTMuMzI1IDEuNjYyLTMuNDE1LS4wMzktLjAxMy0zLjE4Mi0xLjIyMS0zLjIyLTQuODU3LS4wMjYtMy4wNCAyLjQ4LTQuNDk0IDIuNTk3LTQuNTU5LTEuNDI5LTIuMDktMy42MjMtMi4zMjQtNC4zOS0yLjM3Ni0yLS4xNTYtMy42NzUgMS4wOS00LjYxIDEuMDl6TTE1LjUzIDMuODNjLjg0My0xLjAxMiAxLjQtMi40MjcgMS4yNDUtMy44My0xLjIwNy4wNTItMi42NjIuODA1LTMuNTMyIDEuODE4LS43OC44OTYtMS40NTQgMi4zMzgtMS4yNzMgMy43MTQgMS4zMzguMTA0IDIuNzE1LS42ODggMy41NTktMS43MDEifSldfSk6WihFMix7c2l6ZToxOSxzdHJva2VXaWR0aDoxLjl9KX0pfWZ1bmN0aW9uIFZRKHtidW5kbGVJZDokLGljb25EYXRhVXJsOkp9KXtpZihKKXJldHVybiBaKCJpbWciLHtzcmM6SixjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIG9iamVjdC1jb3ZlciBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLGFsdDoiIn0pO3JldHVybiBaKEdRLHtidW5kbGVJZDokfSl9ZnVuY3Rpb24gczYoe3VkaWQ6JCxjdXJyZW50QXBwOkp9KXtsZXRbUSxYXT1NKG51bGwpLFtLLFldPU0oITEpO2lmKHkoKCk9PntpZighSil7WChudWxsKTtyZXR1cm59bGV0IHE9ITE7cmV0dXJuIFgoe2J1bmRsZUlkOkouYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTpKLmlzUmVhY3ROYXRpdmUscGlkOkoucGlkLGxvYWRpbmc6ITB9KSx0MyhFMSwkLEouYnVuZGxlSWQpLnRoZW4oKEcpPT57aWYocSlyZXR1cm47WCh7YnVuZGxlSWQ6Si5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOkouaXNSZWFjdE5hdGl2ZSxwaWQ6Si5waWQsbG9hZGluZzohMSwuLi5HfSl9KSwoKT0+e3E9ITB9fSxbJCxKLEo/LmJ1bmRsZUlkLEo/LnBpZCxKPy5pc1JlYWN0TmF0aXZlXSksIVEpcmV0dXJuIFooQlEse30pO3JldHVybiBaKGUxLHtvcGVuOkssb25PcGVuQ2hhbmdlOlksc3VtbWFyeUNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1sZWZ0IixzdW1tYXJ5OlooWjEse2NoaWxkcmVuOltaKFZRLHtidW5kbGVJZDpRLmJ1bmRsZUlkLGljb25EYXRhVXJsOlEuaWNvbkRhdGFVcmx9KSxaKE5RLHtidW5kbGVJZDpRLmJ1bmRsZUlkLGRpc3BsYXlOYW1lOlEuZGlzcGxheU5hbWV9KV19KSxjaGlsZHJlbjpbUS5lcnJvciYmWigiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjpRLmVycm9yfSksWigiZGwiLHtjbGFzc05hbWU6Im0tMCBmbGV4IGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOltaKEYyLHtsYWJlbDoiVmVyc2lvbiIsdmFsdWU6US5zaG9ydFZlcnNpb24/YCR7US5zaG9ydFZlcnNpb259ICgke1EuYnVuZGxlVmVyc2lvbj8/IuKAlCJ9KWA6US5sb2FkaW5nPyLigKYiOiLigJQifSksWihGMix7bGFiZWw6Ik1pbiBpT1MiLHZhbHVlOlEubWluT1M/PyhRLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksWihGMix7bGFiZWw6IkV4ZWN1dGFibGUiLHZhbHVlOlEuZXhlY3V0YWJsZT8/KFEubG9hZGluZz8i4oCmIjoi4oCUIil9KSxaKEYyLHtsYWJlbDoiUElEIix2YWx1ZTpRLnBpZCE9bnVsbD9TdHJpbmcoUS5waWQpOiLigJQifSksUS5pc1JlYWN0TmF0aXZlJiZaKEYyLHtsYWJlbDoiUmVhY3QgTmF0aXZlIix2YWx1ZToiWWVzIn0pLFooRjIse2xhYmVsOiJBcHAgcGF0aCIsdmFsdWU6US5hcHBQYXRoPz8oUS5sb2FkaW5nPyLigKYiOiLigJQiKSxtb25vOiEwLGFjdGlvbjpRLmFwcFBhdGg/e3RpdGxlOiJSZXZlYWwgaW4gRmluZGVyIixvbkNsaWNrOigpPT57RTEoYG9wZW4gLVIgJHtrMShRLmFwcFBhdGgpfWApfSxpY29uOlooeTIse3NpemU6MTEsc3Ryb2tlV2lkdGg6Mi4yfSl9OnZvaWQgMH0pXX0pXX0pfWZ1bmN0aW9uIEJRKCl7cmV0dXJuIFooImRpdiIseyJkYXRhLXRlc3RpZCI6ImFwcC1kZXRlY3Rpb24tc2tlbGV0b24iLGNsYXNzTmFtZToiYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yIiwiYXJpYS1sYWJlbCI6IldhaXRpbmcgZm9yIGZvcmVncm91bmQgYXBwIixjaGlsZHJlbjpaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtbGVmdCBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIGJnLXdoaXRlL1swLjA4XSJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0yIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToiaC0zLjUgdy1bNDYlXSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMTJdIn0pLFooInNwYW4iLHtjbGFzc05hbWU6ImgtMi41IHctWzY4JV0gcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSJ9KV19KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJ3LTIuNSBoLTIuNSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdIn0pXX0pfSl9ZnVuY3Rpb24gTlEoe2J1bmRsZUlkOiQsZGlzcGxheU5hbWU6Sn0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGxlYWRpbmctdGlnaHQgdGV4dC1sZWZ0IixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvOTAgdHJ1bmNhdGUiLGNoaWxkcmVuOko/P3FRKCQpfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0cnVuY2F0ZSIsdGl0bGU6JCxjaGlsZHJlbjokfSldfSl9ZnVuY3Rpb24gRjIoe2xhYmVsOiQsdmFsdWU6Sixtb25vOlEsYWN0aW9uOlh9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJncm91cCBmbGV4IGl0ZW1zLWJhc2VsaW5lIGdhcC0yIG1pbi13LTAiLGNoaWxkcmVuOltaKCJkdCIse2NsYXNzTmFtZToibS0wIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNTAgdy0yMSBzaHJpbmstMCIsY2hpbGRyZW46JH0pLFooImRkIix7Y2xhc3NOYW1lOmBtLTAgdGV4dC13aGl0ZS85MCBmbGV4LTEgbWluLXctMCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCByZWxhdGl2ZSAke1E/ImZvbnQtbW9ubyB0ZXh0LVsxMXB4XSI6InRleHQtWzEycHhdIn1gLHRpdGxlOkosY2hpbGRyZW46W0osWCYmWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCByaWdodC0wIGJvdHRvbS0wIHBsLTcgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgYmctW2xpbmVhci1ncmFkaWVudCh0b19yaWdodCxyZ2JhKDI4LDI4LDMwLDApXzAlLCMxYzFjMWVfNTUlKV0gW3RyYW5zaXRpb246b3BhY2l0eV8wLjE1c19lYXNlLHRyYW5zZm9ybV8wLjE1c19lYXNlXSBvcGFjaXR5LTAgdHJhbnNsYXRlLXgtMSBwb2ludGVyLWV2ZW50cy1ub25lIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIGdyb3VwLWhvdmVyOnRyYW5zbGF0ZS14LTAgZ3JvdXAtaG92ZXI6cG9pbnRlci1ldmVudHMtYXV0byIsY2hpbGRyZW46WigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOlgub25DbGljayx0aXRsZTpYLnRpdGxlLCJhcmlhLWxhYmVsIjpYLnRpdGxlLGNsYXNzTmFtZToidy01IGgtNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkIHRleHQtd2hpdGUgY3Vyc29yLXBvaW50ZXIgcC0wIixjaGlsZHJlbjpYLmljb259KX0pXX0pXX0pfXZhciB0Nj1be2tleToiY2FtZXJhIixsYWJlbDoiQ2FtZXJhIn0se2tleToibWljcm9waG9uZSIsbGFiZWw6Ik1pY3JvcGhvbmUifSx7a2V5OiJwaG90b3MiLGxhYmVsOiJQaG90b3MifSx7a2V5OiJwaG90b3MtYWRkIixsYWJlbDoiQWRkIHRvIFBob3RvcyJ9LHtrZXk6ImNvbnRhY3RzIixsYWJlbDoiQ29udGFjdHMifSx7a2V5OiJjYWxlbmRhciIsbGFiZWw6IkNhbGVuZGFyIn0se2tleToicmVtaW5kZXJzIixsYWJlbDoiUmVtaW5kZXJzIn0se2tleToibG9jYXRpb24iLGxhYmVsOiJMb2NhdGlvbiJ9LHtrZXk6ImxvY2F0aW9uLWFsd2F5cyIsbGFiZWw6IkxvY2F0aW9uIChBbHdheXMpIn0se2tleToibm90aWZpY2F0aW9ucyIsbGFiZWw6Ik5vdGlmaWNhdGlvbnMifSx7a2V5OiJtb3Rpb24iLGxhYmVsOiJNb3Rpb24ifSx7a2V5OiJtZWRpYS1saWJyYXJ5IixsYWJlbDoiTWVkaWEgTGlicmFyeSJ9LHtrZXk6InNpcmkiLGxhYmVsOiJTaXJpIn1dO2Z1bmN0aW9uIGU2KHt1ZGlkOiQsYnVuZGxlSWQ6Sn0pe2xldFtRLFhdPU0oe30pLFtLLFldPU0obnVsbCksW3EsR109TShudWxsKSxbQixOXT1NKCExKSxMPVQxKCgpPT57bGV0IFU9dHlwZW9mIHdpbmRvdz4idSI/dm9pZCAwOndpbmRvdy5fX1NJTV9QUkVWSUVXX18/LnNlcnZlU2ltQmluO2lmKCFVKXJldHVybiJzZXJ2ZS1zaW0iO2lmKC9cLnRzJC8udGVzdChVKSlyZXR1cm5gYnVuICR7azEoVSl9YDtpZigvXC5qcyQvLnRlc3QoVSkpcmV0dXJuYG5vZGUgJHtrMShVKX1gO3JldHVybiBrMShVKX0sW10pO3koKCk9PntYKHt9KSxHKG51bGwpfSxbSl0pO2xldCBWPXcoYXN5bmMoVSxPKT0+e2lmKCFKKXJldHVybjtsZXQgej1gJHtVfToke099YDtZKHopLEcobnVsbCk7dHJ5e2xldCBIPWF3YWl0IEUxKGAke0x9IHBlcm1pc3Npb25zICR7T30gJHtVfSAke2sxKEopfSAtZCAke2sxKCQpfWApO2lmKEguZXhpdENvZGUhPT0wKXtHKEguc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbSBwZXJtaXNzaW9ucyBmYWlsZWQgKGV4aXQgJHtILmV4aXRDb2RlfSlgKTtyZXR1cm59WCgoRik9Pih7Li4uRixbVV06Tz09PSJyZXNldCI/dm9pZCAwOk99KSl9ZmluYWxseXtZKG51bGwpfX0sW0wsJCxKXSksQz13KGFzeW5jKCk9PntpZighSilyZXR1cm47WSgiX19hbGxfXyIpLEcobnVsbCk7dHJ5e2xldCBVPWF3YWl0IEUxKGAke0x9IHBlcm1pc3Npb25zIHJlc2V0IGFsbCAke2sxKEopfSAtZCAke2sxKCQpfWApO2lmKFUuZXhpdENvZGUhPT0wKXtHKFUuc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbSBwZXJtaXNzaW9ucyBmYWlsZWQgKGV4aXQgJHtVLmV4aXRDb2RlfSlgKTtyZXR1cm59WCh7fSl9ZmluYWxseXtZKG51bGwpfX0sW0wsJCxKXSk7aWYoIUopcmV0dXJuIFooTFEse30pO3JldHVybiBaKGUxLHtvcGVuOkIsb25PcGVuQ2hhbmdlOk4sc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6WihaMSx7Y2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLFooInNwYW4iLHt9KV19KSxjaGlsZHJlbjpbcSYmWigiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjpxfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToibWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gZmxleCBmbGV4LWNvbCBnYXAtMSBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOnQ2Lm1hcCgoe2tleTpVLGxhYmVsOk99KT0+e2xldCB6PVFbVV07cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHB4LTAuNSBweS0xIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46T30pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMC41IGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCBwLTAuNSIscm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpPLGNoaWxkcmVuOltaKGUzLHthY3RpdmU6ej09PSJncmFudCIscGVuZGluZzpLPT09YCR7VX06Z3JhbnRgLG9uQ2xpY2s6KCk9PlYoVSwiZ3JhbnQiKSx2YXJpYW50OiJncmFudCIsdGl0bGU6IkFsbG93IixjaGlsZHJlbjpaKGIyLHtzaXplOjExLHN0cm9rZVdpZHRoOjN9KX0pLFooZTMse2FjdGl2ZTp6PT09InJldm9rZSIscGVuZGluZzpLPT09YCR7VX06cmV2b2tlYCxvbkNsaWNrOigpPT5WKFUsInJldm9rZSIpLHZhcmlhbnQ6InJldm9rZSIsdGl0bGU6IkRlbnkiLGNoaWxkcmVuOlooRzAse3NpemU6MTEsc3Ryb2tlV2lkdGg6M30pfSksWihlMyx7YWN0aXZlOiExLHBlbmRpbmc6Sz09PWAke1V9OnJlc2V0YCxvbkNsaWNrOigpPT5WKFUsInJlc2V0IiksdmFyaWFudDoicmVzZXQiLHRpdGxlOiJSZXNldCIsY2hpbGRyZW46WihpMCx7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjR9KX0pXX0pXX0sVSl9KX0pLFooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTRweF0gcG9pbnRlci1ldmVudHMtbm9uZSByb3VuZGVkLXQtWzEwcHhdIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fYm90dG9tLCMxYzFjMWVfMCUscmdiYSgyOCwyOCwzMCwwKV8xMDAlKV0ifSksWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fdG9wLCMxYzFjMWVfMCUscmdiYSgyOCwyOCwzMCwwKV8xMDAlKV0ifSldfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGp1c3RpZnktZW5kIixjaGlsZHJlbjpaKCJidXR0b24iLHtvbkNsaWNrOkMsZGlzYWJsZWQ6Sz09PSJfX2FsbF9fIixjbGFzc05hbWU6ImJnLXRyYW5zcGFyZW50IGJvcmRlciBib3JkZXItd2hpdGUvMTIgdGV4dC13aGl0ZS83MCB0ZXh0LVsxMHB4XSBweC0yIHB5LVszcHhdIHJvdW5kZWQtWzVweF0gY3Vyc29yLXBvaW50ZXIgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA0ZW1dIix0aXRsZToic2VydmUtc2ltIHBlcm1pc3Npb25zIHJlc2V0IGFsbCIsY2hpbGRyZW46Sz09PSJfX2FsbF9fIj8i4oCmIjoiUmVzZXQgYWxsIn0pfSldfSl9ZnVuY3Rpb24gTFEoKXtyZXR1cm4gWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiYXBwLXBlcm1pc3Npb25zLWxvYWRpbmciLGNsYXNzTmFtZToiYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yIiwiYXJpYS1kaXNhYmxlZCI6InRydWUiLCJhcmlhLWJ1c3kiOiJ0cnVlIixjaGlsZHJlbjpaKCJkaXYiLHtjbGFzc05hbWU6InNlbGVjdC1ub25lIHRleHQtd2hpdGUvNTUgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSBweS0yLjUgcHgtMSAtbXktMiAtbXgtMSB3LVtjYWxjKDEwMCUrOHB4KV0gZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQgY3Vyc29yLWRlZmF1bHQiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMifSksWigic3BhbiIse30pLFooInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJwZXJtaXNzaW9ucy1sb2FkaW5nLWluZGljYXRvciIscm9sZToic3RhdHVzIiwiYXJpYS1sYWJlbCI6IkxvYWRpbmcgcGVybWlzc2lvbnMiLGNsYXNzTmFtZToic2l6ZS0yLjUgcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItWyM1ZjYyNjhdIGJvcmRlci10LVsjZjRmNGY1XSBhbmltYXRlLVtncmlkLXNwaW5fMC43c19saW5lYXJfaW5maW5pdGVdIn0pXX0pfSl9ZnVuY3Rpb24gZTMoe2FjdGl2ZTokLHBlbmRpbmc6SixvbkNsaWNrOlEsdmFyaWFudDpYLHRpdGxlOkssY2hpbGRyZW46WX0pe2xldCBxPVg9PT0iZ3JhbnQiPyIjNGFkZTgwIjpYPT09InJldm9rZSI/IiNmODcxNzEiOiIjYTViNGZjIjtyZXR1cm4gWigiYnV0dG9uIix7b25DbGljazpRLGRpc2FibGVkOkosdGl0bGU6SywiYXJpYS1sYWJlbCI6SyxjbGFzc05hbWU6InctNiBoLTUuNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkIHAtMCBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSIsc3R5bGU6e2JhY2tncm91bmQ6JD9gJHtxfTIyYDoidHJhbnNwYXJlbnQiLGNvbG9yOiQ/cToicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIsb3BhY2l0eTpKPzAuNToxfSxjaGlsZHJlbjpZfSl9ZnVuY3Rpb24gZDUoe2xhYmVsOiQsY2hlY2tlZDpKLGRpc2FibGVkOlE9ITEsb25DaGFuZ2U6WH0pe3JldHVybiBaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHJvbGU6InN3aXRjaCIsImFyaWEtY2hlY2tlZCI6SiwiYXJpYS1sYWJlbCI6JCxkaXNhYmxlZDpRLG9uQ2xpY2s6KCk9PlgoIUopLGNsYXNzTmFtZTpgcmVsYXRpdmUgaC1bMThweF0gdy04IHNocmluay0wIHJvdW5kZWQtZnVsbCBib3JkZXItbm9uZSBwLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c10gJHtRPyJjdXJzb3ItZGVmYXVsdCBiZy13aGl0ZS8yMCI6Sj8iY3Vyc29yLXBvaW50ZXIgYmctWyMwYTg0ZmZdIjoiY3Vyc29yLXBvaW50ZXIgYmctd2hpdGUvMjAifWAsY2hpbGRyZW46Wigic3BhbiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLVsycHhdIHNpemUtWzE0cHhdIHJvdW5kZWQtZnVsbCBbdHJhbnNpdGlvbjpsZWZ0XzAuMTVzXSAke1E/ImJnLXdoaXRlLzUwIjoiYmctd2hpdGUifWAsc3R5bGU6e2xlZnQ6Sj8xNjoyfX0pfSl9dmFyIHpRPSJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSIsVVE9InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbS0wIjtmdW5jdGlvbiBKNCh7b3ZlcmxheUVuYWJsZWQ6JCxvblRvZ2dsZU92ZXJsYXk6Sn0pe2xldHtzbmFwc2hvdDpRfT1MMigpLHtoaWdobGlnaHRlZEtleTpYLHNldEhpZ2hsaWdodGVkS2V5Okt9PXk1KCksWT1RPy5lbGVtZW50cz8/W10scT1UNShRKSxHPVE/LmVycm9ycz8uWzBdPz9udWxsO3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6YCR7elF9IHB4LTMgcHktMmAsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZTpVUSxjaGlsZHJlbjoiQVggVHJlZSJ9KSxaKGQ1LHtsYWJlbDoiRW5hYmxlIG92ZXJsYXkiLGNoZWNrZWQ6JCxvbkNoYW5nZTpKfSldfSksISQ/bnVsbDpxP1ooJDQse2NoaWxkcmVuOiJBWCB1bmF2YWlsYWJsZSBvbiB0aGlzIHNpbXVsYXRvci4ifSk6WS5sZW5ndGg9PT0wP1ooJDQse3NwaW5uZXI6IUcsY2hpbGRyZW46Rz8/IldhaXRpbmcgZm9yIGFjY2Vzc2liaWxpdHkgZGF0YeKApiJ9KTpaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEgbXQtMiBweS0yIG1heC1oLVsyNjBweF0gb3ZlcmZsb3cteS1hdXRvIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLHJvbGU6Imxpc3QiLGNoaWxkcmVuOlkubWFwKChCLE4pPT57bGV0IEw9bjAoQik7cmV0dXJuIFooSFEse2VsZW1lbnQ6QixpbmRleDpOLGFjdGl2ZTpMPT09WCxvbkhpZ2hsaWdodDpLfSxMKX0pfSldfSl9ZnVuY3Rpb24gJDQoe2NoaWxkcmVuOiQsc3Bpbm5lcjpKPSExfSl7cmV0dXJuIFooImRpdiIse3JvbGU6InN0YXR1cyIsImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2xhc3NOYW1lOiJtdC0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHB5LTQgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46W0o/Wigic3BhbiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToic2l6ZS0zLjUgc2hyaW5rLTAgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8yMCBib3JkZXItdC13aGl0ZS82MCBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIn0pOm51bGwsWigic3BhbiIse2NoaWxkcmVuOiR9KV19KX12YXIgSFE9YzAoZnVuY3Rpb24oe2VsZW1lbnQ6SixpbmRleDpRLGFjdGl2ZTpYLG9uSGlnaGxpZ2h0Okt9KXtsZXQgWT1uMChKKSxxPUU1KEosUSksRz1gJHtNYXRoLnJvdW5kKEouZnJhbWUud2lkdGgpfXgke01hdGgucm91bmQoSi5mcmFtZS5oZWlnaHQpfWAsQj1bcS5sYWJlbCxxLnJvbGV8fHEudHlwZXx8ImVsZW1lbnQiLEddLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIik7cmV0dXJuIFooImRpdiIse3JvbGU6Imxpc3RpdGVtIix0YWJJbmRleDowLCJkYXRhLWF4LWtleSI6WSx0aXRsZTpCLG9uTW91c2VFbnRlcjooKT0+SyhZKSxvbk1vdXNlTGVhdmU6KCk9PksobnVsbCksb25Gb2N1czooKT0+SyhZKSxvbkJsdXI6KCk9PksobnVsbCksY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcm91bmRlZC1tZCBweS0xIHB4LTAuNSBtaW4tdy0wICR7WD8iYmctd2hpdGUvWzAuMDZdIjoiIn1gLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIixjaGlsZHJlbjpKLmxhYmVsfHxKLnJvbGV8fCJVbmxhYmVsZWQifSksWigic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC13aGl0ZS80NSBmb250LW1vbm8gdGV4dC1bMTBweF0iLGNoaWxkcmVuOkoucm9sZXx8Si50eXBlfHwiZWxlbWVudCJ9KV19KSxaKCJjb2RlIix7Y2xhc3NOYW1lOiJzaHJpbmstMCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgdGV4dC13aGl0ZS81NSBmb250LW1vbm8gdGV4dC1bMTBweF0gcHgtMS41IHB5LVszcHhdIixjaGlsZHJlbjpHfSldfSl9LCgkLEopPT4kLmluZGV4PT09Si5pbmRleCYmJC5hY3RpdmU9PT1KLmFjdGl2ZSYmJC5vbkhpZ2hsaWdodD09PUoub25IaWdobGlnaHQmJkk1KCQuZWxlbWVudCxKLmVsZW1lbnQpKTt2YXIgQ1E9bmV3IFNldChbImltYWdlL2pwZWciLCJpbWFnZS9wbmciLCJpbWFnZS9naWYiLCJpbWFnZS9oZWljIiwiaW1hZ2UvaGVpZiIsImltYWdlL3dlYnAiLCJ2aWRlby9tcDQiLCJ2aWRlby9xdWlja3RpbWUiXSksJDg9MTk2NjA4LFE0PTUyNDI4ODAwMCxjNT0iYXBwbGljYXRpb24veC1zZXJ2ZS1zaW0taG9zdC1wYXRoIjthc3luYyBmdW5jdGlvbiBaNCgkLEosUSl7bGV0IFg9YXdhaXQgSihgeGNydW4gc2ltY3RsIGFkZG1lZGlhICR7UX0gJHtrMSgkKX1gKTtpZihYLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihYLnN0ZGVycnx8YGFkZG1lZGlhIGZhaWxlZCAoZXhpdCAke1guZXhpdENvZGV9KWApfWZ1bmN0aW9uIE8yKCQpe2xldCBKPSQubmFtZSxRPUoubGFzdEluZGV4T2YoIi4iKTtpZihRPj0wKXJldHVybiBKLnNsaWNlKFErMSkudG9Mb3dlckNhc2UoKTtpZigkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuIm1wNCI7cmV0dXJuImpwZyJ9ZnVuY3Rpb24gWDQoJCl7aWYoTzIoJCk9PT0iaXBhIilyZXR1cm4iaXBhIjtpZihDUS5oYXMoJC50eXBlKSlyZXR1cm4ibWVkaWEiO3JldHVybiBudWxsfWZ1bmN0aW9uIEZRKCQpe2xldCBKPW5ldyBVaW50OEFycmF5KCQpLFE9IiI7Zm9yKGxldCBYPTA7WDxKLmxlbmd0aDtYKz0zMjc2OClRKz1TdHJpbmcuZnJvbUNoYXJDb2RlKC4uLkouc3ViYXJyYXkoWCxYKzMyNzY4KSk7cmV0dXJuIGJ0b2EoUSl9YXN5bmMgZnVuY3Rpb24gSzQoJCxKLFEsWCl7bGV0IEs9MDtmb3IobGV0IFk9MDtZPCQuc2l6ZTtZKz0kOCl7bGV0IHE9YXdhaXQgJC5zbGljZShZLFkrJDgpLmFycmF5QnVmZmVyKCksRz1GUShxKSxOPWF3YWl0IFEoYGJhc2ggLWMgJ2VjaG8gJHtHfSB8IGJhc2U2NCAtZCAke1k9PT0wPyI+IjoiPj4ifSAke0p9J2ApO2lmKE4uZXhpdENvZGUhPT0wKXRocm93IEVycm9yKE4uc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7Ti5leGl0Q29kZX0pYCk7aWYoIVgpY29udGludWU7bGV0IEw9TWF0aC5taW4oWSskOCwkLnNpemUpLFY9TWF0aC5mbG9vcihMLyQuc2l6ZSoxMDApO2lmKFYhPT1LKUs9VixYKEwvJC5zaXplKX19YXN5bmMgZnVuY3Rpb24gWTQoJCxKLFEsWCl7aWYoJC5zaXplPlE0KXRocm93IEVycm9yKCJGaWxlIHRvbyBsYXJnZSAobWF4IDUwME1CKSIpO2xldCBLPWAvdG1wLyR7Sn0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke1F9YDtyZXR1cm4gYXdhaXQgSzQoJCxLLFgpLEt9YXN5bmMgZnVuY3Rpb24gcTQoJCxKLFEsWCxLKXtpZigkLnNpemU+UTQpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IFk9Sj09PSJpcGEiPyJpcGEiOk8yKCQpLEc9YC90bXAvJHtKPT09ImlwYSI/InNlcnZlLXNpbS1pbnN0YWxsIjoic2VydmUtc2ltLXVwbG9hZCJ9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtZfWA7dHJ5e0soMCksYXdhaXQgSzQoJCxHLFEsSyksSyhudWxsKTtsZXQgQj1KPT09ImlwYSI/YHhjcnVuIHNpbWN0bCBpbnN0YWxsICR7WH0gJHtHfWA6YHhjcnVuIHNpbWN0bCBhZGRtZWRpYSAke1h9ICR7R31gLE49YXdhaXQgUShCKTtpZihOLmV4aXRDb2RlIT09MCl7bGV0IEw9Sj09PSJpcGEiPyJpbnN0YWxsIjoiYWRkbWVkaWEiO3Rocm93IEVycm9yKE4uc3RkZXJyfHxgJHtMfSBmYWlsZWQgKGV4aXQgJHtOLmV4aXRDb2RlfSlgKX19ZmluYWxseXtRKGBiYXNoIC1jICdybSAtZiAke0d9J2ApLmNhdGNoKCgpPT57fSl9fXZhciBPUT0zMDAwO2FzeW5jIGZ1bmN0aW9uIGtRKCQsSj1mZXRjaCl7dHJ5e2xldCBRPWF3YWl0IEooJCx7Y2FjaGU6Im5vLXN0b3JlIn0pO2lmKCFRLm9rKXJldHVybiBudWxsO2xldCBYPWF3YWl0IFEuanNvbigpO3JldHVybiBYJiZ0eXBlb2YgWD09PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShYKT9YOm51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fXZhciBBUT0yMDk3MTUyMDAsTVE9IkxhcmdlIHZpZGVvICg+MjAwIE1CKSDigJQgbWF5IHN0dXR0ZXIgb24gc2hhcmVkIG1lbW9yeSIsVjQ9IkhFSUMgZGVjb2RlIGZhaWxlZCDigJQgZXhwb3J0IGFzIEpQRUcgb3IgUE5HIGFuZCByZXRyeSI7ZnVuY3Rpb24gV1EoJCxKKXtpZihKKXJldHVybiJhY3RpdmUiO2lmKCQ9PT0iYWN0aXZlIilyZXR1cm4iZGlzY29ubmVjdGVkIjtpZigkPT09ImRpc2Nvbm5lY3RlZCIpcmV0dXJuInJlYWR5IjtyZXR1cm4gJH1mdW5jdGlvbiBfUSgkKXtpZighJC5pbmplY3RlZClyZXR1cm4icGxheSI7aWYoJC5zb3VyY2U9PT0icGxhY2Vob2xkZXIiKXJldHVybiJwbGF5IjtpZigkLmJ1bmRsZUlkJiYhJC5mb3JlZ3JvdW5kSXNJbmplY3RlZClyZXR1cm4iYXR0YWNoIjtyZXR1cm4ic3RvcCJ9ZnVuY3Rpb24gUFEoJCl7cmV0dXJuICQuc3BsaXQoYApgKS5tYXAoKEopPT5KLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLmZsYXRNYXAoKEopPT57bGV0IFE9Si5pbmRleE9mKCJcdCIpO2lmKFE8PTApcmV0dXJuW107bGV0IFg9Si5zbGljZSgwLFEpLnRyaW0oKSxLPUouc2xpY2UoUSsxKS50cmltKCk7aWYoIVh8fCFLKXJldHVybltdO3JldHVyblt7aWQ6WCxuYW1lOkt9XX0pfXZhciBEUT1uZXcgU2V0KFsibXA0IiwibTR2IiwibW92IiwicXQiLCJhdmkiLCJta3YiLCJ3ZWJtIiwibXBnIiwibXBlZyIsIjNncCIsIjNnMiIsInRzIiwid212Il0pO2Z1bmN0aW9uIEI0KCQpe2lmKCQudHlwZSYmJC50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpKXJldHVybiEwO2xldCBKPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpLFE9Si5sYXN0SW5kZXhPZigiLiIpO2lmKFE8MClyZXR1cm4hMTtyZXR1cm4gRFEuaGFzKEouc2xpY2UoUSsxKSl9ZnVuY3Rpb24gd1EoJCl7cmV0dXJuIEI0KCQpJiYkLnNpemU+QVF9ZnVuY3Rpb24gVFEoJCl7bGV0IEo9KCQudHlwZT8/IiIpLnRvTG93ZXJDYXNlKCk7aWYoSj09PSJpbWFnZS9oZWljInx8Sj09PSJpbWFnZS9oZWlmIilyZXR1cm4hMDtsZXQgUT0oJC5uYW1lPz8iIikudG9Mb3dlckNhc2UoKTtyZXR1cm4gUS5lbmRzV2l0aCgiLmhlaWMiKXx8US5lbmRzV2l0aCgiLmhlaWYiKX1mdW5jdGlvbiBJUSh7cmF3TWVzc2FnZTokLGxhc3RGaWxlSXNIZWljOkosc291cmNlOlF9KXtpZihKJiYoUT09PSJpbWFnZSJ8fFE9PT0idmlkZW8iKSlyZXR1cm4gVjQ7cmV0dXJuICR9ZnVuY3Rpb24gRVEoe3N0YXRlOiR9KXtsZXQgSj0kPT09ImFjdGl2ZSI/IkFjdGl2ZSI6JD09PSJkaXNjb25uZWN0ZWQiPyJEaXNjb25uZWN0ZWQiOiJSZWFkeSIsUT0kPT09ImFjdGl2ZSI/InNpemUtMS41IHJvdW5kZWQtZnVsbCBiZy1zdWNjZXNzLWVtZXJhbGQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDc0LDIyMiwxMjgsMC43KV0iOiQ9PT0iZGlzY29ubmVjdGVkIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLWRhbmdlci1zb2Z0IFtib3gtc2hhZG93OjBfMF82cHhfcmdiYSgyNDgsMTEzLDExMywwLjU1KV0iOm51bGw7cmV0dXJuIFooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIiwiZGF0YS1jYW1lcmEtcGlsbC1zdGF0ZSI6JCxjaGlsZHJlbjpbUSYmWigic3BhbiIse2NsYXNzTmFtZTpRfSksSl19KX1mdW5jdGlvbiB5USgpe3JldHVybiBaKCJwIix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1jZW50ZXIgdGV4dC1bMTBweF0gbGVhZGluZy1bMS41XSB0ZXh0LXdoaXRlLzQ1IiwiZGF0YS1jYW1lcmEtdGVzdC1wYXR0ZXJuLWhpbnQiOiEwLGNoaWxkcmVuOiJUZXN0LXBhdHRlcm4gZmVlZCJ9KX1mdW5jdGlvbiBiUSh7bW9kZTokLGZpbGVOYW1lOkosd2ViY2FtTmFtZTpRLHNvdXJjZUtpbmQ6WH0pe2lmKCQ9PT0idXBsb2FkaW5nIilyZXR1cm4gWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSIsY2hpbGRyZW46IlVwbG9hZGluZ+KApiJ9KTtpZigkPT09ImZpbGUiKXJldHVybiBaKFoxLHtjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtd2hpdGUvNTUgYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOlg9PT0idmlkZW8iPyJWaWRlbyI6IkltYWdlIn0pLFooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIHRydW5jYXRlIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgZm9udC1tb25vIixjaGlsZHJlbjpKPz8iIn0pXX0pO2lmKCQ9PT0id2ViY2FtIilyZXR1cm4gWihaMSx7Y2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToic2hyaW5rLTAgdGV4dC1bOXB4XSB0cmFja2luZy1bMC4xZW1dIHVwcGVyY2FzZSB0ZXh0LXdoaXRlLzU1IGJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcHgtWzdweF0gcHktWzJweF0gcm91bmRlZC1mdWxsIixjaGlsZHJlbjoiV2ViY2FtIn0pLFooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIHRydW5jYXRlIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgZm9udC1tb25vIixjaGlsZHJlbjpRPz8iIn0pXX0pO3JldHVybiBaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzg1IGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiU2VsZWN0IG9yIGRyb3AgbWVkaWEifSl9ZnVuY3Rpb24gRzQoe2tpbmQ6JCxtZXNzYWdlOkp9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiQ9PT0id2FybmluZyI/ImJnLXdhcm5pbmcvMTAgYm9yZGVyIGJvcmRlci13YXJuaW5nLzI1IHRleHQtd2FybmluZy1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGJyZWFrLXdvcmRzIiwiZGF0YS1jYW1lcmEtYmFubmVyLWtpbmQiOiQscm9sZTokPT09ImVycm9yIj8iYWxlcnQiOiJzdGF0dXMiLGNoaWxkcmVuOkp9KX1mdW5jdGlvbiBONCh7dWRpZDokLGJ1bmRsZUlkOkp9KXtsZXRbUSxYXT1NKCExKSxbSyxZXT1NKCJwbGFjZWhvbGRlciIpLFtxLEddPU0oIiIpLFtCLE5dPU0obnVsbCksW0wsVl09TSghMSksQz1UKDApLFtVLE9dPU0oITEpLFt6LEhdPU0oITEpLEY9VChudWxsKSxbQSxiXT1NKFtdKSxbRCxTXT1NKCExKSxbeCxzXT1NKCIiKSxbZyx1XT1NKCJvZmYiKSxbaSxvXT1NKG51bGwpLFtyLFExXT1NKG51bGwpLE4xPWkhPT1udWxsfHxyIT09bnVsbCxbYyxqXT1NKG51bGwpLFthLEsxXT1NKG51bGwpLFssTDFdPU0obnVsbCksW0oxLFkxXT1NKCExKSxbQzEsRV09TSgicmVhZHkiKSxbZixfXT1NKCgpPT5uZXcgU2V0KSxbcCxsXT1NKG51bGwpLFt2LEcxXT1NKG51bGwpLHoxPVQoITEpLE0xPVQoITEpLFcxPVQoIm9mZiIpLGkxPVQoITEpLEExPVQxKCgpPT57bGV0IFA9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIVApcmV0dXJuInNlcnZlLXNpbSI7aWYoL1wudHMkLy50ZXN0KFApKXJldHVybmBidW4gJHtrMShQKX1gO2lmKC9cLmpzJC8udGVzdChQKSlyZXR1cm5gbm9kZSAke2sxKFApfWA7cmV0dXJuIGsxKFApfSxbXSksdjE9dyhhc3luYygpPT57bGV0IFA9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uY2FtZXJhU3RhdHVzRW5kcG9pbnQ7cmV0dXJuIFA/a1EoUCk6bnVsbH0sW10pLF8xPVQoYXN5bmMoKT0+e30pLGwxPVQoSik7eSgoKT0+e2wxLmN1cnJlbnQ9Sn0sW0pdKSx5KCgpPT57bGV0IFA9ITE7cmV0dXJuKGFzeW5jKCk9PntsZXQgZD1hd2FpdCB2MSgpO2lmKFB8fCFkfHwhZC5hbGl2ZSlyZXR1cm47TTEuY3VycmVudD0hMDtsZXQgbj1kLnNvdXJjZTtpZihuPT09InBsYWNlaG9sZGVyInx8bj09PSJ3ZWJjYW0ifHxuPT09ImltYWdlInx8bj09PSJ2aWRlbyIpWShuKTtpZigobj09PSJpbWFnZSJ8fG49PT0idmlkZW8iKSYmZC5hcmcpRyhkLmFyZyksTihkLmFyZy5zcGxpdCgiLyIpLnBvcCgpPz9udWxsKTtpZihuPT09IndlYmNhbSImJmQuYXJnKXMoZC5hcmcpLF8xLmN1cnJlbnQoKTtsZXQgTzE9ZC5taXJyb3I9PT0ib24iPyJvbiI6Im9mZiI7dShPMSksVzEuY3VycmVudD1PMSxsKGQuaGVscGVyUGlkPz9udWxsKSxZMSghMCk7bGV0IFYxPUFycmF5LmlzQXJyYXkoZC5idW5kbGVJZHMpP2QuYnVuZGxlSWRzOltdO2lmKFYxLmxlbmd0aD4wKV8obmV3IFNldChWMSkpO2xldCBCMT1sMS5jdXJyZW50LGYxPW4mJm4hPT0icGxhY2Vob2xkZXIiO0UoQjEmJlYxLmluY2x1ZGVzKEIxKSYmZjE/ImFjdGl2ZSI6InJlYWR5IiksTDEoYFJlYXR0YWNoZWQg4oaSICR7bj8/InJ1bm5pbmcgaGVscGVyIn0ke2QuYXJnP2AgKCR7ZC5hcmd9KWA6IiJ9YCl9KSgpLCgpPT57UD0hMH19LFskLHYxXSkseSgoKT0+e2xldCBQPSExLGQ9ITEsbj1udWxsLE8xPWFzeW5jKCk9PntpZihQfHxkKXJldHVybjtpZih0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilyZXR1cm47ZD0hMDt0cnl7bGV0IEIxPWF3YWl0IHYxKCk7aWYoUClyZXR1cm47bGV0IGYxPSEhQjE/LmFsaXZlLHAxPUFycmF5LmlzQXJyYXkoQjE/LmJ1bmRsZUlkcyk/QjEuYnVuZGxlSWRzOm51bGwseDE9ISFKJiYocDE/cDEuaW5jbHVkZXMoSik6Zi5oYXMoSikpLGswPUIxPy5zb3VyY2U/P251bGwsdzE9SjEmJmYxJiZ4MSYmISEoazAmJmswIT09InBsYWNlaG9sZGVyIikmJihwPT1udWxsfHxCMT8uaGVscGVyUGlkPT09cCk7aWYoRSgoTDApPT5XUShMMCx3MSkpLCFmMSlZMSgoTDApPT57aWYoIUwwKXJldHVybiBMMDtyZXR1cm4gXyhuZXcgU2V0KSxsKG51bGwpLFcxLmN1cnJlbnQ9Im9mZiIsITF9KTtlbHNlIGlmKEoxJiZwIT1udWxsJiZCMT8uaGVscGVyUGlkIT09cClZMSghMSksXyhuZXcgU2V0KSxsKG51bGwpLFcxLmN1cnJlbnQ9Im9mZiI7ZWxzZSBpZihmMSYmQXJyYXkuaXNBcnJheShCMT8uYnVuZGxlSWRzKSl7bGV0IEwwPUIxLmJ1bmRsZUlkcztfKChEMCk9PntpZihEMC5zaXplPT09TDAubGVuZ3RoJiZMMC5ldmVyeSgoUzApPT5EMC5oYXMoUzApKSlyZXR1cm4gRDA7cmV0dXJuIG5ldyBTZXQoTDApfSl9fWZpbmFsbHl7ZD0hMX19O249c2V0SW50ZXJ2YWwoKCk9PntPMSgpfSxPUSk7bGV0IFYxPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09InZpc2libGUiKU8xKCl9O2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsVjEpO3JldHVybigpPT57aWYoUD0hMCxuKWNsZWFySW50ZXJ2YWwobik7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixWMSl9fSxbdjEsSjEscCxKLGZdKTtsZXQgVTE9dyhhc3luYygpPT57UyghMCksaihudWxsKTt0cnl7bGV0IFA9YXdhaXQgRTEoYCR7QTF9IGNhbWVyYSAtLWxpc3Qtd2ViY2Ftc2ApO2lmKFAuZXhpdENvZGUhPT0wKXtqKFAuc3RkZXJyLnRyaW0oKXx8YC0tbGlzdC13ZWJjYW1zIGZhaWxlZCAoJHtQLmV4aXRDb2RlfSlgKTtyZXR1cm59bGV0IGQ9UFEoUC5zdGRvdXQpO2lmKGIoZCksZC5sZW5ndGg+MCYmIXgpcyhkWzBdLmlkKX1maW5hbGx5e1MoITEpfX0sW3gsQTFdKTt5KCgpPT57XzEuY3VycmVudD1VMX0sW1UxXSkseSgoKT0+e2lmKHomJkEubGVuZ3RoPT09MCYmIUQpVTEoKX0sW3osQS5sZW5ndGgsRCxVMV0pO2xldCBJMT13KChQKT0+e2ooSVEoe3Jhd01lc3NhZ2U6UCxsYXN0RmlsZUlzSGVpYzp6MS5jdXJyZW50LHNvdXJjZTpLfSkpfSxbS10pLGQxPXcoYXN5bmMoUCxkLG4pPT57bGV0IE8xPVA9PT0iaW1hZ2UifHxQPT09InZpZGVvIixWMT1bImNhbWVyYSIsInN3aXRjaCIsTzE/ImZpbGUiOlBdO2lmKFA9PT0id2ViY2FtIiYmZClWMS5wdXNoKGsxKGQpKTtpZihPMSl7aWYoIW4udHJpbSgpKXJldHVybiBqKCJEcm9wIGEgZmlsZSBpbnRvIHRoZSBwYW5lbCBvciBwaWNrIGFub3RoZXIgc291cmNlLiIpLCExO1YxLnB1c2goazEobi50cmltKCkpKX1WMS5wdXNoKCItZCIsJCwiLS1xdWlldCIpO2xldCBCMT1hd2FpdCBFMShgJHtBMX0gJHtWMS5qb2luKCIgIil9YCk7aWYoQjEuZXhpdENvZGUhPT0wKXJldHVybiBJMShCMS5zdGRlcnIudHJpbSgpfHxCMS5zdGRvdXQudHJpbSgpfHxgc3dpdGNoIGZhaWxlZCAoJHtCMS5leGl0Q29kZX0pYCksITE7ejEuY3VycmVudD0hMTt0cnl7bGV0IGYxPUpTT04ucGFyc2UoQjEuc3Rkb3V0LnRyaW0oKSk7TDEoYFN3aXRjaGVkIOKGkiAke2YxLnNvdXJjZT8/UH0ke2YxLmFyZz9gICgke2YxLmFyZ30pYDoiIn1gKX1jYXRjaHtMMShgU3dpdGNoZWQg4oaSICR7UH1gKX1yZXR1cm4hMH0sWyQsQTEsSTFdKSx0MT13KGFzeW5jKCk9PntpZighSilyZXR1cm47bygiaW5qZWN0IiksaihudWxsKSxMMShudWxsKTt0cnl7bGV0IFA9WyJjYW1lcmEiLGsxKEopLCItZCIsJCwiLS1xdWlldCJdO2lmKEs9PT0iaW1hZ2UifHxLPT09InZpZGVvIil7aWYoIXEudHJpbSgpKXtqKCJEcm9wIGEgZmlsZSBpbnRvIHRoZSBwYW5lbCBvciBwaWNrIGFub3RoZXIgc291cmNlLiIpO3JldHVybn1QLnB1c2goIi0tZmlsZSIsazEocS50cmltKCkpKX1lbHNlIGlmKEs9PT0id2ViY2FtIilpZih4KVAucHVzaCgiLS13ZWJjYW0iLGsxKHgpKTtlbHNlIFAucHVzaCgiLS13ZWJjYW0iKTtQLnB1c2goIi0tbWlycm9yIixnKTtsZXQgZD1hd2FpdCBFMShgJHtBMX0gJHtQLmpvaW4oIiAiKX1gKTtpZihkLmV4aXRDb2RlIT09MCl7STEoZC5zdGRlcnIudHJpbSgpfHxkLnN0ZG91dC50cmltKCl8fGBpbmplY3QgZmFpbGVkICgke2QuZXhpdENvZGV9KWApO3JldHVybn16MS5jdXJyZW50PSExO2xldCBuPW51bGw7dHJ5e2xldCBPMT1KU09OLnBhcnNlKGQuc3Rkb3V0LnRyaW0oKSk7bj1PMS5oZWxwZXJQaWQ/P251bGw7bGV0IFYxPU8xLmhlbHBlclJlbGF1bmNoZWQ9PT0hMT8iQXR0YWNoZWQiOiJJbmplY3RlZCIsQjE9TzEucGlkP2AgcGlkICR7TzEucGlkfWA6IiIsZjE9TzEuaGVscGVyUGlkP2AsIGhlbHBlciBwaWQgJHtPMS5oZWxwZXJQaWR9YDoiIjtMMShgJHtWMX0gJHtPMS5zb3VyY2U/P0t9IGludG8gJHtKfSR7QjF9JHtmMX1gKX1jYXRjaHtMMShkLnN0ZG91dC50cmltKCl8fCJJbmplY3RlZC4iKX1ZMSghMCksRShLPT09InBsYWNlaG9sZGVyIj8icmVhZHkiOiJhY3RpdmUiKSxsKG4pLF8oKE8xKT0+TzEuaGFzKEopP08xOm5ldyBTZXQoTzEpLmFkZChKKSksVzEuY3VycmVudD1nfWZpbmFsbHl7byhudWxsKX19LFtKLCQsSyxxLHgsZyxBMSxJMV0pLGcxPUoxP2Ake0t9Ojoke0s9PT0id2ViY2FtIj94OiIifTo6JHtLPT09ImltYWdlInx8Sz09PSJ2aWRlbyI/cToiIn1gOm51bGwsbjE9ISFKJiZmLmhhcyhKKSwkMD1uMSYmSyE9PSJwbGFjZWhvbGRlciI7eSgoKT0+e2lmKCEkMCl7aTEuY3VycmVudD0hMTtyZXR1cm59aWYoaTEuY3VycmVudClyZXR1cm47aTEuY3VycmVudD0hMCxYKCEwKX0sWyQwXSkseSgoKT0+e2lmKCF2KXJldHVybjtpZighSnx8TjF8fFUpcmV0dXJuO2lmKEshPT0id2ViY2FtInx8eCE9PXYpcmV0dXJuO2lmKEcxKG51bGwpLEoxKXJldHVybjt0MSgpfSxbdixKLE4xLFUsSyx4LEoxLHQxXSkseSgoKT0+e2lmKCFKMSlyZXR1cm47aWYoKEs9PT0iaW1hZ2UifHxLPT09InZpZGVvIikmJiFxLnRyaW0oKSlyZXR1cm47aWYoSz09PSJ3ZWJjYW0iJiYheClyZXR1cm47aWYoTTEuY3VycmVudCl7TTEuY3VycmVudD0hMTtyZXR1cm59bGV0IFA9ITE7cmV0dXJuKGFzeW5jKCk9PntRMSgic3dpdGNoIiksaihudWxsKTt0cnl7aWYoUClyZXR1cm47YXdhaXQgZDEoSyx4LHEpfWZpbmFsbHl7aWYoIVApUTEobnVsbCl9fSkoKSwoKT0+e1A9ITB9fSxbZzFdKSx5KCgpPT57aWYoIUoxKXJldHVybjtpZihXMS5jdXJyZW50PT09ZylyZXR1cm47bGV0IFA9ZyxkPSExO3JldHVybihhc3luYygpPT57UTEoIm1pcnJvciIpLGoobnVsbCk7dHJ5e2xldCBuPWF3YWl0IEUxKGAke0ExfSBjYW1lcmEgbWlycm9yICR7UH0gLWQgJHskfSAtLXF1aWV0YCk7aWYoZClyZXR1cm47aWYobi5leGl0Q29kZSE9PTApe2oobi5zdGRlcnIudHJpbSgpfHxuLnN0ZG91dC50cmltKCl8fGBtaXJyb3IgZmFpbGVkICgke24uZXhpdENvZGV9KWApO3JldHVybn1XMS5jdXJyZW50PVAsTDEoYE1pcnJvciDihpIgJHtQfWApfWZpbmFsbHl7aWYoIWQpUTEobnVsbCl9fSkoKSwoKT0+e2Q9ITB9fSxbZyxKMV0pO2xldCBWMD13KGFzeW5jKCk9PntvKCJzdG9wIiksaihudWxsKTt0cnl7bGV0IFA9YXdhaXQgRTEoYCR7QTF9IGNhbWVyYSAtLXN0b3Atd2ViY2FtIC1kICR7JH1gKTtpZihQLmV4aXRDb2RlIT09MCl7aihQLnN0ZGVyci50cmltKCl8fGBzdG9wLXdlYmNhbSBmYWlsZWQgKCR7UC5leGl0Q29kZX0pYCk7cmV0dXJufUwxKCJDYW1lcmEgaGVscGVyIHN0b3BwZWQuIiksWTEoITEpLEUoInJlYWR5IiksXyhuZXcgU2V0KSxXMS5jdXJyZW50PSJvZmYifWZpbmFsbHl7byhudWxsKX19LFskLEExXSksczE9dyhhc3luYyhQKT0+e2xldCBkPVRRKHt0eXBlOlAudHlwZSxuYW1lOlAubmFtZX0pLG49UC50eXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpfHxkLE8xPVAudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKXx8QjQoe3R5cGU6UC50eXBlLG5hbWU6UC5uYW1lfSk7aWYoIW4mJiFPMSl7ejEuY3VycmVudD0hMSxqKGBVbnN1cHBvcnRlZCBmaWxlIHR5cGU6ICR7UC50eXBlfHxQLm5hbWV9YCk7cmV0dXJufWlmKE8oITApLGoobnVsbCksSzEobnVsbCksd1Eoe3R5cGU6UC50eXBlLG5hbWU6UC5uYW1lLHNpemU6UC5zaXplfSkpSzEoTVEpO3oxLmN1cnJlbnQ9ZDt0cnl7bGV0IFYxPU8yKFApLEIxPWF3YWl0IFk0KFAsInNlcnZlLXNpbS1jYW1zcmMiLFYxLEUxKTtOKFAubmFtZSksWShPMT8idmlkZW8iOiJpbWFnZSIpLEcoQjEpLEwxKGBMb2FkZWQgJHtQLm5hbWV9YCl9Y2F0Y2goVjEpe2lmKHoxLmN1cnJlbnQpaihWNCk7ZWxzZSBqKFYxPy5tZXNzYWdlPz8iVXBsb2FkIGZhaWxlZCIpfWZpbmFsbHl7TyghMSl9fSxbXSksdjA9dyhhc3luYyhQKT0+e1AucHJldmVudERlZmF1bHQoKSxQLnN0b3BQcm9wYWdhdGlvbigpLEMuY3VycmVudD0wLFYoITEpO2xldCBkPVAuZGF0YVRyYW5zZmVyPy5maWxlcz8uWzBdO2lmKGQpYXdhaXQgczEoZCl9LFtzMV0pLG0xPXcoKCk9PntZKCJwbGFjZWhvbGRlciIpLEcoIiIpLE4obnVsbCksaihudWxsKSxLMShudWxsKSx6MS5jdXJyZW50PSExfSxbXSkscTA9dygoKT0+e0YuY3VycmVudD8uY2xpY2soKX0sW10pLEowPXcoYXN5bmMoUCk9PntsZXQgZD1QLnRhcmdldCxuPWQuZmlsZXM/LlswXTtpZihkLnZhbHVlPSIiLG4pYXdhaXQgczEobil9LFtzMV0pO3koKCk9PntpZigheilyZXR1cm47bGV0IFA9KGQpPT57bGV0IG49ZC50YXJnZXQ7aWYobiBpbnN0YW5jZW9mIEVsZW1lbnQmJm4uY2xvc2VzdCgiW2RhdGEtY2FtZXJhLXNvdXJjZS1tZW51XSIpKXJldHVybjtIKCExKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLFApLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixQKX0sW3pdKTtsZXQgXzA9dygoUCk9PntpZihzKFAuaWQpLFkoIndlYmNhbSIpLE4obnVsbCksaihudWxsKSx6MS5jdXJyZW50PSExLEgoITEpLEopRzEoUC5pZCl9LFtKXSksYzE9dygoKT0+e3UoKFApPT5QPT09Im9uIj8ib2ZmIjoib24iKX0sW10pLGExPSFKMXx8Sz09PSJwbGFjZWhvbGRlciIsUDA9dygoUCk9PntpZihQLnByZXZlbnREZWZhdWx0KCksQy5jdXJyZW50KyssQy5jdXJyZW50PT09MSlWKCEwKX0sW10pLGgxPXcoKFApPT57aWYoUC5wcmV2ZW50RGVmYXVsdCgpLFAuZGF0YVRyYW5zZmVyKVAuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbXSksQzA9dygoUCk9PntpZihQLnByZXZlbnREZWZhdWx0KCksQy5jdXJyZW50LS0sQy5jdXJyZW50PD0wKUMuY3VycmVudD0wLFYoITEpfSxbXSksQjA9X1Eoe2J1bmRsZUlkOkosaW5qZWN0ZWQ6SjEsc291cmNlOkssZm9yZWdyb3VuZElzSW5qZWN0ZWQ6bjF9KSxEMT1CMD09PSJzdG9wIj97bGFiZWw6aT09PSJzdG9wIj8iU3RvcHBpbmfigKYiOiJTdG9wIixvbkNsaWNrOlYwLGtpbmQ6InN0b3AifTpCMD09PSJhdHRhY2giP3tsYWJlbDppPT09ImluamVjdCI/IkluamVjdGluZ+KApiI6YEluamVjdCAke0p9YCxvbkNsaWNrOnQxLGtpbmQ6ImF0dGFjaCJ9OntsYWJlbDppPT09ImluamVjdCI/IlN0YXJ0aW5n4oCmIjoiUGxheSIsb25DbGljazp0MSxraW5kOiJwbGF5In0seTE9QjA9PT0ic3RvcCI/VXx8aSE9PW51bGw6IUp8fFV8fGkhPT1udWxsLFEwPUs9PT0icGxhY2Vob2xkZXIiLEYwPUs9PT0id2ViY2FtIixOMD0oSz09PSJpbWFnZSJ8fEs9PT0idmlkZW8iKSYmISFCLE8wPUYwP0EuZmluZCgoUCk9PlAuaWQ9PT14KT8ubmFtZT8/eD8/IldlYmNhbSI6bnVsbCxYMT1VPyJ1cGxvYWRpbmciOk4wPyJmaWxlIjpGMD8id2ViY2FtIjoicGxhY2Vob2xkZXIiO3JldHVybiBaKGUxLHtvcGVuOlEsb25PcGVuQ2hhbmdlOlgsYm9keUNsYXNzTmFtZToicHQtMi41IixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpaKFoxLHtjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiQ2FtZXJhIn0pLFooRVEse3N0YXRlOkMxfSldfSksY2hpbGRyZW46WigiZGl2Iix7b25EcmFnRW50ZXI6UDAsb25EcmFnT3ZlcjpoMSxvbkRyYWdMZWF2ZTpDMCxvbkRyb3A6djAsY2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0yLjUiLGNoaWxkcmVuOltaKCJwIix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTBweF0gbGVhZGluZy1bMS41XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjoiUmVwbGFjZXMgdGhlIHNpbXVsYXRvcidzIGNhbWVyYSBmZWVkIGJ5IGluamVjdGluZyBhIGR5bGliIGF0IGFwcCBsYXVuY2ggYW5kIHN0cmVhbWluZyBmcmFtZXMgaW50byBzaGFyZWQgbWVtb3J5LiBQaWNrIG1lZGlhIG9yIGEgd2ViY2FtLCB0aGVuIFBsYXkgdG8gaW5qZWN0IGludG8gdGhlIGZvcmVncm91bmQgYXBwLiJ9KSxaKCJpbnB1dCIse3JlZjpGLHR5cGU6ImZpbGUiLGFjY2VwdDoiaW1hZ2UvKix2aWRlby8qIixjbGFzc05hbWU6ImhpZGRlbiIsb25DaGFuZ2U6SjB9KSxaKCJkaXYiLHtvbkNsaWNrOihQKT0+e2lmKCFRMClyZXR1cm47aWYoUC50YXJnZXQuY2xvc2VzdCgiW2RhdGEtY2xlYXItbWVkaWFdIikpcmV0dXJuO3EwKCl9LHRpdGxlOlEwPyJObyBzb3VyY2Ugc2VsZWN0ZWQg4oCUIFBsYXkgdXNlcyBhIHRlc3QtcGF0dGVybiBmZWVkLiBDbGljayB0byBwaWNrIGFuIGltYWdlL3ZpZGVvLCBvciBkcm9wIG9uZSBoZXJlLiI6RjA/YFNvdXJjZTogJHtPMH1gOmBTb3VyY2U6ICR7Qj8/S31gLGNsYXNzTmFtZTpbInJlbGF0aXZlIG1pbi1oLVs0NHB4XSBmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMi41IHB4LTMuNSBweS0yLjUgcm91bmRlZC1bN3B4XSB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLVtib3JkZXItY29sb3IsYmFja2dyb3VuZF0gZHVyYXRpb24tMTUwIixRMD8iYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8xMiI6ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLEw/IiFiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMDgpXSAhYm9yZGVyLVtyZ2JhKDEwLDEzMiwyNTUsMC42KV0iOiIiLFU/ImN1cnNvci1wcm9ncmVzcyI6UTA/ImN1cnNvci1wb2ludGVyIjoiY3Vyc29yLWRlZmF1bHQiXS5qb2luKCIgIiksY2hpbGRyZW46W1ooYlEse21vZGU6WDEsZmlsZU5hbWU6Qix3ZWJjYW1OYW1lOk8wLHNvdXJjZUtpbmQ6S30pLCFRMCYmIVUmJlooImJ1dHRvbiIseyJkYXRhLWNsZWFyLW1lZGlhIjohMCxvbkNsaWNrOihQKT0+e1Auc3RvcFByb3BhZ2F0aW9uKCksbTEoKX0sY2xhc3NOYW1lOiJzaHJpbmstMCB3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvNTUgaG92ZXI6dGV4dC13aGl0ZS85MCBjdXJzb3ItcG9pbnRlciBwLTAiLCJhcmlhLWxhYmVsIjoiQ2xlYXIgc291cmNlIix0aXRsZToiQ2xlYXIg4oaSIHBsYWNlaG9sZGVyIixjaGlsZHJlbjpaKEcwLHtzaXplOjE0LHN0cm9rZVdpZHRoOjJ9KX0pXX0pLFEwJiYhVSYmWih5USx7fSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLXN0cmV0Y2ggZ2FwLTEuNSIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUiLCJkYXRhLWNhbWVyYS1zb3VyY2UtbWVudSI6ITAsY2hpbGRyZW46W1ooImJ1dHRvbiIse29uQ2xpY2s6KCk9PkgoKFApPT4hUCksY2xhc3NOYW1lOiJoLWZ1bGwgbWluLWgtWzM2cHhdIHctMTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiB0ZXh0LXdoaXRlLzg1IHJvdW5kZWQtWzdweF0gY3Vyc29yLXBvaW50ZXIgcC0wIGhvdmVyOmJnLXdoaXRlL1swLjA2XSBob3Zlcjpib3JkZXItd2hpdGUvMjAgaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtaGFzcG9wdXAiOiJtZW51IiwiYXJpYS1leHBhbmRlZCI6eix0aXRsZTpLPT09IndlYmNhbSI/YFNvdXJjZTogd2ViY2FtJHt4P2AgKCR7QS5maW5kKChQKT0+UC5pZD09PXgpPy5uYW1lPz94fSlgOiIifSDigJQgY2xpY2sgdG8gY2hhbmdlYDpgU291cmNlOiAke0t9IOKAlCBjbGljayB0byBwaWNrIG1lZGlhIG9yIHdlYmNhbWAsImFyaWEtbGFiZWwiOiJDaG9vc2UgY2FtZXJhIHNvdXJjZSIsY2hpbGRyZW46WihSMix7c2l6ZToyMCxzdHJva2VXaWR0aDoyfSl9KSx6JiZaKCJkaXYiLHtyb2xlOiJtZW51IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzZweCldIGxlZnQtMCB6LTEwIG1pbi13LVsyMDBweF0gZmxleCBmbGV4LWNvbCBnYXAtcHggcC0xIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVs3cHhdIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNCldIixjaGlsZHJlbjpbWigiYnV0dG9uIix7cm9sZToibWVudWl0ZW0iLGNsYXNzTmFtZToidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvODUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIixvbkNsaWNrOigpPT57SCghMSkscTAoKX0sdGl0bGU6IlBpY2sgYW4gaW1hZ2Ugb3IgdmlkZW8gZnJvbSBkaXNrIixjaGlsZHJlbjoiQnJvd3NlIG1lZGlh4oCmIn0pLFooImRpdiIse2NsYXNzTmFtZToiaC1weCBiZy13aGl0ZS84IG15LTEifSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcGwtMi41IHByLTIgcHQtMSBwYi1bMnB4XSIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDUgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIixjaGlsZHJlbjpEPyJDYW1lcmFzIChsb2FkaW5n4oCmKSI6QS5sZW5ndGg9PT0wPyJObyBjYW1lcmFzIjoiQ2FtZXJhcyJ9KSxaKCJidXR0b24iLHtvbkNsaWNrOihQKT0+e1Auc3RvcFByb3BhZ2F0aW9uKCksVTEoKX0sZGlzYWJsZWQ6RCxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctWzIycHhdIGgtWzIycHhdIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gdGV4dC13aGl0ZS81NSBob3Zlcjp0ZXh0LXdoaXRlLzkwIGN1cnNvci1wb2ludGVyIHAtMCBkaXNhYmxlZDpvcGFjaXR5LTUwIiwiYXJpYS1sYWJlbCI6IlJlZnJlc2ggY2FtZXJhcyIsdGl0bGU6IlJlZnJlc2ggY2FtZXJhcyIsY2hpbGRyZW46WihpMCx7c2l6ZToxMyxzdHJva2VXaWR0aDoyfSl9KV19KSxBLm1hcCgoUCk9PntsZXQgZD1LPT09IndlYmNhbSImJng9PT1QLmlkO3JldHVybiBaKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOlsidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtWzEycHhdIHB4LTIuNSBweS1bN3B4XSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLXdoaXRlL1swLjA2XSIsZD8iIWJnLXdoaXRlL1swLjEyXSAhdGV4dC13aGl0ZSI6InRleHQtd2hpdGUvODUiXS5qb2luKCIgIiksb25DbGljazooKT0+XzAoUCksdGl0bGU6UC5uYW1lLGNoaWxkcmVuOlAubmFtZX0sUC5pZCl9KV19KV19KSxaKCJidXR0b24iLHtvbkNsaWNrOkQxLm9uQ2xpY2ssZGlzYWJsZWQ6eTEsY2xhc3NOYW1lOlsiZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGRpc2FibGVkOm9wYWNpdHktNTAgbWluLWgtWzM2cHhdIixEMS5raW5kPT09InN0b3AiPyJiZy13aGl0ZS9bMC4xNl0gdGV4dC13aGl0ZSBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjIyXSI6ImJnLXN1Y2Nlc3MtZW1lcmFsZCB0ZXh0LVsjMDYyMDE4XSBlbmFibGVkOmhvdmVyOmJyaWdodG5lc3MtWzEuMDhdIl0uam9pbigiICIpLHRpdGxlOkQxLmtpbmQ9PT0ic3RvcCI/IlN0b3AgdGhlIGNhbWVyYSBoZWxwZXIgYW5kIHRlcm1pbmF0ZSBpbmplY3RlZCBhcHBzIjpEMS5raW5kPT09ImF0dGFjaCI/YEluamVjdCAke0p9IHNvIGl0IGpvaW5zIHRoZSBjYW1lcmEgZmVlZGA6IUo/IkJyaW5nIGFuIGFwcCB0byB0aGUgZm9yZWdyb3VuZCBmaXJzdCI6IlN0YXJ0OiBpbmplY3QgdGhlIGR5bGliIGFuZCBsYXVuY2ggdGhlIGZvcmVncm91bmQgYXBwIHdpdGggdGhlIGNob3NlbiBzb3VyY2UiLCJhcmlhLXByZXNzZWQiOkQxLmtpbmQ9PT0ic3RvcCIsImFyaWEtbGFiZWwiOkQxLmtpbmQ9PT0ic3RvcCI/IlN0b3AiOiJQbGF5IixjaGlsZHJlbjpbRDEua2luZD09PSJzdG9wIj9aKGQyLHt9KTpaKGwyLHt9KSxaKCJzcGFuIix7Y2hpbGRyZW46RDEua2luZD09PSJzdG9wIj8iU3RvcCI6RDEua2luZD09PSJhdHRhY2giPyJJbmplY3QiOiJQbGF5In0pXX0pLFooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpjMSxkaXNhYmxlZDphMSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctMTAgbWluLWgtWzM2cHhdIGJvcmRlciByb3VuZGVkLVs3cHhdIGZvbnQtW2luaGVyaXRdIGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGFjdGl2ZTpzY2FsZS1bMC45N10gJHtnPT09Im9uIj8iYmctd2hpdGUgYm9yZGVyLXdoaXRlIHRleHQtWyMwYTBhMGNdIGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuODhdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLXdoaXRlL1swLjg4XSBlbmFibGVkOmhvdmVyOnRleHQtWyMwYTBhMGNdIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlci13aGl0ZS84IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4wOV0gZW5hYmxlZDpob3Zlcjpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4xOCldIGVuYWJsZWQ6aG92ZXI6dGV4dC13aGl0ZSJ9YCwiYXJpYS1sYWJlbCI6YE1pcnJvcjogJHtnfSDigJQgdGFwIHRvIHRvZ2dsZWAsdGl0bGU6YTE/Ik1pcnJvciB0b2dnbGUgYXZhaWxhYmxlIG9uY2UgYSBzb3VyY2UgaXMgc3RyZWFtaW5nIjpgTWlycm9yOiAke2d9IOKAlCBjbGljayB0byB0b2dnbGVgLCJhcmlhLXByZXNzZWQiOmc9PT0ib24iLGNoaWxkcmVuOloodjIse3NpemU6MjAsc3Ryb2tlV2lkdGg6MixmaWxsOmc9PT0ib24iPyJjdXJyZW50Q29sb3IiOiJub25lIn0pfSldfSksYSYmWihHNCx7a2luZDoid2FybmluZyIsbWVzc2FnZTphfSksYyYmWihHNCx7a2luZDoiZXJyb3IiLG1lc3NhZ2U6Y30pXX0pfSl9dmFyIEw0PTUwMDtmdW5jdGlvbiB6NCh7dWRpZDokLGV2ZW50c0VuZHBvaW50Okp9KXtsZXRbUSxYXT1NKCExKSxbSyxZXT1NKFtdKSxbcSxHXT1NKCExKSxCPVQxKCgpPT5KPz9gJHtqMSgiYXBpL2V2ZW50LWxvZy9ldmVudHMiKX0/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfWAsW0osJF0pO3koKCk9PntHKCExKSxZKFtdKTtsZXQgTD15MChCKTtyZXR1cm4gTC5vbm1lc3NhZ2U9KHtkYXRhOlZ9KT0+e3RyeXtsZXQgQz1KU09OLnBhcnNlKFYpO2lmKEcoITEpLEFycmF5LmlzQXJyYXkoQy5ldmVudHMpKVkoQy5ldmVudHMuc2xpY2UoLUw0KSk7ZWxzZSBpZihDLmV2ZW50KVkoKFUpPT57cmV0dXJuWy4uLlUuZmlsdGVyKCh6KT0+ei5pZCE9PUMuZXZlbnQuaWQpLEMuZXZlbnRdLnNsaWNlKC1MNCl9KX1jYXRjaHt9fSxMLm9uZXJyb3I9KCk9PkcoITApLCgpPT5MLmNsb3NlKCl9LFtCXSk7bGV0IE49VDEoKCk9Pksuc2xpY2UoKS5yZXZlcnNlKCksW0tdKTtyZXR1cm4gWihlMSx7b3BlbjpRLG9uT3BlbkNoYW5nZTpYLCJkYXRhLWV2ZW50LWxvZyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6WihaMSx7Y2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIixjaGlsZHJlbjoiRXZlbnQgTG9nIn0pLFooInNwYW4iLHt9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItd2hpdGUvOCBiZy13aGl0ZS9bMC4wNF0gcHgtMS41IHB5LVszcHhdIHRleHQtWzEwcHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlLzYwIixjaGlsZHJlbjpLLmxlbmd0aH0pXX0pLGNoaWxkcmVuOk4ubGVuZ3RoPT09MD9aKCJkaXYiLHtyb2xlOiJzdGF0dXMiLCJhcmlhLWxpdmUiOiJwb2xpdGUiLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktNCB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpxPyJEaXNjb25uZWN0ZWQiOiJObyBldmVudHMgeWV0In0pOlooImRpdiIse2NsYXNzTmFtZToiZmxleCBtYXgtaC1bMzIwcHhdIGZsZXgtY29sIGdhcC0xIG92ZXJmbG93LXktYXV0byBweS0wLjUgW3Njcm9sbGJhci13aWR0aDp0aGluXSIscm9sZToibGlzdCIsY2hpbGRyZW46Ti5tYXAoKEwpPT5aKFNRLHtldmVudDpMfSxMLmlkKSl9KX0pfWZ1bmN0aW9uIFNRKHtldmVudDokfSl7bGV0IEo9eFEoJC50aW1lc3RhbXApLFE9WyQuc291cmNlLCQua2luZCwkLmFjdGlvbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAvICIpLFg9JC5tc2c/PyQuc3VtbWFyeSxLPSQuc3RhdHVzPT09ImVycm9yIj8iYm9yZGVyLVsjZmY0NTNhXS81MCBiZy1bI2ZmNDUzYV0vMTAgdGV4dC1bI2ZmYjNhZF0iOiJib3JkZXItd2hpdGUvOCBiZy13aGl0ZS9bMC4wNF0gdGV4dC13aGl0ZS81MCI7cmV0dXJuIFooImRpdiIse3JvbGU6Imxpc3RpdGVtIix0aXRsZTpRLGNsYXNzTmFtZToiZ3JpZCBncmlkLWNvbHMtWzU2cHhfMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLW1kIHB4LTEuNSBweS0xLjUgdGV4dC1bMTJweF0gbGVhZGluZy10aWdodCBob3ZlcjpiZy13aGl0ZS9bMC4wNV0iLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJmb250LW1vbm8gdGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46Sn0pLFooInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjpYfSksWigic3BhbiIse2NsYXNzTmFtZToibXQtMC41IGJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjpRfSldfSksJC5zdGF0dXM/Wigic3BhbiIse2NsYXNzTmFtZTpgcm91bmRlZC1tZCBib3JkZXIgcHgtMS41IHB5LVszcHhdIHRleHQtWzEwcHhdIGZvbnQtbW9ubyAke0t9YCxjaGlsZHJlbjokLnN0YXR1c30pOm51bGxdfSl9ZnVuY3Rpb24geFEoJCl7bGV0IEo9bmV3IERhdGUoJCk7aWYoTnVtYmVyLmlzTmFOKEouZ2V0VGltZSgpKSlyZXR1cm4iIjtyZXR1cm4gSi50b0xvY2FsZVRpbWVTdHJpbmcoW10se2hvdXI6IjItZGlnaXQiLG1pbnV0ZToiMi1kaWdpdCIsc2Vjb25kOiIyLWRpZ2l0In0pfXZhciBqUT02MCx2UT04MDAwO2Z1bmN0aW9uIFU0KCQpe2xldFtKLFFdPU0obnVsbCksW1gsS109TShbXSksW1kscV09TSghMSksW0csQl09TSghMSksTj1UKDApO3JldHVybiB5KCgpPT57UShudWxsKSxLKFtdKSxxKCExKSxCKCExKSxOLmN1cnJlbnQ9MDtsZXQgTD15MCgkKTtMLm9ubWVzc2FnZT0oe2RhdGE6Q30pPT57dHJ5e2xldCBVPUpTT04ucGFyc2UoQyk7aWYocSghMSksInNjaGVtYVZlcnNpb24iaW4gVSlRKFUpO2Vsc2UgaWYoInQiaW4gVSl7bGV0IE89VTtOLmN1cnJlbnQ9RGF0ZS5ub3coKSxCKCExKSxLKCh6KT0+e2xldCBIPVsuLi56XS5yZXZlcnNlKCkuZmluZCgoQSk9PkEuYnVuZGxlSWQhPT1udWxsKT8uYnVuZGxlSWQ/P251bGw7cmV0dXJuWy4uLkghPT1udWxsJiZPLmJ1bmRsZUlkIT09bnVsbCYmSCE9PU8uYnVuZGxlSWQ/W106eixPXS5zbGljZSgtalEpfSl9fWNhdGNoe319LEwub25lcnJvcj0oKT0+cSghMCk7bGV0IFY9c2V0SW50ZXJ2YWwoKCk9PntpZihOLmN1cnJlbnQ+MCYmRGF0ZS5ub3coKS1OLmN1cnJlbnQ+dlEpQighMCl9LDEwMDApO3JldHVybigpPT57TC5jbG9zZSgpLGNsZWFySW50ZXJ2YWwoVil9fSxbJF0pLHttZXRhOkosbGF0ZXN0OlguYXQoLTEpPz9udWxsLGhpc3Rvcnk6WCxlcnJvcmVkOlksc3RhbGU6R319ZnVuY3Rpb24gSjgoJCl7cmV0dXJuYCR7TWF0aC5yb3VuZCgkKX0lYH1mdW5jdGlvbiBROCgkKXtsZXQgSj0kLzEwNDg1NzY7cmV0dXJuIEo+PTEwMjQ/YCR7KEovMTAyNCkudG9GaXhlZCgxKX0gR0JgOmAke01hdGgucm91bmQoSil9IE1CYH1mdW5jdGlvbiBaOCgkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpfHwkPD0wKXJldHVybiIwIEIvcyI7aWYoJDwxMDI0KXJldHVybmAke01hdGgucm91bmQoJCl9IEIvc2A7bGV0IEo9JC8xMDI0O3JldHVybiBKPDEwMjQ/YCR7TWF0aC5yb3VuZChKKX0gS0Ivc2A6YCR7KEovMTAyNCkudG9GaXhlZCgxKX0gTUIvc2B9ZnVuY3Rpb24gbzUoJCxKLFEsWCl7aWYoJC5sZW5ndGg8MilyZXR1cm4iIjtsZXQgSz1YIT09dm9pZCAwJiZYPjA/WDpNYXRoLm1heCguLi4kLDEpLFk9Si8oJC5sZW5ndGgtMSkscT0kLm1hcCgoQixOKT0+KHt4Ok4qWSx5OlEtQi9LKlF9KSksRz1gTSR7cVswXS54LnRvRml4ZWQoMSl9LCR7cVswXS55LnRvRml4ZWQoMSl9YDtmb3IobGV0IEI9MDtCPHEubGVuZ3RoLTE7QisrKXtsZXQgTj1xW0ItMV0/P3FbQl0sTD1xW0JdLFY9cVtCKzFdLEM9cVtCKzJdPz9WLFU9TWF0aC5taW4oTC55LFYueSksTz1NYXRoLm1heChMLnksVi55KSx6PShEKT0+TWF0aC5taW4oTyxNYXRoLm1heChVLEQpKSxIPUwueCsoVi54LU4ueCkvNixGPXooTC55KyhWLnktTi55KS82KSxBPVYueC0oQy54LUwueCkvNixiPXooVi55LShDLnktTC55KS82KTtHKz1gIEMke0gudG9GaXhlZCgxKX0sJHtGLnRvRml4ZWQoMSl9ICR7QS50b0ZpeGVkKDEpfSwke2IudG9GaXhlZCgxKX0gJHtWLngudG9GaXhlZCgxKX0sJHtWLnkudG9GaXhlZCgxKX1gfXJldHVybiBHfXZhciBrMj05NixlMD0yNDtmdW5jdGlvbiBDNCh7dWRpZDokLGN1cnJlbnRBcHBCdW5kbGVJZDpKLG1ldHJpY3NFbmRwb2ludDpRfSl7bGV0IFg9VDEoKCk9PlE/P2Ake2oxKCJtZXRyaWNzIil9P2RldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gLFtRLCRdKSx7bWV0YTpLLGxhdGVzdDpZLGhpc3Rvcnk6cSxlcnJvcmVkOkcsc3RhbGU6Qn09VTQoWCksW04sTF09TSghMCksVj1ZIT09bnVsbCYmWS5idW5kbGVJZCE9PW51bGwmJiFHJiYhQixDPUohPW51bGwmJkouc3RhcnRzV2l0aCgiY29tLmFwcGxlLiIpLFU9Rz8iVGhlIG1ldHJpY3Mgc3RyZWFtIGRpc2Nvbm5lY3RlZCI6Qz8iT25seSB5b3VyIGFwcCBpcyBtZWFzdXJlZDsgYSBzeXN0ZW0gYXBwIGlzIGluIHRoZSBmb3JlZ3JvdW5kIjoiV2FpdGluZyBmb3IgYWN0aXZpdHkgZGF0YSI7cmV0dXJuIFooZTEse29wZW46Tixvbk9wZW5DaGFuZ2U6TCxzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsYm9keUNsYXNzTmFtZTpWP3ZvaWQgMDoiaGlkZGVuIixzdW1tYXJ5OlooWjEse2NoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJBY3Rpdml0eSJ9KSxWPyFOJiZaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzQwIHRhYnVsYXItbnVtcyB0ZXh0LXJpZ2h0IixjaGlsZHJlbjpbSjgoWS5jcHVQY3QpLCIgwrcgIixROChZLm1lbUJ5dGVzKV19KTpaKCJzcGFuIix7ImRhdGEtbWV0cmljcy13YXJuaW5nIjohMCxyb2xlOiJzdGF0dXMiLGNsYXNzTmFtZToiZ3JvdXAgcmVsYXRpdmUganVzdGlmeS1zZWxmLWVuZCBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOltaKHAwLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InctMy41IGgtMy41IHRleHQtYW1iZXItNDAwIn0pLFooInNwYW4iLHtjbGFzc05hbWU6InNyLW9ubHkiLGNoaWxkcmVuOlV9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIHJpZ2h0LTAgdG9wLWZ1bGwgei0xMCBtdC0xIGhpZGRlbiB3LW1heCBtYXgtdy1bMjIwcHhdIHJvdW5kZWQtbWQgYmctYmxhY2svOTAgcHgtMiBweS0xIHRleHQtWzExcHhdIGxlYWRpbmctc251ZyB0ZXh0LXdoaXRlLzkwIHNoYWRvdy1sZyBncm91cC1ob3ZlcjpibG9jayIsY2hpbGRyZW46VX0pXX0pXX0pLGNoaWxkcmVuOlY/WihaMSx7Y2hpbGRyZW46W1ooSDQse2xhYmVsOiJDUFUiLHZhbHVlOko4KFkuY3B1UGN0KSxoaW50Oks/YCR7Sy5ob3N0Q29yZXN9IGNvcmVzYDp2b2lkIDAsdmFsdWVzOnEubWFwKChPKT0+Ty5jcHVQY3QpLGNsYXNzTmFtZToidGV4dC1lbWVyYWxkLTQwMCJ9KSxaKEg0LHtsYWJlbDoiTWVtb3J5Iix2YWx1ZTpROChZLm1lbUJ5dGVzKSx2YWx1ZXM6cS5tYXAoKE8pPT5PLm1lbUJ5dGVzKSxjbGFzc05hbWU6InRleHQtc2t5LTQwMCJ9KSxaKFJRLHtkb3duOlkubmV0SW5CeXRlc1BlclNlYyx1cDpZLm5ldE91dEJ5dGVzUGVyU2VjLGRvd25WYWx1ZXM6cS5tYXAoKE8pPT5PLm5ldEluQnl0ZXNQZXJTZWMpLHVwVmFsdWVzOnEubWFwKChPKT0+Ty5uZXRPdXRCeXRlc1BlclNlYyl9KV19KTpudWxsfSl9ZnVuY3Rpb24gSDQoe2xhYmVsOiQsdmFsdWU6SixoaW50OlEsdmFsdWVzOlgsY2xhc3NOYW1lOkt9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWJhc2VsaW5lIGp1c3RpZnktYmV0d2VlbiIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNTAgdGV4dC1bMTFweF0iLGNoaWxkcmVuOiR9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0YWJ1bGFyLW51bXMgdGV4dC1bMTFweF0iLGNoaWxkcmVuOltKLFEmJlooInNwYW4iLHtjbGFzc05hbWU6InRleHQtd2hpdGUvMzAgdGV4dC1bMTFweF0gbWwtMS41IixjaGlsZHJlbjpRfSldfSldfSksWihoUSx7dmFsdWVzOlgsY2xhc3NOYW1lOkt9KV19KX1mdW5jdGlvbiBYOCh7ZDokLGNsYXNzTmFtZTpKfSl7cmV0dXJuIFooInBhdGgiLHtkOiQsY2xhc3NOYW1lOkosZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjEuNSx2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSJ9KX1mdW5jdGlvbiBoUSh7dmFsdWVzOiQsY2xhc3NOYW1lOkp9KXtsZXQgUT1vNSgkLGsyLGUwKSxYPVE/YCR7UX0gTCR7azJ9LCR7ZTB9IEwwLCR7ZTB9IFpgOiIiO3JldHVybiBaKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtrMn0gJHtlMH1gLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUiLGNsYXNzTmFtZTpgdy1mdWxsIGgtOCAke0p9YCxjaGlsZHJlbjpbWigicGF0aCIse2Q6WCxmaWxsOiJjdXJyZW50Q29sb3IiLG9wYWNpdHk6MC4xMixzdHJva2U6Im5vbmUifSksWihYOCx7ZDpRfSldfSl9ZnVuY3Rpb24gUlEoe2Rvd246JCx1cDpKLGRvd25WYWx1ZXM6USx1cFZhbHVlczpYfSl7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1iYXNlbGluZSBqdXN0aWZ5LWJldHdlZW4iLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzUwIHRleHQtWzExcHhdIixjaGlsZHJlbjoiTmV0d29yayJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0YWJ1bGFyLW51bXMgdGV4dC1bMTFweF0iLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWN5YW4tNDAwIixjaGlsZHJlbjpbIuKGkyAiLFo4KCQpXX0pLFooInNwYW4iLHtjbGFzc05hbWU6InRleHQtd2hpdGUvMzAgbXgtMS41IixjaGlsZHJlbjoiwrcifSksWigic3BhbiIse2NsYXNzTmFtZToidGV4dC12aW9sZXQtNDAwIixjaGlsZHJlbjpbIuKGkSAiLFo4KEopXX0pXX0pXX0pLFooZ1Ese2Rvd246USx1cDpYfSldfSl9ZnVuY3Rpb24gZ1Eoe2Rvd246JCx1cDpKfSl7bGV0IFE9TWF0aC5tYXgoLi4uJCwuLi5KLDEpO3JldHVybiBaKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtrMn0gJHtlMH1gLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUiLGNsYXNzTmFtZToidy1mdWxsIGgtOCIsY2hpbGRyZW46W1ooWDgse2Q6bzUoJCxrMixlMCxRKSxjbGFzc05hbWU6InRleHQtY3lhbi00MDAifSksWihYOCx7ZDpvNShKLGsyLGUwLFEpLGNsYXNzTmFtZToidGV4dC12aW9sZXQtNDAwIn0pXX0pfXZhciBuMj1bImV4dHJhLXNtYWxsIiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsImV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtbGFyZ2UiLCJleHRyYS1leHRyYS1leHRyYS1sYXJnZSJdLGZRPTI1MCxtUT17YXBwZWFyYW5jZToibGlnaHQiLCJsaXF1aWQtZ2xhc3MiOiJjbGVhciIsImNvbG9yLWZpbHRlciI6Im5vbmUiLCJ0ZXh0LXNpemUiOiJsYXJnZSIsInJlZHVjZS1tb3Rpb24iOiJvZmYiLCJpbmNyZWFzZS1jb250cmFzdCI6Im9mZiIsInNob3ctYm9yZGVycyI6Im9mZiIsInJlZHVjZS10cmFuc3BhcmVuY3kiOiJvZmYiLHZvaWNlb3Zlcjoib2ZmIn0sSzg9e2FwcGVhcmFuY2U6W3t2YWx1ZToibGlnaHQiLGxhYmVsOiJMaWdodCJ9LHt2YWx1ZToiZGFyayIsbGFiZWw6IkRhcmsifV0sImxpcXVpZC1nbGFzcyI6W3t2YWx1ZToiY2xlYXIiLGxhYmVsOiJDbGVhciJ9LHt2YWx1ZToidGludGVkIixsYWJlbDoiVGludGVkIn1dLCJjb2xvci1maWx0ZXIiOlt7dmFsdWU6Im5vbmUiLGxhYmVsOiJOb25lIn0se3ZhbHVlOiJyZWQtZ3JlZW4iLGxhYmVsOiJSZWQvR3JlZW4gKFByb3Rhbm9waWEpIn0se3ZhbHVlOiJncmVlbi1yZWQiLGxhYmVsOiJHcmVlbi9SZWQgKERldXRlcmFub3BpYSkifSx7dmFsdWU6ImJsdWUteWVsbG93IixsYWJlbDoiQmx1ZS9ZZWxsb3cgKFRyaXRhbm9waWEpIn0se3ZhbHVlOiJncmF5c2NhbGUiLGxhYmVsOiJHcmF5c2NhbGUifV19LHBRPVt7a2V5OiJyZWR1Y2UtbW90aW9uIixsYWJlbDoiUmVkdWNlIE1vdGlvbiJ9LHtrZXk6ImluY3JlYXNlLWNvbnRyYXN0IixsYWJlbDoiSW5jcmVhc2UgQ29udHJhc3QifSx7a2V5OiJzaG93LWJvcmRlcnMiLGxhYmVsOiJTaG93IEJvcmRlcnMifSx7a2V5OiJyZWR1Y2UtdHJhbnNwYXJlbmN5IixsYWJlbDoiUmVkdWNlIFRyYW5zcGFyZW5jeSJ9LHtrZXk6InZvaWNlb3ZlciIsbGFiZWw6IlZvaWNlT3ZlciJ9XTtmdW5jdGlvbiBZMCh7aWNvbjokLGxhYmVsOkosY2hpbGRyZW46UX0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBtaW4taC1bMzBweF0iLCJkYXRhLXNldHRpbmctcm93IjpKLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToiZmxleCBzaXplLVsxOHB4XSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSIsY2hpbGRyZW46JH0pLEpdfSksWigic3BhbiIse2NsYXNzTmFtZToiZmxleCBtaW4tdy0wIGp1c3RpZnktZW5kIixjaGlsZHJlbjpRfSldfSl9ZnVuY3Rpb24gdVEoe3ZhbHVlOiQsZGlzYWJsZWQ6SixvbkNoYW5nZTpRfSl7bGV0W1gsS109TShudWxsKSxZPVQobnVsbCkscT1UKG51bGwpLEc9dygoSCk9PntpZihxLmN1cnJlbnQ9PT1IKXJldHVybjtxLmN1cnJlbnQ9SCxRKEgpfSxbUV0pLEI9dygoSCk9PntpZihLKEgpLFkuY3VycmVudCljbGVhclRpbWVvdXQoWS5jdXJyZW50KTtZLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+RyhIKSxmUSl9LFtHXSksTj13KCgpPT57aWYoWS5jdXJyZW50KWNsZWFyVGltZW91dChZLmN1cnJlbnQpLFkuY3VycmVudD1udWxsO0soKEgpPT57aWYoSCE9PW51bGwpRyhIKTtyZXR1cm4gbnVsbH0pLHEuY3VycmVudD1udWxsfSxbR10pLEw9bjIubGVuZ3RoLTEsVj1YPz8kLEM9YCR7Vi9MKjEwMH0lYDtyZXR1cm4gWigic3BhbiIse2NsYXNzTmFtZToiZmxleCB3LVsxMjBweF0gbWluLXctMCBmbGV4LWNvbCIsY2hpbGRyZW46W1ooImlucHV0Iix7dHlwZToicmFuZ2UiLCJhcmlhLWxhYmVsIjoiVGV4dCBTaXplIixtaW46MCxtYXg6TCxzdGVwOjEsdmFsdWU6VixkaXNhYmxlZDpKLG9uQ2hhbmdlOihIKT0+QihOdW1iZXIoSC50YXJnZXQudmFsdWUpKSxvblBvaW50ZXJVcDpOLG9uS2V5VXA6TixvbkJsdXI6TixzdHlsZTp7Ii0tc2xpZGVyLWZpbGwiOkMsIi0tc2xpZGVyLWZpbGwtY29sb3IiOko/InJnYmEoMjU1LDI1NSwyNTUsMC4zKSI6IiMwYTg0ZmYifSxjbGFzc05hbWU6YGgtWzEzcHhdIHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgcm91bmRlZC1mdWxsIGJnLXRyYW5zcGFyZW50IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOltvdXRsaW5lOjEuNXB4X3NvbGlkX3JnYmEoMTAsMTMyLDI1NSwwLjU1KV0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC00ICR7Sj8iY3Vyc29yLWRlZmF1bHQiOiJjdXJzb3ItcG9pbnRlciJ9ICR7IlsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106aC1bNHB4XSBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOltiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0b19yaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcilfdmFyKC0tc2xpZGVyLWZpbGwpLHJnYmEoMjU1LDI1NSwyNTUsMC4yMilfdmFyKC0tc2xpZGVyLWZpbGwpKV0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS10cmFja106Ymctd2hpdGUvMjAgWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS1wcm9ncmVzc106YmctW3ZhcigtLXNsaWRlci1maWxsLWNvbG9yKV0ifSAkeyJbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmFwcGVhcmFuY2Utbm9uZSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06cm91bmRlZC1mdWxsIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06Ymctd2hpdGUgWyY6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpiZy13aGl0ZS81MCBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNoYWRvdy1bMF8xcHhfM3B4X3JnYmEoMCwwLDAsMC40NSldIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06LW10LVs0LjVweF0gWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotbW96LXJhbmdlLXRodW1iXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOmJvcmRlci1ub25lIFsmOjotbW96LXJhbmdlLXRodW1iXTpiZy13aGl0ZSBbJjpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYl06Ymctd2hpdGUvNTAifWB9KSxaKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InBvaW50ZXItZXZlbnRzLW5vbmUgbXQtWzNweF0gZmxleCBqdXN0aWZ5LWJldHdlZW4gcHgtWzUuNXB4XSIsY2hpbGRyZW46bjIubWFwKChIKT0+Wigic3BhbiIse2NsYXNzTmFtZToic2l6ZS1bMnB4XSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvNDAifSxIKSl9KV19KX1mdW5jdGlvbiBIMCh7bGFiZWw6JCx2YWx1ZTpKLG9wdGlvbnM6USxkaXNhYmxlZDpYLG9uQ2hhbmdlOkt9KXtyZXR1cm4gWihsNSx7bGFiZWw6JCx2YWx1ZTpKLG9wdGlvbnM6USxkaXNhYmxlZDpYLG9uQ2hhbmdlOkssY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLW1kIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gcHktMC41IHB4LTIgbWluLXctMCBtYXgtdy1bMTUwcHhdIGRpc2FibGVkOnRleHQtd2hpdGUvNDAifSl9dmFyIGkyPXthcHBlYXJhbmNlOlooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltaKCJwYXRoIix7ZDoiTTEyIDJ2MiJ9KSxaKCJwYXRoIix7ZDoiTTE0LjgzNyAxNi4zODVhNiA2IDAgMSAxLTcuMjIzLTcuMjIyYy42MjQtLjE0Ny45Ny42Ni43MTUgMS4yNDhhNCA0IDAgMCAwIDUuMjYgNS4yNTljLjU4OS0uMjU1IDEuMzk2LjA5IDEuMjQ4LjcxNSJ9KSxaKCJwYXRoIix7ZDoiTTE2IDEyYTQgNCAwIDAgMC00LTQifSksWigicGF0aCIse2Q6Im0xOSA1LTEuMjU2IDEuMjU2In0pLFooInBhdGgiLHtkOiJNMjAgMTJoMiJ9KV19KSxnbGFzczpaKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyMjAgMjIwIixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46W1ooInBhdGgiLHtkOiJNMTUyIDE4M1YxOTVIMTAwVjE4M0gxNTJaTTE5NiAxMzlWMTI2QzE5NiAxMDEuNjk5IDE3Ni4zMDEgODIgMTUyIDgySDEwMEM3NS42OTk1IDgyIDU2IDEwMS42OTkgNTYgMTI2VjEzOUM1NiAxNjMuMzAxIDc1LjY5OTUgMTgzIDEwMCAxODNWMTk1TDk5LjI3NjQgMTk0Ljk5NUM2OC45MjI4IDE5NC42MTEgNDQuMzg5MyAxNzAuMDc3IDQ0LjAwNDkgMTM5LjcyNEw0NCAxMzlWMTI2QzQ0IDk1LjA3MjEgNjkuMDcyMSA3MCAxMDAgNzBIMTUyQzE4Mi45MjggNzAgMjA4IDk1LjA3MjEgMjA4IDEyNlYxMzlMMjA3Ljk5NSAxMzkuNzI0QzIwNy42MTEgMTcwLjA3NyAxODMuMDc3IDE5NC42MTEgMTUyLjcyNCAxOTQuOTk1TDE1MiAxOTVWMTgzQzE3Ni4zMDEgMTgzIDE5NiAxNjMuMzAxIDE5NiAxMzlaIn0pLFooInBhdGgiLHtkOiJNMTM2IDI1QzE0Ny4wNDYgMjUgMTU2IDMzLjk1NDMgMTU2IDQ1VjcwSDE0M1Y0NUMxNDMgNDEuMTM0IDEzOS44NjYgMzggMTM2IDM4SDQxQzM3LjEzNCAzOCAzNCA0MS4xMzQgMzQgNDVWMTQwQzM0IDE0My44NjYgMzcuMTM0IDE0NyA0MSAxNDdINDQuODYwNEM0NS42NDg3IDE1MS41MzYgNDYuOTYzNCAxNTUuODkxIDQ4Ljc0MDIgMTYwSDQxTDQwLjQ4MzQgMTU5Ljk5M0MyOS44NDgxIDE1OS43MjQgMjEuMjc2NSAxNTEuMTUyIDIxLjAwNjggMTQwLjUxN0wyMSAxNDBWNDVDMjEgMzMuOTU0MyAyOS45NTQzIDI1IDQxIDI1SDEzNloifSksWigicGF0aCIse2Q6Ik0xNTYuMTk5IDE0MEMxNTYuMTk5IDE1MC44NzMgMTQ3LjUyMyAxNTkuNzE5IDEzNi43MTYgMTU5Ljk5M0wxMzYuMTk5IDE2MEg4MC45MTdDNzcuOTQ2MSAxNjAgNzYuMTYzOSAxNjMuMyA3Ny43OTMgMTY1Ljc4NEM3OS4yNDUxIDE2Ny45OTkgNzYuMTY0NyAxNzAuMzUzIDc0LjQwOTQgMTY4LjM3TDczLjYwNTkgMTY3LjQ2MkM2OS4zNDk3IDE2Mi42NTQgNjcgMTU2LjQ1NSA2NyAxNTAuMDM0QzY3IDE0OC4zNTggNjguMzU4MyAxNDcgNzAuMDMzOSAxNDdIMTM2LjE5OUMxNDAuMDY1IDE0NyAxNDMuMTk5IDE0My44NjYgMTQzLjE5OSAxNDBWOTYuOTk1NUMxNDMuMTk5IDkzLjk4MjIgMTQxLjM1NCA5MS4yNzYzIDEzOC41NDkgOTAuMTc2MUMxMzcuMzg5IDg5LjcyMTUgMTM3LjcxNSA4OCAxMzguOTYgODhMMTQzLjE5OSA4OEMxNTAuMzc5IDg4IDE1Ni4xOTkgOTMuODIwMyAxNTYuMTk5IDEwMVYxNDBaIn0pXX0pLGZpbHRlcjpaKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWigicGF0aCIse2Q6Ik0xMSAxN2E0IDQgMCAwIDEtOCAwVjVhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJaIn0pLFooInBhdGgiLHtkOiJNMTYuNyAxM0gxOWEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMkg3In0pLFooInBhdGgiLHtkOiJNIDcgMTdoLjAxIn0pLFooInBhdGgiLHtkOiJtMTEgOCAyLjMtMi4zYTIuNCAyLjQgMCAwIDEgMy40MDQuMDA0TDE4LjYgNy42YTIuNCAyLjQgMCAwIDEgLjAyNiAzLjQzNEw5LjkgMTkuOCJ9KV19KSx0ZXh0U2l6ZTpaKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCA1MiAzNCIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOlooInBhdGgiLHtkOiJNMzkuNzI2NiAzMy4wMjM0QzM4LjE0ODQgMzMuMDIzNCAzNi43NSAzMi43MjY2IDM1LjUzMTIgMzIuMTMyOEMzNC4zMTI1IDMxLjUzOTEgMzMuMzU5NCAzMC43MTA5IDMyLjY3MTkgMjkuNjQ4NEMzMiAyOC41NzAzIDMxLjY2NDEgMjcuMzEyNSAzMS42NjQxIDI1Ljg3NUMzMS42NjQxIDIzLjc4MTIgMzIuNDI5NyAyMi4xMDk0IDMzLjk2MDkgMjAuODU5NEMzNS41MDc4IDE5LjYwOTQgMzcuNzEwOSAxOC45MDYyIDQwLjU3MDMgMTguNzVMNDcuNjAxNiAxOC4zNTE2VjE2LjVDNDcuNjAxNiAxNS4wMTU2IDQ3LjEzMjggMTMuODM1OSA0Ni4xOTUzIDEyLjk2MDlDNDUuMjU3OCAxMi4wODU5IDQzLjk1MzEgMTEuNjQ4NCA0Mi4yODEyIDExLjY0ODRDNDAuOTA2MiAxMS42NDg0IDM5Ljc1IDExLjk0NTMgMzguODEyNSAxMi41MzkxQzM3Ljg3NSAxMy4xMzI4IDM3LjA5MzggMTQuMDQ2OSAzNi40Njg4IDE1LjI4MTJDMzYuMjY1NiAxNS42MDk0IDM2LjAxNTYgMTUuODUxNiAzNS43MTg4IDE2LjAwNzhDMzUuNDIxOSAxNi4xNjQxIDM1LjA3ODEgMTYuMjQyMiAzNC42ODc1IDE2LjI0MjJDMzQuMTU2MiAxNi4yNDIyIDMzLjcxMDkgMTYuMDc4MSAzMy4zNTE2IDE1Ljc1QzMzLjAwNzggMTUuNDIxOSAzMi44MzU5IDE0Ljk5MjIgMzIuODM1OSAxNC40NjA5QzMyLjgzNTkgMTQuMjI2NiAzMi44NjcyIDEzLjk3NjYgMzIuOTI5NyAxMy43MTA5QzMzLjAwNzggMTMuNDQ1MyAzMy4xMDk0IDEzLjE3OTcgMzMuMjM0NCAxMi45MTQxQzMzLjg3NSAxMS40NjA5IDM1LjAxNTYgMTAuMzA0NyAzNi42NTYyIDkuNDQ1MzFDMzguMzEyNSA4LjU4NTk0IDQwLjIyNjYgOC4xNTYyNSA0Mi4zOTg0IDguMTU2MjVDNDQuMzIwMyA4LjE1NjI1IDQ1Ljk4NDQgOC40OTIxOSA0Ny4zOTA2IDkuMTY0MDZDNDguODEyNSA5LjgyMDMxIDQ5Ljg5ODQgMTAuNzUgNTAuNjQ4NCAxMS45NTMxQzUxLjQxNDEgMTMuMTU2MiA1MS43OTY5IDE0LjU3MDMgNTEuNzk2OSAxNi4xOTUzVjMwLjkxNDFDNTEuNzk2OSAzMS41ODU5IDUxLjYwOTQgMzIuMTA5NCA1MS4yMzQ0IDMyLjQ4NDRDNTAuODU5NCAzMi44NTk0IDUwLjM2NzIgMzMuMDQ2OSA0OS43NTc4IDMzLjA0NjlDNDkuMTY0MSAzMy4wNDY5IDQ4LjY3OTcgMzIuODY3MiA0OC4zMDQ3IDMyLjUwNzhDNDcuOTI5NyAzMi4xNDg0IDQ3LjczNDQgMzEuNjY0MSA0Ny43MTg4IDMxLjA1NDdWMjguMzU5NEg0Ny42NzE5QzQ2Ljk4NDQgMjkuNzgxMiA0NS45MDYyIDMwLjkxNDEgNDQuNDM3NSAzMS43NTc4QzQyLjk4NDQgMzIuNjAxNiA0MS40MTQxIDMzLjAyMzQgMzkuNzI2NiAzMy4wMjM0Wk00MC44MDQ3IDI5LjY3MTlDNDIuMDcwMyAyOS42NzE5IDQzLjIxMDkgMjkuNDA2MiA0NC4yMjY2IDI4Ljg3NUM0NS4yNTc4IDI4LjM0MzggNDYuMDc4MSAyNy42MTcyIDQ2LjY4NzUgMjYuNjk1M0M0Ny4yOTY5IDI1Ljc3MzQgNDcuNjAxNiAyNC43NSA0Ny42MDE2IDIzLjYyNVYyMS4zMjgxTDQxLjEzMjggMjEuNzVDMzkuNDQ1MyAyMS44NTk0IDM4LjE2NDEgMjIuMjczNCAzNy4yODkxIDIyLjk5MjJDMzYuNDE0MSAyMy42OTUzIDM1Ljk3NjYgMjQuNjA5NCAzNS45NzY2IDI1LjczNDRDMzUuOTc2NiAyNi45MjE5IDM2LjQyMTkgMjcuODc1IDM3LjMxMjUgMjguNTkzOEMzOC4yMDMxIDI5LjMxMjUgMzkuMzY3MiAyOS42NzE5IDQwLjgwNDcgMjkuNjcxOVpNMi4xNzk2OSAzMy4wMjM0QzEuNTA3ODEgMzMuMDIzNCAwLjk3NjU2MiAzMi44MzU5IDAuNTg1OTM4IDMyLjQ2MDlDMC4xOTUzMTIgMzIuMDg1OSAwIDMxLjU3ODEgMCAzMC45Mzc1QzAgMzAuNTMxMiAwLjA4NTkzNzUgMzAuMDcwMyAwLjI1NzgxMiAyOS41NTQ3TDEwLjQwNjIgMi40MTQwNkMxMC45ODQ0IDAuODA0Njg4IDEyLjEwMTYgMCAxMy43NTc4IDBDMTQuNjE3MiAwIDE1LjMyODEgMC4yMDMxMjUgMTUuODkwNiAwLjYwOTM3NUMxNi40NTMxIDEuMDE1NjIgMTYuODc1IDEuNjI1IDE3LjE1NjIgMi40Mzc1TDI3LjI1NzggMjkuNDg0NEMyNy40NDUzIDMwIDI3LjUzOTEgMzAuNDY4OCAyNy41MzkxIDMwLjg5MDZDMjcuNTM5MSAzMS41NDY5IDI3LjMzNTkgMzIuMDcwMyAyNi45Mjk3IDMyLjQ2MDlDMjYuNTIzNCAzMi44MzU5IDI1Ljk3NjYgMzMuMDIzNCAyNS4yODkxIDMzLjAyMzRDMjQuNjMyOCAzMy4wMjM0IDI0LjEwOTQgMzIuODc1IDIzLjcxODggMzIuNTc4MUMyMy4zNDM4IDMyLjI4MTIgMjMuMDM5MSAzMS43ODkxIDIyLjgwNDcgMzEuMTAxNkwxMy44MjgxIDUuMzQzNzVIMTMuNjY0MUw0LjY2NDA2IDMxLjEwMTZDNC40Mjk2OSAzMS43ODkxIDQuMTI1IDMyLjI4MTIgMy43NSAzMi41NzgxQzMuMzc1IDMyLjg3NSAyLjg1MTU2IDMzLjAyMzQgMi4xNzk2OSAzMy4wMjM0Wk02LjY3OTY5IDIzLjc0MjJDNi4xNDg0NCAyMy43NDIyIDUuNzAzMTIgMjMuNTYyNSA1LjM0Mzc1IDIzLjIwMzFDNC45ODQzOCAyMi44NDM4IDQuODA0NjkgMjIuMzk4NCA0LjgwNDY5IDIxLjg2NzJDNC44MDQ2OSAyMS4zNTE2IDQuOTg0MzggMjAuOTE0MSA1LjM0Mzc1IDIwLjU1NDdDNS43MDMxMiAyMC4xOTUzIDYuMTQ4NDQgMjAuMDE1NiA2LjY3OTY5IDIwLjAxNTZIMjAuODU5NEMyMS4zNzUgMjAuMDE1NiAyMS44MTI1IDIwLjE5NTMgMjIuMTcxOSAyMC41NTQ3QzIyLjUzMTIgMjAuOTE0MSAyMi43MTA5IDIxLjM1MTYgMjIuNzEwOSAyMS44NjcyQzIyLjcxMDkgMjIuMzk4NCAyMi41MzEyIDIyLjg0MzggMjIuMTcxOSAyMy4yMDMxQzIxLjgxMjUgMjMuNTYyNSAyMS4zNzUgMjMuNzQyMiAyMC44NTk0IDIzLjc0MjJINi42Nzk2OVoifSl9KSxtb3Rpb246Wigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLGNoaWxkcmVuOltaKCJjaXJjbGUiLHtjeDoiMTQiLGN5OiIxMiIscjoiNiJ9KSxaKCJwYXRoIix7ZDoiTTMgOGg0TTIgMTJoNE0zIDE2aDQifSldfSksY29udHJhc3Q6Wigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1ooImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxaKCJwYXRoIix7ZDoiTTEyIDE4YTYgNiAwIDAgMCAwLTEydjEyeiJ9KV19KSxib3JkZXJzOlooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltaKCJwYXRoIix7ZDoiTTUgMjFhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyIn0pLFooInBhdGgiLHtkOiJNOSAyMWgxIn0pLFooInBhdGgiLHtkOiJNMTQgMjFoMSJ9KV19KSx0cmFuc3BhcmVuY3k6Wigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgNjMgNDYiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpaKCJwYXRoIix7ZDoiTTIyLjczNDQgNC4xNzE4OEMyMi4xODc1IDQuMTcxODggMjEuNzE4OCAzLjk3NjU2IDIxLjMyODEgMy41ODU5NEMyMC45Mzc1IDMuMTk1MzEgMjAuNzQyMiAyLjcxODc1IDIwLjc0MjIgMi4xNTYyNUMyMC43NDIyIDEuNjA5MzggMjAuOTM3NSAxLjE0MDYyIDIxLjMyODEgMC43NUMyMS43MTg4IDAuMzU5Mzc1IDIyLjE4NzUgMC4xNjQwNjIgMjIuNzM0NCAwLjE2NDA2MkMyMy4yODEyIDAuMTY0MDYyIDIzLjc1IDAuMzU5Mzc1IDI0LjE0MDYgMC43NUMyNC41MzEyIDEuMTQwNjIgMjQuNzI2NiAxLjYwOTM4IDI0LjcyNjYgMi4xNTYyNUMyNC43MjY2IDIuNzE4NzUgMjQuNTMxMiAzLjE5NTMxIDI0LjE0MDYgMy41ODU5NEMyMy43NSAzLjk3NjU2IDIzLjI4MTIgNC4xNzE4OCAyMi43MzQ0IDQuMTcxODhaTTI5LjEwOTQgNS4yMDMxMkMyOC41NDY5IDUuMjAzMTIgMjguMDcwMyA1LjAwNzgxIDI3LjY3OTcgNC42MTcxOUMyNy4yODkxIDQuMjI2NTYgMjcuMDkzOCAzLjc1NzgxIDI3LjA5MzggMy4yMTA5NEMyNy4wOTM4IDIuNjY0MDYgMjcuMjg5MSAyLjE5NTMxIDI3LjY3OTcgMS44MDQ2OUMyOC4wNzAzIDEuMzk4NDQgMjguNTQ2OSAxLjE5NTMxIDI5LjEwOTQgMS4xOTUzMUMyOS42NTYyIDEuMTk1MzEgMzAuMTI1IDEuMzk4NDQgMzAuNTE1NiAxLjgwNDY5QzMwLjkwNjIgMi4xOTUzMSAzMS4xMDE2IDIuNjY0MDYgMzEuMTAxNiAzLjIxMDk0QzMxLjEwMTYgMy43NTc4MSAzMC45MDYyIDQuMjI2NTYgMzAuNTE1NiA0LjYxNzE5QzMwLjEyNSA1LjAwNzgxIDI5LjY1NjIgNS4yMDMxMiAyOS4xMDk0IDUuMjAzMTJaTTM0Ljg3NSA4LjEzMjgxQzM0LjMyODEgOC4xMzI4MSAzMy44NTE2IDcuOTM3NSAzMy40NDUzIDcuNTQ2ODhDMzMuMDU0NyA3LjE0MDYyIDMyLjg1OTQgNi42NzE4OCAzMi44NTk0IDYuMTQwNjJDMzIuODU5NCA1LjU3ODEyIDMzLjA1NDcgNS4xMDE1NiAzMy40NDUzIDQuNzEwOTRDMzMuODUxNiA0LjMyMDMxIDM0LjMyODEgNC4xMjUgMzQuODc1IDQuMTI1QzM1LjQyMTkgNC4xMjUgMzUuODkwNiA0LjMyMDMxIDM2LjI4MTIgNC43MTA5NEMzNi42ODc1IDUuMTAxNTYgMzYuODkwNiA1LjU3ODEyIDM2Ljg5MDYgNi4xNDA2MkMzNi44OTA2IDYuNjcxODggMzYuNjg3NSA3LjE0MDYyIDM2LjI4MTIgNy41NDY4OEMzNS44OTA2IDcuOTM3NSAzNS40MjE5IDguMTMyODEgMzQuODc1IDguMTMyODFaTTM5LjQ0NTMgMTIuNjc5N0MzOC44OTg0IDEyLjY3OTcgMzguNDIxOSAxMi40ODQ0IDM4LjAxNTYgMTIuMDkzOEMzNy42MjUgMTEuNzAzMSAzNy40Mjk3IDExLjIzNDQgMzcuNDI5NyAxMC42ODc1QzM3LjQyOTcgMTAuMTU2MiAzNy42MjUgOS42OTUzMSAzOC4wMTU2IDkuMzA0NjlDMzguNDIxOSA4Ljg5ODQ0IDM4Ljg5ODQgOC42OTUzMSAzOS40NDUzIDguNjk1MzFDMzkuOTkyMiA4LjY5NTMxIDQwLjQ2MDkgOC44OTg0NCA0MC44NTE2IDkuMzA0NjlDNDEuMjQyMiA5LjY5NTMxIDQxLjQzNzUgMTAuMTU2MiA0MS40Mzc1IDEwLjY4NzVDNDEuNDM3NSAxMS4yMzQ0IDQxLjI0MjIgMTEuNzAzMSA0MC44NTE2IDEyLjA5MzhDNDAuNDYwOSAxMi40ODQ0IDM5Ljk5MjIgMTIuNjc5NyAzOS40NDUzIDEyLjY3OTdaTTQyLjM3NSAxOC4zOTg0QzQxLjgxMjUgMTguMzk4NCA0MS4zMjgxIDE4LjIwMzEgNDAuOTIxOSAxNy44MTI1QzQwLjUzMTIgMTcuNDIxOSA0MC4zMzU5IDE2Ljk1MzEgNDAuMzM1OSAxNi40MDYyQzQwLjMzNTkgMTUuODQzOCA0MC41MzEyIDE1LjM2NzIgNDAuOTIxOSAxNC45NzY2QzQxLjMyODEgMTQuNTg1OSA0MS44MTI1IDE0LjM5MDYgNDIuMzc1IDE0LjM5MDZDNDIuOTA2MiAxNC4zOTA2IDQzLjM2NzIgMTQuNTg1OSA0My43NTc4IDE0Ljk3NjZDNDQuMTY0MSAxNS4zNjcyIDQ0LjM2NzIgMTUuODQzOCA0NC4zNjcyIDE2LjQwNjJDNDQuMzY3MiAxNi45NTMxIDQ0LjE2NDEgMTcuNDIxOSA0My43NTc4IDE3LjgxMjVDNDMuMzY3MiAxOC4yMDMxIDQyLjkwNjIgMTguMzk4NCA0Mi4zNzUgMTguMzk4NFpNNDMuNDUzMSAyNC43OTY5QzQyLjkwNjIgMjQuNzk2OSA0Mi40Mzc1IDI0LjYwMTYgNDIuMDQ2OSAyNC4yMTA5QzQxLjY1NjIgMjMuODIwMyA0MS40NjA5IDIzLjM0MzggNDEuNDYwOSAyMi43ODEyQzQxLjQ2MDkgMjIuMjM0NCA0MS42NTYyIDIxLjc2NTYgNDIuMDQ2OSAyMS4zNzVDNDIuNDM3NSAyMC45ODQ0IDQyLjkwNjIgMjAuNzg5MSA0My40NTMxIDIwLjc4OTFDNDQgMjAuNzg5MSA0NC40Njg4IDIwLjk4NDQgNDQuODU5NCAyMS4zNzVDNDUuMjY1NiAyMS43NjU2IDQ1LjQ2ODggMjIuMjM0NCA0NS40Njg4IDIyLjc4MTJDNDUuNDY4OCAyMy4zNDM4IDQ1LjI2NTYgMjMuODIwMyA0NC44NTk0IDI0LjIxMDlDNDQuNDY4OCAyNC42MDE2IDQ0IDI0Ljc5NjkgNDMuNDUzMSAyNC43OTY5Wk00Mi4zNzUgMzEuMTcxOUM0MS44MTI1IDMxLjE3MTkgNDEuMzI4MSAzMC45NzY2IDQwLjkyMTkgMzAuNTg1OUM0MC41MzEyIDMwLjE5NTMgNDAuMzM1OSAyOS43MjY2IDQwLjMzNTkgMjkuMTc5N0M0MC4zMzU5IDI4LjYxNzIgNDAuNTMxMiAyOC4xNDA2IDQwLjkyMTkgMjcuNzVDNDEuMzI4MSAyNy4zNTk0IDQxLjgxMjUgMjcuMTY0MSA0Mi4zNzUgMjcuMTY0MUM0Mi45MDYyIDI3LjE2NDEgNDMuMzY3MiAyNy4zNTk0IDQzLjc1NzggMjcuNzVDNDQuMTY0MSAyOC4xNDA2IDQ0LjM2NzIgMjguNjE3MiA0NC4zNjcyIDI5LjE3OTdDNDQuMzY3MiAyOS43MjY2IDQ0LjE2NDEgMzAuMTk1MyA0My43NTc4IDMwLjU4NTlDNDMuMzY3MiAzMC45NzY2IDQyLjkwNjIgMzEuMTcxOSA0Mi4zNzUgMzEuMTcxOVpNMzkuNDQ1MyAzNi44OTA2QzM4Ljg5ODQgMzYuODkwNiAzOC40MjE5IDM2LjY5NTMgMzguMDE1NiAzNi4zMDQ3QzM3LjYyNSAzNS44OTg0IDM3LjQyOTcgMzUuNDIxOSAzNy40Mjk3IDM0Ljg3NUMzNy40Mjk3IDM0LjMyODEgMzcuNjI1IDMzLjg1OTQgMzguMDE1NiAzMy40Njg4QzM4LjQyMTkgMzMuMDYyNSAzOC44OTg0IDMyLjg1OTQgMzkuNDQ1MyAzMi44NTk0QzM5Ljk5MjIgMzIuODU5NCA0MC40NjA5IDMzLjA2MjUgNDAuODUxNiAzMy40Njg4QzQxLjI0MjIgMzMuODU5NCA0MS40Mzc1IDM0LjMyODEgNDEuNDM3NSAzNC44NzVDNDEuNDM3NSAzNS40MjE5IDQxLjI0MjIgMzUuODk4NCA0MC44NTE2IDM2LjMwNDdDNDAuNDYwOSAzNi42OTUzIDM5Ljk5MjIgMzYuODkwNiAzOS40NDUzIDM2Ljg5MDZaTTM0Ljg3NSA0MS40Mzc1QzM0LjMyODEgNDEuNDM3NSAzMy44NTE2IDQxLjI0MjIgMzMuNDQ1MyA0MC44NTE2QzMzLjA1NDcgNDAuNDYwOSAzMi44NTk0IDM5Ljk5MjIgMzIuODU5NCAzOS40NDUzQzMyLjg1OTQgMzguODk4NCAzMy4wNTQ3IDM4LjQyOTcgMzMuNDQ1MyAzOC4wMzkxQzMzLjg1MTYgMzcuNjMyOCAzNC4zMjgxIDM3LjQyOTcgMzQuODc1IDM3LjQyOTdDMzUuNDIxOSAzNy40Mjk3IDM1Ljg5MDYgMzcuNjMyOCAzNi4yODEyIDM4LjAzOTFDMzYuNjg3NSAzOC40Mjk3IDM2Ljg5MDYgMzguODk4NCAzNi44OTA2IDM5LjQ0NTNDMzYuODkwNiAzOS45OTIyIDM2LjY4NzUgNDAuNDYwOSAzNi4yODEyIDQwLjg1MTZDMzUuODkwNiA0MS4yNDIyIDM1LjQyMTkgNDEuNDM3NSAzNC44NzUgNDEuNDM3NVpNMjkuMTA5NCA0NC4zNjcyQzI4LjU0NjkgNDQuMzY3MiAyOC4wNzAzIDQ0LjE2NDEgMjcuNjc5NyA0My43NTc4QzI3LjI4OTEgNDMuMzY3MiAyNy4wOTM4IDQyLjg5ODQgMjcuMDkzOCA0Mi4zNTE2QzI3LjA5MzggNDEuODA0NyAyNy4yODkxIDQxLjMzNTkgMjcuNjc5NyA0MC45NDUzQzI4LjA3MDMgNDAuNTU0NyAyOC41NDY5IDQwLjM1OTQgMjkuMTA5NCA0MC4zNTk0QzI5LjY1NjIgNDAuMzU5NCAzMC4xMjUgNDAuNTU0NyAzMC41MTU2IDQwLjk0NTNDMzAuOTA2MiA0MS4zMzU5IDMxLjEwMTYgNDEuODA0NyAzMS4xMDE2IDQyLjM1MTZDMzEuMTAxNiA0Mi44OTg0IDMwLjkwNjIgNDMuMzY3MiAzMC41MTU2IDQzLjc1NzhDMzAuMTI1IDQ0LjE2NDEgMjkuNjU2MiA0NC4zNjcyIDI5LjEwOTQgNDQuMzY3MlpNMjIuNzM0NCA0NS4zOTg0QzIyLjE4NzUgNDUuMzk4NCAyMS43MTg4IDQ1LjIwMzEgMjEuMzI4MSA0NC44MTI1QzIwLjkzNzUgNDQuNDIxOSAyMC43NDIyIDQzLjk1MzEgMjAuNzQyMiA0My40MDYyQzIwLjc0MjIgNDIuODQzOCAyMC45Mzc1IDQyLjM2NzIgMjEuMzI4MSA0MS45NzY2QzIxLjcxODggNDEuNTg1OSAyMi4xODc1IDQxLjM5MDYgMjIuNzM0NCA0MS4zOTA2QzIzLjI4MTIgNDEuMzkwNiAyMy43NSA0MS41ODU5IDI0LjE0MDYgNDEuOTc2NkMyNC41MzEyIDQyLjM2NzIgMjQuNzI2NiA0Mi44NDM4IDI0LjcyNjYgNDMuNDA2MkMyNC43MjY2IDQzLjk1MzEgMjQuNTMxMiA0NC40MjE5IDI0LjE0MDYgNDQuODEyNUMyMy43NSA0NS4yMDMxIDIzLjI4MTIgNDUuMzk4NCAyMi43MzQ0IDQ1LjM5ODRaTTE2LjM1OTQgNDQuMzY3MkMxNS44MTI1IDQ0LjM2NzIgMTUuMzQzOCA0NC4xNjQxIDE0Ljk1MzEgNDMuNzU3OEMxNC41NjI1IDQzLjM2NzIgMTQuMzY3MiA0Mi44OTg0IDE0LjM2NzIgNDIuMzUxNkMxNC4zNjcyIDQxLjgwNDcgMTQuNTYyNSA0MS4zMzU5IDE0Ljk1MzEgNDAuOTQ1M0MxNS4zNDM4IDQwLjU1NDcgMTUuODEyNSA0MC4zNTk0IDE2LjM1OTQgNDAuMzU5NEMxNi45MjE5IDQwLjM1OTQgMTcuMzk4NCA0MC41NTQ3IDE3Ljc4OTEgNDAuOTQ1M0MxOC4xNzk3IDQxLjMzNTkgMTguMzc1IDQxLjgwNDcgMTguMzc1IDQyLjM1MTZDMTguMzc1IDQyLjg5ODQgMTguMTc5NyA0My4zNjcyIDE3Ljc4OTEgNDMuNzU3OEMxNy4zOTg0IDQ0LjE2NDEgMTYuOTIxOSA0NC4zNjcyIDE2LjM1OTQgNDQuMzY3MlpNMTAuNTcwMyA0MS40Mzc1QzEwLjAzOTEgNDEuNDM3NSA5LjU3MDMxIDQxLjI0MjIgOS4xNjQwNiA0MC44NTE2QzguNzczNDQgNDAuNDYwOSA4LjU3ODEyIDM5Ljk5MjIgOC41NzgxMiAzOS40NDUzQzguNTc4MTIgMzguODk4NCA4Ljc3MzQ0IDM4LjQyOTcgOS4xNjQwNiAzOC4wMzkxQzkuNTcwMzEgMzcuNjMyOCAxMC4wMzkxIDM3LjQyOTcgMTAuNTcwMyAzNy40Mjk3QzExLjEzMjggMzcuNDI5NyAxMS42MDk0IDM3LjYzMjggMTIgMzguMDM5MUMxMi4zOTA2IDM4LjQyOTcgMTIuNTg1OSAzOC44OTg0IDEyLjU4NTkgMzkuNDQ1M0MxMi41ODU5IDM5Ljk5MjIgMTIuMzkwNiA0MC40NjA5IDEyIDQwLjg1MTZDMTEuNjA5NCA0MS4yNDIyIDExLjEzMjggNDEuNDM3NSAxMC41NzAzIDQxLjQzNzVaTTYuMDIzNDQgMzYuODkwNkM1LjQ3NjU2IDM2Ljg5MDYgNSAzNi42OTUzIDQuNTkzNzUgMzYuMzA0N0M0LjIwMzEyIDM1Ljg5ODQgNC4wMDc4MSAzNS40MjE5IDQuMDA3ODEgMzQuODc1QzQuMDA3ODEgMzQuMzI4MSA0LjIwMzEyIDMzLjg1OTQgNC41OTM3NSAzMy40Njg4QzUgMzMuMDYyNSA1LjQ3NjU2IDMyLjg1OTQgNi4wMjM0NCAzMi44NTk0QzYuNTcwMzEgMzIuODU5NCA3LjAzOTA2IDMzLjA2MjUgNy40Mjk2OSAzMy40Njg4QzcuODIwMzEgMzMuODU5NCA4LjAxNTYyIDM0LjMyODEgOC4wMTU2MiAzNC44NzVDOC4wMTU2MiAzNS40MjE5IDcuODIwMzEgMzUuODk4NCA3LjQyOTY5IDM2LjMwNDdDNy4wMzkwNiAzNi42OTUzIDYuNTcwMzEgMzYuODkwNiA2LjAyMzQ0IDM2Ljg5MDZaTTMuMDkzNzUgMzEuMTcxOUMyLjU2MjUgMzEuMTcxOSAyLjA5Mzc1IDMwLjk3NjYgMS42ODc1IDMwLjU4NTlDMS4yOTY4OCAzMC4xOTUzIDEuMTAxNTYgMjkuNzI2NiAxLjEwMTU2IDI5LjE3OTdDMS4xMDE1NiAyOC42MTcyIDEuMjk2ODggMjguMTQwNiAxLjY4NzUgMjcuNzVDMi4wOTM3NSAyNy4zNTk0IDIuNTYyNSAyNy4xNjQxIDMuMDkzNzUgMjcuMTY0MUMzLjY1NjI1IDI3LjE2NDEgNC4xMzI4MSAyNy4zNTk0IDQuNTIzNDQgMjcuNzVDNC45MTQwNiAyOC4xNDA2IDUuMTA5MzggMjguNjE3MiA1LjEwOTM4IDI5LjE3OTdDNS4xMDkzOCAyOS43MjY2IDQuOTE0MDYgMzAuMTk1MyA0LjUyMzQ0IDMwLjU4NTlDNC4xMzI4MSAzMC45NzY2IDMuNjU2MjUgMzEuMTcxOSAzLjA5Mzc1IDMxLjE3MTlaTTIuMDE1NjIgMjQuNzk2OUMxLjQ1MzEyIDI0Ljc5NjkgMC45NzY1NjIgMjQuNjAxNiAwLjU4NTkzOCAyNC4yMTA5QzAuMTk1MzEyIDIzLjgyMDMgMCAyMy4zNDM4IDAgMjIuNzgxMkMwIDIyLjIzNDQgMC4xOTUzMTIgMjEuNzY1NiAwLjU4NTkzOCAyMS4zNzVDMC45NzY1NjIgMjAuOTg0NCAxLjQ1MzEyIDIwLjc4OTEgMi4wMTU2MiAyMC43ODkxQzIuNTYyNSAyMC43ODkxIDMuMDMxMjUgMjAuOTg0NCAzLjQyMTg4IDIxLjM3NUMzLjgxMjUgMjEuNzY1NiA0LjAwNzgxIDIyLjIzNDQgNC4wMDc4MSAyMi43ODEyQzQuMDA3ODEgMjMuMzQzOCAzLjgxMjUgMjMuODIwMyAzLjQyMTg4IDI0LjIxMDlDMy4wMzEyNSAyNC42MDE2IDIuNTYyNSAyNC43OTY5IDIuMDE1NjIgMjQuNzk2OVpNMy4wOTM3NSAxOC4zOTg0QzIuNTYyNSAxOC4zOTg0IDIuMDkzNzUgMTguMjAzMSAxLjY4NzUgMTcuODEyNUMxLjI5Njg4IDE3LjQyMTkgMS4xMDE1NiAxNi45NTMxIDEuMTAxNTYgMTYuNDA2MkMxLjEwMTU2IDE1Ljg0MzggMS4yOTY4OCAxNS4zNjcyIDEuNjg3NSAxNC45NzY2QzIuMDkzNzUgMTQuNTg1OSAyLjU2MjUgMTQuMzkwNiAzLjA5Mzc1IDE0LjM5MDZDMy42NTYyNSAxNC4zOTA2IDQuMTMyODEgMTQuNTg1OSA0LjUyMzQ0IDE0Ljk3NjZDNC45MTQwNiAxNS4zNjcyIDUuMTA5MzggMTUuODQzOCA1LjEwOTM4IDE2LjQwNjJDNS4xMDkzOCAxNi45NTMxIDQuOTE0MDYgMTcuNDIxOSA0LjUyMzQ0IDE3LjgxMjVDNC4xMzI4MSAxOC4yMDMxIDMuNjU2MjUgMTguMzk4NCAzLjA5Mzc1IDE4LjM5ODRaTTYuMDIzNDQgMTIuNjc5N0M1LjQ3NjU2IDEyLjY3OTcgNSAxMi40ODQ0IDQuNTkzNzUgMTIuMDkzOEM0LjIwMzEyIDExLjcwMzEgNC4wMDc4MSAxMS4yMzQ0IDQuMDA3ODEgMTAuNjg3NUM0LjAwNzgxIDEwLjE1NjIgNC4yMDMxMiA5LjY5NTMxIDQuNTkzNzUgOS4zMDQ2OUM1IDguODk4NDQgNS40NzY1NiA4LjY5NTMxIDYuMDIzNDQgOC42OTUzMUM2LjU3MDMxIDguNjk1MzEgNy4wMzkwNiA4Ljg5ODQ0IDcuNDI5NjkgOS4zMDQ2OUM3LjgyMDMxIDkuNjk1MzEgOC4wMTU2MiAxMC4xNTYyIDguMDE1NjIgMTAuNjg3NUM4LjAxNTYyIDExLjIzNDQgNy44MjAzMSAxMS43MDMxIDcuNDI5NjkgMTIuMDkzOEM3LjAzOTA2IDEyLjQ4NDQgNi41NzAzMSAxMi42Nzk3IDYuMDIzNDQgMTIuNjc5N1pNMTAuNTcwMyA4LjEzMjgxQzEwLjAzOTEgOC4xMzI4MSA5LjU3MDMxIDcuOTM3NSA5LjE2NDA2IDcuNTQ2ODhDOC43NzM0NCA3LjE0MDYyIDguNTc4MTIgNi42NzE4OCA4LjU3ODEyIDYuMTQwNjJDOC41NzgxMiA1LjU3ODEyIDguNzczNDQgNS4xMDE1NiA5LjE2NDA2IDQuNzEwOTRDOS41NzAzMSA0LjMyMDMxIDEwLjAzOTEgNC4xMjUgMTAuNTcwMyA0LjEyNUMxMS4xMzI4IDQuMTI1IDExLjYwOTQgNC4zMjAzMSAxMiA0LjcxMDk0QzEyLjM5MDYgNS4xMDE1NiAxMi41ODU5IDUuNTc4MTIgMTIuNTg1OSA2LjE0MDYyQzEyLjU4NTkgNi42NzE4OCAxMi4zOTA2IDcuMTQwNjIgMTIgNy41NDY4OEMxMS42MDk0IDcuOTM3NSAxMS4xMzI4IDguMTMyODEgMTAuNTcwMyA4LjEzMjgxWk0xNi4zNTk0IDUuMjAzMTJDMTUuODEyNSA1LjIwMzEyIDE1LjM0MzggNS4wMDc4MSAxNC45NTMxIDQuNjE3MTlDMTQuNTYyNSA0LjIyNjU2IDE0LjM2NzIgMy43NTc4MSAxNC4zNjcyIDMuMjEwOTRDMTQuMzY3MiAyLjY2NDA2IDE0LjU2MjUgMi4xOTUzMSAxNC45NTMxIDEuODA0NjlDMTUuMzQzOCAxLjM5ODQ0IDE1LjgxMjUgMS4xOTUzMSAxNi4zNTk0IDEuMTk1MzFDMTYuOTIxOSAxLjE5NTMxIDE3LjM5ODQgMS4zOTg0NCAxNy43ODkxIDEuODA0NjlDMTguMTc5NyAyLjE5NTMxIDE4LjM3NSAyLjY2NDA2IDE4LjM3NSAzLjIxMDk0QzE4LjM3NSAzLjc1NzgxIDE4LjE3OTcgNC4yMjY1NiAxNy43ODkxIDQuNjE3MTlDMTcuMzk4NCA1LjAwNzgxIDE2LjkyMTkgNS4yMDMxMiAxNi4zNTk0IDUuMjAzMTJaTTQwLjEwMTYgNDUuNTYyNUMzNi45NDUzIDQ1LjU2MjUgMzMuOTkyMiA0NC45Njg4IDMxLjI0MjIgNDMuNzgxMkMyOC41MDc4IDQyLjYwOTQgMjYuMDkzOCA0MC45NzY2IDI0IDM4Ljg4MjhDMjEuOTA2MiAzNi43ODkxIDIwLjI2NTYgMzQuMzY3MiAxOS4wNzgxIDMxLjYxNzJDMTcuOTA2MiAyOC44NjcyIDE3LjMyMDMgMjUuOTIxOSAxNy4zMjAzIDIyLjc4MTJDMTcuMzIwMyAxOS42NDA2IDE3LjkwNjIgMTYuNjk1MyAxOS4wNzgxIDEzLjk0NTNDMjAuMjY1NiAxMS4xNzk3IDIxLjkwNjIgOC43NTc4MSAyNCA2LjY3OTY5QzI2LjA5MzggNC41ODU5NCAyOC41MDc4IDIuOTUzMTIgMzEuMjQyMiAxLjc4MTI1QzMzLjk5MjIgMC41OTM3NSAzNi45NDUzIDAgNDAuMTAxNiAwQzQzLjI0MjIgMCA0Ni4xODc1IDAuNTkzNzUgNDguOTM3NSAxLjc4MTI1QzUxLjY4NzUgMi45NTMxMiA1NC4xMDE2IDQuNTg1OTQgNTYuMTc5NyA2LjY3OTY5QzU4LjI3MzQgOC43NTc4MSA1OS45MDYyIDExLjE3OTcgNjEuMDc4MSAxMy45NDUzQzYyLjI2NTYgMTYuNjk1MyA2Mi44NTk0IDE5LjY0MDYgNjIuODU5NCAyMi43ODEyQzYyLjg1OTQgMjUuOTIxOSA2Mi4yNjU2IDI4Ljg2NzIgNjEuMDc4MSAzMS42MTcyQzU5LjkwNjIgMzQuMzY3MiA1OC4yNzM0IDM2Ljc4OTEgNTYuMTc5NyAzOC44ODI4QzU0LjEwMTYgNDAuOTc2NiA1MS42ODc1IDQyLjYwOTQgNDguOTM3NSA0My43ODEyQzQ2LjE4NzUgNDQuOTY4OCA0My4yNDIyIDQ1LjU2MjUgNDAuMTAxNiA0NS41NjI1Wk00MC4xMDE2IDQxLjM5MDZDNDIuNjY0MSA0MS4zOTA2IDQ1LjA3MDMgNDAuOTA2MiA0Ny4zMjAzIDM5LjkzNzVDNDkuNTcwMyAzOC45Njg4IDUxLjU0NjkgMzcuNjMyOCA1My4yNSAzNS45Mjk3QzU0Ljk2ODggMzQuMjI2NiA1Ni4zMDQ3IDMyLjI1NzggNTcuMjU3OCAzMC4wMjM0QzU4LjIxMDkgMjcuNzczNCA1OC42ODc1IDI1LjM1OTQgNTguNjg3NSAyMi43ODEyQzU4LjY4NzUgMjAuMjAzMSA1OC4yMTA5IDE3Ljc5NjkgNTcuMjU3OCAxNS41NjI1QzU2LjMwNDcgMTMuMzEyNSA1NC45Njg4IDExLjMzNTkgNTMuMjUgOS42MzI4MUM1MS41NDY5IDcuOTI5NjkgNDkuNTcwMyA2LjU5Mzc1IDQ3LjMyMDMgNS42MjVDNDUuMDcwMyA0LjY1NjI1IDQyLjY2NDEgNC4xNzE4OCA0MC4xMDE2IDQuMTcxODhDMzcuNTIzNCA0LjE3MTg4IDM1LjEwOTQgNC42NTYyNSAzMi44NTk0IDUuNjI1QzMwLjYyNSA2LjU5Mzc1IDI4LjY0ODQgNy45Mjk2OSAyNi45Mjk3IDkuNjMyODFDMjUuMjI2NiAxMS4zMzU5IDIzLjg5MDYgMTMuMzEyNSAyMi45MjE5IDE1LjU2MjVDMjEuOTY4OCAxNy43OTY5IDIxLjQ5MjIgMjAuMjAzMSAyMS40OTIyIDIyLjc4MTJDMjEuNDkyMiAyNS4zNTk0IDIxLjk2ODggMjcuNzczNCAyMi45MjE5IDMwLjAyMzRDMjMuODkwNiAzMi4yNTc4IDI1LjIyNjYgMzQuMjI2NiAyNi45Mjk3IDM1LjkyOTdDMjguNjQ4NCAzNy42MzI4IDMwLjYyNSAzOC45Njg4IDMyLjg1OTQgMzkuOTM3NUMzNS4xMDk0IDQwLjkwNjIgMzcuNTIzNCA0MS4zOTA2IDQwLjEwMTYgNDEuMzkwNloifSl9KSx2b2ljZW92ZXI6Wigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1ooInBhdGgiLHtkOiJtMTEgNy42MDEtNS45OTQgOC4xOWExIDEgMCAwIDAgLjEgMS4yOThsLjgxNy44MThhMSAxIDAgMCAwIDEuMzE0LjA4N0wxNS4wOSAxMiJ9KSxaKCJwYXRoIix7ZDoiTTE2LjUgMjEuMTc0QzE1LjUgMjAuNSAxNC4zNzIgMjAgMTMgMjBjLTIuMDU4IDAtMy45MjggMi4zNTYtNiAyLTIuMDcyLS4zNTYtMi43NzUtMy4zNjktMS41LTQuNSJ9KSxaKCJjaXJjbGUiLHtjeDoiMTYiLGN5OiI3IixyOiI1In0pXX0pfTtmdW5jdGlvbiBsUSgkKXtpZighJClyZXR1cm4hMDtyZXR1cm4gUzUoJCkub3MudG9Mb3dlckNhc2UoKT09PSJpb3MifWZ1bmN0aW9uIEY0KHt1ZGlkOiQscnVudGltZTpKfSl7bGV0W1EsWF09TSghMCksW0ssWV09TShudWxsKSxbcSxHXT1NKG51bGwpLFtCLE5dPU0obnVsbCksTD1sUShKKSxWPXcoYXN5bmMoKT0+e04obnVsbCk7dHJ5e2xldCBEPWF3YWl0IGgzKHtkZXZpY2U6JH0se3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pO2lmKEQpWShEKTtlbHNlIE4oIlVuZXhwZWN0ZWQgc2ltdWxhdG9yLXNldHRpbmdzIHJlcGx5Iil9Y2F0Y2goRCl7TihEIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uJiZELm5hbWU9PT0iVGltZW91dEVycm9yIj8iVGltZWQgb3V0IHJlYWRpbmcgc2ltdWxhdG9yIHNldHRpbmdzIjpEIGluc3RhbmNlb2YgRXJyb3ImJkQubWVzc2FnZSE9PSJGYWlsZWQgdG8gZmV0Y2giP0QubWVzc2FnZToiQ291bGQgbm90IHJlYWNoIHRoZSBwcmV2aWV3IHNlcnZlciDigJQgcmVsb2FkIHRoZSBwYWdlIGlmIHRoaXMgcGVyc2lzdHMiKX19LFskXSk7eSgoKT0+e2lmKFkobnVsbCksIUwpcmV0dXJuO1YoKX0sW1YsTF0pO2xldCBDPXcoYXN5bmMoRCxTKT0+e0coRCksTihudWxsKSxZKCh4KT0+eD97Li4ueCxbRF06U306eCk7dHJ5e2F3YWl0IGgzKHtkZXZpY2U6JCxvcHRpb246RCx2YWx1ZTpTfSx7c2lnbmFsOkFib3J0U2lnbmFsLnRpbWVvdXQoMTUwMDApfSl9Y2F0Y2goeCl7Tih4IGluc3RhbmNlb2YgRXJyb3I/eC5tZXNzYWdlOmBGYWlsZWQgdG8gc2V0ICR7RH1gKSxWKCl9ZmluYWxseXtHKG51bGwpfX0sWyQsVl0pLFU9VCh7cnVubmluZzohMSxuZXh0Om51bGx9KSxPPVQoQyk7Ty5jdXJyZW50PUM7bGV0IHo9dygoRCk9PntsZXQgUz1VLmN1cnJlbnQ7aWYoUy5uZXh0PUQsUy5ydW5uaW5nKXJldHVybjtTLnJ1bm5pbmc9ITAsKGFzeW5jKCk9Pnt3aGlsZShTLm5leHQhPT1udWxsKXtsZXQgeD1TLm5leHQ7Uy5uZXh0PW51bGwsYXdhaXQgTy5jdXJyZW50KCJ0ZXh0LXNpemUiLG4yW3hdKX1TLnJ1bm5pbmc9ITF9KSgpfSxbXSksSD1LIT09bnVsbCxGPUs/P21RLEE9bjIuaW5kZXhPZihGWyJ0ZXh0LXNpemUiXSksYj1BPj0wP0E6RlsidGV4dC1zaXplIl0/LnN0YXJ0c1dpdGgoImFjY2Vzc2liaWxpdHkiKT9uMi5sZW5ndGgtMTozO3JldHVybiBaKGUxLHtvcGVuOlEsb25PcGVuQ2hhbmdlOlgsImRhdGEtc2ltdWxhdG9yLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpaKFoxLHtjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiU2ltdWxhdG9yIn0pLFooInNwYW4iLHt9KV19KSxjaGlsZHJlbjohTD9aKCJkaXYiLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNDUgdGV4dC1bMTFweF0gcHgtMC41IHB5LTEiLGNoaWxkcmVuOiJTaW11bGF0b3Igc2V0dGluZ3MgYXJlIGF2YWlsYWJsZSBvbiBpT1Mgc2ltdWxhdG9ycyBvbmx5LiJ9KTpaKFoxLHtjaGlsZHJlbjpbQiYmWigiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAiLGNoaWxkcmVuOkJ9KSxaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PnZvaWQgVigpLGNsYXNzTmFtZToic2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgcm91bmRlZCBib3JkZXIgYm9yZGVyLWRhbmdlci8zMCBiZy10cmFuc3BhcmVudCBweC0xLjUgcHktMC41IHRleHQtWzExcHhdIHRleHQtZGFuZ2VyLXNvZnQiLGNoaWxkcmVuOiJSZXRyeSJ9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEuNSBwYi0xLjUiLGNoaWxkcmVuOltaKFkwLHtpY29uOmkyLmFwcGVhcmFuY2UsbGFiZWw6IkFwcGVhcmFuY2UiLGNoaWxkcmVuOlooSDAse2xhYmVsOiJBcHBlYXJhbmNlIix2YWx1ZTpGLmFwcGVhcmFuY2U/PyJsaWdodCIsb3B0aW9uczpLOC5hcHBlYXJhbmNlLGRpc2FibGVkOiFIfHxxPT09ImFwcGVhcmFuY2UiLG9uQ2hhbmdlOihEKT0+QygiYXBwZWFyYW5jZSIsRCl9KX0pLFooWTAse2ljb246aTIuZ2xhc3MsbGFiZWw6IkxpcXVpZCBHbGFzcyIsY2hpbGRyZW46WihIMCx7bGFiZWw6IkxpcXVpZCBHbGFzcyIsdmFsdWU6RlsibGlxdWlkLWdsYXNzIl0/PyJjbGVhciIsb3B0aW9uczpLOFsibGlxdWlkLWdsYXNzIl0sZGlzYWJsZWQ6IUh8fHE9PT0ibGlxdWlkLWdsYXNzIixvbkNoYW5nZTooRCk9PkMoImxpcXVpZC1nbGFzcyIsRCl9KX0pLFooWTAse2ljb246aTIuZmlsdGVyLGxhYmVsOiJDb2xvciBGaWx0ZXIiLGNoaWxkcmVuOlooSDAse2xhYmVsOiJDb2xvciBGaWx0ZXIiLHZhbHVlOkZbImNvbG9yLWZpbHRlciJdPz8ibm9uZSIsb3B0aW9uczpLOFsiY29sb3ItZmlsdGVyIl0sZGlzYWJsZWQ6IUh8fHE9PT0iY29sb3ItZmlsdGVyIixvbkNoYW5nZTooRCk9PkMoImNvbG9yLWZpbHRlciIsRCl9KX0pLFooWTAse2ljb246aTIudGV4dFNpemUsbGFiZWw6IlRleHQgU2l6ZSIsY2hpbGRyZW46Wih1USx7dmFsdWU6YixkaXNhYmxlZDohSCxvbkNoYW5nZTp6fSl9KSxwUS5tYXAoKHtrZXk6RCxsYWJlbDpTfSk9PlooWTAse2ljb246aTJbRD09PSJyZWR1Y2UtbW90aW9uIj8ibW90aW9uIjpEPT09ImluY3JlYXNlLWNvbnRyYXN0Ij8iY29udHJhc3QiOkQ9PT0ic2hvdy1ib3JkZXJzIj8iYm9yZGVycyI6RD09PSJyZWR1Y2UtdHJhbnNwYXJlbmN5Ij8idHJhbnNwYXJlbmN5Ijoidm9pY2VvdmVyIl0sbGFiZWw6UyxjaGlsZHJlbjpaKGQ1LHtsYWJlbDpTLGNoZWNrZWQ6RltEXT09PSJvbiIsZGlzYWJsZWQ6IUh8fHE9PT1ELG9uQ2hhbmdlOih4KT0+QyhELHg/Im9uIjoib2ZmIil9KX0sRCkpXX0pXX0pfSl9dmFyIGRRPVt7dmFsdWU6Imh0dHAiLGxhYmVsOiJIVFRQIn0se3ZhbHVlOiJ3ZWJydGMiLGxhYmVsOiJXZWJSVEMifV0sY1E9W3t2YWx1ZToiYXV0byIsbGFiZWw6IkF1dG8ifSx7dmFsdWU6ImgyNjQiLGxhYmVsOiJILjI2NCJ9LHt2YWx1ZToibWpwZWciLGxhYmVsOiJNSlBFRyJ9XSxvUT1be3ZhbHVlOiJoMjY0IixsYWJlbDoiSC4yNjQifSx7dmFsdWU6InZwOSIsbGFiZWw6IlZQOSJ9LHt2YWx1ZToidnA4IixsYWJlbDoiVlA4In1dLHJRPVt7dmFsdWU6IjAiLGxhYmVsOiJGdWxsIn0se3ZhbHVlOiIxOTIwIixsYWJlbDoiMTkyMCJ9LHt2YWx1ZToiMTYwMCIsbGFiZWw6IjE2MDAifSx7dmFsdWU6IjEyODAiLGxhYmVsOiIxMjgwIn0se3ZhbHVlOiI5NjAiLGxhYmVsOiI5NjAifSx7dmFsdWU6IjcyMCIsbGFiZWw6IjcyMCJ9XSxPND1bIjYwIiwiMzAiLCIyMCIsIjE1IiwiMTAiLCI1Il0ubWFwKCgkKT0+KHt2YWx1ZTokLGxhYmVsOiR9KSksaVE9W3t2YWx1ZToiMC40NSIsbGFiZWw6IjQ1JSJ9LHt2YWx1ZToiMC41NSIsbGFiZWw6IjU1JSJ9LHt2YWx1ZToiMC43IixsYWJlbDoiNzAlIn0se3ZhbHVlOiIwLjg1IixsYWJlbDoiODUlIn0se3ZhbHVlOiIxIixsYWJlbDoiMTAwJSJ9XSxuUT1be3ZhbHVlOiIxNTAwMDAwIixsYWJlbDoiMS41IE1icHMifSx7dmFsdWU6IjMwMDAwMDAiLGxhYmVsOiIzIE1icHMifSx7dmFsdWU6IjYwMDAwMDAiLGxhYmVsOiI2IE1icHMifSx7dmFsdWU6IjEwMDAwMDAwIixsYWJlbDoiMTAgTWJwcyJ9LHt2YWx1ZToiMTYwMDAwMDAiLGxhYmVsOiIxNiBNYnBzIn1dLHUwPSJzaXplLTMuNSI7ZnVuY3Rpb24gYTIoJCxKLFEpe2xldCBYPVN0cmluZygkKTtyZXR1cm4gSi5zb21lKChLKT0+Sy52YWx1ZT09PVgpP0o6W3t2YWx1ZTpYLGxhYmVsOlEoJCl9LC4uLkpdfWZ1bmN0aW9uIGs0KHtzZXR0aW5nczokLG9uUGxheWJhY2tTZXR0aW5nc0NoYW5nZTpKLG9uRW5jb2RlclNldHRpbmdzQ2hhbmdlOlEsYWN0aXZlQ29kZWM6WCxhdmNjU3VwcG9ydGVkOkssZW5jb2RlclNldHRpbmdzRGlzYWJsZWQ6WT0hMX0pe2xldFtxLEddPU0oITEpLEI9JC50cmFuc3BvcnQ9PT0iaHR0cCIsTj0kLnRyYW5zcG9ydD09PSJ3ZWJydGMiO3JldHVybiBaKGUxLHtvcGVuOnEsb25PcGVuQ2hhbmdlOkcsImRhdGEtc3RyZWFtLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpaKFoxLHtjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiU3RyZWFtIn0pLFooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNDAganVzdGlmeS1zZWxmLWVuZCB1cHBlcmNhc2UiLGNoaWxkcmVuOlh9KV19KSxjaGlsZHJlbjpaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEuNSBwYi0xLjUiLGNoaWxkcmVuOltaKFkwLHtpY29uOloocjAse2NsYXNzTmFtZTp1MH0pLGxhYmVsOiJUcmFuc3BvcnQiLGNoaWxkcmVuOlooSDAse2xhYmVsOiJUcmFuc3BvcnQiLHZhbHVlOiQudHJhbnNwb3J0LG9wdGlvbnM6ZFEsZGlzYWJsZWQ6ITEsb25DaGFuZ2U6KEwpPT5KKHt0cmFuc3BvcnQ6TH0pfSl9KSxaKFkwLHtpY29uOloocjAse2NsYXNzTmFtZTp1MH0pLGxhYmVsOiJIVFRQIGNvZGVjIixjaGlsZHJlbjpaKEgwLHtsYWJlbDoiSFRUUCBjb2RlYyIsdmFsdWU6Sz8kLmh0dHBDb2RlYzoibWpwZWciLG9wdGlvbnM6Y1EsZGlzYWJsZWQ6IUJ8fCFLLG9uQ2hhbmdlOihMKT0+Sih7aHR0cENvZGVjOkx9KX0pfSksWihZMCx7aWNvbjpaKHIwLHtjbGFzc05hbWU6dTB9KSxsYWJlbDoiV2ViUlRDIGNvZGVjIixjaGlsZHJlbjpaKEgwLHtsYWJlbDoiV2ViUlRDIGNvZGVjIix2YWx1ZTokLndlYlJ0Y0NvZGVjLG9wdGlvbnM6b1EsZGlzYWJsZWQ6IU4sb25DaGFuZ2U6KEwpPT5KKHt3ZWJSdGNDb2RlYzpMfSl9KX0pLFooWTAse2ljb246WihqMCx7Y2xhc3NOYW1lOnUwfSksbGFiZWw6Ik1heCBzaXplIixjaGlsZHJlbjpaKEgwLHtsYWJlbDoiTWF4IHNpemUiLHZhbHVlOlN0cmluZygkLm1heERpbWVuc2lvbiksb3B0aW9uczphMigkLm1heERpbWVuc2lvbixyUSxTdHJpbmcpLGRpc2FibGVkOlksb25DaGFuZ2U6KEwpPT5RKHttYXhEaW1lbnNpb246TnVtYmVyKEwpfSl9KX0pLFooWTAse2ljb246WihqMCx7Y2xhc3NOYW1lOnUwfSksbGFiZWw6Ik1KUEVHIEZQUyIsY2hpbGRyZW46WihIMCx7bGFiZWw6Ik1KUEVHIEZQUyIsdmFsdWU6U3RyaW5nKCQubWpwZWdGcHMpLG9wdGlvbnM6YTIoJC5tanBlZ0ZwcyxPNCxTdHJpbmcpLGRpc2FibGVkOll8fCFCLG9uQ2hhbmdlOihMKT0+USh7bWpwZWdGcHM6TnVtYmVyKEwpfSl9KX0pLFooWTAse2ljb246WihqMCx7Y2xhc3NOYW1lOnUwfSksbGFiZWw6Ik1KUEVHIHF1YWxpdHkiLGNoaWxkcmVuOlooSDAse2xhYmVsOiJNSlBFRyBxdWFsaXR5Iix2YWx1ZTpTdHJpbmcoJC5tanBlZ1F1YWxpdHkpLG9wdGlvbnM6YTIoJC5tanBlZ1F1YWxpdHksaVEsKEwpPT5gJHtNYXRoLnJvdW5kKEwqMTAwKX0lYCksZGlzYWJsZWQ6WXx8IUIsb25DaGFuZ2U6KEwpPT5RKHttanBlZ1F1YWxpdHk6TnVtYmVyKEwpfSl9KX0pLFooWTAse2ljb246WihqMCx7Y2xhc3NOYW1lOnUwfSksbGFiZWw6IlZpZGVvIEZQUyIsY2hpbGRyZW46WihIMCx7bGFiZWw6IlZpZGVvIEZQUyIsdmFsdWU6U3RyaW5nKCQuaDI2NEZwcyksb3B0aW9uczphMigkLmgyNjRGcHMsTzQsU3RyaW5nKSxkaXNhYmxlZDpZfHxCJiYoIUt8fCQuaHR0cENvZGVjPT09Im1qcGVnIiksb25DaGFuZ2U6KEwpPT5RKHtoMjY0RnBzOk51bWJlcihMKX0pfSl9KSxaKFkwLHtpY29uOlooajAse2NsYXNzTmFtZTp1MH0pLGxhYmVsOiJWaWRlbyBiaXRyYXRlIixjaGlsZHJlbjpaKEgwLHtsYWJlbDoiVmlkZW8gYml0cmF0ZSIsdmFsdWU6U3RyaW5nKCQuaDI2NEJpdHJhdGUpLG9wdGlvbnM6YTIoJC5oMjY0Qml0cmF0ZSxuUSwoTCk9PmAke0wvMWU2fSBNYnBzYCksZGlzYWJsZWQ6WXx8QiYmKCFLfHwkLmh0dHBDb2RlYz09PSJtanBlZyIpLG9uQ2hhbmdlOihMKT0+USh7aDI2NEJpdHJhdGU6TnVtYmVyKEwpfSl9KX0pXX0pfSl9ZnVuY3Rpb24gQTQoe29wZW46JCxvbkNsb3NlOkosdWRpZDpRLGRldmljZVJ1bnRpbWU6WCxjdXJyZW50QXBwOkssZXZlbnRMb2dFdmVudHNFbmRwb2ludDpZLG1ldHJpY3NFbmRwb2ludDpxLGF4T3ZlcmxheUVuYWJsZWQ6RyxvblRvZ2dsZUF4T3ZlcmxheTpCLHN0cmVhbVNldHRpbmdzOk4sb25TdHJlYW1QbGF5YmFja1NldHRpbmdzQ2hhbmdlOkwsb25TdHJlYW1FbmNvZGVyU2V0dGluZ3NDaGFuZ2U6VixhY3RpdmVDb2RlYzpDLGF2Y2NTdXBwb3J0ZWQ6VSxzdHJlYW1TZXR0aW5nc1BlbmRpbmc6Tyx3aWR0aDp6fSl7cmV0dXJuIFooejIse29wZW46JCx3aWR0aDp6LHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6SDJ9LGNoaWxkcmVuOltaKFUyLHtjaGlsZHJlbjpbWihaNix7Y2hpbGRyZW46IlRvb2xzIn0pLFooaDUse29uQ2xpY2s6Sn0pXX0pLCQmJlooImRpdiIse2NsYXNzTmFtZToicC0zLjUgb3ZlcmZsb3cteS1hdXRvIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0zIixjaGlsZHJlbjpbWihzNix7dWRpZDpRLGN1cnJlbnRBcHA6S30pLFooQzQse3VkaWQ6USxjdXJyZW50QXBwQnVuZGxlSWQ6Sz8uYnVuZGxlSWQ/P251bGwsbWV0cmljc0VuZHBvaW50OnF9KSxaKHo0LHt1ZGlkOlEsZXZlbnRzRW5kcG9pbnQ6WX0pLFooRjQse3VkaWQ6USxydW50aW1lOlh9KSxaKEo0LHtvdmVybGF5RW5hYmxlZDpHLG9uVG9nZ2xlT3ZlcmxheTpCfSksWihONCx7dWRpZDpRLGJ1bmRsZUlkOks/LmJ1bmRsZUlkPz9udWxsfSksWihuNix7dWRpZDpRLGV4ZWM6RTF9KSxaKGU2LHt1ZGlkOlEsYnVuZGxlSWQ6Sz8uYnVuZGxlSWQ/P251bGx9KSxaKGs0LHtzZXR0aW5nczpOLG9uUGxheWJhY2tTZXR0aW5nc0NoYW5nZTpMLG9uRW5jb2RlclNldHRpbmdzQ2hhbmdlOlYsYWN0aXZlQ29kZWM6QyxhdmNjU3VwcG9ydGVkOlUsZW5jb2RlclNldHRpbmdzRGlzYWJsZWQ6T30pXX0pXX0pfWZ1bmN0aW9uIE00KCQsSil7bGV0IFE7dHJ5e1E9bmV3IFVSTCgkLndlYlNvY2tldERlYnVnZ2VyVXJsKX1jYXRjaHtyZXR1cm4gJH1sZXQgWD1gJHtRLnBhdGhuYW1lfSR7US5zZWFyY2h9YCxLPUoucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiIsWT1KLnByb3RvY29sPT09Imh0dHBzOiI/IndzcyI6IndzIixxPWAke0ouaG9zdH0ke1h9YCxHPSQuZGV2dG9vbHNGcm9udGVuZFVybDt0cnl7bGV0IEI9bmV3IFVSTCgkLmRldnRvb2xzRnJvbnRlbmRVcmwsYCR7Si5wcm90b2NvbH0vLyR7Si5ob3N0fWApO0Iuc2VhcmNoUGFyYW1zLmRlbGV0ZSgid3MiKSxCLnNlYXJjaFBhcmFtcy5kZWxldGUoIndzcyIpLEIuc2VhcmNoUGFyYW1zLnNldChZLHEpLEc9YCR7Qi5wYXRobmFtZX0ke0Iuc2VhcmNofSR7Qi5oYXNofWB9Y2F0Y2h7fXJldHVybnsuLi4kLHdlYlNvY2tldERlYnVnZ2VyVXJsOmAke0t9Ly8ke0ouaG9zdH0ke1h9YCxkZXZ0b29sc0Zyb250ZW5kVXJsOkd9fWZ1bmN0aW9uIHMyKCQsSil7ZmV0Y2goajEoImRldnRvb2xzL2hpZ2hsaWdodCIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dGFyZ2V0SWQ6JCxvbjpKfSksa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBZOCgpe2xldCAkPWoxKCJkZXZ0b29scy9yZWxlYXNlIik7dHJ5e2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3Iuc2VuZEJlYWNvbil7bGV0IEo9bmV3IEJsb2IoWyJ7fSJdLHt0eXBlOiJhcHBsaWNhdGlvbi9qc29uIn0pO2lmKG5hdmlnYXRvci5zZW5kQmVhY29uKCQsSikpcmV0dXJufX1jYXRjaHt9ZmV0Y2goJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6Int9IixrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIFc0KCQpe2xldCBKPSQuY29udGVudERvY3VtZW50O2lmKCFKKXJldHVybjtsZXQgUT0oKT0+e2xldCBZPVtKXTt3aGlsZShZLmxlbmd0aCl7bGV0IHE9WS5wb3AoKSxHPXEucXVlcnlTZWxlY3RvckFsbCgiW2FyaWEtbGFiZWxdLFt0aXRsZV0iKTtmb3IobGV0IEIgb2YgRyl7bGV0IE49Qi5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8Qi50aXRsZXx8IiI7aWYoL150b2dnbGUgc2NyZWVuY2FzdCQvaS50ZXN0KE4pKXJldHVybiBCfWZvcihsZXQgQiBvZiBxLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSlpZihCLnNoYWRvd1Jvb3QpWS5wdXNoKEIuc2hhZG93Um9vdCl9cmV0dXJuIG51bGx9LFg9MCxLPSgpPT57WCsrO2xldCBZPVEoKTtpZihZJiZZLmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0iZmFsc2UiKXtZLmNsaWNrKCk7cmV0dXJufWlmKFg8MjApc2V0VGltZW91dChLLDEwMCl9O0soKX1mdW5jdGlvbiBfNCgkKXtsZXQgSj1bXSxRPW5ldyBNYXA7Zm9yKGxldCBYIG9mICQpe2xldCBLPVguYXBwTmFtZXx8WC5idW5kbGVJZHx8IlVua25vd24iLFk9WC5idW5kbGVJZHx8SyxxPVEuZ2V0KFkpO2lmKCFxKXE9e2tleTpZLGFwcE5hbWU6SyxidW5kbGVJZDpYLmJ1bmRsZUlkLHRhcmdldHM6W119LFEuc2V0KFkscSksSi5wdXNoKFkpO3EudGFyZ2V0cy5wdXNoKFgpfXJldHVybiBKLm1hcCgoWCk9PlEuZ2V0KFgpKX1mdW5jdGlvbiBQNCgkLEope2xldFtRLFhdPU0oe30pLEs9VDEoKCk9Pkouc2xpY2UoKS5zb3J0KCkuam9pbigifCIpLFtKXSk7cmV0dXJuIHkoKCk9PntpZighJClyZXR1cm47bGV0IFk9ITE7Zm9yKGxldCBxIG9mIEope2lmKCFxKWNvbnRpbnVlO2xldCBHPWAkeyR9OiR7cX1gLEI9QzIuZ2V0KEcpO2lmKHR5cGVvZiBCPT09InN0cmluZyJ8fEI9PT1udWxsKXtYKChOKT0+TltxXT09PUI/Tjp7Li4uTixbcV06Qn0pO2NvbnRpbnVlfWE2KEUxLCQscSkudGhlbigoTik9PntpZihZKXJldHVybjtYKChMKT0+KHsuLi5MLFtxXTpOfSkpfSl9cmV0dXJuKCk9PntZPSEwfX0sWyQsS10pLFF9ZnVuY3Rpb24gRDQoe3VkaWQ6JCx0YXJnZXRzOkosc2VsZWN0ZWQ6USxvblNlbGVjdFRhcmdldDpYLG9uUmVmcmVzaDpLfSl7bGV0IFk9XzQoSikscT1ZLm1hcCgoeik9PnouYnVuZGxlSWQpLmZpbHRlcigoeik9PiEheiksRz1QNCgkLHEpLFtCLE5dPU0oITEpLFtMLFZdPU0obnVsbCksQz1UKG51bGwpLFU9VChudWxsKTt5KCgpPT57aWYoIUIpcmV0dXJuO2xldCB6PShIKT0+e2lmKCFVLmN1cnJlbnQpcmV0dXJuO2lmKCFVLmN1cnJlbnQuY29udGFpbnMoSC50YXJnZXQpKU4oITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix6KSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix6KX0sW0JdKSx5KCgpPT57aWYoQilyZXR1cm47aWYoQy5jdXJyZW50KXMyKEMuY3VycmVudCwhMSksQy5jdXJyZW50PW51bGw7WTgoKX0sW0JdKSx5KCgpPT57bGV0IHo9KCk9Plk4KCk7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIseiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIseiksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLHopLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLHopfX0sW10pO2xldCBPPVE/KFEudGl0bGV8fFEudXJsfHxRLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApOiJTZWxlY3QgdGFyZ2V0IjtyZXR1cm4gWigiZGl2Iix7cmVmOlUsY2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgbWluLXctMCIsY2hpbGRyZW46W1ooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e04oKHopPT57aWYoIXopSygpO3JldHVybiF6fSl9LGNsYXNzTmFtZToidy1mdWxsIG1pbi13LTAgaC1bMjZweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIGJnLXBhbmVsIHRleHQtd2hpdGUvOTAgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLW1kIHRleHQtWzEycHhdIHB4LTIgY3Vyc29yLXBvaW50ZXIgdGV4dC1sZWZ0IiwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpCLCJhcmlhLWxhYmVsIjoiV2ViS2l0IHRhcmdldCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIG1pbi13LTAiLGNoaWxkcmVuOk99KSxaKFMyLHtzaXplOjEyLHN0cm9rZVdpZHRoOjJ9KV19KSxCJiZaKCJ1bCIse3JvbGU6Imxpc3Rib3giLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNHB4KV0gbGVmdC0wIG0tMCBwLTEgbGlzdC1ub25lIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1sZyBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSBtaW4tdy1bMjIwcHhdIG1heC13LVszNjBweF0gbWF4LWgtWzMyMHB4XSBvdmVyZmxvdy15LWF1dG8gei01MCIsY2hpbGRyZW46WS5tYXAoKHopPT57bGV0IEg9ei5idW5kbGVJZD9HW3ouYnVuZGxlSWRdOm51bGw7cmV0dXJuIFooImxpIix7Y2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMS41IHB0LTEgcGItMC41IHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS9bMC45Ml0iLGNoaWxkcmVuOltIP1ooImltZyIse3NyYzpILGFsdDoiIixjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIifSk6Wigic3BhbiIse2NsYXNzTmFtZToidy00IGgtNCByb3VuZGVkLVszcHhdIHNocmluay0wIG9iamVjdC1jb3ZlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46ei5hcHBOYW1lfSldfSksWigidWwiLHtyb2xlOiJncm91cCIsY2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCBwbC1bMjZweF0iLGNoaWxkcmVuOnoudGFyZ2V0cy5tYXAoKEYpPT57bGV0IEE9UT8uaWQ9PT1GLmlkLGI9ISFGLmluVXNlQnlPdGhlckluc3BlY3RvciYmIUEsRD0oRi50aXRsZXx8Ri51cmx8fEYuYXBwTmFtZXx8IlVudGl0bGVkIikuc2xpY2UoMCw5MCksUz1MPT09Ri5pZCYmIWIseD0iZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0iO3JldHVybiBaKCJsaSIse3JvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOkEsImFyaWEtZGlzYWJsZWQiOmIsdGFiSW5kZXg6Yj8tMTowLHRpdGxlOmI/IkFscmVhZHkgYmVpbmcgaW5zcGVjdGVkIGJ5IGFub3RoZXIgZGVidWdnZXIiOnZvaWQgMCxvbk1vdXNlRW50ZXI6KCk9PntpZihiKXJldHVybjtpZihDLmN1cnJlbnQmJkMuY3VycmVudCE9PUYuaWQpczIoQy5jdXJyZW50LCExKTtDLmN1cnJlbnQ9Ri5pZCxWKEYuaWQpLHMyKEYuaWQsITApfSxvbk1vdXNlTGVhdmU6KCk9PntpZihDLmN1cnJlbnQ9PT1GLmlkKXMyKEYuaWQsITEpLEMuY3VycmVudD1udWxsO1YoKGcpPT5nPT09Ri5pZD9udWxsOmcpfSxvbkNsaWNrOigpPT57aWYoYilyZXR1cm47WChGLmlkKSxOKCExKX0sY2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIHB4LTIgcHktWzNweF0gcm91bmRlZCB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxLjM1XSAke2I/Im9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIGl0YWxpYyB0ZXh0LXdoaXRlLzg1IjpTPyJiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMjIpXSB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIjpBPyJiZy13aGl0ZS9bMC4wNl0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6InRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpEfSksRi51cmwmJkYudXJsIT09ImFib3V0OmJsYW5rIiYmWigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtd2hpdGUvWzAuNDJdIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpGLnVybH0pXX0sRi5pZCl9KX0pXX0sei5rZXkpfSl9KV19KX1mdW5jdGlvbiB3NCh7b3BlbjokLG9uQ2xvc2U6Six1ZGlkOlEsdGFyZ2V0czpYLHNlbGVjdGVkVGFyZ2V0SWQ6SyxvblNlbGVjdFRhcmdldDpZLGxvYWRpbmc6cSxlcnJvcjpHLG9uUmVmcmVzaDpCLHdpZHRoOk59KXtsZXQgTD1LP1guZmluZCgoVik9PlYuaWQ9PT1LKT8/bnVsbDpudWxsO3JldHVybiBaKHoyLHtvcGVuOiQsd2lkdGg6TixjaGlsZHJlbjpbWihVMix7Y2hpbGRyZW46W1gubGVuZ3RoPjA/WihENCx7dWRpZDpRLHRhcmdldHM6WCxzZWxlY3RlZDpMLG9uU2VsZWN0VGFyZ2V0Olksb25SZWZyZXNoOkJ9KTpaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlL1swLjQ4XSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46cT8iTG9va2luZyBmb3IgU2FmYXJpIGFuZCBpbnNwZWN0YWJsZSB3ZWJ2aWV3cy4uLiI6Ik5vIGluc3BlY3RhYmxlIFNhZmFyaSBvciBXS1dlYlZpZXcgdGFyZ2V0cyJ9KSxaKGg1LHtvbkNsaWNrOkosYXJpYUxhYmVsOiJDbG9zZSBXZWJLaXQgRGV2VG9vbHMiLHRpdGxlOiJDbG9zZSIsaWNvblNpemU6MTV9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGJnLXdoaXRlIHJlbGF0aXZlIixjaGlsZHJlbjpHP1ooImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNiBiZy1wYW5lbC1kZWVwIHRleHQtd2hpdGUvWzAuNThdIHRleHQtY2VudGVyIHRleHQtWzEzcHhdIixjaGlsZHJlbjpHfSk6TCYmJD9aKCJpZnJhbWUiLHtzcmM6TC5kZXZ0b29sc0Zyb250ZW5kVXJsLHRpdGxlOmBXZWJLaXQgRGV2VG9vbHMgLSAke0wudGl0bGV8fEwudXJsfHxMLmlkfWAsY2xhc3NOYW1lOiJ3LWZ1bGwgaC1mdWxsIGJvcmRlci1ub25lIGJsb2NrIGJnLXdoaXRlIixvbkxvYWQ6KFYpPT5XNChWLmN1cnJlbnRUYXJnZXQpfSxMLmlkKTpaKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46TD8iRGV2VG9vbHMgcGF1c2VkIOKAlCBvcGVuIHRoZSBwYW5lbCB0byByZWF0dGFjaC4iOiJPcGVuIFNhZmFyaSBvciBhbiBpbnNwZWN0YWJsZSBXS1dlYlZpZXcgaW4gdGhlIHNpbXVsYXRvci4ifSl9KV19KX1mdW5jdGlvbiBhUSh7aG9zdFBhdGg6JCxleGVjOkosdWRpZDpRLG9uVXBsb2FkU3RhcnQ6WCxvblVwbG9hZFByb2dyZXNzOkssb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpxfSl7cT8uKCQpO2xldCBHPSQuc3BsaXQoIi8iKS5wb3AoKT8/ImltYWdlIixCPVgoRywibWVkaWEiKTtyZXR1cm4gSyhCLG51bGwpLFo0KCQsSixRKS50aGVuKCgpPT5ZKEIsITApKS5jYXRjaCgoTik9PlkoQiwhMSxOIGluc3RhbmNlb2YgRXJyb3I/Ti5tZXNzYWdlOiJBZGQgZmFpbGVkIikpfWZ1bmN0aW9uIFQ0KHtleGVjOiQsdWRpZDpKLGVuYWJsZWQ6USxvblVwbG9hZFN0YXJ0Olgsb25VcGxvYWRQcm9ncmVzczpLLG9uVXBsb2FkRW5kOlksb25VbnN1cHBvcnRlZDpxLG9uSG9zdFBhdGhEcm9wOkd9KXtsZXRbQixOXT1NKCExKSxMPVQoMCksVj13KGFzeW5jKHopPT57aWYoei5wcmV2ZW50RGVmYXVsdCgpLHouc3RvcFByb3BhZ2F0aW9uKCksTC5jdXJyZW50PTAsTighMSksIVF8fCFKKXJldHVybjtsZXQgSD16LmRhdGFUcmFuc2Zlci5nZXREYXRhKGM1KTtpZihIKXthUSh7aG9zdFBhdGg6SCxleGVjOiQsdWRpZDpKLG9uVXBsb2FkU3RhcnQ6WCxvblVwbG9hZFByb2dyZXNzOkssb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpHfSk7cmV0dXJufWxldCBGPUFycmF5LmZyb20oei5kYXRhVHJhbnNmZXIuZmlsZXMpO2lmKEYubGVuZ3RoPT09MClyZXR1cm47Zm9yKGxldCBBIG9mIEYpe2xldCBiPVg0KEEpO2lmKCFiKXtxKEEpO2NvbnRpbnVlfWxldCBEPVgoQS5uYW1lLGIpO3E0KEEsYiwkLEosKFMpPT5LKEQsUykpLnRoZW4oKCk9PlkoRCwhMCkpLmNhdGNoKChTKT0+WShELCExLFMgaW5zdGFuY2VvZiBFcnJvcj9TLm1lc3NhZ2U6IlVwbG9hZCBmYWlsZWQiKSl9fSxbUSxKLCQsWCxLLFkscSxHXSksQz13KCh6KT0+e2lmKHoucHJldmVudERlZmF1bHQoKSxRKXouZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbUV0pLFU9dygoeik9PntpZih6LnByZXZlbnREZWZhdWx0KCksIVEpcmV0dXJuO2lmKEwuY3VycmVudCsrLEwuY3VycmVudD09PTEpTighMCl9LFtRXSksTz13KCh6KT0+e2lmKHoucHJldmVudERlZmF1bHQoKSxMLmN1cnJlbnQtLSxMLmN1cnJlbnQ8PTApTC5jdXJyZW50PTAsTighMSl9LFtdKTtyZXR1cm57aXNEcmFnT3ZlcjpCLGRyb3Bab25lUHJvcHM6e29uRHJhZ092ZXI6QyxvbkRyYWdFbnRlcjpVLG9uRHJhZ0xlYXZlOk8sb25Ecm9wOlZ9fX1mdW5jdGlvbiBJNCgkKXtsZXQgSj1uZXcgVWludDhBcnJheSg2NTUzNiksUT0wLFg9MCxLPTEwMjQsWT1uZXcgVGV4dERlY29kZXIoImxhdGluMSIpLHE9KEMpPT57aWYoUStDLmxlbmd0aD5KLmxlbmd0aCl7aWYoWD4wKUouY29weVdpdGhpbigwLFgsUSksUS09WCxYPTA7aWYoUStDLmxlbmd0aD5KLmxlbmd0aCl7bGV0IFU9Si5sZW5ndGg7d2hpbGUoVTxRK0MubGVuZ3RoKVUqPTI7bGV0IE89bmV3IFVpbnQ4QXJyYXkoVSk7Ty5zZXQoSi5zdWJhcnJheSgwLFEpKSxKPU99fUouc2V0KEMsUSksUSs9Qy5sZW5ndGh9LEc9KEMpPT57bGV0IFU9TWF0aC5taW4oUS00LEMrSyk7Zm9yKGxldCBPPUM7Tzw9VTtPKyspaWYoSltPXT09PTEzJiZKW08rMV09PT0xMCYmSltPKzJdPT09MTMmJkpbTyszXT09PTEwKXJldHVybiBPO3JldHVybi0xfSxCPShDLFUpPT57bGV0IE89WS5kZWNvZGUoSi5zdWJhcnJheShDLFUpKSx6PS9jb250ZW50LWxlbmd0aDpccyooXGQrKS9pLmV4ZWMoTyk7cmV0dXJuIHo/TnVtYmVyKHpbMV0pOm51bGx9LE49MCxMPShDKT0+e2xldCBVPS0xO2ZvcihsZXQgTz1DO088US0xO08rKylpZihKW09dPT09MjU1JiZKW08rMV09PT0yMTYpe1U9TzticmVha31pZihVPT09LTEpcmV0dXJuIG51bGw7Zm9yKGxldCBPPU1hdGgubWF4KFUrMixOKTtPPFEtMTtPKyspaWYoSltPXT09PTI1NSYmSltPKzFdPT09MjE3KXJldHVybiBOPTAse3M6VSxlOk8rMn07cmV0dXJuIE49TWF0aC5tYXgoVSsyLFEtMSksbnVsbH0sVj0oKT0+e3doaWxlKFg8USl7bGV0IEM9RyhYKTtpZihDPj0wKXtsZXQgTz1CKFgsQyk7aWYoTyE9bnVsbCYmTz4wKXtsZXQgej1DKzQsSD16K087aWYoUTxIKWJyZWFrOyQoSi5zdWJhcnJheSh6LEgpKSxYPUg7Y29udGludWV9fWVsc2UgaWYoUS1YPD1LKWJyZWFrO2xldCBVPUwoWCk7aWYoIVUpYnJlYWs7JChKLnN1YmFycmF5KFUucyxVLmUpKSxYPVUuZX1pZihYPjApe2lmKFg8USlKLmNvcHlXaXRoaW4oMCxYLFEpO1EtPVgsTj1OPlg/Ti1YOjAsWD0wfX07cmV0dXJue3B1c2goQyl7aWYoQy5sZW5ndGg9PT0wKXJldHVybjtxKEMpLFYoKX19fWZ1bmN0aW9uIEU0KCQpe2xldCBKPVQobmV3IFNldCksUT13KChYKT0+e3JldHVybiBKLmN1cnJlbnQuYWRkKFgpLCgpPT57Si5jdXJyZW50LmRlbGV0ZShYKX19LFtdKTtyZXR1cm4geSgoKT0+e2lmKCEkKXJldHVybjtsZXQgWD1uZXcgQWJvcnRDb250cm9sbGVyLEs9ITEsWT1udWxsLHE9bmV3IFVSTCgkKTtxLnNlYXJjaFBhcmFtcy5zZXQoInJhdyIsIjEiKTtsZXQgRz1xLnRvU3RyaW5nKCksQj0oKT0+e2lmKEt8fFguc2lnbmFsLmFib3J0ZWR8fFkpcmV0dXJuO1k9c2V0VGltZW91dCgoKT0+e1k9bnVsbCxMKCl9LDEwMDApfSxOPShWKT0+e2lmKEouY3VycmVudC5zaXplPT09MClyZXR1cm47bGV0IEM9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbVl0se3R5cGU6ImltYWdlL2pwZWcifSkpO2ZvcihsZXQgVSBvZiBKLmN1cnJlbnQpVShDKX0sTD1hc3luYygpPT57dHJ5e2xldCBDPShhd2FpdCBmZXRjaChHLHtzaWduYWw6WC5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUMpe0IoKTtyZXR1cm59bGV0IFU9STQoTik7d2hpbGUoITApe2xldHtkb25lOk8sdmFsdWU6en09YXdhaXQgQy5yZWFkKCk7aWYoTylicmVhaztpZih6JiZ6Lmxlbmd0aClVLnB1c2goeil9fWNhdGNoe31maW5hbGx5e0IoKX19O3JldHVybiBMKCksKCk9PntpZihLPSEwLFkpY2xlYXJUaW1lb3V0KFkpO1guYWJvcnQoKX19LFskXSkse3N1YnNjcmliZUZyYW1lOlEsZnJhbWU6bnVsbH19ZnVuY3Rpb24geTQoKXtsZXRbJF09TShvMCk7cmV0dXJue3N1cHBvcnRlZDokfX1mdW5jdGlvbiByNSgkLEope3JldHVybiAkPT09ImZpcnN0LWZyYW1lLXRpbWVvdXQiJiZKPT09ImNvbm5lY3RlZCI/ImNvZGVjIjoidHJhbnNwb3J0In12YXIgYjQ9ImFsbCI7Y2xhc3MgdDIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJXZWJSVEMgc2lnbmFsaW5nIHN0YXllZCBidXN5IGZvciB0b28gbG9uZy4gUmVsb2FkIHRvIHRyeSBhZ2Fpbi4iKTt0aGlzLm5hbWU9IldlYlJ0Y1NpZ25hbGluZ0J1c3lFcnJvciJ9fWNsYXNzIG41IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiV2ViUlRDIHNpZ25hbGluZyB0aW1lZCBvdXQuIik7dGhpcy5uYW1lPSJXZWJSdGNTaWduYWxpbmdUaW1lb3V0RXJyb3IifX1mdW5jdGlvbiBpNSgkKXtyZXR1cm4gJC5yZWFzb24/P25ldyBET01FeGNlcHRpb24oIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQiLCJBYm9ydEVycm9yIil9ZnVuY3Rpb24gc1EoJCxKKXtpZihKPy5hYm9ydGVkKXJldHVybiBQcm9taXNlLnJlamVjdChpNShKKSk7cmV0dXJuIG5ldyBQcm9taXNlKChRLFgpPT57bGV0IEs9c2V0VGltZW91dChZLCQpO2Z1bmN0aW9uIFkoKXtKPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksUSgpfWZ1bmN0aW9uIHEoKXtjbGVhclRpbWVvdXQoSyksWChKP2k1KEopOm5ldyBET01FeGNlcHRpb24oIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQiLCJBYm9ydEVycm9yIikpfUo/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixxLHtvbmNlOiEwfSl9KX1hc3luYyBmdW5jdGlvbiBTNCh7dXJsOiQsc2Vzc2lvbklkOkosa2VlcGFsaXZlOlE9ITEsc2VuZEJlYWNvbjpYLGZldGNoSW1wbDpLPWZldGNofSl7bGV0IFk9SlNPTi5zdHJpbmdpZnkoe3Nlc3Npb25JZDpKfSkscT1YPz8odHlwZW9mIG5hdmlnYXRvcjwidSImJnR5cGVvZiBuYXZpZ2F0b3Iuc2VuZEJlYWNvbj09PSJmdW5jdGlvbiI/bmF2aWdhdG9yLnNlbmRCZWFjb24uYmluZChuYXZpZ2F0b3IpOnZvaWQgMCk7aWYoUSYmcSl0cnl7aWYocSgkLG5ldyBCbG9iKFtZXSx7dHlwZToidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04In0pKSlyZXR1cm59Y2F0Y2h7fWF3YWl0IEsoJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6WSxrZWVwYWxpdmU6UX0pLnRoZW4oKCk9PntyZXR1cm59LCgpPT57cmV0dXJufSl9YXN5bmMgZnVuY3Rpb24geDQoe3VybDokLGJvZHk6SixzaWduYWw6USxyZXF1ZXN0VGltZW91dE1zOlgsYnVzeVJldHJ5SW50ZXJ2YWxNczpLLGJ1c3lSZXRyeUNvdW50OlksZmV0Y2hJbXBsOnE9ZmV0Y2h9KXtmb3IobGV0IEc9MDtHPD1ZO0crKyl7aWYoUT8uYWJvcnRlZCl0aHJvdyBpNShRKTtsZXQgQj1uZXcgQWJvcnRDb250cm9sbGVyLE49ITEsTD0oKT0+Qi5hYm9ydChRP2k1KFEpOnZvaWQgMCk7UT8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLEwse29uY2U6ITB9KTtsZXQgVj1zZXRUaW1lb3V0KCgpPT57Tj0hMCxCLmFib3J0KCl9LFgpLEM7dHJ5e0M9YXdhaXQgcSgkLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sc2lnbmFsOkIuc2lnbmFsLGJvZHk6Sn0pfWNhdGNoKFUpe2lmKE4mJiFRPy5hYm9ydGVkKXRocm93IG5ldyBuNTt0aHJvdyBVfWZpbmFsbHl7Y2xlYXJUaW1lb3V0KFYpLFE/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixMKX1pZihDLnN0YXR1cyE9PTQwOSlyZXR1cm4gQztpZihhd2FpdCBDLmJvZHk/LmNhbmNlbCgpLEc9PT1ZKXRocm93IG5ldyB0Mjthd2FpdCBzUShLLFEpfXRocm93IG5ldyB0Mn12YXIgdFE9W3t1cmxzOlsic3R1bjpzdHVuLmwuZ29vZ2xlLmNvbToxOTMwMiJdfSx7dXJsczpbInN0dW46c3R1bjEubC5nb29nbGUuY29tOjE5MzAyIl19XSxlUT0zMDAwLCRaPTIwMDAwLEpaPTQwMDAsUVo9NTAwLFpaPTMwLFhaPTUwMCxLWj01MDAwO2Z1bmN0aW9uIGo0KCl7aWYodHlwZW9mIGNyeXB0by5yYW5kb21VVUlEPT09ImZ1bmN0aW9uIilyZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtsZXQgJD1jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDE2KSk7JFs2XT0kWzZdJjE1fDY0LCRbOF09JFs4XSY2M3wxMjg7bGV0IEo9QXJyYXkuZnJvbSgkLChRKT0+US50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKTtyZXR1cm5gJHtKLnNsaWNlKDAsOCl9LSR7Si5zbGljZSg4LDEyKX0tJHtKLnNsaWNlKDEyLDE2KX0tJHtKLnNsaWNlKDE2LDIwKX0tJHtKLnNsaWNlKDIwKX1gfWZ1bmN0aW9uIHY0KHtvZmZlclVybDokLGNsb3NlVXJsOkosZW5hYmxlZDpRLGNvZGVjOlg9ImgyNjQiLGljZVNlcnZlcnM6S30pe2xldFtZLHFdPU0obnVsbCksW0csQl09TShudWxsKSxbTixMXT1NKG51bGwpLFtWLENdPU0oMCksVT1UKHZvaWQgMCksTz1UKCExKSx6PVQoMCksSD13KCgpPT57aWYoTy5jdXJyZW50PSEwLHouY3VycmVudD0wLFUuY3VycmVudCE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KFUuY3VycmVudCksVS5jdXJyZW50PXZvaWQgMDtCKG51bGwpLEwobnVsbCl9LFtdKTtyZXR1cm4geSgoKT0+e3ouY3VycmVudD0wfSxbUSwkLEosWCxLXSkseSgoKT0+e2lmKCFRfHwhJClyZXR1cm47aWYoQihudWxsKSx0eXBlb2YgUlRDUGVlckNvbm5lY3Rpb24+InUifHx0eXBlb2YgUlRDUnRwUmVjZWl2ZXI+InUiKXtxKG51bGwpLEwoIldlYlJUQyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci4iKSxCKHtzZXNzaW9uSWQ6ajQoKSxraW5kOiJwZXJtYW5lbnQifSk7cmV0dXJufWxldCBGPSExLEE9bnVsbCxiLEQ9bnVsbCxTPSExLHg9bmV3IEFib3J0Q29udHJvbGxlcixzPWo0KCksZz1LPy5sZW5ndGg/Szp0UTtpZihxKG51bGwpLEIobnVsbCksTChudWxsKSxPLmN1cnJlbnQ9ITEsVS5jdXJyZW50IT09dm9pZCAwKXdpbmRvdy5jbGVhclRpbWVvdXQoVS5jdXJyZW50KSxVLmN1cnJlbnQ9dm9pZCAwO2xldCB1PShqPSExKT0+e2lmKEQpcmV0dXJuIEQ7cmV0dXJuIEQ9UzQoe3VybDpKLHNlc3Npb25JZDpzLGtlZXBhbGl2ZTpqfSksRH0saT0oKT0+dm9pZCB1KCEwKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLGkpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLGkpO2xldCBvPSgpPT57cShudWxsKSxBPy5jbG9zZSgpfSxyPShqKT0+e2lmKEZ8fFMpcmV0dXJuO1M9ITAsTChqKSxCKHtzZXNzaW9uSWQ6cyxraW5kOiJwZXJtYW5lbnQifSksbygpLHUoKX0sUTE9KCk9PntpZihGfHxTKXJldHVybjtTPSEwLG8oKSx1KCkuZmluYWxseSgoKT0+e2lmKCFGKUIoe3Nlc3Npb25JZDpzLGtpbmQ6ImNvZGVjIixjb2RlYzpYfSl9KX0sTjE9KGopPT57aWYoRnx8UylyZXR1cm47Uz0hMCxCKG51bGwpO2xldCBhPXouY3VycmVudCsrLEsxPU1hdGgubWluKFhaKjIqKk1hdGgubWluKGEsNCksS1opO0woYCR7an0gUmV0cnlpbmcuLi5gKSxvKCksdSgpLmZpbmFsbHkoKCk9PntpZihGKXJldHVybjtiPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT57aWYoIUYpQygoTDEpPT5MMSsxKX0sSzEpfSl9LGM9KGopPT5uZXcgUHJvbWlzZSgoYSk9PntpZihqLmljZUdhdGhlcmluZ1N0YXRlPT09ImNvbXBsZXRlIil7YSgpO3JldHVybn1sZXQgSzEsTDE9ITEsSjE9KCk9PntpZihMMSlyZXR1cm47aWYoTDE9ITAsai5yZW1vdmVFdmVudExpc3RlbmVyKCJpY2VnYXRoZXJpbmdzdGF0ZWNoYW5nZSIsWTEpLEsxIT09dm9pZCAwKXdpbmRvdy5jbGVhclRpbWVvdXQoSzEpO2EoKX0sWTE9KCk9PntpZihqLmljZUdhdGhlcmluZ1N0YXRlPT09ImNvbXBsZXRlIilKMSgpfTtqLmFkZEV2ZW50TGlzdGVuZXIoImljZWdhdGhlcmluZ3N0YXRlY2hhbmdlIixZMSksSzE9d2luZG93LnNldFRpbWVvdXQoSjEsZVEpfSk7cmV0dXJuKGFzeW5jKCk9Pnt0cnl7QT1uZXcgUlRDUGVlckNvbm5lY3Rpb24oe2ljZVNlcnZlcnM6ZyxpY2VUcmFuc3BvcnRQb2xpY3k6YjR9KTtsZXQgaj1BLmFkZFRyYW5zY2VpdmVyKCJ2aWRlbyIse2RpcmVjdGlvbjoicmVjdm9ubHkifSksYT1SVENSdHBSZWNlaXZlci5nZXRDYXBhYmlsaXRpZXMoInZpZGVvIiksSzE9WD09PSJoMjY0Ij8idmlkZW8vSDI2NCI6WD09PSJ2cDkiPyJ2aWRlby9WUDkiOiJ2aWRlby9WUDgiO2lmKGE/LmNvZGVjcy5sZW5ndGgmJiJzZXRDb2RlY1ByZWZlcmVuY2VzImluIGope2xldCBFPUsxLnRvTG93ZXJDYXNlKCk7ai5zZXRDb2RlY1ByZWZlcmVuY2VzKFsuLi5hLmNvZGVjcy5maWx0ZXIoKGYpPT5mLm1pbWVUeXBlLnRvTG93ZXJDYXNlKCk9PT1FKSwuLi5hLmNvZGVjcy5maWx0ZXIoKGYpPT5mLm1pbWVUeXBlLnRvTG93ZXJDYXNlKCkhPT1FKV0pfUEub250cmFjaz0oRSk9PntpZihGKXJldHVybjtpZihPLmN1cnJlbnQ9ITEsRS50cmFjay5vbmVuZGVkPSgpPT5OMSgiV2ViUlRDIHZpZGVvIHRyYWNrIGVuZGVkLiIpLHEoRS5zdHJlYW1zWzBdPz9uZXcgTWVkaWFTdHJlYW0oW0UudHJhY2tdKSksVS5jdXJyZW50IT09dm9pZCAwKXdpbmRvdy5jbGVhclRpbWVvdXQoVS5jdXJyZW50KTtVLmN1cnJlbnQ9d2luZG93LnNldFRpbWVvdXQoKCk9PntpZihVLmN1cnJlbnQ9dm9pZCAwLEZ8fE8uY3VycmVudClyZXR1cm47bGV0IGY9QT8uY29ubmVjdGlvblN0YXRlPz8iY2xvc2VkIjtpZihyNSgiZmlyc3QtZnJhbWUtdGltZW91dCIsZik9PT0iY29kZWMiKVExKCk7ZWxzZSBOMSgiV2ViUlRDIGRpZCBub3QgZXN0YWJsaXNoIGEgdmlkZW8gcGF0aC4iKX0sSlopfSxBLm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlPSgpPT57aWYoRnx8IUF8fEEuY29ubmVjdGlvblN0YXRlIT09ImZhaWxlZCIpcmV0dXJuO2lmKHI1KCJjb25uZWN0aW9uLWZhaWxlZCIsQS5jb25uZWN0aW9uU3RhdGUpPT09InRyYW5zcG9ydCIpTjEoIldlYlJUQyBjb25uZWN0aW9uIGZhaWxlZC4iKX07bGV0IEwxPWF3YWl0IEEuY3JlYXRlT2ZmZXIoKTthd2FpdCBBLnNldExvY2FsRGVzY3JpcHRpb24oTDEpLGF3YWl0IGMoQSk7bGV0IEoxPUEubG9jYWxEZXNjcmlwdGlvbjtpZighSjEpdGhyb3cgRXJyb3IoIldlYlJUQyBvZmZlciB3YXMgbm90IGNyZWF0ZWQiKTtsZXQgWTE9YXdhaXQgeDQoe3VybDokLHNpZ25hbDp4LnNpZ25hbCxyZXF1ZXN0VGltZW91dE1zOiRaLGJ1c3lSZXRyeUludGVydmFsTXM6UVosYnVzeVJldHJ5Q291bnQ6WlosYm9keTpKU09OLnN0cmluZ2lmeSh7dHlwZTpKMS50eXBlLHNkcDpKMS5zZHAsc2Vzc2lvbklkOnMsY29kZWM6WCxpY2VTZXJ2ZXJzOmd9KX0pO2lmKCFZMS5vayl7YXdhaXQgWTEuYm9keT8uY2FuY2VsKCkscihgV2ViUlRDIG9mZmVyIGZhaWxlZDogSFRUUCAke1kxLnN0YXR1c31gKTtyZXR1cm59bGV0IEMxPWF3YWl0IFkxLmpzb24oKTtpZihGKXthd2FpdCB1KCEwKTtyZXR1cm59dHJ5e2F3YWl0IEEuc2V0UmVtb3RlRGVzY3JpcHRpb24oQzEpfWNhdGNoe3IoIldlYlJUQyByZXR1cm5lZCBhbiBpbnZhbGlkIHNlc3Npb24gZGVzY3JpcHRpb24uIil9fWNhdGNoKGope2lmKEZ8fHguc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2lmKGogaW5zdGFuY2VvZiB0Mil7cihqLm1lc3NhZ2UpO3JldHVybn1sZXQgYT1qIGluc3RhbmNlb2YgbjU/IldlYlJUQyBzaWduYWxpbmcgdGltZWQgb3V0LiI6IldlYlJUQyBzaWduYWxpbmcgZmFpbGVkLiI7aWYocjUoInNpZ25hbGluZy1mYWlsZWQiLEE/LmNvbm5lY3Rpb25TdGF0ZT8/ImNsb3NlZCIpPT09InRyYW5zcG9ydCIpTjEoYSl9fSkoKSwoKT0+e2lmKEY9ITAsd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixpKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixpKSx4LmFib3J0KCksYiE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KGIpO2lmKFUuY3VycmVudCE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KFUuY3VycmVudCksVS5jdXJyZW50PXZvaWQgMDt1KCEwKSxxKG51bGwpLEE/LmNsb3NlKCl9fSxbUSwkLEosWCxLLFZdKSx7c3RyZWFtOlksZmFpbHVyZTpHLGVycm9yOk4sbWFya0ZyYW1lRGVjb2RlZDpIfX1mdW5jdGlvbiBhNSgkLEosUSxYLEs9ImxlZnQiKXtsZXQgWT13KChDLFUpPT5LPT09ImxlZnQiP0MtVTpVLUMsW0tdKSxxPXcoKEMpPT5NYXRoLm1heChRLE1hdGgubWluKFgsQykpLFtRLFhdKSxbRyxCXT1NKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIEo7bGV0IEM9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCQpLFU9QyE9bnVsbD9OdW1iZXIoQyk6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoVSk/cShVKTpKfSksTj10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1pbihYLHdpbmRvdy5pbm5lcldpZHRoLTMyKTpYLEw9TWF0aC5tYXgoUSxNYXRoLm1pbihOLEcpKSxWPXcoKEMpPT57Qy5wcmV2ZW50RGVmYXVsdCgpO2xldCBVPUMuY2xpZW50WCxPPUwsej1DLmN1cnJlbnRUYXJnZXQ7ei5zZXRQb2ludGVyQ2FwdHVyZShDLnBvaW50ZXJJZCk7bGV0IEg9KEEpPT57bGV0IGI9cShPK1koVSxBLmNsaWVudFgpKTtCKGIpfSxGPShBKT0+e3oucmVsZWFzZVBvaW50ZXJDYXB0dXJlKEEucG9pbnRlcklkKSx6LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixIKSx6LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsRiksei5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixGKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCQsU3RyaW5nKHEoTytZKFUsQS5jbGllbnRYKSkpKX1jYXRjaHt9fTt6LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixIKSx6LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsRiksei5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixGKX0sW3EsWSxMLCRdKTtyZXR1cm57d2lkdGg6TCxvblBvaW50ZXJEb3duOlZ9fXZhciBZWj04MDAwO2Z1bmN0aW9uIHFaKCQpe3JldHVybiJmaWxlOi8vIiskLnNwbGl0KCIvIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbigiLyIpfWZ1bmN0aW9uIEdaKCQpe3JldHVybiAkIT09Im5vbmUifWZ1bmN0aW9uIGg0KHt0b2FzdDokLG9uUmV2ZWFsOkosb25EaXNtaXNzOlEsb25QYXVzZTpYLG9uUmVzdW1lOkt9KXtsZXQgWT1Cb29sZWFuKCQuZG93bmxvYWRVcmwmJiQuZG93bmxvYWROYW1lKSxxPUJvb2xlYW4oJC5wYXRoKSxbRyxCXT1NKCExKSxOPVQobnVsbCksTD1UKG51bGwpLFY9KCk9PntpZihMLmN1cnJlbnQpY2xlYXJUaW1lb3V0KEwuY3VycmVudCk7TC5jdXJyZW50PW51bGx9O3koKCk9PigpPT5WKCksW10pO2xldCBDPShPKT0+e2lmKCEkLnBhdGgpe08ucHJldmVudERlZmF1bHQoKTtyZXR1cm59VigpLFgoKSxMLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e0wuY3VycmVudD1udWxsLEIoITEpLEsoKX0sWVopLE8uZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLHFaKCQucGF0aCkpLE8uZGF0YVRyYW5zZmVyLnNldERhdGEoYzUsJC5wYXRoKSxPLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJjb3B5IjtsZXQgej1OLmN1cnJlbnQ7aWYoeilPLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2Uoeix6Lm9mZnNldFdpZHRoLzIsei5vZmZzZXRIZWlnaHQvMik7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5CKCEwKSl9LFU9KE8pPT57aWYoVigpLEIoITEpLEdaKE8uZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QpKVEoKTtlbHNlIEsoKX07cmV0dXJuIFooImRpdiIseyJkYXRhLXRlc3RpZCI6InNjcmVlbnNob3QtdG9hc3QiLGNsYXNzTmFtZToidy1bbWluKDMyMHB4LGNhbGMoMTAwdnctMzJweCkpXSIsb25Nb3VzZUVudGVyOlgsb25Nb3VzZUxlYXZlOkssY2hpbGRyZW46WyQudGh1bWImJlooImltZyIse3JlZjpOLCJkYXRhLXRlc3RpZCI6ImRyYWctaW1hZ2UiLHNyYzokLnRodW1iLGFsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIix0b3A6LTk5OTksbGVmdDowLHdpZHRoOjgwLGhlaWdodDo4MCxib3JkZXJSYWRpdXM6MTIsb2JqZWN0Rml0OiJjb3ZlciIscG9pbnRlckV2ZW50czoibm9uZSJ9fSksJC5zdGF0dXM9PT0iZXJyb3IiP1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMy41IHB5LTIuNSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQteGwgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0iLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgYmctWyNmODcxNzFdIn0pLFooInNwYW4iLHtjbGFzc05hbWU6InNlbGVjdC10ZXh0IixjaGlsZHJlbjokLm1lc3NhZ2U/PyJTY3JlZW5zaG90IGZhaWxlZCJ9KV19KTpaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6SixkaXNhYmxlZDokLnN0YXR1cyE9PSJzYXZlZCIsZHJhZ2dhYmxlOiQuc3RhdHVzPT09InNhdmVkIiYmcSxvbkRyYWdTdGFydDpDLG9uRHJhZ0VuZDpVLCJhcmlhLWxhYmVsIjpZPyJEb3dubG9hZCBzY3JlZW5zaG90IGFnYWluIjoiT3BlbiBzY3JlZW5zaG90IGluIEZpbmRlciIsdGl0bGU6WT8iRG93bmxvYWQgc2NyZWVuc2hvdCBhZ2FpbiI6IkNsaWNrIHRvIHJldmVhbCBpbiBGaW5kZXIgwrcgZHJhZyB0byBjb3B5IHRoZSBmaWxlIixjbGFzc05hbWU6YGdyb3VwIGZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBnYXAtMyBwbC0yIHByLTMuNSBweS0yIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC14bCBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0gdGV4dC1sZWZ0IGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6YmctWyMyYTJhMmNdIGRpc2FibGVkOmN1cnNvci1kZWZhdWx0IFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZV0gJHtHPyJpbnZpc2libGUiOiIifWAsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToic2l6ZS05IHJvdW5kZWQtbWQgb3ZlcmZsb3ctaGlkZGVuIGJnLXdoaXRlLzEwIHNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJpbmctMSByaW5nLXdoaXRlLzEwIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQudGh1bWI/WigiaW1nIix7c3JjOiQudGh1bWIsYWx0OiIiLGNsYXNzTmFtZToic2l6ZS1mdWxsIG9iamVjdC1jb3ZlciIsZHJhZ2dhYmxlOiExfSk6Wigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgc2l6ZS00IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMzAgYm9yZGVyLXQtd2hpdGUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSJ9KX0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBsZWFkaW5nLXRpZ2h0IHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUiLGNoaWxkcmVuOiQuc3RhdHVzPT09InNhdmluZyI/IlNhdmluZyBTY3JlZW5zaG904oCmIjoiU2NyZWVuc2hvdCBTYXZlZCJ9KSwkLnN0YXR1cz09PSJzYXZlZCImJlooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNjAiLGNoaWxkcmVuOlk/IkRvd25sb2FkIGFnYWluIjoiT3BlbiBpbiBGaW5kZXIifSldfSksJC5zdGF0dXM9PT0ic2F2ZWQiJiZaKHgyLHtjbGFzc05hbWU6Im1sLWF1dG8gdGV4dC13aGl0ZS84MCBwb2ludGVyLWV2ZW50cy1ub25lIixzaXplOjE2LHN0cm9rZVdpZHRoOjIuMjV9KV19KV19KX12YXIgVlo9bmV3IFNldChbImxvY2FsaG9zdCIsIjEyNy4wLjAuMSIsIjo6MSIsIls6OjFdIiwiMC4wLjAuMCJdKTtmdW5jdGlvbiBSNCgkKXtsZXQgSj0kLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXC4kLywiIik7cmV0dXJuIFZaLmhhcyhKKXx8Si5lbmRzV2l0aCgiLmxvY2FsaG9zdCIpfWFzeW5jIGZ1bmN0aW9uIEJaKCQpe3RyeXtsZXQgSj1hd2FpdCAkLmpzb24oKTtpZih0eXBlb2YgSi5lcnJvcj09PSJzdHJpbmciJiZKLmVycm9yLnRyaW0oKSlyZXR1cm4gSi5lcnJvci50cmltKCl9Y2F0Y2h7fXJldHVybmBTY3JlZW5zaG90IGZhaWxlZCAoJHskLnN0YXR1c30pYH1hc3luYyBmdW5jdGlvbiBnNCgkLEo9e30pe2xldCBRPUouZW5kcG9pbnQ/P2oxKCJhcGkvc2NyZWVuc2hvdCIpLFg9US5pbmNsdWRlcygiPyIpPyImIjoiPyIsWT1hd2FpdChKLmZldGNoSW1wbD8/ZmV0Y2gpKGAke1F9JHtYfWRldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gLHttZXRob2Q6IlBPU1QiLHNpZ25hbDpKLnNpZ25hbH0pO2lmKCFZLm9rKXRocm93IEVycm9yKGF3YWl0IEJaKFkpKTtpZihZLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKT8uc3BsaXQoIjsiLDEpWzBdPy50cmltKCk/LnRvTG93ZXJDYXNlKCkhPT0iaW1hZ2UvcG5nIil0aHJvdyBFcnJvcigiU2NyZWVuc2hvdCBlbmRwb2ludCBkaWQgbm90IHJldHVybiBhIFBORyIpO3JldHVybiBZLmJsb2IoKX1mdW5jdGlvbiBxOCgkLEope2xldCBRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtRLmhyZWY9JCxRLmRvd25sb2FkPUosUS5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFEpLFEuY2xpY2soKSxRLnJlbW92ZSgpfXZhciBHOD0zNTAwLGY0PTQwMDAsTlo9MWU0O2Z1bmN0aW9uIExaKCl7cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bOi5dL2csIi0iKS5zbGljZSgwLDIzKX1mdW5jdGlvbiBtNCgkKXtsZXQgSj1UKG51bGwpLFE9VChudWxsKSxYPVQobnVsbCksSz1UKG51bGwpLFk9VChudWxsKSxxPVQoITEpLEc9dygoKT0+e2lmKFguY3VycmVudCljbGVhclRpbWVvdXQoWC5jdXJyZW50KTtYLmN1cnJlbnQ9bnVsbCxLLmN1cnJlbnQ9bnVsbH0sW10pLEI9dygoeik9PntsZXQgSD16Pz9RLmN1cnJlbnQ/P3ZvaWQgMDtpZihHKCksWS5jdXJyZW50PW51bGwscjIuZGlzbWlzcyhIKSxIPT09dm9pZCAwfHxRLmN1cnJlbnQ9PT1TdHJpbmcoSCkpe2xldCBGPUouY3VycmVudD8uZG93bmxvYWRVcmw7aWYoRilVUkwucmV2b2tlT2JqZWN0VVJMKEYpO0ouY3VycmVudD1udWxsLFEuY3VycmVudD1udWxsfX0sW0ddKSxOPXcoKCk9PntsZXQgej1KLmN1cnJlbnQ7aWYoej8ucGF0aClFMShgb3BlbiAtUiAke2sxKHoucGF0aCl9YCk7ZWxzZSBpZih6Py5kb3dubG9hZFVybCYmei5kb3dubG9hZE5hbWUpcTgoei5kb3dubG9hZFVybCx6LmRvd25sb2FkTmFtZSl9LFtdKSxMPXcoKHopPT57RygpO2xldCBIPU1hdGgubWF4KDAseiksRj1RLmN1cnJlbnQ7WS5jdXJyZW50PUgsSy5jdXJyZW50PURhdGUubm93KCkrSCxYLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+QihGPz92b2lkIDApLEgpfSxbRyxCXSksVj13KCgpPT57aWYoIVguY3VycmVudHx8Sy5jdXJyZW50PT1udWxsKXJldHVybjtZLmN1cnJlbnQ9TWF0aC5tYXgoMCxLLmN1cnJlbnQtRGF0ZS5ub3coKSksRygpfSxbR10pLEM9dygoKT0+e2xldCB6PVkuY3VycmVudDtpZih6PT1udWxsKXJldHVybjtMKHopfSxbTF0pLFU9dygoeixIPTEvMCk9PntpZihKLmN1cnJlbnQ9eixRLmN1cnJlbnQ9ei5pZCxyMi5jdXN0b20oKEYpPT5aKGg0LHt0b2FzdDp6LG9uUmV2ZWFsOk4sb25EaXNtaXNzOigpPT5CKEYpLG9uUGF1c2U6VixvblJlc3VtZTpDfSkse2lkOnouaWQsZHVyYXRpb246MS8wfSksTnVtYmVyLmlzRmluaXRlKEgpKUwoSCk7ZWxzZSBHKCksWS5jdXJyZW50PW51bGx9LFtHLEIsVixDLE4sTF0pO3JldHVybntjYXB0dXJlOncoYXN5bmMoKT0+e2lmKCEkfHxxLmN1cnJlbnQpcmV0dXJuO3EuY3VycmVudD0hMDtsZXQgej1jcnlwdG8ucmFuZG9tVVVJRCgpO1Uoe2lkOnosc3RhdHVzOiJzYXZpbmciLHBoYXNlOiJpbiJ9KTtsZXQgSD1gc2VydmUtc2ltLXNjcmVlbnNob3QtJHtMWigpfS5wbmdgLEY9bmV3IEFib3J0Q29udHJvbGxlcixBPXNldFRpbWVvdXQoKCk9PntGLmFib3J0KEVycm9yKCJTY3JlZW5zaG90IHRpbWVkIG91dCIpKX0sTlopO3RyeXtpZighUjQod2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKSl7bGV0IGc9YXdhaXQgZzQoJCx7c2lnbmFsOkYuc2lnbmFsfSksdT1VUkwuY3JlYXRlT2JqZWN0VVJMKGcpO3E4KHUsSCksVSh7aWQ6eixzdGF0dXM6InNhdmVkIixwaGFzZToiaW4iLGRvd25sb2FkVXJsOnUsZG93bmxvYWROYW1lOkgsdGh1bWI6dX0sRzgpO3JldHVybn1sZXQgRD1gRj0iJHtgJEhPTUUvRGVza3RvcC8ke0h9YH0iOyB4Y3J1biBzaW1jdGwgaW8gJHtrMSgkKX0gc2NyZWVuc2hvdCAiJEYiICYmIHByaW50ZiAnJXMnICIkRiJgLFM9YXdhaXQgRTEoRCx7c2lnbmFsOkYuc2lnbmFsfSkseD1TLnN0ZG91dC50cmltKCk7aWYoUy5leGl0Q29kZSE9PTB8fCF4KXtVKHtpZDp6LHN0YXR1czoiZXJyb3IiLHBoYXNlOiJpbiIsbWVzc2FnZTpTLnN0ZGVyci50cmltKCl8fCJTY3JlZW5zaG90IGZhaWxlZCJ9LGY0KTtyZXR1cm59VSh7aWQ6eixzdGF0dXM6InNhdmVkIixwaGFzZToiaW4iLHBhdGg6eH0sRzgpO2xldCBzPWAvdG1wL3NlcnZlLXNpbS1zY3JlZW5zaG90LXRodW1iLSR7en0ucG5nYDt0cnl7bGV0IHU9KGF3YWl0IEUxKGBzaXBzIC1aIDMyMCAke2sxKHgpfSAtLW91dCAke2sxKHMpfSA+L2Rldi9udWxsIDI+JjEgJiYgYmFzZTY0IC1pICR7azEocyl9OyBybSAtZiAke2sxKHMpfWAse3NpZ25hbDpGLnNpZ25hbH0pKS5zdGRvdXQucmVwbGFjZSgvXHMrL2csIiIpO2lmKHUpe2xldCBpPUouY3VycmVudDtpZihpPy5pZD09PXopVSh7Li4uaSx0aHVtYjpgZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7dX1gfSxHOCl9fWNhdGNoe319Y2F0Y2goYil7VSh7aWQ6eixzdGF0dXM6ImVycm9yIixwaGFzZToiaW4iLG1lc3NhZ2U6YiBpbnN0YW5jZW9mIEVycm9yP2IubWVzc2FnZToiU2NyZWVuc2hvdCBmYWlsZWQifSxmNCl9ZmluYWxseXtjbGVhclRpbWVvdXQoQSkscS5jdXJyZW50PSExfX0sWyQsVV0pLHJldmVhbDpOLGRpc21pc3M6Qn19ZnVuY3Rpb24gdTQoe2RlZmF1bHRXaWR0aDokLHZpZXdwb3J0V2lkdGg6Six2aWV3cG9ydEhlaWdodDpRLGFzcGVjdFJhdGlvOlgsb25TdGFydDpLfSl7bGV0IFk9ZzUoKSxbcSxHXT1NKCExKSxbQixOXT1NKCExKSxbTCxWXT1NKCExKSxDPVQobnVsbCksVT1UKFtdKSxPPVQobnVsbCksej1UKG51bGwpLEg9VChudWxsKSxGPVQobnVsbCksQT13KCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuICQ7bGV0IF89TmFOO3RyeXtsZXQgcD13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0obDMpO189cCE9bnVsbD9OdW1iZXIocCk6TmFOfWNhdGNoe31yZXR1cm4gSTYoJCxKLFEsWCxfKX0sW1gsJCxRLEpdKSxiPVQxKCgpPT5BKCksW0FdKSxbRCxTXT1NKGIpLHg9VChiKSxzPVQoJCksZz1kMygkLEosUSxYKSx1PU1hdGgubWluKEI2LGcpLGk9RD8/JCxvPWEwKGksJCxKLFEsWCkscj13KChfKT0+e2xldCBwPXA1KF8pO3guY3VycmVudD1wLFMocCl9LFtdKSxRMT13KChfKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwkPD0wKXJldHVybjtsZXQgcD1hMChfLCQsSixRLFgpO3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0obDMsU3RyaW5nKHAvJCkpfWNhdGNoe319LFtYLCQsUSxKXSksTjE9dygoXyk9PntpZihILmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KEguY3VycmVudCk7SC5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntILmN1cnJlbnQ9bnVsbCxRMShfKX0sVDYpfSxbUTFdKTt5KCgpPT57aWYocXx8QilyZXR1cm47bGV0IF89eC5jdXJyZW50O2lmKF89PW51bGwpcmV0dXJuO2xldCBwPWEwKF8sJCxKLFEsWCk7aWYocCE9PV8pcihwKX0sW1gsJCxCLHEsUSxKLHJdKSx5KCgpPT57aWYocy5jdXJyZW50PT09JClyZXR1cm47cy5jdXJyZW50PSQscihBKCkpfSxbJCxBLHJdKSx5KCgpPT57aWYoIXEmJiFCKXJldHVybjtsZXQgXz1kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcixwPWRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCxsPWRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdDtyZXR1cm4gZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9Im53c2UtcmVzaXplIixkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9Im5vbmUiLGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD0ibm9uZSIsKCk9Pntkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj1fLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD1wLGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD1sfX0sW3EsQl0pLHkoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IF89KCk9PntsZXQgbD14LmN1cnJlbnQ7aWYobD09bnVsbClyZXR1cm47aWYoSC5jdXJyZW50IT1udWxsKWNsZWFyVGltZW91dChILmN1cnJlbnQpLEguY3VycmVudD1udWxsO1ExKGwpfSxwPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpXygpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixfKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixwKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsXyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIscCl9fSxbUTFdKTtsZXQgYz13KChfKT0+e2lmKF8+ZylyZXR1cm4gZytjMyhfLWcsZyk7aWYoXzx1KXJldHVybiB1LWMzKHUtXyxnKTtyZXR1cm4gX30sW2csdV0pLGo9dygoKT0+e2lmKHouY3VycmVudCl6LmN1cnJlbnQoKSx6LmN1cnJlbnQ9bnVsbDtOKCExKX0sW10pLGE9dygoXyk9PntsZXQgcD1wZXJmb3JtYW5jZS5ub3coKSxsPVUuY3VycmVudDtsLnB1c2goe3Q6cCx4Ol99KTt3aGlsZShsLmxlbmd0aD4xJiZwLWxbMF0udD53NilsLnNoaWZ0KCl9LFtdKSxLMT13KChfKT0+e2xldCBwPWMoXyk7aWYoTy5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKE8uY3VycmVudCk7Ty5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e08uY3VycmVudD1udWxsLHIocCksYShwKX0pfSxbYyxhLHJdKSxMMT13KChfLHAsbCk9PntqKCk7bGV0IHY9eC5jdXJyZW50Pz8kO0MuY3VycmVudD17cG9pbnRlcklkOl8sc3RhcnRYOnAsc3RhcnRZOmwsc3RhcnRXaWR0aDp2fSxVLmN1cnJlbnQ9W3t0OnBlcmZvcm1hbmNlLm5vdygpLHg6dn1dLEsoKSxHKCEwKX0sW2osJCxLXSksSjE9dygoKT0+e2xldCBfPUMuY3VycmVudDtpZihDLmN1cnJlbnQ9bnVsbCxPLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoTy5jdXJyZW50KSxPLmN1cnJlbnQ9bnVsbDtpZihfJiZfLnBvaW50ZXJJZD49MCl7bGV0IE0xPUYuY3VycmVudDtpZihNMT8uaGFzUG9pbnRlckNhcHR1cmUoXy5wb2ludGVySWQpKU0xLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShfLnBvaW50ZXJJZCl9RyghMSk7bGV0IHA9eC5jdXJyZW50Pz8kLGw9YjYoVS5jdXJyZW50KTtVLmN1cnJlbnQ9W107bGV0IHY9YTAocCtsKkQ2LCQsSixRLFgpLEcxPXA1KEU2KHYsWyRdLFc2KSksejE9TWF0aC5hYnMocC1HMSk8MC41JiZNYXRoLmFicyhsKTw4O2lmKFl8fHoxKXtyKEcxKSxOMShHMSk7cmV0dXJufU4oITApLHouY3VycmVudD15Nih7ZnJvbTpwLHRvOkcxLHZlbG9jaXR5Omwsc3RpZmZuZXNzOl82LGRhbXBpbmc6UDYsb25VcGRhdGU6cixvbkNvbXBsZXRlOigpPT57ei5jdXJyZW50PW51bGwsTighMSksTjEoRzEpfX0pfSxbWCwkLFksTjEsUSxKLHJdKTt5KCgpPT57cmV0dXJuKCk9PntpZihqKCksTy5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKE8uY3VycmVudCk7aWYoSC5jdXJyZW50IT1udWxsKXtpZihjbGVhclRpbWVvdXQoSC5jdXJyZW50KSx4LmN1cnJlbnQhPW51bGwpUTEoeC5jdXJyZW50KX19fSxbaixRMV0pLHkoKCk9PntpZighcSlyZXR1cm47bGV0IF89KCk9PkoxKCkscD0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKUoxKCl9LGw9KHYpPT57bGV0IEcxPUMuY3VycmVudDtpZighRzF8fEcxLnBvaW50ZXJJZCE9PXYucG9pbnRlcklkKXJldHVybjt2LnByZXZlbnREZWZhdWx0KCksSzEocDQoRzEsdi5jbGllbnRYLHYuY2xpZW50WSxYKSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsXyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixsLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixfLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsXywhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIscCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsXyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixsLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixfLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsXywhMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIscCl9fSxbWCxKMSxxLEsxXSk7bGV0IFkxPXcoKF8pPT57bGV0IHA9Qy5jdXJyZW50O2lmKCFwfHxwLnBvaW50ZXJJZCE9PV8ucG9pbnRlcklkKXJldHVybjtfLnByZXZlbnREZWZhdWx0KCksXy5zdG9wUHJvcGFnYXRpb24oKSxKMSgpfSxbSjFdKSxDMT13KChfKT0+e2lmKF8uYnV0dG9uIT09MClyZXR1cm47Xy5wcmV2ZW50RGVmYXVsdCgpLF8uc3RvcFByb3BhZ2F0aW9uKCksXy5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKF8ucG9pbnRlcklkKSxMMShfLnBvaW50ZXJJZCxfLmNsaWVudFgsXy5jbGllbnRZKX0sW0wxXSksRT13KChfKT0+e2xldCBwPUMuY3VycmVudDtpZighcHx8cC5wb2ludGVySWQhPT1fLnBvaW50ZXJJZClyZXR1cm47Xy5wcmV2ZW50RGVmYXVsdCgpLEsxKHA0KHAsXy5jbGllbnRYLF8uY2xpZW50WSxYKSl9LFtYLEsxXSksZj13KChfKT0+e2xldCBwPV8ua2V5PT09IkFycm93UmlnaHQifHxfLmtleT09PSJBcnJvd0Rvd24iPzE6Xy5rZXk9PT0iQXJyb3dMZWZ0Inx8Xy5rZXk9PT0iQXJyb3dVcCI/LTE6MDtpZihwPT09MClyZXR1cm47Xy5wcmV2ZW50RGVmYXVsdCgpLGooKTtsZXQgbD1fLnNoaWZ0S2V5PzgwOjI0LHY9cDUoYTAobytwKmwsJCxKLFEsWCkpO3IodiksTjEodil9LFtYLGosbywkLE4xLFEsSixyXSk7cmV0dXJue2hhbmRsZVJlZjpGLHdpZHRoOmksY29tbWl0dGVkV2lkdGg6byxtaW5XaWR0aDp1LG1heFdpZHRoOmcsaXNSZXNpemluZzpxLGlzSW5lcnRpYTpCLGhhbmRsZUhvdmVyZWQ6TCxoYW5kbGVBY3RpdmU6THx8cXx8QixzZXRIYW5kbGVIb3ZlcmVkOlYsb25Qb2ludGVyRG93bjpDMSxvblBvaW50ZXJNb3ZlOkUsb25Qb2ludGVyRW5kOlkxLG9uS2V5RG93bjpmfX1mdW5jdGlvbiBwNCgkLEosUSxYKXtsZXQgSz1KLSQuc3RhcnRYLFk9KFEtJC5zdGFydFkpKlg7cmV0dXJuICQuc3RhcnRXaWR0aCsoTWF0aC5hYnMoSyk+PU1hdGguYWJzKFkpP0s6WSl9ZnVuY3Rpb24gbDQoKXtsZXQgJD1UKG5ldyBNYXApLEo9VChuZXcgTWFwKSxRPXcoKEcpPT57bGV0IEI9Si5jdXJyZW50LmdldChHKTtpZihCKWNsZWFyVGltZW91dChCKTtKLmN1cnJlbnQuZGVsZXRlKEcpfSxbXSksWD13KChHLEI9MS8wKT0+e3IyLmN1c3RvbSgoKT0+WihmNix7dG9hc3Q6R30pLHtpZDpHLmlkLGR1cmF0aW9uOkJ9KX0sW10pLEs9dygoRyxCKT0+e2xldCBOPWNyeXB0by5yYW5kb21VVUlEKCksTD17aWQ6TixuYW1lOkcsa2luZDpCLHN0YXR1czoidXBsb2FkaW5nIixwcm9ncmVzczowfTtyZXR1cm4gJC5jdXJyZW50LnNldChOLEwpLFgoTCksTn0sW1hdKSxZPXcoKEcsQik9PntsZXQgTj0kLmN1cnJlbnQuZ2V0KEcpO2lmKCFOKXJldHVybjtRKEcpO2xldCBMPXsuLi5OLC4uLkJ9O2lmKCQuY3VycmVudC5zZXQoRyxMKSxYKEwsQi5zdGF0dXM9PT0ic3VjY2VzcyJ8fEIuc3RhdHVzPT09ImVycm9yIj8zMDAwOjEvMCksQi5zdGF0dXM9PT0ic3VjY2VzcyJ8fEIuc3RhdHVzPT09ImVycm9yIil7bGV0IFY9c2V0VGltZW91dCgoKT0+eyQuY3VycmVudC5kZWxldGUoRyksSi5jdXJyZW50LmRlbGV0ZShHKX0sMzAwMCk7Si5jdXJyZW50LnNldChHLFYpfX0sW1EsWF0pLHE9dygoRyxCKT0+e2xldCBOPSQuY3VycmVudC5nZXQoRyk7aWYoIU4pcmV0dXJuO2xldCBMPXsuLi5OLHByb2dyZXNzOkJ9OyQuY3VycmVudC5zZXQoRyxMKSxYKEwpfSxbWF0pO3JldHVybnthZGQ6Syx1cGRhdGU6WSxzZXRQcm9ncmVzczpxfX1mdW5jdGlvbiBkNCgkLEope2xldFtRLFhdPU0oW10pLFtLLFldPU0obnVsbCksW3EsR109TSghMSksQj13KGFzeW5jKCk9PntpZighJClyZXR1cm47RyghMCksWShudWxsKTt0cnl7bGV0IE49YXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pLEw9YXdhaXQgTi5qc29uKCk7aWYoIU4ub2t8fEwuZXJyb3IpdGhyb3cgRXJyb3IoTC5lcnJvcnx8IkZhaWxlZCB0byBsaXN0IFdlYktpdCB0YXJnZXRzIik7bGV0IFY9dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3cubG9jYXRpb24sQz1MLnRhcmdldHM/P1tdO1goVj9DLm1hcCgoVSk9Pk00KFUsVikpOkMpfWNhdGNoKE4pe1koTiBpbnN0YW5jZW9mIEVycm9yP04ubWVzc2FnZToiRmFpbGVkIHRvIHN0YXJ0IFdlYktpdCBEZXZUb29scyIpfWZpbmFsbHl7RyghMSl9fSxbJF0pO3JldHVybiB5KCgpPT57aWYoIUopcmV0dXJuO0IoKTtsZXQgTj1zZXRJbnRlcnZhbCgoKT0+dm9pZCBCKCksMjUwMCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwoTil9LFtKLEJdKSx7dGFyZ2V0czpRLGVycm9yOkssbG9hZGluZzpxLHJlZnJlc2g6Qn19dmFyIHpaPTYwLFVaPTEwMDA7ZnVuY3Rpb24gYzQoJCxKLFEsWD16Wil7bGV0W0ssWV09TShudWxsKSxbcSxHXT1NKDApLFtCLE5dPU0oWCksW0wsVl09TSgwKTt5KCgpPT57aWYoIUp8fCEkKXJldHVybjtsZXQgRj0hMSxBPSQuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iLGI9YXN5bmMoKT0+e3RyeXtsZXQgeD1hd2FpdChhd2FpdCBmZXRjaChgJHskfSR7QX1saW1pdD0ke0J9Jm9mZnNldD0wYCx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCk7aWYoRilyZXR1cm47aWYoWSh4LmRldmljZXM/P1tdKSx0eXBlb2YgeC50b3RhbD09PSJudW1iZXIiKUcoeC50b3RhbCl9Y2F0Y2h7aWYoIUYpWShbXSl9fTtiKCk7bGV0IEQ9c2V0SW50ZXJ2YWwoYixRPzc1MDozMDAwKTtyZXR1cm4oKT0+e0Y9ITAsY2xlYXJJbnRlcnZhbChEKX19LFskLEosTCxRLEJdKTtsZXQgQz13KCgpPT5WKChGKT0+RisxKSxbXSksVT13KCgpPT5OKChGKT0+RitYKSxbWF0pLE89dygoKT0+TihVWiksW10pLHo9dygoKT0+TihYKSxbWF0pLEg9cT4oSz8ubGVuZ3RoPz8wKTtyZXR1cm57ZGV2aWNlczpLLHRvdGFsOnEscmVmcmVzaDpDLGxvYWRNb3JlOlUsbG9hZEFsbDpPLHJlc2V0UGFnZTp6LGhhc01vcmU6SH19dmFyIG80PXttanBlZ0Zwczo2MCxtanBlZ1F1YWxpdHk6MC43LG1heERpbWVuc2lvbjowLGgyNjRCaXRyYXRlOjYwMDAwMDAsaDI2NEZwczo2MH0sSFo9e3RyYW5zcG9ydDoiaHR0cCIsaHR0cENvZGVjOiJhdXRvIix3ZWJSdGNDb2RlYzoiaDI2NCIsLi4ubzR9O2Z1bmN0aW9uIENaKCQpe3JldHVybiB0eXBlb2YgJD09PSJudW1iZXIiJiZOdW1iZXIuaXNGaW5pdGUoJCk/JDpudWxsfWZ1bmN0aW9uIHI0KCQsSixRLFgpe2xldCBLPUNaKCQpO3JldHVybiBLPT1udWxsP0o6TWF0aC5taW4oWCxNYXRoLm1heChRLEspKX1mdW5jdGlvbiBzNSgkLEosUSxYKXtyZXR1cm4gTWF0aC5yb3VuZChyNCgkLEosUSxYKSl9ZnVuY3Rpb24gRlooJCl7aWYoIUFycmF5LmlzQXJyYXkoJCl8fCQubGVuZ3RoPjE2KXJldHVybiBudWxsO2xldCBKPVtdO2ZvcihsZXQgUSBvZiAkKXtpZighUXx8dHlwZW9mIFEhPT0ib2JqZWN0IilyZXR1cm4gbnVsbDtsZXQgWD1RLnVybHM7aWYoIUFycmF5LmlzQXJyYXkoWCl8fFgubGVuZ3RoPT09MHx8WC5sZW5ndGg+MTZ8fCFYLmV2ZXJ5KChxKT0+dHlwZW9mIHE9PT0ic3RyaW5nIiYmcS5sZW5ndGg8PTIwNDgmJi9eKHN0dW58c3R1bnN8dHVybnx0dXJucyk6L2kudGVzdChxKSkpcmV0dXJuIG51bGw7bGV0e3VzZXJuYW1lOkssY3JlZGVudGlhbDpZfT1RO2lmKEshPT12b2lkIDAmJnR5cGVvZiBLIT09InN0cmluZyIpcmV0dXJuIG51bGw7aWYoWSE9PXZvaWQgMCYmdHlwZW9mIFkhPT0ic3RyaW5nIilyZXR1cm4gbnVsbDtKLnB1c2goe3VybHM6WCwuLi50eXBlb2YgSz09PSJzdHJpbmciP3t1c2VybmFtZTpLfTp7fSwuLi50eXBlb2YgWT09PSJzdHJpbmciP3tjcmVkZW50aWFsOll9Ont9fSl9cmV0dXJuIEp9ZnVuY3Rpb24gVjgoJD17fSxKPUhaKXtsZXQgWD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJCwiaWNlU2VydmVycyIpP0ZaKCQuaWNlU2VydmVycyk6Si5pY2VTZXJ2ZXJzLEs9WD09PW51bGw/Si5pY2VTZXJ2ZXJzOlgmJlgubGVuZ3RoPjA/WDp2b2lkIDA7cmV0dXJue3RyYW5zcG9ydDokLnRyYW5zcG9ydD09PSJodHRwInx8JC50cmFuc3BvcnQ9PT0id2VicnRjIj8kLnRyYW5zcG9ydDpKLnRyYW5zcG9ydCxodHRwQ29kZWM6JC5odHRwQ29kZWM9PT0iYXV0byJ8fCQuaHR0cENvZGVjPT09Im1qcGVnInx8JC5odHRwQ29kZWM9PT0iaDI2NCI/JC5odHRwQ29kZWM6Si5odHRwQ29kZWMsd2ViUnRjQ29kZWM6JC53ZWJSdGNDb2RlYz09PSJ2cDgifHwkLndlYlJ0Y0NvZGVjPT09InZwOSJ8fCQud2ViUnRjQ29kZWM9PT0iaDI2NCI/JC53ZWJSdGNDb2RlYzpKLndlYlJ0Y0NvZGVjLC4uLks/e2ljZVNlcnZlcnM6S306e30sLi4uZTIoJCxKKX19ZnVuY3Rpb24gZTIoJD17fSxKPW80KXtyZXR1cm57bWpwZWdGcHM6czUoJC5tanBlZ0ZwcyxKLm1qcGVnRnBzLDEsMTIwKSxtanBlZ1F1YWxpdHk6cjQoJC5tanBlZ1F1YWxpdHksSi5tanBlZ1F1YWxpdHksMC4wNSwxKSxtYXhEaW1lbnNpb246czUoJC5tYXhEaW1lbnNpb24sSi5tYXhEaW1lbnNpb24sMCw0MDk2KSxoMjY0Qml0cmF0ZTpzNSgkLmgyNjRCaXRyYXRlLEouaDI2NEJpdHJhdGUsMWU1LDUwMDAwMDAwKSxoMjY0RnBzOnM1KCQuaDI2NEZwcyxKLmgyNjRGcHMsMSwxMjApfX1mdW5jdGlvbiAkNSgkKXtyZXR1cm57bWpwZWdGcHM6JC5tanBlZ0ZwcyxtanBlZ1F1YWxpdHk6JC5tanBlZ1F1YWxpdHksbWF4RGltZW5zaW9uOiQubWF4RGltZW5zaW9uLGgyNjRCaXRyYXRlOiQuaDI2NEJpdHJhdGUsaDI2NEZwczokLmgyNjRGcHN9fWZ1bmN0aW9uIGk0KCQpe2xldCBKPSQ/e21qcGVnRnBzOiQubWpwZWdGcHMsbWpwZWdRdWFsaXR5OiQubWpwZWdRdWFsaXR5LG1heERpbWVuc2lvbjokLm1heERpbWVuc2lvbixoMjY0Qml0cmF0ZTokLmgyNjRCaXRyYXRlLGgyNjRGcHM6JC5oMjY0RnBzfTp7fTtpZigkPy50cmFuc3BvcnQ9PT0id2VicnRjIilyZXR1cm4gVjgoe3RyYW5zcG9ydDoid2VicnRjIix3ZWJSdGNDb2RlYzokLmNvZGVjLGljZVNlcnZlcnM6JC5pY2VTZXJ2ZXJzLC4uLkp9KTtyZXR1cm4gVjgoe3RyYW5zcG9ydDoiaHR0cCIsaHR0cENvZGVjOiQ/LmNvZGVjPz8iYXV0byIsLi4uSn0pfWZ1bmN0aW9uIEI4KCQsSil7cmV0dXJuIFY4KHsuLi4kLC4uLkp9LCQpfWZ1bmN0aW9uIEo1KCQsSil7bGV0IFE9JDUoJCksWD1lMih7Li4uUSwuLi5KfSxRKTtpZihYLm1qcGVnRnBzPT09US5tanBlZ0ZwcyYmWC5tanBlZ1F1YWxpdHk9PT1RLm1qcGVnUXVhbGl0eSYmWC5tYXhEaW1lbnNpb249PT1RLm1heERpbWVuc2lvbiYmWC5oMjY0Qml0cmF0ZT09PVEuaDI2NEJpdHJhdGUmJlguaDI2NEZwcz09PVEuaDI2NEZwcylyZXR1cm4gJDtyZXR1cm57Li4uJCwuLi5YfX12YXIgYTQ9InNlcnZlLXNpbTpjb2RlYyIsT1o9MzAwMDtmdW5jdGlvbiBuNCgkKXtsZXQgSj1pNCgkKTtpZihKLnRyYW5zcG9ydCE9PSJodHRwInx8Si5odHRwQ29kZWMhPT0iYXV0byIpcmV0dXJuIEo7dHJ5e2xldCBRPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShhNCk7aWYoUT09PSJhdXRvInx8UT09PSJtanBlZyJ8fFE9PT0iaDI2NCIpcmV0dXJuIEI4KEose2h0dHBDb2RlYzpRfSl9Y2F0Y2h7fXJldHVybiBKfWZ1bmN0aW9uIHM0KHtkZXZpY2U6JCxlbmRwb2ludDpKLGluaXRpYWxTZXR0aW5nczpRfSl7bGV0W1gsS109TSgoKT0+bjQoUSkpLFtZLHFdPU0oITEpLEc9VChYKSxCPVQoITEpLE49VCgwKSxMPVQobnVsbCksVj1UKG51bGwpO3koKCk9PnsrK04uY3VycmVudDtsZXQgTz1uNChRKTtpZihMLmN1cnJlbnQ/LmFib3J0KCksVi5jdXJyZW50Py5hYm9ydCgpLEwuY3VycmVudD1udWxsLFYuY3VycmVudD1udWxsLEcuY3VycmVudD1PLEIuY3VycmVudD0hMSxLKE8pLHEoITEpLCFKKXJldHVybjtsZXQgej0hMSxIPSExLEY9YXN5bmMoKT0+e2lmKHp8fEIuY3VycmVudHx8TC5jdXJyZW50KXJldHVybjtsZXQgRD0rK04uY3VycmVudCxTPW5ldyBBYm9ydENvbnRyb2xsZXI7TC5jdXJyZW50PVM7dHJ5e2xldCB4PWF3YWl0IGZldGNoKEose2NhY2hlOiJuby1zdG9yZSIsc2lnbmFsOlMuc2lnbmFsfSk7aWYoIXgub2spdGhyb3cgRXJyb3IoYFN0cmVhbSBzZXR0aW5ncyByZXF1ZXN0IGZhaWxlZCAoJHt4LnN0YXR1c30pYCk7bGV0IHM9ZTIoYXdhaXQgeC5qc29uKCksJDUoRy5jdXJyZW50KSk7aWYoIVMuc2lnbmFsLmFib3J0ZWQmJk4uY3VycmVudD09PUQpe2xldCBnPUcuY3VycmVudCx1PUo1KGcscyk7aWYodSE9PWcpRy5jdXJyZW50PXUsSyh1KX1IPSExfWNhdGNoKHgpe2lmKCFTLnNpZ25hbC5hYm9ydGVkJiYhSClIPSEwLGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGxvYWQgc3RyZWFtIHNldHRpbmdzIix4KX1maW5hbGx5e2lmKEwuY3VycmVudD09PVMpTC5jdXJyZW50PW51bGx9fTtGKCk7bGV0IEE9KCk9PntpZih0eXBlb2YgZG9jdW1lbnQ+InUifHxkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUhPT0iaGlkZGVuIilGKCl9LGI9c2V0SW50ZXJ2YWwoQSxPWik7aWYodHlwZW9mIHdpbmRvdzwidSIpd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixBKTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEEpO3JldHVybigpPT57aWYoej0hMCxjbGVhckludGVydmFsKGIpLHR5cGVvZiB3aW5kb3c8InUiKXdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsQSk7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixBKTtMLmN1cnJlbnQ/LmFib3J0KCksVi5jdXJyZW50Py5hYm9ydCgpLEwuY3VycmVudD1udWxsLFYuY3VycmVudD1udWxsfX0sWyQsSixRXSk7bGV0IEM9dygoTyk9PntpZihPLmh0dHBDb2RlYyE9PXZvaWQgMCl0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGE0LE8uaHR0cENvZGVjKX1jYXRjaHt9bGV0IHo9QjgoRy5jdXJyZW50LE8pO0cuY3VycmVudD16LEsoeil9LFtdKSxVPXcoKE8pPT57aWYoIUp8fEIuY3VycmVudHx8T2JqZWN0LmtleXMoTykubGVuZ3RoPT09MClyZXR1cm47bGV0IHo9Ry5jdXJyZW50LEg9SjUoeixPKTtHLmN1cnJlbnQ9SCxLKEgpLEwuY3VycmVudD8uYWJvcnQoKSxMLmN1cnJlbnQ9bnVsbDtsZXQgRj0rK04uY3VycmVudCxBPW5ldyBBYm9ydENvbnRyb2xsZXI7Vi5jdXJyZW50PUEsQi5jdXJyZW50PSEwLHEoITApLGZldGNoKEose21ldGhvZDoiUEFUQ0giLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeShPKSxzaWduYWw6QS5zaWduYWx9KS50aGVuKGFzeW5jKGIpPT57aWYoIWIub2spdGhyb3cgRXJyb3IoYFN0cmVhbSBzZXR0aW5ncyB1cGRhdGUgZmFpbGVkICgke2Iuc3RhdHVzfSlgKTtsZXQgRD1lMihhd2FpdCBiLmpzb24oKSwkNShIKSk7aWYoIUEuc2lnbmFsLmFib3J0ZWQmJk4uY3VycmVudD09PUYpe2xldCBTPUo1KEcuY3VycmVudCxEKTtHLmN1cnJlbnQ9UyxLKFMpfX0pLmNhdGNoKChiKT0+e2lmKEEuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2lmKGNvbnNvbGUud2FybigiRmFpbGVkIHRvIHVwZGF0ZSBzdHJlYW0gc2V0dGluZ3MiLGIpLE4uY3VycmVudD09PUYpe2xldCBEPUo1KEcuY3VycmVudCwkNSh6KSk7Ry5jdXJyZW50PUQsSyhEKX19KS5maW5hbGx5KCgpPT57aWYoVi5jdXJyZW50PT09QSlWLmN1cnJlbnQ9bnVsbDtpZighQS5zaWduYWwuYWJvcnRlZCYmTi5jdXJyZW50PT09RilCLmN1cnJlbnQ9ITEscSghMSl9KX0sW0pdKTtyZXR1cm57c2V0dGluZ3M6WCx1cGRhdGVQbGF5YmFjazpDLHVwZGF0ZUVuY29kZXI6VSxwZW5kaW5nOlksZW5jb2RlclNldHRpbmdzQXZhaWxhYmxlOiEhSn19dmFyIE44PXtzdHJlYW1lZDohMSxmZWxsQmFjazohMX07ZnVuY3Rpb24gdDQoJCxKKXtzd2l0Y2goSil7Y2FzZSJkZWNvZGVkLWZyYW1lIjpyZXR1cm4gJC5zdHJlYW1lZD8kOnsuLi4kLHN0cmVhbWVkOiEwfTtjYXNlInRpbWVvdXQiOnJldHVybiAkLnN0cmVhbWVkfHwkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UiZXJyb3IiOnJldHVybiAkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UicmVzZXQiOnJldHVybiBOOH19dmFyIGU0PTQwMDA7dmFyIGtaPXtLZXlBOjQsS2V5Qjo1LEtleUM6NixLZXlEOjcsS2V5RTo4LEtleUY6OSxLZXlHOjEwLEtleUg6MTEsS2V5SToxMixLZXlKOjEzLEtleUs6MTQsS2V5TDoxNSxLZXlNOjE2LEtleU46MTcsS2V5TzoxOCxLZXlQOjE5LEtleVE6MjAsS2V5UjoyMSxLZXlTOjIyLEtleVQ6MjMsS2V5VToyNCxLZXlWOjI1LEtleVc6MjYsS2V5WDoyNyxLZXlZOjI4LEtleVo6MjksRGlnaXQxOjMwLERpZ2l0MjozMSxEaWdpdDM6MzIsRGlnaXQ0OjMzLERpZ2l0NTozNCxEaWdpdDY6MzUsRGlnaXQ3OjM2LERpZ2l0ODozNyxEaWdpdDk6MzgsRGlnaXQwOjM5LEVudGVyOjQwLEVzY2FwZTo0MSxCYWNrc3BhY2U6NDIsVGFiOjQzLFNwYWNlOjQ0LE1pbnVzOjQ1LEVxdWFsOjQ2LEJyYWNrZXRMZWZ0OjQ3LEJyYWNrZXRSaWdodDo0OCxCYWNrc2xhc2g6NDksU2VtaWNvbG9uOjUxLFF1b3RlOjUyLEJhY2txdW90ZTo1MyxDb21tYTo1NCxQZXJpb2Q6NTUsU2xhc2g6NTYsQ2Fwc0xvY2s6NTcsRjE6NTgsRjI6NTksRjM6NjAsRjQ6NjEsRjU6NjIsRjY6NjMsRjc6NjQsRjg6NjUsRjk6NjYsRjEwOjY3LEYxMTo2OCxGMTI6NjksUHJpbnRTY3JlZW46NzAsU2Nyb2xsTG9jazo3MSxQYXVzZTo3MixJbnNlcnQ6NzMsSG9tZTo3NCxQYWdlVXA6NzUsRGVsZXRlOjc2LEVuZDo3NyxQYWdlRG93bjo3OCxBcnJvd1JpZ2h0Ojc5LEFycm93TGVmdDo4MCxBcnJvd0Rvd246ODEsQXJyb3dVcDo4MixOdW1Mb2NrOjgzLE51bXBhZERpdmlkZTo4NCxOdW1wYWRNdWx0aXBseTo4NSxOdW1wYWRTdWJ0cmFjdDo4NixOdW1wYWRBZGQ6ODcsTnVtcGFkRW50ZXI6ODgsTnVtcGFkMTo4OSxOdW1wYWQyOjkwLE51bXBhZDM6OTEsTnVtcGFkNDo5MixOdW1wYWQ1OjkzLE51bXBhZDY6OTQsTnVtcGFkNzo5NSxOdW1wYWQ4Ojk2LE51bXBhZDk6OTcsTnVtcGFkMDo5OCxOdW1wYWREZWNpbWFsOjk5LENvbnRyb2xMZWZ0OjIyNCxTaGlmdExlZnQ6MjI1LEFsdExlZnQ6MjI2LE1ldGFMZWZ0OjIyNyxDb250cm9sUmlnaHQ6MjI4LFNoaWZ0UmlnaHQ6MjI5LEFsdFJpZ2h0OjIzMCxNZXRhUmlnaHQ6MjMxfTtmdW5jdGlvbiAkNygkKXtyZXR1cm4ga1pbJF0/P251bGx9dmFyIEw4PTMyMCxKNz03NjAsejg9MzAwO2Z1bmN0aW9uIFU4KCQsSil7aWYoISQpcmV0dXJuIG51bGw7aWYoISQuZGV2aWNlKXJldHVybiAkO2lmKCEkLnByb3h5SGVscGVycylyZXR1cm4gJDtsZXQgWD1gJHskLmJhc2VQYXRoPT09Ii8iPyIiOigkLmJhc2VQYXRoPz8iIikucmVwbGFjZSgvXC8rJC8sIiIpfS9oZWxwZXIvJHtlbmNvZGVVUklDb21wb25lbnQoJC5kZXZpY2UpfWAsSz1gJHtKLnByb3RvY29sfS8vJHtKLmhvc3R9YCxZPUoucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiI7cmV0dXJuey4uLiQsdXJsOmAke0t9JHtYfWAsc3RyZWFtVXJsOmAke0t9JHtYfS9zdHJlYW0ubWpwZWdgLHdzVXJsOmAke1l9Ly8ke0ouaG9zdH0ke1h9L3dzYH19ZnVuY3Rpb24gUTcoJCxKKXtsZXQgUT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoSikpLFg9bmV3IFVpbnQ4QXJyYXkoMStRLmxlbmd0aCk7cmV0dXJuIFhbMF09JCxYLnNldChRLDEpLFh9ZnVuY3Rpb24gQVooJCxKLFE9MzIpe2xldCBYPVsuLi4kLEpdO3JldHVybiBYLmxlbmd0aD5RP1guc2xpY2UoWC5sZW5ndGgtUSk6WH1mdW5jdGlvbiBIOCgkLEosUT1EYXRlLm5vdygpLFg9MTUwMCl7bGV0IEs9Si5maWx0ZXIoKFkpPT5RLVkuY3JlYXRlZEF0PD1YKTtpZighJHx8JC5yZWFkeVN0YXRlIT09MSlyZXR1cm4gSztmb3IobGV0IFkgb2YgSykkLnNlbmQoUTcoWS50YWcsWS5wYXlsb2FkKS5idWZmZXIpO3JldHVybltdfWZ1bmN0aW9uIFo3KCQsSixRLFgsSz1EYXRlLm5vdygpKXtsZXQgWT1IOCgkLEosSyk7aWYoJD8ucmVhZHlTdGF0ZT09PTEpcmV0dXJuICQuc2VuZChRNyhRLFgpLmJ1ZmZlciksWTtyZXR1cm4gQVooWSx7dGFnOlEscGF5bG9hZDpYLGNyZWF0ZWRBdDpLfSl9dmFyIE1aPXtoMjY0OlsiaDI2NCIsInZwOCIsInZwOSJdLHZwOTpbInZwOSIsInZwOCJdLHZwODpbInZwOCJdfTtmdW5jdGlvbiBXWigkLEope2xldCBRPU1aWyRdLFg9US5pbmRleE9mKEopO2lmKFg9PT0tMSlyZXR1cm4gUVswXT8/bnVsbDtyZXR1cm4gUVtYKzFdPz9udWxsfWZ1bmN0aW9uIFg3KCQsSixRKXtpZihRLmtpbmQ9PT0icGVybWFuZW50IilyZXR1cm57dHlwZToic3dpdGNoLXRvLWh0dHAifTtpZihRLmNvZGVjIT09SilyZXR1cm4gbnVsbDtsZXQgWD1XWigkLEopO3JldHVybiBYJiZYIT09Sj97dHlwZToicmV0cnktY29kZWMiLGNvZGVjOlh9Ont0eXBlOiJzd2l0Y2gtdG8taHR0cCJ9fWZ1bmN0aW9uIEs3KCQpe3JldHVybiAkP2AkeyQuZGV2aWNlfTokeyQucGlkfTokeyQuc3RyZWFtVXJsfTokeyQud3NVcmx9OiR7SlNPTi5zdHJpbmdpZnkoJC5zdHJlYW1TZXR0aW5ncz8/bnVsbCl9YDoiIn1mdW5jdGlvbiBfWigpe2xldFskLEpdPU0oKCk9PlU4KGMyKHdpbmRvdy5fX1NJTV9QUkVWSUVXX18pLHdpbmRvdy5sb2NhdGlvbikpLFtRLFhdPU0oITEpLFtLLFldPU0oKCk9PntsZXQgbD1jMih3aW5kb3cuX19TSU1fUFJFVklFV19fKTtpZihsKXJldHVybiBsLmRldmljZTtyZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoImRldmljZSIpfSksW3EsR109TSghMSksW0IsTl09TSghMSksW0wsVl09TSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49ejgrNTIwfSkse3dpZHRoOkMsb25Qb2ludGVyRG93bjpVfT1hNSgic2VydmUtc2ltOmRldmljZS1zaWRlYmFyLXdpZHRoIix6OCwyNDAsNjQwLCJyaWdodCIpLFtPLHpdPU0obnVsbCksSD13aW5kb3cuX19TSU1fUFJFVklFV19fLEY9SD8uZ3JpZEFwaUVuZHBvaW50Pz9qMSgiZ3JpZC9hcGkiKSxBPUg/LmdyaWRTdGFydEVuZHBvaW50Pz9qMSgiZ3JpZC9hcGkvc3RhcnQiKSxiPUg/LmdyaWRTaHV0ZG93bkVuZHBvaW50Pz9qMSgiZ3JpZC9hcGkvc2h1dGRvd24iKSxbRCxTXT1NKHt9KSxbeCxzXT1NKHt9KSxbZyx1XT1NKHt9KSxpPU9iamVjdC52YWx1ZXMoRCkuc29tZShCb29sZWFuKXx8T2JqZWN0LnZhbHVlcyh4KS5zb21lKEJvb2xlYW4pLHtkZXZpY2VzOm8sdG90YWw6cixyZWZyZXNoOlExLGxvYWRNb3JlOk4xLGxvYWRBbGw6YyxyZXNldFBhZ2U6aixoYXNNb3JlOmF9PWM0KEYsITAsaSksSzE9ISEoSyYmbz8uZmluZCgobCk9PmwuZGV2aWNlPT09Syk/LmhlbHBlciksTDE9dygobCk9PntZKGwpO3RyeXtsZXQgdj1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTt2LnNlYXJjaFBhcmFtcy5zZXQoImRldmljZSIsbCksd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIiIsdi50b1N0cmluZygpKX1jYXRjaHt9fSxbXSksSjE9dyhhc3luYyhsLHY9MjAwMDApPT57bGV0IEcxPURhdGUubm93KCkrdjt3aGlsZShEYXRlLm5vdygpPEcxKXt0cnl7aWYoKChhd2FpdChhd2FpdCBmZXRjaChGLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKSkuZGV2aWNlcz8/W10pLnNvbWUoKFcxKT0+VzEuZGV2aWNlPT09bCYmVzEuaGVscGVyKSlyZXR1cm4hMH1jYXRjaHt9YXdhaXQgbmV3IFByb21pc2UoKHoxKT0+c2V0VGltZW91dCh6MSw0MDApKX1yZXR1cm4hMX0sW0ZdKSxZMT13KGFzeW5jKGwpPT57Uygodik9Pih7Li4udixbbF06ITB9KSksdSgodik9Pih7Li4udixbbF06bnVsbH0pKTt0cnl7bGV0IHY9YXdhaXQgZmV0Y2goQSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6bH0pfSksRzE9YXdhaXQgdi5qc29uKCkuY2F0Y2goKCk9Pih7fSkpO2lmKCF2Lm9rfHwhRzEub2spe3UoKHoxKT0+KHsuLi56MSxbbF06RzEuZXJyb3I/P2BIVFRQICR7di5zdGF0dXN9YH0pKTtyZXR1cm59YXdhaXQgSjEobCl9Y2F0Y2godil7dSgoRzEpPT4oey4uLkcxLFtsXTp2Py5tZXNzYWdlPz8iUmVxdWVzdCBmYWlsZWQifSkpfWZpbmFsbHl7Uygodik9Pih7Li4udixbbF06ITF9KSksUTEoKX19LFtBLEoxLFExXSksQzE9dyhhc3luYyhsKT0+e3MoKHYpPT4oey4uLnYsW2xdOiEwfSkpLHUoKHYpPT4oey4uLnYsW2xdOm51bGx9KSk7dHJ5e2xldCB2PWF3YWl0IGZldGNoKGIse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt1ZGlkOmx9KX0pLEcxPWF3YWl0IHYuanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighdi5va3x8IUcxLm9rKXUoKHoxKT0+KHsuLi56MSxbbF06RzEuZXJyb3I/P2BIVFRQICR7di5zdGF0dXN9YH0pKX1jYXRjaCh2KXt1KChHMSk9Pih7Li4uRzEsW2xdOnY/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtzKCh2KT0+KHsuLi52LFtsXTohMX0pKSxRMSgpfX0sW2IsUTFdKTt5KCgpPT57aWYoSylyZXR1cm47aWYoJD8uZGV2aWNlKXtZKCQuZGV2aWNlKTtyZXR1cm59aWYoIW98fG8ubGVuZ3RoPT09MClyZXR1cm47bGV0IGw9by5maW5kKCh2KT0+di5oZWxwZXIpPz9vLmZpbmQoKHYpPT52LnN0YXRlPT09IkJvb3RlZCIpPz9vWzBdO2lmKGwpWShsLmRldmljZSl9LFtLLCQ/LmRldmljZSxvXSkseSgoKT0+e2xldCBsPWAke2oxKCJhcGkvZXZlbnRzIil9JHtLP2A/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KEspfWA6IiJ9YCx2PSh6MSk9PntKKChNMSk9PntpZih6MT1VOChjMih6MSksd2luZG93LmxvY2F0aW9uKSxLNyhNMSk9PT1LNyh6MSkpcmV0dXJuIE0xO2lmKHoxKXdpbmRvdy5fX1NJTV9QUkVWSUVXX189ejE7ZWxzZSBpZih3aW5kb3cuX19TSU1fUFJFVklFV19fKXtsZXR7YmFzZVBhdGg6VzEsZXhlY1Rva2VuOmkxfT13aW5kb3cuX19TSU1fUFJFVklFV19fO3dpbmRvdy5fX1NJTV9QUkVWSUVXX189e2Jhc2VQYXRoOlcxLGV4ZWNUb2tlbjppMX19cmV0dXJuIHoxfSl9LEcxPXkwKGwpO3JldHVybiBHMS5vbm1lc3NhZ2U9KHoxKT0+e3RyeXt2KGMyKEpTT04ucGFyc2UoejEuZGF0YSkpKX1jYXRjaHt9fSwoKT0+RzEuY2xvc2UoKX0sW0ssSzFdKSx5KCgpPT57aWYoISQ/LmxvZ3NFbmRwb2ludClyZXR1cm47bGV0IGw9eTAoJC5sb2dzRW5kcG9pbnQpLHY9bmV3IE1hcCxHMT1bIiM4YmU5ZmQiLCIjNTBmYTdiIiwiI2ZmYjg2YyIsIiNmZjc5YzYiLCIjYmQ5M2Y5IiwiI2YxZmE4YyIsIiM2MjcyYTQiLCIjZmY1NTU1IiwiIzY5ZmY5NCIsIiNkNmFjZmYiLCIjZmZmZmE1IiwiI2E0ZmZmZiIsIiNmZjZlNmUiLCIjY2FhOWZhIiwiIzVhZjc4ZSJdO2Z1bmN0aW9uIHoxKGkxKXtsZXQgQTE9di5nZXQoaTEpO2lmKCFBMSl7bGV0IHYxPTA7Zm9yKGxldCBfMT0wO18xPGkxLmxlbmd0aDtfMSsrKXYxPSh2MTw8NSktdjEraTEuY2hhckNvZGVBdChfMSl8MDtBMT1HMVtNYXRoLmFicyh2MSklRzEubGVuZ3RoXSx2LnNldChpMSxBMSl9cmV0dXJuIEExfWxldCBNMT0iIixXMT0hMTtyZXR1cm4gbC5vbm1lc3NhZ2U9KGkxKT0+e3RyeXtsZXQgQTE9SlNPTi5wYXJzZShpMS5kYXRhKSx2MT1BMS5wcm9jZXNzSW1hZ2VQYXRoPy5zcGxpdCgiLyIpLnBvcCgpPz9BMS5zZW5kZXJJbWFnZVBhdGg/LnNwbGl0KCIvIikucG9wKCk/PyIiLF8xPUExLnN1YnN5c3RlbT8/IiIsbDE9QTEuY2F0ZWdvcnk/PyIiLFUxPUExLmV2ZW50TWVzc2FnZT8/IiI7aWYoIVUxKXJldHVybjtpZih2MSE9PU0xKXtpZihXMSljb25zb2xlLmdyb3VwRW5kKCk7bGV0IGcxPXoxKHYxKTtjb25zb2xlLmdyb3VwQ29sbGFwc2VkKGAlYyR7djF9JHtfMT9gICVjJHtfMX0ke2wxPyI6IitsMToiIn1gOiIifWAsYGNvbG9yOiR7ZzF9O2ZvbnQtd2VpZ2h0OmJvbGRgLC4uLl8xP1siY29sb3I6Izg4ODtmb250LXdlaWdodDpub3JtYWwiXTpbXSksVzE9ITAsTTE9djF9bGV0IEkxPShBMS5tZXNzYWdlVHlwZT8/IiIpLnRvTG93ZXJDYXNlKCksZDE9XzEmJnYxPT09TTE/YCVjJHtsMXx8XzF9JWMgYDoiIix0MT1kMT9bImNvbG9yOiM4ODg7Zm9udC1zdHlsZTppdGFsaWMiLCJjb2xvcjppbmhlcml0Il06W107aWYoSTE9PT0iZmF1bHQifHxJMT09PSJlcnJvciIpY29uc29sZS5sb2coYCR7ZDF9JWMke1UxfWAsLi4udDEsImNvbG9yOiNmZjU1NTUiKTtlbHNlIGlmKEkxPT09ImRlYnVnIiljb25zb2xlLmxvZyhgJHtkMX0lYyR7VTF9YCwuLi50MSwiY29sb3I6IzYyNzJhNCIpO2Vsc2UgY29uc29sZS5sb2coYCR7ZDF9JWMke1UxfWAsLi4udDEsImNvbG9yOmluaGVyaXQiKX1jYXRjaHt9fSwoKT0+e2lmKFcxKWNvbnNvbGUuZ3JvdXBFbmQoKTtsLmNsb3NlKCl9fSxbJD8ubG9nc0VuZHBvaW50XSk7bGV0IEU9Sz8/JD8uZGV2aWNlPz9udWxsLGY9bz8uZmluZCgobCk9PmwuZGV2aWNlPT09RSk/P251bGwsXz0hISQmJiQuZGV2aWNlPT09RSxwO2lmKF8mJiQpcD1aKFBaLHtjb25maWc6JCxkZXZpY2VOYW1lOmY/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTpmPy5ydW50aW1lPz9udWxsLGNocm9tZTpmPy5jaHJvbWU/P251bGwsYXhPdmVybGF5RW5hYmxlZDpxLHNldEF4T3ZlcmxheUVuYWJsZWQ6RyxkZXZ0b29sc09wZW46QixzZXREZXZ0b29sc09wZW46TixncmlkT3BlbjpMLHNldEdyaWRPcGVuOlYsZ3JpZFBhbmVsV2lkdGg6QyxzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6TyxzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6eixzdHJlYW1pbmc6USxzZXRTdHJlYW1pbmc6WH0pO2Vsc2V7bGV0IGw9TD9DKzM2OjI0O3A9WigiZGl2Iix7Y2xhc3NOYW1lOiJoLXNjcmVlbiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBiZy1wYWdlIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIgW3RyYW5zaXRpb246cGFkZGluZ18wLjI1c19lYXNlXSIsc3R5bGU6e3BhZGRpbmdMZWZ0OmwscGFkZGluZ1JpZ2h0OjI0fSxjaGlsZHJlbjpmP1ooUTYse25hbWU6Zi5uYW1lLHJ1bnRpbWU6Zi5ydW50aW1lLGNocm9tZTpmLmNocm9tZT8/bnVsbCxwbGFjZWhvbGRlckFzc2V0OmYucGxhY2Vob2xkZXJBc3NldD8/bnVsbCxidXN5OiEhZi5oZWxwZXJ8fCEhRFtmLmRldmljZV0sYnVzeUxhYmVsOmYuaGVscGVyPyJDb25uZWN0aW5n4oCmIjoiU3RhcnRpbmfigKYiLGVycm9yOmdbZi5kZXZpY2VdPz9udWxsLG9uU3RhcnQ6KCk9PlkxKGYuZGV2aWNlKX0pOlooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltaKCJoMSIse2NsYXNzTmFtZToidGV4dC1bMThweF0gbS0wIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiJObyBzaW11bGF0b3JzIGF2YWlsYWJsZSJ9KSxaKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IHRleHQtWzE0cHhdIG1heC13LTEyMCIsY2hpbGRyZW46WyJDcmVhdGUgYSBzaW11bGF0b3IgaW4gWGNvZGUsIG9yIHN0YXJ0IG9uZSB3aXRoIiwiICIsWigiY29kZSIse2NsYXNzTmFtZToiYmctWyMyMjJdIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46ImJ1bnggQGV4cG8vc2VydmUtc2ltIC0tZGV0YWNoIn0pLCIuIl19KV19KX0pfXJldHVybiBaKFoxLHtjaGlsZHJlbjpbcCxaKGc2LHt9KSxaKEc2LHtvcGVuOkwsb25DbG9zZTooKT0+VighMSksd2lkdGg6QyxzaWRlOiJsZWZ0IixkZXZpY2VzOm8sdG90YWw6cixoYXNNb3JlOmEsb25Mb2FkTW9yZTpOMSxvbkxvYWRBbGw6YyxvblJlc2V0UGFnZTpqLHNlbGVjdGVkVWRpZDpFLG9uU2VsZWN0OkwxLHN0YXJ0aW5nOkQsc2h1dHRpbmdEb3duOngsb25TaHV0ZG93bjpDMX0pLFooUjUse3BhbmVsV2lkdGg6Qyx2aXNpYmxlOkwsb25Qb2ludGVyRG93bjpVLGFyaWFMYWJlbDoiUmVzaXplIHNpbXVsYXRvcnMgc2lkZWJhciIsc2lkZToibGVmdCJ9KSxaKGE5LHtvcGVuOkwsb25DbGljazooKT0+VighMCl9KV19KX1mdW5jdGlvbiBQWih7Y29uZmlnOiQsZGV2aWNlTmFtZTpKLGRldmljZVJ1bnRpbWU6USxjaHJvbWU6WCxheE92ZXJsYXlFbmFibGVkOkssc2V0QXhPdmVybGF5RW5hYmxlZDpZLGRldnRvb2xzT3BlbjpxLHNldERldnRvb2xzT3BlbjpHLGdyaWRPcGVuOkIsc2V0R3JpZE9wZW46TixncmlkUGFuZWxXaWR0aDpMLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpWLHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpDLHN0cmVhbWluZzpVLHNldFN0cmVhbWluZzpPfSl7eSgoKT0+e2RvY3VtZW50LnRpdGxlPUo/YFNpbXVsYXRvciAtICR7Sn1gOiJTaW11bGF0b3IgUHJldmlldyJ9LFtKXSk7bGV0IHo9STAoSiksSD1kNCgkLmRldnRvb2xzRW5kcG9pbnQ/P2oxKCJkZXZ0b29scyIpLHEpO3koKCk9PntpZighcSlyZXR1cm47aWYoViYmSC50YXJnZXRzLnNvbWUoKFIpPT5SLmlkPT09VikpcmV0dXJuO0MoSC50YXJnZXRzLmxlbmd0aD09PTE/SC50YXJnZXRzWzBdLmlkOm51bGwpfSxbcSxILnRhcmdldHMsVixDXSkseSgoKT0+e0MobnVsbCl9LFskLmRldmljZSxDXSk7bGV0IEY9eTQoKSxBPXM0KHtkZXZpY2U6JC5kZXZpY2UsZW5kcG9pbnQ6JC5zdHJlYW1TZXR0aW5nc0VuZHBvaW50LGluaXRpYWxTZXR0aW5nczokLnN0cmVhbVNldHRpbmdzfSksYj1BLnNldHRpbmdzLEQ9QS51cGRhdGVQbGF5YmFjayxTPWIudHJhbnNwb3J0PT09IndlYnJ0YyIseD1UKG51bGwpLHM9UyxbZyx1XT1NKG51bGwpLGk9Yi53ZWJSdGNDb2RlYyxvPWc/P2kscj12NCh7b2ZmZXJVcmw6ajMoJCksY2xvc2VVcmw6dTkoJCksZW5hYmxlZDpzLGNvZGVjOm8saWNlU2VydmVyczpiLmljZVNlcnZlcnN9KSxbUTEsTjFdPWQwKHQ0LE44KSxbY109TSgoKT0+bmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoImNvZGVjIik9PT0ibWpwZWciKSxqPWIuaHR0cENvZGVjPT09Im1qcGVnIixhPSFzJiYhaiYmRi5zdXBwb3J0ZWQmJiFRMS5mZWxsQmFjayYmIWMsSzE9RTQoYXx8cz9udWxsOnA5KCQpKTt5KCgpPT57TyghMSksTjEoInJlc2V0IiksdShudWxsKX0sWyQuc3RyZWFtVXJsLE8sYi50cmFuc3BvcnQsYi5odHRwQ29kZWMsYi53ZWJSdGNDb2RlY10pLHkoKCk9PntpZighU3x8IXIuZmFpbHVyZSlyZXR1cm47aWYoeC5jdXJyZW50PT09ci5mYWlsdXJlLnNlc3Npb25JZClyZXR1cm47eC5jdXJyZW50PXIuZmFpbHVyZS5zZXNzaW9uSWQ7bGV0IFI9WDcoaSxvLHIuZmFpbHVyZSk7aWYoIVIpcmV0dXJuO2lmKFIudHlwZT09PSJzd2l0Y2gtdG8taHR0cCIpe0Qoe3RyYW5zcG9ydDoiaHR0cCJ9KTtyZXR1cm59dShSLmNvZGVjKX0sW2ksbyxELFMsci5mYWlsdXJlXSkseSgoKT0+e2lmKCFhKXJldHVybjtsZXQgUj1zZXRUaW1lb3V0KCgpPT5OMSgidGltZW91dCIpLGU0KTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KFIpfSxbYSwkLnN0cmVhbVVybF0pO2xldFtMMSxKMV09TShudWxsKSxbWTEsQzFdPU0obnVsbCksRT1ZMSxmPUwxPz9FPz9HMih6LEopLF89QTUoeixmKSxwPVYyKHosZiksbD1rNShmKSx2PUsyKGYpLEcxPXY/di53aWR0aC92LmhlaWdodDoxLHoxPWYwKGYpLE0xPSEhWCYmIXoxLFcxPU0xP1guZnJhbWUud2lkdGgvWC5zY3JlZW4ud2lkdGg6MSxpMT1wKlcxLEExPU0xP1guZnJhbWUud2lkdGgvWC5mcmFtZS5oZWlnaHQ6RzEsdjE9TTE/YCR7WC5mcmFtZS53aWR0aH0gLyAke1guZnJhbWUuaGVpZ2h0fWA6bCxfMT1UKG51bGwpLGwxPVQoW10pO3koKCk9PntsZXQgUj0hMSwkMT1udWxsLFc9bnVsbDtsMS5jdXJyZW50PVtdO2xldCBrPSgpPT57aWYoUnx8JDEpcmV0dXJuOyQxPXNldFRpbWVvdXQoKCk9PnskMT1udWxsLEkoKX0sMTAwMCl9LEk9KCk9PntsZXQgaD1uZXcgV2ViU29ja2V0KCQud3NVcmwpO2guYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLFc9aCxfMS5jdXJyZW50PWgsaC5vbm9wZW49KCk9PntsMS5jdXJyZW50PUg4KGgsbDEuY3VycmVudCl9LGgub25tZXNzYWdlPShlKT0+e2lmKCEoZS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgcTE9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhKTtpZihxMS5sZW5ndGg8MXx8cTFbMF0hPT0xMzApcmV0dXJuO3RyeXtsZXQgSDE9SlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUocTEuc3ViYXJyYXkoMSkpKTtpZihIMS53aWR0aDw9MHx8SDEuaGVpZ2h0PD0wKXJldHVybjtDMSgoUDEpPT5QMSYmUDEud2lkdGg9PT1IMS53aWR0aCYmUDEuaGVpZ2h0PT09SDEuaGVpZ2h0JiZQMS5vcmllbnRhdGlvbj09PUgxLm9yaWVudGF0aW9uP1AxOkgxKX1jYXRjaHt9fSxoLm9uY2xvc2U9KCk9PntpZihfMS5jdXJyZW50PT09aClfMS5jdXJyZW50PW51bGw7aygpfSxoLm9uZXJyb3I9KCk9PntoLmNsb3NlKCl9fTtyZXR1cm4gSSgpLCgpPT57aWYoUj0hMCwkMSljbGVhclRpbWVvdXQoJDEpO2lmKF8xLmN1cnJlbnQ9PT1XKV8xLmN1cnJlbnQ9bnVsbDtXPy5jbG9zZSgpfX0sWyQud3NVcmxdKTtsZXQgVTE9dygoUiwkMSk9PntsMS5jdXJyZW50PVo3KF8xLmN1cnJlbnQsbDEuY3VycmVudCxSLCQxKX0sW10pLEkxPXcoKFIpPT5VMSgzLFIpLFtVMV0pLGQxPXcoKFIpPT5VMSg1LFIpLFtVMV0pLHQxPXcoKFIpPT5VMSg0LHtidXR0b246Un0pLFtVMV0pLGcxPXcoKHtwaGFzZTpSLGJ1dHRvbjokMX0pPT57aWYoJDEudXNhZ2VQYWdlPT1udWxsfHwkMS51c2FnZT09bnVsbClyZXR1cm47VTEoNCx7YnV0dG9uOiQxLm5hbWUscGFnZTokMS51c2FnZVBhZ2UsdXNhZ2U6JDEudXNhZ2UscGhhc2U6Un0pfSxbVTFdKSxuMT13KChSKT0+VTEoMTAse2RlbHRhOlJ9KSxbVTFdKSwkMD13KChSKT0+VTEoMTEsUiksW1UxXSksVjA9dygoUik9PntKMSgoJDEpPT4kMSYmJDEud2lkdGg9PT1SLndpZHRoJiYkMS5oZWlnaHQ9PT1SLmhlaWdodCYmJDEub3JpZW50YXRpb249PT1SLm9yaWVudGF0aW9uPyQxOlIpfSxbXSksczE9dygoUik9PntVMSg3LHtvcmllbnRhdGlvbjpSfSl9LFtVMV0pLHYwPWYub3JpZW50YXRpb24/PyJwb3J0cmFpdCIsbTE9eiE9PSJ3YXRjaCImJnohPT0idmlzaW9uIixxMD13KChSKT0+e2lmKCFtMSlyZXR1cm47bGV0ICQxPShSPT09ImxlZnQiP1QyOkYzKVt2MF07czEoJDEpfSxbbTEsdjAsczFdKTt5KCgpPT57SjEobnVsbCksQzEobnVsbCl9LFskLnN0cmVhbVVybF0pLHkoKCk9PntsZXQgUj1FO2lmKCFSKXJldHVybjtKMSgoJDEpPT4kMSYmJDEud2lkdGg9PT1SLndpZHRoJiYkMS5oZWlnaHQ9PT1SLmhlaWdodCYmJDEub3JpZW50YXRpb249PT1SLm9yaWVudGF0aW9uPyQxOm51bGwpfSxbRSxFPy53aWR0aCxFPy5oZWlnaHQsRT8ub3JpZW50YXRpb25dKTtsZXQgSjA9dygoUiwkMSk9PntVMSg2LHt0eXBlOlIsdXNhZ2U6JDF9KX0sW1UxXSksW18wLGMxXT1NKG51bGwpLFthMSxQMF09TSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO2xldCBSPU51bWJlcih3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oInNlcnZlLXNpbTp0b29scy1wYW5lbC13aWR0aCIpKSwkMT1OdW1iZXIuaXNGaW5pdGUoUikmJlI+MD9SOkw4O3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49JDErNDgwfSkse3dpZHRoOmgxLG9uUG9pbnRlckRvd246QzB9PWE1KCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiLEw4LDI0MCw3MjApLHt3aWR0aDpCMCxvblBvaW50ZXJEb3duOkQxfT1hNSgic2VydmUtc2ltOmRldnRvb2xzLXBhbmVsLXdpZHRoIixKNyw0MjAsMTQwMCksW3kxLFEwXT1NKCgpPT50eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuaW5uZXJXaWR0aDowKSxbRjAsTjBdPU0oKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lckhlaWdodDowKTt5KCgpPT57bGV0IFI9KCk9PntRMCh3aW5kb3cuaW5uZXJXaWR0aCksTjAod2luZG93LmlubmVySGVpZ2h0KX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLFIpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixSKX0sW10pLHkoKCk9PntsZXQgUj15MCgkLmFwcFN0YXRlRW5kcG9pbnQ/P2oxKCJhcHBzdGF0ZSIpKSwkMT1udWxsO3JldHVybiBSLm9ubWVzc2FnZT0oVyk9Pnt0cnl7bGV0IGs9SlNPTi5wYXJzZShXLmRhdGEpO2lmKCQxKWNsZWFyVGltZW91dCgkMSk7bGV0IEk9az8uaXNSZWFjdE5hdGl2ZT8wOjYwMDskMT1zZXRUaW1lb3V0KCgpPT5jMShrKSxJKX1jYXRjaHt9fSwoKT0+e2lmKCQxKWNsZWFyVGltZW91dCgkMSk7Ui5jbG9zZSgpfX0sWyQuYXBwU3RhdGVFbmRwb2ludF0pO2xldCBPMD13KGFzeW5jKCk9PntKMCgiZG93biIsMjEpLGF3YWl0IG5ldyBQcm9taXNlKCgkMSk9PnNldFRpbWVvdXQoJDEsMzApKSxKMCgidXAiLDIxKX0sW0owXSksWDE9VChudWxsKSxbUCxkXT1NKDApLFtuLE8xXT1NKDApO3koKCk9PntsZXQgUj1YMS5jdXJyZW50O2lmKCFSfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgJDE9bmV3IFJlc2l6ZU9ic2VydmVyKChXKT0+e2xldCBrPVdbMF0/LmNvbnRlbnRSZWN0O2Qoaz8ud2lkdGg/PzApLE8xKGs/LmhlaWdodD8/MCl9KTtyZXR1cm4gJDEub2JzZXJ2ZShSKSwoKT0+JDEuZGlzY29ubmVjdCgpfSxbXSk7bGV0W1YxLEIxXT1NKCEwKSxmMT1UKCEwKTtmMS5jdXJyZW50PVYxO2xldCBwMT1UKG5ldyBTZXQpO3koKCk9PntsZXQgUj0oJDEpPT57bGV0IFc9ISFYMS5jdXJyZW50Py5jb250YWlucygkMS50YXJnZXQpO0IxKFcpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFIsITApLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsUiwhMCl9LFtdKSx5KCgpPT57aWYoVjEpcmV0dXJuO2xldCBSPXAxLmN1cnJlbnQ7aWYoUi5zaXplPT09MClyZXR1cm47Zm9yKGxldCAkMSBvZiBSKVUxKDYse3R5cGU6InVwIix1c2FnZTokMX0pO1IuY2xlYXIoKX0sW1YxLFUxXSkseSgoKT0+e2xldCBSPShrLEkpPT57aWYoIWYxLmN1cnJlbnQpcmV0dXJuO2lmKGsuY29kZT09PSJLZXlIIiYmay5tZXRhS2V5JiZrLnNoaWZ0S2V5KXtpZihrLnByZXZlbnREZWZhdWx0KCksST09PSJkb3duIiYmIWsucmVwZWF0KVUxKDQse2J1dHRvbjoiaG9tZSJ9KTtyZXR1cm59aWYoKGsuY29kZT09PSJBcnJvd0xlZnQifHxrLmNvZGU9PT0iQXJyb3dSaWdodCIpJiZrLm1ldGFLZXkmJiFrLnNoaWZ0S2V5JiYhay5hbHRLZXkmJiFrLmN0cmxLZXkpe2lmKGsucHJldmVudERlZmF1bHQoKSxJPT09ImRvd24iJiYhay5yZXBlYXQpcTAoay5jb2RlPT09IkFycm93TGVmdCI/ImxlZnQiOiJyaWdodCIpO3JldHVybn1pZihrLmNvZGU9PT0iS2V5QSImJmsubWV0YUtleSYmay5zaGlmdEtleSl7aWYoay5wcmV2ZW50RGVmYXVsdCgpLEk9PT0iZG93biImJiFrLnJlcGVhdClFMShgeGNydW4gc2ltY3RsIHVpICR7JC5kZXZpY2V9IGFwcGVhcmFuY2VgKS50aGVuKChlKT0+e2xldCBxMT1lLnN0ZG91dC50cmltKCk9PT0iZGFyayI/ImxpZ2h0IjoiZGFyayI7cmV0dXJuIEUxKGB4Y3J1biBzaW1jdGwgdWkgJHskLmRldmljZX0gYXBwZWFyYW5jZSAke3ExfWApfSkuY2F0Y2goKCk9Pnt9KTtyZXR1cm59aWYoay5jb2RlPT09IktleUsiJiZrLm1ldGFLZXkmJiFrLnNoaWZ0S2V5JiYhay5hbHRLZXkmJiFrLmN0cmxLZXkpe2lmKGsucHJldmVudERlZmF1bHQoKSxJPT09ImRvd24iJiYhay5yZXBlYXQpVTEoMTIse30pO3JldHVybn1sZXQgaD0kNyhrLmNvZGUpO2lmKGg9PW51bGwpcmV0dXJuO2lmKGsucHJldmVudERlZmF1bHQoKSxJPT09ImRvd24iKXAxLmN1cnJlbnQuYWRkKGgpO2Vsc2UgcDEuY3VycmVudC5kZWxldGUoaCk7VTEoNix7dHlwZTpJLHVzYWdlOmh9KX0sJDE9KGspPT5SKGssImRvd24iKSxXPShrKT0+UihrLCJ1cCIpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsJDEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsVyksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsJDEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsVyl9fSxbVTEsJC5kZXZpY2UscTBdKTtsZXQgeDE9bDQoKSxrMD1tNCgkLmRldmljZSksWjA9VDQoe2V4ZWM6RTEsdWRpZDokLmRldmljZSxlbmFibGVkOlUsb25VcGxvYWRTdGFydDp4MS5hZGQsb25VcGxvYWRQcm9ncmVzczp4MS5zZXRQcm9ncmVzcyxvblVwbG9hZEVuZDooUiwkMSxXKT0+eDEudXBkYXRlKFIse3N0YXR1czokMT8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOld9KSxvblVuc3VwcG9ydGVkOihSKT0+e2xldCAkMT14MS5hZGQoUi5uYW1lLCJtZWRpYSIpO3gxLnVwZGF0ZSgkMSx7c3RhdHVzOiJlcnJvciIsbWVzc2FnZTpgVW5zdXBwb3J0ZWQ6ICR7Ui50eXBlfHxPMihSKX1gfSl9LG9uSG9zdFBhdGhEcm9wOmswLmRpc21pc3N9KSx3MT11NCh7ZGVmYXVsdFdpZHRoOmkxLHZpZXdwb3J0V2lkdGg6eTEsdmlld3BvcnRIZWlnaHQ6RjAsYXNwZWN0UmF0aW86QTEsb25TdGFydDooKT0+QjEoITEpfSksTDA9MTIsRDA9MjQsUzA9UD4wP01hdGgubWluKFAsdzEud2lkdGgpOncxLndpZHRoLEEwPShSKT0+e2lmKFI8PTApcmV0dXJuIDA7bGV0ICQxPXkxLUwwLVIsaz15MS8yK1MwLzItKCQxLUQwKTtpZihrPD0wKXJldHVybiAwO2xldCBJPTIqaztyZXR1cm4gSTw9UitEMD9JOjB9LFE1PUEwKHE/QjA6YTE/aDE6MCksWjU9QTAoQj9MOjApO3JldHVybiBaKGk5LHtlbmRwb2ludDpLPyQ/LmF4RW5kcG9pbnQ6dm9pZCAwLGNoaWxkcmVuOlooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC1zY3JlZW4gYmctcGFnZSBweS02IGdhcC0zIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIiLHN0eWxlOntwYWRkaW5nTGVmdDoyNCtaNSxwYWRkaW5nUmlnaHQ6MjQrUTUsdHJhbnNpdGlvbjp3MS5pc1Jlc2l6aW5nfHx3MS5pc0luZXJ0aWE/Im5vbmUiOk42fSxjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyBtaW4tdy0wIixzdHlsZTp7d2lkdGg6dzEud2lkdGgsdHJhbnNpdGlvbjp3MS5pc1Jlc2l6aW5nfHx3MS5pc0luZXJ0aWE/cDM6dTN9LGNoaWxkcmVuOltaKHIxLHtleGVjOkUxLG9uUm90YXRlOnMxLG9yaWVudGF0aW9uOmYub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkosZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzpVLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIHN0YXR1cyIsc3R5bGU6e2FsaWduU2VsZjoiY2VudGVyIix3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsZmxleFdyYXA6Im5vd3JhcCIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsZ2FwOjEwLHBhZGRpbmc6IjZweCAxMHB4Iixib3JkZXJSYWRpdXM6MTh9LGNoaWxkcmVuOltaKHIxLlRpdGxlLHtvbkNsaWNrOigpPT5OKChSKT0+IVIpLCJhcmlhLWxhYmVsIjoiVG9nZ2xlIHNpbXVsYXRvcnMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6Qix0aXRsZToiU2ltdWxhdG9ycyIsaGlkZVN1YnRpdGxlOiEwLGhpZGVDaGV2cm9uOiEwLHN0eWxlOnttYXhXaWR0aDoibWluKDIzMHB4LCBjYWxjKDEwMHZ3IC0gMTcwcHgpKSJ9fSksWihwNix7c3RyZWFtaW5nOlV9KV19KSxaKCJkaXYiLHtyZWY6WDEsY2xhc3NOYW1lOiJyZWxhdGl2ZSBtYXgtaC1mdWxsIixzdHlsZTp7d2lkdGg6dzEud2lkdGgsYXNwZWN0UmF0aW86djEsdHJhbnNpdGlvbjp3MS5pc1Jlc2l6aW5nfHx3MS5pc0luZXJ0aWE/cDM6dTMsd2lsbENoYW5nZTp3MS5pc1Jlc2l6aW5nfHx3MS5pc0luZXJ0aWE/IndpZHRoIjp2b2lkIDB9LC4uLlowLmRyb3Bab25lUHJvcHMsY2hpbGRyZW46WygoKT0+e2xldCBSPVooTzUse3VybDokLnVybCx3c1VybDokLndzVXJsLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixib3JkZXI6Im5vbmUiLHBvaW50ZXJFdmVudHM6dzEuaXNSZXNpemluZ3x8dzEuaXNJbmVydGlhPyJub25lIjp2b2lkIDB9LGltYWdlU3R5bGU6e2JvcmRlclJhZGl1czpNMT8wOl8sY29ybmVyU2hhcGU6TTE/dm9pZCAwOiJzdXBlcmVsbGlwc2UoMS4zKSIsLi4uTTE/e306e2JveFNoYWRvdzoiaW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSJ9fSxoaWRlQ29udHJvbHM6ITAsb25TdHJlYW1pbmdDaGFuZ2U6TyxvblN0cmVhbVRvdWNoOkkxLG9uU3RyZWFtTXVsdGlUb3VjaDpkMSxvblN0cmVhbUJ1dHRvbjp0MSxvblN0cmVhbURpZ2l0YWxDcm93bjpuMSxvblN0cmVhbVNjcm9sbDokMCxzdHJlYW1Nb2RlOnM/IndlYnJ0YyI6YT8iYXZjYyI6Im1qcGVnIix3ZWJSdGNTdHJlYW06ci5zdHJlYW0sb25XZWJSdGNGcmFtZTpyLm1hcmtGcmFtZURlY29kZWQsc3RyZWFtRXJyb3I6cz9yLmVycm9yOm51bGwsb25BdmNjRXJyb3I6KCk9Pk4xKCJlcnJvciIpLG9uQXZjY0RlY29kZWRGcmFtZTooKT0+TjEoImRlY29kZWQtZnJhbWUiKSxzdWJzY3JpYmVGcmFtZTphP3ZvaWQgMDpLMS5zdWJzY3JpYmVGcmFtZSxzdHJlYW1GcmFtZTphP3ZvaWQgMDpLMS5mcmFtZSxzdHJlYW1Db25maWc6ZixlbmFibGVEaWdpdGFsQ3Jvd246ej09PSJ3YXRjaCIsb25TY3JlZW5Db25maWdDaGFuZ2U6VjB9KSwkMT1aKFoxLHtjaGlsZHJlbjpbUixLJiZaKHI5LHt9KV19KTtpZighTTEpcmV0dXJuICQxO3JldHVybiBaKHY1LHtjaHJvbWU6WCxpbnRlcmFjdGl2ZTohMCxvbkJ1dHRvbjpnMSxvbkNyb3duV2hlZWw6KFcsayk9PntsZXQgST1JMihXLGssbnx8MSk7aWYoSSE9bnVsbCluMShJKX0sc2NyZWVuOiQxfSl9KSgpLFowLmlzRHJhZ092ZXImJlooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1hY2NlbnQgYmctW3JnYmEoOTksMTAyLDI0MSwwLjE4KV0gdGV4dC1hY2NlbnQgcG9pbnRlci1ldmVudHMtbm9uZSB6LTIwIixzdHlsZTp7Ym9yZGVyUmFkaXVzOk0xP3ZvaWQgMDpffSxjaGlsZHJlbjpbWihwMix7c2l6ZTozMixzdHJva2VXaWR0aDoxLjV9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LW1lZGl1bSIsY2hpbGRyZW46IkRyb3AgbWVkaWEgb3IgLmlwYSJ9KV19KSxaKHg2LHtzaW11bGF0b3JSZXNpemU6dzEsZGV2aWNlVHlwZTp6LHN0cmVhbUNvbmZpZzpmLGNvbnRhaW5lcldpZHRoOlB8fHcxLndpZHRoLGNvbnRhaW5lckhlaWdodDpufHwoQTE+MD93MS53aWR0aC9BMTowKX0pLFoobTYse3dpZHRoOlB8fHcxLndpZHRoLGhlaWdodDpufHwoQTE+MD93MS53aWR0aC9BMTowKSx2aXNpYmxlOncxLmlzUmVzaXppbmd8fHcxLmlzSW5lcnRpYX0pXX0pLFooImRpdiIse2NsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIG1heC13LWZ1bGwiLGNoaWxkcmVuOltaKHIxLHtleGVjOkUxLG9uUm90YXRlOnMxLG9yaWVudGF0aW9uOmYub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkosZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzpVLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIGFjdGlvbnMiLHN0eWxlOnthbGlnblNlbGY6ImNlbnRlciIsd2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLHBhZGRpbmc6IjZweCA4cHgiLGJvcmRlclJhZGl1czoxOH0sY2hpbGRyZW46WihyMS5BY3Rpb25zLHtjaGlsZHJlbjpbXzA/LmlzUmVhY3ROYXRpdmUmJloocjEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6IlJlbG9hZCBSZWFjdCBOYXRpdmUgYnVuZGxlIix0aXRsZToiUmVsb2FkIChSKSIsb25DbGljazooKT0+dm9pZCBPMCgpLGNoaWxkcmVuOlooaTAse30pfSksWihyMS5Ib21lQnV0dG9uLHt0aXRsZToiSG9tZSJ9KSxaKHIxLlNjcmVlbnNob3RCdXR0b24se3RpdGxlOiJTY3JlZW5zaG90IixvbkNsaWNrOihSKT0+e1IucHJldmVudERlZmF1bHQoKSxrMC5jYXB0dXJlKCl9fSksWihyMS5Sb3RhdGVCdXR0b24se3RpdGxlOiJSb3RhdGUgZGV2aWNlIn0pXX0pfSksWihyMSx7ZXhlYzpFMSxvblJvdGF0ZTpzMSxvcmllbnRhdGlvbjpmLm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpKLGRldmljZVJ1bnRpbWU6USxzdHJlYW1pbmc6VSwiYXJpYS1sYWJlbCI6IkFjY2Vzc2liaWxpdHkgb3ZlcmxheSIsc3R5bGU6e3dpZHRoOiJhdXRvIixtaW5XaWR0aDowLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLHBhZGRpbmc6Nixib3JkZXJSYWRpdXM6MjJ9LGNoaWxkcmVuOloobjkse292ZXJsYXlFbmFibGVkOkssc3RyZWFtaW5nOlUsb25Ub2dnbGVPdmVybGF5OigpPT5ZKChSKT0+IVIpfSl9KV19KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6YGZpeGVkIHRvcC0zIHJpZ2h0LTMgZmxleCBmbGV4LWNvbCBnYXAtMSBwLTEgYmctcGFuZWwtYmcgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIGJhY2tkcm9wLWJsdXItWzEycHhdIFstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMThzX2Vhc2VdIHotNDAgJHthMXx8cT8ib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUiOiJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIn1gLGNoaWxkcmVuOltaKCJidXR0b24iLHtvbkNsaWNrOigpPT57RyghMSksUDAoKFIpPT4hUil9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gdG9vbHMgcGFuZWwiLCJhcmlhLXByZXNzZWQiOmExLHRpdGxlOiJUb29scyIsY2hpbGRyZW46WihnMix7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxaKCJidXR0b24iLHtvbkNsaWNrOigpPT57UDAoITEpLEcoKFIpPT4hUil9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gV2ViS2l0IERldlRvb2xzIiwiYXJpYS1wcmVzc2VkIjpxLHRpdGxlOiJXZWJLaXQgRGV2VG9vbHMiLGNoaWxkcmVuOlooaDIse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSldfSksWihBNCx7b3BlbjphMSxvbkNsb3NlOigpPT5QMCghMSksdWRpZDokLmRldmljZSxkZXZpY2VSdW50aW1lOlEsY3VycmVudEFwcDpfMCxldmVudExvZ0V2ZW50c0VuZHBvaW50OiQuZXZlbnRMb2dFdmVudHNFbmRwb2ludCxtZXRyaWNzRW5kcG9pbnQ6JC5tZXRyaWNzRW5kcG9pbnQsYXhPdmVybGF5RW5hYmxlZDpLLG9uVG9nZ2xlQXhPdmVybGF5OigpPT5ZKChSKT0+IVIpLHN0cmVhbVNldHRpbmdzOmIsb25TdHJlYW1QbGF5YmFja1NldHRpbmdzQ2hhbmdlOkEudXBkYXRlUGxheWJhY2ssb25TdHJlYW1FbmNvZGVyU2V0dGluZ3NDaGFuZ2U6QS51cGRhdGVFbmNvZGVyLGFjdGl2ZUNvZGVjOnM/YHdlYnJ0Yy8ke299YDphPyJoMjY0IjoibWpwZWciLGF2Y2NTdXBwb3J0ZWQ6Ri5zdXBwb3J0ZWQsc3RyZWFtU2V0dGluZ3NQZW5kaW5nOkEucGVuZGluZ3x8IUEuZW5jb2RlclNldHRpbmdzQXZhaWxhYmxlLHdpZHRoOmgxfSksWihSNSx7cGFuZWxXaWR0aDpoMSx2aXNpYmxlOmExLG9uUG9pbnRlckRvd246QzAsYXJpYUxhYmVsOiJSZXNpemUgdG9vbHMgcGFuZWwifSksWih3NCx7b3BlbjpxLG9uQ2xvc2U6KCk9PkcoITEpLHVkaWQ6JC5kZXZpY2UsdGFyZ2V0czpILnRhcmdldHMsc2VsZWN0ZWRUYXJnZXRJZDpWLG9uU2VsZWN0VGFyZ2V0OkMsbG9hZGluZzpILmxvYWRpbmcsZXJyb3I6SC5lcnJvcixvblJlZnJlc2g6KCk9PnZvaWQgSC5yZWZyZXNoKCksd2lkdGg6QjB9KSxaKFI1LHtwYW5lbFdpZHRoOkIwLHZpc2libGU6cSxvblBvaW50ZXJEb3duOkQxLGFyaWFMYWJlbDoiUmVzaXplIFdlYktpdCBEZXZUb29scyBwYW5lbCJ9KV19KX0pfVE5KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb290IikpLnJlbmRlcihaKF9aLHt9KSk7Cjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==","base64").toString("utf-8");return l8}function R1(){return new Promise(($)=>{_0("xcrun",["simctl","list","devices","-j"],{encoding:"utf-8",timeout:3000},(Q,Z)=>{if(Q)return $([]);try{let J=JSON.parse(Z),Y=[];for(let[X,G]of Object.entries(J.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(X))continue;for(let H of G){if(H.isAvailable===!1)continue;Y.push({...H,runtime:X.replace(/^.*SimRuntime\./,"")})}}$(Y)}catch{$([])}})})}var C1=1610612736;function D1(){try{let $=Number(J4("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Q=Number(J4("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Z=J4("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),J=(X)=>{let G=Z.match(X);return G?Number(G[1]):0},Y=J(/Pages free:\s+(\d+)/)+J(/Pages inactive:\s+(\d+)/)+J(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite($)?$:0,availableBytes:Y*(Number.isFinite(Q)?Q:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function T1(){try{let $=J4("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),Q={},Z=0,J=/\/Devices\/([0-9A-F-]{36})\//i;for(let Y of $.split(`
|
|
81
|
-
`)){let X=Y.trimStart();if(!X)continue;let G=J.exec(X);if(!G)continue;let H=Number(X.split(/\s+/,1)[0]);if(!Number.isFinite(H))continue;let K=H*1024,W=G[1].toUpperCase();Q[W]=(Q[W]??0)+K,Z+=K}return{perUdid:Q,totalBytes:Z}}catch{return{perUdid:{},totalBytes:0}}}function
|
|
80
|
+
`),Q.resume(),!0}function j1($,Q,Z,J){if(!p$($,Q))return;let Y=new T$(J);Y.binaryType="arraybuffer";let X=!1,G=!1,H=[],K=Buffer.from(Z),W=()=>{if(G)return;G=!0;try{Y.close()}catch{}try{Q.end(e8(8,Buffer.alloc(0)))}catch{}try{Q.destroy()}catch{}},z=(B)=>{if(X&&Y.readyState===T$.OPEN){Y.send(B.opcode===1?B.payload.toString("utf8"):k$(B.payload));return}H.push({opcode:B.opcode,payload:Buffer.from(B.payload)})},L=()=>{try{while(K.length>0){let B=u$(K);if(!B)break;if(K=K.subarray(B.consumed),B.opcode===8){G4(Q,8,B.payload),W();return}if(B.opcode===9){G4(Q,10,B.payload);continue}if(B.opcode===1||B.opcode===2)z({opcode:B.opcode,payload:B.payload})}}catch{W()}};Y.onopen=()=>{X=!0;for(let B of H)Y.send(B.opcode===1?B.payload.toString("utf8"):k$(B.payload));H=[]},Y.onmessage=(B)=>{let U=B.data,M=typeof U==="string"?Buffer.from(U):Buffer.from(U);G4(Q,typeof U==="string"?1:2,M)},Y.onerror=W,Y.onclose=W,Q.on("data",(B)=>{if(typeof B==="string")B=Buffer.from(B);K=Buffer.concat([K,B]),L()}),Q.on("error",W),Q.on("close",W),L()}async function R1($,Q,Z){if(!s8(Z)){Q.writeHead(400,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"invalid_device"}));return}if($.method!=="GET"){Q.writeHead(405,{Allow:"GET","Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"method_not_allowed"}));return}try{let J=await I9(Z);Q.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify(J))}catch(J){Q.writeHead(500,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({udid:Z,alive:!1,error:J instanceof Error?J.message:String(J)}))}}function C1($,Q,Z,J,Y){if(!Z)return!1;let X=J.split("?")[0];if(X==="/camera/status")return R1($,Q,Z),!0;if((X==="/webrtc/offer"||X==="/webrtc/close"||X==="/webrtc/stats"||X==="/stream-settings")&&$.method==="OPTIONS")return V8(Q),!0;if(X==="/webrtc/stats"){let H=s9(Z);if(!H)return!1;return H.handleWebRTCStats($,Q),!0}let G;try{G=a0(Z,Y)}catch{return!1}switch(X){case"/stream.mjpeg":return G.handleMjpeg($,Q),!0;case"/stream.avcc":return G.handleAvcc($,Q),!0;case"/stream-settings":return G.handleStreamSettings($,Q),!0;case"/config":return G.handleConfig($,Q),!0;case"/health":return G.handleHealth($,Q),!0;case"/webrtc/offer":return G.handleWebRTCOffer($,Q),!0;case"/webrtc/close":return G.handleWebRTCClose($,Q),!0;case"/ax":return G.handleAx($,Q),!0;case"/foreground":return G.handleForeground($,Q),!0;default:return!1}}async function D1($,Q,Z,J){if(await new Promise((X)=>L0("xcrun",["simctl","boot",$],()=>X())),!await new Promise((X)=>{L0("xcrun",["simctl","bootstatus",$,"-b"],{timeout:180000},(G)=>X(!G))})){if(!await new Promise((G)=>{L0("xcrun",["simctl","list","devices","-j"],(H,K)=>{if(H)return G(!1);try{let W=JSON.parse(K);G(Object.values(W.devices).flat().some((z)=>z.udid===$&&z.state==="Booted"))}catch{G(!1)}})}))return`Device ${$} failed to reach booted state`}return C9(R9($,Q,Z,"127.0.0.1",J)),null}function P1($,Q){let Z=[],J=[],Y=Buffer.from(Q),X=!1,G=()=>{if(X)return;X=!0;for(let W of J)W()},H=()=>{G();try{$.end(e8(8,Buffer.alloc(0)))}catch{}try{$.destroy()}catch{}},K=()=>{for(;;){let W;try{W=u$(Y)}catch{H();return}if(!W)return;if(Y=Y.subarray(W.consumed),W.opcode===8)return H();if(W.opcode===9){G4($,10,W.payload);continue}if(W.opcode===1||W.opcode===2)for(let z of Z)z(W.payload)}};if($.on("data",(W)=>{Y=Buffer.concat([Y,W]),K()}),$.on("close",G),$.on("error",G),Q.length)K();return{send(W){G4($,2,W)},on(W,z){if(W==="message")Z.push(z);else J.push(z)},close:H}}function T1($,Q,Z,J,Y){if(!J)return!1;let X;try{X=a0(J,Y)}catch{return!1}if(!p$($,Q))return!0;return X.attachHidSocket(P1(Q,Z)),!0}function o8($,Q,Z,J,Y,X=!1){let G=(Q===""?"":Q)+"/grid/api",H=typeof Y==="string"?Y:void 0,K=typeof Y==="object"?Y:m$(H);return{...$,basePath:Q,logsEndpoint:D0(Q,"/logs",$.device),appStateEndpoint:D0(Q,"/appstate",$.device),eventLogEndpoint:D0(Q,"/api/event-log",$.device),eventLogEventsEndpoint:D0(Q,"/api/event-log/events",$.device),metricsEndpoint:D0(Q,"/metrics",$.device),axEndpoint:D0(Q,"/ax",$.device),cameraStatusEndpoint:`${Q==="/"?"":Q}/helper/${encodeURIComponent($.device)}/camera/status`,devtoolsEndpoint:D0(Q,"/devtools",$.device),streamSettingsEndpoint:L1($.streamUrl),serveSimBin:Z,gridApiEndpoint:G,gridStartEndpoint:G+"/start",gridShutdownEndpoint:G+"/shutdown",gridMemoryEndpoint:G+"/memory",previewEndpoint:Q===""?"/":Q,execToken:J,...H?{codec:H}:{},...K?{streamSettings:K}:{},...X?{proxyHelpers:!0}:{}}}async function E1($){return new Promise((Q)=>{let Z=J1();Z.once("error",()=>Q(!1)),Z.once("listening",()=>Z.close(()=>Q(!0))),Z.listen($,"127.0.0.1")})}async function f$($){let Q=`http://127.0.0.1:${$}`;try{let Z=await fetch(`${Q}/json/version`);if(!Z.ok)return null;if((await Z.json()).Browser!=="Safari/inspect-webkit")return null;return{port:$,cdpUrl:Q,async listTargets(){return(await(await fetch(`${Q}/json/list`)).json()).filter((G)=>G.id.startsWith("sim:")).map((G)=>{let K=G.id.split(":")[1],W=G.description?.match(/\(([^)]+)\)/)?.[1];return{id:G.id,title:G.title||G.url||"Untitled",url:/^https?:/i.test(G.url)?G.url:"about:blank",type:G.type||"page",udid:K,bundleId:W}})}}}catch{return null}}async function I1(){if(C0)try{return await(await C0).listTargets(),C0}catch{C0=null}return C0=(async()=>{let{startCdpServer:$}=await Promise.resolve().then(() => (C$(),R$));for(let Q=w4;Q<w4+50;Q++){if(!await E1(Q)){let Z=await f$(Q);if(Z)return Z;continue}try{let Z=await $({host:"127.0.0.1",port:Q});return{port:Q,cdpUrl:`http://127.0.0.1:${Q}`,async listTargets(){return Z.getTargets().filter((J)=>J.source?.kind==="simulator").map((J)=>{let Y=J.url??"";return{id:J.targetId,title:J.title||J.appName||Y||"Untitled",url:/^https?:/i.test(Y)?Y:"about:blank",type:J.type||"page",appName:J.appName,bundleId:J.bundleId,udid:J.source?.id,inUseByOtherInspector:!!J.inUseByOtherInspector}})},highlightTarget:Z.highlightTarget?.bind(Z),releaseHighlight:Z.releaseHighlight?.bind(Z)}}catch(Z){if(Z?.code==="EADDRINUSE"){let J=await f$(Q);if(J)return J;continue}throw Z}}throw Error(`No available inspect-webkit port found in ${w4}-${w4+49}`)})().catch(($)=>{throw C0=null,$}),C0}function x1($){return Array.isArray($)?$[0]:$}function c$($){return x1($.headers["x-forwarded-proto"])?.split(",",1)[0]?.trim().toLowerCase()}function q1($){return c$($)==="https"?"wss":"ws"}function k4($){return c$($)==="https"?"https":"http"}function S1($,Q,Z,J){let Y=new URL(`${$}/inspector.html`,"http://serve-sim.local");return Y.searchParams.set(Q,`${Z}/page/${encodeURIComponent(J)}`),`${Y.pathname}${Y.search}`}var a8=null;function r8(){try{let $=process.argv;if($[1]&&v$($[1]))return $[1]}catch{}return"serve-sim"}function w1(){if(!a8)a8=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWFtYmVyLTQwMDpva2xjaCg4Mi44JSAuMTg5IDg0LjQyOSk7LS1jb2xvci1lbWVyYWxkLTQwMDpva2xjaCg3Ni41JSAuMTc3IDE2My4yMjMpOy0tY29sb3ItY3lhbi00MDA6b2tsY2goNzguOSUgLjE1NCAyMTEuNTMpOy0tY29sb3Itc2t5LTQwMDpva2xjaCg3NC42JSAuMTYgMjMyLjY2MSk7LS1jb2xvci12aW9sZXQtNDAwOm9rbGNoKDcwLjIlIC4xODMgMjkzLjU0MSk7LS1jb2xvci1ibGFjazojMDAwOy0tY29sb3Itd2hpdGU6I2ZmZjstLXNwYWNpbmc6LjI1cmVtOy0tZm9udC13ZWlnaHQtbWVkaXVtOjUwMDstLWZvbnQtd2VpZ2h0LXNlbWlib2xkOjYwMDstLXRyYWNraW5nLXdpZGU6LjAyNWVtOy0tbGVhZGluZy10aWdodDoxLjI1Oy0tbGVhZGluZy1zbnVnOjEuMzc1Oy0tcmFkaXVzLXhzOi4xMjVyZW07LS1yYWRpdXMtbWQ6LjM3NXJlbTstLXJhZGl1cy1sZzouNXJlbTstLXJhZGl1cy14bDouNzVyZW07LS1lYXNlLW91dDpjdWJpYy1iZXppZXIoMCwwLC4yLDEpOy0tYmx1ci1tZDoxMnB4Oy0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7LS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpOy0tZGVmYXVsdC1mb250LWZhbWlseTp2YXIoLS1mb250LXNhbnMpOy0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7LS1jb2xvci1wYW5lbDojMWMxYzFlOy0tY29sb3ItcGFuZWwtYmc6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnKTstLWNvbG9yLXBhbmVsLWJnLXRyYW5zbHVjZW50OnZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc2x1Y2VudCk7LS1jb2xvci1wYW5lbC1vdmVybGF5OiMxODE4MThhNjstLWNvbG9yLXBhbmVsLWRlZXA6IzExMTExMzstLWNvbG9yLXBhZ2U6IzBhMGEwYTstLWNvbG9yLWFjY2VudDojYTViNGZjOy0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkOiMzNGQzOTk7LS1jb2xvci1kYW5nZXI6I2Y4NzE3MTstLWNvbG9yLWRhbmdlci1zb2Z0OiNmY2E1YTU7LS1jb2xvci13YXJuaW5nOiNmYmJmMjQ7LS1jb2xvci13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLWZvbnQtc3lzdGVtOi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZ9fUBsYXllciBiYXNleyosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmJhY2tkcm9we2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH1odG1sLDpob3N0ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO3RhYi1zaXplOjQ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtZm9udC1mYW1pbHksdWktc2Fucy1zZXJpZixzeXN0ZW0tdWksc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LWZlYXR1cmUtc2V0dGluZ3Msbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWhye2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7aGVpZ2h0OjB9YWJicjp3aGVyZShbdGl0bGVdKXstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9YXtjb2xvcjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtbW9uby1mb250LWZhbWlseSx1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sTW9uYWNvLENvbnNvbGFzLCJMaWJlcmF0aW9uIE1vbm8iLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MH1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZX1pbWcsc3ZnLHZpZGVvLGNhbnZhcyxhdWRpbyxpZnJhbWUsZW1iZWQsb2JqZWN0e2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31idXR0b24saW5wdXQsc2VsZWN0LG9wdGdyb3VwLHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LW1vei1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OnBsYWNlaG9sZGVye29wYWNpdHk6MX1Ac3VwcG9ydHMgKCBub3QgKC13ZWJraXQtYXBwZWFyYW5jZTogLWFwcGxlLXBheS1idXR0b24pKSBvciAoY29udGFpbi1pbnRyaW5zaWMtc2l6ZTogMXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLGN1cnJlbnRjb2xvciA1MCUsdHJhbnNwYXJlbnQpfX19dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXt0ZXh0LWFsaWduOmluaGVyaXQ7bWluLWhlaWdodDoxbGh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7ZGlzcGxheTppbmxpbmUtZmxleH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcntwYWRkaW5nOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1kYXktZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjF9Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9YnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufWlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0pe2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257YXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbGF5ZXIgdXRpbGl0aWVzey5cW2NvbnRhaW5lci10eXBlXDppbmxpbmUtc2l6ZVxde2NvbnRhaW5lci10eXBlOmlubGluZS1zaXplfS5wb2ludGVyLWV2ZW50cy1hdXRve3BvaW50ZXItZXZlbnRzOmF1dG99LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uc3Itb25seXtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47Y2xpcC1wYXRoOmluc2V0KDUwJSk7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci13aWR0aDowO3dpZHRoOjFweDtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O3BhZGRpbmc6MH0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHtpbnNldDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnRvcC0ze3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS50b3AtXFsycHhcXXt0b3A6MnB4fS50b3AtXFtjYWxjXCgxMDBcJVwrNHB4XClcXXt0b3A6Y2FsYygxMDAlICsgNHB4KX0udG9wLVxbY2FsY1woMTAwXCVcKzZweFwpXF17dG9wOmNhbGMoMTAwJSArIDZweCl9LnRvcC1mdWxse3RvcDoxMDAlfS5yaWdodC0we3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LnJpZ2h0LTBcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnJpZ2h0LTJcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5yaWdodC0ze3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnJpZ2h0LVxbOXB4XF17cmlnaHQ6OXB4fS5ib3R0b20tMHtib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0uYm90dG9tLTBcLjV7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5ib3R0b20tM3tib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ubGVmdC0we2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubGVmdC0xXC8ye2xlZnQ6NTAlfS5sZWZ0LTJcLjV7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmxlZnQtM3tsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnotMXt6LWluZGV4OjF9LnotMTB7ei1pbmRleDoxMH0uei0yMHt6LWluZGV4OjIwfS56LTMwe3otaW5kZXg6MzB9LnotMzV7ei1pbmRleDozNX0uei0zNnt6LWluZGV4OjM2fS56LTQwe3otaW5kZXg6NDB9LnotNTB7ei1pbmRleDo1MH0uY29udGFpbmVye3dpZHRoOjEwMCV9QG1lZGlhIChtaW4td2lkdGg6NDByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo0OHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NDhyZW19fUBtZWRpYSAobWluLXdpZHRoOjY0cmVtKXsuY29udGFpbmVye21heC13aWR0aDo2NHJlbX19QG1lZGlhIChtaW4td2lkdGg6ODByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjgwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo5NnJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6OTZyZW19fS5tLTB7bWFyZ2luOmNhbGModmFyKC0tc3BhY2luZykqMCl9Li1teC0xe21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSotMSl9Lm14LTBcLjV7bWFyZ2luLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ubXgtMVwuNXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uLW15LTJ7bWFyZ2luLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLTIpfS5teS0xe21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS4tbXQtMFwuNXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqLS41KX0ubXQtMFwuNXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tdC0xe21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ubXQtMnttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9Lm10LVxbM3B4XF17bWFyZ2luLXRvcDozcHh9Lm1yLVxbM3B4XF17bWFyZ2luLXJpZ2h0OjNweH0ubWwtMFwuNXttYXJnaW4tbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ubWwtMVwuNXttYXJnaW4tbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9Lm1sLWF1dG97bWFyZ2luLWxlZnQ6YXV0b30uYm94LWJvcmRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXh7ZGlzcGxheTpmbGV4fS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LnRhYmxle2Rpc3BsYXk6dGFibGV9LlxbYXNwZWN0LXJhdGlvXDoxNlwvMTFcXXthc3BlY3QtcmF0aW86MTYvMTF9LnNpemUtMVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uc2l6ZS0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5zaXplLTNcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnNpemUtNHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5zaXplLTV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uc2l6ZS05e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqOSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqOSl9LnNpemUtXFsycHhcXXt3aWR0aDoycHg7aGVpZ2h0OjJweH0uc2l6ZS1cWzE0cHhcXXt3aWR0aDoxNHB4O2hlaWdodDoxNHB4fS5zaXplLVxbMThweFxde3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHh9LnNpemUtXFsxOXB4XF17d2lkdGg6MTlweDtoZWlnaHQ6MTlweH0uc2l6ZS1mdWxse3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LmgtMlwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5oLTN7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LmgtM1wuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5oLTR7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNCl9LmgtNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uaC01XC41e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjUuNSl9LmgtNntoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0uaC03e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjcpfS5oLTh7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqOCl9LmgtMTB7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMTApfS5oLVxbM3B4XF17aGVpZ2h0OjNweH0uaC1cWzEzcHhcXXtoZWlnaHQ6MTNweH0uaC1cWzE0cHhcXXtoZWlnaHQ6MTRweH0uaC1cWzE2cHhcXXtoZWlnaHQ6MTZweH0uaC1cWzE4cHhcXXtoZWlnaHQ6MThweH0uaC1cWzIycHhcXXtoZWlnaHQ6MjJweH0uaC1cWzI2cHhcXXtoZWlnaHQ6MjZweH0uaC1cWzMwcHhcXXtoZWlnaHQ6MzBweH0uaC1mdWxse2hlaWdodDoxMDAlfS5oLXB4e2hlaWdodDoxcHh9Lmgtc2NyZWVue2hlaWdodDoxMDB2aH0ubWF4LWgtOTB7bWF4LWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LWgtXFsyNjBweFxde21heC1oZWlnaHQ6MjYwcHh9Lm1heC1oLVxbMzIwcHhcXXttYXgtaGVpZ2h0OjMyMHB4fS5tYXgtaC1mdWxse21heC1oZWlnaHQ6MTAwJX0ubWluLWgtMHttaW4taGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMCl9Lm1pbi1oLVxbMjJweFxde21pbi1oZWlnaHQ6MjJweH0ubWluLWgtXFszMHB4XF17bWluLWhlaWdodDozMHB4fS5taW4taC1cWzM2cHhcXXttaW4taGVpZ2h0OjM2cHh9Lm1pbi1oLVxbNDRweFxde21pbi1oZWlnaHQ6NDRweH0ubWluLWgtcHh7bWluLWhlaWdodDoxcHh9LnctMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS53LTJcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS53LTN7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0udy0zXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0udy00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnctNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS53LTZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0udy03e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNyl9LnctOHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS53LTEwe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTApfS53LTIxe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMjEpfS53LVxbMjJweFxde3dpZHRoOjIycHh9LnctXFszMHB4XF17d2lkdGg6MzBweH0udy1cWzMyXCVcXXt3aWR0aDozMiV9LnctXFszNlwlXF17d2lkdGg6MzYlfS53LVxbNDBcJVxde3dpZHRoOjQwJX0udy1cWzQyXCVcXXt3aWR0aDo0MiV9LnctXFs0NlwlXF17d2lkdGg6NDYlfS53LVxbNDhcJVxde3dpZHRoOjQ4JX0udy1cWzU4XCVcXXt3aWR0aDo1OCV9LnctXFs2MlwlXF17d2lkdGg6NjIlfS53LVxbNjhcJVxde3dpZHRoOjY4JX0udy1cWzcwXCVcXXt3aWR0aDo3MCV9LnctXFs3NFwlXF17d2lkdGg6NzQlfS53LVxbMTIwcHhcXXt3aWR0aDoxMjBweH0udy1cW2NhbGNcKDEwMFwlXCs4cHhcKVxde3dpZHRoOmNhbGMoMTAwJSArIDhweCl9LnctXFttaW5cKDMyMHB4XCxjYWxjXCgxMDB2dy0zMnB4XClcKVxde3dpZHRoOm1pbigzMjBweCwxMDB2dyAtIDMycHgpfS53LWZ1bGx7d2lkdGg6MTAwJX0udy1tYXh7d2lkdGg6bWF4LWNvbnRlbnR9LnctcHh7d2lkdGg6MXB4fS5tYXgtdy05MHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC13LTEyMHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMjApfS5tYXgtdy1cWzE1MHB4XF17bWF4LXdpZHRoOjE1MHB4fS5tYXgtdy1cWzIyMHB4XF17bWF4LXdpZHRoOjIyMHB4fS5tYXgtdy1cWzM2MHB4XF17bWF4LXdpZHRoOjM2MHB4fS5tYXgtdy1mdWxse21heC13aWR0aDoxMDAlfS5taW4tdy0we21pbi13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4tdy1cWzU2cHhcXXttaW4td2lkdGg6NTZweH0ubWluLXctXFsyMDBweFxde21pbi13aWR0aDoyMDBweH0ubWluLXctXFsyMjBweFxde21pbi13aWR0aDoyMjBweH0ubWluLXctcHh7bWluLXdpZHRoOjFweH0uZmxleC0xe2ZsZXg6MX0uc2hyaW5re2ZsZXgtc2hyaW5rOjF9LnNocmluay0we2ZsZXgtc2hyaW5rOjB9Lmdyb3d7ZmxleC1ncm93OjF9Li10cmFuc2xhdGUteC0xXC8yey0tdHctdHJhbnNsYXRlLXg6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0udHJhbnNsYXRlLXgtMXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0uLXRyYW5zbGF0ZS15LTFcLzJ7LS10dy10cmFuc2xhdGUteTpjYWxjKGNhbGMoMS8yKjEwMCUpKi0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS50cmFuc2Zvcm17dHJhbnNmb3JtOnZhcigtLXR3LXJvdGF0ZS14LCl2YXIoLS10dy1yb3RhdGUteSwpdmFyKC0tdHctcm90YXRlLXosKXZhcigtLXR3LXNrZXcteCwpdmFyKC0tdHctc2tldy15LCl9LmFuaW1hdGUtXFtncmlkLXNwaW5fMFwuN3NfbGluZWFyX2luZmluaXRlXF17YW5pbWF0aW9uOmdyaWQtc3BpbiAuN3MgbGluZWFyIGluZmluaXRlfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjhzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjhzIGxpbmVhciBpbmZpbml0ZX0uY3Vyc29yLWNvbC1yZXNpemV7Y3Vyc29yOmNvbC1yZXNpemV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3Itbm90LWFsbG93ZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXByb2dyZXNze2N1cnNvcjpwcm9ncmVzc30uY3Vyc29yLXRleHR7Y3Vyc29yOnRleHR9LnRvdWNoLW5vbmV7dG91Y2gtYWN0aW9uOm5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0ubGlzdC1ub25le2xpc3Qtc3R5bGUtdHlwZTpub25lfS5hcHBlYXJhbmNlLW5vbmV7YXBwZWFyYW5jZTpub25lfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6MWZyXzFmcl8xZnJcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnJ9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvXzFmcl9hdXRvXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG99LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvX21pbm1heFwoMFwsMWZyXClfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIG1pbm1heCgwLDFmcilhdXRvfS5ncmlkLWNvbHMtMntncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsbWlubWF4KDAsMWZyKSl9LmdyaWQtY29scy1cWzU2cHhfMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6NTZweCAxZnIgYXV0b30uZmxleC1jb2x7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmZsZXgtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXB9LnBsYWNlLWl0ZW1zLWNlbnRlcntwbGFjZS1pdGVtczogY2VudGVyfS5pdGVtcy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZX0uaXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLXN0YXJ0e2FsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0fS5pdGVtcy1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2h9Lmp1c3RpZnktYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uanVzdGlmeS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uanVzdGlmeS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5nYXAtMFwuNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LmdhcC0xe2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5nYXAtMVwuNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5nYXAtMntnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0uZ2FwLTJcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uZ2FwLTN7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmdhcC01e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS5nYXAtXFs1cHhcXXtnYXA6NXB4fS5nYXAtcHh7Z2FwOjFweH0uZ2FwLXgtM3tjb2x1bW4tZ2FwOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmdhcC15LTBcLjV7cm93LWdhcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uanVzdGlmeS1zZWxmLWVuZHtqdXN0aWZ5LXNlbGY6ZmxleC1lbmR9LnRydW5jYXRle292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ub3ZlcmZsb3ctaGlkZGVue292ZXJmbG93OmhpZGRlbn0ub3ZlcmZsb3cteS1hdXRve292ZXJmbG93LXk6YXV0b30ucm91bmRlZHtib3JkZXItcmFkaXVzOi4yNXJlbX0ucm91bmRlZC1cWzJweFxde2JvcmRlci1yYWRpdXM6MnB4fS5yb3VuZGVkLVxbM3B4XF17Ym9yZGVyLXJhZGl1czozcHh9LnJvdW5kZWQtXFs0cHhcXXtib3JkZXItcmFkaXVzOjRweH0ucm91bmRlZC1cWzVweFxde2JvcmRlci1yYWRpdXM6NXB4fS5yb3VuZGVkLVxbN3B4XF17Ym9yZGVyLXJhZGl1czo3cHh9LnJvdW5kZWQtXFs4cHhcXXtib3JkZXItcmFkaXVzOjhweH0ucm91bmRlZC1cWzlweFxde2JvcmRlci1yYWRpdXM6OXB4fS5yb3VuZGVkLVxbMTBweFxde2JvcmRlci1yYWRpdXM6MTBweH0ucm91bmRlZC1cWzE0cHhcXXtib3JkZXItcmFkaXVzOjE0cHh9LnJvdW5kZWQtZnVsbHtib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0ucm91bmRlZC1sZ3tib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1sZyl9LnJvdW5kZWQtbWR7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbWQpfS5yb3VuZGVkLW5vbmV7Ym9yZGVyLXJhZGl1czowfS5yb3VuZGVkLXhse2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXhsKX0ucm91bmRlZC14c3tib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy14cyl9LnJvdW5kZWQtdC1cWzEwcHhcXXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjEwcHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MTBweH0uYm9yZGVye2JvcmRlci1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDoxcHh9LmJvcmRlci0we2JvcmRlci1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDowfS5ib3JkZXItMntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MnB4fS5ib3JkZXItdHtib3JkZXItdG9wLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1ye2JvcmRlci1yaWdodC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci1yaWdodC13aWR0aDoxcHh9LmJvcmRlci1ie2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItYm90dG9tLXdpZHRoOjFweH0uYm9yZGVyLWRhc2hlZHstLXR3LWJvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXN0eWxlOmRhc2hlZH0uYm9yZGVyLW5vbmV7LS10dy1ib3JkZXItc3R5bGU6bm9uZTtib3JkZXItc3R5bGU6bm9uZX0uXCFib3JkZXItXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjZcKVxde2JvcmRlci1jb2xvcjojMGE4NGZmOTkhaW1wb3J0YW50fS5ib3JkZXItXFtcIzNiNWY5OVxde2JvcmRlci1jb2xvcjojM2I1Zjk5fS5ib3JkZXItXFtcIzVmNjI2OFxde2JvcmRlci1jb2xvcjojNWY2MjY4fS5ib3JkZXItXFtcIzIyMlxde2JvcmRlci1jb2xvcjojMjIyfS5ib3JkZXItXFtcI2ZmNDUzYVxdXC81MHtib3JkZXItY29sb3I6I2ZmNDUzYTgwO2JvcmRlci1jb2xvcjpjb2xvcihkaXNwbGF5LXAzIC45MjI2NzMgLjMzMzEzNCAuMjcxNTEvLjUpO2JvcmRlci1jb2xvcjpsYWIoNTguNzYyOCUgNjkuODQ2NyA1MC4zODg2Ly41KX0uYm9yZGVyLWFjY2VudHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOiNmODcxNzEzM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8yMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLWRhbmdlclwvMzB7Ym9yZGVyLWNvbG9yOiNmODcxNzE0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8zMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikzMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjojZmJiZjI0NDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRle2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTB7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMjB7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8yNXtib3JkZXItY29sb3I6I2ZmZmZmZjQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMjV7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8zMHtib3JkZXItY29sb3I6I2ZmZmZmZjRkfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcL1xbMFwuMDZcXXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJvcmRlci10LVxbXCNmNGY0ZjVcXXtib3JkZXItdG9wLWNvbG9yOiNmNGY0ZjV9LmJvcmRlci10LXdoaXRle2JvcmRlci10b3AtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItdC13aGl0ZVwvNjB7Ym9yZGVyLXRvcC1jb2xvcjojZmZmOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItdC13aGl0ZVwvNjB7Ym9yZGVyLXRvcC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjAlLHRyYW5zcGFyZW50KX19LlwhYmctXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjA4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmYxNCFpbXBvcnRhbnR9LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZiFpbXBvcnRhbnR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXCFiZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCkhaW1wb3J0YW50fX0uYmctXFtcIzBhMGEwY1xde2JhY2tncm91bmQtY29sb3I6IzBhMGEwY30uYmctXFtcIzBhODRmZlxde2JhY2tncm91bmQtY29sb3I6IzBhODRmZn0uYmctXFtcIzFjMWMxY1xde2JhY2tncm91bmQtY29sb3I6IzFjMWMxY30uYmctXFtcIzZlNmU3Mlxde2JhY2tncm91bmQtY29sb3I6IzZlNmU3Mn0uYmctXFtcIzlhOWE5ZVxde2JhY2tncm91bmQtY29sb3I6IzlhOWE5ZX0uYmctXFtcIzIwMmIzYVxde2JhY2tncm91bmQtY29sb3I6IzIwMmIzYX0uYmctXFtcIzIyMlxde2JhY2tncm91bmQtY29sb3I6IzIyMn0uYmctXFtcIzI2MzY0Y1xde2JhY2tncm91bmQtY29sb3I6IzI2MzY0Y30uYmctXFtcIzEwMTAxMFxde2JhY2tncm91bmQtY29sb3I6IzEwMTAxMH0uYmctXFtcI2Y4NzE3MVxde2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MX0uYmctXFtcI2ZmNDUzYVxdXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjQ1M2ExYTtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yKGRpc3BsYXktcDMgLjkyMjY3MyAuMzMzMTM0IC4yNzE1MS8uMSk7YmFja2dyb3VuZC1jb2xvcjpsYWIoNTguNzYyOCUgNjkuODQ2NyA1MC4zODg2Ly4xKX0uYmctXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjIyXClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmYzOH0uYmctXFtyZ2JhXCg5OVwsMTAyXCwyNDFcLDBcLjE4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MzY2ZjEyZX0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYmctYmxhY2t7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ibGFjayl9LmJnLWJsYWNrXC85MHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDBlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1ibGFja1wvOTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItYmxhY2spOTAlLHRyYW5zcGFyZW50KX19LmJnLWRhbmdlci1zb2Z0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpfS5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MTFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTEwJSx0cmFuc3BhcmVudCl9fS5iZy1wYWdle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFnZSl9LmJnLXBhbmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfS5iZy1wYW5lbC1iZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWJnKX0uYmctcGFuZWwtYmctdHJhbnNsdWNlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1iZy10cmFuc2x1Y2VudCl9LmJnLXBhbmVsLWRlZXB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1kZWVwKX0uYmctcGFuZWwtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLW92ZXJsYXkpfS5iZy1zdWNjZXNzLWVtZXJhbGR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1zdWNjZXNzLWVtZXJhbGQpfS5iZy10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwfS5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmYmJmMjQxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13YXJuaW5nKTEwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEwe2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzE1e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xNXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNSUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC81MHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMDh9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDNcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA0XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDhcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNiUsdHJhbnNwYXJlbnQpfX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKDE0NWRlZ1wsXCMyNTNhNWZcLFwjMTYyMTMyXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgxNDVkZWcsIzI1M2E1ZiwjMTYyMTMyKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwsXCMxYzFjMWVfMFwlXCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxYzFjMWUgMCUsIzFjMWMxZTAwIDEwMCUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8wXCVcLFwjMWMxYzFlXzU1XCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLCMxYzFjMWUwMCAwJSwjMWMxYzFlIDU1JSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlMDAgMCUsIzFjMWMxZSAxMDAlKX0ub2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0ucC0we3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucC0wXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnAtMXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnAtM1wuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHgtMFwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHgtMXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weC0xXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5weC0zXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHgtNHtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5weC01e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnB4LVxbNVwuNXB4XF17cGFkZGluZy1pbmxpbmUtc3RhcnQ6NS41cHg7cGFkZGluZy1pbmxpbmUtZW5kOjUuNXB4fS5weC1cWzdweFxde3BhZGRpbmctaW5saW5lLXN0YXJ0OjdweDtwYWRkaW5nLWlubGluZS1lbmQ6N3B4fS5weS0wXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB5LTF7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weS0xXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5weS0ye3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHktMlwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHktNHtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnB5LTZ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5weS1cWzJweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6MnB4O3BhZGRpbmctYmxvY2stZW5kOjJweH0ucHktXFszcHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjNweDtwYWRkaW5nLWJsb2NrLWVuZDozcHh9LnB5LVxbNXB4XF17cGFkZGluZy1ibG9jay1zdGFydDo1cHg7cGFkZGluZy1ibG9jay1lbmQ6NXB4fS5weS1cWzdweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6N3B4O3BhZGRpbmctYmxvY2stZW5kOjdweH0ucHQtMFwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHQtMXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wdC0xXC41e3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHQtMlwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnByLTJ7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wci0zXC41e3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5wci1cWzI2cHhcXXtwYWRkaW5nLXJpZ2h0OjI2cHh9LnBiLTBcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnBiLTF7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucGItMVwuNXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnBiLTJ7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucGItXFsycHhcXXtwYWRkaW5nLWJvdHRvbToycHh9LnBsLTJ7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMil9LnBsLTJcLjV7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucGwtM3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucGwtN3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0ucGwtXFsyNnB4XF17cGFkZGluZy1sZWZ0OjI2cHh9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LlxbZm9udC1mYW1pbHlcOi1hcHBsZS1zeXN0ZW1cLHN5c3RlbS11aVwsc2Fucy1zZXJpZlxde2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sTm90byBTYW5zLFVidW50dSxDYW50YXJlbGwsSGVsdmV0aWNhIE5ldWUsc2Fucy1zZXJpZn0uZm9udC1cW2luaGVyaXRcXXtmb250LWZhbWlseTppbmhlcml0fS5mb250LW1vbm97Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKX0uZm9udC1zeXN0ZW17Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1zeXN0ZW0pfS50ZXh0LVxbOXB4XF17Zm9udC1zaXplOjlweH0udGV4dC1cWzEwcHhcXXtmb250LXNpemU6MTBweH0udGV4dC1cWzExXC41cHhcXXtmb250LXNpemU6MTEuNXB4fS50ZXh0LVxbMTFweFxde2ZvbnQtc2l6ZToxMXB4fS50ZXh0LVxbMTJweFxde2ZvbnQtc2l6ZToxMnB4fS50ZXh0LVxbMTNweFxde2ZvbnQtc2l6ZToxM3B4fS50ZXh0LVxbMTRweFxde2ZvbnQtc2l6ZToxNHB4fS50ZXh0LVxbMTdweFxde2ZvbnQtc2l6ZToxN3B4fS50ZXh0LVxbMThweFxde2ZvbnQtc2l6ZToxOHB4fS5sZWFkaW5nLVxbMVwuNVxdey0tdHctbGVhZGluZzoxLjU7bGluZS1oZWlnaHQ6MS41fS5sZWFkaW5nLVxbMVwuMzVcXXstLXR3LWxlYWRpbmc6MS4zNTtsaW5lLWhlaWdodDoxLjM1fS5sZWFkaW5nLW5vbmV7LS10dy1sZWFkaW5nOjE7bGluZS1oZWlnaHQ6MX0ubGVhZGluZy1zbnVney0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXNudWcpO2xpbmUtaGVpZ2h0OnZhcigtLWxlYWRpbmctc251Zyl9LmxlYWRpbmctdGlnaHR7LS10dy1sZWFkaW5nOnZhcigtLWxlYWRpbmctdGlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWxlYWRpbmctdGlnaHQpfS5mb250LW1lZGl1bXstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKX0uZm9udC1zZW1pYm9sZHstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCl9LnRyYWNraW5nLVxbMFwuMWVtXF17LS10dy10cmFja2luZzouMWVtO2xldHRlci1zcGFjaW5nOi4xZW19LnRyYWNraW5nLVxbMFwuMDJlbVxdey0tdHctdHJhY2tpbmc6LjAyZW07bGV0dGVyLXNwYWNpbmc6LjAyZW19LnRyYWNraW5nLVxbMFwuMDRlbVxdey0tdHctdHJhY2tpbmc6LjA0ZW07bGV0dGVyLXNwYWNpbmc6LjA0ZW19LnRyYWNraW5nLVxbMFwuMDZlbVxdey0tdHctdHJhY2tpbmc6LjA2ZW07bGV0dGVyLXNwYWNpbmc6LjA2ZW19LnRyYWNraW5nLVxbMFwuMDhlbVxdey0tdHctdHJhY2tpbmc6LjA4ZW07bGV0dGVyLXNwYWNpbmc6LjA4ZW19LnRyYWNraW5nLXdpZGV7LS10dy10cmFja2luZzp2YXIoLS10cmFja2luZy13aWRlKTtsZXR0ZXItc3BhY2luZzp2YXIoLS10cmFja2luZy13aWRlKX0uYnJlYWstd29yZHN7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS50ZXh0LWVsbGlwc2lze3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LndoaXRlc3BhY2Utbm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcH0uXCF0ZXh0LXdoaXRle2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKSFpbXBvcnRhbnR9LnRleHQtXFtcIzBhMGEwY1xde2NvbG9yOiMwYTBhMGN9LnRleHQtXFtcIzhlOGU5M1xde2NvbG9yOiM4ZThlOTN9LnRleHQtXFtcIzM0ZDM5OVxde2NvbG9yOiMzNGQzOTl9LnRleHQtXFtcIzA2MjAxOFxde2NvbG9yOiMwNjIwMTh9LnRleHQtXFtcI2M4ZDdmZlxde2NvbG9yOiNjOGQ3ZmZ9LnRleHQtXFtcI2QyZTdmZlxde2NvbG9yOiNkMmU3ZmZ9LnRleHQtXFtcI2ZmYjNhZFxde2NvbG9yOiNmZmIzYWR9LnRleHQtYWNjZW50e2NvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LnRleHQtYW1iZXItNDAwe2NvbG9yOnZhcigtLWNvbG9yLWFtYmVyLTQwMCl9LnRleHQtY3lhbi00MDB7Y29sb3I6dmFyKC0tY29sb3ItY3lhbi00MDApfS50ZXh0LWRhbmdlcntjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXIpfS50ZXh0LWRhbmdlci1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLWRhbmdlci1zb2Z0KX0udGV4dC1lbWVyYWxkLTQwMHtjb2xvcjp2YXIoLS1jb2xvci1lbWVyYWxkLTQwMCl9LnRleHQtc2t5LTQwMHtjb2xvcjp2YXIoLS1jb2xvci1za3ktNDAwKX0udGV4dC12aW9sZXQtNDAwe2NvbG9yOnZhcigtLWNvbG9yLXZpb2xldC00MDApfS50ZXh0LXdhcm5pbmd7Y29sb3I6dmFyKC0tY29sb3Itd2FybmluZyl9LnRleHQtd2FybmluZy1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLXdhcm5pbmctc29mdCl9LnRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS50ZXh0LXdoaXRlXC8zMHtjb2xvcjojZmZmZmZmNGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvMzB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTMwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC8zNXtjb2xvcjojZmZmZmZmNTl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvMzV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTM1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC80MHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzQ1e2NvbG9yOiNmZmZmZmY3M31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzUwe2NvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzU1e2NvbG9yOiNmZmZmZmY4Y31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzYwe2NvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzYwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjV7Y29sb3I6I2ZmZmZmZmE2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzY1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzB7Y29sb3I6I2ZmZmZmZmIzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzcwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzV7Y29sb3I6I2ZmZmZmZmJmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzc1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODB7Y29sb3I6I2ZmZmN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84NXtjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85MHtjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85NXtjb2xvcjojZmZmZmZmZjJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTk1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6I2ZmZmZmZjZifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDIlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjojZmZmZmZmN2F9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0OCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOiNmZmZmZmY5NH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU4LjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjojZmZmZmZmZWJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MiUsdHJhbnNwYXJlbnQpfX0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0udXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS50YWJ1bGFyLW51bXN7LS10dy1udW1lcmljLXNwYWNpbmc6dGFidWxhci1udW1zO2ZvbnQtdmFyaWFudC1udW1lcmljOnZhcigtLXR3LW9yZGluYWwsKXZhcigtLXR3LXNsYXNoZWQtemVybywpdmFyKC0tdHctbnVtZXJpYy1maWd1cmUsKXZhcigtLXR3LW51bWVyaWMtc3BhY2luZywpdmFyKC0tdHctbnVtZXJpYy1mcmFjdGlvbiwpfS5cW2ZvbnQtdmFyaWFudC1udW1lcmljXDp0YWJ1bGFyLW51bXNcXXtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Lm5vLXVuZGVybGluZXt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lfS5hbnRpYWxpYXNlZHstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0ub3BhY2l0eS0we29wYWNpdHk6MH0ub3BhY2l0eS00MHtvcGFjaXR5Oi40fS5vcGFjaXR5LTUwe29wYWNpdHk6LjV9Lm9wYWNpdHktNjB7b3BhY2l0eTouNn0ub3BhY2l0eS0xMDB7b3BhY2l0eToxfS5zaGFkb3d7LS10dy1zaGFkb3c6MCAxcHggM3B4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSksMCAxcHggMnB4IC0xcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzFweF8ycHhfcmdiYVwoMFwsMFwsMFwsMFwuMThcKVwsMF82cHhfMThweF9yZ2JhXCgwXCwwXCwwXCwwXC4yOFwpXCxpbnNldF8wXzBfMF8xcHhfcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMDZcKVxdey0tdHctc2hhZG93OjAgMXB4IDJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDJlKSwwIDZweCAxOHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNDcpLGluc2V0IDAgMCAwIDFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsI2ZmZmZmZjBmKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNFwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF84cHhfMjRweF9yZ2JhXCgwXCwwXCwwXCwwXC41XClcXXstLXR3LXNoYWRvdzowIDhweCAyNHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwODApO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF84cHhfMjRweF9yZ2JhXCgwXCwwXCwwXCwwXC40NVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDczKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMTJweF80MHB4X3JnYmFcKDBcLDBcLDBcLDBcLjU1XClcXXstLXR3LXNoYWRvdzowIDEycHggNDBweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDhjKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzhweF8wXzMycHhfcmdiYVwoMFwsMFwsMFwsMFwuMzVcKVxdey0tdHctc2hhZG93OjhweCAwIDMycHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA1OSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctbGd7LS10dy1zaGFkb3c6MCAxMHB4IDE1cHggLTNweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwwIDRweCA2cHggLTRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmcsLnJpbmctMXstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKTAgMCAwIGNhbGMoMXB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKXZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmctMnstLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKTAgMCAwIGNhbGMoMnB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKXZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LlxbYm94LXNoYWRvd1w6MF8wXzZweF9yZ2JhXCg3NFwsMjIyXCwxMjhcLDBcLjdcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjNGFkZTgwYjN9LlxbYm94LXNoYWRvd1w6MF8wXzZweF9yZ2JhXCgyNDhcLDExM1wsMTEzXCwwXC41NVwpXF17Ym94LXNoYWRvdzowIDAgNnB4ICNmODcxNzE4Y30ucmluZy1cW1wjMWMxYzFlXF17LS10dy1yaW5nLWNvbG9yOiMxYzFjMWV9LnJpbmctd2hpdGVcLzEwey0tdHctcmluZy1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsucmluZy13aGl0ZVwvMTB7LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0ub3V0bGluZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MXB4fS5ibHVyey0tdHctYmx1cjpibHVyKDhweCk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5ncmF5c2NhbGV7LS10dy1ncmF5c2NhbGU6Z3JheXNjYWxlKDEwMCUpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uYmFja2Ryb3AtYmx1cnstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cig4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItXFsxMnB4XF17LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIoMTJweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzE4cHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxOHB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLW1key0tdHctYmFja2Ryb3AtYmx1cjpibHVyKHZhcigtLWJsdXItbWQpKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1zYXR1cmF0ZS0xNTB7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTpzYXR1cmF0ZSgxNTAlKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1maWx0ZXJ7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0udHJhbnNpdGlvbnt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvLG9wYWNpdHksYm94LXNoYWRvdyx0cmFuc2Zvcm0sdHJhbnNsYXRlLHNjYWxlLHJvdGF0ZSxmaWx0ZXIsLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIsYmFja2Ryb3AtZmlsdGVyLGRpc3BsYXksY29udGVudC12aXNpYmlsaXR5LG92ZXJsYXkscG9pbnRlci1ldmVudHM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1cW2JvcmRlci1jb2xvclwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1cW3dpZHRoXCxiYWNrZ3JvdW5kXF17dHJhbnNpdGlvbi1wcm9wZXJ0eTp3aWR0aCxiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tY29sb3Jze3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG87dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1vcGFjaXR5e3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS5kdXJhdGlvbi0xNTB7LS10dy1kdXJhdGlvbjouMTVzO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30uZHVyYXRpb24tMjAwey0tdHctZHVyYXRpb246LjJzO3RyYW5zaXRpb24tZHVyYXRpb246LjJzfS5kdXJhdGlvbi0zMDB7LS10dy1kdXJhdGlvbjouM3M7dHJhbnNpdGlvbi1kdXJhdGlvbjouM3N9LmVhc2Utb3V0ey0tdHctZWFzZTp2YXIoLS1lYXNlLW91dCk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tZWFzZS1vdXQpfS5vdXRsaW5lLW5vbmV7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uc2VsZWN0LXRleHR7LXdlYmtpdC11c2VyLXNlbGVjdDp0ZXh0O3VzZXItc2VsZWN0OnRleHR9LlxbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXJcOmJsdXJcKDEycHhcKVxdey13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCl9Llxbc2Nyb2xsYmFyLXdpZHRoXDp0aGluXF17c2Nyb2xsYmFyLXdpZHRoOnRoaW59Llxbc3RyZWFtXDphdmNjXF17c3RyZWFtOmF2Y2N9Llxbc3RyZWFtXDpoMjY0XF17c3RyZWFtOmgyNjR9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4yc1wsYm94LXNoYWRvd18wXC4yc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMsYm94LXNoYWRvdyAuMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4zc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuM3N9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGJvcmRlci1jb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxib3JkZXItY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xOHN9LlxbdHJhbnNpdGlvblw6bGVmdF8wXC4xNXNcXXt0cmFuc2l0aW9uOmxlZnQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjEyc1wsYmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246b3BhY2l0eSAuMTJzLGJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xNXNfZWFzZVwsYmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLGJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCx0cmFuc2Zvcm1fMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyx0cmFuc2Zvcm0gLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xOHN9LlxbdHJhbnNpdGlvblw6cGFkZGluZ18wXC4yNXNfZWFzZVxde3RyYW5zaXRpb246cGFkZGluZyAuMjVzfS5cW3RyYW5zaXRpb25cOnRyYW5zZm9ybV8wXC4yNXNfZWFzZVwsb3BhY2l0eV8wXC4yc19lYXNlXF17dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyxvcGFjaXR5IC4yc30uXFt0cmFuc2l0aW9uXDp3aWR0aF8xMjBtc19saW5lYXJcXXt0cmFuc2l0aW9uOndpZHRoIC4xMnMgbGluZWFyfS5ncm91cC1mb2N1cy13aXRoaW5cOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpmb2N1cy13aXRoaW4gKil7b3BhY2l0eTowfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6cG9pbnRlci1ldmVudHMtYXV0bzppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtwb2ludGVyLWV2ZW50czphdXRvfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOmJsb2NrOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope2Rpc3BsYXk6YmxvY2t9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6aGlkZGVuOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope2Rpc3BsYXk6bm9uZX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDp0cmFuc2xhdGUteC0wOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICopey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjB9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6b3BhY2l0eS0xMDA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eToxfX0ucGxhY2Vob2xkZXJcOnRleHQtd2hpdGVcLzQwOjpwbGFjZWhvbGRlcntjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5wbGFjZWhvbGRlclw6dGV4dC13aGl0ZVwvNDA6OnBsYWNlaG9sZGVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtd2l0aGluXDpiZy13aGl0ZVwvMTA6Zm9jdXMtd2l0aGlue2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXdpdGhpblw6Ymctd2hpdGVcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE2XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjI5fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE4XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjJlfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xMjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMmV9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMjA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzI1OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTI1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxMn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3LjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxN31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC1cW1wjMGEwYTBjXF06aG92ZXJ7Y29sb3I6IzBhMGEwY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlXC84MDpob3Zlcntjb2xvcjojZmZmY31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvODA6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGVcLzg1OmhvdmVye2NvbG9yOiNmZmZmZmZkOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvODU6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOiNmZmZmZmZlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvOTA6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fX0uZm9jdXNcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjI0XClcXTpmb2N1c3tib3JkZXItY29sb3I6I2ZmZmZmZjNkfS5mb2N1c1w6Ymctd2hpdGVcL1xbMFwuMDhcXTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1c1w6Ymctd2hpdGVcL1xbMFwuMDhcXTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5mb2N1c1w6b3V0bGluZS1ub25lOmZvY3Vzey0tdHctb3V0bGluZS1zdHlsZTpub25lO291dGxpbmUtc3R5bGU6bm9uZX0uZm9jdXMtdmlzaWJsZVw6Ymctd2hpdGVcLzg6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpiZy13aGl0ZVwvODpmb2N1cy12aXNpYmxle2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmZvY3VzLXZpc2libGVcOm9wYWNpdHktMTAwOmZvY3VzLXZpc2libGV7b3BhY2l0eToxfS5mb2N1cy12aXNpYmxlXDpcW291dGxpbmVcOjFcLjVweF9zb2xpZF9yZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjU1XClcXTpmb2N1cy12aXNpYmxle291dGxpbmU6MS41cHggc29saWQgIzBhODRmZjhjfS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lOmZvY3VzLXZpc2libGV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS0yOmZvY3VzLXZpc2libGV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjJweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1vZmZzZXQtMjpmb2N1cy12aXNpYmxle291dGxpbmUtb2Zmc2V0OjJweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1vZmZzZXQtNDpmb2N1cy12aXNpYmxle291dGxpbmUtb2Zmc2V0OjRweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS13aGl0ZVwvNjA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLWNvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXZpc2libGVcOm91dGxpbmUtd2hpdGVcLzYwOmZvY3VzLXZpc2libGV7b3V0bGluZS1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjAlLHRyYW5zcGFyZW50KX19LmFjdGl2ZVw6c2NhbGUtXFswXC45N1xdOmFjdGl2ZXtzY2FsZTouOTd9QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xOFwpXF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjJlfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLVxbXCMyYTJhMmNcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzJhMmEyY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA2XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxN31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTklLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMjJcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjM4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4yMlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjIlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6dGV4dC1cW1wjMGEwYTBjXF06ZW5hYmxlZDpob3Zlcntjb2xvcjojMGEwYTBjfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOnRleHQtd2hpdGU6ZW5hYmxlZDpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YnJpZ2h0bmVzcy1cWzFcLjA4XF06ZW5hYmxlZDpob3ZlcnstLXR3LWJyaWdodG5lc3M6YnJpZ2h0bmVzcygxLjA4KTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9fS5kaXNhYmxlZFw6Y3Vyc29yLWRlZmF1bHQ6ZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9LmRpc2FibGVkXDpjdXJzb3Itbm90LWFsbG93ZWQ6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kaXNhYmxlZFw6dGV4dC13aGl0ZVwvNDA6ZGlzYWJsZWR7Y29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGlzYWJsZWRcOnRleHQtd2hpdGVcLzQwOmRpc2FibGVke2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0uZGlzYWJsZWRcOm9wYWNpdHktNDA6ZGlzYWJsZWR7b3BhY2l0eTouNH0uZGlzYWJsZWRcOm9wYWNpdHktNTA6ZGlzYWJsZWR7b3BhY2l0eTouNX1AbWVkaWEgKG1heC13aWR0aDo4OTkuOTk5cHgpey5tYXgtXFs5MDBweFxdXDpoaWRkZW57ZGlzcGxheTpub25lfX0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOmgtXFs0cHhcXTo6LW1vei1yYW5nZS1wcm9ncmVzc3toZWlnaHQ6NHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXByb2dyZXNze2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6YmctXFt2YXJcKC0tc2xpZGVyLWZpbGwtY29sb3JcKVxdOjotbW96LXJhbmdlLXByb2dyZXNze2JhY2tncm91bmQtY29sb3I6dmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpfS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6c2l6ZS1cWzEzcHhcXTo6LW1vei1yYW5nZS10aHVtYnt3aWR0aDoxM3B4O2hlaWdodDoxM3B4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXRodW1ie2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ym9yZGVyLW5vbmU6Oi1tb3otcmFuZ2UtdGh1bWJ7LS10dy1ib3JkZXItc3R5bGU6bm9uZTtib3JkZXItc3R5bGU6bm9uZX0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6aC1cWzRweFxdOjotbW96LXJhbmdlLXRyYWNre2hlaWdodDo0cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtdHJhY2t7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpiZy13aGl0ZVwvMjA6Oi1tb3otcmFuZ2UtdHJhY2t7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6Ymctd2hpdGVcLzIwOjotbW96LXJhbmdlLXRyYWNre2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOmgtXFs0cHhcXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7aGVpZ2h0OjRweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja1xdXDpyb3VuZGVkLWZ1bGw6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOlxbYmFja2dyb3VuZFw6bGluZWFyLWdyYWRpZW50XCh0b19yaWdodFwsdmFyXCgtLXNsaWRlci1maWxsLWNvbG9yXClfdmFyXCgtLXNsaWRlci1maWxsXClcLHJnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjIyXClfdmFyXCgtLXNsaWRlci1maWxsXClcKVxdOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcil2YXIoLS1zbGlkZXItZmlsbCksI2ZmZmZmZjM4IHZhcigtLXNsaWRlci1maWxsKSl9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6LW10LVxbNFwuNXB4XF06Oi13ZWJraXQtc2xpZGVyLXRodW1ie21hcmdpbi10b3A6LTQuNXB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnNpemUtXFsxM3B4XF06Oi13ZWJraXQtc2xpZGVyLXRodW1ie3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6YXBwZWFyYW5jZS1ub25lOjotd2Via2l0LXNsaWRlci10aHVtYnthcHBlYXJhbmNlOm5vbmV9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6cm91bmRlZC1mdWxsOjotd2Via2l0LXNsaWRlci10aHVtYntib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6c2hhZG93LVxbMF8xcHhfM3B4X3JnYmFcKDBcLDBcLDBcLDBcLjQ1XClcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7LS10dy1zaGFkb3c6MCAxcHggM3B4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNzMpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uXFtcJlw6ZGlzYWJsZWRcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6ZGlzYWJsZWRcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LlxbXCZcOmRpc2FibGVkXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6ZGlzYWJsZWRcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX19OnJvb3R7LS1idW5jc3MtbGlnaHQ6IDstLWJ1bmNzcy1kYXJrOmluaXRpYWw7Y29sb3Itc2NoZW1lOmRhcms7LS1zZXJ2ZS1zaW0tcGFuZWwtYmc6IzE4MTgxODstLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc2x1Y2VudDojMTgxODE4Yzc7LS1zZXJ2ZS1zaW0tcGFuZWwtYmctdHJhbnNwYXJlbnQ6IzE4MTgxODAwfUBzdXBwb3J0cyAoaW50ZXJwb2xhdGUtc2l6ZTogYWxsb3cta2V5d29yZHMpezpyb290e2ludGVycG9sYXRlLXNpemU6YWxsb3cta2V5d29yZHN9fWRldGFpbHMubGVtLXNlY3Rpb246OmRldGFpbHMtY29udGVudHtvdmVyZmxvdzpjbGlwO3RyYW5zaXRpb246aGVpZ2h0IC4yMnMgZWFzZSxjb250ZW50LXZpc2liaWxpdHkgLjIycyBhbGxvdy1kaXNjcmV0ZTtoZWlnaHQ6MH1kZXRhaWxzLmxlbS1zZWN0aW9uW29wZW5dOjpkZXRhaWxzLWNvbnRlbnR7aGVpZ2h0OmF1dG99ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5e2xpc3Qtc3R5bGU6bm9uZX1kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXJ7ZGlzcGxheTpub25lfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTpob3Zlcntjb2xvcjojZmZmfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTpob3ZlciAubGVtLWNoZXZyb257Y29sb3I6I2ZmZmZmZmQ5IWltcG9ydGFudH0ubGVtLWNoZXZyb257dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE2cyxjb2xvciAuMTJzfUBjb250YWluZXIgKHdpZHRoPD0yMTBweCl7W2RhdGEtbG9jYXRpb24tc3RhdHVzLXRvdGFsXXtkaXNwbGF5Om5vbmV9fUBrZXlmcmFtZXMgZ3JpZC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXswJXt0cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlKDI1MCUpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1wb3AtaW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEycHgpc2NhbGUoLjk2KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMClzY2FsZSgxKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtcG9wLW91dHswJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMClzY2FsZSgxKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoOHB4KXNjYWxlKC45Nil9fS5zZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXthbmltYXRpb246c2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGUgMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZX0uZ3JpZC1zaHV0ZG93bi1idG57b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMTJzLGJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5ncmlkLXRpbGU6aG92ZXIgLmdyaWQtc2h1dGRvd24tYnRue29wYWNpdHk6MX0uZ3JpZC1zaHV0ZG93bi1idG46aG92ZXI6bm90KDpkaXNhYmxlZCl7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM1YTFkMWQ7Ym9yZGVyLWNvbG9yOiNhMzN9LmdyaWQtdGlsZTpob3Zlcntib3JkZXItY29sb3I6IzU1NSFpbXBvcnRhbnR9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXp7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctcm90YXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYm9yZGVyLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1sZWFkaW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZm9udC13ZWlnaHR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy10cmFja2luZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9yZGluYWx7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zbGFzaGVkLXplcm97c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZpZ3VyZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtc3BhY2luZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtZnJhY3Rpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1yaW5nLWluc2V0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtd2lkdGh7c3ludGF4OiI8bGVuZ3RoPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTojZmZmfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LW91dGxpbmUtc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1zaXple3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWR1cmF0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZWFzZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBsYXllciBwcm9wZXJ0aWVze0BzdXBwb3J0cyAoKC13ZWJraXQtaHlwaGVuczogbm9uZSkgYW5kICggbm90IChtYXJnaW4tdHJpbTogaW5saW5lKSkpIG9yICgoLW1vei1vcmllbnQ6IGlubGluZSkgYW5kICggbm90IChjb2xvcjpyZ2IoZnJvbSByZWQgciBnIGIpKSkpeyosOmJlZm9yZSw6YWZ0ZXIsOjpiYWNrZHJvcHstLXR3LXRyYW5zbGF0ZS14OjA7LS10dy10cmFuc2xhdGUteTowOy0tdHctdHJhbnNsYXRlLXo6MDstLXR3LXJvdGF0ZS14OmluaXRpYWw7LS10dy1yb3RhdGUteTppbml0aWFsOy0tdHctcm90YXRlLXo6aW5pdGlhbDstLXR3LXNrZXcteDppbml0aWFsOy0tdHctc2tldy15OmluaXRpYWw7LS10dy1ib3JkZXItc3R5bGU6c29saWQ7LS10dy1sZWFkaW5nOmluaXRpYWw7LS10dy1mb250LXdlaWdodDppbml0aWFsOy0tdHctdHJhY2tpbmc6aW5pdGlhbDstLXR3LW9yZGluYWw6aW5pdGlhbDstLXR3LXNsYXNoZWQtemVybzppbml0aWFsOy0tdHctbnVtZXJpYy1maWd1cmU6aW5pdGlhbDstLXR3LW51bWVyaWMtc3BhY2luZzppbml0aWFsOy0tdHctbnVtZXJpYy1mcmFjdGlvbjppbml0aWFsOy0tdHctc2hhZG93OjAgMCAjMDAwMDstLXR3LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctc2hhZG93LWFscGhhOjEwMCU7LS10dy1pbnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctaW5zZXQtc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LWluc2V0LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LXJpbmctaW5zZXQ6aW5pdGlhbDstLXR3LXJpbmctb2Zmc2V0LXdpZHRoOjBweDstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiNmZmY7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctb3V0bGluZS1zdHlsZTpzb2xpZDstLXR3LWJsdXI6aW5pdGlhbDstLXR3LWJyaWdodG5lc3M6aW5pdGlhbDstLXR3LWNvbnRyYXN0OmluaXRpYWw7LS10dy1ncmF5c2NhbGU6aW5pdGlhbDstLXR3LWh1ZS1yb3RhdGU6aW5pdGlhbDstLXR3LWludmVydDppbml0aWFsOy0tdHctb3BhY2l0eTppbml0aWFsOy0tdHctc2F0dXJhdGU6aW5pdGlhbDstLXR3LXNlcGlhOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdzppbml0aWFsOy0tdHctZHJvcC1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWFscGhhOjEwMCU7LS10dy1kcm9wLXNoYWRvdy1zaXplOmluaXRpYWw7LS10dy1iYWNrZHJvcC1ibHVyOmluaXRpYWw7LS10dy1iYWNrZHJvcC1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1iYWNrZHJvcC1jb250cmFzdDppbml0aWFsOy0tdHctYmFja2Ryb3AtZ3JheXNjYWxlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1odWUtcm90YXRlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1pbnZlcnQ6aW5pdGlhbDstLXR3LWJhY2tkcm9wLW9wYWNpdHk6aW5pdGlhbDstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1zZXBpYTppbml0aWFsOy0tdHctZHVyYXRpb246aW5pdGlhbDstLXR3LWVhc2U6aW5pdGlhbH19fQo8L3N0eWxlPgo8L2hlYWQ+PGJvZHk+CjxkaXYgaWQ9InJvb3QiPjwvZGl2Pgo8IS0tX19TSU1fUFJFVklFV19DT05GSUdfXy0tPgo8c2NyaXB0IHR5cGU9Im1vZHVsZSI+dmFyIEUyLHMseTgseTcsbTAsdzgsUzgseDgsTjMsVTUsUDIsajgsQzMsejMsTDMsdjgsSDU9e30sQzU9W10sUzc9L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSx3Mj1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIEUwKCQsUSl7Zm9yKHZhciBKIGluIFEpJFtKXT1RW0pdO3JldHVybiAkfWZ1bmN0aW9uIE8zKCQpeyQmJiQucGFyZW50Tm9kZSYmJC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCQpfWZ1bmN0aW9uIHUxKCQsUSxKKXt2YXIgWCxLLFkscT17fTtmb3IoWSBpbiBRKVk9PSJrZXkiP1g9UVtZXTpZPT0icmVmIj9LPVFbWV06cVtZXT1RW1ldO2lmKGFyZ3VtZW50cy5sZW5ndGg+MiYmKHEuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP0UyLmNhbGwoYXJndW1lbnRzLDIpOkopLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYkLmRlZmF1bHRQcm9wcyE9bnVsbClmb3IoWSBpbiAkLmRlZmF1bHRQcm9wcylxW1ldPT09dm9pZCAwJiYocVtZXT0kLmRlZmF1bHRQcm9wc1tZXSk7cmV0dXJuIFQyKCQscSxYLEssbnVsbCl9ZnVuY3Rpb24gVDIoJCxRLEosWCxLKXt2YXIgWT17dHlwZTokLHByb3BzOlEsa2V5OkoscmVmOlgsX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oks9PW51bGw/Kyt5ODpLLF9faTotMSxfX3U6MH07cmV0dXJuIEs9PW51bGwmJnMudm5vZGUhPW51bGwmJnMudm5vZGUoWSksWX1mdW5jdGlvbiBJMigpe3JldHVybntjdXJyZW50Om51bGx9fWZ1bmN0aW9uIFoxKCQpe3JldHVybiAkLmNoaWxkcmVufWZ1bmN0aW9uIG8xKCQsUSl7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1RfWZ1bmN0aW9uIFoyKCQsUSl7aWYoUT09bnVsbClyZXR1cm4gJC5fXz9aMigkLl9fLCQuX19pKzEpOm51bGw7Zm9yKHZhciBKO1E8JC5fX2subGVuZ3RoO1ErKylpZigoSj0kLl9fa1tRXSkhPW51bGwmJkouX19lIT1udWxsKXJldHVybiBKLl9fZTtyZXR1cm4gdHlwZW9mICQudHlwZT09ImZ1bmN0aW9uIj9aMigkKTpudWxsfWZ1bmN0aW9uIHg3KCQpe2lmKCQuX19QJiYkLl9fZCl7dmFyIFE9JC5fX3YsSj1RLl9fZSxYPVtdLEs9W10sWT1FMCh7fSxRKTtZLl9fdj1RLl9fdisxLHMudm5vZGUmJnMudm5vZGUoWSksRjMoJC5fX1AsWSxRLCQuX19uLCQuX19QLm5hbWVzcGFjZVVSSSwzMiZRLl9fdT9bSl06bnVsbCxYLEo9PW51bGw/WjIoUSk6SiwhISgzMiZRLl9fdSksSyksWS5fX3Y9US5fX3YsWS5fXy5fX2tbWS5fX2ldPVksZjgoWCxZLEspLFEuX19lPVEuX189bnVsbCxZLl9fZSE9SiYmUjgoWSl9fWZ1bmN0aW9uIFI4KCQpe2lmKCgkPSQuX18pIT1udWxsJiYkLl9fYyE9bnVsbClyZXR1cm4gJC5fX2U9JC5fX2MuYmFzZT1udWxsLCQuX19rLnNvbWUoZnVuY3Rpb24oUSl7aWYoUSE9bnVsbCYmUS5fX2UhPW51bGwpcmV0dXJuICQuX19lPSQuX19jLmJhc2U9US5fX2V9KSxSOCgkKX1mdW5jdGlvbiBVMygkKXsoISQuX19kJiYoJC5fX2Q9ITApJiZtMC5wdXNoKCQpJiYhTzUuX19yKyt8fHc4IT1zLmRlYm91bmNlUmVuZGVyaW5nKSYmKCh3OD1zLmRlYm91bmNlUmVuZGVyaW5nKXx8UzgpKE81KX1mdW5jdGlvbiBPNSgpe3RyeXtmb3IodmFyICQsUT0xO20wLmxlbmd0aDspbTAubGVuZ3RoPlEmJm0wLnNvcnQoeDgpLCQ9bTAuc2hpZnQoKSxRPW0wLmxlbmd0aCx4NygkKX1maW5hbGx5e20wLmxlbmd0aD1PNS5fX3I9MH19ZnVuY3Rpb24gaDgoJCxRLEosWCxLLFkscSxHLEIsTix6KXt2YXIgVixDLFUsRixMLEgsTyxrPVgmJlguX19rfHxDNSxJPVEubGVuZ3RoO2ZvcihCPWo3KEosUSxrLEIsSSksVj0wO1Y8STtWKyspKFU9Si5fX2tbVl0pIT1udWxsJiYoQz1VLl9faSE9LTEmJmtbVS5fX2ldfHxINSxVLl9faT1WLEg9RjMoJCxVLEMsSyxZLHEsRyxCLE4seiksRj1VLl9fZSxVLnJlZiYmQy5yZWYhPVUucmVmJiYoQy5yZWYmJk0zKEMucmVmLG51bGwsVSksei5wdXNoKFUucmVmLFUuX19jfHxGLFUpKSxMPT1udWxsJiZGIT1udWxsJiYoTD1GKSwoTz0hISg0JlUuX191KSl8fEMuX19rPT09VS5fX2s/KEI9ZzgoVSxCLCQsTyksTyYmQy5fX2UmJihDLl9fZT1udWxsKSk6dHlwZW9mIFUudHlwZT09ImZ1bmN0aW9uIiYmSCE9PXZvaWQgMD9CPUg6RiYmKEI9Ri5uZXh0U2libGluZyksVS5fX3UmPS03KTtyZXR1cm4gSi5fX2U9TCxCfWZ1bmN0aW9uIGo3KCQsUSxKLFgsSyl7dmFyIFkscSxHLEIsTix6PUoubGVuZ3RoLFY9eixDPTA7Zm9yKCQuX19rPUFycmF5KEspLFk9MDtZPEs7WSsrKShxPVFbWV0pIT1udWxsJiZ0eXBlb2YgcSE9ImJvb2xlYW4iJiZ0eXBlb2YgcSE9ImZ1bmN0aW9uIj8odHlwZW9mIHE9PSJzdHJpbmcifHx0eXBlb2YgcT09Im51bWJlciJ8fHR5cGVvZiBxPT0iYmlnaW50Inx8cS5jb25zdHJ1Y3Rvcj09U3RyaW5nP3E9JC5fX2tbWV09VDIobnVsbCxxLG51bGwsbnVsbCxudWxsKTp3MihxKT9xPSQuX19rW1ldPVQyKFoxLHtjaGlsZHJlbjpxfSxudWxsLG51bGwsbnVsbCk6cS5jb25zdHJ1Y3Rvcj09PXZvaWQgMCYmcS5fX2I+MD9xPSQuX19rW1ldPVQyKHEudHlwZSxxLnByb3BzLHEua2V5LHEucmVmP3EucmVmOm51bGwscS5fX3YpOiQuX19rW1ldPXEsQj1ZK0MscS5fXz0kLHEuX19iPSQuX19iKzEsRz1udWxsLChOPXEuX19pPXY3KHEsSixCLFYpKSE9LTEmJihWLS0sKEc9SltOXSkmJihHLl9fdXw9MikpLEc9PW51bGx8fEcuX192PT1udWxsPyhOPT0tMSYmKEs+ej9DLS06Szx6JiZDKyspLHR5cGVvZiBxLnR5cGUhPSJmdW5jdGlvbiImJihxLl9fdXw9NCkpOk4hPUImJihOPT1CLTE/Qy0tOk49PUIrMT9DKys6KE4+Qj9DLS06QysrLHEuX191fD00KSkpOiQuX19rW1ldPW51bGw7aWYoVilmb3IoWT0wO1k8ejtZKyspKEc9SltZXSkhPW51bGwmJigyJkcuX191KT09MCYmKEcuX19lPT1YJiYoWD1aMihHKSkscDgoRyxHKSk7cmV0dXJuIFh9ZnVuY3Rpb24gZzgoJCxRLEosWCl7dmFyIEssWTtpZih0eXBlb2YgJC50eXBlPT0iZnVuY3Rpb24iKXtmb3IoSz0kLl9fayxZPTA7SyYmWTxLLmxlbmd0aDtZKyspS1tZXSYmKEtbWV0uX189JCxRPWc4KEtbWV0sUSxKLFgpKTtyZXR1cm4gUX0kLl9fZSE9USYmKFgmJihRJiYkLnR5cGUmJiFRLnBhcmVudE5vZGUmJihRPVoyKCQpKSxKLmluc2VydEJlZm9yZSgkLl9fZSxRfHxudWxsKSksUT0kLl9fZSk7ZG8gUT1RJiZRLm5leHRTaWJsaW5nO3doaWxlKFEhPW51bGwmJlEubm9kZVR5cGU9PTgpO3JldHVybiBRfWZ1bmN0aW9uIEswKCQsUSl7cmV0dXJuIFE9UXx8W10sJD09bnVsbHx8dHlwZW9mICQ9PSJib29sZWFuInx8KHcyKCQpPyQuc29tZShmdW5jdGlvbihKKXtLMChKLFEpfSk6US5wdXNoKCQpKSxRfWZ1bmN0aW9uIHY3KCQsUSxKLFgpe3ZhciBLLFkscSxHPSQua2V5LEI9JC50eXBlLE49UVtKXSx6PU4hPW51bGwmJigyJk4uX191KT09MDtpZihOPT09bnVsbCYmRz09bnVsbHx8eiYmRz09Ti5rZXkmJkI9PU4udHlwZSlyZXR1cm4gSjtpZihYPih6PzE6MCkpe2ZvcihLPUotMSxZPUorMTtLPj0wfHxZPFEubGVuZ3RoOylpZigoTj1RW3E9Sz49MD9LLS06WSsrXSkhPW51bGwmJigyJk4uX191KT09MCYmRz09Ti5rZXkmJkI9PU4udHlwZSlyZXR1cm4gcX1yZXR1cm4tMX1mdW5jdGlvbiBJOCgkLFEsSil7UVswXT09Ii0iPyQuc2V0UHJvcGVydHkoUSxKPT1udWxsPyIiOkopOiRbUV09Sj09bnVsbD8iIjp0eXBlb2YgSiE9Im51bWJlciJ8fFM3LnRlc3QoUSk/SjpKKyJweCJ9ZnVuY3Rpb24gTDUoJCxRLEosWCxLKXt2YXIgWSxxOyQ6aWYoUT09InN0eWxlIilpZih0eXBlb2YgSj09InN0cmluZyIpJC5zdHlsZS5jc3NUZXh0PUo7ZWxzZXtpZih0eXBlb2YgWD09InN0cmluZyImJigkLnN0eWxlLmNzc1RleHQ9WD0iIiksWClmb3IoUSBpbiBYKUomJlEgaW4gSnx8STgoJC5zdHlsZSxRLCIiKTtpZihKKWZvcihRIGluIEopWCYmSltRXT09WFtRXXx8STgoJC5zdHlsZSxRLEpbUV0pfWVsc2UgaWYoUVswXT09Im8iJiZRWzFdPT0ibiIpWT1RIT0oUT1RLnJlcGxhY2UoajgsIiQxIikpLHE9US50b0xvd2VyQ2FzZSgpLFE9cSBpbiAkfHxRPT0ib25Gb2N1c091dCJ8fFE9PSJvbkZvY3VzSW4iP3Euc2xpY2UoMik6US5zbGljZSgyKSwkLmx8fCgkLmw9e30pLCQubFtRK1ldPUosSj9YP0pbUDJdPVhbUDJdOihKW1AyXT1DMywkLmFkZEV2ZW50TGlzdGVuZXIoUSxZP0wzOnozLFkpKTokLnJlbW92ZUV2ZW50TGlzdGVuZXIoUSxZP0wzOnozLFkpO2Vsc2V7aWYoSz09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIilRPVEucmVwbGFjZSgveGxpbmsoSHw6aCkvLCJoIikucmVwbGFjZSgvc05hbWUkLywicyIpO2Vsc2UgaWYoUSE9IndpZHRoIiYmUSE9ImhlaWdodCImJlEhPSJocmVmIiYmUSE9Imxpc3QiJiZRIT0iZm9ybSImJlEhPSJ0YWJJbmRleCImJlEhPSJkb3dubG9hZCImJlEhPSJyb3dTcGFuIiYmUSE9ImNvbFNwYW4iJiZRIT0icm9sZSImJlEhPSJwb3BvdmVyIiYmUSBpbiAkKXRyeXskW1FdPUo9PW51bGw/IiI6SjticmVhayAkfWNhdGNoKEcpe310eXBlb2YgSj09ImZ1bmN0aW9uInx8KEo9PW51bGx8fEo9PT0hMSYmUVs0XSE9Ii0iPyQucmVtb3ZlQXR0cmlidXRlKFEpOiQuc2V0QXR0cmlidXRlKFEsUT09InBvcG92ZXIiJiZKPT0xPyIiOkopKX19ZnVuY3Rpb24gYjgoJCl7cmV0dXJuIGZ1bmN0aW9uKFEpe2lmKHRoaXMubCl7dmFyIEo9dGhpcy5sW1EudHlwZSskXTtpZihRW1U1XT09bnVsbClRW1U1XT1DMysrO2Vsc2UgaWYoUVtVNV08SltQMl0pcmV0dXJuO3JldHVybiBKKHMuZXZlbnQ/cy5ldmVudChRKTpRKX19fWZ1bmN0aW9uIEYzKCQsUSxKLFgsSyxZLHEsRyxCLE4pe3ZhciB6LFYsQyxVLEYsTCxILE8sayxJLHcsUCx4LHQsaCxsPVEudHlwZTtpZihRLmNvbnN0cnVjdG9yIT09dm9pZCAwKXJldHVybiBudWxsOzEyOCZKLl9fdSYmKEI9ISEoMzImSi5fX3UpLFk9W0c9US5fX2U9Si5fX2VdKSwoej1zLl9fYikmJnooUSk7JDppZih0eXBlb2YgbD09ImZ1bmN0aW9uIil0cnl7aWYoTz1RLnByb3BzLGs9bC5wcm90b3R5cGUmJmwucHJvdG90eXBlLnJlbmRlcixJPSh6PWwuY29udGV4dFR5cGUpJiZYW3ouX19jXSx3PXo/ST9JLnByb3BzLnZhbHVlOnouX186WCxKLl9fYz9IPShWPVEuX19jPUouX19jKS5fXz1WLl9fRTooaz9RLl9fYz1WPW5ldyBsKE8sdyk6KFEuX19jPVY9bmV3IG8xKE8sdyksVi5jb25zdHJ1Y3Rvcj1sLFYucmVuZGVyPWg3KSxJJiZJLnN1YihWKSxWLnN0YXRlfHwoVi5zdGF0ZT17fSksVi5fX249WCxDPVYuX19kPSEwLFYuX19oPVtdLFYuX3NiPVtdKSxrJiZWLl9fcz09bnVsbCYmKFYuX19zPVYuc3RhdGUpLGsmJmwuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIT1udWxsJiYoVi5fX3M9PVYuc3RhdGUmJihWLl9fcz1FMCh7fSxWLl9fcykpLEUwKFYuX19zLGwuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKE8sVi5fX3MpKSksVT1WLnByb3BzLEY9Vi5zdGF0ZSxWLl9fdj1RLEMpayYmbC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PW51bGwmJlYuY29tcG9uZW50V2lsbE1vdW50IT1udWxsJiZWLmNvbXBvbmVudFdpbGxNb3VudCgpLGsmJlYuY29tcG9uZW50RGlkTW91bnQhPW51bGwmJlYuX19oLnB1c2goVi5jb21wb25lbnREaWRNb3VudCk7ZWxzZXtpZihrJiZsLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmTyE9PVUmJlYuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9bnVsbCYmVi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKE8sdyksUS5fX3Y9PUouX192fHwhVi5fX2UmJlYuc2hvdWxkQ29tcG9uZW50VXBkYXRlIT1udWxsJiZWLnNob3VsZENvbXBvbmVudFVwZGF0ZShPLFYuX19zLHcpPT09ITEpe1EuX192IT1KLl9fdiYmKFYucHJvcHM9TyxWLnN0YXRlPVYuX19zLFYuX19kPSExKSxRLl9fZT1KLl9fZSxRLl9faz1KLl9fayxRLl9fay5zb21lKGZ1bmN0aW9uKHIpe3ImJihyLl9fPVEpfSksQzUucHVzaC5hcHBseShWLl9faCxWLl9zYiksVi5fc2I9W10sVi5fX2gubGVuZ3RoJiZxLnB1c2goVik7YnJlYWsgJH1WLmNvbXBvbmVudFdpbGxVcGRhdGUhPW51bGwmJlYuY29tcG9uZW50V2lsbFVwZGF0ZShPLFYuX19zLHcpLGsmJlYuY29tcG9uZW50RGlkVXBkYXRlIT1udWxsJiZWLl9faC5wdXNoKGZ1bmN0aW9uKCl7Vi5jb21wb25lbnREaWRVcGRhdGUoVSxGLEwpfSl9aWYoVi5jb250ZXh0PXcsVi5wcm9wcz1PLFYuX19QPSQsVi5fX2U9ITEsUD1zLl9fcix4PTAsaylWLnN0YXRlPVYuX19zLFYuX19kPSExLFAmJlAoUSksej1WLnJlbmRlcihWLnByb3BzLFYuc3RhdGUsVi5jb250ZXh0KSxDNS5wdXNoLmFwcGx5KFYuX19oLFYuX3NiKSxWLl9zYj1bXTtlbHNlIGRvIFYuX19kPSExLFAmJlAoUSksej1WLnJlbmRlcihWLnByb3BzLFYuc3RhdGUsVi5jb250ZXh0KSxWLnN0YXRlPVYuX19zO3doaWxlKFYuX19kJiYrK3g8MjUpO1Yuc3RhdGU9Vi5fX3MsVi5nZXRDaGlsZENvbnRleHQhPW51bGwmJihYPUUwKEUwKHt9LFgpLFYuZ2V0Q2hpbGRDb250ZXh0KCkpKSxrJiYhQyYmVi5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9bnVsbCYmKEw9Vi5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShVLEYpKSx0PXohPW51bGwmJnoudHlwZT09PVoxJiZ6LmtleT09bnVsbD9tOCh6LnByb3BzLmNoaWxkcmVuKTp6LEc9aDgoJCx3Mih0KT90Olt0XSxRLEosWCxLLFkscSxHLEIsTiksVi5iYXNlPVEuX19lLFEuX191Jj0tMTYxLFYuX19oLmxlbmd0aCYmcS5wdXNoKFYpLEgmJihWLl9fRT1WLl9fPW51bGwpfWNhdGNoKHIpe2lmKFEuX192PW51bGwsQnx8WSE9bnVsbClpZihyLnRoZW4pe2ZvcihRLl9fdXw9Qj8xNjA6MTI4O0cmJkcubm9kZVR5cGU9PTgmJkcubmV4dFNpYmxpbmc7KUc9Ry5uZXh0U2libGluZztZW1kuaW5kZXhPZihHKV09bnVsbCxRLl9fZT1HfWVsc2V7Zm9yKGg9WS5sZW5ndGg7aC0tOylPMyhZW2hdKTtIMyhRKX1lbHNlIFEuX19lPUouX19lLFEuX19rPUouX19rLHIudGhlbnx8SDMoUSk7cy5fX2UocixRLEopfWVsc2UgWT09bnVsbCYmUS5fX3Y9PUouX192PyhRLl9faz1KLl9fayxRLl9fZT1KLl9fZSk6Rz1RLl9fZT1SNyhKLl9fZSxRLEosWCxLLFkscSxCLE4pO3JldHVybih6PXMuZGlmZmVkKSYmeihRKSwxMjgmUS5fX3U/dm9pZCAwOkd9ZnVuY3Rpb24gSDMoJCl7JCYmKCQuX19jJiYoJC5fX2MuX19lPSEwKSwkLl9fayYmJC5fX2suc29tZShIMykpfWZ1bmN0aW9uIGY4KCQsUSxKKXtmb3IodmFyIFg9MDtYPEoubGVuZ3RoO1grKylNMyhKW1hdLEpbKytYXSxKWysrWF0pO3MuX19jJiZzLl9fYyhRLCQpLCQuc29tZShmdW5jdGlvbihLKXt0cnl7JD1LLl9faCxLLl9faD1bXSwkLnNvbWUoZnVuY3Rpb24oWSl7WS5jYWxsKEspfSl9Y2F0Y2goWSl7cy5fX2UoWSxLLl9fdil9fSl9ZnVuY3Rpb24gbTgoJCl7cmV0dXJuIHR5cGVvZiAkIT0ib2JqZWN0Inx8JD09bnVsbHx8JC5fX2I+MD8kOncyKCQpPyQubWFwKG04KTpFMCh7fSwkKX1mdW5jdGlvbiBSNygkLFEsSixYLEssWSxxLEcsQil7dmFyIE4seixWLEMsVSxGLEwsSD1KLnByb3BzfHxINSxPPVEucHJvcHMsaz1RLnR5cGU7aWYoaz09InN2ZyI/Sz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciOms9PSJtYXRoIj9LPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjpLfHwoSz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLFkhPW51bGwpe2ZvcihOPTA7TjxZLmxlbmd0aDtOKyspaWYoKFU9WVtOXSkmJiJzZXRBdHRyaWJ1dGUiaW4gVT09ISFrJiYoaz9VLmxvY2FsTmFtZT09azpVLm5vZGVUeXBlPT0zKSl7JD1VLFlbTl09bnVsbDticmVha319aWYoJD09bnVsbCl7aWYoaz09bnVsbClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoTyk7JD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoSyxrLE8uaXMmJk8pLEcmJihzLl9fbSYmcy5fX20oUSxZKSxHPSExKSxZPW51bGx9aWYoaz09bnVsbClIPT09T3x8RyYmJC5kYXRhPT1PfHwoJC5kYXRhPU8pO2Vsc2V7aWYoWT1ZJiZFMi5jYWxsKCQuY2hpbGROb2RlcyksIUcmJlkhPW51bGwpZm9yKEg9e30sTj0wO048JC5hdHRyaWJ1dGVzLmxlbmd0aDtOKyspSFsoVT0kLmF0dHJpYnV0ZXNbTl0pLm5hbWVdPVUudmFsdWU7Zm9yKE4gaW4gSClVPUhbTl0sTj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj9WPVU6Tj09ImNoaWxkcmVuInx8KE4gaW4gTyl8fE49PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIE8pfHxOPT0iY2hlY2tlZCImJigiZGVmYXVsdENoZWNrZWQiaW4gTyl8fEw1KCQsTixudWxsLFUsSyk7Zm9yKE4gaW4gTylVPU9bTl0sTj09ImNoaWxkcmVuIj9DPVU6Tj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj96PVU6Tj09InZhbHVlIj9GPVU6Tj09ImNoZWNrZWQiP0w9VTpHJiZ0eXBlb2YgVSE9ImZ1bmN0aW9uInx8SFtOXT09PVV8fEw1KCQsTixVLEhbTl0sSyk7aWYoeilHfHxWJiYoei5fX2h0bWw9PVYuX19odG1sfHx6Ll9faHRtbD09JC5pbm5lckhUTUwpfHwoJC5pbm5lckhUTUw9ei5fX2h0bWwpLFEuX19rPVtdO2Vsc2UgaWYoViYmKCQuaW5uZXJIVE1MPSIiKSxoOChRLnR5cGU9PSJ0ZW1wbGF0ZSI/JC5jb250ZW50OiQsdzIoQyk/QzpbQ10sUSxKLFgsaz09ImZvcmVpZ25PYmplY3QiPyJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjpLLFkscSxZP1lbMF06Si5fX2smJloyKEosMCksRyxCKSxZIT1udWxsKWZvcihOPVkubGVuZ3RoO04tLTspTzMoWVtOXSk7R3x8KE49InZhbHVlIixrPT0icHJvZ3Jlc3MiJiZGPT1udWxsPyQucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpOkYhPW51bGwmJihGIT09JFtOXXx8az09InByb2dyZXNzIiYmIUZ8fGs9PSJvcHRpb24iJiZGIT1IW05dKSYmTDUoJCxOLEYsSFtOXSxLKSxOPSJjaGVja2VkIixMIT1udWxsJiZMIT0kW05dJiZMNSgkLE4sTCxIW05dLEspKX1yZXR1cm4gJH1mdW5jdGlvbiBNMygkLFEsSil7dHJ5e2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iKXt2YXIgWD10eXBlb2YgJC5fX3U9PSJmdW5jdGlvbiI7WCYmJC5fX3UoKSxYJiZRPT1udWxsfHwoJC5fX3U9JChRKSl9ZWxzZSAkLmN1cnJlbnQ9UX1jYXRjaChLKXtzLl9fZShLLEopfX1mdW5jdGlvbiBwOCgkLFEsSil7dmFyIFgsSztpZihzLnVubW91bnQmJnMudW5tb3VudCgkKSwoWD0kLnJlZikmJihYLmN1cnJlbnQmJlguY3VycmVudCE9JC5fX2V8fE0zKFgsbnVsbCxRKSksKFg9JC5fX2MpIT1udWxsKXtpZihYLmNvbXBvbmVudFdpbGxVbm1vdW50KXRyeXtYLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goWSl7cy5fX2UoWSxRKX1YLmJhc2U9WC5fX1A9bnVsbH1pZihYPSQuX19rKWZvcihLPTA7SzxYLmxlbmd0aDtLKyspWFtLXSYmcDgoWFtLXSxRLEp8fHR5cGVvZiAkLnR5cGUhPSJmdW5jdGlvbiIpO0p8fE8zKCQuX19lKSwkLl9fYz0kLl9fPSQuX19lPXZvaWQgMH1mdW5jdGlvbiBoNygkLFEsSil7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoJCxKKX1mdW5jdGlvbiB2MCgkLFEsSil7dmFyIFgsSyxZLHE7UT09ZG9jdW1lbnQmJihRPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkscy5fXyYmcy5fXygkLFEpLEs9KFg9dHlwZW9mIEo9PSJmdW5jdGlvbiIpP251bGw6SiYmSi5fX2t8fFEuX19rLFk9W10scT1bXSxGMyhRLCQ9KCFYJiZKfHxRKS5fX2s9dTEoWjEsbnVsbCxbJF0pLEt8fEg1LEg1LFEubmFtZXNwYWNlVVJJLCFYJiZKP1tKXTpLP251bGw6US5maXJzdENoaWxkP0UyLmNhbGwoUS5jaGlsZE5vZGVzKTpudWxsLFksIVgmJko/SjpLP0suX19lOlEuZmlyc3RDaGlsZCxYLHEpLGY4KFksJCxxKX1mdW5jdGlvbiBGNSgkLFEpe3YwKCQsUSxGNSl9ZnVuY3Rpb24gQTMoJCxRLEope3ZhciBYLEssWSxxLEc9RTAoe30sJC5wcm9wcyk7Zm9yKFkgaW4gJC50eXBlJiYkLnR5cGUuZGVmYXVsdFByb3BzJiYocT0kLnR5cGUuZGVmYXVsdFByb3BzKSxRKVk9PSJrZXkiP1g9UVtZXTpZPT0icmVmIj9LPVFbWV06R1tZXT1RW1ldPT09dm9pZCAwJiZxIT1udWxsP3FbWV06UVtZXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4yJiYoRy5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/RTIuY2FsbChhcmd1bWVudHMsMik6SiksVDIoJC50eXBlLEcsWHx8JC5rZXksS3x8JC5yZWYsbnVsbCl9ZnVuY3Rpb24gVTAoJCl7ZnVuY3Rpb24gUShKKXt2YXIgWCxLO3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dHx8KFg9bmV3IFNldCwoSz17fSlbUS5fX2NdPXRoaXMsdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gS30sdGhpcy5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1g9bnVsbH0sdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oWSl7dGhpcy5wcm9wcy52YWx1ZSE9WS52YWx1ZSYmWC5mb3JFYWNoKGZ1bmN0aW9uKHEpe3EuX19lPSEwLFUzKHEpfSl9LHRoaXMuc3ViPWZ1bmN0aW9uKFkpe1guYWRkKFkpO3ZhciBxPVkuY29tcG9uZW50V2lsbFVubW91bnQ7WS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1gmJlguZGVsZXRlKFkpLHEmJnEuY2FsbChZKX19KSxKLmNoaWxkcmVufXJldHVybiBRLl9fYz0iX19jQyIrdjgrKyxRLl9fPSQsUS5Qcm92aWRlcj1RLl9fbD0oUS5Db25zdW1lcj1mdW5jdGlvbihKLFgpe3JldHVybiBKLmNoaWxkcmVuKFgpfSkuY29udGV4dFR5cGU9USxRfUUyPUM1LnNsaWNlLHM9e19fZTpmdW5jdGlvbigkLFEsSixYKXtmb3IodmFyIEssWSxxO1E9US5fXzspaWYoKEs9US5fX2MpJiYhSy5fXyl0cnl7aWYoKFk9Sy5jb25zdHJ1Y3RvcikmJlkuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT1udWxsJiYoSy5zZXRTdGF0ZShZLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigkKSkscT1LLl9fZCksSy5jb21wb25lbnREaWRDYXRjaCE9bnVsbCYmKEsuY29tcG9uZW50RGlkQ2F0Y2goJCxYfHx7fSkscT1LLl9fZCkscSlyZXR1cm4gSy5fX0U9S31jYXRjaChHKXskPUd9dGhyb3cgJH19LHk4PTAseTc9ZnVuY3Rpb24oJCl7cmV0dXJuICQhPW51bGwmJiQuY29uc3RydWN0b3I9PT12b2lkIDB9LG8xLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbigkLFEpe3ZhciBKO0o9dGhpcy5fX3MhPW51bGwmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPUUwKHt9LHRoaXMuc3RhdGUpLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYoJD0kKEUwKHt9LEopLHRoaXMucHJvcHMpKSwkJiZFMChKLCQpLCQhPW51bGwmJnRoaXMuX192JiYoUSYmdGhpcy5fc2IucHVzaChRKSxVMyh0aGlzKSl9LG8xLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbigkKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLCQmJnRoaXMuX19oLnB1c2goJCksVTModGhpcykpfSxvMS5wcm90b3R5cGUucmVuZGVyPVoxLG0wPVtdLFM4PXR5cGVvZiBQcm9taXNlPT0iZnVuY3Rpb24iP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCx4OD1mdW5jdGlvbigkLFEpe3JldHVybiAkLl9fdi5fX2ItUS5fX3YuX19ifSxPNS5fX3I9MCxOMz1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLFU1PSJfX2QiK04zLFAyPSJfX2EiK04zLGo4PS8oUG9pbnRlckNhcHR1cmUpJHxDYXB0dXJlJC9pLEMzPTAsejM9YjgoITEpLEwzPWI4KCEwKSx2OD0wO3ZhciBwMCx5MSxrMyx1OCxYMj0wLGE4PVtdLGgxPXMsbDg9aDEuX19iLGQ4PWgxLl9fcixjOD1oMS5kaWZmZWQsbzg9aDEuX19jLGk4PWgxLnVubW91bnQsbjg9aDEuX187ZnVuY3Rpb24gSzIoJCxRKXtoMS5fX2gmJmgxLl9faCh5MSwkLFgyfHxRKSxYMj0wO3ZhciBKPXkxLl9fSHx8KHkxLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuICQ+PUouX18ubGVuZ3RoJiZKLl9fLnB1c2goe30pLEouX19bJF19ZnVuY3Rpb24gQSgkKXtyZXR1cm4gWDI9MSxpMChzOCwkKX1mdW5jdGlvbiBpMCgkLFEsSil7dmFyIFg9SzIocDArKywyKTtpZihYLnQ9JCwhWC5fX2MmJihYLl9fPVtKP0ooUSk6czgodm9pZCAwLFEpLGZ1bmN0aW9uKEcpe3ZhciBCPVguX19OP1guX19OWzBdOlguX19bMF0sTj1YLnQoQixHKTtCIT09TiYmKFguX19OPVtOLFguX19bMV1dLFguX19jLnNldFN0YXRlKHt9KSl9XSxYLl9fYz15MSwheTEuX19mKSl7dmFyIEs9ZnVuY3Rpb24oRyxCLE4pe2lmKCFYLl9fYy5fX0gpcmV0dXJuITA7dmFyIHo9WC5fX2MuX19ILl9fLmZpbHRlcihmdW5jdGlvbihDKXtyZXR1cm4gQy5fX2N9KTtpZih6LmV2ZXJ5KGZ1bmN0aW9uKEMpe3JldHVybiFDLl9fTn0pKXJldHVybiFZfHxZLmNhbGwodGhpcyxHLEIsTik7dmFyIFY9WC5fX2MucHJvcHMhPT1HO3JldHVybiB6LnNvbWUoZnVuY3Rpb24oQyl7aWYoQy5fX04pe3ZhciBVPUMuX19bMF07Qy5fXz1DLl9fTixDLl9fTj12b2lkIDAsVSE9PUMuX19bMF0mJihWPSEwKX19KSxZJiZZLmNhbGwodGhpcyxHLEIsTil8fFZ9O3kxLl9fZj0hMDt2YXJ7c2hvdWxkQ29tcG9uZW50VXBkYXRlOlksY29tcG9uZW50V2lsbFVwZGF0ZTpxfT15MTt5MS5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKEcsQixOKXtpZih0aGlzLl9fZSl7dmFyIHo9WTtZPXZvaWQgMCxLKEcsQixOKSxZPXp9cSYmcS5jYWxsKHRoaXMsRyxCLE4pfSx5MS5zaG91bGRDb21wb25lbnRVcGRhdGU9S31yZXR1cm4gWC5fX058fFguX199ZnVuY3Rpb24gYigkLFEpe3ZhciBKPUsyKHAwKyssMyk7IWgxLl9fcyYmXzMoSi5fX0gsUSkmJihKLl9fPSQsSi51PVEseTEuX19ILl9faC5wdXNoKEopKX1mdW5jdGlvbiB3MCgkLFEpe3ZhciBKPUsyKHAwKyssNCk7IWgxLl9fcyYmXzMoSi5fX0gsUSkmJihKLl9fPSQsSi51PVEseTEuX19oLnB1c2goSikpfWZ1bmN0aW9uIFQoJCl7cmV0dXJuIFgyPTUsRTEoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDokfX0sW10pfWZ1bmN0aW9uIEE1KCQsUSxKKXtYMj02LHcwKGZ1bmN0aW9uKCl7aWYodHlwZW9mICQ9PSJmdW5jdGlvbiIpe3ZhciBYPSQoUSgpKTtyZXR1cm4gZnVuY3Rpb24oKXskKG51bGwpLFgmJnR5cGVvZiBYPT0iZnVuY3Rpb24iJiZYKCl9fWlmKCQpcmV0dXJuICQuY3VycmVudD1RKCksZnVuY3Rpb24oKXtyZXR1cm4gJC5jdXJyZW50PW51bGx9fSxKPT1udWxsP0o6Si5jb25jYXQoJCkpfWZ1bmN0aW9uIEUxKCQsUSl7dmFyIEo9SzIocDArKyw3KTtyZXR1cm4gXzMoSi5fX0gsUSkmJihKLl9fPSQoKSxKLl9fSD1RLEouX19oPSQpLEouX199ZnVuY3Rpb24gRSgkLFEpe3JldHVybiBYMj04LEUxKGZ1bmN0aW9uKCl7cmV0dXJuICR9LFEpfWZ1bmN0aW9uIEgwKCQpe3ZhciBRPXkxLmNvbnRleHRbJC5fX2NdLEo9SzIocDArKyw5KTtyZXR1cm4gSi5jPSQsUT8oSi5fXz09bnVsbCYmKEouX189ITAsUS5zdWIoeTEpKSxRLnByb3BzLnZhbHVlKTokLl9ffWZ1bmN0aW9uIGs1KCQsUSl7aDEudXNlRGVidWdWYWx1ZSYmaDEudXNlRGVidWdWYWx1ZShRP1EoJCk6JCl9ZnVuY3Rpb24gWTIoKXt2YXIgJD1LMihwMCsrLDExKTtpZighJC5fXyl7Zm9yKHZhciBRPXkxLl9fdjtRIT09bnVsbCYmIVEuX19tJiZRLl9fIT09bnVsbDspUT1RLl9fO3ZhciBKPVEuX19tfHwoUS5fX209WzAsMF0pOyQuX189IlAiK0pbMF0rIi0iK0pbMV0rK31yZXR1cm4gJC5fX31mdW5jdGlvbiBnNygpe2Zvcih2YXIgJDskPWE4LnNoaWZ0KCk7KXt2YXIgUT0kLl9fSDtpZigkLl9fUCYmUSl0cnl7US5fX2guc29tZShNNSksUS5fX2guc29tZShXMyksUS5fX2g9W119Y2F0Y2goSil7US5fX2g9W10saDEuX19lKEosJC5fX3YpfX19aDEuX19iPWZ1bmN0aW9uKCQpe3kxPW51bGwsbDgmJmw4KCQpfSxoMS5fXz1mdW5jdGlvbigkLFEpeyQmJlEuX19rJiZRLl9fay5fX20mJigkLl9fbT1RLl9fay5fX20pLG44JiZuOCgkLFEpfSxoMS5fX3I9ZnVuY3Rpb24oJCl7ZDgmJmQ4KCQpLHAwPTA7dmFyIFE9KHkxPSQuX19jKS5fX0g7USYmKGszPT09eTE/KFEuX19oPVtdLHkxLl9faD1bXSxRLl9fLnNvbWUoZnVuY3Rpb24oSil7Si5fX04mJihKLl9fPUouX19OKSxKLnU9Si5fX049dm9pZCAwfSkpOihRLl9faC5zb21lKE01KSxRLl9faC5zb21lKFczKSxRLl9faD1bXSxwMD0wKSksazM9eTF9LGgxLmRpZmZlZD1mdW5jdGlvbigkKXtjOCYmYzgoJCk7dmFyIFE9JC5fX2M7USYmUS5fX0gmJihRLl9fSC5fX2gubGVuZ3RoJiYoYTgucHVzaChRKSE9PTEmJnU4PT09aDEucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwoKHU4PWgxLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fGY3KShnNykpLFEuX19ILl9fLnNvbWUoZnVuY3Rpb24oSil7Si51JiYoSi5fX0g9Si51KSxKLnU9dm9pZCAwfSkpLGszPXkxPW51bGx9LGgxLl9fYz1mdW5jdGlvbigkLFEpe1Euc29tZShmdW5jdGlvbihKKXt0cnl7Si5fX2guc29tZShNNSksSi5fX2g9Si5fX2guZmlsdGVyKGZ1bmN0aW9uKFgpe3JldHVybiFYLl9ffHxXMyhYKX0pfWNhdGNoKFgpe1Euc29tZShmdW5jdGlvbihLKXtLLl9faCYmKEsuX19oPVtdKX0pLFE9W10saDEuX19lKFgsSi5fX3YpfX0pLG84JiZvOCgkLFEpfSxoMS51bm1vdW50PWZ1bmN0aW9uKCQpe2k4JiZpOCgkKTt2YXIgUSxKPSQuX19jO0omJkouX19IJiYoSi5fX0guX18uc29tZShmdW5jdGlvbihYKXt0cnl7TTUoWCl9Y2F0Y2goSyl7UT1LfX0pLEouX19IPXZvaWQgMCxRJiZoMS5fX2UoUSxKLl9fdikpfTt2YXIgcjg9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT09ImZ1bmN0aW9uIjtmdW5jdGlvbiBmNygkKXt2YXIgUSxKPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KFgpLHI4JiZjYW5jZWxBbmltYXRpb25GcmFtZShRKSxzZXRUaW1lb3V0KCQpfSxYPXNldFRpbWVvdXQoSiwzNSk7cjgmJihRPXJlcXVlc3RBbmltYXRpb25GcmFtZShKKSl9ZnVuY3Rpb24gTTUoJCl7dmFyIFE9eTEsSj0kLl9fYzt0eXBlb2YgSj09ImZ1bmN0aW9uIiYmKCQuX19jPXZvaWQgMCxKKCkpLHkxPVF9ZnVuY3Rpb24gVzMoJCl7dmFyIFE9eTE7JC5fX2M9JC5fXygpLHkxPVF9ZnVuY3Rpb24gXzMoJCxRKXtyZXR1cm4hJHx8JC5sZW5ndGghPT1RLmxlbmd0aHx8US5zb21lKGZ1bmN0aW9uKEosWCl7cmV0dXJuIEohPT0kW1hdfSl9ZnVuY3Rpb24gczgoJCxRKXtyZXR1cm4gdHlwZW9mIFE9PSJmdW5jdGlvbiI/USgkKTpRfWZ1bmN0aW9uIG03KCQsUSl7Zm9yKHZhciBKIGluIFEpJFtKXT1RW0pdO3JldHVybiAkfWZ1bmN0aW9uIHQ4KCQsUSl7Zm9yKHZhciBKIGluICQpaWYoSiE9PSJfX3NvdXJjZSImJiEoSiBpbiBRKSlyZXR1cm4hMDtmb3IodmFyIFggaW4gUSlpZihYIT09Il9fc291cmNlIiYmJFtYXSE9PVFbWF0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZTgoJCxRKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PVF9KGU4LnByb3RvdHlwZT1uZXcgbzEpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLGU4LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oJCxRKXtyZXR1cm4gdDgodGhpcy5wcm9wcywkKXx8dDgodGhpcy5zdGF0ZSxRKX07dmFyICQ5PXMuX19iO3MuX19iPWZ1bmN0aW9uKCQpeyQudHlwZSYmJC50eXBlLl9fZiYmJC5yZWYmJigkLnByb3BzLnJlZj0kLnJlZiwkLnJlZj1udWxsKSwkOSYmJDkoJCl9O3ZhciBwNz1zLl9fZTtzLl9fZT1mdW5jdGlvbigkLFEsSixYKXtpZigkLnRoZW4pe2Zvcih2YXIgSyxZPVE7WT1ZLl9fOylpZigoSz1ZLl9fYykmJksuX19jKXJldHVybiBRLl9fZT09bnVsbCYmKFEuX19lPUouX19lLFEuX19rPUouX19rKSxLLl9fYygkLFEpfXA3KCQsUSxKLFgpfTt2YXIgUTk9cy51bm1vdW50O2Z1bmN0aW9uIHE5KCQsUSxKKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihYKXt0eXBlb2YgWC5fX2M9PSJmdW5jdGlvbiImJlguX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9bTcoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PUomJigkLl9fYy5fX1A9USksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIHE5KFgsUSxKKX0pKSwkfWZ1bmN0aW9uIEc5KCQsUSxKKXtyZXR1cm4gJCYmSiYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihYKXtyZXR1cm4gRzkoWCxRLEopfSksJC5fX2MmJiQuX19jLl9fUD09PVEmJigkLl9fZSYmSi5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1KKSksJH1mdW5jdGlvbiBEMygpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBWOSgkKXt2YXIgUT0kLl9fJiYkLl9fLl9fYztyZXR1cm4gUSYmUS5fX2EmJlEuX19hKCQpfWZ1bmN0aW9uIFc1KCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9cy51bm1vdW50PWZ1bmN0aW9uKCQpe3ZhciBRPSQuX19jO1EmJihRLl9fej0hMCksUSYmUS5fX1ImJlEuX19SKCksUSYmMzImJC5fX3UmJigkLnR5cGU9bnVsbCksUTkmJlE5KCQpfSwoRDMucHJvdG90eXBlPW5ldyBvMSkuX19jPWZ1bmN0aW9uKCQsUSl7dmFyIEo9US5fX2MsWD10aGlzO1gubz09bnVsbCYmKFgubz1bXSksWC5vLnB1c2goSik7dmFyIEs9VjkoWC5fX3YpLFk9ITEscT1mdW5jdGlvbigpe1l8fFguX196fHwoWT0hMCxKLl9fUj1udWxsLEs/SyhCKTpCKCkpfTtKLl9fUj1xO3ZhciBHPUouX19QO0ouX19QPW51bGw7dmFyIEI9ZnVuY3Rpb24oKXtpZighLS1YLl9fdSl7aWYoWC5zdGF0ZS5fX2Epe3ZhciBOPVguc3RhdGUuX19hO1guX192Ll9fa1swXT1HOShOLE4uX19jLl9fUCxOLl9fYy5fX08pfXZhciB6O2ZvcihYLnNldFN0YXRlKHtfX2E6WC5fX2I9bnVsbH0pO3o9WC5vLnBvcCgpOyl6Ll9fUD1HLHouZm9yY2VVcGRhdGUoKX19O1guX191Kyt8fDMyJlEuX191fHxYLnNldFN0YXRlKHtfX2E6WC5fX2I9WC5fX3YuX19rWzBdfSksJC50aGVuKHEscSl9LEQzLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sRDMucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkLFEpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBKPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFg9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09cTkodGhpcy5fX2IsSixYLl9fTz1YLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgSz1RLl9fYSYmdTEoWjEsbnVsbCwkLmZhbGxiYWNrKTtyZXR1cm4gSyYmKEsuX191Jj0tMzMpLFt1MShaMSxudWxsLFEuX19hP251bGw6JC5jaGlsZHJlbiksS119O3ZhciBKOT1mdW5jdGlvbigkLFEsSil7aWYoKytKWzFdPT09SlswXSYmJC5sLmRlbGV0ZShRKSwkLnByb3BzLnJldmVhbE9yZGVyJiYoJC5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8ISQubC5zaXplKSlmb3IoSj0kLmk7Sjspe2Zvcig7Si5sZW5ndGg+MzspSi5wb3AoKSgpO2lmKEpbMV08SlswXSlicmVhazskLmk9Sj1KWzJdfX07KFc1LnByb3RvdHlwZT1uZXcgbzEpLl9fYT1mdW5jdGlvbigkKXt2YXIgUT10aGlzLEo9VjkoUS5fX3YpLFg9US5sLmdldCgkKTtyZXR1cm4gWFswXSsrLGZ1bmN0aW9uKEspe3ZhciBZPWZ1bmN0aW9uKCl7US5wcm9wcy5yZXZlYWxPcmRlcj8oWC5wdXNoKEspLEo5KFEsJCxYKSk6SygpfTtKP0ooWSk6WSgpfX0sVzUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgUT1LMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZRLnJldmVyc2UoKTtmb3IodmFyIEo9US5sZW5ndGg7Si0tOyl0aGlzLmwuc2V0KFFbSl0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LFc1LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9VzUucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihRLEope0o5KCQsSixRKX0pfTt2YXIgdTc9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsbDc9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLGQ3PS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sYzc9L1tBLVowLTldL2csbzc9dHlwZW9mIGRvY3VtZW50PCJ1IixpNz1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O2Z1bmN0aW9uIEI5KCQsUSxKKXtyZXR1cm4gUS5fX2s9PW51bGwmJihRLnRleHRDb250ZW50PSIiKSx2MCgkLFEpLHR5cGVvZiBKPT0iZnVuY3Rpb24iJiZKKCksJD8kLl9fYzpudWxsfW8xLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFsiY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsImNvbXBvbmVudFdpbGxVcGRhdGUiXS5mb3JFYWNoKGZ1bmN0aW9uKCQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvMS5wcm90b3R5cGUsJCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIiskXX0sc2V0OmZ1bmN0aW9uKFEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpRfSl9fSl9KTt2YXIgWjk9cy5ldmVudDtzLmV2ZW50PWZ1bmN0aW9uKCQpe3JldHVybiBaOSYmKCQ9WjkoJCkpLCQucGVyc2lzdD1mdW5jdGlvbigpe30sJC5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sJC5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSwkLm5hdGl2ZUV2ZW50PSR9O3ZhciBOOSxuNz17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sWDk9cy52bm9kZTtzLnZub2RlPWZ1bmN0aW9uKCQpe3R5cGVvZiAkLnR5cGU9PSJzdHJpbmciJiZmdW5jdGlvbihRKXt2YXJ7cHJvcHM6Six0eXBlOlh9PVEsSz17fSxZPVguaW5kZXhPZigiLSIpPT0tMTtmb3IodmFyIHEgaW4gSil7dmFyIEc9SltxXTtpZighKHE9PT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBKKSYmRz09bnVsbHx8bzcmJnE9PT0iY2hpbGRyZW4iJiZYPT09Im5vc2NyaXB0Inx8cT09PSJjbGFzcyJ8fHE9PT0iY2xhc3NOYW1lIikpe3ZhciBCPXEudG9Mb3dlckNhc2UoKTtxPT09ImRlZmF1bHRWYWx1ZSImJiJ2YWx1ZSJpbiBKJiZKLnZhbHVlPT1udWxsP3E9InZhbHVlIjpxPT09ImRvd25sb2FkIiYmRz09PSEwP0c9IiI6Qj09PSJ0cmFuc2xhdGUiJiZHPT09Im5vIj9HPSExOkJbMF09PT0ibyImJkJbMV09PT0ibiI/Qj09PSJvbmRvdWJsZWNsaWNrIj9xPSJvbmRibGNsaWNrIjpCIT09Im9uY2hhbmdlInx8WCE9PSJpbnB1dCImJlghPT0idGV4dGFyZWEifHxpNyhKLnR5cGUpP0I9PT0ib25mb2N1cyI/cT0ib25mb2N1c2luIjpCPT09Im9uYmx1ciI/cT0ib25mb2N1c291dCI6ZDcudGVzdChxKSYmKHE9Qik6Qj1xPSJvbmlucHV0IjpZJiZsNy50ZXN0KHEpP3E9cS5yZXBsYWNlKGM3LCItJCYiKS50b0xvd2VyQ2FzZSgpOkc9PT1udWxsJiYoRz12b2lkIDApLEI9PT0ib25pbnB1dCImJktbcT1CXSYmKHE9Im9uaW5wdXRDYXB0dXJlIiksS1txXT1HfX1YPT0ic2VsZWN0IiYmKEsubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkoSy52YWx1ZSkmJihLLnZhbHVlPUswKEouY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oTil7Ti5wcm9wcy5zZWxlY3RlZD1LLnZhbHVlLmluZGV4T2YoTi5wcm9wcy52YWx1ZSkhPS0xfSkpLEsuZGVmYXVsdFZhbHVlIT1udWxsJiYoSy52YWx1ZT1LMChKLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKE4pe04ucHJvcHMuc2VsZWN0ZWQ9Sy5tdWx0aXBsZT9LLmRlZmF1bHRWYWx1ZS5pbmRleE9mKE4ucHJvcHMudmFsdWUpIT0tMTpLLmRlZmF1bHRWYWx1ZT09Ti5wcm9wcy52YWx1ZX0pKSksSi5jbGFzcyYmIUouY2xhc3NOYW1lPyhLLmNsYXNzPUouY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KEssImNsYXNzTmFtZSIsbjcpKTpKLmNsYXNzTmFtZSYmKEsuY2xhc3M9Sy5jbGFzc05hbWU9Si5jbGFzc05hbWUpLFEucHJvcHM9S30oJCksJC4kJHR5cGVvZj11NyxYOSYmWDkoJCl9O3ZhciBLOT1zLl9fcjtzLl9fcj1mdW5jdGlvbigkKXtLOSYmSzkoJCksTjk9JC5fX2N9O3ZhciBZOT1zLmRpZmZlZDtzLmRpZmZlZD1mdW5jdGlvbigkKXtZOSYmWTkoJCk7dmFye3Byb3BzOlEsX19lOkp9PSQ7SiE9bnVsbCYmJC50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluIFEmJlEudmFsdWUhPT1KLnZhbHVlJiYoSi52YWx1ZT1RLnZhbHVlPT1udWxsPyIiOlEudmFsdWUpLE45PW51bGx9O2Z1bmN0aW9uIHo5KCQpe3JldHVybiEhJC5fX2smJih2MChudWxsLCQpLCEwKX1mdW5jdGlvbiBMOSgkKXtyZXR1cm57cmVuZGVyOmZ1bmN0aW9uKFEpe0I5KFEsJCl9LHVubW91bnQ6ZnVuY3Rpb24oKXt6OSgkKX19fWZ1bmN0aW9uIFc5KCQsUSl7Zm9yKHZhciBKIGluIFEpJFtKXT1RW0pdO3JldHVybiAkfWZ1bmN0aW9uIFQzKCQsUSl7Zm9yKHZhciBKIGluICQpaWYoSiE9PSJfX3NvdXJjZSImJiEoSiBpbiBRKSlyZXR1cm4hMDtmb3IodmFyIFggaW4gUSlpZihYIT09Il9fc291cmNlIiYmJFtYXSE9PVFbWF0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gXzkoJCxRKXt2YXIgSj1RKCksWD1BKHt0OntfXzpKLHU6UX19KSxLPVhbMF0udCxZPVhbMV07cmV0dXJuIHcwKGZ1bmN0aW9uKCl7Sy5fXz1KLEsudT1RLFAzKEspJiZZKHt0Okt9KX0sWyQsSixRXSksYihmdW5jdGlvbigpe3JldHVybiBQMyhLKSYmWSh7dDpLfSksJChmdW5jdGlvbigpe1AzKEspJiZZKHt0Okt9KX0pfSxbJF0pLEp9ZnVuY3Rpb24gUDMoJCl7dHJ5e3JldHVybiEoKFE9JC5fXyk9PT0oSj0kLnUoKSkmJihRIT09MHx8MS9RPT0xL0opfHxRIT1RJiZKIT1KKX1jYXRjaChYKXtyZXR1cm4hMH12YXIgUSxKfWZ1bmN0aW9uIEQ5KCQpeyQoKX1mdW5jdGlvbiBQOSgkKXtyZXR1cm4gJH1mdW5jdGlvbiBUOSgpe3JldHVyblshMSxEOV19dmFyIEU5PXcwO2Z1bmN0aW9uIEUzKCQsUSl7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1RfWZ1bmN0aW9uIG4wKCQsUSl7ZnVuY3Rpb24gSihLKXt2YXIgWT10aGlzLnByb3BzLnJlZjtyZXR1cm4gWSE9Sy5yZWYmJlkmJih0eXBlb2YgWT09ImZ1bmN0aW9uIj9ZKG51bGwpOlkuY3VycmVudD1udWxsKSxRPyFRKHRoaXMucHJvcHMsSyl8fFkhPUsucmVmOlQzKHRoaXMucHJvcHMsSyl9ZnVuY3Rpb24gWChLKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9Six1MSgkLEspfXJldHVybiBYLmRpc3BsYXlOYW1lPSJNZW1vKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLFguX19mPVgucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWC50eXBlPSQsWH0oRTMucHJvdG90eXBlPW5ldyBvMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsRTMucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLFEpe3JldHVybiBUMyh0aGlzLnByb3BzLCQpfHxUMyh0aGlzLnN0YXRlLFEpfTt2YXIgVTk9cy5fX2I7cy5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLFU5JiZVOSgkKX07dmFyIHI3PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpfHwzOTExO2Z1bmN0aW9uIF8wKCQpe2Z1bmN0aW9uIFEoSil7dmFyIFg9Vzkoe30sSik7cmV0dXJuIGRlbGV0ZSBYLnJlZiwkKFgsSi5yZWZ8fG51bGwpfXJldHVybiBRLiQkdHlwZW9mPXI3LFEucmVuZGVyPSQsUS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD1RLl9fZj0hMCxRLmRpc3BsYXlOYW1lPSJGb3J3YXJkUmVmKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLFF9dmFyIEg5PWZ1bmN0aW9uKCQsUSl7cmV0dXJuICQ9PW51bGw/bnVsbDpLMChLMCgkKS5tYXAoUSkpfSxhNz17bWFwOkg5LGZvckVhY2g6SDksY291bnQ6ZnVuY3Rpb24oJCl7cmV0dXJuICQ/SzAoJCkubGVuZ3RoOjB9LG9ubHk6ZnVuY3Rpb24oJCl7dmFyIFE9SzAoJCk7aWYoUS5sZW5ndGghPT0xKXRocm93IkNoaWxkcmVuLm9ubHkiO3JldHVybiBRWzBdfSx0b0FycmF5OkswfSxzNz1zLl9fZTtzLl9fZT1mdW5jdGlvbigkLFEsSixYKXtpZigkLnRoZW4pe2Zvcih2YXIgSyxZPVE7WT1ZLl9fOylpZigoSz1ZLl9fYykmJksuX19jKXJldHVybiBRLl9fZT09bnVsbCYmKFEuX19lPUouX19lLFEuX19rPUouX19rKSxLLl9fYygkLFEpfXM3KCQsUSxKLFgpfTt2YXIgQzk9cy51bm1vdW50O2Z1bmN0aW9uIHc5KCQsUSxKKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihYKXt0eXBlb2YgWC5fX2M9PSJmdW5jdGlvbiImJlguX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9Vzkoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PUomJigkLl9fYy5fX1A9USksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIHc5KFgsUSxKKX0pKSwkfWZ1bmN0aW9uIEk5KCQsUSxKKXtyZXR1cm4gJCYmSiYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihYKXtyZXR1cm4gSTkoWCxRLEopfSksJC5fX2MmJiQuX19jLl9fUD09PVEmJigkLl9fZSYmSi5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1KKSksJH1mdW5jdGlvbiBfNSgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBiOSgkKXt2YXIgUT0kLl9fJiYkLl9fLl9fYztyZXR1cm4gUSYmUS5fX2EmJlEuX19hKCQpfWZ1bmN0aW9uIHQ3KCQpe3ZhciBRLEosWCxLPW51bGw7ZnVuY3Rpb24gWShxKXtpZihRfHwoUT0kKCkpLnRoZW4oZnVuY3Rpb24oRyl7RyYmKEs9Ry5kZWZhdWx0fHxHKSxYPSEwfSxmdW5jdGlvbihHKXtKPUcsWD0hMH0pLEopdGhyb3cgSjtpZighWCl0aHJvdyBRO3JldHVybiBLP3UxKEsscSk6bnVsbH1yZXR1cm4gWS5kaXNwbGF5TmFtZT0iTGF6eSIsWS5fX2Y9ITAsWX1mdW5jdGlvbiBiMigpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfXMudW5tb3VudD1mdW5jdGlvbigkKXt2YXIgUT0kLl9fYztRJiYoUS5fX3o9ITApLFEmJlEuX19SJiZRLl9fUigpLFEmJjMyJiQuX191JiYoJC50eXBlPW51bGwpLEM5JiZDOSgkKX0sKF81LnByb3RvdHlwZT1uZXcgbzEpLl9fYz1mdW5jdGlvbigkLFEpe3ZhciBKPVEuX19jLFg9dGhpcztYLm89PW51bGwmJihYLm89W10pLFguby5wdXNoKEopO3ZhciBLPWI5KFguX192KSxZPSExLHE9ZnVuY3Rpb24oKXtZfHxYLl9fenx8KFk9ITAsSi5fX1I9bnVsbCxLP0soQik6QigpKX07Si5fX1I9cTt2YXIgRz1KLl9fUDtKLl9fUD1udWxsO3ZhciBCPWZ1bmN0aW9uKCl7aWYoIS0tWC5fX3Upe2lmKFguc3RhdGUuX19hKXt2YXIgTj1YLnN0YXRlLl9fYTtYLl9fdi5fX2tbMF09STkoTixOLl9fYy5fX1AsTi5fX2MuX19PKX12YXIgejtmb3IoWC5zZXRTdGF0ZSh7X19hOlguX19iPW51bGx9KTt6PVguby5wb3AoKTspei5fX1A9Ryx6LmZvcmNlVXBkYXRlKCl9fTtYLl9fdSsrfHwzMiZRLl9fdXx8WC5zZXRTdGF0ZSh7X19hOlguX19iPVguX192Ll9fa1swXX0pLCQudGhlbihxLHEpfSxfNS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LF81LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCxRKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgSj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxYPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPXc5KHRoaXMuX19iLEosWC5fX089WC5fX1ApfXRoaXMuX19iPW51bGx9dmFyIEs9US5fX2EmJnUxKFoxLG51bGwsJC5mYWxsYmFjayk7cmV0dXJuIEsmJihLLl9fdSY9LTMzKSxbdTEoWjEsbnVsbCxRLl9fYT9udWxsOiQuY2hpbGRyZW4pLEtdfTt2YXIgTzk9ZnVuY3Rpb24oJCxRLEope2lmKCsrSlsxXT09PUpbMF0mJiQubC5kZWxldGUoUSksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKEo9JC5pO0o7KXtmb3IoO0oubGVuZ3RoPjM7KUoucG9wKCkoKTtpZihKWzFdPEpbMF0pYnJlYWs7JC5pPUo9SlsyXX19O2Z1bmN0aW9uIGU3KCQpe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiAkLmNvbnRleHR9LCQuY2hpbGRyZW59ZnVuY3Rpb24gJCQoJCl7dmFyIFE9dGhpcyxKPSQuaDtpZihRLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7djAobnVsbCxRLnYpLFEudj1udWxsLFEuaD1udWxsfSxRLmgmJlEuaCE9PUomJlEuY29tcG9uZW50V2lsbFVubW91bnQoKSwhUS52KXtmb3IodmFyIFg9US5fX3Y7WCE9PW51bGwmJiFYLl9fbSYmWC5fXyE9PW51bGw7KVg9WC5fXztRLmg9SixRLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpKLGNoaWxkTm9kZXM6W10sX19rOntfX206WC5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpKLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oSyxZKXt0aGlzLmNoaWxkTm9kZXMucHVzaChLKSxRLmguaW5zZXJ0QmVmb3JlKEssWSl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKEspe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoSyk+Pj4xLDEpLFEuaC5yZW1vdmVDaGlsZChLKX19fXYwKHUxKGU3LHtjb250ZXh0OlEuY29udGV4dH0sJC5fX3YpLFEudil9ZnVuY3Rpb24gdzMoJCxRKXt2YXIgSj11MSgkJCx7X192OiQsaDpRfSk7cmV0dXJuIEouY29udGFpbmVySW5mbz1RLEp9KGIyLnByb3RvdHlwZT1uZXcgbzEpLl9fYT1mdW5jdGlvbigkKXt2YXIgUT10aGlzLEo9YjkoUS5fX3YpLFg9US5sLmdldCgkKTtyZXR1cm4gWFswXSsrLGZ1bmN0aW9uKEspe3ZhciBZPWZ1bmN0aW9uKCl7US5wcm9wcy5yZXZlYWxPcmRlcj8oWC5wdXNoKEspLE85KFEsJCxYKSk6SygpfTtKP0ooWSk6WSgpfX0sYjIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgUT1LMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZRLnJldmVyc2UoKTtmb3IodmFyIEo9US5sZW5ndGg7Si0tOyl0aGlzLmwuc2V0KFFbSl0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LGIyLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9YjIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihRLEope085KCQsSixRKX0pfTt2YXIgeTk9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsUSQ9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLEokPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sWiQ9L1tBLVowLTldL2csWCQ9dHlwZW9mIGRvY3VtZW50PCJ1IixLJD1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O2Z1bmN0aW9uIFkkKCQsUSxKKXtyZXR1cm4gUS5fX2s9PW51bGwmJihRLnRleHRDb250ZW50PSIiKSx2MCgkLFEpLHR5cGVvZiBKPT0iZnVuY3Rpb24iJiZKKCksJD8kLl9fYzpudWxsfWZ1bmN0aW9uIHEkKCQsUSxKKXtyZXR1cm4gRjUoJCxRKSx0eXBlb2YgSj09ImZ1bmN0aW9uIiYmSigpLCQ/JC5fX2M6bnVsbH1vMS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbigkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobzEucHJvdG90eXBlLCQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrJF19LHNldDpmdW5jdGlvbihRKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywkLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6UX0pfX0pfSk7dmFyIEY5PXMuZXZlbnQ7cy5ldmVudD1mdW5jdGlvbigkKXtyZXR1cm4gRjkmJigkPUY5KCQpKSwkLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LCQuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LCQuaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sJC5uYXRpdmVFdmVudD0kfTt2YXIgSTMsRyQ9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LE05PXMudm5vZGU7cy52bm9kZT1mdW5jdGlvbigkKXt0eXBlb2YgJC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oUSl7dmFye3Byb3BzOkosdHlwZTpYfT1RLEs9e30sWT1YLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBxIGluIEope3ZhciBHPUpbcV07aWYoIShxPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gSikmJkc9PW51bGx8fFgkJiZxPT09ImNoaWxkcmVuIiYmWD09PSJub3NjcmlwdCJ8fHE9PT0iY2xhc3MifHxxPT09ImNsYXNzTmFtZSIpKXt2YXIgQj1xLnRvTG93ZXJDYXNlKCk7cT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gSiYmSi52YWx1ZT09bnVsbD9xPSJ2YWx1ZSI6cT09PSJkb3dubG9hZCImJkc9PT0hMD9HPSIiOkI9PT0idHJhbnNsYXRlIiYmRz09PSJubyI/Rz0hMTpCWzBdPT09Im8iJiZCWzFdPT09Im4iP0I9PT0ib25kb3VibGVjbGljayI/cT0ib25kYmxjbGljayI6QiE9PSJvbmNoYW5nZSJ8fFghPT0iaW5wdXQiJiZYIT09InRleHRhcmVhInx8SyQoSi50eXBlKT9CPT09Im9uZm9jdXMiP3E9Im9uZm9jdXNpbiI6Qj09PSJvbmJsdXIiP3E9Im9uZm9jdXNvdXQiOkokLnRlc3QocSkmJihxPUIpOkI9cT0ib25pbnB1dCI6WSYmUSQudGVzdChxKT9xPXEucmVwbGFjZShaJCwiLSQmIikudG9Mb3dlckNhc2UoKTpHPT09bnVsbCYmKEc9dm9pZCAwKSxCPT09Im9uaW5wdXQiJiZLW3E9Ql0mJihxPSJvbmlucHV0Q2FwdHVyZSIpLEtbcV09R319WD09InNlbGVjdCImJihLLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KEsudmFsdWUpJiYoSy52YWx1ZT1LMChKLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKE4pe04ucHJvcHMuc2VsZWN0ZWQ9Sy52YWx1ZS5pbmRleE9mKE4ucHJvcHMudmFsdWUpIT0tMX0pKSxLLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKEsudmFsdWU9SzAoSi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihOKXtOLnByb3BzLnNlbGVjdGVkPUsubXVsdGlwbGU/Sy5kZWZhdWx0VmFsdWUuaW5kZXhPZihOLnByb3BzLnZhbHVlKSE9LTE6Sy5kZWZhdWx0VmFsdWU9PU4ucHJvcHMudmFsdWV9KSkpLEouY2xhc3MmJiFKLmNsYXNzTmFtZT8oSy5jbGFzcz1KLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShLLCJjbGFzc05hbWUiLEckKSk6Si5jbGFzc05hbWUmJihLLmNsYXNzPUsuY2xhc3NOYW1lPUouY2xhc3NOYW1lKSxRLnByb3BzPUt9KCQpLCQuJCR0eXBlb2Y9eTksTTkmJk05KCQpfTt2YXIgQTk9cy5fX3I7cy5fX3I9ZnVuY3Rpb24oJCl7QTkmJkE5KCQpLEkzPSQuX19jfTt2YXIgazk9cy5kaWZmZWQ7cy5kaWZmZWQ9ZnVuY3Rpb24oJCl7azkmJms5KCQpO3Zhcntwcm9wczpRLF9fZTpKfT0kO0ohPW51bGwmJiQudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBRJiZRLnZhbHVlIT09Si52YWx1ZSYmKEoudmFsdWU9US52YWx1ZT09bnVsbD8iIjpRLnZhbHVlKSxJMz1udWxsfTt2YXIgViQ9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKCQpe3JldHVybiBJMy5fX25bJC5fX2NdLnByb3BzLnZhbHVlfSx1c2VDYWxsYmFjazpFLHVzZUNvbnRleHQ6SDAsdXNlRGVidWdWYWx1ZTprNSx1c2VEZWZlcnJlZFZhbHVlOlA5LHVzZUVmZmVjdDpiLHVzZUlkOlkyLHVzZUltcGVyYXRpdmVIYW5kbGU6QTUsdXNlSW5zZXJ0aW9uRWZmZWN0OkU5LHVzZUxheW91dEVmZmVjdDp3MCx1c2VNZW1vOkUxLHVzZVJlZHVjZXI6aTAsdXNlUmVmOlQsdXNlU3RhdGU6QSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpfOSx1c2VUcmFuc2l0aW9uOlQ5fX19O2Z1bmN0aW9uIEIkKCQpe3JldHVybiB1MS5iaW5kKG51bGwsJCl9ZnVuY3Rpb24gRDUoJCl7cmV0dXJuISEkJiYkLiQkdHlwZW9mPT09eTl9ZnVuY3Rpb24gTiQoJCl7cmV0dXJuIEQ1KCQpJiYkLnR5cGU9PT1aMX1mdW5jdGlvbiB6JCgkKXtyZXR1cm4hISQmJnR5cGVvZiAkLmRpc3BsYXlOYW1lPT0ic3RyaW5nIiYmJC5kaXNwbGF5TmFtZS5pbmRleE9mKCJNZW1vKCIpPT0wfWZ1bmN0aW9uIEwkKCQpe3JldHVybiBENSgkKT9BMy5hcHBseShudWxsLGFyZ3VtZW50cyk6JH1mdW5jdGlvbiBVJCgkKXtyZXR1cm4hISQuX19rJiYodjAobnVsbCwkKSwhMCl9ZnVuY3Rpb24gSCQoJCl7cmV0dXJuICQmJigkLmJhc2V8fCQubm9kZVR5cGU9PT0xJiYkKXx8bnVsbH12YXIgQyQ9ZnVuY3Rpb24oJCxRKXtyZXR1cm4gJChRKX0sTyQ9ZnVuY3Rpb24oJCxRKXt2YXIgSj1zLmRlYm91bmNlUmVuZGVyaW5nO3MuZGVib3VuY2VSZW5kZXJpbmc9ZnVuY3Rpb24oSyl7cmV0dXJuIEsoKX07dmFyIFg9JChRKTtyZXR1cm4gcy5kZWJvdW5jZVJlbmRlcmluZz1KLFh9LEYkPUQ1LGY9e3VzZVN0YXRlOkEsdXNlSWQ6WTIsdXNlUmVkdWNlcjppMCx1c2VFZmZlY3Q6Yix1c2VMYXlvdXRFZmZlY3Q6dzAsdXNlSW5zZXJ0aW9uRWZmZWN0OkU5LHVzZVRyYW5zaXRpb246VDksdXNlRGVmZXJyZWRWYWx1ZTpQOSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpfOSxzdGFydFRyYW5zaXRpb246RDksdXNlUmVmOlQsdXNlSW1wZXJhdGl2ZUhhbmRsZTpBNSx1c2VNZW1vOkUxLHVzZUNhbGxiYWNrOkUsdXNlQ29udGV4dDpIMCx1c2VEZWJ1Z1ZhbHVlOms1LHZlcnNpb246IjE4LjMuMSIsQ2hpbGRyZW46YTcscmVuZGVyOlkkLGh5ZHJhdGU6cSQsdW5tb3VudENvbXBvbmVudEF0Tm9kZTpVJCxjcmVhdGVQb3J0YWw6dzMsY3JlYXRlRWxlbWVudDp1MSxjcmVhdGVDb250ZXh0OlUwLGNyZWF0ZUZhY3Rvcnk6QiQsY2xvbmVFbGVtZW50OkwkLGNyZWF0ZVJlZjpJMixGcmFnbWVudDpaMSxpc1ZhbGlkRWxlbWVudDpENSxpc0VsZW1lbnQ6RiQsaXNGcmFnbWVudDpOJCxpc01lbW86eiQsZmluZERPTU5vZGU6SCQsQ29tcG9uZW50Om8xLFB1cmVDb21wb25lbnQ6RTMsbWVtbzpuMCxmb3J3YXJkUmVmOl8wLGZsdXNoU3luYzpPJCx1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpDJCxTdHJpY3RNb2RlOloxLFN1c3BlbnNlOl81LFN1c3BlbnNlTGlzdDpiMixsYXp5OnQ3LF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOlYkfTt2YXIgeTI9e3BvcnRyYWl0OiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0In0sYjM9e3BvcnRyYWl0OiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0In07dmFyIHEyPTM7ZnVuY3Rpb24geTMoJCl7cmV0dXJuICQ+PTAuOTM/Mzp2b2lkIDB9ZnVuY3Rpb24gUzMoJCl7cmV0dXJuICQ9PT0ibGFuZHNjYXBlX2xlZnQifHwkPT09ImxhbmRzY2FwZV9yaWdodCJ9ZnVuY3Rpb24gdTAoJCl7cmV0dXJuISEkJiYoUzMoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQpfWZ1bmN0aW9uIEcyKCQpe2lmKCEkfHwkLndpZHRoPD0wfHwkLmhlaWdodDw9MClyZXR1cm4gbnVsbDtsZXQgUT1TMygkLm9yaWVudGF0aW9uKXx8JC53aWR0aD4kLmhlaWdodCxKPVE/TWF0aC5tYXgoJC53aWR0aCwkLmhlaWdodCk6TWF0aC5taW4oJC53aWR0aCwkLmhlaWdodCksWD1RP01hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpO2lmKEo9PT0kLndpZHRoJiZYPT09JC5oZWlnaHQpcmV0dXJuICQ7cmV0dXJuey4uLiQsd2lkdGg6SixoZWlnaHQ6WH19ZnVuY3Rpb24gVjIoJCl7bGV0IFE9RzIoJCksSj1TOSgkPy5vcmllbnRhdGlvbiksWD1NYXRoLmFicyhKKT09PTkwLEs9ISEkJiYkLndpZHRoPiQuaGVpZ2h0LFk9Sj09PTE4MHx8WCYmIUs7cmV0dXJue2Rpc3BsYXlDb25maWc6USxyb3RhdGlvbkRlZ3JlZXM6WT9KOjAsbmVlZHNDc3NSb3RhdGlvbjpZLGlucHV0T3JpZW50YXRpb246WT8kPy5vcmllbnRhdGlvbjp2b2lkIDB9fWZ1bmN0aW9uIFM5KCQpe3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0IjpyZXR1cm4gOTA7Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybi05MDtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm4gMTgwO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIEIyKCQsUSxKKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJue3g6Six5OjEtUX07Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybnt4OjEtSix5OlF9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybnt4OjEtUSx5OjEtSn07ZGVmYXVsdDpyZXR1cm57eDpRLHk6Sn19fWZ1bmN0aW9uIHg5KCQsUSxKKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJue2R4OkosZHk6LVF9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57ZHg6LUosZHk6UX07Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJue2R4Oi1RLGR5Oi1KfTtkZWZhdWx0OnJldHVybntkeDpRLGR5Okp9fX1mdW5jdGlvbiB4MygkLFEpe3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0Ijpzd2l0Y2goUSl7Y2FzZSAxOnJldHVybiAzO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDI6cmV0dXJuIDE7Y2FzZSAzOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIFF9Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnN3aXRjaChRKXtjYXNlIDE6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiAzO2Nhc2UgMjpyZXR1cm4gNDtjYXNlIDM6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gUX1jYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpzd2l0Y2goUSl7Y2FzZSAxOnJldHVybiA0O2Nhc2UgNDpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDM7Y2FzZSAzOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIFF9ZGVmYXVsdDpyZXR1cm4gUX19dmFyIGo5PTE2O2Z1bmN0aW9uIFMyKCQsUSxKKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiBudWxsO2xldCBYPU51bWJlci5pc0Zpbml0ZShKKSYmSj4wP0o6MSxLPVE9PT0xPyQqMTY6UT09PTI/JCpYOiQsWT1NYXRoLm1heCgtMjAwLE1hdGgubWluKDIwMCxLKSk7cmV0dXJuIE1hdGguYWJzKFkpPDAuMDE/bnVsbDpZfWZ1bmN0aW9uIGozKCQsUSxKKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAwO2xldCBYPU51bWJlci5pc0Zpbml0ZShKKSYmSj4wP0o6MTtpZihRPT09MSlyZXR1cm4gJCpqOTtpZihRPT09MilyZXR1cm4gJCpYO3JldHVybiAkfWZ1bmN0aW9uIHY5KCQsUSxKKXtpZighUXx8US53aWR0aDw9MHx8US5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IFg9US5vcmllbnRhdGlvbj09PXZvaWQgMCYmJD8ub3JpZW50YXRpb24/ey4uLlEsb3JpZW50YXRpb246JC5vcmllbnRhdGlvbn06UTtpZigkJiYkLndpZHRoPT09WC53aWR0aCYmJC5oZWlnaHQ9PT1YLmhlaWdodCYmJC5vcmllbnRhdGlvbj09PVgub3JpZW50YXRpb24pcmV0dXJuIG51bGw7cmV0dXJue2NvbmZpZzpYLG5vdGlmeVBhcmVudDpKIT09ImV4dGVybmFsIn19ZnVuY3Rpb24gUjkoe3N0cmVhbU1vZGU6JCxhdmNjU3VwcG9ydGVkOlEsaGFzRXh0ZXJuYWxJbnB1dDpKLGhhc0V4dGVybmFsRnJhbWVzOlh9KXtsZXQgSz0kPT09ImF2Y2MiJiYhUT8ibWpwZWciOiQsWT1LPT09IndlYnJ0YyIscT1LPT09ImF2Y2MiLEc9Sz09PSJtanBlZyImJlg7cmV0dXJue2VmZmVjdGl2ZVN0cmVhbU1vZGU6Syx1c2VXZWJSdGM6WSx1c2VBdmNjOnEsZXh0ZXJuYWxJbnB1dDpKLGV4dGVybmFsTWpwZWc6RyxvcGVuRGlyZWN0Q29udHJvbFNvY2tldDohSixvcGVuRGlyZWN0TWpwZWc6Sz09PSJtanBlZyImJiFHfX12YXIgTSQ9e1sxXToiZGVzY3JpcHRpb24iLFsyXToia2V5ZnJhbWUiLFszXToiZGVsdGEiLFs0XToic2VlZCJ9O2NsYXNzIFA1e2J1ZmZlcj1uZXcgVWludDhBcnJheSg2NTUzNik7bGVuPTA7c3RhcnQ9MDthcHBlbmQoJCl7aWYodGhpcy5sZW4rJC5sZW5ndGg+dGhpcy5idWZmZXIubGVuZ3RoKXtpZih0aGlzLnN0YXJ0PjApdGhpcy5idWZmZXIuY29weVdpdGhpbigwLHRoaXMuc3RhcnQsdGhpcy5sZW4pLHRoaXMubGVuLT10aGlzLnN0YXJ0LHRoaXMuc3RhcnQ9MDtpZih0aGlzLmxlbiskLmxlbmd0aD50aGlzLmJ1ZmZlci5sZW5ndGgpe2xldCBRPXRoaXMuYnVmZmVyLmxlbmd0aDt3aGlsZShRPHRoaXMubGVuKyQubGVuZ3RoKVEqPTI7bGV0IEo9bmV3IFVpbnQ4QXJyYXkoUSk7Si5zZXQodGhpcy5idWZmZXIuc3ViYXJyYXkoMCx0aGlzLmxlbikpLHRoaXMuYnVmZmVyPUp9fXRoaXMuYnVmZmVyLnNldCgkLHRoaXMubGVuKSx0aGlzLmxlbis9JC5sZW5ndGh9cHVzaCgkKXtpZigkLmxlbmd0aD4wKXRoaXMuYXBwZW5kKCQpO2xldCBRPVtdLEo9dGhpcy5idWZmZXI7d2hpbGUodGhpcy5sZW4tdGhpcy5zdGFydD49NCl7bGV0IFg9dGhpcy5zdGFydCxLPShKW1hdPDwyNHxKW1grMV08PDE2fEpbWCsyXTw8OHxKW1grM10pPj4+MDtpZih0aGlzLmxlbi1YLTQ8SylicmVhaztpZihLPDEpe3RoaXMuc3RhcnQrPTQ7Y29udGludWV9bGV0IFk9SltYKzRdLHE9TSRbWV07aWYocSlRLnB1c2goe3R5cGU6cSxwYXlsb2FkOkouc2xpY2UoWCs1LFgrNCtLKX0pO3RoaXMuc3RhcnQrPTQrS31pZih0aGlzLnN0YXJ0PjApe2lmKHRoaXMuc3RhcnQ8dGhpcy5sZW4pdGhpcy5idWZmZXIuY29weVdpdGhpbigwLHRoaXMuc3RhcnQsdGhpcy5sZW4pO3RoaXMubGVuLT10aGlzLnN0YXJ0LHRoaXMuc3RhcnQ9MH1yZXR1cm4gUX1yZXNldCgpe3RoaXMubGVuPTAsdGhpcy5zdGFydD0wfX1mdW5jdGlvbiB2MygkKXtpZigkLmxlbmd0aDw0KXJldHVybiJhdmMxLjQyRTAxRSI7bGV0IFE9KEopPT5KLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIik7cmV0dXJuImF2YzEuIitRKCRbMV0pK1EoJFsyXSkrUSgkWzNdKX1mdW5jdGlvbiByMCgpe3JldHVybiB0eXBlb2YgZ2xvYmFsVGhpczwidSImJnR5cGVvZiBnbG9iYWxUaGlzLlZpZGVvRGVjb2RlcjwidSJ9dmFyIEEkPTEwMDAsayQ9MTY2Njc7ZnVuY3Rpb24gUjMoe3VybDokLGVuYWJsZWQ6USxjYW52YXNSZWY6SixvbkZpcnN0RnJhbWU6WCxvbkZyYW1lOkssb25EZWNvZGVkRnJhbWU6WSxvbkVycm9yOnEsb25EZWNvZGVyRXJyb3I6R30pe2xldCBCPVQoe29uRmlyc3RGcmFtZTpYLG9uRnJhbWU6SyxvbkRlY29kZWRGcmFtZTpZLG9uRXJyb3I6cSxvbkRlY29kZXJFcnJvcjpHfSk7Qi5jdXJyZW50PXtvbkZpcnN0RnJhbWU6WCxvbkZyYW1lOkssb25EZWNvZGVkRnJhbWU6WSxvbkVycm9yOnEsb25EZWNvZGVyRXJyb3I6R30sYigoKT0+e2lmKCFRfHwhJHx8IXIwKCkpcmV0dXJuO2xldCBOPW5ldyBBYm9ydENvbnRyb2xsZXIsej1uZXcgUDUsVj0hMSxDPSExLFU9ITEsRj0wLEw9bnVsbCxIPW51bGwsTz0oKT0+IVYmJiFOLnNpZ25hbC5hYm9ydGVkLGs9KG8pPT57aWYoQi5jdXJyZW50Lm9uRGVjb2RlckVycm9yKUIuY3VycmVudC5vbkRlY29kZXJFcnJvcigpO2Vsc2UgQi5jdXJyZW50Lm9uRXJyb3I/LihvKX0sST0obyxpLCQxLHoxKT0+e2lmKCFPKCkpcmV0dXJuO2xldCBjPUouY3VycmVudDtpZighYylyZXR1cm47aWYoYy53aWR0aCE9PWl8fGMuaGVpZ2h0IT09JDEpYy53aWR0aD1pLGMuaGVpZ2h0PSQxO2xldCBtPWMuZ2V0Q29udGV4dCgiMmQiKTtpZighbSlyZXR1cm47aWYobS5kcmF3SW1hZ2UobywwLDAsaSwkMSksQi5jdXJyZW50Lm9uRnJhbWU/LigpLHoxJiYhVSlVPSEwLEIuY3VycmVudC5vbkRlY29kZWRGcmFtZT8uKCk7aWYoIUMpQz0hMCxCLmN1cnJlbnQub25GaXJzdEZyYW1lPy4oKX0sdz0oKT0+bmV3IFZpZGVvRGVjb2Rlcih7b3V0cHV0OihvKT0+e3RyeXtpZihPKCkpSShvLG8uZGlzcGxheVdpZHRoLG8uZGlzcGxheUhlaWdodCwhMCl9ZmluYWxseXtvLmNsb3NlKCl9fSxlcnJvcjoobyk9PmsoYGRlY29kZXI6ICR7by5tZXNzYWdlfWApfSksUD1hc3luYyhvKT0+e2xldCBpPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKG5ldyBCbG9iKFtvXSx7dHlwZToiaW1hZ2UvanBlZyJ9KSk7dHJ5e2lmKE8oKSlJKGksaS53aWR0aCxpLmhlaWdodCwhMSl9ZmluYWxseXtpLmNsb3NlKCl9fSx4PShvKT0+e2lmKCFIfHxILnN0YXRlPT09ImNsb3NlZCIpSD13KCk7dHJ5e0guY29uZmlndXJlKHtjb2RlYzp2MyhvKSxkZXNjcmlwdGlvbjpvLG9wdGltaXplRm9yOiJsYXRlbmN5IixoYXJkd2FyZUFjY2VsZXJhdGlvbjoicHJlZmVyLWhhcmR3YXJlIn0pfWNhdGNoKGkpe2soYGNvbmZpZzogJHtpLm1lc3NhZ2V9YCl9fSx0PShvLGkpPT57aWYoSD8uc3RhdGUhPT0iY29uZmlndXJlZCIpcmV0dXJuO3RyeXtILmRlY29kZShuZXcgRW5jb2RlZFZpZGVvQ2h1bmsoe3R5cGU6bz09PSJrZXlmcmFtZSI/ImtleSI6ImRlbHRhIix0aW1lc3RhbXA6RixkYXRhOml9KSksRis9ayR9Y2F0Y2h7fX0saD0obyxpKT0+e3N3aXRjaChvKXtjYXNlInNlZWQiOlAoaSkuY2F0Y2goKCk9Pnt9KTtyZXR1cm47Y2FzZSJkZXNjcmlwdGlvbiI6eChpKTtyZXR1cm47Y2FzZSJrZXlmcmFtZSI6Y2FzZSJkZWx0YSI6dChvLGkpO3JldHVybn19LGw9KCk9PntpZighTygpfHxMKXJldHVybjtMPXNldFRpbWVvdXQoKCk9PntMPW51bGwscigpfSxBJCl9LHI9YXN5bmMoKT0+e3oucmVzZXQoKTt0cnl7bGV0IGk9KGF3YWl0IGZldGNoKGAkeyR9L3N0cmVhbS5hdmNjYCx7c2lnbmFsOk4uc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCFpKXJldHVybjtmb3IoOzspe2xldHtkb25lOiQxLHZhbHVlOnoxfT1hd2FpdCBpLnJlYWQoKTtpZigkMSlicmVhaztpZighejEpY29udGludWU7Zm9yKGxldCBjIG9mIHoucHVzaCh6MSkpaChjLnR5cGUsYy5wYXlsb2FkKX19Y2F0Y2h7fWZpbmFsbHl7aWYoTygpKWwoKX19O3JldHVybiByKCksKCk9PntpZihWPSEwLEwpY2xlYXJUaW1lb3V0KEwpO2lmKE4uYWJvcnQoKSx6LnJlc2V0KCksSCYmSC5zdGF0ZSE9PSJjbG9zZWQiKXRyeXtILmNsb3NlKCl9Y2F0Y2h7fUg9bnVsbH19LFskLFEsSl0pfWZ1bmN0aW9uIGg5KCQsUSl7bGV0IEo9MCxYPTAsSz0oKT0+e2xldHt2aWRlb1dpZHRoOlksdmlkZW9IZWlnaHQ6cX09JDtpZihZPD0wfHxxPD0wfHxZPT09SiYmcT09PVgpcmV0dXJuO0o9WSxYPXEsUSh7d2lkdGg6WSxoZWlnaHQ6cX0pfTtyZXR1cm4gJC5hZGRFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsSyksJC5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLEspLEsoKSx7Y2hlY2s6SyxkaXNjb25uZWN0KCl7JC5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsSyksJC5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLEspfX19dmFyIFckPTA7ZnVuY3Rpb24gWigkLFEsSixYLEssWSl7UXx8KFE9e30pO3ZhciBxLEcsQj1RO2lmKCJyZWYiaW4gQilmb3IoRyBpbiBCPXt9LFEpRz09InJlZiI/cT1RW0ddOkJbR109UVtHXTt2YXIgTj17dHlwZTokLHByb3BzOkIsa2V5OkoscmVmOnEsX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oi0tVyQsX19pOi0xLF9fdTowLF9fc291cmNlOkssX19zZWxmOll9O2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYocT0kLmRlZmF1bHRQcm9wcykpZm9yKEcgaW4gcSlCW0ddPT09dm9pZCAwJiYoQltHXT1xW0ddKTtyZXR1cm4gcy52bm9kZSYmcy52bm9kZShOKSxOfXZhciBnOT1gdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nOScgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwwLjQ1KScgc3Ryb2tlPSdyZ2JhKDAsMCwwLDAuNTUpJyBzdHJva2Utd2lkdGg9JzEuMjUnIGZpbHRlcj0nZHJvcC1zaGFkb3coMCAxcHggMnB4IHJnYmEoMCwwLDAsMC40NSkpJy8lM0UlM0Mvc3ZnJTNFIikgMTIgMTIsIHBvaW50ZXJgLF8kPTEuMDA0LEQkPTMsUCQ9NCxUJD01LEUkPTEwLHckPTExO2Z1bmN0aW9uIFQ1KHt1cmw6JCx3c1VybDpRLHN0eWxlOkosaW1hZ2VTdHlsZTpYLGNsYXNzTmFtZTpLLG9uSG9tZVByZXNzOlksb25TdHJlYW1Ub3VjaDpxLG9uU3RyZWFtTXVsdGlUb3VjaDpHLG9uU3RyZWFtQnV0dG9uOkIsb25TdHJlYW1EaWdpdGFsQ3Jvd246TixvblN0cmVhbVNjcm9sbDp6LGVuYWJsZURpZ2l0YWxDcm93bjpWLHN1YnNjcmliZUZyYW1lOkMsc3RyZWFtRnJhbWU6VSxzdHJlYW1Db25maWc6RixvblNjcmVlbkNvbmZpZ0NoYW5nZTpMLGhpZGVDb250cm9sczpILG9uU3RyZWFtaW5nQ2hhbmdlOk8sY29ubmVjdGlvblF1YWxpdHk6ayxzdHJlYW1Nb2RlOkk9ImF2Y2MiLHdlYlJ0Y1N0cmVhbTp3LG9uV2ViUnRjRnJhbWU6UCxzdHJlYW1FcnJvcjp4LG9uQXZjY0Vycm9yOnQsb25BdmNjRGVjb2RlZEZyYW1lOmh9KXtsZXR7dXNlV2ViUnRjOmwsdXNlQXZjYzpyLGV4dGVybmFsSW5wdXQ6byxleHRlcm5hbE1qcGVnOmksb3BlbkRpcmVjdENvbnRyb2xTb2NrZXQ6JDEsb3BlbkRpcmVjdE1qcGVnOnoxfT1SOSh7c3RyZWFtTW9kZTpJLGF2Y2NTdXBwb3J0ZWQ6cjAoKSxoYXNFeHRlcm5hbElucHV0OiEhcSxoYXNFeHRlcm5hbEZyYW1lczohIUN9KSxjPVQobnVsbCksbT1UKG51bGwpLEoxPVQobnVsbCksRzE9VChudWxsKSxPMT1UKG51bGwpLG49VChudWxsKSxYMT1UKG51bGwpLFtWMSxTXT1BKCExKSxbZyxfXT1BKG51bGwpLFt1LHBdPUEobnVsbCksaj1UKG51bGwpLHExPVQoITEpLEwxPVQoTCk7TDEuY3VycmVudD1MO2xldCBrMT1UKG51bGwpLFtXMSxuMV09QShudWxsKTtiKCgpPT57bGV0IFc9azEuY3VycmVudDtpZighV3x8dHlwZW9mIFJlc2l6ZU9ic2VydmVyPiJ1IilyZXR1cm47bGV0IE09bmV3IFJlc2l6ZU9ic2VydmVyKCh5KT0+e2xldCB2PXlbMF0/LmNvbnRlbnRSZWN0O2lmKHYpbjEoe3dpZHRoOnYud2lkdGgsaGVpZ2h0OnYuaGVpZ2h0fSl9KTtyZXR1cm4gTS5vYnNlcnZlKFcpLCgpPT5NLmRpc2Nvbm5lY3QoKX0sW10pO2xldFtBMSx2MV09QSgwKSxfMT1UKDApLFtsMSxVMV09QSghMSksdzE9RSgoVyxNPSJyZXBvcnRlZCIpPT57aWYoTT09PSJtZWRpYSImJnExLmN1cnJlbnQpcmV0dXJuO2lmKE0hPT0ibWVkaWEiJiZXJiZXLndpZHRoPjAmJlcuaGVpZ2h0PjApcTEuY3VycmVudD0hMDtsZXQgeT12OShqLmN1cnJlbnQsVyxNKTtpZigheSlyZXR1cm47aWYoai5jdXJyZW50PXkuY29uZmlnLHAoeS5jb25maWcpLHkubm90aWZ5UGFyZW50KUwxLmN1cnJlbnQ/Lih5LmNvbmZpZyl9LFtdKTtiKCgpPT57aWYoIWwpcmV0dXJuO2lmKHgpUyghMSksXyh4KTtlbHNlIF8obnVsbCl9LFt4LGxdKTtsZXQgZDE9VChudWxsKTtiKCgpPT57aWYoaz09PSJwb29yIil7aWYoVTEoITApLGQxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KGQxLmN1cnJlbnQpO2QxLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e1UxKCExKSxkMS5jdXJyZW50PW51bGx9LDMwMDApfWVsc2UgaWYoVTEoITEpLGQxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KGQxLmN1cnJlbnQpLGQxLmN1cnJlbnQ9bnVsbDtyZXR1cm4oKT0+e2lmKGQxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KGQxLmN1cnJlbnQpfX0sW2tdKTtsZXQgdDE9YCR7JH0vc3RyZWFtLm1qcGVnYDtiKCgpPT57aWYoIWwpcmV0dXJuO2xldCBXPUoxLmN1cnJlbnQ7aWYoIVcpcmV0dXJuO2xldCBNPSExLHk9ITEsdj0wLGU9bnVsbCxZMT0oKT0+e2lmKHl8fE0pcmV0dXJuO2U/LmNoZWNrKCksTT0hMCxQPy4oKSxTKCEwKSxfKG51bGwpfSxDMT0oKT0+e2lmKHkpcmV0dXJuO2U/LmNoZWNrKCksYTEuY3VycmVudD1EYXRlLm5vdygpLF8xLmN1cnJlbnQrKyxZMSgpLFMoITApLHY9Vy5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKEMxKX0sRDE9KCk9PntpZih5KXJldHVybjtlPy5jaGVjaygpLGExLmN1cnJlbnQ9RGF0ZS5ub3coKSxZMSgpLFMoITApfTtpZihXLnNyY09iamVjdD13Pz9udWxsLHcpe2lmKGU9aDkoVywoZjApPT57dzEoZjAsIm1lZGlhIil9KSxTKCExKSxXLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlZGRhdGEiLFkxLHtvbmNlOiEwfSksdHlwZW9mIFcucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjaz09PSJmdW5jdGlvbiIpdj1XLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soQzEpO2Vsc2UgVy5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIixEMSk7Vy5wbGF5KCkuY2F0Y2goKCk9Pnt9KX1lbHNlIFMoITEpO3JldHVybigpPT57aWYoeT0hMCxXLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWRlZGRhdGEiLFkxKSxXLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLEQxKSxlPy5kaXNjb25uZWN0KCksdiYmdHlwZW9mIFcuY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrPT09ImZ1bmN0aW9uIilXLmNhbmNlbFZpZGVvRnJhbWVDYWxsYmFjayh2KTtXLnNyY09iamVjdD1udWxsfX0sW2wsdyxQLHcxXSksYigoKT0+e3ExLmN1cnJlbnQ9ITEsai5jdXJyZW50PW51bGwscChudWxsKX0sWyQsUV0pO2xldCBnMT1UKE8pO2cxLmN1cnJlbnQ9TyxiKCgpPT57ZzEuY3VycmVudD8uKFYxKX0sW1YxXSksYigoKT0+e2lmKEYpdzEoRiwiZXh0ZXJuYWwiKX0sW0YsdzEsJF0pO2xldCByMT1UKCExKTtyMS5jdXJyZW50PVYxO2xldCAkMD1UKG51bGwpLEIwPVQobnVsbCk7YigoKT0+e2lmKCFpfHwhQylyZXR1cm47bGV0IE09c2V0VGltZW91dCgoKT0+e2lmKCFyMS5jdXJyZW50KV8oIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKSx5PXJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBlKCl7bGV0IFkxPSQwLmN1cnJlbnQ7aWYoWTEpeyQwLmN1cnJlbnQ9bnVsbDtsZXQgQzE9RzEuY3VycmVudDtpZihDMSl7aWYoQjAuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKEIwLmN1cnJlbnQpO0IwLmN1cnJlbnQ9WTEsQzEuc3JjPVkxLF8xLmN1cnJlbnQrK31lbHNlIFVSTC5yZXZva2VPYmplY3RVUkwoWTEpfXk9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpfSksdj1DKChlKT0+e2lmKGExLmN1cnJlbnQ9RGF0ZS5ub3coKSwkMC5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoJDAuY3VycmVudCk7aWYoJDAuY3VycmVudD1lLCFyMS5jdXJyZW50KWNsZWFyVGltZW91dChNKSxTKCEwKSxfKG51bGwpfSk7cmV0dXJuKCk9PntpZihjbGVhclRpbWVvdXQoTSksY2FuY2VsQW5pbWF0aW9uRnJhbWUoeSksdj8uKCksJDAuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKCQwLmN1cnJlbnQpLCQwLmN1cnJlbnQ9bnVsbDtpZihCMC5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoQjAuY3VycmVudCksQjAuY3VycmVudD1udWxsfX0sW2ksQ10pO2xldCBzMT1FKCgpPT57YTEuY3VycmVudD1EYXRlLm5vdygpLFMoITApLF8obnVsbCl9LFtdKSxnMD1FKCgpPT57aWYoXzEuY3VycmVudCsrLGExLmN1cnJlbnQ9RGF0ZS5ub3coKSwhcjEuY3VycmVudClTKCEwKSxfKG51bGwpfSxbXSk7UjMoe3VybDokLGVuYWJsZWQ6cixjYW52YXNSZWY6bSxvbkZpcnN0RnJhbWU6czEsb25GcmFtZTpnMCxvbkRlY29kZWRGcmFtZTpoLG9uRXJyb3I6XyxvbkRlY29kZXJFcnJvcjp0fSk7bGV0IG0xPUUoKFcpPT57bGV0IE09VjIoai5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLHk9QjIoTSxXLngsVy55KSx2PVcuZWRnZT09PXZvaWQgMD92b2lkIDA6eDMoTSxXLmVkZ2UpLGU9dj09PXZvaWQgMD97dHlwZTpXLnR5cGUsLi4ueX06e3R5cGU6Vy50eXBlLC4uLnksZWRnZTp2fTtpZihvKXtxPy4oZSk7cmV0dXJufWxldCBZMT1YMS5jdXJyZW50O2lmKCFZMXx8WTEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgQzE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGUpKSxEMT1uZXcgVWludDhBcnJheSgxK0MxLmxlbmd0aCk7RDFbMF09RCQsRDEuc2V0KEMxLDEpLFkxLnNlbmQoRDEpfSxbbyxxXSksRzA9RSgoVyk9PntpZihvKXtCPy4oVyk7cmV0dXJufWxldCBNPVgxLmN1cnJlbnQ7aWYoIU18fE0ucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgeT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoe2J1dHRvbjpXfSkpLHY9bmV3IFVpbnQ4QXJyYXkoMSt5Lmxlbmd0aCk7dlswXT1QJCx2LnNldCh5LDEpLE0uc2VuZCh2KX0sW28sQl0pLFEwPUUoKFcpPT57aWYoIU51bWJlci5pc0Zpbml0ZShXKXx8Vz09PTApcmV0dXJuO2lmKG8pe04/LihXKTtyZXR1cm59bGV0IE09WDEuY3VycmVudDtpZighTXx8TS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCB5PW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7ZGVsdGE6V30pKSx2PW5ldyBVaW50OEFycmF5KDEreS5sZW5ndGgpO3ZbMF09RSQsdi5zZXQoeSwxKSxNLnNlbmQodil9LFtvLE5dKSxEMD1FKChXLE0seSx2KT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoVyl8fCFOdW1iZXIuaXNGaW5pdGUoTSl8fFc9PT0wJiZNPT09MClyZXR1cm47bGV0IGU9VjIoai5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLFkxPXg5KGUsVyxNKSxDMT1CMihlLHksdiksRDE9e2R4OlkxLmR4LGR5OlkxLmR5LHg6QzEueCx5OkMxLnl9O2lmKG8pe3o/LihEMSk7cmV0dXJufWxldCBXMD1YMS5jdXJyZW50O2lmKCFXMHx8VzAucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgZjA9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEQxKSksbzA9bmV3IFVpbnQ4QXJyYXkoMStmMC5sZW5ndGgpO28wWzBdPXckLG8wLnNldChmMCwxKSxXMC5zZW5kKG8wKX0sW28sel0pLGMxPUUoKFcpPT57bGV0IE09VjIoai5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLHk9QjIoTSxXLngxLFcueTEpLHY9QjIoTSxXLngyLFcueTIpLGU9e3R5cGU6Vy50eXBlLHgxOnkueCx5MTp5LnkseDI6di54LHkyOnYueX07aWYobyl7Rz8uKGUpO3JldHVybn1sZXQgWTE9WDEuY3VycmVudDtpZighWTF8fFkxLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IEMxPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShlKSksRDE9bmV3IFVpbnQ4QXJyYXkoMStDMS5sZW5ndGgpO0QxWzBdPVQkLEQxLnNldChDMSwxKSxZMS5zZW5kKEQxKX0sW28sR10pO2IoKCk9PntpZighJDEmJiF6MSYmIXIpcmV0dXJuO2xldCBXPW51bGw7aWYoJDEpe2xldCBZMT1RPz8kLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIjtXPW5ldyBXZWJTb2NrZXQoWTEpLFcuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLFgxLmN1cnJlbnQ9VyxXLm9ubWVzc2FnZT0oQzEpPT57aWYoIShDMS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgRDE9bmV3IFVpbnQ4QXJyYXkoQzEuZGF0YSk7aWYoRDEubGVuZ3RoPDF8fEQxWzBdIT09MTMwKXJldHVybjt0cnl7dzEoSlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoRDEuc3ViYXJyYXkoMSkpKSl9Y2F0Y2h7fX0sVy5vbm9wZW49KCk9Pl8obnVsbCksVy5vbmNsb3NlPSgpPT5TKCExKSxXLm9uZXJyb3I9KCk9PntfKCJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQiKSxTKCExKX19bGV0IE09cnx8ejE/c2V0SW50ZXJ2YWwoKCk9Pnt2MShfMS5jdXJyZW50KSxfMS5jdXJyZW50PTB9LDEwMDApOm51bGwseT16MT9uZXcgQWJvcnRDb250cm9sbGVyOm51bGwsdj0hMSxlPXoxP3NldFRpbWVvdXQoKCk9PntpZighdilfKCJTdHJlYW0gaXMgbm90IHByb2R1Y2luZyBmcmFtZXMuIFRoZSBzaW11bGF0b3IgbWF5IGhhdmUgc3RvcHBlZCDigJQgdHJ5IHJlY29ubmVjdGluZy4iKX0sNjAwMCk6bnVsbDtpZih6MSYmeSkoYXN5bmMoKT0+e3RyeXtsZXQgQzE9KGF3YWl0IGZldGNoKHQxLHtzaWduYWw6eS5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUMxKXJldHVybjtsZXQgRDE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCItLWZyYW1lIik7d2hpbGUoITApe2xldHtkb25lOlcwLHZhbHVlOmYwfT1hd2FpdCBDMS5yZWFkKCk7aWYoVzApYnJlYWs7aWYoZjApZm9yKGxldCBvMD0wO28wPD1mMC5sZW5ndGgtRDEubGVuZ3RoO28wKyspe2xldCBFOD0hMDtmb3IobGV0IHo1PTA7ejU8RDEubGVuZ3RoO3o1KyspaWYoZjBbbzArejVdIT09RDFbejVdKXtFOD0hMTticmVha31pZihFOCl7aWYoXzEuY3VycmVudCsrLCF2KXtpZih2PSEwLGUpY2xlYXJUaW1lb3V0KGUpO1MoITApLF8obnVsbCl9fX19fWNhdGNoe319KSgpO3JldHVybigpPT57aWYoeT8uYWJvcnQoKSxNKWNsZWFySW50ZXJ2YWwoTSk7aWYoZSljbGVhclRpbWVvdXQoZSk7aWYoVz8uY2xvc2UoKSxYMS5jdXJyZW50PT09VylYMS5jdXJyZW50PW51bGx9fSxbJDEsejEsdDEsdzEsJCxyLFFdKSxiKCgpPT57aWYoIWwpcmV0dXJuO2xldCBXPXNldEludGVydmFsKCgpPT57djEoXzEuY3VycmVudCksXzEuY3VycmVudD0wO2xldCBNPWExLmN1cnJlbnQ7aWYoIWRvY3VtZW50LmhpZGRlbiYmTSYmRGF0ZS5ub3coKS1NPjMwMDApUyghMSl9LDEwMDApO3JldHVybigpPT5jbGVhckludGVydmFsKFcpfSxbbF0pO2xldCBhMT1UKDApO2IoKCk9PntpZighaSlyZXR1cm47bGV0IFc9MjAwMCxNPSgpPT57bGV0IGU9YTEuY3VycmVudDtpZighZXx8IXIxLmN1cnJlbnQpcmV0dXJuO2lmKERhdGUubm93KCktZT5XKVMoITEpfSx5PXNldEludGVydmFsKCgpPT57djEoXzEuY3VycmVudCksXzEuY3VycmVudD0wLE0oKX0sMTAwMCksdj0oKT0+e2lmKCFkb2N1bWVudC5oaWRkZW4pTSgpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsdiksKCk9PntjbGVhckludGVydmFsKHkpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHYpfX0sW2ldKTtsZXQgUDA9RSgoKT0+e2lmKGwpcmV0dXJuIEoxLmN1cnJlbnQ7aWYocilyZXR1cm4gbS5jdXJyZW50O3JldHVybiBpP0cxLmN1cnJlbnQ6Yy5jdXJyZW50fSxbaSxyLGxdKSxSMT1FKCgpPT57cmV0dXJuIE8xLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9QMCgpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8/bnVsbH0sW1AwXSksTzA9RSgoVyxNKT0+e2xldCB5PVIxKCk7aWYoIXkpcmV0dXJuO2xldCB2PShNLmNsaWVudFgteS5sZWZ0KS95LndpZHRoLGU9KE0uY2xpZW50WS15LnRvcCkveS5oZWlnaHQ7bTEoe3R5cGU6Vyx4OnYseTplfSl9LFtSMSxtMV0pLE4wPUUoKFcsTSk9PntsZXQgdj1SMSgpPy5oZWlnaHR8fDEsZT1TMihXLE0sdik7aWYoZT09PW51bGwpcmV0dXJuITE7cmV0dXJuIFEwKGUpLCEwfSxbUjEsUTBdKSxQMT1UKCExKSxiMT1UKCExKSxaMD1UKCExKSxGMD1UKHtkeDowLGR5OjB9KSx6MD1UKCExKSxbTTAsSzFdPUEoITEpLEQ9VCh7eDowLjUseTowLjV9KSxbZCxhXT1BKG51bGwpO2IoKCk9PntsZXQgVz0oeSk9PntpZih5LmtleT09PSJBbHQiKUsxKCEwKX0sTT0oeSk9PntpZih5LmtleT09PSJBbHQiKXtpZihLMSghMSksIWIxLmN1cnJlbnQpYShudWxsKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsVyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixNKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixXKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLE0pfX0sW10pLGIoKCk9PntpZihNMCYmIWIxLmN1cnJlbnQpe2xldCBXPUQuY3VycmVudDthKHt4MTpXLngseTE6Vy55LHgyOjEtVy54LHkyOjEtVy55fSl9ZWxzZSBpZighTTAmJiFiMS5jdXJyZW50KWEobnVsbCl9LFtNMF0pO2xldCBGMT1UKG51bGwpLEIxPVQoITEpLE4xPVQoMCksZjE9RSgoVyxNKT0+e0IxLmN1cnJlbnQ9ITA7bGV0IHk9RjEuY3VycmVudDtpZih5KWNhbmNlbEFuaW1hdGlvbkZyYW1lKE4xLmN1cnJlbnQpLE4xLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57eS5zdHlsZS5sZWZ0PWAke1cqMTAwfSVgLHkuc3R5bGUudG9wPWAke00qMTAwfSVgLHkuc3R5bGUuZGlzcGxheT0iYmxvY2sifSl9LFtdKSxwMT1FKChXLE0pPT57aWYoIUIxLmN1cnJlbnQpcmV0dXJuO2xldCB5PUYxLmN1cnJlbnQ7aWYoeSljYW5jZWxBbmltYXRpb25GcmFtZShOMS5jdXJyZW50KSxOMS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3kuc3R5bGUubGVmdD1gJHtXKjEwMH0lYCx5LnN0eWxlLnRvcD1gJHtNKjEwMH0lYH0pfSxbXSkseDE9RSgoKT0+e0IxLmN1cnJlbnQ9ITE7bGV0IFc9RjEuY3VycmVudDtpZihXKWNhbmNlbEFuaW1hdGlvbkZyYW1lKE4xLmN1cnJlbnQpLFcuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LFtdKSxBMD1FKChXKT0+e2lmKEIxLmN1cnJlbnR8fGIxLmN1cnJlbnQpcmV0dXJuITE7bGV0IE09UjEoKTtpZighTSlyZXR1cm4hMTtsZXQgeT1qMyhXLmRlbHRhWCxXLmRlbHRhTW9kZSxNLndpZHRoKSx2PWozKFcuZGVsdGFZLFcuZGVsdGFNb2RlLE0uaGVpZ2h0KTtpZih5PT09MCYmdj09PTApcmV0dXJuITE7bGV0IGU9TWF0aC5taW4oTWF0aC5tYXgoKFcuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsMCksMSksWTE9TWF0aC5taW4oTWF0aC5tYXgoKFcuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQsMCksMSk7cmV0dXJuIEQwKHkvTS53aWR0aCx2L00uaGVpZ2h0LGUsWTEpLCEwfSxbUjEsRDBdKTtiKCgpPT57bGV0IFc9bi5jdXJyZW50O2lmKCFXKXJldHVybjtsZXQgTT0oeSk9PntpZighKFY/TjAoeS5kZWx0YVkseS5kZWx0YU1vZGUpOkEwKHkpKSlyZXR1cm47eS5wcmV2ZW50RGVmYXVsdCgpLHkuc3RvcFByb3BhZ2F0aW9uKCl9O3JldHVybiBXLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixNLHtwYXNzaXZlOiExfSksKCk9PlcucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLE0pfSxbVixOMCxBMF0pO2xldCBYMD1UKDApLFQxPVQobnVsbCksTDA9RSgoKT0+e2xldCBXPURhdGUubm93KCksTT1XLVgwLmN1cnJlbnQ7aWYoWDAuY3VycmVudD1XLE08MzAwKXtpZihUMS5jdXJyZW50KWNsZWFyVGltZW91dChUMS5jdXJyZW50KSxUMS5jdXJyZW50PW51bGw7aWYoWSlZKCk7ZWxzZSBHMCgiYXBwX3N3aXRjaGVyIil9ZWxzZSBUMS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntpZihZKVkoKTtlbHNlIEcwKCJob21lIik7VDEuY3VycmVudD1udWxsfSwzMDApfSxbRzAsWV0pLFQwPVYyKHUpLGowPVQwLmRpc3BsYXlDb25maWcsazA9KCgpPT57aWYoIWowfHwhVzEpcmV0dXJuIG51bGw7aWYoVzEud2lkdGg9PT0wfHxXMS5oZWlnaHQ9PT0wKXJldHVybiBudWxsO2xldCBXPU1hdGgubWluKFcxLndpZHRoL2owLndpZHRoLFcxLmhlaWdodC9qMC5oZWlnaHQpO3JldHVybnt3aWR0aDpqMC53aWR0aCpXLGhlaWdodDpqMC5oZWlnaHQqV319KSgpLEQyPVQwLnJvdGF0aW9uRGVncmVlcyxCNT1UMC5uZWVkc0Nzc1JvdGF0aW9uJiZNYXRoLmFicyhEMik9PT05MCxONT1YLFI9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6QjUmJmswP2Ake2swLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDpCNSYmazA/YCR7azAud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7RDI9PT0wPyIiOmAgcm90YXRlKCR7RDJ9ZGVnKWB9YCx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjpnOSxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLlgsLi4uRDI9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fSxRMT17Li4uUix0cmFuc2Zvcm06YCR7Ui50cmFuc2Zvcm0/PyIifSBzY2FsZSgke18kfSlgfTtyZXR1cm4gWigiZGl2Iix7c3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZmxleDoxLC4uLkg/e306e2JvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxvdmVyZmxvdzoiaGlkZGVuIixtaW5XaWR0aDowLG1pbkhlaWdodDowLC4uLkp9LGNsYXNzTmFtZTpLLGNoaWxkcmVuOltaKCJkaXYiLHtyZWY6azEsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLG1pbkhlaWdodDowLG1pbldpZHRoOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIn0sY2hpbGRyZW46WigiZGl2Iix7cmVmOk8xLHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUiLHdpZHRoOmswP2Ake2swLndpZHRofXB4YDoiMTAwJSIsaGVpZ2h0OmswP2Ake2swLmhlaWdodH1weGA6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLGJvcmRlclJhZGl1czpONT8uYm9yZGVyUmFkaXVzLGNvcm5lclNoYXBlOk41Py5jb3JuZXJTaGFwZX0sY2hpbGRyZW46W2w/WigidmlkZW8iLHtyZWY6SjEsbXV0ZWQ6ITAscGxheXNJbmxpbmU6ITAsYXV0b1BsYXk6ITAsc3R5bGU6Un0pOnI/WigiY2FudmFzIix7cmVmOm0sc3R5bGU6UTF9KTpaKCJpbWciLHtyZWY6YyxzcmM6aT92b2lkIDA6dDEsZHJhZ2dhYmxlOiExLG9uTG9hZDooVyk9PntsZXQgTT1XLmN1cnJlbnRUYXJnZXQ7aWYoTS5uYXR1cmFsV2lkdGg+MCYmTS5uYXR1cmFsSGVpZ2h0PjApdzEoe3dpZHRoOk0ubmF0dXJhbFdpZHRoLGhlaWdodDpNLm5hdHVyYWxIZWlnaHR9LCJtZWRpYSIpfSxzdHlsZTppP3tkaXNwbGF5OiJub25lIn06Un0pLGkmJlooImltZyIse3JlZjpHMSxkcmFnZ2FibGU6ITEsb25Mb2FkOihXKT0+e2xldCBNPVcuY3VycmVudFRhcmdldDtpZihNLm5hdHVyYWxXaWR0aD4wJiZNLm5hdHVyYWxIZWlnaHQ+MCl3MSh7d2lkdGg6TS5uYXR1cmFsV2lkdGgsaGVpZ2h0Ok0ubmF0dXJhbEhlaWdodH0sIm1lZGlhIil9LHN0eWxlOlJ9KSxaKCJkaXYiLHtyZWY6bixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLGN1cnNvcjpnOSx0b3VjaEFjdGlvbjoibm9uZSJ9LG9uTW91c2VEb3duOihXKT0+e1cucHJldmVudERlZmF1bHQoKTtsZXQgTT1SMSgpO2lmKCFNKXJldHVybjtsZXQgeT0oVy5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCx2PShXLmNsaWVudFktTS50b3ApL00uaGVpZ2h0O2lmKFcuYWx0S2V5KXtiMS5jdXJyZW50PSEwLFowLmN1cnJlbnQ9Vy5zaGlmdEtleTtsZXQgWTE9e3gxOnkseTE6dix4MjoxLXkseTI6MS12fTtGMC5jdXJyZW50PXtkeDoxLXkteSxkeToxLXYtdn0sYShZMSksYzEoe3R5cGU6ImJlZ2luIiwuLi5ZMX0pO3JldHVybn1mMSh5LHYpO2xldCBlPXkzKHYpO2lmKGUhPT12b2lkIDApUDEuY3VycmVudD0hMCxtMSh7dHlwZToiYmVnaW4iLHg6eSx5OnYsZWRnZTplfSk7ZWxzZSBQMS5jdXJyZW50PSExLE8wKCJiZWdpbiIsVyl9LG9uTW91c2VNb3ZlOihXKT0+e2xldCBNPVIxKCk7aWYoIU0pcmV0dXJuO2xldCB5PShXLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLHY9KFcuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQ7aWYoRC5jdXJyZW50PXt4OnkseTp2fSxXLmJ1dHRvbnM9PT0wKXtpZihXLmFsdEtleSlhKHt4MTp5LHkxOnYseDI6MS15LHkyOjEtdn0pO3JldHVybn1pZihiMS5jdXJyZW50KXtsZXQgZTtpZihaMC5jdXJyZW50KXtsZXQgWTE9RjAuY3VycmVudDtlPXt4MTp5LHkxOnYseDI6eStZMS5keCx5Mjp2K1kxLmR5fX1lbHNlIGU9e3gxOnkseTE6dix4MjoxLXkseTI6MS12fTthKGUpLGMxKHt0eXBlOiJtb3ZlIiwuLi5lfSk7cmV0dXJufWlmKHAxKHksdiksUDEuY3VycmVudCltMSh7dHlwZToibW92ZSIseDp5LHk6dixlZGdlOnEyfSk7ZWxzZSBPMCgibW92ZSIsVyl9LG9uTW91c2VVcDooVyk9PntpZihiMS5jdXJyZW50KXtsZXQgTT1SMSgpO2lmKE0pe2xldCB5PShXLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLHY9KFcuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQ7aWYoWjAuY3VycmVudCl7bGV0IGU9RjAuY3VycmVudDtjMSh7dHlwZToiZW5kIix4MTp5LHkxOnYseDI6eStlLmR4LHkyOnYrZS5keX0pfWVsc2UgYzEoe3R5cGU6ImVuZCIseDE6eSx5MTp2LHgyOjEteSx5MjoxLXZ9KX1pZihiMS5jdXJyZW50PSExLCFXLmFsdEtleSlhKG51bGwpO3JldHVybn1pZih4MSgpLFAxLmN1cnJlbnQpe2xldCBNPVIxKCk7aWYoTSl7bGV0IHk9KFcuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsdj0oVy5jbGllbnRZLU0udG9wKS9NLmhlaWdodDttMSh7dHlwZToiZW5kIix4OnkseTp2LGVkZ2U6cTJ9KX1QMS5jdXJyZW50PSExO3JldHVybn1PMCgiZW5kIixXKX0sb25Nb3VzZUxlYXZlOihXKT0+e2lmKGIxLmN1cnJlbnQpe2lmKGQpYzEoe3R5cGU6ImVuZCIsLi4uZH0pO2IxLmN1cnJlbnQ9ITEsYShudWxsKTtyZXR1cm59aWYoeDEoKSxQMS5jdXJyZW50KXtsZXQgTT1SMSgpO2lmKE0pe2xldCB5PShXLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLHY9KFcuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQ7bTEoe3R5cGU6ImVuZCIseDp5LHk6dixlZGdlOnEyfSl9UDEuY3VycmVudD0hMTtyZXR1cm59aWYoVy5idXR0b25zPjApTzAoImVuZCIsVyk7YShudWxsKX0sb25Ub3VjaFN0YXJ0OihXKT0+e1cucHJldmVudERlZmF1bHQoKTtsZXQgTT1SMSgpO2lmKCFNKXJldHVybjtpZihXLnRvdWNoZXMubGVuZ3RoPj0yKXt4MSgpO2xldCBDMT1XLnRvdWNoZXNbMF0sRDE9Vy50b3VjaGVzWzFdLFcwPXt4MTooQzEuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgseTE6KEMxLmNsaWVudFktTS50b3ApL00uaGVpZ2h0LHgyOihEMS5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCx5MjooRDEuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHR9O2lmKCF6MC5jdXJyZW50JiYhUDEuY3VycmVudCltMSh7dHlwZToiZW5kIix4OlcwLngxLHk6VzAueTF9KTt6MC5jdXJyZW50PSEwLGIxLmN1cnJlbnQ9ITAsUDEuY3VycmVudD0hMSxhKFcwKSxjMSh7dHlwZToiYmVnaW4iLC4uLlcwfSk7cmV0dXJufWxldCB5PVcudG91Y2hlc1swXTtpZigheSlyZXR1cm47bGV0IHY9KHkuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsZT0oeS5jbGllbnRZLU0udG9wKS9NLmhlaWdodDtmMSh2LGUpO2xldCBZMT15MyhlKTtpZihZMSE9PXZvaWQgMClQMS5jdXJyZW50PSEwLG0xKHt0eXBlOiJiZWdpbiIseDp2LHk6ZSxlZGdlOlkxfSk7ZWxzZSBQMS5jdXJyZW50PSExLG0xKHt0eXBlOiJiZWdpbiIseDp2LHk6ZX0pfSxvblRvdWNoTW92ZTooVyk9PntXLnByZXZlbnREZWZhdWx0KCk7bGV0IE09UjEoKTtpZighTSlyZXR1cm47aWYoejAuY3VycmVudCYmVy50b3VjaGVzLmxlbmd0aD49Mil7bGV0IFkxPVcudG91Y2hlc1swXSxDMT1XLnRvdWNoZXNbMV0sRDE9e3gxOihZMS5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCx5MTooWTEuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQseDI6KEMxLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLHkyOihDMS5jbGllbnRZLU0udG9wKS9NLmhlaWdodH07YShEMSksYzEoe3R5cGU6Im1vdmUiLC4uLkQxfSk7cmV0dXJufWxldCB5PVcudG91Y2hlc1swXTtpZigheSlyZXR1cm47bGV0IHY9KHkuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsZT0oeS5jbGllbnRZLU0udG9wKS9NLmhlaWdodDtpZihwMSh2LGUpLFAxLmN1cnJlbnQpbTEoe3R5cGU6Im1vdmUiLHg6dix5OmUsZWRnZTpxMn0pO2Vsc2UgbTEoe3R5cGU6Im1vdmUiLHg6dix5OmV9KX0sb25Ub3VjaEVuZDooVyk9PntXLnByZXZlbnREZWZhdWx0KCk7bGV0IE09UjEoKTtpZighTSlyZXR1cm47aWYoejAuY3VycmVudCl7aWYoVy50b3VjaGVzLmxlbmd0aDwyKXtsZXQgWTE9Vy5jaGFuZ2VkVG91Y2hlc1swXSxDMT1kO2lmKFkxJiZDMSljMSh7dHlwZToiZW5kIix4MTooWTEuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgseTE6KFkxLmNsaWVudFktTS50b3ApL00uaGVpZ2h0LHgyOkMxLngyLHkyOkMxLnkyfSk7ZWxzZSBpZihDMSljMSh7dHlwZToiZW5kIiwuLi5DMX0pO3owLmN1cnJlbnQ9ITEsYjEuY3VycmVudD0hMSxhKG51bGwpfXJldHVybn1sZXQgeT1XLmNoYW5nZWRUb3VjaGVzWzBdO2lmKCF5KXJldHVybjtsZXQgdj0oeS5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCxlPSh5LmNsaWVudFktTS50b3ApL00uaGVpZ2h0O2lmKHgxKCksUDEuY3VycmVudCltMSh7dHlwZToiZW5kIix4OnYseTplLGVkZ2U6cTJ9KSxQMS5jdXJyZW50PSExO2Vsc2UgbTEoe3R5cGU6ImVuZCIseDp2LHk6ZX0pfX0pLFooImRpdiIse3JlZjpGMSwiZGF0YS10ZXN0aWQiOiJ0b3VjaC1pbmRpY2F0b3IiLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGRpc3BsYXk6Im5vbmUiLHdpZHRoOjI0LGhlaWdodDoyNCxib3JkZXJSYWRpdXM6IjUwJSIsYmFja2dyb3VuZDoicmdiYSg1OSwxMzAsMjQ2LDAuNSkiLGJveFNoYWRvdzoiMCAwIDhweCByZ2JhKDU5LDEzMCwyNDYsMC4zKSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoLTUwJSwgLTUwJSkiLHBvaW50ZXJFdmVudHM6Im5vbmUifX0pLGQmJlooWjEse2NoaWxkcmVuOltaKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJmaW5nZXItZG90IixzdHlsZTpwOShkLngxLGQueTEpfSksWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6cDkoZC54MixkLnkyKX0pXX0pLCFWMSYmIWcmJlooImRpdiIse3N0eWxlOnsuLi5mOSwuLi5YfHx7fX0sY2hpbGRyZW46Wigic3BhbiIse3N0eWxlOntjb2xvcjoiIzg4OCIsZm9udFNpemU6MTR9LGNoaWxkcmVuOiJDb25uZWN0aW5nLi4uIn0pfSksZyYmWigiZGl2Iix7c3R5bGU6ZjksY2hpbGRyZW46Wigic3BhbiIse3N0eWxlOntjb2xvcjoiI2Y0NCIsZm9udFNpemU6MTQscGFkZGluZzoyMCx0ZXh0QWxpZ246ImNlbnRlciJ9LGNoaWxkcmVuOmd9KX0pLGwxJiZaKCJkaXYiLHtzdHlsZTpJJCxjaGlsZHJlbjpaKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZmJiZjI0Iixmb250U2l6ZToxMyxmb250RmFtaWx5OiJtb25vc3BhY2UifSxjaGlsZHJlbjoiU2xvdyBjb25uZWN0aW9uIn0pfSldfSl9KSwhSCYmWigiZGl2Iix7c3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLHBhZGRpbmc6IjRweCA4cHgiLGJvcmRlclRvcDoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxjaGlsZHJlbjpbWigiYnV0dG9uIix7b25DbGljazpMMCxzdHlsZTp7YmFja2dyb3VuZDoibm9uZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjIpIixjb2xvcjoiI2FhYSIsZm9udFNpemU6MTEsZm9udEZhbWlseToibW9ub3NwYWNlIixwYWRkaW5nOiIycHggMTBweCIsY3Vyc29yOiJwb2ludGVyIixib3JkZXJSYWRpdXM6NH0sY2hpbGRyZW46IkhvbWUifSksWigic3BhbiIse3N0eWxlOntjb2xvcjpBMT4wPyIjNGY0IjoiIzg4OCIsZm9udFNpemU6MTIsZm9udEZhbWlseToibW9ub3NwYWNlIixkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo2fSxjaGlsZHJlbjpbayYmWigic3BhbiIseyJkYXRhLXRlc3RpZCI6InF1YWxpdHktZG90IixzdHlsZTp7d2lkdGg6OCxoZWlnaHQ6OCxib3JkZXJSYWRpdXM6IjUwJSIsZGlzcGxheToiaW5saW5lLWJsb2NrIixiYWNrZ3JvdW5kOms9PT0iZ29vZCI/IiM0YWRlODAiOms9PT0iZGVncmFkZWQiPyIjZmFjYzE1IjoiI2VmNDQ0NCJ9fSksQTEsIiBmcHMiXX0pXX0pXX0pfXZhciBJJD17cG9zaXRpb246ImFic29sdXRlIix0b3A6OCxsZWZ0OiI1MCUiLHRyYW5zZm9ybToidHJhbnNsYXRlWCgtNTAlKSIsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwLjcpIixib3JkZXJSYWRpdXM6NixwYWRkaW5nOiI0cHggMTJweCIscG9pbnRlckV2ZW50czoibm9uZSJ9LGY5PXtwb3NpdGlvbjoiYWJzb2x1dGUiLGluc2V0OjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuOCkifSxtOT0yMDtmdW5jdGlvbiBwOSgkLFEpe3JldHVybntwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6YCR7JCoxMDB9JWAsdG9wOmAke1EqMTAwfSVgLHdpZHRoOm05LGhlaWdodDptOSxib3JkZXJSYWRpdXM6IjUwJSIsYmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjQ1KSIsYm9yZGVyOiIxLjI1cHggc29saWQgcmdiYSgwLDAsMCwwLjU1KSIsYm94U2hhZG93OiIwIDFweCAzcHggcmdiYSgwLDAsMCwwLjQ1KSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoLTUwJSwgLTUwJSkiLHBvaW50ZXJFdmVudHM6Im5vbmUifX1mdW5jdGlvbiBJMCgkKXtpZighJClyZXR1cm4iaXBob25lIjtsZXQgUT0kLnRvTG93ZXJDYXNlKCk7aWYoUS5pbmNsdWRlcygiaXBhZCIpKXJldHVybiJpcGFkIjtpZihRLmluY2x1ZGVzKCJ3YXRjaCIpKXJldHVybiJ3YXRjaCI7aWYoUS5pbmNsdWRlcygidmlzaW9uIikpcmV0dXJuInZpc2lvbiI7cmV0dXJuImlwaG9uZSJ9dmFyIFMxPXtpcGhvbmU6e3dpZHRoOjQyNyxoZWlnaHQ6ODgxLGJlemVsWDoxOCxiZXplbFk6MTgsaW5uZXJSYWRpdXM6NTV9LGlwYWQ6e3dpZHRoOjQzMCxoZWlnaHQ6NjA1LGJlemVsWDoxNixiZXplbFk6MTYsaW5uZXJSYWRpdXM6MTJ9LHdhdGNoOnt3aWR0aDoyNzQsaGVpZ2h0OjMyMixiZXplbFg6MTIsYmV6ZWxZOjEyLGlubmVyUmFkaXVzOjc5fSx2aXNpb246e3dpZHRoOjY0MCxoZWlnaHQ6NDAwLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6MzJ9fSxZSz1TMS5pcGhvbmUud2lkdGgscUs9UzEuaXBob25lLmhlaWdodCxHSz1TMS5pcGhvbmUuYmV6ZWxYLFZLPVMxLmlwaG9uZS5iZXplbFksQks9UzEuaXBob25lLmlubmVyUmFkaXVzLHU5PXsiaVBob25lIDE3IFBybyBNYXgiOnt3aWR0aDoxMzIwLGhlaWdodDoyODY4fSwiaVBob25lIDE3IFBybyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgMTciOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIEFpciI6e3dpZHRoOjEyNjAsaGVpZ2h0OjI3MzZ9LCJpUGhvbmUgMTYgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTYgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNiBQbHVzIjp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNiI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTZlIjp7d2lkdGg6MTE3MCxoZWlnaHQ6MjUzMn0sImlQaG9uZSAxNSBQcm8gTWF4Ijp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNSBQcm8iOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBob25lIDE1IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQYWQgUHJvIDEzLWluY2ggKE01KSI6e3dpZHRoOjIwNjQsaGVpZ2h0OjI3NTJ9LCJpUGFkIFBybyAxMS1pbmNoIChNNSkiOnt3aWR0aDoxNjY4LGhlaWdodDoyNDIwfSwiaVBhZCBQcm8gMTMtaW5jaCAoTTQpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE00KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIEFpciAxMy1pbmNoIChNMykiOnt3aWR0aDoyMDQ4LGhlaWdodDoyNzMyfSwiaVBhZCBBaXIgMTEtaW5jaCAoTTMpIjp7d2lkdGg6MTY0MCxoZWlnaHQ6MjM2MH0sImlQYWQgKEExNikiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCBtaW5pIChBMTcgUHJvKSI6e3dpZHRoOjE0ODgsaGVpZ2h0OjIyNjZ9LCJBcHBsZSBXYXRjaCBVbHRyYSAzICg0OW1tKSI6e3dpZHRoOjQyMixoZWlnaHQ6NTE0fSwiQXBwbGUgV2F0Y2ggVWx0cmEgMiAoNDltbSkiOnt3aWR0aDo0MTAsaGVpZ2h0OjUwMn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMSAoNDZtbSkiOnt3aWR0aDo0MTYsaGVpZ2h0OjQ5Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMSAoNDJtbSkiOnt3aWR0aDozNzQsaGVpZ2h0OjQ0Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMCAoNDZtbSkiOnt3aWR0aDo0MTYsaGVpZ2h0OjQ5Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMCAoNDJtbSkiOnt3aWR0aDozNzQsaGVpZ2h0OjQ0Nn0sIkFwcGxlIFdhdGNoIFNFIDMgKDQ0bW0pIjp7d2lkdGg6MzY4LGhlaWdodDo0NDh9LCJBcHBsZSBXYXRjaCBTRSAzICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgV2F0Y2ggU0UgKDQ0bW0pIjp7d2lkdGg6MzY4LGhlaWdodDo0NDh9LCJBcHBsZSBXYXRjaCBTRSAoNDBtbSkiOnt3aWR0aDozMjQsaGVpZ2h0OjM5NH0sIkFwcGxlIFZpc2lvbiBQcm8iOnt3aWR0aDoxOTIwLGhlaWdodDoxMDgwfX07ZnVuY3Rpb24gRTUoJCxRKXtsZXQgSj0kJiYkLndpZHRoPjAmJiQuaGVpZ2h0PjA/JDpRLFg9RzIoSik7aWYoWClyZXR1cm5gJHtYLndpZHRofSAvICR7WC5oZWlnaHR9YDtyZXR1cm5gJHtTMS5pcGhvbmUud2lkdGgtMipTMS5pcGhvbmUuYmV6ZWxYfSAvICR7UzEuaXBob25lLmhlaWdodC0yKlMxLmlwaG9uZS5iZXplbFl9YH1mdW5jdGlvbiBOMigkPSJpcGhvbmUiLFEpe2xldCBKPVE/dTlbUV06bnVsbDtpZihKKXJldHVybiBKO2xldCBYPVMxWyRdO3JldHVybnt3aWR0aDpYLndpZHRoLTIqWC5iZXplbFgsaGVpZ2h0OlguaGVpZ2h0LTIqWC5iZXplbFl9fWZ1bmN0aW9uIHoyKCQ9ImlwaG9uZSIsUSl7aWYodTAoUSkpc3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIDcyMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtjYXNlIndhdGNoIjpyZXR1cm4gMjAwO2RlZmF1bHQ6cmV0dXJuIDYyMH1zd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gNDAwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7Y2FzZSJ2aXNpb24iOnJldHVybiA1ODA7ZGVmYXVsdDpyZXR1cm4gMzIwfX1mdW5jdGlvbiB3NSgkPSJpcGhvbmUiLFEpe2xldCBKPVMxWyRdLFg9Si53aWR0aC0yKkouYmV6ZWxYLEs9Si5oZWlnaHQtMipKLmJlemVsWTtpZihYPEsmJnUwKFEpKXJldHVybmAke0ouaW5uZXJSYWRpdXMvSyoxMDB9JSAvICR7Si5pbm5lclJhZGl1cy9YKjEwMH0lYDtyZXR1cm5gJHtKLmlubmVyUmFkaXVzL1gqMTAwfSUgLyAke0ouaW5uZXJSYWRpdXMvSyoxMDB9JWB9ZnVuY3Rpb24gbDkoJCl7bGV0IFE9UzFbJC50eXBlXSxKPVEud2lkdGgtMipRLmJlemVsWCxYPVEuaGVpZ2h0LTIqUS5iZXplbFksSyxZO2lmKEo8WCYmdTAoJC5jb25maWc/P251bGwpKUs9US5pbm5lclJhZGl1cy9YLFk9US5pbm5lclJhZGl1cy9KO2Vsc2UgSz1RLmlubmVyUmFkaXVzL0osWT1RLmlubmVyUmFkaXVzL1g7bGV0IHE9SyokLmNvbnRhaW5lcldpZHRoLEc9WSokLmNvbnRhaW5lckhlaWdodCxCPU1hdGguc3FydChNYXRoLm1heChxKkcsMCkpO3JldHVybntyeDpxLHJ5Okcsckdlb206Qn19dmFyIHkkPTEzLFMkPTYyO2Z1bmN0aW9uIGgzKCQpe2xldHtjb250YWluZXJXaWR0aDpRLGNvbnRhaW5lckhlaWdodDpKfT0kLFg9KEgpPT5ILnRvRml4ZWQoMyksSz0oSCxPKT0+e2xldCBrPU8sST1PLHc9UyQvMiooTWF0aC5QSS8xODApLFA9MjI1Kk1hdGguUEkvMTgwLHg9UCt3LHQ9UC13LGg9aytIKk1hdGguY29zKHgpLGw9SStIKk1hdGguc2luKHgpLHI9aytIKk1hdGguY29zKHQpLG89SStIKk1hdGguc2luKHQpLGk9YE0gJHtYKGgpfSAke1gobCl9IEEgJHtYKEgpfSAke1goSCl9IDAgMCAxICR7WChyKX0gJHtYKG8pfWAsJDE9YE0gJHtYKHIpfSAke1gobyl9IEEgJHtYKEgpfSAke1goSCl9IDAgMCAwICR7WChoKX0gJHtYKGwpfWA7cmV0dXJue2Q6aSxkRmlsbDokMX19O2lmKCEoUT4wKXx8IShKPjApKXtsZXQgSD15JCxPPU1hdGguY2VpbChIKzE0KSx7ZDprLGRGaWxsOkl9PUsoSCxPKTtyZXR1cm57ZDprLGRGaWxsOkksdmlld0JveFNpemU6T319bGV0e3JHZW9tOll9PWw5KCQpLHE9TWF0aC5tYXgoMi4yLE1hdGgubWluKDUuMiwwLjAxMSpNYXRoLm1pbihRLEopKSksRz1ZKjAuMzQrcSxCPU1hdGgubWluKFEsSiksTj1NYXRoLm1pbigyMixNYXRoLm1heCgxMixCKjAuMDUyKSk7Rz1NYXRoLm1pbigyNCxNYXRoLm1heCgxMixHLE4pKTtsZXQgVT1NYXRoLm1heCgyNixNYXRoLmNlaWwoRysxMykpLHtkOkYsZEZpbGw6TH09SyhHLFUpO3JldHVybntkOkYsZEZpbGw6TCx2aWV3Qm94U2l6ZTpVfX1mdW5jdGlvbiBJNSh7dHlwZTokPSJpcGhvbmUiLHN0cmVhbWluZzpRPSExfSl7c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIFooaiQse3N0cmVhbWluZzpRfSk7Y2FzZSJ3YXRjaCI6cmV0dXJuIFoodiQse3N0cmVhbWluZzpRfSk7Y2FzZSJ2aXNpb24iOnJldHVybiBaKFIkLHtzdHJlYW1pbmc6UX0pO2RlZmF1bHQ6cmV0dXJuIFooeCQse3N0cmVhbWluZzpRfSl9fWZ1bmN0aW9uIHgkKHtzdHJlYW1pbmc6JD0hMX0pe3JldHVybiBaKCJzdmciLHt2aWV3Qm94OiIwIDAgNDI3IDg4MSIsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltaKCJkZWZzIix7Y2hpbGRyZW46W1ooImZpbHRlciIse2lkOiJjaHJvbWUtZmlsdGVyMCIseDoiLTAuMTY2OTkyIix5OiIwLjE2NjUwNCIsd2lkdGg6IjQyNyIsaGVpZ2h0OiI4ODAuNjY3IixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltaKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxaKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJlZmZlY3QxX2ZvcmVncm91bmRCbHVyIn0pXX0pLFooImZpbHRlciIse2lkOiJjaHJvbWUtZmlsdGVyMSIseDoiNi4zMzIzNiIseToiNi4zMzM4MiIsd2lkdGg6IjQxNCIsaGVpZ2h0OiI4NjgiLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1ooImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFooImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxaKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMzMzMiLHJlc3VsdDoiZWZmZWN0MV9mb3JlZ3JvdW5kQmx1ciJ9KV19KV19KSxaKCJyZWN0Iix7eDoiMy44MzI2OCIseToiMy44MzM2NiIsd2lkdGg6IjQxOSIsaGVpZ2h0OiI4NzMiLHJ4OiI2Ni4xNjY3IixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiI0LjMzMzMzIn0pLFooInJlY3QiLHt4OiIwLjgzMzMzMyIseToiMC44MzMzMzMiLHdpZHRoOiI0MjUiLGhlaWdodDoiODc5IixyeDoiNjkuMTY2NyIsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjY2NyJ9KSxaKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjY2hyb21lLWZpbHRlcjApIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiMS42NjYwMiIseToiMiIsd2lkdGg6IjQyMy4zMzMiLGhlaWdodDoiODc3IixyeDoiNjguNjY2NyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjY2NyJ9KX0pLFooImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCNjaHJvbWUtZmlsdGVyMSkiLGNoaWxkcmVuOlooInJlY3QiLHt4OiI3LjMzMjY4Iix5OiI3LjMzMzY2Iix3aWR0aDoiNDEyIixoZWlnaHQ6Ijg2NiIscng6IjYyLjY2NjciLHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2NjY3In0pfSksWigicmVjdCIse3g6IjE1MS42NjYiLHk6IjMxLjY2NyIsd2lkdGg6IjEyMy4zMzMiLGhlaWdodDoiMzYiLHJ4OiIxOCIsZmlsbDoiYmxhY2siLHN0eWxlOntvcGFjaXR5OiQ/MDoxLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX1mdW5jdGlvbiBqJCh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgUT1TMS5pcGFkLndpZHRoLEo9UzEuaXBhZC5oZWlnaHQsWD0zMCxLPTI2O3JldHVybiBaKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtRfSAke0p9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W1ooImRlZnMiLHtjaGlsZHJlbjpbWigiZmlsdGVyIix7aWQ6ImlwYWQtZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOlEsaGVpZ2h0OkosZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbWigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksWigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KSxaKCJmaWx0ZXIiLHtpZDoiaXBhZC1nbG93MSIseDoiNSIseToiNSIsd2lkdGg6US0xMCxoZWlnaHQ6Si0xMCxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltaKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxaKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzMzMzIixyZXN1bHQ6ImJsdXIifSldfSldfSksWigicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpRLTcsaGVpZ2h0OkotNyxyeDoyNixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiI0In0pLFooInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOlEtMS42NjYsaGVpZ2h0OkotMS42NjYscng6MzAsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksWigiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI2lwYWQtZ2xvdzApIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOlEtMyxoZWlnaHQ6Si0zLHJ4OjI5LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSksWigiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI2lwYWQtZ2xvdzEpIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiNiIseToiNiIsd2lkdGg6US0xMixoZWlnaHQ6Si0xMixyeDoyNCxzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NiJ9KX0pLFooImNpcmNsZSIse2N4OlEvMixjeTpTMS5pcGFkLmJlemVsWS8yKzEscjoiMyIsZmlsbDoiIzFhMWExYSIsc3R5bGU6e29wYWNpdHk6JD8wOjAuOCx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSksWigicmVjdCIse3g6KFEtMTIwKS8yLHk6Si1TMS5pcGFkLmJlemVsWS8yLTIuNSx3aWR0aDoiMTIwIixoZWlnaHQ6IjUiLHJ4OiIyLjUiLGZpbGw6IndoaXRlIixzdHlsZTp7b3BhY2l0eTokPzA6MC4zNSxtaXhCbGVuZE1vZGU6ImRpZmZlcmVuY2UiLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX1mdW5jdGlvbiB2JCh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgUT1TMS53YXRjaC53aWR0aCxKPVMxLndhdGNoLmhlaWdodCxYPTg4LEs9ODIsWT04LHE9MzYsRz1KLzItMTgtMTYsQj0yMixOPUovMi0xMSsxNjtyZXR1cm4gWigic3ZnIix7dmlld0JveDpgMCAwICR7UX0gJHtKfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG92ZXJmbG93OiJ2aXNpYmxlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbWigiZGVmcyIse2NoaWxkcmVuOlooImZpbHRlciIse2lkOiJ3YXRjaC1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6USsxMixoZWlnaHQ6SixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltaKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxaKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pfSksWigicmVjdCIse3g6US0yLHk6Ryx3aWR0aDo4LGhlaWdodDozNixyeDoiMyIsZmlsbDoiIzJhMmEyYyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMSJ9KSxaKCJyZWN0Iix7eDpRLTEseTpOLHdpZHRoOjYsaGVpZ2h0OjIyLHJ4OiIyLjUiLGZpbGw6IiMyYTJhMmMiLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjAuOCJ9KSxaKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOlEtNyxoZWlnaHQ6Si03LHJ4OjgyLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjMuNSJ9KSxaKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpRLTEuNjY2LGhlaWdodDpKLTEuNjY2LHJ4Ojg4LHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLFooImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCN3YXRjaC1nbG93MCkiLGNoaWxkcmVuOlooInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6US0zLGhlaWdodDpKLTMscng6ODcsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KV19KX1mdW5jdGlvbiBSJCh7c3RyZWFtaW5nOiQ9ITF9KXtsZXQgUT1TMS52aXNpb24ud2lkdGgsSj1TMS52aXNpb24uaGVpZ2h0LFg9NDAsSz0zNDtyZXR1cm4gWigic3ZnIix7dmlld0JveDpgMCAwICR7UX0gJHtKfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltaKCJkZWZzIix7Y2hpbGRyZW46W1ooImZpbHRlciIse2lkOiJ2aXNpb24tZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOlEsaGVpZ2h0OkosZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbWigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksWigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KSxaKCJmaWx0ZXIiLHtpZDoidmlzaW9uLWdsb3cxIix4OiI1Iix5OiI1Iix3aWR0aDpRLTEwLGhlaWdodDpKLTEwLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1ooImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFooImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxaKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMiLHJlc3VsdDoiYmx1ciJ9KV19KSxaKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tZ2xhc3MiLHgxOiIwIix5MToiMCIseDI6IjAiLHkyOiIxIixjaGlsZHJlbjpbWigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzU1NTU1OCIsc3RvcE9wYWNpdHk6IjAuMyJ9KSxaKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMzYTNhM2QiLHN0b3BPcGFjaXR5OiIwLjEifSldfSldfSksWigicmVjdCIse3g6IjAiLHk6IjAiLHdpZHRoOlEsaGVpZ2h0Okoscng6NDAsZmlsbDoidXJsKCN2aXNpb24tZ2xhc3MpIn0pLFooInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6US03LGhlaWdodDpKLTcscng6MzQsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMyJ9KSxaKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpRLTEuNjY2LGhlaWdodDpKLTEuNjY2LHJ4OjQwLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLFooImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCN2aXNpb24tZ2xvdzApIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOlEtMyxoZWlnaHQ6Si0zLHJ4OjM5LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSksWigiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI3Zpc2lvbi1nbG93MSkiLGNoaWxkcmVuOlooInJlY3QiLHt4OiI2Iix5OiI2Iix3aWR0aDpRLTEyLGhlaWdodDpKLTEyLHJ4OjMyLHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2In0pfSksWigiZWxsaXBzZSIse2N4OlEvMixjeTpKLzIscng6US8yLTMwLHJ5OkovMi0yNCxzdHJva2U6IiM0YTRhNGQiLHN0cm9rZVdpZHRoOiIwLjUiLG9wYWNpdHk6IjAuMyIsc3R5bGU6e29wYWNpdHk6JD8wOjAuMyx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9dmFyIGczPVUwKG51bGwpO2Z1bmN0aW9uIGI1KCQpe2xldCBRPUgwKGczKTtpZighUSl0aHJvdyBFcnJvcihgPFNpbXVsYXRvclRvb2xiYXIuJHskfT4gbXVzdCBiZSByZW5kZXJlZCBpbnNpZGUgPFNpbXVsYXRvclRvb2xiYXI+YCk7cmV0dXJuIFF9dmFyIGckPXtkaXNwbGF5OiJmbGV4IixmbGV4V3JhcDoid3JhcCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIsZ2FwOiI0cHggMTJweCIscGFkZGluZzoiOHB4IDEycHgiLGJvcmRlclJhZGl1czoyNCxiYWNrZ3JvdW5kOiJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcsICMxODE4MTgpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSkiLGJveFNoYWRvdzoiMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4yKSIsbWluV2lkdGg6MjQwLHdpZHRoOiIxMDAlIn07ZnVuY3Rpb24gZiQoe2V4ZWM6JCxvblJvdGF0ZTpRLG9yaWVudGF0aW9uOkosZGV2aWNlVWRpZDpYLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlksc3RyZWFtaW5nOnE9ITEsZGlzYWJsZWQ6Rz0hMSxjaGlsZHJlbjpCLHN0eWxlOk4sLi4uen0pe2xldCBWPUkwKEspLFU9e2V4ZWM6JCxvblJvdGF0ZTpRLG9yaWVudGF0aW9uOkosZGV2aWNlVWRpZDpYLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlksZGV2aWNlVHlwZTpWLHN0cmVhbWluZzpxLGRpc2FibGVkOkd8fCFYfHwhcX07cmV0dXJuIFooZzMuUHJvdmlkZXIse3ZhbHVlOlUsY2hpbGRyZW46WigiZGl2Iix7ImRhdGEtc2ltdWxhdG9yLXRvb2xiYXIiOiEwLHN0eWxlOnsuLi5nJCwuLi5OfSwuLi56LGNoaWxkcmVuOkJ9KX0pfXZhciBtJD17ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixhbGlnbkl0ZW1zOiJmbGV4LXN0YXJ0Iix0ZXh0QWxpZ246ImxlZnQiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLGNvbG9yOiIjZmZmIixwYWRkaW5nOiIycHggNHB4IixtYXJnaW46Ii0ycHggLTRweCIsYm9yZGVyUmFkaXVzOjYsY3Vyc29yOiJwb2ludGVyIixtaW5XaWR0aDowLG1heFdpZHRoOiIxMDAlIixsaW5lSGVpZ2h0OjEuMixmb250RmFtaWx5OiJpbmhlcml0In0scCQ9XzAoZnVuY3Rpb24oe25hbWU6USxzdWJ0aXRsZTpKLGhpZGVDaGV2cm9uOlgsaGlkZVN1YnRpdGxlOkssc3R5bGU6WSxvbk1vdXNlRW50ZXI6cSxvbk1vdXNlTGVhdmU6RywuLi5CfSxOKXtsZXQgej1iNSgiVGl0bGUiKSxbVixDXT1BKCExKSxVPVE/P3ouZGV2aWNlTmFtZT8/Ik5vIHNpbXVsYXRvciIsRj1KPz8oei5kZXZpY2VSdW50aW1lP3ouZGV2aWNlUnVudGltZS5yZXBsYWNlKC9cLi8sIiAiKToi4oCUIik7cmV0dXJuIFooImJ1dHRvbiIse3JlZjpOLHR5cGU6ImJ1dHRvbiIsImRhdGEtc2ltdWxhdG9yLXRvb2xiYXItdGl0bGUiOiEwLG9uTW91c2VFbnRlcjooTCk9PntDKCEwKSxxPy4oTCl9LG9uTW91c2VMZWF2ZTooTCk9PntDKCExKSxHPy4oTCl9LHN0eWxlOnsuLi5tJCxiYWNrZ3JvdW5kOlY/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IiwuLi5ZfSwuLi5CLGNoaWxkcmVuOltaKCJzcGFuIix7c3R5bGU6e2Rpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOiIjZmZmIixtYXhXaWR0aDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sY2hpbGRyZW46W1UsIVgmJlooInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsc3R5bGU6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGZsZXhTaHJpbms6MH0sY2hpbGRyZW46WigicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSldfSksIUsmJlooInNwYW4iLHtzdHlsZTp7Zm9udFNpemU6MTAsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOkZ9KV19KX0pLHUkPXtkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZsZXhTaHJpbms6MH07ZnVuY3Rpb24gbCQoe3N0eWxlOiQsLi4uUX0pe3JldHVybiBaKCJkaXYiLHtzdHlsZTp7Li4udSQsLi4uJH0sLi4uUX0pfXZhciBkJD17YmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIscGFkZGluZzo2LGJvcmRlclJhZGl1czoxMixjdXJzb3I6InBvaW50ZXIiLGRpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLHRyYW5zaXRpb246ImJhY2tncm91bmQtY29sb3IgMC4xNXMsIGNvbG9yIDAuMTVzIixwb3NpdGlvbjoicmVsYXRpdmUiLG92ZXJmbG93OiJ2aXNpYmxlIn0seTU9XzAoZnVuY3Rpb24oe2ZvcmNlRGlzYWJsZWQ6USx0b29sdGlwOkosc3R5bGU6WCxkaXNhYmxlZDpLLHRpdGxlOlksb25Nb3VzZUVudGVyOnEsb25Nb3VzZUxlYXZlOkcsb25Qb2ludGVyRG93bjpCLG9uRm9jdXM6TixvbkJsdXI6eixvbkNsaWNrOlYsY2hpbGRyZW46QywiYXJpYS1sYWJlbCI6VSwuLi5GfSxMKXtsZXQgSD1IMChnMyksTz1LfHxRfHxIPy5kaXNhYmxlZCxbayxJXT1BKCExKSxbdyxQXT1BKCExKSx4PVQoITEpLHQ9WTIoKSxoPUo/P1k/Pyh0eXBlb2YgVT09PSJzdHJpbmciP1U6bnVsbCksbD0hIWgmJiFPJiYoa3x8dyk7cmV0dXJuIFooImJ1dHRvbiIse3JlZjpMLHR5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6TywiYXJpYS1sYWJlbCI6VSwiYXJpYS1kZXNjcmliZWRieSI6aD90OnZvaWQgMCxvblBvaW50ZXJEb3duOihyKT0+e3guY3VycmVudD0hMCxCPy4ocil9LG9uTW91c2VFbnRlcjoocik9PntJKCEwKSxxPy4ocil9LG9uTW91c2VMZWF2ZToocik9PntJKCExKSxHPy4ocil9LG9uRm9jdXM6KHIpPT57UCgheC5jdXJyZW50KSxOPy4ocil9LG9uQmx1cjoocik9Pnt4LmN1cnJlbnQ9ITEsUCghMSksej8uKHIpfSxvbkNsaWNrOihyKT0+e0koITEpLFAoITEpLHIuY3VycmVudFRhcmdldC5ibHVyKCksVj8uKHIpfSxzdHlsZTp7Li4uZCQsY29sb3I6Tz8icmdiYSgyNTUsMjU1LDI1NSwwLjI1KSI6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsYmFja2dyb3VuZDprJiYhTz8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLGN1cnNvcjpPPyJub3QtYWxsb3dlZCI6InBvaW50ZXIiLC4uLlh9LC4uLkYsY2hpbGRyZW46W0MsaCYmWigic3BhbiIse2lkOnQscm9sZToidG9vbHRpcCIsImFyaWEtaGlkZGVuIjohbCxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiI1MCUiLGJvdHRvbToiY2FsYygxMDAlICsgOHB4KSIsdHJhbnNmb3JtOmB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoJHtsPzA6Mn1weClgLG9wYWNpdHk6bD8xOjAscG9pbnRlckV2ZW50czoibm9uZSIsd2hpdGVTcGFjZToibm93cmFwIixwYWRkaW5nOiI0cHggN3B4Iixib3JkZXJSYWRpdXM6NixiYWNrZ3JvdW5kOiJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcsICMxODE4MTgpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjkyKSIsZm9udFNpemU6MTEsZm9udFdlaWdodDo1MDAsbGluZUhlaWdodDoxLGJveFNoYWRvdzoiMCA0cHggMTRweCByZ2JhKDAsMCwwLDAuMzIpIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuMTJzIGVhc2UsIHRyYW5zZm9ybSAwLjEycyBlYXNlIix6SW5kZXg6MTAwfSxjaGlsZHJlbjpofSldfSl9KTtmdW5jdGlvbiBjJCgkLFEpe2lmKCQ9PT0id2F0Y2giKXJldHVybiBvJCgpO2lmKFEpcmV0dXJuYHhjcnVuIHNpbWN0bCBsYXVuY2ggJHtRfSBjb20uYXBwbGUuc3ByaW5nYm9hcmRgO3JldHVybiJzZXJ2ZS1zaW0gYnV0dG9uIGhvbWUifWZ1bmN0aW9uIG8kKCl7cmV0dXJuWyd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gc2V0IGZyb250bW9zdCB0byB0cnVlJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHBlcmZvcm0gYWN0aW9uICJBWFJhaXNlIiBvZiAoZmlyc3Qgd2luZG93IHdob3NlIG5hbWUgY29udGFpbnMgIndhdGNoT1MiKScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBjbGljayBtZW51IGl0ZW0gIkhvbWUiIG9mIG1lbnUgIkRldmljZSIgb2YgbWVudSBiYXIgaXRlbSAiRGV2aWNlIiBvZiBtZW51IGJhciAxJ10ubWFwKChRKT0+YC1lICcke1F9J2ApLnJlZHVjZSgoUSxKKT0+YCR7UX0gJHtKfWAsIm9zYXNjcmlwdCIpfXZhciBpJD1aKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpaKCJwYXRoIix7ZDoiTTMgMTAuNSAxMiAzbDkgNy41VjIwYTEgMSAwIDAgMS0xIDFoLTV2LTdoLTZ2N0g0YTEgMSAwIDAgMS0xLTF6In0pfSksbiQ9Wigic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgNDQgNDQiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46WigicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixjbGlwUnVsZToiZXZlbm9kZCIsZmlsbDoiY3VycmVudENvbG9yIixkOiJNNDMuNjg3NSAxMi40Njg4VjguMjczNDRDNDMuNjg3NSA1LjcyNjU2IDQyLjk1MzEgMy43MTA5NCA0MS40ODQ0IDIuMjI2NTZDNDAuMDE1NiAwLjc0MjE4OCAzOCAwIDM1LjQzNzUgMEgzMS4xNDg0QzMwLjYwMTYgMCAzMC4xMzI4IDAuMTk1MzEyIDI5Ljc0MjIgMC41ODU5MzhDMjkuMzUxNiAwLjk3NjU2MiAyOS4xNTYyIDEuNDQ1MzEgMjkuMTU2MiAxLjk5MjE5QzI5LjE1NjIgMi41MjM0NCAyOS4zNTE2IDIuOTg0MzggMjkuNzQyMiAzLjM3NUMzMC4xMzI4IDMuNzY1NjIgMzAuNjAxNiAzLjk2MDk0IDMxLjE0ODQgMy45NjA5NEgzNS40Mzc1QzM2Ljc4MTIgMy45NjA5NCAzNy44MzU5IDQuMzQzNzUgMzguNjAxNiA1LjEwOTM4QzM5LjM1MTYgNS44NzUgMzkuNzI2NiA2LjkyOTY5IDM5LjcyNjYgOC4yNzM0NFYxMi40Njg4QzM5LjcyNjYgMTMgMzkuOTIxOSAxMy40NjA5IDQwLjMxMjUgMTMuODUxNkM0MC43MDMxIDE0LjI0MjIgNDEuMTcxOSAxNC40Mzc1IDQxLjcxODggMTQuNDM3NUM0Mi4yNSAxNC40Mzc1IDQyLjcxMDkgMTQuMjQyMiA0My4xMDE2IDEzLjg1MTZDNDMuNDkyMiAxMy40NjA5IDQzLjY4NzUgMTMgNDMuNjg3NSAxMi40Njg4Wk0wIDEyLjQ2ODhDMCAxMyAwLjE5NTMxMiAxMy40NjA5IDAuNTg1OTM4IDEzLjg1MTZDMC45NzY1NjIgMTQuMjQyMiAxLjQzNzUgMTQuNDM3NSAxLjk2ODc1IDE0LjQzNzVDMi41IDE0LjQzNzUgMi45NjA5NCAxNC4yNDIyIDMuMzUxNTYgMTMuODUxNkMzLjc0MjE5IDEzLjQ2MDkgMy45Mzc1IDEzIDMuOTM3NSAxMi40Njg4VjguMjczNDRDMy45Mzc1IDYuOTI5NjkgNC4zMjAzMSA1Ljg3NSA1LjA4NTk0IDUuMTA5MzhDNS44MzU5NCA0LjM0Mzc1IDYuODkwNjIgMy45NjA5NCA4LjI1IDMuOTYwOTRIMTIuNTM5MUMxMy4wODU5IDMuOTYwOTQgMTMuNTU0NyAzLjc2NTYyIDEzLjk0NTMgMy4zNzVDMTQuMzIwMyAyLjk4NDM4IDE0LjUwNzggMi41MjM0NCAxNC41MDc4IDEuOTkyMTlDMTQuNTA3OCAxLjQ0NTMxIDE0LjMyMDMgMC45NzY1NjIgMTMuOTQ1MyAwLjU4NTkzOEMxMy41NTQ3IDAuMTk1MzEyIDEzLjA4NTkgMCAxMi41MzkxIDBIOC4yNUM1LjY4NzUgMCAzLjY3MTg4IDAuNzQyMTg4IDIuMjAzMTIgMi4yMjY1NkMwLjczNDM3NSAzLjcxMDk0IDAgNS43MjY1NiAwIDguMjczNDRWMTIuNDY4OFpNNDMuNjg3NSAzMS4yNDIyQzQzLjY4NzUgMzAuNzEwOSA0My40OTIyIDMwLjI1IDQzLjEwMTYgMjkuODU5NEM0Mi43MTA5IDI5LjQ2ODggNDIuMjUgMjkuMjczNCA0MS43MTg4IDI5LjI3MzRDNDEuMTcxOSAyOS4yNzM0IDQwLjcwMzEgMjkuNDY4OCA0MC4zMTI1IDI5Ljg1OTRDMzkuOTIxOSAzMC4yNSAzOS43MjY2IDMwLjcxMDkgMzkuNzI2NiAzMS4yNDIyVjM1LjQzNzVDMzkuNzI2NiAzNi43ODEyIDM5LjM1MTYgMzcuODM1OSAzOC42MDE2IDM4LjYwMTZDMzcuODM1OSAzOS4zNjcyIDM2Ljc4MTIgMzkuNzUgMzUuNDM3NSAzOS43NUgzMS4xNDg0QzMwLjYwMTYgMzkuNzUgMzAuMTMyOCAzOS45NDUzIDI5Ljc0MjIgNDAuMzM1OUMyOS4zNTE2IDQwLjcyNjYgMjkuMTU2MiA0MS4xODc1IDI5LjE1NjIgNDEuNzE4OEMyOS4xNTYyIDQyLjI2NTYgMjkuMzUxNiA0Mi43MjY2IDI5Ljc0MjIgNDMuMTAxNkMzMC4xMzI4IDQzLjQ5MjIgMzAuNjAxNiA0My42ODc1IDMxLjE0ODQgNDMuNjg3NUgzNS40Mzc1QzM4IDQzLjY4NzUgNDAuMDE1NiA0Mi45NDUzIDQxLjQ4NDQgNDEuNDYwOUM0Mi45NTMxIDM5Ljk5MjIgNDMuNjg3NSAzNy45ODQ0IDQzLjY4NzUgMzUuNDM3NVYzMS4yNDIyWk0wIDMxLjI0MjJWMzUuNDM3NUMwIDM3Ljk4NDQgMC43MzQzNzUgMzkuOTkyMiAyLjIwMzEyIDQxLjQ2MDlDMy42NzE4OCA0Mi45NDUzIDUuNjg3NSA0My42ODc1IDguMjUgNDMuNjg3NUgxMi41MzkxQzEzLjA4NTkgNDMuNjg3NSAxMy41NTQ3IDQzLjQ5MjIgMTMuOTQ1MyA0My4xMDE2QzE0LjMyMDMgNDIuNzI2NiAxNC41MDc4IDQyLjI2NTYgMTQuNTA3OCA0MS43MTg4QzE0LjUwNzggNDEuMTg3NSAxNC4zMjAzIDQwLjcyNjYgMTMuOTQ1MyA0MC4zMzU5QzEzLjU1NDcgMzkuOTQ1MyAxMy4wODU5IDM5Ljc1IDEyLjUzOTEgMzkuNzVIOC4yNUM2Ljg5MDYyIDM5Ljc1IDUuODM1OTQgMzkuMzY3MiA1LjA4NTk0IDM4LjYwMTZDNC4zMjAzMSAzNy44MzU5IDMuOTM3NSAzNi43ODEyIDMuOTM3NSAzNS40Mzc1VjMxLjI0MjJDMy45Mzc1IDMwLjcxMDkgMy43NDIxOSAzMC4yNSAzLjM1MTU2IDI5Ljg1OTRDMi45NjA5NCAyOS40Njg4IDIuNSAyOS4yNzM0IDEuOTY4NzUgMjkuMjczNEMxLjQzNzUgMjkuMjczNCAwLjk3NjU2MiAyOS40Njg4IDAuNTg1OTM4IDI5Ljg1OTRDMC4xOTUzMTIgMzAuMjUgMCAzMC43MTA5IDAgMzEuMjQyMlpNMzEuNTkzOCAzMS44MDQ3QzMyLjc4MTIgMzEuODA0NyAzMy42NzE5IDMxLjUxNTYgMzQuMjY1NiAzMC45Mzc1QzM0Ljg1OTQgMzAuMzQzOCAzNS4xNTYyIDI5LjQ2ODggMzUuMTU2MiAyOC4zMTI1VjE2LjcxMDlDMzUuMTU2MiAxNS41MzkxIDM0Ljg1OTQgMTQuNjY0MSAzNC4yNjU2IDE0LjA4NTlDMzMuNjcxOSAxMy40OTIyIDMyLjc4MTIgMTMuMTk1MyAzMS41OTM4IDEzLjE5NTNIMjguODk4NEMyOC40NjA5IDEzLjE5NTMgMjguMTQ4NCAxMy4xNDA2IDI3Ljk2MDkgMTMuMDMxMkMyNy43NTc4IDEyLjkyMTkgMjcuNTIzNCAxMi43MjY2IDI3LjI1NzggMTIuNDQ1M0wyNi4zNjcyIDExLjUwNzhDMjYuMDg1OSAxMS4xOTUzIDI1Ljc4MTIgMTAuOTY4OCAyNS40NTMxIDEwLjgyODFDMjUuMTA5NCAxMC42NzE5IDI0LjY1NjIgMTAuNTkzOCAyNC4wOTM4IDEwLjU5MzhIMTkuNjE3MkMxOS4wNTQ3IDEwLjU5MzggMTguNjA5NCAxMC42NzE5IDE4LjI4MTIgMTAuODI4MUMxNy45Mzc1IDEwLjk2ODggMTcuNjI1IDExLjE5NTMgMTcuMzQzOCAxMS41MDc4TDE2LjQ3NjYgMTIuNDQ1M0MxNi4yMTA5IDEyLjc0MjIgMTUuOTc2NiAxMi45NDUzIDE1Ljc3MzQgMTMuMDU0N0MxNS41NTQ3IDEzLjE0ODQgMTUuMjM0NCAxMy4xOTUzIDE0LjgxMjUgMTMuMTk1M0gxMi4wNDY5QzEwLjg5MDYgMTMuMTk1MyAxMC4wMTU2IDEzLjQ5MjIgOS40MjE4OCAxNC4wODU5QzguODEyNSAxNC42NjQxIDguNTA3ODEgMTUuNTM5MSA4LjUwNzgxIDE2LjcxMDlWMjguMzEyNUM4LjUwNzgxIDI5LjQ2ODggOC44MTI1IDMwLjM0MzggOS40MjE4OCAzMC45Mzc1QzEwLjAxNTYgMzEuNTE1NiAxMC44OTA2IDMxLjgwNDcgMTIuMDQ2OSAzMS44MDQ3SDMxLjU5MzhaTTIxLjc5NjkgMjguOTQ1M0MyMC41OTM4IDI4Ljk0NTMgMTkuNSAyOC42NjQxIDE4LjUxNTYgMjguMTAxNkMxNy41MTU2IDI3LjUyMzQgMTYuNzI2NiAyNi43NDIyIDE2LjE0ODQgMjUuNzU3OEMxNS41NTQ3IDI0Ljc1NzggMTUuMjU3OCAyMy42MzI4IDE1LjI1NzggMjIuMzgyOEMxNS4yNTc4IDIxLjE3OTcgMTUuNTU0NyAyMC4wODU5IDE2LjE0ODQgMTkuMTAxNkMxNi43MjY2IDE4LjEwMTYgMTcuNTE1NiAxNy4zMTI1IDE4LjUxNTYgMTYuNzM0NEMxOS41IDE2LjE0MDYgMjAuNTkzOCAxNS44NDM4IDIxLjc5NjkgMTUuODQzOEMyMy4wMTU2IDE1Ljg0MzggMjQuMTI1IDE2LjE0MDYgMjUuMTI1IDE2LjczNDRDMjYuMTA5NCAxNy4zMTI1IDI2Ljg5ODQgMTguMTAxNiAyNy40OTIyIDE5LjEwMTZDMjguMDcwMyAyMC4wODU5IDI4LjM1OTQgMjEuMTc5NyAyOC4zNTk0IDIyLjM4MjhDMjguMzU5NCAyMy42MTcyIDI4LjA3MDMgMjQuNzI2NiAyNy40OTIyIDI1LjcxMDlDMjYuODk4NCAyNi42OTUzIDI2LjEwOTQgMjcuNDg0NCAyNS4xMjUgMjguMDc4MUMyNC4xMjUgMjguNjU2MiAyMy4wMTU2IDI4Ljk0NTMgMjEuNzk2OSAyOC45NDUzWk0yMS44MjAzIDI2LjkwNjJDMjIuNjQ4NCAyNi45MDYyIDIzLjQwNjIgMjYuNzEwOSAyNC4wOTM4IDI2LjMyMDNDMjQuNzgxMiAyNS45MTQxIDI1LjMyODEgMjUuMzY3MiAyNS43MzQ0IDI0LjY3OTdDMjYuMTI1IDIzLjk5MjIgMjYuMzIwMyAyMy4yMjY2IDI2LjMyMDMgMjIuMzgyOEMyNi4zMjAzIDIxLjU3MDMgMjYuMTI1IDIwLjgyMDMgMjUuNzM0NCAyMC4xMzI4QzI1LjMyODEgMTkuNDQ1MyAyNC43ODEyIDE4LjkwNjIgMjQuMDkzOCAxOC41MTU2QzIzLjQwNjIgMTguMTA5NCAyMi42NDg0IDE3LjkwNjIgMjEuODIwMyAxNy45MDYyQzIwLjk5MjIgMTcuOTA2MiAyMC4yNDIyIDE4LjEwOTQgMTkuNTcwMyAxOC41MTU2QzE4Ljg4MjggMTguOTA2MiAxOC4zMzU5IDE5LjQ0NTMgMTcuOTI5NyAyMC4xMzI4QzE3LjUyMzQgMjAuODIwMyAxNy4zMjAzIDIxLjU3MDMgMTcuMzIwMyAyMi4zODI4QzE3LjMyMDMgMjMuMjI2NiAxNy41MjM0IDIzLjk5MjIgMTcuOTI5NyAyNC42Nzk3QzE4LjMzNTkgMjUuMzY3MiAxOC44ODI4IDI1LjkxNDEgMTkuNTcwMyAyNi4zMjAzQzIwLjI0MjIgMjYuNzEwOSAyMC45OTIyIDI2LjkwNjIgMjEuODIwMyAyNi45MDYyWk0xMi42MzI4IDE4Ljk4NDRDMTIuMjEwOSAxOC45ODQ0IDExLjg1OTQgMTguODM1OSAxMS41NzgxIDE4LjUzOTFDMTEuMjgxMiAxOC4yNDIyIDExLjEzMjggMTcuODkwNiAxMS4xMzI4IDE3LjQ4NDRDMTEuMTMyOCAxNy4wNjI1IDExLjI4MTIgMTYuNzEwOSAxMS41NzgxIDE2LjQyOTdDMTEuODU5NCAxNi4xMzI4IDEyLjIxMDkgMTUuOTg0NCAxMi42MzI4IDE1Ljk4NDRDMTMuMDM5MSAxNS45ODQ0IDEzLjM5MDYgMTYuMTMyOCAxMy42ODc1IDE2LjQyOTdDMTMuOTg0NCAxNi43MTA5IDE0LjEzMjggMTcuMDYyNSAxNC4xMzI4IDE3LjQ4NDRDMTQuMTMyOCAxNy44OTA2IDEzLjk4NDQgMTguMjQyMiAxMy42ODc1IDE4LjUzOTFDMTMuMzkwNiAxOC44MzU5IDEzLjAzOTEgMTguOTg0NCAxMi42MzI4IDE4Ljk4NDRaIn0pfSksciQ9Wigic3ZnIix7d2lkdGg6IjIxIixoZWlnaHQ6IjIxIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbWigicGF0aCIse2Q6Ik0xMiA1SDZhMiAyIDAgMCAwLTIgMnYzIn0pLFooInBhdGgiLHtkOiJtOSA4IDMtMy0zLTMifSksWigicGF0aCIse2Q6Ik00IDE0djRhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMmgtMiJ9KV19KSxhJD1fMChmdW5jdGlvbih7b25DbGljazpRLC4uLkp9LFgpe2xldCBLPWI1KCJIb21lQnV0dG9uIik7cmV0dXJuIFooeTUse3JlZjpYLCJhcmlhLWxhYmVsIjoiSG9tZSIsb25DbGljazooWSk9PntpZihRPy4oWSksWS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtLLmV4ZWMoYyQoSy5kZXZpY2VUeXBlLEsuZGV2aWNlVWRpZCkpfSwuLi5KLGNoaWxkcmVuOmkkfSl9KSxzJD1fMChmdW5jdGlvbih7b25DbGljazpRLC4uLkp9LFgpe2xldCBLPWI1KCJTY3JlZW5zaG90QnV0dG9uIik7cmV0dXJuIFooeTUse3JlZjpYLCJhcmlhLWxhYmVsIjoiU2NyZWVuc2hvdCIsb25DbGljazooWSk9PntpZihRPy4oWSksWS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZihLLmRldmljZVVkaWQpSy5leGVjKGB4Y3J1biBzaW1jdGwgaW8gJHtLLmRldmljZVVkaWR9IHNjcmVlbnNob3Qgfi9EZXNrdG9wL3NlcnZlLXNpbS1zY3JlZW5zaG90LSQoZGF0ZSArJXMpLnBuZ2ApfSwuLi5KLGNoaWxkcmVuOm4kfSl9KSx0JD1fMChmdW5jdGlvbih7b25DbGljazpRLGZvcmNlRGlzYWJsZWQ6SiwuLi5YfSxLKXtsZXQgWT1iNSgiUm90YXRlQnV0dG9uIikscT1ZLmRldmljZVR5cGU9PT0id2F0Y2gifHxZLmRldmljZVR5cGU9PT0idmlzaW9uIixbRyxCXT1BKCJwb3J0cmFpdCIpO3JldHVybiBiKCgpPT57QihZLm9yaWVudGF0aW9uPz8icG9ydHJhaXQiKX0sW1kuZGV2aWNlVWRpZCxZLm9yaWVudGF0aW9uXSksWih5NSx7cmVmOkssImFyaWEtbGFiZWwiOiJSb3RhdGUgZGV2aWNlIixmb3JjZURpc2FibGVkOkp8fHEsb25DbGljazooTik9PntpZihRPy4oTiksTi5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZighWS5kZXZpY2VVZGlkfHxxKXJldHVybjtsZXQgej15MltZLm9yaWVudGF0aW9uPz9HXTtpZihCKHopLFkub25Sb3RhdGUpWS5vblJvdGF0ZSh6KTtlbHNlIFkuZXhlYyhgc2VydmUtc2ltIHJvdGF0ZSAke3p9IC1kICR7WS5kZXZpY2VVZGlkfWApfSwuLi5YLGNoaWxkcmVuOnIkfSl9KSxpMT1mJDtpMS5UaXRsZT1wJDtpMS5BY3Rpb25zPWwkO2kxLkJ1dHRvbj15NTtpMS5Ib21lQnV0dG9uPWEkO2kxLlNjcmVlbnNob3RCdXR0b249cyQ7aTEuUm90YXRlQnV0dG9uPXQkO3ZhciBTNT0oLi4uJCk9PiQuZmlsdGVyKChRLEosWCk9PntyZXR1cm4gQm9vbGVhbihRKSYmUS50cmltKCkhPT0iIiYmWC5pbmRleE9mKFEpPT09Sn0pLmpvaW4oIiAiKS50cmltKCk7dmFyIGQ5PSgkKT0+JC5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7dmFyIGM5PSgkKT0+JC5yZXBsYWNlKC9eKFtBLVpdKXxbXHMtX10rKFx3KS9nLChRLEosWCk9Plg/WC50b1VwcGVyQ2FzZSgpOkoudG9Mb3dlckNhc2UoKSk7dmFyIGYzPSgkKT0+e2xldCBRPWM5KCQpO3JldHVybiBRLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK1Euc2xpY2UoMSl9O3ZhciB4NT17eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn07dmFyIG85PSgkKT0+e2ZvcihsZXQgUSBpbiAkKWlmKFEuc3RhcnRzV2l0aCgiYXJpYS0iKXx8UT09PSJyb2xlInx8UT09PSJ0aXRsZSIpcmV0dXJuITA7cmV0dXJuITF9O3ZhciBlJD1VMCh7fSk7dmFyIGk5PSgpPT5IMChlJCk7dmFyIG45PV8wKCh7Y29sb3I6JCxzaXplOlEsc3Ryb2tlV2lkdGg6SixhYnNvbHV0ZVN0cm9rZVdpZHRoOlgsY2xhc3NOYW1lOks9IiIsY2hpbGRyZW46WSxpY29uTm9kZTpxLC4uLkd9LEIpPT57bGV0e3NpemU6Tj0yNCxzdHJva2VXaWR0aDp6PTIsYWJzb2x1dGVTdHJva2VXaWR0aDpWPSExLGNvbG9yOkM9ImN1cnJlbnRDb2xvciIsY2xhc3NOYW1lOlU9IiJ9PWk5KCk/P3t9LEY9WD8/Vj9OdW1iZXIoSj8/eikqMjQvTnVtYmVyKFE/P04pOko/P3o7cmV0dXJuIHUxKCJzdmciLHtyZWY6QiwuLi54NSx3aWR0aDpRPz9OPz94NS53aWR0aCxoZWlnaHQ6UT8/Tj8/eDUuaGVpZ2h0LHN0cm9rZTokPz9DLHN0cm9rZVdpZHRoOkYsY2xhc3NOYW1lOlM1KCJsdWNpZGUiLFUsSyksLi4uIVkmJiFvOShHKSYmeyJhcmlhLWhpZGRlbiI6InRydWUifSwuLi5HfSxbLi4ucS5tYXAoKFtMLEhdKT0+dTEoTCxIKSksLi4uQXJyYXkuaXNBcnJheShZKT9ZOltZXV0pfSk7dmFyIEgxPSgkLFEpPT57bGV0IEo9XzAoKHtjbGFzc05hbWU6WCwuLi5LfSxZKT0+dTEobjkse3JlZjpZLGljb25Ob2RlOlEsY2xhc3NOYW1lOlM1KGBsdWNpZGUtJHtkOShmMygkKSl9YCxgbHVjaWRlLSR7JH1gLFgpLC4uLkt9KSk7cmV0dXJuIEouZGlzcGxheU5hbWU9ZjMoJCksSn07dmFyICRRPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixrZXk6ImFmaXR2NyJ9XSxbInBhdGgiLHtkOiJNOSAzdjE4IixrZXk6ImZoM2hxYSJ9XV0sYjA9SDEoInBhbmVsLWxlZnQiLCRRKTt2YXIgUVE9W1sicGF0aCIse2Q6Ik0xMi4wMzQgMTIuNjgxYS40OTguNDk4IDAgMCAxIC42NDctLjY0N2w5IDMuNWEuNS41IDAgMCAxLS4wMzMuOTQzbC0zLjQ0NCAxLjA2OGExIDEgMCAwIDAtLjY2LjY2bC0xLjA2NyAzLjQ0M2EuNS41IDAgMCAxLS45NDMuMDMzeiIsa2V5OiJ4d256aXAifV0sWyJwYXRoIix7ZDoiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IixrZXk6IjE0cnN2cSJ9XV0sbDA9SDEoInNxdWFyZS1tb3VzZS1wb2ludGVyIixRUSk7dmFyIEpRPVtbInBhdGgiLHtkOiJtMjEuNzMgMTgtOC0xNGEyIDIgMCAwIDAtMy40OCAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTMiLGtleToid21vZW5xIn1dLFsicGF0aCIse2Q6Ik0xMiA5djQiLGtleToianV6cHU3In1dLFsicGF0aCIse2Q6Ik0xMiAxN2guMDEiLGtleToicDMycDA1In1dXSx5MD1IMSgidHJpYW5nbGUtYWxlcnQiLEpRKTt2YXIgWlE9W1sicmVjdCIse3g6IjIiLHk6IjQiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxNiIscng6IjIiLGtleToiaXp4bGFvIn1dLFsicGF0aCIse2Q6Ik0xMCA0djQiLGtleToicHA4dTgwIn1dLFsicGF0aCIse2Q6Ik0yIDhoMjAiLGtleToiZDExY3M3In1dLFsicGF0aCIse2Q6Ik02IDR2NCIsa2V5OiIxc3Z0ancifV1dLHgyPUgxKCJhcHAtd2luZG93IixaUSk7dmFyIFhRPVtbInBhdGgiLHtkOiJNNyA3aDEwdjEwIixrZXk6IjF0aXZuOSJ9XSxbInBhdGgiLHtkOiJNNyAxNyAxNyA3IixrZXk6IjF2a2l6YSJ9XV0sajI9SDEoImFycm93LXVwLXJpZ2h0IixYUSk7dmFyIEtRPVtbInBhdGgiLHtkOiJNMjAgNiA5IDE3bC01LTUiLGtleToiMWdtZjJjIn1dXSx2Mj1IMSgiY2hlY2siLEtRKTt2YXIgWVE9W1sicGF0aCIse2Q6Im02IDkgNiA2IDYtNiIsa2V5OiJxcnVuc2wifV1dLFIyPUgxKCJjaGV2cm9uLWRvd24iLFlRKTt2YXIgcVE9W1sicGF0aCIse2Q6Im05IDE4IDYtNi02LTYiLGtleToibXRoaHdxIn1dXSxoMj1IMSgiY2hldnJvbi1yaWdodCIscVEpO3ZhciBHUT1bWyJwYXRoIix7ZDoiTTEyIDE1VjMiLGtleToibTlnMXgxIn1dLFsicGF0aCIse2Q6Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00IixrZXk6ImloN24zaCJ9XSxbInBhdGgiLHtkOiJtNyAxMCA1IDUgNS01IixrZXk6ImJyc243MCJ9XV0sZzI9SDEoImRvd25sb2FkIixHUSk7dmFyIFZRPVtbInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiIsa2V5OiJiMTloNXEifV0sWyJwYXRoIix7ZDoiTTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDIgMTh6IixrZXk6Img3aDVnZSJ9XV0sZjI9SDEoImZhc3QtZm9yd2FyZCIsVlEpO3ZhciBCUT1bWyJwYXRoIix7ZDoibTMgNyA1IDUtNSA1VjciLGtleToiY291aGk3In1dLFsicGF0aCIse2Q6Im0yMSA3LTUgNSA1IDVWNyIsa2V5OiI2b3VpYTcifV0sWyJwYXRoIix7ZDoiTTEyIDIwdjIiLGtleToiMWxoMWtnIn1dLFsicGF0aCIse2Q6Ik0xMiAxNHYyIixrZXk6IjhqY3h1ZCJ9XSxbInBhdGgiLHtkOiJNMTIgOHYyIixrZXk6IjF3b3FpdiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIixrZXk6InR1czAzbSJ9XV0sbTI9SDEoImZsaXAtaG9yaXpvbnRhbC0yIixCUSk7dmFyIE5RPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCIsa2V5OiIxbWdsYXkifV0sWyJwYXRoIix7ZDoiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAiLGtleToiMTNvMXpsIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIwIixrZXk6IjlpNHB1NCJ9XV0scDI9SDEoImdsb2JlIixOUSk7dmFyIHpRPVtbInBhdGgiLHtkOiJtMjIgMTEtMS4yOTYtMS4yOTZhMi40IDIuNCAwIDAgMC0zLjQwOCAwTDExIDE2IixrZXk6IjlrenkzNSJ9XSxbInBhdGgiLHtkOiJNNCA4YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMGEyIDIgMCAwIDAgMi0yIixrZXk6IjF0MGYwdCJ9XSxbImNpcmNsZSIse2N4OiIxMyIsY3k6IjciLHI6IjEiLGZpbGw6ImN1cnJlbnRDb2xvciIsa2V5OiIxb2J1czYifV0sWyJyZWN0Iix7eDoiOCIseToiMiIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMiIsa2V5OiIxZ3ZoYnkifV1dLHUyPUgxKCJpbWFnZXMiLHpRKTt2YXIgTFE9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLGtleToiYWZpdHY3In1dLFsicGF0aCIse2Q6Ik0xNSAzdjE4IixrZXk6IjE0bnZwMCJ9XV0sbDI9SDEoInBhbmVsLXJpZ2h0IixMUSk7dmFyIFVRPVtbInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4IixrZXk6IjEzNTdlMyJ9XSxbInBhdGgiLHtkOiJNMyAzdjVoNSIsa2V5OiIxeGhxOGEifV1dLGQyPUgxKCJyb3RhdGUtY2N3IixVUSk7dmFyIEhRPVtbInBhdGgiLHtkOiJtMjEgMjEtNC4zNC00LjM0IixrZXk6IjE0ajdyaiJ9XSxbImNpcmNsZSIse2N4OiIxMSIsY3k6IjExIixyOiI4IixrZXk6IjRlajk3dSJ9XV0sYzI9SDEoInNlYXJjaCIsSFEpO3ZhciBDUT1bWyJwYXRoIix7ZDoiTTEwIDVIMyIsa2V5OiIxcWdmYXcifV0sWyJwYXRoIix7ZDoiTTEyIDE5SDMiLGtleToieWhtbjFqIn1dLFsicGF0aCIse2Q6Ik0xNCAzdjQiLGtleToiMXN1YTAzIn1dLFsicGF0aCIse2Q6Ik0xNiAxN3Y0IixrZXk6IjFxMHIxNCJ9XSxbInBhdGgiLHtkOiJNMjEgMTJoLTkiLGtleToiMW80bHNxIn1dLFsicGF0aCIse2Q6Ik0yMSAxOWgtNSIsa2V5OiIxcmx0MXAifV0sWyJwYXRoIix7ZDoiTTIxIDVoLTciLGtleToiMW9zenoyIn1dLFsicGF0aCIse2Q6Ik04IDEwdjQiLGtleToidGdweHFrIn1dLFsicGF0aCIse2Q6Ik04IDEySDMiLGtleToiYTdzNGpiIn1dXSxSMD1IMSgic2xpZGVycy1ob3Jpem9udGFsIixDUSk7dmFyIE9RPVtbInBhdGgiLHtkOiJNMTIgM3YxMiIsa2V5OiIxeDBqNXMifV0sWyJwYXRoIix7ZDoibTE3IDgtNS01LTUgNSIsa2V5OiI3cTk3cjgifV0sWyJwYXRoIix7ZDoiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQiLGtleToiaWg3bjNoIn1dXSxvMj1IMSgidXBsb2FkIixPUSk7dmFyIEZRPVtbInBhdGgiLHtkOiJtMTYgMTMgNS4yMjMgMy40ODJhLjUuNSAwIDAgMCAuNzc3LS40MTZWNy44N2EuNS41IDAgMCAwLS43NTItLjQzMkwxNiAxMC41IixrZXk6ImZ0eW1lYyJ9XSxbInJlY3QiLHt4OiIyIix5OiI2Iix3aWR0aDoiMTQiLGhlaWdodDoiMTIiLHJ4OiIyIixrZXk6IjE1OHgwMSJ9XV0sYTA9SDEoInZpZGVvIixGUSk7dmFyIE1RPVtbInBhdGgiLHtkOiJNMTggNiA2IDE4IixrZXk6IjFibDVmOCJ9XSxbInBhdGgiLHtkOiJtNiA2IDEyIDEyIixrZXk6ImQ4Yms2diJ9XV0sVjA9SDEoIngiLE1RKTtmdW5jdGlvbiBpMih7b3BlbjokfSl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOiJsZW0tY2hldnJvbiB0ZXh0LXdoaXRlLzUwIixzdHlsZTp7dHJhbnNmb3JtOiQ/InJvdGF0ZSgxODBkZWcpIjoicm90YXRlKDBkZWcpIn0sY2hpbGRyZW46WigicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSl9ZnVuY3Rpb24gajUoe2RpcjokfSl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjkiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjbGFzc05hbWU6Im1yLVszcHhdIixjaGlsZHJlbjokPT09InVwIj9aKCJwb2x5Z29uIix7cG9pbnRzOiIxMiw0IDIwLDE4IDQsMTgifSk6WigicG9seWdvbiIse3BvaW50czoiNCw2IDIwLDYgMTIsMjAifSl9KX1mdW5jdGlvbiBuMigpe3JldHVybiBaKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpaKCJwb2x5Z29uIix7cG9pbnRzOiI2LDQgMjAsMTIgNiwyMCJ9KX0pfWZ1bmN0aW9uIG0zKCl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltaKCJyZWN0Iix7eDoiNiIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSksWigicmVjdCIse3g6IjE0Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KV19KX1mdW5jdGlvbiByMigpe3JldHVybiBaKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpaKCJyZWN0Iix7eDoiNSIseToiNSIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMS41In0pfSl9ZnVuY3Rpb24gcDMoKXtyZXR1cm4gWihmMix7c2l6ZToxMixzdHJva2VXaWR0aDoyLCJhcmlhLWhpZGRlbiI6InRydWUifSl9ZnVuY3Rpb24gdTMoKXtyZXR1cm4gWigic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQgMiA5IDEzIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WigicGF0aCIse2Q6Ik02LjAwODUyIDE0LjgwNTRDNS44OTE4MSAxNC45MzUgNS43NTgxNSAxNC45OTk4IDUuNjA3NTYgMTQuOTk5OEM1LjQ1Njk2IDE1LjAwMzMgNS4zMjMzIDE0Ljk2MTMgNS4yMDY1OSAxNC44NzM3QzUuMDkzNjQgMTQuNzg2MSA1LjAyNTg3IDE0LjY3MjMgNS4wMDMyOCAxNC41MzIyQzQuOTg0NDYgMTQuMzkyMSA1LjA0NjU4IDE0LjI0NSA1LjE4OTY1IDE0LjA5MDlMNi45NDU5OSAxMi4xNTIyTDcuMjQ1MyAxMC44NzU1TDguMTk5NzEgMTEuOTg5M0w4LjA1ODUzIDEyLjM5MzlDOC4wMjA4OCAxMi40OTU1IDcuOTg2OTkgMTIuNTcwOCA3Ljk1Njg3IDEyLjYxOThDNy45MzA1MiAxMi42Njg4IDcuODc0MDQgMTIuNzQwNiA3Ljc4NzQ1IDEyLjgzNTJMNi4wMDg1MiAxNC44MDU0Wk0xMC4zNDU3IDE0LjY0MjVMOS4xMDMyOSAxMi4zMDQ2QzkuMDc2OTQgMTIuMjYyNSA5LjA1NDM1IDEyLjIyMjMgOS4wMzU1MyAxMi4xODM3QzkuMDE2NyAxMi4xNDUyIDguOTc3MTcgMTIuMDkwOSA4LjkxNjkzIDEyLjAyMDlMNy43MTk2OCAxMC42MTgxQzcuNDkzNzkgMTAuMzU1NCA3LjMzNzU0IDEwLjEyOTUgNy4yNTA5NSA5Ljk0MDM0QzcuMTY0MzUgOS43NDc3IDcuMTM0MjQgOS40OTkwMSA3LjE2MDU5IDkuMTk0MjlMNy4yNjIyNCA3Ljk4MDY1QzcuMjY5NzcgNy45MDcxIDcuMjMyMTIgNy44NTQ1NiA3LjE0OTI5IDcuODIzMDRDNy4wNjY0NyA3Ljc5MTUxIDYuOTg1NTIgNy44MDkwMyA2LjkwNjQ2IDcuODc1NTdMNi40NzE2MSA4LjI0MzM0TDYuMzQxNzIgOS42NzIzOUM2LjMyMjg5IDkuODQ3NTIgNi4yNjQ1NCA5Ljk3ODg3IDYuMTY2NjUgMTAuMDY2NEM2LjA2ODc2IDEwLjE1NCA1LjkzODg3IDEwLjE5MjUgNS43NzY5OCAxMC4xODJDNS42MTEzMiAxMC4xNzUgNS40ODMzMSAxMC4xMTkgNS4zOTI5NSAxMC4wMTM5QzUuMzA2MzYgOS45MDg4MiA1LjI2ODcxIDkuNzczOTcgNS4yODAwMSA5LjYwOTM1TDUuMzg3MzEgOC4zMDYzOUM1LjQwMjM3IDguMTI3NzYgNS40MzgxMyA3Ljk3NTQgNS40OTQ2MSA3Ljg0OTMxQzUuNTU0ODUgNy43MjMyMSA1LjY2MDI2IDcuNTkxODcgNS44MTA4NiA3LjQ1NTI3TDYuNzE0NDUgNi42MjUxNkM3LjAwNDM1IDYuMzYyNDcgNy4yNjk3NyA2LjE2MTA3IDcuNTEwNzMgNi4wMjA5NkM3Ljc1MTY4IDUuODc3MzYgOC4wMjg0MSA1LjgwNTU2IDguMzQwOSA1LjgwNTU2QzguNzU4OCA1LjgwNTU2IDkuMDc4ODIgNS45MzM0IDkuMzAwOTUgNi4xODkwOUM5LjUyNjg1IDYuNDQ0NzggOS42MjQ3NCA2Ljc2MTc2IDkuNTk0NjIgNy4xNDAwNEw5LjQ3NjAyIDguNzMxOTVDOS40NTM0MyA5LjAxNTY2IDkuNDE5NTUgOS4yNjI1OSA5LjM3NDM3IDkuNDcyNzVDOS4zMjkxOSA5LjY4MjkgOS4yNTM4OSA5LjkyOTgzIDkuMTQ4NDcgMTAuMjEzNUw5LjA5MiAxMC4zNjA2TDkuODY1NjkgMTEuMzc5OUM5LjkyMjE3IDExLjQ1MzQgOS45ODA1MiAxMS41MzQgMTAuMDQwOCAxMS42MjE2QzEwLjEwMSAxMS43MDkxIDEwLjE1MzcgMTEuNzk2NyAxMC4xOTg5IDExLjg4NDNMMTEuNDA3NCAxNC4xNjQ0QzExLjUwNTMgMTQuMzUwMSAxMS41MjQxIDE0LjUxMTIgMTEuNDYzOSAxNC42NDc4QzExLjQwMzcgMTQuNzg0NCAxMS4zMDIgMTQuODgyNSAxMS4xNTg5IDE0Ljk0MkMxMS4wMTk2IDE1LjAwMTUgMTAuODcwOSAxNS4wMTAzIDEwLjcxMjggMTQuOTY4M0MxMC41NTg0IDE0LjkyNjIgMTAuNDM2MSAxNC44MTc3IDEwLjM0NTcgMTQuNjQyNVpNMTIuNDA3IDcuOTY0ODlDMTIuNTg0IDcuOTY0ODkgMTIuNzI3IDguMDEwNDIgMTIuODM2MiA4LjEwMTQ5QzEyLjk0NTQgOC4xODkwNSAxMyA4LjMwNjM5IDEzIDguNDUzNUMxMyA4LjYxMTExIDEyLjk0NTQgOC43MzM3IDEyLjgzNjIgOC44MjEyN0MxMi43MzA4IDguOTA4ODMgMTIuNTg3NyA4Ljk1MjYxIDEyLjQwNyA4Ljk1MjYxSDExLjEzMDdDMTAuOTUzOCA4Ljk1MjYxIDEwLjgxNDUgOC45MzY4NSAxMC43MTI4IDguOTA1MzNDMTAuNjExMiA4Ljg3MDMgMTAuNTEzMyA4LjgwNzI2IDEwLjQxOTEgOC43MTYxOUwxMC4wNTIxIDguMzc5OTRMMTAuMTQyNCA3LjA0MDIxTDExLjAzNDcgNy45NjQ4OUgxMi40MDdaTTkuMDAxNjQgNS4zMTE2OUM4Ljc3MTk4IDUuMzExNjkgOC41NjMwMyA1LjI2MDkxIDguMzc0NzggNS4xNTkzM0M4LjE4NjUzIDUuMDU0MjYgOC4wMzU5NCA0LjkxNDE1IDcuOTIyOTkgNC43MzkwM0M3LjgxMzgxIDQuNTYzOSA3Ljc1OTIxIDQuMzY5NSA3Ljc1OTIxIDQuMTU1ODVDNy43NTkyMSAzLjk0MjE5IDcuODEzODEgMy43NDc4IDcuOTIyOTkgMy41NzI2N0M4LjAzNTk0IDMuMzk3NTQgOC4xODY1MyAzLjI1OTE5IDguMzc0NzggMy4xNTc2MkM4LjU2MzAzIDMuMDUyNTQgOC43NzE5OCAzIDkuMDAxNjQgM0M5LjIzMTMgMyA5LjQ0MDI2IDMuMDUyNTQgOS42Mjg1IDMuMTU3NjJDOS44MTY3NSAzLjI1OTE5IDkuOTY1NDYgMy4zOTc1NCAxMC4wNzQ2IDMuNTcyNjdDMTAuMTg3NiAzLjc0NzggMTAuMjQ0MSAzLjk0MjE5IDEwLjI0NDEgNC4xNTU4NUMxMC4yNDQxIDQuMzY5NSAxMC4xODc2IDQuNTYzOSAxMC4wNzQ2IDQuNzM5MDNDOS45NjU0NiA0LjkxNDE1IDkuODE2NzUgNS4wNTQyNiA5LjYyODUgNS4xNTkzM0M5LjQ0MDI2IDUuMjYwOTEgOS4yMzEzIDUuMzExNjkgOS4wMDE2NCA1LjMxMTY5WiJ9KX0pfWZ1bmN0aW9uIGwzKCl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMjYgMSAxMiAxNCIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlooInBhdGgiLHtkOiJNMzMuMjQzNyA0LjU4NDU5QzMzLjAwMDggNC41ODQ1OSAzMi43ODE3IDQuNTI3MjggMzIuNTg2NiA0LjQxMjY4QzMyLjM5MTUgNC4yOTQxMiAzMi4yMzQyIDQuMTM4MDEgMzIuMTE0NyAzLjk0NDM3QzMxLjk5OTIgMy43NDY3NyAzMS45NDE0IDMuNTI5NDEgMzEuOTQxNCAzLjI5MjI5QzMxLjk0MTQgMy4wNTEyMiAzMS45OTkyIDIuODMzODcgMzIuMTE0NyAyLjY0MDIyQzMyLjIzNDIgMi40NDY1NyAzMi4zOTE1IDIuMjkyNDUgMzIuNTg2NiAyLjE3Nzg0QzMyLjc4MTcgMi4wNTkyOCAzMy4wMDA4IDIgMzMuMjQzNyAyQzMzLjQ4MjYgMiAzMy42OTk3IDIuMDU5MjggMzMuODk0OCAyLjE3Nzg0QzM0LjA5MzkgMi4yOTI0NSAzNC4yNTEyIDIuNDQ2NTcgMzQuMzY2NyAyLjY0MDIyQzM0LjQ4NjIgMi44MzM4NyAzNC41NDU5IDMuMDUxMjIgMzQuNTQ1OSAzLjI5MjI5QzM0LjU0NTkgMy41Mjk0MSAzNC40ODYyIDMuNzQ2NzcgMzQuMzY2NyAzLjk0NDM3QzM0LjI1MTIgNC4xMzgwMSAzNC4wOTM5IDQuMjk0MTIgMzMuODk0OCA0LjQxMjY4QzMzLjY5OTcgNC41MjcyOCAzMy40ODI2IDQuNTg0NTkgMzMuMjQzNyA0LjU4NDU5Wk0zMS4yMDA3IDkuNzQxOTFDMzEuMDczMyA5LjY3MDc3IDMwLjk0MTkgOS41OTU2OCAzMC44MDY1IDkuNTE2NjRDMzAuNjc1IDkuNDM3NiAzMC41NTk2IDkuMzQyNzYgMzAuNDYgOS4yMzIxQzMwLjM2MDQgOS4xMTc0OSAzMC4yOTI3IDguOTc3MiAzMC4yNTY5IDguODExMjJDMzAuMjI1IDguNjQxMjggMzAuMjQ0OSA4LjQyOTg1IDMwLjMxNjYgOC4xNzY5M0wzMC44MDY1IDYuNDgxNTNDMzAuODM4MyA2LjM2NjkyIDMwLjgxODQgNi4yNzk5OCAzMC43NDY3IDYuMjIwN0MzMC42NzkgNi4xNTc0NyAzMC41OTc0IDYuMTI5ODEgMzAuNTAxOCA2LjEzNzcxTDI5LjY1OTUgNi4xOTY5OUwyOS40MDI3IDcuOTIyMDJDMjkuMzc4OCA4LjEwNzc3IDI5LjMxNTEgOC4yNDYwOSAyOS4yMTE1IDguMzM2OThDMjkuMTA4IDguNDI3ODggMjguOTcyNiA4LjQ2NTQyIDI4LjgwNTMgOC40NDk2MUMyOC42NDIgOC40MzM4IDI4LjUxODYgOC4zNjY2MiAyOC40MzQ5IDguMjQ4MDZDMjguMzUxMyA4LjEyOTUgMjguMzIxNCA3Ljk3NzM1IDI4LjM0NTMgNy43OTE2MUwyOC42MjYxIDUuNjgxMjZDMjguNjUgNS41MTEzMiAyOC43MTU3IDUuMzc0OTggMjguODIzMiA1LjI3MjIzQzI4LjkzMDggNS4xNjk0OCAyOS4wNjgxIDUuMTEyMTcgMjkuMjM1NCA1LjEwMDMyTDMxLjMzMjEgNC45NTIxMkMzMS44ODE3IDQuOTEyNiAzMi4zMzU3IDQuOTY5OSAzMi42OTQxIDUuMTI0MDNDMzMuMDUyNSA1LjI3ODE2IDMzLjM2NzEgNS41Mzg5OSAzMy42Mzc5IDUuOTA2NTJMMzQuNjcxNCA3LjMyMzNMMzYuMTcwOCA2LjY2NTNDMzYuMzM4IDYuNTkwMjEgMzYuNDg5MyA2LjU3NDQgMzYuNjI0OCA2LjYxNzg3QzM2Ljc2MDIgNi42NTczOSAzNi44NjU3IDYuNzUyMjQgMzYuOTQxNCA2LjkwMjQyQzM3LjAxMyA3LjA1MjU5IDM3LjAxOSA3LjE5NDg2IDM2Ljk1OTMgNy4zMjkyM0MzNi45MDM1IDcuNDYzNiAzNi43OTIgNy41NjgzMiAzNi42MjQ4IDcuNjQzNDFMMzQuNzMxMSA4LjQ3OTI1QzM0LjYwMzcgOC41Mzg1MyAzNC40NzQzIDguNTUwMzkgMzQuMzQyOCA4LjUxNDgyQzM0LjIxNTQgOC40NzUzIDM0LjExMzggOC40MDAyMSAzNC4wMzgyIDguMjg5NTZMMzMuMzgxMSA3LjMzNTE2QzMzLjMxMzQgNy4yNDAzMSAzMy4yMjk4IDcuMTk4ODEgMzMuMTMwMiA3LjIxMDY3QzMzLjAzMDYgNy4yMjI1MyAzMi45NjQ5IDcuMjgzNzggMzIuOTMzMSA3LjM5NDQ0TDMyLjQ5MSA4LjkyOTc4TDM0LjczMTEgMTAuMzg4MUMzNC44NDI2IDEwLjQ1OTIgMzQuOTIyMyAxMC41NTYgMzQuOTcwMSAxMC42Nzg1QzM1LjAxNzkgMTAuODAxIDM1LjAyOTggMTAuOTI1NSAzNS4wMDU5IDExLjA1MkMzNC45ODYgMTEuMTc0NSAzNC45MjgyIDExLjI3NTMgMzQuODMyNyAxMS4zNTQzTDMyLjc3MTggMTMuMDk3MUMzMi42MDg1IDEzLjIzNTQgMzIuNDQ1MiAxMy4yOTg3IDMyLjI4MTkgMTMuMjg2OEMzMi4xMjI2IDEzLjI3NSAzMS45OTMyIDEzLjIxMzcgMzEuODkzNyAxMy4xMDMxQzMxLjc5ODEgMTIuOTk2NCAzMS43NTQzIDEyLjg2NTkgMzEuNzYyMiAxMi43MTE4QzMxLjc3MDIgMTIuNTUzNyAzMS44NTM4IDEyLjQwNzUgMzIuMDEzMSAxMi4yNzMxTDMzLjQ4ODYgMTEuMDE2NEwzMS4yMDA3IDkuNzQxOTFaTTI3LjIwNDQgMTQuODYzN0MyNy4wODQ5IDE0Ljc1NyAyNy4wMTcyIDE0LjYxODYgMjcuMDAxMyAxNC40NDg3QzI2Ljk4OTMgMTQuMjc4OCAyNy4wNjEgMTQuMTE2NyAyNy4yMTYzIDEzLjk2MjZMMjkuMjIzNSAxMS45NzY3TDI5LjkzNDMgOS40ODEwOEMzMC4wNDE4IDkuNjE1NDQgMzAuMTc1MyA5Ljc0NTg2IDMwLjMzNDUgOS44NzIzMkMzMC40OTc4IDkuOTk0ODMgMzAuNjkzIDEwLjExNzMgMzAuOTIgMTAuMjM5OUwzMS4xMTcxIDEwLjM0NjZMMzAuMzA0NyAxMi40MzMyQzMwLjI1MjkgMTIuNTU1NyAzMC4yMDkxIDEyLjY0MDcgMzAuMTczMyAxMi42ODgxQzMwLjE0MTQgMTIuNzM1NSAzMC4wODU2IDEyLjc5ODggMzAuMDA2IDEyLjg3NzhMMjguMDcwNiAxNC43ODA3QzI3LjkxOTIgMTQuOTI2OSAyNy43NjM5IDE1IDI3LjYwNDYgMTVDMjcuNDQ5MyAxNSAyNy4zMTU5IDE0Ljk1NDYgMjcuMjA0NCAxNC44NjM3WiJ9KX0pfWZ1bmN0aW9uIGQzKCl7cmV0dXJuIFooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNDkgMyAxNiAxMiIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlooInBhdGgiLHtkOiJNNTcuMDAyOCAxMS45NDlDNTYuODQ4IDExLjk0OSA1Ni43MTcyIDExLjg5ODcgNTYuNjEwMyAxMS43OThDNTYuNTAzNSAxMS42OTM5IDU2LjQ1MDEgMTEuNTcwNyA1Ni40NTAxIDExLjQyODRWOS4wMjg2M0w1NC40MjE2IDcuMTA3NzZDNTQuMjIyNyA2LjkyMDM1IDU0LjA5NTUgNi42OTgyNSA1NC4wNDAzIDYuNDQxNDRDNTMuOTg1IDYuMTgxMTYgNTQuMDEwOCA1LjkyNzgyIDU0LjExNzYgNS42ODE0MkM1NC4yMjgyIDUuNDM4NDkgNTQuMzk3NyA1LjI0NDE0IDU0LjYyNjEgNS4wOTgzOUM1NC44NTgzIDQuOTQ5MTYgNTUuMTE2MiA0Ljg3NDU0IDU1LjM5OTkgNC44NzQ1NEg1OC4xMTM3QzU4LjQyMzIgNC44NzQ1NCA1OC42ODQ4IDQuOTc2OTIgNTguODk4NSA1LjE4MTY4QzU5LjExNTkgNS4zODI5NiA1OS4yMjQ2IDUuNjI5MzYgNTkuMjI0NiA1LjkyMDg3VjcuNzYzNjZINjAuODk5M0M2MS4wNTA0IDcuNzYzNjYgNjEuMTc5NCA3LjgxMzk5IDYxLjI4NjIgNy45MTQ2M0M2MS4zOTMxIDguMDE1MjcgNjEuNDQ2NSA4LjEzODQ3IDYxLjQ0NjUgOC4yODQyM0M2MS40NDY1IDguNDI2NTEgNjEuMzkzMSA4LjU0Nzk4IDYxLjI4NjIgOC42NDg2MkM2MS4xNzk0IDguNzQ5MjYgNjEuMDUwNCA4Ljc5OTU4IDYwLjg5OTMgOC43OTk1OEg1OC42NzE5QzU4LjUyMDkgOC43OTk1OCA1OC4zOTAxIDguNzQ5MjYgNTguMjc5NSA4LjY0ODYyQzU4LjE3MjcgOC41NDc5OCA1OC4xMTkyIDguNDI2NTEgNTguMTE5MiA4LjI4NDIzVjYuOTg4MDNDNTguMTE5MiA2LjkxODYyIDU4LjA5OSA2Ljg1NDQyIDU4LjA1ODQgNi43OTU0MkM1OC4wMTc5IDYuNzMyOTUgNTcuOTQ0MiA2LjcwMTcyIDU3LjgzNzMgNi43MDE3Mkg1Ni4wNjMyQzU1Ljk5MzIgNi43MDE3MiA1NS45NDUzIDYuNzI5NDggNTUuOTE5NSA2Ljc4NTAxQzU1Ljg5NzQgNi44MzcwNiA1NS45MDg0IDYuODg3MzkgNTUuOTUyNiA2LjkzNTk3TDU3LjQwMDcgOC40NTYwMUM1Ny41MDM5IDguNTYzNiA1Ny41NTU1IDguNjgxNTkgNTcuNTU1NSA4LjgwOTk5VjExLjQyODRDNTcuNTU1NSAxMS41NzA3IDU3LjUwMDIgMTEuNjkzOSA1Ny4zODk3IDExLjc5OEM1Ny4yODI4IDExLjg5ODcgNTcuMTUzOCAxMS45NDkgNTcuMDAyOCAxMS45NDlaTTUzLjAwMTIgMTRDNTIuNTg0OCAxNCA1Mi4xOTQyIDEzLjkyNzEgNTEuODI5NSAxMy43ODE0QzUxLjQ2ODQgMTMuNjM1NiA1MS4xNDk2IDEzLjQzMjYgNTAuODczMyAxMy4xNzIzQzUwLjYwMDYgMTIuOTEyIDUwLjM4NjkgMTIuNjExOCA1MC4yMzIxIDEyLjI3MTdDNTAuMDc3NCAxMS45MjgyIDUwIDExLjU2MDMgNTAgMTEuMTY4MUM1MCAxMC43NzYgNTAuMDc3NCAxMC40MDk5IDUwLjIzMjEgMTAuMDY5OEM1MC4zODY5IDkuNzI2MTggNTAuNjAwNiA5LjQyNDI2IDUwLjg3MzMgOS4xNjM5OEM1MS4xNDk2IDguOTAzNyA1MS40Njg0IDguNzAwNjggNTEuODI5NSA4LjU1NDkyQzUyLjE5NDIgOC40MDkxNiA1Mi41ODQ4IDguMzM2MjggNTMuMDAxMiA4LjMzNjI4QzUzLjQyMTIgOC4zMzYyOCA1My44MTE4IDguNDA5MTYgNTQuMTcyOSA4LjU1NDkyQzU0LjUzNzcgOC43MDA2OCA1NC44NTY0IDguOTAzNyA1NS4xMjkxIDkuMTYzOThDNTUuNDA1NCA5LjQyNDI2IDU1LjYyMSA5LjcyNjE4IDU1Ljc3NTggMTAuMDY5OEM1NS45MzA1IDEwLjQwOTkgNTYuMDA3OSAxMC43NzYgNTYuMDA3OSAxMS4xNjgxQzU2LjAwNzkgMTEuNTYwMyA1NS45MzA1IDExLjkyODIgNTUuNzc1OCAxMi4yNzE3QzU1LjYyMSAxMi42MTE4IDU1LjQwNTQgMTIuOTEyIDU1LjEyOTEgMTMuMTcyM0M1NC44NTY0IDEzLjQzMjYgNTQuNTM3NyAxMy42MzU2IDU0LjE3MjkgMTMuNzgxNEM1My44MTE4IDEzLjkyNzEgNTMuNDIxMiAxNCA1My4wMDEyIDE0Wk01My4wMDEyIDEzLjI2NkM1My40MTAyIDEzLjI2NiA1My43ODIzIDEzLjE3MDYgNTQuMTE3NiAxMi45Nzk3QzU0LjQ1NjYgMTIuNzkyMyA1NC43MjU2IDEyLjU0MDcgNTQuOTI0NiAxMi4yMjQ5QzU1LjEyNzMgMTEuOTA1NiA1NS4yMjg2IDExLjU1MzQgNTUuMjI4NiAxMS4xNjgxQzU1LjIyODYgMTAuNzgyOSA1NS4xMjczIDEwLjQzMjQgNTQuOTI0NiAxMC4xMTY2QzU0LjcyNTYgOS43OTczMyA1NC40NTY2IDkuNTQzOTkgNTQuMTE3NiA5LjM1NjU5QzUzLjc4MjMgOS4xNjU3MSA1My40MTAyIDkuMDcwMjggNTMuMDAxMiA5LjA3MDI4QzUyLjU5NTkgOS4wNzAyOCA1Mi4yMjM3IDkuMTY1NzEgNTEuODg0NyA5LjM1NjU5QzUxLjU0OTQgOS41NDM5OSA1MS4yODA0IDkuNzk3MzMgNTEuMDc3OCAxMC4xMTY2QzUwLjg3ODggMTAuNDMyNCA1MC43NzkzIDEwLjc4MjkgNTAuNzc5MyAxMS4xNjgxQzUwLjc3OTMgMTEuNTUzNCA1MC44Nzg4IDExLjkwNTYgNTEuMDc3OCAxMi4yMjQ5QzUxLjI4MDQgMTIuNTQwNyA1MS41NDk0IDEyLjc5MjMgNTEuODg0NyAxMi45Nzk3QzUyLjIyMzcgMTMuMTcwNiA1Mi41OTU5IDEzLjI2NiA1My4wMDEyIDEzLjI2NlpNNjIuNDgwMSA5LjYxMTY2QzYyLjM2MjIgOS41MTQ0OSA2Mi4zMDE0IDkuNDE1NTggNjIuMjk3NyA5LjMxNDk0QzYyLjI5NzcgOS4yMTA4MyA2Mi4zMzA4IDkuMTI0MDcgNjIuMzk3MiA5LjA1NDY2QzYyLjQ2NzIgOC45ODUyNSA2Mi41NTM4IDguOTQ1MzQgNjIuNjU2OSA4LjkzNDkzQzYyLjc2MzggOC45MjEwNSA2Mi44Njg4IDguOTU1NzUgNjIuOTcyIDkuMDM5MDRDNjMuMjg4OSA5LjMwMjc5IDYzLjUzOTQgOS42MTY4NyA2My43MjM2IDkuOTgxMjZDNjMuOTA3OSAxMC4zNDU3IDY0IDEwLjc0MTMgNjQgMTEuMTY4MUM2NCAxMS41NjAzIDYzLjkyMjYgMTEuOTI4MiA2My43Njc5IDEyLjI3MTdDNjMuNjEzMSAxMi42MTE4IDYzLjM5NzYgMTIuOTEyIDYzLjEyMTIgMTMuMTcyM0M2Mi44NDg1IDEzLjQzMjYgNjIuNTI5OCAxMy42MzU2IDYyLjE2NSAxMy43ODE0QzYxLjgwMzkgMTMuOTI3MSA2MS40MTUyIDE0IDYwLjk5ODggMTRDNjAuNTgyNCAxNCA2MC4xOTE5IDEzLjkyNzEgNTkuODI3MSAxMy43ODE0QzU5LjQ2MjMgMTMuNjM1NiA1OS4xNDE3IDEzLjQzMjYgNTguODY1NCAxMy4xNzIzQzU4LjU5MjcgMTIuOTEyIDU4LjM3OSAxMi42MTE4IDU4LjIyNDIgMTIuMjcxN0M1OC4wNjk1IDExLjkyODIgNTcuOTkyMSAxMS41NjAzIDU3Ljk5MjEgMTEuMTY4MUM1Ny45OTIxIDEwLjk2MzQgNTguMDE0MiAxMC43NjU2IDU4LjA1ODQgMTAuNTc0N0M1OC4xMDYzIDEwLjM4MDQgNTguMTcyNyAxMC4xOTMgNTguMjU3NCAxMC4wMTI1QzU4LjMwOSA5LjkwMTQ0IDU4LjM4MDggOS44MzAzIDU4LjQ3MyA5Ljc5OTA2QzU4LjU2ODggOS43NjQzNiA1OC42NjI3IDkuNzY0MzYgNTguNzU0OCA5Ljc5OTA2QzU4Ljg1MDYgOS44MzAzIDU4LjkyMjUgOS44OTI3NiA1OC45NzA0IDkuOTg2NDdDNTkuMDE4MyAxMC4wODAyIDU5LjAxMDkgMTAuMTk4MiA1OC45NDgzIDEwLjM0MDRDNTguODMwNCAxMC42MDA3IDU4Ljc3MTQgMTAuODc2NiA1OC43NzE0IDExLjE2ODFDNTguNzcxNCAxMS41NTM0IDU4Ljg3MDkgMTEuOTA1NiA1OS4wNjk5IDEyLjIyNDlDNTkuMjcyNSAxMi41NDA3IDU5LjU0MTUgMTIuNzkyMyA1OS44NzY4IDEyLjk3OTdDNjAuMjE1OCAxMy4xNzA2IDYwLjU4OTggMTMuMjY2IDYwLjk5ODggMTMuMjY2QzYxLjQwNzggMTMuMjY2IDYxLjc4IDEzLjE3MDYgNjIuMTE1MyAxMi45Nzk3QzYyLjQ1MDYgMTIuNzkyMyA2Mi43MTc3IDEyLjU0MDcgNjIuOTE2NyAxMi4yMjQ5QzYzLjExOTQgMTEuOTA1NiA2My4yMjA3IDExLjU1MzQgNjMuMjIwNyAxMS4xNjgxQzYzLjIyMDcgMTAuODU5MyA2My4xNTI1IDEwLjU3MTIgNjMuMDE2MiAxMC4zMDRDNjIuODgzNSAxMC4wMzMzIDYyLjcwNDggOS44MDI1MyA2Mi40ODAxIDkuNjExNjZaTTYwLjk5ODggNi4yNzQ4NkM2MC43NzQgNi4yNzQ4NiA2MC41Njk1IDYuMjI0NTQgNjAuMzg1MyA2LjEyMzg5QzYwLjIwMTEgNi4wMTk3OCA2MC4wNTM3IDUuODgyNyA1OS45NDMyIDUuNzEyNjVDNTkuODM2MyA1LjUzOTEzIDU5Ljc4MjkgNS4zNDY1MiA1OS43ODI5IDUuMTM0ODNDNTkuNzgyOSA0LjkyNjYgNTkuODM2MyA0LjczNzQ2IDU5Ljk0MzIgNC41Njc0MUM2MC4wNTM3IDQuMzkzODkgNjAuMjAxMSA0LjI1NjgxIDYwLjM4NTMgNC4xNTYxN0M2MC41Njk1IDQuMDUyMDYgNjAuNzc0IDQgNjAuOTk4OCA0QzYxLjIxOTkgNCA2MS40MjA3IDQuMDUyMDYgNjEuNjAxMyA0LjE1NjE3QzYxLjc4MTggNC4yNTY4MSA2MS45MjU1IDQuMzkzODkgNjIuMDMyNCA0LjU2NzQxQzYyLjE0MjkgNC43Mzc0NiA2Mi4xOTgyIDQuOTI2NiA2Mi4xOTgyIDUuMTM0ODNDNjIuMTk4MiA1LjM0NjUyIDYyLjE0MjkgNS41MzkxMyA2Mi4wMzI0IDUuNzEyNjVDNjEuOTI1NSA1Ljg4MjcgNjEuNzgxOCA2LjAxOTc4IDYxLjYwMTMgNi4xMjM4OUM2MS40MjA3IDYuMjI0NTQgNjEuMjE5OSA2LjI3NDg2IDYwLjk5ODggNi4yNzQ4NloifSl9KX1mdW5jdGlvbiBjMygpe3JldHVybiBaKCJzdmciLHt3aWR0aDoiMTYiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjcwIDUgMTggOSIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlooInBhdGgiLHtkOiJNODUuNTcyIDEyLjEwMzhDODYuMDYgMTIuMTAzOCA4Ni40MjA3IDExLjk4OTIgODYuNjU0MiAxMS43NjAxQzg2Ljg4NDcgMTEuNTI4MSA4NyAxMS4xNjQxIDg3IDEwLjY2ODFWMTAuMTExMkM4NyA5Ljc2OTAxIDg2LjkyMDcgOS40NjMwMiA4Ni43NjIgOS4xOTMyOUM4Ni42MDMzIDguOTIwNjUgODYuMzc1OCA4LjY5NzMzIDg2LjA3OTQgOC41MjMzMUM4NS43ODAxIDguMzQ5MjkgODUuNDIyMyA4LjIzNzYyIDg1LjAwNjIgOC4xODgzMkw4My4wMTY4IDcuOTUzMzlMODEuMTk4MSA2Ljg0ODM1QzgwLjkyMjcgNi42ODAxMyA4MC42NjA4IDYuNTQyMzcgODAuNDEyMyA2LjQzNTA1QzgwLjE2MDggNi4zMjQ4NCA3OS44OTc0IDYuMjM3ODMgNzkuNjIxOSA2LjE3NDAyQzc5LjM0NjUgNi4xMTAyMSA3OS4wMzgyIDYuMDY1MjYgNzguNjk2OSA2LjAzOTE1Qzc4LjM1MjYgNi4wMTMwNSA3Ny45NTE0IDYgNzcuNDkzNCA2SDc2LjgxMDhDNzYuMzg4NyA2IDc1Ljk5NSA2LjA0OTMxIDc1LjYyOTggNi4xNDc5MkM3NS4yNjE2IDYuMjQzNjMgNzQuOTE4OCA2LjM3MTI1IDc0LjYwMTUgNi41MzA3NkM3NC4yODExIDYuNjkwMjggNzMuOTg2MiA2Ljg2NTc2IDczLjcxNjggNy4wNTcxOEM3My40NDQ0IDcuMjQ4NiA3My4xOTU5IDcuNDM3MTIgNzIuOTcxNCA3LjYyMjc1TDcyLjI1NzQgNy44NTMzM0M3MS44MzIzIDcuOTg2NzQgNzEuNTE2NCA4LjE4Mzk3IDcxLjMwOTkgOC40NDVDNzEuMTAzMyA4LjcwMzEzIDcxIDkuMDMzNzcgNzEgOS40MzY5MlYxMC42NDJDNzEgMTEuMTQ2NyA3MS4xMTUzIDExLjUxNjUgNzEuMzQ1OCAxMS43NTE0QzcxLjU3NjMgMTEuOTg2MyA3MS45MzcgMTIuMTAzOCA3Mi40MjggMTIuMTAzOEg3Mi43MTU0QzcyLjcwMDQgMTIuMDM3MSA3Mi42ODg1IDExLjk3MDQgNzIuNjc5NSAxMS45MDM3QzcyLjY3MDUgMTEuODM0MSA3Mi42NjYgMTEuNzY0NSA3Mi42NjYgMTEuNjk0OEM3Mi42NjYgMTEuMzU1NSA3Mi43NDk4IDExLjA0OTUgNzIuOTE3NSAxMC43NzY5QzczLjA4NTEgMTAuNTA0MiA3My4zMTEyIDEwLjI4ODIgNzMuNTk1NiAxMC4xMjg3QzczLjg3NyA5Ljk2NjIzIDc0LjE5MjggOS44ODUwMiA3NC41NDMxIDkuODg1MDJDNzQuODkwNCA5Ljg4NTAyIDc1LjIwNjIgOS45NjYyMyA3NS40OTA2IDEwLjEyODdDNzUuNzcyIDEwLjI4ODIgNzUuOTk2NSAxMC41MDQyIDc2LjE2NDIgMTAuNzc2OUM3Ni4zMzE4IDExLjA0OTUgNzYuNDE1NyAxMS4zNTU1IDc2LjQxNTcgMTEuNjk0OEM3Ni40MTU3IDExLjc2NDUgNzYuNDExMiAxMS44MzQxIDc2LjQwMjIgMTEuOTAzN0M3Ni4zOTMyIDExLjk3MDQgNzYuMzgyNyAxMi4wMzcxIDc2LjM3MDggMTIuMTAzOEg4MS42MzgyQzgxLjYyMDMgMTIuMDM3MSA4MS42MDgzIDExLjk3MDQgODEuNjAyMyAxMS45MDM3QzgxLjU5MzMgMTEuODM0MSA4MS41ODg4IDExLjc2NDUgODEuNTg4OCAxMS42OTQ4QzgxLjU4ODggMTEuMzU1NSA4MS42NzI3IDExLjA0OTUgODEuODQwMyAxMC43NzY5QzgyLjAwNSAxMC41MDQyIDgyLjIyOTUgMTAuMjg4MiA4Mi41MTM5IDEwLjEyODdDODIuNzk1MyA5Ljk2NjIzIDgzLjExMTEgOS44ODUwMiA4My40NjE0IDkuODg1MDJDODMuODExNyA5Ljg4NTAyIDg0LjEyOSA5Ljk2NjIzIDg0LjQxMzQgMTAuMTI4N0M4NC42OTQ4IDEwLjI4ODIgODQuOTE5NCAxMC41MDQyIDg1LjA4NyAxMC43NzY5Qzg1LjI1MTcgMTEuMDQ5NSA4NS4zMzQgMTEuMzU1NSA4NS4zMzQgMTEuNjk0OEM4NS4zMzQgMTEuNzY0NSA4NS4zMzEgMTEuODM0MSA4NS4zMjUgMTEuOTAzN0M4NS4zMTYgMTEuOTcwNCA4NS4zMDQxIDEyLjAzNzEgODUuMjg5MSAxMi4xMDM4SDg1LjU3MlpNODMuNDYxNCAxM0M4My43MTI5IDEzIDgzLjk0MDQgMTIuOTQyIDg0LjE0NCAxMi44MjZDODQuMzQ3NiAxMi43MSA4NC41MDkyIDEyLjU1MzMgODQuNjI5IDEyLjM1NjFDODQuNzQ4NyAxMi4xNTg5IDg0LjgwODYgMTEuOTM4NSA4NC44MDg2IDExLjY5NDhDODQuODA4NiAxMS40NTEyIDg0Ljc0ODcgMTEuMjMwOCA4NC42MjkgMTEuMDMzNkM4NC41MDkyIDEwLjgzNjMgODQuMzQ3NiAxMC42Nzk3IDg0LjE0NCAxMC41NjM3QzgzLjk0MDQgMTAuNDQ3NyA4My43MTI5IDEwLjM4OTcgODMuNDYxNCAxMC4zODk3QzgzLjIwNjkgMTAuMzg5NyA4Mi45Nzc5IDEwLjQ0NzcgODIuNzc0MyAxMC41NjM3QzgyLjU3MDggMTAuNjc5NyA4Mi40MDkxIDEwLjgzNjMgODIuMjg5NCAxMS4wMzM2QzgyLjE2OTYgMTEuMjMwOCA4Mi4xMDk3IDExLjQ1MTIgODIuMTA5NyAxMS42OTQ4QzgyLjEwOTcgMTEuOTM4NSA4Mi4xNjk2IDEyLjE1ODkgODIuMjg5NCAxMi4zNTYxQzgyLjQwOTEgMTIuNTUzMyA4Mi41NzA4IDEyLjcxIDgyLjc3NDMgMTIuODI2QzgyLjk3NzkgMTIuOTQyIDgzLjIwNjkgMTMgODMuNDYxNCAxM1pNNzQuNTQzMSAxM0M3NC43OTQ2IDEzIDc1LjAyMjEgMTIuOTQyIDc1LjIyNTcgMTIuODI2Qzc1LjQyOTIgMTIuNzEgNzUuNTkwOSAxMi41NTMzIDc1LjcxMDYgMTIuMzU2MUM3NS44MzA0IDEyLjE1ODkgNzUuODkwMyAxMS45Mzg1IDc1Ljg5MDMgMTEuNjk0OEM3NS44OTAzIDExLjQ1MTIgNzUuODMwNCAxMS4yMzA4IDc1LjcxMDYgMTEuMDMzNkM3NS41OTA5IDEwLjgzNjMgNzUuNDI5MiAxMC42Nzk3IDc1LjIyNTcgMTAuNTYzN0M3NS4wMjIxIDEwLjQ0NzcgNzQuNzk0NiAxMC4zODk3IDc0LjU0MzEgMTAuMzg5N0M3NC4yODg2IDEwLjM4OTcgNzQuMDU5NiAxMC40NDc3IDczLjg1NiAxMC41NjM3QzczLjY1MjQgMTAuNjc5NyA3My40OTA4IDEwLjgzNjMgNzMuMzcxIDExLjAzMzZDNzMuMjUxMyAxMS4yMzA4IDczLjE5MTQgMTEuNDUxMiA3My4xOTE0IDExLjY5NDhDNzMuMTkxNCAxMS45Mzg1IDczLjI1MTMgMTIuMTU4OSA3My4zNzEgMTIuMzU2MUM3My40OTA4IDEyLjU1MzMgNzMuNjUyNCAxMi43MSA3My44NTYgMTIuODI2Qzc0LjA1OTYgMTIuOTQyIDc0LjI4ODYgMTMgNzQuNTQzMSAxM1oifSl9KX1mdW5jdGlvbiBzMCh7c2l6ZTokPTE4LHN0cm9rZVdpZHRoOlE9Mn0pe3JldHVybiBaKGQyLHtzaXplOiQsc3Ryb2tlV2lkdGg6UX0pfXZhciByOT0iQWNjZXNzaWJpbGl0eSB1bmF2YWlsYWJsZSBvbiB0aGlzIHNpbXVsYXRvci4iO2Z1bmN0aW9uIHY1KCQpe3JldHVybiAkPy5lcnJvcnM/LmluY2x1ZGVzKHI5KT8/ITF9ZnVuY3Rpb24gUjUoJCxRKXtpZigkPT09USlyZXR1cm4hMDtpZigkLmlkIT09US5pZHx8JC5wYXRoIT09US5wYXRofHwkLmxhYmVsIT09US5sYWJlbHx8JC52YWx1ZSE9PVEudmFsdWV8fCQucm9sZSE9PVEucm9sZXx8JC50eXBlIT09US50eXBlfHwkLmVuYWJsZWQhPT1RLmVuYWJsZWQpcmV0dXJuITE7bGV0IEo9JC5mcmFtZSxYPVEuZnJhbWU7cmV0dXJuIEo9PT1YfHxKLng9PT1YLngmJkoueT09PVgueSYmSi53aWR0aD09PVgud2lkdGgmJkouaGVpZ2h0PT09WC5oZWlnaHR9ZnVuY3Rpb24gaDUoJCxRKXtsZXQgSj0kLmxhYmVsfHwkLnJvbGV8fGBlbGVtZW50ICR7USsxfWAsWD0kLnJvbGV8fCQudHlwZTtyZXR1cm57aWQ6JC5pZCxwYXRoOiQucGF0aCxsYWJlbDpKLHZhbHVlOiQudmFsdWUscm9sZTpYLHR5cGU6JC50eXBlLGVuYWJsZWQ6JC5lbmFibGVkLGZyYW1lOiQuZnJhbWV9fWZ1bmN0aW9uIGE5KCQsUSl7bGV0IEo9TWF0aC5tYXgoMCwkLngpLFg9TWF0aC5tYXgoMCwkLnkpLEs9TWF0aC5taW4oUS53aWR0aCwkLngrJC53aWR0aCksWT1NYXRoLm1pbihRLmhlaWdodCwkLnkrJC5oZWlnaHQpLHE9TWF0aC5tYXgoMCxLLUopLEc9TWF0aC5tYXgoMCxZLVgpO3JldHVybiBxPjAmJkc+MD97eDpKLHk6WCx3aWR0aDpxLGhlaWdodDpHfTpudWxsfWZ1bmN0aW9uIHQwKCQpe3JldHVybiAkLmlkfWZ1bmN0aW9uIG8zKCQpe3JldHVybmAkeyQueH0sJHskLnl9ICR7JC53aWR0aH14JHskLmhlaWdodH1gfWZ1bmN0aW9uIHM5KCQpe3JldHVybltgQVggbGFiZWw6ICR7JC5sYWJlbHx8IlVubGFiZWxlZCJ9YCwkLnJvbGU/YHJvbGU6ICR7JC5yb2xlfWA6IiIsJC50eXBlP2B0eXBlOiAkeyQudHlwZX1gOiIiLCQudmFsdWU/YHZhbHVlOiAkeyQudmFsdWV9YDoiIiwkLmlkP2BpZDogJHskLmlkfWA6IiIsYHBhdGg6ICR7JC5wYXRofWAsYGZyYW1lOiAke28zKCQuZnJhbWUpfWBdLmZpbHRlcihCb29sZWFuKS5qb2luKCI7ICIpfWZ1bmN0aW9uIGEyKCQpe3JldHVybiAkJiZ0eXBlb2YgJC5kZXZpY2U9PT0ic3RyaW5nIiYmdHlwZW9mICQudXJsPT09InN0cmluZyI/JDpudWxsfWZ1bmN0aW9uIHQ5KCQpe2xldCBRPW5ldyBVUkwoJC5zdHJlYW1VcmwpO3JldHVybiBRLnBhdGhuYW1lPVEucGF0aG5hbWUucmVwbGFjZSgvXC9zdHJlYW1cLlteL10rJC8sIi9zdHJlYW0ubWpwZWciKSxRLnNlYXJjaD0iIixRLmhhc2g9IiIsUS50b1N0cmluZygpfWZ1bmN0aW9uIGc1KCQpe2xldCBRPW5ldyBVUkwoJC5zdHJlYW1VcmwpO3JldHVybiBRLnBhdGhuYW1lPVEucGF0aG5hbWUucmVwbGFjZSgvXC9zdHJlYW1cLlteL10rJC8sIi93ZWJydGMvb2ZmZXIiKSxRLnNlYXJjaD0iIixRLmhhc2g9IiIsUS50b1N0cmluZygpfWZ1bmN0aW9uIGU5KCQpe2xldCBRPW5ldyBVUkwoZzUoJCkpO3JldHVybiBRLnBhdGhuYW1lPVEucGF0aG5hbWUucmVwbGFjZSgvXC9vZmZlciQvLCIvY2xvc2UiKSxRLnRvU3RyaW5nKCl9ZnVuY3Rpb24gJDYoJCl7bGV0IFE9bmV3IFVSTChnNSgkKSk7cmV0dXJuIFEucGF0aG5hbWU9US5wYXRobmFtZS5yZXBsYWNlKC9cL29mZmVyJC8sIi9zdGF0cyIpLFEudG9TdHJpbmcoKX1mdW5jdGlvbiBRNigkLFEpe2xldCBKPW5ldyBVUkwoJCk7cmV0dXJuIEouc2VhcmNoUGFyYW1zLnNldCgic2Vzc2lvbklkIixRKSxKLnRvU3RyaW5nKCl9ZnVuY3Rpb24gajEoJCl7bGV0IEo9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uYmFzZVBhdGg/Pyh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC8rJC8sIiIpfHwiLyIpO3JldHVybiBKPT09Ii8iP2AvJHskfWA6YCR7Sn0vJHskfWB9dmFyIEFRPTUwMDAsa1E9MjAwMCxzMj1udWxsLGkzPW51bGwsV1E9MSxfUT0xLFUyPW5ldyBNYXAsTDI9bmV3IE1hcDtmdW5jdGlvbiBEUSgpe2xldCAkPW5ldyBVUkwoajEoImV4ZWMtd3MiKSx3aW5kb3cubG9jYXRpb24uaHJlZik7cmV0dXJuICQucHJvdG9jb2w9JC5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IiwkLnRvU3RyaW5nKCl9ZnVuY3Rpb24gUFEoJCl7Zm9yKGxldCBRIG9mIFUyLnZhbHVlcygpKVEucmVqZWN0KCQpO1UyLmNsZWFyKCl9ZnVuY3Rpb24gSjYoKXtyZXR1cm4gczI/Pz1uZXcgUHJvbWlzZSgoJCxRKT0+e2xldCBKPSExLFg7dHJ5e1g9bmV3IFdlYlNvY2tldChEUSgpKX1jYXRjaChxKXtzMj1udWxsLFEocSk7cmV0dXJufWxldCBLPXNldFRpbWVvdXQoKCk9PntpZighSilKPSEwLHMyPW51bGwsUShFcnJvcigiY29udHJvbCBzb2NrZXQgY29ubmVjdCB0aW1lb3V0IikpLFguY2xvc2UoKX0sQVEpO1gub25vcGVuPSgpPT57WC5zZW5kKEpTT04uc3RyaW5naWZ5KHt0b2tlbjp3aW5kb3cuX19TSU1fUFJFVklFV19fPy5leGVjVG9rZW4/PyIifSkpfSxYLm9ubWVzc2FnZT0ocSk9PntsZXQgRzt0cnl7Rz1KU09OLnBhcnNlKFN0cmluZyhxLmRhdGEpKX1jYXRjaHtyZXR1cm59aWYoRy5yZWFkeSl7aWYoIUopSj0hMCxjbGVhclRpbWVvdXQoSyksaTM9WCwkKFgpO3JldHVybn1pZih0eXBlb2YgRy5zdWI9PT0ibnVtYmVyIil7bGV0IE49TDIuZ2V0KEcuc3ViKTtpZighTilyZXR1cm47aWYoRy5lbmQpTDIuZGVsZXRlKEcuc3ViKSxOLm9uRW5kKCk7ZWxzZSBpZih0eXBlb2YgRy5kYXRhPT09InN0cmluZyIpTi5vbkRhdGEoRy5kYXRhKTtyZXR1cm59aWYodHlwZW9mIEcuaWQhPT0ibnVtYmVyIilyZXR1cm47bGV0IEI9VTIuZ2V0KEcuaWQpO2lmKCFCKXJldHVybjtVMi5kZWxldGUoRy5pZCksQi5yZXNvbHZlKEcpfTtsZXQgWT0oKT0+e3MyPW51bGwsaTM9bnVsbDtsZXQgcT1FcnJvcigiY29udHJvbCBzb2NrZXQgY2xvc2VkIOKAlCByZWxvYWQgdGhlIHBhZ2UgaWYgdGhpcyBwZXJzaXN0cyIpO1BRKHEpO2xldCBHPVsuLi5MMi52YWx1ZXMoKV07TDIuY2xlYXIoKTtmb3IobGV0IEIgb2YgRylCLm9uRW5kKCk7aWYoIUopSj0hMCxjbGVhclRpbWVvdXQoSyksUShxKX07WC5vbmVycm9yPVksWC5vbmNsb3NlPVl9KSxzMn1hc3luYyBmdW5jdGlvbiBaNigkLFEpe2xldCBKPWF3YWl0IEo2KCk7aWYoSi5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pdGhyb3cgRXJyb3IoImNvbnRyb2wgc29ja2V0IG5vdCBvcGVuIik7cmV0dXJuIG5ldyBQcm9taXNlKChYLEspPT57bGV0IFk9V1ErKyxxPSgpPT57VTIuZGVsZXRlKFkpLEsoUT8ucmVhc29uPz9uZXcgRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKX07aWYoUSl7aWYoUS5hYm9ydGVkKXtxKCk7cmV0dXJufVEuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEse29uY2U6ITB9KX1VMi5zZXQoWSx7cmVzb2x2ZTooRyk9PntRPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksWChHKX0scmVqZWN0OihHKT0+e1E/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxLKEcpfX0pLEouc2VuZChKU09OLnN0cmluZ2lmeSh7aWQ6WSwuLi4kfSkpfSl9YXN5bmMgZnVuY3Rpb24gSTEoJCxRKXtsZXQgSj1hd2FpdCBaNih7Y29tbWFuZDokfSxRPy5zaWduYWwpO3JldHVybntzdGRvdXQ6Si5zdGRvdXQ/PyIiLHN0ZGVycjpKLnN0ZGVycj8/IiIsZXhpdENvZGU6Si5leGl0Q29kZT8/MX19YXN5bmMgZnVuY3Rpb24gbjMoJCxRKXtsZXQgSj1hd2FpdCBaNih7dWk6JH0sUT8uc2lnbmFsKTtpZihKLmVycm9yKXRocm93IEVycm9yKEouZXJyb3IpO3JldHVybiBKLnN0YXR1cz8/bnVsbH1mdW5jdGlvbiBTMCgkKXtsZXQgUT17b25tZXNzYWdlOm51bGwsb25lcnJvcjpudWxsLGNsb3NlOigpPT57fX0sSj0hMSxYPW51bGwsSz1udWxsLFk9IiIscT0oTik9PntZKz1OLnJlcGxhY2UoL1xyXG4vZyxgCmApO2xldCB6O3doaWxlKCh6PVkuaW5kZXhPZihgCgpgKSkhPT0tMSl7bGV0IFY9WS5zbGljZSgwLHopO1k9WS5zbGljZSh6KzIpO2xldCBDPVYuc3BsaXQoYApgKS5maWx0ZXIoKFUpPT5VLnN0YXJ0c1dpdGgoImRhdGE6IikpLm1hcCgoVSk9PlUuc2xpY2UoNSkucmVwbGFjZSgvXiAvLCIiKSkuam9pbihgCmApO2lmKEMpUS5vbm1lc3NhZ2U/Lih7ZGF0YTpDfSl9fSxHPSgpPT57aWYoSnx8SylyZXR1cm47US5vbmVycm9yPy4oKSxLPXNldFRpbWVvdXQoKCk9PntLPW51bGwsQigpfSxrUSl9LEI9YXN5bmMoKT0+e2lmKEopcmV0dXJuO3RyeXtsZXQgTj1hd2FpdCBKNigpO2lmKEopcmV0dXJuO1k9IiIsWD1fUSsrLEwyLnNldChYLHtvbkRhdGE6cSxvbkVuZDpHfSksTi5zZW5kKEpTT04uc3RyaW5naWZ5KHtzdWI6WCxwYXRoOiR9KSl9Y2F0Y2h7RygpfX07cmV0dXJuIEIoKSxRLmNsb3NlPSgpPT57aWYoSj0hMCxLKWNsZWFyVGltZW91dChLKTtpZihYIT09bnVsbCl7TDIuZGVsZXRlKFgpO3RyeXtpMz8uc2VuZChKU09OLnN0cmluZ2lmeSh7dW5zdWI6WH0pKX1jYXRjaHt9WD1udWxsfX0sUX1mdW5jdGlvbiBNMSgkKXtyZXR1cm5gJyR7JC5yZXBsYWNlKC8nL2csIidcXCcnIil9J2B9ZnVuY3Rpb24gWDYoJCl7bGV0W1EsSl09QShudWxsKSxbWCxLXT1BKCJBWCBvZmYiKTtyZXR1cm4gYigoKT0+e2lmKCEkKXtKKG51bGwpLEsoIkFYIG9mZiIpO3JldHVybn1KKG51bGwpLEsoIkFYIHdhaXRpbmciKTtsZXQgWT1TMCgkKTtyZXR1cm4gWS5vbm1lc3NhZ2U9KHEpPT57dHJ5e2xldCBHPUpTT04ucGFyc2UocS5kYXRhKTtKKEcpLEsodjUoRyk/IkFYIHVuYXZhaWxhYmxlIjpgJHtHLmVsZW1lbnRzLmxlbmd0aH0gQVggZWxlbWVudHNgKX1jYXRjaHtLKCJBWCBwYXJzZSBlcnJvciIpfX0sWS5vbmVycm9yPSgpPT57SygiQVggcmVjb25uZWN0aW5nIil9LCgpPT5ZLmNsb3NlKCl9LFskXSkse3NuYXBzaG90OlEsc3RhdHVzOlh9fXZhciByMz1VMCh7c25hcHNob3Q6bnVsbCxzdGF0dXM6IkFYIG9mZiJ9KSxhMz1VMChudWxsKTtmdW5jdGlvbiBIMigpe3JldHVybiBIMChyMyl9ZnVuY3Rpb24gZjUoKXtsZXQgJD1IMChhMyk7aWYoISQpdGhyb3cgRXJyb3IoIkFYIHNlbGVjdGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIik7cmV0dXJuICR9dmFyIEs2PW4wKGZ1bmN0aW9uKHtlbGVtZW50OlEsaW5kZXg6SixzY3JlZW46WCxoaWdobGlnaHRlZDpLLHNlbGVjdGVkOlksb25IaWdobGlnaHQ6cSxvblNlbGVjdDpHfSl7bGV0IEI9dDAoUSksTj1oNShRLEopLHo9YTkoUS5mcmFtZSxYKTtpZigheilyZXR1cm4gbnVsbDtsZXQgVj1zOShOKTtyZXR1cm4gWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiZGF0YS1heC1rZXkiOkIsImRhdGEtYXgtaWQiOk4uaWQsImRhdGEtYXgtcGF0aCI6Ti5wYXRoLCJkYXRhLWF4LWxhYmVsIjpOLmxhYmVsLCJkYXRhLWF4LXZhbHVlIjpOLnZhbHVlLCJkYXRhLWF4LXJvbGUiOk4ucm9sZSwiZGF0YS1heC10eXBlIjpOLnR5cGUsImRhdGEtYXgtZW5hYmxlZCI6U3RyaW5nKE4uZW5hYmxlZCksImRhdGEtYXgtZnJhbWUiOm8zKE4uZnJhbWUpLCJkYXRhLWF4LXNlbGVjdGVkIjpTdHJpbmcoWSksImFyaWEtbGFiZWwiOlEubGFiZWx8fFYsdGl0bGU6VixvbkNsaWNrOigpPT5HKEIpLG9uTW91c2VFbnRlcjooKT0+cShCKSxvbk1vdXNlTGVhdmU6KCk9PnEobnVsbCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBib3gtYm9yZGVyIG1pbi13LXB4IG1pbi1oLXB4IHAtMCByb3VuZGVkLVszcHhdIGJvcmRlciBjdXJzb3ItcG9pbnRlciBwb2ludGVyLWV2ZW50cy1hdXRvIixzdHlsZTp7bGVmdDpgJHt6LngvWC53aWR0aCoxMDB9JWAsdG9wOmAke3oueS9YLmhlaWdodCoxMDB9JWAsd2lkdGg6YCR7ei53aWR0aC9YLndpZHRoKjEwMH0lYCxoZWlnaHQ6YCR7ei5oZWlnaHQvWC5oZWlnaHQqMTAwfSVgLGJvcmRlckNvbG9yOlk/IiM2MGE1ZmEiOks/IiNmYmJmMjQiOiIjMzRkMzk5IixiYWNrZ3JvdW5kOlk/InJnYmEoOTYsMTY1LDI1MCwwLjI0KSI6Sz8icmdiYSgyNDUsMTU4LDExLDAuMjgpIjoicmdiYSgxNiwxODUsMTI5LDAuMTIpIn19KX0sKCQsUSk9PiQuaW5kZXg9PT1RLmluZGV4JiYkLmhpZ2hsaWdodGVkPT09US5oaWdobGlnaHRlZCYmJC5zZWxlY3RlZD09PVEuc2VsZWN0ZWQmJiQub25IaWdobGlnaHQ9PT1RLm9uSGlnaGxpZ2h0JiYkLm9uU2VsZWN0PT09US5vblNlbGVjdCYmJC5zY3JlZW4ud2lkdGg9PT1RLnNjcmVlbi53aWR0aCYmJC5zY3JlZW4uaGVpZ2h0PT09US5zY3JlZW4uaGVpZ2h0JiZSNSgkLmVsZW1lbnQsUS5lbGVtZW50KSk7ZnVuY3Rpb24gWTYoKXtsZXR7c25hcHNob3Q6JH09SDIoKSx7aGlnaGxpZ2h0ZWRLZXk6USxzZWxlY3RlZEtleTpKLHNldEhpZ2hsaWdodGVkS2V5Olgsc2V0U2VsZWN0ZWRLZXk6S309ZjUoKTtpZighJD8uc2NyZWVuLndpZHRofHwhJD8uc2NyZWVuLmhlaWdodClyZXR1cm4gbnVsbDtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHotMTAgb3ZlcmZsb3ctaGlkZGVuIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQuZWxlbWVudHMubWFwKChZLHEpPT57bGV0IEc9dDAoWSk7cmV0dXJuIFooSzYse2VsZW1lbnQ6WSxpbmRleDpxLHNjcmVlbjokLnNjcmVlbixoaWdobGlnaHRlZDpHPT09USxzZWxlY3RlZDpHPT09SixvbkhpZ2hsaWdodDpYLG9uU2VsZWN0Okt9LEcpfSl9KX1mdW5jdGlvbiBxNih7ZW5kcG9pbnQ6JCxjaGlsZHJlbjpRfSl7bGV0e3NuYXBzaG90Okosc3RhdHVzOlh9PVg2KCQpLFtLLFldPUEobnVsbCksW3EsR109QShudWxsKTtiKCgpPT57aWYoISQpWShudWxsKSxHKG51bGwpfSxbJF0pO2xldCBCPUUxKCgpPT4oe3NuYXBzaG90Okosc3RhdHVzOlh9KSxbSixYXSksTj1FMSgoKT0+KHtoaWdobGlnaHRlZEtleTpLLHNlbGVjdGVkS2V5OnEsc2V0SGlnaGxpZ2h0ZWRLZXk6WSxzZXRTZWxlY3RlZEtleTpHfSksW0sscV0pO3JldHVybiBaKHIzLHt2YWx1ZTpCLGNoaWxkcmVuOlooYTMse3ZhbHVlOk4sY2hpbGRyZW46UX0pfSl9ZnVuY3Rpb24gRzYoe292ZXJsYXlFbmFibGVkOiQsc3RyZWFtaW5nOlEsb25Ub2dnbGVPdmVybGF5Okp9KXtsZXR7c3RhdHVzOlh9PUgyKCksW0ssWV09QSghMSkscT0kJiZRO3JldHVybiBaKGkxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiQ/IkhpZGUgYWNjZXNzaWJpbGl0eSBvdmVybGF5IjoiU2hvdyBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLCJhcmlhLXByZXNzZWQiOiQsdGl0bGU6WCxvbkNsaWNrOkosb25Nb3VzZUVudGVyOigpPT5ZKCEwKSxvbk1vdXNlTGVhdmU6KCk9PlkoITEpLHN0eWxlOnE/e2JhY2tncm91bmQ6Sz8icmdiYSgyNTUsMjU1LDI1NSwwLjEyKSI6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIn06dm9pZCAwLGNoaWxkcmVuOloobDAse3NpemU6MTksc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gbTUoe2NsYXNzTmFtZTokPSIifSl7cmV0dXJuIFooImEiLHtocmVmOiJodHRwczovL2V4cG8uZGV2L3NlcnZpY2VzL3NpbXVsYXRvcnMiLHRhcmdldDoiX2JsYW5rIixyZWw6Im5vcmVmZXJyZXIiLGNsYXNzTmFtZTpgaW5saW5lLWZsZXggaC1bMzBweF0gbWluLXctMCBpdGVtcy1jZW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1tZCBweC0xLjUgZm9udC1tb25vIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS82NSBuby11bmRlcmxpbmUgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZS84NSBmb2N1cy12aXNpYmxlOm91dGxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC0yIGZvY3VzLXZpc2libGU6b3V0bGluZS13aGl0ZS82MCAkeyR9YC50cmltKCksImFyaWEtbGFiZWwiOiJPcGVuIEVBUyBTaW11bGF0b3IiLHRpdGxlOiJPcGVuIEVBUyBTaW11bGF0b3IiLGNoaWxkcmVuOiJFQVMgU2ltdWxhdG9yIn0pfWZ1bmN0aW9uIFY2KHtvcGVuOiQsb25DbGljazpRfSl7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZTpgZml4ZWQgdG9wLTMgbGVmdC0zIHotMzAgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcC0xIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xOHNfZWFzZV0gJHskPyJvcGFjaXR5LTAgcG9pbnRlci1ldmVudHMtbm9uZSI6Im9wYWNpdHktMTAwIHBvaW50ZXItZXZlbnRzLWF1dG8ifWAsY2hpbGRyZW46W1ooImJ1dHRvbiIse29uQ2xpY2s6USxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIGRldmljZXMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZToiRGV2aWNlcyIsY2hpbGRyZW46WihiMCx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxaKG01LHt9KV19KX1mdW5jdGlvbiBCNigkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpfHwkPD0wKXJldHVybiIwIEIiO2xldCBRPSQvMTA3Mzc0MTgyNDtpZihRPj0xKXJldHVybmAke1EudG9GaXhlZChRPj0xMD8wOjEpfSBHQmA7cmV0dXJuYCR7KCQvMTA0ODU3NikudG9GaXhlZCgwKX0gTUJgfWZ1bmN0aW9uIHA1KCQpe2xldCBRPSQubWF0Y2goL14oW2EtekEtWl0rKS0oLispJC8pO2lmKCFRKXJldHVybntvczokLHZlcnNpb246IiJ9O3JldHVybntvczpRWzFdLHZlcnNpb246UVsyXS5yZXBsYWNlKC8tL2csIi4iKX19ZnVuY3Rpb24gTjYoJCl7cmV0dXJuIHA1KCQpLnZlcnNpb258fCR9ZnVuY3Rpb24gdTUoJCl7bGV0e29zOlEsdmVyc2lvbjpKfT1wNSgkKTtyZXR1cm4gSj9gJHtRfSAke0p9YDpRfWZ1bmN0aW9uIGQ1KHtjaHJvbWU6JCxzY3JlZW46USxpbnRlcmFjdGl2ZTpKPSExLG9uQnV0dG9uOlgsb25Dcm93bldoZWVsOkt9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIixjaGlsZHJlbjpbJC5idXR0b25zLm1hcCgoWSk9PlooRVEse2Nocm9tZTokLGJ1dHRvbjpZLGludGVyYWN0aXZlOkosb25CdXR0b246WCxvbldoZWVsOkomJlkubmFtZT09PSJkaWdpdGFsLWNyb3duIj9LOnZvaWQgMH0sYGJ1dHRvbi0ke1kubmFtZX1gKSksJC5jb21wb3NpdGVJbWFnZT9aKEw2LHtjaHJvbWU6JCxpbWFnZTokLmNvbXBvc2l0ZUltYWdlLHJlY3Q6JC5ib2R5LHpJbmRleDoxfSk6JC5zbGljZSYmJC5jb3JuZXI/Wih3USx7Y2hyb21lOiR9KTpudWxsLFooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgb3ZlcmZsb3ctaGlkZGVuIGJnLWJsYWNrIixzdHlsZTp7Li4uczMoJCwkLnNjcmVlbiwyKSxib3JkZXJSYWRpdXM6VFEoJCl9LGNoaWxkcmVuOlF9KV19KX1mdW5jdGlvbiBUUSgkKXtyZXR1cm5gJHskLnNjcmVlblJhZGl1cy8kLnNjcmVlbi53aWR0aCoxMDB9JSAvICR7JC5zY3JlZW5SYWRpdXMvJC5zY3JlZW4uaGVpZ2h0KjEwMH0lYH1mdW5jdGlvbiBFUSh7Y2hyb21lOiQsYnV0dG9uOlEsaW50ZXJhY3RpdmU6SixvbkJ1dHRvbjpYLG9uV2hlZWw6S30pe2xldFtZLHFdPUEoITEpLFtHLEJdPUEoITEpLE49VChudWxsKSx6PVQobnVsbCksVj1UKEspO1YuY3VycmVudD1LLGIoKCk9PntsZXQgUD16LmN1cnJlbnQ7aWYoIVB8fCFLKXJldHVybjtsZXQgeD0odCk9Pnt0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSxWLmN1cnJlbnQ/Lih0LmRlbHRhWSx0LmRlbHRhTW9kZSl9O3JldHVybiBQLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIix4LHtwYXNzaXZlOiExfSksKCk9PlAucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLHgpfSxbISFLXSk7bGV0IEM9SiYmUS51c2FnZVBhZ2UhPW51bGwmJlEudXNhZ2UhPW51bGwsVT1FKCgpPT57aWYoTi5jdXJyZW50PT09bnVsbClyZXR1cm47Ti5jdXJyZW50PW51bGwsQighMSksWD8uKHtwaGFzZToidXAiLGJ1dHRvbjpRfSl9LFtRLFhdKSxGPUUoKFApPT57aWYoUC5idXR0b24hPT0wJiZQLnBvaW50ZXJUeXBlPT09Im1vdXNlIilyZXR1cm47UC5wcmV2ZW50RGVmYXVsdCgpLFAuc3RvcFByb3BhZ2F0aW9uKCksTi5jdXJyZW50PVAucG9pbnRlcklkO3RyeXtQLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoUC5wb2ludGVySWQpfWNhdGNoe31CKCEwKSxYPy4oe3BoYXNlOiJkb3duIixidXR0b246UX0pfSxbUSxYXSksTD1RLm9uVG9wPzU6MCxIPUMmJihZfHxHKSxPPShIP1EuaG92ZXIueDowKSoxMDAsaz0oSD9RLmhvdmVyLnk6MCkqMTAwLEk9RyYmUS5pbWFnZURvd24/US5pbWFnZURvd246US5pbWFnZSx3PUM/e29uUG9pbnRlckRvd246RixvblBvaW50ZXJVcDpVLG9uUG9pbnRlckNhbmNlbDpVLG9uUG9pbnRlckVudGVyOigpPT5xKCEwKSxvblBvaW50ZXJMZWF2ZTooKT0+e3EoITEpLFUoKX19Ont9O3JldHVybiBaKCJkaXYiLHtyZWY6eixyb2xlOkM/ImJ1dHRvbiI6dm9pZCAwLCJhcmlhLWxhYmVsIjpDP3o2KFEubmFtZSk6dm9pZCAwLCJhcmlhLWhpZGRlbiI6Qz92b2lkIDA6ITAsdGl0bGU6Qz96NihRLm5hbWUpOnZvaWQgMCxjbGFzc05hbWU6ImFic29sdXRlIHNlbGVjdC1ub25lIixzdHlsZTp7Li4uczMoJCxRLmZyYW1lLEwpLHRyYW5zZm9ybTpPfHxrP2B0cmFuc2xhdGUoJHtPfSUsICR7a30lKWA6dm9pZCAwLHRyYW5zaXRpb246InRyYW5zZm9ybSAwLjEycyBlYXNlIixjdXJzb3I6Qz8icG9pbnRlciI6dm9pZCAwLHBvaW50ZXJFdmVudHM6Qz8iYXV0byI6Im5vbmUiLHRvdWNoQWN0aW9uOiJub25lIn0sLi4udyxjaGlsZHJlbjpJJiZaKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOlU2KCQuaWRlbnRpZmllcixJKSxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIHNlbGVjdC1ub25lIixzdHlsZTp7b2JqZWN0Rml0OiJmaWxsIixmaWx0ZXI6RyYmIVEuaW1hZ2VEb3duPyJicmlnaHRuZXNzKDEuNCkiOnZvaWQgMCx0cmFuc2l0aW9uOiJmaWx0ZXIgMC4xMnMgZWFzZSIsV2Via2l0VXNlckRyYWc6Im5vbmUifX0pfSl9ZnVuY3Rpb24gejYoJCl7cmV0dXJuICQuc3BsaXQoIi0iKS5tYXAoKFEpPT5RLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK1Euc2xpY2UoMSkpLmpvaW4oIiAiKX1mdW5jdGlvbiB3USh7Y2hyb21lOiR9KXtpZighJC5zbGljZXx8ISQuY29ybmVyKXJldHVybiBudWxsO2xldHtib2R5OlEsY29ybmVyOkosc2xpY2U6WH09JCxLPU1hdGgubWF4KFEud2lkdGgtSi53aWR0aCoyLDApLFk9TWF0aC5tYXgoUS5oZWlnaHQtSi5oZWlnaHQqMiwwKSxxPVt7a2V5OiJ0b3AtbGVmdCIsaW1hZ2U6WC50b3BMZWZ0LHJlY3Q6e3g6US54LHk6US55LHdpZHRoOkoud2lkdGgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToidG9wLXJpZ2h0IixpbWFnZTpYLnRvcFJpZ2h0LHJlY3Q6e3g6US54K1Eud2lkdGgtSi53aWR0aCx5OlEueSx3aWR0aDpKLndpZHRoLGhlaWdodDpKLmhlaWdodH19LHtrZXk6ImJvdHRvbS1sZWZ0IixpbWFnZTpYLmJvdHRvbUxlZnQscmVjdDp7eDpRLngseTpRLnkrUS5oZWlnaHQtSi5oZWlnaHQsd2lkdGg6Si53aWR0aCxoZWlnaHQ6Si5oZWlnaHR9fSx7a2V5OiJib3R0b20tcmlnaHQiLGltYWdlOlguYm90dG9tUmlnaHQscmVjdDp7eDpRLngrUS53aWR0aC1KLndpZHRoLHk6US55K1EuaGVpZ2h0LUouaGVpZ2h0LHdpZHRoOkoud2lkdGgsaGVpZ2h0OkouaGVpZ2h0fX0se2tleToidG9wIixpbWFnZTpYLnRvcCxyZWN0Ont4OlEueCtKLndpZHRoLHk6US55LHdpZHRoOkssaGVpZ2h0OkouaGVpZ2h0fX0se2tleToiYm90dG9tIixpbWFnZTpYLmJvdHRvbSxyZWN0Ont4OlEueCtKLndpZHRoLHk6US55K1EuaGVpZ2h0LUouaGVpZ2h0LHdpZHRoOkssaGVpZ2h0OkouaGVpZ2h0fX0se2tleToibGVmdCIsaW1hZ2U6WC5sZWZ0LHJlY3Q6e3g6US54LHk6US55K0ouaGVpZ2h0LHdpZHRoOkoud2lkdGgsaGVpZ2h0Oll9fSx7a2V5OiJyaWdodCIsaW1hZ2U6WC5yaWdodCxyZWN0Ont4OlEueCtRLndpZHRoLUoud2lkdGgseTpRLnkrSi5oZWlnaHQsd2lkdGg6Si53aWR0aCxoZWlnaHQ6WX19XTtyZXR1cm4gWihaMSx7Y2hpbGRyZW46cS5maWx0ZXIoKEcpPT5HLnJlY3Qud2lkdGg+MCYmRy5yZWN0LmhlaWdodD4wKS5tYXAoKEcpPT5aKEw2LHtjaHJvbWU6JCxpbWFnZTpHLmltYWdlLHJlY3Q6Ry5yZWN0LHpJbmRleDoxfSxHLmtleSkpfSl9ZnVuY3Rpb24gTDYoe2Nocm9tZTokLGltYWdlOlEscmVjdDpKLHpJbmRleDpYfSl7cmV0dXJuIFooImltZyIse2FsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzcmM6VTYoJC5pZGVudGlmaWVyLFEpLGNsYXNzTmFtZToiYWJzb2x1dGUgc2VsZWN0LW5vbmUiLHN0eWxlOnsuLi5zMygkLEosWCksb2JqZWN0Rml0OiJmaWxsIixwb2ludGVyRXZlbnRzOiJub25lIixXZWJraXRVc2VyRHJhZzoibm9uZSJ9fSl9ZnVuY3Rpb24gVTYoJCxRKXtsZXQgSj1gZ3JpZC9hcGkvZGV2aWNla2l0LWNocm9tZT9jaHJvbWU9JHtlbmNvZGVVUklDb21wb25lbnQoJCl9JmltYWdlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFEpfWA7cmV0dXJuIHR5cGVvZiB3aW5kb3c+InUiP2AvJHtKfWA6ajEoSil9ZnVuY3Rpb24gczMoJCxRLEope3JldHVybntsZWZ0Omw1KFEueCwkLmZyYW1lLndpZHRoKSx0b3A6bDUoUS55LCQuZnJhbWUuaGVpZ2h0KSx3aWR0aDpsNShRLndpZHRoLCQuZnJhbWUud2lkdGgpLGhlaWdodDpsNShRLmhlaWdodCwkLmZyYW1lLmhlaWdodCksekluZGV4Okp9fWZ1bmN0aW9uIGw1KCQsUSl7cmV0dXJuYCR7JC9RKjEwMH0lYH1mdW5jdGlvbiBINih7bmFtZTokLHJ1bnRpbWU6USxjaHJvbWU6SixwbGFjZWhvbGRlckFzc2V0OlgsYnVzeTpLLGJ1c3lMYWJlbDpZPSJTdGFydGluZ+KApiIsZXJyb3I6cSxvblN0YXJ0Okd9KXtsZXQgQj1JMCgkKSxOPVMxW0JdLHo9WD8/bnVsbCxWPXo/bnVsbDpKPz9udWxsLEM9Vj97d2lkdGg6Vi5zY3JlZW4ud2lkdGgsaGVpZ2h0OlYuc2NyZWVuLmhlaWdodH06TjIoQiwkKSxVPXoyKEIsQyksRj16P0lRKEIsei5uYW1lKTpWP1UqVi5mcmFtZS53aWR0aC9WLnNjcmVlbi53aWR0aDpVKk4ud2lkdGgvKE4ud2lkdGgtMipOLmJlemVsWCksTD16P3t3aWR0aDp6LndpZHRoLGhlaWdodDp6LmhlaWdodH06Vj97d2lkdGg6Vi5mcmFtZS53aWR0aCxoZWlnaHQ6Vi5mcmFtZS5oZWlnaHR9Ont3aWR0aDpOLndpZHRoLGhlaWdodDpOLmhlaWdodH0sSD1gJHtMLndpZHRofSAvICR7TC5oZWlnaHR9YCxPPShMLndpZHRoL0wuaGVpZ2h0KmJRKEIpKS50b0ZpeGVkKDIpLGs9Qj09PSJ2aXNpb24iP1ooeFEse30pOlooeVEse3R5cGU6Qn0pO3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC01IG1pbi13LTAgdy1mdWxsIixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwiLHN0eWxlOnt3aWR0aDpgbWluKDEwMCUsICR7Rn1weCwgJHtPfWR2aClgLG1heFdpZHRoOkYsYXNwZWN0UmF0aW86SH0sY2hpbGRyZW46ej9aKFNRLHtuYW1lOnoubmFtZSxmYWxsYmFjazprfSk6Vj9aKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46WihkNSx7Y2hyb21lOlZ9KX0pOmt9KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtY2VudGVyIixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxN3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiR9KSxaKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOlt1NShRKSwiIFNpbXVsYXRvciJdfSldfSkscSYmWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LWRhbmdlciB0ZXh0LVsxMnB4XSBmb250LW1vbm8gbWF4LXctOTAgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOnF9KSxaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6RyxkaXNhYmxlZDpLLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtNSBweS0yIHJvdW5kZWQtZnVsbCB0ZXh0LVsxNHB4XSBmb250LW1lZGl1bSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzXSAke0s/ImJnLXdoaXRlLzggdGV4dC13aGl0ZS81NSBjdXJzb3ItZGVmYXVsdCI6ImJnLXdoaXRlLzEyIHRleHQtd2hpdGUvOTAgaG92ZXI6Ymctd2hpdGUvMTggY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46W0smJlooInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToic2l6ZS0zLjUgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8yNSBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIixzdHlsZTp7Ym9yZGVyVG9wQ29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC45KSJ9fSksSz9ZOiJTdGFydCJdfSldfSl9ZnVuY3Rpb24gSVEoJCxRKXtpZigkPT09IndhdGNoIil7aWYoUS5pbmNsdWRlcygidWx0cmEiKSlyZXR1cm4gMjU1O2lmKFEuaW5jbHVkZXMoIndhdGNoLXNlLSIpfHxRLmluY2x1ZGVzKCJhcHBsZS13YXRjaC1zZS0iKSlyZXR1cm4gMjM4O3JldHVybiAyNTB9aWYoJD09PSJ2aXNpb24iKXJldHVybiAzOTA7aWYoJD09PSJpcGFkIilyZXR1cm4gMzQwO3JldHVybiAyODB9ZnVuY3Rpb24gYlEoJCl7aWYoJD09PSJ2aXNpb24iKXJldHVybiAzNDtpZigkPT09ImlwYWQiKXJldHVybiA1MDtpZigkPT09IndhdGNoIilyZXR1cm4gNTY7cmV0dXJuIDUyfWZ1bmN0aW9uIHlRKHt0eXBlOiR9KXtsZXQgUT1TMVskXTtyZXR1cm4gWihaMSx7Y2hpbGRyZW46W1ooInN2ZyIse3ZpZXdCb3g6YDAgMCAke1Eud2lkdGh9ICR7US5oZWlnaHR9YCxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWlkWU1pZCBtZWV0IixjaGlsZHJlbjpbWigiZGVmcyIse2NoaWxkcmVuOlooImxpbmVhckdyYWRpZW50Iix7aWQ6InBsYWNlaG9sZGVyLXNjcmVlbiIseDE6IjAiLHkxOiIwIix4MjoiMSIseTI6IjEiLGNoaWxkcmVuOltaKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjNmZhOGU2In0pLFooInN0b3AiLHtvZmZzZXQ6IjU1JSIsc3RvcENvbG9yOiIjNWI5M2Q2In0pLFooInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzUxODhjZiJ9KV19KX0pLFooInJlY3QiLHt4OlEuYmV6ZWxYLHk6US5iZXplbFksd2lkdGg6US53aWR0aC0yKlEuYmV6ZWxYLGhlaWdodDpRLmhlaWdodC0yKlEuYmV6ZWxZLHJ4OlEuaW5uZXJSYWRpdXMsZmlsbDoidXJsKCNwbGFjZWhvbGRlci1zY3JlZW4pIn0pXX0pLFooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpaKEk1LHt0eXBlOiR9KX0pXX0pfWZ1bmN0aW9uIFNRKHtuYW1lOiQsZmFsbGJhY2s6UX0pe2xldFtKLFhdPUEoImxvYWRpbmciKTtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpbSiE9PSJsb2FkZWQiJiZRLEohPT0iZXJyb3IiJiZaKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOmpRKCQpLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgc2VsZWN0LW5vbmUgb2JqZWN0LWNvbnRhaW4iLHN0eWxlOntXZWJraXRVc2VyRHJhZzoibm9uZSJ9LG9uTG9hZDooKT0+WCgibG9hZGVkIiksb25FcnJvcjooKT0+WCgiZXJyb3IiKX0pXX0pfWZ1bmN0aW9uIHhRKCl7bGV0e3dpZHRoOiQsaGVpZ2h0OlF9PVMxLnZpc2lvbjtyZXR1cm4gWigic3ZnIix7dmlld0JveDpgMCAwICR7JH0gJHtRfWAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCIscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pZFlNaWQgbWVldCIsZmlsbDoibm9uZSIsImFyaWEtaGlkZGVuIjohMCxjaGlsZHJlbjpbWigiZGVmcyIse2NoaWxkcmVuOltaKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItc2hlbGwiLHgxOiIwIix5MToiMCIseDI6IjAiLHkyOiIxIixjaGlsZHJlbjpbWigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzI4MjgyYiJ9KSxaKCJzdG9wIix7b2Zmc2V0OiI1NCUiLHN0b3BDb2xvcjoiIzEyMTIxNCJ9KSxaKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwNzA3MDgifSldfSksWigibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLWdsYXNzIix4MToiMCIseTE6IjAiLHgyOiIxIix5MjoiMSIsY2hpbGRyZW46W1ooInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMzMTM1M2EifSksWigic3RvcCIse29mZnNldDoiNDglIixzdG9wQ29sb3I6IiMwYTBiMGQifSksWigic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDEwMTAyIn0pXX0pLFooInJhZGlhbEdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1sZW5zIixjeDoiNTAlIixjeToiNDYlIixyOiI2MCUiLGNoaWxkcmVuOltaKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMjAyODMyIn0pLFooInN0b3AiLHtvZmZzZXQ6IjcyJSIsc3RvcENvbG9yOiIjMDkwYTBkIn0pLFooInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzAxMDEwMiJ9KV19KV19KSxaKCJwYXRoIix7ZDoiTTk1IDE3N0M5NSAxMTkgMTQ3IDg2IDIxOCA5MUMyNTcgOTQgMjg2IDExMSAzMjAgMTExQzM1NCAxMTEgMzgzIDk0IDQyMiA5MUM0OTMgODYgNTQ1IDExOSA1NDUgMTc3VjIyMkM1NDUgMjc4IDUwMSAzMTEgNDQzIDMxMEMzOTggMzA5IDM3MSAyODYgMzQ1IDI2OEMzMjkgMjU3IDMxMSAyNTcgMjk1IDI2OEMyNjkgMjg2IDI0MiAzMDkgMTk3IDMxMEMxMzkgMzExIDk1IDI3OCA5NSAyMjJWMTc3WiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItc2hlbGwpIixzdHJva2U6IiMzZDNkNDIiLHN0cm9rZVdpZHRoOiI3In0pLFooInBhdGgiLHtkOiJNMTE3IDE4MUMxMTcgMTM0IDE1NyAxMTIgMjIwIDExNkMyNjAgMTE5IDI4NyAxMzYgMzIwIDEzNkMzNTMgMTM2IDM4MCAxMTkgNDIwIDExNkM0ODMgMTEyIDUyMyAxMzQgNTIzIDE4MVYyMTdDNTIzIDI2MyA0ODggMjg3IDQzOSAyODdDMzk5IDI4NyAzNjkgMjY0IDM0NSAyNTBDMzI5IDI0MCAzMTEgMjQwIDI5NSAyNTBDMjcxIDI2NCAyNDEgMjg3IDIwMSAyODdDMTUyIDI4NyAxMTcgMjYzIDExNyAyMTdWMTgxWiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItZ2xhc3MpIixzdHJva2U6IiMxNzE4MWIiLHN0cm9rZVdpZHRoOiI1In0pLFooInBhdGgiLHtkOiJNMTQzIDE4NkMxNDUgMTQ4IDE3NiAxMzUgMjI2IDEzOEMyNjQgMTQxIDI4OSAxNTYgMzIwIDE1NkMzNTEgMTU2IDM3NiAxNDEgNDE0IDEzOEM0NjQgMTM1IDQ5NSAxNDggNDk3IDE4NlYyMTNDNDk3IDI1MCA0NjkgMjY2IDQzMiAyNjZDMzk0IDI2NiAzNjkgMjQ2IDM0MyAyMzVDMzI4IDIyOSAzMTIgMjI5IDI5NyAyMzVDMjcxIDI0NiAyNDYgMjY2IDIwOCAyNjZDMTcxIDI2NiAxNDMgMjUwIDE0MyAyMTNWMTg2WiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItbGVucykiLHN0cm9rZToiIzI2MmEyZiIsc3Ryb2tlV2lkdGg6IjIifSksWigicGF0aCIse2Q6Ik0xNTEgMTcxQzE3OSAxNTAgMjE3IDE0NyAyNTEgMTU0TTM4OSAxNTRDNDIzIDE0NyA0NjEgMTUwIDQ4OSAxNzEiLHN0cm9rZToiIzRlNTM1YSIsc3Ryb2tlV2lkdGg6IjMiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pLFooInBhdGgiLHtkOiJNMjc3IDIzM0MyODkgMjI0IDMwNCAyMTkgMzIwIDIxOUMzMzYgMjE5IDM1MSAyMjQgMzYzIDIzMyIsc3Ryb2tlOiIjM2I0MDQ2IixzdHJva2VXaWR0aDoiNCIsc3Ryb2tlTGluZWNhcDoicm91bmQifSldfSl9ZnVuY3Rpb24galEoJCl7bGV0IFE9YGdyaWQvYXBpL2RldmljZS1wbGFjZWhvbGRlci1hc3NldD9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfWA7cmV0dXJuIHR5cGVvZiB3aW5kb3c+InUiP2AvJHtRfWA6ajEoUSl9ZnVuY3Rpb24gQzIoe29wZW46JCx3aWR0aDpRLGNoaWxkcmVuOkosc3R5bGU6WCxzaWRlOks9InJpZ2h0In0pe3JldHVybiBaKCJhc2lkZSIse2NsYXNzTmFtZTpgZml4ZWQgei0zNSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiBiZy1wYW5lbC1iZyB0ZXh0LXdoaXRlLzkwIGJhY2tkcm9wLWJsdXItWzE4cHhdIFtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmXSBbdHJhbnNpdGlvbjp0cmFuc2Zvcm1fMC4yNXNfZWFzZSxvcGFjaXR5XzAuMnNfZWFzZV0gZmxleCBmbGV4LWNvbCAke0s9PT0ibGVmdCI/InRvcC0wIGJvdHRvbS0wIGxlZnQtMCByb3VuZGVkLW5vbmUgYm9yZGVyLTAgYm9yZGVyLXIgYm9yZGVyLXdoaXRlLzEwIHNoYWRvdy1bOHB4XzBfMzJweF9yZ2JhKDAsMCwwLDAuMzUpXSI6InRvcC0zIGJvdHRvbS0zIHJpZ2h0LTMgcm91bmRlZC1bMTRweF0gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCBzaGFkb3ctWzBfMTJweF80MHB4X3JnYmEoMCwwLDAsMC41NSldIn1gLHN0eWxlOnt3aWR0aDpRLHRyYW5zZm9ybTokPyJ0cmFuc2xhdGVYKDApIjpLPT09ImxlZnQiPyJ0cmFuc2xhdGVYKC0xMDAlKSI6InRyYW5zbGF0ZVgoY2FsYygxMDAlICsgMjRweCkpIixvcGFjaXR5OiQ/MTowLHBvaW50ZXJFdmVudHM6JD8iYXV0byI6Im5vbmUiLC4uLlh9LCJhcmlhLWhpZGRlbiI6ISQsY2hpbGRyZW46Sn0pfWZ1bmN0aW9uIE8yKHtjaGlsZHJlbjokLHN0eWxlOlF9KXtyZXR1cm4gWigiaGVhZGVyIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIuNSBweC0yLjUgcHktMS41IHBsLTMiLHN0eWxlOlEsY2hpbGRyZW46JH0pfWZ1bmN0aW9uIEM2KHtjaGlsZHJlbjokfSl7cmV0dXJuIFooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOiR9KX1mdW5jdGlvbiBjNSh7b25DbGljazokLGFyaWFMYWJlbDpRPSJDbG9zZSBwYW5lbCIsdGl0bGU6SixpY29uU2l6ZTpYPTE2fSl7cmV0dXJuIFooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazokLGNsYXNzTmFtZToiZmxleCBoLVszMHB4XSB3LVszMHB4XSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItbm9uZSBiZy10cmFuc3BhcmVudCBwLTAgdGV4dC1bIzhlOGU5M10gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOlEsdGl0bGU6SixjaGlsZHJlbjpaKFYwLHtzaXplOlgsc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gTzYoJCxRKXtsZXRbSixYXT1BKG51bGwpO3JldHVybiBiKCgpPT57aWYoIVF8fCEkKXJldHVybjtsZXQgSz0hMSxZPWFzeW5jKCk9Pnt0cnl7bGV0IEI9YXdhaXQoYXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCk7aWYoIUspWChCKX1jYXRjaHt9fTtZKCk7bGV0IHE9c2V0SW50ZXJ2YWwoWSw1MDAwKTtyZXR1cm4oKT0+e0s9ITAsY2xlYXJJbnRlcnZhbChxKX19LFskLFFdKSxKfWZ1bmN0aW9uIEY2KHtyZXBvcnQ6JH0pe2lmKCEkfHwkLnRvdGFsQnl0ZXM9PT0wKXJldHVybiBudWxsO2xldHtlc3RpbWF0ZWRBZGRpdGlvbmFsOlEsYXZhaWxhYmxlQnl0ZXM6Six0b3RhbEJ5dGVzOlgscnVubmluZ1NpbXVsYXRvcnM6S309JCxZPU1hdGgubWF4KDAsTWF0aC5taW4oMSwxLUovWCkpLHE9SytRLEc9UT09PTA/IiNlNjYiOlE8PTE/IiNlOWExM2IiOiIjM2IzIixCPVk+MC45PyIjZTY2IjpZPjAuNzU/IiNlOWExM2IiOiIjM2IzIjtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBtYXgtdy1mdWxsIG1pbi13LTAgZmxleC1ub3dyYXAgaXRlbXMtY2VudGVyIGdhcC0xLjUgb3ZlcmZsb3ctaGlkZGVuIHdoaXRlc3BhY2Utbm93cmFwIHB4LTIgcHktWzNweF0gcm91bmRlZC1mdWxsIGJnLVsjMTAxMDEwXSBib3JkZXIgYm9yZGVyLVsjMjIyXSBmb250LW1vbm8gdGV4dC1bMTFweF0gdGV4dC13aGl0ZS83MCBsZWFkaW5nLW5vbmUiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLVszcHhdIHNocmluay0wIixzdHlsZTp7YmFja2dyb3VuZDpHfX0pLFooInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgdHJ1bmNhdGUiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2hpbGRyZW46W0ssIi8iLHEsIiBzaW1zIl19KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjoiIMK3ICJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjpbQjYoSiksIiBmcmVlIl19KV19KSxaKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6Im1sLTAuNSB3LTcgaC1bM3B4XSBzaHJpbmstMCBiZy1bIzFjMWMxY10gcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4gaW5saW5lLWJsb2NrIixjaGlsZHJlbjpaKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBoLWZ1bGwgdHJhbnNpdGlvbi1bd2lkdGgsYmFja2dyb3VuZF0gZHVyYXRpb24tMzAwIGVhc2Utb3V0IixzdHlsZTp7d2lkdGg6YCR7KFkqMTAwKS50b0ZpeGVkKDEpfSVgLGJhY2tncm91bmQ6Qn19KX0pXX0pfWZ1bmN0aW9uIE02KHt0eXBlOiQsc2l6ZTpRPTIwLHNjcmVlbk9uOko9ITF9KXtsZXQgWD17d2lkdGg6USxoZWlnaHQ6USx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoxLjYsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O3N3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiBaKCJzdmciLHsuLi5YLGNoaWxkcmVuOltKJiZaKCJyZWN0Iix7eDoiNSIseToiMyIsd2lkdGg6IjE1IixoZWlnaHQ6IjE5IixyeDoiMS42NSIsZmlsbDoiIzQ3YjdmZiIsc3Ryb2tlOiJub25lIiwiZGF0YS10ZXN0aWQiOiJkZXZpY2UtZ2x5cGgtc2NyZWVuLW9uIn0pLFooInJlY3QiLHt4OiI0Iix5OiIyLjUiLHdpZHRoOiIxNiIsaGVpZ2h0OiIxOSIscng6IjIuNSJ9KSxaKCJsaW5lIix7eDE6IjEyIix5MToiMTguNSIseDI6IjEyIix5MjoiMTguNSJ9KV19KTtjYXNlIndhdGNoIjpyZXR1cm4gWigic3ZnIix7Li4uWCxjaGlsZHJlbjpbWigicmVjdCIse3g6IjYuNSIseToiNyIsd2lkdGg6IjExIixoZWlnaHQ6IjEwIixyeDoiMyJ9KSxaKCJwYXRoIix7ZDoiTTguNSA3bC42LTMuMkExLjUgMS41IDAgMCAxIDEwLjYgMi41aDIuOGExLjUgMS41IDAgMCAxIDEuNSAxLjNMMTUuNSA3In0pLFooInBhdGgiLHtkOiJNOC41IDE3bC42IDMuMmExLjUgMS41IDAgMCAwIDEuNSAxLjNoMi44YTEuNSAxLjUgMCAwIDAgMS41LTEuM2wuNi0zLjIifSldfSk7Y2FzZSJ2aXNpb24iOnJldHVybiBaKCJzdmciLHsuLi5YLGNoaWxkcmVuOlooInBhdGgiLHtkOiJNMyAxMWE0IDQgMCAwIDEgNC00aDEwYTQgNCAwIDAgMSA0IDR2Mi41YTIuNSAyLjUgMCAwIDEtMi41IDIuNWMtMS44IDAtMi41LTEuMi0zLjUtMS44LS45LS41LTEuNi0uNy0yLjUtLjdzLTEuNi4yLTIuNS43Yy0xIC42LTEuNyAxLjgtMy41IDEuOEEyLjUgMi41IDAgMCAxIDMgMTMuNXoifSl9KTtkZWZhdWx0OnJldHVybiBaKCJzdmciLHsuLi5YLGNoaWxkcmVuOltKJiZaKCJyZWN0Iix7eDoiNiIseToiMyIsd2lkdGg6IjExIixoZWlnaHQ6IjE5IixyeDoiMiIsZmlsbDoiIzQ3YjdmZiIsc3Ryb2tlOiJub25lIiwiZGF0YS10ZXN0aWQiOiJkZXZpY2UtZ2x5cGgtc2NyZWVuLW9uIn0pLFooInJlY3QiLHt4OiI2LjUiLHk6IjIuNSIsd2lkdGg6IjExIixoZWlnaHQ6IjE5IixyeDoiMi44In0pLFooImxpbmUiLHt4MToiMTAuNSIseTE6IjUiLHgyOiIxMy41Iix5MjoiNSJ9KV19KX19ZnVuY3Rpb24gQTYoe2RldmljZTokLGFjdGl2ZTpRLHN0YXJ0aW5nOkosc2h1dHRpbmdEb3duOlgsb25TZWxlY3Q6SyxvblNodXRkb3duOll9KXtsZXQgcT0kLmhlbHBlcixHPSQuc3RhdGU9PT0iQm9vdGVkIixCPUkwKCQubmFtZSksTj1ONigkLnJ1bnRpbWUpLHo9cT8iU3RyZWFtaW5nIjpKP0c/IlN0YXJ0aW5n4oCmIjoiQm9vdGluZ+KApiI6WD8iU2h1dHRpbmcgZG93buKApiI6Rz8iQm9vdGVkIjpudWxsLFY9cT8iIzM0ZDM5OSI6Rz8iI2U5YTEzYiI6bnVsbCxDPXF8fEcsVT1xP1E/ImJnLVsjMjYzNjRjXSI6ImJnLVsjMjAyYjNhXSI6UT8iYmctd2hpdGUvMTUiOiJiZy13aGl0ZS82IixGPXE/InRleHQtWyNkMmU3ZmZdIjpRPyJ0ZXh0LXdoaXRlLzkwIjoidGV4dC13aGl0ZS81NSI7cmV0dXJuIFooImRpdiIse3JvbGU6ImJ1dHRvbiIsdGFiSW5kZXg6MCwiYXJpYS1wcmVzc2VkIjpRLG9uQ2xpY2s6SyxvbktleURvd246KEwpPT57aWYoTC5rZXk9PT0iRW50ZXIifHxMLmtleT09PSIgIilMLnByZXZlbnREZWZhdWx0KCksSygpfSxjbGFzc05hbWU6YGdyb3VwIHJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yLjUgcHgtMiBweS0xLjUgcm91bmRlZC1sZyBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzXSAke1E/ImJnLXdoaXRlLzEwIHRleHQtd2hpdGUiOiJ0ZXh0LXdoaXRlLzkwIGhvdmVyOmJnLXdoaXRlLzgifWAsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZTpgcmVsYXRpdmUgc2hyaW5rLTAgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS05IHJvdW5kZWQtWzlweF0gb3ZlcmZsb3ctaGlkZGVuICR7VX1gLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOkYsY2hpbGRyZW46WihNNix7dHlwZTpCLHNjcmVlbk9uOkJvb2xlYW4ocSl9KX0pLFYmJiFxJiZaKCJzcGFuIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMC41IHJpZ2h0LTAuNSBzaXplLTEuNSByb3VuZGVkLWZ1bGwgcmluZy0yIHJpbmctWyMxYzFjMWVdIixzdHlsZTp7YmFja2dyb3VuZDpWfX0pXX0pLFooImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InRydW5jYXRlIHRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgbGVhZGluZy10aWdodCIsY2hpbGRyZW46JC5uYW1lfSkseiYmWigiZGl2Iix7Y2xhc3NOYW1lOmB0cnVuY2F0ZSB0ZXh0LVsxMXB4XSBsZWFkaW5nLXRpZ2h0ICR7cT8idGV4dC1bIzM0ZDM5OV0iOlE/InRleHQtd2hpdGUvNzUiOiJ0ZXh0LXdoaXRlLzQ1In1gLGNoaWxkcmVuOnp9KV19KSxaKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2Utcm93LXRyYWlsaW5nLXNsb3QiLGNsYXNzTmFtZToicmVsYXRpdmUgc2hyaW5rLTAgdy04IGgtNiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6YGFic29sdXRlIHJpZ2h0LTAgdGV4dC1bMTFweF0gZm9udC1tb25vIHRhYnVsYXItbnVtcyBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTJzXSAke1E/InRleHQtd2hpdGUvODUiOiJ0ZXh0LXdoaXRlLzQwIn0gJHtDPyJncm91cC1ob3ZlcjpvcGFjaXR5LTAgZ3JvdXAtZm9jdXMtd2l0aGluOm9wYWNpdHktMCI6IiJ9YCxjaGlsZHJlbjpOfSksQyYmWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIix0aXRsZTpYPyJTaHV0dGluZyBkb3du4oCmIjoiU2h1dCBkb3duIHNpbXVsYXRvciIsImFyaWEtbGFiZWwiOiJTaHV0IGRvd24gc2ltdWxhdG9yIixvbkNsaWNrOihMKT0+e0wucHJldmVudERlZmF1bHQoKSxMLnN0b3BQcm9wYWdhdGlvbigpLFkoKX0sZGlzYWJsZWQ6WCxjbGFzc05hbWU6YGFic29sdXRlIHJpZ2h0LTAgdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtNSByb3VuZGVkLW1kIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCBmb2N1cy12aXNpYmxlOm9wYWNpdHktMTAwIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xMnMsYmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gJHtRPyJ0ZXh0LXdoaXRlLzgwIGhvdmVyOmJnLXdoaXRlLzIwIjoidGV4dC13aGl0ZS83MCBob3ZlcjpiZy13aGl0ZS8xMiBob3Zlcjp0ZXh0LXdoaXRlIn1gLGNoaWxkcmVuOlooVjAse3NpemU6MTMsc3Ryb2tlV2lkdGg6Mi4yfSl9KV19KV19KX12YXIgRjI9InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZykiLHQzPSJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmctdHJhbnNwYXJlbnQpIjt2YXIgdlE9MTI7ZnVuY3Rpb24gazYoe29wZW46JCxvbkNsb3NlOlEsd2lkdGg6SixzaWRlOlg9InJpZ2h0IixkZXZpY2VzOkssdG90YWw6WT0wLGhhc01vcmU6cT0hMSxvbkxvYWRNb3JlOkcsb25Mb2FkQWxsOkIsb25SZXNldFBhZ2U6TixzZWxlY3RlZFVkaWQ6eixvblNlbGVjdDpWLHN0YXJ0aW5nOkMsc2h1dHRpbmdEb3duOlUsb25TaHV0ZG93bjpGfSl7bGV0IEg9KHR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDp3aW5kb3cuX19TSU1fUFJFVklFV19fKT8uZ3JpZE1lbW9yeUVuZHBvaW50Pz8odHlwZW9mIHdpbmRvdz4idSI/dm9pZCAwOmoxKCJncmlkL2FwaS9tZW1vcnkiKSksTz1PNihILCQpLFtrLEldPUEoIiIpLHc9RTEoKCk9PntsZXQgaD1rLnRyaW0oKS50b0xvd2VyQ2FzZSgpO2lmKCFofHwhSylyZXR1cm4gSztyZXR1cm4gSy5maWx0ZXIoKGwpPT5sLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhoKXx8dTUobC5ydW50aW1lKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgpKX0sW0ssa10pLFA9VCghMSk7YigoKT0+e2xldCBoPSEhay50cmltKCk7aWYoaCYmcSlCPy4oKTtlbHNlIGlmKCFoJiZQLmN1cnJlbnQpTj8uKCk7UC5jdXJyZW50PWh9LFtrLHEsQixOXSk7bGV0IHg9VChudWxsKTtyZXR1cm4gWihDMix7b3BlbjokLHdpZHRoOkosc2lkZTpYLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6RjJ9LGNoaWxkcmVuOltaKE8yLHtzdHlsZTp7anVzdGlmeUNvbnRlbnQ6ImZsZXgtc3RhcnQiLHBhZGRpbmdMZWZ0OjE2LHBhZGRpbmdUb3A6MTYsZ2FwOjR9LGNoaWxkcmVuOltaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6USxjbGFzc05hbWU6ImZsZXggaC1bMzBweF0gdy1bMzBweF0gc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyLW5vbmUgYmctdHJhbnNwYXJlbnQgdGV4dC1bIzhlOGU5M10gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJDbG9zZSBkZXZpY2VzIHNpZGViYXIiLCJhcmlhLXByZXNzZWQiOiEwLHRpdGxlOiJEZXZpY2VzIixjaGlsZHJlbjpaKGIwLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLFoobTUse30pXX0pLFooImRpdiIse2NsYXNzTmFtZToicHgtNCBwYi0yIHB0LTAuNSBzaHJpbmstMCIsY2hpbGRyZW46WigibGFiZWwiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTIuNSBoLTggcm91bmRlZC1sZyBiZy13aGl0ZS82IGZvY3VzLXdpdGhpbjpiZy13aGl0ZS8xMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzXSIsY2hpbGRyZW46W1ooYzIse3NpemU6MTQsc3Ryb2tlV2lkdGg6MixjbGFzc05hbWU6InRleHQtd2hpdGUvNDAgc2hyaW5rLTAifSksWigiaW5wdXQiLHt2YWx1ZTprLG9uQ2hhbmdlOihoKT0+SShoLnRhcmdldC52YWx1ZSkscGxhY2Vob2xkZXI6IlNlYXJjaCIsY2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSBvdXRsaW5lLW5vbmUgdGV4dC1bMTNweF0gdGV4dC13aGl0ZS85MCBwbGFjZWhvbGRlcjp0ZXh0LXdoaXRlLzQwIn0pLGsmJlooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsImFyaWEtbGFiZWwiOiJDbGVhciBzZWFyY2giLG9uQ2xpY2s6KCk9PkkoIiIpLGNsYXNzTmFtZToic2hyaW5rLTAgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS00IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS8xNSB0ZXh0LXdoaXRlLzcwIGhvdmVyOmJnLXdoaXRlLzI1IixjaGlsZHJlbjpaKFYwLHtzaXplOjksc3Ryb2tlV2lkdGg6M30pfSldfSl9KSxaKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGZsZXgtMSBtaW4taC0wIixjaGlsZHJlbjpbWigiZGl2Iix7cmVmOngsb25TY3JvbGw6KCk9PntpZihrLnRyaW0oKXx8IXF8fCFHKXJldHVybjtsZXQgaD14LmN1cnJlbnQ7aWYoIWgpcmV0dXJuO2lmKGguc2Nyb2xsVG9wK2guY2xpZW50SGVpZ2h0Pj1oLnNjcm9sbEhlaWdodC0yNDApRygpfSxjbGFzc05hbWU6ImgtZnVsbCBtaW4taC0wIG92ZXJmbG93LXktYXV0byBweC00IHB5LTIgW3Njcm9sbGJhci13aWR0aDp0aGluXSIsY2hpbGRyZW46dz09PW51bGw/WihSUSx7fSk6dy5sZW5ndGg9PT0wP1ooImRpdiIse2NsYXNzTmFtZToicHgtMiBweS02IHRleHQtd2hpdGUvNDAgdGV4dC1bMTJweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOms/Ik5vIG1hdGNoaW5nIHNpbXVsYXRvcnMuIjoiTm8gaU9TIHNpbXVsYXRvcnMgYXZhaWxhYmxlLiJ9KTpaKFoxLHtjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJwdC0xIHBiLTEgdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzQwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIixjaGlsZHJlbjoiQXZhaWxhYmxlIn0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IHBiLTEiLGNoaWxkcmVuOncubWFwKChoKT0+WihBNix7ZGV2aWNlOmgsYWN0aXZlOmguZGV2aWNlPT09eixzdGFydGluZzohIUNbaC5kZXZpY2VdLHNodXR0aW5nRG93bjohIVVbaC5kZXZpY2VdLG9uU2VsZWN0OigpPT5WKGguZGV2aWNlKSxvblNodXRkb3duOigpPT5GKGguZGV2aWNlKX0saC5kZXZpY2UpKX0pLCFrJiZxJiZaKCJkaXYiLHtjbGFzc05hbWU6InB4LTIgcHktMiB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzM1IHRleHQtY2VudGVyIixjaGlsZHJlbjpLP2Ake0subGVuZ3RofSBvZiAke1l9YDpudWxsfSldfSl9KSxaKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2UtbGlzdC10b3AtZmFkZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNnB4XSBwb2ludGVyLWV2ZW50cy1ub25lIixzdHlsZTp7YmFja2dyb3VuZDpgbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgJHtGMn0gMCUsICR7dDN9IDEwMCUpYH19KSxaKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2UtbGlzdC1ib3R0b20tZmFkZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNnB4XSBwb2ludGVyLWV2ZW50cy1ub25lIixzdHlsZTp7YmFja2dyb3VuZDpgbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgJHtGMn0gMCUsICR7dDN9IDEwMCUpYH19KV19KSxaKGdRLHtyZXBvcnQ6T30pXX0pfWZ1bmN0aW9uIFJRKCl7cmV0dXJuIFooWjEse2NoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InB4LTIgcHQtMSBwYi0xIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS80MCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSIsY2hpbGRyZW46IkF2YWlsYWJsZSJ9KSxaKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2UtbGlzdC1za2VsZXRvbiIsY2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgcGItMSIsImFyaWEtbGFiZWwiOiJMb2FkaW5nIHNpbXVsYXRvcnMiLCJhcmlhLWJ1c3kiOiJ0cnVlIixjaGlsZHJlbjpBcnJheS5mcm9tKHtsZW5ndGg6dlF9LCgkLFEpPT5aKGhRLHtpbmRleDpRfSxRKSl9KV19KX1mdW5jdGlvbiBoUSh7aW5kZXg6JH0pe2xldCBRPVsidy1bNjIlXSIsInctWzc0JV0iLCJ3LVs1OCVdIiwidy1bNzAlXSJdWyQlNF0sSj1bInctWzQyJV0iLCJ3LVszNiVdIiwidy1bNDglXSIsInctWzMyJV0iXVskJTRdLFg9WyJ3LTciLCJ3LTYiLCJ3LTgiXVskJTNdO3JldHVybiBaKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2Utcm93LXNrZWxldG9uIixjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yLjUgcHgtMiBweS0xLjUgcm91bmRlZC1sZyBzZWxlY3Qtbm9uZSIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgc2hyaW5rLTAgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS05IHJvdW5kZWQtWzlweF0gb3ZlcmZsb3ctaGlkZGVuIGJnLXdoaXRlLzYiLGNoaWxkcmVuOlooInNwYW4iLHtjbGFzc05hbWU6InNpemUtNCByb3VuZGVkLVs0cHhdIGJnLXdoaXRlL1swLjEyXSJ9KX0pLFooImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgZmxleCBmbGV4LWNvbCBnYXAtMS41IixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZTpgaC0zIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4xMl0gJHtRfWB9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOmBoLTIuNSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdICR7Sn1gfSldfSksWigic3BhbiIse2NsYXNzTmFtZTpgc2hyaW5rLTAgaC0yLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSAke1h9YH0pXX0pfWZ1bmN0aW9uIGdRKHtyZXBvcnQ6JH0pe2lmKCEkfHwkLnRvdGFsQnl0ZXM8PTApcmV0dXJuIG51bGw7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToic2hyaW5rLTAgbWluLXctMCBvdmVyZmxvdy1oaWRkZW4gcHgtMyBweS0yIGZsZXgganVzdGlmeS1jZW50ZXIiLGNoaWxkcmVuOlooRjYse3JlcG9ydDokfSl9KX1mdW5jdGlvbiBvNSh7cGFuZWxXaWR0aDokLHZpc2libGU6USxvblBvaW50ZXJEb3duOkosYXJpYUxhYmVsOlgsc2lkZTpLPSJyaWdodCJ9KXtsZXRbWSxxXT1BKCExKSxbRyxCXT1BKCExKSxOPVl8fEcsej0oSz09PSJsZWZ0Ij8wOjEyKSskLTk7cmV0dXJuIFooImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImFyaWEtbGFiZWwiOlgsImFyaWEtaGlkZGVuIjohUSxvblBvaW50ZXJEb3duOihDKT0+e0IoITApLEooQyl9LG9uUG9pbnRlclVwOigpPT5CKCExKSxvblBvaW50ZXJDYW5jZWw6KCk9PkIoITEpLG9uUG9pbnRlckVudGVyOigpPT5xKCEwKSxvblBvaW50ZXJMZWF2ZTooKT0+cSghMSksY2xhc3NOYW1lOmBmaXhlZCAke0s9PT0ibGVmdCI/InRvcC0wIGJvdHRvbS0wIjoidG9wLTMgYm90dG9tLTMifSB3LTQgei0zNiBjdXJzb3ItY29sLXJlc2l6ZSB0b3VjaC1ub25lIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDAgJHtRPyJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIjoib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUifWAsc3R5bGU6Sz09PSJsZWZ0Ij97bGVmdDp6fTp7cmlnaHQ6en0sY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTAgYm90dG9tLTAgbGVmdC0xLzIgdy1weCBwb2ludGVyLWV2ZW50cy1ub25lIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0xNTAgJHtOPyJvcGFjaXR5LTEwMCI6Im9wYWNpdHktMCJ9YCxzdHlsZTp7dHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC0wLjVweCkiLGJhY2tncm91bmQ6ImxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMjU1LDI1NSwyNTUsMCkgMCUsIHJnYmEoMjU1LDI1NSwyNTUsMC4yOCkgMzAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDcwJSwgcmdiYSgyNTUsMjU1LDI1NSwwKSAxMDAlKSJ9fSksWigiZGl2Iix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtMS8yIGxlZnQtMS8yIHctMSBoLTcgcm91bmRlZC14cyAtdHJhbnNsYXRlLXgtMS8yIC10cmFuc2xhdGUteS0xLzIgei0xIHBvaW50ZXItZXZlbnRzLW5vbmUgW3RyYW5zaXRpb246b3BhY2l0eV8wLjE1c19lYXNlLGJhY2tncm91bmRfMC4xNXNfZWFzZV0gJHtOPyJvcGFjaXR5LTEwMCI6Im9wYWNpdHktMCJ9ICR7Rz8iYmctWyM5YTlhOWVdIjoiYmctWyM2ZTZlNzJdIn1gfSldfSl9ZnVuY3Rpb24gVzYoKXtsZXRbJCxRXT1BKCgpPT50eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1hdGNoTWVkaWE/LigiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4gYigoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBKPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb250cmFzdDogbW9yZSkiKSxYPSgpPT5RKEoubWF0Y2hlcyk7cmV0dXJuIFgoKSxKLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWCksKCk9PkoucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixYKX0sW10pLCR9ZnVuY3Rpb24gaTUoKXtsZXRbJCxRXT1BKCgpPT50eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1hdGNoTWVkaWE/LigiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzPT09ITApO3JldHVybiBiKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fCF3aW5kb3cubWF0Y2hNZWRpYSlyZXR1cm47bGV0IEo9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIiksWD0oKT0+UShKLm1hdGNoZXMpO3JldHVybiBYKCksSi5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFgpLCgpPT5KLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWCl9LFtdKSwkfXZhciBfNj0yODA7dmFyIGUzPSJ3aWR0aCA3MG1zIGxpbmVhciIsJDg9IndpZHRoIDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIsRDY9InBhZGRpbmctcmlnaHQgMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpIixQNj0iY3ViaWMtYmV6aWVyKDAuMiwgMC44MiwgMC4yMiwgMSkiLHI1PSJjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIixUNj0ibGluZWFyKDAsIDAuMzIgOSUsIDAuNjIgMTglLCAwLjg1IDI3JSwgMS4wMSAzNiUsIDEuMDcgNDUlLCAxLjA1IDU2JSwgMS4wMiA3MCUsIDEpIixFNj0iMC4xNnMiLHc2PSIwLjJzIixJNj01LGI2PXtpZGxlOjEsaG92ZXI6MS4wOSxkcmFnOjEuMTJ9LHk2PXtpZGxlOiIjNjg2ZTc4Iixob3ZlcjoiI2I3YmJjMiIsZHJhZzoiI2Y0ZjZmYSJ9LFM2PXtpZGxlOjIuNjUsaG92ZXI6NC4xNSxkcmFnOjQuNjV9LHg2PXtpZGxlOjAuMzgsaG92ZXI6MC44NixkcmFnOjF9LG41PW51bGw7ZnVuY3Rpb24gajYoKXtpZihuNSE9bnVsbClyZXR1cm4gbjU7aWYodHlwZW9mIENTUz4idSJ8fHR5cGVvZiBDU1Muc3VwcG9ydHMhPT0iZnVuY3Rpb24iKXJldHVybiExO3JldHVybiBuNT1DU1Muc3VwcG9ydHMoImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iLCJsaW5lYXIoMCwgMSkiKSxuNX12YXIgZlE9NDAsdjY9MTQsUjY9MjQwLGg2PTMwLGc2PTAuMTUsbVE9ODAsZjY9MTUwLG02PTI1MCxROD0ic2VydmUtc2ltOnNpbXVsYXRvci1mcmFtZS1zY2FsZSI7ZnVuY3Rpb24gSjgoJCxRLEosWCl7bGV0IEs9JCozLFk9UT4wP01hdGgubWF4KDE4MCxRLTQ4KTpLLHE9Sj4wJiZOdW1iZXIuaXNGaW5pdGUoWCkmJlg+MD9NYXRoLm1heCgxODAsKEotMTM2KSpYKTpLO3JldHVybiBNYXRoLm1heCgxODAsTWF0aC5taW4oSyxZLHEpKX1mdW5jdGlvbiBlMCgkLFEsSixYLEspe2xldCBZPUo4KFEsSixYLEspLHE9TWF0aC5taW4oMjgwLFkpO3JldHVybiBNYXRoLm1pbihZLE1hdGgubWF4KHEsJCkpfWZ1bmN0aW9uIHA2KCQsUSxKLFgsSyl7bGV0IFk9TnVtYmVyLmlzRmluaXRlKEspPyQqSzokO3JldHVybiBlMChZLCQsUSxKLFgpfWZ1bmN0aW9uIGE1KCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCkpcmV0dXJuICQ7bGV0IFE9dHlwZW9mIHdpbmRvdzwidSI/TWF0aC5tYXgoMSx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSk6MTtyZXR1cm4gTWF0aC5yb3VuZCgkKlEpL1F9ZnVuY3Rpb24gWjgoJCxRKXtpZigkPD0wfHxRPD0wKXJldHVybiAwO2xldCBKPTAuNTUsWD0kKlEqSi8oUStKKiQpO3JldHVybiBNYXRoLm1pbihmUSxYKX1mdW5jdGlvbiB1NigkLFEsSil7bGV0IFg9JCxLPUo7Zm9yKGxldCBZIG9mIFEpe2xldCBxPU1hdGguYWJzKCQtWSk7aWYocTxLKVg9WSxLPXF9cmV0dXJuIFh9ZnVuY3Rpb24gbDYoJCl7bGV0e2Zyb206USx0bzpKLHZlbG9jaXR5Olgsc3RpZmZuZXNzOkssZGFtcGluZzpZLG9uVXBkYXRlOnEsb25Db21wbGV0ZTpHfT0kLEI9MC40LE49MC4wMzMzMzMzMzMzMzMzMzMzMyx6PVEsVj1YLEM9cGVyZm9ybWFuY2Uubm93KCksVT0wLEY9ITEsTD0oSCk9PntpZihGKXJldHVybjtsZXQgTz1NYXRoLm1pbigoSC1DKS8xMDAwLDAuMDMzMzMzMzMzMzMzMzMzMzMpO0M9SDtsZXQgaz0tSyooei1KKS1ZKlY7aWYoVis9aypPLHorPVYqTyxNYXRoLmFicyhWKTwwLjQmJk1hdGguYWJzKHotSik8MC40KXtxKEopLEc/LigpO3JldHVybn1xKHopLFU9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEwpfTtyZXR1cm4gVT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCksKCk9PntpZihGPSEwLFUpY2FuY2VsQW5pbWF0aW9uRnJhbWUoVSl9fWZ1bmN0aW9uIGQ2KCQpe2lmKCQubGVuZ3RoPDIpcmV0dXJuIDA7bGV0IFE9JFskLmxlbmd0aC0xXSxKPSRbMF07Zm9yKGxldCBLPSQubGVuZ3RoLTE7Sz49MDtLLS0paWYoUS50LSRbS10udD49bVEpe0o9JFtLXTticmVha31sZXQgWD0oUS50LUoudCkvMTAwMDtyZXR1cm4gWD4wPyhRLngtSi54KS9YOjB9dmFyIGM2PSJkcm9wLXNoYWRvdygwIDAuNXB4IDFweCByZ2JhKDAsMCwwLDAuMSkpIGRyb3Atc2hhZG93KDAgMnB4IDVweCByZ2JhKDAsMCwwLDAuMTMpKSI7ZnVuY3Rpb24gcFEoe2FyYzokLHBoYXNlOlEscmVkdWNlZE1vdGlvbjpKLGhpZ2hDb250cmFzdDpYLGZvY3VzVmlzaWJsZTpLfSl7bGV0IFk9USE9PSJpZGxlIixxPVg/MS4xMjoxLEc9Sj8xOmI2W1FdLEI9UzZbUV0qcSxOPVg/MTp4NltRXSx6PVk/RTY6dzYsVj1ZP1A2OnI1LEM9WSYmajYoKT9UNjpWLFU9Sj8ibm9uZSI6YHRyYW5zZm9ybSAke3p9ICR7Q31gLEY9Sj8ibm9uZSI6YHN0cm9rZSAke3p9ICR7Vn0sIHN0cm9rZS13aWR0aCAke3p9ICR7Vn1gLEw9JC52aWV3Qm94U2l6ZSxIPSQuZCxPPXt0cmFuc2Zvcm06YHRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZSgke0d9KWAsdHJhbnNmb3JtT3JpZ2luOiIxMDAlIDEwMCUiLHRyYW5zaXRpb246VSx3aWxsQ2hhbmdlOko/dm9pZCAwOiJ0cmFuc2Zvcm0iLGJhY2tmYWNlVmlzaWJpbGl0eToiaGlkZGVuIixXZWJraXRCYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiJ9O3JldHVybiBaKCJzdmciLHt3aWR0aDpMLGhlaWdodDpMLHZpZXdCb3g6YDAgMCAke0x9ICR7TH1gLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsc2hhcGVSZW5kZXJpbmc6Imdlb21ldHJpY1ByZWNpc2lvbiIsc3R5bGU6e2Rpc3BsYXk6ImJsb2NrIixvdmVyZmxvdzoidmlzaWJsZSIsY3Vyc29yOiJpbmhlcml0Iix0b3VjaEFjdGlvbjoibm9uZSIscG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOltaKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6e3BvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbWigicGF0aCIse2Q6SCxmaWxsOiJub25lIixzdHJva2U6InJnYmEoMTAsIDEzMiwgMjU1LCAwLjk1KSIsc3Ryb2tlV2lkdGg6KEk2KjIrNikqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Oks/MC45NTowLHRyYW5zaXRpb246Sj8ib3BhY2l0eSA4MG1zIGxpbmVhciI6YG9wYWNpdHkgMjAwbXMgJHtyNX1gLGZpbHRlcjoiZHJvcC1zaGFkb3coMCAwIDJweCByZ2JhKDEwLDEzMiwyNTUsMC41NSkpIGRyb3Atc2hhZG93KDAgMCA0cHggcmdiYSgxMCwxMzIsMjU1LDAuMzIpKSJ9fSksWigicGF0aCIse2Q6SCxmaWxsOiJub25lIixzdHJva2U6InJnYmEoMjU1LDI1NSwyNTUsMC45NSkiLHN0cm9rZVdpZHRoOjEuNSpxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6Sz8wLjc6MCx0cmFuc2l0aW9uOko/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7cjV9YH19KV19KSxaKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6TyxjaGlsZHJlbjpaKCJnIix7c3R5bGU6e3BvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbWigicGF0aCIse2Q6SCxzdHJva2U6IiMzNDM2M2IiLHN0cm9rZVdpZHRoOkIrMi4yKnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpNYXRoLm1pbigxLE4rMC4wOCksdHJhbnNpdGlvbjpgJHtGfSwgb3BhY2l0eSAke3p9ICR7Vn1gLGZpbHRlcjpjNn19KSxaKCJwYXRoIix7ZDpILHN0cm9rZTp5NltRXSxzdHJva2VXaWR0aDpCLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6Tix0cmFuc2l0aW9uOmAke0Z9LCBvcGFjaXR5ICR7en0gJHtWfWAsZmlsdGVyOmM2fX0pXX0pfSldfSl9ZnVuY3Rpb24gbzYoe3NpbXVsYXRvclJlc2l6ZTokLGRldmljZVR5cGU6USxzdHJlYW1Db25maWc6Sixjb250YWluZXJXaWR0aDpYLGNvbnRhaW5lckhlaWdodDpLfSl7bGV0IFk9aTUoKSxxPVc2KCksW0csQl09QSghMSksTj1FMSgoKT0+aDMoe3R5cGU6USxjb25maWc6Sj8/bnVsbCxjb250YWluZXJXaWR0aDpYLGNvbnRhaW5lckhlaWdodDpLfSksW1EsSixYLEtdKSx6PSQuaXNSZXNpemluZ3x8JC5pc0luZXJ0aWE/ImRyYWciOiQuaGFuZGxlSG92ZXJlZD8iaG92ZXIiOiJpZGxlIjtyZXR1cm4gWigiZGl2Iix7cm9sZToic2VwYXJhdG9yIiwiYXJpYS1sYWJlbCI6IlJlc2l6ZSBzaW11bGF0b3Igd2lkdGguIERyYWcgdGhlIGNvcm5lciBvciB1c2UgTGVmdCBhbmQgUmlnaHQgQXJyb3cga2V5czsgaG9sZCBTaGlmdCBmb3IgbGFyZ2VyIHN0ZXBzLiIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImFyaWEtdmFsdWVtaW4iOk1hdGgucm91bmQoJC5taW5XaWR0aCksImFyaWEtdmFsdWVtYXgiOk1hdGgucm91bmQoJC5tYXhXaWR0aCksImFyaWEtdmFsdWVub3ciOk1hdGgucm91bmQoJC5jb21taXR0ZWRXaWR0aCksdGFiSW5kZXg6MCxyZWY6JC5oYW5kbGVSZWYsb25LZXlEb3duOiQub25LZXlEb3duLG9uUG9pbnRlckRvd246JC5vblBvaW50ZXJEb3duLG9uUG9pbnRlck1vdmU6JC5vblBvaW50ZXJNb3ZlLG9uUG9pbnRlclVwOiQub25Qb2ludGVyRW5kLG9uUG9pbnRlckNhbmNlbDokLm9uUG9pbnRlckVuZCxvbkxvc3RQb2ludGVyQ2FwdHVyZTokLm9uUG9pbnRlckVuZCxvblBvaW50ZXJFbnRlcjooKT0+JC5zZXRIYW5kbGVIb3ZlcmVkKCEwKSxvblBvaW50ZXJMZWF2ZTooKT0+JC5zZXRIYW5kbGVIb3ZlcmVkKCExKSxvbkZvY3VzOihWKT0+e0IoVi5jdXJyZW50VGFyZ2V0Lm1hdGNoZXM/LigiOmZvY3VzLXZpc2libGUiKT8/ITEpfSxvbkJsdXI6KCk9PkIoITEpLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLHJpZ2h0Oi0xNCxib3R0b206LTE0LHdpZHRoOjYwLGhlaWdodDo2MCxib3JkZXI6Im5vbmUiLHBhZGRpbmc6MCxtYXJnaW46MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJmbGV4LWVuZCIsanVzdGlmeUNvbnRlbnQ6ImZsZXgtZW5kIixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsY3Vyc29yOiJud3NlLXJlc2l6ZSIsdG91Y2hBY3Rpb246Im5vbmUiLHBvaW50ZXJFdmVudHM6ImF1dG8iLG91dGxpbmU6Im5vbmUiLHpJbmRleDoyNSxXZWJraXRUYXBIaWdobGlnaHRDb2xvcjoidHJhbnNwYXJlbnQifSxjaGlsZHJlbjpaKHBRLHthcmM6TixwaGFzZTp6LHJlZHVjZWRNb3Rpb246WSxoaWdoQ29udHJhc3Q6cSxmb2N1c1Zpc2libGU6R30pfSl9ZnVuY3Rpb24gdVEoJCl7aWYoISR8fHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuO2xldCBRPWRvY3VtZW50LmhlYWR8fGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0sSj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO0oudHlwZT0idGV4dC9jc3MiLFEuYXBwZW5kQ2hpbGQoSiksSi5zdHlsZVNoZWV0P0ouc3R5bGVTaGVldC5jc3NUZXh0PSQ6Si5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgkKSl9dmFyIGxRPSgkKT0+e3N3aXRjaCgkKXtjYXNlInN1Y2Nlc3MiOnJldHVybiBvUTtjYXNlImluZm8iOnJldHVybiBuUTtjYXNlIndhcm5pbmciOnJldHVybiBpUTtjYXNlImVycm9yIjpyZXR1cm4gclE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19LGRRPUFycmF5KDEyKS5maWxsKDApLGNRPSh7dmlzaWJsZTokLGNsYXNzTmFtZTpRfSk9PntyZXR1cm4gZi5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6WyJzb25uZXItbG9hZGluZy13cmFwcGVyIixRXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpLCJkYXRhLXZpc2libGUiOiR9LGYuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzb25uZXItc3Bpbm5lciJ9LGRRLm1hcCgoSixYKT0+Zi5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InNvbm5lci1sb2FkaW5nLWJhciIsa2V5OmBzcGlubmVyLWJhci0ke1h9YH0pKSkpfSxvUT1mLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDIwIDIwIixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGYuY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTAgMThhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnptMy44NTctOS44MDlhLjc1Ljc1IDAgMDAtMS4yMTQtLjg4MmwtMy40ODMgNC43OS0xLjg4LTEuODhhLjc1Ljc1IDAgMTAtMS4wNiAxLjA2MWwyLjUgMi41YS43NS43NSAwIDAwMS4xMzctLjA4OWw0LTUuNXoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxpUT1mLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGhlaWdodDoiMjAiLHdpZHRoOiIyMCJ9LGYuY3JlYXRlRWxlbWVudCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNOS40MDEgMy4wMDNjMS4xNTUtMiA0LjA0My0yIDUuMTk3IDBsNy4zNTUgMTIuNzQ4YzEuMTU0IDItLjI5IDQuNS0yLjU5OSA0LjVINC42NDVjLTIuMzA5IDAtMy43NTItMi41LTIuNTk4LTQuNUw5LjQgMy4wMDN6TTEyIDguMjVhLjc1Ljc1IDAgMDEuNzUuNzV2My43NWEuNzUuNzUgMCAwMS0xLjUgMFY5YS43NS43NSAwIDAxLjc1LS43NXptMCA4LjI1YS43NS43NSAwIDEwMC0xLjUuNzUuNzUgMCAwMDAgMS41eiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLG5RPWYuY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjAgMjAiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0sZi5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0xOCAxMGE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTctNGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6TTkgOWEuNzUuNzUgMCAwMDAgMS41aC4yNTNhLjI1LjI1IDAgMDEuMjQ0LjMwNGwtLjQ1OSAyLjA2NkExLjc1IDEuNzUgMCAwMDEwLjc0NyAxNUgxMWEuNzUuNzUgMCAwMDAtMS41aC0uMjUzYS4yNS4yNSAwIDAxLS4yNDQtLjMwNGwuNDU5LTIuMDY2QTEuNzUgMS43NSAwIDAwOS4yNTMgOUg5eiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLHJRPWYuY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjAgMjAiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0sZi5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0xOCAxMGE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTgtNWEuNzUuNzUgMCAwMS43NS43NXY0LjVhLjc1Ljc1IDAgMDEtMS41IDB2LTQuNUEuNzUuNzUgMCAwMTEwIDV6bTAgMTBhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksYVE9Zi5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOiIxMiIsaGVpZ2h0OiIxMiIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9LGYuY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSksZi5jcmVhdGVFbGVtZW50KCJsaW5lIix7eDE6IjYiLHkxOiI2Iix4MjoiMTgiLHkyOiIxOCJ9KSksc1E9KCk9PntsZXRbJCxRXT1mLnVzZVN0YXRlKGRvY3VtZW50LmhpZGRlbik7cmV0dXJuIGYudXNlRWZmZWN0KCgpPT57bGV0IEo9KCk9PntRKGRvY3VtZW50LmhpZGRlbil9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixKKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEopfSxbXSksJH0sWDg9MTtjbGFzcyByNntjb25zdHJ1Y3Rvcigpe3RoaXMuc3Vic2NyaWJlPSgkKT0+e3JldHVybiB0aGlzLnN1YnNjcmliZXJzLnB1c2goJCksKCk9PntsZXQgUT10aGlzLnN1YnNjcmliZXJzLmluZGV4T2YoJCk7dGhpcy5zdWJzY3JpYmVycy5zcGxpY2UoUSwxKX19LHRoaXMucHVibGlzaD0oJCk9Pnt0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKFEpPT5RKCQpKX0sdGhpcy5hZGRUb2FzdD0oJCk9Pnt0aGlzLnB1Ymxpc2goJCksdGhpcy50b2FzdHM9Wy4uLnRoaXMudG9hc3RzLCRdfSx0aGlzLmNyZWF0ZT0oJCk9Pnt2YXIgUTtsZXR7bWVzc2FnZTpKLC4uLlh9PSQsSz10eXBlb2YoJD09bnVsbD92b2lkIDA6JC5pZCk9PT0ibnVtYmVyInx8KChRPSQuaWQpPT1udWxsP3ZvaWQgMDpRLmxlbmd0aCk+MD8kLmlkOlg4KyssWT10aGlzLnRvYXN0cy5maW5kKChHKT0+e3JldHVybiBHLmlkPT09S30pLHE9JC5kaXNtaXNzaWJsZT09PXZvaWQgMD8hMDokLmRpc21pc3NpYmxlO2lmKHRoaXMuZGlzbWlzc2VkVG9hc3RzLmhhcyhLKSl0aGlzLmRpc21pc3NlZFRvYXN0cy5kZWxldGUoSyk7aWYoWSl0aGlzLnRvYXN0cz10aGlzLnRvYXN0cy5tYXAoKEcpPT57aWYoRy5pZD09PUspcmV0dXJuIHRoaXMucHVibGlzaCh7Li4uRywuLi4kLGlkOkssdGl0bGU6Sn0pLHsuLi5HLC4uLiQsaWQ6SyxkaXNtaXNzaWJsZTpxLHRpdGxlOkp9O3JldHVybiBHfSk7ZWxzZSB0aGlzLmFkZFRvYXN0KHt0aXRsZTpKLC4uLlgsZGlzbWlzc2libGU6cSxpZDpLfSk7cmV0dXJuIEt9LHRoaXMuZGlzbWlzcz0oJCk9PntpZigkKXRoaXMuZGlzbWlzc2VkVG9hc3RzLmFkZCgkKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCgoUSk9PlEoe2lkOiQsZGlzbWlzczohMH0pKSk7ZWxzZSB0aGlzLnRvYXN0cy5mb3JFYWNoKChRKT0+e3RoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCgoSik9Pkooe2lkOlEuaWQsZGlzbWlzczohMH0pKX0pO3JldHVybiAkfSx0aGlzLm1lc3NhZ2U9KCQsUSk9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLlEsbWVzc2FnZTokfSl9LHRoaXMuZXJyb3I9KCQsUSk9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLlEsbWVzc2FnZTokLHR5cGU6ImVycm9yIn0pfSx0aGlzLnN1Y2Nlc3M9KCQsUSk9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLlEsdHlwZToic3VjY2VzcyIsbWVzc2FnZTokfSl9LHRoaXMuaW5mbz0oJCxRKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uUSx0eXBlOiJpbmZvIixtZXNzYWdlOiR9KX0sdGhpcy53YXJuaW5nPSgkLFEpPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5RLHR5cGU6Indhcm5pbmciLG1lc3NhZ2U6JH0pfSx0aGlzLmxvYWRpbmc9KCQsUSk9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLlEsdHlwZToibG9hZGluZyIsbWVzc2FnZTokfSl9LHRoaXMucHJvbWlzZT0oJCxRKT0+e2lmKCFRKXJldHVybjtsZXQgSj12b2lkIDA7aWYoUS5sb2FkaW5nIT09dm9pZCAwKUo9dGhpcy5jcmVhdGUoey4uLlEscHJvbWlzZTokLHR5cGU6ImxvYWRpbmciLG1lc3NhZ2U6US5sb2FkaW5nLGRlc2NyaXB0aW9uOnR5cGVvZiBRLmRlc2NyaXB0aW9uIT09ImZ1bmN0aW9uIj9RLmRlc2NyaXB0aW9uOnZvaWQgMH0pO2xldCBYPVByb21pc2UucmVzb2x2ZSgkIGluc3RhbmNlb2YgRnVuY3Rpb24/JCgpOiQpLEs9SiE9PXZvaWQgMCxZLHE9WC50aGVuKGFzeW5jKEIpPT57aWYoWT1bInJlc29sdmUiLEJdLGYuaXNWYWxpZEVsZW1lbnQoQikpSz0hMSx0aGlzLmNyZWF0ZSh7aWQ6Six0eXBlOiJkZWZhdWx0IixtZXNzYWdlOkJ9KTtlbHNlIGlmKGVRKEIpJiYhQi5vayl7Sz0hMTtsZXQgej10eXBlb2YgUS5lcnJvcj09PSJmdW5jdGlvbiI/YXdhaXQgUS5lcnJvcihgSFRUUCBlcnJvciEgc3RhdHVzOiAke0Iuc3RhdHVzfWApOlEuZXJyb3IsVj10eXBlb2YgUS5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgUS5kZXNjcmlwdGlvbihgSFRUUCBlcnJvciEgc3RhdHVzOiAke0Iuc3RhdHVzfWApOlEuZGVzY3JpcHRpb24sVT10eXBlb2Ygej09PSJvYmplY3QiJiYhZi5pc1ZhbGlkRWxlbWVudCh6KT96OnttZXNzYWdlOnp9O3RoaXMuY3JlYXRlKHtpZDpKLHR5cGU6ImVycm9yIixkZXNjcmlwdGlvbjpWLC4uLlV9KX1lbHNlIGlmKEIgaW5zdGFuY2VvZiBFcnJvcil7Sz0hMTtsZXQgej10eXBlb2YgUS5lcnJvcj09PSJmdW5jdGlvbiI/YXdhaXQgUS5lcnJvcihCKTpRLmVycm9yLFY9dHlwZW9mIFEuZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IFEuZGVzY3JpcHRpb24oQik6US5kZXNjcmlwdGlvbixVPXR5cGVvZiB6PT09Im9iamVjdCImJiFmLmlzVmFsaWRFbGVtZW50KHopP3o6e21lc3NhZ2U6en07dGhpcy5jcmVhdGUoe2lkOkosdHlwZToiZXJyb3IiLGRlc2NyaXB0aW9uOlYsLi4uVX0pfWVsc2UgaWYoUS5zdWNjZXNzIT09dm9pZCAwKXtLPSExO2xldCB6PXR5cGVvZiBRLnN1Y2Nlc3M9PT0iZnVuY3Rpb24iP2F3YWl0IFEuc3VjY2VzcyhCKTpRLnN1Y2Nlc3MsVj10eXBlb2YgUS5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgUS5kZXNjcmlwdGlvbihCKTpRLmRlc2NyaXB0aW9uLFU9dHlwZW9mIHo9PT0ib2JqZWN0IiYmIWYuaXNWYWxpZEVsZW1lbnQoeik/ejp7bWVzc2FnZTp6fTt0aGlzLmNyZWF0ZSh7aWQ6Six0eXBlOiJzdWNjZXNzIixkZXNjcmlwdGlvbjpWLC4uLlV9KX19KS5jYXRjaChhc3luYyhCKT0+e2lmKFk9WyJyZWplY3QiLEJdLFEuZXJyb3IhPT12b2lkIDApe0s9ITE7bGV0IE49dHlwZW9mIFEuZXJyb3I9PT0iZnVuY3Rpb24iP2F3YWl0IFEuZXJyb3IoQik6US5lcnJvcix6PXR5cGVvZiBRLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBRLmRlc2NyaXB0aW9uKEIpOlEuZGVzY3JpcHRpb24sQz10eXBlb2YgTj09PSJvYmplY3QiJiYhZi5pc1ZhbGlkRWxlbWVudChOKT9OOnttZXNzYWdlOk59O3RoaXMuY3JlYXRlKHtpZDpKLHR5cGU6ImVycm9yIixkZXNjcmlwdGlvbjp6LC4uLkN9KX19KS5maW5hbGx5KCgpPT57aWYoSyl0aGlzLmRpc21pc3MoSiksSj12b2lkIDA7US5maW5hbGx5PT1udWxsfHxRLmZpbmFsbHkuY2FsbChRKX0pLEc9KCk9Pm5ldyBQcm9taXNlKChCLE4pPT5xLnRoZW4oKCk9PllbMF09PT0icmVqZWN0Ij9OKFlbMV0pOkIoWVsxXSkpLmNhdGNoKE4pKTtpZih0eXBlb2YgSiE9PSJzdHJpbmciJiZ0eXBlb2YgSiE9PSJudW1iZXIiKXJldHVybnt1bndyYXA6R307ZWxzZSByZXR1cm4gT2JqZWN0LmFzc2lnbihKLHt1bndyYXA6R30pfSx0aGlzLmN1c3RvbT0oJCxRKT0+e2xldCBKPShRPT1udWxsP3ZvaWQgMDpRLmlkKXx8WDgrKztyZXR1cm4gdGhpcy5jcmVhdGUoe2pzeDokKEopLGlkOkosLi4uUX0pLEp9LHRoaXMuZ2V0QWN0aXZlVG9hc3RzPSgpPT57cmV0dXJuIHRoaXMudG9hc3RzLmZpbHRlcigoJCk9PiF0aGlzLmRpc21pc3NlZFRvYXN0cy5oYXMoJC5pZCkpfSx0aGlzLnN1YnNjcmliZXJzPVtdLHRoaXMudG9hc3RzPVtdLHRoaXMuZGlzbWlzc2VkVG9hc3RzPW5ldyBTZXR9fXZhciBZMD1uZXcgcjYsdFE9KCQsUSk9PntsZXQgSj0oUT09bnVsbD92b2lkIDA6US5pZCl8fFg4Kys7cmV0dXJuIFkwLmFkZFRvYXN0KHt0aXRsZTokLC4uLlEsaWQ6Sn0pLEp9LGVRPSgkKT0+e3JldHVybiAkJiZ0eXBlb2YgJD09PSJvYmplY3QiJiYib2siaW4gJCYmdHlwZW9mICQub2s9PT0iYm9vbGVhbiImJiJzdGF0dXMiaW4gJCYmdHlwZW9mICQuc3RhdHVzPT09Im51bWJlciJ9LCRKPXRRLFFKPSgpPT5ZMC50b2FzdHMsSko9KCk9PlkwLmdldEFjdGl2ZVRvYXN0cygpLHQyPU9iamVjdC5hc3NpZ24oJEose3N1Y2Nlc3M6WTAuc3VjY2VzcyxpbmZvOlkwLmluZm8sd2FybmluZzpZMC53YXJuaW5nLGVycm9yOlkwLmVycm9yLGN1c3RvbTpZMC5jdXN0b20sbWVzc2FnZTpZMC5tZXNzYWdlLHByb21pc2U6WTAucHJvbWlzZSxkaXNtaXNzOlkwLmRpc21pc3MsbG9hZGluZzpZMC5sb2FkaW5nfSx7Z2V0SGlzdG9yeTpRSixnZXRUb2FzdHM6Skp9KTt1USgiW2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1sdHJdLGh0bWxbZGlyPWx0cl17LS10b2FzdC1pY29uLW1hcmdpbi1zdGFydDotM3B4Oy0tdG9hc3QtaWNvbi1tYXJnaW4tZW5kOjRweDstLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQ6LTFweDstLXRvYXN0LXN2Zy1tYXJnaW4tZW5kOjBweDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQ6YXV0bzstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kOjA7LS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQ6MDstLXRvYXN0LWNsb3NlLWJ1dHRvbi1lbmQ6dW5zZXQ7LS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtOnRyYW5zbGF0ZSgtMzUlLCAtMzUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPXJ0bF0saHRtbFtkaXI9cnRsXXstLXRvYXN0LWljb24tbWFyZ2luLXN0YXJ0OjRweDstLXRvYXN0LWljb24tbWFyZ2luLWVuZDotM3B4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1zdGFydDowcHg7LS10b2FzdC1zdmctbWFyZ2luLWVuZDotMXB4Oy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydDowOy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQ6YXV0bzstLXRvYXN0LWNsb3NlLWJ1dHRvbi1zdGFydDp1bnNldDstLXRvYXN0LWNsb3NlLWJ1dHRvbi1lbmQ6MDstLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm06dHJhbnNsYXRlKDM1JSwgLTM1JSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOnZhcigtLXdpZHRoKTtmb250LWZhbWlseTp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sSGVsdmV0aWNhIE5ldWUsQXJpYWwsTm90byBTYW5zLHNhbnMtc2VyaWYsQXBwbGUgQ29sb3IgRW1vamksU2Vnb2UgVUkgRW1vamksU2Vnb2UgVUkgU3ltYm9sLE5vdG8gQ29sb3IgRW1vamk7LS1ncmF5MTpoc2woMCwgMCUsIDk5JSk7LS1ncmF5Mjpoc2woMCwgMCUsIDk3LjMlKTstLWdyYXkzOmhzbCgwLCAwJSwgOTUuMSUpOy0tZ3JheTQ6aHNsKDAsIDAlLCA5MyUpOy0tZ3JheTU6aHNsKDAsIDAlLCA5MC45JSk7LS1ncmF5Njpoc2woMCwgMCUsIDg4LjclKTstLWdyYXk3OmhzbCgwLCAwJSwgODUuOCUpOy0tZ3JheTg6aHNsKDAsIDAlLCA3OCUpOy0tZ3JheTk6aHNsKDAsIDAlLCA1Ni4xJSk7LS1ncmF5MTA6aHNsKDAsIDAlLCA1Mi4zJSk7LS1ncmF5MTE6aHNsKDAsIDAlLCA0My41JSk7LS1ncmF5MTI6aHNsKDAsIDAlLCA5JSk7LS1ib3JkZXItcmFkaXVzOjhweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowO21hcmdpbjowO2xpc3Qtc3R5bGU6bm9uZTtvdXRsaW5lOjA7ei1pbmRleDo5OTk5OTk5OTk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjRzIGVhc2V9QG1lZGlhIChob3Zlcjpub25lKSBhbmQgKHBvaW50ZXI6Y29hcnNlKXtbZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1saWZ0ZWQ9dHJ1ZV17dHJhbnNmb3JtOm5vbmV9fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249cmlnaHRde3JpZ2h0OnZhcigtLW9mZnNldC1yaWdodCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1sZWZ0XXtsZWZ0OnZhcigtLW9mZnNldC1sZWZ0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWNlbnRlcl17bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj10b3Bde3RvcDp2YXIoLS1vZmZzZXQtdG9wKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV17Ym90dG9tOnZhcigtLW9mZnNldC1ib3R0b20pfVtkYXRhLXNvbm5lci10b2FzdF17LS15OnRyYW5zbGF0ZVkoMTAwJSk7LS1saWZ0LWFtb3VudDpjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tZ2FwKSk7ei1pbmRleDp2YXIoLS16LWluZGV4KTtwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7dHJhbnNmb3JtOnZhcigtLXkpO3RvdWNoLWFjdGlvbjpub25lO3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyxvcGFjaXR5IC40cyxoZWlnaHQgLjRzLGJveC1zaGFkb3cgLjJzO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOjA7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVde3BhZGRpbmc6MTZweDtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ub3JtYWwtYm9yZGVyKTtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSk7d2lkdGg6dmFyKC0td2lkdGgpO2ZvbnQtc2l6ZToxM3B4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweH1bZGF0YS1zb25uZXItdG9hc3RdOmZvY3VzLXZpc2libGV7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpLDAgMCAwIDJweCByZ2JhKDAsMCwwLC4yKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj10b3Bde3RvcDowOy0teTp0cmFuc2xhdGVZKC0xMDAlKTstLWxpZnQ6MTstLWxpZnQtYW1vdW50OmNhbGMoMSAqIHZhcigtLWdhcCkpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV17Ym90dG9tOjA7LS15OnRyYW5zbGF0ZVkoMTAwJSk7LS1saWZ0Oi0xOy0tbGlmdC1hbW91bnQ6Y2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLWdhcCkpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtZGVzY3JpcHRpb25de2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjQ7Y29sb3I6IzNmM2YzZn1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtZGVzY3JpcHRpb25de2NvbG9yOmluaGVyaXR9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLWRlc2NyaXB0aW9uXXtjb2xvcjojZThlOGU4fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtdGl0bGVde2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6aW5oZXJpdH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25de2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTZweDt3aWR0aDoxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXNocmluazowO21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWljb24tbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3QtaWNvbi1tYXJnaW4tZW5kKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcHJvbWlzZT10cnVlXSBbZGF0YS1pY29uXT5zdmd7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOCk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7YW5pbWF0aW9uOnNvbm5lci1mYWRlLWluIC4zcyBlYXNlIGZvcndhcmRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtaWNvbl0+KntmbGV4LXNocmluazowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtaWNvbl0gc3Zne21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1zdmctbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jb250ZW50XXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHh9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1idXR0b25de2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDo4cHg7aGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tbm9ybWFsLWJnKTtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC10ZXh0KTttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQpO2JvcmRlcjpub25lO2ZvbnQtd2VpZ2h0OjUwMDtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXNocmluazowO3RyYW5zaXRpb246b3BhY2l0eSAuNHMsYm94LXNoYWRvdyAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1idXR0b25dOmZvY3VzLXZpc2libGV7Ym94LXNoYWRvdzowIDAgMCAycHggcmdiYSgwLDAsMCwuNCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1idXR0b25dOmZpcnN0LW9mLXR5cGV7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNhbmNlbF17Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDgpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNhbmNlbF17YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNsb3NlLWJ1dHRvbl17cG9zaXRpb246YWJzb2x1dGU7bGVmdDp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQpO3JpZ2h0OnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi1lbmQpO3RvcDowO2hlaWdodDoyMHB4O3dpZHRoOjIwcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MDtjb2xvcjp2YXIoLS1ncmF5MTIpO2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWdyYXk0KTt0cmFuc2Zvcm06dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybSk7Ym9yZGVyLXJhZGl1czo1MCU7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxO3RyYW5zaXRpb246b3BhY2l0eSAuMXMsYmFja2dyb3VuZCAuMnMsYm9yZGVyLWNvbG9yIC4yc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNsb3NlLWJ1dHRvbl06Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSksMCAwIDAgMnB4IHJnYmEoMCwwLDAsLjIpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtZGlzYWJsZWQ9dHJ1ZV17Y3Vyc29yOm5vdC1hbGxvd2VkfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV06aG92ZXIgW2RhdGEtY2xvc2UtYnV0dG9uXTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWdyYXkyKTtib3JkZXItY29sb3I6dmFyKC0tZ3JheTUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPXRydWVdOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMDAlO3JpZ2h0Oi0xMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6LTF9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249dG9wXVtkYXRhLXN3aXBpbmc9dHJ1ZV06OmJlZm9yZXtib3R0b206NTAlO3RyYW5zZm9ybTpzY2FsZVkoMykgdHJhbnNsYXRlWSg1MCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV1bZGF0YS1zd2lwaW5nPXRydWVdOjpiZWZvcmV7dG9wOjUwJTt0cmFuc2Zvcm06c2NhbGVZKDMpIHRyYW5zbGF0ZVkoLTUwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9ZmFsc2VdW2RhdGEtcmVtb3ZlZD10cnVlXTo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt0cmFuc2Zvcm06c2NhbGVZKDIpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD10cnVlXTo6YWZ0ZXJ7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7aGVpZ2h0OmNhbGModmFyKC0tZ2FwKSArIDFweCk7Ym90dG9tOjEwMCU7d2lkdGg6MTAwJX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtbW91bnRlZD10cnVlXXstLXk6dHJhbnNsYXRlWSgwKTtvcGFjaXR5OjF9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWV4cGFuZGVkPWZhbHNlXVtkYXRhLWZyb250PWZhbHNlXXstLXNjYWxlOnZhcigtLXRvYXN0cy1iZWZvcmUpICogMC4wNSArIDE7LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0LWFtb3VudCkgKiB2YXIoLS10b2FzdHMtYmVmb3JlKSkpIHNjYWxlKGNhbGMoLTEgKiB2YXIoLS1zY2FsZSkpKTtoZWlnaHQ6dmFyKC0tZnJvbnQtdG9hc3QtaGVpZ2h0KX1bZGF0YS1zb25uZXItdG9hc3RdPip7dHJhbnNpdGlvbjpvcGFjaXR5IC40c31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteC1wb3NpdGlvbj1yaWdodF17cmlnaHQ6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteC1wb3NpdGlvbj1sZWZ0XXtsZWZ0OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWV4cGFuZGVkPWZhbHNlXVtkYXRhLWZyb250PWZhbHNlXVtkYXRhLXN0eWxlZD10cnVlXT4qe29wYWNpdHk6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdmlzaWJsZT1mYWxzZV17b3BhY2l0eTowO3BvaW50ZXItZXZlbnRzOm5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLW1vdW50ZWQ9dHJ1ZV1bZGF0YS1leHBhbmRlZD10cnVlXXstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tb2Zmc2V0KSkpO2hlaWdodDp2YXIoLS1pbml0aWFsLWhlaWdodCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD10cnVlXVtkYXRhLXN3aXBlLW91dD1mYWxzZV17LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIC0xMDAlKSk7b3BhY2l0eTowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9ZmFsc2VdW2RhdGEtc3dpcGUtb3V0PWZhbHNlXVtkYXRhLWV4cGFuZGVkPXRydWVdey0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1vZmZzZXQpICsgdmFyKC0tbGlmdCkgKiAtMTAwJSkpO29wYWNpdHk6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXVtkYXRhLXN3aXBlLW91dD1mYWxzZV1bZGF0YS1leHBhbmRlZD1mYWxzZV17LS15OnRyYW5zbGF0ZVkoNDAlKTtvcGFjaXR5OjA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjVzLG9wYWNpdHkgLjJzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9ZmFsc2VdOjpiZWZvcmV7aGVpZ2h0OmNhbGModmFyKC0taW5pdGlhbC1oZWlnaHQpICsgMjAlKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz10cnVlXXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWSh2YXIoLS1zd2lwZS1hbW91bnQteSwwKSkgdHJhbnNsYXRlWCh2YXIoLS1zd2lwZS1hbW91bnQteCwwKSk7dHJhbnNpdGlvbjpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZWQ9dHJ1ZV17dXNlci1zZWxlY3Q6bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21dLFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS15LXBvc2l0aW9uPXRvcF17YW5pbWF0aW9uLWR1cmF0aW9uOi4yczthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0O2FuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1sZWZ0XXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtbGVmdH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPXJpZ2h0XXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtcmlnaHR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj11cF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LXVwfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249ZG93bl17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LWRvd259QGtleWZyYW1lcyBzd2lwZS1vdXQtbGVmdHtmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKHZhcigtLXN3aXBlLWFtb3VudC14KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXgpIC0gMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtcmlnaHR7ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWCh2YXIoLS1zd2lwZS1hbW91bnQteCkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWChjYWxjKHZhcigtLXN3aXBlLWFtb3VudC14KSArIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LXVwe2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXkpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteSkgLSAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC1kb3due2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXkpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteSkgKyAxMDAlKSk7b3BhY2l0eTowfX1AbWVkaWEgKG1heC13aWR0aDo2MDBweCl7W2RhdGEtc29ubmVyLXRvYXN0ZXJde3Bvc2l0aW9uOmZpeGVkO3JpZ2h0OnZhcigtLW1vYmlsZS1vZmZzZXQtcmlnaHQpO2xlZnQ6dmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KTt3aWR0aDoxMDAlfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9cnRsXXtsZWZ0OmNhbGModmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KSAqIC0xKX1bZGF0YS1zb25uZXItdG9hc3Rlcl0gW2RhdGEtc29ubmVyLXRvYXN0XXtsZWZ0OjA7cmlnaHQ6MDt3aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpICogMil9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1sZWZ0XXtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTp2YXIoLS1tb2JpbGUtb2Zmc2V0LWJvdHRvbSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj10b3Bde3RvcDp2YXIoLS1tb2JpbGUtb2Zmc2V0LXRvcCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1jZW50ZXJde2xlZnQ6dmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KTtyaWdodDp2YXIoLS1tb2JpbGUtb2Zmc2V0LXJpZ2h0KTt0cmFuc2Zvcm06bm9uZX19W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWxpZ2h0XXstLW5vcm1hbC1iZzojZmZmOy0tbm9ybWFsLWJvcmRlcjp2YXIoLS1ncmF5NCk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MTIpOy0tc3VjY2Vzcy1iZzpoc2woMTQzLCA4NSUsIDk2JSk7LS1zdWNjZXNzLWJvcmRlcjpoc2woMTQ1LCA5MiUsIDg3JSk7LS1zdWNjZXNzLXRleHQ6aHNsKDE0MCwgMTAwJSwgMjclKTstLWluZm8tYmc6aHNsKDIwOCwgMTAwJSwgOTclKTstLWluZm8tYm9yZGVyOmhzbCgyMjEsIDkxJSwgOTMlKTstLWluZm8tdGV4dDpoc2woMjEwLCA5MiUsIDQ1JSk7LS13YXJuaW5nLWJnOmhzbCg0OSwgMTAwJSwgOTclKTstLXdhcm5pbmctYm9yZGVyOmhzbCg0OSwgOTElLCA4NCUpOy0td2FybmluZy10ZXh0OmhzbCgzMSwgOTIlLCA0NSUpOy0tZXJyb3ItYmc6aHNsKDM1OSwgMTAwJSwgOTclKTstLWVycm9yLWJvcmRlcjpoc2woMzU5LCAxMDAlLCA5NCUpOy0tZXJyb3ItdGV4dDpoc2woMzYwLCAxMDAlLCA0NSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1saWdodF0gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWludmVydD10cnVlXXstLW5vcm1hbC1iZzojMDAwOy0tbm9ybWFsLWJvcmRlcjpoc2woMCwgMCUsIDIwJSk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1pbnZlcnQ9dHJ1ZV17LS1ub3JtYWwtYmc6I2ZmZjstLW5vcm1hbC1ib3JkZXI6dmFyKC0tZ3JheTMpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEyKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya117LS1ub3JtYWwtYmc6IzAwMDstLW5vcm1hbC1iZy1ob3Zlcjpoc2woMCwgMCUsIDEyJSk7LS1ub3JtYWwtYm9yZGVyOmhzbCgwLCAwJSwgMjAlKTstLW5vcm1hbC1ib3JkZXItaG92ZXI6aHNsKDAsIDAlLCAyNSUpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEpOy0tc3VjY2Vzcy1iZzpoc2woMTUwLCAxMDAlLCA2JSk7LS1zdWNjZXNzLWJvcmRlcjpoc2woMTQ3LCAxMDAlLCAxMiUpOy0tc3VjY2Vzcy10ZXh0OmhzbCgxNTAsIDg2JSwgNjUlKTstLWluZm8tYmc6aHNsKDIxNSwgMTAwJSwgNiUpOy0taW5mby1ib3JkZXI6aHNsKDIyMywgNDMlLCAxNyUpOy0taW5mby10ZXh0OmhzbCgyMTYsIDg3JSwgNjUlKTstLXdhcm5pbmctYmc6aHNsKDY0LCAxMDAlLCA2JSk7LS13YXJuaW5nLWJvcmRlcjpoc2woNjAsIDEwMCUsIDklKTstLXdhcm5pbmctdGV4dDpoc2woNDYsIDg3JSwgNjUlKTstLWVycm9yLWJnOmhzbCgzNTgsIDc2JSwgMTAlKTstLWVycm9yLWJvcmRlcjpoc2woMzU3LCA4OSUsIDE2JSk7LS1lcnJvci10ZXh0OmhzbCgzNTgsIDEwMCUsIDgxJSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF0gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLW5vcm1hbC1ib3JkZXIpO2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XSBbZGF0YS1jbG9zZS1idXR0b25dOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnLWhvdmVyKTtib3JkZXItY29sb3I6dmFyKC0tbm9ybWFsLWJvcmRlci1ob3Zlcil9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1zdWNjZXNzXXtiYWNrZ3JvdW5kOnZhcigtLXN1Y2Nlc3MtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1zdWNjZXNzLWJvcmRlcik7Y29sb3I6dmFyKC0tc3VjY2Vzcy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXN1Y2Nlc3NdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1zdWNjZXNzLWJnKTtib3JkZXItY29sb3I6dmFyKC0tc3VjY2Vzcy1ib3JkZXIpO2NvbG9yOnZhcigtLXN1Y2Nlc3MtdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1pbmZvXXtiYWNrZ3JvdW5kOnZhcigtLWluZm8tYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1pbmZvLWJvcmRlcik7Y29sb3I6dmFyKC0taW5mby10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWluZm9dIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1pbmZvLWJnKTtib3JkZXItY29sb3I6dmFyKC0taW5mby1ib3JkZXIpO2NvbG9yOnZhcigtLWluZm8tdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT13YXJuaW5nXXtiYWNrZ3JvdW5kOnZhcigtLXdhcm5pbmctYmcpO2JvcmRlci1jb2xvcjp2YXIoLS13YXJuaW5nLWJvcmRlcik7Y29sb3I6dmFyKC0td2FybmluZy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXdhcm5pbmddIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS13YXJuaW5nLWJnKTtib3JkZXItY29sb3I6dmFyKC0td2FybmluZy1ib3JkZXIpO2NvbG9yOnZhcigtLXdhcm5pbmctdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1lcnJvcl17YmFja2dyb3VuZDp2YXIoLS1lcnJvci1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWVycm9yLWJvcmRlcik7Y29sb3I6dmFyKC0tZXJyb3ItdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1lcnJvcl0gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLWVycm9yLWJnKTtib3JkZXItY29sb3I6dmFyKC0tZXJyb3ItYm9yZGVyKTtjb2xvcjp2YXIoLS1lcnJvci10ZXh0KX0uc29ubmVyLWxvYWRpbmctd3JhcHBlcnstLXNpemU6MTZweDtoZWlnaHQ6dmFyKC0tc2l6ZSk7d2lkdGg6dmFyKC0tc2l6ZSk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt6LWluZGV4OjEwfS5zb25uZXItbG9hZGluZy13cmFwcGVyW2RhdGEtdmlzaWJsZT1mYWxzZV17dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7YW5pbWF0aW9uOnNvbm5lci1mYWRlLW91dCAuMnMgZWFzZSBmb3J3YXJkc30uc29ubmVyLXNwaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7dG9wOjUwJTtsZWZ0OjUwJTtoZWlnaHQ6dmFyKC0tc2l6ZSk7d2lkdGg6dmFyKC0tc2l6ZSl9LnNvbm5lci1sb2FkaW5nLWJhcnthbmltYXRpb246c29ubmVyLXNwaW4gMS4ycyBsaW5lYXIgaW5maW5pdGU7YmFja2dyb3VuZDp2YXIoLS1ncmF5MTEpO2JvcmRlci1yYWRpdXM6NnB4O2hlaWdodDo4JTtsZWZ0Oi0xMCU7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0zLjklO3dpZHRoOjI0JX0uc29ubmVyLWxvYWRpbmctYmFyOmZpcnN0LWNoaWxke2FuaW1hdGlvbi1kZWxheTotMS4yczt0cmFuc2Zvcm06cm90YXRlKC4wMDAxZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMil7YW5pbWF0aW9uLWRlbGF5Oi0xLjFzO3RyYW5zZm9ybTpyb3RhdGUoMzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgzKXthbmltYXRpb24tZGVsYXk6LTFzO3RyYW5zZm9ybTpyb3RhdGUoNjBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg0KXthbmltYXRpb24tZGVsYXk6LS45czt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNSl7YW5pbWF0aW9uLWRlbGF5Oi0uOHM7dHJhbnNmb3JtOnJvdGF0ZSgxMjBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg2KXthbmltYXRpb24tZGVsYXk6LS43czt0cmFuc2Zvcm06cm90YXRlKDE1MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDcpe2FuaW1hdGlvbi1kZWxheTotLjZzO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoOCl7YW5pbWF0aW9uLWRlbGF5Oi0uNXM7dHJhbnNmb3JtOnJvdGF0ZSgyMTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg5KXthbmltYXRpb24tZGVsYXk6LS40czt0cmFuc2Zvcm06cm90YXRlKDI0MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDEwKXthbmltYXRpb24tZGVsYXk6LS4zczt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDExKXthbmltYXRpb24tZGVsYXk6LS4yczt0cmFuc2Zvcm06cm90YXRlKDMwMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDEyKXthbmltYXRpb24tZGVsYXk6LS4xczt0cmFuc2Zvcm06cm90YXRlKDMzMGRlZykgdHJhbnNsYXRlKDE0NiUpfUBrZXlmcmFtZXMgc29ubmVyLWZhZGUtaW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOCl9MTAwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX1Aa2V5ZnJhbWVzIHNvbm5lci1mYWRlLW91dHswJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfTEwMCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOCl9fUBrZXlmcmFtZXMgc29ubmVyLXNwaW57MCV7b3BhY2l0eToxfTEwMCV7b3BhY2l0eTouMTV9fUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbil7LnNvbm5lci1sb2FkaW5nLWJhcixbZGF0YS1zb25uZXItdG9hc3RdLFtkYXRhLXNvbm5lci10b2FzdF0+Knt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lIWltcG9ydGFudH19LnNvbm5lci1sb2FkZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyx0cmFuc2Zvcm0gLjJzfS5zb25uZXItbG9hZGVyW2RhdGEtdmlzaWJsZT1mYWxzZV17b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOCkgdHJhbnNsYXRlKC01MCUsLTUwJSl9Iik7ZnVuY3Rpb24gczUoJCl7cmV0dXJuICQubGFiZWwhPT12b2lkIDB9dmFyIFpKPTMsWEo9IjI0cHgiLEtKPSIxNnB4IixpNj00MDAwLFlKPTM1NixxSj0xNCxHSj00NSxWSj0yMDA7ZnVuY3Rpb24geDAoLi4uJCl7cmV0dXJuICQuZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKX1mdW5jdGlvbiBCSigkKXtsZXRbUSxKXT0kLnNwbGl0KCItIiksWD1bXTtpZihRKVgucHVzaChRKTtpZihKKVgucHVzaChKKTtyZXR1cm4gWH12YXIgTko9KCQpPT57dmFyIFEsSixYLEssWSxxLEcsQixOO2xldHtpbnZlcnQ6eix0b2FzdDpWLHVuc3R5bGVkOkMsaW50ZXJhY3Rpbmc6VSxzZXRIZWlnaHRzOkYsdmlzaWJsZVRvYXN0czpMLGhlaWdodHM6SCxpbmRleDpPLHRvYXN0czprLGV4cGFuZGVkOkkscmVtb3ZlVG9hc3Q6dyxkZWZhdWx0UmljaENvbG9yczpQLGNsb3NlQnV0dG9uOngsc3R5bGU6dCxjYW5jZWxCdXR0b25TdHlsZTpoLGFjdGlvbkJ1dHRvblN0eWxlOmwsY2xhc3NOYW1lOnI9IiIsZGVzY3JpcHRpb25DbGFzc05hbWU6bz0iIixkdXJhdGlvbjppLHBvc2l0aW9uOiQxLGdhcDp6MSxleHBhbmRCeURlZmF1bHQ6YyxjbGFzc05hbWVzOm0saWNvbnM6SjEsY2xvc2VCdXR0b25BcmlhTGFiZWw6RzE9IkNsb3NlIHRvYXN0In09JCxbTzEsbl09Zi51c2VTdGF0ZShudWxsKSxbWDEsVjFdPWYudXNlU3RhdGUobnVsbCksW1MsZ109Zi51c2VTdGF0ZSghMSksW18sdV09Zi51c2VTdGF0ZSghMSksW3Asal09Zi51c2VTdGF0ZSghMSksW3ExLEwxXT1mLnVzZVN0YXRlKCExKSxbazEsVzFdPWYudXNlU3RhdGUoITEpLFtuMSxBMV09Zi51c2VTdGF0ZSgwKSxbdjEsXzFdPWYudXNlU3RhdGUoMCksbDE9Zi51c2VSZWYoVi5kdXJhdGlvbnx8aXx8aTYpLFUxPWYudXNlUmVmKG51bGwpLHcxPWYudXNlUmVmKG51bGwpLGQxPU89PT0wLHQxPU8rMTw9TCxnMT1WLnR5cGUscjE9Vi5kaXNtaXNzaWJsZSE9PSExLCQwPVYuY2xhc3NOYW1lfHwiIixCMD1WLmRlc2NyaXB0aW9uQ2xhc3NOYW1lfHwiIixzMT1mLnVzZU1lbW8oKCk9PkguZmluZEluZGV4KChLMSk9PksxLnRvYXN0SWQ9PT1WLmlkKXx8MCxbSCxWLmlkXSksZzA9Zi51c2VNZW1vKCgpPT57dmFyIEsxO3JldHVybihLMT1WLmNsb3NlQnV0dG9uKSE9bnVsbD9LMTp4fSxbVi5jbG9zZUJ1dHRvbix4XSksbTE9Zi51c2VNZW1vKCgpPT5WLmR1cmF0aW9ufHxpfHxpNixbVi5kdXJhdGlvbixpXSksRzA9Zi51c2VSZWYoMCksUTA9Zi51c2VSZWYoMCksRDA9Zi51c2VSZWYoMCksYzE9Zi51c2VSZWYobnVsbCksW2ExLFAwXT0kMS5zcGxpdCgiLSIpLFIxPWYudXNlTWVtbygoKT0+e3JldHVybiBILnJlZHVjZSgoSzEsRCxkKT0+e2lmKGQ+PXMxKXJldHVybiBLMTtyZXR1cm4gSzErRC5oZWlnaHR9LDApfSxbSCxzMV0pLE8wPXNRKCksTjA9Vi5pbnZlcnR8fHosUDE9ZzE9PT0ibG9hZGluZyI7UTAuY3VycmVudD1mLnVzZU1lbW8oKCk9PnMxKnoxK1IxLFtzMSxSMV0pLGYudXNlRWZmZWN0KCgpPT57bDEuY3VycmVudD1tMX0sW20xXSksZi51c2VFZmZlY3QoKCk9PntnKCEwKX0sW10pLGYudXNlRWZmZWN0KCgpPT57bGV0IEsxPXcxLmN1cnJlbnQ7aWYoSzEpe2xldCBEPUsxLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtyZXR1cm4gXzEoRCksRigoZCk9Plt7dG9hc3RJZDpWLmlkLGhlaWdodDpELHBvc2l0aW9uOlYucG9zaXRpb259LC4uLmRdKSwoKT0+RigoZCk9PmQuZmlsdGVyKChhKT0+YS50b2FzdElkIT09Vi5pZCkpfX0sW0YsVi5pZF0pLGYudXNlTGF5b3V0RWZmZWN0KCgpPT57aWYoIVMpcmV0dXJuO2xldCBLMT13MS5jdXJyZW50LEQ9SzEuc3R5bGUuaGVpZ2h0O0sxLnN0eWxlLmhlaWdodD0iYXV0byI7bGV0IGQ9SzEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O0sxLnN0eWxlLmhlaWdodD1ELF8xKGQpLEYoKGEpPT57aWYoIWEuZmluZCgoQjEpPT5CMS50b2FzdElkPT09Vi5pZCkpcmV0dXJuW3t0b2FzdElkOlYuaWQsaGVpZ2h0OmQscG9zaXRpb246Vi5wb3NpdGlvbn0sLi4uYV07ZWxzZSByZXR1cm4gYS5tYXAoKEIxKT0+QjEudG9hc3RJZD09PVYuaWQ/ey4uLkIxLGhlaWdodDpkfTpCMSl9KX0sW1MsVi50aXRsZSxWLmRlc2NyaXB0aW9uLEYsVi5pZCxWLmpzeCxWLmFjdGlvbixWLmNhbmNlbF0pO2xldCBiMT1mLnVzZUNhbGxiYWNrKCgpPT57dSghMCksQTEoUTAuY3VycmVudCksRigoSzEpPT5LMS5maWx0ZXIoKEQpPT5ELnRvYXN0SWQhPT1WLmlkKSksc2V0VGltZW91dCgoKT0+e3coVil9LFZKKX0sW1YsdyxGLFEwXSk7Zi51c2VFZmZlY3QoKCk9PntpZihWLnByb21pc2UmJmcxPT09ImxvYWRpbmcifHxWLmR1cmF0aW9uPT09MS8wfHxWLnR5cGU9PT0ibG9hZGluZyIpcmV0dXJuO2xldCBLMSxEPSgpPT57aWYoRDAuY3VycmVudDxHMC5jdXJyZW50KXtsZXQgYT1uZXcgRGF0ZSgpLmdldFRpbWUoKS1HMC5jdXJyZW50O2wxLmN1cnJlbnQ9bDEuY3VycmVudC1hfUQwLmN1cnJlbnQ9bmV3IERhdGUoKS5nZXRUaW1lKCl9LGQ9KCk9PntpZihsMS5jdXJyZW50PT09MS8wKXJldHVybjtHMC5jdXJyZW50PW5ldyBEYXRlKCkuZ2V0VGltZSgpLEsxPXNldFRpbWVvdXQoKCk9PntWLm9uQXV0b0Nsb3NlPT1udWxsfHxWLm9uQXV0b0Nsb3NlLmNhbGwoVixWKSxiMSgpfSxsMS5jdXJyZW50KX07aWYoSXx8VXx8TzApRCgpO2Vsc2UgZCgpO3JldHVybigpPT5jbGVhclRpbWVvdXQoSzEpfSxbSSxVLFYsZzEsTzAsYjFdKSxmLnVzZUVmZmVjdCgoKT0+e2lmKFYuZGVsZXRlKWIxKCksVi5vbkRpc21pc3M9PW51bGx8fFYub25EaXNtaXNzLmNhbGwoVixWKX0sW2IxLFYuZGVsZXRlXSk7ZnVuY3Rpb24gWjAoKXt2YXIgSzE7aWYoSjE9PW51bGw/dm9pZCAwOkoxLmxvYWRpbmcpe3ZhciBEO3JldHVybiBmLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp4MChtPT1udWxsP3ZvaWQgMDptLmxvYWRlcixWPT1udWxsP3ZvaWQgMDooRD1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpELmxvYWRlciwic29ubmVyLWxvYWRlciIpLCJkYXRhLXZpc2libGUiOmcxPT09ImxvYWRpbmcifSxKMS5sb2FkaW5nKX1yZXR1cm4gZi5jcmVhdGVFbGVtZW50KGNRLHtjbGFzc05hbWU6eDAobT09bnVsbD92b2lkIDA6bS5sb2FkZXIsVj09bnVsbD92b2lkIDA6KEsxPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOksxLmxvYWRlciksdmlzaWJsZTpnMT09PSJsb2FkaW5nIn0pfWxldCBGMD1WLmljb258fChKMT09bnVsbD92b2lkIDA6SjFbZzFdKXx8bFEoZzEpO3ZhciB6MCxNMDtyZXR1cm4gZi5jcmVhdGVFbGVtZW50KCJsaSIse3RhYkluZGV4OjAscmVmOncxLGNsYXNzTmFtZTp4MChyLCQwLG09PW51bGw/dm9pZCAwOm0udG9hc3QsVj09bnVsbD92b2lkIDA6KFE9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6US50b2FzdCxtPT1udWxsP3ZvaWQgMDptLmRlZmF1bHQsbT09bnVsbD92b2lkIDA6bVtnMV0sVj09bnVsbD92b2lkIDA6KEo9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6SltnMV0pLCJkYXRhLXNvbm5lci10b2FzdCI6IiIsImRhdGEtcmljaC1jb2xvcnMiOih6MD1WLnJpY2hDb2xvcnMpIT1udWxsP3owOlAsImRhdGEtc3R5bGVkIjohQm9vbGVhbihWLmpzeHx8Vi51bnN0eWxlZHx8QyksImRhdGEtbW91bnRlZCI6UywiZGF0YS1wcm9taXNlIjpCb29sZWFuKFYucHJvbWlzZSksImRhdGEtc3dpcGVkIjprMSwiZGF0YS1yZW1vdmVkIjpfLCJkYXRhLXZpc2libGUiOnQxLCJkYXRhLXktcG9zaXRpb24iOmExLCJkYXRhLXgtcG9zaXRpb24iOlAwLCJkYXRhLWluZGV4IjpPLCJkYXRhLWZyb250IjpkMSwiZGF0YS1zd2lwaW5nIjpwLCJkYXRhLWRpc21pc3NpYmxlIjpyMSwiZGF0YS10eXBlIjpnMSwiZGF0YS1pbnZlcnQiOk4wLCJkYXRhLXN3aXBlLW91dCI6cTEsImRhdGEtc3dpcGUtZGlyZWN0aW9uIjpYMSwiZGF0YS1leHBhbmRlZCI6Qm9vbGVhbihJfHxjJiZTKSwiZGF0YS10ZXN0aWQiOlYudGVzdElkLHN0eWxlOnsiLS1pbmRleCI6TywiLS10b2FzdHMtYmVmb3JlIjpPLCItLXotaW5kZXgiOmsubGVuZ3RoLU8sIi0tb2Zmc2V0IjpgJHtfP24xOlEwLmN1cnJlbnR9cHhgLCItLWluaXRpYWwtaGVpZ2h0IjpjPyJhdXRvIjpgJHt2MX1weGAsLi4udCwuLi5WLnN0eWxlfSxvbkRyYWdFbmQ6KCk9PntqKCExKSxuKG51bGwpLGMxLmN1cnJlbnQ9bnVsbH0sb25Qb2ludGVyRG93bjooSzEpPT57aWYoSzEuYnV0dG9uPT09MilyZXR1cm47aWYoUDF8fCFyMSlyZXR1cm47aWYoVTEuY3VycmVudD1uZXcgRGF0ZSxBMShRMC5jdXJyZW50KSxLMS50YXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoSzEucG9pbnRlcklkKSxLMS50YXJnZXQudGFnTmFtZT09PSJCVVRUT04iKXJldHVybjtqKCEwKSxjMS5jdXJyZW50PXt4OksxLmNsaWVudFgseTpLMS5jbGllbnRZfX0sb25Qb2ludGVyVXA6KCk9Pnt2YXIgSzEsRCxkO2lmKHExfHwhcjEpcmV0dXJuO2MxLmN1cnJlbnQ9bnVsbDtsZXQgYT1OdW1iZXIoKChLMT13MS5jdXJyZW50KT09bnVsbD92b2lkIDA6SzEuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgiLS1zd2lwZS1hbW91bnQteCIpLnJlcGxhY2UoInB4IiwiIikpfHwwKSxGMT1OdW1iZXIoKChEPXcxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpELnN0eWxlLmdldFByb3BlcnR5VmFsdWUoIi0tc3dpcGUtYW1vdW50LXkiKS5yZXBsYWNlKCJweCIsIiIpKXx8MCksQjE9bmV3IERhdGUoKS5nZXRUaW1lKCktKChkPVUxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpkLmdldFRpbWUoKSksTjE9TzE9PT0ieCI/YTpGMSxmMT1NYXRoLmFicyhOMSkvQjE7aWYoTWF0aC5hYnMoTjEpPj1HSnx8ZjE+MC4xMSl7aWYoQTEoUTAuY3VycmVudCksVi5vbkRpc21pc3M9PW51bGx8fFYub25EaXNtaXNzLmNhbGwoVixWKSxPMT09PSJ4IilWMShhPjA/InJpZ2h0IjoibGVmdCIpO2Vsc2UgVjEoRjE+MD8iZG93biI6InVwIik7YjEoKSxMMSghMCk7cmV0dXJufWVsc2V7dmFyIHAxLHgxOyhwMT13MS5jdXJyZW50KT09bnVsbHx8cDEuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXgiLCIwcHgiKSwoeDE9dzEuY3VycmVudCk9PW51bGx8fHgxLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC15IiwiMHB4Iil9VzEoITEpLGooITEpLG4obnVsbCl9LG9uUG9pbnRlck1vdmU6KEsxKT0+e3ZhciBELGQsYTtpZighYzEuY3VycmVudHx8IXIxKXJldHVybjtpZigoKEQ9d2luZG93LmdldFNlbGVjdGlvbigpKT09bnVsbD92b2lkIDA6RC50b1N0cmluZygpLmxlbmd0aCk+MClyZXR1cm47bGV0IEIxPUsxLmNsaWVudFktYzEuY3VycmVudC55LE4xPUsxLmNsaWVudFgtYzEuY3VycmVudC54O3ZhciBmMTtsZXQgcDE9KGYxPSQuc3dpcGVEaXJlY3Rpb25zKSE9bnVsbD9mMTpCSigkMSk7aWYoIU8xJiYoTWF0aC5hYnMoTjEpPjF8fE1hdGguYWJzKEIxKT4xKSluKE1hdGguYWJzKE4xKT5NYXRoLmFicyhCMSk/IngiOiJ5Iik7bGV0IHgxPXt4OjAseTowfSxBMD0oWDApPT57cmV0dXJuIDEvKDEuNStNYXRoLmFicyhYMCkvMjApfTtpZihPMT09PSJ5Iil7aWYocDEuaW5jbHVkZXMoInRvcCIpfHxwMS5pbmNsdWRlcygiYm90dG9tIikpaWYocDEuaW5jbHVkZXMoInRvcCIpJiZCMTwwfHxwMS5pbmNsdWRlcygiYm90dG9tIikmJkIxPjApeDEueT1CMTtlbHNle2xldCBYMD1CMSpBMChCMSk7eDEueT1NYXRoLmFicyhYMCk8TWF0aC5hYnMoQjEpP1gwOkIxfX1lbHNlIGlmKE8xPT09IngiKXtpZihwMS5pbmNsdWRlcygibGVmdCIpfHxwMS5pbmNsdWRlcygicmlnaHQiKSlpZihwMS5pbmNsdWRlcygibGVmdCIpJiZOMTwwfHxwMS5pbmNsdWRlcygicmlnaHQiKSYmTjE+MCl4MS54PU4xO2Vsc2V7bGV0IFgwPU4xKkEwKE4xKTt4MS54PU1hdGguYWJzKFgwKTxNYXRoLmFicyhOMSk/WDA6TjF9fWlmKE1hdGguYWJzKHgxLngpPjB8fE1hdGguYWJzKHgxLnkpPjApVzEoITApOyhkPXcxLmN1cnJlbnQpPT1udWxsfHxkLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC14IixgJHt4MS54fXB4YCksKGE9dzEuY3VycmVudCk9PW51bGx8fGEuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXkiLGAke3gxLnl9cHhgKX19LGcwJiYhVi5qc3gmJmcxIT09ImxvYWRpbmciP2YuY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7ImFyaWEtbGFiZWwiOkcxLCJkYXRhLWRpc2FibGVkIjpQMSwiZGF0YS1jbG9zZS1idXR0b24iOiEwLG9uQ2xpY2s6UDF8fCFyMT8oKT0+e306KCk9PntiMSgpLFYub25EaXNtaXNzPT1udWxsfHxWLm9uRGlzbWlzcy5jYWxsKFYsVil9LGNsYXNzTmFtZTp4MChtPT1udWxsP3ZvaWQgMDptLmNsb3NlQnV0dG9uLFY9PW51bGw/dm9pZCAwOihYPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlguY2xvc2VCdXR0b24pfSwoTTA9SjE9PW51bGw/dm9pZCAwOkoxLmNsb3NlKSE9bnVsbD9NMDphUSk6bnVsbCwoZzF8fFYuaWNvbnx8Vi5wcm9taXNlKSYmVi5pY29uIT09bnVsbCYmKChKMT09bnVsbD92b2lkIDA6SjFbZzFdKSE9PW51bGx8fFYuaWNvbik/Zi5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS1pY29uIjoiIixjbGFzc05hbWU6eDAobT09bnVsbD92b2lkIDA6bS5pY29uLFY9PW51bGw/dm9pZCAwOihLPVYuY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOksuaWNvbil9LFYucHJvbWlzZXx8Vi50eXBlPT09ImxvYWRpbmciJiYhVi5pY29uP1YuaWNvbnx8WjAoKTpudWxsLFYudHlwZSE9PSJsb2FkaW5nIj9GMDpudWxsKTpudWxsLGYuY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtY29udGVudCI6IiIsY2xhc3NOYW1lOngwKG09PW51bGw/dm9pZCAwOm0uY29udGVudCxWPT1udWxsP3ZvaWQgMDooWT1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpZLmNvbnRlbnQpfSxmLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLXRpdGxlIjoiIixjbGFzc05hbWU6eDAobT09bnVsbD92b2lkIDA6bS50aXRsZSxWPT1udWxsP3ZvaWQgMDoocT1WLmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpxLnRpdGxlKX0sVi5qc3g/Vi5qc3g6dHlwZW9mIFYudGl0bGU9PT0iZnVuY3Rpb24iP1YudGl0bGUoKTpWLnRpdGxlKSxWLmRlc2NyaXB0aW9uP2YuY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtZGVzY3JpcHRpb24iOiIiLGNsYXNzTmFtZTp4MChvLEIwLG09PW51bGw/dm9pZCAwOm0uZGVzY3JpcHRpb24sVj09bnVsbD92b2lkIDA6KEc9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Ry5kZXNjcmlwdGlvbil9LHR5cGVvZiBWLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9WLmRlc2NyaXB0aW9uKCk6Vi5kZXNjcmlwdGlvbik6bnVsbCksZi5pc1ZhbGlkRWxlbWVudChWLmNhbmNlbCk/Vi5jYW5jZWw6Vi5jYW5jZWwmJnM1KFYuY2FuY2VsKT9mLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJkYXRhLWJ1dHRvbiI6ITAsImRhdGEtY2FuY2VsIjohMCxzdHlsZTpWLmNhbmNlbEJ1dHRvblN0eWxlfHxoLG9uQ2xpY2s6KEsxKT0+e2lmKCFzNShWLmNhbmNlbCkpcmV0dXJuO2lmKCFyMSlyZXR1cm47Vi5jYW5jZWwub25DbGljaz09bnVsbHx8Vi5jYW5jZWwub25DbGljay5jYWxsKFYuY2FuY2VsLEsxKSxiMSgpfSxjbGFzc05hbWU6eDAobT09bnVsbD92b2lkIDA6bS5jYW5jZWxCdXR0b24sVj09bnVsbD92b2lkIDA6KEI9Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Qi5jYW5jZWxCdXR0b24pfSxWLmNhbmNlbC5sYWJlbCk6bnVsbCxmLmlzVmFsaWRFbGVtZW50KFYuYWN0aW9uKT9WLmFjdGlvbjpWLmFjdGlvbiYmczUoVi5hY3Rpb24pP2YuY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7ImRhdGEtYnV0dG9uIjohMCwiZGF0YS1hY3Rpb24iOiEwLHN0eWxlOlYuYWN0aW9uQnV0dG9uU3R5bGV8fGwsb25DbGljazooSzEpPT57aWYoIXM1KFYuYWN0aW9uKSlyZXR1cm47aWYoVi5hY3Rpb24ub25DbGljaz09bnVsbHx8Vi5hY3Rpb24ub25DbGljay5jYWxsKFYuYWN0aW9uLEsxKSxLMS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtiMSgpfSxjbGFzc05hbWU6eDAobT09bnVsbD92b2lkIDA6bS5hY3Rpb25CdXR0b24sVj09bnVsbD92b2lkIDA6KE49Vi5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Ti5hY3Rpb25CdXR0b24pfSxWLmFjdGlvbi5sYWJlbCk6bnVsbCl9O2Z1bmN0aW9uIG42KCl7aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuImx0ciI7aWYodHlwZW9mIGRvY3VtZW50PiJ1IilyZXR1cm4ibHRyIjtsZXQgJD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkaXIiKTtpZigkPT09ImF1dG8ifHwhJClyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5kaXJlY3Rpb247cmV0dXJuICR9ZnVuY3Rpb24gekooJCxRKXtsZXQgSj17fTtyZXR1cm5bJCxRXS5mb3JFYWNoKChYLEspPT57bGV0IFk9Sz09PTEscT1ZPyItLW1vYmlsZS1vZmZzZXQiOiItLW9mZnNldCIsRz1ZP0tKOlhKO2Z1bmN0aW9uIEIoTil7WyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXS5mb3JFYWNoKCh6KT0+e0pbYCR7cX0tJHt6fWBdPXR5cGVvZiBOPT09Im51bWJlciI/YCR7Tn1weGA6Tn0pfWlmKHR5cGVvZiBYPT09Im51bWJlciJ8fHR5cGVvZiBYPT09InN0cmluZyIpQihYKTtlbHNlIGlmKHR5cGVvZiBYPT09Im9iamVjdCIpWyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXS5mb3JFYWNoKChOKT0+e2lmKFhbTl09PT12b2lkIDApSltgJHtxfS0ke059YF09RztlbHNlIEpbYCR7cX0tJHtOfWBdPXR5cGVvZiBYW05dPT09Im51bWJlciI/YCR7WFtOXX1weGA6WFtOXX0pO2Vsc2UgQihHKX0pLEp9dmFyIGE2PWYuZm9yd2FyZFJlZihmdW5jdGlvbihRLEope2xldHtpZDpYLGludmVydDpLLHBvc2l0aW9uOlk9ImJvdHRvbS1yaWdodCIsaG90a2V5OnE9WyJhbHRLZXkiLCJLZXlUIl0sZXhwYW5kOkcsY2xvc2VCdXR0b246QixjbGFzc05hbWU6TixvZmZzZXQ6eixtb2JpbGVPZmZzZXQ6Vix0aGVtZTpDPSJsaWdodCIscmljaENvbG9yczpVLGR1cmF0aW9uOkYsc3R5bGU6TCx2aXNpYmxlVG9hc3RzOkg9WkosdG9hc3RPcHRpb25zOk8sZGlyOms9bjYoKSxnYXA6ST1xSixpY29uczp3LGNvbnRhaW5lckFyaWFMYWJlbDpQPSJOb3RpZmljYXRpb25zIn09USxbeCx0XT1mLnVzZVN0YXRlKFtdKSxoPWYudXNlTWVtbygoKT0+e2lmKFgpcmV0dXJuIHguZmlsdGVyKChTKT0+Uy50b2FzdGVySWQ9PT1YKTtyZXR1cm4geC5maWx0ZXIoKFMpPT4hUy50b2FzdGVySWQpfSxbeCxYXSksbD1mLnVzZU1lbW8oKCk9PntyZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KFtZXS5jb25jYXQoaC5maWx0ZXIoKFMpPT5TLnBvc2l0aW9uKS5tYXAoKFMpPT5TLnBvc2l0aW9uKSkpKX0sW2gsWV0pLFtyLG9dPWYudXNlU3RhdGUoW10pLFtpLCQxXT1mLnVzZVN0YXRlKCExKSxbejEsY109Zi51c2VTdGF0ZSghMSksW20sSjFdPWYudXNlU3RhdGUoQyE9PSJzeXN0ZW0iP0M6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcz8iZGFyayI6ImxpZ2h0IjoibGlnaHQiKSxHMT1mLnVzZVJlZihudWxsKSxPMT1xLmpvaW4oIisiKS5yZXBsYWNlKC9LZXkvZywiIikucmVwbGFjZSgvRGlnaXQvZywiIiksbj1mLnVzZVJlZihudWxsKSxYMT1mLnVzZVJlZighMSksVjE9Zi51c2VDYWxsYmFjaygoUyk9Pnt0KChnKT0+e3ZhciBfO2lmKCEoKF89Zy5maW5kKCh1KT0+dS5pZD09PVMuaWQpKT09bnVsbD92b2lkIDA6Xy5kZWxldGUpKVkwLmRpc21pc3MoUy5pZCk7cmV0dXJuIGcuZmlsdGVyKCh7aWQ6dX0pPT51IT09Uy5pZCl9KX0sW10pO3JldHVybiBmLnVzZUVmZmVjdCgoKT0+e3JldHVybiBZMC5zdWJzY3JpYmUoKFMpPT57aWYoUy5kaXNtaXNzKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0KChnKT0+Zy5tYXAoKF8pPT5fLmlkPT09Uy5pZD97Li4uXyxkZWxldGU6ITB9Ol8pKX0pO3JldHVybn1zZXRUaW1lb3V0KCgpPT57Zi5mbHVzaFN5bmMoKCk9Pnt0KChnKT0+e2xldCBfPWcuZmluZEluZGV4KCh1KT0+dS5pZD09PVMuaWQpO2lmKF8hPT0tMSlyZXR1cm5bLi4uZy5zbGljZSgwLF8pLHsuLi5nW19dLC4uLlN9LC4uLmcuc2xpY2UoXysxKV07cmV0dXJuW1MsLi4uZ119KX0pfSl9KX0sW3hdKSxmLnVzZUVmZmVjdCgoKT0+e2lmKEMhPT0ic3lzdGVtIil7SjEoQyk7cmV0dXJufWlmKEM9PT0ic3lzdGVtIilpZih3aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzKUoxKCJkYXJrIik7ZWxzZSBKMSgibGlnaHQiKTtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IFM9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKTt0cnl7Uy5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCh7bWF0Y2hlczpnfSk9PntpZihnKUoxKCJkYXJrIik7ZWxzZSBKMSgibGlnaHQiKX0pfWNhdGNoKGcpe1MuYWRkTGlzdGVuZXIoKHttYXRjaGVzOl99KT0+e3RyeXtpZihfKUoxKCJkYXJrIik7ZWxzZSBKMSgibGlnaHQiKX1jYXRjaCh1KXtjb25zb2xlLmVycm9yKHUpfX0pfX0sW0NdKSxmLnVzZUVmZmVjdCgoKT0+e2lmKHgubGVuZ3RoPD0xKSQxKCExKX0sW3hdKSxmLnVzZUVmZmVjdCgoKT0+e2xldCBTPShnKT0+e3ZhciBfO2lmKHEuZXZlcnkoKGopPT5nW2pdfHxnLmNvZGU9PT1qKSl7dmFyIHA7JDEoITApLChwPUcxLmN1cnJlbnQpPT1udWxsfHxwLmZvY3VzKCl9aWYoZy5jb2RlPT09IkVzY2FwZSImJihkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09RzEuY3VycmVudHx8KChfPUcxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpfLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSkpJDEoITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsUyksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLFMpfSxbcV0pLGYudXNlRWZmZWN0KCgpPT57aWYoRzEuY3VycmVudClyZXR1cm4oKT0+e2lmKG4uY3VycmVudCluLmN1cnJlbnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSxuLmN1cnJlbnQ9bnVsbCxYMS5jdXJyZW50PSExfX0sW0cxLmN1cnJlbnRdKSxmLmNyZWF0ZUVsZW1lbnQoInNlY3Rpb24iLHtyZWY6SiwiYXJpYS1sYWJlbCI6YCR7UH0gJHtPMX1gLHRhYkluZGV4Oi0xLCJhcmlhLWxpdmUiOiJwb2xpdGUiLCJhcmlhLXJlbGV2YW50IjoiYWRkaXRpb25zIHRleHQiLCJhcmlhLWF0b21pYyI6ImZhbHNlIixzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmc6ITB9LGwubWFwKChTLGcpPT57dmFyIF87bGV0W3UscF09Uy5zcGxpdCgiLSIpO2lmKCFoLmxlbmd0aClyZXR1cm4gbnVsbDtyZXR1cm4gZi5jcmVhdGVFbGVtZW50KCJvbCIse2tleTpTLGRpcjprPT09ImF1dG8iP242KCk6ayx0YWJJbmRleDotMSxyZWY6RzEsY2xhc3NOYW1lOk4sImRhdGEtc29ubmVyLXRvYXN0ZXIiOiEwLCJkYXRhLXNvbm5lci10aGVtZSI6bSwiZGF0YS15LXBvc2l0aW9uIjp1LCJkYXRhLXgtcG9zaXRpb24iOnAsc3R5bGU6eyItLWZyb250LXRvYXN0LWhlaWdodCI6YCR7KChfPXJbMF0pPT1udWxsP3ZvaWQgMDpfLmhlaWdodCl8fDB9cHhgLCItLXdpZHRoIjpgJHtZSn1weGAsIi0tZ2FwIjpgJHtJfXB4YCwuLi5MLC4uLnpKKHosVil9LG9uQmx1cjooaik9PntpZihYMS5jdXJyZW50JiYhai5jdXJyZW50VGFyZ2V0LmNvbnRhaW5zKGoucmVsYXRlZFRhcmdldCkpe2lmKFgxLmN1cnJlbnQ9ITEsbi5jdXJyZW50KW4uY3VycmVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLG4uY3VycmVudD1udWxsfX0sb25Gb2N1czooaik9PntpZihqLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZqLnRhcmdldC5kYXRhc2V0LmRpc21pc3NpYmxlPT09ImZhbHNlIilyZXR1cm47aWYoIVgxLmN1cnJlbnQpWDEuY3VycmVudD0hMCxuLmN1cnJlbnQ9ai5yZWxhdGVkVGFyZ2V0fSxvbk1vdXNlRW50ZXI6KCk9PiQxKCEwKSxvbk1vdXNlTW92ZTooKT0+JDEoITApLG9uTW91c2VMZWF2ZTooKT0+e2lmKCF6MSkkMSghMSl9LG9uRHJhZ0VuZDooKT0+JDEoITEpLG9uUG9pbnRlckRvd246KGopPT57aWYoai50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmai50YXJnZXQuZGF0YXNldC5kaXNtaXNzaWJsZT09PSJmYWxzZSIpcmV0dXJuO2MoITApfSxvblBvaW50ZXJVcDooKT0+YyghMSl9LGguZmlsdGVyKChqKT0+IWoucG9zaXRpb24mJmc9PT0wfHxqLnBvc2l0aW9uPT09UykubWFwKChqLHExKT0+e3ZhciBMMSxrMTtyZXR1cm4gZi5jcmVhdGVFbGVtZW50KE5KLHtrZXk6ai5pZCxpY29uczp3LGluZGV4OnExLHRvYXN0OmosZGVmYXVsdFJpY2hDb2xvcnM6VSxkdXJhdGlvbjooTDE9Tz09bnVsbD92b2lkIDA6Ty5kdXJhdGlvbikhPW51bGw/TDE6RixjbGFzc05hbWU6Tz09bnVsbD92b2lkIDA6Ty5jbGFzc05hbWUsZGVzY3JpcHRpb25DbGFzc05hbWU6Tz09bnVsbD92b2lkIDA6Ty5kZXNjcmlwdGlvbkNsYXNzTmFtZSxpbnZlcnQ6Syx2aXNpYmxlVG9hc3RzOkgsY2xvc2VCdXR0b246KGsxPU89PW51bGw/dm9pZCAwOk8uY2xvc2VCdXR0b24pIT1udWxsP2sxOkIsaW50ZXJhY3Rpbmc6ejEscG9zaXRpb246UyxzdHlsZTpPPT1udWxsP3ZvaWQgMDpPLnN0eWxlLHVuc3R5bGVkOk89PW51bGw/dm9pZCAwOk8udW5zdHlsZWQsY2xhc3NOYW1lczpPPT1udWxsP3ZvaWQgMDpPLmNsYXNzTmFtZXMsY2FuY2VsQnV0dG9uU3R5bGU6Tz09bnVsbD92b2lkIDA6Ty5jYW5jZWxCdXR0b25TdHlsZSxhY3Rpb25CdXR0b25TdHlsZTpPPT1udWxsP3ZvaWQgMDpPLmFjdGlvbkJ1dHRvblN0eWxlLGNsb3NlQnV0dG9uQXJpYUxhYmVsOk89PW51bGw/dm9pZCAwOk8uY2xvc2VCdXR0b25BcmlhTGFiZWwscmVtb3ZlVG9hc3Q6VjEsdG9hc3RzOmguZmlsdGVyKChXMSk9PlcxLnBvc2l0aW9uPT1qLnBvc2l0aW9uKSxoZWlnaHRzOnIuZmlsdGVyKChXMSk9PlcxLnBvc2l0aW9uPT1qLnBvc2l0aW9uKSxzZXRIZWlnaHRzOm8sZXhwYW5kQnlEZWZhdWx0OkcsZ2FwOkksZXhwYW5kZWQ6aSxzd2lwZURpcmVjdGlvbnM6US5zd2lwZURpcmVjdGlvbnN9KX0pKX0pKX0pO2Z1bmN0aW9uIHM2KCl7cmV0dXJuIFooYTYse3RoZW1lOiJkYXJrIixwb3NpdGlvbjoiYm90dG9tLWNlbnRlciIsdmlzaWJsZVRvYXN0czo0LGdhcDo4LG9mZnNldDp7Ym90dG9tOjI0fSx0b2FzdE9wdGlvbnM6e3Vuc3R5bGVkOiEwfSxzdHlsZTp7ekluZGV4OjIxNDc0ODM2NDd9LGNvbnRhaW5lckFyaWFMYWJlbDoic2VydmUtc2ltIG5vdGlmaWNhdGlvbnMifSl9ZnVuY3Rpb24gdDYoe3RvYXN0OiR9KXtsZXQgUT0kLnN0YXR1cz09PSJlcnJvciIsSj0kLnN0YXR1cz09PSJ1cGxvYWRpbmciLFg9SiYmJC5wcm9ncmVzcyE9PW51bGwsSz0kLnByb2dyZXNzIT1udWxsP01hdGgucm91bmQoJC5wcm9ncmVzcyoxMDApOjA7cmV0dXJuIFooImRpdiIseyJkYXRhLXRlc3RpZCI6InVwbG9hZC10b2FzdCIsY2xhc3NOYW1lOmBmbGV4IHctW21pbigzMjBweCxjYWxjKDEwMHZ3LTMycHgpKV0gZmxleC1jb2wgZ2FwLTEuNSBweC0zIHB5LTIgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLWxnIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tb25vIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNDUpXSAke1E/InNlbGVjdC10ZXh0IGN1cnNvci10ZXh0Ijoic2VsZWN0LW5vbmUgY3Vyc29yLWRlZmF1bHQifWAsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgbWluLXctMCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuM3NdIixzdHlsZTp7YmFja2dyb3VuZDpKPyIjYTViNGZjIjokLnN0YXR1cz09PSJzdWNjZXNzIj8iIzRhZGU4MCI6IiNmODcxNzEifX0pLFooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46W0omJlgmJmBVcGxvYWRpbmcgJHskLm5hbWV94oCmICR7S30lYCxKJiYhWCYmKCQua2luZD09PSJpcGEiP2BJbnN0YWxsaW5nICR7JC5uYW1lfeKApmA6YEFkZGluZyAkeyQubmFtZX3igKZgKSwkLnN0YXR1cz09PSJzdWNjZXNzIiYmKCQua2luZD09PSJpcGEiP2BJbnN0YWxsZWQgJHskLm5hbWV9YDpgQWRkZWQgJHskLm5hbWV9IHRvIFBob3Rvc2ApLFEmJmAkeyQubmFtZX06ICR7JC5tZXNzYWdlPz8iVXBsb2FkIGZhaWxlZCJ9YF19KV19KSxKJiZaKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGgtWzNweF0gdy1mdWxsIGJnLXdoaXRlLzggcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4iLGNoaWxkcmVuOlg/WigiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgYmctYWNjZW50IHJvdW5kZWQtWzJweF0gW3RyYW5zaXRpb246d2lkdGhfMTIwbXNfbGluZWFyXSIsc3R5bGU6e3dpZHRoOmAke0t9JWB9fSk6WigiZGl2Iix7Y2xhc3NOYW1lOiJzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSBhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgaC1mdWxsIHctWzQwJV0gYmctYWNjZW50IHJvdW5kZWQtWzJweF0ifSl9KV19KX1mdW5jdGlvbiBlNih7d2lkdGg6JCxoZWlnaHQ6USx2aXNpYmxlOkp9KXtyZXR1cm4gWigiZGl2Iix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC0zIGJvdHRvbS0zIHotMjAgcG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSByb3VuZGVkLWxnIHB4LTIuNSBweS0xIHRleHQtWzExLjVweF0gZm9udC1tb25vIGxlYWRpbmctbm9uZSB0cmFja2luZy13aWRlIHRleHQtd2hpdGUvOTUgYmctcGFuZWwtYmctdHJhbnNsdWNlbnQgc2hhZG93LVswXzFweF8ycHhfcmdiYSgwLDAsMCwwLjE4KSwwXzZweF8xOHB4X3JnYmEoMCwwLDAsMC4yOCksaW5zZXRfMF8wXzBfMXB4X3JnYmEoMjU1LDI1NSwyNTUsMC4wNildIGJhY2tkcm9wLWJsdXItbWQgYmFja2Ryb3Atc2F0dXJhdGUtMTUwIHdoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7b3BhY2l0eTpKPzE6MCx0cmFuc2Zvcm06YHRyYW5zbGF0ZVkoJHtKPzA6NH1weCkgc2NhbGUoJHtKPzE6MC45Nn0pYCx0cmFuc2Zvcm1PcmlnaW46IjEwMCUgMTAwJSIsdHJhbnNpdGlvbjoib3BhY2l0eSAxODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLCB0cmFuc2Zvcm0gMjIwbXMgY3ViaWMtYmV6aWVyKDAuMiwgMC44MiwgMC4yMiwgMSkifSxjaGlsZHJlbjpbTWF0aC5yb3VuZCgkKSwiICIsWigic3BhbiIse2NsYXNzTmFtZToib3BhY2l0eS02MCBteC0wLjUiLGNoaWxkcmVuOiLDlyJ9KSwiICIsTWF0aC5yb3VuZChRKV19KX1mdW5jdGlvbiAkNCh7c3RyZWFtaW5nOiR9KXtsZXQgUT0kPyIjNGFkZTgwIjoiIzhlOGU5MyI7cmV0dXJuIFooInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJzdHJlYW0tc3RhdHVzLXBpbGwiLGNsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC1bNXB4XSB0ZXh0LVsxMnB4XSBmb250LW1vbm8gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7Y29sb3I6UX0sImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2hpbGRyZW46W1ooInNwYW4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMThzX2Vhc2VdIixzdHlsZTp7YmFja2dyb3VuZDpRfX0pLCQ/ImxpdmUiOiJjb25uZWN0aW5nIl19KX1mdW5jdGlvbiBMSigkLFEsSil7bGV0IFg9Si5sYXQqTWF0aC5QSS8xODAsSz0oJC1KLmxhdCkqTWF0aC5QSS8xODA7cmV0dXJue3g6KFEtSi5sbmcpKk1hdGguUEkvMTgwKk1hdGguY29zKFgpKjYzNzEwMDAsejotSyo2MzcxMDAwfX1mdW5jdGlvbiBVSigkLFEsSil7bGV0IFg9Si5sYXQqTWF0aC5QSS8xODAsSz0tUS82MzcxMDAwKigxODAvTWF0aC5QSSksWT0kLyg2MzcxMDAwKk1hdGguY29zKFgpKSooMTgwL01hdGguUEkpO3JldHVybntsYXQ6Si5sYXQrSyxsbmc6Si5sbmcrWX19ZnVuY3Rpb24gSEooJCxRLEosWCxLKXtsZXQgWT1LKksscT1ZKkssRz0oQixOLHosVik9PjAuNSooMipOKygtQit6KSpLKygyKkItNSpOKzQqei1WKSpZKygtQiszKk4tMyp6K1YpKnEpO3JldHVybnt4OkcoJC54LFEueCxKLngsWC54KSx6OkcoJC56LFEueixKLnosWC56KSx5OkcoJC55LFEueSxKLnksWC55KSxyYXdBbHQ6RygkLnJhd0FsdCxRLnJhd0FsdCxKLnJhd0FsdCxYLnJhd0FsdCl9fWZ1bmN0aW9uIENKKCQsUSxKKXtpZigkLmxlbmd0aDwyKXJldHVybiAkLnNsaWNlKCk7bGV0IFg9W10sSz0kLmxlbmd0aCxZPUo/SzpLLTE7Zm9yKGxldCBxPTA7cTxZO3ErKyl7bGV0IEc9JFtKPyhxLTErSyklSzpNYXRoLm1heCgwLHEtMSldLEI9JFtxJUtdLE49JFsocSsxKSVLXSx6PSRbSj8ocSsyKSVLOk1hdGgubWluKEstMSxxKzIpXSxWPU4ueC1CLngsQz1OLnotQi56LFU9TWF0aC5oeXBvdChWLEMpLEY9TWF0aC5tYXgoMixNYXRoLmNlaWwoVS9RKSk7Zm9yKGxldCBMPTA7TDxGO0wrKyl7bGV0IEg9TC9GO1gucHVzaChISihHLEIsTix6LEgpKX19aWYoIUopWC5wdXNoKCRbSy0xXSk7cmV0dXJuIFh9ZnVuY3Rpb24gUTQoJCl7aWYoJC53YXlwb2ludHMubGVuZ3RoPDIpdGhyb3cgRXJyb3IoYFRyYWlsICR7JC5pZH0gbmVlZHMgYXQgbGVhc3QgMiB3YXlwb2ludHNgKTtsZXQgUT17bGF0OiQud2F5cG9pbnRzLnJlZHVjZSgoTCxIKT0+TCtILmxhdCwwKS8kLndheXBvaW50cy5sZW5ndGgsbG5nOiQud2F5cG9pbnRzLnJlZHVjZSgoTCxIKT0+TCtILmxuZywwKS8kLndheXBvaW50cy5sZW5ndGh9LEo9JC53YXlwb2ludHMubWFwKChMKT0+TC5hbHQ/PzApLFg9TWF0aC5taW4oLi4uSiksSz1NYXRoLm1heCguLi5KKSxZPSQud2F5cG9pbnRzLm1hcCgoTCk9PntsZXR7eDpILHo6T309TEooTC5sYXQsTC5sbmcsUSksaz1MLmFsdD8/MDtyZXR1cm57eDpILHo6Tyx5OmstWCxyYXdBbHQ6a319KSxxPUNKKFksOCwhISQubG9vcCksRz1bXSxCPTA7Zm9yKGxldCBMPTA7TDxxLmxlbmd0aDtMKyspe2xldCBIPXFbTF07aWYoTD4wKXtsZXQgdz1xW0wtMV07Qis9TWF0aC5oeXBvdChILngtdy54LEguei13LnosSC55LXcueSl9bGV0e2xhdDpPLGxuZzprfT1VSihILngsSC56LFEpLEk9TWF0aC5tYXgoMCxILnkpO0cucHVzaCh7eDpILngsejpILnoseTpJLGFyYzpCLGxhdDpPLGxuZzprfSl9bGV0IE49MS8wLHo9LTEvMCxWPTEvMCxDPS0xLzAsVT0xLzAsRj0tMS8wO2ZvcihsZXQgTCBvZiBHKXtpZihMLng8TilOPUwueDtpZihMLng+eil6PUwueDtpZihMLno8VilWPUwuejtpZihMLno+QylDPUwuejtpZihMLnk8VSlVPUwueTtpZihMLnk+RilGPUwueX1yZXR1cm57dHJhaWw6JCxvcmlnaW46USxwb2ludHM6Ryx0b3RhbERpc3RhbmNlOkdbRy5sZW5ndGgtMV0uYXJjLGJvdW5kczp7eDpbTix6XSx5OltVLEZdLHo6W1YsQ119LHJhd01pbkFsdDpYLHJhd01heEFsdDpLfX1mdW5jdGlvbiAkMigkLFEpe2xldCBKPSQudG90YWxEaXN0YW5jZTtpZihKPT09MClyZXR1cm4gJC5wb2ludHNbMF07bGV0IFg9UTtpZigkLnRyYWlsLmxvb3ApWD0oWCVKK0opJUo7ZWxzZXtpZihYPD0wKXJldHVybiAkLnBvaW50c1swXTtpZihYPj1KKXJldHVybiAkLnBvaW50c1skLnBvaW50cy5sZW5ndGgtMV19bGV0IEs9MCxZPSQucG9pbnRzLmxlbmd0aC0xO3doaWxlKEsrMTxZKXtsZXQgej1LK1k+Pj4xO2lmKCQucG9pbnRzW3pdLmFyYzw9WClLPXo7ZWxzZSBZPXp9bGV0IHE9JC5wb2ludHNbS10sRz0kLnBvaW50c1tZXSxCPUcuYXJjLXEuYXJjLE49Qj09PTA/MDooWC1xLmFyYykvQjtyZXR1cm57eDpxLngrKEcueC1xLngpKk4sejpxLnorKEcuei1xLnopKk4seTpxLnkrKEcueS1xLnkpKk4sYXJjOlgsbGF0OnEubGF0KyhHLmxhdC1xLmxhdCkqTixsbmc6cS5sbmcrKEcubG5nLXEubG5nKSpOfX1mdW5jdGlvbiBLOCgkKXtzd2l0Y2goJCl7Y2FzZSJ3YWxrIjpyZXR1cm4gMS40O2Nhc2UicnVuIjpyZXR1cm4gMztjYXNlImN5Y2xlIjpyZXR1cm4gNS41O2Nhc2UiZHJpdmUiOnJldHVybiAxMy40fX12YXIgT0o9W3tsYXQ6MzcuMzMyNzIsbG5nOi0xMjIuMDA4MzMsYWx0OjQ5fSx7bGF0OjM3LjMzMzA5LGxuZzotMTIyLjAwNzM1LGFsdDo0OH0se2xhdDozNy4zMzM3Myxsbmc6LTEyMi4wMDY2MyxhbHQ6NDl9LHtsYXQ6MzcuMzM0NTQsbG5nOi0xMjIuMDA2MjcsYWx0OjQ5fSx7bGF0OjM3LjMzNTQsbG5nOi0xMjIuMDA2MzMsYWx0OjQ5fSx7bGF0OjM3LjMzNjE4LGxuZzotMTIyLjAwNjc5LGFsdDo0NX0se2xhdDozNy4zMzY3NSxsbmc6LTEyMi4wMDc1OSxhbHQ6NDV9LHtsYXQ6MzcuMzM3MDQsbG5nOi0xMjIuMDA4NjEsYWx0OjQ2fSx7bGF0OjM3LjMzNjk4LGxuZzotMTIyLjAwOTY5LGFsdDo0OH0se2xhdDozNy4zMzY2Mixsbmc6LTEyMi4wMTA2NixhbHQ6NDh9LHtsYXQ6MzcuMzM1OTgsbG5nOi0xMjIuMDExMzgsYWx0OjQ5fSx7bGF0OjM3LjMzNTE3LGxuZzotMTIyLjAxMTc0LGFsdDo1MH0se2xhdDozNy4zMzQzMSxsbmc6LTEyMi4wMTE2OSxhbHQ6NTB9LHtsYXQ6MzcuMzMzNTQsbG5nOi0xMjIuMDExMjIsYWx0OjUwfSx7bGF0OjM3LjMzMjk2LGxuZzotMTIyLjAxMDQyLGFsdDo1MX0se2xhdDozNy4zMzI2OCxsbmc6LTEyMi4wMDk0LGFsdDo1MH1dLEZKPVt7bGF0OjM3LjgzMjEyLGxuZzotMTIyLjQ4MDY1LGFsdDozMH0se2xhdDozNy44MjkzNyxsbmc6LTEyMi40Nzk3NCxhbHQ6MzB9LHtsYXQ6MzcuODI2NDksbG5nOi0xMjIuNDc5NCxhbHQ6MzB9LHtsYXQ6MzcuODIzNjIsbG5nOi0xMjIuNDc5MDcsYWx0OjQ1fSx7bGF0OjM3LjgyMDc0LGxuZzotMTIyLjQ3ODczLGFsdDo1OX0se2xhdDozNy44MTc4Nixsbmc6LTEyMi40NzgzOSxhbHQ6NjZ9LHtsYXQ6MzcuODE0OTgsbG5nOi0xMjIuNDc4MDYsYWx0OjY2fSx7bGF0OjM3LjgxMjExLGxuZzotMTIyLjQ3NzcyLGFsdDo1OH0se2xhdDozNy44MDkyMyxsbmc6LTEyMi40NzczNCxhbHQ6NDR9LHtsYXQ6MzcuODA5NDksbG5nOi0xMjIuNDc3MyxhbHQ6NDV9LHtsYXQ6MzcuODEyMzYsbG5nOi0xMjIuNDc3NjUsYWx0OjU5fSx7bGF0OjM3LjgxNTI0LGxuZzotMTIyLjQ3Nzk4LGFsdDo2Nn0se2xhdDozNy44MTgxMixsbmc6LTEyMi40NzgzMixhbHQ6NjZ9LHtsYXQ6MzcuODIxLGxuZzotMTIyLjQ3ODY2LGFsdDo1OH0se2xhdDozNy44MjM4Nyxsbmc6LTEyMi40NzksYWx0OjQ0fSx7bGF0OjM3LjgyNjc1LGxuZzotMTIyLjQ3OTMzLGFsdDozMH0se2xhdDozNy44Mjk2Myxsbmc6LTEyMi40Nzk2NyxhbHQ6MzB9LHtsYXQ6MzcuODMyMzMsbG5nOi0xMjIuNDgwNzIsYWx0OjMwfV0sTUo9W3tsYXQ6MzcuODg2NjQsbG5nOi0xMjIuNjI1OTksYWx0OjEyMX0se2xhdDozNy44ODg4Nyxsbmc6LTEyMi42MjMzMixhbHQ6MTM1fSx7bGF0OjM3Ljg5MTE1LGxuZzotMTIyLjYyMTYsYWx0OjE2NH0se2xhdDozNy44OTM1Myxsbmc6LTEyMi42MTkyMSxhbHQ6MTgwfSx7bGF0OjM3Ljg5NDY2LGxuZzotMTIyLjYxNTc3LGFsdDoyMjB9LHtsYXQ6MzcuODk2MzEsbG5nOi0xMjIuNjEyNjgsYWx0OjI3M30se2xhdDozNy44OTkxNyxsbmc6LTEyMi42MTA5OCxhbHQ6MzEzfSx7bGF0OjM3LjkwMTY2LGxuZzotMTIyLjYwODU1LGFsdDozNDJ9LHtsYXQ6MzcuOTAxOTksbG5nOi0xMjIuNjA2MDEsYWx0OjQwOH0se2xhdDozNy45MDMzOSxsbmc6LTEyMi42MDQwMSxhbHQ6NDUwfSx7bGF0OjM3LjkwNjYyLGxuZzotMTIyLjYwMjkxLGFsdDo0NDB9LHtsYXQ6MzcuOTA5NzEsbG5nOi0xMjIuNjAxNzMsYWx0OjQzMn0se2xhdDozNy45MTIxMyxsbmc6LTEyMi42MDAwNyxhbHQ6NDM2fSx7bGF0OjM3LjkxNDM5LGxuZzotMTIyLjU5NzgsYWx0OjQxMH0se2xhdDozNy45MTI4NSxsbmc6LTEyMi41OTUwNCxhbHQ6NDIyfSx7bGF0OjM3LjkxMjc0LGxuZzotMTIyLjU5MjAyLGFsdDo0MjV9LHtsYXQ6MzcuOTE1LGxuZzotMTIyLjU5MDMyLGFsdDo0MTJ9LHtsYXQ6MzcuOTE2MzcsbG5nOi0xMjIuNTg5MDMsYWx0OjQwNn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODU5NSxhbHQ6MzgyfSx7bGF0OjM3LjkxNzQsbG5nOi0xMjIuNTgzOTgsYWx0OjM3Mn0se2xhdDozNy45MTY0Mixsbmc6LTEyMi41ODIzNixhbHQ6MzUyfSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4MDExLGFsdDozNDJ9XSxBSj1be2xhdDo0MC43ODIxNixsbmc6LTczLjk2MjU0LGFsdDozN30se2xhdDo0MC43ODIyMSxsbmc6LTczLjk2MDk4LGFsdDozNn0se2xhdDo0MC43ODMyOCxsbmc6LTczLjk2MDEsYWx0OjM2fSx7bGF0OjQwLjc4NDQsbG5nOi03My45NTkzLGFsdDozNn0se2xhdDo0MC43ODU1LGxuZzotNzMuOTU4NDgsYWx0OjM2fSx7bGF0OjQwLjc4NjY0LGxuZzotNzMuOTU3NzQsYWx0OjM2fSx7bGF0OjQwLjc4NzksbG5nOi03My45NTc2NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg4OTgsbG5nOi03My45NTc5MixhbHQ6MzZ9LHtsYXQ6NDAuNzg4NjgsbG5nOi03My45NTk1MSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4OTcsbG5nOi03My45NjExMixhbHQ6MzZ9LHtsYXQ6NDAuNzg4MzMsbG5nOi03My45NjI1LGFsdDozN30se2xhdDo0MC43ODgyOCxsbmc6LTczLjk2NDE2LGFsdDozN30se2xhdDo0MC43ODgwNSxsbmc6LTczLjk2NTczLGFsdDozNn0se2xhdDo0MC43ODY5MSxsbmc6LTczLjk2NjM2LGFsdDozNn0se2xhdDo0MC43ODU2Nixsbmc6LTczLjk2NjY1LGFsdDozNn0se2xhdDo0MC43ODQ1OCxsbmc6LTczLjk2NjA4LGFsdDozNn0se2xhdDo0MC43ODQwMixsbmc6LTczLjk2NDU5LGFsdDozNn0se2xhdDo0MC43ODMyMixsbmc6LTczLjk2MzM0LGFsdDozN31dLGtKPVt7bGF0OjM3LjU5NjU5LGxuZzotMTIyLjUwMzE2LGFsdDo0fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODUwNSxsbmc6LTEyMi41MDY5OCxhbHQ6OTN9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fV0sUTI9W3tpZDoiYXBwbGUtcGFyay1sb29wIixuYW1lOiJBcHBsZSBQYXJrIExvb3AiLGRlc2NyaXB0aW9uOiJDdXBlcnRpbm8g4oCiIGZsYXQgcmluZyByb2FkIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6T0osbG9vcDohMH0se2lkOiJnb2xkZW4tZ2F0ZSIsbmFtZToiR29sZGVuIEdhdGUgQ3Jvc3NpbmciLGRlc2NyaXB0aW9uOiJTYW4gRnJhbmNpc2NvIOKAoiBicmlkZ2Ugcm91bmQtdHJpcCIsbW9kZToicnVuIix3YXlwb2ludHM6RkosbG9vcDohMH0se2lkOiJ0YW0tcmlkZ2UiLG5hbWU6Ik10LiBUYW0gUmlkZ2UiLGRlc2NyaXB0aW9uOiJTdGluc29uIEJlYWNoIOKAoiBTdGVlcCBSYXZpbmUgKyBNYXR0IERhdmlzIGxvb3AiLG1vZGU6IndhbGsiLHdheXBvaW50czpNSixsb29wOiEwfSx7aWQ6ImNlbnRyYWwtcGFyayIsbmFtZToiUmVzZXJ2b2lyIExvb3AiLGRlc2NyaXB0aW9uOiJDZW50cmFsIFBhcmsg4oCiIDIuNSBrbSIsbW9kZToicnVuIix3YXlwb2ludHM6QUosbG9vcDohMH0se2lkOiJwY2gtcGFjaWZpY2EiLG5hbWU6IlBhY2lmaWMgQ29hc3QgSHd5IixkZXNjcmlwdGlvbjoiUGFjaWZpY2Eg4oCiIERldmlsJ3MgU2xpZGUgcm91bmQtdHJpcCIsbW9kZToiZHJpdmUiLHdheXBvaW50czprSixsb29wOiEwfV07ZnVuY3Rpb24gZTEoe29wZW46JCxvbk9wZW5DaGFuZ2U6USxzdW1tYXJ5OkosY2hpbGRyZW46WCxzdW1tYXJ5Q2xhc3NOYW1lOks9IiIsYm9keUNsYXNzTmFtZTpZPSJmbGV4IGZsZXgtY29sIGdhcC0yLjUgcHQtMi41IixjbGFzc05hbWU6cT0iIiwuLi5HfSl7cmV0dXJuIFooImRldGFpbHMiLHtvcGVuOiQsb25Ub2dnbGU6KEIpPT5RKEIuY3VycmVudFRhcmdldC5vcGVuKSxjbGFzc05hbWU6YGxlbS1zZWN0aW9uIGJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIHB4LTMgcHktMiAke3F9YCwuLi5HLGNoaWxkcmVuOltaKCJzdW1tYXJ5Iix7Y2xhc3NOYW1lOmBsZW0tdG9nZ2xlIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIHRleHQtd2hpdGUvOTAgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSBweS0yLjUgcHgtMSAtbXktMiAtbXgtMSB3LVtjYWxjKDEwMCUrOHB4KV0gJHtLfWAsY2hpbGRyZW46W0osWihpMix7b3BlbjokfSldfSksWigiZGl2Iix7Y2xhc3NOYW1lOlksY2hpbGRyZW46WH0pXX0pfWZ1bmN0aW9uIHQ1KHtsYWJlbDokLHZhbHVlOlEsb3B0aW9uczpKLGRpc2FibGVkOlgsb25DaGFuZ2U6SyxjbGFzc05hbWU6WX0pe2xldFtxLEddPUEoITEpLEI9VChudWxsKSxOPVQobnVsbCksW3osVl09QShudWxsKSxDPSgpPT57bGV0IEg9Qi5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZighSClyZXR1cm47Vih7dG9wOkguYm90dG9tKzQsbGVmdDpILmxlZnQsbWluV2lkdGg6SC53aWR0aH0pfTt3MCgoKT0+e2lmKHEpQygpfSxbcV0pLHcwKCgpPT57aWYoIXF8fCF6KXJldHVybjtsZXQgSD1OLmN1cnJlbnQ7aWYoIUgpcmV0dXJuO2xldCBPPTgsaz13aW5kb3cuaW5uZXJXaWR0aC1ILm9mZnNldFdpZHRoLU87aWYoei5sZWZ0PmspVih7Li4ueixsZWZ0Ok1hdGgubWF4KE8sayl9KX0sW3Esel0pLGIoKCk9PntpZighcSlyZXR1cm47bGV0IEg9KCk9PkcoITEpLE89KEkpPT57bGV0IHc9SS50YXJnZXQ7aWYoIU4uY3VycmVudD8uY29udGFpbnModykmJiFCLmN1cnJlbnQ/LmNvbnRhaW5zKHcpKUgoKX0saz0oSSk9PntpZighTi5jdXJyZW50Py5jb250YWlucyhJLnRhcmdldCkpQygpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsTyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsaywhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsSCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixPKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixrLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixIKX19LFtxXSk7bGV0IFU9VCghMSk7YigoKT0+e2lmKCFxKXtVLmN1cnJlbnQ9ITE7cmV0dXJufWlmKCF6fHxVLmN1cnJlbnQpcmV0dXJuO2xldCBIPU4uY3VycmVudD8ucXVlcnlTZWxlY3RvckFsbCgiW3JvbGU9b3B0aW9uXSIpO2lmKCFIPy5sZW5ndGgpcmV0dXJuO1UuY3VycmVudD0hMDtsZXQgTz1KLmZpbmRJbmRleCgoayk9PmsudmFsdWU9PT1RKTtIW01hdGgubWF4KE8sMCldPy5mb2N1cygpfSxbcSx6LEosUV0pO2xldCBGPShIKT0+e2xldCBPPVsuLi5OLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoIltyb2xlPW9wdGlvbl0iKT8/W11dLGs9Ty5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO2lmKEgua2V5PT09IkFycm93RG93biJ8fEgua2V5PT09IkFycm93VXAiKXtILnByZXZlbnREZWZhdWx0KCk7bGV0IEk9SC5rZXk9PT0iQXJyb3dEb3duIj9NYXRoLm1pbihrKzEsTy5sZW5ndGgtMSk6TWF0aC5tYXgoay0xLDApO09bSV0/LmZvY3VzKCl9ZWxzZSBpZihILmtleT09PSJFc2NhcGUiKUgucHJldmVudERlZmF1bHQoKSxHKCExKSxCLmN1cnJlbnQ/LmZvY3VzKCl9LEw9Si5maW5kKChIKT0+SC52YWx1ZT09PVEpO3JldHVybiBaKFoxLHtjaGlsZHJlbjpbWigiYnV0dG9uIix7cmVmOkIsdHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6JCwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpxLGRpc2FibGVkOlgsb25DbGljazooKT0+RygoSCk9PiFIKSxjbGFzc05hbWU6YHRleHQtbGVmdCBmb250LVtpbmhlcml0XSBjdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpjdXJzb3ItZGVmYXVsdCAke1k/PyIifWAsY2hpbGRyZW46Wigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgdHJ1bmNhdGUiLGNoaWxkcmVuOkw/LmxhYmVsPz9RfSl9KSxxJiZ6JiZ3MyhaKCJkaXYiLHtyZWY6Tixyb2xlOiJsaXN0Ym94IiwiYXJpYS1sYWJlbCI6JCxvbktleURvd246RixzdHlsZTp7dG9wOnoudG9wLGxlZnQ6ei5sZWZ0LG1pbldpZHRoOnoubWluV2lkdGh9LGNsYXNzTmFtZToiZml4ZWQgbWF4LWgtOTAgb3ZlcmZsb3cteS1hdXRvIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bMTBweF0gcC0xIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNSldIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgei01MCIsY2hpbGRyZW46Si5tYXAoKEgpPT5aKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHJvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOkgudmFsdWU9PT1RLG9uQ2xpY2s6KCk9PntLKEgudmFsdWUpLEcoITEpLEIuY3VycmVudD8uZm9jdXMoKX0sY2xhc3NOYW1lOmBibG9jayB3LWZ1bGwgdGV4dC1sZWZ0IGZvbnQtW2luaGVyaXRdIHB4LTIuNSBweS0xIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctd2hpdGUvOCBmb2N1cy12aXNpYmxlOmJnLXdoaXRlLzggb3V0bGluZS1ub25lICR7SC52YWx1ZT09PVE/InRleHQtYWNjZW50IjoiIn1gLGNoaWxkcmVuOkgubGFiZWx9LEgudmFsdWUpKX0pLGRvY3VtZW50LmJvZHkpXX0pfXZhciBXSj02NTAsWTg9WzEsMiw1LDIwXSxKND0xMDAwLHE4PXtzdGF0dXM6ImlkbGUiLGFyYzowLGVsYXBzZWRNczowfTtmdW5jdGlvbiBHNCh7dWRpZDokLGV4ZWM6UX0pe2xldFtKLFhdPUEoITEpLFtLLFldPUEoUTJbMF0uaWQpLFtxLEddPUEoUTJbMF0ubW9kZSksW0IsTl09QSgxKSxbeixWXT1BKHE4KSxbQyxVXT1BKG51bGwpLEY9RTEoKCk9PlEyLmZpbmQoKGMpPT5jLmlkPT09Syk/P1EyWzBdLFtLXSksTD1FMSgoKT0+UTQoRiksW0ZdKSxIPVQoMCksTz1UKCJpZGxlIiksaz1UKEs4KHEpKkIpLEk9VCgwKSx3PVQoTCksUD1UKG51bGwpO2IoKCk9PntrLmN1cnJlbnQ9SzgocSkqQn0sW3EsQl0pO2xldCB4PVQobnVsbCk7YigoKT0+e2xldCBjPXcuY3VycmVudCxtPUguY3VycmVudDtpZih3LmN1cnJlbnQ9TCxjJiZjIT09TCl4LmN1cnJlbnQ9UEooYyxtLEwscGVyZm9ybWFuY2Uubm93KCkpO0guY3VycmVudD0wLEkuY3VycmVudD0wLE8uY3VycmVudD0iaWRsZSIsUC5jdXJyZW50PW51bGwsVihxOCl9LFtMXSk7bGV0IHQ9VCgwKSxoPVQobnVsbCksbD1UKG51bGwpO2IoKCk9PntsZXQgYz0wLG09KEoxKT0+e2xldCBHMT1oLmN1cnJlbnQsTzE9RzE9PW51bGw/MTY6TWF0aC5taW4oNjQsSjEtRzEpO2lmKGguY3VycmVudD1KMSx0LmN1cnJlbnQ9KHQuY3VycmVudCtPMSowLjAwMDEyKSUoTWF0aC5QSSoyKSxPLmN1cnJlbnQ9PT0icGxheWluZyIpe2xldCBYMT1rLmN1cnJlbnQqTzEvMTAwMDtILmN1cnJlbnQrPVgxLEkuY3VycmVudCs9TzE7bGV0IFYxPXcuY3VycmVudC50b3RhbERpc3RhbmNlO2lmKCF3LmN1cnJlbnQudHJhaWwubG9vcCYmSC5jdXJyZW50Pj1WMSlILmN1cnJlbnQ9VjEsTy5jdXJyZW50PSJwYXVzZWQiLFYoe3N0YXR1czoicGF1c2VkIixhcmM6VjEsZWxhcHNlZE1zOkkuY3VycmVudH0pfWxldCBuPWwuY3VycmVudDtpZihuKXtsZXQgWDE9dy5jdXJyZW50LFYxPW51bGwsUz14LmN1cnJlbnQ7aWYoUyl7bGV0IGc9KEoxLVMuc3RhcnRNcykvV0o7aWYoZz49MSl4LmN1cnJlbnQ9bnVsbDtlbHNle2xldCBfPXdKKGcpO1gxPUVKKFMsXyksVjE9e3g6Uy5wcmV2TWFya2VyLngrKFMubmV4dE1hcmtlci54LVMucHJldk1hcmtlci54KSpfLHk6Uy5wcmV2TWFya2VyLnkrKFMubmV4dE1hcmtlci55LVMucHJldk1hcmtlci55KSpfLHo6Uy5wcmV2TWFya2VyLnorKFMubmV4dE1hcmtlci56LVMucHJldk1hcmtlci56KSpffX19SUoobixYMSxILmN1cnJlbnQsdC5jdXJyZW50LEoxLE8uY3VycmVudD09PSJwbGF5aW5nIixWMSl9Yz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobSl9O3JldHVybiBjPXJlcXVlc3RBbmltYXRpb25GcmFtZShtKSwoKT0+Y2FuY2VsQW5pbWF0aW9uRnJhbWUoYyl9LFtdKSxiKCgpPT57bGV0IGM9c2V0SW50ZXJ2YWwoKCk9PntpZihPLmN1cnJlbnQ9PT0icGxheWluZyIpVih7c3RhdHVzOiJwbGF5aW5nIixhcmM6SC5jdXJyZW50LGVsYXBzZWRNczpJLmN1cnJlbnR9KX0sMjUwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChjKX0sW10pLGIoKCk9PntpZih6LnN0YXR1cyE9PSJwbGF5aW5nIilyZXR1cm47bGV0IGM9ITEsbT0wLEoxPW51bGwsRzE9YXN5bmMoKT0+e2lmKGN8fEoxKXJldHVybjtsZXQgbj1EYXRlLm5vdygpO2lmKG4tbTxKNClyZXR1cm47bT1uO2xldCBYMT0kMih3LmN1cnJlbnQsSC5jdXJyZW50KSxWMT1geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7WDEubGF0LnRvRml4ZWQoNyl9LCR7WDEubG5nLnRvRml4ZWQoNyl9YDtKMT1RKFYxKS50aGVuKChTKT0+e2lmKGMpcmV0dXJuO2lmKFMuZXhpdENvZGUhPT0wKVUocTQoUy5zdGRlcnIpfHwic2ltY3RsIGxvY2F0aW9uIHNldCBmYWlsZWQiKTtlbHNlIFUobnVsbCl9KS5jYXRjaCgoUyk9PntpZighYylVKFMgaW5zdGFuY2VvZiBFcnJvcj9TLm1lc3NhZ2U6U3RyaW5nKFMpKX0pLmZpbmFsbHkoKCk9PntKMT1udWxsfSl9O0cxKCk7bGV0IE8xPXNldEludGVydmFsKEcxLEo0KTtyZXR1cm4oKT0+e2M9ITAsY2xlYXJJbnRlcnZhbChPMSl9fSxbei5zdGF0dXMsJCxRXSk7bGV0IHI9RSgoKT0+e2lmKE8uY3VycmVudD09PSJwbGF5aW5nIil7Ty5jdXJyZW50PSJwYXVzZWQiLFYoKGMpPT4oey4uLmMsc3RhdHVzOiJwYXVzZWQifSkpO3JldHVybn1pZihILmN1cnJlbnQ+PXcuY3VycmVudC50b3RhbERpc3RhbmNlJiYhdy5jdXJyZW50LnRyYWlsLmxvb3ApSC5jdXJyZW50PTAsSS5jdXJyZW50PTA7aWYoUC5jdXJyZW50PT1udWxsKXtsZXQgYz0kMih3LmN1cnJlbnQsSC5jdXJyZW50KTtQLmN1cnJlbnQ9e2xhdDpjLmxhdCxsbmc6Yy5sbmd9fU8uY3VycmVudD0icGxheWluZyIsVigoYyk9Pih7Li4uYyxzdGF0dXM6InBsYXlpbmciLGFyYzpILmN1cnJlbnQsZWxhcHNlZE1zOkkuY3VycmVudH0pKX0sW10pLG89RSgoKT0+e08uY3VycmVudD0iaWRsZSIsSC5jdXJyZW50PTAsSS5jdXJyZW50PTAsVihxOCk7bGV0IGM9UC5jdXJyZW50O1AuY3VycmVudD1udWxsO2xldCBtPWM/YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IHNldCAke2MubGF0LnRvRml4ZWQoNyl9LCR7Yy5sbmcudG9GaXhlZCg3KX1gOmB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBjbGVhcmA7UShtKS50aGVuKChKMSk9PntpZihKMS5leGl0Q29kZSE9PTApVShxNChKMS5zdGRlcnIpfHxudWxsKTtlbHNlIFUobnVsbCl9KX0sW1EsJF0pLGk9RSgoYyk9PntZKGMpO2xldCBtPVEyLmZpbmQoKEoxKT0+SjEuaWQ9PT1jKTtpZihtKUcobS5tb2RlKX0sW10pO2IoKCk9PigpPT57aWYoTy5jdXJyZW50PT09ImlkbGUiKXJldHVybjtsZXQgYz1QLmN1cnJlbnQsbT1jP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtjLmxhdC50b0ZpeGVkKDcpfSwke2MubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gY2xlYXJgO1EobSkuY2F0Y2goKCk9Pnt9KX0sW1EsJF0pO2xldCAkMT16LnN0YXR1cz09PSJwbGF5aW5nIix6MT0kMT9gJHtWOCh6LmFyYyl9IMK3ICR7SzQoei5lbGFwc2VkTXMpfWA6VjgoTC50b3RhbERpc3RhbmNlKTtyZXR1cm4gWihlMSx7b3BlbjpKLG9uT3BlbkNoYW5nZTpYLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvX21pbm1heCgwLDFmcilfYXV0b10gW2NvbnRhaW5lci10eXBlOmlubGluZS1zaXplXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlooWjEse2NoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJMb2NhdGlvbiJ9KSxKP1ooInNwYW4iLHsiZGF0YS1sb2NhdGlvbi1zdGF0dXMiOiEwLGNsYXNzTmFtZToibWluLXctMCB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBqdXN0aWZ5LXNlbGYtZW5kIGxlYWRpbmctbm9uZSB3aGl0ZXNwYWNlLW5vd3JhcCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyBtYXgtdy1mdWxsIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4ycyxib3gtc2hhZG93XzAuMnNdIixzdHlsZTp7YmFja2dyb3VuZDokMT8iIzRhZGU4MCI6TC50b3RhbERpc3RhbmNlPjA/InJnYmEoMjU1LDI1NSwyNTUsMC4zKSI6InRyYW5zcGFyZW50Iixib3hTaGFkb3c6JDE/IjAgMCA2cHggcmdiYSg3NCwyMjIsMTI4LDAuNykiOiJub25lIn19KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIixjaGlsZHJlbjp6MX0pLCEkMSYmWigic3BhbiIseyJkYXRhLWxvY2F0aW9uLXN0YXR1cy10b3RhbCI6ITAsY2xhc3NOYW1lOiJzaHJpbmstMCIsY2hpbGRyZW46InRvdGFsIn0pXX0pOlooInNwYW4iLHt9KV19KSxjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBibG9jayIsY2hpbGRyZW46W1oodDUse2xhYmVsOiJUcmFpbCIsdmFsdWU6SyxvbkNoYW5nZTppLG9wdGlvbnM6UTIubWFwKChjKT0+KHt2YWx1ZTpjLmlkLGxhYmVsOmMubmFtZX0pKSxjbGFzc05hbWU6ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTEuNSBwci1bMjZweF0gcGwtMiB3LWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxib3JkZXItY29sb3JfMC4xMnNdIGhvdmVyOmJnLXdoaXRlL1swLjA3XSBob3Zlcjpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4xNildIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpiZy13aGl0ZS9bMC4wOF0gZm9jdXM6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMjQpXSJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC1bOXB4XSB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgcG9pbnRlci1ldmVudHMtbm9uZSBmbGV4IGl0ZW1zLWNlbnRlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WihpMix7b3BlbjohMX0pfSldfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpGLmRlc2NyaXB0aW9ufSldfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgcm91bmRlZC1bMTBweF0gb3ZlcmZsb3ctaGlkZGVuIGJnLVsjMGEwYTBjXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSBbYXNwZWN0LXJhdGlvOjE2LzExXSIsY2hpbGRyZW46W1ooImNhbnZhcyIse3JlZjpsLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBibG9jayJ9KSxaKERKLHtwcmVwYXJlZDpMfSldfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyXzFmcl8xZnJdIGdhcC0xLjUiLGNoaWxkcmVuOltaKEc4LHtsYWJlbDoiRGlzdGFuY2UiLHZhbHVlOlY4KHouYXJjKX0pLFooRzgse2xhYmVsOiJQYWNlIix2YWx1ZTp5SihrLmN1cnJlbnQpfSksWihHOCx7bGFiZWw6IkVsYXBzZWQiLHZhbHVlOks0KHouZWxhcHNlZE1zKX0pXX0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMS41IixjaGlsZHJlbjpbWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOnIsY2xhc3NOYW1lOmBmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTIuNSBib3JkZXItbm9uZSByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gJHskMT8iYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4yMl0iOiJiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0gZW5hYmxlZDpob3ZlcjpicmlnaHRuZXNzLVsxLjA4XSJ9YCwiYXJpYS1wcmVzc2VkIjokMSx0aXRsZTokMT8iUGF1c2UiOiJQbGF5IixjaGlsZHJlbjpbJDE/WihtMyx7fSk6WihuMix7fSksWigic3BhbiIse2NoaWxkcmVuOiQxPyJQYXVzZSI6IlBsYXkifSldfSksWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOm8sY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMS41IHB5LTIgcHgtMyBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzdweF0gdGV4dC1bMTJweF0gZm9udC1tZWRpdW0gYmctdHJhbnNwYXJlbnQgdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjA2XSBlbmFibGVkOmhvdmVyOmJvcmRlci13aGl0ZS8yMCBlbmFibGVkOmhvdmVyOnRleHQtd2hpdGUgZGlzYWJsZWQ6b3BhY2l0eS00MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQiLGRpc2FibGVkOnouc3RhdHVzPT09ImlkbGUiJiZ6LmFyYz09PTAsdGl0bGU6IlN0b3AgYW5kIGNsZWFyIHNpbXVsYXRlZCBsb2NhdGlvbiIsY2hpbGRyZW46W1oocjIse30pLFooInNwYW4iLHtjaGlsZHJlbjoiU3RvcCJ9KV19KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46WihfSix7YXJpYUxhYmVsOiJUcmFuc3BvcnQgbW9kZSIsdmFsdWU6cSxvbkNoYW5nZTooYyk9PkcoYyksb3B0aW9uczpbe3ZhbHVlOiJ3YWxrIixsYWJlbDoiV2FsayIsaWNvbjpaKHUzLHt9KX0se3ZhbHVlOiJydW4iLGxhYmVsOiJSdW4iLGljb246WihsMyx7fSl9LHt2YWx1ZToiY3ljbGUiLGxhYmVsOiJDeWNsZSIsaWNvbjpaKGQzLHt9KX0se3ZhbHVlOiJkcml2ZSIsbGFiZWw6IkRyaXZlIixpY29uOlooYzMse30pfV19KX0pLFooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e2xldCBjPVk4LmluZGV4T2YoQiksbT1ZOFsoYysxKSVZOC5sZW5ndGhdO04obSl9LGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcHgtMi41IGJvcmRlciByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgbWluLXctWzU2cHhdIGFjdGl2ZTpzY2FsZS1bMC45N10gJHtCPjE/ImJnLXdoaXRlIGJvcmRlci13aGl0ZSB0ZXh0LVsjMGEwYTBjXSBob3ZlcjpiZy13aGl0ZS9bMC44OF0gaG92ZXI6Ym9yZGVyLXdoaXRlL1swLjg4XSBob3Zlcjp0ZXh0LVsjMGEwYTBjXSI6ImJnLXdoaXRlL1swLjA0XSBib3JkZXItd2hpdGUvOCB0ZXh0LXdoaXRlLzg1IGhvdmVyOmJnLXdoaXRlL1swLjA5XSBob3Zlcjpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4xOCldIGhvdmVyOnRleHQtd2hpdGUifWAsImFyaWEtbGFiZWwiOmBTcGVlZCAke0J9w5cg4oCUIHRhcCB0byBjeWNsZWAsdGl0bGU6YFNwZWVkICR7Qn3DlyDigJQgdGFwIHRvIGN5Y2xlYCxjaGlsZHJlbjpbWihwMyx7fSksQj4xJiZaKCJzcGFuIix7Y2xhc3NOYW1lOiJmb250LW1vbm8gW2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc10iLGNoaWxkcmVuOltCLCLDlyJdfSldfSldfSksQyYmWigiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjpDfSldfSl9dmFyIEc4PW4wKGZ1bmN0aW9uKHtsYWJlbDpRLHZhbHVlOkp9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgYmctd2hpdGUvWzAuMDNdIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIHJvdW5kZWQtbWQgcHktWzVweF0gcHgtWzdweF0gbWluLXctMCIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToidGV4dC1bOXB4XSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDZlbV0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46UX0pLFooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gZm9udC1tb25vIHRleHQtd2hpdGUgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOkp9KV19KX0pO2Z1bmN0aW9uIF9KKHt2YWx1ZTokLG9uQ2hhbmdlOlEsb3B0aW9uczpKLGFyaWFMYWJlbDpYfSl7cmV0dXJuIFooImRpdiIse3JvbGU6Imdyb3VwIiwiYXJpYS1sYWJlbCI6WCxjbGFzc05hbWU6ImZsZXggYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVs3cHhdIHAtMC41IGdhcC0wLjUiLGNoaWxkcmVuOkoubWFwKChLKT0+e2xldCBZPUsudmFsdWU9PT0kO3JldHVybiBaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PlEoSy52YWx1ZSksY2xhc3NOYW1lOmBmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLW5vbmUgcm91bmRlZC1bNXB4XSBweS1bNXB4XSBweC0yIHRleHQtWzExcHhdIGZvbnQtbWVkaXVtIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdIG1pbi1oLVsyMnB4XSAke1k/ImJnLXdoaXRlL1swLjEyXSB0ZXh0LXdoaXRlIjoiYmctdHJhbnNwYXJlbnQgdGV4dC13aGl0ZS82MCBob3ZlcjpiZy13aGl0ZS9bMC4wNV0gaG92ZXI6dGV4dC13aGl0ZS85MCJ9YCwiYXJpYS1wcmVzc2VkIjpZLCJhcmlhLWxhYmVsIjpLLmljb24/Sy5sYWJlbDp2b2lkIDAsdGl0bGU6Sy5pY29uP0subGFiZWw6dm9pZCAwLGNoaWxkcmVuOksuaWNvbj8/Sy5sYWJlbH0sSy52YWx1ZSl9KX0pfWZ1bmN0aW9uIERKKHtwcmVwYXJlZDokfSl7aWYoJC5yYXdNYXhBbHQtJC5yYXdNaW5BbHQ8NSlyZXR1cm4gbnVsbDtyZXR1cm4gWihaMSx7Y2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgbGVmdC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltaKGo1LHtkaXI6InVwIn0pLCIgIixZNCgkLnJhd01heEFsdCldfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMiByaWdodC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltaKGo1LHtkaXI6ImRvd24ifSksIiAiLFk0KCQucmF3TWluQWx0KV19KV19KX12YXIgWjQ9MTQwO2Z1bmN0aW9uIFg0KCQsUSl7bGV0IEo9QXJyYXkoUSk7Zm9yKGxldCBYPTA7WDxRO1grKyl7bGV0IEs9UT09PTE/MDpYLyhRLTEpLFk9JDIoJCxLKiQudG90YWxEaXN0YW5jZSk7SltYXT17eDpZLngseTpZLnksejpZLnp9fXJldHVybiBKfWZ1bmN0aW9uIFBKKCQsUSxKLFgpe2xldCBLPSgkLmJvdW5kcy54WzBdKyQuYm91bmRzLnhbMV0pLzIsWT0oJC5ib3VuZHMuelswXSskLmJvdW5kcy56WzFdKS8yLHE9JC5ib3VuZHMueVswXSxHPU1hdGgubWF4KDEsJC5ib3VuZHMueFsxXS0kLmJvdW5kcy54WzBdLCQuYm91bmRzLnpbMV0tJC5ib3VuZHMuelswXSksQj0oSi5ib3VuZHMueFswXStKLmJvdW5kcy54WzFdKS8yLE49KEouYm91bmRzLnpbMF0rSi5ib3VuZHMuelsxXSkvMix6PUouYm91bmRzLnlbMF0sQz1NYXRoLm1heCgxLEouYm91bmRzLnhbMV0tSi5ib3VuZHMueFswXSxKLmJvdW5kcy56WzFdLUouYm91bmRzLnpbMF0pL0csRj1YNCgkLFo0KS5tYXAoKHgpPT4oe3g6KHgueC1LKSpDK0IseTooeC55LXEpKkMreix6Oih4LnotWSkqQytOfSkpLEw9WDQoSixaNCksSD0oJC50cmFpbC5sb29wfHxKLnRyYWlsLmxvb3ApPz8hMSxPPVRKKEYsTCxIKSxrPSQyKCQsUSksST17eDooay54LUspKkMrQix5OihrLnktcSkqQyt6LHo6KGsuei1ZKSpDK059LHc9JDIoSiwwKSxQPXt4OncueCx5OncueSx6Oncuen07cmV0dXJue2Zyb206JCx0bzpKLGZyb21QdHM6Rix0b1B0czpPLHByZXZNYXJrZXI6SSxuZXh0TWFya2VyOlAsc3RhcnRNczpYfX1mdW5jdGlvbiBUSigkLFEsSil7bGV0IFg9JC5sZW5ndGgsSz0xLzAsWT0wLHE9ITEsRz1bUSxbLi4uUV0ucmV2ZXJzZSgpXTtmb3IobGV0IHo9MDt6PEcubGVuZ3RoO3orKyl7bGV0IFY9R1t6XSxDPUo/WDoxO2ZvcihsZXQgVT0wO1U8QztVKyspe2xldCBGPTA7Zm9yKGxldCBMPTA7TDxYO0wrKyl7bGV0IEg9JFtMXSxPPVZbKEwrVSklWF0saz1ILngtTy54LEk9SC55LU8ueSx3PUguei1PLno7aWYoRis9ayprK0kqSSt3KncsRj49SylicmVha31pZihGPEspSz1GLFk9VSxxPXo9PT0xfX1sZXQgQj1xP1suLi5RXS5yZXZlcnNlKCk6USxOPUFycmF5KFgpO2ZvcihsZXQgej0wO3o8WDt6KyspTlt6XT1CWyh6K1kpJVhdO3JldHVybiBOfWZ1bmN0aW9uIEVKKCQsUSl7bGV0IEo9JC5mcm9tUHRzLmxlbmd0aCxYPUFycmF5KEopLEs9MCxZPW51bGwscT0xLzAsRz0tMS8wLEI9MS8wLE49LTEvMCx6PTEvMCxWPS0xLzA7Zm9yKGxldCBDPTA7QzxKO0MrKyl7bGV0IFU9JC5mcm9tUHRzW0NdLEY9JC50b1B0c1tDXSxMPVUueCsoRi54LVUueCkqUSxIPVUueSsoRi55LVUueSkqUSxPPVUueisoRi56LVUueikqUTtpZihZKXtsZXQgST1MLVkueCx3PUgtWS55LFA9Ty1ZLno7Sys9TWF0aC5zcXJ0KEkqSSt3KncrUCpQKX1sZXQgaz17eDpMLHk6SCx6Ok8sYXJjOkssbGF0OjAsbG5nOjB9O2lmKFhbQ109ayxZPWssTDxxKXE9TDtpZihMPkcpRz1MO2lmKEg8QilCPUg7aWYoSD5OKU49SDtpZihPPHopej1PO2lmKE8+VilWPU99cmV0dXJue3RyYWlsOiQudG8udHJhaWwsb3JpZ2luOiQudG8ub3JpZ2luLHBvaW50czpYLHRvdGFsRGlzdGFuY2U6Syxib3VuZHM6e3g6W3EsR10seTpbQixOXSx6Olt6LFZdfSxyYXdNaW5BbHQ6JC50by5yYXdNaW5BbHQrKCQuZnJvbS5yYXdNaW5BbHQtJC50by5yYXdNaW5BbHQpKigxLVEpLHJhd01heEFsdDokLnRvLnJhd01heEFsdCsoJC5mcm9tLnJhd01heEFsdC0kLnRvLnJhd01heEFsdCkqKDEtUSl9fWZ1bmN0aW9uIHdKKCQpe3JldHVybiAkPDAuNT8yKiQqJDoxLU1hdGgucG93KC0yKiQrMiwyKS8yfWZ1bmN0aW9uIElKKCQsUSxKLFgsSyxZLHEpe2xldCBHPSQuZ2V0Q29udGV4dCgiMmQiKTtpZighRylyZXR1cm47bGV0e2NsaWVudFdpZHRoOkIsY2xpZW50SGVpZ2h0Ok59PSQ7aWYoQj09PTB8fE49PT0wKXJldHVybjtsZXQgej10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MToxLFY9TWF0aC5yb3VuZChCKnopLEM9TWF0aC5yb3VuZChOKnopO2lmKCQud2lkdGghPT1WfHwkLmhlaWdodCE9PUMpJC53aWR0aD1WLCQuaGVpZ2h0PUM7Ry5zZXRUcmFuc2Zvcm0oeiwwLDAseiwwLDApLEcuY2xlYXJSZWN0KDAsMCxCLE4pO2xldCBVPUcuY3JlYXRlUmFkaWFsR3JhZGllbnQoQiowLjUsTiowLjU1LE1hdGgubWluKEIsTikqMC4yLEIqMC41LE4qMC41NSxNYXRoLm1heChCLE4pKjAuODUpO1UuYWRkQ29sb3JTdG9wKDAsIiMxYTFhMWQiKSxVLmFkZENvbG9yU3RvcCgxLCIjMGEwYTBjIiksRy5maWxsU3R5bGU9VSxHLmZpbGxSZWN0KDAsMCxCLE4pLGJKKEcsQixOKTtsZXR7cG9pbnRzOkYsYm91bmRzOkx9PVE7aWYoRi5sZW5ndGg8MilyZXR1cm47bGV0IEg9MjgqTWF0aC5QSS8xODAsTz1NYXRoLnNpbihIKSxrPU1hdGguY29zKEgpLEk9TWF0aC5zaW4oWCksdz1NYXRoLmNvcyhYKSxQPShMLnhbMF0rTC54WzFdKS8yLHg9KEwuelswXStMLnpbMV0pLzIsdD1MLnhbMV0tTC54WzBdLGg9TC56WzFdLUwuelswXSxsPUwueVsxXS1MLnlbMF0scj1NYXRoLm1heCh0LGgpKjEuMDUsbz1NYXRoLm1heChoKmsrbCpPLHQqMC40KSoxLjE1LGk9QiowLjA4LCQxPU4qMC4xOCx6MT1NYXRoLm1pbigoQi1pKjIpL3IsKE4tJDEqMikvbykqMS40NSxjPWw8MT8xOk1hdGgubWluKDI0LDE0MC9NYXRoLm1heCgyMCxsKSksbT0oUyxnLF8pPT57bGV0IHU9Uy1QLHA9Xy14LGo9dSp3K3AqSSxxMT0tdSpJK3AqdyxMMT1nKmMsazE9TDEqay1xMSpPLFcxPUwxKk8rcTEqaztyZXR1cm57c3g6Qi8yK2oqejEsc3k6TiowLjU1LWsxKnoxLGRlcHRoOlcxfX0sSjE9MzgsRzE9Ri5tYXAoKFMpPT57bGV0IGc9bShTLngsUy55LFMueiksXz1tKFMueCwwLFMueiksdT17c3g6Zy5zeCxzeTpNYXRoLm1heChfLnN5LGcuc3krSjEpLGRlcHRoOl8uZGVwdGh9O3JldHVybntwOlMsdG9wOmcsYm90OnV9fSk7Zm9yKGxldCBTPTE7UzxHMS5sZW5ndGg7UysrKXtsZXQgZz1HMVtTLTFdLF89RzFbU10sdT1HLmNyZWF0ZUxpbmVhckdyYWRpZW50KChnLnRvcC5zeCtfLnRvcC5zeCkvMiwoZy50b3Auc3krXy50b3Auc3kpLzIsKGcuYm90LnN4K18uYm90LnN4KS8yLChnLmJvdC5zeStfLmJvdC5zeSkvMik7dS5hZGRDb2xvclN0b3AoMCwicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIpLHUuYWRkQ29sb3JTdG9wKDAuNDUsInJnYmEoMTgwLDE4MCwxODUsMC4yOCkiKSx1LmFkZENvbG9yU3RvcCgwLjg1LCJyZ2JhKDQwLDQwLDQ1LDAuMTgpIiksdS5hZGRDb2xvclN0b3AoMSwicmdiYSgwLDAsMCwwKSIpLEcuZmlsbFN0eWxlPXUsRy5iZWdpblBhdGgoKSxHLm1vdmVUbyhnLnRvcC5zeCxnLnRvcC5zeSksRy5saW5lVG8oXy50b3Auc3gsXy50b3Auc3kpLEcubGluZVRvKF8uYm90LnN4LF8uYm90LnN5KSxHLmxpbmVUbyhnLmJvdC5zeCxnLmJvdC5zeSksRy5jbG9zZVBhdGgoKSxHLmZpbGwoKX1HLnN0cm9rZVN0eWxlPSIjZmZmZmZmIixHLmxpbmVXaWR0aD0xLjYsRy5saW5lQ2FwPSJyb3VuZCIsRy5saW5lSm9pbj0icm91bmQiLEcuYmVnaW5QYXRoKCk7Zm9yKGxldCBTPTA7UzxHMS5sZW5ndGg7UysrKXtsZXR7dG9wOmd9PUcxW1NdO2lmKFM9PT0wKUcubW92ZVRvKGcuc3gsZy5zeSk7ZWxzZSBHLmxpbmVUbyhnLnN4LGcuc3kpfUcuc3Ryb2tlKCk7bGV0IE8xPUo7Ry5zdHJva2VTdHlsZT0iI2Y5ZDJhNCIsRy5saW5lV2lkdGg9Mi4yLEcuYmVnaW5QYXRoKCk7bGV0IG49ITE7Zm9yKGxldCBTPTA7UzxHMS5sZW5ndGg7UysrKXtsZXR7cDpnLHRvcDpffT1HMVtTXTtpZihnLmFyYz5PMSlicmVhaztpZighbilHLm1vdmVUbyhfLnN4LF8uc3kpLG49ITA7ZWxzZSBHLmxpbmVUbyhfLnN4LF8uc3kpfWlmKG4pRy5zdHJva2UoKTtsZXQgWDE9cT8/JDIoUSxKKSxWMT1tKFgxLngsWDEueSxYMS56KTtpZihZKXtsZXQgXz1LJTI2MDAvMjYwMCx1PTQrMjIqXyxwPTAuMjIqKDEtXyksaj1HLmNyZWF0ZVJhZGlhbEdyYWRpZW50KFYxLnN4LFYxLnN5LHUqMC41LFYxLnN4LFYxLnN5LHUpO2ouYWRkQ29sb3JTdG9wKDAsInJnYmEoMjU1LDI1NSwyNTUsMCkiKSxqLmFkZENvbG9yU3RvcCgwLjcsYHJnYmEoMjU1LDI1NSwyNTUsJHtwLnRvRml4ZWQoMyl9KWApLGouYWRkQ29sb3JTdG9wKDEsInJnYmEoMjU1LDI1NSwyNTUsMCkiKSxHLmZpbGxTdHlsZT1qLEcuYmVnaW5QYXRoKCksRy5hcmMoVjEuc3gsVjEuc3ksdSwwLE1hdGguUEkqMiksRy5maWxsKCl9Ry5maWxsU3R5bGU9IiNmZmYiLEcuYmVnaW5QYXRoKCksRy5hcmMoVjEuc3gsVjEuc3ksMy44LDAsTWF0aC5QSSoyKSxHLmZpbGwoKX1mdW5jdGlvbiBiSigkLFEsSil7JC5maWxsU3R5bGU9InJnYmEoMjU1LDI1NSwyNTUsMC4wNikiO2ZvcihsZXQgWT03O1k8SjtZKz0xNClmb3IobGV0IHE9NztxPFE7cSs9MTQpJC5iZWdpblBhdGgoKSwkLmFyYyhxLFksMC43LDAsTWF0aC5QSSoyKSwkLmZpbGwoKX1mdW5jdGlvbiBWOCgkKXtpZigkPDEwMDApcmV0dXJuYCR7JC50b0ZpeGVkKDApfSBtYDtyZXR1cm5gJHsoJC8xMDAwKS50b0ZpeGVkKDIpfSBrbWB9ZnVuY3Rpb24gSzQoJCl7bGV0IFE9TWF0aC5mbG9vcigkLzEwMDApLEo9TWF0aC5mbG9vcihRLzM2MDApLFg9TWF0aC5mbG9vcihRJTM2MDAvNjApLEs9USU2MDtpZihKPjApcmV0dXJuYCR7Sn06JHtYLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke0sudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YDtyZXR1cm5gJHtYfToke0sudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YH1mdW5jdGlvbiB5SigkKXtpZigkPD0wKXJldHVybiLigJQiO2lmKCQ+NylyZXR1cm5gJHsoJCozLjYpLnRvRml4ZWQoMCl9IGttL2hgO2xldCBRPTEwMDAvJCxKPU1hdGguZmxvb3IoUS82MCksWD1NYXRoLnJvdW5kKFElNjApO3JldHVybmAke0p9OiR7WC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0va21gfWZ1bmN0aW9uIFk0KCQpe3JldHVybmAkeyQudG9GaXhlZCgwKX0gbWB9ZnVuY3Rpb24gcTQoJCl7bGV0IFE9JC50cmltKCk7aWYoIVEpcmV0dXJuIiI7bGV0IEo9US5tYXRjaCgvUmVhc29uOlxzKiguKykkL20pO2lmKEopcmV0dXJuIEpbMV07cmV0dXJuIFEuc3BsaXQoYApgKS5zbGljZSgtMSlbMF0/P1F9YXN5bmMgZnVuY3Rpb24gQjgoJCxRLEope2xldCBYPWF3YWl0ICQoYHhjcnVuIHNpbWN0bCBnZXRfYXBwX2NvbnRhaW5lciAke1F9ICR7TTEoSil9IGFwcGApO2lmKFguZXhpdENvZGUhPT0wKXJldHVybntlcnJvcjpYLnN0ZGVyci50cmltKCl8fCJBcHAgbm90IGZvdW5kIG9uIHNpbXVsYXRvciJ9O2xldCBLPVguc3Rkb3V0LnRyaW0oKTtpZighSylyZXR1cm57ZXJyb3I6IkVtcHR5IGFwcCBwYXRoIn07bGV0IFk9YXdhaXQgJChgcGx1dGlsIC1jb252ZXJ0IGpzb24gLW8gLSAke00xKEsrIi9JbmZvLnBsaXN0Iil9YCkscT17fTtpZihZLmV4aXRDb2RlPT09MCl0cnl7cT1KU09OLnBhcnNlKFkuc3Rkb3V0KX1jYXRjaHt9bGV0IEcsTj0ocT8uQ0ZCdW5kbGVJY29ucz8uQ0ZCdW5kbGVQcmltYXJ5SWNvbj8/cT8uWyJDRkJ1bmRsZUljb25zfmlwYWQiXT8uQ0ZCdW5kbGVQcmltYXJ5SWNvbik/LkNGQnVuZGxlSWNvbkZpbGVzPz9xPy5DRkJ1bmRsZUljb25GaWxlcztpZihOJiZOLmxlbmd0aD4wKUc9TltOLmxlbmd0aC0xXTtlbHNlIGlmKHR5cGVvZiBxPy5DRkJ1bmRsZUljb25GaWxlPT09InN0cmluZyIpRz1xLkNGQnVuZGxlSWNvbkZpbGU7bGV0IHo9bnVsbDtpZihHKXtsZXQgVj1bYCR7R31AM3gucG5nYCxgJHtHfUAyeC5wbmdgLGAke0d9LnBuZ2AsYCR7R302MHg2MEAzeC5wbmdgLGAke0d9NjB4NjBAMngucG5nYF0sVT0oYXdhaXQgJChgYmFzaCAtYyAke00xKFYubWFwKChGKT0+YFsgLWYgJHtNMShLKyIvIitGKX0gXSAmJiBlY2hvICR7TTEoSysiLyIrRil9ICYmIGV4aXQgMGApLmpvaW4oIjsgIikrIjsgZXhpdCAxIil9YCkpLnN0ZG91dC50cmltKCk7aWYoVSl7bGV0IEY9YXdhaXQgJChgYmFzZTY0IC1pICR7TTEoVSl9YCk7aWYoRi5leGl0Q29kZT09PTApej1gZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7Ri5zdGRvdXQucmVwbGFjZSgvXHMrL2csIiIpfWB9fXJldHVybnthcHBQYXRoOkssZGlzcGxheU5hbWU6cS5DRkJ1bmRsZURpc3BsYXlOYW1lPz9xLkNGQnVuZGxlTmFtZSxzaG9ydFZlcnNpb246cS5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyxidW5kbGVWZXJzaW9uOnEuQ0ZCdW5kbGVWZXJzaW9uLG1pbk9TOnEuTWluaW11bU9TVmVyc2lvbixleGVjdXRhYmxlOnEuQ0ZCdW5kbGVFeGVjdXRhYmxlLGljb25EYXRhVXJsOnp9fXZhciBNMj1uZXcgTWFwO2Z1bmN0aW9uIFY0KCQsUSxKKXtsZXQgWD1gJHtRfToke0p9YCxLPU0yLmdldChYKTtpZihLIT09dm9pZCAwKXJldHVybiBQcm9taXNlLnJlc29sdmUoSyk7bGV0IFk9QjgoJCxRLEopLnRoZW4oKHEpPT57bGV0IEc9cS5pY29uRGF0YVVybD8/bnVsbDtyZXR1cm4gTTIuc2V0KFgsRyksR30pLmNhdGNoKCgpPT57cmV0dXJuIE0yLnNldChYLG51bGwpLG51bGx9KTtyZXR1cm4gTTIuc2V0KFgsWSksWX1mdW5jdGlvbiBTSigkKXtyZXR1cm4gJC5zdGFydHNXaXRoKCJjb20uYXBwbGUuIil9ZnVuY3Rpb24geEooJCl7aWYoJD09PSJjb20uYXBwbGUuc3ByaW5nYm9hcmQiKXJldHVybiJTcHJpbmdCb2FyZCI7cmV0dXJuICR9ZnVuY3Rpb24gakooe2J1bmRsZUlkOiR9KXtsZXQgUT1TSigkKTtyZXR1cm4gWigiZGl2Iix7ImRhdGEtdGVzdGlkIjpRPyJzeXN0ZW0tYXBwLWljb24iOiJhcHAtaWNvbi1mYWxsYmFjayIsY2xhc3NOYW1lOmB3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBib3JkZXIgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgJHtRPyJib3JkZXItWyMzYjVmOTldIGJnLVtsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCMyNTNhNWYsIzE2MjEzMildIHRleHQtWyNjOGQ3ZmZdIjoiYm9yZGVyLXdoaXRlLzEwIGJnLXdoaXRlL1swLjA2XSB0ZXh0LXdoaXRlLzgwIn1gLCJhcmlhLWxhYmVsIjpRPyJTeXN0ZW0gYXBwIjoiQXBwIGljb24gdW5hdmFpbGFibGUiLHRpdGxlOlE/IlN5c3RlbSBhcHAiOiJBcHAgaWNvbiB1bmF2YWlsYWJsZSIsY2hpbGRyZW46UT9aKCJzdmciLHtyb2xlOiJpbWciLHZpZXdCb3g6IjAgMCAyNCAyNCIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjbGFzc05hbWU6InNpemUtWzE5cHhdIixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltaKCJ0aXRsZSIse2NoaWxkcmVuOiJBcHBsZSJ9KSxaKCJwYXRoIix7ZDoiTTEyLjE1MiA2Ljg5NmMtLjk0OCAwLTIuNDE1LTEuMDc4LTMuOTYtMS4wNC0yLjA0LjAyNy0zLjkxIDEuMTgzLTQuOTYxIDMuMDE0LTIuMTE3IDMuNjc1LS41NDYgOS4xMDMgMS41MTkgMTIuMDkgMS4wMTMgMS40NTQgMi4yMDggMy4wOSAzLjc5MiAzLjAzOSAxLjUyLS4wNjUgMi4wOS0uOTg3IDMuOTM1LS45ODcgMS44MzEgMCAyLjM1Ljk4NyAzLjk2Ljk0OCAxLjYzNy0uMDI2IDIuNjc2LTEuNDggMy42NzYtMi45NDggMS4xNTYtMS42ODggMS42MzYtMy4zMjUgMS42NjItMy40MTUtLjAzOS0uMDEzLTMuMTgyLTEuMjIxLTMuMjItNC44NTctLjAyNi0zLjA0IDIuNDgtNC40OTQgMi41OTctNC41NTktMS40MjktMi4wOS0zLjYyMy0yLjMyNC00LjM5LTIuMzc2LTItLjE1Ni0zLjY3NSAxLjA5LTQuNjEgMS4wOXpNMTUuNTMgMy44M2MuODQzLTEuMDEyIDEuNC0yLjQyNyAxLjI0NS0zLjgzLTEuMjA3LjA1Mi0yLjY2Mi44MDUtMy41MzIgMS44MTgtLjc4Ljg5Ni0xLjQ1NCAyLjMzOC0xLjI3MyAzLjcxNCAxLjMzOC4xMDQgMi43MTUtLjY4OCAzLjU1OS0xLjcwMSJ9KV19KTpaKHgyLHtzaXplOjE5LHN0cm9rZVdpZHRoOjEuOX0pfSl9ZnVuY3Rpb24gdkooe2J1bmRsZUlkOiQsaWNvbkRhdGFVcmw6UX0pe2lmKFEpcmV0dXJuIFooImltZyIse3NyYzpRLGNsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIGJvcmRlciBib3JkZXItd2hpdGUvOCIsYWx0OiIifSk7cmV0dXJuIFooakose2J1bmRsZUlkOiR9KX1mdW5jdGlvbiBCNCh7dWRpZDokLGN1cnJlbnRBcHA6UX0pe2xldFtKLFhdPUEobnVsbCksW0ssWV09QSghMSk7aWYoYigoKT0+e2lmKCFRKXtYKG51bGwpO3JldHVybn1sZXQgcT0hMTtyZXR1cm4gWCh7YnVuZGxlSWQ6US5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOlEuaXNSZWFjdE5hdGl2ZSxwaWQ6US5waWQsbG9hZGluZzohMH0pLEI4KEkxLCQsUS5idW5kbGVJZCkudGhlbigoRyk9PntpZihxKXJldHVybjtYKHtidW5kbGVJZDpRLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6US5pc1JlYWN0TmF0aXZlLHBpZDpRLnBpZCxsb2FkaW5nOiExLC4uLkd9KX0pLCgpPT57cT0hMH19LFskLFEsUT8uYnVuZGxlSWQsUT8ucGlkLFE/LmlzUmVhY3ROYXRpdmVdKSwhSilyZXR1cm4gWihSSix7fSk7cmV0dXJuIFooZTEse29wZW46Syxvbk9wZW5DaGFuZ2U6WSxzdW1tYXJ5Q2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWxlZnQiLHN1bW1hcnk6WihaMSx7Y2hpbGRyZW46W1oodkose2J1bmRsZUlkOkouYnVuZGxlSWQsaWNvbkRhdGFVcmw6Si5pY29uRGF0YVVybH0pLFooaEose2J1bmRsZUlkOkouYnVuZGxlSWQsZGlzcGxheU5hbWU6Si5kaXNwbGF5TmFtZX0pXX0pLGNoaWxkcmVuOltKLmVycm9yJiZaKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOkouZXJyb3J9KSxaKCJkbCIse2NsYXNzTmFtZToibS0wIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W1ooQTIse2xhYmVsOiJWZXJzaW9uIix2YWx1ZTpKLnNob3J0VmVyc2lvbj9gJHtKLnNob3J0VmVyc2lvbn0gKCR7Si5idW5kbGVWZXJzaW9uPz8i4oCUIn0pYDpKLmxvYWRpbmc/IuKApiI6IuKAlCJ9KSxaKEEyLHtsYWJlbDoiTWluIGlPUyIsdmFsdWU6Si5taW5PUz8/KEoubG9hZGluZz8i4oCmIjoi4oCUIil9KSxaKEEyLHtsYWJlbDoiRXhlY3V0YWJsZSIsdmFsdWU6Si5leGVjdXRhYmxlPz8oSi5sb2FkaW5nPyLigKYiOiLigJQiKX0pLFooQTIse2xhYmVsOiJQSUQiLHZhbHVlOkoucGlkIT1udWxsP1N0cmluZyhKLnBpZCk6IuKAlCJ9KSxKLmlzUmVhY3ROYXRpdmUmJlooQTIse2xhYmVsOiJSZWFjdCBOYXRpdmUiLHZhbHVlOiJZZXMifSksWihBMix7bGFiZWw6IkFwcCBwYXRoIix2YWx1ZTpKLmFwcFBhdGg/PyhKLmxvYWRpbmc/IuKApiI6IuKAlCIpLG1vbm86ITAsYWN0aW9uOkouYXBwUGF0aD97dGl0bGU6IlJldmVhbCBpbiBGaW5kZXIiLG9uQ2xpY2s6KCk9PntJMShgb3BlbiAtUiAke00xKEouYXBwUGF0aCl9YCl9LGljb246WihqMix7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjJ9KX06dm9pZCAwfSldfSldfSl9ZnVuY3Rpb24gUkooKXtyZXR1cm4gWigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiYXBwLWRldGVjdGlvbi1za2VsZXRvbiIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWxhYmVsIjoiV2FpdGluZyBmb3IgZm9yZWdyb3VuZCBhcHAiLGNoaWxkcmVuOlooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1sZWZ0IG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYmctd2hpdGUvWzAuMDhdIn0pLFooInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTIiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJoLTMuNSB3LVs0NiVdIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4xMl0ifSksWigic3BhbiIse2NsYXNzTmFtZToiaC0yLjUgdy1bNjglXSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdIn0pXX0pLFooInNwYW4iLHtjbGFzc05hbWU6InctMi41IGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0ifSldfSl9KX1mdW5jdGlvbiBoSih7YnVuZGxlSWQ6JCxkaXNwbGF5TmFtZTpRfSl7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgbGVhZGluZy10aWdodCB0ZXh0LWxlZnQiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCB0cnVuY2F0ZSIsY2hpbGRyZW46UT8/eEooJCl9KSxaKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRydW5jYXRlIix0aXRsZTokLGNoaWxkcmVuOiR9KV19KX1mdW5jdGlvbiBBMih7bGFiZWw6JCx2YWx1ZTpRLG1vbm86SixhY3Rpb246WH0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6Imdyb3VwIGZsZXggaXRlbXMtYmFzZWxpbmUgZ2FwLTIgbWluLXctMCIsY2hpbGRyZW46W1ooImR0Iix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81MCB3LTIxIHNocmluay0wIixjaGlsZHJlbjokfSksWigiZGQiLHtjbGFzc05hbWU6YG0tMCB0ZXh0LXdoaXRlLzkwIGZsZXgtMSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHJlbGF0aXZlICR7Sj8iZm9udC1tb25vIHRleHQtWzExcHhdIjoidGV4dC1bMTJweF0ifWAsdGl0bGU6USxjaGlsZHJlbjpbUSxYJiZaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIHJpZ2h0LTAgYm90dG9tLTAgcGwtNyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3JpZ2h0LHJnYmEoMjgsMjgsMzAsMClfMCUsIzFjMWMxZV81NSUpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsdHJhbnNmb3JtXzAuMTVzX2Vhc2VdIG9wYWNpdHktMCB0cmFuc2xhdGUteC0xIHBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6dHJhbnNsYXRlLXgtMCBncm91cC1ob3Zlcjpwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjpaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6WC5vbkNsaWNrLHRpdGxlOlgudGl0bGUsImFyaWEtbGFiZWwiOlgudGl0bGUsY2xhc3NOYW1lOiJ3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQgdGV4dC13aGl0ZSBjdXJzb3ItcG9pbnRlciBwLTAiLGNoaWxkcmVuOlguaWNvbn0pfSldfSldfSl9dmFyIE40PVt7a2V5OiJjYW1lcmEiLGxhYmVsOiJDYW1lcmEifSx7a2V5OiJtaWNyb3Bob25lIixsYWJlbDoiTWljcm9waG9uZSJ9LHtrZXk6InBob3RvcyIsbGFiZWw6IlBob3RvcyJ9LHtrZXk6InBob3Rvcy1hZGQiLGxhYmVsOiJBZGQgdG8gUGhvdG9zIn0se2tleToiY29udGFjdHMiLGxhYmVsOiJDb250YWN0cyJ9LHtrZXk6ImNhbGVuZGFyIixsYWJlbDoiQ2FsZW5kYXIifSx7a2V5OiJyZW1pbmRlcnMiLGxhYmVsOiJSZW1pbmRlcnMifSx7a2V5OiJsb2NhdGlvbiIsbGFiZWw6IkxvY2F0aW9uIn0se2tleToibG9jYXRpb24tYWx3YXlzIixsYWJlbDoiTG9jYXRpb24gKEFsd2F5cykifSx7a2V5OiJub3RpZmljYXRpb25zIixsYWJlbDoiTm90aWZpY2F0aW9ucyJ9LHtrZXk6Im1vdGlvbiIsbGFiZWw6Ik1vdGlvbiJ9LHtrZXk6Im1lZGlhLWxpYnJhcnkiLGxhYmVsOiJNZWRpYSBMaWJyYXJ5In0se2tleToic2lyaSIsbGFiZWw6IlNpcmkifV07ZnVuY3Rpb24gejQoe3VkaWQ6JCxidW5kbGVJZDpRfSl7bGV0W0osWF09QSh7fSksW0ssWV09QShudWxsKSxbcSxHXT1BKG51bGwpLFtCLE5dPUEoITEpLHo9RTEoKCk9PntsZXQgVT10eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIVUpcmV0dXJuInNlcnZlLXNpbSI7aWYoL1wudHMkLy50ZXN0KFUpKXJldHVybmBidW4gJHtNMShVKX1gO2lmKC9cLmpzJC8udGVzdChVKSlyZXR1cm5gbm9kZSAke00xKFUpfWA7cmV0dXJuIE0xKFUpfSxbXSk7YigoKT0+e1goe30pLEcobnVsbCl9LFtRXSk7bGV0IFY9RShhc3luYyhVLEYpPT57aWYoIVEpcmV0dXJuO2xldCBMPWAke1V9OiR7Rn1gO1koTCksRyhudWxsKTt0cnl7bGV0IEg9YXdhaXQgSTEoYCR7en0gcGVybWlzc2lvbnMgJHtGfSAke1V9ICR7TTEoUSl9IC1kICR7TTEoJCl9YCk7aWYoSC5leGl0Q29kZSE9PTApe0coSC5zdGRlcnIudHJpbSgpfHxgc2VydmUtc2ltIHBlcm1pc3Npb25zIGZhaWxlZCAoZXhpdCAke0guZXhpdENvZGV9KWApO3JldHVybn1YKChPKT0+KHsuLi5PLFtVXTpGPT09InJlc2V0Ij92b2lkIDA6Rn0pKX1maW5hbGx5e1kobnVsbCl9fSxbeiwkLFFdKSxDPUUoYXN5bmMoKT0+e2lmKCFRKXJldHVybjtZKCJfX2FsbF9fIiksRyhudWxsKTt0cnl7bGV0IFU9YXdhaXQgSTEoYCR7en0gcGVybWlzc2lvbnMgcmVzZXQgYWxsICR7TTEoUSl9IC1kICR7TTEoJCl9YCk7aWYoVS5leGl0Q29kZSE9PTApe0coVS5zdGRlcnIudHJpbSgpfHxgc2VydmUtc2ltIHBlcm1pc3Npb25zIGZhaWxlZCAoZXhpdCAke1UuZXhpdENvZGV9KWApO3JldHVybn1YKHt9KX1maW5hbGx5e1kobnVsbCl9fSxbeiwkLFFdKTtpZighUSlyZXR1cm4gWihnSix7fSk7cmV0dXJuIFooZTEse29wZW46Qixvbk9wZW5DaGFuZ2U6TixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpaKFoxLHtjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMifSksWigic3BhbiIse30pXX0pLGNoaWxkcmVuOltxJiZaKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOnF9KSxaKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBmbGV4IGZsZXgtY29sIGdhcC0xIHB5LTIgW3Njcm9sbGJhci13aWR0aDp0aGluXSIsY2hpbGRyZW46TjQubWFwKCh7a2V5OlUsbGFiZWw6Rn0pPT57bGV0IEw9SltVXTtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcHgtMC41IHB5LTEiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIGZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpGfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGdhcC0wLjUgYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLW1kIHAtMC41Iixyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOkYsY2hpbGRyZW46W1ooTjgse2FjdGl2ZTpMPT09ImdyYW50IixwZW5kaW5nOks9PT1gJHtVfTpncmFudGAsb25DbGljazooKT0+VihVLCJncmFudCIpLHZhcmlhbnQ6ImdyYW50Iix0aXRsZToiQWxsb3ciLGNoaWxkcmVuOloodjIse3NpemU6MTEsc3Ryb2tlV2lkdGg6M30pfSksWihOOCx7YWN0aXZlOkw9PT0icmV2b2tlIixwZW5kaW5nOks9PT1gJHtVfTpyZXZva2VgLG9uQ2xpY2s6KCk9PlYoVSwicmV2b2tlIiksdmFyaWFudDoicmV2b2tlIix0aXRsZToiRGVueSIsY2hpbGRyZW46WihWMCx7c2l6ZToxMSxzdHJva2VXaWR0aDozfSl9KSxaKE44LHthY3RpdmU6ITEscGVuZGluZzpLPT09YCR7VX06cmVzZXRgLG9uQ2xpY2s6KCk9PlYoVSwicmVzZXQiKSx2YXJpYW50OiJyZXNldCIsdGl0bGU6IlJlc2V0IixjaGlsZHJlbjpaKHMwLHtzaXplOjExLHN0cm9rZVdpZHRoOjIuNH0pfSldfSldfSxVKX0pfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIHJvdW5kZWQtdC1bMTBweF0gYmctW2xpbmVhci1ncmFkaWVudCh0b19ib3R0b20sIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KSxaKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgYmctW2xpbmVhci1ncmFkaWVudCh0b190b3AsIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgganVzdGlmeS1lbmQiLGNoaWxkcmVuOlooImJ1dHRvbiIse29uQ2xpY2s6QyxkaXNhYmxlZDpLPT09Il9fYWxsX18iLGNsYXNzTmFtZToiYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiB0ZXh0LXdoaXRlLzcwIHRleHQtWzEwcHhdIHB4LTIgcHktWzNweF0gcm91bmRlZC1bNXB4XSBjdXJzb3ItcG9pbnRlciB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDRlbV0iLHRpdGxlOiJzZXJ2ZS1zaW0gcGVybWlzc2lvbnMgcmVzZXQgYWxsIixjaGlsZHJlbjpLPT09Il9fYWxsX18iPyLigKYiOiJSZXNldCBhbGwifSl9KV19KX1mdW5jdGlvbiBnSigpe3JldHVybiBaKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJhcHAtcGVybWlzc2lvbnMtbG9hZGluZyIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWRpc2FibGVkIjoidHJ1ZSIsImFyaWEtYnVzeSI6InRydWUiLGNoaWxkcmVuOlooImRpdiIse2NsYXNzTmFtZToic2VsZWN0LW5vbmUgdGV4dC13aGl0ZS81NSBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSBncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCBjdXJzb3ItZGVmYXVsdCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJQZXJtaXNzaW9ucyJ9KSxaKCJzcGFuIix7fSksWigic3BhbiIseyJkYXRhLXRlc3RpZCI6InBlcm1pc3Npb25zLWxvYWRpbmctaW5kaWNhdG9yIixyb2xlOiJzdGF0dXMiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBwZXJtaXNzaW9ucyIsY2xhc3NOYW1lOiJzaXplLTIuNSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1bIzVmNjI2OF0gYm9yZGVyLXQtWyNmNGY0ZjVdIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjdzX2xpbmVhcl9pbmZpbml0ZV0ifSldfSl9KX1mdW5jdGlvbiBOOCh7YWN0aXZlOiQscGVuZGluZzpRLG9uQ2xpY2s6Six2YXJpYW50OlgsdGl0bGU6SyxjaGlsZHJlbjpZfSl7bGV0IHE9WD09PSJncmFudCI/IiM0YWRlODAiOlg9PT0icmV2b2tlIj8iI2Y4NzE3MSI6IiNhNWI0ZmMiO3JldHVybiBaKCJidXR0b24iLHtvbkNsaWNrOkosZGlzYWJsZWQ6USx0aXRsZTpLLCJhcmlhLWxhYmVsIjpLLGNsYXNzTmFtZToidy02IGgtNS41IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQgcC0wIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdIixzdHlsZTp7YmFja2dyb3VuZDokP2Ake3F9MjJgOiJ0cmFuc3BhcmVudCIsY29sb3I6JD9xOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIixvcGFjaXR5OlE/MC41OjF9LGNoaWxkcmVuOll9KX1mdW5jdGlvbiBlNSh7bGFiZWw6JCxjaGVja2VkOlEsZGlzYWJsZWQ6Sj0hMSxvbkNoYW5nZTpYfSl7cmV0dXJuIFooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIscm9sZToic3dpdGNoIiwiYXJpYS1jaGVja2VkIjpRLCJhcmlhLWxhYmVsIjokLGRpc2FibGVkOkosb25DbGljazooKT0+WCghUSksY2xhc3NOYW1lOmByZWxhdGl2ZSBoLVsxOHB4XSB3LTggc2hyaW5rLTAgcm91bmRlZC1mdWxsIGJvcmRlci1ub25lIHAtMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzXSAke0o/ImN1cnNvci1kZWZhdWx0IGJnLXdoaXRlLzIwIjpRPyJjdXJzb3ItcG9pbnRlciBiZy1bIzBhODRmZl0iOiJjdXJzb3ItcG9pbnRlciBiZy13aGl0ZS8yMCJ9YCxjaGlsZHJlbjpaKCJzcGFuIix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtWzJweF0gc2l6ZS1bMTRweF0gcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmxlZnRfMC4xNXNdICR7Sj8iYmctd2hpdGUvNTAiOiJiZy13aGl0ZSJ9YCxzdHlsZTp7bGVmdDpRPzE2OjJ9fSl9KX12YXIgZko9ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIixtSj0idGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBtLTAiO2Z1bmN0aW9uIFU0KHtvdmVybGF5RW5hYmxlZDokLG9uVG9nZ2xlT3ZlcmxheTpRfSl7bGV0e3NuYXBzaG90Okp9PUgyKCkse2hpZ2hsaWdodGVkS2V5Olgsc2V0SGlnaGxpZ2h0ZWRLZXk6S309ZjUoKSxZPUo/LmVsZW1lbnRzPz9bXSxxPXY1KEopLEc9Sj8uZXJyb3JzPy5bMF0/P251bGw7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZTpgJHtmSn0gcHgtMyBweS0yYCxjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOm1KLGNoaWxkcmVuOiJBWCBUcmVlIn0pLFooZTUse2xhYmVsOiJFbmFibGUgb3ZlcmxheSIsY2hlY2tlZDokLG9uQ2hhbmdlOlF9KV19KSwhJD9udWxsOnE/WihMNCx7Y2hpbGRyZW46IkFYIHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiJ9KTpZLmxlbmd0aD09PTA/WihMNCx7c3Bpbm5lcjohRyxjaGlsZHJlbjpHPz8iV2FpdGluZyBmb3IgYWNjZXNzaWJpbGl0eSBkYXRh4oCmIn0pOlooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSBtdC0yIHB5LTIgbWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gW3Njcm9sbGJhci13aWR0aDp0aGluXSIscm9sZToibGlzdCIsY2hpbGRyZW46WS5tYXAoKEIsTik9PntsZXQgej10MChCKTtyZXR1cm4gWihwSix7ZWxlbWVudDpCLGluZGV4Ok4sYWN0aXZlOno9PT1YLG9uSGlnaGxpZ2h0Okt9LHopfSl9KV19KX1mdW5jdGlvbiBMNCh7Y2hpbGRyZW46JCxzcGlubmVyOlE9ITF9KXtyZXR1cm4gWigiZGl2Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoicG9saXRlIixjbGFzc05hbWU6Im10LTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcHktNCB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpbUT9aKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJzaXplLTMuNSBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzIwIGJvcmRlci10LXdoaXRlLzYwIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0ifSk6bnVsbCxaKCJzcGFuIix7Y2hpbGRyZW46JH0pXX0pfXZhciBwSj1uMChmdW5jdGlvbih7ZWxlbWVudDpRLGluZGV4OkosYWN0aXZlOlgsb25IaWdobGlnaHQ6S30pe2xldCBZPXQwKFEpLHE9aDUoUSxKKSxHPWAke01hdGgucm91bmQoUS5mcmFtZS53aWR0aCl9eCR7TWF0aC5yb3VuZChRLmZyYW1lLmhlaWdodCl9YCxCPVtxLmxhYmVsLHEucm9sZXx8cS50eXBlfHwiZWxlbWVudCIsR10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm4gWigiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRhYkluZGV4OjAsImRhdGEtYXgta2V5IjpZLHRpdGxlOkIsb25Nb3VzZUVudGVyOigpPT5LKFkpLG9uTW91c2VMZWF2ZTooKT0+SyhudWxsKSxvbkZvY3VzOigpPT5LKFkpLG9uQmx1cjooKT0+SyhudWxsKSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIHB5LTEgcHgtMC41IG1pbi13LTAgJHtYPyJiZy13aGl0ZS9bMC4wNl0iOiIifWAsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOlEubGFiZWx8fFEucm9sZXx8IlVubGFiZWxlZCJ9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzQ1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSIsY2hpbGRyZW46US5yb2xlfHxRLnR5cGV8fCJlbGVtZW50In0pXX0pLFooImNvZGUiLHtjbGFzc05hbWU6InNocmluay0wIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSBweC0xLjUgcHktWzNweF0iLGNoaWxkcmVuOkd9KV19KX0sKCQsUSk9PiQuaW5kZXg9PT1RLmluZGV4JiYkLmFjdGl2ZT09PVEuYWN0aXZlJiYkLm9uSGlnaGxpZ2h0PT09US5vbkhpZ2hsaWdodCYmUjUoJC5lbGVtZW50LFEuZWxlbWVudCkpO3ZhciB1Sj1uZXcgU2V0KFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyIsImltYWdlL2dpZiIsImltYWdlL2hlaWMiLCJpbWFnZS9oZWlmIiwiaW1hZ2Uvd2VicCIsInZpZGVvL21wNCIsInZpZGVvL3F1aWNrdGltZSJdKSx6OD0xOTY2MDgsSDQ9NTI0Mjg4MDAwLCQzPSJhcHBsaWNhdGlvbi94LXNlcnZlLXNpbS1ob3N0LXBhdGgiO2FzeW5jIGZ1bmN0aW9uIEM0KCQsUSxKKXtsZXQgWD1hd2FpdCBRKGB4Y3J1biBzaW1jdGwgYWRkbWVkaWEgJHtKfSAke00xKCQpfWApO2lmKFguZXhpdENvZGUhPT0wKXRocm93IEVycm9yKFguc3RkZXJyfHxgYWRkbWVkaWEgZmFpbGVkIChleGl0ICR7WC5leGl0Q29kZX0pYCl9ZnVuY3Rpb24gazIoJCl7bGV0IFE9JC5uYW1lLEo9US5sYXN0SW5kZXhPZigiLiIpO2lmKEo+PTApcmV0dXJuIFEuc2xpY2UoSisxKS50b0xvd2VyQ2FzZSgpO2lmKCQudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4ibXA0IjtyZXR1cm4ianBnIn1mdW5jdGlvbiBPNCgkKXtpZihrMigkKT09PSJpcGEiKXJldHVybiJpcGEiO2lmKHVKLmhhcygkLnR5cGUpKXJldHVybiJtZWRpYSI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gbEooJCl7bGV0IFE9bmV3IFVpbnQ4QXJyYXkoJCksSj0iIjtmb3IobGV0IFg9MDtYPFEubGVuZ3RoO1grPTMyNzY4KUorPVN0cmluZy5mcm9tQ2hhckNvZGUoLi4uUS5zdWJhcnJheShYLFgrMzI3NjgpKTtyZXR1cm4gYnRvYShKKX1hc3luYyBmdW5jdGlvbiBGNCgkLFEsSixYKXtsZXQgSz0wO2ZvcihsZXQgWT0wO1k8JC5zaXplO1krPXo4KXtsZXQgcT1hd2FpdCAkLnNsaWNlKFksWSt6OCkuYXJyYXlCdWZmZXIoKSxHPWxKKHEpLE49YXdhaXQgSihgYmFzaCAtYyAnZWNobyAke0d9IHwgYmFzZTY0IC1kICR7WT09PTA/Ij4iOiI+PiJ9ICR7UX0nYCk7aWYoTi5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoTi5zdGRlcnJ8fGBXcml0ZSBmYWlsZWQgKGV4aXQgJHtOLmV4aXRDb2RlfSlgKTtpZighWCljb250aW51ZTtsZXQgej1NYXRoLm1pbihZK3o4LCQuc2l6ZSksVj1NYXRoLmZsb29yKHovJC5zaXplKjEwMCk7aWYoViE9PUspSz1WLFgoei8kLnNpemUpfX1hc3luYyBmdW5jdGlvbiBNNCgkLFEsSixYKXtpZigkLnNpemU+SDQpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IEs9YC90bXAvJHtRfS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7Sn1gO3JldHVybiBhd2FpdCBGNCgkLEssWCksS31hc3luYyBmdW5jdGlvbiBBNCgkLFEsSixYLEspe2lmKCQuc2l6ZT5INCl0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtsZXQgWT1RPT09ImlwYSI/ImlwYSI6azIoJCksRz1gL3RtcC8ke1E9PT0iaXBhIj8ic2VydmUtc2ltLWluc3RhbGwiOiJzZXJ2ZS1zaW0tdXBsb2FkIn0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke1l9YDt0cnl7SygwKSxhd2FpdCBGNCgkLEcsSixLKSxLKG51bGwpO2xldCBCPVE9PT0iaXBhIj9geGNydW4gc2ltY3RsIGluc3RhbGwgJHtYfSAke0d9YDpgeGNydW4gc2ltY3RsIGFkZG1lZGlhICR7WH0gJHtHfWAsTj1hd2FpdCBKKEIpO2lmKE4uZXhpdENvZGUhPT0wKXtsZXQgej1RPT09ImlwYSI/Imluc3RhbGwiOiJhZGRtZWRpYSI7dGhyb3cgRXJyb3IoTi5zdGRlcnJ8fGAke3p9IGZhaWxlZCAoZXhpdCAke04uZXhpdENvZGV9KWApfX1maW5hbGx5e0ooYGJhc2ggLWMgJ3JtIC1mICR7R30nYCkuY2F0Y2goKCk9Pnt9KX19dmFyIGRKPTMwMDA7YXN5bmMgZnVuY3Rpb24gY0ooJCxRPWZldGNoKXt0cnl7bGV0IEo9YXdhaXQgUSgkLHtjYWNoZToibm8tc3RvcmUifSk7aWYoIUoub2spcmV0dXJuIG51bGw7bGV0IFg9YXdhaXQgSi5qc29uKCk7cmV0dXJuIFgmJnR5cGVvZiBYPT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KFgpP1g6bnVsbH1jYXRjaHtyZXR1cm4gbnVsbH19dmFyIG9KPTIwOTcxNTIwMCxpSj0iTGFyZ2UgdmlkZW8gKD4yMDAgTUIpIOKAlCBtYXkgc3R1dHRlciBvbiBzaGFyZWQgbWVtb3J5IixXND0iSEVJQyBkZWNvZGUgZmFpbGVkIOKAlCBleHBvcnQgYXMgSlBFRyBvciBQTkcgYW5kIHJldHJ5IjtmdW5jdGlvbiBuSigkLFEpe2lmKFEpcmV0dXJuImFjdGl2ZSI7aWYoJD09PSJhY3RpdmUiKXJldHVybiJkaXNjb25uZWN0ZWQiO2lmKCQ9PT0iZGlzY29ubmVjdGVkIilyZXR1cm4icmVhZHkiO3JldHVybiAkfWZ1bmN0aW9uIHJKKCQpe2lmKCEkLmluamVjdGVkKXJldHVybiJwbGF5IjtpZigkLnNvdXJjZT09PSJwbGFjZWhvbGRlciIpcmV0dXJuInBsYXkiO2lmKCQuYnVuZGxlSWQmJiEkLmZvcmVncm91bmRJc0luamVjdGVkKXJldHVybiJhdHRhY2giO3JldHVybiJzdG9wIn1mdW5jdGlvbiBhSigkKXtyZXR1cm4gJC5zcGxpdChgCmApLm1hcCgoUSk9PlEudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuZmxhdE1hcCgoUSk9PntsZXQgSj1RLmluZGV4T2YoIlx0Iik7aWYoSjw9MClyZXR1cm5bXTtsZXQgWD1RLnNsaWNlKDAsSikudHJpbSgpLEs9US5zbGljZShKKzEpLnRyaW0oKTtpZighWHx8IUspcmV0dXJuW107cmV0dXJuW3tpZDpYLG5hbWU6S31dfSl9dmFyIHNKPW5ldyBTZXQoWyJtcDQiLCJtNHYiLCJtb3YiLCJxdCIsImF2aSIsIm1rdiIsIndlYm0iLCJtcGciLCJtcGVnIiwiM2dwIiwiM2cyIiwidHMiLCJ3bXYiXSk7ZnVuY3Rpb24gXzQoJCl7aWYoJC50eXBlJiYkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuITA7bGV0IFE9KCQubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCksSj1RLmxhc3RJbmRleE9mKCIuIik7aWYoSjwwKXJldHVybiExO3JldHVybiBzSi5oYXMoUS5zbGljZShKKzEpKX1mdW5jdGlvbiB0SigkKXtyZXR1cm4gXzQoJCkmJiQuc2l6ZT5vSn1mdW5jdGlvbiBlSigkKXtsZXQgUT0oJC50eXBlPz8iIikudG9Mb3dlckNhc2UoKTtpZihRPT09ImltYWdlL2hlaWMifHxRPT09ImltYWdlL2hlaWYiKXJldHVybiEwO2xldCBKPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpO3JldHVybiBKLmVuZHNXaXRoKCIuaGVpYyIpfHxKLmVuZHNXaXRoKCIuaGVpZiIpfWZ1bmN0aW9uICRaKHtyYXdNZXNzYWdlOiQsbGFzdEZpbGVJc0hlaWM6USxzb3VyY2U6Sn0pe2lmKFEmJihKPT09ImltYWdlInx8Sj09PSJ2aWRlbyIpKXJldHVybiBXNDtyZXR1cm4gJH1mdW5jdGlvbiBRWih7c3RhdGU6JH0pe2xldCBRPSQ9PT0iYWN0aXZlIj8iQWN0aXZlIjokPT09ImRpc2Nvbm5lY3RlZCI/IkRpc2Nvbm5lY3RlZCI6IlJlYWR5IixKPSQ9PT0iYWN0aXZlIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLXN1Y2Nlc3MtZW1lcmFsZCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoNzQsMjIyLDEyOCwwLjcpXSI6JD09PSJkaXNjb25uZWN0ZWQiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctZGFuZ2VyLXNvZnQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDI0OCwxMTMsMTEzLDAuNTUpXSI6bnVsbDtyZXR1cm4gWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUiLCJkYXRhLWNhbWVyYS1waWxsLXN0YXRlIjokLGNoaWxkcmVuOltKJiZaKCJzcGFuIix7Y2xhc3NOYW1lOkp9KSxRXX0pfWZ1bmN0aW9uIEpaKCl7cmV0dXJuIFooInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LWNlbnRlciB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLCJkYXRhLWNhbWVyYS10ZXN0LXBhdHRlcm4taGludCI6ITAsY2hpbGRyZW46IlRlc3QtcGF0dGVybiBmZWVkIn0pfWZ1bmN0aW9uIFpaKHttb2RlOiQsZmlsZU5hbWU6USx3ZWJjYW1OYW1lOkosc291cmNlS2luZDpYfSl7aWYoJD09PSJ1cGxvYWRpbmciKXJldHVybiBaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjoiVXBsb2FkaW5n4oCmIn0pO2lmKCQ9PT0iZmlsZSIpcmV0dXJuIFooWjEse2NoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46WD09PSJ2aWRlbyI/IlZpZGVvIjoiSW1hZ2UifSksWigic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOlE/PyIifSldfSk7aWYoJD09PSJ3ZWJjYW0iKXJldHVybiBaKFoxLHtjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtd2hpdGUvNTUgYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOiJXZWJjYW0ifSksWigic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOko/PyIifSldfSk7cmV0dXJuIFooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvODUgZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJTZWxlY3Qgb3IgZHJvcCBtZWRpYSJ9KX1mdW5jdGlvbiBrNCh7a2luZDokLG1lc3NhZ2U6UX0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6JD09PSJ3YXJuaW5nIj8iYmctd2FybmluZy8xMCBib3JkZXIgYm9yZGVyLXdhcm5pbmcvMjUgdGV4dC13YXJuaW5nLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBicmVhay13b3JkcyI6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiLCJkYXRhLWNhbWVyYS1iYW5uZXIta2luZCI6JCxyb2xlOiQ9PT0iZXJyb3IiPyJhbGVydCI6InN0YXR1cyIsY2hpbGRyZW46UX0pfWZ1bmN0aW9uIEQ0KHt1ZGlkOiQsYnVuZGxlSWQ6UX0pe2xldFtKLFhdPUEoITEpLFtLLFldPUEoInBsYWNlaG9sZGVyIiksW3EsR109QSgiIiksW0IsTl09QShudWxsKSxbeixWXT1BKCExKSxDPVQoMCksW1UsRl09QSghMSksW0wsSF09QSghMSksTz1UKG51bGwpLFtrLEldPUEoW10pLFt3LFBdPUEoITEpLFt4LHRdPUEoIiIpLFtoLGxdPUEoIm9mZiIpLFtyLG9dPUEobnVsbCksW2ksJDFdPUEobnVsbCksejE9ciE9PW51bGx8fGkhPT1udWxsLFtjLG1dPUEobnVsbCksW0oxLEcxXT1BKG51bGwpLFssTzFdPUEobnVsbCksW24sWDFdPUEoITEpLFtWMSxTXT1BKCJyZWFkeSIpLFtnLF9dPUEoKCk9Pm5ldyBTZXQpLFt1LHBdPUEobnVsbCksW2oscTFdPUEobnVsbCksTDE9VCghMSksazE9VCghMSksVzE9VCgib2ZmIiksbjE9VCghMSksQTE9RTEoKCk9PntsZXQgRD13aW5kb3cuX19TSU1fUFJFVklFV19fPy5zZXJ2ZVNpbUJpbjtpZighRClyZXR1cm4ic2VydmUtc2ltIjtpZigvXC50cyQvLnRlc3QoRCkpcmV0dXJuYGJ1biAke00xKEQpfWA7aWYoL1wuanMkLy50ZXN0KEQpKXJldHVybmBub2RlICR7TTEoRCl9YDtyZXR1cm4gTTEoRCl9LFtdKSx2MT1FKGFzeW5jKCk9PntsZXQgRD13aW5kb3cuX19TSU1fUFJFVklFV19fPy5jYW1lcmFTdGF0dXNFbmRwb2ludDtyZXR1cm4gRD9jSihEKTpudWxsfSxbXSksXzE9VChhc3luYygpPT57fSksbDE9VChRKTtiKCgpPT57bDEuY3VycmVudD1RfSxbUV0pLGIoKCk9PntsZXQgRD0hMTtyZXR1cm4oYXN5bmMoKT0+e2xldCBkPWF3YWl0IHYxKCk7aWYoRHx8IWR8fCFkLmFsaXZlKXJldHVybjtrMS5jdXJyZW50PSEwO2xldCBhPWQuc291cmNlO2lmKGE9PT0icGxhY2Vob2xkZXIifHxhPT09IndlYmNhbSJ8fGE9PT0iaW1hZ2UifHxhPT09InZpZGVvIilZKGEpO2lmKChhPT09ImltYWdlInx8YT09PSJ2aWRlbyIpJiZkLmFyZylHKGQuYXJnKSxOKGQuYXJnLnNwbGl0KCIvIikucG9wKCk/P251bGwpO2lmKGE9PT0id2ViY2FtIiYmZC5hcmcpdChkLmFyZyksXzEuY3VycmVudCgpO2xldCBGMT1kLm1pcnJvcj09PSJvbiI/Im9uIjoib2ZmIjtsKEYxKSxXMS5jdXJyZW50PUYxLHAoZC5oZWxwZXJQaWQ/P251bGwpLFgxKCEwKTtsZXQgQjE9QXJyYXkuaXNBcnJheShkLmJ1bmRsZUlkcyk/ZC5idW5kbGVJZHM6W107aWYoQjEubGVuZ3RoPjApXyhuZXcgU2V0KEIxKSk7bGV0IE4xPWwxLmN1cnJlbnQsZjE9YSYmYSE9PSJwbGFjZWhvbGRlciI7UyhOMSYmQjEuaW5jbHVkZXMoTjEpJiZmMT8iYWN0aXZlIjoicmVhZHkiKSxPMShgUmVhdHRhY2hlZCDihpIgJHthPz8icnVubmluZyBoZWxwZXIifSR7ZC5hcmc/YCAoJHtkLmFyZ30pYDoiIn1gKX0pKCksKCk9PntEPSEwfX0sWyQsdjFdKSxiKCgpPT57bGV0IEQ9ITEsZD0hMSxhPW51bGwsRjE9YXN5bmMoKT0+e2lmKER8fGQpcmV0dXJuO2lmKHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKXJldHVybjtkPSEwO3RyeXtsZXQgTjE9YXdhaXQgdjEoKTtpZihEKXJldHVybjtsZXQgZjE9ISFOMT8uYWxpdmUscDE9QXJyYXkuaXNBcnJheShOMT8uYnVuZGxlSWRzKT9OMS5idW5kbGVJZHM6bnVsbCx4MT0hIVEmJihwMT9wMS5pbmNsdWRlcyhRKTpnLmhhcyhRKSksQTA9TjE/LnNvdXJjZT8/bnVsbCxUMT1uJiZmMSYmeDEmJiEhKEEwJiZBMCE9PSJwbGFjZWhvbGRlciIpJiYodT09bnVsbHx8TjE/LmhlbHBlclBpZD09PXUpO2lmKFMoKEwwKT0+bkooTDAsVDEpKSwhZjEpWDEoKEwwKT0+e2lmKCFMMClyZXR1cm4gTDA7cmV0dXJuIF8obmV3IFNldCkscChudWxsKSxXMS5jdXJyZW50PSJvZmYiLCExfSk7ZWxzZSBpZihuJiZ1IT1udWxsJiZOMT8uaGVscGVyUGlkIT09dSlYMSghMSksXyhuZXcgU2V0KSxwKG51bGwpLFcxLmN1cnJlbnQ9Im9mZiI7ZWxzZSBpZihmMSYmQXJyYXkuaXNBcnJheShOMT8uYnVuZGxlSWRzKSl7bGV0IEwwPU4xLmJ1bmRsZUlkcztfKChUMCk9PntpZihUMC5zaXplPT09TDAubGVuZ3RoJiZMMC5ldmVyeSgoajApPT5UMC5oYXMoajApKSlyZXR1cm4gVDA7cmV0dXJuIG5ldyBTZXQoTDApfSl9fWZpbmFsbHl7ZD0hMX19O2E9c2V0SW50ZXJ2YWwoKCk9PntGMSgpfSxkSik7bGV0IEIxPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09InZpc2libGUiKUYxKCl9O2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsQjEpO3JldHVybigpPT57aWYoRD0hMCxhKWNsZWFySW50ZXJ2YWwoYSk7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixCMSl9fSxbdjEsbix1LFEsZ10pO2xldCBVMT1FKGFzeW5jKCk9PntQKCEwKSxtKG51bGwpO3RyeXtsZXQgRD1hd2FpdCBJMShgJHtBMX0gY2FtZXJhIC0tbGlzdC13ZWJjYW1zYCk7aWYoRC5leGl0Q29kZSE9PTApe20oRC5zdGRlcnIudHJpbSgpfHxgLS1saXN0LXdlYmNhbXMgZmFpbGVkICgke0QuZXhpdENvZGV9KWApO3JldHVybn1sZXQgZD1hSihELnN0ZG91dCk7aWYoSShkKSxkLmxlbmd0aD4wJiYheCl0KGRbMF0uaWQpfWZpbmFsbHl7UCghMSl9fSxbeCxBMV0pO2IoKCk9PntfMS5jdXJyZW50PVUxfSxbVTFdKSxiKCgpPT57aWYoTCYmay5sZW5ndGg9PT0wJiYhdylVMSgpfSxbTCxrLmxlbmd0aCx3LFUxXSk7bGV0IHcxPUUoKEQpPT57bSgkWih7cmF3TWVzc2FnZTpELGxhc3RGaWxlSXNIZWljOkwxLmN1cnJlbnQsc291cmNlOkt9KSl9LFtLXSksZDE9RShhc3luYyhELGQsYSk9PntsZXQgRjE9RD09PSJpbWFnZSJ8fEQ9PT0idmlkZW8iLEIxPVsiY2FtZXJhIiwic3dpdGNoIixGMT8iZmlsZSI6RF07aWYoRD09PSJ3ZWJjYW0iJiZkKUIxLnB1c2goTTEoZCkpO2lmKEYxKXtpZighYS50cmltKCkpcmV0dXJuIG0oIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIiksITE7QjEucHVzaChNMShhLnRyaW0oKSkpfUIxLnB1c2goIi1kIiwkLCItLXF1aWV0Iik7bGV0IE4xPWF3YWl0IEkxKGAke0ExfSAke0IxLmpvaW4oIiAiKX1gKTtpZihOMS5leGl0Q29kZSE9PTApcmV0dXJuIHcxKE4xLnN0ZGVyci50cmltKCl8fE4xLnN0ZG91dC50cmltKCl8fGBzd2l0Y2ggZmFpbGVkICgke04xLmV4aXRDb2RlfSlgKSwhMTtMMS5jdXJyZW50PSExO3RyeXtsZXQgZjE9SlNPTi5wYXJzZShOMS5zdGRvdXQudHJpbSgpKTtPMShgU3dpdGNoZWQg4oaSICR7ZjEuc291cmNlPz9EfSR7ZjEuYXJnP2AgKCR7ZjEuYXJnfSlgOiIifWApfWNhdGNoe08xKGBTd2l0Y2hlZCDihpIgJHtEfWApfXJldHVybiEwfSxbJCxBMSx3MV0pLHQxPUUoYXN5bmMoKT0+e2lmKCFRKXJldHVybjtvKCJpbmplY3QiKSxtKG51bGwpLE8xKG51bGwpO3RyeXtsZXQgRD1bImNhbWVyYSIsTTEoUSksIi1kIiwkLCItLXF1aWV0Il07aWYoSz09PSJpbWFnZSJ8fEs9PT0idmlkZW8iKXtpZighcS50cmltKCkpe20oIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIik7cmV0dXJufUQucHVzaCgiLS1maWxlIixNMShxLnRyaW0oKSkpfWVsc2UgaWYoSz09PSJ3ZWJjYW0iKWlmKHgpRC5wdXNoKCItLXdlYmNhbSIsTTEoeCkpO2Vsc2UgRC5wdXNoKCItLXdlYmNhbSIpO0QucHVzaCgiLS1taXJyb3IiLGgpO2xldCBkPWF3YWl0IEkxKGAke0ExfSAke0Quam9pbigiICIpfWApO2lmKGQuZXhpdENvZGUhPT0wKXt3MShkLnN0ZGVyci50cmltKCl8fGQuc3Rkb3V0LnRyaW0oKXx8YGluamVjdCBmYWlsZWQgKCR7ZC5leGl0Q29kZX0pYCk7cmV0dXJufUwxLmN1cnJlbnQ9ITE7bGV0IGE9bnVsbDt0cnl7bGV0IEYxPUpTT04ucGFyc2UoZC5zdGRvdXQudHJpbSgpKTthPUYxLmhlbHBlclBpZD8/bnVsbDtsZXQgQjE9RjEuaGVscGVyUmVsYXVuY2hlZD09PSExPyJBdHRhY2hlZCI6IkluamVjdGVkIixOMT1GMS5waWQ/YCBwaWQgJHtGMS5waWR9YDoiIixmMT1GMS5oZWxwZXJQaWQ/YCwgaGVscGVyIHBpZCAke0YxLmhlbHBlclBpZH1gOiIiO08xKGAke0IxfSAke0YxLnNvdXJjZT8/S30gaW50byAke1F9JHtOMX0ke2YxfWApfWNhdGNoe08xKGQuc3Rkb3V0LnRyaW0oKXx8IkluamVjdGVkLiIpfVgxKCEwKSxTKEs9PT0icGxhY2Vob2xkZXIiPyJyZWFkeSI6ImFjdGl2ZSIpLHAoYSksXygoRjEpPT5GMS5oYXMoUSk/RjE6bmV3IFNldChGMSkuYWRkKFEpKSxXMS5jdXJyZW50PWh9ZmluYWxseXtvKG51bGwpfX0sW1EsJCxLLHEseCxoLEExLHcxXSksZzE9bj9gJHtLfTo6JHtLPT09IndlYmNhbSI/eDoiIn06OiR7Sz09PSJpbWFnZSJ8fEs9PT0idmlkZW8iP3E6IiJ9YDpudWxsLHIxPSEhUSYmZy5oYXMoUSksJDA9cjEmJkshPT0icGxhY2Vob2xkZXIiO2IoKCk9PntpZighJDApe24xLmN1cnJlbnQ9ITE7cmV0dXJufWlmKG4xLmN1cnJlbnQpcmV0dXJuO24xLmN1cnJlbnQ9ITAsWCghMCl9LFskMF0pLGIoKCk9PntpZighailyZXR1cm47aWYoIVF8fHoxfHxVKXJldHVybjtpZihLIT09IndlYmNhbSJ8fHghPT1qKXJldHVybjtpZihxMShudWxsKSxuKXJldHVybjt0MSgpfSxbaixRLHoxLFUsSyx4LG4sdDFdKSxiKCgpPT57aWYoIW4pcmV0dXJuO2lmKChLPT09ImltYWdlInx8Sz09PSJ2aWRlbyIpJiYhcS50cmltKCkpcmV0dXJuO2lmKEs9PT0id2ViY2FtIiYmIXgpcmV0dXJuO2lmKGsxLmN1cnJlbnQpe2sxLmN1cnJlbnQ9ITE7cmV0dXJufWxldCBEPSExO3JldHVybihhc3luYygpPT57JDEoInN3aXRjaCIpLG0obnVsbCk7dHJ5e2lmKEQpcmV0dXJuO2F3YWl0IGQxKEsseCxxKX1maW5hbGx5e2lmKCFEKSQxKG51bGwpfX0pKCksKCk9PntEPSEwfX0sW2cxXSksYigoKT0+e2lmKCFuKXJldHVybjtpZihXMS5jdXJyZW50PT09aClyZXR1cm47bGV0IEQ9aCxkPSExO3JldHVybihhc3luYygpPT57JDEoIm1pcnJvciIpLG0obnVsbCk7dHJ5e2xldCBhPWF3YWl0IEkxKGAke0ExfSBjYW1lcmEgbWlycm9yICR7RH0gLWQgJHskfSAtLXF1aWV0YCk7aWYoZClyZXR1cm47aWYoYS5leGl0Q29kZSE9PTApe20oYS5zdGRlcnIudHJpbSgpfHxhLnN0ZG91dC50cmltKCl8fGBtaXJyb3IgZmFpbGVkICgke2EuZXhpdENvZGV9KWApO3JldHVybn1XMS5jdXJyZW50PUQsTzEoYE1pcnJvciDihpIgJHtEfWApfWZpbmFsbHl7aWYoIWQpJDEobnVsbCl9fSkoKSwoKT0+e2Q9ITB9fSxbaCxuXSk7bGV0IEIwPUUoYXN5bmMoKT0+e28oInN0b3AiKSxtKG51bGwpO3RyeXtsZXQgRD1hd2FpdCBJMShgJHtBMX0gY2FtZXJhIC0tc3RvcC13ZWJjYW0gLWQgJHskfWApO2lmKEQuZXhpdENvZGUhPT0wKXttKEQuc3RkZXJyLnRyaW0oKXx8YHN0b3Atd2ViY2FtIGZhaWxlZCAoJHtELmV4aXRDb2RlfSlgKTtyZXR1cm59TzEoIkNhbWVyYSBoZWxwZXIgc3RvcHBlZC4iKSxYMSghMSksUygicmVhZHkiKSxfKG5ldyBTZXQpLFcxLmN1cnJlbnQ9Im9mZiJ9ZmluYWxseXtvKG51bGwpfX0sWyQsQTFdKSxzMT1FKGFzeW5jKEQpPT57bGV0IGQ9ZUooe3R5cGU6RC50eXBlLG5hbWU6RC5uYW1lfSksYT1ELnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIil8fGQsRjE9RC50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpfHxfNCh7dHlwZTpELnR5cGUsbmFtZTpELm5hbWV9KTtpZighYSYmIUYxKXtMMS5jdXJyZW50PSExLG0oYFVuc3VwcG9ydGVkIGZpbGUgdHlwZTogJHtELnR5cGV8fEQubmFtZX1gKTtyZXR1cm59aWYoRighMCksbShudWxsKSxHMShudWxsKSx0Sih7dHlwZTpELnR5cGUsbmFtZTpELm5hbWUsc2l6ZTpELnNpemV9KSlHMShpSik7TDEuY3VycmVudD1kO3RyeXtsZXQgQjE9azIoRCksTjE9YXdhaXQgTTQoRCwic2VydmUtc2ltLWNhbXNyYyIsQjEsSTEpO04oRC5uYW1lKSxZKEYxPyJ2aWRlbyI6ImltYWdlIiksRyhOMSksTzEoYExvYWRlZCAke0QubmFtZX1gKX1jYXRjaChCMSl7aWYoTDEuY3VycmVudCltKFc0KTtlbHNlIG0oQjE/Lm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIil9ZmluYWxseXtGKCExKX19LFtdKSxnMD1FKGFzeW5jKEQpPT57RC5wcmV2ZW50RGVmYXVsdCgpLEQuc3RvcFByb3BhZ2F0aW9uKCksQy5jdXJyZW50PTAsVighMSk7bGV0IGQ9RC5kYXRhVHJhbnNmZXI/LmZpbGVzPy5bMF07aWYoZClhd2FpdCBzMShkKX0sW3MxXSksbTE9RSgoKT0+e1koInBsYWNlaG9sZGVyIiksRygiIiksTihudWxsKSxtKG51bGwpLEcxKG51bGwpLEwxLmN1cnJlbnQ9ITF9LFtdKSxHMD1FKCgpPT57Ty5jdXJyZW50Py5jbGljaygpfSxbXSksUTA9RShhc3luYyhEKT0+e2xldCBkPUQudGFyZ2V0LGE9ZC5maWxlcz8uWzBdO2lmKGQudmFsdWU9IiIsYSlhd2FpdCBzMShhKX0sW3MxXSk7YigoKT0+e2lmKCFMKXJldHVybjtsZXQgRD0oZCk9PntsZXQgYT1kLnRhcmdldDtpZihhIGluc3RhbmNlb2YgRWxlbWVudCYmYS5jbG9zZXN0KCJbZGF0YS1jYW1lcmEtc291cmNlLW1lbnVdIikpcmV0dXJuO0goITEpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsRCksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEQpfSxbTF0pO2xldCBEMD1FKChEKT0+e2lmKHQoRC5pZCksWSgid2ViY2FtIiksTihudWxsKSxtKG51bGwpLEwxLmN1cnJlbnQ9ITEsSCghMSksUSlxMShELmlkKX0sW1FdKSxjMT1FKCgpPT57bCgoRCk9PkQ9PT0ib24iPyJvZmYiOiJvbiIpfSxbXSksYTE9IW58fEs9PT0icGxhY2Vob2xkZXIiLFAwPUUoKEQpPT57aWYoRC5wcmV2ZW50RGVmYXVsdCgpLEMuY3VycmVudCsrLEMuY3VycmVudD09PTEpVighMCl9LFtdKSxSMT1FKChEKT0+e2lmKEQucHJldmVudERlZmF1bHQoKSxELmRhdGFUcmFuc2ZlcilELmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW10pLE8wPUUoKEQpPT57aWYoRC5wcmV2ZW50RGVmYXVsdCgpLEMuY3VycmVudC0tLEMuY3VycmVudDw9MClDLmN1cnJlbnQ9MCxWKCExKX0sW10pLE4wPXJKKHtidW5kbGVJZDpRLGluamVjdGVkOm4sc291cmNlOkssZm9yZWdyb3VuZElzSW5qZWN0ZWQ6cjF9KSxQMT1OMD09PSJzdG9wIj97bGFiZWw6cj09PSJzdG9wIj8iU3RvcHBpbmfigKYiOiJTdG9wIixvbkNsaWNrOkIwLGtpbmQ6InN0b3AifTpOMD09PSJhdHRhY2giP3tsYWJlbDpyPT09ImluamVjdCI/IkluamVjdGluZ+KApiI6YEluamVjdCAke1F9YCxvbkNsaWNrOnQxLGtpbmQ6ImF0dGFjaCJ9OntsYWJlbDpyPT09ImluamVjdCI/IlN0YXJ0aW5n4oCmIjoiUGxheSIsb25DbGljazp0MSxraW5kOiJwbGF5In0sYjE9TjA9PT0ic3RvcCI/VXx8ciE9PW51bGw6IVF8fFV8fHIhPT1udWxsLFowPUs9PT0icGxhY2Vob2xkZXIiLEYwPUs9PT0id2ViY2FtIix6MD0oSz09PSJpbWFnZSJ8fEs9PT0idmlkZW8iKSYmISFCLE0wPUYwP2suZmluZCgoRCk9PkQuaWQ9PT14KT8ubmFtZT8/eD8/IldlYmNhbSI6bnVsbCxLMT1VPyJ1cGxvYWRpbmciOnowPyJmaWxlIjpGMD8id2ViY2FtIjoicGxhY2Vob2xkZXIiO3JldHVybiBaKGUxLHtvcGVuOkosb25PcGVuQ2hhbmdlOlgsYm9keUNsYXNzTmFtZToicHQtMi41IixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpaKFoxLHtjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiQ2FtZXJhIn0pLFooUVose3N0YXRlOlYxfSldfSksY2hpbGRyZW46WigiZGl2Iix7b25EcmFnRW50ZXI6UDAsb25EcmFnT3ZlcjpSMSxvbkRyYWdMZWF2ZTpPMCxvbkRyb3A6ZzAsY2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0yLjUiLGNoaWxkcmVuOltaKCJwIix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTBweF0gbGVhZGluZy1bMS41XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjoiUmVwbGFjZXMgdGhlIHNpbXVsYXRvcidzIGNhbWVyYSBmZWVkIGJ5IGluamVjdGluZyBhIGR5bGliIGF0IGFwcCBsYXVuY2ggYW5kIHN0cmVhbWluZyBmcmFtZXMgaW50byBzaGFyZWQgbWVtb3J5LiBQaWNrIG1lZGlhIG9yIGEgd2ViY2FtLCB0aGVuIFBsYXkgdG8gaW5qZWN0IGludG8gdGhlIGZvcmVncm91bmQgYXBwLiJ9KSxaKCJpbnB1dCIse3JlZjpPLHR5cGU6ImZpbGUiLGFjY2VwdDoiaW1hZ2UvKix2aWRlby8qIixjbGFzc05hbWU6ImhpZGRlbiIsb25DaGFuZ2U6UTB9KSxaKCJkaXYiLHtvbkNsaWNrOihEKT0+e2lmKCFaMClyZXR1cm47aWYoRC50YXJnZXQuY2xvc2VzdCgiW2RhdGEtY2xlYXItbWVkaWFdIikpcmV0dXJuO0cwKCl9LHRpdGxlOlowPyJObyBzb3VyY2Ugc2VsZWN0ZWQg4oCUIFBsYXkgdXNlcyBhIHRlc3QtcGF0dGVybiBmZWVkLiBDbGljayB0byBwaWNrIGFuIGltYWdlL3ZpZGVvLCBvciBkcm9wIG9uZSBoZXJlLiI6RjA/YFNvdXJjZTogJHtNMH1gOmBTb3VyY2U6ICR7Qj8/S31gLGNsYXNzTmFtZTpbInJlbGF0aXZlIG1pbi1oLVs0NHB4XSBmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMi41IHB4LTMuNSBweS0yLjUgcm91bmRlZC1bN3B4XSB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLVtib3JkZXItY29sb3IsYmFja2dyb3VuZF0gZHVyYXRpb24tMTUwIixaMD8iYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8xMiI6ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLHo/IiFiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMDgpXSAhYm9yZGVyLVtyZ2JhKDEwLDEzMiwyNTUsMC42KV0iOiIiLFU/ImN1cnNvci1wcm9ncmVzcyI6WjA/ImN1cnNvci1wb2ludGVyIjoiY3Vyc29yLWRlZmF1bHQiXS5qb2luKCIgIiksY2hpbGRyZW46W1ooWlose21vZGU6SzEsZmlsZU5hbWU6Qix3ZWJjYW1OYW1lOk0wLHNvdXJjZUtpbmQ6S30pLCFaMCYmIVUmJlooImJ1dHRvbiIseyJkYXRhLWNsZWFyLW1lZGlhIjohMCxvbkNsaWNrOihEKT0+e0Quc3RvcFByb3BhZ2F0aW9uKCksbTEoKX0sY2xhc3NOYW1lOiJzaHJpbmstMCB3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvNTUgaG92ZXI6dGV4dC13aGl0ZS85MCBjdXJzb3ItcG9pbnRlciBwLTAiLCJhcmlhLWxhYmVsIjoiQ2xlYXIgc291cmNlIix0aXRsZToiQ2xlYXIg4oaSIHBsYWNlaG9sZGVyIixjaGlsZHJlbjpaKFYwLHtzaXplOjE0LHN0cm9rZVdpZHRoOjJ9KX0pXX0pLFowJiYhVSYmWihKWix7fSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLXN0cmV0Y2ggZ2FwLTEuNSIsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUiLCJkYXRhLWNhbWVyYS1zb3VyY2UtbWVudSI6ITAsY2hpbGRyZW46W1ooImJ1dHRvbiIse29uQ2xpY2s6KCk9PkgoKEQpPT4hRCksY2xhc3NOYW1lOiJoLWZ1bGwgbWluLWgtWzM2cHhdIHctMTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiB0ZXh0LXdoaXRlLzg1IHJvdW5kZWQtWzdweF0gY3Vyc29yLXBvaW50ZXIgcC0wIGhvdmVyOmJnLXdoaXRlL1swLjA2XSBob3Zlcjpib3JkZXItd2hpdGUvMjAgaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtaGFzcG9wdXAiOiJtZW51IiwiYXJpYS1leHBhbmRlZCI6TCx0aXRsZTpLPT09IndlYmNhbSI/YFNvdXJjZTogd2ViY2FtJHt4P2AgKCR7ay5maW5kKChEKT0+RC5pZD09PXgpPy5uYW1lPz94fSlgOiIifSDigJQgY2xpY2sgdG8gY2hhbmdlYDpgU291cmNlOiAke0t9IOKAlCBjbGljayB0byBwaWNrIG1lZGlhIG9yIHdlYmNhbWAsImFyaWEtbGFiZWwiOiJDaG9vc2UgY2FtZXJhIHNvdXJjZSIsY2hpbGRyZW46Wih1Mix7c2l6ZToyMCxzdHJva2VXaWR0aDoyfSl9KSxMJiZaKCJkaXYiLHtyb2xlOiJtZW51IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzZweCldIGxlZnQtMCB6LTEwIG1pbi13LVsyMDBweF0gZmxleCBmbGV4LWNvbCBnYXAtcHggcC0xIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVs3cHhdIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNCldIixjaGlsZHJlbjpbWigiYnV0dG9uIix7cm9sZToibWVudWl0ZW0iLGNsYXNzTmFtZToidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvODUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIixvbkNsaWNrOigpPT57SCghMSksRzAoKX0sdGl0bGU6IlBpY2sgYW4gaW1hZ2Ugb3IgdmlkZW8gZnJvbSBkaXNrIixjaGlsZHJlbjoiQnJvd3NlIG1lZGlh4oCmIn0pLFooImRpdiIse2NsYXNzTmFtZToiaC1weCBiZy13aGl0ZS84IG15LTEifSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcGwtMi41IHByLTIgcHQtMSBwYi1bMnB4XSIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDUgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIixjaGlsZHJlbjp3PyJDYW1lcmFzIChsb2FkaW5n4oCmKSI6ay5sZW5ndGg9PT0wPyJObyBjYW1lcmFzIjoiQ2FtZXJhcyJ9KSxaKCJidXR0b24iLHtvbkNsaWNrOihEKT0+e0Quc3RvcFByb3BhZ2F0aW9uKCksVTEoKX0sZGlzYWJsZWQ6dyxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctWzIycHhdIGgtWzIycHhdIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gdGV4dC13aGl0ZS81NSBob3Zlcjp0ZXh0LXdoaXRlLzkwIGN1cnNvci1wb2ludGVyIHAtMCBkaXNhYmxlZDpvcGFjaXR5LTUwIiwiYXJpYS1sYWJlbCI6IlJlZnJlc2ggY2FtZXJhcyIsdGl0bGU6IlJlZnJlc2ggY2FtZXJhcyIsY2hpbGRyZW46WihzMCx7c2l6ZToxMyxzdHJva2VXaWR0aDoyfSl9KV19KSxrLm1hcCgoRCk9PntsZXQgZD1LPT09IndlYmNhbSImJng9PT1ELmlkO3JldHVybiBaKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOlsidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtWzEycHhdIHB4LTIuNSBweS1bN3B4XSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLXdoaXRlL1swLjA2XSIsZD8iIWJnLXdoaXRlL1swLjEyXSAhdGV4dC13aGl0ZSI6InRleHQtd2hpdGUvODUiXS5qb2luKCIgIiksb25DbGljazooKT0+RDAoRCksdGl0bGU6RC5uYW1lLGNoaWxkcmVuOkQubmFtZX0sRC5pZCl9KV19KV19KSxaKCJidXR0b24iLHtvbkNsaWNrOlAxLm9uQ2xpY2ssZGlzYWJsZWQ6YjEsY2xhc3NOYW1lOlsiZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGRpc2FibGVkOm9wYWNpdHktNTAgbWluLWgtWzM2cHhdIixQMS5raW5kPT09InN0b3AiPyJiZy13aGl0ZS9bMC4xNl0gdGV4dC13aGl0ZSBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjIyXSI6ImJnLXN1Y2Nlc3MtZW1lcmFsZCB0ZXh0LVsjMDYyMDE4XSBlbmFibGVkOmhvdmVyOmJyaWdodG5lc3MtWzEuMDhdIl0uam9pbigiICIpLHRpdGxlOlAxLmtpbmQ9PT0ic3RvcCI/IlN0b3AgdGhlIGNhbWVyYSBoZWxwZXIgYW5kIHRlcm1pbmF0ZSBpbmplY3RlZCBhcHBzIjpQMS5raW5kPT09ImF0dGFjaCI/YEluamVjdCAke1F9IHNvIGl0IGpvaW5zIHRoZSBjYW1lcmEgZmVlZGA6IVE/IkJyaW5nIGFuIGFwcCB0byB0aGUgZm9yZWdyb3VuZCBmaXJzdCI6IlN0YXJ0OiBpbmplY3QgdGhlIGR5bGliIGFuZCBsYXVuY2ggdGhlIGZvcmVncm91bmQgYXBwIHdpdGggdGhlIGNob3NlbiBzb3VyY2UiLCJhcmlhLXByZXNzZWQiOlAxLmtpbmQ9PT0ic3RvcCIsImFyaWEtbGFiZWwiOlAxLmtpbmQ9PT0ic3RvcCI/IlN0b3AiOiJQbGF5IixjaGlsZHJlbjpbUDEua2luZD09PSJzdG9wIj9aKHIyLHt9KTpaKG4yLHt9KSxaKCJzcGFuIix7Y2hpbGRyZW46UDEua2luZD09PSJzdG9wIj8iU3RvcCI6UDEua2luZD09PSJhdHRhY2giPyJJbmplY3QiOiJQbGF5In0pXX0pLFooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpjMSxkaXNhYmxlZDphMSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctMTAgbWluLWgtWzM2cHhdIGJvcmRlciByb3VuZGVkLVs3cHhdIGZvbnQtW2luaGVyaXRdIGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGFjdGl2ZTpzY2FsZS1bMC45N10gJHtoPT09Im9uIj8iYmctd2hpdGUgYm9yZGVyLXdoaXRlIHRleHQtWyMwYTBhMGNdIGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuODhdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLXdoaXRlL1swLjg4XSBlbmFibGVkOmhvdmVyOnRleHQtWyMwYTBhMGNdIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlci13aGl0ZS84IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4wOV0gZW5hYmxlZDpob3Zlcjpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4xOCldIGVuYWJsZWQ6aG92ZXI6dGV4dC13aGl0ZSJ9YCwiYXJpYS1sYWJlbCI6YE1pcnJvcjogJHtofSDigJQgdGFwIHRvIHRvZ2dsZWAsdGl0bGU6YTE/Ik1pcnJvciB0b2dnbGUgYXZhaWxhYmxlIG9uY2UgYSBzb3VyY2UgaXMgc3RyZWFtaW5nIjpgTWlycm9yOiAke2h9IOKAlCBjbGljayB0byB0b2dnbGVgLCJhcmlhLXByZXNzZWQiOmg9PT0ib24iLGNoaWxkcmVuOloobTIse3NpemU6MjAsc3Ryb2tlV2lkdGg6MixmaWxsOmg9PT0ib24iPyJjdXJyZW50Q29sb3IiOiJub25lIn0pfSldfSksSjEmJlooazQse2tpbmQ6Indhcm5pbmciLG1lc3NhZ2U6SjF9KSxjJiZaKGs0LHtraW5kOiJlcnJvciIsbWVzc2FnZTpjfSldfSl9KX12YXIgUDQ9NTAwO2Z1bmN0aW9uIFQ0KHt1ZGlkOiQsZXZlbnRzRW5kcG9pbnQ6UX0pe2xldFtKLFhdPUEoITEpLFtLLFldPUEoW10pLFtxLEddPUEoITEpLEI9RTEoKCk9PlE/P2Ake2oxKCJhcGkvZXZlbnQtbG9nL2V2ZW50cyIpfT9kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoJCl9YCxbUSwkXSk7YigoKT0+e0coITEpLFkoW10pO2xldCB6PVMwKEIpO3JldHVybiB6Lm9ubWVzc2FnZT0oe2RhdGE6Vn0pPT57dHJ5e2xldCBDPUpTT04ucGFyc2UoVik7aWYoRyghMSksQXJyYXkuaXNBcnJheShDLmV2ZW50cykpWShDLmV2ZW50cy5zbGljZSgtUDQpKTtlbHNlIGlmKEMuZXZlbnQpWSgoVSk9PntyZXR1cm5bLi4uVS5maWx0ZXIoKEwpPT5MLmlkIT09Qy5ldmVudC5pZCksQy5ldmVudF0uc2xpY2UoLVA0KX0pfWNhdGNoe319LHoub25lcnJvcj0oKT0+RyghMCksKCk9PnouY2xvc2UoKX0sW0JdKTtsZXQgTj1FMSgoKT0+Sy5zbGljZSgpLnJldmVyc2UoKSxbS10pO3JldHVybiBaKGUxLHtvcGVuOkosb25PcGVuQ2hhbmdlOlgsImRhdGEtZXZlbnQtbG9nIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpaKFoxLHtjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUiLGNoaWxkcmVuOiJFdmVudCBMb2cifSksWigic3BhbiIse30pLFooInNwYW4iLHtjbGFzc05hbWU6InJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci13aGl0ZS84IGJnLXdoaXRlL1swLjA0XSBweC0xLjUgcHktWzNweF0gdGV4dC1bMTBweF0gZm9udC1tb25vIHRleHQtd2hpdGUvNjAiLGNoaWxkcmVuOksubGVuZ3RofSldfSksY2hpbGRyZW46Ti5sZW5ndGg9PT0wP1ooImRpdiIse3JvbGU6InN0YXR1cyIsImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS00IHRleHQtWzEycHhdIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOnE/IkRpc2Nvbm5lY3RlZCI6Ik5vIGV2ZW50cyB5ZXQifSk6WigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IG1heC1oLVszMjBweF0gZmxleC1jb2wgZ2FwLTEgb3ZlcmZsb3cteS1hdXRvIHB5LTAuNSBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixyb2xlOiJsaXN0IixjaGlsZHJlbjpOLm1hcCgoeik9PlooWFose2V2ZW50Onp9LHouaWQpKX0pfSl9ZnVuY3Rpb24gWFooe2V2ZW50OiR9KXtsZXQgUT1LWigkLnRpbWVzdGFtcCksSj1bJC5zb3VyY2UsJC5raW5kLCQuYWN0aW9uXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIC8gIiksWD0kLm1zZz8/JC5zdW1tYXJ5LEs9JC5zdGF0dXM9PT0iZXJyb3IiPyJib3JkZXItWyNmZjQ1M2FdLzUwIGJnLVsjZmY0NTNhXS8xMCB0ZXh0LVsjZmZiM2FkXSI6ImJvcmRlci13aGl0ZS84IGJnLXdoaXRlL1swLjA0XSB0ZXh0LXdoaXRlLzUwIjtyZXR1cm4gWigiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRpdGxlOkosY2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy1bNTZweF8xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbWQgcHgtMS41IHB5LTEuNSB0ZXh0LVsxMnB4XSBsZWFkaW5nLXRpZ2h0IGhvdmVyOmJnLXdoaXRlL1swLjA1XSIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpRfSksWigic3BhbiIse2NsYXNzTmFtZToibWluLXctMCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOlh9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJtdC0wLjUgYmxvY2sgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDAiLGNoaWxkcmVuOkp9KV19KSwkLnN0YXR1cz9aKCJzcGFuIix7Y2xhc3NOYW1lOmByb3VuZGVkLW1kIGJvcmRlciBweC0xLjUgcHktWzNweF0gdGV4dC1bMTBweF0gZm9udC1tb25vICR7S31gLGNoaWxkcmVuOiQuc3RhdHVzfSk6bnVsbF19KX1mdW5jdGlvbiBLWigkKXtsZXQgUT1uZXcgRGF0ZSgkKTtpZihOdW1iZXIuaXNOYU4oUS5nZXRUaW1lKCkpKXJldHVybiIiO3JldHVybiBRLnRvTG9jYWxlVGltZVN0cmluZyhbXSx7aG91cjoiMi1kaWdpdCIsbWludXRlOiIyLWRpZ2l0IixzZWNvbmQ6IjItZGlnaXQifSl9dmFyIFlaPTYwLHFaPTgwMDA7ZnVuY3Rpb24gRTQoJCl7bGV0W1EsSl09QShudWxsKSxbWCxLXT1BKFtdKSxbWSxxXT1BKCExKSxbRyxCXT1BKCExKSxOPVQoMCk7cmV0dXJuIGIoKCk9PntKKG51bGwpLEsoW10pLHEoITEpLEIoITEpLE4uY3VycmVudD0wO2xldCB6PVMwKCQpO3oub25tZXNzYWdlPSh7ZGF0YTpDfSk9Pnt0cnl7bGV0IFU9SlNPTi5wYXJzZShDKTtpZihxKCExKSwic2NoZW1hVmVyc2lvbiJpbiBVKUooVSk7ZWxzZSBpZigidCJpbiBVKXtsZXQgRj1VO04uY3VycmVudD1EYXRlLm5vdygpLEIoITEpLEsoKEwpPT57bGV0IEg9Wy4uLkxdLnJldmVyc2UoKS5maW5kKChrKT0+ay5idW5kbGVJZCE9PW51bGwpPy5idW5kbGVJZD8/bnVsbDtyZXR1cm5bLi4uSCE9PW51bGwmJkYuYnVuZGxlSWQhPT1udWxsJiZIIT09Ri5idW5kbGVJZD9bXTpMLEZdLnNsaWNlKC1ZWil9KX19Y2F0Y2h7fX0sei5vbmVycm9yPSgpPT5xKCEwKTtsZXQgVj1zZXRJbnRlcnZhbCgoKT0+e2lmKE4uY3VycmVudD4wJiZEYXRlLm5vdygpLU4uY3VycmVudD5xWilCKCEwKX0sMTAwMCk7cmV0dXJuKCk9Pnt6LmNsb3NlKCksY2xlYXJJbnRlcnZhbChWKX19LFskXSkse21ldGE6USxsYXRlc3Q6WC5hdCgtMSk/P251bGwsaGlzdG9yeTpYLGVycm9yZWQ6WSxzdGFsZTpHfX1mdW5jdGlvbiBMOCgkKXtyZXR1cm5gJHtNYXRoLnJvdW5kKCQpfSVgfWZ1bmN0aW9uIFU4KCQpe2xldCBRPSQvMTA0ODU3NjtyZXR1cm4gUT49MTAyND9gJHsoUS8xMDI0KS50b0ZpeGVkKDEpfSBHQmA6YCR7TWF0aC5yb3VuZChRKX0gTUJgfWZ1bmN0aW9uIEg4KCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCl8fCQ8PTApcmV0dXJuIjAgQi9zIjtpZigkPDEwMjQpcmV0dXJuYCR7TWF0aC5yb3VuZCgkKX0gQi9zYDtsZXQgUT0kLzEwMjQ7cmV0dXJuIFE8MTAyND9gJHtNYXRoLnJvdW5kKFEpfSBLQi9zYDpgJHsoUS8xMDI0KS50b0ZpeGVkKDEpfSBNQi9zYH1mdW5jdGlvbiBlMigkLFEsSixYKXtpZigkLmxlbmd0aDwyKXJldHVybiIiO2xldCBLPVghPT12b2lkIDAmJlg+MD9YOk1hdGgubWF4KC4uLiQsMSksWT1RLygkLmxlbmd0aC0xKSxxPSQubWFwKChCLE4pPT4oe3g6TipZLHk6Si1CL0sqSn0pKSxHPWBNJHtxWzBdLngudG9GaXhlZCgxKX0sJHtxWzBdLnkudG9GaXhlZCgxKX1gO2ZvcihsZXQgQj0wO0I8cS5sZW5ndGgtMTtCKyspe2xldCBOPXFbQi0xXT8/cVtCXSx6PXFbQl0sVj1xW0IrMV0sQz1xW0IrMl0/P1YsVT1NYXRoLm1pbih6LnksVi55KSxGPU1hdGgubWF4KHoueSxWLnkpLEw9KHcpPT5NYXRoLm1pbihGLE1hdGgubWF4KFUsdykpLEg9ei54KyhWLngtTi54KS82LE89TCh6LnkrKFYueS1OLnkpLzYpLGs9Vi54LShDLngtei54KS82LEk9TChWLnktKEMueS16LnkpLzYpO0crPWAgQyR7SC50b0ZpeGVkKDEpfSwke08udG9GaXhlZCgxKX0gJHtrLnRvRml4ZWQoMSl9LCR7SS50b0ZpeGVkKDEpfSAke1YueC50b0ZpeGVkKDEpfSwke1YueS50b0ZpeGVkKDEpfWB9cmV0dXJuIEd9dmFyIEoyPTk2LGQwPTI0O2Z1bmN0aW9uIFEzKHt2YWx1ZXM6JCxtYXg6USxjbGFzc05hbWU6Sn0pe2xldCBYPWUyKCQsSjIsZDAsUSksSz1YP2Ake1h9IEwke0oyfSwke2QwfSBMMCwke2QwfSBaYDoiIjtyZXR1cm4gWigic3ZnIix7dmlld0JveDpgMCAwICR7SjJ9ICR7ZDB9YCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIixjbGFzc05hbWU6YHctZnVsbCBoLTggJHtKfWAsY2hpbGRyZW46W1ooInBhdGgiLHtkOkssZmlsbDoiY3VycmVudENvbG9yIixvcGFjaXR5OjAuMTIsc3Ryb2tlOiJub25lIn0pLFooSjMse2Q6WH0pXX0pfWZ1bmN0aW9uIEozKHtkOiQsY2xhc3NOYW1lOlF9KXtyZXR1cm4gWigicGF0aCIse2Q6JCxjbGFzc05hbWU6USxmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MS41LHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIn0pfWZ1bmN0aW9uIEk0KHt1ZGlkOiQsY3VycmVudEFwcEJ1bmRsZUlkOlEsbWV0cmljc0VuZHBvaW50Okp9KXtsZXQgWD1FMSgoKT0+Sj8/YCR7ajEoIm1ldHJpY3MiKX0/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfWAsW0osJF0pLHttZXRhOkssbGF0ZXN0OlksaGlzdG9yeTpxLGVycm9yZWQ6RyxzdGFsZTpCfT1FNChYKSxbTix6XT1BKCEwKSxWPVkhPT1udWxsJiZZLmJ1bmRsZUlkIT09bnVsbCYmIUcmJiFCLEM9USE9bnVsbCYmUS5zdGFydHNXaXRoKCJjb20uYXBwbGUuIiksVT1HPyJUaGUgbWV0cmljcyBzdHJlYW0gZGlzY29ubmVjdGVkIjpDPyJPbmx5IHlvdXIgYXBwIGlzIG1lYXN1cmVkOyBhIHN5c3RlbSBhcHAgaXMgaW4gdGhlIGZvcmVncm91bmQiOiJXYWl0aW5nIGZvciBhY3Rpdml0eSBkYXRhIjtyZXR1cm4gWihlMSx7b3BlbjpOLG9uT3BlbkNoYW5nZTp6LHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0Iixib2R5Q2xhc3NOYW1lOlY/dm9pZCAwOiJoaWRkZW4iLHN1bW1hcnk6WihaMSx7Y2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkFjdGl2aXR5In0pLFY/IU4mJlooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNDAgdGFidWxhci1udW1zIHRleHQtcmlnaHQiLGNoaWxkcmVuOltMOChZLmNwdVBjdCksIiDCtyAiLFU4KFkubWVtQnl0ZXMpXX0pOlooInNwYW4iLHsiZGF0YS1tZXRyaWNzLXdhcm5pbmciOiEwLHJvbGU6InN0YXR1cyIsY2xhc3NOYW1lOiJncm91cCByZWxhdGl2ZSBqdXN0aWZ5LXNlbGYtZW5kIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46W1ooeTAseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToidy0zLjUgaC0zLjUgdGV4dC1hbWJlci00MDAifSksWigic3BhbiIse2NsYXNzTmFtZToic3Itb25seSIsY2hpbGRyZW46VX0pLFooInNwYW4iLHtjbGFzc05hbWU6InBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgcmlnaHQtMCB0b3AtZnVsbCB6LTEwIG10LTEgaGlkZGVuIHctbWF4IG1heC13LVsyMjBweF0gcm91bmRlZC1tZCBiZy1ibGFjay85MCBweC0yIHB5LTEgdGV4dC1bMTFweF0gbGVhZGluZy1zbnVnIHRleHQtd2hpdGUvOTAgc2hhZG93LWxnIGdyb3VwLWhvdmVyOmJsb2NrIixjaGlsZHJlbjpVfSldfSldfSksY2hpbGRyZW46Vj9aKFoxLHtjaGlsZHJlbjpbWih3NCx7bGFiZWw6IkNQVSIsdmFsdWU6TDgoWS5jcHVQY3QpLGhpbnQ6Sz9gJHtLLmhvc3RDb3Jlc30gY29yZXNgOnZvaWQgMCx2YWx1ZXM6cS5tYXAoKEYpPT5GLmNwdVBjdCksY2xhc3NOYW1lOiJ0ZXh0LWVtZXJhbGQtNDAwIn0pLFoodzQse2xhYmVsOiJNZW1vcnkiLHZhbHVlOlU4KFkubWVtQnl0ZXMpLHZhbHVlczpxLm1hcCgoRik9PkYubWVtQnl0ZXMpLGNsYXNzTmFtZToidGV4dC1za3ktNDAwIn0pLFooR1ose2Rvd246WS5uZXRJbkJ5dGVzUGVyU2VjLHVwOlkubmV0T3V0Qnl0ZXNQZXJTZWMsZG93blZhbHVlczpxLm1hcCgoRik9PkYubmV0SW5CeXRlc1BlclNlYyksdXBWYWx1ZXM6cS5tYXAoKEYpPT5GLm5ldE91dEJ5dGVzUGVyU2VjKX0pXX0pOm51bGx9KX1mdW5jdGlvbiB3NCh7bGFiZWw6JCx2YWx1ZTpRLGhpbnQ6Six2YWx1ZXM6WCxjbGFzc05hbWU6S30pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtYmFzZWxpbmUganVzdGlmeS1iZXR3ZWVuIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81MCB0ZXh0LVsxMXB4XSIsY2hpbGRyZW46JH0pLFooInNwYW4iLHtjbGFzc05hbWU6InRhYnVsYXItbnVtcyB0ZXh0LVsxMXB4XSIsY2hpbGRyZW46W1EsSiYmWigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS8zMCB0ZXh0LVsxMXB4XSBtbC0xLjUiLGNoaWxkcmVuOkp9KV19KV19KSxaKFEzLHt2YWx1ZXM6WCxjbGFzc05hbWU6S30pXX0pfWZ1bmN0aW9uIEdaKHtkb3duOiQsdXA6USxkb3duVmFsdWVzOkosdXBWYWx1ZXM6WH0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtYmFzZWxpbmUganVzdGlmeS1iZXR3ZWVuIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81MCB0ZXh0LVsxMXB4XSIsY2hpbGRyZW46Ik5ldHdvcmsifSksWigic3BhbiIse2NsYXNzTmFtZToidGFidWxhci1udW1zIHRleHQtWzExcHhdIixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1jeWFuLTQwMCIsY2hpbGRyZW46WyLihpMgIixIOCgkKV19KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzMwIG14LTEuNSIsY2hpbGRyZW46IsK3In0pLFooInNwYW4iLHtjbGFzc05hbWU6InRleHQtdmlvbGV0LTQwMCIsY2hpbGRyZW46WyLihpEgIixIOChRKV19KV19KV19KSxaKFZaLHtkb3duOkosdXA6WH0pXX0pfWZ1bmN0aW9uIFZaKHtkb3duOiQsdXA6UX0pe2xldCBKPU1hdGgubWF4KC4uLiQsLi4uUSwxKTtyZXR1cm4gWigic3ZnIix7dmlld0JveDpgMCAwICR7SjJ9ICR7ZDB9YCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIixjbGFzc05hbWU6InctZnVsbCBoLTgiLGNoaWxkcmVuOltaKEozLHtkOmUyKCQsSjIsZDAsSiksY2xhc3NOYW1lOiJ0ZXh0LWN5YW4tNDAwIn0pLFooSjMse2Q6ZTIoUSxKMixkMCxKKSxjbGFzc05hbWU6InRleHQtdmlvbGV0LTQwMCJ9KV19KX12YXIgUTU9WyJleHRyYS1zbWFsbCIsInNtYWxsIiwibWVkaXVtIiwibGFyZ2UiLCJleHRyYS1sYXJnZSIsImV4dHJhLWV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtZXh0cmEtbGFyZ2UiXSxCWj0yNTAsTlo9e2FwcGVhcmFuY2U6ImxpZ2h0IiwibGlxdWlkLWdsYXNzIjoiY2xlYXIiLCJjb2xvci1maWx0ZXIiOiJub25lIiwidGV4dC1zaXplIjoibGFyZ2UiLCJyZWR1Y2UtbW90aW9uIjoib2ZmIiwiaW5jcmVhc2UtY29udHJhc3QiOiJvZmYiLCJzaG93LWJvcmRlcnMiOiJvZmYiLCJyZWR1Y2UtdHJhbnNwYXJlbmN5Ijoib2ZmIix2b2ljZW92ZXI6Im9mZiJ9LEM4PXthcHBlYXJhbmNlOlt7dmFsdWU6ImxpZ2h0IixsYWJlbDoiTGlnaHQifSx7dmFsdWU6ImRhcmsiLGxhYmVsOiJEYXJrIn1dLCJsaXF1aWQtZ2xhc3MiOlt7dmFsdWU6ImNsZWFyIixsYWJlbDoiQ2xlYXIifSx7dmFsdWU6InRpbnRlZCIsbGFiZWw6IlRpbnRlZCJ9XSwiY29sb3ItZmlsdGVyIjpbe3ZhbHVlOiJub25lIixsYWJlbDoiTm9uZSJ9LHt2YWx1ZToicmVkLWdyZWVuIixsYWJlbDoiUmVkL0dyZWVuIChQcm90YW5vcGlhKSJ9LHt2YWx1ZToiZ3JlZW4tcmVkIixsYWJlbDoiR3JlZW4vUmVkIChEZXV0ZXJhbm9waWEpIn0se3ZhbHVlOiJibHVlLXllbGxvdyIsbGFiZWw6IkJsdWUvWWVsbG93IChUcml0YW5vcGlhKSJ9LHt2YWx1ZToiZ3JheXNjYWxlIixsYWJlbDoiR3JheXNjYWxlIn1dfSx6Wj1be2tleToicmVkdWNlLW1vdGlvbiIsbGFiZWw6IlJlZHVjZSBNb3Rpb24ifSx7a2V5OiJpbmNyZWFzZS1jb250cmFzdCIsbGFiZWw6IkluY3JlYXNlIENvbnRyYXN0In0se2tleToic2hvdy1ib3JkZXJzIixsYWJlbDoiU2hvdyBCb3JkZXJzIn0se2tleToicmVkdWNlLXRyYW5zcGFyZW5jeSIsbGFiZWw6IlJlZHVjZSBUcmFuc3BhcmVuY3kifSx7a2V5OiJ2b2ljZW92ZXIiLGxhYmVsOiJWb2ljZU92ZXIifV07ZnVuY3Rpb24gcTAoe2ljb246JCxsYWJlbDpRLGNoaWxkcmVuOkp9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgbWluLWgtWzMwcHhdIiwiZGF0YS1zZXR0aW5nLXJvdyI6USxjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToiZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6ImZsZXggc2l6ZS1bMThweF0gaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUiLGNoaWxkcmVuOiR9KSxRXX0pLFooInNwYW4iLHtjbGFzc05hbWU6ImZsZXggbWluLXctMCBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46Sn0pXX0pfWZ1bmN0aW9uIExaKHt2YWx1ZTokLGRpc2FibGVkOlEsb25DaGFuZ2U6Sn0pe2xldFtYLEtdPUEobnVsbCksWT1UKG51bGwpLHE9VChudWxsKSxHPUUoKEgpPT57aWYocS5jdXJyZW50PT09SClyZXR1cm47cS5jdXJyZW50PUgsSihIKX0sW0pdKSxCPUUoKEgpPT57aWYoSyhIKSxZLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFkuY3VycmVudCk7WS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PkcoSCksQlopfSxbR10pLE49RSgoKT0+e2lmKFkuY3VycmVudCljbGVhclRpbWVvdXQoWS5jdXJyZW50KSxZLmN1cnJlbnQ9bnVsbDtLKChIKT0+e2lmKEghPT1udWxsKUcoSCk7cmV0dXJuIG51bGx9KSxxLmN1cnJlbnQ9bnVsbH0sW0ddKSx6PVE1Lmxlbmd0aC0xLFY9WD8/JCxDPWAke1YveioxMDB9JWA7cmV0dXJuIFooInNwYW4iLHtjbGFzc05hbWU6ImZsZXggdy1bMTIwcHhdIG1pbi13LTAgZmxleC1jb2wiLGNoaWxkcmVuOltaKCJpbnB1dCIse3R5cGU6InJhbmdlIiwiYXJpYS1sYWJlbCI6IlRleHQgU2l6ZSIsbWluOjAsbWF4Onosc3RlcDoxLHZhbHVlOlYsZGlzYWJsZWQ6USxvbkNoYW5nZTooSCk9PkIoTnVtYmVyKEgudGFyZ2V0LnZhbHVlKSksb25Qb2ludGVyVXA6TixvbktleVVwOk4sb25CbHVyOk4sc3R5bGU6eyItLXNsaWRlci1maWxsIjpDLCItLXNsaWRlci1maWxsLWNvbG9yIjpRPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiOiIjMGE4NGZmIn0sY2xhc3NOYW1lOmBoLVsxM3B4XSB3LWZ1bGwgYXBwZWFyYW5jZS1ub25lIHJvdW5kZWQtZnVsbCBiZy10cmFuc3BhcmVudCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpbb3V0bGluZToxLjVweF9zb2xpZF9yZ2JhKDEwLDEzMiwyNTUsMC41NSldIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtNCAke1E/ImN1cnNvci1kZWZhdWx0IjoiY3Vyc29yLXBvaW50ZXIifSAkeyJbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOmgtWzRweF0gWyY6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXTpyb3VuZGVkLWZ1bGwgWyY6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXTpbYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG9fcmlnaHQsdmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpX3ZhcigtLXNsaWRlci1maWxsKSxyZ2JhKDI1NSwyNTUsMjU1LDAuMjIpX3ZhcigtLXNsaWRlci1maWxsKSldIFsmOjotbW96LXJhbmdlLXRyYWNrXTpoLVs0cHhdIFsmOjotbW96LXJhbmdlLXRyYWNrXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOmJnLXdoaXRlLzIwIFsmOjotbW96LXJhbmdlLXByb2dyZXNzXTpoLVs0cHhdIFsmOjotbW96LXJhbmdlLXByb2dyZXNzXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOmJnLVt2YXIoLS1zbGlkZXItZmlsbC1jb2xvcildIn0gJHsiWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTphcHBlYXJhbmNlLW5vbmUgWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpzaXplLVsxM3B4XSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnJvdW5kZWQtZnVsbCBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmJnLXdoaXRlIFsmOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYl06Ymctd2hpdGUvNTAgWyY6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpzaGFkb3ctWzBfMXB4XzNweF9yZ2JhKDAsMCwwLDAuNDUpXSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOi1tdC1bNC41cHhdIFsmOjotbW96LXJhbmdlLXRodW1iXTpzaXplLVsxM3B4XSBbJjo6LW1vei1yYW5nZS10aHVtYl06cm91bmRlZC1mdWxsIFsmOjotbW96LXJhbmdlLXRodW1iXTpib3JkZXItbm9uZSBbJjo6LW1vei1yYW5nZS10aHVtYl06Ymctd2hpdGUgWyY6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJdOmJnLXdoaXRlLzUwIn1gfSksWigic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJwb2ludGVyLWV2ZW50cy1ub25lIG10LVszcHhdIGZsZXgganVzdGlmeS1iZXR3ZWVuIHB4LVs1LjVweF0iLGNoaWxkcmVuOlE1Lm1hcCgoSCk9PlooInNwYW4iLHtjbGFzc05hbWU6InNpemUtWzJweF0gcm91bmRlZC1mdWxsIGJnLXdoaXRlLzQwIn0sSCkpfSldfSl9ZnVuY3Rpb24gQzAoe2xhYmVsOiQsdmFsdWU6USxvcHRpb25zOkosZGlzYWJsZWQ6WCxvbkNoYW5nZTpLfSl7cmV0dXJuIFoodDUse2xhYmVsOiQsdmFsdWU6USxvcHRpb25zOkosZGlzYWJsZWQ6WCxvbkNoYW5nZTpLLGNsYXNzTmFtZToiYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvMTAgcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTAuNSBweC0yIG1pbi13LTAgbWF4LXctWzE1MHB4XSBkaXNhYmxlZDp0ZXh0LXdoaXRlLzQwIn0pfXZhciAkNT17YXBwZWFyYW5jZTpaKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWigicGF0aCIse2Q6Ik0xMiAydjIifSksWigicGF0aCIse2Q6Ik0xNC44MzcgMTYuMzg1YTYgNiAwIDEgMS03LjIyMy03LjIyMmMuNjI0LS4xNDcuOTcuNjYuNzE1IDEuMjQ4YTQgNCAwIDAgMCA1LjI2IDUuMjU5Yy41ODktLjI1NSAxLjM5Ni4wOSAxLjI0OC43MTUifSksWigicGF0aCIse2Q6Ik0xNiAxMmE0IDQgMCAwIDAtNC00In0pLFooInBhdGgiLHtkOiJtMTkgNS0xLjI1NiAxLjI1NiJ9KSxaKCJwYXRoIix7ZDoiTTIwIDEyaDIifSldfSksZ2xhc3M6Wigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjIwIDIyMCIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOltaKCJwYXRoIix7ZDoiTTE1MiAxODNWMTk1SDEwMFYxODNIMTUyWk0xOTYgMTM5VjEyNkMxOTYgMTAxLjY5OSAxNzYuMzAxIDgyIDE1MiA4MkgxMDBDNzUuNjk5NSA4MiA1NiAxMDEuNjk5IDU2IDEyNlYxMzlDNTYgMTYzLjMwMSA3NS42OTk1IDE4MyAxMDAgMTgzVjE5NUw5OS4yNzY0IDE5NC45OTVDNjguOTIyOCAxOTQuNjExIDQ0LjM4OTMgMTcwLjA3NyA0NC4wMDQ5IDEzOS43MjRMNDQgMTM5VjEyNkM0NCA5NS4wNzIxIDY5LjA3MjEgNzAgMTAwIDcwSDE1MkMxODIuOTI4IDcwIDIwOCA5NS4wNzIxIDIwOCAxMjZWMTM5TDIwNy45OTUgMTM5LjcyNEMyMDcuNjExIDE3MC4wNzcgMTgzLjA3NyAxOTQuNjExIDE1Mi43MjQgMTk0Ljk5NUwxNTIgMTk1VjE4M0MxNzYuMzAxIDE4MyAxOTYgMTYzLjMwMSAxOTYgMTM5WiJ9KSxaKCJwYXRoIix7ZDoiTTEzNiAyNUMxNDcuMDQ2IDI1IDE1NiAzMy45NTQzIDE1NiA0NVY3MEgxNDNWNDVDMTQzIDQxLjEzNCAxMzkuODY2IDM4IDEzNiAzOEg0MUMzNy4xMzQgMzggMzQgNDEuMTM0IDM0IDQ1VjE0MEMzNCAxNDMuODY2IDM3LjEzNCAxNDcgNDEgMTQ3SDQ0Ljg2MDRDNDUuNjQ4NyAxNTEuNTM2IDQ2Ljk2MzQgMTU1Ljg5MSA0OC43NDAyIDE2MEg0MUw0MC40ODM0IDE1OS45OTNDMjkuODQ4MSAxNTkuNzI0IDIxLjI3NjUgMTUxLjE1MiAyMS4wMDY4IDE0MC41MTdMMjEgMTQwVjQ1QzIxIDMzLjk1NDMgMjkuOTU0MyAyNSA0MSAyNUgxMzZaIn0pLFooInBhdGgiLHtkOiJNMTU2LjE5OSAxNDBDMTU2LjE5OSAxNTAuODczIDE0Ny41MjMgMTU5LjcxOSAxMzYuNzE2IDE1OS45OTNMMTM2LjE5OSAxNjBIODAuOTE3Qzc3Ljk0NjEgMTYwIDc2LjE2MzkgMTYzLjMgNzcuNzkzIDE2NS43ODRDNzkuMjQ1MSAxNjcuOTk5IDc2LjE2NDcgMTcwLjM1MyA3NC40MDk0IDE2OC4zN0w3My42MDU5IDE2Ny40NjJDNjkuMzQ5NyAxNjIuNjU0IDY3IDE1Ni40NTUgNjcgMTUwLjAzNEM2NyAxNDguMzU4IDY4LjM1ODMgMTQ3IDcwLjAzMzkgMTQ3SDEzNi4xOTlDMTQwLjA2NSAxNDcgMTQzLjE5OSAxNDMuODY2IDE0My4xOTkgMTQwVjk2Ljk5NTVDMTQzLjE5OSA5My45ODIyIDE0MS4zNTQgOTEuMjc2MyAxMzguNTQ5IDkwLjE3NjFDMTM3LjM4OSA4OS43MjE1IDEzNy43MTUgODggMTM4Ljk2IDg4TDE0My4xOTkgODhDMTUwLjM3OSA4OCAxNTYuMTk5IDkzLjgyMDMgMTU2LjE5OSAxMDFWMTQwWiJ9KV19KSxmaWx0ZXI6Wigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1ooInBhdGgiLHtkOiJNMTEgMTdhNCA0IDAgMCAxLTggMFY1YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAyWiJ9KSxaKCJwYXRoIix7ZDoiTTE2LjcgMTNIMTlhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJINyJ9KSxaKCJwYXRoIix7ZDoiTSA3IDE3aC4wMSJ9KSxaKCJwYXRoIix7ZDoibTExIDggMi4zLTIuM2EyLjQgMi40IDAgMCAxIDMuNDA0LjAwNEwxOC42IDcuNmEyLjQgMi40IDAgMCAxIC4wMjYgMy40MzRMOS45IDE5LjgifSldfSksdGV4dFNpemU6Wigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgNTIgMzQiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpaKCJwYXRoIix7ZDoiTTM5LjcyNjYgMzMuMDIzNEMzOC4xNDg0IDMzLjAyMzQgMzYuNzUgMzIuNzI2NiAzNS41MzEyIDMyLjEzMjhDMzQuMzEyNSAzMS41MzkxIDMzLjM1OTQgMzAuNzEwOSAzMi42NzE5IDI5LjY0ODRDMzIgMjguNTcwMyAzMS42NjQxIDI3LjMxMjUgMzEuNjY0MSAyNS44NzVDMzEuNjY0MSAyMy43ODEyIDMyLjQyOTcgMjIuMTA5NCAzMy45NjA5IDIwLjg1OTRDMzUuNTA3OCAxOS42MDk0IDM3LjcxMDkgMTguOTA2MiA0MC41NzAzIDE4Ljc1TDQ3LjYwMTYgMTguMzUxNlYxNi41QzQ3LjYwMTYgMTUuMDE1NiA0Ny4xMzI4IDEzLjgzNTkgNDYuMTk1MyAxMi45NjA5QzQ1LjI1NzggMTIuMDg1OSA0My45NTMxIDExLjY0ODQgNDIuMjgxMiAxMS42NDg0QzQwLjkwNjIgMTEuNjQ4NCAzOS43NSAxMS45NDUzIDM4LjgxMjUgMTIuNTM5MUMzNy44NzUgMTMuMTMyOCAzNy4wOTM4IDE0LjA0NjkgMzYuNDY4OCAxNS4yODEyQzM2LjI2NTYgMTUuNjA5NCAzNi4wMTU2IDE1Ljg1MTYgMzUuNzE4OCAxNi4wMDc4QzM1LjQyMTkgMTYuMTY0MSAzNS4wNzgxIDE2LjI0MjIgMzQuNjg3NSAxNi4yNDIyQzM0LjE1NjIgMTYuMjQyMiAzMy43MTA5IDE2LjA3ODEgMzMuMzUxNiAxNS43NUMzMy4wMDc4IDE1LjQyMTkgMzIuODM1OSAxNC45OTIyIDMyLjgzNTkgMTQuNDYwOUMzMi44MzU5IDE0LjIyNjYgMzIuODY3MiAxMy45NzY2IDMyLjkyOTcgMTMuNzEwOUMzMy4wMDc4IDEzLjQ0NTMgMzMuMTA5NCAxMy4xNzk3IDMzLjIzNDQgMTIuOTE0MUMzMy44NzUgMTEuNDYwOSAzNS4wMTU2IDEwLjMwNDcgMzYuNjU2MiA5LjQ0NTMxQzM4LjMxMjUgOC41ODU5NCA0MC4yMjY2IDguMTU2MjUgNDIuMzk4NCA4LjE1NjI1QzQ0LjMyMDMgOC4xNTYyNSA0NS45ODQ0IDguNDkyMTkgNDcuMzkwNiA5LjE2NDA2QzQ4LjgxMjUgOS44MjAzMSA0OS44OTg0IDEwLjc1IDUwLjY0ODQgMTEuOTUzMUM1MS40MTQxIDEzLjE1NjIgNTEuNzk2OSAxNC41NzAzIDUxLjc5NjkgMTYuMTk1M1YzMC45MTQxQzUxLjc5NjkgMzEuNTg1OSA1MS42MDk0IDMyLjEwOTQgNTEuMjM0NCAzMi40ODQ0QzUwLjg1OTQgMzIuODU5NCA1MC4zNjcyIDMzLjA0NjkgNDkuNzU3OCAzMy4wNDY5QzQ5LjE2NDEgMzMuMDQ2OSA0OC42Nzk3IDMyLjg2NzIgNDguMzA0NyAzMi41MDc4QzQ3LjkyOTcgMzIuMTQ4NCA0Ny43MzQ0IDMxLjY2NDEgNDcuNzE4OCAzMS4wNTQ3VjI4LjM1OTRINDcuNjcxOUM0Ni45ODQ0IDI5Ljc4MTIgNDUuOTA2MiAzMC45MTQxIDQ0LjQzNzUgMzEuNzU3OEM0Mi45ODQ0IDMyLjYwMTYgNDEuNDE0MSAzMy4wMjM0IDM5LjcyNjYgMzMuMDIzNFpNNDAuODA0NyAyOS42NzE5QzQyLjA3MDMgMjkuNjcxOSA0My4yMTA5IDI5LjQwNjIgNDQuMjI2NiAyOC44NzVDNDUuMjU3OCAyOC4zNDM4IDQ2LjA3ODEgMjcuNjE3MiA0Ni42ODc1IDI2LjY5NTNDNDcuMjk2OSAyNS43NzM0IDQ3LjYwMTYgMjQuNzUgNDcuNjAxNiAyMy42MjVWMjEuMzI4MUw0MS4xMzI4IDIxLjc1QzM5LjQ0NTMgMjEuODU5NCAzOC4xNjQxIDIyLjI3MzQgMzcuMjg5MSAyMi45OTIyQzM2LjQxNDEgMjMuNjk1MyAzNS45NzY2IDI0LjYwOTQgMzUuOTc2NiAyNS43MzQ0QzM1Ljk3NjYgMjYuOTIxOSAzNi40MjE5IDI3Ljg3NSAzNy4zMTI1IDI4LjU5MzhDMzguMjAzMSAyOS4zMTI1IDM5LjM2NzIgMjkuNjcxOSA0MC44MDQ3IDI5LjY3MTlaTTIuMTc5NjkgMzMuMDIzNEMxLjUwNzgxIDMzLjAyMzQgMC45NzY1NjIgMzIuODM1OSAwLjU4NTkzOCAzMi40NjA5QzAuMTk1MzEyIDMyLjA4NTkgMCAzMS41NzgxIDAgMzAuOTM3NUMwIDMwLjUzMTIgMC4wODU5Mzc1IDMwLjA3MDMgMC4yNTc4MTIgMjkuNTU0N0wxMC40MDYyIDIuNDE0MDZDMTAuOTg0NCAwLjgwNDY4OCAxMi4xMDE2IDAgMTMuNzU3OCAwQzE0LjYxNzIgMCAxNS4zMjgxIDAuMjAzMTI1IDE1Ljg5MDYgMC42MDkzNzVDMTYuNDUzMSAxLjAxNTYyIDE2Ljg3NSAxLjYyNSAxNy4xNTYyIDIuNDM3NUwyNy4yNTc4IDI5LjQ4NDRDMjcuNDQ1MyAzMCAyNy41MzkxIDMwLjQ2ODggMjcuNTM5MSAzMC44OTA2QzI3LjUzOTEgMzEuNTQ2OSAyNy4zMzU5IDMyLjA3MDMgMjYuOTI5NyAzMi40NjA5QzI2LjUyMzQgMzIuODM1OSAyNS45NzY2IDMzLjAyMzQgMjUuMjg5MSAzMy4wMjM0QzI0LjYzMjggMzMuMDIzNCAyNC4xMDk0IDMyLjg3NSAyMy43MTg4IDMyLjU3ODFDMjMuMzQzOCAzMi4yODEyIDIzLjAzOTEgMzEuNzg5MSAyMi44MDQ3IDMxLjEwMTZMMTMuODI4MSA1LjM0Mzc1SDEzLjY2NDFMNC42NjQwNiAzMS4xMDE2QzQuNDI5NjkgMzEuNzg5MSA0LjEyNSAzMi4yODEyIDMuNzUgMzIuNTc4MUMzLjM3NSAzMi44NzUgMi44NTE1NiAzMy4wMjM0IDIuMTc5NjkgMzMuMDIzNFpNNi42Nzk2OSAyMy43NDIyQzYuMTQ4NDQgMjMuNzQyMiA1LjcwMzEyIDIzLjU2MjUgNS4zNDM3NSAyMy4yMDMxQzQuOTg0MzggMjIuODQzOCA0LjgwNDY5IDIyLjM5ODQgNC44MDQ2OSAyMS44NjcyQzQuODA0NjkgMjEuMzUxNiA0Ljk4NDM4IDIwLjkxNDEgNS4zNDM3NSAyMC41NTQ3QzUuNzAzMTIgMjAuMTk1MyA2LjE0ODQ0IDIwLjAxNTYgNi42Nzk2OSAyMC4wMTU2SDIwLjg1OTRDMjEuMzc1IDIwLjAxNTYgMjEuODEyNSAyMC4xOTUzIDIyLjE3MTkgMjAuNTU0N0MyMi41MzEyIDIwLjkxNDEgMjIuNzEwOSAyMS4zNTE2IDIyLjcxMDkgMjEuODY3MkMyMi43MTA5IDIyLjM5ODQgMjIuNTMxMiAyMi44NDM4IDIyLjE3MTkgMjMuMjAzMUMyMS44MTI1IDIzLjU2MjUgMjEuMzc1IDIzLjc0MjIgMjAuODU5NCAyMy43NDIySDYuNjc5NjlaIn0pfSksbW90aW9uOlooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixjaGlsZHJlbjpbWigiY2lyY2xlIix7Y3g6IjE0IixjeToiMTIiLHI6IjYifSksWigicGF0aCIse2Q6Ik0zIDhoNE0yIDEyaDRNMyAxNmg0In0pXX0pLGNvbnRyYXN0OlooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltaKCJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifSksWigicGF0aCIse2Q6Ik0xMiAxOGE2IDYgMCAwIDAgMC0xMnYxMnoifSldfSksYm9yZGVyczpaKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWigicGF0aCIse2Q6Ik01IDIxYTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMiJ9KSxaKCJwYXRoIix7ZDoiTTkgMjFoMSJ9KSxaKCJwYXRoIix7ZDoiTTE0IDIxaDEifSldfSksdHJhbnNwYXJlbmN5OlooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDYzIDQ2IixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46WigicGF0aCIse2Q6Ik0yMi43MzQ0IDQuMTcxODhDMjIuMTg3NSA0LjE3MTg4IDIxLjcxODggMy45NzY1NiAyMS4zMjgxIDMuNTg1OTRDMjAuOTM3NSAzLjE5NTMxIDIwLjc0MjIgMi43MTg3NSAyMC43NDIyIDIuMTU2MjVDMjAuNzQyMiAxLjYwOTM4IDIwLjkzNzUgMS4xNDA2MiAyMS4zMjgxIDAuNzVDMjEuNzE4OCAwLjM1OTM3NSAyMi4xODc1IDAuMTY0MDYyIDIyLjczNDQgMC4xNjQwNjJDMjMuMjgxMiAwLjE2NDA2MiAyMy43NSAwLjM1OTM3NSAyNC4xNDA2IDAuNzVDMjQuNTMxMiAxLjE0MDYyIDI0LjcyNjYgMS42MDkzOCAyNC43MjY2IDIuMTU2MjVDMjQuNzI2NiAyLjcxODc1IDI0LjUzMTIgMy4xOTUzMSAyNC4xNDA2IDMuNTg1OTRDMjMuNzUgMy45NzY1NiAyMy4yODEyIDQuMTcxODggMjIuNzM0NCA0LjE3MTg4Wk0yOS4xMDk0IDUuMjAzMTJDMjguNTQ2OSA1LjIwMzEyIDI4LjA3MDMgNS4wMDc4MSAyNy42Nzk3IDQuNjE3MTlDMjcuMjg5MSA0LjIyNjU2IDI3LjA5MzggMy43NTc4MSAyNy4wOTM4IDMuMjEwOTRDMjcuMDkzOCAyLjY2NDA2IDI3LjI4OTEgMi4xOTUzMSAyNy42Nzk3IDEuODA0NjlDMjguMDcwMyAxLjM5ODQ0IDI4LjU0NjkgMS4xOTUzMSAyOS4xMDk0IDEuMTk1MzFDMjkuNjU2MiAxLjE5NTMxIDMwLjEyNSAxLjM5ODQ0IDMwLjUxNTYgMS44MDQ2OUMzMC45MDYyIDIuMTk1MzEgMzEuMTAxNiAyLjY2NDA2IDMxLjEwMTYgMy4yMTA5NEMzMS4xMDE2IDMuNzU3ODEgMzAuOTA2MiA0LjIyNjU2IDMwLjUxNTYgNC42MTcxOUMzMC4xMjUgNS4wMDc4MSAyOS42NTYyIDUuMjAzMTIgMjkuMTA5NCA1LjIwMzEyWk0zNC44NzUgOC4xMzI4MUMzNC4zMjgxIDguMTMyODEgMzMuODUxNiA3LjkzNzUgMzMuNDQ1MyA3LjU0Njg4QzMzLjA1NDcgNy4xNDA2MiAzMi44NTk0IDYuNjcxODggMzIuODU5NCA2LjE0MDYyQzMyLjg1OTQgNS41NzgxMiAzMy4wNTQ3IDUuMTAxNTYgMzMuNDQ1MyA0LjcxMDk0QzMzLjg1MTYgNC4zMjAzMSAzNC4zMjgxIDQuMTI1IDM0Ljg3NSA0LjEyNUMzNS40MjE5IDQuMTI1IDM1Ljg5MDYgNC4zMjAzMSAzNi4yODEyIDQuNzEwOTRDMzYuNjg3NSA1LjEwMTU2IDM2Ljg5MDYgNS41NzgxMiAzNi44OTA2IDYuMTQwNjJDMzYuODkwNiA2LjY3MTg4IDM2LjY4NzUgNy4xNDA2MiAzNi4yODEyIDcuNTQ2ODhDMzUuODkwNiA3LjkzNzUgMzUuNDIxOSA4LjEzMjgxIDM0Ljg3NSA4LjEzMjgxWk0zOS40NDUzIDEyLjY3OTdDMzguODk4NCAxMi42Nzk3IDM4LjQyMTkgMTIuNDg0NCAzOC4wMTU2IDEyLjA5MzhDMzcuNjI1IDExLjcwMzEgMzcuNDI5NyAxMS4yMzQ0IDM3LjQyOTcgMTAuNjg3NUMzNy40Mjk3IDEwLjE1NjIgMzcuNjI1IDkuNjk1MzEgMzguMDE1NiA5LjMwNDY5QzM4LjQyMTkgOC44OTg0NCAzOC44OTg0IDguNjk1MzEgMzkuNDQ1MyA4LjY5NTMxQzM5Ljk5MjIgOC42OTUzMSA0MC40NjA5IDguODk4NDQgNDAuODUxNiA5LjMwNDY5QzQxLjI0MjIgOS42OTUzMSA0MS40Mzc1IDEwLjE1NjIgNDEuNDM3NSAxMC42ODc1QzQxLjQzNzUgMTEuMjM0NCA0MS4yNDIyIDExLjcwMzEgNDAuODUxNiAxMi4wOTM4QzQwLjQ2MDkgMTIuNDg0NCAzOS45OTIyIDEyLjY3OTcgMzkuNDQ1MyAxMi42Nzk3Wk00Mi4zNzUgMTguMzk4NEM0MS44MTI1IDE4LjM5ODQgNDEuMzI4MSAxOC4yMDMxIDQwLjkyMTkgMTcuODEyNUM0MC41MzEyIDE3LjQyMTkgNDAuMzM1OSAxNi45NTMxIDQwLjMzNTkgMTYuNDA2MkM0MC4zMzU5IDE1Ljg0MzggNDAuNTMxMiAxNS4zNjcyIDQwLjkyMTkgMTQuOTc2NkM0MS4zMjgxIDE0LjU4NTkgNDEuODEyNSAxNC4zOTA2IDQyLjM3NSAxNC4zOTA2QzQyLjkwNjIgMTQuMzkwNiA0My4zNjcyIDE0LjU4NTkgNDMuNzU3OCAxNC45NzY2QzQ0LjE2NDEgMTUuMzY3MiA0NC4zNjcyIDE1Ljg0MzggNDQuMzY3MiAxNi40MDYyQzQ0LjM2NzIgMTYuOTUzMSA0NC4xNjQxIDE3LjQyMTkgNDMuNzU3OCAxNy44MTI1QzQzLjM2NzIgMTguMjAzMSA0Mi45MDYyIDE4LjM5ODQgNDIuMzc1IDE4LjM5ODRaTTQzLjQ1MzEgMjQuNzk2OUM0Mi45MDYyIDI0Ljc5NjkgNDIuNDM3NSAyNC42MDE2IDQyLjA0NjkgMjQuMjEwOUM0MS42NTYyIDIzLjgyMDMgNDEuNDYwOSAyMy4zNDM4IDQxLjQ2MDkgMjIuNzgxMkM0MS40NjA5IDIyLjIzNDQgNDEuNjU2MiAyMS43NjU2IDQyLjA0NjkgMjEuMzc1QzQyLjQzNzUgMjAuOTg0NCA0Mi45MDYyIDIwLjc4OTEgNDMuNDUzMSAyMC43ODkxQzQ0IDIwLjc4OTEgNDQuNDY4OCAyMC45ODQ0IDQ0Ljg1OTQgMjEuMzc1QzQ1LjI2NTYgMjEuNzY1NiA0NS40Njg4IDIyLjIzNDQgNDUuNDY4OCAyMi43ODEyQzQ1LjQ2ODggMjMuMzQzOCA0NS4yNjU2IDIzLjgyMDMgNDQuODU5NCAyNC4yMTA5QzQ0LjQ2ODggMjQuNjAxNiA0NCAyNC43OTY5IDQzLjQ1MzEgMjQuNzk2OVpNNDIuMzc1IDMxLjE3MTlDNDEuODEyNSAzMS4xNzE5IDQxLjMyODEgMzAuOTc2NiA0MC45MjE5IDMwLjU4NTlDNDAuNTMxMiAzMC4xOTUzIDQwLjMzNTkgMjkuNzI2NiA0MC4zMzU5IDI5LjE3OTdDNDAuMzM1OSAyOC42MTcyIDQwLjUzMTIgMjguMTQwNiA0MC45MjE5IDI3Ljc1QzQxLjMyODEgMjcuMzU5NCA0MS44MTI1IDI3LjE2NDEgNDIuMzc1IDI3LjE2NDFDNDIuOTA2MiAyNy4xNjQxIDQzLjM2NzIgMjcuMzU5NCA0My43NTc4IDI3Ljc1QzQ0LjE2NDEgMjguMTQwNiA0NC4zNjcyIDI4LjYxNzIgNDQuMzY3MiAyOS4xNzk3QzQ0LjM2NzIgMjkuNzI2NiA0NC4xNjQxIDMwLjE5NTMgNDMuNzU3OCAzMC41ODU5QzQzLjM2NzIgMzAuOTc2NiA0Mi45MDYyIDMxLjE3MTkgNDIuMzc1IDMxLjE3MTlaTTM5LjQ0NTMgMzYuODkwNkMzOC44OTg0IDM2Ljg5MDYgMzguNDIxOSAzNi42OTUzIDM4LjAxNTYgMzYuMzA0N0MzNy42MjUgMzUuODk4NCAzNy40Mjk3IDM1LjQyMTkgMzcuNDI5NyAzNC44NzVDMzcuNDI5NyAzNC4zMjgxIDM3LjYyNSAzMy44NTk0IDM4LjAxNTYgMzMuNDY4OEMzOC40MjE5IDMzLjA2MjUgMzguODk4NCAzMi44NTk0IDM5LjQ0NTMgMzIuODU5NEMzOS45OTIyIDMyLjg1OTQgNDAuNDYwOSAzMy4wNjI1IDQwLjg1MTYgMzMuNDY4OEM0MS4yNDIyIDMzLjg1OTQgNDEuNDM3NSAzNC4zMjgxIDQxLjQzNzUgMzQuODc1QzQxLjQzNzUgMzUuNDIxOSA0MS4yNDIyIDM1Ljg5ODQgNDAuODUxNiAzNi4zMDQ3QzQwLjQ2MDkgMzYuNjk1MyAzOS45OTIyIDM2Ljg5MDYgMzkuNDQ1MyAzNi44OTA2Wk0zNC44NzUgNDEuNDM3NUMzNC4zMjgxIDQxLjQzNzUgMzMuODUxNiA0MS4yNDIyIDMzLjQ0NTMgNDAuODUxNkMzMy4wNTQ3IDQwLjQ2MDkgMzIuODU5NCAzOS45OTIyIDMyLjg1OTQgMzkuNDQ1M0MzMi44NTk0IDM4Ljg5ODQgMzMuMDU0NyAzOC40Mjk3IDMzLjQ0NTMgMzguMDM5MUMzMy44NTE2IDM3LjYzMjggMzQuMzI4MSAzNy40Mjk3IDM0Ljg3NSAzNy40Mjk3QzM1LjQyMTkgMzcuNDI5NyAzNS44OTA2IDM3LjYzMjggMzYuMjgxMiAzOC4wMzkxQzM2LjY4NzUgMzguNDI5NyAzNi44OTA2IDM4Ljg5ODQgMzYuODkwNiAzOS40NDUzQzM2Ljg5MDYgMzkuOTkyMiAzNi42ODc1IDQwLjQ2MDkgMzYuMjgxMiA0MC44NTE2QzM1Ljg5MDYgNDEuMjQyMiAzNS40MjE5IDQxLjQzNzUgMzQuODc1IDQxLjQzNzVaTTI5LjEwOTQgNDQuMzY3MkMyOC41NDY5IDQ0LjM2NzIgMjguMDcwMyA0NC4xNjQxIDI3LjY3OTcgNDMuNzU3OEMyNy4yODkxIDQzLjM2NzIgMjcuMDkzOCA0Mi44OTg0IDI3LjA5MzggNDIuMzUxNkMyNy4wOTM4IDQxLjgwNDcgMjcuMjg5MSA0MS4zMzU5IDI3LjY3OTcgNDAuOTQ1M0MyOC4wNzAzIDQwLjU1NDcgMjguNTQ2OSA0MC4zNTk0IDI5LjEwOTQgNDAuMzU5NEMyOS42NTYyIDQwLjM1OTQgMzAuMTI1IDQwLjU1NDcgMzAuNTE1NiA0MC45NDUzQzMwLjkwNjIgNDEuMzM1OSAzMS4xMDE2IDQxLjgwNDcgMzEuMTAxNiA0Mi4zNTE2QzMxLjEwMTYgNDIuODk4NCAzMC45MDYyIDQzLjM2NzIgMzAuNTE1NiA0My43NTc4QzMwLjEyNSA0NC4xNjQxIDI5LjY1NjIgNDQuMzY3MiAyOS4xMDk0IDQ0LjM2NzJaTTIyLjczNDQgNDUuMzk4NEMyMi4xODc1IDQ1LjM5ODQgMjEuNzE4OCA0NS4yMDMxIDIxLjMyODEgNDQuODEyNUMyMC45Mzc1IDQ0LjQyMTkgMjAuNzQyMiA0My45NTMxIDIwLjc0MjIgNDMuNDA2MkMyMC43NDIyIDQyLjg0MzggMjAuOTM3NSA0Mi4zNjcyIDIxLjMyODEgNDEuOTc2NkMyMS43MTg4IDQxLjU4NTkgMjIuMTg3NSA0MS4zOTA2IDIyLjczNDQgNDEuMzkwNkMyMy4yODEyIDQxLjM5MDYgMjMuNzUgNDEuNTg1OSAyNC4xNDA2IDQxLjk3NjZDMjQuNTMxMiA0Mi4zNjcyIDI0LjcyNjYgNDIuODQzOCAyNC43MjY2IDQzLjQwNjJDMjQuNzI2NiA0My45NTMxIDI0LjUzMTIgNDQuNDIxOSAyNC4xNDA2IDQ0LjgxMjVDMjMuNzUgNDUuMjAzMSAyMy4yODEyIDQ1LjM5ODQgMjIuNzM0NCA0NS4zOTg0Wk0xNi4zNTk0IDQ0LjM2NzJDMTUuODEyNSA0NC4zNjcyIDE1LjM0MzggNDQuMTY0MSAxNC45NTMxIDQzLjc1NzhDMTQuNTYyNSA0My4zNjcyIDE0LjM2NzIgNDIuODk4NCAxNC4zNjcyIDQyLjM1MTZDMTQuMzY3MiA0MS44MDQ3IDE0LjU2MjUgNDEuMzM1OSAxNC45NTMxIDQwLjk0NTNDMTUuMzQzOCA0MC41NTQ3IDE1LjgxMjUgNDAuMzU5NCAxNi4zNTk0IDQwLjM1OTRDMTYuOTIxOSA0MC4zNTk0IDE3LjM5ODQgNDAuNTU0NyAxNy43ODkxIDQwLjk0NTNDMTguMTc5NyA0MS4zMzU5IDE4LjM3NSA0MS44MDQ3IDE4LjM3NSA0Mi4zNTE2QzE4LjM3NSA0Mi44OTg0IDE4LjE3OTcgNDMuMzY3MiAxNy43ODkxIDQzLjc1NzhDMTcuMzk4NCA0NC4xNjQxIDE2LjkyMTkgNDQuMzY3MiAxNi4zNTk0IDQ0LjM2NzJaTTEwLjU3MDMgNDEuNDM3NUMxMC4wMzkxIDQxLjQzNzUgOS41NzAzMSA0MS4yNDIyIDkuMTY0MDYgNDAuODUxNkM4Ljc3MzQ0IDQwLjQ2MDkgOC41NzgxMiAzOS45OTIyIDguNTc4MTIgMzkuNDQ1M0M4LjU3ODEyIDM4Ljg5ODQgOC43NzM0NCAzOC40Mjk3IDkuMTY0MDYgMzguMDM5MUM5LjU3MDMxIDM3LjYzMjggMTAuMDM5MSAzNy40Mjk3IDEwLjU3MDMgMzcuNDI5N0MxMS4xMzI4IDM3LjQyOTcgMTEuNjA5NCAzNy42MzI4IDEyIDM4LjAzOTFDMTIuMzkwNiAzOC40Mjk3IDEyLjU4NTkgMzguODk4NCAxMi41ODU5IDM5LjQ0NTNDMTIuNTg1OSAzOS45OTIyIDEyLjM5MDYgNDAuNDYwOSAxMiA0MC44NTE2QzExLjYwOTQgNDEuMjQyMiAxMS4xMzI4IDQxLjQzNzUgMTAuNTcwMyA0MS40Mzc1Wk02LjAyMzQ0IDM2Ljg5MDZDNS40NzY1NiAzNi44OTA2IDUgMzYuNjk1MyA0LjU5Mzc1IDM2LjMwNDdDNC4yMDMxMiAzNS44OTg0IDQuMDA3ODEgMzUuNDIxOSA0LjAwNzgxIDM0Ljg3NUM0LjAwNzgxIDM0LjMyODEgNC4yMDMxMiAzMy44NTk0IDQuNTkzNzUgMzMuNDY4OEM1IDMzLjA2MjUgNS40NzY1NiAzMi44NTk0IDYuMDIzNDQgMzIuODU5NEM2LjU3MDMxIDMyLjg1OTQgNy4wMzkwNiAzMy4wNjI1IDcuNDI5NjkgMzMuNDY4OEM3LjgyMDMxIDMzLjg1OTQgOC4wMTU2MiAzNC4zMjgxIDguMDE1NjIgMzQuODc1QzguMDE1NjIgMzUuNDIxOSA3LjgyMDMxIDM1Ljg5ODQgNy40Mjk2OSAzNi4zMDQ3QzcuMDM5MDYgMzYuNjk1MyA2LjU3MDMxIDM2Ljg5MDYgNi4wMjM0NCAzNi44OTA2Wk0zLjA5Mzc1IDMxLjE3MTlDMi41NjI1IDMxLjE3MTkgMi4wOTM3NSAzMC45NzY2IDEuNjg3NSAzMC41ODU5QzEuMjk2ODggMzAuMTk1MyAxLjEwMTU2IDI5LjcyNjYgMS4xMDE1NiAyOS4xNzk3QzEuMTAxNTYgMjguNjE3MiAxLjI5Njg4IDI4LjE0MDYgMS42ODc1IDI3Ljc1QzIuMDkzNzUgMjcuMzU5NCAyLjU2MjUgMjcuMTY0MSAzLjA5Mzc1IDI3LjE2NDFDMy42NTYyNSAyNy4xNjQxIDQuMTMyODEgMjcuMzU5NCA0LjUyMzQ0IDI3Ljc1QzQuOTE0MDYgMjguMTQwNiA1LjEwOTM4IDI4LjYxNzIgNS4xMDkzOCAyOS4xNzk3QzUuMTA5MzggMjkuNzI2NiA0LjkxNDA2IDMwLjE5NTMgNC41MjM0NCAzMC41ODU5QzQuMTMyODEgMzAuOTc2NiAzLjY1NjI1IDMxLjE3MTkgMy4wOTM3NSAzMS4xNzE5Wk0yLjAxNTYyIDI0Ljc5NjlDMS40NTMxMiAyNC43OTY5IDAuOTc2NTYyIDI0LjYwMTYgMC41ODU5MzggMjQuMjEwOUMwLjE5NTMxMiAyMy44MjAzIDAgMjMuMzQzOCAwIDIyLjc4MTJDMCAyMi4yMzQ0IDAuMTk1MzEyIDIxLjc2NTYgMC41ODU5MzggMjEuMzc1QzAuOTc2NTYyIDIwLjk4NDQgMS40NTMxMiAyMC43ODkxIDIuMDE1NjIgMjAuNzg5MUMyLjU2MjUgMjAuNzg5MSAzLjAzMTI1IDIwLjk4NDQgMy40MjE4OCAyMS4zNzVDMy44MTI1IDIxLjc2NTYgNC4wMDc4MSAyMi4yMzQ0IDQuMDA3ODEgMjIuNzgxMkM0LjAwNzgxIDIzLjM0MzggMy44MTI1IDIzLjgyMDMgMy40MjE4OCAyNC4yMTA5QzMuMDMxMjUgMjQuNjAxNiAyLjU2MjUgMjQuNzk2OSAyLjAxNTYyIDI0Ljc5NjlaTTMuMDkzNzUgMTguMzk4NEMyLjU2MjUgMTguMzk4NCAyLjA5Mzc1IDE4LjIwMzEgMS42ODc1IDE3LjgxMjVDMS4yOTY4OCAxNy40MjE5IDEuMTAxNTYgMTYuOTUzMSAxLjEwMTU2IDE2LjQwNjJDMS4xMDE1NiAxNS44NDM4IDEuMjk2ODggMTUuMzY3MiAxLjY4NzUgMTQuOTc2NkMyLjA5Mzc1IDE0LjU4NTkgMi41NjI1IDE0LjM5MDYgMy4wOTM3NSAxNC4zOTA2QzMuNjU2MjUgMTQuMzkwNiA0LjEzMjgxIDE0LjU4NTkgNC41MjM0NCAxNC45NzY2QzQuOTE0MDYgMTUuMzY3MiA1LjEwOTM4IDE1Ljg0MzggNS4xMDkzOCAxNi40MDYyQzUuMTA5MzggMTYuOTUzMSA0LjkxNDA2IDE3LjQyMTkgNC41MjM0NCAxNy44MTI1QzQuMTMyODEgMTguMjAzMSAzLjY1NjI1IDE4LjM5ODQgMy4wOTM3NSAxOC4zOTg0Wk02LjAyMzQ0IDEyLjY3OTdDNS40NzY1NiAxMi42Nzk3IDUgMTIuNDg0NCA0LjU5Mzc1IDEyLjA5MzhDNC4yMDMxMiAxMS43MDMxIDQuMDA3ODEgMTEuMjM0NCA0LjAwNzgxIDEwLjY4NzVDNC4wMDc4MSAxMC4xNTYyIDQuMjAzMTIgOS42OTUzMSA0LjU5Mzc1IDkuMzA0NjlDNSA4Ljg5ODQ0IDUuNDc2NTYgOC42OTUzMSA2LjAyMzQ0IDguNjk1MzFDNi41NzAzMSA4LjY5NTMxIDcuMDM5MDYgOC44OTg0NCA3LjQyOTY5IDkuMzA0NjlDNy44MjAzMSA5LjY5NTMxIDguMDE1NjIgMTAuMTU2MiA4LjAxNTYyIDEwLjY4NzVDOC4wMTU2MiAxMS4yMzQ0IDcuODIwMzEgMTEuNzAzMSA3LjQyOTY5IDEyLjA5MzhDNy4wMzkwNiAxMi40ODQ0IDYuNTcwMzEgMTIuNjc5NyA2LjAyMzQ0IDEyLjY3OTdaTTEwLjU3MDMgOC4xMzI4MUMxMC4wMzkxIDguMTMyODEgOS41NzAzMSA3LjkzNzUgOS4xNjQwNiA3LjU0Njg4QzguNzczNDQgNy4xNDA2MiA4LjU3ODEyIDYuNjcxODggOC41NzgxMiA2LjE0MDYyQzguNTc4MTIgNS41NzgxMiA4Ljc3MzQ0IDUuMTAxNTYgOS4xNjQwNiA0LjcxMDk0QzkuNTcwMzEgNC4zMjAzMSAxMC4wMzkxIDQuMTI1IDEwLjU3MDMgNC4xMjVDMTEuMTMyOCA0LjEyNSAxMS42MDk0IDQuMzIwMzEgMTIgNC43MTA5NEMxMi4zOTA2IDUuMTAxNTYgMTIuNTg1OSA1LjU3ODEyIDEyLjU4NTkgNi4xNDA2MkMxMi41ODU5IDYuNjcxODggMTIuMzkwNiA3LjE0MDYyIDEyIDcuNTQ2ODhDMTEuNjA5NCA3LjkzNzUgMTEuMTMyOCA4LjEzMjgxIDEwLjU3MDMgOC4xMzI4MVpNMTYuMzU5NCA1LjIwMzEyQzE1LjgxMjUgNS4yMDMxMiAxNS4zNDM4IDUuMDA3ODEgMTQuOTUzMSA0LjYxNzE5QzE0LjU2MjUgNC4yMjY1NiAxNC4zNjcyIDMuNzU3ODEgMTQuMzY3MiAzLjIxMDk0QzE0LjM2NzIgMi42NjQwNiAxNC41NjI1IDIuMTk1MzEgMTQuOTUzMSAxLjgwNDY5QzE1LjM0MzggMS4zOTg0NCAxNS44MTI1IDEuMTk1MzEgMTYuMzU5NCAxLjE5NTMxQzE2LjkyMTkgMS4xOTUzMSAxNy4zOTg0IDEuMzk4NDQgMTcuNzg5MSAxLjgwNDY5QzE4LjE3OTcgMi4xOTUzMSAxOC4zNzUgMi42NjQwNiAxOC4zNzUgMy4yMTA5NEMxOC4zNzUgMy43NTc4MSAxOC4xNzk3IDQuMjI2NTYgMTcuNzg5MSA0LjYxNzE5QzE3LjM5ODQgNS4wMDc4MSAxNi45MjE5IDUuMjAzMTIgMTYuMzU5NCA1LjIwMzEyWk00MC4xMDE2IDQ1LjU2MjVDMzYuOTQ1MyA0NS41NjI1IDMzLjk5MjIgNDQuOTY4OCAzMS4yNDIyIDQzLjc4MTJDMjguNTA3OCA0Mi42MDk0IDI2LjA5MzggNDAuOTc2NiAyNCAzOC44ODI4QzIxLjkwNjIgMzYuNzg5MSAyMC4yNjU2IDM0LjM2NzIgMTkuMDc4MSAzMS42MTcyQzE3LjkwNjIgMjguODY3MiAxNy4zMjAzIDI1LjkyMTkgMTcuMzIwMyAyMi43ODEyQzE3LjMyMDMgMTkuNjQwNiAxNy45MDYyIDE2LjY5NTMgMTkuMDc4MSAxMy45NDUzQzIwLjI2NTYgMTEuMTc5NyAyMS45MDYyIDguNzU3ODEgMjQgNi42Nzk2OUMyNi4wOTM4IDQuNTg1OTQgMjguNTA3OCAyLjk1MzEyIDMxLjI0MjIgMS43ODEyNUMzMy45OTIyIDAuNTkzNzUgMzYuOTQ1MyAwIDQwLjEwMTYgMEM0My4yNDIyIDAgNDYuMTg3NSAwLjU5Mzc1IDQ4LjkzNzUgMS43ODEyNUM1MS42ODc1IDIuOTUzMTIgNTQuMTAxNiA0LjU4NTk0IDU2LjE3OTcgNi42Nzk2OUM1OC4yNzM0IDguNzU3ODEgNTkuOTA2MiAxMS4xNzk3IDYxLjA3ODEgMTMuOTQ1M0M2Mi4yNjU2IDE2LjY5NTMgNjIuODU5NCAxOS42NDA2IDYyLjg1OTQgMjIuNzgxMkM2Mi44NTk0IDI1LjkyMTkgNjIuMjY1NiAyOC44NjcyIDYxLjA3ODEgMzEuNjE3MkM1OS45MDYyIDM0LjM2NzIgNTguMjczNCAzNi43ODkxIDU2LjE3OTcgMzguODgyOEM1NC4xMDE2IDQwLjk3NjYgNTEuNjg3NSA0Mi42MDk0IDQ4LjkzNzUgNDMuNzgxMkM0Ni4xODc1IDQ0Ljk2ODggNDMuMjQyMiA0NS41NjI1IDQwLjEwMTYgNDUuNTYyNVpNNDAuMTAxNiA0MS4zOTA2QzQyLjY2NDEgNDEuMzkwNiA0NS4wNzAzIDQwLjkwNjIgNDcuMzIwMyAzOS45Mzc1QzQ5LjU3MDMgMzguOTY4OCA1MS41NDY5IDM3LjYzMjggNTMuMjUgMzUuOTI5N0M1NC45Njg4IDM0LjIyNjYgNTYuMzA0NyAzMi4yNTc4IDU3LjI1NzggMzAuMDIzNEM1OC4yMTA5IDI3Ljc3MzQgNTguNjg3NSAyNS4zNTk0IDU4LjY4NzUgMjIuNzgxMkM1OC42ODc1IDIwLjIwMzEgNTguMjEwOSAxNy43OTY5IDU3LjI1NzggMTUuNTYyNUM1Ni4zMDQ3IDEzLjMxMjUgNTQuOTY4OCAxMS4zMzU5IDUzLjI1IDkuNjMyODFDNTEuNTQ2OSA3LjkyOTY5IDQ5LjU3MDMgNi41OTM3NSA0Ny4zMjAzIDUuNjI1QzQ1LjA3MDMgNC42NTYyNSA0Mi42NjQxIDQuMTcxODggNDAuMTAxNiA0LjE3MTg4QzM3LjUyMzQgNC4xNzE4OCAzNS4xMDk0IDQuNjU2MjUgMzIuODU5NCA1LjYyNUMzMC42MjUgNi41OTM3NSAyOC42NDg0IDcuOTI5NjkgMjYuOTI5NyA5LjYzMjgxQzI1LjIyNjYgMTEuMzM1OSAyMy44OTA2IDEzLjMxMjUgMjIuOTIxOSAxNS41NjI1QzIxLjk2ODggMTcuNzk2OSAyMS40OTIyIDIwLjIwMzEgMjEuNDkyMiAyMi43ODEyQzIxLjQ5MjIgMjUuMzU5NCAyMS45Njg4IDI3Ljc3MzQgMjIuOTIxOSAzMC4wMjM0QzIzLjg5MDYgMzIuMjU3OCAyNS4yMjY2IDM0LjIyNjYgMjYuOTI5NyAzNS45Mjk3QzI4LjY0ODQgMzcuNjMyOCAzMC42MjUgMzguOTY4OCAzMi44NTk0IDM5LjkzNzVDMzUuMTA5NCA0MC45MDYyIDM3LjUyMzQgNDEuMzkwNiA0MC4xMDE2IDQxLjM5MDZaIn0pfSksdm9pY2VvdmVyOlooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltaKCJwYXRoIix7ZDoibTExIDcuNjAxLTUuOTk0IDguMTlhMSAxIDAgMCAwIC4xIDEuMjk4bC44MTcuODE4YTEgMSAwIDAgMCAxLjMxNC4wODdMMTUuMDkgMTIifSksWigicGF0aCIse2Q6Ik0xNi41IDIxLjE3NEMxNS41IDIwLjUgMTQuMzcyIDIwIDEzIDIwYy0yLjA1OCAwLTMuOTI4IDIuMzU2LTYgMi0yLjA3Mi0uMzU2LTIuNzc1LTMuMzY5LTEuNS00LjUifSksWigiY2lyY2xlIix7Y3g6IjE2IixjeToiNyIscjoiNSJ9KV19KX07ZnVuY3Rpb24gVVooJCl7aWYoISQpcmV0dXJuITA7cmV0dXJuIHA1KCQpLm9zLnRvTG93ZXJDYXNlKCk9PT0iaW9zIn1mdW5jdGlvbiBiNCh7dWRpZDokLHJ1bnRpbWU6UX0pe2xldFtKLFhdPUEoITApLFtLLFldPUEobnVsbCksW3EsR109QShudWxsKSxbQixOXT1BKG51bGwpLHo9VVooUSksVj1FKGFzeW5jKCk9PntOKG51bGwpO3RyeXtsZXQgdz1hd2FpdCBuMyh7ZGV2aWNlOiR9LHtzaWduYWw6QWJvcnRTaWduYWwudGltZW91dCgxNTAwMCl9KTtpZih3KVkodyk7ZWxzZSBOKCJVbmV4cGVjdGVkIHNpbXVsYXRvci1zZXR0aW5ncyByZXBseSIpfWNhdGNoKHcpe04odyBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiYmdy5uYW1lPT09IlRpbWVvdXRFcnJvciI/IlRpbWVkIG91dCByZWFkaW5nIHNpbXVsYXRvciBzZXR0aW5ncyI6dyBpbnN0YW5jZW9mIEVycm9yJiZ3Lm1lc3NhZ2UhPT0iRmFpbGVkIHRvIGZldGNoIj93Lm1lc3NhZ2U6IkNvdWxkIG5vdCByZWFjaCB0aGUgcHJldmlldyBzZXJ2ZXIg4oCUIHJlbG9hZCB0aGUgcGFnZSBpZiB0aGlzIHBlcnNpc3RzIil9fSxbJF0pO2IoKCk9PntpZihZKG51bGwpLCF6KXJldHVybjtWKCl9LFtWLHpdKTtsZXQgQz1FKGFzeW5jKHcsUCk9PntHKHcpLE4obnVsbCksWSgoeCk9Png/ey4uLngsW3ddOlB9OngpO3RyeXthd2FpdCBuMyh7ZGV2aWNlOiQsb3B0aW9uOncsdmFsdWU6UH0se3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pfWNhdGNoKHgpe04oeCBpbnN0YW5jZW9mIEVycm9yP3gubWVzc2FnZTpgRmFpbGVkIHRvIHNldCAke3d9YCksVigpfWZpbmFsbHl7RyhudWxsKX19LFskLFZdKSxVPVQoe3J1bm5pbmc6ITEsbmV4dDpudWxsfSksRj1UKEMpO0YuY3VycmVudD1DO2xldCBMPUUoKHcpPT57bGV0IFA9VS5jdXJyZW50O2lmKFAubmV4dD13LFAucnVubmluZylyZXR1cm47UC5ydW5uaW5nPSEwLChhc3luYygpPT57d2hpbGUoUC5uZXh0IT09bnVsbCl7bGV0IHg9UC5uZXh0O1AubmV4dD1udWxsLGF3YWl0IEYuY3VycmVudCgidGV4dC1zaXplIixRNVt4XSl9UC5ydW5uaW5nPSExfSkoKX0sW10pLEg9SyE9PW51bGwsTz1LPz9OWixrPVE1LmluZGV4T2YoT1sidGV4dC1zaXplIl0pLEk9az49MD9rOk9bInRleHQtc2l6ZSJdPy5zdGFydHNXaXRoKCJhY2Nlc3NpYmlsaXR5Iik/UTUubGVuZ3RoLTE6MztyZXR1cm4gWihlMSx7b3BlbjpKLG9uT3BlbkNoYW5nZTpYLCJkYXRhLXNpbXVsYXRvci1zZXR0aW5ncyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6WihaMSx7Y2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlNpbXVsYXRvciJ9KSxaKCJzcGFuIix7fSldfSksY2hpbGRyZW46IXo/WigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQ1IHRleHQtWzExcHhdIHB4LTAuNSBweS0xIixjaGlsZHJlbjoiU2ltdWxhdG9yIHNldHRpbmdzIGFyZSBhdmFpbGFibGUgb24gaU9TIHNpbXVsYXRvcnMgb25seS4ifSk6WihaMSx7Y2hpbGRyZW46W0ImJlooImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIixjaGlsZHJlbjpCfSksWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT52b2lkIFYoKSxjbGFzc05hbWU6InNocmluay0wIGN1cnNvci1wb2ludGVyIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1kYW5nZXIvMzAgYmctdHJhbnNwYXJlbnQgcHgtMS41IHB5LTAuNSB0ZXh0LVsxMXB4XSB0ZXh0LWRhbmdlci1zb2Z0IixjaGlsZHJlbjoiUmV0cnkifSldfSksWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xLjUgcGItMS41IixjaGlsZHJlbjpbWihxMCx7aWNvbjokNS5hcHBlYXJhbmNlLGxhYmVsOiJBcHBlYXJhbmNlIixjaGlsZHJlbjpaKEMwLHtsYWJlbDoiQXBwZWFyYW5jZSIsdmFsdWU6Ty5hcHBlYXJhbmNlPz8ibGlnaHQiLG9wdGlvbnM6QzguYXBwZWFyYW5jZSxkaXNhYmxlZDohSHx8cT09PSJhcHBlYXJhbmNlIixvbkNoYW5nZToodyk9PkMoImFwcGVhcmFuY2UiLHcpfSl9KSxaKHEwLHtpY29uOiQ1LmdsYXNzLGxhYmVsOiJMaXF1aWQgR2xhc3MiLGNoaWxkcmVuOlooQzAse2xhYmVsOiJMaXF1aWQgR2xhc3MiLHZhbHVlOk9bImxpcXVpZC1nbGFzcyJdPz8iY2xlYXIiLG9wdGlvbnM6QzhbImxpcXVpZC1nbGFzcyJdLGRpc2FibGVkOiFIfHxxPT09ImxpcXVpZC1nbGFzcyIsb25DaGFuZ2U6KHcpPT5DKCJsaXF1aWQtZ2xhc3MiLHcpfSl9KSxaKHEwLHtpY29uOiQ1LmZpbHRlcixsYWJlbDoiQ29sb3IgRmlsdGVyIixjaGlsZHJlbjpaKEMwLHtsYWJlbDoiQ29sb3IgRmlsdGVyIix2YWx1ZTpPWyJjb2xvci1maWx0ZXIiXT8/Im5vbmUiLG9wdGlvbnM6QzhbImNvbG9yLWZpbHRlciJdLGRpc2FibGVkOiFIfHxxPT09ImNvbG9yLWZpbHRlciIsb25DaGFuZ2U6KHcpPT5DKCJjb2xvci1maWx0ZXIiLHcpfSl9KSxaKHEwLHtpY29uOiQ1LnRleHRTaXplLGxhYmVsOiJUZXh0IFNpemUiLGNoaWxkcmVuOlooTFose3ZhbHVlOkksZGlzYWJsZWQ6IUgsb25DaGFuZ2U6TH0pfSkseloubWFwKCh7a2V5OncsbGFiZWw6UH0pPT5aKHEwLHtpY29uOiQ1W3c9PT0icmVkdWNlLW1vdGlvbiI/Im1vdGlvbiI6dz09PSJpbmNyZWFzZS1jb250cmFzdCI/ImNvbnRyYXN0Ijp3PT09InNob3ctYm9yZGVycyI/ImJvcmRlcnMiOnc9PT0icmVkdWNlLXRyYW5zcGFyZW5jeSI/InRyYW5zcGFyZW5jeSI6InZvaWNlb3ZlciJdLGxhYmVsOlAsY2hpbGRyZW46WihlNSx7bGFiZWw6UCxjaGVja2VkOk9bd109PT0ib24iLGRpc2FibGVkOiFIfHxxPT09dyxvbkNoYW5nZTooeCk9PkModyx4PyJvbiI6Im9mZiIpfSl9LHcpKV19KV19KX0pfWZ1bmN0aW9uIHk0KCQsUSl7cmV0dXJuICQuZmluZCgoSik9Pkouc2Vzc2lvbklkPT09USk/P251bGx9ZnVuY3Rpb24gWjMoJCxRKXtsZXQgSj0hMSxYPSExLEs9YXN5bmMoKT0+e2lmKFh8fEopcmV0dXJuO0o9ITA7dHJ5e2F3YWl0ICQoKX1jYXRjaHt9ZmluYWxseXtKPSExfX07SygpO2xldCBZPXNldEludGVydmFsKCgpPT52b2lkIEsoKSxRKTtyZXR1cm4oKT0+e1g9ITAsY2xlYXJJbnRlcnZhbChZKX19dmFyIFM0PTEwMDAsSFo9NDAwMDtmdW5jdGlvbiB4NCgkLFEsSil7bGV0W1gsS109QSh7c2Vzc2lvbjpudWxsLGNhcHR1cmU6bnVsbCxzdGFsZTohMX0pLFk9VCgwKTtyZXR1cm4gYigoKT0+e2lmKFkuY3VycmVudD0wLEsoe3Nlc3Npb246bnVsbCxjYXB0dXJlOm51bGwsc3RhbGU6ITF9KSwhSnx8UT09PW51bGwpcmV0dXJuO2xldCBxPSExLEc9UTYoJCxRKSxOPVozKGFzeW5jKCk9PntsZXQgVj1udWxsO3RyeXtsZXQgVT1hd2FpdCBmZXRjaChHLHtzaWduYWw6QWJvcnRTaWduYWwudGltZW91dChTNCozKX0pO2lmKCFVLm9rKXtpZighcSlLKHtzZXNzaW9uOm51bGwsY2FwdHVyZTpudWxsLHN0YWxlOiExfSk7cmV0dXJufVY9YXdhaXQgVS5qc29uKCl9Y2F0Y2h7cmV0dXJufWlmKHF8fFY9PT1udWxsKXJldHVybjtsZXQgQz1BcnJheS5pc0FycmF5KFYuc2Vzc2lvbnMpP1Yuc2Vzc2lvbnM6W107WS5jdXJyZW50PURhdGUubm93KCksSyh7c2Vzc2lvbjp5NChDLFEpLGNhcHR1cmU6Vi5jYXB0dXJlPz9udWxsLHN0YWxlOiExfSl9LFM0KSx6PXdpbmRvdy5zZXRJbnRlcnZhbCgoKT0+e2lmKFkuY3VycmVudD4wJiZEYXRlLm5vdygpLVkuY3VycmVudD5IWilLKChWKT0+Vi5zdGFsZT9WOnsuLi5WLHN0YWxlOiEwfSl9LDEwMDApO3JldHVybigpPT57cT0hMCxOKCksd2luZG93LmNsZWFySW50ZXJ2YWwoeil9fSxbJCxRLEpdKSxYfWZ1bmN0aW9uIFcyKCQpe3JldHVybiBoMCgkKT8/MH1mdW5jdGlvbiBoMCgkKXtyZXR1cm4gdHlwZW9mICQ9PT0ibnVtYmVyIiYmTnVtYmVyLmlzRmluaXRlKCQpPyQ6bnVsbH1mdW5jdGlvbiBqNCgkLFEpe2xldCBKPXthdE1zOlEsZnJhbWVzRGVjb2RlZDowLGZyYW1lc0Ryb3BwZWQ6MCxmcmVlemVDb3VudDowLGZyZWV6ZU1zOjAsYnl0ZXNSZWNlaXZlZDowLHBhY2tldHNSZWNlaXZlZDowLHBhY2tldHNMb3N0Om51bGwsaml0dGVyTXM6bnVsbCxqaXR0ZXJCdWZmZXJTZWNvbmRzOm51bGwsaml0dGVyQnVmZmVyRW1pdHRlZDpudWxsLHJlcG9ydGVkRnBzOm51bGwsd2lkdGg6bnVsbCxoZWlnaHQ6bnVsbCxjb2RlYzpudWxsLHJvdW5kVHJpcE1zOm51bGwscGF0aDoidW5rbm93biJ9LFg9bmV3IE1hcCxLPW5ldyBNYXAsWT1uZXcgTWFwLHE9bnVsbCxHPW51bGwsQj1udWxsOyQuZm9yRWFjaCgoeik9Pntzd2l0Y2goei50eXBlKXtjYXNlImNvZGVjIjppZih0eXBlb2Ygei5pZD09PSJzdHJpbmciJiZ0eXBlb2Ygei5taW1lVHlwZT09PSJzdHJpbmciKVguc2V0KHouaWQsei5taW1lVHlwZSk7YnJlYWs7Y2FzZSJpbmJvdW5kLXJ0cCI6e2lmKHoua2luZCE9PSJ2aWRlbyIpYnJlYWs7bGV0IFY9VzIoei5mcmFtZXNEZWNvZGVkKTtpZihWPEouZnJhbWVzRGVjb2RlZClicmVhaztKLmZyYW1lc0RlY29kZWQ9VixKLmZyYW1lc0Ryb3BwZWQ9VzIoei5mcmFtZXNEcm9wcGVkKSxKLmZyZWV6ZUNvdW50PVcyKHouZnJlZXplQ291bnQpLEouZnJlZXplTXM9VzIoei50b3RhbEZyZWV6ZXNEdXJhdGlvbikqMTAwMCxKLmJ5dGVzUmVjZWl2ZWQ9VzIoei5ieXRlc1JlY2VpdmVkKSxKLnBhY2tldHNSZWNlaXZlZD1XMih6LnBhY2tldHNSZWNlaXZlZCksSi5wYWNrZXRzTG9zdD1oMCh6LnBhY2tldHNMb3N0KSxKLnJlcG9ydGVkRnBzPWgwKHouZnJhbWVzUGVyU2Vjb25kKSxKLndpZHRoPWgwKHouZnJhbWVXaWR0aCksSi5oZWlnaHQ9aDAoei5mcmFtZUhlaWdodCk7bGV0IEM9aDAoei5qaXR0ZXIpO2lmKEouaml0dGVyTXM9Qz09PW51bGw/bnVsbDpDKjEwMDAsSi5qaXR0ZXJCdWZmZXJTZWNvbmRzPWgwKHouaml0dGVyQnVmZmVyRGVsYXkpLEouaml0dGVyQnVmZmVyRW1pdHRlZD1oMCh6LmppdHRlckJ1ZmZlckVtaXR0ZWRDb3VudCksdHlwZW9mIHouY29kZWNJZD09PSJzdHJpbmciKUouY29kZWM9WC5nZXQoei5jb2RlY0lkKT8/bnVsbDticmVha31jYXNlInRyYW5zcG9ydCI6aWYodHlwZW9mIHouc2VsZWN0ZWRDYW5kaWRhdGVQYWlySWQ9PT0ic3RyaW5nIilxPXouc2VsZWN0ZWRDYW5kaWRhdGVQYWlySWQ7YnJlYWs7Y2FzZSJjYW5kaWRhdGUtcGFpciI6aWYodHlwZW9mIHouaWQ9PT0ic3RyaW5nIilLLnNldCh6LmlkLHopO2lmKHouc2VsZWN0ZWQ9PT0hMClHPXo7ZWxzZSBpZih6Lm5vbWluYXRlZD09PSEwJiZ6LnN0YXRlPT09InN1Y2NlZWRlZCIpRz8/PXo7ZWxzZSBpZih6LnN0YXRlPT09InN1Y2NlZWRlZCIpQj8/PXo7YnJlYWs7Y2FzZSJsb2NhbC1jYW5kaWRhdGUiOmNhc2UicmVtb3RlLWNhbmRpZGF0ZSI6aWYodHlwZW9mIHouaWQ9PT0ic3RyaW5nIilZLnNldCh6LmlkLHopO2JyZWFrfX0pO2xldCBOPShxPT09bnVsbD92b2lkIDA6Sy5nZXQocSkpPz9HPz9CO2lmKE4pe2xldCB6PWgwKE4uY3VycmVudFJvdW5kVHJpcFRpbWUpO0oucm91bmRUcmlwTXM9ej09PW51bGw/bnVsbDp6KjEwMDA7bGV0IFY9W04ubG9jYWxDYW5kaWRhdGVJZCxOLnJlbW90ZUNhbmRpZGF0ZUlkXS5tYXAoKEMpPT50eXBlb2YgQz09PSJzdHJpbmciP1kuZ2V0KEMpPy5jYW5kaWRhdGVUeXBlOnZvaWQgMCk7aWYoVi5ldmVyeSgoQyk9PnR5cGVvZiBDPT09InN0cmluZyIpKUoucGF0aD1WLmluY2x1ZGVzKCJyZWxheSIpPyJyZWxheSI6ImRpcmVjdCJ9aWYoSi5jb2RlYz09PW51bGwmJlguc2l6ZT09PTEpSi5jb2RlYz1bLi4uWC52YWx1ZXMoKV1bMF0/P251bGw7cmV0dXJuIEp9ZnVuY3Rpb24gdjQoJCxRKXtsZXQgSj17Li4uUSxmcHM6bnVsbCxrYnBzOm51bGwsbG9zc1JhdGlvOm51bGwsZHJvcHBlZEluV2luZG93Om51bGwsZnJlZXplc0luV2luZG93Om51bGwsZnJlZXplTXNJbldpbmRvdzpudWxsLGppdHRlckJ1ZmZlck1zOm51bGx9O2lmKCQ9PT1udWxsKXJldHVybiBKO2xldCBYPVEuYXRNcy0kLmF0TXM7aWYoWDwyNTApcmV0dXJuIEo7bGV0IEs9US5mcmFtZXNEZWNvZGVkLSQuZnJhbWVzRGVjb2RlZCxZPVEuYnl0ZXNSZWNlaXZlZC0kLmJ5dGVzUmVjZWl2ZWQscT1RLmZyYW1lc0Ryb3BwZWQtJC5mcmFtZXNEcm9wcGVkLEc9US5mcmVlemVDb3VudC0kLmZyZWV6ZUNvdW50LEI9US5mcmVlemVNcy0kLmZyZWV6ZU1zO2lmKEs8MHx8WTwwfHxxPDB8fEc8MHx8QjwwKXJldHVybiBKO2xldCBOPVgvMTAwMDtyZXR1cm57Li4uUSxmcHM6Sy9OLGticHM6WSo4LzEwMDAvTixsb3NzUmF0aW86Q1ooJCxRKSxkcm9wcGVkSW5XaW5kb3c6cSxmcmVlemVzSW5XaW5kb3c6RyxmcmVlemVNc0luV2luZG93OkIsaml0dGVyQnVmZmVyTXM6T1ooJCxRKX19ZnVuY3Rpb24gQ1ooJCxRKXtpZigkLnBhY2tldHNMb3N0PT09bnVsbHx8US5wYWNrZXRzTG9zdD09PW51bGwpcmV0dXJuIG51bGw7bGV0IEo9US5wYWNrZXRzTG9zdC0kLnBhY2tldHNMb3N0LFg9US5wYWNrZXRzUmVjZWl2ZWQtJC5wYWNrZXRzUmVjZWl2ZWQ7aWYoSjwwfHxYPDApcmV0dXJuIG51bGw7bGV0IEs9WCtKO3JldHVybiBLPjA/Si9LOm51bGx9ZnVuY3Rpb24gT1ooJCxRKXtpZihRLmppdHRlckJ1ZmZlclNlY29uZHM9PT1udWxsfHxRLmppdHRlckJ1ZmZlckVtaXR0ZWQ9PT1udWxsKXJldHVybiBudWxsO2lmKCQuaml0dGVyQnVmZmVyU2Vjb25kcz09PW51bGx8fCQuaml0dGVyQnVmZmVyRW1pdHRlZD09PW51bGwpcmV0dXJuIG51bGw7bGV0IEo9US5qaXR0ZXJCdWZmZXJTZWNvbmRzLSQuaml0dGVyQnVmZmVyU2Vjb25kcyxYPVEuaml0dGVyQnVmZmVyRW1pdHRlZC0kLmppdHRlckJ1ZmZlckVtaXR0ZWQ7aWYoSjwwfHxYPD0wKXJldHVybiBudWxsO3JldHVybiBKL1gqMTAwMH12YXIgRlo9MTAwMCxNWj00MDAwLEFaPTYwMDtmdW5jdGlvbiBSNCgkKXtsZXRbUSxKXT1BKG51bGwpLFtYLEtdPUEoW10pLFtZLHFdPUEoITEpLEc9VChudWxsKSxCPVQoMCk7cmV0dXJuIGIoKCk9PntpZihHLmN1cnJlbnQ9bnVsbCxCLmN1cnJlbnQ9MCxxKCExKSwkPT09bnVsbCl7SihudWxsKSxLKFtdKTtyZXR1cm59bGV0IE49ITEsVj1aMyhhc3luYygpPT57bGV0IFU9RGF0ZS5ub3coKSxGO3RyeXtGPWF3YWl0ICQuZ2V0U3RhdHMoKX1jYXRjaHtyZXR1cm59aWYoTilyZXR1cm47bGV0IEw9ajQoRixVKSxIPXY0KEcuY3VycmVudCxMKTtCLmN1cnJlbnQ9VSxxKCExKSxKKEgpLEsoKE8pPT5bLi4uTyxIXS5zbGljZSgtQVopKSxHLmN1cnJlbnQ9TH0sRlopLEM9d2luZG93LnNldEludGVydmFsKCgpPT57aWYoQi5jdXJyZW50PjAmJkRhdGUubm93KCktQi5jdXJyZW50Pk1aKXEoITApfSwxMDAwKTtyZXR1cm4oKT0+e049ITAsVigpLHdpbmRvdy5jbGVhckludGVydmFsKEMpfX0sWyRdKSx7c3RhdHM6USxoaXN0b3J5Olgsc3RhbGU6WX19dmFyIGtaPW5ldyBTZXQoWyJsb2NhbGhvc3QiLCIxMjcuMC4wLjEiLCI6OjEiLCJbOjoxXSIsIjAuMC4wLjAiXSk7ZnVuY3Rpb24gaDQoJCl7bGV0IFE9JC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1wuJC8sIiIpO3JldHVybiBrWi5oYXMoUSl8fFEuZW5kc1dpdGgoIi5sb2NhbGhvc3QiKX1hc3luYyBmdW5jdGlvbiBXWigkKXt0cnl7bGV0IFE9YXdhaXQgJC5qc29uKCk7aWYodHlwZW9mIFEuZXJyb3I9PT0ic3RyaW5nIiYmUS5lcnJvci50cmltKCkpcmV0dXJuIFEuZXJyb3IudHJpbSgpfWNhdGNoe31yZXR1cm5gU2NyZWVuc2hvdCBmYWlsZWQgKCR7JC5zdGF0dXN9KWB9YXN5bmMgZnVuY3Rpb24gZzQoJCxRPXt9KXtsZXQgSj1RLmVuZHBvaW50Pz9qMSgiYXBpL3NjcmVlbnNob3QiKSxYPUouaW5jbHVkZXMoIj8iKT8iJiI6Ij8iLFk9YXdhaXQoUS5mZXRjaEltcGw/P2ZldGNoKShgJHtKfSR7WH1kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoJCl9YCx7bWV0aG9kOiJQT1NUIixzaWduYWw6US5zaWduYWx9KTtpZighWS5vayl0aHJvdyBFcnJvcihhd2FpdCBXWihZKSk7aWYoWS5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIik/LnNwbGl0KCI7IiwxKVswXT8udHJpbSgpPy50b0xvd2VyQ2FzZSgpIT09ImltYWdlL3BuZyIpdGhyb3cgRXJyb3IoIlNjcmVlbnNob3QgZW5kcG9pbnQgZGlkIG5vdCByZXR1cm4gYSBQTkciKTtyZXR1cm4gWS5ibG9iKCl9ZnVuY3Rpb24gSjUoJCxRKXtsZXQgSj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Si5ocmVmPSQsSi5kb3dubG9hZD1RLEouc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChKKSxKLmNsaWNrKCksSi5yZW1vdmUoKX1mdW5jdGlvbiBfWih7c3RhdHM6JCxoaXN0b3J5OlEsZmF1bHRzOkosc2VuZGVyOlgsY2FwdHVyZTpLLHJlcXVlc3RlZEZwczpZLHN0YWxlOnEsYWN0aW9uOkd9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIGdhcC0yIGJvcmRlci1iIGJvcmRlci13aGl0ZS8xMCBwYi0yICR7cT8ib3BhY2l0eS01MCI6IiJ9YCxjaGlsZHJlbjpbWihtNCx7bGFiZWw6IkZyYW1lIHJhdGUiLHZhbHVlOkszKCQuZnBzKSxoaW50Olk/YG9mICR7WX1gOnZvaWQgMCx2YWx1ZXM6ZjQoUSwoQik9PkIuZnBzKSxtYXg6WSxjbGFzc05hbWU6InRleHQtZW1lcmFsZC00MDAifSksWihtNCx7bGFiZWw6IkJpdHJhdGUiLHZhbHVlOk84KCQua2JwcyksdmFsdWVzOmY0KFEsKEIpPT5CLmticHMpLGNsYXNzTmFtZToidGV4dC1za3ktNDAwIn0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltxP1ooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13YXJuaW5nIixjaGlsZHJlbjoiTm8gc2FtcGxlcyBpbiB0aGUgbGFzdCBmZXcgc2Vjb25kcyJ9KTpKLmxlbmd0aD4wP1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IixjaGlsZHJlbjpKLm1hcCgoQik9PlooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13YXJuaW5nIiwiZGF0YS1zdHJlYW0tZmF1bHQiOkIsY2hpbGRyZW46Qn0sQikpfSk6WigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzMwIixjaGlsZHJlbjpFWigkKT8iTm8gZHJvcHMsIGZyZWV6ZXMgb3IgbG9zcyBpbiB0aGlzIHdpbmRvdyI6Ik1lYXN1cmluZ+KApiJ9KSxHXX0pLFooImRpdiIse2NsYXNzTmFtZToiZ3JpZCBncmlkLWNvbHMtMiBnYXAteC0zIGdhcC15LTAuNSBib3JkZXItdCBib3JkZXItd2hpdGUvMTAgcHQtMS41IixjaGlsZHJlbjpbWihKMCx7bGFiZWw6IlJUVCIsdmFsdWU6WDMoJC5yb3VuZFRyaXBNcywwKX0pLFooSjAse2xhYmVsOiJKaXR0ZXIiLHZhbHVlOlgzKCQuaml0dGVyTXMsMSl9KSxaKEowLHtsYWJlbDoiSml0dGVyIGJ1ZmZlciIsdmFsdWU6WDMoJC5qaXR0ZXJCdWZmZXJNcywwKX0pLFooSjAse2xhYmVsOiJSZXNvbHV0aW9uIix2YWx1ZTokLndpZHRoPT09bnVsbHx8JC5oZWlnaHQ9PT1udWxsP18yOmAkeyQud2lkdGh9eCR7JC5oZWlnaHR9YH0pLCQucGF0aCE9PSJ1bmtub3duIiYmWihKMCx7bGFiZWw6IklDRSByb3V0ZSIsdmFsdWU6JC5wYXRoPT09InJlbGF5Ij8iVmlhIHJlbGF5IjoiRGlyZWN0In0pXX0pLFgmJlooRFose3NlbmRlcjpYfSksSyYmWihQWix7Y2FwdHVyZTpLfSldfSl9ZnVuY3Rpb24gRFooe3NlbmRlcjokfSl7cmV0dXJuIFooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGJvcmRlci10IGJvcmRlci13aGl0ZS8xMCBwdC0xLjUiLGNoaWxkcmVuOltaKCJkaXYiLHtjbGFzc05hbWU6InBiLTAuNSB0ZXh0LVsxMHB4XSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gdGV4dC13aGl0ZS8zMCIsY2hpbGRyZW46IkVuY29kZXIifSksWigiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy0yIGdhcC14LTMgZ2FwLXktMC41IixjaGlsZHJlbjpbWihKMCx7bGFiZWw6IkVuY29kZSBGUFMiLHZhbHVlOkszKCQucmVwb3J0ZWRGcHMpfSksWihKMCx7bGFiZWw6IlRhcmdldCIsdmFsdWU6TzgoJC50YXJnZXRLYnBzKX0pLFooSjAse2xhYmVsOiJTb3VyY2UgRlBTIix2YWx1ZTpLMygkLnNvdXJjZUZwcyl9KSxaKEowLHtsYWJlbDoiRW5jb2RlIix2YWx1ZTpYMygkLmVuY29kZU1zUGVyRnJhbWUsMSksaGludDoiL2ZyYW1lIn0pLFooSjAse2xhYmVsOiJGcmFtZXMgc2VudCIsdmFsdWU6WjUoJC5mcmFtZXNTZW50KX0pLFooSjAse2xhYmVsOiJMb3NzIix2YWx1ZTpUWigkLmxvc3NSYXRpbyksaGludDoidG90YWwifSldfSldfSl9ZnVuY3Rpb24gUFooe2NhcHR1cmU6JH0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBib3JkZXItdCBib3JkZXItd2hpdGUvMTAgcHQtMS41IixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJwYi0wLjUgdGV4dC1bMTBweF0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIHRleHQtd2hpdGUvMzAiLGNoaWxkcmVuOiJDYXB0dXJlIn0pLFooImRpdiIse2NsYXNzTmFtZToiZ3JpZCBncmlkLWNvbHMtMiBnYXAteC0zIGdhcC15LTAuNSIsY2hpbGRyZW46W1ooSjAse2xhYmVsOiJTY3JlZW4gZnJhbWVzIix2YWx1ZTpaNSgkLnNjcmVlbkZyYW1lcyl9KSxaKEowLHtsYWJlbDoiSWRsZSBmcmFtZXMiLHZhbHVlOlo1KCQuaWRsZUZyYW1lcyl9KSxaKEowLHtsYWJlbDoiT2ZmZXJlZCIsdmFsdWU6WjUoJC5vZmZlcmVkRnJhbWVzKX0pLFooSjAse2xhYmVsOiJGb3J3YXJkZWQiLHZhbHVlOlo1KCQuZm9yd2FyZGVkRnJhbWVzKX0pXX0pXX0pfWZ1bmN0aW9uIFo1KCQpe2lmKCQ9PT1udWxsKXJldHVybiBfMjtsZXQgUT1NYXRoLmFicygkKTtpZihRPDEwMDApcmV0dXJuIFN0cmluZygkKTtpZihRPDk5OTk1MClyZXR1cm5gJHsoJC8xMDAwKS50b0ZpeGVkKDEpfWtgO3JldHVybmAkeygkLzFlNikudG9GaXhlZCgyKX1NYH1mdW5jdGlvbiBUWigkKXtyZXR1cm4gJD09PW51bGw/XzI6YCR7KCQqMTAwKS50b0ZpeGVkKDEpfSVgfXZhciBfMj0i4oCUIjtmdW5jdGlvbiBmNCgkLFEpe2xldCBKPVtdO2ZvcihsZXQgWCBvZiAkKXtsZXQgSz1RKFgpO2lmKEshPT1udWxsKUoucHVzaChLKX1yZXR1cm4gSn1mdW5jdGlvbiBFWigkKXtyZXR1cm4gJC5kcm9wcGVkSW5XaW5kb3chPT1udWxsfWZ1bmN0aW9uIHA0KCQpe2lmKCQuZnBzPT09bnVsbClyZXR1cm4gbnVsbDtyZXR1cm5gJHtLMygkLmZwcyl9IMK3ICR7TzgoJC5rYnBzKX1gfWZ1bmN0aW9uIHU0KCQsUSl7bGV0IEo9W107aWYoJC5mcmVlemVzSW5XaW5kb3cpe2xldCBLPSQuZnJlZXplTXNJbldpbmRvdz9gICgkeygkLmZyZWV6ZU1zSW5XaW5kb3cvMTAwMCkudG9GaXhlZCgxKX1zKWA6IiI7Si5wdXNoKGAkeyQuZnJlZXplc0luV2luZG93fSBmcmVlemUkeyQuZnJlZXplc0luV2luZG93PT09MT8iIjoicyJ9JHtLfWApfWlmKCQuZHJvcHBlZEluV2luZG93KUoucHVzaChgJHskLmRyb3BwZWRJbldpbmRvd30gZnJhbWVzIGRyb3BwZWRgKTtpZigkLmxvc3NSYXRpbyE9PW51bGwmJiQubG9zc1JhdGlvPjAuMDIpSi5wdXNoKGAkeygkLmxvc3NSYXRpbyoxMDApLnRvRml4ZWQoMSl9JSBwYWNrZXQgbG9zc2ApO2xldCBYPXdaKFE/LnF1YWxpdHlMaW1pdGF0aW9uUmVhc29uKTtpZihYIT09bnVsbClKLnB1c2goWCk7cmV0dXJuIEp9ZnVuY3Rpb24gd1ooJCl7c3dpdGNoKCQpe2Nhc2UiY3B1IjpyZXR1cm4iRW5jb2RlciBjYW5ub3Qga2VlcCB1cCAoQ1BVKSI7Y2FzZSJiYW5kd2lkdGgiOnJldHVybiJCaXRyYXRlIHJlZHVjZWQgYnkgdGhlIG5ldHdvcmsiO2Nhc2Ugdm9pZCAwOmNhc2UgbnVsbDpjYXNlIm5vbmUiOnJldHVybiBudWxsO2RlZmF1bHQ6cmV0dXJuIkVuY29kZXIgaG9sZGluZyBiYWNrIChyZWFzb24gdW5rbm93bikifX1mdW5jdGlvbiBLMygkKXtpZigkPT09bnVsbClyZXR1cm4gXzI7cmV0dXJuYCR7JDwxMD8kLnRvRml4ZWQoMSk6JC50b0ZpeGVkKDApfSBmcHNgfWZ1bmN0aW9uIE84KCQpe2lmKCQ9PT1udWxsKXJldHVybiBfMjtyZXR1cm4gJDwxMDAwP2AkeyQudG9GaXhlZCgwKX0ga2Jwc2A6YCR7KCQvMTAwMCkudG9GaXhlZCgyKX0gTWJwc2B9ZnVuY3Rpb24gWDMoJCxRKXtyZXR1cm4gJD09PW51bGw/XzI6YCR7JC50b0ZpeGVkKFEpfSBtc2B9ZnVuY3Rpb24gbTQoe2xhYmVsOiQsdmFsdWU6USxoaW50OkosdmFsdWVzOlgsbWF4OkssY2xhc3NOYW1lOll9KXtyZXR1cm4gWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIiwiZGF0YS1zdHJlYW0tc3RhdCI6JCxjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWJhc2VsaW5lIGp1c3RpZnktYmV0d2VlbiIsY2hpbGRyZW46W1ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTAiLGNoaWxkcmVuOiR9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0YWJ1bGFyLW51bXMgdGV4dC1bMTFweF0iLGNoaWxkcmVuOltRLEomJlooInNwYW4iLHtjbGFzc05hbWU6Im1sLTEuNSB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzMwIixjaGlsZHJlbjpKfSldfSldfSksWihRMyx7dmFsdWVzOlgsbWF4OkssY2xhc3NOYW1lOll9KV19KX1mdW5jdGlvbiBKMCh7bGFiZWw6JCx2YWx1ZTpRLGhpbnQ6Sn0pe3JldHVybiBaKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtYmFzZWxpbmUganVzdGlmeS1iZXR3ZWVuIGdhcC0yIiwiZGF0YS1zdHJlYW0tc3RhdCI6JCxjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToid2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81MCIsY2hpbGRyZW46JH0pLFooInNwYW4iLHtjbGFzc05hbWU6InRhYnVsYXItbnVtcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjpbUSxKJiZaKCJzcGFuIix7Y2xhc3NOYW1lOiJtbC0xLjUgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS8zMCIsY2hpbGRyZW46Sn0pXX0pXX0pfWZ1bmN0aW9uIGw0KHtzdGF0czokLGhpc3Rvcnk6USxmYXVsdHM6SixzZW5kZXI6WCxjYXB0dXJlOksscmVxdWVzdGVkRnBzOlksc3RhbGU6cSxhY3Rpb246R30pe2lmKCQ9PT1udWxsKXJldHVybiBudWxsO3JldHVybiBaKF9aLHtzdGF0czokLGhpc3Rvcnk6USxmYXVsdHM6SixzZW5kZXI6WCxjYXB0dXJlOksscmVxdWVzdGVkRnBzOlksc3RhbGU6cSxhY3Rpb246R30pfWZ1bmN0aW9uIGQ0KHtoaXN0b3J5OiQsY29udGV4dDpRfSl7aWYoJC5sZW5ndGg8MilyZXR1cm4gbnVsbDtyZXR1cm4gWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIix0aXRsZTpgRG93bmxvYWQgJHskLmxlbmd0aH0gcmVjb3JkZWQgc2FtcGxlcyBhcyBKU09OYCwiYXJpYS1sYWJlbCI6YERvd25sb2FkICR7JC5sZW5ndGh9IHJlY29yZGVkIHNhbXBsZXMgYXMgSlNPTmAsb25DbGljazooKT0+YlooJCxRKSxjbGFzc05hbWU6Ii1tdC0wLjUgaW5saW5lLWZsZXggaC01IHctNSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZCB0ZXh0LXdoaXRlLzMwIGhvdmVyOmJnLXdoaXRlL1swLjA2XSBob3Zlcjp0ZXh0LXdoaXRlLzgwIixjaGlsZHJlbjpaKGcyLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6ImgtMyB3LTMifSl9KX1mdW5jdGlvbiBJWigkLFE9e30pe3JldHVybiBKU09OLnN0cmluZ2lmeSh7cmVjb3JkZWRBdDpuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksLi4uUSxzYW1wbGVzOiR9LG51bGwsMil9ZnVuY3Rpb24gYlooJCxRKXtsZXQgSj1VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtJWigkLFEpXSx7dHlwZToiYXBwbGljYXRpb24vanNvbiJ9KSk7SjUoSixgc2VydmUtc2ltLXN0cmVhbS1zdGF0cy0ke3laKCl9Lmpzb25gKSxzZXRUaW1lb3V0KCgpPT5VUkwucmV2b2tlT2JqZWN0VVJMKEopLDApfWZ1bmN0aW9uIHlaKCl7cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bOi5dL2csIi0iKS5yZXBsYWNlKCJaIiwiIil9dmFyIFNaPVt7dmFsdWU6Imh0dHAiLGxhYmVsOiJIVFRQIn0se3ZhbHVlOiJ3ZWJydGMiLGxhYmVsOiJXZWJSVEMifV0seFo9W3t2YWx1ZToiYXV0byIsbGFiZWw6IkF1dG8ifSx7dmFsdWU6ImgyNjQiLGxhYmVsOiJILjI2NCJ9LHt2YWx1ZToibWpwZWciLGxhYmVsOiJNSlBFRyJ9XSxqWj1be3ZhbHVlOiJoMjY0IixsYWJlbDoiSC4yNjQifSx7dmFsdWU6InZwOSIsbGFiZWw6IlZQOSJ9LHt2YWx1ZToidnA4IixsYWJlbDoiVlA4In1dLHZaPVt7dmFsdWU6IjAiLGxhYmVsOiJGdWxsIn0se3ZhbHVlOiIxOTIwIixsYWJlbDoiMTkyMCJ9LHt2YWx1ZToiMTYwMCIsbGFiZWw6IjE2MDAifSx7dmFsdWU6IjEyODAiLGxhYmVsOiIxMjgwIn0se3ZhbHVlOiI5NjAiLGxhYmVsOiI5NjAifSx7dmFsdWU6IjcyMCIsbGFiZWw6IjcyMCJ9XSxjND1bIjYwIiwiMzAiLCIyMCIsIjE1IiwiMTAiLCI1Il0ubWFwKCgkKT0+KHt2YWx1ZTokLGxhYmVsOiR9KSksUlo9W3t2YWx1ZToiMC40NSIsbGFiZWw6IjQ1JSJ9LHt2YWx1ZToiMC41NSIsbGFiZWw6IjU1JSJ9LHt2YWx1ZToiMC43IixsYWJlbDoiNzAlIn0se3ZhbHVlOiIwLjg1IixsYWJlbDoiODUlIn0se3ZhbHVlOiIxIixsYWJlbDoiMTAwJSJ9XSxoWj1be3ZhbHVlOiIxNTAwMDAwIixsYWJlbDoiMS41IE1icHMifSx7dmFsdWU6IjMwMDAwMDAiLGxhYmVsOiIzIE1icHMifSx7dmFsdWU6IjYwMDAwMDAiLGxhYmVsOiI2IE1icHMifSx7dmFsdWU6IjEwMDAwMDAwIixsYWJlbDoiMTAgTWJwcyJ9LHt2YWx1ZToiMTYwMDAwMDAiLGxhYmVsOiIxNiBNYnBzIn1dLGMwPSJzaXplLTMuNSI7ZnVuY3Rpb24gWDUoJCxRLEope2xldCBYPVN0cmluZygkKTtyZXR1cm4gUS5zb21lKChLKT0+Sy52YWx1ZT09PVgpP1E6W3t2YWx1ZTpYLGxhYmVsOkooJCl9LC4uLlFdfWZ1bmN0aW9uIG80KHtzZXR0aW5nczokLG9uUGxheWJhY2tTZXR0aW5nc0NoYW5nZTpRLG9uRW5jb2RlclNldHRpbmdzQ2hhbmdlOkosYWN0aXZlQ29kZWM6WCxhdmNjU3VwcG9ydGVkOksscGVlckNvbm5lY3Rpb246WSx3ZWJydGNTdGF0c1VybDpxLHdlYnJ0Y1Nlc3Npb25JZDpHLGVuY29kZXJTZXR0aW5nc0Rpc2FibGVkOkI9ITF9KXtsZXRbTix6XT1BKCExKSx7c3RhdHM6VixoaXN0b3J5OkMsc3RhbGU6VX09UjQoWSksRj14NChxPz8iIixHPz9udWxsLHEhPT12b2lkIDAmJlkhPT1udWxsJiZHIT1udWxsKSxMPUYuc3RhbGU/bnVsbDpGLnNlc3Npb24sSD1WPT09bnVsbHx8VT9bXTp1NChWLEwpLE89VT8iU3RyZWFtIHNhbXBsZXMgaGF2ZSBzdG9wcGVkIjpILmpvaW4oIjsgIiksaz1WPT09bnVsbD9udWxsOnA0KFYpLEk9JC50cmFuc3BvcnQ9PT0iaHR0cCIsdz0kLnRyYW5zcG9ydD09PSJ3ZWJydGMiO3JldHVybiBaKGUxLHtvcGVuOk4sb25PcGVuQ2hhbmdlOnosImRhdGEtc3RyZWFtLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpaKFoxLHtjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiU3RyZWFtIn0pLFooInNwYW4iLHtjbGFzc05hbWU6Imp1c3RpZnktc2VsZi1lbmQgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUiLGNoaWxkcmVuOlshTiYmayE9PW51bGw/Wigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS80MCB0YWJ1bGFyLW51bXMiLGNoaWxkcmVuOmt9KTpaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzQwIHVwcGVyY2FzZSIsY2hpbGRyZW46WH0pLChILmxlbmd0aD4wfHxVKSYmWigic3BhbiIseyJkYXRhLXN0cmVhbS13YXJuaW5nIjohMCxyb2xlOiJzdGF0dXMiLGNsYXNzTmFtZToiZ3JvdXAgcmVsYXRpdmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjpbWih5MCx7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJ3LTMuNSBoLTMuNSB0ZXh0LXdhcm5pbmcifSksWigic3BhbiIse2NsYXNzTmFtZToic3Itb25seSIsY2hpbGRyZW46T30pLFooInNwYW4iLHtjbGFzc05hbWU6InBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgcmlnaHQtMCB0b3AtZnVsbCB6LTEwIG10LTEgaGlkZGVuIHctbWF4IG1heC13LVsyMjBweF0gcm91bmRlZC1tZCBiZy1ibGFjay85MCBweC0yIHB5LTEgdGV4dC1bMTFweF0gbGVhZGluZy1zbnVnIHRleHQtd2hpdGUvOTAgc2hhZG93LWxnIGdyb3VwLWhvdmVyOmJsb2NrIixjaGlsZHJlbjpPfSldfSldfSldfSksY2hpbGRyZW46WigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xLjUgcGItMS41IixjaGlsZHJlbjpbWihsNCx7c3RhdHM6VixoaXN0b3J5OkMsZmF1bHRzOkgsc2VuZGVyOkwsY2FwdHVyZTpGLnN0YWxlP251bGw6Ri5jYXB0dXJlLHJlcXVlc3RlZEZwczokLmgyNjRGcHMsc3RhbGU6VSxhY3Rpb246WihkNCx7aGlzdG9yeTpDLGNvbnRleHQ6e3RyYW5zcG9ydDokLnRyYW5zcG9ydCxjb2RlYzpWPy5jb2RlYyxzZW5kZXI6TCxjYXB0dXJlOkYuc3RhbGU/bnVsbDpGLmNhcHR1cmV9fSl9KSxaKHEwLHtpY29uOlooYTAse2NsYXNzTmFtZTpjMH0pLGxhYmVsOiJUcmFuc3BvcnQiLGNoaWxkcmVuOlooQzAse2xhYmVsOiJUcmFuc3BvcnQiLHZhbHVlOiQudHJhbnNwb3J0LG9wdGlvbnM6U1osZGlzYWJsZWQ6ITEsb25DaGFuZ2U6KFApPT5RKHt0cmFuc3BvcnQ6UH0pfSl9KSxaKHEwLHtpY29uOlooYTAse2NsYXNzTmFtZTpjMH0pLGxhYmVsOiJIVFRQIGNvZGVjIixjaGlsZHJlbjpaKEMwLHtsYWJlbDoiSFRUUCBjb2RlYyIsdmFsdWU6Sz8kLmh0dHBDb2RlYzoibWpwZWciLG9wdGlvbnM6eFosZGlzYWJsZWQ6IUl8fCFLLG9uQ2hhbmdlOihQKT0+USh7aHR0cENvZGVjOlB9KX0pfSksWihxMCx7aWNvbjpaKGEwLHtjbGFzc05hbWU6YzB9KSxsYWJlbDoiV2ViUlRDIGNvZGVjIixjaGlsZHJlbjpaKEMwLHtsYWJlbDoiV2ViUlRDIGNvZGVjIix2YWx1ZTokLndlYlJ0Y0NvZGVjLG9wdGlvbnM6alosZGlzYWJsZWQ6IXcsb25DaGFuZ2U6KFApPT5RKHt3ZWJSdGNDb2RlYzpQfSl9KX0pLFoocTAse2ljb246WihSMCx7Y2xhc3NOYW1lOmMwfSksbGFiZWw6Ik1heCBzaXplIixjaGlsZHJlbjpaKEMwLHtsYWJlbDoiTWF4IHNpemUiLHZhbHVlOlN0cmluZygkLm1heERpbWVuc2lvbiksb3B0aW9uczpYNSgkLm1heERpbWVuc2lvbix2WixTdHJpbmcpLGRpc2FibGVkOkIsb25DaGFuZ2U6KFApPT5KKHttYXhEaW1lbnNpb246TnVtYmVyKFApfSl9KX0pLFoocTAse2ljb246WihSMCx7Y2xhc3NOYW1lOmMwfSksbGFiZWw6Ik1KUEVHIEZQUyIsY2hpbGRyZW46WihDMCx7bGFiZWw6Ik1KUEVHIEZQUyIsdmFsdWU6U3RyaW5nKCQubWpwZWdGcHMpLG9wdGlvbnM6WDUoJC5tanBlZ0ZwcyxjNCxTdHJpbmcpLGRpc2FibGVkOkJ8fCFJLG9uQ2hhbmdlOihQKT0+Sih7bWpwZWdGcHM6TnVtYmVyKFApfSl9KX0pLFoocTAse2ljb246WihSMCx7Y2xhc3NOYW1lOmMwfSksbGFiZWw6Ik1KUEVHIHF1YWxpdHkiLGNoaWxkcmVuOlooQzAse2xhYmVsOiJNSlBFRyBxdWFsaXR5Iix2YWx1ZTpTdHJpbmcoJC5tanBlZ1F1YWxpdHkpLG9wdGlvbnM6WDUoJC5tanBlZ1F1YWxpdHksUlosKFApPT5gJHtNYXRoLnJvdW5kKFAqMTAwKX0lYCksZGlzYWJsZWQ6Qnx8IUksb25DaGFuZ2U6KFApPT5KKHttanBlZ1F1YWxpdHk6TnVtYmVyKFApfSl9KX0pLFoocTAse2ljb246WihSMCx7Y2xhc3NOYW1lOmMwfSksbGFiZWw6IlZpZGVvIEZQUyIsY2hpbGRyZW46WihDMCx7bGFiZWw6IlZpZGVvIEZQUyIsdmFsdWU6U3RyaW5nKCQuaDI2NEZwcyksb3B0aW9uczpYNSgkLmgyNjRGcHMsYzQsU3RyaW5nKSxkaXNhYmxlZDpCfHxJJiYoIUt8fCQuaHR0cENvZGVjPT09Im1qcGVnIiksb25DaGFuZ2U6KFApPT5KKHtoMjY0RnBzOk51bWJlcihQKX0pfSl9KSxaKHEwLHtpY29uOlooUjAse2NsYXNzTmFtZTpjMH0pLGxhYmVsOiJWaWRlbyBiaXRyYXRlIixjaGlsZHJlbjpaKEMwLHtsYWJlbDoiVmlkZW8gYml0cmF0ZSIsdmFsdWU6U3RyaW5nKCQuaDI2NEJpdHJhdGUpLG9wdGlvbnM6WDUoJC5oMjY0Qml0cmF0ZSxoWiwoUCk9PmAke1AvMWU2fSBNYnBzYCksZGlzYWJsZWQ6Qnx8SSYmKCFLfHwkLmh0dHBDb2RlYz09PSJtanBlZyIpLG9uQ2hhbmdlOihQKT0+Sih7aDI2NEJpdHJhdGU6TnVtYmVyKFApfSl9KX0pXX0pfSl9ZnVuY3Rpb24gaTQoe29wZW46JCxvbkNsb3NlOlEscGVlckNvbm5lY3Rpb246Six3ZWJydGNTdGF0c1VybDpYLHdlYnJ0Y1Nlc3Npb25JZDpLLHVkaWQ6WSxkZXZpY2VSdW50aW1lOnEsY3VycmVudEFwcDpHLGV2ZW50TG9nRXZlbnRzRW5kcG9pbnQ6QixtZXRyaWNzRW5kcG9pbnQ6TixheE92ZXJsYXlFbmFibGVkOnosb25Ub2dnbGVBeE92ZXJsYXk6VixzdHJlYW1TZXR0aW5nczpDLG9uU3RyZWFtUGxheWJhY2tTZXR0aW5nc0NoYW5nZTpVLG9uU3RyZWFtRW5jb2RlclNldHRpbmdzQ2hhbmdlOkYsYWN0aXZlQ29kZWM6TCxhdmNjU3VwcG9ydGVkOkgsc3RyZWFtU2V0dGluZ3NQZW5kaW5nOk8sd2lkdGg6a30pe3JldHVybiBaKEMyLHtvcGVuOiQsd2lkdGg6ayxzdHlsZTp7YmFja2dyb3VuZENvbG9yOkYyfSxjaGlsZHJlbjpbWihPMix7Y2hpbGRyZW46W1ooQzYse2NoaWxkcmVuOiJUb29scyJ9KSxaKGM1LHtvbkNsaWNrOlF9KV19KSwkJiZaKCJkaXYiLHtjbGFzc05hbWU6InAtMy41IG92ZXJmbG93LXktYXV0byBmbGV4LTEgZmxleCBmbGV4LWNvbCBnYXAtMyIsY2hpbGRyZW46W1ooQjQse3VkaWQ6WSxjdXJyZW50QXBwOkd9KSxaKEk0LHt1ZGlkOlksY3VycmVudEFwcEJ1bmRsZUlkOkc/LmJ1bmRsZUlkPz9udWxsLG1ldHJpY3NFbmRwb2ludDpOfSksWihUNCx7dWRpZDpZLGV2ZW50c0VuZHBvaW50OkJ9KSxaKGI0LHt1ZGlkOlkscnVudGltZTpxfSksWihVNCx7b3ZlcmxheUVuYWJsZWQ6eixvblRvZ2dsZU92ZXJsYXk6Vn0pLFooRDQse3VkaWQ6WSxidW5kbGVJZDpHPy5idW5kbGVJZD8/bnVsbH0pLFooRzQse3VkaWQ6WSxleGVjOkkxfSksWih6NCx7dWRpZDpZLGJ1bmRsZUlkOkc/LmJ1bmRsZUlkPz9udWxsfSksWihvNCx7c2V0dGluZ3M6QyxvblBsYXliYWNrU2V0dGluZ3NDaGFuZ2U6VSxvbkVuY29kZXJTZXR0aW5nc0NoYW5nZTpGLGFjdGl2ZUNvZGVjOkwsYXZjY1N1cHBvcnRlZDpILGVuY29kZXJTZXR0aW5nc0Rpc2FibGVkOk8scGVlckNvbm5lY3Rpb246Six3ZWJydGNTdGF0c1VybDpYLHdlYnJ0Y1Nlc3Npb25JZDpLfSldfSldfSl9ZnVuY3Rpb24gbjQoJCxRKXtsZXQgSjt0cnl7Sj1uZXcgVVJMKCQud2ViU29ja2V0RGVidWdnZXJVcmwpfWNhdGNoe3JldHVybiAkfWxldCBYPWAke0oucGF0aG5hbWV9JHtKLnNlYXJjaH1gLEs9US5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IixZPVEucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzIjoid3MiLHE9YCR7US5ob3N0fSR7WH1gLEc9JC5kZXZ0b29sc0Zyb250ZW5kVXJsO3RyeXtsZXQgQj1uZXcgVVJMKCQuZGV2dG9vbHNGcm9udGVuZFVybCxgJHtRLnByb3RvY29sfS8vJHtRLmhvc3R9YCk7Qi5zZWFyY2hQYXJhbXMuZGVsZXRlKCJ3cyIpLEIuc2VhcmNoUGFyYW1zLmRlbGV0ZSgid3NzIiksQi5zZWFyY2hQYXJhbXMuc2V0KFkscSksRz1gJHtCLnBhdGhuYW1lfSR7Qi5zZWFyY2h9JHtCLmhhc2h9YH1jYXRjaHt9cmV0dXJuey4uLiQsd2ViU29ja2V0RGVidWdnZXJVcmw6YCR7S30vLyR7US5ob3N0fSR7WH1gLGRldnRvb2xzRnJvbnRlbmRVcmw6R319ZnVuY3Rpb24gSzUoJCxRKXtmZXRjaChqMSgiZGV2dG9vbHMvaGlnaGxpZ2h0Iikse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt0YXJnZXRJZDokLG9uOlF9KSxrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIEY4KCl7bGV0ICQ9ajEoImRldnRvb2xzL3JlbGVhc2UiKTt0cnl7aWYodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5zZW5kQmVhY29uKXtsZXQgUT1uZXcgQmxvYihbInt9Il0se3R5cGU6ImFwcGxpY2F0aW9uL2pzb24ifSk7aWYobmF2aWdhdG9yLnNlbmRCZWFjb24oJCxRKSlyZXR1cm59fWNhdGNoe31mZXRjaCgkLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keToie30iLGtlZXBhbGl2ZTohMH0pLmNhdGNoKCgpPT57fSl9ZnVuY3Rpb24gcjQoJCl7bGV0IFE9JC5jb250ZW50RG9jdW1lbnQ7aWYoIVEpcmV0dXJuO2xldCBKPSgpPT57bGV0IFk9W1FdO3doaWxlKFkubGVuZ3RoKXtsZXQgcT1ZLnBvcCgpLEc9cS5xdWVyeVNlbGVjdG9yQWxsKCJbYXJpYS1sYWJlbF0sW3RpdGxlXSIpO2ZvcihsZXQgQiBvZiBHKXtsZXQgTj1CLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpfHxCLnRpdGxlfHwiIjtpZigvXnRvZ2dsZSBzY3JlZW5jYXN0JC9pLnRlc3QoTikpcmV0dXJuIEJ9Zm9yKGxldCBCIG9mIHEucXVlcnlTZWxlY3RvckFsbCgiKiIpKWlmKEIuc2hhZG93Um9vdClZLnB1c2goQi5zaGFkb3dSb290KX1yZXR1cm4gbnVsbH0sWD0wLEs9KCk9PntYKys7bGV0IFk9SigpO2lmKFkmJlkuZ2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiKSE9PSJmYWxzZSIpe1kuY2xpY2soKTtyZXR1cm59aWYoWDwyMClzZXRUaW1lb3V0KEssMTAwKX07SygpfWZ1bmN0aW9uIGE0KCQpe2xldCBRPVtdLEo9bmV3IE1hcDtmb3IobGV0IFggb2YgJCl7bGV0IEs9WC5hcHBOYW1lfHxYLmJ1bmRsZUlkfHwiVW5rbm93biIsWT1YLmJ1bmRsZUlkfHxLLHE9Si5nZXQoWSk7aWYoIXEpcT17a2V5OlksYXBwTmFtZTpLLGJ1bmRsZUlkOlguYnVuZGxlSWQsdGFyZ2V0czpbXX0sSi5zZXQoWSxxKSxRLnB1c2goWSk7cS50YXJnZXRzLnB1c2goWCl9cmV0dXJuIFEubWFwKChYKT0+Si5nZXQoWCkpfWZ1bmN0aW9uIHM0KCQsUSl7bGV0W0osWF09QSh7fSksSz1FMSgoKT0+US5zbGljZSgpLnNvcnQoKS5qb2luKCJ8IiksW1FdKTtyZXR1cm4gYigoKT0+e2lmKCEkKXJldHVybjtsZXQgWT0hMTtmb3IobGV0IHEgb2YgUSl7aWYoIXEpY29udGludWU7bGV0IEc9YCR7JH06JHtxfWAsQj1NMi5nZXQoRyk7aWYodHlwZW9mIEI9PT0ic3RyaW5nInx8Qj09PW51bGwpe1goKE4pPT5OW3FdPT09Qj9OOnsuLi5OLFtxXTpCfSk7Y29udGludWV9VjQoSTEsJCxxKS50aGVuKChOKT0+e2lmKFkpcmV0dXJuO1goKHopPT4oey4uLnosW3FdOk59KSl9KX1yZXR1cm4oKT0+e1k9ITB9fSxbJCxLXSksSn1mdW5jdGlvbiB0NCh7dWRpZDokLHRhcmdldHM6USxzZWxlY3RlZDpKLG9uU2VsZWN0VGFyZ2V0Olgsb25SZWZyZXNoOkt9KXtsZXQgWT1hNChRKSxxPVkubWFwKChMKT0+TC5idW5kbGVJZCkuZmlsdGVyKChMKT0+ISFMKSxHPXM0KCQscSksW0IsTl09QSghMSksW3osVl09QShudWxsKSxDPVQobnVsbCksVT1UKG51bGwpO2IoKCk9PntpZighQilyZXR1cm47bGV0IEw9KEgpPT57aWYoIVUuY3VycmVudClyZXR1cm47aWYoIVUuY3VycmVudC5jb250YWlucyhILnRhcmdldCkpTighMSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEwpLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEwpfSxbQl0pLGIoKCk9PntpZihCKXJldHVybjtpZihDLmN1cnJlbnQpSzUoQy5jdXJyZW50LCExKSxDLmN1cnJlbnQ9bnVsbDtGOCgpfSxbQl0pLGIoKCk9PntsZXQgTD0oKT0+RjgoKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixMKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixMKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsTCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsTCl9fSxbXSk7bGV0IEY9Sj8oSi50aXRsZXx8Si51cmx8fEouYXBwTmFtZXx8IlVudGl0bGVkIikuc2xpY2UoMCw5MCk6IlNlbGVjdCB0YXJnZXQiO3JldHVybiBaKCJkaXYiLHtyZWY6VSxjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCBtaW4tdy0wIixjaGlsZHJlbjpbWigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT57TigoTCk9PntpZighTClLKCk7cmV0dXJuIUx9KX0sY2xhc3NOYW1lOiJ3LWZ1bGwgbWluLXctMCBoLVsyNnB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgYmctcGFuZWwgdGV4dC13aGl0ZS85MCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbWQgdGV4dC1bMTJweF0gcHgtMiBjdXJzb3ItcG9pbnRlciB0ZXh0LWxlZnQiLCJhcmlhLWhhc3BvcHVwIjoibGlzdGJveCIsImFyaWEtZXhwYW5kZWQiOkIsImFyaWEtbGFiZWwiOiJXZWJLaXQgdGFyZ2V0IixjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgbWluLXctMCIsY2hpbGRyZW46Rn0pLFooUjIse3NpemU6MTIsc3Ryb2tlV2lkdGg6Mn0pXX0pLEImJlooInVsIix7cm9sZToibGlzdGJveCIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtW2NhbGMoMTAwJSs0cHgpXSBsZWZ0LTAgbS0wIHAtMSBsaXN0LW5vbmUgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLWxnIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNSldIG1pbi13LVsyMjBweF0gbWF4LXctWzM2MHB4XSBtYXgtaC1bMzIwcHhdIG92ZXJmbG93LXktYXV0byB6LTUwIixjaGlsZHJlbjpZLm1hcCgoTCk9PntsZXQgSD1MLmJ1bmRsZUlkP0dbTC5idW5kbGVJZF06bnVsbDtyZXR1cm4gWigibGkiLHtjbGFzc05hbWU6Imxpc3Qtbm9uZSBtLTAgcC0wIixjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0xLjUgcHQtMSBwYi0wLjUgdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlL1swLjkyXSIsY2hpbGRyZW46W0g/WigiaW1nIix7c3JjOkgsYWx0OiIiLGNsYXNzTmFtZToidy00IGgtNCByb3VuZGVkLVszcHhdIHNocmluay0wIG9iamVjdC1jb3ZlciJ9KTpaKCJzcGFuIix7Y2xhc3NOYW1lOiJ3LTQgaC00IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pLFooInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpMLmFwcE5hbWV9KV19KSxaKCJ1bCIse3JvbGU6Imdyb3VwIixjbGFzc05hbWU6Imxpc3Qtbm9uZSBtLTAgcC0wIHBsLVsyNnB4XSIsY2hpbGRyZW46TC50YXJnZXRzLm1hcCgoTyk9PntsZXQgaz1KPy5pZD09PU8uaWQsST0hIU8uaW5Vc2VCeU90aGVySW5zcGVjdG9yJiYhayx3PShPLnRpdGxlfHxPLnVybHx8Ty5hcHBOYW1lfHwiVW50aXRsZWQiKS5zbGljZSgwLDkwKSxQPXo9PT1PLmlkJiYhSSx4PSJmbGV4IGZsZXgtY29sIHB4LTIgcHktWzNweF0gcm91bmRlZCB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxLjM1XSI7cmV0dXJuIFooImxpIix7cm9sZToib3B0aW9uIiwiYXJpYS1zZWxlY3RlZCI6aywiYXJpYS1kaXNhYmxlZCI6SSx0YWJJbmRleDpJPy0xOjAsdGl0bGU6ST8iQWxyZWFkeSBiZWluZyBpbnNwZWN0ZWQgYnkgYW5vdGhlciBkZWJ1Z2dlciI6dm9pZCAwLG9uTW91c2VFbnRlcjooKT0+e2lmKEkpcmV0dXJuO2lmKEMuY3VycmVudCYmQy5jdXJyZW50IT09Ty5pZClLNShDLmN1cnJlbnQsITEpO0MuY3VycmVudD1PLmlkLFYoTy5pZCksSzUoTy5pZCwhMCl9LG9uTW91c2VMZWF2ZTooKT0+e2lmKEMuY3VycmVudD09PU8uaWQpSzUoTy5pZCwhMSksQy5jdXJyZW50PW51bGw7VigoaCk9Pmg9PT1PLmlkP251bGw6aCl9LG9uQ2xpY2s6KCk9PntpZihJKXJldHVybjtYKE8uaWQpLE4oITEpfSxjbGFzc05hbWU6YGZsZXggZmxleC1jb2wgcHgtMiBweS1bM3B4XSByb3VuZGVkIHRleHQtWzEycHhdIGxlYWRpbmctWzEuMzVdICR7ST8ib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWQgaXRhbGljIHRleHQtd2hpdGUvODUiOlA/ImJnLVtyZ2JhKDEwLDEzMiwyNTUsMC4yMildIHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIiOms/ImJnLXdoaXRlL1swLjA2XSB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIjoidGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciJ9YCxjaGlsZHJlbjpbWigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOnd9KSxPLnVybCYmTy51cmwhPT0iYWJvdXQ6YmxhbmsiJiZaKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBmb250LW1vbm8gdGV4dC1bMTBweF0gdGV4dC13aGl0ZS9bMC40Ml0gb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOk8udXJsfSldfSxPLmlkKX0pfSldfSxMLmtleSl9KX0pXX0pfWZ1bmN0aW9uIGU0KHtvcGVuOiQsb25DbG9zZTpRLHVkaWQ6Six0YXJnZXRzOlgsc2VsZWN0ZWRUYXJnZXRJZDpLLG9uU2VsZWN0VGFyZ2V0OlksbG9hZGluZzpxLGVycm9yOkcsb25SZWZyZXNoOkIsd2lkdGg6Tn0pe2xldCB6PUs/WC5maW5kKChWKT0+Vi5pZD09PUspPz9udWxsOm51bGw7cmV0dXJuIFooQzIse29wZW46JCx3aWR0aDpOLGNoaWxkcmVuOltaKE8yLHtjaGlsZHJlbjpbWC5sZW5ndGg+MD9aKHQ0LHt1ZGlkOkosdGFyZ2V0czpYLHNlbGVjdGVkOnosb25TZWxlY3RUYXJnZXQ6WSxvblJlZnJlc2g6Qn0pOlooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvWzAuNDhdIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpxPyJMb29raW5nIGZvciBTYWZhcmkgYW5kIGluc3BlY3RhYmxlIHdlYnZpZXdzLi4uIjoiTm8gaW5zcGVjdGFibGUgU2FmYXJpIG9yIFdLV2ViVmlldyB0YXJnZXRzIn0pLFooYzUse29uQ2xpY2s6USxhcmlhTGFiZWw6IkNsb3NlIFdlYktpdCBEZXZUb29scyIsdGl0bGU6IkNsb3NlIixpY29uU2l6ZToxNX0pXX0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi1oLTAgYmctd2hpdGUgcmVsYXRpdmUiLGNoaWxkcmVuOkc/WigiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC02IGJnLXBhbmVsLWRlZXAgdGV4dC13aGl0ZS9bMC41OF0gdGV4dC1jZW50ZXIgdGV4dC1bMTNweF0iLGNoaWxkcmVuOkd9KTp6JiYkP1ooImlmcmFtZSIse3NyYzp6LmRldnRvb2xzRnJvbnRlbmRVcmwsdGl0bGU6YFdlYktpdCBEZXZUb29scyAtICR7ei50aXRsZXx8ei51cmx8fHouaWR9YCxjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYm9yZGVyLW5vbmUgYmxvY2sgYmctd2hpdGUiLG9uTG9hZDooVik9PnI0KFYuY3VycmVudFRhcmdldCl9LHouaWQpOlooImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNiBiZy1wYW5lbC1kZWVwIHRleHQtd2hpdGUvWzAuNThdIHRleHQtY2VudGVyIHRleHQtWzEzcHhdIixjaGlsZHJlbjp6PyJEZXZUb29scyBwYXVzZWQg4oCUIG9wZW4gdGhlIHBhbmVsIHRvIHJlYXR0YWNoLiI6Ik9wZW4gU2FmYXJpIG9yIGFuIGluc3BlY3RhYmxlIFdLV2ViVmlldyBpbiB0aGUgc2ltdWxhdG9yLiJ9KX0pXX0pfWZ1bmN0aW9uIGdaKHtob3N0UGF0aDokLGV4ZWM6USx1ZGlkOkosb25VcGxvYWRTdGFydDpYLG9uVXBsb2FkUHJvZ3Jlc3M6SyxvblVwbG9hZEVuZDpZLG9uSG9zdFBhdGhEcm9wOnF9KXtxPy4oJCk7bGV0IEc9JC5zcGxpdCgiLyIpLnBvcCgpPz8iaW1hZ2UiLEI9WChHLCJtZWRpYSIpO3JldHVybiBLKEIsbnVsbCksQzQoJCxRLEopLnRoZW4oKCk9PlkoQiwhMCkpLmNhdGNoKChOKT0+WShCLCExLE4gaW5zdGFuY2VvZiBFcnJvcj9OLm1lc3NhZ2U6IkFkZCBmYWlsZWQiKSl9ZnVuY3Rpb24gJDcoe2V4ZWM6JCx1ZGlkOlEsZW5hYmxlZDpKLG9uVXBsb2FkU3RhcnQ6WCxvblVwbG9hZFByb2dyZXNzOkssb25VcGxvYWRFbmQ6WSxvblVuc3VwcG9ydGVkOnEsb25Ib3N0UGF0aERyb3A6R30pe2xldFtCLE5dPUEoITEpLHo9VCgwKSxWPUUoYXN5bmMoTCk9PntpZihMLnByZXZlbnREZWZhdWx0KCksTC5zdG9wUHJvcGFnYXRpb24oKSx6LmN1cnJlbnQ9MCxOKCExKSwhSnx8IVEpcmV0dXJuO2xldCBIPUwuZGF0YVRyYW5zZmVyLmdldERhdGEoJDMpO2lmKEgpe2daKHtob3N0UGF0aDpILGV4ZWM6JCx1ZGlkOlEsb25VcGxvYWRTdGFydDpYLG9uVXBsb2FkUHJvZ3Jlc3M6SyxvblVwbG9hZEVuZDpZLG9uSG9zdFBhdGhEcm9wOkd9KTtyZXR1cm59bGV0IE89QXJyYXkuZnJvbShMLmRhdGFUcmFuc2Zlci5maWxlcyk7aWYoTy5sZW5ndGg9PT0wKXJldHVybjtmb3IobGV0IGsgb2YgTyl7bGV0IEk9TzQoayk7aWYoIUkpe3Eoayk7Y29udGludWV9bGV0IHc9WChrLm5hbWUsSSk7QTQoayxJLCQsUSwoUCk9PksodyxQKSkudGhlbigoKT0+WSh3LCEwKSkuY2F0Y2goKFApPT5ZKHcsITEsUCBpbnN0YW5jZW9mIEVycm9yP1AubWVzc2FnZToiVXBsb2FkIGZhaWxlZCIpKX19LFtKLFEsJCxYLEssWSxxLEddKSxDPUUoKEwpPT57aWYoTC5wcmV2ZW50RGVmYXVsdCgpLEopTC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0iY29weSJ9LFtKXSksVT1FKChMKT0+e2lmKEwucHJldmVudERlZmF1bHQoKSwhSilyZXR1cm47aWYoei5jdXJyZW50Kyssei5jdXJyZW50PT09MSlOKCEwKX0sW0pdKSxGPUUoKEwpPT57aWYoTC5wcmV2ZW50RGVmYXVsdCgpLHouY3VycmVudC0tLHouY3VycmVudDw9MCl6LmN1cnJlbnQ9MCxOKCExKX0sW10pO3JldHVybntpc0RyYWdPdmVyOkIsZHJvcFpvbmVQcm9wczp7b25EcmFnT3ZlcjpDLG9uRHJhZ0VudGVyOlUsb25EcmFnTGVhdmU6RixvbkRyb3A6Vn19fWZ1bmN0aW9uIFE3KCQpe2xldCBRPW5ldyBVaW50OEFycmF5KDY1NTM2KSxKPTAsWD0wLEs9MTAyNCxZPW5ldyBUZXh0RGVjb2RlcigibGF0aW4xIikscT0oQyk9PntpZihKK0MubGVuZ3RoPlEubGVuZ3RoKXtpZihYPjApUS5jb3B5V2l0aGluKDAsWCxKKSxKLT1YLFg9MDtpZihKK0MubGVuZ3RoPlEubGVuZ3RoKXtsZXQgVT1RLmxlbmd0aDt3aGlsZShVPEorQy5sZW5ndGgpVSo9MjtsZXQgRj1uZXcgVWludDhBcnJheShVKTtGLnNldChRLnN1YmFycmF5KDAsSikpLFE9Rn19US5zZXQoQyxKKSxKKz1DLmxlbmd0aH0sRz0oQyk9PntsZXQgVT1NYXRoLm1pbihKLTQsQytLKTtmb3IobGV0IEY9QztGPD1VO0YrKylpZihRW0ZdPT09MTMmJlFbRisxXT09PTEwJiZRW0YrMl09PT0xMyYmUVtGKzNdPT09MTApcmV0dXJuIEY7cmV0dXJuLTF9LEI9KEMsVSk9PntsZXQgRj1ZLmRlY29kZShRLnN1YmFycmF5KEMsVSkpLEw9L2NvbnRlbnQtbGVuZ3RoOlxzKihcZCspL2kuZXhlYyhGKTtyZXR1cm4gTD9OdW1iZXIoTFsxXSk6bnVsbH0sTj0wLHo9KEMpPT57bGV0IFU9LTE7Zm9yKGxldCBGPUM7RjxKLTE7RisrKWlmKFFbRl09PT0yNTUmJlFbRisxXT09PTIxNil7VT1GO2JyZWFrfWlmKFU9PT0tMSlyZXR1cm4gbnVsbDtmb3IobGV0IEY9TWF0aC5tYXgoVSsyLE4pO0Y8Si0xO0YrKylpZihRW0ZdPT09MjU1JiZRW0YrMV09PT0yMTcpcmV0dXJuIE49MCx7czpVLGU6RisyfTtyZXR1cm4gTj1NYXRoLm1heChVKzIsSi0xKSxudWxsfSxWPSgpPT57d2hpbGUoWDxKKXtsZXQgQz1HKFgpO2lmKEM+PTApe2xldCBGPUIoWCxDKTtpZihGIT1udWxsJiZGPjApe2xldCBMPUMrNCxIPUwrRjtpZihKPEgpYnJlYWs7JChRLnN1YmFycmF5KEwsSCkpLFg9SDtjb250aW51ZX19ZWxzZSBpZihKLVg8PUspYnJlYWs7bGV0IFU9eihYKTtpZighVSlicmVhazskKFEuc3ViYXJyYXkoVS5zLFUuZSkpLFg9VS5lfWlmKFg+MCl7aWYoWDxKKVEuY29weVdpdGhpbigwLFgsSik7Si09WCxOPU4+WD9OLVg6MCxYPTB9fTtyZXR1cm57cHVzaChDKXtpZihDLmxlbmd0aD09PTApcmV0dXJuO3EoQyksVigpfX19ZnVuY3Rpb24gSjcoJCl7bGV0IFE9VChuZXcgU2V0KSxKPUUoKFgpPT57cmV0dXJuIFEuY3VycmVudC5hZGQoWCksKCk9PntRLmN1cnJlbnQuZGVsZXRlKFgpfX0sW10pO3JldHVybiBiKCgpPT57aWYoISQpcmV0dXJuO2xldCBYPW5ldyBBYm9ydENvbnRyb2xsZXIsSz0hMSxZPW51bGwscT1uZXcgVVJMKCQpO3Euc2VhcmNoUGFyYW1zLnNldCgicmF3IiwiMSIpO2xldCBHPXEudG9TdHJpbmcoKSxCPSgpPT57aWYoS3x8WC5zaWduYWwuYWJvcnRlZHx8WSlyZXR1cm47WT1zZXRUaW1lb3V0KCgpPT57WT1udWxsLHooKX0sMTAwMCl9LE49KFYpPT57aWYoUS5jdXJyZW50LnNpemU9PT0wKXJldHVybjtsZXQgQz1VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtWXSx7dHlwZToiaW1hZ2UvanBlZyJ9KSk7Zm9yKGxldCBVIG9mIFEuY3VycmVudClVKEMpfSx6PWFzeW5jKCk9Pnt0cnl7bGV0IEM9KGF3YWl0IGZldGNoKEcse3NpZ25hbDpYLnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZighQyl7QigpO3JldHVybn1sZXQgVT1RNyhOKTt3aGlsZSghMCl7bGV0e2RvbmU6Rix2YWx1ZTpMfT1hd2FpdCBDLnJlYWQoKTtpZihGKWJyZWFrO2lmKEwmJkwubGVuZ3RoKVUucHVzaChMKX19Y2F0Y2h7fWZpbmFsbHl7QigpfX07cmV0dXJuIHooKSwoKT0+e2lmKEs9ITAsWSljbGVhclRpbWVvdXQoWSk7WC5hYm9ydCgpfX0sWyRdKSx7c3Vic2NyaWJlRnJhbWU6SixmcmFtZTpudWxsfX1mdW5jdGlvbiBaNygpe2xldFskXT1BKHIwKTtyZXR1cm57c3VwcG9ydGVkOiR9fWZ1bmN0aW9uIFkzKCQsUSl7cmV0dXJuICQ9PT0iZmlyc3QtZnJhbWUtdGltZW91dCImJlE9PT0iY29ubmVjdGVkIj8iY29kZWMiOiJ0cmFuc3BvcnQifXZhciBYNz0iYWxsIjtjbGFzcyBZNSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIldlYlJUQyBzaWduYWxpbmcgc3RheWVkIGJ1c3kgZm9yIHRvbyBsb25nLiBSZWxvYWQgdG8gdHJ5IGFnYWluLiIpO3RoaXMubmFtZT0iV2ViUnRjU2lnbmFsaW5nQnVzeUVycm9yIn19Y2xhc3MgRzMgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJXZWJSVEMgc2lnbmFsaW5nIHRpbWVkIG91dC4iKTt0aGlzLm5hbWU9IldlYlJ0Y1NpZ25hbGluZ1RpbWVvdXRFcnJvciJ9fWZ1bmN0aW9uIHEzKCQpe3JldHVybiAkLnJlYXNvbj8/bmV3IERPTUV4Y2VwdGlvbigiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCIsIkFib3J0RXJyb3IiKX1mdW5jdGlvbiBmWigkLFEpe2lmKFE/LmFib3J0ZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KHEzKFEpKTtyZXR1cm4gbmV3IFByb21pc2UoKEosWCk9PntsZXQgSz1zZXRUaW1lb3V0KFksJCk7ZnVuY3Rpb24gWSgpe1E/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxKKCl9ZnVuY3Rpb24gcSgpe2NsZWFyVGltZW91dChLKSxYKFE/cTMoUSk6bmV3IERPTUV4Y2VwdGlvbigiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCIsIkFib3J0RXJyb3IiKSl9UT8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEse29uY2U6ITB9KX0pfWFzeW5jIGZ1bmN0aW9uIEs3KHt1cmw6JCxzZXNzaW9uSWQ6USxrZWVwYWxpdmU6Sj0hMSxzZW5kQmVhY29uOlgsZmV0Y2hJbXBsOks9ZmV0Y2h9KXtsZXQgWT1KU09OLnN0cmluZ2lmeSh7c2Vzc2lvbklkOlF9KSxxPVg/Pyh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmdHlwZW9mIG5hdmlnYXRvci5zZW5kQmVhY29uPT09ImZ1bmN0aW9uIj9uYXZpZ2F0b3Iuc2VuZEJlYWNvbi5iaW5kKG5hdmlnYXRvcik6dm9pZCAwKTtpZihKJiZxKXRyeXtpZihxKCQsbmV3IEJsb2IoW1ldLHt0eXBlOiJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgifSkpKXJldHVybn1jYXRjaHt9YXdhaXQgSygkLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpZLGtlZXBhbGl2ZTpKfSkudGhlbigoKT0+e3JldHVybn0sKCk9PntyZXR1cm59KX1hc3luYyBmdW5jdGlvbiBZNyh7dXJsOiQsYm9keTpRLHNpZ25hbDpKLHJlcXVlc3RUaW1lb3V0TXM6WCxidXN5UmV0cnlJbnRlcnZhbE1zOkssYnVzeVJldHJ5Q291bnQ6WSxmZXRjaEltcGw6cT1mZXRjaH0pe2ZvcihsZXQgRz0wO0c8PVk7RysrKXtpZihKPy5hYm9ydGVkKXRocm93IHEzKEopO2xldCBCPW5ldyBBYm9ydENvbnRyb2xsZXIsTj0hMSx6PSgpPT5CLmFib3J0KEo/cTMoSik6dm9pZCAwKTtKPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIseix7b25jZTohMH0pO2xldCBWPXNldFRpbWVvdXQoKCk9PntOPSEwLEIuYWJvcnQoKX0sWCksQzt0cnl7Qz1hd2FpdCBxKCQse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxzaWduYWw6Qi5zaWduYWwsYm9keTpRfSl9Y2F0Y2goVSl7aWYoTiYmIUo/LmFib3J0ZWQpdGhyb3cgbmV3IEczO3Rocm93IFV9ZmluYWxseXtjbGVhclRpbWVvdXQoViksSj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHopfWlmKEMuc3RhdHVzIT09NDA5KXJldHVybiBDO2lmKGF3YWl0IEMuYm9keT8uY2FuY2VsKCksRz09PVkpdGhyb3cgbmV3IFk1O2F3YWl0IGZaKEssSil9dGhyb3cgbmV3IFk1fXZhciBtWj1be3VybHM6WyJzdHVuOnN0dW4ubC5nb29nbGUuY29tOjE5MzAyIl19LHt1cmxzOlsic3R1bjpzdHVuMS5sLmdvb2dsZS5jb206MTkzMDIiXX1dLHBaPTMwMDAsdVo9MjAwMDAsbFo9NDAwMCxkWj01MDAsY1o9MzAsb1o9NTAwLGlaPTUwMDA7ZnVuY3Rpb24gcTcoKXtpZih0eXBlb2YgY3J5cHRvLnJhbmRvbVVVSUQ9PT0iZnVuY3Rpb24iKXJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpO2xldCAkPWNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTYpKTskWzZdPSRbNl0mMTV8NjQsJFs4XT0kWzhdJjYzfDEyODtsZXQgUT1BcnJheS5mcm9tKCQsKEopPT5KLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpLmpvaW4oIiIpO3JldHVybmAke1Euc2xpY2UoMCw4KX0tJHtRLnNsaWNlKDgsMTIpfS0ke1Euc2xpY2UoMTIsMTYpfS0ke1Euc2xpY2UoMTYsMjApfS0ke1Euc2xpY2UoMjApfWB9ZnVuY3Rpb24gRzcoe29mZmVyVXJsOiQsY2xvc2VVcmw6USxlbmFibGVkOkosY29kZWM6WD0iaDI2NCIsaWNlU2VydmVyczpLfSl7bGV0W1kscV09QShudWxsKSxbRyxCXT1BKG51bGwpLFtOLHpdPUEobnVsbCksW1YsQ109QSgwKSxbVSxGXT1BKG51bGwpLFtMLEhdPUEobnVsbCksTz1UKHZvaWQgMCksaz1UKCExKSxJPVQoMCksdz1FKCgpPT57aWYoay5jdXJyZW50PSEwLEkuY3VycmVudD0wLE8uY3VycmVudCE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KE8uY3VycmVudCksTy5jdXJyZW50PXZvaWQgMDtCKG51bGwpLHoobnVsbCl9LFtdKTtyZXR1cm4gYigoKT0+e0kuY3VycmVudD0wfSxbSiwkLFEsWCxLXSksYigoKT0+e2lmKCFKfHwhJClyZXR1cm47aWYoQihudWxsKSx0eXBlb2YgUlRDUGVlckNvbm5lY3Rpb24+InUifHx0eXBlb2YgUlRDUnRwUmVjZWl2ZXI+InUiKXtxKG51bGwpLEgobnVsbCkseigiV2ViUlRDIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLiIpLEIoe3Nlc3Npb25JZDpxNygpLGtpbmQ6InBlcm1hbmVudCJ9KTtyZXR1cm59bGV0IFA9ITEseD1udWxsLHQsaD1udWxsLGw9ITEscj1uZXcgQWJvcnRDb250cm9sbGVyLG89cTcoKSxpPUs/Lmxlbmd0aD9LOm1aO2lmKEgobykscShudWxsKSxCKG51bGwpLHoobnVsbCksay5jdXJyZW50PSExLE8uY3VycmVudCE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KE8uY3VycmVudCksTy5jdXJyZW50PXZvaWQgMDtsZXQgJDE9KG49ITEpPT57aWYoaClyZXR1cm4gaDtyZXR1cm4gaD1LNyh7dXJsOlEsc2Vzc2lvbklkOm8sa2VlcGFsaXZlOm59KSxofSx6MT0oKT0+dm9pZCAkMSghMCk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIix6MSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsejEpO2xldCBjPSgpPT57cShudWxsKSx4Py5jbG9zZSgpLEYobnVsbCl9LG09KG4pPT57aWYoUHx8bClyZXR1cm47bD0hMCx6KG4pLEIoe3Nlc3Npb25JZDpvLGtpbmQ6InBlcm1hbmVudCJ9KSxjKCksJDEoKX0sSjE9KCk9PntpZihQfHxsKXJldHVybjtsPSEwLGMoKSwkMSgpLmZpbmFsbHkoKCk9PntpZighUClCKHtzZXNzaW9uSWQ6byxraW5kOiJjb2RlYyIsY29kZWM6WH0pfSl9LEcxPShuKT0+e2lmKFB8fGwpcmV0dXJuO2w9ITAsQihudWxsKTtsZXQgWDE9SS5jdXJyZW50KyssVjE9TWF0aC5taW4ob1oqMioqTWF0aC5taW4oWDEsNCksaVopO3ooYCR7bn0gUmV0cnlpbmcuLi5gKSxjKCksJDEoKS5maW5hbGx5KCgpPT57aWYoUClyZXR1cm47dD13aW5kb3cuc2V0VGltZW91dCgoKT0+e2lmKCFQKUMoKFMpPT5TKzEpfSxWMSl9KX0sTzE9KG4pPT5uZXcgUHJvbWlzZSgoWDEpPT57aWYobi5pY2VHYXRoZXJpbmdTdGF0ZT09PSJjb21wbGV0ZSIpe1gxKCk7cmV0dXJufWxldCBWMSxTPSExLGc9KCk9PntpZihTKXJldHVybjtpZihTPSEwLG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaWNlZ2F0aGVyaW5nc3RhdGVjaGFuZ2UiLF8pLFYxIT09dm9pZCAwKXdpbmRvdy5jbGVhclRpbWVvdXQoVjEpO1gxKCl9LF89KCk9PntpZihuLmljZUdhdGhlcmluZ1N0YXRlPT09ImNvbXBsZXRlIilnKCl9O24uYWRkRXZlbnRMaXN0ZW5lcigiaWNlZ2F0aGVyaW5nc3RhdGVjaGFuZ2UiLF8pLFYxPXdpbmRvdy5zZXRUaW1lb3V0KGcscFopfSk7cmV0dXJuKGFzeW5jKCk9Pnt0cnl7eD1uZXcgUlRDUGVlckNvbm5lY3Rpb24oe2ljZVNlcnZlcnM6aSxpY2VUcmFuc3BvcnRQb2xpY3k6WDd9KSxGKHgpO2xldCBuPXguYWRkVHJhbnNjZWl2ZXIoInZpZGVvIix7ZGlyZWN0aW9uOiJyZWN2b25seSJ9KSxYMT1SVENSdHBSZWNlaXZlci5nZXRDYXBhYmlsaXRpZXMoInZpZGVvIiksVjE9WD09PSJoMjY0Ij8idmlkZW8vSDI2NCI6WD09PSJ2cDkiPyJ2aWRlby9WUDkiOiJ2aWRlby9WUDgiO2lmKFgxPy5jb2RlY3MubGVuZ3RoJiYic2V0Q29kZWNQcmVmZXJlbmNlcyJpbiBuKXtsZXQgcD1WMS50b0xvd2VyQ2FzZSgpO24uc2V0Q29kZWNQcmVmZXJlbmNlcyhbLi4uWDEuY29kZWNzLmZpbHRlcigoaik9PmoubWltZVR5cGUudG9Mb3dlckNhc2UoKT09PXApLC4uLlgxLmNvZGVjcy5maWx0ZXIoKGopPT5qLm1pbWVUeXBlLnRvTG93ZXJDYXNlKCkhPT1wKV0pfXgub250cmFjaz0ocCk9PntpZihQKXJldHVybjtpZihrLmN1cnJlbnQ9ITEscC50cmFjay5vbmVuZGVkPSgpPT5HMSgiV2ViUlRDIHZpZGVvIHRyYWNrIGVuZGVkLiIpLHEocC5zdHJlYW1zWzBdPz9uZXcgTWVkaWFTdHJlYW0oW3AudHJhY2tdKSksTy5jdXJyZW50IT09dm9pZCAwKXdpbmRvdy5jbGVhclRpbWVvdXQoTy5jdXJyZW50KTtPLmN1cnJlbnQ9d2luZG93LnNldFRpbWVvdXQoKCk9PntpZihPLmN1cnJlbnQ9dm9pZCAwLFB8fGsuY3VycmVudClyZXR1cm47bGV0IGo9eD8uY29ubmVjdGlvblN0YXRlPz8iY2xvc2VkIjtpZihZMygiZmlyc3QtZnJhbWUtdGltZW91dCIsaik9PT0iY29kZWMiKUoxKCk7ZWxzZSBHMSgiV2ViUlRDIGRpZCBub3QgZXN0YWJsaXNoIGEgdmlkZW8gcGF0aC4iKX0sbFopfSx4Lm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlPSgpPT57aWYoUHx8IXh8fHguY29ubmVjdGlvblN0YXRlIT09ImZhaWxlZCIpcmV0dXJuO2lmKFkzKCJjb25uZWN0aW9uLWZhaWxlZCIseC5jb25uZWN0aW9uU3RhdGUpPT09InRyYW5zcG9ydCIpRzEoIldlYlJUQyBjb25uZWN0aW9uIGZhaWxlZC4iKX07bGV0IFM9YXdhaXQgeC5jcmVhdGVPZmZlcigpO2F3YWl0IHguc2V0TG9jYWxEZXNjcmlwdGlvbihTKSxhd2FpdCBPMSh4KTtsZXQgZz14LmxvY2FsRGVzY3JpcHRpb247aWYoIWcpdGhyb3cgRXJyb3IoIldlYlJUQyBvZmZlciB3YXMgbm90IGNyZWF0ZWQiKTtsZXQgXz1hd2FpdCBZNyh7dXJsOiQsc2lnbmFsOnIuc2lnbmFsLHJlcXVlc3RUaW1lb3V0TXM6dVosYnVzeVJldHJ5SW50ZXJ2YWxNczpkWixidXN5UmV0cnlDb3VudDpjWixib2R5OkpTT04uc3RyaW5naWZ5KHt0eXBlOmcudHlwZSxzZHA6Zy5zZHAsc2Vzc2lvbklkOm8sY29kZWM6WCxpY2VTZXJ2ZXJzOml9KX0pO2lmKCFfLm9rKXthd2FpdCBfLmJvZHk/LmNhbmNlbCgpLG0oYFdlYlJUQyBvZmZlciBmYWlsZWQ6IEhUVFAgJHtfLnN0YXR1c31gKTtyZXR1cm59bGV0IHU9YXdhaXQgXy5qc29uKCk7aWYoUCl7YXdhaXQgJDEoITApO3JldHVybn10cnl7YXdhaXQgeC5zZXRSZW1vdGVEZXNjcmlwdGlvbih1KX1jYXRjaHttKCJXZWJSVEMgcmV0dXJuZWQgYW4gaW52YWxpZCBzZXNzaW9uIGRlc2NyaXB0aW9uLiIpfX1jYXRjaChuKXtpZihQfHxyLnNpZ25hbC5hYm9ydGVkKXJldHVybjtpZihuIGluc3RhbmNlb2YgWTUpe20obi5tZXNzYWdlKTtyZXR1cm59bGV0IFgxPW4gaW5zdGFuY2VvZiBHMz8iV2ViUlRDIHNpZ25hbGluZyB0aW1lZCBvdXQuIjoiV2ViUlRDIHNpZ25hbGluZyBmYWlsZWQuIjtpZihZMygic2lnbmFsaW5nLWZhaWxlZCIseD8uY29ubmVjdGlvblN0YXRlPz8iY2xvc2VkIik9PT0idHJhbnNwb3J0IilHMShYMSl9fSkoKSwoKT0+e2lmKFA9ITAsd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIix6MSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsejEpLHIuYWJvcnQoKSx0IT09dm9pZCAwKXdpbmRvdy5jbGVhclRpbWVvdXQodCk7aWYoTy5jdXJyZW50IT09dm9pZCAwKXdpbmRvdy5jbGVhclRpbWVvdXQoTy5jdXJyZW50KSxPLmN1cnJlbnQ9dm9pZCAwOyQxKCEwKSxxKG51bGwpLEYobnVsbCksSChudWxsKSx4Py5jbG9zZSgpfX0sW0osJCxRLFgsSyxWXSkse3N0cmVhbTpZLGZhaWx1cmU6RyxlcnJvcjpOLG1hcmtGcmFtZURlY29kZWQ6dyxwZWVyQ29ubmVjdGlvbjpVLHNlc3Npb25JZDpMfX1mdW5jdGlvbiBWMygkLFEsSixYLEs9ImxlZnQiKXtsZXQgWT1FKChDLFUpPT5LPT09ImxlZnQiP0MtVTpVLUMsW0tdKSxxPUUoKEMpPT5NYXRoLm1heChKLE1hdGgubWluKFgsQykpLFtKLFhdKSxbRyxCXT1BKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIFE7bGV0IEM9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCQpLFU9QyE9bnVsbD9OdW1iZXIoQyk6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoVSk/cShVKTpRfSksTj10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1pbihYLHdpbmRvdy5pbm5lcldpZHRoLTMyKTpYLHo9TWF0aC5tYXgoSixNYXRoLm1pbihOLEcpKSxWPUUoKEMpPT57Qy5wcmV2ZW50RGVmYXVsdCgpO2xldCBVPUMuY2xpZW50WCxGPXosTD1DLmN1cnJlbnRUYXJnZXQ7TC5zZXRQb2ludGVyQ2FwdHVyZShDLnBvaW50ZXJJZCk7bGV0IEg9KGspPT57bGV0IEk9cShGK1koVSxrLmNsaWVudFgpKTtCKEkpfSxPPShrKT0+e0wucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGsucG9pbnRlcklkKSxMLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixIKSxMLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsTyksTC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixPKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCQsU3RyaW5nKHEoRitZKFUsay5jbGllbnRYKSkpKX1jYXRjaHt9fTtMLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixIKSxMLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsTyksTC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixPKX0sW3EsWSx6LCRdKTtyZXR1cm57d2lkdGg6eixvblBvaW50ZXJEb3duOlZ9fXZhciBuWj04MDAwO2Z1bmN0aW9uIHJaKCQpe3JldHVybiJmaWxlOi8vIiskLnNwbGl0KCIvIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbigiLyIpfWZ1bmN0aW9uIGFaKCQpe3JldHVybiAkIT09Im5vbmUifWZ1bmN0aW9uIFY3KHt0b2FzdDokLG9uUmV2ZWFsOlEsb25EaXNtaXNzOkosb25QYXVzZTpYLG9uUmVzdW1lOkt9KXtsZXQgWT1Cb29sZWFuKCQuZG93bmxvYWRVcmwmJiQuZG93bmxvYWROYW1lKSxxPUJvb2xlYW4oJC5wYXRoKSxbRyxCXT1BKCExKSxOPVQobnVsbCksej1UKG51bGwpLFY9KCk9PntpZih6LmN1cnJlbnQpY2xlYXJUaW1lb3V0KHouY3VycmVudCk7ei5jdXJyZW50PW51bGx9O2IoKCk9PigpPT5WKCksW10pO2xldCBDPShGKT0+e2lmKCEkLnBhdGgpe0YucHJldmVudERlZmF1bHQoKTtyZXR1cm59VigpLFgoKSx6LmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e3ouY3VycmVudD1udWxsLEIoITEpLEsoKX0sblopLEYuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLHJaKCQucGF0aCkpLEYuZGF0YVRyYW5zZmVyLnNldERhdGEoJDMsJC5wYXRoKSxGLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJjb3B5IjtsZXQgTD1OLmN1cnJlbnQ7aWYoTClGLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoTCxMLm9mZnNldFdpZHRoLzIsTC5vZmZzZXRIZWlnaHQvMik7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5CKCEwKSl9LFU9KEYpPT57aWYoVigpLEIoITEpLGFaKEYuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QpKUooKTtlbHNlIEsoKX07cmV0dXJuIFooImRpdiIseyJkYXRhLXRlc3RpZCI6InNjcmVlbnNob3QtdG9hc3QiLGNsYXNzTmFtZToidy1bbWluKDMyMHB4LGNhbGMoMTAwdnctMzJweCkpXSIsb25Nb3VzZUVudGVyOlgsb25Nb3VzZUxlYXZlOkssY2hpbGRyZW46WyQudGh1bWImJlooImltZyIse3JlZjpOLCJkYXRhLXRlc3RpZCI6ImRyYWctaW1hZ2UiLHNyYzokLnRodW1iLGFsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIix0b3A6LTk5OTksbGVmdDowLHdpZHRoOjgwLGhlaWdodDo4MCxib3JkZXJSYWRpdXM6MTIsb2JqZWN0Rml0OiJjb3ZlciIscG9pbnRlckV2ZW50czoibm9uZSJ9fSksJC5zdGF0dXM9PT0iZXJyb3IiP1ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMy41IHB5LTIuNSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQteGwgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0iLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgYmctWyNmODcxNzFdIn0pLFooInNwYW4iLHtjbGFzc05hbWU6InNlbGVjdC10ZXh0IixjaGlsZHJlbjokLm1lc3NhZ2U/PyJTY3JlZW5zaG90IGZhaWxlZCJ9KV19KTpaKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6USxkaXNhYmxlZDokLnN0YXR1cyE9PSJzYXZlZCIsZHJhZ2dhYmxlOiQuc3RhdHVzPT09InNhdmVkIiYmcSxvbkRyYWdTdGFydDpDLG9uRHJhZ0VuZDpVLCJhcmlhLWxhYmVsIjpZPyJEb3dubG9hZCBzY3JlZW5zaG90IGFnYWluIjoiT3BlbiBzY3JlZW5zaG90IGluIEZpbmRlciIsdGl0bGU6WT8iRG93bmxvYWQgc2NyZWVuc2hvdCBhZ2FpbiI6IkNsaWNrIHRvIHJldmVhbCBpbiBGaW5kZXIgwrcgZHJhZyB0byBjb3B5IHRoZSBmaWxlIixjbGFzc05hbWU6YGdyb3VwIGZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBnYXAtMyBwbC0yIHByLTMuNSBweS0yIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC14bCBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0gdGV4dC1sZWZ0IGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6YmctWyMyYTJhMmNdIGRpc2FibGVkOmN1cnNvci1kZWZhdWx0IFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZV0gJHtHPyJpbnZpc2libGUiOiIifWAsY2hpbGRyZW46W1ooImRpdiIse2NsYXNzTmFtZToic2l6ZS05IHJvdW5kZWQtbWQgb3ZlcmZsb3ctaGlkZGVuIGJnLXdoaXRlLzEwIHNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJpbmctMSByaW5nLXdoaXRlLzEwIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQudGh1bWI/WigiaW1nIix7c3JjOiQudGh1bWIsYWx0OiIiLGNsYXNzTmFtZToic2l6ZS1mdWxsIG9iamVjdC1jb3ZlciIsZHJhZ2dhYmxlOiExfSk6Wigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgc2l6ZS00IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMzAgYm9yZGVyLXQtd2hpdGUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSJ9KX0pLFooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBsZWFkaW5nLXRpZ2h0IHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOltaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUiLGNoaWxkcmVuOiQuc3RhdHVzPT09InNhdmluZyI/IlNhdmluZyBTY3JlZW5zaG904oCmIjoiU2NyZWVuc2hvdCBTYXZlZCJ9KSwkLnN0YXR1cz09PSJzYXZlZCImJlooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNjAiLGNoaWxkcmVuOlk/IkRvd25sb2FkIGFnYWluIjoiT3BlbiBpbiBGaW5kZXIifSldfSksJC5zdGF0dXM9PT0ic2F2ZWQiJiZaKGgyLHtjbGFzc05hbWU6Im1sLWF1dG8gdGV4dC13aGl0ZS84MCBwb2ludGVyLWV2ZW50cy1ub25lIixzaXplOjE2LHN0cm9rZVdpZHRoOjIuMjV9KV19KV19KX12YXIgTTg9MzUwMCxCNz00MDAwLHNaPTFlNDtmdW5jdGlvbiB0Wigpe3JldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvWzouXS9nLCItIikuc2xpY2UoMCwyMyl9ZnVuY3Rpb24gTjcoJCl7bGV0IFE9VChudWxsKSxKPVQobnVsbCksWD1UKG51bGwpLEs9VChudWxsKSxZPVQobnVsbCkscT1UKCExKSxHPUUoKCk9PntpZihYLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFguY3VycmVudCk7WC5jdXJyZW50PW51bGwsSy5jdXJyZW50PW51bGx9LFtdKSxCPUUoKEwpPT57bGV0IEg9TD8/Si5jdXJyZW50Pz92b2lkIDA7aWYoRygpLFkuY3VycmVudD1udWxsLHQyLmRpc21pc3MoSCksSD09PXZvaWQgMHx8Si5jdXJyZW50PT09U3RyaW5nKEgpKXtsZXQgTz1RLmN1cnJlbnQ/LmRvd25sb2FkVXJsO2lmKE8pVVJMLnJldm9rZU9iamVjdFVSTChPKTtRLmN1cnJlbnQ9bnVsbCxKLmN1cnJlbnQ9bnVsbH19LFtHXSksTj1FKCgpPT57bGV0IEw9US5jdXJyZW50O2lmKEw/LnBhdGgpSTEoYG9wZW4gLVIgJHtNMShMLnBhdGgpfWApO2Vsc2UgaWYoTD8uZG93bmxvYWRVcmwmJkwuZG93bmxvYWROYW1lKUo1KEwuZG93bmxvYWRVcmwsTC5kb3dubG9hZE5hbWUpfSxbXSksej1FKChMKT0+e0coKTtsZXQgSD1NYXRoLm1heCgwLEwpLE89Si5jdXJyZW50O1kuY3VycmVudD1ILEsuY3VycmVudD1EYXRlLm5vdygpK0gsWC5jdXJyZW50PXNldFRpbWVvdXQoKCk9PkIoTz8/dm9pZCAwKSxIKX0sW0csQl0pLFY9RSgoKT0+e2lmKCFYLmN1cnJlbnR8fEsuY3VycmVudD09bnVsbClyZXR1cm47WS5jdXJyZW50PU1hdGgubWF4KDAsSy5jdXJyZW50LURhdGUubm93KCkpLEcoKX0sW0ddKSxDPUUoKCk9PntsZXQgTD1ZLmN1cnJlbnQ7aWYoTD09bnVsbClyZXR1cm47eihMKX0sW3pdKSxVPUUoKEwsSD0xLzApPT57aWYoUS5jdXJyZW50PUwsSi5jdXJyZW50PUwuaWQsdDIuY3VzdG9tKChPKT0+WihWNyx7dG9hc3Q6TCxvblJldmVhbDpOLG9uRGlzbWlzczooKT0+QihPKSxvblBhdXNlOlYsb25SZXN1bWU6Q30pLHtpZDpMLmlkLGR1cmF0aW9uOjEvMH0pLE51bWJlci5pc0Zpbml0ZShIKSl6KEgpO2Vsc2UgRygpLFkuY3VycmVudD1udWxsfSxbRyxCLFYsQyxOLHpdKTtyZXR1cm57Y2FwdHVyZTpFKGFzeW5jKCk9PntpZighJHx8cS5jdXJyZW50KXJldHVybjtxLmN1cnJlbnQ9ITA7bGV0IEw9Y3J5cHRvLnJhbmRvbVVVSUQoKTtVKHtpZDpMLHN0YXR1czoic2F2aW5nIixwaGFzZToiaW4ifSk7bGV0IEg9YHNlcnZlLXNpbS1zY3JlZW5zaG90LSR7dFooKX0ucG5nYCxPPW5ldyBBYm9ydENvbnRyb2xsZXIsaz1zZXRUaW1lb3V0KCgpPT57Ty5hYm9ydChFcnJvcigiU2NyZWVuc2hvdCB0aW1lZCBvdXQiKSl9LHNaKTt0cnl7aWYoIWg0KHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSkpe2xldCBoPWF3YWl0IGc0KCQse3NpZ25hbDpPLnNpZ25hbH0pLGw9VVJMLmNyZWF0ZU9iamVjdFVSTChoKTtKNShsLEgpLFUoe2lkOkwsc3RhdHVzOiJzYXZlZCIscGhhc2U6ImluIixkb3dubG9hZFVybDpsLGRvd25sb2FkTmFtZTpILHRodW1iOmx9LE04KTtyZXR1cm59bGV0IHc9YEY9IiR7YCRIT01FL0Rlc2t0b3AvJHtIfWB9IjsgeGNydW4gc2ltY3RsIGlvICR7TTEoJCl9IHNjcmVlbnNob3QgIiRGIiAmJiBwcmludGYgJyVzJyAiJEYiYCxQPWF3YWl0IEkxKHcse3NpZ25hbDpPLnNpZ25hbH0pLHg9UC5zdGRvdXQudHJpbSgpO2lmKFAuZXhpdENvZGUhPT0wfHwheCl7VSh7aWQ6TCxzdGF0dXM6ImVycm9yIixwaGFzZToiaW4iLG1lc3NhZ2U6UC5zdGRlcnIudHJpbSgpfHwiU2NyZWVuc2hvdCBmYWlsZWQifSxCNyk7cmV0dXJufVUoe2lkOkwsc3RhdHVzOiJzYXZlZCIscGhhc2U6ImluIixwYXRoOnh9LE04KTtsZXQgdD1gL3RtcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC10aHVtYi0ke0x9LnBuZ2A7dHJ5e2xldCBsPShhd2FpdCBJMShgc2lwcyAtWiAzMjAgJHtNMSh4KX0gLS1vdXQgJHtNMSh0KX0gPi9kZXYvbnVsbCAyPiYxICYmIGJhc2U2NCAtaSAke00xKHQpfTsgcm0gLWYgJHtNMSh0KX1gLHtzaWduYWw6Ty5zaWduYWx9KSkuc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKTtpZihsKXtsZXQgcj1RLmN1cnJlbnQ7aWYocj8uaWQ9PT1MKVUoey4uLnIsdGh1bWI6YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke2x9YH0sTTgpfX1jYXRjaHt9fWNhdGNoKEkpe1Uoe2lkOkwsc3RhdHVzOiJlcnJvciIscGhhc2U6ImluIixtZXNzYWdlOkkgaW5zdGFuY2VvZiBFcnJvcj9JLm1lc3NhZ2U6IlNjcmVlbnNob3QgZmFpbGVkIn0sQjcpfWZpbmFsbHl7Y2xlYXJUaW1lb3V0KGspLHEuY3VycmVudD0hMX19LFskLFVdKSxyZXZlYWw6TixkaXNtaXNzOkJ9fWZ1bmN0aW9uIEw3KHtkZWZhdWx0V2lkdGg6JCx2aWV3cG9ydFdpZHRoOlEsdmlld3BvcnRIZWlnaHQ6Sixhc3BlY3RSYXRpbzpYLG9uU3RhcnQ6S30pe2xldCBZPWk1KCksW3EsR109QSghMSksW0IsTl09QSghMSksW3osVl09QSghMSksQz1UKG51bGwpLFU9VChbXSksRj1UKG51bGwpLEw9VChudWxsKSxIPVQobnVsbCksTz1UKG51bGwpLGs9RSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiAkO2xldCBfPU5hTjt0cnl7bGV0IHU9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFE4KTtfPXUhPW51bGw/TnVtYmVyKHUpOk5hTn1jYXRjaHt9cmV0dXJuIHA2KCQsUSxKLFgsXyl9LFtYLCQsSixRXSksST1FMSgoKT0+aygpLFtrXSksW3csUF09QShJKSx4PVQoSSksdD1UKCQpLGg9SjgoJCxRLEosWCksbD1NYXRoLm1pbihfNixoKSxyPXc/PyQsbz1lMChyLCQsUSxKLFgpLGk9RSgoXyk9PntsZXQgdT1hNShfKTt4LmN1cnJlbnQ9dSxQKHUpfSxbXSksJDE9RSgoXyk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8JDw9MClyZXR1cm47bGV0IHU9ZTAoXywkLFEsSixYKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFE4LFN0cmluZyh1LyQpKX1jYXRjaHt9fSxbWCwkLEosUV0pLHoxPUUoKF8pPT57aWYoSC5jdXJyZW50IT1udWxsKWNsZWFyVGltZW91dChILmN1cnJlbnQpO0guY3VycmVudD1zZXRUaW1lb3V0KCgpPT57SC5jdXJyZW50PW51bGwsJDEoXyl9LG02KX0sWyQxXSk7YigoKT0+e2lmKHF8fEIpcmV0dXJuO2xldCBfPXguY3VycmVudDtpZihfPT1udWxsKXJldHVybjtsZXQgdT1lMChfLCQsUSxKLFgpO2lmKHUhPT1fKWkodSl9LFtYLCQsQixxLEosUSxpXSksYigoKT0+e2lmKHQuY3VycmVudD09PSQpcmV0dXJuO3QuY3VycmVudD0kLGkoaygpKX0sWyQsayxpXSksYigoKT0+e2lmKCFxJiYhQilyZXR1cm47bGV0IF89ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IsdT1kb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QscD1kb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q7cmV0dXJuIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPSJud3NlLXJlc2l6ZSIsZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PSJub25lIixkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9Im5vbmUiLCgpPT57ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9Xyxkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9dSxkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9cH19LFtxLEJdKSxiKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuO2xldCBfPSgpPT57bGV0IHA9eC5jdXJyZW50O2lmKHA9PW51bGwpcmV0dXJuO2lmKEguY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoSC5jdXJyZW50KSxILmN1cnJlbnQ9bnVsbDskMShwKX0sdT0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKV8oKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsXyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsdSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLF8pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHUpfX0sWyQxXSk7bGV0IGM9RSgoXyk9PntpZihfPmgpcmV0dXJuIGgrWjgoXy1oLGgpO2lmKF88bClyZXR1cm4gbC1aOChsLV8saCk7cmV0dXJuIF99LFtoLGxdKSxtPUUoKCk9PntpZihMLmN1cnJlbnQpTC5jdXJyZW50KCksTC5jdXJyZW50PW51bGw7TighMSl9LFtdKSxKMT1FKChfKT0+e2xldCB1PXBlcmZvcm1hbmNlLm5vdygpLHA9VS5jdXJyZW50O3AucHVzaCh7dDp1LHg6X30pO3doaWxlKHAubGVuZ3RoPjEmJnUtcFswXS50PmY2KXAuc2hpZnQoKX0sW10pLEcxPUUoKF8pPT57bGV0IHU9YyhfKTtpZihGLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoRi5jdXJyZW50KTtGLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57Ri5jdXJyZW50PW51bGwsaSh1KSxKMSh1KX0pfSxbYyxKMSxpXSksTzE9RSgoXyx1LHApPT57bSgpO2xldCBqPXguY3VycmVudD8/JDtDLmN1cnJlbnQ9e3BvaW50ZXJJZDpfLHN0YXJ0WDp1LHN0YXJ0WTpwLHN0YXJ0V2lkdGg6an0sVS5jdXJyZW50PVt7dDpwZXJmb3JtYW5jZS5ub3coKSx4Omp9XSxLKCksRyghMCl9LFttLCQsS10pLG49RSgoKT0+e2xldCBfPUMuY3VycmVudDtpZihDLmN1cnJlbnQ9bnVsbCxGLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoRi5jdXJyZW50KSxGLmN1cnJlbnQ9bnVsbDtpZihfJiZfLnBvaW50ZXJJZD49MCl7bGV0IGsxPU8uY3VycmVudDtpZihrMT8uaGFzUG9pbnRlckNhcHR1cmUoXy5wb2ludGVySWQpKWsxLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShfLnBvaW50ZXJJZCl9RyghMSk7bGV0IHU9eC5jdXJyZW50Pz8kLHA9ZDYoVS5jdXJyZW50KTtVLmN1cnJlbnQ9W107bGV0IGo9ZTAodStwKmc2LCQsUSxKLFgpLHExPWE1KHU2KGosWyRdLHY2KSksTDE9TWF0aC5hYnModS1xMSk8MC41JiZNYXRoLmFicyhwKTw4O2lmKFl8fEwxKXtpKHExKSx6MShxMSk7cmV0dXJufU4oITApLEwuY3VycmVudD1sNih7ZnJvbTp1LHRvOnExLHZlbG9jaXR5OnAsc3RpZmZuZXNzOlI2LGRhbXBpbmc6aDYsb25VcGRhdGU6aSxvbkNvbXBsZXRlOigpPT57TC5jdXJyZW50PW51bGwsTighMSksejEocTEpfX0pfSxbWCwkLFksejEsSixRLGldKTtiKCgpPT57cmV0dXJuKCk9PntpZihtKCksRi5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEYuY3VycmVudCk7aWYoSC5jdXJyZW50IT1udWxsKXtpZihjbGVhclRpbWVvdXQoSC5jdXJyZW50KSx4LmN1cnJlbnQhPW51bGwpJDEoeC5jdXJyZW50KX19fSxbbSwkMV0pLGIoKCk9PntpZighcSlyZXR1cm47bGV0IF89KCk9Pm4oKSx1PSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpbigpfSxwPShqKT0+e2xldCBxMT1DLmN1cnJlbnQ7aWYoIXExfHxxMS5wb2ludGVySWQhPT1qLnBvaW50ZXJJZClyZXR1cm47ai5wcmV2ZW50RGVmYXVsdCgpLEcxKHo3KHExLGouY2xpZW50WCxqLmNsaWVudFksWCkpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLF8pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIscCx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsXywhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLF8sITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHUpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLF8pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIscCwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsXywhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLF8sITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHUpfX0sW1gsbixxLEcxXSk7bGV0IFgxPUUoKF8pPT57bGV0IHU9Qy5jdXJyZW50O2lmKCF1fHx1LnBvaW50ZXJJZCE9PV8ucG9pbnRlcklkKXJldHVybjtfLnByZXZlbnREZWZhdWx0KCksXy5zdG9wUHJvcGFnYXRpb24oKSxuKCl9LFtuXSksVjE9RSgoXyk9PntpZihfLmJ1dHRvbiE9PTApcmV0dXJuO18ucHJldmVudERlZmF1bHQoKSxfLnN0b3BQcm9wYWdhdGlvbigpLF8uY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShfLnBvaW50ZXJJZCksTzEoXy5wb2ludGVySWQsXy5jbGllbnRYLF8uY2xpZW50WSl9LFtPMV0pLFM9RSgoXyk9PntsZXQgdT1DLmN1cnJlbnQ7aWYoIXV8fHUucG9pbnRlcklkIT09Xy5wb2ludGVySWQpcmV0dXJuO18ucHJldmVudERlZmF1bHQoKSxHMSh6Nyh1LF8uY2xpZW50WCxfLmNsaWVudFksWCkpfSxbWCxHMV0pLGc9RSgoXyk9PntsZXQgdT1fLmtleT09PSJBcnJvd1JpZ2h0Inx8Xy5rZXk9PT0iQXJyb3dEb3duIj8xOl8ua2V5PT09IkFycm93TGVmdCJ8fF8ua2V5PT09IkFycm93VXAiPy0xOjA7aWYodT09PTApcmV0dXJuO18ucHJldmVudERlZmF1bHQoKSxtKCk7bGV0IHA9Xy5zaGlmdEtleT84MDoyNCxqPWE1KGUwKG8rdSpwLCQsUSxKLFgpKTtpKGopLHoxKGopfSxbWCxtLG8sJCx6MSxKLFEsaV0pO3JldHVybntoYW5kbGVSZWY6Tyx3aWR0aDpyLGNvbW1pdHRlZFdpZHRoOm8sbWluV2lkdGg6bCxtYXhXaWR0aDpoLGlzUmVzaXppbmc6cSxpc0luZXJ0aWE6QixoYW5kbGVIb3ZlcmVkOnosaGFuZGxlQWN0aXZlOnp8fHF8fEIsc2V0SGFuZGxlSG92ZXJlZDpWLG9uUG9pbnRlckRvd246VjEsb25Qb2ludGVyTW92ZTpTLG9uUG9pbnRlckVuZDpYMSxvbktleURvd246Z319ZnVuY3Rpb24gejcoJCxRLEosWCl7bGV0IEs9US0kLnN0YXJ0WCxZPShKLSQuc3RhcnRZKSpYO3JldHVybiAkLnN0YXJ0V2lkdGgrKE1hdGguYWJzKEspPj1NYXRoLmFicyhZKT9LOlkpfWZ1bmN0aW9uIFU3KCl7bGV0ICQ9VChuZXcgTWFwKSxRPVQobmV3IE1hcCksSj1FKChHKT0+e2xldCBCPVEuY3VycmVudC5nZXQoRyk7aWYoQiljbGVhclRpbWVvdXQoQik7US5jdXJyZW50LmRlbGV0ZShHKX0sW10pLFg9RSgoRyxCPTEvMCk9Pnt0Mi5jdXN0b20oKCk9PloodDYse3RvYXN0Okd9KSx7aWQ6Ry5pZCxkdXJhdGlvbjpCfSl9LFtdKSxLPUUoKEcsQik9PntsZXQgTj1jcnlwdG8ucmFuZG9tVVVJRCgpLHo9e2lkOk4sbmFtZTpHLGtpbmQ6QixzdGF0dXM6InVwbG9hZGluZyIscHJvZ3Jlc3M6MH07cmV0dXJuICQuY3VycmVudC5zZXQoTix6KSxYKHopLE59LFtYXSksWT1FKChHLEIpPT57bGV0IE49JC5jdXJyZW50LmdldChHKTtpZighTilyZXR1cm47SihHKTtsZXQgej17Li4uTiwuLi5CfTtpZigkLmN1cnJlbnQuc2V0KEcseiksWCh6LEIuc3RhdHVzPT09InN1Y2Nlc3MifHxCLnN0YXR1cz09PSJlcnJvciI/MzAwMDoxLzApLEIuc3RhdHVzPT09InN1Y2Nlc3MifHxCLnN0YXR1cz09PSJlcnJvciIpe2xldCBWPXNldFRpbWVvdXQoKCk9PnskLmN1cnJlbnQuZGVsZXRlKEcpLFEuY3VycmVudC5kZWxldGUoRyl9LDMwMDApO1EuY3VycmVudC5zZXQoRyxWKX19LFtKLFhdKSxxPUUoKEcsQik9PntsZXQgTj0kLmN1cnJlbnQuZ2V0KEcpO2lmKCFOKXJldHVybjtsZXQgej17Li4uTixwcm9ncmVzczpCfTskLmN1cnJlbnQuc2V0KEcseiksWCh6KX0sW1hdKTtyZXR1cm57YWRkOkssdXBkYXRlOlksc2V0UHJvZ3Jlc3M6cX19ZnVuY3Rpb24gSDcoJCxRKXtsZXRbSixYXT1BKFtdKSxbSyxZXT1BKG51bGwpLFtxLEddPUEoITEpLEI9RShhc3luYygpPT57aWYoISQpcmV0dXJuO0coITApLFkobnVsbCk7dHJ5e2xldCBOPWF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSx6PWF3YWl0IE4uanNvbigpO2lmKCFOLm9rfHx6LmVycm9yKXRocm93IEVycm9yKHouZXJyb3J8fCJGYWlsZWQgdG8gbGlzdCBXZWJLaXQgdGFyZ2V0cyIpO2xldCBWPXR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93LmxvY2F0aW9uLEM9ei50YXJnZXRzPz9bXTtYKFY/Qy5tYXAoKFUpPT5uNChVLFYpKTpDKX1jYXRjaChOKXtZKE4gaW5zdGFuY2VvZiBFcnJvcj9OLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBXZWJLaXQgRGV2VG9vbHMiKX1maW5hbGx5e0coITEpfX0sWyRdKTtyZXR1cm4gYigoKT0+e2lmKCFRKXJldHVybjtCKCk7bGV0IE49c2V0SW50ZXJ2YWwoKCk9PnZvaWQgQigpLDI1MDApO3JldHVybigpPT5jbGVhckludGVydmFsKE4pfSxbUSxCXSkse3RhcmdldHM6SixlcnJvcjpLLGxvYWRpbmc6cSxyZWZyZXNoOkJ9fXZhciBlWj02MCwkWD0xMDAwO2Z1bmN0aW9uIEM3KCQsUSxKLFg9ZVope2xldFtLLFldPUEobnVsbCksW3EsR109QSgwKSxbQixOXT1BKFgpLFt6LFZdPUEoMCk7YigoKT0+e2lmKCFRfHwhJClyZXR1cm47bGV0IE89ITEsaz0kLmluY2x1ZGVzKCI/Iik/IiYiOiI/IixJPWFzeW5jKCk9Pnt0cnl7bGV0IHg9YXdhaXQoYXdhaXQgZmV0Y2goYCR7JH0ke2t9bGltaXQ9JHtCfSZvZmZzZXQ9MGAse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKE8pcmV0dXJuO2lmKFkoeC5kZXZpY2VzPz9bXSksdHlwZW9mIHgudG90YWw9PT0ibnVtYmVyIilHKHgudG90YWwpfWNhdGNoe2lmKCFPKVkoW10pfX07SSgpO2xldCB3PXNldEludGVydmFsKEksSj83NTA6MzAwMCk7cmV0dXJuKCk9PntPPSEwLGNsZWFySW50ZXJ2YWwodyl9fSxbJCxRLHosSixCXSk7bGV0IEM9RSgoKT0+VigoTyk9Pk8rMSksW10pLFU9RSgoKT0+TigoTyk9Pk8rWCksW1hdKSxGPUUoKCk9Pk4oJFgpLFtdKSxMPUUoKCk9Pk4oWCksW1hdKSxIPXE+KEs/Lmxlbmd0aD8/MCk7cmV0dXJue2RldmljZXM6Syx0b3RhbDpxLHJlZnJlc2g6Qyxsb2FkTW9yZTpVLGxvYWRBbGw6RixyZXNldFBhZ2U6TCxoYXNNb3JlOkh9fXZhciBPNz17bWpwZWdGcHM6NjAsbWpwZWdRdWFsaXR5OjAuNyxtYXhEaW1lbnNpb246MCxoMjY0Qml0cmF0ZTo2MDAwMDAwLGgyNjRGcHM6NjB9LFFYPXt0cmFuc3BvcnQ6Imh0dHAiLGh0dHBDb2RlYzoiYXV0byIsd2ViUnRjQ29kZWM6ImgyNjQiLC4uLk83fTtmdW5jdGlvbiBKWCgkKXtyZXR1cm4gdHlwZW9mICQ9PT0ibnVtYmVyIiYmTnVtYmVyLmlzRmluaXRlKCQpPyQ6bnVsbH1mdW5jdGlvbiBGNygkLFEsSixYKXtsZXQgSz1KWCgkKTtyZXR1cm4gSz09bnVsbD9ROk1hdGgubWluKFgsTWF0aC5tYXgoSixLKSl9ZnVuY3Rpb24gQjMoJCxRLEosWCl7cmV0dXJuIE1hdGgucm91bmQoRjcoJCxRLEosWCkpfWZ1bmN0aW9uIFpYKCQpe2lmKCFBcnJheS5pc0FycmF5KCQpfHwkLmxlbmd0aD4xNilyZXR1cm4gbnVsbDtsZXQgUT1bXTtmb3IobGV0IEogb2YgJCl7aWYoIUp8fHR5cGVvZiBKIT09Im9iamVjdCIpcmV0dXJuIG51bGw7bGV0IFg9Si51cmxzO2lmKCFBcnJheS5pc0FycmF5KFgpfHxYLmxlbmd0aD09PTB8fFgubGVuZ3RoPjE2fHwhWC5ldmVyeSgocSk9PnR5cGVvZiBxPT09InN0cmluZyImJnEubGVuZ3RoPD0yMDQ4JiYvXihzdHVufHN0dW5zfHR1cm58dHVybnMpOi9pLnRlc3QocSkpKXJldHVybiBudWxsO2xldHt1c2VybmFtZTpLLGNyZWRlbnRpYWw6WX09SjtpZihLIT09dm9pZCAwJiZ0eXBlb2YgSyE9PSJzdHJpbmciKXJldHVybiBudWxsO2lmKFkhPT12b2lkIDAmJnR5cGVvZiBZIT09InN0cmluZyIpcmV0dXJuIG51bGw7US5wdXNoKHt1cmxzOlgsLi4udHlwZW9mIEs9PT0ic3RyaW5nIj97dXNlcm5hbWU6S306e30sLi4udHlwZW9mIFk9PT0ic3RyaW5nIj97Y3JlZGVudGlhbDpZfTp7fX0pfXJldHVybiBRfWZ1bmN0aW9uIEE4KCQ9e30sUT1RWCl7bGV0IFg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCQsImljZVNlcnZlcnMiKT9aWCgkLmljZVNlcnZlcnMpOlEuaWNlU2VydmVycyxLPVg9PT1udWxsP1EuaWNlU2VydmVyczpYJiZYLmxlbmd0aD4wP1g6dm9pZCAwO3JldHVybnt0cmFuc3BvcnQ6JC50cmFuc3BvcnQ9PT0iaHR0cCJ8fCQudHJhbnNwb3J0PT09IndlYnJ0YyI/JC50cmFuc3BvcnQ6US50cmFuc3BvcnQsaHR0cENvZGVjOiQuaHR0cENvZGVjPT09ImF1dG8ifHwkLmh0dHBDb2RlYz09PSJtanBlZyJ8fCQuaHR0cENvZGVjPT09ImgyNjQiPyQuaHR0cENvZGVjOlEuaHR0cENvZGVjLHdlYlJ0Y0NvZGVjOiQud2ViUnRjQ29kZWM9PT0idnA4Inx8JC53ZWJSdGNDb2RlYz09PSJ2cDkifHwkLndlYlJ0Y0NvZGVjPT09ImgyNjQiPyQud2ViUnRjQ29kZWM6US53ZWJSdGNDb2RlYywuLi5LP3tpY2VTZXJ2ZXJzOkt9Ont9LC4uLnE1KCQsUSl9fWZ1bmN0aW9uIHE1KCQ9e30sUT1PNyl7cmV0dXJue21qcGVnRnBzOkIzKCQubWpwZWdGcHMsUS5tanBlZ0ZwcywxLDEyMCksbWpwZWdRdWFsaXR5OkY3KCQubWpwZWdRdWFsaXR5LFEubWpwZWdRdWFsaXR5LDAuMDUsMSksbWF4RGltZW5zaW9uOkIzKCQubWF4RGltZW5zaW9uLFEubWF4RGltZW5zaW9uLDAsNDA5NiksaDI2NEJpdHJhdGU6QjMoJC5oMjY0Qml0cmF0ZSxRLmgyNjRCaXRyYXRlLDFlNSw1MDAwMDAwMCksaDI2NEZwczpCMygkLmgyNjRGcHMsUS5oMjY0RnBzLDEsMTIwKX19ZnVuY3Rpb24gRzUoJCl7cmV0dXJue21qcGVnRnBzOiQubWpwZWdGcHMsbWpwZWdRdWFsaXR5OiQubWpwZWdRdWFsaXR5LG1heERpbWVuc2lvbjokLm1heERpbWVuc2lvbixoMjY0Qml0cmF0ZTokLmgyNjRCaXRyYXRlLGgyNjRGcHM6JC5oMjY0RnBzfX1mdW5jdGlvbiBNNygkKXtsZXQgUT0kP3ttanBlZ0ZwczokLm1qcGVnRnBzLG1qcGVnUXVhbGl0eTokLm1qcGVnUXVhbGl0eSxtYXhEaW1lbnNpb246JC5tYXhEaW1lbnNpb24saDI2NEJpdHJhdGU6JC5oMjY0Qml0cmF0ZSxoMjY0RnBzOiQuaDI2NEZwc306e307aWYoJD8udHJhbnNwb3J0PT09IndlYnJ0YyIpcmV0dXJuIEE4KHt0cmFuc3BvcnQ6IndlYnJ0YyIsd2ViUnRjQ29kZWM6JC5jb2RlYyxpY2VTZXJ2ZXJzOiQuaWNlU2VydmVycywuLi5RfSk7cmV0dXJuIEE4KHt0cmFuc3BvcnQ6Imh0dHAiLGh0dHBDb2RlYzokPy5jb2RlYz8/ImF1dG8iLC4uLlF9KX1mdW5jdGlvbiBrOCgkLFEpe3JldHVybiBBOCh7Li4uJCwuLi5RfSwkKX1mdW5jdGlvbiBWNSgkLFEpe2xldCBKPUc1KCQpLFg9cTUoey4uLkosLi4uUX0sSik7aWYoWC5tanBlZ0Zwcz09PUoubWpwZWdGcHMmJlgubWpwZWdRdWFsaXR5PT09Si5tanBlZ1F1YWxpdHkmJlgubWF4RGltZW5zaW9uPT09Si5tYXhEaW1lbnNpb24mJlguaDI2NEJpdHJhdGU9PT1KLmgyNjRCaXRyYXRlJiZYLmgyNjRGcHM9PT1KLmgyNjRGcHMpcmV0dXJuICQ7cmV0dXJuey4uLiQsLi4uWH19dmFyIGs3PSJzZXJ2ZS1zaW06Y29kZWMiLFhYPTMwMDA7ZnVuY3Rpb24gQTcoJCl7bGV0IFE9TTcoJCk7aWYoUS50cmFuc3BvcnQhPT0iaHR0cCJ8fFEuaHR0cENvZGVjIT09ImF1dG8iKXJldHVybiBRO3RyeXtsZXQgSj13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oazcpO2lmKEo9PT0iYXV0byJ8fEo9PT0ibWpwZWcifHxKPT09ImgyNjQiKXJldHVybiBrOChRLHtodHRwQ29kZWM6Sn0pfWNhdGNoe31yZXR1cm4gUX1mdW5jdGlvbiBXNyh7ZGV2aWNlOiQsZW5kcG9pbnQ6USxpbml0aWFsU2V0dGluZ3M6Sn0pe2xldFtYLEtdPUEoKCk9PkE3KEopKSxbWSxxXT1BKCExKSxHPVQoWCksQj1UKCExKSxOPVQoMCksej1UKG51bGwpLFY9VChudWxsKTtiKCgpPT57KytOLmN1cnJlbnQ7bGV0IEY9QTcoSik7aWYoei5jdXJyZW50Py5hYm9ydCgpLFYuY3VycmVudD8uYWJvcnQoKSx6LmN1cnJlbnQ9bnVsbCxWLmN1cnJlbnQ9bnVsbCxHLmN1cnJlbnQ9RixCLmN1cnJlbnQ9ITEsSyhGKSxxKCExKSwhUSlyZXR1cm47bGV0IEw9ITEsSD0hMSxPPWFzeW5jKCk9PntpZihMfHxCLmN1cnJlbnR8fHouY3VycmVudClyZXR1cm47bGV0IHc9KytOLmN1cnJlbnQsUD1uZXcgQWJvcnRDb250cm9sbGVyO3ouY3VycmVudD1QO3RyeXtsZXQgeD1hd2FpdCBmZXRjaChRLHtjYWNoZToibm8tc3RvcmUiLHNpZ25hbDpQLnNpZ25hbH0pO2lmKCF4Lm9rKXRocm93IEVycm9yKGBTdHJlYW0gc2V0dGluZ3MgcmVxdWVzdCBmYWlsZWQgKCR7eC5zdGF0dXN9KWApO2xldCB0PXE1KGF3YWl0IHguanNvbigpLEc1KEcuY3VycmVudCkpO2lmKCFQLnNpZ25hbC5hYm9ydGVkJiZOLmN1cnJlbnQ9PT13KXtsZXQgaD1HLmN1cnJlbnQsbD1WNShoLHQpO2lmKGwhPT1oKUcuY3VycmVudD1sLEsobCl9SD0hMX1jYXRjaCh4KXtpZighUC5zaWduYWwuYWJvcnRlZCYmIUgpSD0hMCxjb25zb2xlLndhcm4oIkZhaWxlZCB0byBsb2FkIHN0cmVhbSBzZXR0aW5ncyIseCl9ZmluYWxseXtpZih6LmN1cnJlbnQ9PT1QKXouY3VycmVudD1udWxsfX07TygpO2xldCBrPSgpPT57aWYodHlwZW9mIGRvY3VtZW50PiJ1Inx8ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlIT09ImhpZGRlbiIpTygpfSxJPXNldEludGVydmFsKGssWFgpO2lmKHR5cGVvZiB3aW5kb3c8InUiKXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsayk7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixrKTtyZXR1cm4oKT0+e2lmKEw9ITAsY2xlYXJJbnRlcnZhbChJKSx0eXBlb2Ygd2luZG93PCJ1Iil3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLGspO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsayk7ei5jdXJyZW50Py5hYm9ydCgpLFYuY3VycmVudD8uYWJvcnQoKSx6LmN1cnJlbnQ9bnVsbCxWLmN1cnJlbnQ9bnVsbH19LFskLFEsSl0pO2xldCBDPUUoKEYpPT57aWYoRi5odHRwQ29kZWMhPT12b2lkIDApdHJ5e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrNyxGLmh0dHBDb2RlYyl9Y2F0Y2h7fWxldCBMPWs4KEcuY3VycmVudCxGKTtHLmN1cnJlbnQ9TCxLKEwpfSxbXSksVT1FKChGKT0+e2lmKCFRfHxCLmN1cnJlbnR8fE9iamVjdC5rZXlzKEYpLmxlbmd0aD09PTApcmV0dXJuO2xldCBMPUcuY3VycmVudCxIPVY1KEwsRik7Ry5jdXJyZW50PUgsSyhIKSx6LmN1cnJlbnQ/LmFib3J0KCksei5jdXJyZW50PW51bGw7bGV0IE89KytOLmN1cnJlbnQsaz1uZXcgQWJvcnRDb250cm9sbGVyO1YuY3VycmVudD1rLEIuY3VycmVudD0hMCxxKCEwKSxmZXRjaChRLHttZXRob2Q6IlBBVENIIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoRiksc2lnbmFsOmsuc2lnbmFsfSkudGhlbihhc3luYyhJKT0+e2lmKCFJLm9rKXRocm93IEVycm9yKGBTdHJlYW0gc2V0dGluZ3MgdXBkYXRlIGZhaWxlZCAoJHtJLnN0YXR1c30pYCk7bGV0IHc9cTUoYXdhaXQgSS5qc29uKCksRzUoSCkpO2lmKCFrLnNpZ25hbC5hYm9ydGVkJiZOLmN1cnJlbnQ9PT1PKXtsZXQgUD1WNShHLmN1cnJlbnQsdyk7Ry5jdXJyZW50PVAsSyhQKX19KS5jYXRjaCgoSSk9PntpZihrLnNpZ25hbC5hYm9ydGVkKXJldHVybjtpZihjb25zb2xlLndhcm4oIkZhaWxlZCB0byB1cGRhdGUgc3RyZWFtIHNldHRpbmdzIixJKSxOLmN1cnJlbnQ9PT1PKXtsZXQgdz1WNShHLmN1cnJlbnQsRzUoTCkpO0cuY3VycmVudD13LEsodyl9fSkuZmluYWxseSgoKT0+e2lmKFYuY3VycmVudD09PWspVi5jdXJyZW50PW51bGw7aWYoIWsuc2lnbmFsLmFib3J0ZWQmJk4uY3VycmVudD09PU8pQi5jdXJyZW50PSExLHEoITEpfSl9LFtRXSk7cmV0dXJue3NldHRpbmdzOlgsdXBkYXRlUGxheWJhY2s6Qyx1cGRhdGVFbmNvZGVyOlUscGVuZGluZzpZLGVuY29kZXJTZXR0aW5nc0F2YWlsYWJsZTohIVF9fXZhciBXOD17c3RyZWFtZWQ6ITEsZmVsbEJhY2s6ITF9O2Z1bmN0aW9uIF83KCQsUSl7c3dpdGNoKFEpe2Nhc2UiZGVjb2RlZC1mcmFtZSI6cmV0dXJuICQuc3RyZWFtZWQ/JDp7Li4uJCxzdHJlYW1lZDohMH07Y2FzZSJ0aW1lb3V0IjpyZXR1cm4gJC5zdHJlYW1lZHx8JC5mZWxsQmFjaz8kOnsuLi4kLGZlbGxCYWNrOiEwfTtjYXNlImVycm9yIjpyZXR1cm4gJC5mZWxsQmFjaz8kOnsuLi4kLGZlbGxCYWNrOiEwfTtjYXNlInJlc2V0IjpyZXR1cm4gVzh9fXZhciBENz00MDAwO3ZhciBLWD17S2V5QTo0LEtleUI6NSxLZXlDOjYsS2V5RDo3LEtleUU6OCxLZXlGOjksS2V5RzoxMCxLZXlIOjExLEtleUk6MTIsS2V5SjoxMyxLZXlLOjE0LEtleUw6MTUsS2V5TToxNixLZXlOOjE3LEtleU86MTgsS2V5UDoxOSxLZXlROjIwLEtleVI6MjEsS2V5UzoyMixLZXlUOjIzLEtleVU6MjQsS2V5VjoyNSxLZXlXOjI2LEtleVg6MjcsS2V5WToyOCxLZXlaOjI5LERpZ2l0MTozMCxEaWdpdDI6MzEsRGlnaXQzOjMyLERpZ2l0NDozMyxEaWdpdDU6MzQsRGlnaXQ2OjM1LERpZ2l0NzozNixEaWdpdDg6MzcsRGlnaXQ5OjM4LERpZ2l0MDozOSxFbnRlcjo0MCxFc2NhcGU6NDEsQmFja3NwYWNlOjQyLFRhYjo0MyxTcGFjZTo0NCxNaW51czo0NSxFcXVhbDo0NixCcmFja2V0TGVmdDo0NyxCcmFja2V0UmlnaHQ6NDgsQmFja3NsYXNoOjQ5LFNlbWljb2xvbjo1MSxRdW90ZTo1MixCYWNrcXVvdGU6NTMsQ29tbWE6NTQsUGVyaW9kOjU1LFNsYXNoOjU2LENhcHNMb2NrOjU3LEYxOjU4LEYyOjU5LEYzOjYwLEY0OjYxLEY1OjYyLEY2OjYzLEY3OjY0LEY4OjY1LEY5OjY2LEYxMDo2NyxGMTE6NjgsRjEyOjY5LFByaW50U2NyZWVuOjcwLFNjcm9sbExvY2s6NzEsUGF1c2U6NzIsSW5zZXJ0OjczLEhvbWU6NzQsUGFnZVVwOjc1LERlbGV0ZTo3NixFbmQ6NzcsUGFnZURvd246NzgsQXJyb3dSaWdodDo3OSxBcnJvd0xlZnQ6ODAsQXJyb3dEb3duOjgxLEFycm93VXA6ODIsTnVtTG9jazo4MyxOdW1wYWREaXZpZGU6ODQsTnVtcGFkTXVsdGlwbHk6ODUsTnVtcGFkU3VidHJhY3Q6ODYsTnVtcGFkQWRkOjg3LE51bXBhZEVudGVyOjg4LE51bXBhZDE6ODksTnVtcGFkMjo5MCxOdW1wYWQzOjkxLE51bXBhZDQ6OTIsTnVtcGFkNTo5MyxOdW1wYWQ2Ojk0LE51bXBhZDc6OTUsTnVtcGFkODo5NixOdW1wYWQ5Ojk3LE51bXBhZDA6OTgsTnVtcGFkRGVjaW1hbDo5OSxDb250cm9sTGVmdDoyMjQsU2hpZnRMZWZ0OjIyNSxBbHRMZWZ0OjIyNixNZXRhTGVmdDoyMjcsQ29udHJvbFJpZ2h0OjIyOCxTaGlmdFJpZ2h0OjIyOSxBbHRSaWdodDoyMzAsTWV0YVJpZ2h0OjIzMX07ZnVuY3Rpb24gUDcoJCl7cmV0dXJuIEtYWyRdPz9udWxsfXZhciBfOD0zMjAsVDc9NzYwLEQ4PTMwMDtmdW5jdGlvbiBQOCgkLFEpe2lmKCEkKXJldHVybiBudWxsO2lmKCEkLmRldmljZSlyZXR1cm4gJDtpZighJC5wcm94eUhlbHBlcnMpcmV0dXJuICQ7bGV0IFg9YCR7JC5iYXNlUGF0aD09PSIvIj8iIjooJC5iYXNlUGF0aD8/IiIpLnJlcGxhY2UoL1wvKyQvLCIiKX0vaGVscGVyLyR7ZW5jb2RlVVJJQ29tcG9uZW50KCQuZGV2aWNlKX1gLEs9YCR7US5wcm90b2NvbH0vLyR7US5ob3N0fWAsWT1RLnByb3RvY29sPT09Imh0dHBzOiI/IndzczoiOiJ3czoiO3JldHVybnsuLi4kLHVybDpgJHtLfSR7WH1gLHN0cmVhbVVybDpgJHtLfSR7WH0vc3RyZWFtLm1qcGVnYCx3c1VybDpgJHtZfS8vJHtRLmhvc3R9JHtYfS93c2B9fWZ1bmN0aW9uIEU3KCQsUSl7bGV0IEo9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEpKSxYPW5ldyBVaW50OEFycmF5KDErSi5sZW5ndGgpO3JldHVybiBYWzBdPSQsWC5zZXQoSiwxKSxYfWZ1bmN0aW9uIFlYKCQsUSxKPTMyKXtsZXQgWD1bLi4uJCxRXTtyZXR1cm4gWC5sZW5ndGg+Sj9YLnNsaWNlKFgubGVuZ3RoLUopOlh9ZnVuY3Rpb24gVDgoJCxRLEo9RGF0ZS5ub3coKSxYPTE1MDApe2xldCBLPVEuZmlsdGVyKChZKT0+Si1ZLmNyZWF0ZWRBdDw9WCk7aWYoISR8fCQucmVhZHlTdGF0ZSE9PTEpcmV0dXJuIEs7Zm9yKGxldCBZIG9mIEspJC5zZW5kKEU3KFkudGFnLFkucGF5bG9hZCkuYnVmZmVyKTtyZXR1cm5bXX1mdW5jdGlvbiB3NygkLFEsSixYLEs9RGF0ZS5ub3coKSl7bGV0IFk9VDgoJCxRLEspO2lmKCQ/LnJlYWR5U3RhdGU9PT0xKXJldHVybiAkLnNlbmQoRTcoSixYKS5idWZmZXIpLFk7cmV0dXJuIFlYKFkse3RhZzpKLHBheWxvYWQ6WCxjcmVhdGVkQXQ6S30pfXZhciBxWD17aDI2NDpbImgyNjQiLCJ2cDgiLCJ2cDkiXSx2cDk6WyJ2cDkiLCJ2cDgiXSx2cDg6WyJ2cDgiXX07ZnVuY3Rpb24gR1goJCxRKXtsZXQgSj1xWFskXSxYPUouaW5kZXhPZihRKTtpZihYPT09LTEpcmV0dXJuIEpbMF0/P251bGw7cmV0dXJuIEpbWCsxXT8/bnVsbH1mdW5jdGlvbiBJNygkLFEsSil7aWYoSi5raW5kPT09InBlcm1hbmVudCIpcmV0dXJue3R5cGU6InN3aXRjaC10by1odHRwIn07aWYoSi5jb2RlYyE9PVEpcmV0dXJuIG51bGw7bGV0IFg9R1goJCxRKTtyZXR1cm4gWCYmWCE9PVE/e3R5cGU6InJldHJ5LWNvZGVjIixjb2RlYzpYfTp7dHlwZToic3dpdGNoLXRvLWh0dHAifX1mdW5jdGlvbiBiNygkKXtyZXR1cm4gJD9gJHskLmRldmljZX06JHskLnBpZH06JHskLnN0cmVhbVVybH06JHskLndzVXJsfToke0pTT04uc3RyaW5naWZ5KCQuc3RyZWFtU2V0dGluZ3M/P251bGwpfWA6IiJ9ZnVuY3Rpb24gVlgoKXtsZXRbJCxRXT1BKCgpPT5QOChhMih3aW5kb3cuX19TSU1fUFJFVklFV19fKSx3aW5kb3cubG9jYXRpb24pKSxbSixYXT1BKCExKSxbSyxZXT1BKCgpPT57bGV0IHA9YTIod2luZG93Ll9fU0lNX1BSRVZJRVdfXyk7aWYocClyZXR1cm4gcC5kZXZpY2U7cmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJkZXZpY2UiKX0pLFtxLEddPUEoITEpLFtCLE5dPUEoITEpLFt6LFZdPUEoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtyZXR1cm4gd2luZG93LmlubmVyV2lkdGg+PUQ4KzUyMH0pLHt3aWR0aDpDLG9uUG9pbnRlckRvd246VX09VjMoInNlcnZlLXNpbTpkZXZpY2Utc2lkZWJhci13aWR0aCIsRDgsMjQwLDY0MCwicmlnaHQiKSxbRixMXT1BKG51bGwpLEg9d2luZG93Ll9fU0lNX1BSRVZJRVdfXyxPPUg/LmdyaWRBcGlFbmRwb2ludD8/ajEoImdyaWQvYXBpIiksaz1IPy5ncmlkU3RhcnRFbmRwb2ludD8/ajEoImdyaWQvYXBpL3N0YXJ0IiksST1IPy5ncmlkU2h1dGRvd25FbmRwb2ludD8/ajEoImdyaWQvYXBpL3NodXRkb3duIiksW3csUF09QSh7fSksW3gsdF09QSh7fSksW2gsbF09QSh7fSkscj1PYmplY3QudmFsdWVzKHcpLnNvbWUoQm9vbGVhbil8fE9iamVjdC52YWx1ZXMoeCkuc29tZShCb29sZWFuKSx7ZGV2aWNlczpvLHRvdGFsOmkscmVmcmVzaDokMSxsb2FkTW9yZTp6MSxsb2FkQWxsOmMscmVzZXRQYWdlOm0saGFzTW9yZTpKMX09QzcoTywhMCxyKSxHMT0hIShLJiZvPy5maW5kKChwKT0+cC5kZXZpY2U9PT1LKT8uaGVscGVyKSxPMT1FKChwKT0+e1kocCk7dHJ5e2xldCBqPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO2ouc2VhcmNoUGFyYW1zLnNldCgiZGV2aWNlIixwKSx3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwiIixqLnRvU3RyaW5nKCkpfWNhdGNoe319LFtdKSxuPUUoYXN5bmMocCxqPTIwMDAwKT0+e2xldCBxMT1EYXRlLm5vdygpK2o7d2hpbGUoRGF0ZS5ub3coKTxxMSl7dHJ5e2lmKCgoYXdhaXQoYXdhaXQgZmV0Y2goTyx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCkpLmRldmljZXM/P1tdKS5zb21lKChXMSk9PlcxLmRldmljZT09PXAmJlcxLmhlbHBlcikpcmV0dXJuITB9Y2F0Y2h7fWF3YWl0IG5ldyBQcm9taXNlKChMMSk9PnNldFRpbWVvdXQoTDEsNDAwKSl9cmV0dXJuITF9LFtPXSksWDE9RShhc3luYyhwKT0+e1AoKGopPT4oey4uLmosW3BdOiEwfSkpLGwoKGopPT4oey4uLmosW3BdOm51bGx9KSk7dHJ5e2xldCBqPWF3YWl0IGZldGNoKGsse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt1ZGlkOnB9KX0pLHExPWF3YWl0IGouanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighai5va3x8IXExLm9rKXtsKChMMSk9Pih7Li4uTDEsW3BdOnExLmVycm9yPz9gSFRUUCAke2ouc3RhdHVzfWB9KSk7cmV0dXJufWF3YWl0IG4ocCl9Y2F0Y2goail7bCgocTEpPT4oey4uLnExLFtwXTpqPy5tZXNzYWdlPz8iUmVxdWVzdCBmYWlsZWQifSkpfWZpbmFsbHl7UCgoaik9Pih7Li4uaixbcF06ITF9KSksJDEoKX19LFtrLG4sJDFdKSxWMT1FKGFzeW5jKHApPT57dCgoaik9Pih7Li4uaixbcF06ITB9KSksbCgoaik9Pih7Li4uaixbcF06bnVsbH0pKTt0cnl7bGV0IGo9YXdhaXQgZmV0Y2goSSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6cH0pfSkscTE9YXdhaXQgai5qc29uKCkuY2F0Y2goKCk9Pih7fSkpO2lmKCFqLm9rfHwhcTEub2spbCgoTDEpPT4oey4uLkwxLFtwXTpxMS5lcnJvcj8/YEhUVFAgJHtqLnN0YXR1c31gfSkpfWNhdGNoKGope2woKHExKT0+KHsuLi5xMSxbcF06aj8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e3QoKGopPT4oey4uLmosW3BdOiExfSkpLCQxKCl9fSxbSSwkMV0pO2IoKCk9PntpZihLKXJldHVybjtpZigkPy5kZXZpY2Upe1koJC5kZXZpY2UpO3JldHVybn1pZighb3x8by5sZW5ndGg9PT0wKXJldHVybjtsZXQgcD1vLmZpbmQoKGopPT5qLmhlbHBlcik/P28uZmluZCgoaik9Pmouc3RhdGU9PT0iQm9vdGVkIik/P29bMF07aWYocClZKHAuZGV2aWNlKX0sW0ssJD8uZGV2aWNlLG9dKSxiKCgpPT57bGV0IHA9YCR7ajEoImFwaS9ldmVudHMiKX0ke0s/YD9kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoSyl9YDoiIn1gLGo9KEwxKT0+e1EoKGsxKT0+e2lmKEwxPVA4KGEyKEwxKSx3aW5kb3cubG9jYXRpb24pLGI3KGsxKT09PWI3KEwxKSlyZXR1cm4gazE7aWYoTDEpd2luZG93Ll9fU0lNX1BSRVZJRVdfXz1MMTtlbHNlIGlmKHdpbmRvdy5fX1NJTV9QUkVWSUVXX18pe2xldHtiYXNlUGF0aDpXMSxleGVjVG9rZW46bjF9PXdpbmRvdy5fX1NJTV9QUkVWSUVXX187d2luZG93Ll9fU0lNX1BSRVZJRVdfXz17YmFzZVBhdGg6VzEsZXhlY1Rva2VuOm4xfX1yZXR1cm4gTDF9KX0scTE9UzAocCk7cmV0dXJuIHExLm9ubWVzc2FnZT0oTDEpPT57dHJ5e2ooYTIoSlNPTi5wYXJzZShMMS5kYXRhKSkpfWNhdGNoe319LCgpPT5xMS5jbG9zZSgpfSxbSyxHMV0pLGIoKCk9PntpZighJD8ubG9nc0VuZHBvaW50KXJldHVybjtsZXQgcD1TMCgkLmxvZ3NFbmRwb2ludCksaj1uZXcgTWFwLHExPVsiIzhiZTlmZCIsIiM1MGZhN2IiLCIjZmZiODZjIiwiI2ZmNzljNiIsIiNiZDkzZjkiLCIjZjFmYThjIiwiIzYyNzJhNCIsIiNmZjU1NTUiLCIjNjlmZjk0IiwiI2Q2YWNmZiIsIiNmZmZmYTUiLCIjYTRmZmZmIiwiI2ZmNmU2ZSIsIiNjYWE5ZmEiLCIjNWFmNzhlIl07ZnVuY3Rpb24gTDEobjEpe2xldCBBMT1qLmdldChuMSk7aWYoIUExKXtsZXQgdjE9MDtmb3IobGV0IF8xPTA7XzE8bjEubGVuZ3RoO18xKyspdjE9KHYxPDw1KS12MStuMS5jaGFyQ29kZUF0KF8xKXwwO0ExPXExW01hdGguYWJzKHYxKSVxMS5sZW5ndGhdLGouc2V0KG4xLEExKX1yZXR1cm4gQTF9bGV0IGsxPSIiLFcxPSExO3JldHVybiBwLm9ubWVzc2FnZT0objEpPT57dHJ5e2xldCBBMT1KU09OLnBhcnNlKG4xLmRhdGEpLHYxPUExLnByb2Nlc3NJbWFnZVBhdGg/LnNwbGl0KCIvIikucG9wKCk/P0ExLnNlbmRlckltYWdlUGF0aD8uc3BsaXQoIi8iKS5wb3AoKT8/IiIsXzE9QTEuc3Vic3lzdGVtPz8iIixsMT1BMS5jYXRlZ29yeT8/IiIsVTE9QTEuZXZlbnRNZXNzYWdlPz8iIjtpZighVTEpcmV0dXJuO2lmKHYxIT09azEpe2lmKFcxKWNvbnNvbGUuZ3JvdXBFbmQoKTtsZXQgZzE9TDEodjEpO2NvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoYCVjJHt2MX0ke18xP2AgJWMke18xfSR7bDE/IjoiK2wxOiIifWA6IiJ9YCxgY29sb3I6JHtnMX07Zm9udC13ZWlnaHQ6Ym9sZGAsLi4uXzE/WyJjb2xvcjojODg4O2ZvbnQtd2VpZ2h0Om5vcm1hbCJdOltdKSxXMT0hMCxrMT12MX1sZXQgdzE9KEExLm1lc3NhZ2VUeXBlPz8iIikudG9Mb3dlckNhc2UoKSxkMT1fMSYmdjE9PT1rMT9gJWMke2wxfHxfMX0lYyBgOiIiLHQxPWQxP1siY29sb3I6Izg4ODtmb250LXN0eWxlOml0YWxpYyIsImNvbG9yOmluaGVyaXQiXTpbXTtpZih3MT09PSJmYXVsdCJ8fHcxPT09ImVycm9yIiljb25zb2xlLmxvZyhgJHtkMX0lYyR7VTF9YCwuLi50MSwiY29sb3I6I2ZmNTU1NSIpO2Vsc2UgaWYodzE9PT0iZGVidWciKWNvbnNvbGUubG9nKGAke2QxfSVjJHtVMX1gLC4uLnQxLCJjb2xvcjojNjI3MmE0Iik7ZWxzZSBjb25zb2xlLmxvZyhgJHtkMX0lYyR7VTF9YCwuLi50MSwiY29sb3I6aW5oZXJpdCIpfWNhdGNoe319LCgpPT57aWYoVzEpY29uc29sZS5ncm91cEVuZCgpO3AuY2xvc2UoKX19LFskPy5sb2dzRW5kcG9pbnRdKTtsZXQgUz1LPz8kPy5kZXZpY2U/P251bGwsZz1vPy5maW5kKChwKT0+cC5kZXZpY2U9PT1TKT8/bnVsbCxfPSEhJCYmJC5kZXZpY2U9PT1TLHU7aWYoXyYmJCl1PVooQlgse2NvbmZpZzokLGRldmljZU5hbWU6Zz8ubmFtZT8/bnVsbCxkZXZpY2VSdW50aW1lOmc/LnJ1bnRpbWU/P251bGwsY2hyb21lOmc/LmNocm9tZT8/bnVsbCxheE92ZXJsYXlFbmFibGVkOnEsc2V0QXhPdmVybGF5RW5hYmxlZDpHLGRldnRvb2xzT3BlbjpCLHNldERldnRvb2xzT3BlbjpOLGdyaWRPcGVuOnosc2V0R3JpZE9wZW46VixncmlkUGFuZWxXaWR0aDpDLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpGLHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpMLHN0cmVhbWluZzpKLHNldFN0cmVhbWluZzpYfSk7ZWxzZXtsZXQgcD16P0MrMzY6MjQ7dT1aKCJkaXYiLHtjbGFzc05hbWU6Imgtc2NyZWVuIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0zIGJnLXBhZ2UgZm9udC1zeXN0ZW0gYm94LWJvcmRlciBbdHJhbnNpdGlvbjpwYWRkaW5nXzAuMjVzX2Vhc2VdIixzdHlsZTp7cGFkZGluZ0xlZnQ6cCxwYWRkaW5nUmlnaHQ6MjR9LGNoaWxkcmVuOmc/WihINix7bmFtZTpnLm5hbWUscnVudGltZTpnLnJ1bnRpbWUsY2hyb21lOmcuY2hyb21lPz9udWxsLHBsYWNlaG9sZGVyQXNzZXQ6Zy5wbGFjZWhvbGRlckFzc2V0Pz9udWxsLGJ1c3k6ISFnLmhlbHBlcnx8ISF3W2cuZGV2aWNlXSxidXN5TGFiZWw6Zy5oZWxwZXI/IkNvbm5lY3RpbmfigKYiOiJTdGFydGluZ+KApiIsZXJyb3I6aFtnLmRldmljZV0/P251bGwsb25TdGFydDooKT0+WDEoZy5kZXZpY2UpfSk6WigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWNlbnRlciIsY2hpbGRyZW46W1ooImgxIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxOHB4XSBtLTAgdGV4dC13aGl0ZS85MCIsY2hpbGRyZW46Ik5vIHNpbXVsYXRvcnMgYXZhaWxhYmxlIn0pLFooInAiLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNTUgdGV4dC1bMTRweF0gbWF4LXctMTIwIixjaGlsZHJlbjpbIkNyZWF0ZSBhIHNpbXVsYXRvciBpbiBYY29kZSwgb3Igc3RhcnQgb25lIHdpdGgiLCIgIixaKCJjb2RlIix7Y2xhc3NOYW1lOiJiZy1bIzIyMl0gcHgtMS41IHB5LTAuNSByb3VuZGVkIHRleHQtWzEzcHhdIixjaGlsZHJlbjoiYnVueCBAZXhwby9zZXJ2ZS1zaW0gLS1kZXRhY2gifSksIi4iXX0pXX0pfSl9cmV0dXJuIFooWjEse2NoaWxkcmVuOlt1LFooczYse30pLFooazYse29wZW46eixvbkNsb3NlOigpPT5WKCExKSx3aWR0aDpDLHNpZGU6ImxlZnQiLGRldmljZXM6byx0b3RhbDppLGhhc01vcmU6SjEsb25Mb2FkTW9yZTp6MSxvbkxvYWRBbGw6YyxvblJlc2V0UGFnZTptLHNlbGVjdGVkVWRpZDpTLG9uU2VsZWN0Ok8xLHN0YXJ0aW5nOncsc2h1dHRpbmdEb3duOngsb25TaHV0ZG93bjpWMX0pLFoobzUse3BhbmVsV2lkdGg6Qyx2aXNpYmxlOnosb25Qb2ludGVyRG93bjpVLGFyaWFMYWJlbDoiUmVzaXplIHNpbXVsYXRvcnMgc2lkZWJhciIsc2lkZToibGVmdCJ9KSxaKFY2LHtvcGVuOnosb25DbGljazooKT0+VighMCl9KV19KX1mdW5jdGlvbiBCWCh7Y29uZmlnOiQsZGV2aWNlTmFtZTpRLGRldmljZVJ1bnRpbWU6SixjaHJvbWU6WCxheE92ZXJsYXlFbmFibGVkOkssc2V0QXhPdmVybGF5RW5hYmxlZDpZLGRldnRvb2xzT3BlbjpxLHNldERldnRvb2xzT3BlbjpHLGdyaWRPcGVuOkIsc2V0R3JpZE9wZW46TixncmlkUGFuZWxXaWR0aDp6LHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpWLHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpDLHN0cmVhbWluZzpVLHNldFN0cmVhbWluZzpGfSl7YigoKT0+e2RvY3VtZW50LnRpdGxlPVE/YFNpbXVsYXRvciAtICR7UX1gOiJTaW11bGF0b3IgUHJldmlldyJ9LFtRXSk7bGV0IEw9STAoUSksSD1INygkLmRldnRvb2xzRW5kcG9pbnQ/P2oxKCJkZXZ0b29scyIpLHEpO2IoKCk9PntpZighcSlyZXR1cm47aWYoViYmSC50YXJnZXRzLnNvbWUoKFIpPT5SLmlkPT09VikpcmV0dXJuO0MoSC50YXJnZXRzLmxlbmd0aD09PTE/SC50YXJnZXRzWzBdLmlkOm51bGwpfSxbcSxILnRhcmdldHMsVixDXSksYigoKT0+e0MobnVsbCl9LFskLmRldmljZSxDXSk7bGV0IE89WjcoKSxrPVc3KHtkZXZpY2U6JC5kZXZpY2UsZW5kcG9pbnQ6JC5zdHJlYW1TZXR0aW5nc0VuZHBvaW50LGluaXRpYWxTZXR0aW5nczokLnN0cmVhbVNldHRpbmdzfSksST1rLnNldHRpbmdzLHc9ay51cGRhdGVQbGF5YmFjayxQPUkudHJhbnNwb3J0PT09IndlYnJ0YyIseD1UKG51bGwpLHQ9UCxbaCxsXT1BKG51bGwpLHI9SS53ZWJSdGNDb2RlYyxvPWg/P3IsaT1HNyh7b2ZmZXJVcmw6ZzUoJCksY2xvc2VVcmw6ZTkoJCksZW5hYmxlZDp0LGNvZGVjOm8saWNlU2VydmVyczpJLmljZVNlcnZlcnN9KSxbJDEsejFdPWkwKF83LFc4KSxbY109QSgoKT0+bmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoImNvZGVjIik9PT0ibWpwZWciKSxtPUkuaHR0cENvZGVjPT09Im1qcGVnIixKMT0hdCYmIW0mJk8uc3VwcG9ydGVkJiYhJDEuZmVsbEJhY2smJiFjLEcxPUo3KEoxfHx0P251bGw6dDkoJCkpO2IoKCk9PntGKCExKSx6MSgicmVzZXQiKSxsKG51bGwpfSxbJC5zdHJlYW1VcmwsRixJLnRyYW5zcG9ydCxJLmh0dHBDb2RlYyxJLndlYlJ0Y0NvZGVjXSksYigoKT0+e2lmKCFQfHwhaS5mYWlsdXJlKXJldHVybjtpZih4LmN1cnJlbnQ9PT1pLmZhaWx1cmUuc2Vzc2lvbklkKXJldHVybjt4LmN1cnJlbnQ9aS5mYWlsdXJlLnNlc3Npb25JZDtsZXQgUj1JNyhyLG8saS5mYWlsdXJlKTtpZighUilyZXR1cm47aWYoUi50eXBlPT09InN3aXRjaC10by1odHRwIil7dyh7dHJhbnNwb3J0OiJodHRwIn0pO3JldHVybn1sKFIuY29kZWMpfSxbcixvLHcsUCxpLmZhaWx1cmVdKSxiKCgpPT57aWYoIUoxKXJldHVybjtsZXQgUj1zZXRUaW1lb3V0KCgpPT56MSgidGltZW91dCIpLEQ3KTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KFIpfSxbSjEsJC5zdHJlYW1VcmxdKTtsZXRbTzEsbl09QShudWxsKSxbWDEsVjFdPUEobnVsbCksUz1YMSxnPU8xPz9TPz9OMihMLFEpLF89dzUoTCxnKSx1PXoyKEwsZykscD1FNShnKSxqPUcyKGcpLHExPWo/ai53aWR0aC9qLmhlaWdodDoxLEwxPXUwKGcpLGsxPSEhWCYmIUwxLFcxPWsxP1guZnJhbWUud2lkdGgvWC5zY3JlZW4ud2lkdGg6MSxuMT11KlcxLEExPWsxP1guZnJhbWUud2lkdGgvWC5mcmFtZS5oZWlnaHQ6cTEsdjE9azE/YCR7WC5mcmFtZS53aWR0aH0gLyAke1guZnJhbWUuaGVpZ2h0fWA6cCxfMT1UKG51bGwpLGwxPVQoW10pO2IoKCk9PntsZXQgUj0hMSxRMT1udWxsLFc9bnVsbDtsMS5jdXJyZW50PVtdO2xldCBNPSgpPT57aWYoUnx8UTEpcmV0dXJuO1ExPXNldFRpbWVvdXQoKCk9PntRMT1udWxsLHkoKX0sMTAwMCl9LHk9KCk9PntsZXQgdj1uZXcgV2ViU29ja2V0KCQud3NVcmwpO3YuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLFc9dixfMS5jdXJyZW50PXYsdi5vbm9wZW49KCk9PntsMS5jdXJyZW50PVQ4KHYsbDEuY3VycmVudCl9LHYub25tZXNzYWdlPShlKT0+e2lmKCEoZS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgWTE9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhKTtpZihZMS5sZW5ndGg8MXx8WTFbMF0hPT0xMzApcmV0dXJuO3RyeXtsZXQgQzE9SlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoWTEuc3ViYXJyYXkoMSkpKTtpZihDMS53aWR0aDw9MHx8QzEuaGVpZ2h0PD0wKXJldHVybjtWMSgoRDEpPT5EMSYmRDEud2lkdGg9PT1DMS53aWR0aCYmRDEuaGVpZ2h0PT09QzEuaGVpZ2h0JiZEMS5vcmllbnRhdGlvbj09PUMxLm9yaWVudGF0aW9uP0QxOkMxKX1jYXRjaHt9fSx2Lm9uY2xvc2U9KCk9PntpZihfMS5jdXJyZW50PT09dilfMS5jdXJyZW50PW51bGw7TSgpfSx2Lm9uZXJyb3I9KCk9Pnt2LmNsb3NlKCl9fTtyZXR1cm4geSgpLCgpPT57aWYoUj0hMCxRMSljbGVhclRpbWVvdXQoUTEpO2lmKF8xLmN1cnJlbnQ9PT1XKV8xLmN1cnJlbnQ9bnVsbDtXPy5jbG9zZSgpfX0sWyQud3NVcmxdKTtsZXQgVTE9RSgoUixRMSk9PntsMS5jdXJyZW50PXc3KF8xLmN1cnJlbnQsbDEuY3VycmVudCxSLFExKX0sW10pLHcxPUUoKFIpPT5VMSgzLFIpLFtVMV0pLGQxPUUoKFIpPT5VMSg1LFIpLFtVMV0pLHQxPUUoKFIpPT5VMSg0LHtidXR0b246Un0pLFtVMV0pLGcxPUUoKHtwaGFzZTpSLGJ1dHRvbjpRMX0pPT57aWYoUTEudXNhZ2VQYWdlPT1udWxsfHxRMS51c2FnZT09bnVsbClyZXR1cm47VTEoNCx7YnV0dG9uOlExLm5hbWUscGFnZTpRMS51c2FnZVBhZ2UsdXNhZ2U6UTEudXNhZ2UscGhhc2U6Un0pfSxbVTFdKSxyMT1FKChSKT0+VTEoMTAse2RlbHRhOlJ9KSxbVTFdKSwkMD1FKChSKT0+VTEoMTEsUiksW1UxXSksQjA9RSgoUik9PntuKChRMSk9PlExJiZRMS53aWR0aD09PVIud2lkdGgmJlExLmhlaWdodD09PVIuaGVpZ2h0JiZRMS5vcmllbnRhdGlvbj09PVIub3JpZW50YXRpb24/UTE6Uil9LFtdKSxzMT1FKChSKT0+e1UxKDcse29yaWVudGF0aW9uOlJ9KX0sW1UxXSksZzA9Zy5vcmllbnRhdGlvbj8/InBvcnRyYWl0IixtMT1MIT09IndhdGNoIiYmTCE9PSJ2aXNpb24iLEcwPUUoKFIpPT57aWYoIW0xKXJldHVybjtsZXQgUTE9KFI9PT0ibGVmdCI/eTI6YjMpW2cwXTtzMShRMSl9LFttMSxnMCxzMV0pO2IoKCk9PntuKG51bGwpLFYxKG51bGwpfSxbJC5zdHJlYW1VcmxdKSxiKCgpPT57bGV0IFI9UztpZighUilyZXR1cm47bigoUTEpPT5RMSYmUTEud2lkdGg9PT1SLndpZHRoJiZRMS5oZWlnaHQ9PT1SLmhlaWdodCYmUTEub3JpZW50YXRpb249PT1SLm9yaWVudGF0aW9uP1ExOm51bGwpfSxbUyxTPy53aWR0aCxTPy5oZWlnaHQsUz8ub3JpZW50YXRpb25dKTtsZXQgUTA9RSgoUixRMSk9PntVMSg2LHt0eXBlOlIsdXNhZ2U6UTF9KX0sW1UxXSksW0QwLGMxXT1BKG51bGwpLFthMSxQMF09QSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO2xldCBSPU51bWJlcih3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oInNlcnZlLXNpbTp0b29scy1wYW5lbC13aWR0aCIpKSxRMT1OdW1iZXIuaXNGaW5pdGUoUikmJlI+MD9SOl84O3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49UTErNDgwfSkse3dpZHRoOlIxLG9uUG9pbnRlckRvd246TzB9PVYzKCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiLF84LDI0MCw3MjApLHt3aWR0aDpOMCxvblBvaW50ZXJEb3duOlAxfT1WMygic2VydmUtc2ltOmRldnRvb2xzLXBhbmVsLXdpZHRoIixUNyw0MjAsMTQwMCksW2IxLFowXT1BKCgpPT50eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuaW5uZXJXaWR0aDowKSxbRjAsejBdPUEoKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lckhlaWdodDowKTtiKCgpPT57bGV0IFI9KCk9PntaMCh3aW5kb3cuaW5uZXJXaWR0aCksejAod2luZG93LmlubmVySGVpZ2h0KX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLFIpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixSKX0sW10pLGIoKCk9PntsZXQgUj1TMCgkLmFwcFN0YXRlRW5kcG9pbnQ/P2oxKCJhcHBzdGF0ZSIpKSxRMT1udWxsO3JldHVybiBSLm9ubWVzc2FnZT0oVyk9Pnt0cnl7bGV0IE09SlNPTi5wYXJzZShXLmRhdGEpO2lmKFExKWNsZWFyVGltZW91dChRMSk7bGV0IHk9TT8uaXNSZWFjdE5hdGl2ZT8wOjYwMDtRMT1zZXRUaW1lb3V0KCgpPT5jMShNKSx5KX1jYXRjaHt9fSwoKT0+e2lmKFExKWNsZWFyVGltZW91dChRMSk7Ui5jbG9zZSgpfX0sWyQuYXBwU3RhdGVFbmRwb2ludF0pO2xldCBNMD1FKGFzeW5jKCk9PntRMCgiZG93biIsMjEpLGF3YWl0IG5ldyBQcm9taXNlKChRMSk9PnNldFRpbWVvdXQoUTEsMzApKSxRMCgidXAiLDIxKX0sW1EwXSksSzE9VChudWxsKSxbRCxkXT1BKDApLFthLEYxXT1BKDApO2IoKCk9PntsZXQgUj1LMS5jdXJyZW50O2lmKCFSfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgUTE9bmV3IFJlc2l6ZU9ic2VydmVyKChXKT0+e2xldCBNPVdbMF0/LmNvbnRlbnRSZWN0O2QoTT8ud2lkdGg/PzApLEYxKE0/LmhlaWdodD8/MCl9KTtyZXR1cm4gUTEub2JzZXJ2ZShSKSwoKT0+UTEuZGlzY29ubmVjdCgpfSxbXSk7bGV0W0IxLE4xXT1BKCEwKSxmMT1UKCEwKTtmMS5jdXJyZW50PUIxO2xldCBwMT1UKG5ldyBTZXQpO2IoKCk9PntsZXQgUj0oUTEpPT57bGV0IFc9ISFLMS5jdXJyZW50Py5jb250YWlucyhRMS50YXJnZXQpO04xKFcpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFIsITApLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsUiwhMCl9LFtdKSxiKCgpPT57aWYoQjEpcmV0dXJuO2xldCBSPXAxLmN1cnJlbnQ7aWYoUi5zaXplPT09MClyZXR1cm47Zm9yKGxldCBRMSBvZiBSKVUxKDYse3R5cGU6InVwIix1c2FnZTpRMX0pO1IuY2xlYXIoKX0sW0IxLFUxXSksYigoKT0+e2xldCBSPShNLHkpPT57aWYoIWYxLmN1cnJlbnQpcmV0dXJuO2lmKE0uY29kZT09PSJLZXlIIiYmTS5tZXRhS2V5JiZNLnNoaWZ0S2V5KXtpZihNLnByZXZlbnREZWZhdWx0KCkseT09PSJkb3duIiYmIU0ucmVwZWF0KVUxKDQse2J1dHRvbjoiaG9tZSJ9KTtyZXR1cm59aWYoKE0uY29kZT09PSJBcnJvd0xlZnQifHxNLmNvZGU9PT0iQXJyb3dSaWdodCIpJiZNLm1ldGFLZXkmJiFNLnNoaWZ0S2V5JiYhTS5hbHRLZXkmJiFNLmN0cmxLZXkpe2lmKE0ucHJldmVudERlZmF1bHQoKSx5PT09ImRvd24iJiYhTS5yZXBlYXQpRzAoTS5jb2RlPT09IkFycm93TGVmdCI/ImxlZnQiOiJyaWdodCIpO3JldHVybn1pZihNLmNvZGU9PT0iS2V5QSImJk0ubWV0YUtleSYmTS5zaGlmdEtleSl7aWYoTS5wcmV2ZW50RGVmYXVsdCgpLHk9PT0iZG93biImJiFNLnJlcGVhdClJMShgeGNydW4gc2ltY3RsIHVpICR7JC5kZXZpY2V9IGFwcGVhcmFuY2VgKS50aGVuKChlKT0+e2xldCBZMT1lLnN0ZG91dC50cmltKCk9PT0iZGFyayI/ImxpZ2h0IjoiZGFyayI7cmV0dXJuIEkxKGB4Y3J1biBzaW1jdGwgdWkgJHskLmRldmljZX0gYXBwZWFyYW5jZSAke1kxfWApfSkuY2F0Y2goKCk9Pnt9KTtyZXR1cm59aWYoTS5jb2RlPT09IktleUsiJiZNLm1ldGFLZXkmJiFNLnNoaWZ0S2V5JiYhTS5hbHRLZXkmJiFNLmN0cmxLZXkpe2lmKE0ucHJldmVudERlZmF1bHQoKSx5PT09ImRvd24iJiYhTS5yZXBlYXQpVTEoMTIse30pO3JldHVybn1sZXQgdj1QNyhNLmNvZGUpO2lmKHY9PW51bGwpcmV0dXJuO2lmKE0ucHJldmVudERlZmF1bHQoKSx5PT09ImRvd24iKXAxLmN1cnJlbnQuYWRkKHYpO2Vsc2UgcDEuY3VycmVudC5kZWxldGUodik7VTEoNix7dHlwZTp5LHVzYWdlOnZ9KX0sUTE9KE0pPT5SKE0sImRvd24iKSxXPShNKT0+UihNLCJ1cCIpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsUTEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsVyksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsUTEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsVyl9fSxbVTEsJC5kZXZpY2UsRzBdKTtsZXQgeDE9VTcoKSxBMD1ONygkLmRldmljZSksWDA9JDcoe2V4ZWM6STEsdWRpZDokLmRldmljZSxlbmFibGVkOlUsb25VcGxvYWRTdGFydDp4MS5hZGQsb25VcGxvYWRQcm9ncmVzczp4MS5zZXRQcm9ncmVzcyxvblVwbG9hZEVuZDooUixRMSxXKT0+eDEudXBkYXRlKFIse3N0YXR1czpRMT8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOld9KSxvblVuc3VwcG9ydGVkOihSKT0+e2xldCBRMT14MS5hZGQoUi5uYW1lLCJtZWRpYSIpO3gxLnVwZGF0ZShRMSx7c3RhdHVzOiJlcnJvciIsbWVzc2FnZTpgVW5zdXBwb3J0ZWQ6ICR7Ui50eXBlfHxrMihSKX1gfSl9LG9uSG9zdFBhdGhEcm9wOkEwLmRpc21pc3N9KSxUMT1MNyh7ZGVmYXVsdFdpZHRoOm4xLHZpZXdwb3J0V2lkdGg6YjEsdmlld3BvcnRIZWlnaHQ6RjAsYXNwZWN0UmF0aW86QTEsb25TdGFydDooKT0+TjEoITEpfSksTDA9MTIsVDA9MjQsajA9RD4wP01hdGgubWluKEQsVDEud2lkdGgpOlQxLndpZHRoLGswPShSKT0+e2lmKFI8PTApcmV0dXJuIDA7bGV0IFExPWIxLUwwLVIsTT1iMS8yK2owLzItKFExLVQwKTtpZihNPD0wKXJldHVybiAwO2xldCB5PTIqTTtyZXR1cm4geTw9UitUMD95OjB9LEI1PWswKHE/TjA6YTE/UjE6MCksTjU9azAoQj96OjApO3JldHVybiBaKHE2LHtlbmRwb2ludDpLPyQ/LmF4RW5kcG9pbnQ6dm9pZCAwLGNoaWxkcmVuOlooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC1zY3JlZW4gYmctcGFnZSBweS02IGdhcC0zIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIiLHN0eWxlOntwYWRkaW5nTGVmdDoyNCtONSxwYWRkaW5nUmlnaHQ6MjQrQjUsdHJhbnNpdGlvbjpUMS5pc1Jlc2l6aW5nfHxUMS5pc0luZXJ0aWE/Im5vbmUiOkQ2fSxjaGlsZHJlbjpbWigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyBtaW4tdy0wIixzdHlsZTp7d2lkdGg6VDEud2lkdGgsdHJhbnNpdGlvbjpUMS5pc1Jlc2l6aW5nfHxUMS5pc0luZXJ0aWE/ZTM6JDh9LGNoaWxkcmVuOltaKGkxLHtleGVjOkkxLG9uUm90YXRlOnMxLG9yaWVudGF0aW9uOmcub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOlEsZGV2aWNlUnVudGltZTpKLHN0cmVhbWluZzpVLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIHN0YXR1cyIsc3R5bGU6e2FsaWduU2VsZjoiY2VudGVyIix3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsZmxleFdyYXA6Im5vd3JhcCIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsZ2FwOjEwLHBhZGRpbmc6IjZweCAxMHB4Iixib3JkZXJSYWRpdXM6MTh9LGNoaWxkcmVuOltaKGkxLlRpdGxlLHtvbkNsaWNrOigpPT5OKChSKT0+IVIpLCJhcmlhLWxhYmVsIjoiVG9nZ2xlIHNpbXVsYXRvcnMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6Qix0aXRsZToiU2ltdWxhdG9ycyIsaGlkZVN1YnRpdGxlOiEwLGhpZGVDaGV2cm9uOiEwLHN0eWxlOnttYXhXaWR0aDoibWluKDIzMHB4LCBjYWxjKDEwMHZ3IC0gMTcwcHgpKSJ9fSksWigkNCx7c3RyZWFtaW5nOlV9KV19KSxaKCJkaXYiLHtyZWY6SzEsY2xhc3NOYW1lOiJyZWxhdGl2ZSBtYXgtaC1mdWxsIixzdHlsZTp7d2lkdGg6VDEud2lkdGgsYXNwZWN0UmF0aW86djEsdHJhbnNpdGlvbjpUMS5pc1Jlc2l6aW5nfHxUMS5pc0luZXJ0aWE/ZTM6JDgsd2lsbENoYW5nZTpUMS5pc1Jlc2l6aW5nfHxUMS5pc0luZXJ0aWE/IndpZHRoIjp2b2lkIDB9LC4uLlgwLmRyb3Bab25lUHJvcHMsY2hpbGRyZW46WygoKT0+e2xldCBSPVooVDUse3VybDokLnVybCx3c1VybDokLndzVXJsLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixib3JkZXI6Im5vbmUiLHBvaW50ZXJFdmVudHM6VDEuaXNSZXNpemluZ3x8VDEuaXNJbmVydGlhPyJub25lIjp2b2lkIDB9LGltYWdlU3R5bGU6e2JvcmRlclJhZGl1czprMT8wOl8sY29ybmVyU2hhcGU6azE/dm9pZCAwOiJzdXBlcmVsbGlwc2UoMS4zKSIsLi4uazE/e306e2JveFNoYWRvdzoiaW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSJ9fSxoaWRlQ29udHJvbHM6ITAsb25TdHJlYW1pbmdDaGFuZ2U6RixvblN0cmVhbVRvdWNoOncxLG9uU3RyZWFtTXVsdGlUb3VjaDpkMSxvblN0cmVhbUJ1dHRvbjp0MSxvblN0cmVhbURpZ2l0YWxDcm93bjpyMSxvblN0cmVhbVNjcm9sbDokMCxzdHJlYW1Nb2RlOnQ/IndlYnJ0YyI6SjE/ImF2Y2MiOiJtanBlZyIsd2ViUnRjU3RyZWFtOmkuc3RyZWFtLG9uV2ViUnRjRnJhbWU6aS5tYXJrRnJhbWVEZWNvZGVkLHN0cmVhbUVycm9yOnQ/aS5lcnJvcjpudWxsLG9uQXZjY0Vycm9yOigpPT56MSgiZXJyb3IiKSxvbkF2Y2NEZWNvZGVkRnJhbWU6KCk9PnoxKCJkZWNvZGVkLWZyYW1lIiksc3Vic2NyaWJlRnJhbWU6SjE/dm9pZCAwOkcxLnN1YnNjcmliZUZyYW1lLHN0cmVhbUZyYW1lOkoxP3ZvaWQgMDpHMS5mcmFtZSxzdHJlYW1Db25maWc6ZyxlbmFibGVEaWdpdGFsQ3Jvd246TD09PSJ3YXRjaCIsb25TY3JlZW5Db25maWdDaGFuZ2U6QjB9KSxRMT1aKFoxLHtjaGlsZHJlbjpbUixLJiZaKFk2LHt9KV19KTtpZighazEpcmV0dXJuIFExO3JldHVybiBaKGQ1LHtjaHJvbWU6WCxpbnRlcmFjdGl2ZTohMCxvbkJ1dHRvbjpnMSxvbkNyb3duV2hlZWw6KFcsTSk9PntsZXQgeT1TMihXLE0sYXx8MSk7aWYoeSE9bnVsbClyMSh5KX0sc2NyZWVuOlExfSl9KSgpLFgwLmlzRHJhZ092ZXImJlooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1hY2NlbnQgYmctW3JnYmEoOTksMTAyLDI0MSwwLjE4KV0gdGV4dC1hY2NlbnQgcG9pbnRlci1ldmVudHMtbm9uZSB6LTIwIixzdHlsZTp7Ym9yZGVyUmFkaXVzOmsxP3ZvaWQgMDpffSxjaGlsZHJlbjpbWihvMix7c2l6ZTozMixzdHJva2VXaWR0aDoxLjV9KSxaKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LW1lZGl1bSIsY2hpbGRyZW46IkRyb3AgbWVkaWEgb3IgLmlwYSJ9KV19KSxaKG82LHtzaW11bGF0b3JSZXNpemU6VDEsZGV2aWNlVHlwZTpMLHN0cmVhbUNvbmZpZzpnLGNvbnRhaW5lcldpZHRoOkR8fFQxLndpZHRoLGNvbnRhaW5lckhlaWdodDphfHwoQTE+MD9UMS53aWR0aC9BMTowKX0pLFooZTYse3dpZHRoOkR8fFQxLndpZHRoLGhlaWdodDphfHwoQTE+MD9UMS53aWR0aC9BMTowKSx2aXNpYmxlOlQxLmlzUmVzaXppbmd8fFQxLmlzSW5lcnRpYX0pXX0pLFooImRpdiIse2NsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIG1heC13LWZ1bGwiLGNoaWxkcmVuOltaKGkxLHtleGVjOkkxLG9uUm90YXRlOnMxLG9yaWVudGF0aW9uOmcub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOlEsZGV2aWNlUnVudGltZTpKLHN0cmVhbWluZzpVLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIGFjdGlvbnMiLHN0eWxlOnthbGlnblNlbGY6ImNlbnRlciIsd2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLHBhZGRpbmc6IjZweCA4cHgiLGJvcmRlclJhZGl1czoxOH0sY2hpbGRyZW46WihpMS5BY3Rpb25zLHtjaGlsZHJlbjpbRDA/LmlzUmVhY3ROYXRpdmUmJlooaTEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6IlJlbG9hZCBSZWFjdCBOYXRpdmUgYnVuZGxlIix0aXRsZToiUmVsb2FkIChSKSIsb25DbGljazooKT0+dm9pZCBNMCgpLGNoaWxkcmVuOlooczAse30pfSksWihpMS5Ib21lQnV0dG9uLHt0aXRsZToiSG9tZSJ9KSxaKGkxLlNjcmVlbnNob3RCdXR0b24se3RpdGxlOiJTY3JlZW5zaG90IixvbkNsaWNrOihSKT0+e1IucHJldmVudERlZmF1bHQoKSxBMC5jYXB0dXJlKCl9fSksWihpMS5Sb3RhdGVCdXR0b24se3RpdGxlOiJSb3RhdGUgZGV2aWNlIn0pXX0pfSksWihpMSx7ZXhlYzpJMSxvblJvdGF0ZTpzMSxvcmllbnRhdGlvbjpnLm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpRLGRldmljZVJ1bnRpbWU6SixzdHJlYW1pbmc6VSwiYXJpYS1sYWJlbCI6IkFjY2Vzc2liaWxpdHkgb3ZlcmxheSIsc3R5bGU6e3dpZHRoOiJhdXRvIixtaW5XaWR0aDowLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLHBhZGRpbmc6Nixib3JkZXJSYWRpdXM6MjJ9LGNoaWxkcmVuOlooRzYse292ZXJsYXlFbmFibGVkOkssc3RyZWFtaW5nOlUsb25Ub2dnbGVPdmVybGF5OigpPT5ZKChSKT0+IVIpfSl9KV19KV19KSxaKCJkaXYiLHtjbGFzc05hbWU6YGZpeGVkIHRvcC0zIHJpZ2h0LTMgZmxleCBmbGV4LWNvbCBnYXAtMSBwLTEgYmctcGFuZWwtYmcgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIGJhY2tkcm9wLWJsdXItWzEycHhdIFstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMThzX2Vhc2VdIHotNDAgJHthMXx8cT8ib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUiOiJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIn1gLGNoaWxkcmVuOltaKCJidXR0b24iLHtvbkNsaWNrOigpPT57RyghMSksUDAoKFIpPT4hUil9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gdG9vbHMgcGFuZWwiLCJhcmlhLXByZXNzZWQiOmExLHRpdGxlOiJUb29scyIsY2hpbGRyZW46WihsMix7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxaKCJidXR0b24iLHtvbkNsaWNrOigpPT57UDAoITEpLEcoKFIpPT4hUil9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gV2ViS2l0IERldlRvb2xzIiwiYXJpYS1wcmVzc2VkIjpxLHRpdGxlOiJXZWJLaXQgRGV2VG9vbHMiLGNoaWxkcmVuOloocDIse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSldfSksWihpNCx7b3BlbjphMSxvbkNsb3NlOigpPT5QMCghMSksdWRpZDokLmRldmljZSxkZXZpY2VSdW50aW1lOkosY3VycmVudEFwcDpEMCxldmVudExvZ0V2ZW50c0VuZHBvaW50OiQuZXZlbnRMb2dFdmVudHNFbmRwb2ludCxtZXRyaWNzRW5kcG9pbnQ6JC5tZXRyaWNzRW5kcG9pbnQsYXhPdmVybGF5RW5hYmxlZDpLLG9uVG9nZ2xlQXhPdmVybGF5OigpPT5ZKChSKT0+IVIpLHN0cmVhbVNldHRpbmdzOkksb25TdHJlYW1QbGF5YmFja1NldHRpbmdzQ2hhbmdlOmsudXBkYXRlUGxheWJhY2ssb25TdHJlYW1FbmNvZGVyU2V0dGluZ3NDaGFuZ2U6ay51cGRhdGVFbmNvZGVyLGFjdGl2ZUNvZGVjOnQ/YHdlYnJ0Yy8ke299YDpKMT8iaDI2NCI6Im1qcGVnIixwZWVyQ29ubmVjdGlvbjppLnBlZXJDb25uZWN0aW9uLHdlYnJ0Y1Nlc3Npb25JZDppLnNlc3Npb25JZCx3ZWJydGNTdGF0c1VybDokNigkKSxhdmNjU3VwcG9ydGVkOk8uc3VwcG9ydGVkLHN0cmVhbVNldHRpbmdzUGVuZGluZzprLnBlbmRpbmd8fCFrLmVuY29kZXJTZXR0aW5nc0F2YWlsYWJsZSx3aWR0aDpSMX0pLFoobzUse3BhbmVsV2lkdGg6UjEsdmlzaWJsZTphMSxvblBvaW50ZXJEb3duOk8wLGFyaWFMYWJlbDoiUmVzaXplIHRvb2xzIHBhbmVsIn0pLFooZTQse29wZW46cSxvbkNsb3NlOigpPT5HKCExKSx1ZGlkOiQuZGV2aWNlLHRhcmdldHM6SC50YXJnZXRzLHNlbGVjdGVkVGFyZ2V0SWQ6VixvblNlbGVjdFRhcmdldDpDLGxvYWRpbmc6SC5sb2FkaW5nLGVycm9yOkguZXJyb3Isb25SZWZyZXNoOigpPT52b2lkIEgucmVmcmVzaCgpLHdpZHRoOk4wfSksWihvNSx7cGFuZWxXaWR0aDpOMCx2aXNpYmxlOnEsb25Qb2ludGVyRG93bjpQMSxhcmlhTGFiZWw6IlJlc2l6ZSBXZWJLaXQgRGV2VG9vbHMgcGFuZWwifSldfSl9KX1MOShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpKS5yZW5kZXIoWihWWCx7fSkpOwo8L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=","base64").toString("utf-8");return a8}function y1(){return new Promise(($)=>{L0("xcrun",["simctl","list","devices","-j"],{encoding:"utf-8",timeout:3000},(Q,Z)=>{if(Q)return $([]);try{let J=JSON.parse(Z),Y=[];for(let[X,G]of Object.entries(J.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(X))continue;for(let H of G){if(H.isAvailable===!1)continue;Y.push({...H,runtime:X.replace(/^.*SimRuntime\./,"")})}}$(Y)}catch{$([])}})})}var k1=1610612736;function f1(){try{let $=Number(X4("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Q=Number(X4("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Z=X4("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),J=(X)=>{let G=Z.match(X);return G?Number(G[1]):0},Y=J(/Pages free:\s+(\d+)/)+J(/Pages inactive:\s+(\d+)/)+J(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite($)?$:0,availableBytes:Y*(Number.isFinite(Q)?Q:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function v1(){try{let $=X4("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),Q={},Z=0,J=/\/Devices\/([0-9A-F-]{36})\//i;for(let Y of $.split(`
|
|
81
|
+
`)){let X=Y.trimStart();if(!X)continue;let G=J.exec(X);if(!G)continue;let H=Number(X.split(/\s+/,1)[0]);if(!Number.isFinite(H))continue;let K=H*1024,W=G[1].toUpperCase();Q[W]=(Q[W]??0)+K,Z+=K}return{perUdid:Q,totalBytes:Z}}catch{return{perUdid:{},totalBytes:0}}}function b1(){let{totalBytes:$,availableBytes:Q}=f1(),Z=v1(),J=Object.keys(Z.perUdid).length,Y=J>0?Z.totalBytes/J:0,X=Y>=268435456?"measured":"estimated",G=X==="measured"?Y:k1,H=G>0?Math.max(0,Math.floor(Q/G)):0;return{totalBytes:$,availableBytes:Q,runningSimulators:J,perSimAvgBytes:G,perSimSource:X,estimatedAdditional:H}}function m$($){if($==="auto"||$==="h264"||$==="mjpeg")return{transport:"http",codec:$};return}function h1($,Q){let Z=Buffer.from($),J=Buffer.from(Q);if(Z.length!==J.length)return!1;return X1(Z,J)}function g1($){if(!$)return!1;return $.split(";",1)[0].trim().toLowerCase()==="application/json"}function u1($,Q,Z,J=h$,Y=[],X=x0){if(!Z){Q.writeHead(404),Q.end("No serve-sim device");return}Q.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no",...k9($.headers.origin,Y)}),Q.write(`:
|
|
82
82
|
|
|
83
83
|
`);let G=X.subscribe(Z.device),{meta:H,unsubscribe:K}=J.subscribe(Z.device,(z)=>{if(!Q.writableEnded)Q.write("data: "+JSON.stringify(z)+`
|
|
84
84
|
|
|
@@ -87,41 +87,41 @@ data: `+JSON.stringify(H)+`
|
|
|
87
87
|
|
|
88
88
|
`);let W=setInterval(()=>{if(!Q.writableEnded)Q.write(`:
|
|
89
89
|
|
|
90
|
-
`)},15000);$.on("close",()=>{clearInterval(W),K(),G.unsubscribe()})}function
|
|
90
|
+
`)},15000);$.on("close",()=>{clearInterval(W),K(),G.unsubscribe()})}function r3($){let Q=$?.streamSettings??m$($?.codec),Z=($?.basePath??"/.sim").replace(/\/+$/,""),J=B1(Z),Y=U1(Z),X=$?.proxyHelpers??!1,G=$?.inspectWebKitBridge??I1,H=$?.execToken??P$(32).toString("base64url"),K=$?.metricsCorsOrigins??[],W=async(U)=>{let M=U??{};if(typeof M.device!=="string"||!/^[0-9A-Za-z-]+$/.test(M.device))throw Error("missing or invalid device udid");if(M.option===void 0)return{status:await l6(M.device)};if(!A0[M.option])throw Error(`unknown option: ${M.option}`);let D=typeof M.value==="string"?p6(M.option,M.value):null;if(D===null)throw Error(`invalid value for ${M.option}: ${M.value}`);await m6(M.device,M.option,D);try{z0({device:M.device,source:"ui",kind:"ui-setting",action:M.option,status:"ok",summary:`UI ${M.option} ${D}`,details:{option:M.option,value:D}})}catch{}return{ok:!0}},z=async(U,M,D)=>{let I=U.url??"",E=I.indexOf("?"),O=E===-1?I:I.slice(0,E),j=y$(I),R=j??$?.device??null,T=Z==="/"?"/devtools-frontend":`${Z}/devtools-frontend`,N=n8(I,J);if(N){let V=N.device??R;if(C1(U,M,V,N.upstreamPath,Q))return;M.writeHead(404,{"Content-Type":"text/plain; charset=utf-8"}),M.end("No serve-sim device");return}if(O===T||O.startsWith(`${T}/`)){let V=O===T?"inspector.html":O.slice(T.length+1);if(V.split("/").some((F)=>F==="..")){M.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),M.end("Invalid asset path");return}try{let F=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${G1}/${V}${E===-1?"":I.slice(E)}`),_={"Cache-Control":"public, max-age=604800"},C=F.headers.get("content-type");if(C)_["Content-Type"]=C;M.writeHead(F.status,_),M.end(Buffer.from(await F.arrayBuffer()))}catch(F){M.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),M.end(F instanceof Error?F.message:"Failed to load DevTools frontend")}return}if(O===Z||O===Z+"/"){let V=await Y0(),F=V0(V,R),_=w1();if(!F){let C=JSON.stringify({basePath:Z,execToken:H});_=_.replace("<!--__SIM_PREVIEW_CONFIG__-->",`<script>window.__SIM_PREVIEW__=${C}</script>`)}if(F){let C=y4(F,Y4(U),Z,k4(U),X),q=`<script>window.__SIM_PREVIEW__=${JSON.stringify(o8(C,Z,r8(),H,Q,X))}</script>`;_=_.replace("<!--__SIM_PREVIEW_CONFIG__-->",q)}M.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),M.end(_);return}if(O===Z+"/grid/api/memory"){M.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),M.end(JSON.stringify(b1()));return}if(O===Z+"/grid/api/devicekit-chrome"){D6(new URL(I||"/","http://serve-sim.local"),M);return}if(O===Z+"/grid/api/device-placeholder-asset"){P6(new URL(I||"/","http://serve-sim.local"),M);return}if(O===Z+"/grid/api"){let V=await Y0(),F=new Map(V.map((f)=>[f.device,f])),_=await y1(),C=_1(),P=(f)=>{if(/iphone/i.test(f))return 0;if(/ipad/i.test(f))return 1;if(/watch/i.test(f))return 2;if(/(apple\s*tv|^tv\b)/i.test(f))return 3;if(/vision|reality/i.test(f))return 4;return 5},q=(f)=>{if(F.has(f.udid))return 0;if(R&&f.udid===R)return 1;if(f.state==="Booted")return 2;if(f.udid===C)return 3;return 4},w=(f)=>{let m=f.match(/-(\d+)-(\d+)/),a=m?Number(m[1]):0,W0=m?Number(m[2]):0;return-(a*1000+W0)};_.sort((f,m)=>q(f)-q(m)||P(f.name)-P(m.name)||f.name.localeCompare(m.name)||w(f.runtime)-w(m.runtime));let k=_.length,{limit:y,offset:g}=N1(I),x=(y==null?_:_.slice(g,g+y)).map((f)=>{let m=F.get(f.udid),a=m?y4(m,Y4(U),Z,k4(U),X):null;return{device:f.udid,name:f.name,runtime:f.runtime,state:f.state,chrome:R6(f),placeholderAsset:C6(f),helper:a?{port:a.port,url:a.url,streamUrl:a.streamUrl,wsUrl:a.wsUrl}:null}});M.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),M.end(JSON.stringify({devices:x,total:k,offset:y==null?0:g,limit:y??k}));return}if(O===Z+"/grid/api/shutdown"&&U.method==="POST"){let V="";U.on("data",(F)=>{V+=typeof F==="string"?F:F.toString()}),U.on("end",()=>{let F="";try{F=JSON.parse(V).udid??""}catch{}if(!/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(F)){M.writeHead(400,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}W8(F),b0={at:0,booted:null,names:new Map},L0("xcrun",["simctl","shutdown",F],{timeout:30000},(_,C,P)=>{if(_){M.writeHead(500,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!1,error:P?.toString().trim()||_.message}));return}M.writeHead(200,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!0}))})});return}if(O===Z+"/grid/api/start"&&U.method==="POST"){let V="";U.on("data",(F)=>{V+=typeof F==="string"?F:F.toString()}),U.on("end",()=>{let F="";try{F=JSON.parse(V).udid??""}catch{}if(!/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(F)){M.writeHead(400,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let _=U.socket.localPort??0;D1(F,_,Z,Q).then((C)=>{if(M.writableEnded)return;if(C)M.writeHead(500,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!1,error:C}));else M.writeHead(200,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!0}))})});return}if(O===Z+"/devtools"){let V=await Y0();if(!V0(V,R)){M.writeHead(404,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:"No serve-sim device"}));return}try{let _=await G(),C=await _.listTargets(),P=X?q1(U):"ws",q=X?`${Y4(U)??`127.0.0.1:${_.port}`}${Y}`:`127.0.0.1:${_.port}/devtools`,w=C.map((k)=>({...k,webSocketDebuggerUrl:`${P}://${q}/page/${encodeURIComponent(k.id)}`,devtoolsFrontendUrl:S1(T,P,q,k.id)}));M.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),M.end(JSON.stringify({port:_.port,targets:w}))}catch(_){M.writeHead(500,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:_ instanceof Error?_.message:"Failed to start inspect-webkit"}))}return}if(O===Z+"/devtools/release"&&U.method==="POST"){let V="";U.on("data",(F)=>V+=F),U.on("end",async()=>{try{let F=V?JSON.parse(V):{};(await G()).releaseHighlight?.(F.targetId),M.writeHead(200,{"Content-Type":"application/json"}),M.end("{}")}catch(F){M.writeHead(500,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:F instanceof Error?F.message:"Failed to release"}))}});return}if(O===Z+"/devtools/highlight"&&U.method==="POST"){let V="";U.on("data",(F)=>V+=F),U.on("end",async()=>{try{let{targetId:F,on:_}=JSON.parse(V||"{}");if(!F){M.writeHead(400,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:"Missing targetId"}));return}let C=await G();if(!C.highlightTarget){M.writeHead(501,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await C.highlightTarget(F,!!_),M.writeHead(200,{"Content-Type":"application/json"}),M.end("{}")}catch(F){M.writeHead(500,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:F instanceof Error?F.message:"Failed to highlight target"}))}});return}if(O===Z+"/healthz"){M.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),M.end(JSON.stringify({status:"ok"}));return}if(O===Z+"/readyz"){let V=await Y0(),F=V0(V,R);if(!F){M.writeHead(503,{"Content-Type":"application/json","Cache-Control":"no-store"}),M.end(JSON.stringify({status:"starting"}));return}try{await a0(F.device,Q).start(),M.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),M.end(JSON.stringify({status:"ready",device:F.device}))}catch{M.writeHead(503,{"Content-Type":"application/json","Cache-Control":"no-store"}),M.end(JSON.stringify({status:"starting"}))}return}if(O===Z+"/api"){let V=await Y0(),F=V0(V,R),_=`${R??"(any)"}|${V.length}|${F?`${F.device}@${F.port}`:"none"}`;if(_!==E$)E$=_,s0("GET /api selectedDevice=%s states=%d chose=%s",R??"(any)",V.length,F?`${F.device}@${F.port}`:"none");M.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"});let C=F?y4(F,Y4(U),Z,k4(U),X):null;M.end(JSON.stringify(C?o8(C,Z,r8(),H,Q,X):null));return}if(O===Z+"/api/screenshot"){if(U.method!=="POST"){M.writeHead(405,{...J4,"Content-Type":"text/plain; charset=utf-8"}),M.end("method not allowed");return}let V=R;if(V&&!s8(V)){M.writeHead(400,{...J4,"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!1,error:"Invalid simulator device ID"}));return}if(!V){let _=await g$();V=(_&&[..._][0])??null}if(!V){M.writeHead(400,{...J4,"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!1,error:"No booted simulator to screenshot"}));return}let F=f4(b$(),`serve-sim-screenshot-${P$(8).toString("hex")}.png`);try{await new Promise((C,P)=>{L0("xcrun",["simctl","io",V,"screenshot",F],{timeout:5000},(q,w,k)=>{if(q)P(Object.assign(q,{stderr:k?.toString()}));else C()})});let _=await e2(F);M.writeHead(200,{...J4,"Content-Type":"image/png"}),M.end(_)}catch(_){let C=_.stderr,P=typeof C==="string"&&C.trim()||(_ instanceof Error?_.message:String(_));M.writeHead(500,{...J4,"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!1,error:P}))}finally{await $1(F).catch(()=>{})}return}if(O===Z+"/api/event-log"){M.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),M.end(JSON.stringify({events:Z8({device:j,sinceId:q$(I),limit:x$(I)})}));return}if(O===Z+"/api/event-log/events"){M.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),M.write(`:
|
|
91
91
|
|
|
92
|
-
`),M.write("data: "+JSON.stringify({events:
|
|
92
|
+
`),M.write("data: "+JSON.stringify({events:Z8({device:j,sinceId:q$(I),limit:x$(I)})})+`
|
|
93
93
|
|
|
94
|
-
`);let V=
|
|
94
|
+
`);let V=b9((_)=>{if(j&&_.device!==j)return;if(M.writableEnded)return;M.write("data: "+JSON.stringify({event:_})+`
|
|
95
95
|
|
|
96
96
|
`)}),F=setInterval(()=>{if(!M.writableEnded)M.write(`:
|
|
97
97
|
|
|
98
|
-
`)},15000);U.on("close",()=>{clearInterval(F),V()});return}if(O===Z+"/api/events"){let V=async()=>{let p=await
|
|
98
|
+
`)},15000);U.on("close",()=>{clearInterval(F),V()});return}if(O===Z+"/api/events"){let V=async()=>{let p=await Y0(),x=V0(p,R),f=x?y4(x,Y4(U),Z,k4(U),X):null;return JSON.stringify(f?o8(f,Z,r8(),H,Q,X):null)};M.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),M.write(`:
|
|
99
99
|
|
|
100
100
|
`);let F=await V();M.write("data: "+F+`
|
|
101
101
|
|
|
102
102
|
`);let _=!1,C=async()=>{if(_||M.writableEnded)return;let p=await V();if(p===F)return;F=p,M.write("data: "+p+`
|
|
103
103
|
|
|
104
|
-
`)},
|
|
104
|
+
`)},P=null,q=()=>{if(P)return;P=setTimeout(()=>{P=null,C()},150)},w=null,k=null,y=()=>{if(_||M.writableEnded||w||k)return;k=setTimeout(()=>{if(k=null,_||M.writableEnded||w)return;try{w=s2(t8,q),w.on("error",()=>{w?.close(),w=null,y()}),C()}catch{y()}},250)};y();let g=setInterval(()=>{if(_||M.writableEnded)return;M.write(`:
|
|
105
105
|
|
|
106
|
-
`),y()},15000);U.on("close",()=>{if(_=!0,
|
|
106
|
+
`),y()},15000);U.on("close",()=>{if(_=!0,P)clearTimeout(P);if(k)clearTimeout(k);clearInterval(g),w?.close()});return}if(O===Z+"/logs"){let V=await Y0(),F=V0(V,R);if(!F){M.writeHead(404),M.end("No serve-sim device");return}let _=F.device;M.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),M.write(`:
|
|
107
107
|
|
|
108
|
-
`);let C=
|
|
109
|
-
`))!==-1){let k=
|
|
108
|
+
`);let C=Q1("xcrun",["simctl","spawn",_,"log","stream","--style","ndjson","--level","info"],{stdio:["ignore","pipe","ignore"]}),P="";C.stdout.on("data",(q)=>{P+=q.toString();let w;while((w=P.indexOf(`
|
|
109
|
+
`))!==-1){let k=P.slice(0,w).trim();if(P=P.slice(w+1),k)M.write("data: "+k+`
|
|
110
110
|
|
|
111
|
-
`)}if(
|
|
111
|
+
`)}if(P.length>K1)P=""}),C.on("error",()=>{try{M.end()}catch{}}),C.on("close",()=>M.end()),U.on("close",()=>{C.stdout?.destroy(),C.kill()});return}if(O===Z+"/ax"){let V=await Y0(),F=V0(V,R);if(!F){M.writeHead(404),M.end("No serve-sim device");return}M.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),M.write(`:
|
|
112
112
|
|
|
113
|
-
`),
|
|
113
|
+
`),I$.prune(V.map((P)=>P.device));let C=I$.get(F.device).addClient(M);U.on("close",C);return}if(O===Z+"/metrics"){let V=await Y0(),F=V0(V,R);u1(U,M,F,h$,K);return}if((O===Z+"/exec"||O===Z+"/exec/")&&U.method==="POST"){if(!g1(U.headers["content-type"])){M.writeHead(415,{"Content-Type":"application/json"}),M.end(JSON.stringify({stdout:"",stderr:"Unsupported Media Type",exitCode:1}));return}let V=U.headers.origin;if(V)try{if(new URL(V).host!==U.headers.host){M.writeHead(403,{"Content-Type":"application/json"}),M.end(JSON.stringify({stdout:"",stderr:"Cross-origin request blocked",exitCode:1}));return}}catch{M.writeHead(403,{"Content-Type":"application/json"}),M.end(JSON.stringify({stdout:"",stderr:"Invalid Origin",exitCode:1}));return}let F=U.headers.authorization??"",_=/^Bearer\s+(.+)$/i.exec(F);if(!_||!h1(_[1].trim(),H)){M.writeHead(401,{"Content-Type":"application/json"}),M.end(JSON.stringify({stdout:"",stderr:"Unauthorized",exitCode:1}));return}let C="",P=!1;U.on("data",(q)=>{if(C+=typeof q==="string"?q:q.toString(),C.length>4194304)P=!0,M.writeHead(413,{"Content-Type":"application/json"}),M.end(JSON.stringify({stdout:"",stderr:"Payload Too Large",exitCode:1})),U.destroy()}),U.on("end",()=>{if(P)return;let q="";try{q=JSON.parse(C).command??""}catch{}if(!q){M.writeHead(400,{"Content-Type":"application/json"}),M.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}Z1(q,{maxBuffer:16777216},(w,k,y)=>{let g=w?w.code??1:0;S$(q,{exitCode:g}),M.writeHead(200,{"Content-Type":"application/json"}),M.end(JSON.stringify({stdout:k.toString(),stderr:y.toString(),exitCode:g}))})});return}if(O===Z+"/appstate"){let V=await Y0(),F=V0(V,R);if(!F){M.writeHead(404),M.end("No serve-sim device");return}let _=F.device;M.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),M.write(`:
|
|
114
114
|
|
|
115
|
-
`);let C=null,
|
|
115
|
+
`);let C=null,P=0,q=async(y)=>{if(M.writableEnded||y.bundleId===C?.bundleId&&y.pid===C.pid)return;C=y;let g=++P,p=await H1(_,y.bundleId);if(!M.writableEnded&&g===P)M.write("data: "+JSON.stringify({bundleId:y.bundleId,pid:y.pid,isReactNative:p})+`
|
|
116
116
|
|
|
117
|
-
`)},
|
|
117
|
+
`)},w=x0.subscribe(_,(y)=>void q(y)),k=x0.peek(_);if(k)q(k);U.on("close",()=>w.unsubscribe());return}if(D)return D()};z.handleUpgrade=(U,M,D)=>{let I=U.url??"",E=y$(I)??$?.device??null,O=n8(I,J),j=O1(I,Y);if(j){(async()=>{try{let T=await G();j1(U,M,D,`ws://127.0.0.1:${T.port}${j.upstreamPath}`)}catch(T){let N=T instanceof Error?T.message:"Failed to start inspect-webkit";M.end(`HTTP/1.1 502 Bad Gateway\r
|
|
118
118
|
Content-Type: text/plain; charset=utf-8\r
|
|
119
119
|
\r
|
|
120
|
-
${N}`)}})();return}if(!O){M.destroy();return}let R=O.device??E;if(O.upstreamPath==="/ws"){if(
|
|
120
|
+
${N}`)}})();return}if(!O){M.destroy();return}let R=O.device??E;if(O.upstreamPath==="/ws"){if(T1(U,M,D,R,Q))return;M.end(`HTTP/1.1 404 Not Found\r
|
|
121
121
|
\r
|
|
122
122
|
`);return}M.end(`HTTP/1.1 400 Bad Request\r
|
|
123
123
|
\r
|
|
124
|
-
`)};let L=async(U)=>{return
|
|
124
|
+
`)};let L=async(U)=>{return i6(z,U)},B=v6({path:`${Z}/exec-ws`,execToken:H,ssePrefixes:[`${Z}/api/events`,`${Z}/api/event-log/events`,`${Z}/appstate`,`${Z}/logs`,`${Z}/metrics`,`${Z}/ax`],onUiRequest:W,onCommandResult:(U,M)=>S$(U,M),onSseRequest(U,M){let D=new URL(U,M.url);return L(new Request(D,{headers:{accept:"text/event-stream"}}))}});return L.handleWebSocket=(U,M)=>{if(B(U,M))return!0;if(y9(U,M,{helperProxyTarget:(D)=>n8(D,J),fallbackDevice:$?.device??null,resolveSession:(D)=>a0(D,Q)}))return!0;return!1},L.handleUpgrade=(U,M,D)=>{z.handleUpgrade?.(U,M,D)},L}export{D1 as startDeviceInProcess,r3 as simMiddleware,V0 as selectServeSimState,y4 as rewriteStateForRequestHost,Y0 as readServeSimStates,o8 as previewConfigForState,N1 as parseGridPaging,a3 as matchInstalledAppByDisplayName,u1 as handleMetricsRequest,M1 as deviceNameFromBootedNames};
|
|
125
125
|
|
|
126
|
-
//# debugId=
|
|
126
|
+
//# debugId=066147E2CD117D1364756E2164756E21
|
|
127
127
|
//# sourceMappingURL=middleware.js.map
|